From 4db97eae7c8e60215d73f3e5e47f05fd006df8f4 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Tue, 29 Apr 2014 01:15:25 -0600 Subject: [PATCH 001/499] Set build independent binary output dir Useful for using multimple compilers (gcc/clang) with different compile-time (debug/release) --- rpcs3/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 68ef012f69..7d3f369a97 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -27,7 +27,8 @@ Else() EndIf() set(CMAKE_MODULE_PATH "${RPCS3_SRC_DIR}/cmake_modules") -set(EXECUTABLE_OUTPUT_PATH "${RPCS3_SRC_DIR}/../bin") # TODO: do real installation, including copying directory structure +# TODO: do real installation, including copying directory structure +set(EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/../bin") #include(cotire) add_definitions(-DGL_GLEXT_PROTOTYPES) From 26fc29c1a937ab2fe32e4ca0e543dcf95fcbf537 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 5 Jun 2014 14:48:31 +0800 Subject: [PATCH 002/499] cellResc : add those unimplemented and error logging --- rpcs3/Emu/GS/GCM.h | 63 ++++---- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 203 +++++++++++++++++++----- 2 files changed, 201 insertions(+), 65 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 62bf689097..2b710600da 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -24,13 +24,13 @@ enum enum { - CELL_GCM_VERTEX_S1 = 1, - CELL_GCM_VERTEX_F = 2, - CELL_GCM_VERTEX_S = 3, - CELL_GCM_VERTEX_UB = 4, - CELL_GCM_VERTEX_S32K = 5, - CELL_GCM_VERTEX_CMP = 6, - CELL_GCM_VERTEX_UB256 = 7, + CELL_GCM_VERTEX_S1 = 1, + CELL_GCM_VERTEX_F = 2, + CELL_GCM_VERTEX_S = 3, + CELL_GCM_VERTEX_UB = 4, + CELL_GCM_VERTEX_S32K = 5, + CELL_GCM_VERTEX_CMP = 6, + CELL_GCM_VERTEX_UB256 = 7, }; enum @@ -72,34 +72,43 @@ enum CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 = 0xAE, // Swizzle Flag - CELL_GCM_TEXTURE_SZ = 0x00, - CELL_GCM_TEXTURE_LN = 0x20, + CELL_GCM_TEXTURE_SZ = 0x00, + CELL_GCM_TEXTURE_LN = 0x20, // Normalization Flag - CELL_GCM_TEXTURE_NR = 0x00, - CELL_GCM_TEXTURE_UN = 0x40, + CELL_GCM_TEXTURE_NR = 0x00, + CELL_GCM_TEXTURE_UN = 0x40, }; // GCM Surface enum { - // Target - CELL_GCM_SURFACE_TARGET_NONE = 0, - CELL_GCM_SURFACE_TARGET_0 = 1, - CELL_GCM_SURFACE_TARGET_1 = 2, - CELL_GCM_SURFACE_TARGET_MRT1 = 0x13, - CELL_GCM_SURFACE_TARGET_MRT2 = 0x17, - CELL_GCM_SURFACE_TARGET_MRT3 = 0x1f, + // Surface Target + CELL_GCM_SURFACE_TARGET_NONE = 0, + CELL_GCM_SURFACE_TARGET_0 = 1, + CELL_GCM_SURFACE_TARGET_1 = 2, + CELL_GCM_SURFACE_TARGET_MRT1 = 0x13, + CELL_GCM_SURFACE_TARGET_MRT2 = 0x17, + CELL_GCM_SURFACE_TARGET_MRT3 = 0x1f, + + // Surface Depth + CELL_GCM_SURFACE_Z16 = 1, + CELL_GCM_SURFACE_Z24S8 = 2, + + // Surface Antialias + CELL_GCM_SURFACE_CENTER_1 = 2, + CELL_GCM_SURFACE_DIAGONAL_CENTERED_2 = 3, + CELL_GCM_SURFACE_SQUARE_CENTERED_4 = 4, + CELL_GCM_SURFACE_SQUARE_ROTATED_4 = 5, + + // Surface type + CELL_GCM_SURFACE_PITCH = 1, + CELL_GCM_SURFACE_SWIZZLE = 2, + + // Surface format + CELL_GCM_SURFACE_A8R8G8B8 = 8, + CELL_GCM_SURFACE_F_W16Z16Y16X16 = 11, - // Depth - CELL_GCM_SURFACE_Z16 = 1, - CELL_GCM_SURFACE_Z24S8 = 2, - - // Antialias - CELL_GCM_SURFACE_CENTER_1 = 2, - CELL_GCM_SURFACE_DIAGONAL_CENTERED_2 = 3, - CELL_GCM_SURFACE_SQUARE_CENTERED_4 = 4, - CELL_GCM_SURFACE_SQUARE_ROTATED_4 = 5, }; // GCM Reports diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index f77fb07493..ef7cea7e06 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -271,19 +271,19 @@ u8 GcmSurfaceFormat2GcmTextureFormat(u8 surfaceFormat, u8 surfaceType) { u8 result = 0; - switch(surfaceFormat){ - case 8: result = 0x85; break; //case CELL_GCM_SURFACE_A8R8G8B8: result = CELL_GCM_TEXTURE_A8R8G8B8; break; - case 11: result = 0x9A; break; //case CELL_GCM_SURFACE_F_W16Z16Y16X16: result = CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT; break; + switch (surfaceFormat){ + case CELL_GCM_SURFACE_A8R8G8B8: result = CELL_GCM_TEXTURE_A8R8G8B8; break; + case CELL_GCM_SURFACE_F_W16Z16Y16X16: result = CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT; break; default: return 0xFF; //Error } - switch(surfaceType){ - case 1: result |= 0x20; break; //case CELL_GCM_SURFACE_PITCH: result |= CELL_GCM_TEXTURE_LN; break; - case 2: result |= 0x00; break; //case CELL_GCM_SURFACE_SWIZZLE: result |= CELL_GCM_TEXTURE_SZ; break; + switch (surfaceType){ + case CELL_GCM_SURFACE_PITCH: result |= CELL_GCM_TEXTURE_LN; break; + case CELL_GCM_SURFACE_SWIZZLE: result |= CELL_GCM_TEXTURE_SZ; break; default: return 0xFF; //Error } - result |= 0x00; //result |= CELL_GCM_TEXTURE_NR + result |= CELL_GCM_TEXTURE_NR; return result; } @@ -418,10 +418,16 @@ int cellRescInit(mem_ptr_t initConfig) { cellResc.Warning("cellRescInit(initConfig_addr=0x%x)", initConfig.GetAddr()); - if(s_rescInternalInstance->m_bInitialized) + if (s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescInit : CELL_RESC_ERROR_REINITIALIZED"); return CELL_RESC_ERROR_REINITIALIZED; - if(!initConfig.IsGood() || InternalVersion(initConfig.GetAddr()) == -1 || !CheckInitConfig(initConfig)) + } + if (!initConfig.IsGood() || InternalVersion(initConfig.GetAddr()) == -1 || !CheckInitConfig(initConfig)) + { + cellResc.Error("cellRescInit : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } InitMembers(); s_rescInternalInstance->m_initConfig = *initConfig; // TODO: This may be incompatible with older binaries @@ -432,8 +438,13 @@ int cellRescInit(mem_ptr_t initConfig) void cellRescExit() { + cellResc.Warning("cellRescExit()"); + if(!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescExit()"); return; + } // TODO: ? @@ -442,11 +453,13 @@ void cellRescExit() int cellRescVideoOutResolutionId2RescBufferMode(u32 resolutionId, mem32_t bufferMode) { - cellResc.Log("cellRescVideoOutResolutionId2RescBufferMode(resolutionId=%d, bufferMode_addr=0x%x)", - resolutionId, bufferMode.GetAddr()); + cellResc.Log("cellRescVideoOutResolutionId2RescBufferMode(resolutionId=%d, bufferMode_addr=0x%x)", resolutionId, bufferMode.GetAddr()); if (!bufferMode.IsGood()) + { + cellResc.Error("cellRescVideoOutResolutionId2RescBufferMode : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } switch (resolutionId) { @@ -454,7 +467,9 @@ int cellRescVideoOutResolutionId2RescBufferMode(u32 resolutionId, mem32_t buffer case CELL_VIDEO_OUT_RESOLUTION_720: bufferMode = CELL_RESC_1280x720; break; case CELL_VIDEO_OUT_RESOLUTION_480: bufferMode = CELL_RESC_720x480; break; case CELL_VIDEO_OUT_RESOLUTION_576: bufferMode = CELL_RESC_720x576; break; - default: return CELL_RESC_ERROR_BAD_ARGUMENT; + default: + cellResc.Error("cellRescVideoOutResolutionId2RescBufferMod : CELL_RESC_ERROR_BAD_ARGUMENT"); + return CELL_RESC_ERROR_BAD_ARGUMENT; } return CELL_OK; @@ -464,14 +479,24 @@ int cellRescSetDsts(u32 dstsMode, mem_ptr_t dsts) { cellResc.Log("cellRescSetDsts(dstsMode=%d, CellRescDsts_addr=0x%x)", dstsMode, dsts.GetAddr()); - if(!s_rescInternalInstance->m_bInitialized) + if (!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescSetDst : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; - if (!dsts.IsGood()) - return CELL_RESC_ERROR_BAD_ARGUMENT; + } - if((dstsMode != CELL_RESC_720x480) && (dstsMode != CELL_RESC_720x576) && - (dstsMode != CELL_RESC_1280x720) && (dstsMode != CELL_RESC_1920x1080)) + if (!dsts.IsGood()) + { + cellResc.Error("cellRescSetDst : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } + + if ((dstsMode != CELL_RESC_720x480) && (dstsMode != CELL_RESC_720x576) && + (dstsMode != CELL_RESC_1280x720) && (dstsMode != CELL_RESC_1920x1080)) + { + cellResc.Error("cellRescSetDsts : CELL_RESC_ERROR_BAD_ARGUMENT"); + return CELL_RESC_ERROR_BAD_ARGUMENT; + } s_rescInternalInstance->m_rescDsts[GetRescDestsIndex(dstsMode)] = *dsts; @@ -482,21 +507,38 @@ int cellRescSetDisplayMode(u32 displayMode) { cellResc.Warning("cellRescSetDisplayMode(displayMode=%d)", displayMode); - if(!s_rescInternalInstance->m_bInitialized) + if (!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; - if(!(s_rescInternalInstance->m_initConfig.supportModes & displayMode)) - return CELL_RESC_ERROR_BAD_ARGUMENT; + } - if((displayMode != CELL_RESC_720x480) && (displayMode != CELL_RESC_720x576) && - (displayMode != CELL_RESC_1280x720) && (displayMode != CELL_RESC_1920x1080)) + if (!(s_rescInternalInstance->m_initConfig.supportModes & displayMode)) + { + cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } + + if ((displayMode != CELL_RESC_720x480) && (displayMode != CELL_RESC_720x576) && + (displayMode != CELL_RESC_1280x720) && (displayMode != CELL_RESC_1920x1080)) + { + cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_ARGUMENT"); + return CELL_RESC_ERROR_BAD_ARGUMENT; + } s_rescInternalInstance->m_dstMode = displayMode; - if((IsPalInterpolate() || IsPalDrop()) && s_rescInternalInstance->m_initConfig.flipMode==CELL_RESC_DISPLAY_HSYNC) + if ((IsPalInterpolate() || IsPalDrop()) && s_rescInternalInstance->m_initConfig.flipMode == CELL_RESC_DISPLAY_HSYNC) + { + cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_COMBINATIONT"); return CELL_RESC_ERROR_BAD_COMBINATION; + } + if(IsPal60Hsync() && s_rescInternalInstance->m_initConfig.flipMode==CELL_RESC_DISPLAY_VSYNC) + { + cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_COMBINATIONT"); return CELL_RESC_ERROR_BAD_COMBINATION; + } s_rescInternalInstance->m_pRescDsts = &s_rescInternalInstance->m_rescDsts[GetRescDestsIndex(displayMode)]; GetScreenSize(s_rescInternalInstance->m_dstMode, &(s_rescInternalInstance->m_dstWidth), &(s_rescInternalInstance->m_dstHeight)); @@ -556,9 +598,16 @@ int cellRescAdjustAspectRatio(float horizontal, float vertical) cellResc.Warning("cellRescAdjustAspectRatio(horizontal=%f, vertical=%f)", horizontal, vertical); if(!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescAdjustAspectRatio : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; + } + if((horizontal < 0.5f || 2.f < horizontal) || (vertical < 0.5f || 2.f < vertical)) + { + cellResc.Error("cellRescAdjustAspectRatio : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } s_rescInternalInstance->m_ratioAdjX = horizontal; s_rescInternalInstance->m_ratioAdjY = vertical; @@ -579,9 +628,16 @@ int cellRescSetPalInterpolateDropFlexRatio(float ratio) cellResc.Warning("cellRescSetPalInterpolateDropFlexRatio(ratio=%f)", ratio); if(!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescSetPalInterpolateDropFlexRatio : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; + } + if(ratio < 0.f || 1.f < ratio) + { + cellResc.Error("cellRescSetPalInterpolateDropFlexRatio : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } s_rescInternalInstance->m_flexRatio = ratio; @@ -590,11 +646,13 @@ int cellRescSetPalInterpolateDropFlexRatio(float ratio) int cellRescGetBufferSize(mem32_t colorBuffers, mem32_t vertexArray, mem32_t fragmentShader) { - cellResc.Warning("cellRescGetBufferSize(colorBuffers_addr=0x%x, vertexArray_addr=0x%x, fragmentShader_addr=0x%x)", - colorBuffers.GetAddr(), vertexArray.GetAddr(), fragmentShader.GetAddr()); + cellResc.Warning("cellRescGetBufferSize(colorBuffers_addr=0x%x, vertexArray_addr=0x%x, fragmentShader_addr=0x%x)", colorBuffers.GetAddr(), vertexArray.GetAddr(), fragmentShader.GetAddr()); - if(!s_rescInternalInstance->m_bInitialized) + if (!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescGetBufferSize : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; + } s32 colorBuffersSize, vertexArraySize, fragmentUcodeSize; if (s_rescInternalInstance->m_initConfig.resourcePolicy & CELL_RESC_MINIMUM_VRAM) @@ -622,8 +680,11 @@ int cellRescGetNumColorBuffers(u32 dstMode, u32 palTemporalMode, u32 reserved) { cellResc.Log("cellRescGetNumColorBuffers(dstMode=%d, palTemporalMode=%d, reserved=%d)", dstMode, palTemporalMode, reserved); - if(reserved != 0) + if (reserved != 0) + { + cellResc.Error("cellRescGetNumColorBuffers : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } return dstMode==CELL_RESC_720x576 ? ((palTemporalMode==CELL_RESC_PAL_60_INTERPOLATE || @@ -638,11 +699,13 @@ int cellRescGetNumColorBuffers(u32 dstMode, u32 palTemporalMode, u32 reserved) int cellRescGcmSurface2RescSrc(mem_ptr_t gcmSurface, mem_ptr_t rescSrc) { - cellResc.Log("cellRescGcmSurface2RescSrc(gcmSurface_addr=0x%x, rescSrc_addr=0x%x)", - gcmSurface.GetAddr(), rescSrc.GetAddr()); + cellResc.Log("cellRescGcmSurface2RescSrc(gcmSurface_addr=0x%x, rescSrc_addr=0x%x)", gcmSurface.GetAddr(), rescSrc.GetAddr()); if(!gcmSurface.IsGood() || !rescSrc.IsGood()) + { + cellResc.Error("cellRescGcmSurface2RescSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } u8 textureFormat = GcmSurfaceFormat2GcmTextureFormat(gcmSurface->color_format, gcmSurface->type); @@ -669,11 +732,23 @@ int cellRescSetSrc(s32 idx, mem_ptr_t src) cellResc.Log("cellRescSetSrc(idx=0x%x, src_addr=0x%x)", idx, src.GetAddr()); if(!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescSetSrc : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; + } + if(idx < 0 || SRC_BUFFER_NUM <= idx || !src.IsGood()) + { + cellResc.Error("cellRescSetSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } + if(src->width < 1 || 4096 < src->width || src->height < 1 || 4096 < src->height) + { + cellResc.Error("cellRescSetSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } + cellResc.Log(" *** format=0x%x", src->format.ToLE()); cellResc.Log(" *** pitch=%d", src->pitch.ToLE()); @@ -695,9 +770,17 @@ int cellRescSetConvertAndFlip(mem_ptr_t cntxt, s32 idx) cellResc.Log("cellRescSetConvertAndFlip(cntxt_addr=0x%x, indx=0x%x)", cntxt.GetAddr(), idx); if(!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescSetConvertAndFlip : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; + } + if(idx < 0 || SRC_BUFFER_NUM <= idx) + { + cellResc.Error("cellRescSetConvertAndFlip : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } + if(!IsTextureNR()) BuildupVertexBufferUN(idx); @@ -722,17 +805,27 @@ int cellRescSetWaitFlip() int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t fragmentShader) { - cellResc.Warning("cellRescSetBufferAddress(colorBuffers_addr=0x%x, vertexArray_addr=0x%x, fragmentShader_addr=0x%x)", - colorBuffers.GetAddr(), vertexArray.GetAddr(), fragmentShader.GetAddr()); + cellResc.Warning("cellRescSetBufferAddress(colorBuffers_addr=0x%x, vertexArray_addr=0x%x, fragmentShader_addr=0x%x)", colorBuffers.GetAddr(), vertexArray.GetAddr(), fragmentShader.GetAddr()); if(!s_rescInternalInstance->m_bInitialized) + { + cellResc.Error("cellRescSetBufferAddress : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; + } + if(!colorBuffers.IsGood() || !vertexArray.IsGood() || !fragmentShader.IsGood()) + { + cellResc.Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; + } + if(colorBuffers.GetAddr() % COLOR_BUFFER_ALIGNMENT || vertexArray.GetAddr() % VERTEX_BUFFER_ALIGNMENT || fragmentShader.GetAddr() % FRAGMENT_SHADER_ALIGNMENT) - return CELL_RESC_ERROR_BAD_ALIGNMENT; + { + cellResc.Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); + return CELL_RESC_ERROR_BAD_ARGUMENT; + } s_rescInternalInstance->m_colorBuffersEA_addr = colorBuffers.GetAddr(); s_rescInternalInstance->m_vertexArrayEA_addr = vertexArray.GetAddr(); @@ -764,8 +857,11 @@ int cellRescSetFlipHandler(u32 handler_addr) { cellResc.Warning("cellRescSetFlipHandler(handler_addr=0x%x)", handler_addr); - if(handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) + if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) + { + cellResc.Error("cellRescSetFlipHandler : CELL_EFAULT"); return CELL_EFAULT; + } Emu.GetGSManager().GetRender().m_flip_handler.SetAddr(handler_addr); @@ -786,6 +882,37 @@ int cellRescGetFlipStatus() return Emu.GetGSManager().GetRender().m_flip_status; } +int cellRescGetRegisterCount() +{ + UNIMPLEMENTED_FUNC(cellResc); + return CELL_OK; +} + +int cellRescGetLastFlipTime() +{ + UNIMPLEMENTED_FUNC(cellResc); + return CELL_OK; +} + +int cellRescSetRegisterCount() +{ + UNIMPLEMENTED_FUNC(cellResc); + return CELL_OK; +} + +int cellRescSetVBlankHandler() +{ + UNIMPLEMENTED_FUNC(cellResc); + return CELL_OK; +} + +int cellRescCreateInterlaceTable() +{ + UNIMPLEMENTED_FUNC(cellResc); + return CELL_OK; +} + + void cellResc_init() { cellResc.AddFunc(0x25c107e6, cellRescSetConvertAndFlip); @@ -796,20 +923,20 @@ void cellResc_init() cellResc.AddFunc(0x10db5b1a, cellRescSetDsts); cellResc.AddFunc(0x129922a0, cellRescResetFlipStatus); cellResc.AddFunc(0x19a2a967, cellRescSetPalInterpolateDropFlexRatio); - //cellResc.AddFunc(0x1dd3c4cd, cellRescGetRegisterCount); + cellResc.AddFunc(0x1dd3c4cd, cellRescGetRegisterCount); cellResc.AddFunc(0x22ae06d8, cellRescAdjustAspectRatio); cellResc.AddFunc(0x23134710, cellRescSetDisplayMode); cellResc.AddFunc(0x2ea3061e, cellRescExit); cellResc.AddFunc(0x516ee89e, cellRescInit); cellResc.AddFunc(0x5a338cdb, cellRescGetBufferSize); - //cellResc.AddFunc(0x66f5e388, cellRescGetLastFlipTime); + cellResc.AddFunc(0x66f5e388, cellRescGetLastFlipTime); cellResc.AddFunc(0x6cd0f95f, cellRescSetSrc); - //cellResc.AddFunc(0x7af8a37f, cellRescSetRegisterCount); + cellResc.AddFunc(0x7af8a37f, cellRescSetRegisterCount); cellResc.AddFunc(0x8107277c, cellRescSetBufferAddress); cellResc.AddFunc(0xc47c5c22, cellRescGetFlipStatus); cellResc.AddFunc(0xd1ca0503, cellRescVideoOutResolutionId2RescBufferMode); - //cellResc.AddFunc(0xd3758645, cellRescSetVBlankHandler); - //cellResc.AddFunc(0xe0cef79e, cellRescCreateInterlaceTable); + cellResc.AddFunc(0xd3758645, cellRescSetVBlankHandler); + cellResc.AddFunc(0xe0cef79e, cellRescCreateInterlaceTable); } void cellResc_load() From b9a055f1c8c0a86ced0fa810edacf1ef858e4a94 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 6 Jun 2014 00:47:01 +0800 Subject: [PATCH 003/499] cellGcmSys: fill out some stuffs for zCulling --- rpcs3/Emu/GS/GCM.h | 18 ++++--- rpcs3/Emu/GS/RSXThread.h | 2 + rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 58 ++++++++++++++++++++--- 3 files changed, 66 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 62bf689097..f552e01fab 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -39,6 +39,18 @@ enum CELL_GCM_DRAW_INDEX_ARRAY_TYPE_16 = 1, }; +enum +{ + CELL_GCM_DISPLAY_FLIP_STATUS_ = 0, + CELL_GCM_DISPLAY_FLIP_STATUS_WAITING = 1, +}; + +enum +{ + CELL_GCM_LOCATION_LOCAL = 0, + CELL_GCM_LOCATION_MAIN = 1, +}; + // GCM Texture enum { @@ -242,12 +254,6 @@ struct GcmTileInfo } }; -enum -{ - CELL_GCM_LOCATION_LOCAL, - CELL_GCM_LOCATION_MAIN, -}; - enum { // NV406E diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index eb184a6e09..e492ea8708 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -96,6 +96,7 @@ public: static const uint m_vertex_count = 32; static const uint m_fragment_count = 32; static const uint m_tiles_count = 15; + static const uint m_zculls_count = 8; protected: std::stack m_call_stack; @@ -103,6 +104,7 @@ protected: public: GcmTileInfo m_tiles[m_tiles_count]; + GcmZcullInfo m_zculls[m_zculls_count]; RSXTexture m_textures[m_textures_count]; RSXVertexData m_vertex_data[m_vertex_count]; RSXIndexArrayData m_indexed_array; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index c2b05a202a..636b2b8dc3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -244,7 +244,16 @@ int cellGcmBindTile(u8 index) int cellGcmBindZcull(u8 index) { - cellGcmSys.Warning("TODO: cellGcmBindZcull(index=%d)", index); + cellGcmSys.Warning("cellGcmBindZcull(index=%d)", index); + + if (index >= RSXThread::m_zculls_count) + { + cellGcmSys.Error("cellGcmBindZcull : CELL_GCM_ERROR_INVALID_VALUE"); + return CELL_GCM_ERROR_INVALID_VALUE; + } + + auto& zcull = Emu.GetGSManager().GetRender().m_zculls[index]; + zcull.m_binded = true; return CELL_OK; } @@ -266,14 +275,17 @@ int cellGcmGetConfiguration(mem_ptr_t config) int cellGcmGetFlipStatus() { + cellGcmSys.Log("cellGcmGetFlipStatus()"); + return Emu.GetGSManager().GetRender().m_flip_status; } u32 cellGcmGetTiledPitchSize(u32 size) { - //TODO cellGcmSys.Warning("cellGcmGetTiledPitchSize(size=%d)", size); + // TODO: + return size; } @@ -346,7 +358,9 @@ int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) int cellGcmResetFlipStatus() { - Emu.GetGSManager().GetRender().m_flip_status = 1; + cellGcmSys.Log("cellGcmResetFlipStatus()"); + + Emu.GetGSManager().GetRender().m_flip_status = CELL_GCM_DISPLAY_FLIP_STATUS_WAITING; return CELL_OK; } @@ -371,8 +385,8 @@ int cellGcmSetDebugOutputLevel(int level) int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height) { - //cellGcmSys.Warning("cellGcmSetDisplayBuffer(id=0x%x,offset=0x%x,pitch=%d,width=%d,height=%d)", - // id, offset, width ? pitch/width : pitch, width, height); + cellGcmSys.Log("cellGcmSetDisplayBuffer(id=0x%x,offset=0x%x,pitch=%d,width=%d,height=%d)", id, offset, width ? pitch / width : pitch, width, height); + if (id > 7) { cellGcmSys.Error("cellGcmSetDisplayBuffer : CELL_EINVAL"); @@ -530,7 +544,7 @@ int cellGcmSetTileInfo(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u if (comp) { - cellGcmSys.Error("cellGcmSetTileInfo: bad comp! (%d)", comp); + cellGcmSys.Error("cellGcmSetTileInfo: bad compression mode! (%d)", comp); } auto& tile = Emu.GetGSManager().GetRender().m_tiles[index]; @@ -571,6 +585,28 @@ int cellGcmSetZcull(u8 index, u32 offset, u32 width, u32 height, u32 cullStart, cellGcmSys.Warning("TODO: cellGcmSetZcull(index=%d, offset=0x%x, width=%d, height=%d, cullStart=0x%x, zFormat=0x%x, aaFormat=0x%x, zCullDir=0x%x, zCullFormat=0x%x, sFunc=0x%x, sRef=0x%x, sMask=0x%x)", index, offset, width, height, cullStart, zFormat, aaFormat, zCullDir, zCullFormat, sFunc, sRef, sMask); + if (index >= RSXThread::m_zculls_count) + { + cellGcmSys.Error("cellGcmSetZcull : CELL_GCM_ERROR_INVALID_VALUE"); + return CELL_GCM_ERROR_INVALID_VALUE; + } + + auto& zcull = Emu.GetGSManager().GetRender().m_zculls[index]; + zcull.m_offset = offset; + zcull.m_width = width; + zcull.m_height = height; + zcull.m_cullStart = cullStart; + zcull.m_zFormat = zFormat; + zcull.m_aaFormat = aaFormat; + zcull.m_zCullDir = zCullDir; + zcull.m_zCullFormat = zCullFormat; + zcull.m_sFunc = sFunc; + zcull.m_sRef = sRef; + zcull.m_sMask = sMask; + + // TODO: + //Memory.WriteData(Emu.GetGSManager().GetRender().m_zculls_addr + sizeof(CellGcmZcullInfo)* index, zcull.Pack()); + return CELL_OK; } @@ -600,6 +636,9 @@ int cellGcmUnbindZcull(u8 index) return CELL_EINVAL; } + auto& zcull = Emu.GetGSManager().GetRender().m_zculls[index]; + zcull.m_binded = false; + return CELL_OK; } @@ -636,6 +675,12 @@ int cellGcmGetCurrentDisplayBufferId(u32 id_addr) return CELL_OK; } +int cellGcmSetInvalidateTile() +{ + UNIMPLEMENTED_FUNC(cellGcmSys); + return CELL_OK; +} + int cellGcmDumpGraphicsError() { UNIMPLEMENTED_FUNC(cellGcmSys); @@ -1137,6 +1182,7 @@ void cellGcmSys_init() cellGcmSys.AddFunc(0xd9a0a879, cellGcmGetZcullInfo); cellGcmSys.AddFunc(0x0e6b0dae, cellGcmGetDisplayInfo); cellGcmSys.AddFunc(0x93806525, cellGcmGetCurrentDisplayBufferId); + cellGcmSys.AddFunc(0xbd6d60d9, cellGcmSetInvalidateTile); //cellGcmSys.AddFunc(, cellGcmSetFlipWithWaitLabel); // Memory Mapping From 40add8f9a26649afd17a1199e9c2185f7847abb7 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Mon, 2 Jun 2014 19:27:24 +0200 Subject: [PATCH 004/499] Seperate ConLog.h and ConLogFrame.h (for now only seperate headers) make precompiled header slimmer under Linux to increase CI and dev-machine build-times make sure unused modules don't compile add unused modules to the VS project to easier keep track of them --- Utilities/SMutex.cpp | 7 +- Utilities/SMutex.h | 1 + Utilities/Thread.cpp | 2 + rpcs3/Crypto/unedat.cpp | 1 + rpcs3/Crypto/unpkg.cpp | 2 + rpcs3/Crypto/unself.cpp | 2 + rpcs3/Emu/ARMv7/ARMv7Thread.cpp | 7 +- rpcs3/Emu/Audio/AL/OpenALThread.cpp | 7 +- rpcs3/Emu/Audio/AudioManager.cpp | 1 + rpcs3/Emu/CPU/CPUDisAsm.h | 2 +- rpcs3/Emu/CPU/CPUThread.cpp | 7 + rpcs3/Emu/CPU/CPUThreadManager.cpp | 4 + rpcs3/Emu/Cell/PPCDecoder.cpp | 2 + rpcs3/Emu/Cell/PPCThread.cpp | 3 + rpcs3/Emu/Cell/PPUInterpreter.h | 28 ++-- rpcs3/Emu/Cell/PPUProgramCompiler.cpp | 3 + rpcs3/Emu/Cell/PPUThread.cpp | 6 + rpcs3/Emu/Cell/RawSPUThread.cpp | 6 + rpcs3/Emu/Cell/SPUDisAsm.h | 2 +- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 6 + rpcs3/Emu/Cell/SPUThread.cpp | 7 + rpcs3/Emu/Cell/SPUThread.h | 3 +- rpcs3/{Gui => Emu}/ConLog.h | 21 --- rpcs3/Emu/DbgConsole.cpp | 3 + rpcs3/Emu/Event.cpp | 3 + rpcs3/Emu/FS/VFS.cpp | 2 + rpcs3/Emu/FS/vfsDevice.cpp | 5 +- rpcs3/Emu/FS/vfsDir.cpp | 4 + rpcs3/Emu/FS/vfsDirBase.cpp | 1 + rpcs3/Emu/FS/vfsFile.cpp | 4 + rpcs3/Emu/FS/vfsLocalDir.cpp | 1 + rpcs3/Emu/FS/vfsLocalFile.cpp | 1 + rpcs3/Emu/FS/vfsStreamMemory.cpp | 2 + rpcs3/Emu/GS/GCM.h | 1 - rpcs3/Emu/GS/GL/GLBuffers.cpp | 2 + rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 3 + rpcs3/Emu/GS/GL/GLGSRender.cpp | 3 + rpcs3/Emu/GS/GL/GLProgram.cpp | 2 + rpcs3/Emu/GS/GL/GLProgramBuffer.cpp | 3 + rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 4 + rpcs3/Emu/GS/GL/OpenGL.cpp | 1 + rpcs3/Emu/GS/GSManager.cpp | 4 + rpcs3/Emu/GS/GSRender.cpp | 5 + rpcs3/Emu/GS/RSXTexture.cpp | 4 + rpcs3/Emu/GS/RSXThread.cpp | 5 +- rpcs3/Emu/HDD/HDD.cpp | 1 + rpcs3/Emu/HDD/HDD.h | 14 +- rpcs3/Emu/Io/Keyboard.cpp | 3 + rpcs3/Emu/Io/Mouse.cpp | 3 + rpcs3/Emu/Io/Pad.cpp | 3 + rpcs3/Emu/Io/XInput/XInputPadHandler.cpp | 2 + rpcs3/Emu/Memory/Memory.cpp | 5 +- rpcs3/Emu/Memory/Memory.h | 9 ++ rpcs3/Emu/SysCalls/Callback.cpp | 3 + rpcs3/Emu/SysCalls/FuncList.cpp | 3 + rpcs3/Emu/SysCalls/Modules.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellCamera.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 6 + rpcs3/Emu/SysCalls/Modules/cellFiber.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellFont.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellImejp.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellMic.cpp | 4 +- .../Emu/SysCalls/Modules/cellMusicDecode.cpp | 4 +- .../Emu/SysCalls/Modules/cellMusicExport.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellOvis.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 6 +- .../Emu/SysCalls/Modules/cellPhotoDecode.cpp | 4 +- .../Emu/SysCalls/Modules/cellPhotoExport.cpp | 4 +- .../Emu/SysCalls/Modules/cellPhotoImport.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellPrint.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellRtc.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellRudp.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSail.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSearch.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSheap.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 9 +- rpcs3/Emu/SysCalls/Modules/cellSsl.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellSync2.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 15 ++- rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp | 6 +- .../SysCalls/Modules/cellSysutil_SaveData.cpp | 12 +- rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellVoice.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/libsnd3.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/libsnd3.h | 4 +- rpcs3/Emu/SysCalls/Modules/libsynth2.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/libsynth2.h | 4 +- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/sys_http.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/sys_io.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/sys_net.cpp | 6 +- rpcs3/Emu/SysCalls/Static.cpp | 7 +- rpcs3/Emu/SysCalls/SysCalls.cpp | 9 +- rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp | 5 + rpcs3/Emu/SysCalls/lv2/SC_Event.cpp | 5 + rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp | 5 + rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp | 11 +- rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp | 6 + rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp | 4 + rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp | 4 + rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp | 6 + rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp | 4 + rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp | 6 + rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp | 6 + rpcs3/Emu/SysCalls/lv2/SC_Process.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp | 4 + rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp | 5 + rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp | 4 + rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_Time.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp | 3 + rpcs3/Emu/SysCalls/lv2/SC_VM.cpp | 3 + rpcs3/Emu/System.cpp | 4 +- rpcs3/Gui/CompilerELF.cpp | 3 + rpcs3/Gui/ConLog.cpp | 14 +- rpcs3/Gui/ConLogFrame.h | 25 ++++ rpcs3/Gui/Debugger.cpp | 7 +- rpcs3/Gui/DisAsmFrame.cpp | 8 +- rpcs3/Gui/DisAsmFrame.h | 2 + rpcs3/Gui/FnIdGenerator.cpp | 2 + rpcs3/Gui/GameViewer.cpp | 5 + rpcs3/Gui/InterpreterDisAsm.cpp | 6 + rpcs3/Gui/MainFrame.cpp | 5 + rpcs3/Gui/MemoryViewer.cpp | 3 + rpcs3/Gui/PADManager.cpp | 4 + rpcs3/Gui/RSXDebugger.cpp | 6 + rpcs3/Gui/VFSManager.cpp | 4 + rpcs3/Gui/VHDDManager.cpp | 1 + rpcs3/Ini.cpp | 2 + rpcs3/Loader/ELF32.cpp | 2 + rpcs3/Loader/ELF64.cpp | 6 + rpcs3/Loader/Loader.cpp | 1 + rpcs3/Loader/PKG.cpp | 1 + rpcs3/Loader/PSF.cpp | 1 + rpcs3/Loader/SELF.cpp | 1 + rpcs3/Loader/TROPUSR.cpp | 3 + rpcs3/Loader/TRP.cpp | 4 + rpcs3/rpcs3.cpp | 5 +- rpcs3/rpcs3.h | 11 +- rpcs3/rpcs3.vcxproj | 41 +++++- rpcs3/rpcs3.vcxproj.filters | 120 +++++++++++++++++- rpcs3/stdafx.h | 7 +- 182 files changed, 893 insertions(+), 162 deletions(-) rename rpcs3/{Gui => Emu}/ConLog.h (78%) create mode 100644 rpcs3/Gui/ConLogFrame.h diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index 06820a7afa..b5ddd548d2 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -1,5 +1,10 @@ #include -#include +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/CPU/CPUThread.h" + +#include "Utilities/SMutex.h" __forceinline void SM_Sleep() { diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index fe856f501e..4023641c73 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -1,4 +1,5 @@ #pragma once +#include "BEType.h" extern void SM_Sleep(); extern size_t SM_GetCurrentThreadId(); diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index 6ad547bfff..d18728fc5d 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "Emu/ConLog.h" + #include "Thread.h" #ifdef _WIN32 diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index f7f44cf16f..3ca97bb917 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "unedat.h" +#include "Emu/ConLog.h" void generate_key(int crypto_mode, int version, unsigned char *key_final, unsigned char *iv_final, unsigned char *key, unsigned char *iv) { diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index db5eed77e5..44261f6d33 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -2,6 +2,8 @@ #include "unpkg.h" #include +#include "Emu/ConLog.h" + // Decryption. bool CheckHeader(wxFile& pkg_f, PKGHeader* m_header) { diff --git a/rpcs3/Crypto/unself.cpp b/rpcs3/Crypto/unself.cpp index 5fababbb02..60950e4c99 100644 --- a/rpcs3/Crypto/unself.cpp +++ b/rpcs3/Crypto/unself.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/FS/vfsLocalFile.h" #include "unself.h" SELFDecrypter::SELFDecrypter(vfsStream& s) diff --git a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp index 5aff8a50c6..ed38c8d96d 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp +++ b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp @@ -1,4 +1,9 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPCThread.h" + #include "ARMv7Thread.h" #include "ARMv7Decoder.h" #include "ARMv7DisAsm.h" @@ -99,4 +104,4 @@ void ARMv7Thread::DoStop() void ARMv7Thread::DoCode() { -} \ No newline at end of file +} diff --git a/rpcs3/Emu/Audio/AL/OpenALThread.cpp b/rpcs3/Emu/Audio/AL/OpenALThread.cpp index ef912dc0f2..f07b0eb1a4 100644 --- a/rpcs3/Emu/Audio/AL/OpenALThread.cpp +++ b/rpcs3/Emu/Audio/AL/OpenALThread.cpp @@ -1,4 +1,9 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "rpcs3/Ini.h" + #include "OpenALThread.h" ALenum g_last_al_error = AL_NO_ERROR; @@ -152,4 +157,4 @@ bool OpenALThread::AddBlock(const ALuint buffer_id, const ALsizei size, const vo checkForAlError("alBufferData"); return true; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/Audio/AudioManager.cpp b/rpcs3/Emu/Audio/AudioManager.cpp index f0cbfc0d78..1207e61d6b 100644 --- a/rpcs3/Emu/Audio/AudioManager.cpp +++ b/rpcs3/Emu/Audio/AudioManager.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "AudioManager.h" OpenALThread* m_audio_out; diff --git a/rpcs3/Emu/CPU/CPUDisAsm.h b/rpcs3/Emu/CPU/CPUDisAsm.h index 1a46e623c7..f15a1c6258 100644 --- a/rpcs3/Emu/CPU/CPUDisAsm.h +++ b/rpcs3/Emu/CPU/CPUDisAsm.h @@ -57,7 +57,7 @@ protected: std::string FixOp(std::string op) { - op.append(max(10 - (int)op.length(), 0),' '); + op.append(std::max(10 - (int)op.length(), 0),' '); return op; } }; diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 9ae338ce2d..cd8c35ad60 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -1,4 +1,11 @@ #include "stdafx.h" +#include "Emu/SysCalls/ErrorCodes.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "rpcs3/Ini.h" +#include "rpcs3.h" + #include "CPUThread.h" reservation_struct reservation; diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index d29c5e6373..f9a565ab19 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -1,4 +1,8 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" + #include "CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" #include "Emu/Cell/SPUThread.h" diff --git a/rpcs3/Emu/Cell/PPCDecoder.cpp b/rpcs3/Emu/Cell/PPCDecoder.cpp index c9bf8139b2..fa7d5fc75e 100644 --- a/rpcs3/Emu/Cell/PPCDecoder.cpp +++ b/rpcs3/Emu/Cell/PPCDecoder.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" #include "PPCDecoder.h" u8 PPCDecoder::DecodeMemory(const u64 address) diff --git a/rpcs3/Emu/Cell/PPCThread.cpp b/rpcs3/Emu/Cell/PPCThread.cpp index f1d966cde7..14c5a2a795 100644 --- a/rpcs3/Emu/Cell/PPCThread.cpp +++ b/rpcs3/Emu/Cell/PPCThread.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "PPCThread.h" #include "Gui/InterpreterDisAsm.h" diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 03c2900927..5edea8545a 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -830,45 +830,45 @@ private: { for (uint w = 0; w < 4; w++) { - CPU.VPR[vd]._f[w] = max(CPU.VPR[va]._f[w], CPU.VPR[vb]._f[w]); + CPU.VPR[vd]._f[w] = std::max(CPU.VPR[va]._f[w], CPU.VPR[vb]._f[w]); } } void VMAXSB(u32 vd, u32 va, u32 vb) //nf { for (uint b = 0; b < 16; b++) - CPU.VPR[vd]._s8[b] = max(CPU.VPR[va]._s8[b], CPU.VPR[vb]._s8[b]); + CPU.VPR[vd]._s8[b] = std::max(CPU.VPR[va]._s8[b], CPU.VPR[vb]._s8[b]); } void VMAXSH(u32 vd, u32 va, u32 vb) { for (uint h = 0; h < 8; h++) { - CPU.VPR[vd]._s16[h] = max(CPU.VPR[va]._s16[h], CPU.VPR[vb]._s16[h]); + CPU.VPR[vd]._s16[h] = std::max(CPU.VPR[va]._s16[h], CPU.VPR[vb]._s16[h]); } } void VMAXSW(u32 vd, u32 va, u32 vb) { for (uint w = 0; w < 4; w++) { - CPU.VPR[vd]._s32[w] = max(CPU.VPR[va]._s32[w], CPU.VPR[vb]._s32[w]); + CPU.VPR[vd]._s32[w] = std::max(CPU.VPR[va]._s32[w], CPU.VPR[vb]._s32[w]); } } void VMAXUB(u32 vd, u32 va, u32 vb) { for (uint b = 0; b < 16; b++) - CPU.VPR[vd]._u8[b] = max(CPU.VPR[va]._u8[b], CPU.VPR[vb]._u8[b]); + CPU.VPR[vd]._u8[b] = std::max(CPU.VPR[va]._u8[b], CPU.VPR[vb]._u8[b]); } void VMAXUH(u32 vd, u32 va, u32 vb) { for (uint h = 0; h < 8; h++) { - CPU.VPR[vd]._u16[h] = max(CPU.VPR[va]._u16[h], CPU.VPR[vb]._u16[h]); + CPU.VPR[vd]._u16[h] = std::max(CPU.VPR[va]._u16[h], CPU.VPR[vb]._u16[h]); } } void VMAXUW(u32 vd, u32 va, u32 vb) { for (uint w = 0; w < 4; w++) { - CPU.VPR[vd]._u32[w] = max(CPU.VPR[va]._u32[w], CPU.VPR[vb]._u32[w]); + CPU.VPR[vd]._u32[w] = std::max(CPU.VPR[va]._u32[w], CPU.VPR[vb]._u32[w]); } } void VMHADDSHS(u32 vd, u32 va, u32 vb, u32 vc) @@ -915,49 +915,49 @@ private: { for (uint w = 0; w < 4; w++) { - CPU.VPR[vd]._f[w] = min(CPU.VPR[va]._f[w], CPU.VPR[vb]._f[w]); + CPU.VPR[vd]._f[w] = std::min(CPU.VPR[va]._f[w], CPU.VPR[vb]._f[w]); } } void VMINSB(u32 vd, u32 va, u32 vb) //nf { for (uint b = 0; b < 16; b++) { - CPU.VPR[vd]._s8[b] = min(CPU.VPR[va]._s8[b], CPU.VPR[vb]._s8[b]); + CPU.VPR[vd]._s8[b] = std::min(CPU.VPR[va]._s8[b], CPU.VPR[vb]._s8[b]); } } void VMINSH(u32 vd, u32 va, u32 vb) { for (uint h = 0; h < 8; h++) { - CPU.VPR[vd]._s16[h] = min(CPU.VPR[va]._s16[h], CPU.VPR[vb]._s16[h]); + CPU.VPR[vd]._s16[h] = std::min(CPU.VPR[va]._s16[h], CPU.VPR[vb]._s16[h]); } } void VMINSW(u32 vd, u32 va, u32 vb) { for (uint w = 0; w < 4; w++) { - CPU.VPR[vd]._s32[w] = min(CPU.VPR[va]._s32[w], CPU.VPR[vb]._s32[w]); + CPU.VPR[vd]._s32[w] = std::min(CPU.VPR[va]._s32[w], CPU.VPR[vb]._s32[w]); } } void VMINUB(u32 vd, u32 va, u32 vb) { for (uint b = 0; b < 16; b++) { - CPU.VPR[vd]._u8[b] = min(CPU.VPR[va]._u8[b], CPU.VPR[vb]._u8[b]); + CPU.VPR[vd]._u8[b] = std::min(CPU.VPR[va]._u8[b], CPU.VPR[vb]._u8[b]); } } void VMINUH(u32 vd, u32 va, u32 vb) { for (uint h = 0; h < 8; h++) { - CPU.VPR[vd]._u16[h] = min(CPU.VPR[va]._u16[h], CPU.VPR[vb]._u16[h]); + CPU.VPR[vd]._u16[h] = std::min(CPU.VPR[va]._u16[h], CPU.VPR[vb]._u16[h]); } } void VMINUW(u32 vd, u32 va, u32 vb) { for (uint w = 0; w < 4; w++) { - CPU.VPR[vd]._u32[w] = min(CPU.VPR[va]._u32[w], CPU.VPR[vb]._u32[w]); + CPU.VPR[vd]._u32[w] = std::min(CPU.VPR[va]._u32[w], CPU.VPR[vb]._u32[w]); } } void VMLADDUHM(u32 vd, u32 va, u32 vb, u32 vc) diff --git a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp index 06e913ff83..247e85ad99 100644 --- a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp +++ b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" + #include "PPUProgramCompiler.h" using namespace PPU_instr; diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 7a824b30ec..10c2e09b55 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -1,5 +1,11 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" + #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUInterpreter.h" #include "Emu/Cell/PPUDisAsm.h" diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 4cb01dcd9e..6d513b664d 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/lv2/SC_Lwmutex.h" +#include "Emu/SysCalls/lv2/SC_Event_flag.h" + #include "Emu/Cell/RawSPUThread.h" RawSPUThread::RawSPUThread(u32 index, CPUThreadType type) diff --git a/rpcs3/Emu/Cell/SPUDisAsm.h b/rpcs3/Emu/Cell/SPUDisAsm.h index e1ee8fa932..a480fec7d1 100644 --- a/rpcs3/Emu/Cell/SPUDisAsm.h +++ b/rpcs3/Emu/Cell/SPUDisAsm.h @@ -28,7 +28,7 @@ private: private: std::string& FixOp(std::string& op) { - op.append(max(10 - (int)op.length(), 0),' '); + op.append(std::max(10 - (int)op.length(), 0),' '); return op; } void DisAsm(const char* op) diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 839b2775e7..bc0e222d32 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/lv2/SC_Lwmutex.h" +#include "Emu/SysCalls/lv2/SC_Event_flag.h" + #include "SPUInstrTable.h" #include "SPUDisAsm.h" #include "SPUInterpreter.h" diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 87c2956d1d..663e80d777 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1,4 +1,11 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/lv2/SC_Lwmutex.h" +#include "Emu/SysCalls/lv2/SC_Event_flag.h" + + #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/SPUDecoder.h" #include "Emu/Cell/SPUInterpreter.h" diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 7845a48f12..c71b2d3d68 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -3,6 +3,7 @@ #include "Emu/event.h" #include "Emu/SysCalls/lv2/SC_SPU_Thread.h" #include "MFC.h" +#include "Emu/SysCalls/ErrorCodes.h" #include static const char* spu_reg_name[128] = @@ -653,7 +654,7 @@ public: ConLog.Write("*** list element(%d/%d): s = 0x%x, ts = 0x%x, low ea = 0x%x (lsa = 0x%x)", i, list_size, (u16)rec->s, (u16)rec->ts, (u32)rec->ea, lsa | (addr & 0xf)); - lsa += max(size, (u32)16); + lsa += std::max(size, (u32)16); if (rec->s & se16(0x8000)) { diff --git a/rpcs3/Gui/ConLog.h b/rpcs3/Emu/ConLog.h similarity index 78% rename from rpcs3/Gui/ConLog.h rename to rpcs3/Emu/ConLog.h index d39eb47d64..fffb6bda73 100644 --- a/rpcs3/Gui/ConLog.h +++ b/rpcs3/Emu/ConLog.h @@ -47,25 +47,4 @@ public: virtual void SkipLn(); }; -class LogFrame - : public wxPanel - , public ThreadBase -{ - wxListView& m_log; - -public: - LogFrame(wxWindow* parent); - ~LogFrame(); - - bool Close(bool force = false); - -private: - virtual void Task(); - - void OnQuit(wxCloseEvent& event); - - DECLARE_EVENT_TABLE(); -}; - extern LogWriter ConLog; -extern LogFrame* ConLogFrame; diff --git a/rpcs3/Emu/DbgConsole.cpp b/rpcs3/Emu/DbgConsole.cpp index bfd84fcfcc..712c3d0b77 100644 --- a/rpcs3/Emu/DbgConsole.cpp +++ b/rpcs3/Emu/DbgConsole.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "DbgConsole.h" BEGIN_EVENT_TABLE(DbgConsole, FrameBase) diff --git a/rpcs3/Emu/Event.cpp b/rpcs3/Emu/Event.cpp index a1fee9d086..06d9abfe38 100644 --- a/rpcs3/Emu/Event.cpp +++ b/rpcs3/Emu/Event.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "event.h" void EventManager::Init() diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index 0833c471b9..ac59b8636e 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "Emu/ConLog.h" + #include "VFS.h" #include "Emu/HDD/HDD.h" #include "vfsDeviceLocalFile.h" diff --git a/rpcs3/Emu/FS/vfsDevice.cpp b/rpcs3/Emu/FS/vfsDevice.cpp index e1f2ac8cdf..9f2c537106 100644 --- a/rpcs3/Emu/FS/vfsDevice.cpp +++ b/rpcs3/Emu/FS/vfsDevice.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include #include "vfsDevice.h" vfsDevice::vfsDevice(const std::string& ps3_path, const std::string& local_path) @@ -25,7 +26,7 @@ void vfsDevice::SetPath(const std::string& ps3_path, const std::string& local_pa u32 vfsDevice::CmpPs3Path(const std::string& ps3_path) { - const u32 lim = min(m_ps3_path.length(), ps3_path.length()); + const u32 lim = std::min(m_ps3_path.length(), ps3_path.length()); u32 ret = 0; for(u32 i=0; i> 16) & 0xff; m_surface_height = (a0 >> 24) & 0xff; - switch (min((u32)6, count)) + switch (std::min((u32)6, count)) { case 6: m_surface_pitch_b = ARGS(5); case 5: m_surface_offset_b = ARGS(4); diff --git a/rpcs3/Emu/HDD/HDD.cpp b/rpcs3/Emu/HDD/HDD.cpp index 4d8937b4b5..9908a36a91 100644 --- a/rpcs3/Emu/HDD/HDD.cpp +++ b/rpcs3/Emu/HDD/HDD.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/ConLog.h" #include "HDD.h" vfsDeviceHDD::vfsDeviceHDD(const std::string& hdd_path) : m_hdd_path(hdd_path) diff --git a/rpcs3/Emu/HDD/HDD.h b/rpcs3/Emu/HDD/HDD.h index 8dc3767f68..f00cf41301 100644 --- a/rpcs3/Emu/HDD/HDD.h +++ b/rpcs3/Emu/HDD/HDD.h @@ -1,5 +1,7 @@ #pragma once +#include #include "Emu/FS/vfsDevice.h" +#include "Emu/FS/vfsLocalFile.h" static const u64 g_hdd_magic = *(u64*)"PS3eHDD\0"; static const u16 g_hdd_version = 0x0001; @@ -193,7 +195,7 @@ class vfsHDDFile { m_hdd.Seek(block * m_hdd_info.block_size); m_hdd.Write(&data, sizeof(vfsHDD_Entry)); - m_hdd.Write(name.c_str(), min(GetMaxNameLen() - 1, name.length() + 1)); + m_hdd.Write(name.c_str(), std::min(GetMaxNameLen() - 1, name.length() + 1)); } __forceinline u32 GetMaxNameLen() const @@ -267,7 +269,7 @@ public: //vfsDeviceLocker lock(m_hdd); const u32 block_size = m_hdd_info.block_size - sizeof(vfsHDD_Block); - u64 rsize = min(block_size - m_position, size); + u64 rsize = std::min(block_size - m_position, size); vfsHDD_Block cur_block_info; m_hdd.Seek(m_cur_block * m_hdd_info.block_size); @@ -291,7 +293,7 @@ public: } m_cur_block = cur_block_info.next_block; - rsize = min(block_size, size); + rsize = std::min(block_size, size); m_hdd.Seek(cur_block_info.next_block * m_hdd_info.block_size); m_hdd.Read(&cur_block_info, sizeof(vfsHDD_Block)); @@ -337,7 +339,7 @@ public: m_position = 0; } - u64 wsize = min(block_size - m_position, size); + u64 wsize = std::min(block_size - m_position, size); vfsHDD_Block block_info; ReadBlock(m_cur_block, block_info); @@ -371,7 +373,7 @@ public: } m_cur_block = new_block; - wsize = min(block_size, size); + wsize = std::min(block_size, size); block_info.next_block = m_cur_block; m_hdd.Seek(last_block * m_hdd_info.block_size); @@ -576,7 +578,7 @@ public: { m_hdd_file.Seek(block * m_hdd_info.block_size); m_hdd_file.Write(&data, sizeof(vfsHDD_Entry)); - m_hdd_file.Write(name.c_str(), min(GetMaxNameLen() - 1, name.length() + 1)); + m_hdd_file.Write(name.c_str(), std::min(GetMaxNameLen() - 1, name.length() + 1)); } bool Create(vfsHDD_EntryType type, const std::string& name) diff --git a/rpcs3/Emu/Io/Keyboard.cpp b/rpcs3/Emu/Io/Keyboard.cpp index b14ca37530..7181459973 100644 --- a/rpcs3/Emu/Io/Keyboard.cpp +++ b/rpcs3/Emu/Io/Keyboard.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "rpcs3/Ini.h" +#include "rpcs3.h" #include "Keyboard.h" #include "Null/NullKeyboardHandler.h" #include "Windows/WindowsKeyboardHandler.h" diff --git a/rpcs3/Emu/Io/Mouse.cpp b/rpcs3/Emu/Io/Mouse.cpp index 80d8cb4b97..2a75bb3846 100644 --- a/rpcs3/Emu/Io/Mouse.cpp +++ b/rpcs3/Emu/Io/Mouse.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "rpcs3/Ini.h" +#include "rpcs3.h" #include "Mouse.h" #include "Null/NullMouseHandler.h" #include "Windows/WindowsMouseHandler.h" diff --git a/rpcs3/Emu/Io/Pad.cpp b/rpcs3/Emu/Io/Pad.cpp index 48e9e67f46..486fd37ef4 100644 --- a/rpcs3/Emu/Io/Pad.cpp +++ b/rpcs3/Emu/Io/Pad.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "rpcs3/Ini.h" +#include "rpcs3.h" #include "Pad.h" #include "Null/NullPadHandler.h" #include "Windows/WindowsPadHandler.h" diff --git a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp index 39b72a8466..3ac16baaff 100644 --- a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp +++ b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp @@ -1,5 +1,7 @@ #include "stdafx.h" #if defined (_WIN32) +#include +#include "Emu/ConLog.h" #include "XInputPadHandler.h" #include diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 349c7606fd..2bcdbdd215 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -1,7 +1,10 @@ #include "stdafx.h" +#include + +#include "Emu/ConLog.h" #include "Memory.h" #include "MemoryBlock.h" -#include +#include "Emu/System.h" MemoryBase Memory; diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index c489c75ded..7742a02027 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -1,4 +1,5 @@ #pragma once +#include "Emu/SysCalls/Callback.h" #include "MemoryBlock.h" #include @@ -1134,3 +1135,11 @@ typedef mem_list_ptr_t mem8_ptr_t; typedef mem_list_ptr_t mem16_ptr_t; typedef mem_list_ptr_t mem32_ptr_t; typedef mem_list_ptr_t mem64_ptr_t; + +//#define re(val) MemoryBase::Reverse(val) +#define re64(val) MemoryBase::Reverse64(val) +#define re32(val) MemoryBase::Reverse32(val) +#define re16(val) MemoryBase::Reverse16(val) + +template T re(const T val) { T res; se_t::func(res, val); return res; } +template void re(T1& dst, const T2 val) { se_t::func(dst, val); } diff --git a/rpcs3/Emu/SysCalls/Callback.cpp b/rpcs3/Emu/SysCalls/Callback.cpp index 73e7896744..3fbe1e4227 100644 --- a/rpcs3/Emu/SysCalls/Callback.cpp +++ b/rpcs3/Emu/SysCalls/Callback.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Callback.h" #include "Emu/Cell/PPCThread.h" diff --git a/rpcs3/Emu/SysCalls/FuncList.cpp b/rpcs3/Emu/SysCalls/FuncList.cpp index 9531ee7fad..2f1c22d06b 100644 --- a/rpcs3/Emu/SysCalls/FuncList.cpp +++ b/rpcs3/Emu/SysCalls/FuncList.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "SysCalls.h" #define FUNC_LOG_ERROR(x) ConLog.Error(x); return 0 diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index b240f0d635..836836be2b 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "SysCalls.h" -#include "SC_FUNC.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index e26278f707..96f3f159b2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" #include "cellPamf.h" extern SMutexGeneral g_mutex_avcodec_open2; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp index 34ffeb5eff..6a95c1c3a2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" void cellAtrac_init(); Module cellAtrac(0x0013, cellAtrac_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 713bbdbcbf..cc0afca787 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" #include "Utilities/SQueue.h" #include "Emu/Audio/cellAudio.h" #include "Emu/Audio/AudioManager.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp b/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp index ac1803e101..72879e8d3b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -46,4 +47,5 @@ void cellBgdl_init() cellBgdl.AddFunc(0x2ab0d183, cellBGDLGetInfo2); cellBgdl.AddFunc(0x7e134a90, cellBGDLSetMode); cellBgdl.AddFunc(0x74e57bdf, cellBGDLGetMode); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp index 19e91bb08e..ee00c683fa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -239,4 +240,5 @@ void cellCamera_init() cellCamera.AddFunc(0x9b98d258, cellCameraRemoveNotifyEventQueue); cellCamera.AddFunc(0xa7fd2f5b, cellCameraSetNotifyEventQueue2); cellCamera.AddFunc(0x44673f07, cellCameraRemoveNotifyEventQueue2); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp index e061f648d3..70109e224a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -81,4 +82,5 @@ void cellCelp8Enc_init() cellCelp8Enc.AddFunc(0x2099f86e, cellCelp8EncEncodeFrame); cellCelp8Enc.AddFunc(0x29da1ea6, cellCelp8EncWaitForOutput); cellCelp8Enc.AddFunc(0x48c5020d, cellCelp8EncGetAu); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp index 0e4dfec54a..90ba783cbf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -81,4 +82,5 @@ void cellCelpEnc_init() cellCelpEnc.AddFunc(0x81fe030c, cellCelpEncEncodeFrame); cellCelpEnc.AddFunc(0x9b244272, cellCelpEncWaitForOutput); cellCelpEnc.AddFunc(0x3773692f, cellCelpEncGetAu); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 4b9aef7444..9a636263e0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" #include "cellPamf.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp index f24bd211c9..9d6bb5eb5e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -358,4 +359,5 @@ void cellFiber_init() cellFiber.AddFunc(0xc04e2438, cellFiberPpuUtilWorkerControlShutdown); cellFiber.AddFunc(0xea6dc1ad, cellFiberPpuUtilWorkerControlCheckFlags); cellFiber.AddFunc(0xf2ccad4f, cellFiberPpuUtilWorkerControlInitializeWithAttribute); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index 085c04326f..460a4d9ef6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -1,6 +1,12 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" +#include "Emu/FS/vfsFile.h" #include "cellFont.h" #include "stblib/stb_truetype.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp index 174e06e53d..b421af3ac2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" #include "cellFont.h" void cellFontFT_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 8afca34644..470d2dc66a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -1,6 +1,12 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" +#include "Emu/FS/vfsFile.h" #include "Loader/PSF.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index c2b05a202a..3a12620323 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" #include "Emu/GS/GCM.h" void cellGcmSys_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index 256927a8bd..a557e05673 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -281,4 +282,5 @@ void cellGem_init() //cellGem.AddFunc(, cellGemVideoConvertAttributeInitRgba); cellGem.AddFunc(0x1f6328d8, cellGemWriteExternalPort); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index f3ed4eab19..cc83f278e5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" #include "cellGifDec.h" #include "stblib/stb_image.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp b/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp index c5ddea4b0a..97f94de794 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -150,4 +151,5 @@ void cellHttpUtil_init() cellHttpUtil.AddFunc(0x8e6c5bb9, cellHttpUtilFormUrlDecode); cellHttpUtil.AddFunc(0x83faa354, cellHttpUtilBase64Encoder); cellHttpUtil.AddFunc(0x8e52ee08, cellHttpUtilBase64Decoder); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp index d78d2293e9..b3dc1bd5da 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -303,4 +304,5 @@ void cellImejp_init() cellImejp.AddFunc(0x177bd218, cellImeJpGetCandidateSelect); cellImejp.AddFunc(0x1986f2cd, cellImeJpGetPredictList); cellImejp.AddFunc(0xeede898c, cellImeJpConfirmPrediction); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index c22cc072f5..e2ba8b24df 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "cellJpgDec.h" #include "stblib/stb_image.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp index 585aec3659..e8aa461f29 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -88,4 +89,5 @@ void cellJpgEnc_init() cellJpgEnc.AddFunc(0x9b4e3a74, cellJpgEncWaitForOutput); cellJpgEnc.AddFunc(0x4262e880, cellJpgEncGetStreamInfo); cellJpgEnc.AddFunc(0x0cf2b78b, cellJpgEncReset); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp b/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp index 125e718301..eef9eb72f7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -54,4 +55,5 @@ void cellKey2char_init() cellKey2char.AddFunc(0x56776c0d, cellKey2CharGetChar); cellKey2char.AddFunc(0xbfc03768, cellKey2CharSetMode); cellKey2char.AddFunc(0x0dfbadfa, cellKey2CharSetArrangement); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index c220409996..641322fb6f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" // Requires GCC 4.10 apparently.. #ifdef _MSC_VER diff --git a/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp b/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp index 58f959efd2..01dd518bba 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -266,4 +267,5 @@ void cellLv2dbg_init() cellLv2dbg.AddFunc(0xd830062a, sys_dbg_signal_to_coredump_handler); cellLv2dbg.AddFunc(0xb9da87d3, sys_dbg_get_coredump_params); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp index 9fd5f7aef6..23b2a9f61a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -328,4 +329,5 @@ void cellMic_init() cellMic.AddFunc(0xd127cd3e, cellMicSysShareInit); cellMic.AddFunc(0xf82bbf7c, cellMicSysShareEnd); cellMic.AddFunc(0xfdbbe469, cellMicGetDeviceIdentifier); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp index 5d7741121f..14c64aefd0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -97,4 +98,5 @@ void cellMusicDecode_init() cellMusicDecode.AddFunc(0xdbf70550, cellMusicDecodeGetSelectionContext); cellMusicDecode.AddFunc(0xb84f5c81, cellMusicDecodeSetSelectionContext); cellMusicDecode.AddFunc(0x58ab1999, cellMusicDecodeGetContentsId); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp index abce6c329d..7ded73fc72 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -59,4 +60,5 @@ void cellMusicExport_init() cellMusicExport.AddFunc(0xe90effea, cellMusicExportFinalize); cellMusicExport.AddFunc(0xb202f0e8, cellMusicExportFromFile); cellMusicExport.AddFunc(0x92b50ebc, cellMusicExportProgress); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index 1486bb32ee..aed1af162e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" void cellNetCtl_init(); Module cellNetCtl(0x0014, cellNetCtl_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp index a747c07951..42ccbc8f80 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -43,4 +44,5 @@ void cellOvis_init() cellOvis.AddFunc(0xa876c911, cellOvisInitializeOverlayTable); cellOvis.AddFunc(0xce6cb776, cellOvisFixSpuSegments); cellOvis.AddFunc(0x629ba0c0, cellOvisInvalidateOverlappedSegments); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 99f33d230a..f3d20b252d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "cellPamf.h" void cellPamf_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp index fc6eab17f3..fcf6521d86 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -63,4 +64,5 @@ void cellPhotoDecode_init() cellPhotoDecode.AddFunc(0x0f424ecb, cellPhotoDecodeInitialize2); cellPhotoDecode.AddFunc(0xad7d8f38, cellPhotoDecodeFinalize); cellPhotoDecode.AddFunc(0x28b22e44, cellPhotoDecodeFromFile); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp index b47b8cc348..71dd6f5bc9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -60,4 +61,5 @@ void cellPhotoExport_init() cellPhotoExport.AddFunc(0x09ce84ac, cellPhotoExportFromFile); //cellPhotoExport.AddFunc(, cellPhotoExportFromFileWithCopy); cellPhotoExport.AddFunc(0xde509ead, cellPhotoExportProgress); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp index b8e1ffb0c0..c5815b9f5b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -58,4 +59,5 @@ void cellPhotoImport_init() { cellPhotoImport.AddFunc(0x0783bce0, _cellPhotoImport); cellPhotoImport.AddFunc(0x1ab8df55, _cellPhotoImport2); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 88cb61db59..508e6234ea 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "cellPngDec.h" #include "stblib/stb_image.h" #include diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp index d614eb535e..4b59e80a26 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -81,4 +82,5 @@ void cellPngEnc_init() cellPngEnc.AddFunc(0x90ef2963, cellPngEncWaitForOutput); cellPngEnc.AddFunc(0x585269bc, cellPngEncGetStreamInfo); cellPngEnc.AddFunc(0x6ac91de3, cellPngEncReset); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp b/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp index c620eaa20f..191c53c1d8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -104,4 +105,5 @@ void cellPrint_init() cellPrint.AddFunc(0x865acf74, cellPrintStartPage); cellPrint.AddFunc(0x0d44f661, cellPrintEndPage); cellPrint.AddFunc(0x0a373522, cellPrintSendBand); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index ef7cea7e06..0a58d81acc 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -1,7 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" -#include "Emu/GS/GCM.h" +#include "Emu/SysCalls/Modules.h" #include "cellResc.h" void cellResc_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp index a6c03744a6..c82adf7415 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "cellRtc.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp index a0792580df..6cef6bbf08 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -254,4 +255,5 @@ void cellRudp_init() cellRudp.AddFunc(0x6ee04954, cellRudpNetReceived); cellRudp.AddFunc(0xfade48b2, cellRudpProcessEvents); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp index 7d5037437c..b301af90b0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -917,4 +918,5 @@ void cellSail_init() cellSail.AddFunc(0xdbe32ed4, cellSailPlayerIsEsVideoMuted); cellSail.AddFunc(0xcc987ba6, cellSailPlayerDumpImage); cellSail.AddFunc(0x025b4974, cellSailPlayerUnregisterSource); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp b/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp index c0adc9b1b7..dce0b36acb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -285,4 +286,5 @@ void cellSailRec_init() cellSailRec.AddFunc(0xd37fb694, cellSailRecorderCancel); cellSailRec.AddFunc(0x37aad85f, cellSailRecorderDumpImage); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp index af5f53c5c7..bcc77d5466 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -55,4 +56,5 @@ void cellScreenshot_init() cellScreenshot.AddFunc(0x7a9c2243, cellScreenShotSetOverlayImage); cellScreenshot.AddFunc(0x9e33ab8f, cellScreenShotEnable); cellScreenshot.AddFunc(0xfc6f4e74, cellScreenShotDisable); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp index 8a2aeaf029..8ba73eba86 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -173,4 +174,5 @@ void cellSearch_init() cellSearch.AddFunc(0x35cda406, cellSearchGetContentInfoDeveloperData); cellSearch.AddFunc(0x8fe376a6, cellSearchCancel); cellSearch.AddFunc(0x774033d6, cellSearchEnd); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp b/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp index 9ec9baab78..ea15f3819f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -145,4 +146,5 @@ void cellSheap_init() cellSheap.AddFunc(0xed136702, cellKeySheapRwmDelete); cellSheap.AddFunc(0x987e260e, cellKeySheapQueueNew); cellSheap.AddFunc(0x79a6abd0, cellKeySheapQueueDelete); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 2f013119da..f67f97a5d0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -1,7 +1,12 @@ #include "stdafx.h" -#include "cellSpurs.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" + +#include "cellSpurs.h" void cellSpurs_init(); Module cellSpurs(0x000a, cellSpurs_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp b/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp index 47634069bc..c0a30dc9f7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -107,4 +108,5 @@ void cellSsl_init() cellSsl.AddFunc(0x766d3ca1, cellSslCertGetNameEntryCount); cellSsl.AddFunc(0x006c4900, cellSslCertGetNameEntryInfo); cellSsl.AddFunc(0x5e9253ca, cellSslCertGetMd5Fingerprint); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp b/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp index 8effb950c6..467f82d29d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -92,4 +93,5 @@ void cellSubdisplay_init() cellSubdisplay.AddFunc(0x8a264d71, cellSubDisplayGetPeerNum); cellSubdisplay.AddFunc(0xe2485f79, cellSubDisplayGetPeerList); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 7bcb9496a2..fff44dd5a4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" void cellSync_init(); Module cellSync("cellSync", cellSync_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index b3e78f078d..1817f3c1b6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -251,4 +252,5 @@ void cellSync2_init() cellSync2.AddFunc(0x0c9a0ea9, cellSync2QueueTryPop); cellSync2.AddFunc(0x12f0a27d, cellSync2QueueGetSize); cellSync2.AddFunc(0xf0e1471c, cellSync2QueueGetDepth); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp index c73db9be67..992b9d5c73 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/Modules.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" void cellSysmodule_init(); Module cellSysmodule("cellSysmodule", cellSysmodule_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index e7d5a7f2c2..369b1690d1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/FS/vfsFile.h" #include "Emu/Audio/sysutil_audio.h" #include "cellSysutil.h" @@ -886,16 +891,16 @@ int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_ get->getParam.resolution = psf.GetInteger("RESOLUTION"); get->getParam.soundFormat = psf.GetInteger("SOUND_FORMAT"); std::string title = psf.GetString("TITLE"); - memcpy(get->getParam.title, title.c_str(), min(CELL_HDDGAME_SYSP_TITLE_SIZE,title.length()+1)); + memcpy(get->getParam.title, title.c_str(), std::min(CELL_HDDGAME_SYSP_TITLE_SIZE,title.length()+1)); std::string app_ver = psf.GetString("APP_VER"); - memcpy(get->getParam.dataVersion, app_ver.c_str(), min(CELL_HDDGAME_SYSP_VERSION_SIZE,app_ver.length()+1)); - memcpy(get->getParam.titleId, dirName.c_str(), min(CELL_HDDGAME_SYSP_TITLEID_SIZE,dirName.length()+1)); + memcpy(get->getParam.dataVersion, app_ver.c_str(), std::min(CELL_HDDGAME_SYSP_VERSION_SIZE,app_ver.length()+1)); + memcpy(get->getParam.titleId, dirName.c_str(), std::min(CELL_HDDGAME_SYSP_TITLEID_SIZE,dirName.length()+1)); for (u32 i=0; igetParam.titleLang[i], title.c_str(), min(CELL_HDDGAME_SYSP_TITLE_SIZE, title.length() + 1)); + memcpy(get->getParam.titleLang[i], title.c_str(), std::min(CELL_HDDGAME_SYSP_TITLE_SIZE, title.length() + 1)); } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp index 5244dda86b..7a45a5b5d5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" void cellSysutilAp_init(); Module cellSysutilAp(0x0039, cellSysutilAp_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index aeb8b8f2fc..29acae0df9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -1,6 +1,12 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/FS/vfsFile.h" +#include "Emu/FS/vfsDir.h" #include #include "cellSysutil_SaveData.h" @@ -253,13 +259,13 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ { case CELL_SAVEDATA_FILEOP_READ: file = Emu.GetVFS().OpenFile(filepath, vfsRead); - fileGet->excSize = file->Read(buf, min(fileSet->fileSize, fileSet->fileBufSize)); // TODO: This may fail for big files because of the dest pointer. + fileGet->excSize = file->Read(buf, std::min(fileSet->fileSize, fileSet->fileBufSize)); // TODO: This may fail for big files because of the dest pointer. break; case CELL_SAVEDATA_FILEOP_WRITE: Emu.GetVFS().CreateFile(filepath); file = Emu.GetVFS().OpenFile(filepath, vfsWrite); - fileGet->excSize = file->Write(buf, min(fileSet->fileSize, fileSet->fileBufSize)); // TODO: This may fail for big files because of the dest pointer. + fileGet->excSize = file->Write(buf, std::min(fileSet->fileSize, fileSet->fileBufSize)); // TODO: This may fail for big files because of the dest pointer. break; case CELL_SAVEDATA_FILEOP_DELETE: diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp index efeb9551a1..fa4323a05e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -205,4 +206,5 @@ void cellUsbd_init() cellUsbd.AddFunc(0x074dbb39, cellUsbdAllocateMemory); cellUsbd.AddFunc(0x4e456e81, cellUsbdFreeMemory); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp index 406c6cc3b5..9ce3671f2d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -213,4 +214,5 @@ void cellUsbpspcm_init() cellUsbpspcm.AddFunc(0xdb864d11, cellUsbPspcmWaitData); cellUsbpspcm.AddFunc(0x816799dd, cellUsbPspcmPollData); cellUsbpspcm.AddFunc(0xe76e79ab, cellUsbPspcmCancelWaitData); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index 13a2f0377a..bbe3bcbc6b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "cellUserInfo.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 692fa43772..6396e8a8cd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "cellPamf.h" SMutexGeneral g_mutex_avcodec_open2; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp index e97c3bcf23..63dc1763d3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -268,4 +269,5 @@ void cellVoice_init() cellVoice.AddFunc(0x30f0b5ab, cellVoiceWriteToIPortEx); cellVoice.AddFunc(0x36472c57, cellVoiceReadFromOPort); cellVoice.AddFunc(0x20bafe31, cellVoiceDebugTopology); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index 84c2e410e3..a8139c8856 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" extern "C" { diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index d0feeb26e9..211211cf05 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "Emu/Audio/cellAudio.h" #include "libmixer.h" diff --git a/rpcs3/Emu/SysCalls/Modules/libsnd3.cpp b/rpcs3/Emu/SysCalls/Modules/libsnd3.cpp index 758a22b620..4e1c84d384 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsnd3.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libsnd3.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -324,4 +325,5 @@ s32 cellSnd3SMFGetKeyOnID() //u32 smfID, u32 midiChannel, u32 *keyOnID void libsnd3_init() { -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/libsnd3.h b/rpcs3/Emu/SysCalls/Modules/libsnd3.h index a3a49c7a0e..ade551315b 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsnd3.h +++ b/rpcs3/Emu/SysCalls/Modules/libsnd3.h @@ -1,3 +1,4 @@ +#if 0 #pragma once //libsnd3 Error Codes @@ -51,4 +52,5 @@ struct CellSnd3RequestQueueCtx be_t frontQueueSize; void *rearQueue; be_t rearQueueSize; -}; \ No newline at end of file +}; +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp b/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp index bd0cf23d0e..0a6642efe1 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" @@ -156,4 +157,5 @@ void libsynth2_init() REG_SUB_EMPTY(libsynth2, "synth2", cellSoundSynth2VoiceTransStatus); REG_SUB_EMPTY(libsynth2, "synth2", cellSoundSynth2SetCoreAttr); REG_SUB_EMPTY(libsynth2, "synth2", cellSoundSynth2Generate); -} \ No newline at end of file +} +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/libsynth2.h b/rpcs3/Emu/SysCalls/Modules/libsynth2.h index 8b1c428855..d7985c0742 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsynth2.h +++ b/rpcs3/Emu/SysCalls/Modules/libsynth2.h @@ -1,3 +1,4 @@ +#if 0 #pragma once enum @@ -16,4 +17,5 @@ struct CellSoundSynth2EffectAttr be_t depth_R; be_t delay; be_t feedback; -}; \ No newline at end of file +}; +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index a49aeba4b8..a144896681 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/FS/vfsDir.h" #include "Crypto/unedat.h" #include "sceNp.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 1da7925a70..ab31e1097b 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/FS/vfsDir.h" #include "wx/xml/xml.h" #include "sceNp.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index b485a1ccbb..9bd4d52244 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -1,6 +1,12 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/FS/vfsFile.h" +#include "Emu/FS/vfsStreamMemory.h" #include "Emu/SysCalls/lv2/SC_SPU_Thread.h" #include "Loader/ELF.h" #include "Emu/Cell/RawSPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 9a04eade1e..6895aea967 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -1,6 +1,10 @@ #include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" void sys_fs_init(); Module sys_fs(0x000e, sys_fs_init); @@ -177,7 +181,7 @@ void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_t g_static_funcs_list; diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index a068fbab8b..df7124019f 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -1,7 +1,10 @@ #include "stdafx.h" -#include "SysCalls.h" -#include "Modules.h" -#include "SC_FUNC.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" namespace detail{ template<> bool CheckId(u32 id, ID*& _id,const std::string &name) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp index cf87992ab0..a5b97d88f3 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp @@ -1,4 +1,9 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" + #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/lv2/SC_Condition.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp index 26b4da0617..46bc43fcdb 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp @@ -1,4 +1,9 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" + #include "Emu/SysCalls/SysCalls.h" #include "Emu/Cell/SPUThread.h" #include "Emu/event.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp index f27ef4d934..02d551dbab 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp @@ -1,4 +1,9 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" + #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/lv2/SC_Event_flag.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp index a706c4700a..921f135fb4 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp @@ -1,4 +1,13 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/FS/vfsFile.h" +#include "Emu/FS/vfsDir.h" + #include "SC_FileSystem.h" #include "Emu/SysCalls/SysCalls.h" @@ -139,7 +148,7 @@ int cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread) if (count) if (u32 frag = buf_addr & 4095) // memory page fragment { - u32 req = min(count, 4096 - frag); + u32 req = std::min(count, 4096 - frag); u32 read = file->Read(Memory + buf_addr, req); buf_addr += req; res += read; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp index 5206dc5627..283072895c 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/GS/GCM.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp index 8f1b09dee1..2065564d4a 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" SysCallBase sc_heap("sys_heap"); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp index 8cc7549b77..f0fd45d1cb 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "Emu/Io/Keyboard.h" #include "Emu/SysCalls/SysCalls.h" @@ -121,7 +127,7 @@ int cellKbRead(u32 port_no, mem_class_t data) CellKbData& current_data = Emu.GetKeyboardManager().GetData(port_no); data += current_data.led; data += current_data.mkey; - data += min((u32)current_data.len, CELL_KB_MAX_KEYCODES); + data += std::min((u32)current_data.len, CELL_KB_MAX_KEYCODES); for(s32 i=0; i diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp index eefa0e97d8..3e8846c2d6 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "Emu/Io/Mouse.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp index 59095350e8..04e1e33a06 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp @@ -1,4 +1,8 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" #include "SC_Mutex.h" #include "Utilities/SMutex.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp index 8fd9e51796..1c8a82e4c6 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" extern Module sysPrxForUser; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp index 403fce0ca2..dead7e5e58 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "Emu/Io/Pad.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp index 4da7dbf2ab..4f42e4bc23 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" SysCallBase sc_p("Process"); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp b/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp index 8ede1eaa83..3020518815 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" SysCallBase sys_rsx("sys_rsx"); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp index d69d224b85..88922f07e7 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp @@ -1,4 +1,8 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "SC_Rwlock.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp index e2c5201182..b71e02889c 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp @@ -1,4 +1,9 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/FS/vfsFile.h" #include "SC_SPU_Thread.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp index 5733801298..c92e38a0d8 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" SysCallBase sys_sem("sys_semaphore"); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp index c866677099..c7a9bfd8aa 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp @@ -1,4 +1,8 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/lv2/SC_Spinlock.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp b/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp index 0f3709dbb6..634075de82 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" int sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp index b718ce1ed9..12c4d3881d 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp @@ -6,6 +6,9 @@ * GNU LGPL 2.1 license * */ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" #include "SC_Time.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp index cf1c8c325b..5e58c41d5e 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "SC_Timer.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/event.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp index 56a28669f3..6361e880ca 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" SysCallBase sys_trace("sys_trace"); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp b/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp index 0b53f887df..c761abf6e1 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" #include "SC_Memory.h" diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 1ed7dc1148..a6bbe584ae 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -1,11 +1,13 @@ #include "stdafx.h" -#include "System.h" +#include "Emu/ConLog.h" #include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "Ini.h" #include "Emu/Cell/PPUThread.h" #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/PPUInstrTable.h" +#include "Emu/FS/vfsFile.h" #include "../Crypto/unself.h" #include diff --git a/rpcs3/Gui/CompilerELF.cpp b/rpcs3/Gui/CompilerELF.cpp index e5a94cca11..cbf283df6e 100644 --- a/rpcs3/Gui/CompilerELF.cpp +++ b/rpcs3/Gui/CompilerELF.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "CompilerELF.h" #include "Emu/Cell/PPUProgramCompiler.h" using namespace PPU_opcodes; diff --git a/rpcs3/Gui/ConLog.cpp b/rpcs3/Gui/ConLog.cpp index 6b4dbb6c33..2b103a2f57 100644 --- a/rpcs3/Gui/ConLog.cpp +++ b/rpcs3/Gui/ConLog.cpp @@ -1,10 +1,20 @@ #include "stdafx.h" -#include "Gui/ConLog.h" #include -#include "Ini.h" #include #include +#include + +#include "Ini.h" +#include "Utilities/Thread.h" +#include "Utilities/StrFmt.h" +#include "Emu/ConLog.h" +#include "Gui/ConLogFrame.h" + +#include "Utilities/BEType.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" + LogWriter ConLog; LogFrame* ConLogFrame; diff --git a/rpcs3/Gui/ConLogFrame.h b/rpcs3/Gui/ConLogFrame.h new file mode 100644 index 0000000000..2919a5cbae --- /dev/null +++ b/rpcs3/Gui/ConLogFrame.h @@ -0,0 +1,25 @@ +#pragma once +#include "Emu/ConLog.h" + + +class LogFrame + : public wxPanel + , public ThreadBase +{ + wxListView& m_log; + +public: + LogFrame(wxWindow* parent); + ~LogFrame(); + + bool Close(bool force = false); + +private: + virtual void Task(); + + void OnQuit(wxCloseEvent& event); + + DECLARE_EVENT_TABLE(); +}; + +extern LogFrame* ConLogFrame; \ No newline at end of file diff --git a/rpcs3/Gui/Debugger.cpp b/rpcs3/Gui/Debugger.cpp index 2e80468ecc..8f85cf4311 100644 --- a/rpcs3/Gui/Debugger.cpp +++ b/rpcs3/Gui/Debugger.cpp @@ -1,9 +1,14 @@ #include "stdafx.h" #include -#include "Debugger.h" +#include "Emu/ConLog.h" #include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "rpcs3.h" +#include "Debugger.h" #include "InterpreterDisAsm.h" +#include "Emu/Cell/PPCThread.h" + class DbgEmuPanel : public wxPanel { diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index 2391523fd5..993fa74091 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -1,8 +1,12 @@ #include "stdafx.h" -#include "DisAsmFrame.h" +#include "Emu/ConLog.h" #include "Emu/Memory/Memory.h" -#include "Emu/Cell/PPCThread.h" #include "Emu/System.h" +#include "Emu/SysCalls/lv2/SC_Lwmutex.h" +#include "Emu/SysCalls/lv2/SC_Event_flag.h" +#include "DisAsmFrame.h" +#include "Emu/FS/vfsLocalFile.h" +#include "Emu/Cell/PPCThread.h" #include "Gui/DisAsmFrame.h" #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUDisAsm.h" diff --git a/rpcs3/Gui/DisAsmFrame.h b/rpcs3/Gui/DisAsmFrame.h index 82290e2427..0f9f30b271 100644 --- a/rpcs3/Gui/DisAsmFrame.h +++ b/rpcs3/Gui/DisAsmFrame.h @@ -1,5 +1,7 @@ #pragma once +class PPCThread; + class DisAsmFrame : public wxFrame { static const uint LINES_OPCODES = 40; diff --git a/rpcs3/Gui/FnIdGenerator.cpp b/rpcs3/Gui/FnIdGenerator.cpp index e94aa348be..927f178eaf 100644 --- a/rpcs3/Gui/FnIdGenerator.cpp +++ b/rpcs3/Gui/FnIdGenerator.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" #include "FnIdGenerator.h" FnIdGenerator::FnIdGenerator(wxWindow* parent) diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index da3d85d7df..2b72536d9b 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -1,4 +1,9 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/FS/vfsDir.h" +#include "Emu/FS/vfsFile.h" #include "GameViewer.h" #include "Loader/PSF.h" diff --git a/rpcs3/Gui/InterpreterDisAsm.cpp b/rpcs3/Gui/InterpreterDisAsm.cpp index c208d303ce..75d1016bc7 100644 --- a/rpcs3/Gui/InterpreterDisAsm.cpp +++ b/rpcs3/Gui/InterpreterDisAsm.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "rpcs3.h" +#include "Emu/SysCalls/lv2/SC_Lwmutex.h" +#include "Emu/SysCalls/lv2/SC_Event_flag.h" #include "InterpreterDisAsm.h" #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUDisAsm.h" diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 0af99767c7..92d4e0e9d0 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -1,4 +1,9 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Gui/ConLogFrame.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "rpcs3.h" #include "MainFrame.h" #include "CompilerELF.h" #include "MemoryViewer.h" diff --git a/rpcs3/Gui/MemoryViewer.cpp b/rpcs3/Gui/MemoryViewer.cpp index 0723e20230..407f9b7407 100644 --- a/rpcs3/Gui/MemoryViewer.cpp +++ b/rpcs3/Gui/MemoryViewer.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" + #include "MemoryViewer.h" MemoryViewerPanel::MemoryViewerPanel(wxWindow* parent) diff --git a/rpcs3/Gui/PADManager.cpp b/rpcs3/Gui/PADManager.cpp index 58accb4581..925400aa04 100644 --- a/rpcs3/Gui/PADManager.cpp +++ b/rpcs3/Gui/PADManager.cpp @@ -1,4 +1,8 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "rpcs3.h" #include "PADManager.h" PADManager::PADManager(wxWindow* parent) diff --git a/rpcs3/Gui/RSXDebugger.cpp b/rpcs3/Gui/RSXDebugger.cpp index 3b73bf1cce..6846696888 100644 --- a/rpcs3/Gui/RSXDebugger.cpp +++ b/rpcs3/Gui/RSXDebugger.cpp @@ -1,10 +1,16 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" + #include "RSXDebugger.h" #include "Emu/GS/sysutil_video.h" #include "Emu/GS/GCM.h" #include "MemoryViewer.h" +#include + // TODO: Clear the object when restarting the emulator std::vector m_debug_programs; diff --git a/rpcs3/Gui/VFSManager.cpp b/rpcs3/Gui/VFSManager.cpp index 1223f7ee61..12d87a4f9e 100644 --- a/rpcs3/Gui/VFSManager.cpp +++ b/rpcs3/Gui/VFSManager.cpp @@ -1,4 +1,8 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/FS/VFS.h" #include "VFSManager.h" VFSEntrySettingsDialog::VFSEntrySettingsDialog(wxWindow* parent, VFSManagerEntry& entry) diff --git a/rpcs3/Gui/VHDDManager.cpp b/rpcs3/Gui/VHDDManager.cpp index c3c53cd00c..acd6e349ef 100644 --- a/rpcs3/Gui/VHDDManager.cpp +++ b/rpcs3/Gui/VHDDManager.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/ConLog.h" #include "VHDDManager.h" #include "TextInputDialog.h" #include diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index 968a762670..28372b9be2 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -1,6 +1,8 @@ #include "stdafx.h" #include "Ini.h" +#include "Utilities/StrFmt.h" + #include #include diff --git a/rpcs3/Loader/ELF32.cpp b/rpcs3/Loader/ELF32.cpp index 82d849a4ec..6de63abb6f 100644 --- a/rpcs3/Loader/ELF32.cpp +++ b/rpcs3/Loader/ELF32.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" #include "ELF32.h" void WriteEhdr(wxFile& f, Elf32_Ehdr& ehdr) diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 665ec21019..2ddbc955df 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -1,4 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" #include "ELF64.h" #include "Emu/Cell/PPUInstrTable.h" using namespace PPU_instr; diff --git a/rpcs3/Loader/Loader.cpp b/rpcs3/Loader/Loader.cpp index be0ac775fc..54c41330b2 100644 --- a/rpcs3/Loader/Loader.cpp +++ b/rpcs3/Loader/Loader.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/ConLog.h" #include "Loader.h" #include "ELF.h" #include "SELF.h" diff --git a/rpcs3/Loader/PKG.cpp b/rpcs3/Loader/PKG.cpp index 3faf6fdb25..43512e16ba 100644 --- a/rpcs3/Loader/PKG.cpp +++ b/rpcs3/Loader/PKG.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/ConLog.h" #include "PKG.h" #include "../Crypto/unpkg.h" diff --git a/rpcs3/Loader/PSF.cpp b/rpcs3/Loader/PSF.cpp index 03c5d7f124..6d4890756d 100644 --- a/rpcs3/Loader/PSF.cpp +++ b/rpcs3/Loader/PSF.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/ConLog.h" #include "PSF.h" PSFLoader::PSFLoader(vfsStream& f) : psf_f(f) diff --git a/rpcs3/Loader/SELF.cpp b/rpcs3/Loader/SELF.cpp index e6f522252d..6a95db6a2b 100644 --- a/rpcs3/Loader/SELF.cpp +++ b/rpcs3/Loader/SELF.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/ConLog.h" #include "SELF.h" #include "ELF64.h" diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index 756b9366eb..8b97d6160a 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -1,4 +1,7 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "TROPUSR.h" #include "wx/xml/xml.h" diff --git a/rpcs3/Loader/TRP.cpp b/rpcs3/Loader/TRP.cpp index 5b2fd634f4..7ba04aa82c 100644 --- a/rpcs3/Loader/TRP.cpp +++ b/rpcs3/Loader/TRP.cpp @@ -1,4 +1,8 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/FS/vfsFile.h" #include "TRP.h" TRPLoader::TRPLoader(vfsStream& f) : trp_f(f) diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index ca418dc199..199a2d30a3 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -1,7 +1,10 @@ #include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" #include "rpcs3.h" #include "Ini.h" -#include "Emu/System.h" +#include "Gui/ConLogFrame.h" #ifdef _WIN32 #include diff --git a/rpcs3/rpcs3.h b/rpcs3/rpcs3.h index 5727484759..4ee43a327c 100644 --- a/rpcs3/rpcs3.h +++ b/rpcs3/rpcs3.h @@ -1,16 +1,7 @@ #pragma once #include "Gui/MainFrame.h" -template T min(const T a, const T b) { return a < b ? a : b; } -template T max(const T a, const T b) { return a > b ? a : b; } - -//#define re(val) MemoryBase::Reverse(val) -#define re64(val) MemoryBase::Reverse64(val) -#define re32(val) MemoryBase::Reverse32(val) -#define re16(val) MemoryBase::Reverse16(val) - -template T re(const T val) { T res; se_t::func(res, val); return res; } -template void re(T1& dst, const T2 val) { se_t::func(dst, val); } +class CPUThread; wxDECLARE_EVENT(wxEVT_DBG_COMMAND, wxCommandEvent); diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 4ac2b51db7..1b6bc42dfd 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -1,4 +1,4 @@ - + @@ -383,33 +383,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -500,6 +535,7 @@ + @@ -580,6 +616,8 @@ + + @@ -588,7 +626,6 @@ - diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index c949f78f34..b1380d6f2a 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -74,6 +74,9 @@ {a77ab520-4399-4c95-a7ee-985c9a5ad694} + + {c7dba541-6b78-47fd-b1aa-2325317a8bf0} + @@ -511,6 +514,111 @@ Emu\Io\XInput + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + @@ -567,9 +675,6 @@ Gui - - Gui - Gui @@ -999,5 +1104,14 @@ Emu\Io\XInput + + Emu + + + Emu\SysCalls\Modules\currently_unused + + + Emu\SysCalls\Modules\currently_unused + \ No newline at end of file diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 1622c29110..c53fe16278 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -36,6 +36,7 @@ #include #include #include "wx/app.h" +#include #include #endif @@ -279,11 +280,12 @@ enum Status #include "Utilities/IdManager.h" #include "Utilities/StrFmt.h" - +#ifdef _WIN32 #include "Emu/SysCalls/Callback.h" #include "Ini.h" #include "Gui/FrameBase.h" -#include "Gui/ConLog.h" +#include "Gui/ConLogFrame.h" +#include "Emu/ConLog.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -300,6 +302,7 @@ enum Status #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" #include "rpcs3.h" +#endif #define _PRGNAME_ "RPCS3" #define _PRGVER_ "0.0.0.4" From 8da681eab26c08326423187ec3a225f9cbdaa474 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 6 Jun 2014 03:33:24 +0200 Subject: [PATCH 005/499] enable cotire for better build-times --- rpcs3/CMakeLists.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index cf4ec60490..2a1c12f6b8 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -1,4 +1,8 @@ cmake_minimum_required(VERSION 2.8) + +set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/rpcs3/cmake_modules") +include(cotire) + project(rpcs3) if (CMAKE_COMPILER_IS_GNUCXX) @@ -92,5 +96,6 @@ add_executable(rpcs3 ${RPCS3_SRC}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_CURRENT_BINARY_DIR}/../asmjit/") #hack because the asmjit cmake file force fno exceptions target_link_libraries(rpcs3 asmjit.a ${wxWidgets_LIBRARIES} ${OPENAL_LIBRARY} ${GLEW_LIBRARY} ${OPENGL_LIBRARIES} libavformat.a libavcodec.a libavutil.a libswresample.a libswscale.a ${ZLIB_LIBRARIES}) -#set_target_properties(rpcs3 PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT "${RPCS3_SRC_DIR}/stdafx.h") -#cotire(rpcs3) +set_target_properties(rpcs3 PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT "${RPCS3_SRC_DIR}/stdafx.h") +cotire(rpcs3) + From 5e00dfb5c32a0961071d45ccb9e7b0f6614f493c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sat, 7 Jun 2014 04:22:29 +0200 Subject: [PATCH 006/499] GcmZcullInfo::Pack and removed 32-bit OAL dll --- OpenAL/Win32/libOpenAL32.dll.a | Bin 95688 -> 0 bytes rpcs3/Emu/GS/GCM.h | 18 ++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 7 +++---- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 2 +- 4 files changed, 20 insertions(+), 7 deletions(-) delete mode 100644 OpenAL/Win32/libOpenAL32.dll.a diff --git a/OpenAL/Win32/libOpenAL32.dll.a b/OpenAL/Win32/libOpenAL32.dll.a deleted file mode 100644 index 6911f1b30800da43d9c59bdcc950271a9a292808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95688 zcmeI5eXLwZb--uWN$jL)2>DKMl9$9u)6_WozU^Rw?L5EO;3Ot5F%UxR^?UclFIn$C zcJ~DbO8G3MX@Ec}LWs6hts)flQ$+|>Dos_XLRCM~51|NAl~RNdirQ3dQH2ocIdkUY z%$=F_o&Lq$c~?67apv6FJF~xgX6~7}b8pz&?k}IZ^Mcza+--7tc6MrZ_spK%6B8|& z#9t>S<|p?|(Hk9<%F zl#fE5C{O*65VyNIv-uAy7UIb&v9yw~~Ao%7XH_uao@x6+)o==KUnU^>HCk ze*3#5&+ZTc<%>{9D9^#MqWs=PB!93j1j--%KFJ@yECkAz;r~GS3LFp0pTM!8{3+B8 z%AY+<^5@S9f$|qWAox4l0yT?fW{!2oj{Ns;Ez7D^I@*?bm z@{Jcs{`p2BQ2u3w{Kl9wPIdB$QJ`x$tSxK)L8|NnU-i zXrNqrKgs2v5)G6qe@t@CifEv0e}UxsInhA5;R%wPzAPFjH~)a-);ZBYx$W~LJ6{wH zl-n;NnS7&YpiIA?WcEvkh- ze@JpLnIHvaiP2gbSMwOaiKg6$At0-92d%oZ;>oRSx^e7Gn7aF zn&h!qU3}k?E=9E1k~qwQl=#A&wtERkT-}6mh)W zSzg*0fbq&*z3#9$GX%4>)9c4W320jkA2`*AYy#F^64>7l85jMf_UZLbF<829@d1{7 zAPx37+V3qFgMpuaIRR|3kPF2VYs*+TebihDHutn2FH~lCZS?y^mzOY<2>TrA_0~_e zmmjxTl@2{-0Q(*uP`MU+{nPE?(#HCFuRknSN*Ro_lDQl_Gc3A;wO;pVzZkejeR$v} z!ajF0|BA2LDgtunt-^*{Ofi2L+7FX=)E5eBdF2dz8{(kA-3|?DwAZf1sQI zws*lfG1Q!~!j<%B+35`m?+6?%TD8}Q8~tKw*jwkhaV@uM_c_&OXQ^g(bQ%US)Ctzs zqVJpYG`ojW1Vf%W7ALXYSz0fOmHSqgdK=vpo4>0CtKLR`xmaU7S&d1Zn|Z=Lx0H?1 zGs}n}sf`^wAUXi_l9cPJcPywespUOaZQ4rkD79ASP;wLWqe`i59_+qzqu3}8Y^<&p zeRfikaXD4*g(P_guaw-TTm&LeTijo~YpuKDQuO(`#dXZW9+)w}Bhz2_8NqeT!p}jLOkJFl*jNpw`mLxwj!>H1quV~&DVWOwL#>kO za852WR}9HYgQ;}Nj_eqWG_rZ{@=~t&pBx_S-#D|@S!?&7q@P{t^qhkUCbv7R(bpBg zRFv+yVze+yZetuT&x5p zqmvekonCv$njAO)t+MIP{xVsWiQHJJwylzKkgksTQv3<6V-}@aCKFV08}~?LF1kKS z-FNsE(|gCywwKPTi)rPrkasGT$11svb0o?{9V>k+mB%VsE-o?3MCG#3+W?pD{xwD? z^Pq3efoPRXCkI?Aja70RClh6&j)T6HN@JBQ7q>LZ#K|Riy$$~k**d8#-_jXF#^!uc zUqe4meHF~V*XtDRu3MQ_NxwxlZcS*NvM-{%ov5yb(Mb#9+O;q`X+i&?YhiTKB5;VVdDx)cQLcvl^;Tn2 z?f;+>vGnwj*R$1_)bgHCvF#3Zy=;>H4k@zN#i_9xlgf4^bD5|7$d88hM2+5){i`Yw z(-wN`5aj9~D>}X9wIN(?Xb0#e7~946@{q?ul%-aK9rV-N-R0t*-b&G7Il5|ThaFSL zf)tQebc$i&0aj9LJF0v3pOc+YYdb2qXJ^#f&fsNgLmrM%Yr8O4?oMGF%mJ>1gI7O( zO1ncp&DpRTlWJ>HCE`C!A2}OVV^Yg|N>a&gY2&2hdv)o;sX9m4YoR@CyPagSi%l~2 zp9hrJ7$_rZ71U>TI#^A+6Zp4yrALy(``P0Q?S}tNK+pfENOE|; zk-xSoR$8srro!*S!!1Px?i)n7v?Wy?aB}E(iA)4H8{S5vD(r&5b;~R{%5B-zf|ix;Xuxp zKM(aUhmG{H2(b-5eiP&zJXqN9Z9=q8D6R~bSUcYVxro^bVd~%fPiO~&k>aYbo%x^8 z?j?{L!*+9!Bsb*aW%b#SVzEv1)*wt!buCKg;8r;wtH`Ed%SIX~{PMVg| z;9FBHz$^I9asf@x#ZT}@5G74Bdn%vJv(qs3LT=~{i6$(_*=X8^#exmrM$vQ$vl~Uz z_OP8t(=A~;Llb(rsx*CC(o`O%qkpR&L|u)40c=Pd5oIb&Y7W7xB&u9U#+08FqiT0` zs%Cs2l?zqBid6Z7>GJ=n2UXVqHMm)-%;^Q%rg$T~B2|7NEmonl7+3Svxyrch`xJ7e z#*g$MIPz2vrmD7mr2<-@yo4A{bJb~@^xM8$p?x`9+b0`6sCjIPMzwtxgxe~wCv{oa z&bV^yNnlUvy0D!&IWGpAs%_sVktQ~CpgtsB3Z=x&dMB6;XSSx;3!l+DvBFu39A%84 z+3Ez%sOhQlS~9QR(=$j=V8&K`NP3N;#*(z#aD;yKh$1OaNJ~^OF-F!*b+TspRW^|| z1LyzQeA9)@M~w1KS1`L#{ql*ho#&fw3)>mrv>ocQs&D!Pk`sYpRBVNrt^Wz*FuoA>?KUic@^Mj3ChMo|`NvAh-#TV34f&BPo$%BI40hO!-y zM^(x`j+Bj>_z8K{hc+xZZq}D!FI{g<0n^DPZKDcoksECl<8G=tcNw>vA0zI(*-rIg zt!ld&nzp3}S>Vj`Y9JIbrFd5L=zh-etf!GI825K?38<47s~XSp3Ta(eASvdr5@PO? zb6%7*mn+3zQBm+a}(k8$@_-iaS)B2*~KWER1{Nx(GkhDN%Mm9-7OT z%~OgWK5wx;ZC%y474X6f==dWyAx2X|bln+&rE9}nX!>PElbP}<&tz)je)2~EFH`=< zdZgQw2H%?EPI$#@LZHbM&_Ri5V;m(!(9(eo+4Pn3%n`Xx<|nO|Kef-d(6!ucwCYl?mFQ4?ee=(r&^gFJ8- zv%F@TPKl!Xy`x-4i$9`BD%~Pmqh5B^(PD5ur9wJLd1)~Zl@LSEcoxDhYOdTHsmGKn zw~#JZ<+K=A2~qQmXCZtTxhmapKYmwpr2<-@yo4A{39;}ge-=V6{iqKiP41!$HS$nb zs4kQ3iSN>#D0pv*1F9e87SO^}*2h>%h<;}r8Tg=Ni7n?L{{!lmk56R4S-HbRD_w1j zql9>O#vFY>a>SN)8BdN_0hvc~v=NS`65`$&#|Yl*QUS;&@f_W3TOGz#f|%* zgt&Lck;->lcJ#7&HR>@{j8rOqbOFm0S$)h8r9{2+ojvd*XGtz3Glr1?!;-sFPFWoz zDIw2@a&g$syNBhPu${SwV z8@-Aup0#EZN`r4rfmLQ(GrRncVkfw=ikx#Yl@Q_1xF7T`Lk+CSBx}4bqa;cFAim%f zp(8aBk29GN)y~-CJYm@xSC7LMP*d2%JTdcThg`y?YXV&YQ#|TP^Qu{NGa#>qoUxLiw9H=@mRPo*ua|XqS+a*ZPRfGs#EKh z)YqoxZMton(nUN_YcsB`qbc+rejdT&mLGat>G<}LMn9!B>W4Pt+EqAu%;l&?J)^Xi zY{WBsqXZ?ywKJZdwq^)2k1nkdMM?A1OaV)MYo?F2YAG@7eCNrYVl1Kes!zW^y4OSsiC~yh$SR!NoClQX<#+#v4~HJ2co`E8mk8Z!A9oT=}1~ zjPbV;;?^0*8w=n_JuZenhO|cQSjBi_ppd3d6ikcxr-V3m#?hh`;7UJ`9-f_ABc3Wo zi&)_dM~*JWPfEPnZ{Ko>S1)sZYSp$?Tyxa0V(090RhXXEp3PV__LS`wjy0ZS^x(Yx z`dpPIdLKS-U*j`k=6-8WLaaLD6_4ATAAqes{3LoGc4=ntiO%3}?MaDH`?HF2X}eA^ zdLT?vBYG0O5046Id`85DT6+@W(;4@jk8^$?GE^V$lgdxP{fvkWwf1brq;1a!KZScg zj{rZ12NWhjtNQR$F(z#aXRf@MCf0M_j7cL4b_=uf4$02qT4z}F(RK{kQH5jd7)^|w zgqU>3vBZZZJKm$}YQ#{*SYq&bd~2uIkHdXL!L%4x2{G!7ug2a^Ty@(gJH<+^d{V`$ zFb1T>TAZlO|o-f18TFs*z2Ee50^I9*L(e8 zL8FiL=^fpqif`|NJ)|oH-kaiKc$KYJys!+fQAQEscBe$H^YvD5WyIkhR3E}BU%L@J zcG%z&a8FT+WjY~Raoluu-U5*N7o|uuvt&FmlX1~ zDUQOs^i-jOG9MLAjuDm;+0J)V_81Tb&nDB4H?9#?6?@{gaE2tViqVr2*UtAIv$zrHCF4?x?Qc>GTXY%IISD@%As|$ zBta*s8Y+!)~I#6%A;z^p=!~m%3U^#^QKZ_OeMs^Gakde z-(jjw9;)IPt|i7^$vL_hKPfS9zopA%4#}H2KQNk+k_9??RnM`RYARl~RjB$E(n z&*l^2+8N(-eXm0k^|0$hQ^k9(Ei{qd_2_%nTJs5U?u?@V_i&cXo$PgL;ZmajrjULV zfF;E|R7z|+-yZi7m#Q)Dar0^0#$}C~w>`fZ-)5Z$_!yo$`6h>;)o~^$)a4#Eb9+7| zzU`0T=CX?D8y$k`Hpe8j&t1N;-}<7n^^+3f+8Ot`4--vzcl-X8m3}c8)TxhDz0b`H z$U8``KGr)*h-Xjv(WG2F(;;F>-{pn3^w+3;tGH4&I3QL)j*_E}k(3bG&iMI8cb7=Q zo>hG!0ToxS;UqcZBL<{+d~!Y^zMZj0T68&r5raB$l18@QrsiWrNp@N?ISI?96>~7yggDWj-){v6-k;)h;V1zw%t`C373bgPai40 zZIhuRJMv~oLQfUxZO?5+wXvPDTR0|pfJi#r9Ttxk{qdYfVhYEv*qAa#P)bzWZ`E>{ zN3!1`s7`*U`b;(ji*u!BbuoStV%izsy}gh4S?u)M!+Kq#RljFM6^{EKql(d!5W}9# z_kPGXFnX}9t4}Ye;{A{iDUzr-zDH|f>?FjjGk(78or)c~m<>d%>%&g<`;BPn8YrCO zdvuB8z2}5jb;h&!U+)l9C+}0e@1qC`0R+032TF)hXY7IYa(*CEJH8&M6rCohM#ZM* z5@ORCd!W}j1dX!?a--4;ptuK`O^8Wn+<(4<_&M0`_xj`7f2P9m4v^MFTCdrZD73%Y zLoRbZ_9%9`8>f%8I~zs4_^Ccpf6x@rVTfsC9Bsy+kqNtnW6--5M{-TFF})6>#db>9 zVN4k#XfpA_E7g6189#STeEOEmN z>UWIX)R=!tiBbD}<#L7gTFw{T15=+XwCc0Xh^f+jKTH`TXfsO9PEz<79_85S5Hz0a z$0%4rP28yUV`fsK)cN|LpHl?&dYz)(9nbk@2Xx__=FBQ%K4>#eUBw68<`7h;o>9Ve zKEdK%=Nny&pM*H|oWFuqE>BGRS>h+~@Er&{!d9PN(S$l(Y)|`u(%@TD9D`TtX@?8T z-BZjW##%yDd)6Nl$>oaf);Mc5;_P}wmE~-o(%@TDJOHn8&KxHe!fZs`AR+Rdu}Axv zC}j}olm8HTwe#?c*aosyembZ0Y1gngGn6Ux49hKI*V;;Z*xoUZO7x3HBcFYVJQ&Rk z+F*`GGl!aUrDor1(H`z<;p1AwE3eR#)5scaP>Z?KlP~ezl9u4nN@2|aYSJR&(WVok z!v>9mEgaqBExa=)!S+tS-h+N~ApBxo|fTKQy&)O!?7;PJ zc})4yh2#8KU5uZED0#-c>>G%mK;LpOj=k(|u%H~Qh(V09lt_BME7wc_Wz=J+TjaCi z$~C5N1|_D6v6B!*Z}~0U4hUwPFE4M-Y4CUosxb2MO^_eq7uYcFF(Fzfc$5Y87)ALG z$a!c08@;ujS9UV?f_k+39>~REI~kGDb}zw)Yr=LiPJ?zAg1n3$oGpBXcD-e%Mjq)^ zs$@34G{MT+6j)^t$yAis$fZ@ps7Z*2XMC^!b%vU{MJAIx4v$0G2~qBhJ=9_sVQow zRKZN|#(a;oQd23>=Y0FcuR&(?QV>wn$V@%Bsn|-H!dY^3aii<0O(jI0Gj64>vFy}{ zn~MEn#f|M3TSd&{q{N%^^*C1>YR0r*OrY?7G1J7@Nr*LP>~XHL?2N0&Vf|u-&4_++ zLWFtRp9PuA%4t^uH4D9UxW%Y{tmyQX*M?8lh@Ohi@hlh6ba(uOm=8*bBxn3Im@6zz zi|ys1T*$FLz2=HfgHh0^0+v}a>KI80apjCjx*SPb8w}gs<>H>+O3|s+^;cDroB~>s zO6nL%39;sk`$d-#Niy_PA751QN(@dBSuoCyQpBi9h%#sFe=bF8icT>s%;duw^^2k~jGG;6 zT_lBkZHkBB9p(g4r!ZL95@HdX7;gzt?rDF%8QxNNw)tk;*u1Y%^UW?{cDMpaY`)p{ zu$?#G?3S>dnQwL#)NIxHW*14`R*U|F>u^hA9oI#|(&A=0!%=*_H3d>9IV%;C(dDJY zm`aF&XFMD2r-3PI55{!-zMFu0`x&v;FM7q>!&o zaTMO6pB*l!Y0hHFG4GTR&CWPV(2Nj>6)<<22) | ((m_height>>6)<<6); + ret.start = m_cullStart&(~0xFFF); + ret.offset = m_offset; + ret.status0 = (m_zcullDir<<1) | (m_zcullFormat<<2) | ((m_sFunc&0xF)<<12) | (m_sRef<<16) | (m_sMask<<24); + ret.status1 = (0x2000<<0) | (0x20<<16); + + return ret; + } }; struct GcmTileInfo diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 42645622bb..a7911d5d0f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -603,14 +603,13 @@ int cellGcmSetZcull(u8 index, u32 offset, u32 width, u32 height, u32 cullStart, zcull.m_cullStart = cullStart; zcull.m_zFormat = zFormat; zcull.m_aaFormat = aaFormat; - zcull.m_zCullDir = zCullDir; - zcull.m_zCullFormat = zCullFormat; + zcull.m_zcullDir = zCullDir; + zcull.m_zcullFormat = zCullFormat; zcull.m_sFunc = sFunc; zcull.m_sRef = sRef; zcull.m_sMask = sMask; - // TODO: - //Memory.WriteData(Emu.GetGSManager().GetRender().m_zculls_addr + sizeof(CellGcmZcullInfo)* index, zcull.Pack()); + Memory.WriteData(Emu.GetGSManager().GetRender().m_zculls_addr + sizeof(CellGcmZcullInfo)* index, zcull.Pack()); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index f67f97a5d0..2c84fb61a6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -154,7 +154,7 @@ int cellSpursAttributeSetNamePrefix(mem_ptr_t attr, const me return CELL_SPURS_CORE_ERROR_NULL_POINTER; } - if (size > 15) + if (size > CELL_SPURS_NAME_MAX_LENGTH) { cellSpurs.Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_INVAL"); return CELL_SPURS_CORE_ERROR_INVAL; From 253421697196f7dc69232c0f7ac01e62948ab645 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sat, 7 Jun 2014 08:34:36 +0200 Subject: [PATCH 007/499] Improvements in SC_Process and other lv2 syscalls * Splitted the file in SC_Process.h and SC_Process.cpp. * Some argument data types modified on sys_process_* functions. * Implemented sys_process_get_number_of_object and sys_process_get_id. * Added dummy versions of other sys_process_* functions based on the old SysCalls::lv2Process* code (which I deleted). * Improved BE <-> LE comparisons on SC_Mutex, SC_Lwmutex and SC_Lwcond. * Updated some SC_Memory functions to use mem_ptr_t. NOTE: There are probably better ways to get the active objects that don't imply creating a new data type filled with std::set's. TODO: For some types, the corresponding std::set isn't being updated when an object is created/destroyed. I'll take care of this soon. --- rpcs3/Emu/SysCalls/SysCalls.cpp | 14 +- rpcs3/Emu/SysCalls/SysCalls.h | 17 +- rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp | 19 +- rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp | 33 +-- rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp | 26 +-- rpcs3/Emu/SysCalls/lv2/SC_Memory.h | 6 +- rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp | 17 +- rpcs3/Emu/SysCalls/lv2/SC_Process.cpp | 296 ++++++++------------------ rpcs3/Emu/SysCalls/lv2/SC_Process.h | 70 ++++++ rpcs3/rpcs3.vcxproj | 1 + rpcs3/rpcs3.vcxproj.filters | 3 + 11 files changed, 223 insertions(+), 279 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Process.h diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index df7124019f..bf515ad066 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -22,10 +22,10 @@ static func_caller* sc_table[kSyscallTableLength] = { null_func, bind_func(sys_process_getpid), //1 (0x001) - null_func,//bind_func(sys_process_wait_for_child), //2 (0x002) ROOT + bind_func(sys_process_wait_for_child), //2 (0x002) ROOT bind_func(sys_process_exit), //3 (0x003) - null_func,//bind_func(sys_process_get_status), //4 (0x004) DBG - null_func,//bind_func(sys_process_detach_child), //5 (0x005) DBG + bind_func(sys_process_get_status), //4 (0x004) DBG + bind_func(sys_process_detach_child), //5 (0x005) DBG // Unused: 6-11 null_func, null_func, null_func, null_func, null_func, null_func, @@ -38,17 +38,17 @@ static func_caller* sc_table[kSyscallTableLength] = null_func, null_func, null_func, bind_func(sys_process_getppid), //18 (0x012) - null_func,//bind_func(sys_process_kill), //19 (0x013) + bind_func(sys_process_kill), //19 (0x013) null_func, // null_func,//bind_func(_sys_process_spawn), //21 (0x015) DBG bind_func(sys_process_exit), //22 (0x016) - null_func,//bind_func(sys_process_wait_for_child2), //23 (0x017) DBG + bind_func(sys_process_wait_for_child2), //23 (0x017) DBG null_func,//bind_func(), //24 (0x018) DBG - null_func,//bind_func(sys_process_get_sdk_version), //25 (0x019) + bind_func(sys_process_get_sdk_version), //25 (0x019) null_func,//bind_func(_sys_process_exit), //26 (0x01A) null_func,//bind_func(), //27 (0x01B) DBG null_func,//bind_func(_sys_process_get_number_of_object)//28 (0x01C) ROOT - null_func,//bind_func(sys_process_get_id), //29 (0x01D) ROOT + bind_func(sys_process_get_id), //29 (0x01D) ROOT bind_func(sys_process_get_paramsfo), //30 (0x01E) null_func,//bind_func(sys_process_get_ppu_guid), //31 (0x01F) diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 5793703a28..1be86c0543 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -1,5 +1,6 @@ #pragma once #include "ErrorCodes.h" +#include "lv2/SC_Process.h" #include "lv2/SC_FileSystem.h" #include "lv2/SC_Memory.h" #include "lv2/SC_Timer.h" @@ -119,18 +120,6 @@ public: } }; -//process -extern int sys_process_getpid(); -extern int sys_process_getppid(); -extern int sys_process_get_number_of_object(u32 object, mem32_t nump); -extern int sys_process_get_id(u32 object, mem8_ptr_t buffer, u32 size, mem32_t set_size); -extern int sys_process_get_paramsfo(mem8_ptr_t buffer); -extern int sys_process_exit(int errorcode); -extern void sys_game_process_exitspawn(u32 path_addr, u32 argv_addr, u32 envp_addr, - u32 data_addr, u32 data_size, u32 prio, u64 flags ); -extern void sys_game_process_exitspawn2(u32 path_addr, u32 argv_addr, u32 envp_addr, - u32 data_addr, u32 data_size, u32 prio, u64 flags); - //sys_event extern int sys_event_queue_create(mem32_t equeue_id, mem_ptr_t attr, u64 event_queue_key, int size); extern int sys_event_queue_destroy(u32 equeue_id, int mode); @@ -227,10 +216,10 @@ extern int sys_memory_allocate(u32 size, u32 flags, u32 alloc_addr_addr); extern int sys_memory_allocate_from_container(u32 size, u32 cid, u32 flags, u32 alloc_addr_addr); extern int sys_memory_free(u32 start_addr); extern int sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr); -extern int sys_memory_get_user_memory_size(u32 mem_info_addr); +extern int sys_memory_get_user_memory_size(mem_ptr_t mem_info); extern int sys_memory_container_create(mem32_t cid, u32 yield_size); extern int sys_memory_container_destroy(u32 cid); -extern int sys_memory_container_get_size(u32 mem_info_addr, u32 cid); +extern int sys_memory_container_get_size(mem_ptr_t mem_info, u32 cid); extern int sys_mmapper_allocate_address(u32 size, u64 flags, u32 alignment, u32 alloc_addr); extern int sys_mmapper_allocate_fixed_address(); extern int sys_mmapper_allocate_memory(u32 size, u64 flags, mem32_t mem_id); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp index 027d0dcf91..fce39fe3dd 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp @@ -4,6 +4,7 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" +#include "SC_Process.h" #include "SC_Lwmutex.h" #include "SC_Lwcond.h" @@ -19,16 +20,18 @@ int sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t l return CELL_EFAULT; } + u32 id = sys_lwcond.GetNewId(new Lwcond(attr->name_u64)); lwcond->lwmutex = lwmutex.GetAddr(); - lwcond->lwcond_queue = sys_lwcond.GetNewId(new Lwcond(attr->name_u64)); + lwcond->lwcond_queue = id; + procObjects.lwcond_objects.insert(id); if (lwmutex.IsGood()) { - if (lwmutex->attribute.ToBE() & se32(SYS_SYNC_RETRY)) + if (lwmutex->attribute & SYS_SYNC_RETRY) { sys_lwcond.Warning("Unsupported SYS_SYNC_RETRY lwmutex protocol"); } - if (lwmutex->attribute.ToBE() & se32(SYS_SYNC_RECURSIVE)) + if (lwmutex->attribute & SYS_SYNC_RECURSIVE) { sys_lwcond.Warning("Recursive lwmutex(sq=%d)", (u32)lwmutex->sleep_queue); } @@ -87,7 +90,7 @@ int sys_lwcond_signal(mem_ptr_t lwcond) mem_ptr_t mutex(lwcond->lwmutex); - if (u32 target = (mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? lw->m_queue.pop_prio() : lw->m_queue.pop())) + if (u32 target = (mutex->attribute == SYS_SYNC_PRIORITY ? lw->m_queue.pop_prio() : lw->m_queue.pop())) { lw->signal.lock(target); @@ -118,7 +121,7 @@ int sys_lwcond_signal_all(mem_ptr_t lwcond) mem_ptr_t mutex(lwcond->lwmutex); - while (u32 target = (mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? lw->m_queue.pop_prio() : lw->m_queue.pop())) + while (u32 target = (mutex->attribute == SYS_SYNC_PRIORITY ? lw->m_queue.pop_prio() : lw->m_queue.pop())) { lw->signal.lock(target); @@ -201,7 +204,7 @@ int sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) lw->m_queue.push(tid_le); - if (mutex->recursive_count.ToBE() != se32(1)) + if (mutex->recursive_count != 1) { sys_lwcond.Warning("sys_lwcond_wait(id=%d): associated mutex had wrong recursive value (%d)", (u32)lwcond->lwcond_queue, (u32)mutex->recursive_count); @@ -210,9 +213,9 @@ int sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) if (sq) { - mutex->mutex.unlock(tid, mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? sq->pop_prio() : sq->pop()); + mutex->mutex.unlock(tid, mutex->attribute == SYS_SYNC_PRIORITY ? sq->pop_prio() : sq->pop()); } - else if (mutex->attribute.ToBE() == se32(SYS_SYNC_RETRY)) + else if (mutex->attribute == SYS_SYNC_RETRY) { mutex->mutex.unlock(tid); // SYS_SYNC_RETRY } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp index 68eeafd7c3..fb84c0f219 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp @@ -15,19 +15,19 @@ int sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_tattr_recursive.ToBE()) + switch (attr->attr_recursive) { - case se32(SYS_SYNC_RECURSIVE): break; - case se32(SYS_SYNC_NOT_RECURSIVE): break; + case SYS_SYNC_RECURSIVE: break; + case SYS_SYNC_NOT_RECURSIVE: break; default: sc_lwmutex.Error("Unknown recursive attribute(0x%x)", (u32)attr->attr_recursive); return CELL_EINVAL; } - switch (attr->attr_protocol.ToBE()) + switch (attr->attr_protocol) { - case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_RETRY): break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sc_lwmutex.Error("Invalid SYS_SYNC_PRIORITY_INHERIT protocol attr"); return CELL_EINVAL; - case se32(SYS_SYNC_FIFO): break; + case SYS_SYNC_PRIORITY: break; + case SYS_SYNC_RETRY: break; + case SYS_SYNC_PRIORITY_INHERIT: sc_lwmutex.Error("Invalid SYS_SYNC_PRIORITY_INHERIT protocol attr"); return CELL_EINVAL; + case SYS_SYNC_FIFO: break; default: sc_lwmutex.Error("Unknown protocol attribute(0x%x)", (u32)attr->attr_protocol); return CELL_EINVAL; } @@ -40,6 +40,7 @@ int sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_tname_u64)); lwmutex->sleep_queue = sq_id; + procObjects.lwmutex_objects.insert(sq_id); sc_lwmutex.Warning("*** lwmutex created [%s] (attribute=0x%x): sq_id = %d", std::string(attr->name, 8).c_str(), (u32) lwmutex->attribute, sq_id); @@ -283,14 +284,14 @@ int sys_lwmutex_t::unlock(be_t tid) if (!recursive_count.ToBE()) { be_t target = 0; - switch (attribute.ToBE() & se32(SYS_SYNC_ATTR_PROTOCOL_MASK)) + switch (attribute & SYS_SYNC_ATTR_PROTOCOL_MASK) { - case se32(SYS_SYNC_FIFO): - case se32(SYS_SYNC_PRIORITY): + case SYS_SYNC_FIFO: + case SYS_SYNC_PRIORITY: SleepQueue* sq; if (!Emu.GetIdManager().GetIDData(sleep_queue, sq)) return CELL_ESRCH; - target = attribute.ToBE() & se32(SYS_SYNC_FIFO) ? sq->pop() : sq->pop_prio(); - case se32(SYS_SYNC_RETRY): break; + target = attribute & SYS_SYNC_FIFO ? sq->pop() : sq->pop_prio(); + case SYS_SYNC_RETRY: break; } if (target) mutex.unlock(tid, target); else mutex.unlock(tid); @@ -310,10 +311,10 @@ int sys_lwmutex_t::lock(be_t tid, u64 timeout) SleepQueue* sq; if (!Emu.GetIdManager().GetIDData(sleep_queue, sq)) return CELL_ESRCH; - switch (attribute.ToBE() & se32(SYS_SYNC_ATTR_PROTOCOL_MASK)) + switch (attribute & SYS_SYNC_ATTR_PROTOCOL_MASK) { - case se32(SYS_SYNC_PRIORITY): - case se32(SYS_SYNC_FIFO): + case SYS_SYNC_PRIORITY: + case SYS_SYNC_FIFO: sq->push(tid); default: break; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp index 51a00d678a..c1aa7e562e 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp @@ -104,17 +104,13 @@ int sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr) return CELL_OK; } -int sys_memory_get_user_memory_size(u32 mem_info_addr) +int sys_memory_get_user_memory_size(mem_ptr_t mem_info) { - sc_mem.Warning("sys_memory_get_user_memory_size(mem_info_addr=0x%x)", mem_info_addr); + sc_mem.Warning("sys_memory_get_user_memory_size(mem_info_addr=0x%x)", mem_info.GetAddr()); // Fetch the user memory available. - sys_memory_info info; - info.total_user_memory = re(Memory.GetUserMemTotalSize()); - info.available_user_memory = re(Memory.GetUserMemAvailSize()); - - Memory.WriteData(mem_info_addr, info); - + mem_info->total_user_memory = Memory.GetUserMemTotalSize(); + mem_info->available_user_memory = Memory.GetUserMemAvailSize(); return CELL_OK; } @@ -134,6 +130,7 @@ int sys_memory_container_create(mem32_t cid, u32 yield_size) // Wrap the allocated memory in a memory container. MemoryContainerInfo *ct = new MemoryContainerInfo(addr, yield_size); cid = sc_mem.GetNewId(ct); + procObjects.mem_objects.insert(cid); sc_mem.Warning("*** memory_container created(addr=0x%llx): id = %d", addr, cid.GetValue()); @@ -156,9 +153,9 @@ int sys_memory_container_destroy(u32 cid) return CELL_OK; } -int sys_memory_container_get_size(u32 mem_info_addr, u32 cid) +int sys_memory_container_get_size(mem_ptr_t mem_info, u32 cid) { - sc_mem.Warning("sys_memory_container_get_size(mem_info_addr=0x%x, cid=%d)", mem_info_addr, cid); + sc_mem.Warning("sys_memory_container_get_size(mem_info_addr=0x%x, cid=%d)", mem_info.GetAddr(), cid); // Check if this container ID is valid. MemoryContainerInfo* ct; @@ -166,12 +163,9 @@ int sys_memory_container_get_size(u32 mem_info_addr, u32 cid) return CELL_ESRCH; // HACK: Return all memory. - sys_memory_info info; - info.total_user_memory = re(ct->size); - info.available_user_memory = re(ct->size); - - Memory.WriteData(mem_info_addr, info); - + sys_memory_info_t info; + mem_info->total_user_memory = ct->size; + mem_info->available_user_memory = ct->size; return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Memory.h b/rpcs3/Emu/SysCalls/lv2/SC_Memory.h index 6203c4fd7e..e8d37d3905 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Memory.h +++ b/rpcs3/Emu/SysCalls/lv2/SC_Memory.h @@ -21,10 +21,10 @@ enum SYS_MEMORY_PAGE_SIZE_64K = 0x200, }; -struct sys_memory_info +struct sys_memory_info_t { - u32 total_user_memory; - u32 available_user_memory; + be_t total_user_memory; + be_t available_user_memory; }; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp index 04e1e33a06..1383995d66 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp @@ -18,20 +18,20 @@ int sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) return CELL_EFAULT; } - switch (attr->protocol.ToBE()) + switch (attr->protocol) { - case se32(SYS_SYNC_FIFO): break; - case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_mtx.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT protocol"); break; - case se32(SYS_SYNC_RETRY): sys_mtx.Error("Invalid SYS_SYNC_RETRY protocol"); return CELL_EINVAL; + case SYS_SYNC_FIFO: break; + case SYS_SYNC_PRIORITY: break; + case SYS_SYNC_PRIORITY_INHERIT: sys_mtx.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT protocol"); break; + case SYS_SYNC_RETRY: sys_mtx.Error("Invalid SYS_SYNC_RETRY protocol"); return CELL_EINVAL; default: sys_mtx.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; } bool is_recursive; - switch (attr->recursive.ToBE()) + switch (attr->recursive) { - case se32(SYS_SYNC_RECURSIVE): is_recursive = true; break; - case se32(SYS_SYNC_NOT_RECURSIVE): is_recursive = false; break; + case SYS_SYNC_RECURSIVE: is_recursive = true; break; + case SYS_SYNC_NOT_RECURSIVE: is_recursive = false; break; default: sys_mtx.Error("Unknown recursive attribute(0x%x)", (u32)attr->recursive); return CELL_EINVAL; } @@ -44,6 +44,7 @@ int sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) u32 tid = GetCurrentPPUThread().GetId(); Mutex* mutex = new Mutex((u32)attr->protocol, is_recursive, attr->name_u64); u32 id = sys_mtx.GetNewId(mutex); + procObjects.mutex_objects.insert(id); mutex->m_mutex.lock(tid); mutex->id = id; mutex_id = id; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp index 4f42e4bc23..e5d229a974 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp @@ -3,31 +3,11 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "SC_Process.h" SysCallBase sc_p("Process"); -//Process Local Object -enum -{ - SYS_MEM_OBJECT = (0x08UL), - SYS_MUTEX_OBJECT = (0x85UL), - SYS_COND_OBJECT = (0x86UL), - SYS_RWLOCK_OBJECT = (0x88UL), - SYS_INTR_TAG_OBJECT = (0x0AUL), - SYS_INTR_SERVICE_HANDLE_OBJECT = (0x0BUL), - SYS_EVENT_QUEUE_OBJECT = (0x8DUL), - SYS_EVENT_PORT_OBJECT = (0x0EUL), - SYS_TRACE_OBJECT = (0x21UL), - SYS_SPUIMAGE_OBJECT = (0x22UL), - SYS_PRX_OBJECT = (0x23UL), - SYS_SPUPORT_OBJECT = (0x24UL), - SYS_LWMUTEX_OBJECT = (0x95UL), - SYS_TIMER_OBJECT = (0x11UL), - SYS_SEMAPHORE_OBJECT = (0x96UL), - SYS_FS_FD_OBJECT = (0x73UL), - SYS_LWCOND_OBJECT = (0x97UL), - SYS_EVENT_FLAG_OBJECT = (0x98UL), -}; +sysProcessObjects_t procObjects; int sys_process_getpid() { @@ -40,7 +20,7 @@ int sys_process_getppid() return 0; } -int sys_process_exit(int errorcode) +int sys_process_exit(s32 errorcode) { sc_p.Warning("sys_process_exit(%d)", errorcode); Emu.Pause(); // Emu.Stop() does crash @@ -150,169 +130,82 @@ void sys_game_process_exitspawn2( return; } - int sys_process_get_number_of_object(u32 object, mem32_t nump) { - sc_p.Warning("TODO: sys_process_get_number_of_object(object=%d, nump_addr=0x%x)", + sc_p.Warning("sys_process_get_number_of_object(object=%d, nump_addr=0x%x)", object, nump.GetAddr()); + if (!nump.IsGood()) + return CELL_EFAULT; + switch(object) { - case SYS_MEM_OBJECT: - nump = 0; - return CELL_OK; + case SYS_MEM_OBJECT: nump = procObjects.mem_objects.size(); break; + case SYS_MUTEX_OBJECT: nump = procObjects.mutex_objects.size(); break; + case SYS_COND_OBJECT: nump = procObjects.cond_objects.size(); break; + case SYS_RWLOCK_OBJECT: nump = procObjects.rwlock_objects.size(); break; + case SYS_INTR_TAG_OBJECT: nump = procObjects.intr_tag_objects.size(); break; + case SYS_INTR_SERVICE_HANDLE_OBJECT: nump = procObjects.intr_service_handle_objects.size(); break; + case SYS_EVENT_QUEUE_OBJECT: nump = procObjects.event_queue_objects.size(); break; + case SYS_EVENT_PORT_OBJECT: nump = procObjects.event_port_objects.size(); break; + case SYS_TRACE_OBJECT: nump = procObjects.trace_objects.size(); break; + case SYS_SPUIMAGE_OBJECT: nump = procObjects.spuimage_objects.size(); break; + case SYS_PRX_OBJECT: nump = procObjects.prx_objects.size(); break; + case SYS_SPUPORT_OBJECT: nump = procObjects.spuport_objects.size(); break; + case SYS_LWMUTEX_OBJECT: nump = procObjects.lwmutex_objects.size(); break; + case SYS_TIMER_OBJECT: nump = procObjects.timer_objects.size(); break; + case SYS_SEMAPHORE_OBJECT: nump = procObjects.semaphore_objects.size(); break; + case SYS_FS_FD_OBJECT: nump = procObjects.fs_fd_objects.size(); break; + case SYS_LWCOND_OBJECT: nump = procObjects.lwcond_objects.size(); break; - case SYS_MUTEX_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_COND_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_RWLOCK_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_INTR_TAG_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_INTR_SERVICE_HANDLE_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_EVENT_QUEUE_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_EVENT_PORT_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_TRACE_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_SPUIMAGE_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_PRX_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_SPUPORT_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_LWMUTEX_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_TIMER_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_SEMAPHORE_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_FS_FD_OBJECT: - nump = 0; - return CELL_OK; - - case SYS_LWCOND_OBJECT: - nump = 0; - return CELL_OK; - - default: + default: return CELL_EINVAL; } + + return CELL_OK; } -int sys_process_get_id(u32 object, mem8_ptr_t buffer, u32 size, mem32_t set_size) +int sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_size) { sc_p.Warning("TODO: sys_process_get_id(object=%d, buffer_addr=0x%x, size=%d, set_size_addr=0x%x)", object, buffer.GetAddr(), size, set_size.GetAddr()); switch(object) { - case SYS_MEM_OBJECT: - set_size = 0; - return CELL_OK; - case SYS_MUTEX_OBJECT: - set_size = 0; - return CELL_OK; +#define ADD_OBJECTS(objects) { \ + u32 i=0; \ + for(auto& id=objects.begin(); i mem_objects; + std::set mutex_objects; + std::set cond_objects; + std::set rwlock_objects; + std::set intr_tag_objects; + std::set intr_service_handle_objects; + std::set event_queue_objects; + std::set event_port_objects; + std::set trace_objects; + std::set spuimage_objects; + std::set prx_objects; + std::set spuport_objects; + std::set lwmutex_objects; + std::set timer_objects; + std::set semaphore_objects; + std::set fs_fd_objects; + std::set lwcond_objects; + std::set event_flag_objects; +}; + +// Extern +extern sysProcessObjects_t procObjects; + +// SysCalls +int sys_process_getpid(); +int sys_process_getppid(); +int sys_process_get_number_of_object(u32 object, mem32_t nump); +int sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_size); +int sys_process_get_paramsfo(mem8_ptr_t buffer); +int sys_process_get_sdk_version(u32 pid, mem32_t version); +int sys_process_get_status(u64 unk); +int sys_process_exit(s32 errorcode); +int sys_process_kill(u32 pid); +int sys_process_wait_for_child(u32 pid, mem32_t status, u64 unk); +int sys_process_wait_for_child2(u64 unk1, u64 unk2, u64 unk3, u64 unk4, u64 unk5, u64 unk6); +int sys_process_detach_child(u64 unk); +void sys_game_process_exitspawn(u32 path_addr, u32 argv_addr, u32 envp_addr, + u32 data_addr, u32 data_size, u32 prio, u64 flags); +void sys_game_process_exitspawn2(u32 path_addr, u32 argv_addr, u32 envp_addr, + u32 data_addr, u32 data_size, u32 prio, u64 flags); diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 1b6bc42dfd..ff0f4476a2 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -593,6 +593,7 @@ + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index b1380d6f2a..854c30c41b 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -1113,5 +1113,8 @@ Emu\SysCalls\Modules\currently_unused + + Emu\SysCalls\lv2 + \ No newline at end of file From 5ed77a3ca9dbfe846b741eba57bc4865c8a91c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sat, 7 Jun 2014 09:08:16 +0200 Subject: [PATCH 008/499] Reverted BE <-> LE comp. changes in some lv2 SCs --- rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp | 30 +++++++++++++-------------- rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp | 16 +++++++------- rpcs3/Emu/SysCalls/lv2/SC_Process.cpp | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp index fb84c0f219..20a5f64f54 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp @@ -15,19 +15,19 @@ int sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_tattr_recursive) + switch (attr->attr_recursive.ToBE()) { - case SYS_SYNC_RECURSIVE: break; - case SYS_SYNC_NOT_RECURSIVE: break; + case se32(SYS_SYNC_RECURSIVE): break; + case se32(SYS_SYNC_NOT_RECURSIVE): break; default: sc_lwmutex.Error("Unknown recursive attribute(0x%x)", (u32)attr->attr_recursive); return CELL_EINVAL; } - switch (attr->attr_protocol) + switch (attr->attr_protocol.ToBE()) { - case SYS_SYNC_PRIORITY: break; - case SYS_SYNC_RETRY: break; - case SYS_SYNC_PRIORITY_INHERIT: sc_lwmutex.Error("Invalid SYS_SYNC_PRIORITY_INHERIT protocol attr"); return CELL_EINVAL; - case SYS_SYNC_FIFO: break; + case se32(SYS_SYNC_PRIORITY): break; + case se32(SYS_SYNC_RETRY): break; + case se32(SYS_SYNC_PRIORITY_INHERIT): sc_lwmutex.Error("Invalid SYS_SYNC_PRIORITY_INHERIT protocol attr"); return CELL_EINVAL; + case se32(SYS_SYNC_FIFO): break; default: sc_lwmutex.Error("Unknown protocol attribute(0x%x)", (u32)attr->attr_protocol); return CELL_EINVAL; } @@ -284,14 +284,14 @@ int sys_lwmutex_t::unlock(be_t tid) if (!recursive_count.ToBE()) { be_t target = 0; - switch (attribute & SYS_SYNC_ATTR_PROTOCOL_MASK) + switch (attribute.ToBE() & se32(SYS_SYNC_ATTR_PROTOCOL_MASK)) { - case SYS_SYNC_FIFO: - case SYS_SYNC_PRIORITY: + case se32(SYS_SYNC_FIFO): + case se32(SYS_SYNC_PRIORITY): SleepQueue* sq; if (!Emu.GetIdManager().GetIDData(sleep_queue, sq)) return CELL_ESRCH; target = attribute & SYS_SYNC_FIFO ? sq->pop() : sq->pop_prio(); - case SYS_SYNC_RETRY: break; + case se32(SYS_SYNC_RETRY): break; } if (target) mutex.unlock(tid, target); else mutex.unlock(tid); @@ -311,10 +311,10 @@ int sys_lwmutex_t::lock(be_t tid, u64 timeout) SleepQueue* sq; if (!Emu.GetIdManager().GetIDData(sleep_queue, sq)) return CELL_ESRCH; - switch (attribute & SYS_SYNC_ATTR_PROTOCOL_MASK) + switch (attribute.ToBE() & se32(SYS_SYNC_ATTR_PROTOCOL_MASK)) { - case SYS_SYNC_PRIORITY: - case SYS_SYNC_FIFO: + case se32(SYS_SYNC_PRIORITY): + case se32(SYS_SYNC_FIFO): sq->push(tid); default: break; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp index 1383995d66..f4cf2785ff 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp @@ -18,20 +18,20 @@ int sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) return CELL_EFAULT; } - switch (attr->protocol) + switch (attr->protocol.ToBE()) { - case SYS_SYNC_FIFO: break; - case SYS_SYNC_PRIORITY: break; - case SYS_SYNC_PRIORITY_INHERIT: sys_mtx.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT protocol"); break; - case SYS_SYNC_RETRY: sys_mtx.Error("Invalid SYS_SYNC_RETRY protocol"); return CELL_EINVAL; + case se32(SYS_SYNC_FIFO): break; + case se32(SYS_SYNC_PRIORITY): break; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_mtx.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT protocol"); break; + case se32(SYS_SYNC_RETRY): sys_mtx.Error("Invalid SYS_SYNC_RETRY protocol"); return CELL_EINVAL; default: sys_mtx.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; } bool is_recursive; - switch (attr->recursive) + switch (attr->recursive.ToBE()) { - case SYS_SYNC_RECURSIVE: is_recursive = true; break; - case SYS_SYNC_NOT_RECURSIVE: is_recursive = false; break; + case se32(SYS_SYNC_RECURSIVE): is_recursive = true; break; + case se32(SYS_SYNC_NOT_RECURSIVE): is_recursive = false; break; default: sys_mtx.Error("Unknown recursive attribute(0x%x)", (u32)attr->recursive); return CELL_EINVAL; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp index e5d229a974..d0bf322846 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp @@ -175,7 +175,7 @@ int sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_siz #define ADD_OBJECTS(objects) { \ u32 i=0; \ - for(auto& id=objects.begin(); i Date: Sat, 7 Jun 2014 15:54:02 +0800 Subject: [PATCH 009/499] Centre the game list panel --- rpcs3/Gui/ConLog.cpp | 2 +- rpcs3/Gui/MainFrame.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Gui/ConLog.cpp b/rpcs3/Gui/ConLog.cpp index 2b103a2f57..d25f16e256 100644 --- a/rpcs3/Gui/ConLog.cpp +++ b/rpcs3/Gui/ConLog.cpp @@ -182,7 +182,7 @@ LogFrame::LogFrame(wxWindow* parent) , ThreadBase("LogThread") , m_log(*new wxListView(this)) { - m_log.InsertColumn(0, wxEmptyString); + m_log.InsertColumn(0, "Thread"); m_log.InsertColumn(1, "Log"); m_log.SetBackgroundColour(wxColour("Black")); diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 92d4e0e9d0..62a7288a95 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -110,7 +110,7 @@ MainFrame::MainFrame() m_debugger_frame = new DebuggerPanel(this); ConLogFrame = new LogFrame(this); - AddPane(m_game_viewer, "Game List", wxAUI_DOCK_BOTTOM); + AddPane(m_game_viewer, "Game List", wxAUI_DOCK_CENTRE); AddPane(ConLogFrame, "Log", wxAUI_DOCK_BOTTOM); AddPane(m_debugger_frame, "Debugger", wxAUI_DOCK_RIGHT); From 7855ebcd9f990e460f2d010e106cfb5aa8011377 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 7 Jun 2014 17:32:15 +0800 Subject: [PATCH 010/499] cellSpurs : initialize eventFlag --- rpcs3/Emu/Cell/SPURSManager.h | 26 ++++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 12 ++++++++--- rpcs3/Emu/SysCalls/Modules/cellSpurs.h | 3 +-- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/Cell/SPURSManager.h b/rpcs3/Emu/Cell/SPURSManager.h index ab250b44a4..120a096c43 100644 --- a/rpcs3/Emu/Cell/SPURSManager.h +++ b/rpcs3/Emu/Cell/SPURSManager.h @@ -89,13 +89,39 @@ protected: be_t container; }; +class SPURSManagerEventFlag +{ +public: + SPURSManagerEventFlag(u32 flagClearMode, u32 flagDirection) + { + this->flagClearMode = flagClearMode; + this->flagDirection = flagDirection; + } + + u32 _getDirection() + { + return this->flagDirection; + } + + u32 _getClearMode () + { + return this->flagClearMode; + } + +protected: + be_t flagClearMode; + be_t flagDirection; +}; + // Main SPURS manager class. class SPURSManager { public: SPURSManager(SPURSManagerAttribute *attr); + SPURSManager(SPURSManagerEventFlag *eventFlag); void Finalize(); protected: SPURSManagerAttribute *attr; + SPURSManagerEventFlag *eventFlag; }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 2c84fb61a6..daf61c8f6b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -482,7 +482,7 @@ int cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t taskset, mem_ptr_t eventFlag, u32 flagClearMode, u32 flagDirection) { - cellSpurs.Error("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%u, flagDirection=%u)", spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); + cellSpurs.Warning("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%u, flagDirection=%u)", spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); if ((taskset.GetAddr() % 128 != 0) || (eventFlag.GetAddr() % 128 != 0)) { @@ -496,6 +496,8 @@ int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_teventFlag = new SPURSManagerEventFlag(flagClearMode, flagDirection); + return CELL_OK; } @@ -615,7 +617,7 @@ int cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t m int cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem32_t direction) { - cellSpurs.Error("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=%u)", eventFlag.GetAddr(), direction.GetAddr()); + cellSpurs.Warning("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=%u)", eventFlag.GetAddr(), direction.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -629,12 +631,14 @@ int cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem3 return CELL_SPURS_TASK_ERROR_NULL_POINTER; } + direction = eventFlag->eventFlag->_getDirection(); + return CELL_OK; } int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem32_t clear_mode) { - cellSpurs.Error("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=%u)", eventFlag.GetAddr(), clear_mode.GetAddr()); + cellSpurs.Warning("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=%u)", eventFlag.GetAddr(), clear_mode.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -648,6 +652,8 @@ int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem3 return CELL_SPURS_TASK_ERROR_NULL_POINTER; } + clear_mode = eventFlag->eventFlag->_getClearMode(); + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h index 3609e82b30..4a3a8cf81e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h @@ -242,7 +242,6 @@ struct CellSpursTaskBinInfo CellSpursTaskLsPattern lsPattern; }; -// cellSpurs event flag. struct CellSpursEventFlag { - u8 skip[128]; + SPURSManagerEventFlag *eventFlag; }; From f8e8e2f624199adf5e994f1b20deab9b0ee05923 Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 7 Jun 2014 17:15:49 +0300 Subject: [PATCH 011/499] Improved Fragment Shader Decompiler - Implemented LIT, RFL, LIF, BRK, IF, LOOP, REP - Fixed KIL, RCP, RSQ, DP2A Implemented fmt::replace_first & fmt::replace_all --- Utilities/StrFmt.cpp | 23 +++ Utilities/StrFmt.h | 53 ++++- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 283 +++++++++++++++++--------- rpcs3/Emu/GS/GL/GLFragmentProgram.h | 26 ++- rpcs3/Emu/GS/GL/GLGSRender.cpp | 2 +- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 6 +- 6 files changed, 294 insertions(+), 99 deletions(-) diff --git a/Utilities/StrFmt.cpp b/Utilities/StrFmt.cpp index fc469c7b79..2bd595992d 100644 --- a/Utilities/StrFmt.cpp +++ b/Utilities/StrFmt.cpp @@ -31,6 +31,29 @@ std::string fmt::FormatV(std::string fmt, va_list args) return str; } +std::string replace_first(const std::string& src, const std::string& from, const std::string& to) +{ + auto pos = src.find(from); + + if (pos == std::string::npos) + { + return src; + } + + return (pos ? src.substr(0, pos) + to : to) + std::string(src.c_str() + pos + from.length()); +} + +std::string replace_all(std::string src, const std::string& from, const std::string& to) +{ + for (auto pos = src.find(from); pos != std::string::npos; src.find(from, pos + 1)) + { + src = (pos ? src.substr(0, pos) + to : to) + std::string(src.c_str() + pos + from.length()); + pos += to.length(); + } + + return src; +} + //convert a wxString to a std::string encoded in utf8 //CAUTION, only use this to interface with wxWidgets classes std::string fmt::ToUTF8(const wxString& right) diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 744d6ea189..9116c26227 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -76,7 +76,7 @@ namespace fmt{ //wrapper to deal with advance sprintf formating options with automatic length finding template - string Format(const string &fmt, Args&& ... parameters) + string Format(const string &fmt, Args ... parameters) { size_t length = 256; string str; @@ -98,6 +98,57 @@ namespace fmt{ return str; } + std::string replace_first(const std::string& src, const std::string& from, const std::string& to); + std::string replace_all(std::string src, const std::string& from, const std::string& to); + + template + std::string replace_all(std::string src, const std::pair(&list)[list_size]) + { + for (size_t pos = 0; pos < src.length(); ++pos) + { + for (size_t i = 0; i < list_size; ++i) + { + const size_t comp_length = list[i].first.length(); + + if (src.length() - pos < comp_length) + continue; + + if (src.substr(pos, comp_length) == list[i].first) + { + src = (pos ? src.substr(0, pos) + list[i].second : list[i].second) + std::string(src.c_str() + pos + comp_length); + pos += list[i].second.length(); + break; + } + } + } + + return src; + } + + template + std::string replace_all(std::string src, const std::pair>(&list)[list_size]) + { + for (size_t pos = 0; pos < src.length(); ++pos) + { + for (size_t i = 0; i < list_size; ++i) + { + const size_t comp_length = list[i].first.length(); + + if (src.length() - pos < comp_length) + continue; + + if (src.substr(pos, comp_length) == list[i].first) + { + src = (pos ? src.substr(0, pos) + list[i].second() : list[i].second()) + std::string(src.c_str() + pos + comp_length); + pos += list[i].second().length(); + break; + } + } + } + + return src; + } + //convert a wxString to a std::string encoded in utf8 //CAUTION, only use this to interface with wxWidgets classes std::string ToUTF8(const wxString& right); diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index d6edee385f..995a16112d 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -4,7 +4,7 @@ #include "Emu/System.h" #include "GLFragmentProgram.h" -void GLFragmentDecompilerThread::AddCode(std::string code, bool append_mask) +void GLFragmentDecompilerThread::SetDst(std::string code, bool append_mask) { if(!src0.exec_if_eq && !src0.exec_if_gr && !src0.exec_if_lt) return; @@ -13,59 +13,23 @@ void GLFragmentDecompilerThread::AddCode(std::string code, bool append_mask) if(!src0.exec_if_gr || !src0.exec_if_lt || !src0.exec_if_eq) { - static const char f[4] = {'x', 'y', 'z', 'w'}; - - std::string swizzle; - swizzle += f[src0.cond_swizzle_x]; - swizzle += f[src0.cond_swizzle_y]; - swizzle += f[src0.cond_swizzle_z]; - swizzle += f[src0.cond_swizzle_w]; - swizzle = swizzle == "xyzw" ? "" : "." + swizzle; - - if(src0.exec_if_gr && src0.exec_if_eq) - { - cond = "greaterThanEqual"; - } - else if(src0.exec_if_lt && src0.exec_if_eq) - { - cond = "lessThanEqual"; - } - else if(src0.exec_if_gr && src0.exec_if_lt) - { - cond = "notEqual"; - } - else if(src0.exec_if_gr) - { - cond = "greaterThan"; - } - else if(src0.exec_if_lt) - { - cond = "lessThan"; - } - else //if(src0.exec_if_eq) - { - cond = "equal"; - } - - cond = "if(all(" + cond + "(" + AddCond(dst.no_dest) + swizzle + ", vec4(0.0)))) "; + cond = "if(" + GetCond() + ") "; } - if(src1.scale) + switch(src1.scale) { - switch(src1.scale) - { - case 1: code = "(" + code + " * 2)"; break; - case 2: code = "(" + code + " * 4)"; break; - case 3: code = "(" + code + " * 8)"; break; - case 5: code = "(" + code + " / 2)"; break; - case 6: code = "(" + code + " / 4)"; break; - case 7: code = "(" + code + " / 8)"; break; + case 0: break; + case 1: code = "(" + code + " * 2.0)"; break; + case 2: code = "(" + code + " * 4.0)"; break; + case 3: code = "(" + code + " * 8.0)"; break; + case 5: code = "(" + code + " / 2.0)"; break; + case 6: code = "(" + code + " / 4.0)"; break; + case 7: code = "(" + code + " / 8.0)"; break; - default: - ConLog.Error("Bad scale: %d", fmt::by_value(src1.scale)); - Emu.Pause(); - break; - } + default: + ConLog.Error("Bad scale: %d", fmt::by_value(src1.scale)); + Emu.Pause(); + break; } if(dst.saturate) @@ -87,9 +51,12 @@ void GLFragmentDecompilerThread::AddCode(std::string code, bool append_mask) dest = AddReg(dst.dest_reg, dst.fp16); } - code = cond + (dest.length() ? dest + mask + " = " : "") + code + (append_mask ? mask : ""); + AddCode(cond + (dest.length() ? dest + mask + " = " : "") + code + (append_mask ? mask : "") + ";"); +} - main += "\t" + code + ";\n"; +void GLFragmentDecompilerThread::AddCode(const std::string& code) +{ + main.append(m_code_level, '\t') += Format(code) + "\n"; } std::string GLFragmentDecompilerThread::GetMask() @@ -125,7 +92,7 @@ std::string GLFragmentDecompilerThread::AddReg(u32 index, int fp16) bool GLFragmentDecompilerThread::HasReg(u32 index, int fp16) { - return m_parr.HasParam((index >= 2 && index <= 4) ? PARAM_OUT : PARAM_NONE, "vec4", + return m_parr.HasParam(PARAM_NONE, "vec4", std::string(fp16 ? "h" : "r") + std::to_string(index)); } @@ -159,6 +126,70 @@ std::string GLFragmentDecompilerThread::AddTex() return m_parr.AddParam(PARAM_UNIFORM, "sampler2D", std::string("tex") + std::to_string(dst.tex_num)); } +std::string GLFragmentDecompilerThread::Format(std::string code) +{ + const std::pair> repl_list[] = + { + { "$$", []() -> std::string { return "$"; } }, + { "$0", std::bind(std::mem_fn(&GLFragmentDecompilerThread::GetSRC), this, src0) }, + { "$1", std::bind(std::mem_fn(&GLFragmentDecompilerThread::GetSRC), this, src1) }, + { "$2", std::bind(std::mem_fn(&GLFragmentDecompilerThread::GetSRC), this, src2) }, + { "$t", std::bind(std::mem_fn(&GLFragmentDecompilerThread::AddTex), this) }, + { "$cond", std::bind(std::mem_fn(&GLFragmentDecompilerThread::GetCond), this) }, + { "$c", std::bind(std::mem_fn(&GLFragmentDecompilerThread::AddConst), this) } + }; + + return fmt::replace_all(code, repl_list); +} + +std::string GLFragmentDecompilerThread::GetCond() +{ + if (src0.exec_if_gr && src0.exec_if_lt && src0.exec_if_eq) + { + return "true"; + } + else if (!src0.exec_if_gr && !src0.exec_if_lt && !src0.exec_if_eq) + { + return "false"; + } + + static const char f[4] = { 'x', 'y', 'z', 'w' }; + + std::string swizzle, cond; + swizzle += f[src0.cond_swizzle_x]; + swizzle += f[src0.cond_swizzle_y]; + swizzle += f[src0.cond_swizzle_z]; + swizzle += f[src0.cond_swizzle_w]; + swizzle = swizzle == "xyzw" ? "" : "." + swizzle; + + if (src0.exec_if_gr && src0.exec_if_eq) + { + cond = "greaterThanEqual"; + } + else if (src0.exec_if_lt && src0.exec_if_eq) + { + cond = "lessThanEqual"; + } + else if (src0.exec_if_gr && src0.exec_if_lt) + { + cond = "notEqual"; + } + else if (src0.exec_if_gr) + { + cond = "greaterThan"; + } + else if (src0.exec_if_lt) + { + cond = "lessThan"; + } + else //if(src0.exec_if_eq) + { + cond = "equal"; + } + + return "any(" + cond + "(" + AddCond(dst.no_dest) + swizzle + ", vec4(0.0)))"; +} + template std::string GLFragmentDecompilerThread::GetSRC(T src) { std::string ret = ""; @@ -227,7 +258,21 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) std::string GLFragmentDecompilerThread::BuildCode() { //main += fmt::Format("\tgl_FragColor = %c0;\n", m_ctrl & 0x40 ? 'r' : 'h'); - main += "\t" + m_parr.AddParam(PARAM_OUT, "vec4", "ocol", 0) + " = " + (m_ctrl & 0x40 ? "r0" : "h0") + ";\n"; + static const std::pair table[] = + { + { "ocol0", m_ctrl & 0x40 ? "r0" : "h0" }, + { "ocol1", m_ctrl & 0x40 ? "r1" : "h2" }, + { "ocol2", m_ctrl & 0x40 ? "r2" : "h4" }, + { "ocol3", m_ctrl & 0x40 ? "r3" : "h6" }, + { "ocol4", m_ctrl & 0x40 ? "r4" : "h8" }, + }; + + for (int i = 0; i < sizeof(table) / sizeof(*table); ++i) + { + if (m_parr.HasParam(PARAM_NONE, "vec4", table[i].second)) + AddCode(m_parr.AddParam(PARAM_OUT, "vec4", table[i].first, i) + " = " + table[i].second + ";"); + } + if(m_ctrl & 0xe) main += "\tgl_FragDepth = r1.z;\n"; std::string p; @@ -248,9 +293,33 @@ void GLFragmentDecompilerThread::Task() mem32_ptr_t data(m_addr); m_size = 0; m_location = 0; + m_loop_count = 0; + m_code_level = 1; while(true) { + auto finded = std::find(m_end_offsets.begin(), m_end_offsets.end(), m_size); + + if (finded != m_end_offsets.end()) + { + m_end_offsets.erase(finded); + m_code_level--; + AddCode("}"); + m_loop_count--; + } + + finded = std::find(m_else_offsets.begin(), m_else_offsets.end(), m_size); + + if (finded != m_else_offsets.end()) + { + m_else_offsets.erase(finded); + m_code_level--; + AddCode("}"); + AddCode("else"); + AddCode("{"); + m_code_level++; + } + dst.HEX = GetData(data[0]); src0.HEX = GetData(data[1]); src1.HEX = GetData(data[2]); @@ -263,46 +332,46 @@ void GLFragmentDecompilerThread::Task() switch(opcode) { case 0x00: break; //NOP - case 0x01: AddCode(GetSRC(src0)); break; //MOV - case 0x02: AddCode("(" + GetSRC(src0) + " * " + GetSRC(src1) + ")"); break; //MUL - case 0x03: AddCode("(" + GetSRC(src0) + " + " + GetSRC(src1) + ")"); break; //ADD - case 0x04: AddCode("(" + GetSRC(src0) + " * " + GetSRC(src1) + " + " + GetSRC(src2) + ")"); break; //MAD - case 0x05: AddCode("vec2(dot(" + GetSRC(src0) + ".xyz, " + GetSRC(src1) + ".xyz), 0).xxxx"); break; // DP3 - case 0x06: AddCode("vec2(dot(" + GetSRC(src0) + ", " + GetSRC(src1) + "), 0).xxxx"); break; // DP4 - case 0x07: AddCode("vec2(distance(" + GetSRC(src0) + ", " + GetSRC(src1) + "), 0).xxxx"); break; // DST - case 0x08: AddCode("min(" + GetSRC(src0) + ", " + GetSRC(src1) + ")"); break; // MIN - case 0x09: AddCode("max(" + GetSRC(src0) + ", " + GetSRC(src1) + ")"); break; // MAX - case 0x0a: AddCode("vec4(lessThan(" + GetSRC(src0) + ", " + GetSRC(src1) + "))"); break; // SLT - case 0x0b: AddCode("vec4(greaterThanEqual(" + GetSRC(src0) + ", " + GetSRC(src1) + "))"); break; // SGE - case 0x0c: AddCode("vec4(lessThanEqual(" + GetSRC(src0) + ", " + GetSRC(src1) + "))"); break; // SLE - case 0x0d: AddCode("vec4(greaterThan(" + GetSRC(src0) + ", " + GetSRC(src1) + "))"); break; // SGT - case 0x0e: AddCode("vec4(notEqual(" + GetSRC(src0) + ", " + GetSRC(src1) + "))"); break; // SNE - case 0x0f: AddCode("vec4(equal(" + GetSRC(src0) + ", " + GetSRC(src1) + "))"); break; // SEQ + case 0x01: SetDst("$0"); break; //MOV + case 0x02: SetDst("($0 * $1)"); break; //MUL + case 0x03: SetDst("($0 + $1)"); break; //ADD + case 0x04: SetDst("($0 * $1 + $2)"); break; //MAD + case 0x05: SetDst("vec2(dot($0.xyz, $1.xyz), 0).xxxx"); break; // DP3 + case 0x06: SetDst("vec2(dot($0, $1), 0).xxxx"); break; // DP4 + case 0x07: SetDst("vec2(distance($0, $1), 0).xxxx"); break; // DST + case 0x08: SetDst("min($0, $1)"); break; // MIN + case 0x09: SetDst("max($0, $1)"); break; // MAX + case 0x0a: SetDst("vec4(lessThan($0, $1))"); break; // SLT + case 0x0b: SetDst("vec4(greaterThanEqual($0, $1))"); break; // SGE + case 0x0c: SetDst("vec4(lessThanEqual($0, $1))"); break; // SLE + case 0x0d: SetDst("vec4(greaterThan($0, $1))"); break; // SGT + case 0x0e: SetDst("vec4(notEqual($0, $1))"); break; // SNE + case 0x0f: SetDst("vec4(equal($0, $1))"); break; // SEQ - case 0x10: AddCode("fract(" + GetSRC(src0) + ")"); break; // FRC - case 0x11: AddCode("floor(" + GetSRC(src0) + ")"); break; // FLR - //case 0x12: AddCode("clip(" + GetSRC(src0) + ")"); break; // KIL (kill fragment) + case 0x10: SetDst("fract($0)"); break; // FRC + case 0x11: SetDst("floor($0)"); break; // FLR + case 0x12: SetDst("discard"); break; // KIL (kill fragment) //case 0x13: break; // PK4 (pack four signed 8-bit values) //case 0x14: break; // UP4 (unpack four signed 8-bit values) - case 0x15: AddCode("dFdx(" + GetSRC(src0) + ")"); break; // DDX - case 0x16: AddCode("dFdy(" + GetSRC(src0) + ")"); break; // DDY - case 0x17: AddCode("texture(" + AddTex() + ", " + GetSRC(src0) + ".xy)"); break; // TEX (texture lookup) + case 0x15: SetDst("dFdx($0)"); break; // DDX + case 0x16: SetDst("dFdy($0)"); break; // DDY + case 0x17: SetDst("texture($t, $0.xy)"); break; // TEX (texture lookup) //case 0x18: break; // TXP (projective texture lookup) //case 0x19: break; // TXD (texture lookup with derivatives) - case 0x1a: AddCode("1 / (" + GetSRC(src0) + ")"); break; // RCP - case 0x1b: AddCode("inversesqrt(" + GetSRC(src0) + ")"); break; // RSQ - case 0x1c: AddCode("exp2(" + GetSRC(src0) + ")"); break; // EX2 - case 0x1d: AddCode("log2(" + GetSRC(src0) + ")"); break; // LG2 - //case 0x1e: break; // LIT (compute light coefficients) - case 0x1f: AddCode("(" + GetSRC(src0) + " * (" + GetSRC(src1) + " - " + GetSRC(src2) + ") +" + GetSRC(src2) + ")"); break; // LRP (linear interpolation) + case 0x1a: SetDst("(1 / $0)"); break; // RCP + case 0x1b: SetDst("inversesqrt(abs($0))"); break; // RSQ + case 0x1c: SetDst("exp2($0)"); break; // EX2 + case 0x1d: SetDst("log2($0)"); break; // LG2 + case 0x1e: SetDst("vec4(1.0, $0.x, ($0.x > 0 ? exp($0.w * log($0.y)) : 0.0), 1.0)"); break; // LIT (compute light coefficients) + case 0x1f: SetDst("($0 * ($1 - $2) + $2)"); break; // LRP (linear interpolation) - case 0x20: AddCode("vec4(equal(" + GetSRC(src0) + ", vec4(1)))"); break; // STR (set on true) - case 0x21: AddCode("vec4(equal(" + GetSRC(src0) + ", vec4(0)))"); break; // SFL (set on false) - case 0x22: AddCode("cos(" + GetSRC(src0) + ")"); break; // COS - case 0x23: AddCode("sin(" + GetSRC(src0) + ")"); break; // SIN + case 0x20: SetDst("vec4(equal($0, vec4(1.0)))"); break; // STR (set on true) + case 0x21: SetDst("vec4(equal($0, vec4(0.0)))"); break; // SFL (set on false) + case 0x22: SetDst("cos($0)"); break; // COS + case 0x23: SetDst("sin($0)"); break; // SIN //case 0x24: break; // PK2 (pack two 16-bit floats) //case 0x25: break; // UP2 (unpack two 16-bit floats) - case 0x26: AddCode("pow(" + GetSRC(src0) + ", " + GetSRC(src1) +")"); break; // POW + case 0x26: SetDst("pow($0, $1)"); break; // POW //case 0x27: break; // PKB //case 0x28: break; // UPB //case 0x29: break; // PK16 @@ -310,7 +379,7 @@ void GLFragmentDecompilerThread::Task() //case 0x2b: break; // BEM //case 0x2c: break; // PKG //case 0x2d: break; // UPG - case 0x2e: AddCode("(" + GetSRC(src0) + " * " + GetSRC(src1) + " + " + GetSRC(src0) + " * " + GetSRC(src1) + " + " + GetSRC(src2) + ")"); break; // DP2A (2-component dot product and add) + case 0x2e: SetDst("($0.x * $1.x + $0.y * $1.y + $2.x)"); break; // DP2A (2-component dot product and add) //case 0x2f: break; // TXL (texture lookup with LOD) //case 0x30: break; @@ -318,16 +387,44 @@ void GLFragmentDecompilerThread::Task() //case 0x33: break; // TEXBEM //case 0x34: break; // TXPBEM //case 0x35: break; // BEMLUM - //case 0x36: break; // RFL (reflection vector) + case 0x36: SetDst("($0 - 2.0 * $1 * dot($0, $1))"); break; // RFL (reflection vector) //case 0x37: break; // TIMESWTEX - case 0x38: AddCode("vec2(dot(" + GetSRC(src0) + ".xy, " + GetSRC(src1) + ".xy)).xxxx"); break; // DP2 - case 0x39: AddCode("normalize(" + GetSRC(src0) + ".xyz)"); break; // NRM - case 0x3a: AddCode("(" + GetSRC(src0) + " / " + GetSRC(src1) + ")"); break; // DIV - case 0x3b: AddCode("(" + GetSRC(src0) + " / sqrt(" + GetSRC(src1) + "))"); break; // DIVSQ - //case 0x3c: break; // LIF + case 0x38: SetDst("vec2(dot($0.xy, $1.xy)).xxxx"); break; // DP2 + case 0x39: SetDst("normalize($0.xyz)"); break; // NRM + case 0x3a: SetDst("($0 / $1)"); break; // DIV + case 0x3b: SetDst("($0 / sqrt($1))"); break; // DIVSQ + case 0x3c: SetDst("vec4(1.0, $0.y, ($0.y > 0 ? pow(2.0, $0.w) : 0.0), 1.0)"); break; // LIF case 0x3d: break; // FENCT case 0x3e: break; // FENCB + case 0x40: SetDst("break"); break; //BRK + //case 0x41: break; //CAL + case 0x42: + AddCode("if($cond)"); //IF + m_else_offsets.push_back(src1.else_offset << 2); + m_end_offsets.push_back(src2.end_offset << 2); + AddCode("{"); + m_code_level++; + break; + + case 0x43: //LOOP + AddCode(fmt::Format("if($cond) for(int i%u = %u; i%u < %u; i%u += %u) //LOOP", + m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); + m_loop_count++; + m_end_offsets.push_back(src2.end_offset << 2); + AddCode("{"); + m_code_level++; + break; + case 0x44: //REP + AddCode(fmt::Format("if($cond) for(int i%u = %u; i%u < %u; i%u += %u) //REP", + m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); + m_loop_count++; + m_end_offsets.push_back(src2.end_offset << 2); + AddCode("{"); + m_code_level++; + break; + //case 0x45: SetDst("return"); break; //RET + default: ConLog.Error("Unknown fp opcode 0x%x (inst %d)", opcode, m_size / (4 * 4)); //Emu.Pause(); diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.h b/rpcs3/Emu/GS/GL/GLFragmentProgram.h index 77397ae3da..9148444886 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.h +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.h @@ -75,12 +75,29 @@ struct GLFragmentDecompilerThread : public ThreadBase u32 scale : 3; u32 opcode_is_branch : 1; }; + + struct + { + u32 else_offset : 31; + u32 : 1; + }; + + struct + { + u32 : 2; + u32 rep1 : 8; + u32 rep2 : 8; + u32 : 1; + u32 rep3 : 8; + }; } src1; union SRC2 { u32 HEX; + u32 end_offset; + struct { u32 reg_type : 2; @@ -107,6 +124,10 @@ struct GLFragmentDecompilerThread : public ThreadBase u32 m_offset; u32 m_location; u32 m_ctrl; + u32 m_loop_count; + int m_code_level; + std::vector m_end_offsets; + std::vector m_else_offsets; GLFragmentDecompilerThread(std::string& shader, GLParamArray& parr, u32 addr, u32& size, u32 ctrl) : ThreadBase("Fragment Shader Decompiler Thread") @@ -123,13 +144,16 @@ struct GLFragmentDecompilerThread : public ThreadBase std::string GetMask(); - void AddCode(std::string code, bool append_mask = true); + void SetDst(std::string code, bool append_mask = true); + void AddCode(const std::string& code); std::string AddReg(u32 index, int fp16); bool HasReg(u32 index, int fp16); std::string AddCond(int fp16); std::string AddConst(); std::string AddTex(); + std::string Format(std::string code); + std::string GetCond(); template std::string GetSRC(T src); std::string BuildCode(); diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index b8aa47e6ad..6a3ad40d37 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -372,7 +372,7 @@ void GLGSRender::InitFragmentData() checkForGlError("glGetUniformLocation " + name); glUniform4f(l, c.x, c.y, c.z, c.w); - checkForGlError("glUniform4f " + name + fmt::Format(" %d [%f %f %f %f]", l, c.x, c.y, c.z, c.w)); + checkForGlError("glUniform4f " + name + fmt::Format(" %u [%f %f %f %f]", l, c.x, c.y, c.z, c.w)); } //if(m_fragment_constants.GetCount()) diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index 3847469ade..a9fbd960b7 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -192,7 +192,7 @@ void GLVertexDecompilerThread::AddCode(bool is_sca, const std::string& pCode, bo swizzle = swizzle == "xyzw" ? "" : "." + swizzle; - cond = fmt::Format("if(all(%s(rc%s, vec4(0.0)%s))) ", cond_string_table[d0.cond], swizzle.c_str(), swizzle.c_str()); + cond = fmt::Format("if(any(%s(rc%s, vec4(0.0)%s))) ", cond_string_table[d0.cond], swizzle.c_str(), swizzle.c_str()); } std::string mask = GetMask(is_sca); @@ -372,10 +372,10 @@ void GLVertexDecompilerThread::Task() case 0x01: AddScaCode(GetSRC(2, true)); break; // MOV case 0x02: AddScaCode("1.0 / " + GetSRC(2, true)); break; // RCP case 0x03: AddScaCode("clamp(1.0 / " + GetSRC(2, true) + ", 5.42101e-20, 1.884467e19)"); break; // RCC - case 0x04: AddScaCode("inversesqrt(" + GetSRC(2, true) + ")"); break; // RSQ + case 0x04: AddScaCode("inversesqrt(abs(" + GetSRC(2, true) + "))"); break; // RSQ case 0x05: AddScaCode("exp(" + GetSRC(2, true) + ")"); break; // EXP case 0x06: AddScaCode("log(" + GetSRC(2, true) + ")"); break; // LOG - //case 0x07: break; // LIT + //case 0x07: AddVecCode("vec4(1.0, max(0.0, " + GetSRC(2, true) + ".x), ((" + GetSRC(2, true) + ".x > 0) ? pow(max(0.0, " + GetSRC(2, true) + ".y), " + GetSRC(2, true) + ".z) : 0), 1.0)"); break; // LIT case 0x08: AddScaCode("{ /*BRA*/ " + GetFunc() + "; return; }", false, true); break; // BRA case 0x09: AddScaCode("{ " + GetFunc() + "; return; }", false, true); break; // BRI : works differently (BRI o[1].x(TR) L0;) case 0x0a: AddScaCode("/*CAL*/ " + GetFunc(), false, true); break; // CAL : works same as BRI From a4740d5f0989b411fc68e6375ff24fe322fee3f2 Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 7 Jun 2014 18:08:14 +0300 Subject: [PATCH 012/499] Improved unknown HLE functions logging Fixed Fragment Shader Decompiler --- rpcs3/Emu/Cell/PPUInterpreter.h | 4 +- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 6 - rpcs3/Emu/SysCalls/FuncList.cpp | 7677 ++++++++++++------------- rpcs3/Emu/SysCalls/SysCalls.cpp | 7 +- rpcs3/Emu/SysCalls/SysCalls.h | 2 +- rpcs3/Loader/ELF64.cpp | 3 +- 6 files changed, 3844 insertions(+), 3855 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 5edea8545a..bf68cf9835 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -71,9 +71,7 @@ private: if(Ini.HLELogging.GetValue()) { - ConLog.Warning("SysCall[0x%llx] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); - if(CPU.GPR[11] > 1024) - SysCalls::DoFunc(CPU.GPR[11]); + ConLog.Warning("SysCall[0x%llx ('%s')] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], SysCalls::GetHLEFuncName(CPU.GPR[11]).c_str(), CPU.GPR[3], CPU.PC); } /*else if ((s64)CPU.GPR[3] < 0) // probably, error code { diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 995a16112d..c3113353e3 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -78,12 +78,6 @@ std::string GLFragmentDecompilerThread::GetMask() std::string GLFragmentDecompilerThread::AddReg(u32 index, int fp16) { - if(index >= 2 && index <= 4) - { - return m_parr.AddParam(PARAM_OUT, "vec4", std::string(fp16 ? "h" : "r") + std::to_string(index), - (fp16) ? -1 : (index - 1)); - } - return m_parr.AddParam(PARAM_NONE, "vec4", std::string(fp16 ? "h" : "r") + std::to_string(index), "vec4(0.0, 0.0, 0.0, 0.0)"); //return m_parr.AddParam((index >= 2 && index <= 4) ? PARAM_OUT : PARAM_NONE, "vec4", diff --git a/rpcs3/Emu/SysCalls/FuncList.cpp b/rpcs3/Emu/SysCalls/FuncList.cpp index 2f1c22d06b..fdebc1a05c 100644 --- a/rpcs3/Emu/SysCalls/FuncList.cpp +++ b/rpcs3/Emu/SysCalls/FuncList.cpp @@ -5,3846 +5,3845 @@ #include "SysCalls.h" #define FUNC_LOG_ERROR(x) ConLog.Error(x); return 0 -s64 SysCalls::DoFunc(const u32 id) +std::string SysCalls::GetHLEFuncName(const u32 fid) { - switch(id) + switch(fid) { - case 0x1529e506: FUNC_LOG_ERROR("TODO: cellAdecDecodeAu"); - case 0x487b613e: FUNC_LOG_ERROR("TODO: cellAdecStartSeq"); - case 0x7e4a4a49: FUNC_LOG_ERROR("TODO: cellAdecQueryAttr"); - case 0x847d2380: FUNC_LOG_ERROR("TODO: cellAdecClose"); - case 0x8b5551a4: FUNC_LOG_ERROR("TODO: cellAdecOpenEx"); - case 0x97ff2af1: FUNC_LOG_ERROR("TODO: cellAdecGetPcm"); - case 0xbd75f78b: FUNC_LOG_ERROR("TODO: cellAdecGetPcmItem"); - case 0xd00a6988: FUNC_LOG_ERROR("TODO: cellAdecOpen"); - case 0xe2ea549b: FUNC_LOG_ERROR("TODO: cellAdecEndSeq"); - case 0x006016da: FUNC_LOG_ERROR("TODO: cellAtracGetBitrate"); - case 0x06ddb53e: FUNC_LOG_ERROR("TODO: cellAtracSetSecondBuffer"); - case 0x0f9667b6: FUNC_LOG_ERROR("TODO: cellAtracGetChannel"); - case 0x2642d4cc: FUNC_LOG_ERROR("TODO: cellAtracCreateDecoderExt"); - case 0x2bfff084: FUNC_LOG_ERROR("TODO: cellAtracGetStreamDataInfo"); - case 0x46cfc013: FUNC_LOG_ERROR("TODO: cellAtracAddStreamData"); - case 0x4797d1ff: FUNC_LOG_ERROR("TODO: cellAtracGetNextSample"); - case 0x5f62d546: FUNC_LOG_ERROR("TODO: cellAtracGetMaxSample"); - case 0x66afc68e: FUNC_LOG_ERROR("TODO: cellAtracSetDataAndGetMemSize"); - case 0x761cb9be: FUNC_LOG_ERROR("TODO: cellAtracDeleteDecoder"); - case 0x7772eb2b: FUNC_LOG_ERROR("TODO: cellAtracResetPlayPosition"); - case 0x78ba5c41: FUNC_LOG_ERROR("TODO: cellAtracSetLoopNum"); - case 0x7b22e672: FUNC_LOG_ERROR("TODO: cellAtracGetNextDecodePosition"); - case 0x8eb0e65f: FUNC_LOG_ERROR("TODO: cellAtracDecode"); - case 0x99efe171: FUNC_LOG_ERROR("TODO: cellAtracIsSecondBufferNeeded"); - case 0x99fb73d1: FUNC_LOG_ERROR("TODO: cellAtracGetBufferInfoForResetting"); - case 0xab6b6dbf: FUNC_LOG_ERROR("TODO: cellAtracGetLoopInfo"); - case 0xb5c11938: FUNC_LOG_ERROR("TODO: cellAtracGetInternalErrorInfo"); - case 0xbe07f05e: FUNC_LOG_ERROR("TODO: cellAtracGetSecondBufferInfo"); - case 0xc9a95fcb: FUNC_LOG_ERROR("TODO: cellAtracGetVacantSize"); - case 0xcf01d5d4: FUNC_LOG_ERROR("TODO: cellAtracGetSoundInfo"); - case 0xdfab73aa: FUNC_LOG_ERROR("TODO: cellAtracGetRemainFrame"); - case 0xfa293e88: FUNC_LOG_ERROR("TODO: cellAtracCreateDecoder"); - case 0x04af134e: FUNC_LOG_ERROR("TODO: cellAudioCreateNotifyEventQueue"); - case 0x0b168f92: FUNC_LOG_ERROR("TODO: cellAudioInit"); - case 0x17d1213b: FUNC_LOG_ERROR("TODO: cellAudioSendAck"); - case 0x28bc1409: FUNC_LOG_ERROR("TODO: cellAudioUnsetPersonalDevice"); - case 0x2b9bd9ad: FUNC_LOG_ERROR("TODO: cellAudioRemoveNotifyEventQueueEx"); - case 0x31211f6b: FUNC_LOG_ERROR("TODO: cellAudioMiscSetAccessoryVolume"); - case 0x377e0cd9: FUNC_LOG_ERROR("TODO: cellAudioSetNotifyEventQueue"); - case 0x4109d08c: FUNC_LOG_ERROR("TODO: cellAudioGetPortTimestamp"); - case 0x4129fe2d: FUNC_LOG_ERROR("TODO: cellAudioPortClose"); - case 0x5676f81c: FUNC_LOG_ERROR("TODO: cellAudioSetPersonalDevice"); - case 0x56dfe179: FUNC_LOG_ERROR("TODO: cellAudioSetPortLevel"); - case 0x5b1e2c73: FUNC_LOG_ERROR("TODO: cellAudioPortStop"); - case 0x74a66af0: FUNC_LOG_ERROR("TODO: cellAudioGetPortConfig"); - case 0x832df17e: FUNC_LOG_ERROR("TODO: cellAudioAdd6chData"); - case 0x89be28f2: FUNC_LOG_ERROR("TODO: cellAudioPortStart"); - case 0x9e4b1db8: FUNC_LOG_ERROR("TODO: cellAudioAdd2chData"); - case 0xa4c9ba65: FUNC_LOG_ERROR("TODO: cellAudioCreateNotifyEventQueueEx"); - case 0xb56ef5a1: FUNC_LOG_ERROR("TODO: cellAudioSetNotifyEventQueueEx"); - case 0xca5ac370: FUNC_LOG_ERROR("TODO: cellAudioQuit"); - case 0xcd7bc431: FUNC_LOG_ERROR("TODO: cellAudioPortOpen"); - case 0xdab029aa: FUNC_LOG_ERROR("TODO: cellAudioAddData"); - case 0xe4046afe: FUNC_LOG_ERROR("TODO: cellAudioGetPortBlockTag"); - case 0xff3626fd: FUNC_LOG_ERROR("TODO: cellAudioRemoveNotifyEventQueue"); - case 0x2ab0d183: FUNC_LOG_ERROR("TODO: cellBGDLGetInfo2"); - case 0x4e9bb95b: FUNC_LOG_ERROR("TODO: cellBGDLGetInfo"); - case 0x74e57bdf: FUNC_LOG_ERROR("TODO: cellBGDLGetMode"); - case 0x7e134a90: FUNC_LOG_ERROR("TODO: cellBGDLSetMode"); - case 0x02f5ced0: FUNC_LOG_ERROR("TODO: cellCameraStop"); - case 0x0e63c444: FUNC_LOG_ERROR("TODO: cellCameraGetBufferInfoEx"); - case 0x10697d7f: FUNC_LOG_ERROR("TODO: cellCameraGetBufferInfo"); - case 0x21fc151f: FUNC_LOG_ERROR("TODO: cellCameraReadEx"); - case 0x2dea3e9b: FUNC_LOG_ERROR("TODO: cellCameraSetExtensionUnit"); - case 0x379c5dd6: FUNC_LOG_ERROR("TODO: cellCameraClose"); - case 0x3845d39b: FUNC_LOG_ERROR("TODO: cellCameraRead"); - case 0x44673f07: FUNC_LOG_ERROR("TODO: cellCameraRemoveNotifyEventQueue2"); - case 0x456dc4aa: FUNC_LOG_ERROR("TODO: cellCameraStart"); - case 0x532b8aaa: FUNC_LOG_ERROR("TODO: cellCameraGetAttribute"); - case 0x58bc5870: FUNC_LOG_ERROR("TODO: cellCameraGetType"); - case 0x5ad46570: FUNC_LOG_ERROR("TODO: cellCameraEnd"); - case 0x5d25f866: FUNC_LOG_ERROR("TODO: cellCameraOpenEx"); - case 0x5eebf24e: FUNC_LOG_ERROR("TODO: cellCameraIsStarted"); - case 0x602e2052: FUNC_LOG_ERROR("TODO: cellCameraGetDeviceGUID"); - case 0x61dfbe83: FUNC_LOG_ERROR("TODO: cellCameraPrepExtensionUnit"); - case 0x7dac520c: FUNC_LOG_ERROR("TODO: cellCameraGetBufferSize"); - case 0x7e063bbc: FUNC_LOG_ERROR("TODO: cellCameraIsAttached"); - case 0x81f83db9: FUNC_LOG_ERROR("TODO: cellCameraReset"); - case 0x85e1b8da: FUNC_LOG_ERROR("TODO: cellCameraOpen"); - case 0x8ca53dde: FUNC_LOG_ERROR("TODO: cellCameraIsAvailable"); - case 0x8cd56eee: FUNC_LOG_ERROR("TODO: cellCameraSetAttribute"); - case 0x9b98d258: FUNC_LOG_ERROR("TODO: cellCameraRemoveNotifyEventQueue"); - case 0xa7fd2f5b: FUNC_LOG_ERROR("TODO: cellCameraSetNotifyEventQueue2"); - case 0xb0647e5a: FUNC_LOG_ERROR("TODO: cellCameraSetNotifyEventQueue"); - case 0xb602e328: FUNC_LOG_ERROR("TODO: cellCameraGetExtensionUnit"); - case 0xbf47c5dd: FUNC_LOG_ERROR("TODO: cellCameraInit"); - case 0xe28b206b: FUNC_LOG_ERROR("TODO: cellCameraReadComplete"); - case 0xeb6f95fb: FUNC_LOG_ERROR("TODO: cellCameraCtrlExtensionUnit"); - case 0xfa160f24: FUNC_LOG_ERROR("TODO: cellCameraIsOpen"); - case 0x0f6ab57b: FUNC_LOG_ERROR("TODO: cellCelp8EncStart"); - case 0x2099f86e: FUNC_LOG_ERROR("TODO: cellCelp8EncEncodeFrame"); - case 0x29da1ea6: FUNC_LOG_ERROR("TODO: cellCelp8EncWaitForOutput"); - case 0x2d677e0c: FUNC_LOG_ERROR("TODO: cellCelp8EncQueryAttr"); - case 0x2eb6efee: FUNC_LOG_ERROR("TODO: cellCelp8EncOpen"); - case 0x48c5020d: FUNC_LOG_ERROR("TODO: cellCelp8EncGetAu"); - case 0xbbbc2c1c: FUNC_LOG_ERROR("TODO: cellCelp8EncEnd"); - case 0xcd48ad62: FUNC_LOG_ERROR("TODO: cellCelp8EncOpenEx"); - case 0xfd2566b4: FUNC_LOG_ERROR("TODO: cellCelp8EncClose"); - case 0x15ec0cca: FUNC_LOG_ERROR("TODO: cellCelpEncClose"); - case 0x3773692f: FUNC_LOG_ERROR("TODO: cellCelpEncGetAu"); - case 0x55dc23de: FUNC_LOG_ERROR("TODO: cellCelpEncStart"); - case 0x6b148570: FUNC_LOG_ERROR("TODO: cellCelpEncQueryAttr"); - case 0x77b3b29a: FUNC_LOG_ERROR("TODO: cellCelpEncOpen"); - case 0x81fe030c: FUNC_LOG_ERROR("TODO: cellCelpEncEncodeFrame"); - case 0x9b244272: FUNC_LOG_ERROR("TODO: cellCelpEncWaitForOutput"); - case 0x9eb084db: FUNC_LOG_ERROR("TODO: cellCelpEncOpenEx"); - case 0xf2b85dff: FUNC_LOG_ERROR("TODO: cellCelpEncEnd"); - case 0x002e8da2: FUNC_LOG_ERROR("TODO: cellDmuxPeekAuEx"); - case 0x02170d1a: FUNC_LOG_ERROR("TODO: cellDmuxQueryEsAttr"); - case 0x04e7499f: FUNC_LOG_ERROR("TODO: cellDmuxSetStream"); - case 0x05371c8d: FUNC_LOG_ERROR("TODO: cellDmuxDisableEs"); - case 0x11bc3a6c: FUNC_LOG_ERROR("TODO: cellDmuxOpen2"); - case 0x21d424f0: FUNC_LOG_ERROR("TODO: cellDmuxResetEs"); - case 0x24ea6474: FUNC_LOG_ERROR("TODO: cellDmuxReleaseAu"); - case 0x2750c5e0: FUNC_LOG_ERROR("TODO: cellDmuxPeekAu"); - case 0x2c9a5857: FUNC_LOG_ERROR("TODO: cellDmuxGetAuEx"); - case 0x3f76e3cd: FUNC_LOG_ERROR("TODO: cellDmuxQueryAttr2"); - case 0x42c716b5: FUNC_LOG_ERROR("TODO: cellDmuxGetAu"); - case 0x52911bcf: FUNC_LOG_ERROR("TODO: cellDmuxQueryEsAttr2"); - case 0x5d345de9: FUNC_LOG_ERROR("TODO: cellDmuxResetStream"); - case 0x68492de9: FUNC_LOG_ERROR("TODO: cellDmuxOpen"); - case 0x7b56dc3f: FUNC_LOG_ERROR("TODO: cellDmuxEnableEs"); - case 0x8c692521: FUNC_LOG_ERROR("TODO: cellDmuxClose"); - case 0xa2d4189b: FUNC_LOG_ERROR("TODO: cellDmuxQueryAttr"); - case 0xccff1284: FUNC_LOG_ERROR("TODO: cellDmuxResetStreamAndWaitDone"); - case 0xebb3b2bd: FUNC_LOG_ERROR("TODO: cellDmuxFlushEs"); - case 0xf6c23560: FUNC_LOG_ERROR("TODO: cellDmuxOpenEx"); - case 0x01036193: FUNC_LOG_ERROR("TODO: cellFiberPpuContextReturnToThread"); - case 0x081c98be: FUNC_LOG_ERROR("TODO: cellFiberPpuContextRunScheduler"); - case 0x0a25b6c8: FUNC_LOG_ERROR("TODO: cellFiberPpuContextEnterScheduler"); - case 0x0c44f441: FUNC_LOG_ERROR("TODO: cellFiberPpuYield"); - case 0x12b1acf0: FUNC_LOG_ERROR("TODO: cellFiberPpuRunFibers"); - case 0x1e7a247a: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlRunFibers"); - case 0x31252ec3: FUNC_LOG_ERROR("TODO: _cellFiberPpuContextAttributeInitialize"); - case 0x3204b146: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlInitialize"); - case 0x34a81091: FUNC_LOG_ERROR("TODO: cellFiberPpuContextSelf"); - case 0x3860a12a: FUNC_LOG_ERROR("TODO: cellFiberPpuSchedulerTraceFinalize"); - case 0x392c5aa5: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlSetPollingMode"); - case 0x3b417f82: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlJoinFiber"); - case 0x4fc86b2c: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlDisconnectEventQueue"); - case 0x55870804: FUNC_LOG_ERROR("TODO: _cellFiberPpuInitialize"); - case 0x5d3992dd: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlSendSignal"); - case 0x5d9a7034: FUNC_LOG_ERROR("TODO: cellFiberPpuSelf"); - case 0x62a20f0d: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlConnectEventQueueToSpurs"); - case 0x68ba4568: FUNC_LOG_ERROR("TODO: _cellFiberPpuUtilWorkerControlAttributeInitialize"); - case 0x6c164b3b: FUNC_LOG_ERROR("TODO: cellFiberPpuWaitSignal"); - case 0x72086315: FUNC_LOG_ERROR("TODO: cellFiberPpuContextInitialize"); - case 0x7c2f4034: FUNC_LOG_ERROR("TODO: cellFiberPpuCreateFiber"); - case 0x8afb8356: FUNC_LOG_ERROR("TODO: cellFiberPpuSendSignal"); - case 0x8b6baa01: FUNC_LOG_ERROR("TODO: cellFiberPpuFinalizeScheduler"); - case 0x9e25c72d: FUNC_LOG_ERROR("TODO: _cellFiberPpuSchedulerAttributeInitialize"); - case 0xa27c95ca: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlFinalize"); - case 0xa4599cf3: FUNC_LOG_ERROR("TODO: cellFiberPpuWaitFlag"); - case 0xa6004249: FUNC_LOG_ERROR("TODO: cellFiberPpuJoinFiber"); - case 0xaba1c563: FUNC_LOG_ERROR("TODO: cellFiberPpuContextRun"); - case 0xadedbebf: FUNC_LOG_ERROR("TODO: cellFiberPpuSchedulerTraceStart"); - case 0xb0594b2d: FUNC_LOG_ERROR("TODO: cellFiberPpuGetScheduler"); - case 0xb3a48079: FUNC_LOG_ERROR("TODO: cellFiberPpuContextFinalize"); - case 0xb90c871b: FUNC_LOG_ERROR("TODO: cellFiberPpuContextCheckStackLimit"); - case 0xbabf714b: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlWakeup"); - case 0xbf9cd933: FUNC_LOG_ERROR("TODO: cellFiberPpuSchedulerTraceInitialize"); - case 0xbfca88d3: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlCreateFiber"); - case 0xc04e2438: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlShutdown"); - case 0xc11f8056: FUNC_LOG_ERROR("TODO: _cellFiberPpuAttributeInitialize"); - case 0xd0066b17: FUNC_LOG_ERROR("TODO: cellFiberPpuContextSwitch"); - case 0xe492a675: FUNC_LOG_ERROR("TODO: cellFiberPpuHasRunnableFiber"); - case 0xe665f9a9: FUNC_LOG_ERROR("TODO: cellFiberPpuSchedulerTraceStop"); - case 0xea6dc1ad: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlCheckFlags"); - case 0xee3b604d: FUNC_LOG_ERROR("TODO: cellFiberPpuInitializeScheduler"); - case 0xf2ccad4f: FUNC_LOG_ERROR("TODO: cellFiberPpuUtilWorkerControlInitializeWithAttribute"); - case 0xf3e81219: FUNC_LOG_ERROR("TODO: cellFiberPpuCheckStackLimit"); - case 0xf6c6900c: FUNC_LOG_ERROR("TODO: cellFiberPpuCheckFlags"); - case 0xfa8d5f95: FUNC_LOG_ERROR("TODO: cellFiberPpuExit"); - case 0xfbf5fe40: FUNC_LOG_ERROR("TODO: cellFiberPpuSetPriority"); - case 0x0109f3d3: FUNC_LOG_ERROR("TODO: cellFontGetRenderEffectWeight"); - case 0x03a142b9: FUNC_LOG_ERROR("TODO: cellFontGraphicsGetDrawType"); - case 0x042e74e3: FUNC_LOG_ERROR("TODO: cellFontCreateRenderer"); - case 0x061049ad: FUNC_LOG_ERROR("TODO: cellFontGraphicsSetFontRGBA"); - case 0x06be743d: FUNC_LOG_ERROR("TODO: cellFontGetKerning"); - case 0x073fa321: FUNC_LOG_ERROR("TODO: cellFontOpenFontsetOnMemory"); - case 0x0a7306a4: FUNC_LOG_ERROR("TODO: cellFontOpenFontFile"); - case 0x0baf90fe: FUNC_LOG_ERROR("TODO: cellFontGetRenderScaledKerning"); - case 0x0d106a11: FUNC_LOG_ERROR("TODO: cellFontGetRenderScalePixel"); - case 0x1387c45c: FUNC_LOG_ERROR("TODO: cellFontGetHorizontalLayout"); - case 0x16322df1: FUNC_LOG_ERROR("TODO: cellFontGraphicsSetScalePixel"); - case 0x1a218fe4: FUNC_LOG_ERROR("TODO: cellFontRenderCharGlyphImageHorizontal"); - case 0x21ebb248: FUNC_LOG_ERROR("TODO: cellFontDestroyRenderer"); - case 0x227e1e3c: FUNC_LOG_ERROR("TODO: cellFontSetupRenderScalePixel"); - case 0x22e24707: FUNC_LOG_ERROR("TODO: cellFontGlyphGetScalePixel"); - case 0x231d5941: FUNC_LOG_ERROR("TODO: cellFontGlyphGetHorizontalShift"); - case 0x2388186c: FUNC_LOG_ERROR("TODO: cellFontGraphicsGetScalePixel"); - case 0x25253fe4: FUNC_LOG_ERROR("TODO: cellFontSetEffectWeight"); - case 0x25dbeff9: FUNC_LOG_ERROR("TODO: cellFontGetEffectWeight"); - case 0x285d30d6: FUNC_LOG_ERROR("TODO: cellFontGetScalePixel"); - case 0x29329541: FUNC_LOG_ERROR("TODO: cellFontOpenFontInstance"); - case 0x297f0e93: FUNC_LOG_ERROR("TODO: cellFontSetScalePixel"); - case 0x2da9fd9d: FUNC_LOG_ERROR("TODO: cellFontGetRenderCharGlyphMetrics"); - case 0x3da90559: FUNC_LOG_ERROR("TODO: cellFontClearFileCache"); - case 0x40d40544: FUNC_LOG_ERROR("TODO: cellFontEndLibrary"); - case 0x47ca71ef: FUNC_LOG_ERROR("TODO: cellFontAdjustFontScaling"); - case 0x4d19c631: FUNC_LOG_ERROR("TODO: cellFontSetupRenderScalePoint"); - case 0x534e785f: FUNC_LOG_ERROR("TODO: cellFontGlyphGetVerticalShift"); - case 0x53f529fe: FUNC_LOG_ERROR("TODO: cellFontGlyphSetupVertexesGlyph"); - case 0x59ef0073: FUNC_LOG_ERROR("TODO: cellFontGetGlyphExpandBufferInfo"); - case 0x5abd8b1e: FUNC_LOG_ERROR("TODO: cellFontGetLibrary"); - case 0x66a23100: FUNC_LOG_ERROR("TODO: cellFontBindRenderer"); - case 0x698897f8: FUNC_LOG_ERROR("TODO: cellFontGetVerticalLayout"); - case 0x6bad7a69: FUNC_LOG_ERROR("TODO: cellFontVertexesGlyphRelocate"); - case 0x6bf6f832: FUNC_LOG_ERROR("TODO: cellFontSetFontsetOpenMode"); - case 0x6cfada83: FUNC_LOG_ERROR("TODO: cellFontSetFontOpenMode"); - case 0x700e6223: FUNC_LOG_ERROR("TODO: cellFontGetRenderCharGlyphMetricsVertical"); - case 0x70f3e728: FUNC_LOG_ERROR("TODO: cellFontSetScalePoint"); - case 0x78d05e08: FUNC_LOG_ERROR("TODO: cellFontSetupRenderEffectSlant"); - case 0x7ab47f7e: FUNC_LOG_ERROR("TODO: cellFontEnd"); - case 0x7c5df0d8: FUNC_LOG_ERROR("TODO: cellFontGetInitializedRevisionFlags"); - case 0x7c83bc15: FUNC_LOG_ERROR("TODO: cellFontGraphicsSetLineRGBA"); - case 0x8657c8f5: FUNC_LOG_ERROR("TODO: cellFontSetEffectSlant"); - case 0x87bd650f: FUNC_LOG_ERROR("TODO: cellFontGraphicsSetDrawType"); - case 0x88be4799: FUNC_LOG_ERROR("TODO: cellFontRenderCharGlyphImage"); - case 0x8a35c887: FUNC_LOG_ERROR("TODO: cellFontEndGraphics"); - case 0x8a632038: FUNC_LOG_ERROR("TODO: cellFontGetResolutionDpi"); - case 0x8e3f2c40: FUNC_LOG_ERROR("TODO: cellFontGlyphRenderImageVertical"); - case 0x90b9465e: FUNC_LOG_ERROR("TODO: cellFontRenderSurfaceInit"); - case 0x970d4c22: FUNC_LOG_ERROR("TODO: cellFontGraphicsSetupDrawContext"); - case 0x97b95244: FUNC_LOG_ERROR("TODO: cellFontGlyphRenderImageHorizontal"); - case 0x98ac5524: FUNC_LOG_ERROR("TODO: cellFontGetFontIdCode"); - case 0x9c8d3ff7: FUNC_LOG_ERROR("TODO: cellFontGlyphGetOutlineVertexes"); - case 0x9e19072b: FUNC_LOG_ERROR("TODO: cellFontOpenFontMemory"); - case 0x9e3b1e16: FUNC_LOG_ERROR("TODO: cellFontAdjustGlyphExpandBuffer"); - case 0xa165daae: FUNC_LOG_ERROR("TODO: cellFontGetRenderScalePoint"); - case 0xa41342dc: FUNC_LOG_ERROR("TODO: cellFontGraphicsGetFontRGBA"); - case 0xa6dc25d1: FUNC_LOG_ERROR("TODO: cellFontSetupRenderEffectWeight"); - case 0xa7b2103a: FUNC_LOG_ERROR("TODO: cellFontDelete"); - case 0xa885cc9b: FUNC_LOG_ERROR("TODO: cellFontOpenFontset"); - case 0xa8fae920: FUNC_LOG_ERROR("TODO: cellFontGlyphGetOutlineControlDistance"); - case 0xb015a84e: FUNC_LOG_ERROR("TODO: cellFontGetRevisionFlags"); - case 0xb276f1f6: FUNC_LOG_ERROR("TODO: cellFontCloseFont"); - case 0xb3d304b2: FUNC_LOG_ERROR("TODO: cellFontPatchWorks"); - case 0xb422b005: FUNC_LOG_ERROR("TODO: cellFontRenderSurfaceSetScissor"); - case 0xb4d112af: FUNC_LOG_ERROR("TODO: cellFontGlyphGetVertexesGlyphSize"); - case 0xc17259de: FUNC_LOG_ERROR("TODO: cellFontGenerateCharGlyph"); - case 0xc91c8ece: FUNC_LOG_ERROR("TODO: cellFontGetBindingRenderer"); - case 0xcaed32c1: FUNC_LOG_ERROR("TODO: cellFontGenerateCharGlyphVertical"); - case 0xced4dda9: FUNC_LOG_ERROR("TODO: cellFontGetRenderEffectSlant"); - case 0xd62f5d76: FUNC_LOG_ERROR("TODO: cellFontDeleteGlyph"); - case 0xd8eaee9f: FUNC_LOG_ERROR("TODO: cellFontGetCharGlyphMetrics"); - case 0xdee0836c: FUNC_LOG_ERROR("TODO: cellFontExtend"); - case 0xe01b199e: FUNC_LOG_ERROR("TODO: cellFontGlyphRenderImage"); - case 0xe16e679a: FUNC_LOG_ERROR("TODO: cellFontGetEffectSlant"); - case 0xe857a0ca: FUNC_LOG_ERROR("TODO: cellFontRenderCharGlyphImageVertical"); - case 0xf03dcc29: FUNC_LOG_ERROR("TODO: cellFontInitializeWithRevision"); - case 0xf16379fa: FUNC_LOG_ERROR("TODO: cellFontUnbindRenderer"); - case 0xf7a19060: FUNC_LOG_ERROR("TODO: cellFontGetScalePoint"); - case 0xf7aaa8e2: FUNC_LOG_ERROR("TODO: cellFontGraphicsGetLineRGBA"); - case 0xfb3341ba: FUNC_LOG_ERROR("TODO: cellFontSetResolutionDpi"); - case 0xfe9a6dd7: FUNC_LOG_ERROR("TODO: cellFontGetCharGlyphMetricsVertical"); - case 0x7a0a83c4: FUNC_LOG_ERROR("TODO: cellFontInitLibraryFreeTypeWithRevision"); - case 0xec89a187: FUNC_LOG_ERROR("TODO: cellFontFTGetRevisionFlags"); - case 0xfa0c2de0: FUNC_LOG_ERROR("TODO: cellFontFTGetInitializedRevisionFlags"); - case 0x2a8e6b92: FUNC_LOG_ERROR("TODO: cellGameGetDiscContentInfoUpdatePath"); - case 0x3a5d726a: FUNC_LOG_ERROR("TODO: cellGameGetParamString"); - case 0x42a2e133: FUNC_LOG_ERROR("TODO: cellGameCreateGameData"); - case 0x70acec67: FUNC_LOG_ERROR("TODO: cellGameContentPermit"); - case 0x87406734: FUNC_LOG_ERROR("TODO: cellGameThemeInstallFromBuffer"); - case 0xa80bf223: FUNC_LOG_ERROR("TODO: cellGameGetLocalWebContentPath"); - case 0xb0a1f8c6: FUNC_LOG_ERROR("TODO: cellGameContentErrorDialog"); - case 0xb367c6e3: FUNC_LOG_ERROR("TODO: cellGameDeleteGameData"); - case 0xb7a45caf: FUNC_LOG_ERROR("TODO: cellGameGetParamInt"); - case 0xce4374f6: FUNC_LOG_ERROR("TODO: cellGamePatchCheck"); - case 0xd24e3928: FUNC_LOG_ERROR("TODO: cellGameThemeInstall"); - case 0xdaa5cd20: FUNC_LOG_ERROR("TODO: cellGameSetParamString"); - case 0xdb9819f3: FUNC_LOG_ERROR("TODO: cellGameDataCheck"); - case 0xef9d42d5: FUNC_LOG_ERROR("TODO: cellGameGetSizeKB"); - case 0xf52639ea: FUNC_LOG_ERROR("TODO: cellGameBootCheck"); - case 0x38579ec9: FUNC_LOG_ERROR("TODO: cellGameSetExitParam"); - case 0x59b1ede1: FUNC_LOG_ERROR("TODO: cellGameGetHomeDataExportPath"); - case 0x59bbebd4: FUNC_LOG_ERROR("TODO: cellGameGetHomePath"); - case 0x72cc6cf7: FUNC_LOG_ERROR("TODO: cellGameGetHomeDataImportPath"); - case 0x94e9f81d: FUNC_LOG_ERROR("TODO: cellGameGetHomeLaunchOptionPath"); - case 0xf6acd0bc: FUNC_LOG_ERROR("TODO: cellGameGetBootGameInfo"); - case 0x055bd74d: FUNC_LOG_ERROR("TODO: cellGcmGetTiledPitchSize"); - case 0x06edea9e: FUNC_LOG_ERROR("TODO: cellGcmSetUserHandler"); - case 0x0a862772: FUNC_LOG_ERROR("TODO: cellGcmSetQueueHandler"); - case 0x0b4b62d5: FUNC_LOG_ERROR("TODO: cellGcmSetPrepareFlip"); - case 0x0e6b0dae: FUNC_LOG_ERROR("TODO: cellGcmGetDisplayInfo"); - case 0x107bf3a1: FUNC_LOG_ERROR("TODO: cellGcmInitCursor"); - case 0x15bae46b: FUNC_LOG_ERROR("TODO: _cellGcmInitBody"); - case 0x172c3197: FUNC_LOG_ERROR("TODO: cellGcmSetDefaultCommandBufferAndSegmentWordSize"); - case 0x1a0de550: FUNC_LOG_ERROR("TODO: cellGcmSetCursorPosition"); - case 0x1bd633f8: FUNC_LOG_ERROR("TODO: _cellGcmFunc3"); - case 0x1f61b3ff: FUNC_LOG_ERROR("TODO: cellGcmDumpGraphicsError"); - case 0x21397818: FUNC_LOG_ERROR("TODO: _cellGcmSetFlipCommand"); - case 0x21ac3697: FUNC_LOG_ERROR("TODO: cellGcmAddressToOffset"); - case 0x21cee035: FUNC_LOG_ERROR("TODO: cellGcmGetNotifyDataAddress"); - case 0x23ae55a3: FUNC_LOG_ERROR("TODO: cellGcmGetLastSecondVTime"); - case 0x25b40ab4: FUNC_LOG_ERROR("TODO: cellGcmSortRemapEaIoAddress"); - case 0x2922aed0: FUNC_LOG_ERROR("TODO: cellGcmGetOffsetTable"); - case 0x2a6fba9c: FUNC_LOG_ERROR("TODO: cellGcmIoOffsetToAddress"); - case 0x2ad4951b: FUNC_LOG_ERROR("TODO: cellGcmGetTimeStampLocation"); - case 0x371674cf: FUNC_LOG_ERROR("TODO: cellGcmGetDisplayBufferByFlipIndex"); - case 0x3a33c1fd: FUNC_LOG_ERROR("TODO: _cellGcmFunc15"); - case 0x3b9bd5bd: FUNC_LOG_ERROR("TODO: cellGcmUnreserveIoMapSize"); - case 0x4524cccd: FUNC_LOG_ERROR("TODO: cellGcmBindTile"); - case 0x4ae8d215: FUNC_LOG_ERROR("TODO: cellGcmSetFlipMode"); - case 0x4d7ce993: FUNC_LOG_ERROR("TODO: cellGcmSetSecondVFrequency"); - case 0x51c9d62b: FUNC_LOG_ERROR("TODO: cellGcmSetDebugOutputLevel"); - case 0x527c6439: FUNC_LOG_ERROR("TODO: cellGcmTerminate"); - case 0x5a41c10f: FUNC_LOG_ERROR("TODO: cellGcmGetTimeStamp"); - case 0x5e2ee0f0: FUNC_LOG_ERROR("TODO: cellGcmGetDefaultCommandWordSize"); - case 0x5f909b17: FUNC_LOG_ERROR("TODO: _cellGcmFunc1"); - case 0x626e8518: FUNC_LOG_ERROR("TODO: cellGcmMapEaIoAddressWithFlags"); - case 0x63387071: FUNC_LOG_ERROR("TODO: cellGcmGetLastFlipTime"); - case 0x63441cb4: FUNC_LOG_ERROR("TODO: cellGcmMapEaIoAddress"); - case 0x657571f7: FUNC_LOG_ERROR("TODO: cellGcmGetTileInfo"); - case 0x661fe266: FUNC_LOG_ERROR("TODO: _cellGcmFunc12"); - case 0x688b8ac9: FUNC_LOG_ERROR("TODO: _cellGcmFunc38"); - case 0x69c6cc82: FUNC_LOG_ERROR("TODO: cellGcmSetCursorDisable"); - case 0x723bbc7e: FUNC_LOG_ERROR("TODO: cellGcmGetVBlankCount"); - case 0x72a577ce: FUNC_LOG_ERROR("TODO: cellGcmGetFlipStatus"); - case 0x7fc034bc: FUNC_LOG_ERROR("TODO: _cellGcmFunc4"); - case 0x8572bce2: FUNC_LOG_ERROR("TODO: cellGcmGetReportDataAddressLocation"); - case 0x8bde5ebf: FUNC_LOG_ERROR("TODO: cellGcmSetUserCommand"); - case 0x8cdf8c70: FUNC_LOG_ERROR("TODO: cellGcmGetDefaultSegmentWordSize"); - case 0x8effb7fd: FUNC_LOG_ERROR("TODO: _cellGcmFunc2"); - case 0x93806525: FUNC_LOG_ERROR("TODO: cellGcmGetCurrentDisplayBufferId"); - case 0x983fb9aa: FUNC_LOG_ERROR("TODO: cellGcmSetWaitFlip"); - case 0x99d397ac: FUNC_LOG_ERROR("TODO: cellGcmGetReport"); - case 0x9a0159af: FUNC_LOG_ERROR("TODO: cellGcmGetReportDataAddress"); - case 0x9ba451e4: FUNC_LOG_ERROR("TODO: cellGcmSetDefaultFifoSize"); - case 0x9dc04436: FUNC_LOG_ERROR("TODO: cellGcmBindZcull"); - case 0xa114ec67: FUNC_LOG_ERROR("TODO: cellGcmMapMainMemory"); - case 0xa41ef7e8: FUNC_LOG_ERROR("TODO: cellGcmSetFlipHandler"); - case 0xa47c09ff: FUNC_LOG_ERROR("TODO: cellGcmSetFlipStatus"); - case 0xa53d12ae: FUNC_LOG_ERROR("TODO: cellGcmSetDisplayBuffer"); - case 0xa547adde: FUNC_LOG_ERROR("TODO: cellGcmGetControlRegister"); - case 0xa6b180ac: FUNC_LOG_ERROR("TODO: cellGcmGetReportDataLocation"); - case 0xa75640e8: FUNC_LOG_ERROR("TODO: cellGcmUnbindZcull"); - case 0xa7ede268: FUNC_LOG_ERROR("TODO: cellGcmReserveIoMapSize"); - case 0xa91b0402: FUNC_LOG_ERROR("TODO: cellGcmSetVBlankHandler"); - case 0xacee8542: FUNC_LOG_ERROR("TODO: cellGcmSetFlipImmediate"); - case 0xb2e761d4: FUNC_LOG_ERROR("TODO: cellGcmResetFlipStatus"); - case 0xbb42a9dd: FUNC_LOG_ERROR("TODO: _cellGcmFunc13"); - case 0xbc982946: FUNC_LOG_ERROR("TODO: cellGcmSetDefaultCommandBuffer"); - case 0xbd100dbc: FUNC_LOG_ERROR("TODO: cellGcmSetTileInfo"); - case 0xbd2fa0a7: FUNC_LOG_ERROR("TODO: cellGcmUpdateCursor"); - case 0xbd6d60d9: FUNC_LOG_ERROR("TODO: cellGcmSetInvalidateTile"); - case 0xc47d0812: FUNC_LOG_ERROR("TODO: cellGcmSetCursorEnable"); - case 0xc8f3bd09: FUNC_LOG_ERROR("TODO: cellGcmGetCurrentField"); - case 0xcaabd992: FUNC_LOG_ERROR("TODO: cellGcmInitDefaultFifoMode"); - case 0xd01b570d: FUNC_LOG_ERROR("TODO: cellGcmSetGraphicsHandler"); - case 0xd0b1d189: FUNC_LOG_ERROR("TODO: cellGcmSetTile"); - case 0xd34a420d: FUNC_LOG_ERROR("TODO: cellGcmSetZcull"); - case 0xd8f88e1a: FUNC_LOG_ERROR("TODO: _cellGcmSetFlipCommandWithWaitLabel"); - case 0xd9a0a879: FUNC_LOG_ERROR("TODO: cellGcmGetZcullInfo"); - case 0xd9b7653e: FUNC_LOG_ERROR("TODO: cellGcmUnbindTile"); - case 0xdb23e867: FUNC_LOG_ERROR("TODO: cellGcmUnmapIoAddress"); - case 0xdb769b32: FUNC_LOG_ERROR("TODO: cellGcmMapLocalMemory"); - case 0xdc09357e: FUNC_LOG_ERROR("TODO: cellGcmSetFlip"); - case 0xdc494430: FUNC_LOG_ERROR("TODO: cellGcmSetSecondVHandler"); - case 0xdf6476bd: FUNC_LOG_ERROR("TODO: cellGcmSetWaitFlipUnsafe"); - case 0xe315a0b2: FUNC_LOG_ERROR("TODO: cellGcmGetConfiguration"); - case 0xe44874f3: FUNC_LOG_ERROR("TODO: cellGcmSysGetLastVBlankTime"); - case 0xefd00f54: FUNC_LOG_ERROR("TODO: cellGcmUnmapEaIoAddress"); - case 0xf80196c1: FUNC_LOG_ERROR("TODO: cellGcmGetLabelAddress"); - case 0xf9bfdc72: FUNC_LOG_ERROR("TODO: cellGcmSetCursorImageOffset"); - case 0xfb81c03e: FUNC_LOG_ERROR("TODO: cellGcmGetMaxIoMapSize"); - case 0xfce9e764: FUNC_LOG_ERROR("TODO: cellGcmInitSystemMode"); - case 0xffe0160e: FUNC_LOG_ERROR("TODO: cellGcmSetVBlankFrequency"); - case 0x02e7e03e: FUNC_LOG_ERROR("TODO: cellGifDecExtDecodeData"); - case 0x116a7da9: FUNC_LOG_ERROR("TODO: cellGifDecClose"); - case 0x17fb83c1: FUNC_LOG_ERROR("TODO: cellGifDecExtOpen"); - case 0x41a90dc4: FUNC_LOG_ERROR("TODO: cellGifDecSetParameter"); - case 0x44b1bc61: FUNC_LOG_ERROR("TODO: cellGifDecDecodeData"); - case 0x4711cb7f: FUNC_LOG_ERROR("TODO: cellGifDecExtCreate"); - case 0x75745079: FUNC_LOG_ERROR("TODO: cellGifDecOpen"); - case 0x95cae771: FUNC_LOG_ERROR("TODO: cellGifDecExtSetParameter"); - case 0xb60d42a5: FUNC_LOG_ERROR("TODO: cellGifDecCreate"); - case 0xe53f91f2: FUNC_LOG_ERROR("TODO: cellGifDecExtReadHeader"); - case 0xe74b2cb1: FUNC_LOG_ERROR("TODO: cellGifDecDestroy"); - case 0xf0da95de: FUNC_LOG_ERROR("TODO: cellGifDecReadHeader"); - case 0x052a80d9: FUNC_LOG_ERROR("TODO: cellHttpCreateTransaction"); - case 0x070f1020: FUNC_LOG_ERROR("TODO: cellHttpClientGetTotalPoolSize"); - case 0x0b9fea5f: FUNC_LOG_ERROR("TODO: cellHttpRequestGetHeader"); - case 0x0d846d63: FUNC_LOG_ERROR("TODO: cellHttpCookieImportWithClientId"); - case 0x0d896b97: FUNC_LOG_ERROR("TODO: cellHttpSetProxy"); - case 0x0d9c65be: FUNC_LOG_ERROR("TODO: cellHttpClientGetAllHeaders"); - case 0x0ef17399: FUNC_LOG_ERROR("TODO: cellHttpTransactionGetUri"); - case 0x10d0d7fc: FUNC_LOG_ERROR("TODO: cellHttpResponseGetStatusCode"); - case 0x130150ea: FUNC_LOG_ERROR("TODO: cellHttpClientGetRecvBufferSize"); - case 0x1395d8d1: FUNC_LOG_ERROR("TODO: cellHttpClientSetSslCallback"); - case 0x13fe767b: FUNC_LOG_ERROR("TODO: cellHttpClientSetCookieRecvCallback"); - case 0x14bfc765: FUNC_LOG_ERROR("TODO: cellHttpClientGetConnTimeout"); - case 0x16214411: FUNC_LOG_ERROR("TODO: cellHttpRequestDeleteHeader"); - case 0x1b5bdcc6: FUNC_LOG_ERROR("TODO: cellHttpAddCookieWithClientId"); - case 0x2033b878: FUNC_LOG_ERROR("TODO: cellHttpClientCloseAllConnections"); - case 0x211d8ba3: FUNC_LOG_ERROR("TODO: cellHttpClientSetAutoRedirect"); - case 0x224e1610: FUNC_LOG_ERROR("TODO: cellHttpClientSetRecvTimeout"); - case 0x250c386c: FUNC_LOG_ERROR("TODO: cellHttpInit"); - case 0x271a0b06: FUNC_LOG_ERROR("TODO: cellHttpClientGetSendTimeout"); - case 0x27f86d70: FUNC_LOG_ERROR("TODO: cellHttpClientCloseConnections"); - case 0x2960e309: FUNC_LOG_ERROR("TODO: cellHttpClientGetAutoRedirect"); - case 0x296a46cf: FUNC_LOG_ERROR("TODO: cellHttpClientSetPipeline"); - case 0x2a1f28f6: FUNC_LOG_ERROR("TODO: cellHttpClientGetPipeline"); - case 0x2a78ff04: FUNC_LOG_ERROR("TODO: cellHttpTransactionGetSslId"); - case 0x2a87603a: FUNC_LOG_ERROR("TODO: cellHttpGetProxy"); - case 0x2d52848b: FUNC_LOG_ERROR("TODO: cellHttpTransactionAbortConnection"); - case 0x32f5cae2: FUNC_LOG_ERROR("TODO: cellHttpDestroyTransaction"); - case 0x34061e49: FUNC_LOG_ERROR("TODO: cellHttpTransactionGetSslCipherId"); - case 0x38954133: FUNC_LOG_ERROR("TODO: cellHttpTransactionGetSslCipherBits"); - case 0x40547d8b: FUNC_LOG_ERROR("TODO: cellHttpClientSetVersion"); - case 0x4137a1f6: FUNC_LOG_ERROR("TODO: cellHttpRequestGetChunkedTransferStatus"); - case 0x42205fe0: FUNC_LOG_ERROR("TODO: cellHttpRequestGetAllHeaders"); - case 0x434419c8: FUNC_LOG_ERROR("TODO: cellHttpClientSetCookieStatus"); - case 0x464ff889: FUNC_LOG_ERROR("TODO: cellHttpResponseGetContentLength"); - case 0x46bcc9ff: FUNC_LOG_ERROR("TODO: cellHttpClientGetPerHostKeepAliveMax"); - case 0x473cd9f1: FUNC_LOG_ERROR("TODO: cellHttpClientSetRedirectCallback"); - case 0x4b33942a: FUNC_LOG_ERROR("TODO: cellHttpClientAddHeader"); - case 0x4d40cf98: FUNC_LOG_ERROR("TODO: cellHttpClientGetProxy"); - case 0x4d915204: FUNC_LOG_ERROR("TODO: cellHttpClientSetCookieSendCallback"); - case 0x4e4ee53a: FUNC_LOG_ERROR("TODO: cellHttpCreateClient"); - case 0x4f5d8d20: FUNC_LOG_ERROR("TODO: cellHttpResponseGetHeader"); - case 0x522180bc: FUNC_LOG_ERROR("TODO: cellHttpsInit"); - case 0x54f2a4de: FUNC_LOG_ERROR("TODO: cellHttpRequestSetHeader"); - case 0x591c21a8: FUNC_LOG_ERROR("TODO: cellHttpClientGetKeepAlive"); - case 0x595adee9: FUNC_LOG_ERROR("TODO: cellHttpClientSetPerHostKeepAliveMax"); - case 0x5980a293: FUNC_LOG_ERROR("TODO: cellHttpClientGetAutoAuthentication"); - case 0x5d473170: FUNC_LOG_ERROR("TODO: cellHttpClientSetKeepAlive"); - case 0x617eec02: FUNC_LOG_ERROR("TODO: cellHttpClientDeleteHeader"); - case 0x61b2bade: FUNC_LOG_ERROR("TODO: cellHttpEndCookie"); - case 0x61c90691: FUNC_LOG_ERROR("TODO: cellHttpRecvResponse"); - case 0x65691795: FUNC_LOG_ERROR("TODO: cellHttpClientSetSslVersion"); - case 0x660d42a9: FUNC_LOG_ERROR("TODO: cellHttpClientSetAuthenticationCallback"); - case 0x6884cdb7: FUNC_LOG_ERROR("TODO: cellHttpClientGetResponseBufferMax"); - case 0x6a81b5e4: FUNC_LOG_ERROR("TODO: cellHttpResponseGetStatusLine"); - case 0x6eed4999: FUNC_LOG_ERROR("TODO: cellHttpClientSetAuthenticationCacheStatus"); - case 0x71714cdc: FUNC_LOG_ERROR("TODO: cellHttpClientSetSendTimeout"); - case 0x7313c78d: FUNC_LOG_ERROR("TODO: cellHttpClientSetSslIdDestroyCallback"); - case 0x895c604c: FUNC_LOG_ERROR("TODO: cellHttpTransactionGetSslCipherName"); - case 0x8aa5fcd3: FUNC_LOG_ERROR("TODO: cellHttpClientSetTotalPoolSize"); - case 0x8e3f7ee1: FUNC_LOG_ERROR("TODO: cellHttpRequestSetChunkedTransferStatus"); - case 0x8eaf47a3: FUNC_LOG_ERROR("TODO: cellHttpClientSetAutoAuthentication"); - case 0x93e938e5: FUNC_LOG_ERROR("TODO: cellHttpTransactionGetSslCipherVersion"); - case 0x958323cf: FUNC_LOG_ERROR("TODO: cellHttpRequestGetContentLength"); - case 0x9638f766: FUNC_LOG_ERROR("TODO: cellHttpInitCookie"); - case 0x980855ac: FUNC_LOG_ERROR("TODO: cellHttpDestroyClient"); - case 0xa0d9223c: FUNC_LOG_ERROR("TODO: cellHttpTransactionCloseConnection"); - case 0xa34c4b6f: FUNC_LOG_ERROR("TODO: cellHttpClientSetHeader"); - case 0xa755b005: FUNC_LOG_ERROR("TODO: cellHttpSendRequest"); - case 0xab1c55ab: FUNC_LOG_ERROR("TODO: cellHttpClientSetPerHostPoolSize"); - case 0xad1c6f02: FUNC_LOG_ERROR("TODO: cellHttpTransactionGetSslVersion"); - case 0xad6a2e5b: FUNC_LOG_ERROR("TODO: cellHttpSessionCookieFlush"); - case 0xadc0a4b2: FUNC_LOG_ERROR("TODO: cellHttpClientPollConnections"); - case 0xadd66b5c: FUNC_LOG_ERROR("TODO: cellHttpClientSetResponseBufferMax"); - case 0xaf73a64e: FUNC_LOG_ERROR("TODO: cellHttpRequestSetContentLength"); - case 0xb6feb84b: FUNC_LOG_ERROR("TODO: cellHttpClientSetTransactionStateCallback"); - case 0xba78e51f: FUNC_LOG_ERROR("TODO: cellHttpClientGetRecvTimeout"); - case 0xbea17389: FUNC_LOG_ERROR("TODO: cellHttpResponseGetAllHeaders"); - case 0xbf6e3659: FUNC_LOG_ERROR("TODO: cellHttpClientSetRecvBufferSize"); - case 0xcac9fc34: FUNC_LOG_ERROR("TODO: cellHttpClientSetUserAgent"); - case 0xccf57336: FUNC_LOG_ERROR("TODO: cellHttpClientGetSslVersion"); - case 0xd06c90a4: FUNC_LOG_ERROR("TODO: cellHttpClientGetPerPipelineMax"); - case 0xd1ec0b25: FUNC_LOG_ERROR("TODO: cellHttpClientGetHeader"); - case 0xd276ff1f: FUNC_LOG_ERROR("TODO: cellHttpEnd"); - case 0xd47cc666: FUNC_LOG_ERROR("TODO: cellHttpTransactionReleaseConnection"); - case 0xd7471088: FUNC_LOG_ERROR("TODO: cellHttpClientSetConnTimeout"); - case 0xd7d3cd5d: FUNC_LOG_ERROR("TODO: cellHttpClientSetProxy"); - case 0xd8352a40: FUNC_LOG_ERROR("TODO: cellHttpClientSetSslClientCertificate"); - case 0xdc405507: FUNC_LOG_ERROR("TODO: cellHttpClientGetVersion"); - case 0xdc7ed599: FUNC_LOG_ERROR("TODO: cellHttpClientSetPerPipelineMax"); - case 0xe3c424b3: FUNC_LOG_ERROR("TODO: cellHttpTransactionGetSslCipherString"); - case 0xe6d4202f: FUNC_LOG_ERROR("TODO: cellHttpsEnd"); - case 0xeb9c1e5e: FUNC_LOG_ERROR("TODO: cellHttpClientGetCookieStatus"); - case 0xed993147: FUNC_LOG_ERROR("TODO: cellHttpRequestAddHeader"); - case 0xee05b0c1: FUNC_LOG_ERROR("TODO: cellHttpClientGetUserAgent"); - case 0xf972c733: FUNC_LOG_ERROR("TODO: cellHttpCookieExportWithClientId"); - case 0xfce39343: FUNC_LOG_ERROR("TODO: cellHttpClientGetAuthenticationCacheStatus"); - case 0xffc74003: FUNC_LOG_ERROR("TODO: cellHttpClientGetPerHostPoolSize"); - case 0x04accebf: FUNC_LOG_ERROR("TODO: cellHttpUtilBuildHeader"); - case 0x1c6e4dbb: FUNC_LOG_ERROR("TODO: cellHttpUtilBuildRequestLine"); - case 0x2763fd66: FUNC_LOG_ERROR("TODO: cellHttpUtilUnescapeUri"); - case 0x2bcbced4: FUNC_LOG_ERROR("TODO: cellHttpUtilParseStatusLine"); - case 0x32faaf58: FUNC_LOG_ERROR("TODO: cellHttpUtilParseUri"); - case 0x37bb53a2: FUNC_LOG_ERROR("TODO: cellHttpUtilAppendHeaderValue"); - case 0x44d756d6: FUNC_LOG_ERROR("TODO: cellHttpUtilFormUrlEncode"); - case 0x50ea75bc: FUNC_LOG_ERROR("TODO: cellHttpUtilCopyStatusLine"); - case 0x6f0f7667: FUNC_LOG_ERROR("TODO: cellHttpUtilBuildUri"); - case 0x83faa354: FUNC_LOG_ERROR("TODO: cellHttpUtilBase64Encoder"); - case 0x8bb608e4: FUNC_LOG_ERROR("TODO: cellHttpUtilParseUriPath"); - case 0x8e52ee08: FUNC_LOG_ERROR("TODO: cellHttpUtilBase64Decoder"); - case 0x8e6c5bb9: FUNC_LOG_ERROR("TODO: cellHttpUtilFormUrlDecode"); - case 0x8ea23deb: FUNC_LOG_ERROR("TODO: cellHttpUtilMergeUriPath"); - case 0x9003b1f2: FUNC_LOG_ERROR("TODO: cellHttpUtilEscapeUri"); - case 0x97f9fbe5: FUNC_LOG_ERROR("TODO: cellHttpUtilCopyHeader"); - case 0xa3457869: FUNC_LOG_ERROR("TODO: cellHttpUtilParseProxy"); - case 0xaabeb869: FUNC_LOG_ERROR("TODO: cellHttpUtilSweepPath"); - case 0xe1fb0ebd: FUNC_LOG_ERROR("TODO: cellHttpUtilParseHeader"); - case 0xf05df789: FUNC_LOG_ERROR("TODO: cellHttpUtilCopyUri"); - case 0x0e363ae7: FUNC_LOG_ERROR("TODO: cellImeJpGetFocusTop"); - case 0x177bd218: FUNC_LOG_ERROR("TODO: cellImeJpGetCandidateSelect"); - case 0x1986f2cd: FUNC_LOG_ERROR("TODO: cellImeJpGetPredictList"); - case 0x1b119958: FUNC_LOG_ERROR("TODO: cellImeJpOpen3"); - case 0x1e29103b: FUNC_LOG_ERROR("TODO: cellImeJpConvertForward"); - case 0x1e411261: FUNC_LOG_ERROR("TODO: cellImeJpMoveFocusClause"); - case 0x24e9d8fc: FUNC_LOG_ERROR("TODO: cellImeJpSetKanaInputMode"); - case 0x36d38701: FUNC_LOG_ERROR("TODO: cellImeJpReset"); - case 0x37961cc1: FUNC_LOG_ERROR("TODO: cellImeJpExtendConvertArea"); - case 0x441a1c2b: FUNC_LOG_ERROR("TODO: cellImeJpEnterString"); - case 0x44608862: FUNC_LOG_ERROR("TODO: cellImeJpOpen"); - case 0x46d1234a: FUNC_LOG_ERROR("TODO: cellImeJpClose"); - case 0x47b43dd4: FUNC_LOG_ERROR("TODO: cellImeJpOpen2"); - case 0x5b6ada55: FUNC_LOG_ERROR("TODO: cellImeJpEnterCharExt"); - case 0x5f5b3227: FUNC_LOG_ERROR("TODO: cellImeJpGetFocusLength"); - case 0x6298b55a: FUNC_LOG_ERROR("TODO: cellImeJpEnterStringExt"); - case 0x6319eda3: FUNC_LOG_ERROR("TODO: cellImeJpAllDeleteConvertString"); - case 0x66c6cc78: FUNC_LOG_ERROR("TODO: cellImeJpGetStatus"); - case 0x6ccbe3d6: FUNC_LOG_ERROR("TODO: cellImeJpEnterChar"); - case 0x7189430b: FUNC_LOG_ERROR("TODO: cellImeJpAllConfirm"); - case 0x72257652: FUNC_LOG_ERROR("TODO: cellImeJpDeleteWord"); - case 0x7a18c2b9: FUNC_LOG_ERROR("TODO: cellImeJpCurrentPartConfirm"); - case 0x89f8a567: FUNC_LOG_ERROR("TODO: cellImeJpGetConfirmYomiString"); - case 0x8bb41f47: FUNC_LOG_ERROR("TODO: cellImeJpPostConvert"); - case 0xaa1d1f57: FUNC_LOG_ERROR("TODO: cellImeJpBackspaceWord"); - case 0xaa2a3287: FUNC_LOG_ERROR("TODO: cellImeJpShortenConvertArea"); - case 0xac6693d8: FUNC_LOG_ERROR("TODO: cellImeJpModeCaretRight"); - case 0xbd679cc1: FUNC_LOG_ERROR("TODO: cellImeJpTemporalConfirm"); - case 0xc1786c81: FUNC_LOG_ERROR("TODO: cellImeJpSetFixInputMode"); - case 0xc2bb48bc: FUNC_LOG_ERROR("TODO: cellImeJpConvertBackward"); - case 0xc4796a45: FUNC_LOG_ERROR("TODO: cellImeJpGetCandidateListSize"); - case 0xcbbc20b7: FUNC_LOG_ERROR("TODO: cellImeJpAllConvertCancel"); - case 0xd3fc3606: FUNC_LOG_ERROR("TODO: cellImeJpGetConfirmString"); - case 0xe4cc15ba: FUNC_LOG_ERROR("TODO: cellImeJpGetCandidateList"); - case 0xe76c9700: FUNC_LOG_ERROR("TODO: cellImeJpModeCaretLeft"); - case 0xea2d4881: FUNC_LOG_ERROR("TODO: cellImeJpGetConvertYomiString"); - case 0xeae879dc: FUNC_LOG_ERROR("TODO: cellImeJpConvertCancel"); - case 0xeede898c: FUNC_LOG_ERROR("TODO: cellImeJpConfirmPrediction"); - case 0xf5992ec8: FUNC_LOG_ERROR("TODO: cellImeJpSetInputCharType"); - case 0xf91abda3: FUNC_LOG_ERROR("TODO: cellImeJpGetConvertString"); - case 0x65cbbb16: FUNC_LOG_ERROR("TODO: cellJpgDecExtSetParameter"); - case 0x6d9ebccf: FUNC_LOG_ERROR("TODO: cellJpgDecReadHeader"); - case 0x716f8792: FUNC_LOG_ERROR("TODO: cellJpgDecExtDecodeData"); - case 0x8b300f66: FUNC_LOG_ERROR("TODO: cellJpgDecExtCreate"); - case 0x9338a07a: FUNC_LOG_ERROR("TODO: cellJpgDecClose"); - case 0x976ca5c2: FUNC_LOG_ERROR("TODO: cellJpgDecOpen"); - case 0xa7978f59: FUNC_LOG_ERROR("TODO: cellJpgDecCreate"); - case 0xa9f703e3: FUNC_LOG_ERROR("TODO: cellJpgDecExtOpen"); - case 0xaf8bb012: FUNC_LOG_ERROR("TODO: cellJpgDecDecodeData"); - case 0xb91eb3d2: FUNC_LOG_ERROR("TODO: cellJpgDecExtReadHeader"); - case 0xd8ea91f8: FUNC_LOG_ERROR("TODO: cellJpgDecDestroy"); - case 0xe08f3910: FUNC_LOG_ERROR("TODO: cellJpgDecSetParameter"); - case 0x0cf2b78b: FUNC_LOG_ERROR("TODO: cellJpgEncReset"); - case 0x12d9b6c5: FUNC_LOG_ERROR("TODO: cellJpgEncQueryAttr"); - case 0x2ae79be8: FUNC_LOG_ERROR("TODO: cellJpgEncWaitForInput"); - case 0x4262e880: FUNC_LOG_ERROR("TODO: cellJpgEncGetStreamInfo"); - case 0x636dc89e: FUNC_LOG_ERROR("TODO: cellJpgEncEncodePicture2"); - case 0x6f2d371c: FUNC_LOG_ERROR("TODO: cellJpgEncOpenEx"); - case 0x969fc5f7: FUNC_LOG_ERROR("TODO: cellJpgEncClose"); - case 0x9b4e3a74: FUNC_LOG_ERROR("TODO: cellJpgEncWaitForOutput"); - case 0xa4bfae51: FUNC_LOG_ERROR("TODO: cellJpgEncOpen"); - case 0xa9e81214: FUNC_LOG_ERROR("TODO: cellJpgEncEncodePicture"); - case 0x0dfbadfa: FUNC_LOG_ERROR("TODO: cellKey2CharSetArrangement"); - case 0x14bf2dc1: FUNC_LOG_ERROR("TODO: cellKey2CharClose"); - case 0x56776c0d: FUNC_LOG_ERROR("TODO: cellKey2CharGetChar"); - case 0xabf629c1: FUNC_LOG_ERROR("TODO: cellKey2CharOpen"); - case 0xbfc03768: FUNC_LOG_ERROR("TODO: cellKey2CharSetMode"); - case 0x005200e6: FUNC_LOG_ERROR("TODO: UCS2toEUCJP"); - case 0x01b0cbf4: FUNC_LOG_ERROR("TODO: l10n_convert"); - case 0x0356038c: FUNC_LOG_ERROR("TODO: UCS2toUTF32"); - case 0x05028763: FUNC_LOG_ERROR("TODO: jis2kuten"); - case 0x058addc8: FUNC_LOG_ERROR("TODO: UTF8toGB18030"); - case 0x060ee3b2: FUNC_LOG_ERROR("TODO: JISstoUTF8s"); - case 0x07168a83: FUNC_LOG_ERROR("TODO: SjisZen2Han"); - case 0x0bc386c8: FUNC_LOG_ERROR("TODO: ToSjisLower"); - case 0x0bedf77d: FUNC_LOG_ERROR("TODO: UCS2toGB18030"); - case 0x0bf867e2: FUNC_LOG_ERROR("TODO: HZstoUCS2s"); - case 0x0ce278fd: FUNC_LOG_ERROR("TODO: UCS2stoHZs"); - case 0x0d90a48d: FUNC_LOG_ERROR("TODO: UCS2stoSJISs"); - case 0x0f624540: FUNC_LOG_ERROR("TODO: kuten2eucjp"); - case 0x14ee3649: FUNC_LOG_ERROR("TODO: sjis2jis"); - case 0x14f504b8: FUNC_LOG_ERROR("TODO: EUCKRstoUCS2s"); - case 0x16eaf5f1: FUNC_LOG_ERROR("TODO: UHCstoEUCKRs"); - case 0x1758053c: FUNC_LOG_ERROR("TODO: jis2sjis"); - case 0x1906ce6b: FUNC_LOG_ERROR("TODO: jstrnchk"); - case 0x1ac0d23d: FUNC_LOG_ERROR("TODO: L10nConvert"); - case 0x1ae2acee: FUNC_LOG_ERROR("TODO: EUCCNstoUTF8s"); - case 0x1cb1138f: FUNC_LOG_ERROR("TODO: GBKstoUCS2s"); - case 0x1da42d70: FUNC_LOG_ERROR("TODO: eucjphan2zen"); - case 0x1ec712e0: FUNC_LOG_ERROR("TODO: ToSjisHira"); - case 0x1fb50183: FUNC_LOG_ERROR("TODO: GBKtoUCS2"); - case 0x21948c03: FUNC_LOG_ERROR("TODO: eucjp2jis"); - case 0x21aa3045: FUNC_LOG_ERROR("TODO: UTF32stoUTF8s"); - case 0x24fd32a9: FUNC_LOG_ERROR("TODO: sjishan2zen"); - case 0x256b6861: FUNC_LOG_ERROR("TODO: UCS2toSBCS"); - case 0x262a5ae2: FUNC_LOG_ERROR("TODO: UTF8stoGBKs"); - case 0x28724522: FUNC_LOG_ERROR("TODO: UTF8toUCS2"); - case 0x2ad091c6: FUNC_LOG_ERROR("TODO: UCS2stoUTF8s"); - case 0x2b84030c: FUNC_LOG_ERROR("TODO: EUCKRstoUTF8s"); - case 0x2efa7294: FUNC_LOG_ERROR("TODO: UTF16stoUTF32s"); - case 0x2f9eb543: FUNC_LOG_ERROR("TODO: UTF8toEUCKR"); - case 0x317ab7c2: FUNC_LOG_ERROR("TODO: UTF16toUTF8"); - case 0x32689828: FUNC_LOG_ERROR("TODO: ARIBstoUTF8s"); - case 0x33435818: FUNC_LOG_ERROR("TODO: SJISstoUTF8s"); - case 0x33f8b35c: FUNC_LOG_ERROR("TODO: sjiszen2han"); - case 0x3968f176: FUNC_LOG_ERROR("TODO: ToEucJpLower"); - case 0x398a3dee: FUNC_LOG_ERROR("TODO: MSJIStoUTF8"); - case 0x3a20bc34: FUNC_LOG_ERROR("TODO: UCS2stoMSJISs"); - case 0x3dabd5a7: FUNC_LOG_ERROR("TODO: EUCJPtoUTF8"); - case 0x3df65b64: FUNC_LOG_ERROR("TODO: eucjp2sjis"); - case 0x408a622b: FUNC_LOG_ERROR("TODO: ToEucJpHira"); - case 0x41b4a5ae: FUNC_LOG_ERROR("TODO: UHCstoUCS2s"); - case 0x41ccf033: FUNC_LOG_ERROR("TODO: ToEucJpKata"); - case 0x42838145: FUNC_LOG_ERROR("TODO: HZstoUTF8s"); - case 0x4931b44e: FUNC_LOG_ERROR("TODO: UTF8toMSJIS"); - case 0x4b3bbacb: FUNC_LOG_ERROR("TODO: BIG5toUTF8"); - case 0x511d386b: FUNC_LOG_ERROR("TODO: EUCJPstoSJISs"); - case 0x52b7883f: FUNC_LOG_ERROR("TODO: UTF8stoBIG5s"); - case 0x53558b6b: FUNC_LOG_ERROR("TODO: UTF16stoUCS2s"); - case 0x53764725: FUNC_LOG_ERROR("TODO: UCS2stoGB18030s"); - case 0x53c71ac2: FUNC_LOG_ERROR("TODO: EUCJPtoSJIS"); - case 0x54f59807: FUNC_LOG_ERROR("TODO: EUCJPtoUCS2"); - case 0x55f6921c: FUNC_LOG_ERROR("TODO: UCS2stoGBKs"); - case 0x58246762: FUNC_LOG_ERROR("TODO: EUCKRtoUHC"); - case 0x596df41c: FUNC_LOG_ERROR("TODO: UCS2toSJIS"); - case 0x5a4ab223: FUNC_LOG_ERROR("TODO: MSJISstoUTF8s"); - case 0x5ac783dc: FUNC_LOG_ERROR("TODO: EUCJPstoUTF8s"); - case 0x5b684dfb: FUNC_LOG_ERROR("TODO: UCS2toBIG5"); - case 0x5cd29270: FUNC_LOG_ERROR("TODO: UTF8stoEUCKRs"); - case 0x5e1d9330: FUNC_LOG_ERROR("TODO: UHCstoUTF8s"); - case 0x60ffa0ec: FUNC_LOG_ERROR("TODO: GB18030stoUCS2s"); - case 0x6122e000: FUNC_LOG_ERROR("TODO: SJIStoUTF8"); - case 0x6169f205: FUNC_LOG_ERROR("TODO: JISstoSJISs"); - case 0x61fb9442: FUNC_LOG_ERROR("TODO: UTF8toUTF16"); - case 0x62b36bcf: FUNC_LOG_ERROR("TODO: UTF8stoMSJISs"); - case 0x63219199: FUNC_LOG_ERROR("TODO: EUCKRtoUTF8"); - case 0x638c2fc1: FUNC_LOG_ERROR("TODO: SjisHan2Zen"); - case 0x64a10ec8: FUNC_LOG_ERROR("TODO: UCS2toUTF16"); - case 0x65444204: FUNC_LOG_ERROR("TODO: UCS2toMSJIS"); - case 0x6621a82c: FUNC_LOG_ERROR("TODO: sjis2kuten"); - case 0x6a6f25d1: FUNC_LOG_ERROR("TODO: UCS2toUHC"); - case 0x6c62d879: FUNC_LOG_ERROR("TODO: UTF32toUCS2"); - case 0x6de4b508: FUNC_LOG_ERROR("TODO: ToSjisUpper"); - case 0x6e0705c4: FUNC_LOG_ERROR("TODO: UTF8toEUCJP"); - case 0x6e5906fd: FUNC_LOG_ERROR("TODO: UCS2stoEUCJPs"); - case 0x6fc530b3: FUNC_LOG_ERROR("TODO: UTF16toUCS2"); - case 0x714a9b4a: FUNC_LOG_ERROR("TODO: UCS2stoUTF16s"); - case 0x71804d64: FUNC_LOG_ERROR("TODO: UCS2stoEUCCNs"); - case 0x72632e53: FUNC_LOG_ERROR("TODO: SBCSstoUTF8s"); - case 0x73f2cd21: FUNC_LOG_ERROR("TODO: SJISstoJISs"); - case 0x74496718: FUNC_LOG_ERROR("TODO: SBCStoUTF8"); - case 0x74871fe0: FUNC_LOG_ERROR("TODO: UTF8toUTF32"); - case 0x750c363d: FUNC_LOG_ERROR("TODO: jstrchk"); - case 0x7c5bde1c: FUNC_LOG_ERROR("TODO: UHCtoEUCKR"); - case 0x7c912bda: FUNC_LOG_ERROR("TODO: kuten2jis"); - case 0x7d07a1c2: FUNC_LOG_ERROR("TODO: UTF8toEUCCN"); - case 0x8171c1cc: FUNC_LOG_ERROR("TODO: EUCCNtoUTF8"); - case 0x82d5ecdf: FUNC_LOG_ERROR("TODO: EucJpZen2Han"); - case 0x8555fe15: FUNC_LOG_ERROR("TODO: UTF32stoUTF16s"); - case 0x860fc741: FUNC_LOG_ERROR("TODO: GBKtoUTF8"); - case 0x867f7b8b: FUNC_LOG_ERROR("TODO: ToEucJpUpper"); - case 0x88f8340b: FUNC_LOG_ERROR("TODO: UCS2stoJISs"); - case 0x89236c86: FUNC_LOG_ERROR("TODO: UTF8stoGB18030s"); - case 0x8a56f148: FUNC_LOG_ERROR("TODO: EUCKRstoUHCs"); - case 0x8ccdba38: FUNC_LOG_ERROR("TODO: UTF8stoUTF32s"); - case 0x8f472054: FUNC_LOG_ERROR("TODO: UTF8stoEUCCNs"); - case 0x90e9b5d2: FUNC_LOG_ERROR("TODO: EUCJPstoUCS2s"); - case 0x91a99765: FUNC_LOG_ERROR("TODO: UHCtoUCS2"); - case 0x931ff25a: FUNC_LOG_ERROR("TODO: L10nConvertStr"); - case 0x949bb14c: FUNC_LOG_ERROR("TODO: GBKstoUTF8s"); - case 0x9557ac9b: FUNC_LOG_ERROR("TODO: UTF8toUHC"); - case 0x9768b6d3: FUNC_LOG_ERROR("TODO: UTF32toUTF8"); - case 0x9874020d: FUNC_LOG_ERROR("TODO: sjis2eucjp"); - case 0x9a0e7d23: FUNC_LOG_ERROR("TODO: UCS2toEUCCN"); - case 0x9a13d6b8: FUNC_LOG_ERROR("TODO: UTF8stoUHCs"); - case 0x9a72059d: FUNC_LOG_ERROR("TODO: EUCKRtoUCS2"); - case 0x9b1210c6: FUNC_LOG_ERROR("TODO: UTF32toUTF16"); - case 0x9cd8135b: FUNC_LOG_ERROR("TODO: EUCCNstoUCS2s"); - case 0x9ce52809: FUNC_LOG_ERROR("TODO: SBCSstoUCS2s"); - case 0x9cf1ab77: FUNC_LOG_ERROR("TODO: UTF8stoJISs"); - case 0x9d14dc46: FUNC_LOG_ERROR("TODO: ToSjisKata"); - case 0x9dcde367: FUNC_LOG_ERROR("TODO: jis2eucjp"); - case 0x9ec52258: FUNC_LOG_ERROR("TODO: BIG5toUCS2"); - case 0xa0d463c0: FUNC_LOG_ERROR("TODO: UCS2toGBK"); - case 0xa19fb9de: FUNC_LOG_ERROR("TODO: UTF16toUTF32"); - case 0xa298cad2: FUNC_LOG_ERROR("TODO: l10n_convert_str"); - case 0xa34fa0eb: FUNC_LOG_ERROR("TODO: EUCJPstoJISs"); - case 0xa5146299: FUNC_LOG_ERROR("TODO: UTF8stoARIBs"); - case 0xa609f3e9: FUNC_LOG_ERROR("TODO: JISstoEUCJPs"); - case 0xa60ff5c9: FUNC_LOG_ERROR("TODO: EucJpHan2Zen"); - case 0xa963619c: FUNC_LOG_ERROR("TODO: isEucJpKigou"); - case 0xa9a76fb8: FUNC_LOG_ERROR("TODO: UCS2toUTF8"); - case 0xaf18d499: FUNC_LOG_ERROR("TODO: GB18030toUCS2"); - case 0xb3361be6: FUNC_LOG_ERROR("TODO: UHCtoUTF8"); - case 0xb6e45343: FUNC_LOG_ERROR("TODO: MSJIStoUCS2"); - case 0xb7cef4a6: FUNC_LOG_ERROR("TODO: UTF8toGBK"); - case 0xb7e08f7a: FUNC_LOG_ERROR("TODO: kuten2sjis"); - case 0xb9cf473d: FUNC_LOG_ERROR("TODO: UTF8toSBCS"); - case 0xbdd44ee3: FUNC_LOG_ERROR("TODO: SJIStoUCS2"); - case 0xbe42e661: FUNC_LOG_ERROR("TODO: eucjpzen2han"); - case 0xbe8d5485: FUNC_LOG_ERROR("TODO: UCS2stoARIBs"); - case 0xbefe3869: FUNC_LOG_ERROR("TODO: isSjisKigou"); - case 0xc62b758d: FUNC_LOG_ERROR("TODO: UTF8stoEUCJPs"); - case 0xc7bdcb4c: FUNC_LOG_ERROR("TODO: UCS2toEUCKR"); - case 0xc944fa56: FUNC_LOG_ERROR("TODO: SBCStoUCS2"); - case 0xc9b78f58: FUNC_LOG_ERROR("TODO: MSJISstoUCS2s"); - case 0xcc1633cc: FUNC_LOG_ERROR("TODO: l10n_get_converter"); - case 0xd02ef83d: FUNC_LOG_ERROR("TODO: GB18030stoUTF8s"); - case 0xd8721e2c: FUNC_LOG_ERROR("TODO: SJISstoEUCJPs"); - case 0xd8cb24cb: FUNC_LOG_ERROR("TODO: UTF32stoUCS2s"); - case 0xd990858b: FUNC_LOG_ERROR("TODO: BIG5stoUTF8s"); - case 0xd9fb1224: FUNC_LOG_ERROR("TODO: EUCCNtoUCS2"); - case 0xda67b37f: FUNC_LOG_ERROR("TODO: UTF8stoSBCSs"); - case 0xdc54886c: FUNC_LOG_ERROR("TODO: UCS2stoEUCKRs"); - case 0xdd5ebdeb: FUNC_LOG_ERROR("TODO: UTF8stoSJISs"); - case 0xdefa1c17: FUNC_LOG_ERROR("TODO: UTF8stoHZs"); - case 0xe2eabb32: FUNC_LOG_ERROR("TODO: eucjp2kuten"); - case 0xe6d9e234: FUNC_LOG_ERROR("TODO: UTF8toBIG5"); - case 0xe6f5711b: FUNC_LOG_ERROR("TODO: UTF16stoUTF8s"); - case 0xe956dc64: FUNC_LOG_ERROR("TODO: JISstoUCS2s"); - case 0xeabc3d00: FUNC_LOG_ERROR("TODO: GB18030toUTF8"); - case 0xeb3dc670: FUNC_LOG_ERROR("TODO: UTF8toSJIS"); - case 0xeb41cc68: FUNC_LOG_ERROR("TODO: ARIBstoUCS2s"); - case 0xeb685b83: FUNC_LOG_ERROR("TODO: UCS2stoUTF32s"); - case 0xebae29c0: FUNC_LOG_ERROR("TODO: UCS2stoSBCSs"); - case 0xee6c6a39: FUNC_LOG_ERROR("TODO: UCS2stoBIG5s"); - case 0xf1dcfa71: FUNC_LOG_ERROR("TODO: UCS2stoUHCs"); - case 0xf439728e: FUNC_LOG_ERROR("TODO: SJIStoEUCJP"); - case 0xf7681b9a: FUNC_LOG_ERROR("TODO: UTF8stoUTF16s"); - case 0xf9b1896d: FUNC_LOG_ERROR("TODO: SJISstoUCS2s"); - case 0xfa4a675a: FUNC_LOG_ERROR("TODO: BIG5stoUCS2s"); - case 0xfdbf6ac5: FUNC_LOG_ERROR("TODO: UTF8stoUCS2s"); - case 0x0252efcc: FUNC_LOG_ERROR("TODO: cellUserTraceInit"); - case 0x05893e7c: FUNC_LOG_ERROR("TODO: cellUserTraceRegister"); - case 0x6d045c2e: FUNC_LOG_ERROR("TODO: cellUserTraceUnregister"); - case 0x898c77bf: FUNC_LOG_ERROR("TODO: cellUserTraceTerminate"); - case 0x017024a8: FUNC_LOG_ERROR("TODO: cellMicGetDeviceGUID"); - case 0x05709bbf: FUNC_LOG_ERROR("TODO: cellMicOpenEx"); - case 0x07e1b12c: FUNC_LOG_ERROR("TODO: cellMicRead"); - case 0x186cb1fb: FUNC_LOG_ERROR("TODO: cellMicIsOpen"); - case 0x1b42101b: FUNC_LOG_ERROR("TODO: cellMicIsAttached"); - case 0x25c5723f: FUNC_LOG_ERROR("TODO: cellMicGetStatus"); - case 0x323deb41: FUNC_LOG_ERROR("TODO: cellMicSetSignalAttr"); - case 0x3acc118e: FUNC_LOG_ERROR("TODO: cellMicReadAux"); - case 0x3ace58f3: FUNC_LOG_ERROR("TODO: cellMicSysShareClose"); - case 0x48108a23: FUNC_LOG_ERROR("TODO: cellMicGetFormat"); - case 0x4e0b69ee: FUNC_LOG_ERROR("TODO: cellMicGetFormatRaw"); - case 0x65336418: FUNC_LOG_ERROR("TODO: cellMicRemoveNotifyEventQueue"); - case 0x6a024aa0: FUNC_LOG_ERROR("TODO: cellMicGetDeviceAttr"); - case 0x6bc46aab: FUNC_LOG_ERROR("TODO: cellMicReset"); - case 0x6cc7ae00: FUNC_LOG_ERROR("TODO: cellMicSetNotifyEventQueue2"); - case 0x72165a7f: FUNC_LOG_ERROR("TODO: cellMicReadRaw"); - case 0x7903400e: FUNC_LOG_ERROR("TODO: cellMicSetNotifyEventQueue"); - case 0x8325e02d: FUNC_LOG_ERROR("TODO: cellMicInit"); - case 0x87a08d29: FUNC_LOG_ERROR("TODO: cellMicGetFormatDsp"); - case 0x891c6291: FUNC_LOG_ERROR("TODO: cellMicSetMultiMicNotifyEventQueue"); - case 0x8d229f8e: FUNC_LOG_ERROR("TODO: cellMicClose"); - case 0xa42ac07a: FUNC_LOG_ERROR("TODO: cellMicOpenRaw"); - case 0xa52d2ae4: FUNC_LOG_ERROR("TODO: cellMicGetType"); - case 0xac5ba03a: FUNC_LOG_ERROR("TODO: cellMicGetSignalAttr"); - case 0xad049ecf: FUNC_LOG_ERROR("TODO: cellMicGetFormatEx"); - case 0xb2c16321: FUNC_LOG_ERROR("TODO: cellMicSetDeviceAttr"); - case 0xb30780eb: FUNC_LOG_ERROR("TODO: cellMicGetSignalState"); - case 0xbdfd51e2: FUNC_LOG_ERROR("TODO: cellMicSysShareStop"); - case 0xc3610dbd: FUNC_LOG_ERROR("TODO: cellMicSysShareOpen"); - case 0xc414faa5: FUNC_LOG_ERROR("TODO: cellMicReadDsp"); - case 0xc461563c: FUNC_LOG_ERROR("TODO: cellMicCommand"); - case 0xc6328caa: FUNC_LOG_ERROR("TODO: cellMicEnd"); - case 0xcac7e7d7: FUNC_LOG_ERROR("TODO: cellMicSysShareStart"); - case 0xd127cd3e: FUNC_LOG_ERROR("TODO: cellMicSysShareInit"); - case 0xdd1b59f0: FUNC_LOG_ERROR("TODO: cellMicOpen"); - case 0xdd724314: FUNC_LOG_ERROR("TODO: cellMicStart"); - case 0xddd19a89: FUNC_LOG_ERROR("TODO: cellMicStartEx"); - case 0xe839380f: FUNC_LOG_ERROR("TODO: cellMicStopEx"); - case 0xf82bbf7c: FUNC_LOG_ERROR("TODO: cellMicSysShareEnd"); - case 0xfcfaf246: FUNC_LOG_ERROR("TODO: cellMicStop"); - case 0xfda12276: FUNC_LOG_ERROR("TODO: cellMicGetFormatAux"); - case 0xfdbbe469: FUNC_LOG_ERROR("TODO: cellMicGetDeviceIdentifier"); - case 0x066bb1cf: FUNC_LOG_ERROR("TODO: cellMusicDecodeSetDecodeCommand"); - case 0x1576e4f2: FUNC_LOG_ERROR("TODO: cellMusicDecodeGetDecodeStatus2"); - case 0x25ea7ac0: FUNC_LOG_ERROR("TODO: cellMusicDecodeGetContentsId2"); - case 0x2ef701ec: FUNC_LOG_ERROR("TODO: cellMusicDecodeSetDecodeCommand2"); - case 0x491d6ba5: FUNC_LOG_ERROR("TODO: cellMusicDecodeSetSelectionContext2"); - case 0x4aef2877: FUNC_LOG_ERROR("TODO: cellMusicDecodeFinalize2"); - case 0x58ab1999: FUNC_LOG_ERROR("TODO: cellMusicDecodeGetContentsId"); - case 0x5af74c50: FUNC_LOG_ERROR("TODO: cellMusicDecodeGetDecodeStatus"); - case 0x84f154b2: FUNC_LOG_ERROR("TODO: cellMusicDecodeInitializeSystemWorkload"); - case 0xa8615dc8: FUNC_LOG_ERROR("TODO: cellMusicDecodeFinalize"); - case 0xa881b744: FUNC_LOG_ERROR("TODO: cellMusicDecodeRead"); - case 0xb2d054df: FUNC_LOG_ERROR("TODO: cellMusicDecodeRead2"); - case 0xb641168e: FUNC_LOG_ERROR("TODO: cellMusicDecodeInitialize2SystemWorkload"); - case 0xb84f5c81: FUNC_LOG_ERROR("TODO: cellMusicDecodeSetSelectionContext"); - case 0xc22563c4: FUNC_LOG_ERROR("TODO: cellMusicDecodeSelectContents2"); - case 0xd55dbc11: FUNC_LOG_ERROR("TODO: cellMusicDecodeInitialize"); - case 0xdbf70550: FUNC_LOG_ERROR("TODO: cellMusicDecodeGetSelectionContext"); - case 0xf24cb963: FUNC_LOG_ERROR("TODO: cellMusicDecodeSelectContents"); - case 0xf80e31e5: FUNC_LOG_ERROR("TODO: cellMusicDecodeInitialize2"); - case 0xf91639f9: FUNC_LOG_ERROR("TODO: cellMusicDecodeGetSelectionContext2"); - case 0x92b50ebc: FUNC_LOG_ERROR("TODO: cellMusicExportProgress"); - case 0xb202f0e8: FUNC_LOG_ERROR("TODO: cellMusicExportFromFile"); - case 0xb4c9b4f9: FUNC_LOG_ERROR("TODO: cellMusicExportInitialize"); - case 0xe0443a44: FUNC_LOG_ERROR("TODO: cellMusicExportInitialize2"); - case 0xe90effea: FUNC_LOG_ERROR("TODO: cellMusicExportFinalize"); - case 0x0b461648: FUNC_LOG_ERROR("TODO: cellMusicGetSelectionContext"); - case 0x2bdc5d6b: FUNC_LOG_ERROR("TODO: cellMusicSetSelectionContext2"); - case 0x4014c246: FUNC_LOG_ERROR("TODO: cellMusicSetVolume2"); - case 0x4c188caa: FUNC_LOG_ERROR("TODO: cellMusicGetContentsId"); - case 0x5bff31bf: FUNC_LOG_ERROR("TODO: cellMusicSetSelectionContext"); - case 0x61865281: FUNC_LOG_ERROR("TODO: cellMusicInitialize2SystemWorkload"); - case 0x648b7611: FUNC_LOG_ERROR("TODO: cellMusicGetPlaybackStatus2"); - case 0x6674de2d: FUNC_LOG_ERROR("TODO: cellMusicGetContentsId2"); - case 0x6f2104f3: FUNC_LOG_ERROR("TODO: cellMusicFinalize"); - case 0x72876546: FUNC_LOG_ERROR("TODO: cellMusicInitializeSystemWorkload"); - case 0x72ec14b5: FUNC_LOG_ERROR("TODO: cellMusicInitialize"); - case 0x7be4dc31: FUNC_LOG_ERROR("TODO: cellMusicFinalize2"); - case 0x8793ef97: FUNC_LOG_ERROR("TODO: cellMusicGetSelectionContext2"); - case 0x8aa188e3: FUNC_LOG_ERROR("TODO: cellMusicGetVolume"); - case 0x95f7d9d9: FUNC_LOG_ERROR("TODO: cellMusicGetPlaybackStatus"); - case 0x98947a6e: FUNC_LOG_ERROR("TODO: cellMusicSetPlaybackCommand2"); - case 0xa0661626: FUNC_LOG_ERROR("TODO: cellMusicSetPlaybackCommand"); - case 0xad04cddd: FUNC_LOG_ERROR("TODO: cellMusicSelectContents2"); - case 0xb2336ba7: FUNC_LOG_ERROR("TODO: cellMusicSelectContents"); - case 0xbe50b11e: FUNC_LOG_ERROR("TODO: cellMusicInitialize2"); - case 0xe74ce7bd: FUNC_LOG_ERROR("TODO: cellMusicSetVolume"); - case 0xf9073a24: FUNC_LOG_ERROR("TODO: cellMusicGetVolume2"); - case 0x04459230: FUNC_LOG_ERROR("TODO: cellNetCtlNetStartDialogLoadAsync"); - case 0x0791015f: FUNC_LOG_ERROR("TODO: cellGameUpdateCheckStartAsyncEx"); - case 0x0ce13c6b: FUNC_LOG_ERROR("TODO: cellNetCtlAddHandler"); - case 0x0f1f13d3: FUNC_LOG_ERROR("TODO: cellNetCtlNetStartDialogUnloadAsync"); - case 0x105ee2cb: FUNC_LOG_ERROR("TODO: cellNetCtlTerm"); - case 0x10dae56d: FUNC_LOG_ERROR("TODO: cellGameUpdateTerm"); - case 0x1e585b5d: FUNC_LOG_ERROR("TODO: cellNetCtlGetInfo"); - case 0x3a12865f: FUNC_LOG_ERROR("TODO: cellNetCtlGetNatInfo"); - case 0x3e359ab6: FUNC_LOG_ERROR("TODO: cellGameUpdateCheckAbort"); - case 0x558700f6: FUNC_LOG_ERROR("TODO: cellGameUpdateCheckStartWithoutDialogAsyncEx"); - case 0x71d53210: FUNC_LOG_ERROR("TODO: cellNetCtlNetStartDialogAbortAsync"); - case 0x8b3eba69: FUNC_LOG_ERROR("TODO: cellNetCtlGetState"); - case 0x901815c3: FUNC_LOG_ERROR("TODO: cellNetCtlDelHandler"); - case 0x99ab1a26: FUNC_LOG_ERROR("TODO: cellGameUpdateInit"); - case 0xa5e1fa60: FUNC_LOG_ERROR("TODO: cellGameUpdateCheckStartWithoutDialogAsync"); - case 0xbd5a59fc: FUNC_LOG_ERROR("TODO: cellNetCtlInit"); - case 0xd0a5d727: FUNC_LOG_ERROR("TODO: cellGameUpdateCheckStartAsync"); - case 0xf463981c: FUNC_LOG_ERROR("TODO: cellGameUpdateCheckFinishAsyncEx"); - case 0xffa3d791: FUNC_LOG_ERROR("TODO: cellGameUpdateCheckFinishAsync"); - case 0x09565b21: FUNC_LOG_ERROR("TODO: cellOskDialogExtInputDeviceUnlock"); - case 0x1e1b4c97: FUNC_LOG_ERROR("TODO: cellOskDialogExtRegisterKeyboardEventHookCallback"); - case 0x23a2ede6: FUNC_LOG_ERROR("TODO: cellOskDialogExtAddJapaneseOptionDictionary"); - case 0x42439db5: FUNC_LOG_ERROR("TODO: cellOskDialogExtSendFinishMessage"); - case 0x4fe14d09: FUNC_LOG_ERROR("TODO: cellOskDialogExtAddOptionDictionary"); - case 0x75370397: FUNC_LOG_ERROR("TODO: cellOskDialogExtSetInitialScale"); - case 0x7c95feb8: FUNC_LOG_ERROR("TODO: cellOskDialogExtInputDeviceLock"); - case 0x7eb292cd: FUNC_LOG_ERROR("TODO: cellOskDialogExtSetBaseColor"); - case 0x8692fcd2: FUNC_LOG_ERROR("TODO: cellOskDialogExtRegisterConfirmWordFilterCallback"); - case 0x8b60c469: FUNC_LOG_ERROR("TODO: cellOskDialogExtUpdateInputText"); - case 0xe6c43c58: FUNC_LOG_ERROR("TODO: cellOskDialogExtEnableHalfByteKana"); - case 0xe800f586: FUNC_LOG_ERROR("TODO: cellOskDialogExtRegisterForceFinishCallback"); - case 0x629ba0c0: FUNC_LOG_ERROR("TODO: cellOvisInvalidateOverlappedSegments"); - case 0x82f294b2: FUNC_LOG_ERROR("TODO: cellOvisGetOverlayTableSize"); - case 0xa876c911: FUNC_LOG_ERROR("TODO: cellOvisInitializeOverlayTable"); - case 0xce6cb776: FUNC_LOG_ERROR("TODO: cellOvisFixSpuSegments"); - case 0x01067e22: FUNC_LOG_ERROR("TODO: cellPamfStreamTypeToEsFilterId"); - case 0x03fd2caa: FUNC_LOG_ERROR("TODO: cellPamfReaderSetStreamWithTypeAndChannel"); - case 0x041cc708: FUNC_LOG_ERROR("TODO: cellPamfReaderGetStreamIndex"); - case 0x1abeb9d6: FUNC_LOG_ERROR("TODO: cellPamfEpIteratorGetEp"); - case 0x28b4e2c1: FUNC_LOG_ERROR("TODO: cellPamfReaderSetStreamWithTypeAndIndex"); - case 0x37f723f7: FUNC_LOG_ERROR("TODO: cellPamfReaderGetNumberOfStreams"); - case 0x439fba17: FUNC_LOG_ERROR("TODO: cellPamfReaderGetEpIteratorWithTimeStamp"); - case 0x44f5c9e3: FUNC_LOG_ERROR("TODO: cellPamfGetStreamOffsetAndSize"); - case 0x461534b4: FUNC_LOG_ERROR("TODO: cellPamfReaderSetStreamWithIndex"); - case 0x4de501b1: FUNC_LOG_ERROR("TODO: cellPamfReaderGetPresentationStartTime"); - case 0x50b83205: FUNC_LOG_ERROR("TODO: cellPamfEpIteratorMove"); - case 0x67fd273b: FUNC_LOG_ERROR("TODO: cellPamfReaderGetStreamInfo"); - case 0x71df326a: FUNC_LOG_ERROR("TODO: cellPamfReaderGetEsFilterId"); - case 0x90fc9a59: FUNC_LOG_ERROR("TODO: cellPamfGetHeaderSize2"); - case 0x9ab20793: FUNC_LOG_ERROR("TODO: cellPamfReaderGetStreamTypeAndChannel"); - case 0xb8436ee5: FUNC_LOG_ERROR("TODO: cellPamfReaderInitialize"); - case 0xca8181c1: FUNC_LOG_ERROR("TODO: cellPamfGetHeaderSize"); - case 0xd0230671: FUNC_LOG_ERROR("TODO: cellPamfReaderGetNumberOfSpecificStreams"); - case 0xd1a40ef4: FUNC_LOG_ERROR("TODO: cellPamfVerify"); - case 0xd9ea3457: FUNC_LOG_ERROR("TODO: cellPamfReaderGetNumberOfEp"); - case 0xdb70296c: FUNC_LOG_ERROR("TODO: cellPamfReaderGetMuxRateBound"); - case 0xe8586ec6: FUNC_LOG_ERROR("TODO: cellPamfReaderGetEpIteratorWithIndex"); - case 0xf61609d6: FUNC_LOG_ERROR("TODO: cellPamfReaderGetPresentationEndTime"); - case 0x0f424ecb: FUNC_LOG_ERROR("TODO: cellPhotoDecodeInitialize2"); - case 0x28b22e44: FUNC_LOG_ERROR("TODO: cellPhotoDecodeFromFile"); - case 0x596f0a56: FUNC_LOG_ERROR("TODO: cellPhotoDecodeInitialize"); - case 0xad7d8f38: FUNC_LOG_ERROR("TODO: cellPhotoDecodeFinalize"); - case 0x0783bce0: FUNC_LOG_ERROR("TODO: cellPhotoImport"); - case 0x1ab8df55: FUNC_LOG_ERROR("TODO: cellPhotoImport2"); - case 0x08cbd8e1: FUNC_LOG_ERROR("TODO: cellPhotoExportInitialize2"); - case 0x09ce84ac: FUNC_LOG_ERROR("TODO: cellPhotoExportFromFile"); - case 0x3f7fc0af: FUNC_LOG_ERROR("TODO: cellPhotoFinalize"); - case 0x42a32983: FUNC_LOG_ERROR("TODO: cellPhotoRegistFromFile"); - case 0x4357c77f: FUNC_LOG_ERROR("TODO: cellPhotoExportInitialize"); - case 0x55c70783: FUNC_LOG_ERROR("TODO: cellPhotoInitialize"); - case 0xde509ead: FUNC_LOG_ERROR("TODO: cellPhotoExportProgress"); - case 0xed4a0148: FUNC_LOG_ERROR("TODO: cellPhotoExportFinalize"); - case 0x0c515302: FUNC_LOG_ERROR("TODO: cellPngDecExtOpen"); - case 0x157d30c5: FUNC_LOG_ERROR("TODO: cellPngDecCreate"); - case 0x2310f155: FUNC_LOG_ERROR("TODO: cellPngDecDecodeData"); - case 0x27c921b5: FUNC_LOG_ERROR("TODO: cellPngDecGetoFFs"); - case 0x30cb334a: FUNC_LOG_ERROR("TODO: cellPngDecGetsBIT"); - case 0x35a6846c: FUNC_LOG_ERROR("TODO: cellPngDecGettIME"); - case 0x3d50016a: FUNC_LOG_ERROR("TODO: cellPngDecGetpHYs"); - case 0x48436b2d: FUNC_LOG_ERROR("TODO: cellPngDecExtCreate"); - case 0x5b3d1ff1: FUNC_LOG_ERROR("TODO: cellPngDecClose"); - case 0x609ec7d5: FUNC_LOG_ERROR("TODO: cellPngDecGetUnknownChunks"); - case 0x726fc1d0: FUNC_LOG_ERROR("TODO: cellPngDecExtDecodeData"); - case 0x7585a275: FUNC_LOG_ERROR("TODO: cellPngDecGetbKGD"); - case 0x7a062d26: FUNC_LOG_ERROR("TODO: cellPngDecGetcHRM"); - case 0x820dae1a: FUNC_LOG_ERROR("TODO: cellPngDecDestroy"); - case 0x8b33f863: FUNC_LOG_ERROR("TODO: cellPngDecExtReadHeader"); - case 0x9ccdcc95: FUNC_LOG_ERROR("TODO: cellPngDecReadHeader"); - case 0x9e9d7d42: FUNC_LOG_ERROR("TODO: cellPngDecExtSetParameter"); - case 0xa5cdf57e: FUNC_LOG_ERROR("TODO: cellPngDecGetsPLT"); - case 0xb153629c: FUNC_LOG_ERROR("TODO: cellPngDecGetgAMA"); - case 0xb40ca175: FUNC_LOG_ERROR("TODO: cellPngDecGetTextChunk"); - case 0xb4fe75e1: FUNC_LOG_ERROR("TODO: cellPngDecGetpCAL"); - case 0xb905ebb7: FUNC_LOG_ERROR("TODO: cellPngDecGethIST"); - case 0xb96fb26e: FUNC_LOG_ERROR("TODO: cellPngDecGettRNS"); - case 0xc41e1198: FUNC_LOG_ERROR("TODO: cellPngDecGetsCAL"); - case 0xd2bc5bfd: FUNC_LOG_ERROR("TODO: cellPngDecOpen"); - case 0xe163977f: FUNC_LOG_ERROR("TODO: cellPngDecGetPLTE"); - case 0xe4416e82: FUNC_LOG_ERROR("TODO: cellPngDecGetsRGB"); - case 0xe97c9bd4: FUNC_LOG_ERROR("TODO: cellPngDecSetParameter"); - case 0xf44b6c30: FUNC_LOG_ERROR("TODO: cellPngDecGetiCCP"); - case 0x117cd726: FUNC_LOG_ERROR("TODO: cellPngEncClose"); - case 0x19256dc5: FUNC_LOG_ERROR("TODO: cellPngEncOpen"); - case 0x496cfcd0: FUNC_LOG_ERROR("TODO: cellPngEncQueryAttr"); - case 0x585269bc: FUNC_LOG_ERROR("TODO: cellPngEncGetStreamInfo"); - case 0x5b546ca4: FUNC_LOG_ERROR("TODO: cellPngEncEncodePicture"); - case 0x662bd637: FUNC_LOG_ERROR("TODO: cellPngEncWaitForInput"); - case 0x6ac91de3: FUNC_LOG_ERROR("TODO: cellPngEncReset"); - case 0x90ef2963: FUNC_LOG_ERROR("TODO: cellPngEncWaitForOutput"); - case 0xc82558ce: FUNC_LOG_ERROR("TODO: cellPngEncOpenEx"); - case 0x0a373522: FUNC_LOG_ERROR("TODO: cellPrintSendBand"); - case 0x0d44f661: FUNC_LOG_ERROR("TODO: cellPrintEndPage"); - case 0x293d9e9c: FUNC_LOG_ERROR("TODO: cellPrintCancelJob"); - case 0x6802dfb5: FUNC_LOG_ERROR("TODO: cellPrintGetStatus"); - case 0x6d996018: FUNC_LOG_ERROR("TODO: cellSysutilPrintShutdown"); - case 0x6e952645: FUNC_LOG_ERROR("TODO: cellPrintGetPrintableArea"); - case 0x795b12b3: FUNC_LOG_ERROR("TODO: cellPrintStartJob"); - case 0x865acf74: FUNC_LOG_ERROR("TODO: cellPrintStartPage"); - case 0xc04a7d42: FUNC_LOG_ERROR("TODO: cellPrintEndJob"); - case 0xc9c3ef14: FUNC_LOG_ERROR("TODO: cellPrintLoadAsync"); - case 0xcf1aaefa: FUNC_LOG_ERROR("TODO: cellSysutilPrintInit"); - case 0xeb51aa38: FUNC_LOG_ERROR("TODO: cellPrintUnloadAsync"); - case 0xf0865182: FUNC_LOG_ERROR("TODO: cellPrintLoadAsync2"); - case 0xf9a53f35: FUNC_LOG_ERROR("TODO: cellPrintOpenConfig"); - case 0x39651e01: FUNC_LOG_ERROR("TODO: cellRecOpen"); - case 0x4ac76585: FUNC_LOG_ERROR("TODO: cellRecClose"); - case 0x5a8a8b0f: FUNC_LOG_ERROR("TODO: cellRecGetInfo"); - case 0x5b45439d: FUNC_LOG_ERROR("TODO: cellRecStop"); - case 0x964cd1b8: FUNC_LOG_ERROR("TODO: cellRecStart"); - case 0xdbf22bd1: FUNC_LOG_ERROR("TODO: cellRecQueryMemSize"); - case 0xf0958f73: FUNC_LOG_ERROR("TODO: cellRecSetInfo"); - case 0x533f41df: FUNC_LOG_ERROR("TODO: cellRemotePlayGetStatus"); - case 0x743918bd: FUNC_LOG_ERROR("TODO: cellRemotePlaySetComparativeVolume"); - case 0xa445cd55: FUNC_LOG_ERROR("TODO: cellRemotePlayGetPeerInfo"); - case 0xc267987b: FUNC_LOG_ERROR("TODO: cellRemotePlayGetSharedMemory"); - case 0xd29fe5e3: FUNC_LOG_ERROR("TODO: cellRemotePlayEncryptAllData"); - case 0xd6f3fc82: FUNC_LOG_ERROR("TODO: cellRemotePlayStopPeerVideoOut"); - case 0xe12c8c19: FUNC_LOG_ERROR("TODO: cellRemotePlayGetComparativeVolume"); - case 0xfb793f27: FUNC_LOG_ERROR("TODO: cellRemotePlayBreak"); - case 0x01220224: FUNC_LOG_ERROR("TODO: cellRescGcmSurface2RescSrc"); - case 0x0a2069c7: FUNC_LOG_ERROR("TODO: cellRescGetNumColorBuffers"); - case 0x0d3c22ce: FUNC_LOG_ERROR("TODO: cellRescSetWaitFlip"); - case 0x10db5b1a: FUNC_LOG_ERROR("TODO: cellRescSetDsts"); - case 0x129922a0: FUNC_LOG_ERROR("TODO: cellRescResetFlipStatus"); - case 0x19a2a967: FUNC_LOG_ERROR("TODO: cellRescSetPalInterpolateDropFlexRatio"); - case 0x1dd3c4cd: FUNC_LOG_ERROR("TODO: cellRescGetRegisterCount"); - case 0x22ae06d8: FUNC_LOG_ERROR("TODO: cellRescAdjustAspectRatio"); - case 0x23134710: FUNC_LOG_ERROR("TODO: cellRescSetDisplayMode"); - case 0x25c107e6: FUNC_LOG_ERROR("TODO: cellRescSetConvertAndFlip"); - case 0x2ea3061e: FUNC_LOG_ERROR("TODO: cellRescExit"); - case 0x2ea94661: FUNC_LOG_ERROR("TODO: cellRescSetFlipHandler"); - case 0x516ee89e: FUNC_LOG_ERROR("TODO: cellRescInit"); - case 0x5a338cdb: FUNC_LOG_ERROR("TODO: cellRescGetBufferSize"); - case 0x66f5e388: FUNC_LOG_ERROR("TODO: cellRescGetLastFlipTime"); - case 0x6cd0f95f: FUNC_LOG_ERROR("TODO: cellRescSetSrc"); - case 0x7af8a37f: FUNC_LOG_ERROR("TODO: cellRescSetRegisterCount"); - case 0x8107277c: FUNC_LOG_ERROR("TODO: cellRescSetBufferAddress"); - case 0xc47c5c22: FUNC_LOG_ERROR("TODO: cellRescGetFlipStatus"); - case 0xd1ca0503: FUNC_LOG_ERROR("TODO: cellRescVideoOutResolutionId2RescBufferMode"); - case 0xd3758645: FUNC_LOG_ERROR("TODO: cellRescSetVBlankHandler"); - case 0xe0cef79e: FUNC_LOG_ERROR("TODO: cellRescCreateInterlaceTable"); - case 0x1324948a: FUNC_LOG_ERROR("TODO: cellRtcFormatRfc3339LocalTime"); - case 0x269a1882: FUNC_LOG_ERROR("TODO: cellRtcTickAddTicks"); - case 0x2cce9cf5: FUNC_LOG_ERROR("TODO: cellRtcGetCurrentClockLocalTime"); - case 0x2f010bfa: FUNC_LOG_ERROR("TODO: cellRtcTickAddMinutes"); - case 0x32c941cf: FUNC_LOG_ERROR("TODO: cellRtcGetCurrentClock"); - case 0x332a74dd: FUNC_LOG_ERROR("TODO: cellRtcTickAddYears"); - case 0x46ca7fe0: FUNC_LOG_ERROR("TODO: cellRtcConvertLocalTimeToUtc"); - case 0x5316b4a8: FUNC_LOG_ERROR("TODO: cellRtcIsLeapYear"); - case 0x5491b9d5: FUNC_LOG_ERROR("TODO: cellRtcFormatRfc2822"); - case 0x5b6a0a1d: FUNC_LOG_ERROR("TODO: cellRtcGetDaysInMonth"); - case 0x5f68c268: FUNC_LOG_ERROR("TODO: cellRtcSetWin32FileTime"); - case 0x64c63fd5: FUNC_LOG_ERROR("TODO: cellRtcTickAddWeeks"); - case 0x75744e2a: FUNC_LOG_ERROR("TODO: cellRtcTickAddDays"); - case 0x7f1086e6: FUNC_LOG_ERROR("TODO: cellRtcCheckValid"); - case 0x9598d4b3: FUNC_LOG_ERROR("TODO: cellRtcSetDosTime"); - case 0x99b13034: FUNC_LOG_ERROR("TODO: cellRtcSetTick"); - case 0x9dafc0d9: FUNC_LOG_ERROR("TODO: cellRtcGetCurrentTick"); - case 0xa07c3d2f: FUNC_LOG_ERROR("TODO: cellRtcFormatRfc2822LocalTime"); - case 0xbb543189: FUNC_LOG_ERROR("TODO: cellRtcSetTime_t"); - case 0xc2d8cf95: FUNC_LOG_ERROR("TODO: cellRtcGetDayOfWeek"); - case 0xc48d5002: FUNC_LOG_ERROR("TODO: cellRtcConvertUtcToLocalTime"); - case 0xc5bc0fac: FUNC_LOG_ERROR("TODO: cellRtcParseDateTime"); - case 0xc7bdb7eb: FUNC_LOG_ERROR("TODO: cellRtcGetTick"); - case 0xcb90c761: FUNC_LOG_ERROR("TODO: cellRtcGetTime_t"); - case 0xccce71bd: FUNC_LOG_ERROR("TODO: cellRtcTickAddSeconds"); - case 0xcf11c3d6: FUNC_LOG_ERROR("TODO: cellRtcParseRfc3339"); - case 0xd41d3bd2: FUNC_LOG_ERROR("TODO: cellRtcTickAddHours"); - case 0xd9c0b463: FUNC_LOG_ERROR("TODO: cellRtcFormatRfc3339"); - case 0xdfff32cf: FUNC_LOG_ERROR("TODO: cellRtcGetDosTime"); - case 0xe0ecbb45: FUNC_LOG_ERROR("TODO: cellRtcTickAddMonths"); - case 0xe7086f05: FUNC_LOG_ERROR("TODO: cellRtcGetWin32FileTime"); - case 0xf8509925: FUNC_LOG_ERROR("TODO: cellRtcTickAddMicroseconds"); - case 0xfb51fc61: FUNC_LOG_ERROR("TODO: cellRtcCompareTick"); - case 0x2cde989f: FUNC_LOG_ERROR("TODO: cellRudpGetSizeReadable"); - case 0x384ba777: FUNC_LOG_ERROR("TODO: cellRudpSetOption"); - case 0x48c001b0: FUNC_LOG_ERROR("TODO: cellRudpWrite"); - case 0x48d3eeac: FUNC_LOG_ERROR("TODO: cellRudpTerminate"); - case 0x54f81789: FUNC_LOG_ERROR("TODO: cellRudpSetMaxSegmentSize"); - case 0x576831ae: FUNC_LOG_ERROR("TODO: cellRudpGetRemoteInfo"); - case 0x63f63545: FUNC_LOG_ERROR("TODO: cellRudpInit"); - case 0x6bc587e9: FUNC_LOG_ERROR("TODO: cellRudpPollCreate"); - case 0x6c0cff03: FUNC_LOG_ERROR("TODO: cellRudpEnableInternalIOThread"); - case 0x6ee04954: FUNC_LOG_ERROR("TODO: cellRudpNetReceived"); - case 0x74bfad12: FUNC_LOG_ERROR("TODO: cellRudpGetContextStatus"); - case 0x7dadc739: FUNC_LOG_ERROR("TODO: cellRudpCreateContext"); - case 0x7ed95e60: FUNC_LOG_ERROR("TODO: cellRudpSetEventHandler"); - case 0x8ac398f1: FUNC_LOG_ERROR("TODO: cellRudpPollDestroy"); - case 0x92e4d899: FUNC_LOG_ERROR("TODO: cellRudpRead"); - case 0xa3db855c: FUNC_LOG_ERROR("TODO: cellRudpPollControl"); - case 0xa70737da: FUNC_LOG_ERROR("TODO: cellRudpFlush"); - case 0xa86b28e3: FUNC_LOG_ERROR("TODO: cellRudpGetSizeWritable"); - case 0xb6bcb4a1: FUNC_LOG_ERROR("TODO: cellRudpEnd"); - case 0xc1ad7ced: FUNC_LOG_ERROR("TODO: cellRudpActivate"); - case 0xc407844f: FUNC_LOG_ERROR("TODO: cellRudpInitiate"); - case 0xcd1a3f23: FUNC_LOG_ERROR("TODO: cellRudpGetStatus"); - case 0xd666931f: FUNC_LOG_ERROR("TODO: cellRudpGetLocalInfo"); - case 0xd8310700: FUNC_LOG_ERROR("TODO: cellRudpPollWait"); - case 0xee41e16a: FUNC_LOG_ERROR("TODO: cellRudpBind"); - case 0xfade48b2: FUNC_LOG_ERROR("TODO: cellRudpProcessEvents"); - case 0xfbf7e9e4: FUNC_LOG_ERROR("TODO: cellRudpGetMaxSegmentSize"); - case 0xff9d259c: FUNC_LOG_ERROR("TODO: cellRudpGetOption"); - case 0x018281a8: FUNC_LOG_ERROR("TODO: cellSailGraphicsAdapterGetFrame2"); - case 0x0247c69e: FUNC_LOG_ERROR("TODO: cellSailGraphicsAdapterGetFrame"); - case 0x025b4974: FUNC_LOG_ERROR("TODO: cellSailPlayerUnregisterSource"); - case 0x06dd4174: FUNC_LOG_ERROR("TODO: cellSailRendererAudioFinalize"); - case 0x07924359: FUNC_LOG_ERROR("TODO: cellSailPlayerCloseEsVideo"); - case 0x09de25fd: FUNC_LOG_ERROR("TODO: cellSailPlayerIsEsAudioMuted"); - case 0x0abb318b: FUNC_LOG_ERROR("TODO: cellSailDescriptorCreateDatabase"); - case 0x0c4cb439: FUNC_LOG_ERROR("TODO: cellSailFutureReset"); - case 0x0d0c2f0c: FUNC_LOG_ERROR("TODO: cellSailDescriptorSetEs"); - case 0x10298371: FUNC_LOG_ERROR("TODO: cellSailAviMovieGetHeader"); - case 0x1139a206: FUNC_LOG_ERROR("TODO: cellSailPlayerSetSoundAdapter"); - case 0x145f9b11: FUNC_LOG_ERROR("TODO: cellSailPlayerOpenEsAudio"); - case 0x15fd6a2a: FUNC_LOG_ERROR("TODO: cellSailDescriptorClose"); - case 0x17932b26: FUNC_LOG_ERROR("TODO: cellSailPlayerInitialize"); - case 0x186b98d3: FUNC_LOG_ERROR("TODO: cellSailPlayerGetRegisteredProtocols"); - case 0x1872331b: FUNC_LOG_ERROR("TODO: cellSailGraphicsAdapterPtsToTimePosition"); - case 0x18b4629d: FUNC_LOG_ERROR("TODO: cellSailPlayerFinalize"); - case 0x18bcd21b: FUNC_LOG_ERROR("TODO: cellSailPlayerSetGraphicsAdapter"); - case 0x1c983864: FUNC_LOG_ERROR("TODO: cellSailGraphicsAdapterInitialize"); - case 0x1c9d5e5a: FUNC_LOG_ERROR("TODO: cellSailSoundAdapterSetPreferredFormat"); - case 0x23654375: FUNC_LOG_ERROR("TODO: cellSailPlayerInitialize2"); - case 0x26563ddc: FUNC_LOG_ERROR("TODO: cellSailPlayerNext"); - case 0x277adf21: FUNC_LOG_ERROR("TODO: cellSailDescriptorIsAutoSelection"); - case 0x28336e89: FUNC_LOG_ERROR("TODO: cellSailDescriptorDestroyDatabase"); - case 0x2e3ccb5e: FUNC_LOG_ERROR("TODO: cellSailGraphicsAdapterSetPreferredFormat"); - case 0x325039b9: FUNC_LOG_ERROR("TODO: cellSailRendererAudioNotifyOutputEos"); - case 0x346ebba3: FUNC_LOG_ERROR("TODO: cellSailMemAllocatorInitialize"); - case 0x34ecc1b9: FUNC_LOG_ERROR("TODO: cellSailPlayerOpenStream"); - case 0x38144ecf: FUNC_LOG_ERROR("TODO: cellSailPlayerGetRepeatMode"); - case 0x3a1132ed: FUNC_LOG_ERROR("TODO: cellSailAuReceiverGet"); - case 0x3a2d806c: FUNC_LOG_ERROR("TODO: cellSailFutureGet"); - case 0x3d0d3b72: FUNC_LOG_ERROR("TODO: cellSailSoundAdapterInitialize"); - case 0x3dd9639a: FUNC_LOG_ERROR("TODO: cellSailAuReceiverInitialize"); - case 0x3df98d41: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyOpenCompleted"); - case 0x3e908c56: FUNC_LOG_ERROR("TODO: cellSailAviMovieGetStreamByIndex"); - case 0x44a20e79: FUNC_LOG_ERROR("TODO: cellSailGraphicsAdapterUpdateAvSync"); - case 0x47055fea: FUNC_LOG_ERROR("TODO: cellSailRendererVideoFinalize"); - case 0x47632810: FUNC_LOG_ERROR("TODO: cellSailPlayerReplaceEventHandler"); - case 0x477501f6: FUNC_LOG_ERROR("TODO: cellSailPlayerOpenEsVideo"); - case 0x4ae979df: FUNC_LOG_ERROR("TODO: cellSailSoundAdapterPtsToTimePosition"); - case 0x4c191088: FUNC_LOG_ERROR("TODO: cellSailDescriptorGetUri"); - case 0x4cc54f8e: FUNC_LOG_ERROR("TODO: cellSailFutureInitialize"); - case 0x4fa5ad09: FUNC_LOG_ERROR("TODO: cellSailPlayerReopenEsAudio"); - case 0x51ecf361: FUNC_LOG_ERROR("TODO: cellSailFutureIsDone"); - case 0x54c53688: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyInputEos"); - case 0x5783a454: FUNC_LOG_ERROR("TODO: cellSailMp4MovieGetMovieInfo"); - case 0x5f44f64f: FUNC_LOG_ERROR("TODO: cellSailMp4TrackGetTrackReference"); - case 0x5f77e8df: FUNC_LOG_ERROR("TODO: cellSailRendererVideoNotifyFrameDone"); - case 0x5f7c7a6f: FUNC_LOG_ERROR("TODO: cellSailPlayerSetParameter"); - case 0x5faf802b: FUNC_LOG_ERROR("TODO: cellSailMp4MovieGetTrackByIndex"); - case 0x640c7278: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyStartCompleted"); - case 0x67b4d01f: FUNC_LOG_ERROR("TODO: cellSailRendererAudioInitialize"); - case 0x69793952: FUNC_LOG_ERROR("TODO: cellSailPlayerUnsubscribeEvent"); - case 0x6e83f5c0: FUNC_LOG_ERROR("TODO: cellSailAviMovieGetMovieInfo"); - case 0x6f0b1002: FUNC_LOG_ERROR("TODO: cellSailPlayerSubscribeEvent"); - case 0x72236ec1: FUNC_LOG_ERROR("TODO: cellSailMp4TrackGetTrackReferenceCount"); - case 0x7473970a: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyStopCompleted"); - case 0x752f8585: FUNC_LOG_ERROR("TODO: cellSailPlayerGetDescriptorCount"); - case 0x75fca288: FUNC_LOG_ERROR("TODO: cellSailPlayerGetCurrentDescriptor"); - case 0x76488bb1: FUNC_LOG_ERROR("TODO: cellSailGraphicsAdapterFinalize"); - case 0x764ec2d2: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyCallCompleted"); - case 0x76b1a425: FUNC_LOG_ERROR("TODO: cellSailDescriptorSetAutoSelection"); - case 0x7b6fa92e: FUNC_LOG_ERROR("TODO: cellSailPlayerReopenEsUser"); - case 0x7c8dff3b: FUNC_LOG_ERROR("TODO: cellSailPlayerAddDescriptor"); - case 0x7eb8d6b5: FUNC_LOG_ERROR("TODO: cellSailSoundAdapterGetFrame"); - case 0x85b07126: FUNC_LOG_ERROR("TODO: cellSailMp4MovieGetTrackById"); - case 0x85beffcc: FUNC_LOG_ERROR("TODO: cellSailPlayerCloseStream"); - case 0x8d1ff475: FUNC_LOG_ERROR("TODO: cellSailRendererVideoInitialize"); - case 0x91d287f6: FUNC_LOG_ERROR("TODO: cellSailPlayerSetEsAudioMuted"); - case 0x92590d52: FUNC_LOG_ERROR("TODO: cellSailDescriptorInquireCapability"); - case 0x92eaf6ca: FUNC_LOG_ERROR("TODO: cellSailPlayerSetRendererAudio"); - case 0x946ecca0: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyReadCompleted"); - case 0x950d53c1: FUNC_LOG_ERROR("TODO: cellSailPlayerCancel"); - case 0x952269c9: FUNC_LOG_ERROR("TODO: cellSailPlayerGetParameter"); - case 0x954f48f8: FUNC_LOG_ERROR("TODO: cellSailRendererVideoNotifyCallCompleted"); - case 0x9553af65: FUNC_LOG_ERROR("TODO: cellSailFutureFinalize"); - case 0x95ee1695: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyStreamOut"); - case 0x9897fbd1: FUNC_LOG_ERROR("TODO: cellSailPlayerRemoveDescriptor"); - case 0x9d30bdce: FUNC_LOG_ERROR("TODO: cellSailSourceInitialize"); - case 0xa37fed15: FUNC_LOG_ERROR("TODO: cellSailFutureSet"); - case 0xa48be428: FUNC_LOG_ERROR("TODO: cellSailMp4TrackGetTrackInfo"); - case 0xa849d0a7: FUNC_LOG_ERROR("TODO: cellSailPlayerOpenEsUser"); - case 0xaafa17b8: FUNC_LOG_ERROR("TODO: cellSailPlayerIsPaused"); - case 0xac9c3b1f: FUNC_LOG_ERROR("TODO: cellSailDescriptorGetCapabilities"); - case 0xaed9d6cd: FUNC_LOG_ERROR("TODO: cellSailPlayerCloseEsUser"); - case 0xb7b4ecee: FUNC_LOG_ERROR("TODO: cellSailRendererAudioNotifyCallCompleted"); - case 0xb980b76e: FUNC_LOG_ERROR("TODO: cellSailMp4MovieGetBrand"); - case 0xbd1635f4: FUNC_LOG_ERROR("TODO: cellSailDescriptorGetMediaInfo"); - case 0xbdb2251a: FUNC_LOG_ERROR("TODO: cellSailSourceSetDiagHandler"); - case 0xbdf21b0f: FUNC_LOG_ERROR("TODO: cellSailPlayerBoot"); - case 0xbedccc74: FUNC_LOG_ERROR("TODO: cellSailPlayerRegisterSource"); - case 0xbf9b8d72: FUNC_LOG_ERROR("TODO: cellSailPlayerCloseEsAudio"); - case 0xc044fab1: FUNC_LOG_ERROR("TODO: cellSailDescriptorOpen"); - case 0xc09e2f23: FUNC_LOG_ERROR("TODO: cellSailAviStreamGetMediaType"); - case 0xc2d90ec9: FUNC_LOG_ERROR("TODO: cellSailMp4MovieGetTrackByTypeAndIndex"); - case 0xc457b203: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyCloseCompleted"); - case 0xcc3cca60: FUNC_LOG_ERROR("TODO: cellSailAviStreamGetHeader"); - case 0xcc987ba6: FUNC_LOG_ERROR("TODO: cellSailPlayerDumpImage"); - case 0xd1462438: FUNC_LOG_ERROR("TODO: cellSailSoundAdapterFinalize"); - case 0xd1d55a90: FUNC_LOG_ERROR("TODO: cellSailPlayerSetPaused"); - case 0xd4049de0: FUNC_LOG_ERROR("TODO: cellSailMp4MovieIsCompatibleBrand"); - case 0xd5f9a15b: FUNC_LOG_ERROR("TODO: cellSailDescriptorGetStreamType"); - case 0xd7938b8d: FUNC_LOG_ERROR("TODO: cellSailPlayerCreateDescriptor"); - case 0xdbe32ed4: FUNC_LOG_ERROR("TODO: cellSailPlayerIsEsVideoMuted"); - case 0xddebd2a5: FUNC_LOG_ERROR("TODO: cellSailAviMovieGetStreamByTypeAndIndex"); - case 0xdf5553ef: FUNC_LOG_ERROR("TODO: cellSailDescriptorClearEs"); - case 0xdff1cda2: FUNC_LOG_ERROR("TODO: cellSailRendererVideoNotifyOutputEos"); - case 0xe535b0d3: FUNC_LOG_ERROR("TODO: cellSailPlayerStart"); - case 0xeba8d4ec: FUNC_LOG_ERROR("TODO: cellSailPlayerStop"); - case 0xecf56150: FUNC_LOG_ERROR("TODO: cellSailPlayerSetRendererVideo"); - case 0xed58e3ec: FUNC_LOG_ERROR("TODO: cellSailAuReceiverFinalize"); - case 0xee724c99: FUNC_LOG_ERROR("TODO: cellSailSourceFinalize"); - case 0xee94b99b: FUNC_LOG_ERROR("TODO: cellSailDescriptorSetParameter"); - case 0xeec22809: FUNC_LOG_ERROR("TODO: cellSailSoundAdapterUpdateAvSync"); - case 0xf1446a40: FUNC_LOG_ERROR("TODO: cellSailPlayerSetEsVideoMuted"); - case 0xf25f197d: FUNC_LOG_ERROR("TODO: cellSailSoundAdapterGetFormat"); - case 0xf289f0cd: FUNC_LOG_ERROR("TODO: cellSailSourceNotifySessionError"); - case 0xf4009a94: FUNC_LOG_ERROR("TODO: cellSailSourceNotifyMediaStateChanged"); - case 0xf5747e1f: FUNC_LOG_ERROR("TODO: cellSailPlayerSetAuReceiver"); - case 0xf60a8a69: FUNC_LOG_ERROR("TODO: cellSailPlayerReopenEsVideo"); - case 0xf841a537: FUNC_LOG_ERROR("TODO: cellSailRendererAudioNotifyFrameDone"); - case 0xfc5baf8a: FUNC_LOG_ERROR("TODO: cellSailPlayerSetRepeatMode"); - case 0xfc839bd4: FUNC_LOG_ERROR("TODO: cellSailPlayerDestroyDescriptor"); - case 0xffd58aa4: FUNC_LOG_ERROR("TODO: cellSailGraphicsAdapterGetFormat"); - case 0x0a3ea2a9: FUNC_LOG_ERROR("TODO: cellSailRecorderSetParameter"); - case 0x10c81457: FUNC_LOG_ERROR("TODO: cellSailRecorderOpenStream"); - case 0x1422a425: FUNC_LOG_ERROR("TODO: cellSailProfileSetEsVideoParameter"); - case 0x18ecc741: FUNC_LOG_ERROR("TODO: cellSailRecorderStop"); - case 0x376c3926: FUNC_LOG_ERROR("TODO: cellSailRecorderDestroyProfile"); - case 0x37aad85f: FUNC_LOG_ERROR("TODO: cellSailRecorderDumpImage"); - case 0x3c775cea: FUNC_LOG_ERROR("TODO: cellSailFeederAudioNotifyFrameOut"); - case 0x3deae857: FUNC_LOG_ERROR("TODO: cellSailRecorderSetFeederAudio"); - case 0x455c4709: FUNC_LOG_ERROR("TODO: cellSailRecorderDestroyVideoConverter"); - case 0x4830faf8: FUNC_LOG_ERROR("TODO: cellSailRecorderStart"); - case 0x49476a3d: FUNC_LOG_ERROR("TODO: cellSailRecorderCreateVideoConverter"); - case 0x4fec43a9: FUNC_LOG_ERROR("TODO: cellSailRecorderSetFeederVideo"); - case 0x50affdc1: FUNC_LOG_ERROR("TODO: cellSailRecorderCreateProfile"); - case 0x57415dd3: FUNC_LOG_ERROR("TODO: cellSailFeederVideoInitialize"); - case 0x7a52bf69: FUNC_LOG_ERROR("TODO: cellSailRecorderInitialize"); - case 0x81bfeae8: FUNC_LOG_ERROR("TODO: cellSailFeederVideoFinalize"); - case 0x855da8c6: FUNC_LOG_ERROR("TODO: cellSailVideoConverterProcess"); - case 0x86cae679: FUNC_LOG_ERROR("TODO: cellSailFeederVideoNotifySessionError"); - case 0x899d1587: FUNC_LOG_ERROR("TODO: cellSailFeederAudioFinalize"); - case 0x999c0dc5: FUNC_LOG_ERROR("TODO: cellSailFeederAudioNotifySessionEnd"); - case 0xaf310ae6: FUNC_LOG_ERROR("TODO: cellSailFeederAudioNotifySessionError"); - case 0xb3d30b0d: FUNC_LOG_ERROR("TODO: cellSailVideoConverterCanProcess"); - case 0xbd591197: FUNC_LOG_ERROR("TODO: cellSailFeederAudioInitialize"); - case 0xbff6e8d3: FUNC_LOG_ERROR("TODO: cellSailFeederVideoNotifySessionEnd"); - case 0xc2e2f30d: FUNC_LOG_ERROR("TODO: cellSailFeederAudioNotifyCallCompleted"); - case 0xc4617ddc: FUNC_LOG_ERROR("TODO: cellSailRecorderBoot"); - case 0xd37fb694: FUNC_LOG_ERROR("TODO: cellSailRecorderCancel"); - case 0xd84daeb9: FUNC_LOG_ERROR("TODO: cellSailFeederVideoNotifyCallCompleted"); - case 0xe14cae97: FUNC_LOG_ERROR("TODO: cellSailProfileSetEsAudioParameter"); - case 0xe15679fe: FUNC_LOG_ERROR("TODO: cellSailVideoConverterGetResult"); - case 0xe16de678: FUNC_LOG_ERROR("TODO: cellSailVideoConverterCanGetResult"); - case 0xe3f56f62: FUNC_LOG_ERROR("TODO: cellSailRecorderCloseStream"); - case 0xe5e0572a: FUNC_LOG_ERROR("TODO: cellSailFeederVideoNotifyFrameOut"); - case 0xe8d86c43: FUNC_LOG_ERROR("TODO: cellSailProfileSetStreamParameter"); - case 0xf57d74e3: FUNC_LOG_ERROR("TODO: cellSailRecorderFinalize"); - case 0xff20157b: FUNC_LOG_ERROR("TODO: cellSailRecorderGetParameter"); - case 0x04c06fc2: FUNC_LOG_ERROR("TODO: cellSaveDataGetListItem"); - case 0x273d116a: FUNC_LOG_ERROR("TODO: cellSaveDataUserListExport"); - case 0x27cb8bc2: FUNC_LOG_ERROR("TODO: cellSaveDataListDelete"); - case 0x39d6ee43: FUNC_LOG_ERROR("TODO: cellSaveDataUserListImport"); - case 0x46a2d878: FUNC_LOG_ERROR("TODO: cellSaveDataFixedExport"); - case 0x491cc554: FUNC_LOG_ERROR("TODO: cellSaveDataListExport"); - case 0x52541151: FUNC_LOG_ERROR("TODO: cellSaveDataFixedImport"); - case 0x529231b0: FUNC_LOG_ERROR("TODO: cellSaveDataUserFixedImport"); - case 0x6b4e0de6: FUNC_LOG_ERROR("TODO: cellSaveDataListImport"); - case 0x7048a9ba: FUNC_LOG_ERROR("TODO: cellSaveDataUserListDelete"); - case 0x95ae2cde: FUNC_LOG_ERROR("TODO: cellSaveDataUserFixedExport"); - case 0xf6482036: FUNC_LOG_ERROR("TODO: cellSaveDataUserGetListItem"); - case 0x7a9c2243: FUNC_LOG_ERROR("TODO: cellScreenShotSetOverlayImage"); - case 0x9e33ab8f: FUNC_LOG_ERROR("TODO: cellScreenShotEnable"); - case 0xd3ad63e4: FUNC_LOG_ERROR("TODO: cellScreenShotSetParameter"); - case 0xfc6f4e74: FUNC_LOG_ERROR("TODO: cellScreenShotDisable"); - case 0x025ce169: FUNC_LOG_ERROR("TODO: cellSearchGetMusicSelectionContext"); - case 0x0591826f: FUNC_LOG_ERROR("TODO: cellSearchStartContentSearch"); - case 0x0a4c8295: FUNC_LOG_ERROR("TODO: cellSearchStartListSearch"); - case 0x13524faa: FUNC_LOG_ERROR("TODO: cellSearchStartSceneSearch"); - case 0x35cda406: FUNC_LOG_ERROR("TODO: cellSearchGetContentInfoDeveloperData"); - case 0x37b5ba0c: FUNC_LOG_ERROR("TODO: cellSearchGetContentInfoPathMovieThumb"); - case 0x3b210319: FUNC_LOG_ERROR("TODO: cellSearchGetContentInfoByOffset"); - case 0x540d9068: FUNC_LOG_ERROR("TODO: cellSearchGetOffsetByContentId"); - case 0x64fb0b76: FUNC_LOG_ERROR("TODO: cellSearchStartContentSearchInList"); - case 0x774033d6: FUNC_LOG_ERROR("TODO: cellSearchEnd"); - case 0x8fe376a6: FUNC_LOG_ERROR("TODO: cellSearchCancel"); - case 0x94e21701: FUNC_LOG_ERROR("TODO: cellSearchGetContentIdByOffset"); - case 0x9663a44b: FUNC_LOG_ERROR("TODO: cellSearchGetContentInfoByContentId"); - case 0xbfab7616: FUNC_LOG_ERROR("TODO: cellSearchFinalize"); - case 0xc0ed0522: FUNC_LOG_ERROR("TODO: cellSearchStartSceneSearchInVideo"); - case 0xc81ccf8a: FUNC_LOG_ERROR("TODO: cellSearchInitialize"); - case 0xd7a7a433: FUNC_LOG_ERROR("TODO: cellSearchGetContentInfoGameComment"); - case 0xe73cb0d2: FUNC_LOG_ERROR("TODO: cellSearchPrepareFile"); - case 0xed20e079: FUNC_LOG_ERROR("TODO: cellSearchGetMusicSelectionContextOfSingleTrack"); - case 0xffb28491: FUNC_LOG_ERROR("TODO: cellSearchGetContentInfoPath"); - case 0x2452679f: FUNC_LOG_ERROR("TODO: cellKeySheapMutexDelete"); - case 0x3478e1e6: FUNC_LOG_ERROR("TODO: cellKeySheapMutexNew"); - case 0x37968718: FUNC_LOG_ERROR("TODO: cellSheapQueryMax"); - case 0x4a5b9659: FUNC_LOG_ERROR("TODO: cellKeySheapBufferNew"); - case 0x4b1383fb: FUNC_LOG_ERROR("TODO: cellSheapAllocate"); - case 0x5c5994bd: FUNC_LOG_ERROR("TODO: cellSheapFree"); - case 0x69a5861d: FUNC_LOG_ERROR("TODO: cellKeySheapSemaphoreNew"); - case 0x73a45cf8: FUNC_LOG_ERROR("TODO: cellKeySheapSemaphoreDelete"); - case 0x79a6abd0: FUNC_LOG_ERROR("TODO: cellKeySheapQueueDelete"); - case 0x7fa23275: FUNC_LOG_ERROR("TODO: cellSheapQueryFree"); - case 0x987e260e: FUNC_LOG_ERROR("TODO: cellKeySheapQueueNew"); - case 0xa1b25841: FUNC_LOG_ERROR("TODO: cellKeySheapInitialize"); - case 0xbbb47cd8: FUNC_LOG_ERROR("TODO: cellSheapInitialize"); - case 0xe6b37362: FUNC_LOG_ERROR("TODO: cellKeySheapBufferDelete"); - case 0xe897c835: FUNC_LOG_ERROR("TODO: cellKeySheapBarrierNew"); - case 0xed136702: FUNC_LOG_ERROR("TODO: cellKeySheapRwmDelete"); - case 0xf01ac471: FUNC_LOG_ERROR("TODO: cellKeySheapRwmNew"); - case 0xf6f5fbca: FUNC_LOG_ERROR("TODO: cellKeySheapBarrierDelete"); - case 0x3fbcf1d6: FUNC_LOG_ERROR("TODO: cellSpudllHandleConfigSetDefaultValues"); - case 0xcccd3257: FUNC_LOG_ERROR("TODO: cellSpudllGetImageSize"); - case 0x00af2519: FUNC_LOG_ERROR("TODO: cellSpursJobGuardReset"); - case 0x011ee38b: FUNC_LOG_ERROR("TODO: _cellSpursLFQueueInitialize"); - case 0x039d70b7: FUNC_LOG_ERROR("TODO: cellSpursQueueDetachLv2EventQueue"); - case 0x07529113: FUNC_LOG_ERROR("TODO: cellSpursAttributeSetNamePrefix"); - case 0x082bfb09: FUNC_LOG_ERROR("TODO: _cellSpursQueueInitialize"); - case 0x0eb4bc38: FUNC_LOG_ERROR("TODO: cellSpursWorkloadAttributeSetShutdownCompletionEventHook"); - case 0x1051d134: FUNC_LOG_ERROR("TODO: cellSpursAttributeEnableSpuPrintfIfAvailable"); - case 0x13ae18f3: FUNC_LOG_ERROR("TODO: cellSpursTaskExitCodeGet"); - case 0x161da6a7: FUNC_LOG_ERROR("TODO: cellSpursJobChainGetError"); - case 0x16394a4e: FUNC_LOG_ERROR("TODO: _cellSpursTasksetAttributeInitialize"); - case 0x1656d49f: FUNC_LOG_ERROR("TODO: cellSpursLFQueueAttachLv2EventQueue"); - case 0x17001000: FUNC_LOG_ERROR("TODO: cellSpursAddUrgentCommand"); - case 0x182d9890: FUNC_LOG_ERROR("TODO: cellSpursRequestIdleSpu"); - case 0x1d2bca4b: FUNC_LOG_ERROR("TODO: cellSpursSendWorkloadSignal"); - case 0x1d344406: FUNC_LOG_ERROR("TODO: cellSpursTaskGetLoadableSegmentPattern"); - case 0x1d46fedf: FUNC_LOG_ERROR("TODO: cellSpursCreateTaskWithAttribute"); - case 0x1ebcf459: FUNC_LOG_ERROR("TODO: cellSpursDestroyTaskset2"); - case 0x1f402f8f: FUNC_LOG_ERROR("TODO: cellSpursGetInfo"); - case 0x2093252b: FUNC_LOG_ERROR("TODO: cellSpursQueueGetTasksetAddress"); - case 0x22aab31d: FUNC_LOG_ERROR("TODO: cellSpursEventFlagDetachLv2EventQueue"); - case 0x247414d0: FUNC_LOG_ERROR("TODO: cellSpursQueueClear"); - case 0x2cfccb99: FUNC_LOG_ERROR("TODO: cellSpursJobChainAttributeSetJobTypeMemoryCheck"); - case 0x2ddbcc0a: FUNC_LOG_ERROR("TODO: _cellSpursWorkloadFlagReceiver2"); - case 0x2edcff92: FUNC_LOG_ERROR("TODO: cellSpursTasksetSetExceptionEventHandler"); - case 0x303c19cd: FUNC_LOG_ERROR("TODO: cellSpursCreateJobChainWithAttribute"); - case 0x30aa96c4: FUNC_LOG_ERROR("TODO: cellSpursInitializeWithAttribute2"); - case 0x32b94add: FUNC_LOG_ERROR("TODO: cellSpursEnableExceptionEventHandler"); - case 0x34552fa6: FUNC_LOG_ERROR("TODO: cellSpursTaskExitCodeInitialize"); - case 0x3548f483: FUNC_LOG_ERROR("TODO: _cellSpursJobChainAttributeInitialize"); - case 0x35dae22b: FUNC_LOG_ERROR("TODO: _cellSpursLFQueuePopBody"); - case 0x35f02287: FUNC_LOG_ERROR("TODO: cellSpursQueueDepth"); - case 0x369fe03d: FUNC_LOG_ERROR("TODO: cellSpursQueueGetEntrySize"); - case 0x373523d4: FUNC_LOG_ERROR("TODO: cellSpursEventFlagWait"); - case 0x39c173fb: FUNC_LOG_ERROR("TODO: cellSpursGetSpuThreadGroupId"); - case 0x494613c7: FUNC_LOG_ERROR("TODO: cellSpursJobChainGetSpursAddress"); - case 0x49a3426d: FUNC_LOG_ERROR("TODO: cellSpursReadyCountSwap"); - case 0x4a5eab63: FUNC_LOG_ERROR("TODO: cellSpursWorkloadAttributeSetName"); - case 0x4a6465e3: FUNC_LOG_ERROR("TODO: cellSpursCreateTaskset2"); - case 0x4ac7bae4: FUNC_LOG_ERROR("TODO: cellSpursEventFlagClear"); - case 0x4c75deb8: FUNC_LOG_ERROR("TODO: cellSpursUnsetExceptionEventHandler"); - case 0x4cce88a9: FUNC_LOG_ERROR("TODO: cellSpursLookUpTasksetAddress"); - case 0x4ceb9694: FUNC_LOG_ERROR("TODO: cellSpursGetJobChainInfo"); - case 0x4d1e9373: FUNC_LOG_ERROR("TODO: cellSpursEventFlagGetClearMode"); - case 0x4de203e2: FUNC_LOG_ERROR("TODO: cellSpursSetPreemptionVictimHints"); - case 0x4e153e3e: FUNC_LOG_ERROR("TODO: cellSpursGetWorkloadInfo"); - case 0x4e66d483: FUNC_LOG_ERROR("TODO: cellSpursDetachLv2EventQueue"); - case 0x5202e53b: FUNC_LOG_ERROR("TODO: cellSpursJobChainSetExceptionEventHandler"); - case 0x52cc6c82: FUNC_LOG_ERROR("TODO: cellSpursCreateTaskset"); - case 0x54876603: FUNC_LOG_ERROR("TODO: cellSpursQueueSize"); - case 0x568b2352: FUNC_LOG_ERROR("TODO: cellSpursSemaphoreGetTasksetAddress"); - case 0x569674e3: FUNC_LOG_ERROR("TODO: cellSpursTraceInitialize"); - case 0x57e4dec3: FUNC_LOG_ERROR("TODO: cellSpursRemoveWorkload"); - case 0x58d58fcf: FUNC_LOG_ERROR("TODO: cellSpursTasksetGetSpursAddress"); - case 0x5ef96465: FUNC_LOG_ERROR("TODO: _cellSpursEventFlagInitialize"); - case 0x5fd43fe4: FUNC_LOG_ERROR("TODO: cellSpursWaitForWorkloadShutdown"); - case 0x60eb2dec: FUNC_LOG_ERROR("TODO: cellSpursCreateJobChain"); - case 0x652b70e2: FUNC_LOG_ERROR("TODO: cellSpursTasksetAttributeSetName"); - case 0x68aaeba9: FUNC_LOG_ERROR("TODO: cellSpursJobGuardInitialize"); - case 0x69726aa2: FUNC_LOG_ERROR("TODO: cellSpursAddWorkload"); - case 0x6aa76999: FUNC_LOG_ERROR("TODO: cellSpursJobChainUnsetExceptionEventHandler"); - case 0x6c960f6d: FUNC_LOG_ERROR("TODO: cellSpursGetSpuThreadId"); - case 0x6d2d9339: FUNC_LOG_ERROR("TODO: cellSpursEventFlagTryWait"); - case 0x6fcdf6e3: FUNC_LOG_ERROR("TODO: cellSpursGetSpuGuid"); - case 0x738e40e6: FUNC_LOG_ERROR("TODO: cellSpursShutdownJobChain"); - case 0x73e06f91: FUNC_LOG_ERROR("TODO: cellSpursLFQueueDetachLv2EventQueue"); - case 0x7517724a: FUNC_LOG_ERROR("TODO: cellSpursSetGlobalExceptionEventHandler"); - case 0x75211196: FUNC_LOG_ERROR("TODO: cellSpursReadyCountAdd"); - case 0x77cdac0c: FUNC_LOG_ERROR("TODO: _cellSpursSemaphoreInitialize"); - case 0x7b9cbb74: FUNC_LOG_ERROR("TODO: cellSpursTraceFinalize"); - case 0x7cb33c2e: FUNC_LOG_ERROR("TODO: cellSpursTaskGetReadOnlyAreaPattern"); - case 0x7e4ea023: FUNC_LOG_ERROR("TODO: cellSpursWakeUp"); - case 0x7fdf4fef: FUNC_LOG_ERROR("TODO: cellSpursBarrierInitialize"); - case 0x80a29e27: FUNC_LOG_ERROR("TODO: cellSpursSetPriorities"); - case 0x82275c1c: FUNC_LOG_ERROR("TODO: cellSpursAttributeSetMemoryContainerForSpuThread"); - case 0x838fa4f0: FUNC_LOG_ERROR("TODO: cellSpursTryJoinTask2"); - case 0x84d2f6d5: FUNC_LOG_ERROR("TODO: cellSpursSetMaxContention"); - case 0x861237f8: FUNC_LOG_ERROR("TODO: cellSpursUnsetGlobalExceptionEventHandler"); - case 0x86c864a2: FUNC_LOG_ERROR("TODO: cellSpursGetJobChainId"); - case 0x87630976: FUNC_LOG_ERROR("TODO: cellSpursEventFlagAttachLv2EventQueue"); - case 0x890f9e5a: FUNC_LOG_ERROR("TODO: cellSpursEventFlagGetDirection"); - case 0x8a85674d: FUNC_LOG_ERROR("TODO: _cellSpursLFQueuePushBody"); - case 0x8adadf65: FUNC_LOG_ERROR("TODO: _cellSpursTaskAttribute2Initialize"); - case 0x8f122ef8: FUNC_LOG_ERROR("TODO: cellSpursTasksetAttributeSetTasksetSize"); - case 0x8fdf50b2: FUNC_LOG_ERROR("TODO: cellSpursAddUrgentCall"); - case 0x9034e538: FUNC_LOG_ERROR("TODO: cellSpursTaskGetContextSaveAreaSize"); - case 0x91066667: FUNC_LOG_ERROR("TODO: cellSpursQueuePopBody"); - case 0x9197915f: FUNC_LOG_ERROR("TODO: cellSpursTaskGenerateLsPattern"); - case 0x92cff6ed: FUNC_LOG_ERROR("TODO: cellSpursQueuePushBody"); - case 0x94034c95: FUNC_LOG_ERROR("TODO: cellSpursTasksetUnsetExceptionEventHandler"); - case 0x947efb0b: FUNC_LOG_ERROR("TODO: cellSpursEventFlagGetTasksetAddress"); - case 0x95180230: FUNC_LOG_ERROR("TODO: _cellSpursAttributeInitialize"); - case 0x97a2f6c8: FUNC_LOG_ERROR("TODO: cellSpursJobHeaderSetJobbin2Param"); - case 0x98d5b343: FUNC_LOG_ERROR("TODO: cellSpursShutdownWorkload"); - case 0x9aeb5432: FUNC_LOG_ERROR("TODO: cellSpursBarrierGetTasksetAddress"); - case 0x9dcbcb5d: FUNC_LOG_ERROR("TODO: cellSpursAttributeEnableSystemWorkload"); - case 0x9f72add3: FUNC_LOG_ERROR("TODO: cellSpursJoinTaskset"); - case 0x9fcb567b: FUNC_LOG_ERROR("TODO: cellSpursGetTasksetInfo"); - case 0x9fef70c2: FUNC_LOG_ERROR("TODO: cellSpursJobChainAttributeSetName"); - case 0xa121a224: FUNC_LOG_ERROR("TODO: cellSpursTaskAttributeSetExitCodeContainer"); - case 0xa73bf47e: FUNC_LOG_ERROR("TODO: _cellSpursWorkloadFlagReceiver"); - case 0xa789e631: FUNC_LOG_ERROR("TODO: cellSpursShutdownTaskset"); - case 0xa7a94892: FUNC_LOG_ERROR("TODO: cellSpursJoinTask2"); - case 0xa7c066de: FUNC_LOG_ERROR("TODO: cellSpursJoinJobChain"); - case 0xa7f9e716: FUNC_LOG_ERROR("TODO: cellSpursGetWorkloadData"); - case 0xa839a4d9: FUNC_LOG_ERROR("TODO: cellSpursAttributeSetSpuThreadGroupType"); - case 0xaa6269a8: FUNC_LOG_ERROR("TODO: cellSpursInitializeWithAttribute"); - case 0xacfc8dbc: FUNC_LOG_ERROR("TODO: cellSpursInitialize"); - case 0xb792ca1a: FUNC_LOG_ERROR("TODO: cellSpursLFQueueGetTasksetAddress"); - case 0xb8474eff: FUNC_LOG_ERROR("TODO: _cellSpursTaskAttributeInitialize"); - case 0xb9bc6207: FUNC_LOG_ERROR("TODO: cellSpursAttachLv2EventQueue"); - case 0xbb68d76e: FUNC_LOG_ERROR("TODO: cellSpursJobChainAttributeSetHaltOnError"); - case 0xbeb600ac: FUNC_LOG_ERROR("TODO: cellSpursCreateTask"); - case 0xbfea60fa: FUNC_LOG_ERROR("TODO: cellSpursKickJobChain"); - case 0xc0158d8b: FUNC_LOG_ERROR("TODO: cellSpursAddWorkloadWithAttribute"); - case 0xc10931cb: FUNC_LOG_ERROR("TODO: cellSpursCreateTasksetWithAttribute"); - case 0xc2acdf43: FUNC_LOG_ERROR("TODO: _cellSpursTasksetAttribute2Initialize"); - case 0xc56defb5: FUNC_LOG_ERROR("TODO: cellSpursGetNumSpuThread"); - case 0xc765b995: FUNC_LOG_ERROR("TODO: cellSpursGetWorkloadFlag"); - case 0xca4c4600: FUNC_LOG_ERROR("TODO: cellSpursFinalize"); - case 0xce853fbf: FUNC_LOG_ERROR("TODO: cellSpursTraceStart"); - case 0xd2e23fa9: FUNC_LOG_ERROR("TODO: cellSpursSetExceptionEventHandler"); - case 0xd5d0b256: FUNC_LOG_ERROR("TODO: cellSpursJobGuardNotify"); - case 0xd86380d8: FUNC_LOG_ERROR("TODO: cellSpursGetJobPipelineInfo"); - case 0xdca13593: FUNC_LOG_ERROR("TODO: cellSpursTasksetAttributeEnableClearLS"); - case 0xddc81b5a: FUNC_LOG_ERROR("TODO: cellSpursTraceStop"); - case 0xe0a6dbe4: FUNC_LOG_ERROR("TODO: _cellSpursSendSignal"); - case 0xe14ca62d: FUNC_LOG_ERROR("TODO: cellSpursCreateTask2"); - case 0xe4944a1c: FUNC_LOG_ERROR("TODO: cellSpursCreateTask2WithBinInfo"); - case 0xe5443be7: FUNC_LOG_ERROR("TODO: cellSpursQueueAttachLv2EventQueue"); - case 0xe717ac73: FUNC_LOG_ERROR("TODO: cellSpursTaskExitCodeTryGet"); - case 0xe7b0e69a: FUNC_LOG_ERROR("TODO: cellSpursJobSetMaxGrab"); - case 0xe7dd87e1: FUNC_LOG_ERROR("TODO: cellSpursGetTasksetId"); - case 0xec68442c: FUNC_LOG_ERROR("TODO: cellSpursQueueGetDirection"); - case 0xefeb2679: FUNC_LOG_ERROR("TODO: _cellSpursWorkloadAttributeInitialize"); - case 0xf1d3552d: FUNC_LOG_ERROR("TODO: cellSpursReadyCountCompareAndSwap"); - case 0xf31731bb: FUNC_LOG_ERROR("TODO: cellSpursRunJobChain"); - case 0xf5507729: FUNC_LOG_ERROR("TODO: cellSpursEventFlagSet"); - case 0xf843818d: FUNC_LOG_ERROR("TODO: cellSpursReadyCountStore"); - case 0x01bbf2e0: FUNC_LOG_ERROR("TODO: cellSpursJobQueueGetSpurs"); - case 0x0582338a: FUNC_LOG_ERROR("TODO: cellSpursJobQueueAttributeSetDoBusyWaiting"); - case 0x0d69929e: FUNC_LOG_ERROR("TODO: _cellSpursJobQueueAllocateJobDescriptorBody"); - case 0x0f03f712: FUNC_LOG_ERROR("TODO: cellSpursJobQueueAttributeSetSubmitWithEntryLock"); - case 0x13671514: FUNC_LOG_ERROR("TODO: cellSpursJobQueueSetWaitingMode"); - case 0x15934401: FUNC_LOG_ERROR("TODO: cellSpursJobQueueGetSuspendedJobSize"); - case 0x1686957e: FUNC_LOG_ERROR("TODO: cellSpursJobQueueAttributeSetMaxSizeJobDescriptor"); - case 0x1917359d: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortCopyPushJobBody"); - case 0x1b6eea7e: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortPushJobListBody"); - case 0x1da890c7: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePushAndReleaseJobBody"); - case 0x26fa81b4: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePortFinalize"); - case 0x29c2acc5: FUNC_LOG_ERROR("TODO: cellSpursJobQueueClose"); - case 0x2e775550: FUNC_LOG_ERROR("TODO: cellSpursJobQueueGetError"); - case 0x36d0a53c: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePushJob2Body"); - case 0x3d1294fc: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePortInitialize"); - case 0x435bff07: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePort2GetJobQueue"); - case 0x43ddab4f: FUNC_LOG_ERROR("TODO: cellSpursJobQueueAttributeInitialize"); - case 0x46c3fb5a: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortCopyPushBody"); - case 0x4e1a17a6: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortPushBody"); - case 0x5659da82: FUNC_LOG_ERROR("TODO: cellSpursJobQueueGetMaxSizeJobDescriptor"); - case 0x5fb9b05d: FUNC_LOG_ERROR("TODO: cellSpursJobQueueAttributeSetMaxGrab"); - case 0x634b1502: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePortSync"); - case 0x677027af: FUNC_LOG_ERROR("TODO: cellSpursJobQueueSemaphoreInitialize"); - case 0x6c93ea18: FUNC_LOG_ERROR("TODO: cellSpursJobQueueSemaphoreAcquire"); - case 0x701fd8a9: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePushSync"); - case 0x742cec0d: FUNC_LOG_ERROR("TODO: cellSpursJobQueueAttributeSetIsJobTypeMemoryCheck"); - case 0x80a0264c: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePortTrySync"); - case 0x840c5239: FUNC_LOG_ERROR("TODO: cellSpursJobQueueGetHandleCount"); - case 0x85cd04cd: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortPushJobBody"); - case 0x8c97a96c: FUNC_LOG_ERROR("TODO: cellSpursShutdownJobQueue"); - case 0x8ce4cffa: FUNC_LOG_ERROR("TODO: cellSpursJoinJobQueue"); - case 0x90c88f84: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePortGetJobQueue"); - case 0x90e392cf: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortPushJobBody2"); - case 0x915455b3: FUNC_LOG_ERROR("TODO: cellSpursJobQueueSendSignal"); - case 0x93248b92: FUNC_LOG_ERROR("TODO: cellSpursJobQueueUnsetExceptionEventHandler"); - case 0x934abb00: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePort2AllocateJobDescriptor"); - case 0x9396be1d: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortPushSync"); - case 0x97409f67: FUNC_LOG_ERROR("TODO: cellSpursJobQueueSemaphoreTryAcquire"); - case 0x98203e3c: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePushJobBody2"); - case 0x983be7fc: FUNC_LOG_ERROR("TODO: _cellSpursCreateJobQueueWithJobDescriptorPool"); - case 0x99316997: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePushBody"); - case 0x9c300489: FUNC_LOG_ERROR("TODO: cellSpursJobQueueSetExceptionEventHandler"); - case 0xaf1c7a1d: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePushJobListBody"); - case 0xb53436e7: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePort2PushJobListBody"); - case 0xbd1c5d6b: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortPushFlush"); - case 0xbfea28ab: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePort2PushFlush"); - case 0xc343ee10: FUNC_LOG_ERROR("TODO: cellSpursGetJobQueueId"); - case 0xc39173a4: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePort2CopyPushJobBody"); - case 0xc4843b74: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePushJobBody"); - case 0xc485d207: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePort2Destroy"); - case 0xcf89f218: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePort2PushJobBody"); - case 0xdf0120c2: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePushFlush"); - case 0xe1731df3: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePort2PushAndReleaseJobBody"); - case 0xe70f874e: FUNC_LOG_ERROR("TODO: cellSpursJobQueueAttributeSetGrabParameters"); - case 0xef66c4b7: FUNC_LOG_ERROR("TODO: _cellSpursJobQueuePortCopyPushJobBody2"); - case 0xf11fe0f1: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePort2Create"); - case 0xf244e799: FUNC_LOG_ERROR("TODO: _cellSpursCreateJobQueue"); - case 0xf5de6363: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePortInitializeWithDescriptorBuffer"); - case 0xfacb3ced: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePort2Sync"); - case 0xfc526b72: FUNC_LOG_ERROR("TODO: cellSpursJobQueuePort2PushSync"); - case 0xff03cc79: FUNC_LOG_ERROR("TODO: cellSpursJobQueueAttributeSetIsHaltOnError"); - case 0xff7a7bd2: FUNC_LOG_ERROR("TODO: cellSpursJobQueueOpen"); - case 0x006c4900: FUNC_LOG_ERROR("TODO: cellSslCertGetNameEntryInfo"); - case 0x033c4905: FUNC_LOG_ERROR("TODO: cellSslCertGetRsaPublicKeyExponent"); - case 0x1650aea4: FUNC_LOG_ERROR("TODO: cellSslEnd"); - case 0x218b64da: FUNC_LOG_ERROR("TODO: cellSslCertGetNotAfter"); - case 0x31d9ba8d: FUNC_LOG_ERROR("TODO: cellSslCertGetNotBefore"); - case 0x32c61bdf: FUNC_LOG_ERROR("TODO: cellSslCertGetSubjectName"); - case 0x571afaca: FUNC_LOG_ERROR("TODO: cellSslCertificateLoader"); - case 0x5e9253ca: FUNC_LOG_ERROR("TODO: cellSslCertGetMd5Fingerprint"); - case 0x766d3ca1: FUNC_LOG_ERROR("TODO: cellSslCertGetNameEntryCount"); - case 0x7b689ebc: FUNC_LOG_ERROR("TODO: cellSslCertGetSerialNumber"); - case 0x8e505175: FUNC_LOG_ERROR("TODO: cellSslCertGetRsaPublicKeyModulus"); - case 0xae6eb491: FUNC_LOG_ERROR("TODO: cellSslCertGetIssuerName"); - case 0xf8206492: FUNC_LOG_ERROR("TODO: cellSslCertGetPublicKey"); - case 0xfb02c9d2: FUNC_LOG_ERROR("TODO: cellSslInit"); - case 0x5468d6b0: FUNC_LOG_ERROR("TODO: cellSubDisplayAudioOutNonBlocking"); - case 0x551d80a5: FUNC_LOG_ERROR("TODO: cellSubDisplayEnd"); - case 0x6595ce22: FUNC_LOG_ERROR("TODO: cellSubDisplayGetRequiredMemory"); - case 0x6d85ddb3: FUNC_LOG_ERROR("TODO: cellSubDisplayStop"); - case 0x8a264d71: FUNC_LOG_ERROR("TODO: cellSubDisplayGetPeerNum"); - case 0x938ac642: FUNC_LOG_ERROR("TODO: cellSubDisplayGetVideoBuffer"); - case 0xa5bccb47: FUNC_LOG_ERROR("TODO: cellSubDisplayStart"); - case 0xaee1e0c2: FUNC_LOG_ERROR("TODO: cellSubDisplayAudioOutBlocking"); - case 0xe2485f79: FUNC_LOG_ERROR("TODO: cellSubDisplayGetPeerList"); - case 0xf9a7e8a5: FUNC_LOG_ERROR("TODO: cellSubDisplayInit"); - case 0x07254fda: FUNC_LOG_ERROR("TODO: cellSyncBarrierInitialize"); - case 0x0c7cb9f7: FUNC_LOG_ERROR("TODO: cellSyncLFQueueGetEntrySize"); - case 0x167ea63e: FUNC_LOG_ERROR("TODO: cellSyncLFQueueSize"); - case 0x1bb675c2: FUNC_LOG_ERROR("TODO: cellSyncMutexLock"); - case 0x268edd6d: FUNC_LOG_ERROR("TODO: cellSyncBarrierTryNotify"); - case 0x2af0c515: FUNC_LOG_ERROR("TODO: cellSyncLFQueueClear"); - case 0x35bbdad2: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueCompletePushPointer2"); - case 0x35f21355: FUNC_LOG_ERROR("TODO: cellSyncBarrierWait"); - case 0x3929948d: FUNC_LOG_ERROR("TODO: cellSyncQueueInitialize"); - case 0x46356fe0: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueGetPopPointer2"); - case 0x48154c9b: FUNC_LOG_ERROR("TODO: cellSyncQueuePeek"); - case 0x4da349b2: FUNC_LOG_ERROR("TODO: cellSyncQueueSize"); - case 0x4da6d7e0: FUNC_LOG_ERROR("TODO: cellSyncQueuePop"); - case 0x4e88c68d: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueCompletePushPointer"); - case 0x54fc2032: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueAttachLv2EventQueue"); - case 0x5ae841e5: FUNC_LOG_ERROR("TODO: cellSyncQueuePush"); - case 0x68af923c: FUNC_LOG_ERROR("TODO: cellSyncQueueTryPeek"); - case 0x6bb4ef9d: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueGetPushPointer2"); - case 0x6c272124: FUNC_LOG_ERROR("TODO: cellSyncBarrierTryWait"); - case 0x705985cd: FUNC_LOG_ERROR("TODO: cellSyncQueueTryPush"); - case 0x74c37666: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueGetPopPointer"); - case 0x7a51deee: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueCompletePopPointer2"); - case 0x811d148e: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueDetachLv2EventQueue"); - case 0x91f2b7b0: FUNC_LOG_ERROR("TODO: cellSyncMutexUnlock"); - case 0xa5362e73: FUNC_LOG_ERROR("TODO: cellSyncQueueClear"); - case 0xa58df87f: FUNC_LOG_ERROR("TODO: cellSyncQueueTryPop"); - case 0xa6669751: FUNC_LOG_ERROR("TODO: cellSyncRwmTryRead"); - case 0xa9072dee: FUNC_LOG_ERROR("TODO: cellSyncMutexInitialize"); - case 0xaa355278: FUNC_LOG_ERROR("TODO: cellSyncLFQueueInitialize"); - case 0xaff7627a: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueGetSignalAddress"); - case 0xba5961ca: FUNC_LOG_ERROR("TODO: _cellSyncLFQueuePushBody"); - case 0xba5bee48: FUNC_LOG_ERROR("TODO: cellSyncRwmTryWrite"); - case 0xcece771f: FUNC_LOG_ERROR("TODO: cellSyncRwmRead"); - case 0xd06918c4: FUNC_LOG_ERROR("TODO: cellSyncMutexTryLock"); - case 0xd59aa307: FUNC_LOG_ERROR("TODO: cellSyncLFQueueGetDirection"); - case 0xe18c273c: FUNC_LOG_ERROR("TODO: cellSyncLFQueueDepth"); - case 0xe1bc7add: FUNC_LOG_ERROR("TODO: _cellSyncLFQueuePopBody"); - case 0xe9bf2110: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueGetPushPointer"); - case 0xed773f5f: FUNC_LOG_ERROR("TODO: cellSyncRwmWrite"); - case 0xf06a6415: FUNC_LOG_ERROR("TODO: cellSyncBarrierNotify"); - case 0xfc48b03f: FUNC_LOG_ERROR("TODO: cellSyncRwmInitialize"); - case 0xfe74e8e7: FUNC_LOG_ERROR("TODO: _cellSyncLFQueueCompletePopPointer"); - case 0x0080fe88: FUNC_LOG_ERROR("TODO: cellSync2MutexUnlock"); - case 0x0c2983ac: FUNC_LOG_ERROR("TODO: cellSync2SemaphoreRelease"); - case 0x0c9a0ea9: FUNC_LOG_ERROR("TODO: cellSync2QueueTryPop"); - case 0x12f0a27d: FUNC_LOG_ERROR("TODO: cellSync2QueueGetSize"); - case 0x164843a7: FUNC_LOG_ERROR("TODO: cellSync2SemaphoreFinalize"); - case 0x27f2d61c: FUNC_LOG_ERROR("TODO: cellSync2MutexFinalize"); - case 0x2d77fe17: FUNC_LOG_ERROR("TODO: _cellSync2SemaphoreAttributeInitialize"); - case 0x4e2ee031: FUNC_LOG_ERROR("TODO: cellSync2SemaphoreGetCount"); - case 0x55836e73: FUNC_LOG_ERROR("TODO: _cellSync2MutexAttributeInitialize"); - case 0x58be9a0f: FUNC_LOG_ERROR("TODO: cellSync2CondInitialize"); - case 0x5b1e4d7a: FUNC_LOG_ERROR("TODO: cellSync2CondEstimateBufferSize"); - case 0x5e00d433: FUNC_LOG_ERROR("TODO: _cellSync2QueueAttributeInitialize"); - case 0x5e4b0f87: FUNC_LOG_ERROR("TODO: cellSync2SemaphoreTryAcquire"); - case 0x63062249: FUNC_LOG_ERROR("TODO: cellSync2CondFinalize"); - case 0x6af85cdf: FUNC_LOG_ERROR("TODO: cellSync2QueueFinalize"); - case 0x74c2780f: FUNC_LOG_ERROR("TODO: cellSync2SemaphoreEstimateBufferSize"); - case 0x7d967d91: FUNC_LOG_ERROR("TODO: cellSync2QueuePush"); - case 0x7fd479fe: FUNC_LOG_ERROR("TODO: cellSync2QueueTryPush"); - case 0x871af804: FUNC_LOG_ERROR("TODO: cellSync2CondSignal"); - case 0x8aae07c2: FUNC_LOG_ERROR("TODO: cellSync2CondSignalAll"); - case 0xa400d82e: FUNC_LOG_ERROR("TODO: cellSync2MutexLock"); - case 0xa69c749c: FUNC_LOG_ERROR("TODO: cellSync2MutexTryLock"); - case 0xbc96d751: FUNC_LOG_ERROR("TODO: cellSync2CondWait"); - case 0xc08cc0f9: FUNC_LOG_ERROR("TODO: cellSync2QueueEstimateBufferSize"); - case 0xc5dee254: FUNC_LOG_ERROR("TODO: cellSync2SemaphoreInitialize"); - case 0xd1b0d146: FUNC_LOG_ERROR("TODO: cellSync2SemaphoreAcquire"); - case 0xd51bfae7: FUNC_LOG_ERROR("TODO: cellSync2MutexEstimateBufferSize"); - case 0xd83ab0c9: FUNC_LOG_ERROR("TODO: cellSync2QueuePop"); - case 0xdf3c532a: FUNC_LOG_ERROR("TODO: _cellSync2CondAttributeInitialize"); - case 0xeb81a467: FUNC_LOG_ERROR("TODO: cellSync2MutexInitialize"); - case 0xf0e1471c: FUNC_LOG_ERROR("TODO: cellSync2QueueGetDepth"); - case 0xf125e044: FUNC_LOG_ERROR("TODO: cellSync2QueueInitialize"); - case 0x08db2adf: FUNC_LOG_ERROR("TODO: cellSysconfBtGetDeviceList"); - case 0x112a5ee9: FUNC_LOG_ERROR("TODO: cellSysmoduleUnloadModule"); - case 0x1ef115ef: FUNC_LOG_ERROR("TODO: cellSysmoduleGetImagesize"); - case 0x32267a31: FUNC_LOG_ERROR("TODO: cellSysmoduleLoadModule"); - case 0x3c92be09: FUNC_LOG_ERROR("TODO: cellSysmoduleFetchImage"); - case 0x5a59e258: FUNC_LOG_ERROR("TODO: cellSysmoduleIsLoaded"); - case 0x63ff6ff9: FUNC_LOG_ERROR("TODO: cellSysmoduleInitialize"); - case 0x96c07adf: FUNC_LOG_ERROR("TODO: cellSysmoduleFinalize"); - case 0xa193143c: FUNC_LOG_ERROR("TODO: cellSysmoduleSetMemcontainer"); - case 0x018a1381: FUNC_LOG_ERROR("TODO: cellSysutilAvcSetLayoutMode"); - case 0x01f04d94: FUNC_LOG_ERROR("TODO: cellSysutilGamePowerOff_I"); - case 0x02ff3c1b: FUNC_LOG_ERROR("TODO: cellSysutilUnregisterCallback"); - case 0x073b89d5: FUNC_LOG_ERROR("TODO: cellSysutilAvcGetSpeakerVolumeLevel"); - case 0x08269f37: FUNC_LOG_ERROR("TODO: cellSysutilAvcGetShowStatus"); - case 0x0bae8772: FUNC_LOG_ERROR("TODO: cellVideoOutConfigure"); - case 0x0c316b87: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigGetHeapSize2"); - case 0x0e091c36: FUNC_LOG_ERROR("TODO: cellSaveDataUserListAutoSave"); - case 0x0f03cfb0: FUNC_LOG_ERROR("TODO: cellSaveDataUserListSave"); - case 0x0f8a3b6b: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetMimeSet"); - case 0x10cabeff: FUNC_LOG_ERROR("TODO: cellWebBrowserGetUsrdataOnGameExit"); - case 0x15b0b0cd: FUNC_LOG_ERROR("TODO: cellVideoOutGetConfiguration"); - case 0x15df71ed: FUNC_LOG_ERROR("TODO: cellSysutilAvcLoadAsync"); - case 0x17dbe8b3: FUNC_LOG_ERROR("TODO: cellSysutilAvcJoinRequest"); - case 0x189a74da: FUNC_LOG_ERROR("TODO: cellSysutilCheckCallback"); - case 0x1a91874b: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetFullScreen2"); - case 0x1d99c3ee: FUNC_LOG_ERROR("TODO: cellOskDialogGetInputText"); - case 0x1dfbfdd6: FUNC_LOG_ERROR("TODO: cellSaveDataListLoad2"); - case 0x1dfcce99: FUNC_LOG_ERROR("TODO: cellSysutilGameDataExit"); - case 0x1e7bff94: FUNC_LOG_ERROR("TODO: cellSysCacheMount"); - case 0x1e930eef: FUNC_LOG_ERROR("TODO: cellVideoOutGetDeviceInfo"); - case 0x1f6629e4: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetErrorHook2"); - case 0x20543730: FUNC_LOG_ERROR("TODO: cellMsgDialogClose"); - case 0x21425307: FUNC_LOG_ERROR("TODO: cellSaveDataListAutoLoad"); - case 0x21fc0c71: FUNC_LOG_ERROR("TODO: cellGameUnregisterDiscChangeCallback"); - case 0x220894e3: FUNC_LOG_ERROR("TODO: cellSysutilEnableBgmPlayback"); - case 0x24644561: FUNC_LOG_ERROR("TODO: cellWebBrowserWakeupWithGameExit"); - case 0x248bd1d8: FUNC_LOG_ERROR("TODO: cellSaveDataUserListAutoLoad"); - case 0x27ac51e4: FUNC_LOG_ERROR("TODO: cellStorageDataImportMove"); - case 0x2a8eada2: FUNC_LOG_ERROR("TODO: cellSaveDataFixedLoad2"); - case 0x2a95d8bc: FUNC_LOG_ERROR("TODO: cellSysutilGameExit_I"); - case 0x2aae9ef5: FUNC_LOG_ERROR("TODO: cellSaveDataFixedSave2"); - case 0x2beac488: FUNC_LOG_ERROR("TODO: cellAudioOutGetSoundAvailability2"); - case 0x2dbc92c7: FUNC_LOG_ERROR("TODO: cellSysutilAvcShowPanel"); - case 0x2de0d663: FUNC_LOG_ERROR("TODO: cellSaveDataListSave2"); - case 0x30d3d12b: FUNC_LOG_ERROR("TODO: cellSysutilGameReboot_I"); - case 0x3261a9c8: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetDisableTabs"); - case 0x35beade0: FUNC_LOG_ERROR("TODO: cellOskDialogGetSize"); - case 0x39dd8425: FUNC_LOG_ERROR("TODO: cellSaveDataUserListLoad"); - case 0x3d1e1931: FUNC_LOG_ERROR("TODO: cellOskDialogUnloadAsync"); - case 0x3dbd2314: FUNC_LOG_ERROR("TODO: cellSaveDataListSave"); - case 0x3e22cb4b: FUNC_LOG_ERROR("TODO: cellMsgDialogOpenErrorCode"); - case 0x4056c932: FUNC_LOG_ERROR("TODO: cellSysutilAvcSetVoiceMuting"); - case 0x40b34847: FUNC_LOG_ERROR("TODO: cellSaveDataUserFixedSave"); - case 0x40e895d3: FUNC_LOG_ERROR("TODO: cellSysutilGetSystemParamInt"); - case 0x41bc2ca1: FUNC_LOG_ERROR("TODO: cellSaveDataFixedSave"); - case 0x41f20828: FUNC_LOG_ERROR("TODO: cellOskDialogDisableDimmer"); - case 0x4692ab35: FUNC_LOG_ERROR("TODO: cellAudioOutConfigure"); - case 0x46a0285d: FUNC_LOG_ERROR("TODO: cellWebBrowserDeactivate"); - case 0x4b6e8560: FUNC_LOG_ERROR("TODO: cellWebBrowserCreateRenderWithRect2"); - case 0x4bdec82a: FUNC_LOG_ERROR("TODO: cellHddGameCheck2"); - case 0x4dd03a4e: FUNC_LOG_ERROR("TODO: cellSaveDataListAutoSave"); - case 0x50183b44: FUNC_LOG_ERROR("TODO: cellSaveDataFixedLoad"); - case 0x523a96c4: FUNC_LOG_ERROR("TODO: cellGameDataSetSystemVer"); - case 0x52aac4fa: FUNC_LOG_ERROR("TODO: cellSaveDataUserAutoSave"); - case 0x52d9457a: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetFullVersion2"); - case 0x53e39df3: FUNC_LOG_ERROR("TODO: cellOskDialogSetSeparateWindowOption"); - case 0x55e425c3: FUNC_LOG_ERROR("TODO: cellVideoOutGetConvertCursorColorInfo"); - case 0x58c89c4a: FUNC_LOG_ERROR("TODO: cellWebBrowserEstimate"); - case 0x5e91bc26: FUNC_LOG_ERROR("TODO: cellSysutilAvcEnumPlayers"); - case 0x5ee3bc26: FUNC_LOG_ERROR("TODO: cellSysutilAvcGetVoiceMuting"); - case 0x60a4daab: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetVersion"); - case 0x6144f033: FUNC_LOG_ERROR("TODO: cellWebComponentCreateAsync"); - case 0x619b1427: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetTabCount2"); - case 0x62b0f803: FUNC_LOG_ERROR("TODO: cellMsgDialogAbort"); - case 0x68bc4ff3: FUNC_LOG_ERROR("TODO: cellAudioOutRegisterCallback"); - case 0x6c1082aa: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigWithVer"); - case 0x6c673f78: FUNC_LOG_ERROR("TODO: cellSysutilAvcUnloadAsync"); - case 0x6cfd856f: FUNC_LOG_ERROR("TODO: cellSysutilGetBgmPlaybackStatus2"); - case 0x6d087930: FUNC_LOG_ERROR("TODO: cellWebBrowserEstimate2"); - case 0x6d7444e6: FUNC_LOG_ERROR("TODO: cellWebBrowserActivate"); - case 0x6dfff31d: FUNC_LOG_ERROR("TODO: cellWebBrowserSetSystemCallbackUsrdata"); - case 0x6e7264ed: FUNC_LOG_ERROR("TODO: cellSaveDataUserFixedLoad"); - case 0x71acb8d3: FUNC_LOG_ERROR("TODO: cellSysutilAvcSetVideoMuting"); - case 0x744c1544: FUNC_LOG_ERROR("TODO: cellSysCacheClear"); - case 0x749c9b5f: FUNC_LOG_ERROR("TODO: cellWebBrowserInitialize"); - case 0x75bbb672: FUNC_LOG_ERROR("TODO: cellVideoOutGetNumberOfDevice"); - case 0x7603d3db: FUNC_LOG_ERROR("TODO: cellMsgDialogOpen2"); - case 0x7663e368: FUNC_LOG_ERROR("TODO: cellAudioOutGetDeviceInfo"); - case 0x76948bfc: FUNC_LOG_ERROR("TODO: cellSysconfAbort"); - case 0x76fc8fb1: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetHeapSize"); - case 0x7871bed4: FUNC_LOG_ERROR("TODO: cellVideoOutUnregisterCallback"); - case 0x7bc2c8a8: FUNC_LOG_ERROR("TODO: cellMsgDialogProgressBarReset"); - case 0x7d94ca36: FUNC_LOG_ERROR("TODO: cellSysutilAvcGetVideoMuting"); - case 0x7f21c918: FUNC_LOG_ERROR("TODO: cellOskDialogAddSupportLanguage"); - case 0x7f881be1: FUNC_LOG_ERROR("TODO: cellWebBrowserCreate"); - case 0x7f896a1f: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetCustomExit"); - case 0x7fb3c6a5: FUNC_LOG_ERROR("TODO: cellWebBrowserConfig2"); - case 0x7fcfc915: FUNC_LOG_ERROR("TODO: cellOskDialogLoadAsync"); - case 0x83668b8e: FUNC_LOG_ERROR("TODO: cellWebBrowserConfig"); - case 0x887572d5: FUNC_LOG_ERROR("TODO: cellVideoOutGetState"); - case 0x8a4cb646: FUNC_LOG_ERROR("TODO: cellWebBrowserCreateWithConfig"); - case 0x8a5dbb58: FUNC_LOG_ERROR("TODO: cellWebComponentCreate"); - case 0x8b7ed64b: FUNC_LOG_ERROR("TODO: cellSaveDataAutoSave2"); - case 0x8b8a2f48: FUNC_LOG_ERROR("TODO: cellSaveDataUserFixedDelete"); - case 0x8e8bc444: FUNC_LOG_ERROR("TODO: cellVideoOutRegisterCallback"); - case 0x9117df20: FUNC_LOG_ERROR("TODO: cellHddGameCheck"); - case 0x918288fb: FUNC_LOG_ERROR("TODO: cellStorageDataImport"); - case 0x938013a0: FUNC_LOG_ERROR("TODO: cellSysutilGetSystemParamString"); - case 0x93c523c6: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetNotifyHook2"); - case 0x93ced48d: FUNC_LOG_ERROR("TODO: cellWebBrowserShutdown"); - case 0x94862702: FUNC_LOG_ERROR("TODO: cellMsgDialogProgressBarInc"); - case 0x9949bf82: FUNC_LOG_ERROR("TODO: cellGameDataExitBroken"); - case 0x9997e6b6: FUNC_LOG_ERROR("TODO: cellSysutilGameDataAssignVmc"); - case 0x9c9fe6a4: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetFunction"); - case 0x9ca9ffa7: FUNC_LOG_ERROR("TODO: cellHddGameSetSystemVer"); - case 0x9d6af72a: FUNC_LOG_ERROR("TODO: cellMsgDialogProgressBarSetMsg"); - case 0x9d98afa0: FUNC_LOG_ERROR("TODO: cellSysutilRegisterCallback"); - case 0x9dfdad46: FUNC_LOG_ERROR("TODO: cellAudioOutUnregisterCallback"); - case 0x9fb97b10: FUNC_LOG_ERROR("TODO: cellWebBrowserNavigate2"); - case 0xa11552f6: FUNC_LOG_ERROR("TODO: cellSysutilGetBgmPlaybackStatus"); - case 0xa322db75: FUNC_LOG_ERROR("TODO: cellVideoOutGetResolutionAvailability"); - case 0xa36335a5: FUNC_LOG_ERROR("TODO: cellSysutilDisableBgmPlaybackEx"); - case 0xa4dd11cc: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigGetHeapSize"); - case 0xa4ed7dfe: FUNC_LOG_ERROR("TODO: cellSaveDataDelete"); - case 0xa58943f8: FUNC_LOG_ERROR("TODO: cellWebBrowserCreateWithRect2"); - case 0xa5f12145: FUNC_LOG_ERROR("TODO: cellWebBrowserCreate2"); - case 0xa9a439e0: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetUnknownMIMETypeHook2"); - case 0xa9b0c1d9: FUNC_LOG_ERROR("TODO: cellGameDataGetSizeKB"); - case 0xa9b62ac8: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetViewRect2"); - case 0xabc3cd2c: FUNC_LOG_ERROR("TODO: cellStorageDataExport"); - case 0xac16777e: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetStatusHook2"); - case 0xac58ad2b: FUNC_LOG_ERROR("TODO: cellSysutilEnableBgmPlaybackEx"); - case 0xafd605b3: FUNC_LOG_ERROR("TODO: cellHddGameExitBroken"); - case 0xaffdadc0: FUNC_LOG_ERROR("TODO: cellSysutilAvcSetSpeakerVolumeLevel"); - case 0xb2b6cdd0: FUNC_LOG_ERROR("TODO: cellSysconfOpen"); - case 0xb53b3d42: FUNC_LOG_ERROR("TODO: cellWebBrowserCreateWithConfigFull"); - case 0xb53c54fa: FUNC_LOG_ERROR("TODO: cellOskDialogSetKeyLayoutOption"); - case 0xb6d84526: FUNC_LOG_ERROR("TODO: cellOskDialogAbort"); - case 0xb72bc4e6: FUNC_LOG_ERROR("TODO: cellDiscGameGetBootDiscInfo"); - case 0xbccd70dd: FUNC_LOG_ERROR("TODO: cellSysutilAvcCancelJoinRequest"); - case 0xbed85cb8: FUNC_LOG_ERROR("TODO: cellWebBrowserDestroy"); - case 0xc01b4e7c: FUNC_LOG_ERROR("TODO: cellAudioOutGetSoundAvailability"); - case 0xc22c79b5: FUNC_LOG_ERROR("TODO: cellSaveDataAutoLoad"); - case 0xc427890c: FUNC_LOG_ERROR("TODO: cellOskDialogSetInitialKeyLayout"); - case 0xc8971db5: FUNC_LOG_ERROR("TODO: cellWebBrowserSetLocalContentsAdditionalTitleID"); - case 0xc9645c41: FUNC_LOG_ERROR("TODO: cellGameDataCheckCreate2"); - case 0xc96e89e9: FUNC_LOG_ERROR("TODO: cellAudioOutSetCopyControl"); - case 0xcdc6aefd: FUNC_LOG_ERROR("TODO: cellSaveDataUserAutoLoad"); - case 0xced17573: FUNC_LOG_ERROR("TODO: cellSaveDataFixedDelete"); - case 0xcfdd8e87: FUNC_LOG_ERROR("TODO: cellSysutilDisableBgmPlayback"); - case 0xcfdf24bb: FUNC_LOG_ERROR("TODO: cellVideoOutDebugSetMonitorType"); - case 0xd3790a86: FUNC_LOG_ERROR("TODO: cellOskDialogSetDeviceMask"); - case 0xd7a617f5: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetViewCondition2"); - case 0xd9ea5709: FUNC_LOG_ERROR("TODO: cellSysutilAvcHidePanel"); - case 0xdce51399: FUNC_LOG_ERROR("TODO: cellWebComponentDestroy"); - case 0xdfdd302e: FUNC_LOG_ERROR("TODO: cellDiscGameRegisterDiscChangeCallback"); - case 0xe22ed55d: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetFunction2"); - case 0xe558748d: FUNC_LOG_ERROR("TODO: cellVideoOutGetResolution"); - case 0xe5e2b09d: FUNC_LOG_ERROR("TODO: cellAudioOutGetNumberOfDevice"); - case 0xe7951dee: FUNC_LOG_ERROR("TODO: cellGameDataCheckCreate"); - case 0xe7fa820b: FUNC_LOG_ERROR("TODO: cellSaveDataEnableOverlay"); - case 0xe8dee79c: FUNC_LOG_ERROR("TODO: cellWebBrowserDestroy2"); - case 0xeb9d78d8: FUNC_LOG_ERROR("TODO: cellSysutilAvcGetLayoutMode"); - case 0xeca938ca: FUNC_LOG_ERROR("TODO: cellSysutilAvcSetAttribute"); - case 0xed5d96af: FUNC_LOG_ERROR("TODO: cellAudioOutGetConfiguration"); - case 0xedadd797: FUNC_LOG_ERROR("TODO: cellSaveDataDelete2"); - case 0xedc34e1a: FUNC_LOG_ERROR("TODO: cellDiscGameUnregisterDiscChangeCallback"); - case 0xee7528f3: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetRequestHook2"); - case 0xef5a353d: FUNC_LOG_ERROR("TODO: cellSaveDataListLoad"); - case 0xf0ec3ccc: FUNC_LOG_ERROR("TODO: cellOskDialogSetLayoutMode"); - case 0xf1a443e7: FUNC_LOG_ERROR("TODO: cellWebBrowserCreateRender2"); - case 0xf2c4a425: FUNC_LOG_ERROR("TODO: cellSysutilAvcByeRequest"); - case 0xf3b4b43e: FUNC_LOG_ERROR("TODO: cellOskDialogSetInitialInputDevice"); - case 0xf3dbf5a7: FUNC_LOG_ERROR("TODO: cellSysutilSetBgmPlaybackExtraParam"); - case 0xf481967f: FUNC_LOG_ERROR("TODO: cellSysutilAvcGetAttribute"); - case 0xf4aa8b27: FUNC_LOG_ERROR("TODO: cellSysutilAvcCancelByeRequest"); - case 0xf4e3caa0: FUNC_LOG_ERROR("TODO: cellAudioOutGetState"); - case 0xf8115d69: FUNC_LOG_ERROR("TODO: cellGameRegisterDiscChangeCallback"); - case 0xf81eca25: FUNC_LOG_ERROR("TODO: cellMsgDialogOpen"); - case 0xf82e2ef7: FUNC_LOG_ERROR("TODO: cellHddGameGetSizeKB"); - case 0xf8a175ec: FUNC_LOG_ERROR("TODO: cellSaveDataAutoSave"); - case 0xfbd5c856: FUNC_LOG_ERROR("TODO: cellSaveDataAutoLoad2"); - case 0xfe669845: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetHeapSize2"); - case 0x3343824c: FUNC_LOG_ERROR("TODO: cellSysutilApOn"); - case 0x90c2bb19: FUNC_LOG_ERROR("TODO: cellSysutilApOff"); - case 0x9e67e0dd: FUNC_LOG_ERROR("TODO: cellSysutilApGetRequiredMemSize"); - case 0x02c5417a: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetPlayerInfo"); - case 0x02dc41ee: FUNC_LOG_ERROR("TODO: cellSysutilAvc2JoinChat"); - case 0x04e1e1e4: FUNC_LOG_ERROR("TODO: cellSysutilAvc2StopStreaming"); - case 0x07236c83: FUNC_LOG_ERROR("TODO: cellSysutilAvc2ChangeVideoResolution"); - case 0x0b45cd84: FUNC_LOG_ERROR("TODO: cellSysutilAvc2ShowScreen"); - case 0x0f5a2afb: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetVideoMuting"); - case 0x103d6b46: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetWindowAttribute"); - case 0x11f071cb: FUNC_LOG_ERROR("TODO: cellSysutilAvc2StopStreaming2"); - case 0x14937714: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetVoiceMuting"); - case 0x16ff9ba0: FUNC_LOG_ERROR("TODO: cellSysutilAvc2StartVoiceDetection"); - case 0x17481336: FUNC_LOG_ERROR("TODO: cellSysutilAvc2UnloadAsync"); - case 0x178982d9: FUNC_LOG_ERROR("TODO: cellSysutilAvc2StopVoiceDetection"); - case 0x1be2b4e0: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetAttribute"); - case 0x1d73ab8c: FUNC_LOG_ERROR("TODO: cellSysutilAvc2LoadAsync"); - case 0x207621a8: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetSpeakerVolumeLevel"); - case 0x225142bd: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetWindowString"); - case 0x2f280883: FUNC_LOG_ERROR("TODO: cellSysutilAvc2EstimateMemoryContainerSize"); - case 0x2fc0ab58: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetVideoMuting"); - case 0x31fc8b92: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetPlayerVoiceMuting"); - case 0x3447668a: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetStreamingTarget"); - case 0x38f33624: FUNC_LOG_ERROR("TODO: cellSysutilAvc2Unload"); - case 0x3a37e7f1: FUNC_LOG_ERROR("TODO: cellSysutilAvc2DestroyWindow"); - case 0x3c8c827c: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetWindowPosition"); - case 0x3ef4f668: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetSpeakerVolumeLevel"); - case 0x4c4b9665: FUNC_LOG_ERROR("TODO: cellSysutilAvc2IsCameraAttached"); - case 0x55d7bbfd: FUNC_LOG_ERROR("TODO: cellSysutilAvc2MicRead"); - case 0x5f3811f8: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetPlayerVoiceMuting"); - case 0x712d51d6: FUNC_LOG_ERROR("TODO: cellSysutilAvc2JoinChatRequest"); - case 0x74d22119: FUNC_LOG_ERROR("TODO: cellSysutilAvc2StartStreaming"); - case 0x7a69ecc1: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetWindowAttribute"); - case 0x82ced772: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetWindowShowStatus"); - case 0x89456724: FUNC_LOG_ERROR("TODO: cellSysutilAvc2InitParam"); - case 0x8a40a618: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetWindowSize"); - case 0x8c2f5be3: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetStreamPriority"); - case 0x97b2da6a: FUNC_LOG_ERROR("TODO: cellSysutilAvc2LeaveChatRequest"); - case 0xa26aa437: FUNC_LOG_ERROR("TODO: cellSysutilAvc2IsMicAttached"); - case 0xa8dc0efa: FUNC_LOG_ERROR("TODO: cellSysutilAvc2CreateWindow"); - case 0xa9f5b75c: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetSpeakerMuting"); - case 0xac170042: FUNC_LOG_ERROR("TODO: cellSysutilAvc2ShowWindow"); - case 0xaee75751: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetWindowSize"); - case 0xb81b9777: FUNC_LOG_ERROR("TODO: cellSysutilAvc2EnumPlayers"); - case 0xb856b63f: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetWindowString"); - case 0xbf022284: FUNC_LOG_ERROR("TODO: cellSysutilAvc2LeaveChat"); - case 0xc35ed665: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetSpeakerMuting"); - case 0xc6c93d62: FUNC_LOG_ERROR("TODO: cellSysutilAvc2Load"); - case 0xccf0aeff: FUNC_LOG_ERROR("TODO: cellSysutilAvc2SetAttribute"); - case 0xce6780c9: FUNC_LOG_ERROR("TODO: cellSysutilAvc2UnloadAsync2"); - case 0xd42657dd: FUNC_LOG_ERROR("TODO: cellSysutilAvc2StartStreaming2"); - case 0xd7d6272f: FUNC_LOG_ERROR("TODO: cellSysutilAvc2HideScreen"); - case 0xde6afc37: FUNC_LOG_ERROR("TODO: cellSysutilAvc2HideWindow"); - case 0xdf2ed367: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetVoiceMuting"); - case 0xe40e3dfc: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetScreenShowStatus"); - case 0xf3b5ff77: FUNC_LOG_ERROR("TODO: cellSysutilAvc2Unload2"); - case 0xfc2873a9: FUNC_LOG_ERROR("TODO: cellSysutilAvc2GetWindowPosition"); - case 0x1b6e8cd2: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtSetWindowRotation"); - case 0x22a36b23: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtGetWindowPosition"); - case 0x22ca0929: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtSetHideNamePlate"); - case 0x245ff230: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtSetWindowPosition"); - case 0x28f0dc04: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtGetWindowSize"); - case 0x2d9a1997: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtGetWindowShowStatus"); - case 0x326fab55: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtGetNamePlateShowStatus"); - case 0x332ee22c: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtSetWindowAlpha"); - case 0x40bc33c8: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtSetWindowSize"); - case 0x4466c0e2: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtShowPanelEx"); - case 0x51ccbe09: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtLoadAsyncEx"); - case 0x5a763d0e: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtSetShowNamePlate"); - case 0x5ba98e47: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtStopVoiceDetection"); - case 0x61b1cb18: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtShowWindow"); - case 0x683fe299: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtHidePanelEx"); - case 0x739c2f63: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtHideWindow"); - case 0x8ed310e5: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtGetWindowRotation"); - case 0xaed82c21: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtGetWindowAlpha"); - case 0xc851a4c0: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtStartVoiceDetection"); - case 0xcbe0c10a: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtGetSurfacePointer"); - case 0xd8685383: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtInitOptionParam"); - case 0xe8b1c18d: FUNC_LOG_ERROR("TODO: cellSysutilAvcExtSetWindowZorder"); - case 0x0bddef7d: FUNC_LOG_ERROR("TODO: cellAudioOutUnregisterDevice"); - case 0x18d0ada6: FUNC_LOG_ERROR("TODO: cellAudioOutGetDeviceInfo2"); - case 0x1cfa1a11: FUNC_LOG_ERROR("TODO: cellVideoOutSetXVColor"); - case 0x269ffedd: FUNC_LOG_ERROR("TODO: cellVideoOutSetupDisplay"); - case 0x3d5730ce: FUNC_LOG_ERROR("TODO: cellAudioInGetDeviceInfo"); - case 0x4ec8c141: FUNC_LOG_ERROR("TODO: cellVideoOutConvertCursorColor"); - case 0x655a0364: FUNC_LOG_ERROR("TODO: cellVideoOutGetGamma"); - case 0x65bf9ea3: FUNC_LOG_ERROR("TODO: cellAudioInGetAvailableDeviceInfo"); - case 0xc3273d9b: FUNC_LOG_ERROR("TODO: cellAudioOutGetAvailableDeviceInfo"); - case 0xc7020f62: FUNC_LOG_ERROR("TODO: cellVideoOutSetGamma"); - case 0xc7087631: FUNC_LOG_ERROR("TODO: cellAudioOutRegisterDevice"); - case 0xe4645af8: FUNC_LOG_ERROR("TODO: cellAudioOutSetDeviceMode"); - case 0xeb6c50fb: FUNC_LOG_ERROR("TODO: cellAudioInSetDeviceMode"); - case 0xeb6fcff1: FUNC_LOG_ERROR("TODO: cellAudioInRegisterDevice"); - case 0xfa6bcc17: FUNC_LOG_ERROR("TODO: cellAudioInUnregisterDevice"); - case 0xfaa275a4: FUNC_LOG_ERROR("TODO: cellVideoOutGetScreenSize"); - case 0x571dc686: FUNC_LOG_ERROR("TODO: cellSysutilGetLicenseArea"); - case 0x074dbb39: FUNC_LOG_ERROR("TODO: cellUsbdAllocateMemory"); - case 0x0f411262: FUNC_LOG_ERROR("TODO: cellUsbdInterruptTransfer"); - case 0x254289ac: FUNC_LOG_ERROR("TODO: cellUsbdOpenPipe"); - case 0x2fb08e1e: FUNC_LOG_ERROR("TODO: cellUsbdScanStaticDescriptor"); - case 0x359befba: FUNC_LOG_ERROR("TODO: cellUsbdRegisterLdd"); - case 0x35f22ac3: FUNC_LOG_ERROR("TODO: cellUsbdEnd"); - case 0x4e456e81: FUNC_LOG_ERROR("TODO: cellUsbdFreeMemory"); - case 0x5c832bd7: FUNC_LOG_ERROR("TODO: cellUsbdSetThreadPriority2"); - case 0x5de3af36: FUNC_LOG_ERROR("TODO: cellUsbdGetPrivateData"); - case 0x63bfdb97: FUNC_LOG_ERROR("TODO: cellUsbdSetPrivateData"); - case 0x64951ac7: FUNC_LOG_ERROR("TODO: cellUsbdUnregisterLdd"); - case 0x7a1b6eab: FUNC_LOG_ERROR("TODO: cellUsbdHSIsochronousTransfer"); - case 0x7fe92c54: FUNC_LOG_ERROR("TODO: cellUsbdRegisterExtraLdd"); - case 0x90460081: FUNC_LOG_ERROR("TODO: cellUsbdUnregisterExtraLdd"); - case 0x9763e962: FUNC_LOG_ERROR("TODO: cellUsbdClosePipe"); - case 0x97cf128e: FUNC_LOG_ERROR("TODO: cellUsbdControlTransfer"); - case 0xac77eb78: FUNC_LOG_ERROR("TODO: cellUsbdBulkTransfer"); - case 0xbd554bcb: FUNC_LOG_ERROR("TODO: cellUsbdRegisterExtraLdd2"); - case 0xbdbd2428: FUNC_LOG_ERROR("TODO: cellUsbdGetDeviceSpeed"); - case 0xc24af1d7: FUNC_LOG_ERROR("TODO: cellUsbdSetThreadPriority"); - case 0xd0e766fe: FUNC_LOG_ERROR("TODO: cellUsbdInit"); - case 0xd5263dea: FUNC_LOG_ERROR("TODO: cellUsbdGetThreadPriority"); - case 0xdb819e03: FUNC_LOG_ERROR("TODO: cellUsbdGetDeviceLocation"); - case 0xde58c4c2: FUNC_LOG_ERROR("TODO: cellUsbdIsochronousTransfer"); - case 0x01a4cde0: FUNC_LOG_ERROR("TODO: cellUsbPspcmPollBindAsync"); - case 0x02955295: FUNC_LOG_ERROR("TODO: cellUsbPspcmRecvAsync"); - case 0x0f7b3b6d: FUNC_LOG_ERROR("TODO: cellUsbPspcmEnd"); - case 0x17f42197: FUNC_LOG_ERROR("TODO: cellUsbPspcmBindAsync"); - case 0x3caddf6c: FUNC_LOG_ERROR("TODO: cellUsbPspcmWaitSendAsync"); - case 0x3f22403e: FUNC_LOG_ERROR("TODO: cellUsbPspcmPollResetAsync"); - case 0x461dc8cc: FUNC_LOG_ERROR("TODO: cellUsbPspcmWaitRecvAsync"); - case 0x4abe830e: FUNC_LOG_ERROR("TODO: cellUsbPspcmWaitBindAsync"); - case 0x4af23efa: FUNC_LOG_ERROR("TODO: cellUsbPspcmSendAsync"); - case 0x4ef182dd: FUNC_LOG_ERROR("TODO: cellUsbPspcmResetAsync"); - case 0x657fcd36: FUNC_LOG_ERROR("TODO: cellUsbPspcmInit"); - case 0x7277d7c3: FUNC_LOG_ERROR("TODO: cellUsbPspcmSend"); - case 0x7b249315: FUNC_LOG_ERROR("TODO: cellUsbPspcmPollRecvAsync"); - case 0x7f0a3eaf: FUNC_LOG_ERROR("TODO: cellUsbPspcmPollSendAsync"); - case 0x7ff72b42: FUNC_LOG_ERROR("TODO: cellUsbPspcmUnregister"); - case 0x816799dd: FUNC_LOG_ERROR("TODO: cellUsbPspcmPollData"); - case 0x97670a90: FUNC_LOG_ERROR("TODO: cellUsbPspcmGetAddr"); - case 0xa4a5ddb4: FUNC_LOG_ERROR("TODO: cellUsbPspcmCancelBind"); - case 0xabe090e3: FUNC_LOG_ERROR("TODO: cellUsbPspcmBind"); - case 0xdb864d11: FUNC_LOG_ERROR("TODO: cellUsbPspcmWaitData"); - case 0xe3fbf64d: FUNC_LOG_ERROR("TODO: cellUsbPspcmRegister"); - case 0xe68a65ac: FUNC_LOG_ERROR("TODO: cellUsbPspcmReset"); - case 0xe76e79ab: FUNC_LOG_ERROR("TODO: cellUsbPspcmCancelWaitData"); - case 0xe840f449: FUNC_LOG_ERROR("TODO: cellUsbPspcmWaitResetAsync"); - case 0xf20df7fc: FUNC_LOG_ERROR("TODO: cellUsbPspcmCalcPoolSize"); - case 0xf9883d3b: FUNC_LOG_ERROR("TODO: cellUsbPspcmRecv"); - case 0xfa07d320: FUNC_LOG_ERROR("TODO: cellUsbPspcmClose"); - case 0x2b761140: FUNC_LOG_ERROR("TODO: cellUserInfoGetStat"); - case 0x3097cc1c: FUNC_LOG_ERROR("TODO: cellUserInfoSelectUser_ListType"); - case 0x55123a25: FUNC_LOG_ERROR("TODO: cellUserInfoSelectUser_SetList"); - case 0xb3516536: FUNC_LOG_ERROR("TODO: cellUserInfoEnableOverlay"); - case 0xc55e338b: FUNC_LOG_ERROR("TODO: cellUserInfoGetList"); - case 0x1bb79ff4: FUNC_LOG_ERROR("TODO: cellVideoExportProgress"); - case 0x2f457571: FUNC_LOG_ERROR("TODO: cellVideoExportInitialize2"); - case 0x6a24cc70: FUNC_LOG_ERROR("TODO: cellVideoExportInitialize"); - case 0x81296524: FUNC_LOG_ERROR("TODO: cellVideoExportFromFile"); - case 0xc15be817: FUNC_LOG_ERROR("TODO: cellVideoExportFinalize"); - case 0x122e0d0f: FUNC_LOG_ERROR("TODO: cellVideoUploadInitialize"); - case 0x0a563878: FUNC_LOG_ERROR("TODO: cellVoiceStart"); - case 0x18d3df30: FUNC_LOG_ERROR("TODO: cellVoiceDisconnectIPortFromOPort"); - case 0x20bafe31: FUNC_LOG_ERROR("TODO: cellVoiceDebugTopology"); - case 0x2a01013e: FUNC_LOG_ERROR("TODO: cellVoiceCreateNotifyEventQueue"); - case 0x2de54871: FUNC_LOG_ERROR("TODO: cellVoiceCreatePort"); - case 0x2f24fea3: FUNC_LOG_ERROR("TODO: cellVoiceUpdatePort"); - case 0x30f0b5ab: FUNC_LOG_ERROR("TODO: cellVoiceWriteToIPortEx"); - case 0x35d84910: FUNC_LOG_ERROR("TODO: cellVoiceSetNotifyEventQueue"); - case 0x36472c57: FUNC_LOG_ERROR("TODO: cellVoiceReadFromOPort"); - case 0x3dad26e7: FUNC_LOG_ERROR("TODO: cellVoiceWriteToIPort"); - case 0x474609e2: FUNC_LOG_ERROR("TODO: cellVoiceGetMuteFlag"); - case 0x54ac3519: FUNC_LOG_ERROR("TODO: cellVoiceGetPortInfo"); - case 0x762dc193: FUNC_LOG_ERROR("TODO: cellVoiceGetVolume"); - case 0x7bf17b15: FUNC_LOG_ERROR("TODO: cellVoiceResumePort"); - case 0x7e60adc6: FUNC_LOG_ERROR("TODO: cellVoiceSetBitRate"); - case 0x7f3963f7: FUNC_LOG_ERROR("TODO: cellVoiceResumePortAll"); - case 0x87c71b06: FUNC_LOG_ERROR("TODO: cellVoicePausePort"); - case 0x94d51f92: FUNC_LOG_ERROR("TODO: cellVoiceStartEx"); - case 0x9d0f4af1: FUNC_LOG_ERROR("TODO: cellVoiceSetPortAttr"); - case 0x9f70c475: FUNC_LOG_ERROR("TODO: cellVoiceDeletePort"); - case 0xae6a21d5: FUNC_LOG_ERROR("TODO: cellVoiceConnectIPortToOPort"); - case 0xb1a2c38f: FUNC_LOG_ERROR("TODO: cellVoiceInitEx"); - case 0xbef53a2b: FUNC_LOG_ERROR("TODO: cellVoiceGetBitRate"); - case 0xc7cf1182: FUNC_LOG_ERROR("TODO: cellVoiceInit"); - case 0xd14e784d: FUNC_LOG_ERROR("TODO: cellVoicePausePortAll"); - case 0xd3a84be1: FUNC_LOG_ERROR("TODO: cellVoiceStop"); - case 0xd4d80ea5: FUNC_LOG_ERROR("TODO: cellVoiceSetMuteFlagAll"); - case 0xd5ae37d8: FUNC_LOG_ERROR("TODO: cellVoiceSetVolume"); - case 0xd6811aa7: FUNC_LOG_ERROR("TODO: cellVoiceGetSignalState"); - case 0xdd000886: FUNC_LOG_ERROR("TODO: cellVoiceRemoveNotifyEventQueue"); - case 0xdde35a0c: FUNC_LOG_ERROR("TODO: cellVoiceSetMuteFlag"); - case 0xe0e1ae12: FUNC_LOG_ERROR("TODO: cellVoiceEnd"); - case 0xf629ed67: FUNC_LOG_ERROR("TODO: cellVoiceGetPortAttr"); - case 0xff0fa43a: FUNC_LOG_ERROR("TODO: cellVoiceResetPort"); - case 0x10ef39f6: FUNC_LOG_ERROR("TODO: cellVpostClose"); - case 0x40524325: FUNC_LOG_ERROR("TODO: cellVpostOpenEx"); - case 0x95e788c3: FUNC_LOG_ERROR("TODO: cellVpostQueryAttr"); - case 0xabb8cc3d: FUNC_LOG_ERROR("TODO: cellVpostExec"); - case 0xcd33f3e2: FUNC_LOG_ERROR("TODO: cellVpostOpen"); - case 0x02eb41bb: FUNC_LOG_ERROR("TODO: cellGemGetEnvironmentLightingColor"); - case 0x0ecd2261: FUNC_LOG_ERROR("TODO: cellGemUpdateStart"); - case 0x13ea7c64: FUNC_LOG_ERROR("TODO: cellGemInit"); - case 0x18ea899a: FUNC_LOG_ERROR("TODO: cellGemGetTrackerHue"); - case 0x1a13d010: FUNC_LOG_ERROR("TODO: cellGemConvertVideoFinish"); - case 0x1a2518a2: FUNC_LOG_ERROR("TODO: cellGemEnableMagnetometer"); - case 0x1b30cc22: FUNC_LOG_ERROR("TODO: cellGemGetRGB"); - case 0x1f6328d8: FUNC_LOG_ERROR("TODO: cellGemWriteExternalPort"); - case 0x2d2c2764: FUNC_LOG_ERROR("TODO: cellGemGetAllTrackableHues"); - case 0x2e0a170d: FUNC_LOG_ERROR("TODO: cellGemGetMemorySize"); - case 0x41ae9c31: FUNC_LOG_ERROR("TODO: cellGemUpdateFinish"); - case 0x4219de31: FUNC_LOG_ERROR("TODO: cellGemEnableCameraPitchAngleCorrection"); - case 0x49609306: FUNC_LOG_ERROR("TODO: cellGemSetRumble"); - case 0x6441d38d: FUNC_LOG_ERROR("TODO: cellGemGetState"); - case 0x6a5b7048: FUNC_LOG_ERROR("TODO: cellGemGetAccelerometerPositionInDevice"); - case 0x6db6b007: FUNC_LOG_ERROR("TODO: cellGemGetRumble"); - case 0x6dce048c: FUNC_LOG_ERROR("TODO: cellGemConvertVideoStart"); - case 0x6fc4c791: FUNC_LOG_ERROR("TODO: cellGemFilterState"); - case 0x77e08704: FUNC_LOG_ERROR("TODO: cellGemSetYaw"); - case 0x8befac67: FUNC_LOG_ERROR("TODO: cellGemGetCameraState"); - case 0x928ac5f8: FUNC_LOG_ERROR("TODO: cellGemTrackHues"); - case 0x92cc4b34: FUNC_LOG_ERROR("TODO: cellGemGetImageState"); - case 0x9b9714a4: FUNC_LOG_ERROR("TODO: cellGemClearStatusFlags"); - case 0x9e1dff96: FUNC_LOG_ERROR("TODO: cellGemGetInfo"); - case 0xa03ef587: FUNC_LOG_ERROR("TODO: cellGemPrepareCamera"); - case 0xafa99ead: FUNC_LOG_ERROR("TODO: cellGemCalibrate"); - case 0xb8ef56a6: FUNC_LOG_ERROR("TODO: cellGemGetHuePixels"); - case 0xc07896f9: FUNC_LOG_ERROR("TODO: cellGemPrepareVideoConvert"); - case 0xc7622586: FUNC_LOG_ERROR("TODO: cellGemHSVtoRGB"); - case 0xce6d7791: FUNC_LOG_ERROR("TODO: cellGemForceRGB"); - case 0xd37b127a: FUNC_LOG_ERROR("TODO: cellGemGetInertialState"); - case 0xde54e2fc: FUNC_LOG_ERROR("TODO: cellGemReset"); - case 0xe1f85a80: FUNC_LOG_ERROR("TODO: cellGemEnd"); - case 0xe3e4f0d6: FUNC_LOG_ERROR("TODO: cellGemInvalidateCalibration"); - case 0xfb5887f9: FUNC_LOG_ERROR("TODO: cellGemIsTrackableHue"); - case 0xfee33481: FUNC_LOG_ERROR("TODO: cellGemGetStatusFlags"); - case 0x40ad67eb: FUNC_LOG_ERROR("TODO: cellMediatorCreateContext"); - case 0x4aecea24: FUNC_LOG_ERROR("TODO: cellMediatorGetSignatureLength"); - case 0x4d249136: FUNC_LOG_ERROR("TODO: cellMediatorGetUserInfo"); - case 0x5d4431f0: FUNC_LOG_ERROR("TODO: cellMediatorFlushCache"); - case 0x6b8f5cb9: FUNC_LOG_ERROR("TODO: cellMediatorSign"); - case 0x85dc6981: FUNC_LOG_ERROR("TODO: cellMediatorPostReports"); - case 0x9d11991d: FUNC_LOG_ERROR("TODO: cellMediatorGetProviderUrl"); - case 0xa14c6000: FUNC_LOG_ERROR("TODO: cellMediatorReliablePostReports"); - case 0xc324f60c: FUNC_LOG_ERROR("TODO: cellMediatorCloseContext"); - case 0xf7e4a50a: FUNC_LOG_ERROR("TODO: cellMediatorGetStatus"); - case 0x0053e2d8: FUNC_LOG_ERROR("TODO: cellVdecOpenEx"); - case 0x16698e83: FUNC_LOG_ERROR("TODO: cellVdecClose"); - case 0x17c702b9: FUNC_LOG_ERROR("TODO: cellVdecGetPicItem"); - case 0x2bf4ddd2: FUNC_LOG_ERROR("TODO: cellVdecDecodeAu"); - case 0x807c861a: FUNC_LOG_ERROR("TODO: cellVdecGetPicture"); - case 0x824433f0: FUNC_LOG_ERROR("TODO: cellVdecEndSeq"); - case 0xb6bbcd5d: FUNC_LOG_ERROR("TODO: cellVdecOpen"); - case 0xc757c2aa: FUNC_LOG_ERROR("TODO: cellVdecStartSeq"); - case 0xc982a84a: FUNC_LOG_ERROR("TODO: cellVdecQueryAttrEx"); - case 0xe13ef6fc: FUNC_LOG_ERROR("TODO: cellVdecSetFrameRate"); - case 0xff6f6ebe: FUNC_LOG_ERROR("TODO: cellVdecQueryAttr"); - case 0x000e53cc: FUNC_LOG_ERROR("TODO: sceNpManagerSubSignout"); - case 0x01cd9cfd: FUNC_LOG_ERROR("TODO: sceNpCommerceGetChildProductSkuInfo"); - case 0x01fbbc9b: FUNC_LOG_ERROR("TODO: sceNpBasicSendMessageGui"); - case 0x03c741a7: FUNC_LOG_ERROR("TODO: sceNpMatchingGetResult"); - case 0x04372385: FUNC_LOG_ERROR("TODO: sceNpBasicGetFriendListEntry"); - case 0x04ca5e6a: FUNC_LOG_ERROR("TODO: sceNpScoreRecordGameData"); - case 0x0561448b: FUNC_LOG_ERROR("TODO: sceNpCommerceGetDataFlagAbort"); - case 0x05af1cb8: FUNC_LOG_ERROR("TODO: sceNpBasicGetMatchingInvitationEntry"); - case 0x05d65dff: FUNC_LOG_ERROR("TODO: sceNpScoreGetRankingByNpId"); - case 0x0968aa36: FUNC_LOG_ERROR("TODO: sceNpManagerGetTicket"); - case 0x14497465: FUNC_LOG_ERROR("TODO: sceNpMatchingQuickMatchGUI"); - case 0x155de760: FUNC_LOG_ERROR("TODO: sceNpSignalingGetConnectionInfo"); - case 0x166dcc11: FUNC_LOG_ERROR("TODO: sceNpLookupNpId"); - case 0x1672170e: FUNC_LOG_ERROR("TODO: sceNpScoreRecordScore"); - case 0x168a3117: FUNC_LOG_ERROR("TODO: sceNpBasicAddPlayersHistory"); - case 0x168fcece: FUNC_LOG_ERROR("TODO: sceNpManagerGetAccountAge"); - case 0x16f88a6f: FUNC_LOG_ERROR("TODO: sceNpManagerGetPsHandle"); - case 0x1a2704f7: FUNC_LOG_ERROR("TODO: sceNpScoreWaitAsync"); - case 0x1a3fcb69: FUNC_LOG_ERROR("TODO: sceNpCommerceGetSkuUserData"); - case 0x1ae8a549: FUNC_LOG_ERROR("TODO: sceNpBasicAddBlockListEntry"); - case 0x1fdb3ec2: FUNC_LOG_ERROR("TODO: sceNpLookupUserProfileWithAvatarSizeAsync"); - case 0x21206642: FUNC_LOG_ERROR("TODO: sceNpScoreGetRankingByRangeAsync"); - case 0x227f8763: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansRankingByClanIdAsync"); - case 0x259113b8: FUNC_LOG_ERROR("TODO: sceNpScoreDestroyTitleCtx"); - case 0x260caedd: FUNC_LOG_ERROR("TODO: sceNpBasicGetFriendPresenceByNpId2"); - case 0x2687a127: FUNC_LOG_ERROR("TODO: sceNpSignalingGetCtxOpt"); - case 0x26b3bc94: FUNC_LOG_ERROR("TODO: sceNpMatchingGetResultGUI"); - case 0x26f33146: FUNC_LOG_ERROR("TODO: sceNpCommerceGetProductCategoryStart"); - case 0x2706eaa1: FUNC_LOG_ERROR("TODO: sceNpScoreSetPlayerCharacterId"); - case 0x276c72b2: FUNC_LOG_ERROR("TODO: sceNpSignalingSetCtxOpt"); - case 0x27c69eba: FUNC_LOG_ERROR("TODO: sceNpBasicAddFriend"); - case 0x29dd45dc: FUNC_LOG_ERROR("TODO: sceNpScoreSetTimeout"); - case 0x2a76895a: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansRankingByClanId"); - case 0x2ad7837d: FUNC_LOG_ERROR("TODO: sceNpMatchingAcceptInvitationGUI"); - case 0x2be41ece: FUNC_LOG_ERROR("TODO: sceNpCommerceGetNumOfChildCategory"); - case 0x2cd2a1af: FUNC_LOG_ERROR("TODO: sceNpScoreSanitizeCommentAsync"); - case 0x2e1c5068: FUNC_LOG_ERROR("TODO: sceNpMatchingDestroyCtx"); - case 0x2ecd48ed: FUNC_LOG_ERROR("TODO: sceNpDrmVerifyUpgradeLicense"); - case 0x2f2c6b3e: FUNC_LOG_ERROR("TODO: sceNpProfileAbortGui"); - case 0x2fccbfe0: FUNC_LOG_ERROR("TODO: sceNpLookupUserProfileWithAvatarSize"); - case 0x30d1cbde: FUNC_LOG_ERROR("TODO: sceNpBasicGetMessageEntry"); - case 0x32200389: FUNC_LOG_ERROR("TODO: sceNpManagerGetMyLanguages"); - case 0x32c78a6a: FUNC_LOG_ERROR("TODO: sceNpBasicGetFriendPresenceByIndex"); - case 0x32cf311f: FUNC_LOG_ERROR("TODO: sceNpScoreInit"); - case 0x32febb4c: FUNC_LOG_ERROR("TODO: sceNpMatchingSearchJoinRoomGUI"); - case 0x34cc0ca4: FUNC_LOG_ERROR("TODO: sceNpMatchingKickRoomMember"); - case 0x34ce82a0: FUNC_LOG_ERROR("TODO: sceNpSignalingGetConnectionFromPeerAddress"); - case 0x359642a6: FUNC_LOG_ERROR("TODO: sceNpCommerceGetCategoryDescription"); - case 0x36d0c2c5: FUNC_LOG_ERROR("TODO: sceNpManagerGetAvatarUrl"); - case 0x39a69619: FUNC_LOG_ERROR("TODO: sceNpCommerceGetSkuId"); - case 0x3b02418d: FUNC_LOG_ERROR("TODO: sceNpScoreGetGameData"); - case 0x3cc8588a: FUNC_LOG_ERROR("TODO: sceNpMatchingCreateRoomGUI"); - case 0x3d1760dc: FUNC_LOG_ERROR("TODO: sceNpLookupAbortTransaction"); - case 0x3db7914d: FUNC_LOG_ERROR("TODO: sceNpScoreGetRankingByNpIdAsync"); - case 0x3f0808aa: FUNC_LOG_ERROR("TODO: sceNpBasicSetPresence"); - case 0x3f195b3a: FUNC_LOG_ERROR("TODO: sceNpCommerceGetProductCategoryResult"); - case 0x4026eac5: FUNC_LOG_ERROR("TODO: sceNpBasicRegisterContextSensitiveHandler"); - case 0x41ffd4f2: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansMembersRankingByNpIdPcId"); - case 0x433fcb30: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansMembersRankingByNpIdPcIdAsync"); - case 0x43b989f5: FUNC_LOG_ERROR("TODO: sceNpBasicSendMessageAttachment"); - case 0x442381f7: FUNC_LOG_ERROR("TODO: sceNpManagerSubSignin"); - case 0x45f8f3aa: FUNC_LOG_ERROR("TODO: sceNpCustomMenuRegisterActions"); - case 0x474b7b13: FUNC_LOG_ERROR("TODO: sceNpMatchingJoinRoomGUI"); - case 0x481ce0e8: FUNC_LOG_ERROR("TODO: sceNpBasicAbortGui"); - case 0x4885aa18: FUNC_LOG_ERROR("TODO: sceNpTerm"); - case 0x4a18a89e: FUNC_LOG_ERROR("TODO: sceNpMatchingSetRoomInfoNoLimit"); - case 0x4b9efb7a: FUNC_LOG_ERROR("TODO: sceNpManagerGetCachedInfo"); - case 0x4d5e0670: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansMembersRankingByRangeAsync"); - case 0x4d9c615d: FUNC_LOG_ERROR("TODO: sceNpBasicGetClanMessageEntry"); - case 0x50b86d94: FUNC_LOG_ERROR("TODO: sceNpSignalingAddExtendedHandler"); - case 0x52a6b523: FUNC_LOG_ERROR("TODO: sceNpManagerUnregisterCallback"); - case 0x58fa4fcd: FUNC_LOG_ERROR("TODO: sceNpManagerGetTicketParam"); - case 0x5d543bbe: FUNC_LOG_ERROR("TODO: sceNpBasicGetMessageAttachmentEntry"); - case 0x5de61626: FUNC_LOG_ERROR("TODO: sceNpLookupDestroyTitleCtx"); - case 0x5e117ed5: FUNC_LOG_ERROR("TODO: sceNpLookupTitleStorageAsync"); - case 0x5e849303: FUNC_LOG_ERROR("TODO: sceNpBasicSetPresenceDetails2"); - case 0x5f2d9257: FUNC_LOG_ERROR("TODO: sceNpLookupInit"); - case 0x60440c73: FUNC_LOG_ERROR("TODO: sceNpManagerSubSigninAbortGui"); - case 0x60897c38: FUNC_LOG_ERROR("TODO: sceNpSignalingActivateConnection"); - case 0x6356082e: FUNC_LOG_ERROR("TODO: sceNpSignalingCreateCtx"); - case 0x6453b27b: FUNC_LOG_ERROR("TODO: sceNpBasicGetFriendPresenceByIndex2"); - case 0x64a704cc: FUNC_LOG_ERROR("TODO: sceNpBasicRecvMessageAttachmentLoad"); - case 0x64dbb89d: FUNC_LOG_ERROR("TODO: sceNpSignalingCancelPeerNetInfo"); - case 0x674bb9ff: FUNC_LOG_ERROR("TODO: sceNpCommerceGetProductCategoryAbort"); - case 0x691f429d: FUNC_LOG_ERROR("TODO: sceNpMatchingGetRoomInfo"); - case 0x6cb81eb2: FUNC_LOG_ERROR("TODO: sceNpCommerceDestroyProductCategory"); - case 0x6d4adc3b: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansMembersRankingByRange"); - case 0x6e2ab18b: FUNC_LOG_ERROR("TODO: sceNpCommerceGetCategoryName"); - case 0x6ee62ed2: FUNC_LOG_ERROR("TODO: sceNpManagerGetContentRatingFlag"); - case 0x6f5e8143: FUNC_LOG_ERROR("TODO: sceNpScoreCreateTransactionCtx"); - case 0x6f8fd267: FUNC_LOG_ERROR("TODO: sceNpMatchingSetRoomInfo"); - case 0x71e5af7e: FUNC_LOG_ERROR("TODO: sceNpLookupSetTimeout"); - case 0x7208dc08: FUNC_LOG_ERROR("TODO: sceNpCommerceGetNumOfChildProductSku"); - case 0x73931bd0: FUNC_LOG_ERROR("TODO: sceNpBasicGetBlockListEntryCount"); - case 0x73a2e36b: FUNC_LOG_ERROR("TODO: sceNpMatchingGetRoomMemberListLocal"); - case 0x741fbf24: FUNC_LOG_ERROR("TODO: sceNpScoreGetClanMemberGameData"); - case 0x7508112e: FUNC_LOG_ERROR("TODO: sceNpLookupPollAsync"); - case 0x75eb50cb: FUNC_LOG_ERROR("TODO: sceNpSignalingGetPeerNetInfo"); - case 0x78d7f9ad: FUNC_LOG_ERROR("TODO: sceNpCommerceGetSkuPrice"); - case 0x79225aa3: FUNC_LOG_ERROR("TODO: sceNpCommerceGetCurrencyCode"); - case 0x7b7e9137: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansRankingByRangeAsync"); - case 0x7be47e61: FUNC_LOG_ERROR("TODO: sceNpScoreCensorCommentAsync"); - case 0x7deb244c: FUNC_LOG_ERROR("TODO: sceNpScoreCensorComment"); - case 0x7e2fef28: FUNC_LOG_ERROR("TODO: sceNpManagerRequestTicket"); - case 0x806960ab: FUNC_LOG_ERROR("TODO: sceNpBasicRecvMessageCustom"); - case 0x816c6a5f: FUNC_LOG_ERROR("TODO: _sceNpSysutilClientFree"); - case 0x8297f1ec: FUNC_LOG_ERROR("TODO: sceNpManagerRequestTicket2"); - case 0x8440537c: FUNC_LOG_ERROR("TODO: sceNpLookupTerm"); - case 0x860b1756: FUNC_LOG_ERROR("TODO: sceNpLookupTitleSmallStorageAsync"); - case 0x8b7bbd73: FUNC_LOG_ERROR("TODO: sceNpMatchingSendInvitationGUI"); - case 0x8d1d096c: FUNC_LOG_ERROR("TODO: sceNpCommerceInitProductCategory"); - case 0x8d4518a0: FUNC_LOG_ERROR("TODO: sceNpCommerceSetDataFlagFinish"); - case 0x9153bdf4: FUNC_LOG_ERROR("TODO: sceNpBasicGetMessageAttachmentEntryCount"); - case 0x9281e87a: FUNC_LOG_ERROR("TODO: sceNpCommerceGetDataFlagFinish"); - case 0x936df4aa: FUNC_LOG_ERROR("TODO: sceNpCommerceGetProductId"); - case 0x9452f4f8: FUNC_LOG_ERROR("TODO: sceNpCommerceGetCategoryImageURL"); - case 0x9458f464: FUNC_LOG_ERROR("TODO: sceNpCustomMenuRegisterExceptionList"); - case 0x95c7bba3: FUNC_LOG_ERROR("TODO: sceNpSignalingTerminateConnection"); - case 0x9851f805: FUNC_LOG_ERROR("TODO: sceNpScoreTerm"); - case 0x99ac9952: FUNC_LOG_ERROR("TODO: sceNpCommerceSetDataFlagStart"); - case 0x9ad7fbd1: FUNC_LOG_ERROR("TODO: sceNpSignalingGetLocalNetInfo"); - case 0x9ee9f97e: FUNC_LOG_ERROR("TODO: sceNpLookupTitleStorage"); - case 0xa15f35fe: FUNC_LOG_ERROR("TODO: sceNpBasicGetPlayersHistoryEntryCount"); - case 0xa1709abd: FUNC_LOG_ERROR("TODO: sceNpManagerGetEntitlementById"); - case 0xa284bd1d: FUNC_LOG_ERROR("TODO: sceNpMatchingSetRoomSearchFlag"); - case 0xa7a090e5: FUNC_LOG_ERROR("TODO: sceNpScorePollAsync"); - case 0xa7bff757: FUNC_LOG_ERROR("TODO: sceNpManagerGetStatus"); - case 0xa85a4951: FUNC_LOG_ERROR("TODO: sceNpCommerceGetSkuDescription"); - case 0xa8afa7d4: FUNC_LOG_ERROR("TODO: sceNpBasicGetCustomInvitationEntryCount"); - case 0xa8cf8451: FUNC_LOG_ERROR("TODO: sceNpSignalingDestroyCtx"); - case 0xaa16695f: FUNC_LOG_ERROR("TODO: sceNpDrmProcessExitSpawn"); - case 0xac66568c: FUNC_LOG_ERROR("TODO: sceNpMatchingCreateCtx"); - case 0xacb9ee8e: FUNC_LOG_ERROR("TODO: sceNpBasicUnregisterHandler"); - case 0xad218faf: FUNC_LOG_ERROR("TODO: sceNpDrmIsAvailable"); - case 0xaee8cf71: FUNC_LOG_ERROR("TODO: sceNpCommerceGetCategoryId"); - case 0xaf3eba5a: FUNC_LOG_ERROR("TODO: sceNpCommerceDoCheckoutFinishAsync"); - case 0xaf505def: FUNC_LOG_ERROR("TODO: sceNpBasicGetMatchingInvitationEntryCount"); - case 0xaf57d9c9: FUNC_LOG_ERROR("TODO: sceNpCommerceGetCurrencyDecimals"); - case 0xafef640d: FUNC_LOG_ERROR("TODO: sceNpBasicGetFriendListEntryCount"); - case 0xb020684e: FUNC_LOG_ERROR("TODO: sceNpMatchingGetRoomInfoNoLimit"); - case 0xb082003b: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansRankingByRange"); - case 0xb1c02d66: FUNC_LOG_ERROR("TODO: sceNpCommerceGetCurrencyInfo"); - case 0xb1e0718b: FUNC_LOG_ERROR("TODO: sceNpManagerGetAccountRegion"); - case 0xb5cb2d56: FUNC_LOG_ERROR("TODO: sceNpBasicRecvMessageAttachment"); - case 0xb6017827: FUNC_LOG_ERROR("TODO: sceNpLookupAvatarImage"); - case 0xb66d1c46: FUNC_LOG_ERROR("TODO: sceNpManagerGetEntitlementIdList"); - case 0xb9f93bbb: FUNC_LOG_ERROR("TODO: sceNpScoreCreateTitleCtx"); - case 0xba65de6d: FUNC_LOG_ERROR("TODO: sceNpCommerceGetChildCategoryInfo"); - case 0xbab91fc9: FUNC_LOG_ERROR("TODO: sceNpBasicGetPlayersHistoryEntry"); - case 0xbcc09fe7: FUNC_LOG_ERROR("TODO: sceNpBasicRegisterHandler"); - case 0xbcdbb2ab: FUNC_LOG_ERROR("TODO: sceNpBasicAddPlayersHistoryAsync"); - case 0xbd28fdbf: FUNC_LOG_ERROR("TODO: sceNpInit"); - case 0xbdc07fd5: FUNC_LOG_ERROR("TODO: sceNpManagerGetNetworkTime"); - case 0xbe07c708: FUNC_LOG_ERROR("TODO: sceNpManagerGetOnlineId"); - case 0xbe0e3ee2: FUNC_LOG_ERROR("TODO: sceNpDrmVerifyUpgradeLicense2"); - case 0xbe81c71c: FUNC_LOG_ERROR("TODO: sceNpBasicSetPresenceDetails"); - case 0xbef887e5: FUNC_LOG_ERROR("TODO: sceNpScoreGetClanMemberGameDataAsync"); - case 0xbf607ec6: FUNC_LOG_ERROR("TODO: sceNpBasicGetClanMessageEntryCount"); - case 0xbf9eea93: FUNC_LOG_ERROR("TODO: sceNpLookupAvatarImageAsync"); - case 0xc3a991ee: FUNC_LOG_ERROR("TODO: sceNpScoreGetRankingByNpIdPcId"); - case 0xc4b6cd8f: FUNC_LOG_ERROR("TODO: sceNpScoreGetRankingByNpIdPcIdAsync"); - case 0xc5f4cf82: FUNC_LOG_ERROR("TODO: sceNpScoreDestroyTransactionCtx"); - case 0xca0a2d04: FUNC_LOG_ERROR("TODO: sceNpSignalingGetConnectionStatus"); - case 0xca39c4b2: FUNC_LOG_ERROR("TODO: sceNpLookupTitleSmallStorage"); - case 0xccbe2e69: FUNC_LOG_ERROR("TODO: sceNpCommerceGetSkuImageURL"); - case 0xce81c7f0: FUNC_LOG_ERROR("TODO: sceNpLookupCreateTitleCtx"); - case 0xceeebc7a: FUNC_LOG_ERROR("TODO: sceNpProfileCallGui"); - case 0xcf51864b: FUNC_LOG_ERROR("TODO: sceNpDrmGetTimelimit"); - case 0xcfd469e4: FUNC_LOG_ERROR("TODO: sceNpCommerceGetProductCategoryFinish"); - case 0xd03cea35: FUNC_LOG_ERROR("TODO: sceNpCommerceGetDataFlagState"); - case 0xd053f113: FUNC_LOG_ERROR("TODO: sceNpBasicGetCustomInvitationEntry"); - case 0xd0958814: FUNC_LOG_ERROR("TODO: sceNpSignalingGetPeerNetInfoResult"); - case 0xd12e40ae: FUNC_LOG_ERROR("TODO: sceNpLookupNpIdAsync"); - case 0xd208f91d: FUNC_LOG_ERROR("TODO: sceNpUtilCmpNpId"); - case 0xd20d7798: FUNC_LOG_ERROR("TODO: sceNpMatchingKickRoomMemberWithOpt"); - case 0xd737fd2d: FUNC_LOG_ERROR("TODO: sceNpLookupWaitAsync"); - case 0xd7fb1fa6: FUNC_LOG_ERROR("TODO: sceNpFriendlistCustom"); - case 0xdae2d351: FUNC_LOG_ERROR("TODO: sceNpMatchingGrantOwnership"); - case 0xdb2e4dc2: FUNC_LOG_ERROR("TODO: sceNpScoreGetGameDataAsync"); - case 0xdbdb909f: FUNC_LOG_ERROR("TODO: sceNpCommerceGetDataFlagStart"); - case 0xddce7d15: FUNC_LOG_ERROR("TODO: sceNpScoreGetBoardInfoAsync"); - case 0xded17c26: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansMembersRankingByNpId"); - case 0xdfd63b62: FUNC_LOG_ERROR("TODO: sceNpLookupUserProfile"); - case 0xe035f7d6: FUNC_LOG_ERROR("TODO: sceNpBasicGetEvent"); - case 0xe1c9f675: FUNC_LOG_ERROR("TODO: sceNpBasicMarkMessageAsUsed"); - case 0xe24eea19: FUNC_LOG_ERROR("TODO: sceNpMatchingGetRoomListLimitGUI"); - case 0xe2877bea: FUNC_LOG_ERROR("TODO: sceNpCommerceDestroyCtx"); - case 0xe36c660e: FUNC_LOG_ERROR("TODO: sceNpCommerceDoCheckoutStartAsync"); - case 0xe6c8f3f9: FUNC_LOG_ERROR("TODO: sceNpDrmProcessExitSpawn2"); - case 0xe7dcd3b4: FUNC_LOG_ERROR("TODO: sceNpManagerRegisterCallback"); - case 0xe853d388: FUNC_LOG_ERROR("TODO: sceNpSignalingGetConnectionFromNpId"); - case 0xe8a67160: FUNC_LOG_ERROR("TODO: sceNpScoreGetClansMembersRankingByNpIdAsync"); - case 0xea2e9ffc: FUNC_LOG_ERROR("TODO: sceNpLookupCreateTransactionCtx"); - case 0xeb5f2544: FUNC_LOG_ERROR("TODO: sceNpCommerceGetProductName"); - case 0xeb7a3d84: FUNC_LOG_ERROR("TODO: sceNpManagerGetChatRestrictionFlag"); - case 0xeb9df054: FUNC_LOG_ERROR("TODO: sceNpCommerceGetCategoryInfo"); - case 0xec0a1fbf: FUNC_LOG_ERROR("TODO: sceNpBasicSendMessage"); - case 0xecd503de: FUNC_LOG_ERROR("TODO: sceNpBasicGetMessageEntryCount"); - case 0xee0cc40c: FUNC_LOG_ERROR("TODO: _sceNpSysutilClientMalloc"); - case 0xee530059: FUNC_LOG_ERROR("TODO: sceNpCommerceGetSkuName"); - case 0xee5b20d9: FUNC_LOG_ERROR("TODO: sceNpScoreAbortTransaction"); - case 0xee64cf8e: FUNC_LOG_ERROR("TODO: sceNpMatchingGetRoomSearchFlag"); - case 0xf042b14f: FUNC_LOG_ERROR("TODO: sceNpDrmIsAvailable2"); - case 0xf0a9182b: FUNC_LOG_ERROR("TODO: sceNpFriendlist"); - case 0xf0b1e399: FUNC_LOG_ERROR("TODO: sceNpScoreRecordScoreAsync"); - case 0xf1b77918: FUNC_LOG_ERROR("TODO: sceNpScoreSanitizeComment"); - case 0xf283c143: FUNC_LOG_ERROR("TODO: sceNpDrmExecuteGamePurchase"); - case 0xf2b3338a: FUNC_LOG_ERROR("TODO: sceNpBasicGetBlockListEntry"); - case 0xf42c0df8: FUNC_LOG_ERROR("TODO: sceNpManagerGetOnlineName"); - case 0xf4e0f607: FUNC_LOG_ERROR("TODO: sceNpScoreGetBoardInfo"); - case 0xf59e1da8: FUNC_LOG_ERROR("TODO: sceNpFriendlistAbortGui"); - case 0xf5ff5f31: FUNC_LOG_ERROR("TODO: sceNpUtilCmpNpIdInOrder"); - case 0xf76847c2: FUNC_LOG_ERROR("TODO: sceNpScoreRecordGameDataAsync"); - case 0xf806c54c: FUNC_LOG_ERROR("TODO: sceNpMatchingLeaveRoom"); - case 0xf9732ac8: FUNC_LOG_ERROR("TODO: sceNpCustomMenuActionSetActivation"); - case 0xfb87cf5e: FUNC_LOG_ERROR("TODO: sceNpLookupDestroyTransactionCtx"); - case 0xfbc82301: FUNC_LOG_ERROR("TODO: sceNpScoreGetRankingByRange"); - case 0xfcac355a: FUNC_LOG_ERROR("TODO: sceNpCommerceCreateCtx"); - case 0xfd0eb5ae: FUNC_LOG_ERROR("TODO: sceNpSignalingDeactivateConnection"); - case 0xfd39ae13: FUNC_LOG_ERROR("TODO: sceNpBasicGetFriendPresenceByNpId"); - case 0xfe37a7f4: FUNC_LOG_ERROR("TODO: sceNpManagerGetNpId"); - case 0xff0a2378: FUNC_LOG_ERROR("TODO: sceNpLookupUserProfileAsync"); - case 0x01379fd7: FUNC_LOG_ERROR("TODO: sceNpMatching2DestroyContext"); - case 0x02065e3d: FUNC_LOG_ERROR("TODO: sceNpMatching2LeaveLobby"); - case 0x03a2f42a: FUNC_LOG_ERROR("TODO: sceNpMatching2RegisterLobbyMessageCallback"); - case 0x05bf2fbd: FUNC_LOG_ERROR("TODO: sceNpMatching2GetWorldInfoList"); - case 0x0884fc95: FUNC_LOG_ERROR("TODO: sceNpMatching2RegisterLobbyEventCallback"); - case 0x0b2218a3: FUNC_LOG_ERROR("TODO: sceNpMatching2GetLobbyMemberDataInternalList"); - case 0x0d22867f: FUNC_LOG_ERROR("TODO: sceNpMatching2SearchRoom"); - case 0x0ebe4c6b: FUNC_LOG_ERROR("TODO: sceNpMatching2SignalingGetConnectionStatus"); - case 0x1022e6d6: FUNC_LOG_ERROR("TODO: sceNpMatching2SetUserInfo"); - case 0x12034412: FUNC_LOG_ERROR("TODO: sceNpMatching2GetClanLobbyId"); - case 0x129663d0: FUNC_LOG_ERROR("TODO: sceNpMatching2GetLobbyMemberDataInternal"); - case 0x12d0b0f9: FUNC_LOG_ERROR("TODO: sceNpMatching2ContextStart"); - case 0x16b3e5a4: FUNC_LOG_ERROR("TODO: sceNpMatching2CreateServerContext"); - case 0x196a06f9: FUNC_LOG_ERROR("TODO: sceNpMatching2GetMemoryInfo"); - case 0x1f372697: FUNC_LOG_ERROR("TODO: sceNpMatching2LeaveRoom"); - case 0x215b0d75: FUNC_LOG_ERROR("TODO: sceNpMatching2SetRoomDataExternal"); - case 0x23009d07: FUNC_LOG_ERROR("TODO: sceNpMatching2Term2"); - case 0x26ae9ff8: FUNC_LOG_ERROR("TODO: sceNpMatching2SignalingGetConnectionInfo"); - case 0x28cad8b3: FUNC_LOG_ERROR("TODO: sceNpMatching2SendRoomMessage"); - case 0x29e78389: FUNC_LOG_ERROR("TODO: sceNpMatching2JoinLobby"); - case 0x2c5b7fc9: FUNC_LOG_ERROR("TODO: sceNpMatching2GetRoomMemberDataExternalList"); - case 0x2ed909dc: FUNC_LOG_ERROR("TODO: sceNpMatching2AbortRequest"); - case 0x2fe0da7d: FUNC_LOG_ERROR("TODO: sceNpMatching2Term"); - case 0x3457c0db: FUNC_LOG_ERROR("TODO: sceNpMatching2GetServerInfo"); - case 0x3c00c9d4: FUNC_LOG_ERROR("TODO: sceNpMatching2GetEventData"); - case 0x3cc27344: FUNC_LOG_ERROR("TODO: sceNpMatching2GetRoomSlotInfoLocal"); - case 0x3f3bd413: FUNC_LOG_ERROR("TODO: sceNpMatching2SendLobbyChatMessage"); - case 0x3f62c759: FUNC_LOG_ERROR("TODO: sceNpMatching2Init"); - case 0x41251f74: FUNC_LOG_ERROR("TODO: sceNp2Init"); - case 0x430ce063: FUNC_LOG_ERROR("TODO: sceNpMatching2AbortContextStart"); - case 0x490124fd: FUNC_LOG_ERROR("TODO: sceNpMatching2GetRoomMemberIdListLocal"); - case 0x5721e711: FUNC_LOG_ERROR("TODO: sceNpMatching2JoinRoom"); - case 0x58a04247: FUNC_LOG_ERROR("TODO: sceNpMatching2GetRoomMemberDataInternalLocal"); - case 0x62d446ac: FUNC_LOG_ERROR("TODO: sceNpMatching2GetCbQueueInfo"); - case 0x66f19527: FUNC_LOG_ERROR("TODO: sceNpMatching2KickoutRoomMember"); - case 0x6ba4c668: FUNC_LOG_ERROR("TODO: sceNpMatching2ContextStartAsync"); - case 0x6fcd84c1: FUNC_LOG_ERROR("TODO: sceNpMatching2SetSignalingOptParam"); - case 0x748029a2: FUNC_LOG_ERROR("TODO: sceNpMatching2RegisterContextCallback"); - case 0x7bf6e152: FUNC_LOG_ERROR("TODO: sceNpMatching2SendRoomChatMessage"); - case 0x817d1090: FUNC_LOG_ERROR("TODO: sceNpMatching2SetRoomDataInternal"); - case 0x8b209ca2: FUNC_LOG_ERROR("TODO: sceNpMatching2GetRoomDataInternal"); - case 0x8d3f8d49: FUNC_LOG_ERROR("TODO: sceNpMatching2SignalingGetPingInfo"); - case 0x8e5cfe9f: FUNC_LOG_ERROR("TODO: sceNpMatching2GetServerIdListLocal"); - case 0x8e930999: FUNC_LOG_ERROR("TODO: sceNpUtilBuildCdnUrl"); - case 0x9344d41f: FUNC_LOG_ERROR("TODO: sceNpMatching2GrantRoomOwner"); - case 0x9cbce3f2: FUNC_LOG_ERROR("TODO: sceNpMatching2CreateContext"); - case 0xa2b01449: FUNC_LOG_ERROR("TODO: sceNpMatching2GetSignalingOptParamLocal"); - case 0xa9e6103e: FUNC_LOG_ERROR("TODO: sceNpMatching2RegisterSignalingCallback"); - case 0xaa6c2c43: FUNC_LOG_ERROR("TODO: sceNpMatching2ClearEventData"); - case 0xaadb7c12: FUNC_LOG_ERROR("TODO: sceNp2Term"); - case 0xac98b03a: FUNC_LOG_ERROR("TODO: sceNpMatching2GetUserInfoList"); - case 0xb0c51412: FUNC_LOG_ERROR("TODO: sceNpMatching2GetRoomMemberDataInternal"); - case 0xb851aacf: FUNC_LOG_ERROR("TODO: sceNpMatching2SetRoomMemberDataInternal"); - case 0xba578d19: FUNC_LOG_ERROR("TODO: sceNpMatching2JoinProhibitiveRoom"); - case 0xbf014813: FUNC_LOG_ERROR("TODO: sceNpMatching2SignalingSetCtxOpt"); - case 0xc6b63b7e: FUNC_LOG_ERROR("TODO: sceNpMatching2DeleteServerContext"); - case 0xdb87b088: FUNC_LOG_ERROR("TODO: sceNpMatching2SetDefaultRequestOptParam"); - case 0xdcb6b27d: FUNC_LOG_ERROR("TODO: sceNpMatching2RegisterRoomEventCallback"); - case 0xde6d308b: FUNC_LOG_ERROR("TODO: sceNpMatching2GetRoomPasswordLocal"); - case 0xe4ac32ca: FUNC_LOG_ERROR("TODO: sceNpMatching2GetRoomDataExternalList"); - case 0xe7a3bc7a: FUNC_LOG_ERROR("TODO: sceNpMatching2CreateJoinRoom"); - case 0xe9946648: FUNC_LOG_ERROR("TODO: sceNpMatching2SignalingGetCtxOpt"); - case 0xefbd9357: FUNC_LOG_ERROR("TODO: sceNpMatching2GetLobbyInfoList"); - case 0xeffe5a16: FUNC_LOG_ERROR("TODO: sceNpMatching2GetLobbyMemberIdListLocal"); - case 0xefff8779: FUNC_LOG_ERROR("TODO: sceNpMatching2SendLobbyInvitation"); - case 0xf43c647a: FUNC_LOG_ERROR("TODO: sceNpMatching2ContextStop"); - case 0xf4babd3f: FUNC_LOG_ERROR("TODO: sceNpMatching2Init2"); - case 0xfa0583c6: FUNC_LOG_ERROR("TODO: sceNpMatching2SetLobbyMemberDataInternal"); - case 0xfee11e72: FUNC_LOG_ERROR("TODO: sceNpMatching2RegisterRoomMessageCallback"); - case 0x095e12c6: FUNC_LOG_ERROR("TODO: sceNpClansSendInvitationResponse"); - case 0x09f9e1a9: FUNC_LOG_ERROR("TODO: sceNpClansUpdateClanInfo"); - case 0x0df25834: FUNC_LOG_ERROR("TODO: sceNpClansRetrieveChallenges"); - case 0x1221a1bf: FUNC_LOG_ERROR("TODO: sceNpClansSearchByProfile"); - case 0x20472da0: FUNC_LOG_ERROR("TODO: sceNpClansGetMemberInfo"); - case 0x299ccc9b: FUNC_LOG_ERROR("TODO: sceNpClansCancelMembershipRequest"); - case 0x38dadf1f: FUNC_LOG_ERROR("TODO: sceNpClansGetAutoAcceptStatus"); - case 0x42332cb7: FUNC_LOG_ERROR("TODO: sceNpClansTerm"); - case 0x4826f6d5: FUNC_LOG_ERROR("TODO: sceNpClansDisbandClan"); - case 0x487de998: FUNC_LOG_ERROR("TODO: sceNpClansGetClanInfo"); - case 0x4d06aef7: FUNC_LOG_ERROR("TODO: sceNpClansAddBlacklistEntry"); - case 0x560f717b: FUNC_LOG_ERROR("TODO: sceNpClansLeaveClan"); - case 0x56bc5a7c: FUNC_LOG_ERROR("TODO: sceNpClansGetBlacklist"); - case 0x59743b2b: FUNC_LOG_ERROR("TODO: sceNpClansSendMembershipRequest"); - case 0x5bff9da1: FUNC_LOG_ERROR("TODO: sceNpClansRemoveBlacklistEntry"); - case 0x5da94854: FUNC_LOG_ERROR("TODO: sceNpClansUpdateAutoAcceptStatus"); - case 0x672399a8: FUNC_LOG_ERROR("TODO: sceNpClansGetClanListByNpId"); - case 0x726dffd5: FUNC_LOG_ERROR("TODO: sceNpClansCancelInvitation"); - case 0x727aa7f8: FUNC_LOG_ERROR("TODO: sceNpClansRetrieveAnnouncements"); - case 0x83d65529: FUNC_LOG_ERROR("TODO: sceNpClansPostChallenge"); - case 0x856ff5c0: FUNC_LOG_ERROR("TODO: sceNpClansGetMemberList"); - case 0x8e785b97: FUNC_LOG_ERROR("TODO: sceNpClansRetrievePostedChallenges"); - case 0x942dbdc4: FUNC_LOG_ERROR("TODO: sceNpClansSendMembershipResponse"); - case 0x9a72232d: FUNC_LOG_ERROR("TODO: sceNpClansCreateRequest"); - case 0x9b820047: FUNC_LOG_ERROR("TODO: sceNpClansInit"); - case 0x9cac2085: FUNC_LOG_ERROR("TODO: sceNpClansChangeMemberRole"); - case 0xa6a31a38: FUNC_LOG_ERROR("TODO: sceNpClansCreateClan"); - case 0xaa7912b5: FUNC_LOG_ERROR("TODO: sceNpClansKickMember"); - case 0xace0cfba: FUNC_LOG_ERROR("TODO: sceNpClansSearchByName"); - case 0xada45b84: FUNC_LOG_ERROR("TODO: sceNpClansPostAnnouncement"); - case 0xbc05ef31: FUNC_LOG_ERROR("TODO: sceNpClansSendInvitation"); - case 0xca4181b4: FUNC_LOG_ERROR("TODO: sceNpClansGetClanList"); - case 0xce6dc0f0: FUNC_LOG_ERROR("TODO: sceNpClansRemoveChallenge"); - case 0xd3346dc4: FUNC_LOG_ERROR("TODO: sceNpClansRemovePostedChallenge"); - case 0xd6551cd1: FUNC_LOG_ERROR("TODO: sceNpClansDestroyRequest"); - case 0xdbf300ca: FUNC_LOG_ERROR("TODO: sceNpClansJoinClan"); - case 0xe2590f60: FUNC_LOG_ERROR("TODO: sceNpClansRemoveAnnouncement"); - case 0xe82969e2: FUNC_LOG_ERROR("TODO: sceNpClansAbortRequest"); - case 0xf4a2d52b: FUNC_LOG_ERROR("TODO: sceNpClansUpdateMemberInfo"); - case 0x104551a6: FUNC_LOG_ERROR("TODO: sceNpCommerce2DoCheckoutStartAsync"); - case 0x146618df: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetProductInfoListGetResult"); - case 0x150fdca3: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetContentRatingDescriptor"); - case 0x1fa1b312: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetStoreBrowseUserdata"); - case 0x2a910f05: FUNC_LOG_ERROR("TODO: sceNpCommerce2DestroyReq"); - case 0x3539d233: FUNC_LOG_ERROR("TODO: sceNpCommerce2Init"); - case 0x371a2edd: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetCategoryContentsStart"); - case 0x3d627d81: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetBGDLAvailability"); - case 0x410d42be: FUNC_LOG_ERROR("TODO: sceNpCommerce2DoDlListFinishAsync"); - case 0x4d4a094c: FUNC_LOG_ERROR("TODO: sceNpCommerce2Term"); - case 0x62023e98: FUNC_LOG_ERROR("TODO: sceNpCommerce2CreateSessionAbort"); - case 0x6ca9efd4: FUNC_LOG_ERROR("TODO: sceNpCommerce2DoDlListStartAsync"); - case 0x6f67ea80: FUNC_LOG_ERROR("TODO: sceNpCommerce2DestroyCtx"); - case 0x7370d8d0: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetCategoryContentsCreateReq"); - case 0x8df0057f: FUNC_LOG_ERROR("TODO: sceNpCommerce2AbortReq"); - case 0x8f46325b: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetProductInfoStart"); - case 0x91f8843d: FUNC_LOG_ERROR("TODO: sceNpCommerce2CreateSessionFinish"); - case 0x972ab46c: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetContentInfo"); - case 0x9825a0fc: FUNC_LOG_ERROR("TODO: sceNpCommerce2DoProductBrowseStartAsync"); - case 0x9cde07cc: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetProductInfoListStart"); - case 0x9d9cb96b: FUNC_LOG_ERROR("TODO: sceNpCommerce2DestroyGetCategoryContentsResult"); - case 0xa5a863fe: FUNC_LOG_ERROR("TODO: sceNpCommerce2SetBGDLAvailability"); - case 0xa975ebb4: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetProductInfoCreateReq"); - case 0xa9f945b3: FUNC_LOG_ERROR("TODO: sceNpCommerce2DoProductCodeFinishAsync"); - case 0xac78c1f3: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetContentRatingInfoFromCategoryInfo"); - case 0xb23e3bd1: FUNC_LOG_ERROR("TODO: sceNpCommerce2DoProductBrowseFinishAsync"); - case 0xbd49eab2: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetCategoryInfo"); - case 0xbf5f58ea: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetProductInfoGetResult"); - case 0xca0ea996: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetCategoryContentsGetResult"); - case 0xcc18cd2c: FUNC_LOG_ERROR("TODO: sceNpCommerce2CreateSessionStart"); - case 0xd43a130e: FUNC_LOG_ERROR("TODO: sceNpCommerce2DoCheckoutFinishAsync"); - case 0xd8a473a3: FUNC_LOG_ERROR("TODO: sceNpCommerce2InitGetCategoryContentsResult"); - case 0xd9956ce7: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult"); - case 0xd9fdcec2: FUNC_LOG_ERROR("TODO: sceNpCommerce2CreateCtx"); - case 0xda8e322d: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetPrice"); - case 0xdb19194c: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetGameSkuInfoFromGameProductInfo"); - case 0xde7ab33d: FUNC_LOG_ERROR("TODO: sceNpCommerce2DoProductCodeStartAsync"); - case 0xe0f90e44: FUNC_LOG_ERROR("TODO: sceNpCommerce2InitGetProductInfoListResult"); - case 0xe1e7b5ac: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetProductInfoListCreateReq"); - case 0xe51a4944: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetGameProductInfoFromContentInfo"); - case 0xec324c8f: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetContentRatingInfoFromGameProductInfo"); - case 0xeef51be0: FUNC_LOG_ERROR("TODO: sceNpCommerce2ExecuteStoreBrowse"); - case 0xef645654: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetGameProductInfo"); - case 0xef8eafcd: FUNC_LOG_ERROR("TODO: sceNpCommerce2DestroyGetProductInfoResult"); - case 0xf6139b58: FUNC_LOG_ERROR("TODO: sceNpCommerce2DestroyGetProductInfoListResult"); - case 0xf798f5e3: FUNC_LOG_ERROR("TODO: sceNpCommerce2InitGetProductInfoResult"); - case 0xfc216890: FUNC_LOG_ERROR("TODO: sceNpCommerce2GetCategoryInfoFromContentInfo"); - case 0x079f0e87: FUNC_LOG_ERROR("TODO: sceNpTrophyGetGameProgress"); - case 0x1197b52c: FUNC_LOG_ERROR("TODO: sceNpTrophyRegisterContext"); - case 0x1c25470d: FUNC_LOG_ERROR("TODO: sceNpTrophyCreateHandle"); - case 0x27deda93: FUNC_LOG_ERROR("TODO: sceNpTrophySetSoundLevel"); - case 0x370136fe: FUNC_LOG_ERROR("TODO: sceNpTrophyGetRequiredDiskSpace"); - case 0x3741ecc7: FUNC_LOG_ERROR("TODO: sceNpTrophyDestroyContext"); - case 0x39567781: FUNC_LOG_ERROR("TODO: sceNpTrophyInit"); - case 0x48bd97c7: FUNC_LOG_ERROR("TODO: sceNpTrophyAbortHandle"); - case 0x49d18217: FUNC_LOG_ERROR("TODO: sceNpTrophyGetGameInfo"); - case 0x623cd2dc: FUNC_LOG_ERROR("TODO: sceNpTrophyDestroyHandle"); - case 0x8ceedd21: FUNC_LOG_ERROR("TODO: sceNpTrophyUnlockTrophy"); - case 0xa7fabf4d: FUNC_LOG_ERROR("TODO: sceNpTrophyTerm"); - case 0xb3ac3478: FUNC_LOG_ERROR("TODO: sceNpTrophyGetTrophyUnlockState"); - case 0xbaedf689: FUNC_LOG_ERROR("TODO: sceNpTrophyGetTrophyIcon"); - case 0xe3bf9a28: FUNC_LOG_ERROR("TODO: sceNpTrophyCreateContext"); - case 0xfce6d30a: FUNC_LOG_ERROR("TODO: sceNpTrophyGetTrophyInfo"); - case 0xff299e03: FUNC_LOG_ERROR("TODO: sceNpTrophyGetGameIcon"); - case 0x01711e81: FUNC_LOG_ERROR("TODO: sceNpTusDeleteMultiSlotDataVUser"); - case 0x0423e622: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiSlotVariable"); - case 0x065b610d: FUNC_LOG_ERROR("TODO: sceNpTusSetMultiSlotVariableAsync"); - case 0x0835deb2: FUNC_LOG_ERROR("TODO: sceNpTusSetDataVUser"); - case 0x0d15043b: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiUserVariable"); - case 0x17db7aa7: FUNC_LOG_ERROR("TODO: sceNpTusTryAndSetVariableVUserAsync"); - case 0x1904435e: FUNC_LOG_ERROR("TODO: sceNpTusCreateTransactionCtx"); - case 0x19bce18c: FUNC_LOG_ERROR("TODO: sceNpTusPollAsync"); - case 0x1fa5c87d: FUNC_LOG_ERROR("TODO: sceNpTusAddAndGetVariableAsync"); - case 0x225aed26: FUNC_LOG_ERROR("TODO: sceNpTusTerm"); - case 0x2357ba9e: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiSlotVariableVUser"); - case 0x2ab21ea9: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiSlotDataStatusVUserAsync"); - case 0x2d1b9f1a: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiUserDataStatusVUser"); - case 0x2e162a62: FUNC_LOG_ERROR("TODO: sceNpTusDestroyTitleCtx"); - case 0x3175af23: FUNC_LOG_ERROR("TODO: sceNpTusDeleteMultiSlotDataAsync"); - case 0x325c6284: FUNC_LOG_ERROR("TODO: sceNpTusAbortTransaction"); - case 0x348dbcb4: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiUserDataStatus"); - case 0x3602bc80: FUNC_LOG_ERROR("TODO: sceNpTusTryAndSetVariableVUser"); - case 0x368fec59: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiUserDataStatusVUserAsync"); - case 0x38f364b0: FUNC_LOG_ERROR("TODO: sceNpTusGetDataVUserAsync"); - case 0x44eca8b4: FUNC_LOG_ERROR("TODO: sceNpTusDestroyTransactionCtx"); - case 0x47e9424a: FUNC_LOG_ERROR("TODO: sceNpTusTryAndSetVariable"); - case 0x5175abb9: FUNC_LOG_ERROR("TODO: sceNpTusGetDataAsync"); - case 0x59432970: FUNC_LOG_ERROR("TODO: sceNpTusSetTimeout"); - case 0x651fd79f: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiSlotDataStatusAsync"); - case 0x6c511024: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiUserVariableVUser"); - case 0x7caf58ee: FUNC_LOG_ERROR("TODO: sceNpTusCreateTitleCtx"); - case 0x7d5f0f0e: FUNC_LOG_ERROR("TODO: sceNpTusSetData"); - case 0x8ddd0d85: FUNC_LOG_ERROR("TODO: sceNpTusGetData"); - case 0x8f87a06b: FUNC_LOG_ERROR("TODO: sceNpTusInit"); - case 0x94989003: FUNC_LOG_ERROR("TODO: sceNpTusAddAndGetVariable"); - case 0x9549d22c: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiUserVariableVUserAsync"); - case 0x96a06212: FUNC_LOG_ERROR("TODO: sceNpTusSetMultiSlotVariableVUserAsync"); - case 0x9cc0cf44: FUNC_LOG_ERROR("TODO: sceNpTusSetDataVUserAsync"); - case 0xa3abfadb: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiSlotDataStatusVUser"); - case 0xa7993bf3: FUNC_LOG_ERROR("TODO: sceNpTusAddAndGetVariableVUserAsync"); - case 0xae4e590e: FUNC_LOG_ERROR("TODO: sceNpTusGetDataVUser"); - case 0xaf985783: FUNC_LOG_ERROR("TODO: sceNpTusDeleteMultiSlotVariable"); - case 0xb8e8ff22: FUNC_LOG_ERROR("TODO: sceNpTusWaitAsync"); - case 0xbb2877f2: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiSlotVariableAsync"); - case 0xbbb244b7: FUNC_LOG_ERROR("TODO: sceNpTusTryAndSetVariableAsync"); - case 0xc2e18da8: FUNC_LOG_ERROR("TODO: sceNpTusDeleteMultiSlotVariableVUserAsync"); - case 0xc4e51fbf: FUNC_LOG_ERROR("TODO: sceNpTusDeleteMultiSlotVariableVUser"); - case 0xc66ba67e: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiUserDataStatusAsync"); - case 0xc815b219: FUNC_LOG_ERROR("TODO: sceNpTusDeleteMultiSlotDataVUserAsync"); - case 0xc848d425: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiSlotDataStatus"); - case 0xcc7a31cd: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiUserVariableAsync"); - case 0xcc86a8f6: FUNC_LOG_ERROR("TODO: sceNpTusSetMultiSlotVariable"); - case 0xe0719847: FUNC_LOG_ERROR("TODO: sceNpTusDeleteMultiSlotData"); - case 0xe847341f: FUNC_LOG_ERROR("TODO: sceNpTusSetDataAsync"); - case 0xf5363608: FUNC_LOG_ERROR("TODO: sceNpTusDeleteMultiSlotVariableAsync"); - case 0xf60be06f: FUNC_LOG_ERROR("TODO: sceNpTusAddAndGetVariableVUser"); - case 0xf819be91: FUNC_LOG_ERROR("TODO: sceNpTusSetMultiSlotVariableVUser"); - case 0xfc7d346e: FUNC_LOG_ERROR("TODO: sceNpTusGetMultiSlotVariableVUserAsync"); - case 0x432b3cbf: FUNC_LOG_ERROR("TODO: sceNpUtilBandwidthTestShutdown"); - case 0xc2ced2b7: FUNC_LOG_ERROR("TODO: sceNpUtilBandwidthTestInitStart"); - case 0xc880f37d: FUNC_LOG_ERROR("TODO: sceNpUtilBandwidthTestGetStatus"); - case 0xc99ee313: FUNC_LOG_ERROR("TODO: sceNpUtilBandwidthTestAbort"); - case 0x02671310: FUNC_LOG_ERROR("TODO: cellFsSetDefaultContainer"); - case 0x0d5b4a14: FUNC_LOG_ERROR("TODO: cellFsReadWithOffset"); - case 0x0e2939e5: FUNC_LOG_ERROR("TODO: cellFsFtruncate"); - case 0x103b8632: FUNC_LOG_ERROR("TODO: cellFsAllocateFileAreaWithInitialData"); - case 0x190912f6: FUNC_LOG_ERROR("TODO: cellFsStReadGetCurrentAddr"); - case 0x1a108ab7: FUNC_LOG_ERROR("TODO: cellFsGetBlockSize"); - case 0x1ea02e2f: FUNC_LOG_ERROR("TODO: cellFsArcadeHddSerialNumber"); - case 0x2664c8ae: FUNC_LOG_ERROR("TODO: cellFsStReadInit"); - case 0x27800c6b: FUNC_LOG_ERROR("TODO: cellFsStRead"); - case 0x2796fdf3: FUNC_LOG_ERROR("TODO: cellFsRmdir"); - case 0x2cb51f0d: FUNC_LOG_ERROR("TODO: cellFsClose"); - case 0x2cf1296b: FUNC_LOG_ERROR("TODO: cellFsAllocateFileAreaByFdWithoutZeroFill"); - case 0x3140f6e1: FUNC_LOG_ERROR("TODO: cellFsSetIoBuffer"); - case 0x3394f037: FUNC_LOG_ERROR("TODO: cellFsAllocateFileAreaByFdWithInitialData"); - case 0x3a1c8393: FUNC_LOG_ERROR("TODO: cellFsTruncate2"); - case 0x3f61245c: FUNC_LOG_ERROR("TODO: cellFsOpendir"); - case 0x4cef342e: FUNC_LOG_ERROR("TODO: cellFsAioWrite"); - case 0x4d5ff8e2: FUNC_LOG_ERROR("TODO: cellFsRead"); - case 0x5c74903d: FUNC_LOG_ERROR("TODO: cellFsReaddir"); - case 0x606f9f42: FUNC_LOG_ERROR("TODO: cellFsChangeFileSizeWithoutAllocation"); - case 0x6d3bb15b: FUNC_LOG_ERROR("TODO: cellFsSdataOpenByFd"); - case 0x718bf5f8: FUNC_LOG_ERROR("TODO: cellFsOpen"); - case 0x75f16dc5: FUNC_LOG_ERROR("TODO: cellFsSetIoBufferFromDefaultContainer"); - case 0x7a0329a1: FUNC_LOG_ERROR("TODO: cellFsAllocateFileAreaWithoutZeroFill"); - case 0x7de6dced: FUNC_LOG_ERROR("TODO: cellFsStat"); - case 0x7f13fc8c: FUNC_LOG_ERROR("TODO: cellFsAioCancel"); - case 0x7f4677a8: FUNC_LOG_ERROR("TODO: cellFsUnlink"); - case 0x81f33783: FUNC_LOG_ERROR("TODO: cellFsStReadPutCurrentAddr"); - case 0x866f6aec: FUNC_LOG_ERROR("TODO: cellFsStReadWaitCallback"); - case 0x8cb722d5: FUNC_LOG_ERROR("TODO: cellFsWriteWithOffset"); - case 0x8df28ff9: FUNC_LOG_ERROR("TODO: cellFsStReadStart"); - case 0x8f71c5b2: FUNC_LOG_ERROR("TODO: cellFsStReadWait"); - case 0x91a1beaa: FUNC_LOG_ERROR("TODO: cellFsSetDiscReadRetrySetting"); - case 0x967a162b: FUNC_LOG_ERROR("TODO: cellFsFsync"); - case 0x99406d0b: FUNC_LOG_ERROR("TODO: cellFsChmod"); - case 0x9b882495: FUNC_LOG_ERROR("TODO: cellFsGetDirectoryEntries"); - case 0x9f951810: FUNC_LOG_ERROR("TODO: cellFsAioFinish"); - case 0xa01ee33a: FUNC_LOG_ERROR("TODO: cellFsRegisterConversionCallback"); - case 0xa397d042: FUNC_LOG_ERROR("TODO: cellFsLseek"); - case 0xaa3b4bcd: FUNC_LOG_ERROR("TODO: cellFsGetFreeSize"); - case 0xb1840b53: FUNC_LOG_ERROR("TODO: cellFsSdataOpen"); - case 0xb3afee8b: FUNC_LOG_ERROR("TODO: cellFsStReadGetRingBuf"); - case 0xba901fe6: FUNC_LOG_ERROR("TODO: cellFsMkdir"); - case 0xbd273a88: FUNC_LOG_ERROR("TODO: cellFsStReadGetRegid"); - case 0xbef554a4: FUNC_LOG_ERROR("TODO: cellFsUtime"); - case 0xc1c507e7: FUNC_LOG_ERROR("TODO: cellFsAioRead"); - case 0xc9dc3ac5: FUNC_LOG_ERROR("TODO: cellFsTruncate"); - case 0xcb588dba: FUNC_LOG_ERROR("TODO: cellFsFGetBlockSize"); - case 0xcf34969c: FUNC_LOG_ERROR("TODO: cellFsStReadGetStatus"); - case 0xd73938df: FUNC_LOG_ERROR("TODO: cellFsStReadFinish"); - case 0xdb869f20: FUNC_LOG_ERROR("TODO: cellFsAioInit"); - case 0xe15939c3: FUNC_LOG_ERROR("TODO: cellFsChangeFileSizeByFdWithoutAllocation"); - case 0xecdcf2ab: FUNC_LOG_ERROR("TODO: cellFsWrite"); - case 0xef3efa34: FUNC_LOG_ERROR("TODO: cellFsFstat"); - case 0xf12eecc8: FUNC_LOG_ERROR("TODO: cellFsRename"); - case 0xf8e5d9a0: FUNC_LOG_ERROR("TODO: cellFsStReadStop"); - case 0xf94baa80: FUNC_LOG_ERROR("TODO: cellFsUnregisterL10nCallbacks"); - case 0xff42dcc3: FUNC_LOG_ERROR("TODO: cellFsClosedir"); - case 0x068fcbc6: FUNC_LOG_ERROR("TODO: sys_config_start"); - case 0x0d5f2c14: FUNC_LOG_ERROR("TODO: cellPadClearBuf"); - case 0x0e2dfaad: FUNC_LOG_ERROR("TODO: cellPadInfoPressMode"); - case 0x1cf98800: FUNC_LOG_ERROR("TODO: cellPadInit"); - case 0x1f71ecbe: FUNC_LOG_ERROR("TODO: cellKbGetConfiguration"); - case 0x2073b7f6: FUNC_LOG_ERROR("TODO: cellKbClearBuf"); - case 0x20a97ba2: FUNC_LOG_ERROR("TODO: cellPadLddRegisterController"); - case 0x21a62e9b: FUNC_LOG_ERROR("TODO: cellMouseGetTabletDataList"); - case 0x2d16da4f: FUNC_LOG_ERROR("TODO: cellMouseSetTabletMode"); - case 0x2f1774d5: FUNC_LOG_ERROR("TODO: cellKbGetInfo"); - case 0x3138e632: FUNC_LOG_ERROR("TODO: cellMouseGetData"); - case 0x3aaad464: FUNC_LOG_ERROR("TODO: cellPadGetInfo"); - case 0x3ef66b95: FUNC_LOG_ERROR("TODO: cellMouseClearBuf"); - case 0x3f72c56e: FUNC_LOG_ERROR("TODO: cellKbSetLEDStatus"); - case 0x3f797dff: FUNC_LOG_ERROR("TODO: cellPadGetRawData"); - case 0x433f6ec0: FUNC_LOG_ERROR("TODO: cellKbInit"); - case 0x4ab1fa77: FUNC_LOG_ERROR("TODO: cellKbCnvRawCode"); - case 0x4cc9b68d: FUNC_LOG_ERROR("TODO: cellPadPeriphGetInfo"); - case 0x4d0b3b1f: FUNC_LOG_ERROR("TODO: cellMouseInfoTabletMode"); - case 0x4d9b75d5: FUNC_LOG_ERROR("TODO: cellPadEnd"); - case 0x578e3c98: FUNC_LOG_ERROR("TODO: cellPadSetPortSetting"); - case 0x5baf30fb: FUNC_LOG_ERROR("TODO: cellMouseGetInfo"); - case 0x5f81900c: FUNC_LOG_ERROR("TODO: sys_config_unregister_service"); - case 0x6ae10596: FUNC_LOG_ERROR("TODO: sys_config_add_service_listener"); - case 0x6bc09c61: FUNC_LOG_ERROR("TODO: cellPadGetDataExtra"); - case 0x6bd131f0: FUNC_LOG_ERROR("TODO: cellMouseGetDataList"); - case 0x6d367953: FUNC_LOG_ERROR("TODO: sys_config_stop"); - case 0x78200559: FUNC_LOG_ERROR("TODO: cellPadInfoSensorMode"); - case 0x78f058a2: FUNC_LOG_ERROR("TODO: sys_config_register_service"); - case 0x7c5d5fc1: FUNC_LOG_ERROR("TODO: cellPadDbgPeriphRegisterDevice"); - case 0x8a00f264: FUNC_LOG_ERROR("TODO: cellPadPeriphGetData"); - case 0x8b72cda1: FUNC_LOG_ERROR("TODO: cellPadGetData"); - case 0x8b8231e5: FUNC_LOG_ERROR("TODO: cellPadLddGetPortNo"); - case 0x94b98e39: FUNC_LOG_ERROR("TODO: cellPadDbgLddSetDataInsertMode"); - case 0xa328cc35: FUNC_LOG_ERROR("TODO: cellMouseGetRawData"); - case 0xa5f85e4d: FUNC_LOG_ERROR("TODO: cellKbSetCodeType"); - case 0xa703a51d: FUNC_LOG_ERROR("TODO: cellPadGetInfo2"); - case 0xa74396e5: FUNC_LOG_ERROR("TODO: cellPadDbgLddRegisterController"); - case 0xbafd6409: FUNC_LOG_ERROR("TODO: cellPadLddDataInsert"); - case 0xbe5be3ba: FUNC_LOG_ERROR("TODO: cellPadSetSensorMode"); - case 0xbfce3285: FUNC_LOG_ERROR("TODO: cellKbEnd"); - case 0xc9030138: FUNC_LOG_ERROR("TODO: cellMouseInit"); - case 0xcf3051f7: FUNC_LOG_ERROR("TODO: cellPadDbgGetData"); - case 0xdeefdfa7: FUNC_LOG_ERROR("TODO: cellKbSetReadMode"); - case 0xe10183ce: FUNC_LOG_ERROR("TODO: cellMouseEnd"); - case 0xe442faa8: FUNC_LOG_ERROR("TODO: cellPadLddUnregisterController"); - case 0xf5d9d571: FUNC_LOG_ERROR("TODO: sys_config_remove_service_listener"); - case 0xf65544ee: FUNC_LOG_ERROR("TODO: cellPadSetActDirect"); - case 0xf83f8182: FUNC_LOG_ERROR("TODO: cellPadSetPressMode"); - case 0xff0a21b7: FUNC_LOG_ERROR("TODO: cellKbRead"); - case 0x00acf0e5: FUNC_LOG_ERROR("TODO: spu_printf_finalize"); - case 0x00fb4a6b: FUNC_LOG_ERROR("TODO: spu_thread_sprintf"); - case 0x0125b2ca: FUNC_LOG_ERROR("TODO: _rand_int32_TT800"); - case 0x01508f24: FUNC_LOG_ERROR("TODO: raw_spu_write_float"); - case 0x0264f468: FUNC_LOG_ERROR("TODO: _Wctomb"); - case 0x02f4d325: FUNC_LOG_ERROR("TODO: spu_thread_read_double"); - case 0x02f52a3c: FUNC_LOG_ERROR("TODO: _filep_close_it"); - case 0x03becf3c: FUNC_LOG_ERROR("TODO: _Defloc"); - case 0x04a183fc: FUNC_LOG_ERROR("TODO: strcpy"); - case 0x04a1f19d: FUNC_LOG_ERROR("TODO: raw_spu_write_short"); - case 0x05d821c4: FUNC_LOG_ERROR("TODO: _Stoullx"); - case 0x077cdb23: FUNC_LOG_ERROR("TODO: btowc"); - case 0x07c7971d: FUNC_LOG_ERROR("TODO: _Stoldx"); - case 0x0871ffb0: FUNC_LOG_ERROR("TODO: mspace_malloc_usable_size"); - case 0x0891a3fa: FUNC_LOG_ERROR("TODO: _Tlsfree"); - case 0x09cbee1e: FUNC_LOG_ERROR("TODO: strxfrm"); - case 0x0a1d4b00: FUNC_LOG_ERROR("TODO: spu_thread_read_uint"); - case 0x0a4e2541: FUNC_LOG_ERROR("TODO: spu_thread_read_ldouble"); - case 0x0ae275a4: FUNC_LOG_ERROR("TODO: _Stolx"); - case 0x0b0d272f: FUNC_LOG_ERROR("TODO: _malloc_finalize"); - case 0x0b9d04d0: FUNC_LOG_ERROR("TODO: _Getnloc"); - case 0x0b9ecb98: FUNC_LOG_ERROR("TODO: toupper_ascii"); - case 0x0cae547f: FUNC_LOG_ERROR("TODO: raw_spu_write_double"); - case 0x0d2a593b: FUNC_LOG_ERROR("TODO: srand"); - case 0x0d8a2de0: FUNC_LOG_ERROR("TODO: _CStrxfrm"); - case 0x0df8809f: FUNC_LOG_ERROR("TODO: __call_functions_registered_with_atexit"); - case 0x0f60eb63: FUNC_LOG_ERROR("TODO: vfwscanf"); - case 0x0ff4722c: FUNC_LOG_ERROR("TODO: raw_spu_read_ushort"); - case 0x1096f8f1: FUNC_LOG_ERROR("TODO: ispunct_ascii"); - case 0x1098a99d: FUNC_LOG_ERROR("TODO: localeconv"); - case 0x112ea8ea: FUNC_LOG_ERROR("TODO: strspn"); - case 0x115e2f70: FUNC_LOG_ERROR("TODO: spu_thread_snprintf"); - case 0x116cda13: FUNC_LOG_ERROR("TODO: wcstol"); - case 0x118712ea: FUNC_LOG_ERROR("TODO: islower"); - case 0x11d270d2: FUNC_LOG_ERROR("TODO: exitspawn"); - case 0x126656b7: FUNC_LOG_ERROR("TODO: _Btowc"); - case 0x128b334f: FUNC_LOG_ERROR("TODO: raw_spu_read_mem"); - case 0x12a55fb7: FUNC_LOG_ERROR("TODO: mbrtowc"); - case 0x130d20a5: FUNC_LOG_ERROR("TODO: towlower"); - case 0x1365b52a: FUNC_LOG_ERROR("TODO: fcntl"); - case 0x13808972: FUNC_LOG_ERROR("TODO: wcstok"); - case 0x14052ae0: FUNC_LOG_ERROR("TODO: absi4"); - case 0x14348b57: FUNC_LOG_ERROR("TODO: divi4"); - case 0x145853cd: FUNC_LOG_ERROR("TODO: mspace_destroy"); - case 0x15362bc9: FUNC_LOG_ERROR("TODO: spu_thread_read_long"); - case 0x153b364a: FUNC_LOG_ERROR("TODO: mkdir"); - case 0x15bdcc00: FUNC_LOG_ERROR("TODO: rand"); - case 0x15c2e29d: FUNC_LOG_ERROR("TODO: isgraph_ascii"); - case 0x17752bab: FUNC_LOG_ERROR("TODO: wcsftime"); - case 0x17bc0136: FUNC_LOG_ERROR("TODO: _Lrv2d"); - case 0x17c031d7: FUNC_LOG_ERROR("TODO: spu_thread_read_ulong"); - case 0x1855b9b1: FUNC_LOG_ERROR("TODO: setlocale"); - case 0x1895908d: FUNC_LOG_ERROR("TODO: mspace_realloc"); - case 0x18e48b5d: FUNC_LOG_ERROR("TODO: wscanf"); - case 0x18f7b77d: FUNC_LOG_ERROR("TODO: _Dnorm"); - case 0x1970cd7e: FUNC_LOG_ERROR("TODO: getpid"); - case 0x19ccbb81: FUNC_LOG_ERROR("TODO: mktime"); - case 0x1ab01ea8: FUNC_LOG_ERROR("TODO: truncate"); - case 0x1abd0985: FUNC_LOG_ERROR("TODO: div"); - case 0x1ae06860: FUNC_LOG_ERROR("TODO: wcstoumax"); - case 0x1b4c3ff0: FUNC_LOG_ERROR("TODO: atexit"); - case 0x1c0e8ab6: FUNC_LOG_ERROR("TODO: vswscanf"); - case 0x1c2ef212: FUNC_LOG_ERROR("TODO: getwc"); - case 0x1cf4d80a: FUNC_LOG_ERROR("TODO: iswalpha"); - case 0x1dcd8609: FUNC_LOG_ERROR("TODO: _Strxfrmx"); - case 0x1dd0d4c5: FUNC_LOG_ERROR("TODO: spu_printf_attach_group"); - case 0x1df4732e: FUNC_LOG_ERROR("TODO: _Getptolower"); - case 0x1e9d2b4f: FUNC_LOG_ERROR("TODO: spu_thread_read_int"); - case 0x1ecae195: FUNC_LOG_ERROR("TODO: _Vacopy"); - case 0x1f913e8d: FUNC_LOG_ERROR("TODO: chmod"); - case 0x1f925c41: FUNC_LOG_ERROR("TODO: _allocate_mapped_pages"); - case 0x206612c4: FUNC_LOG_ERROR("TODO: spu_thread_read_ptr"); - case 0x216984ed: FUNC_LOG_ERROR("TODO: spu_thread_write_long"); - case 0x216fcd2a: FUNC_LOG_ERROR("TODO: _Atrealloc"); - case 0x21807b8e: FUNC_LOG_ERROR("TODO: towctrans"); - case 0x225702e1: FUNC_LOG_ERROR("TODO: _fs_initialize"); - case 0x22b0e566: FUNC_LOG_ERROR("TODO: _Stollx"); - case 0x23d3bca7: FUNC_LOG_ERROR("TODO: _Eadd"); - case 0x242c603e: FUNC_LOG_ERROR("TODO: _Frprep"); - case 0x243b52d8: FUNC_LOG_ERROR("TODO: _Mbtowcx"); - case 0x24802244: FUNC_LOG_ERROR("TODO: iswcntrl"); - case 0x24c9e021: FUNC_LOG_ERROR("TODO: abs"); - case 0x24e230d2: FUNC_LOG_ERROR("TODO: _Wctob"); - case 0x24f6cbdd: FUNC_LOG_ERROR("TODO: clock"); - case 0x253b7210: FUNC_LOG_ERROR("TODO: _rand_real2_TT800"); - case 0x25beee5a: FUNC_LOG_ERROR("TODO: __raw_spu_printf"); - case 0x25da8fbb: FUNC_LOG_ERROR("TODO: iscntrl"); - case 0x266311a0: FUNC_LOG_ERROR("TODO: localtime"); - case 0x2677568c: FUNC_LOG_ERROR("TODO: putchar"); - case 0x26f023d5: FUNC_LOG_ERROR("TODO: ftell"); - case 0x273b9711: FUNC_LOG_ERROR("TODO: sprintf"); - case 0x28b92ebf: FUNC_LOG_ERROR("TODO: raw_spu_read_uchar"); - case 0x296bc72f: FUNC_LOG_ERROR("TODO: _FDunscale"); - case 0x2b45cb34: FUNC_LOG_ERROR("TODO: wcsrtombs"); - case 0x2b7ba4ca: FUNC_LOG_ERROR("TODO: _Tlsset"); - case 0x2b81fb7f: FUNC_LOG_ERROR("TODO: readdir"); - case 0x2bc9dee6: FUNC_LOG_ERROR("TODO: raw_spu_read_short"); - case 0x2caea755: FUNC_LOG_ERROR("TODO: _Once"); - case 0x2d067448: FUNC_LOG_ERROR("TODO: ftruncate64"); - case 0x2d17ca7f: FUNC_LOG_ERROR("TODO: _Puttxt"); - case 0x2eea9f25: FUNC_LOG_ERROR("TODO: _Esub"); - case 0x2f45d39c: FUNC_LOG_ERROR("TODO: strlen"); - case 0x2fecec13: FUNC_LOG_ERROR("TODO: getwchar"); - case 0x30fb2899: FUNC_LOG_ERROR("TODO: _Getmem"); - case 0x312be3b3: FUNC_LOG_ERROR("TODO: _malloc_init_lv2"); - case 0x313f04ab: FUNC_LOG_ERROR("TODO: raw_spu_read_char"); - case 0x329a4540: FUNC_LOG_ERROR("TODO: _WPrintf"); - case 0x32e4a30a: FUNC_LOG_ERROR("TODO: _Mtxdst"); - case 0x336b4191: FUNC_LOG_ERROR("TODO: _Getint"); - case 0x33d6ae54: FUNC_LOG_ERROR("TODO: ferror"); - case 0x344eca7e: FUNC_LOG_ERROR("TODO: _WGetstr"); - case 0x34dd6650: FUNC_LOG_ERROR("TODO: _Getcloc"); - case 0x34e7c97e: FUNC_LOG_ERROR("TODO: _Unlocksyslock"); - case 0x3512ad38: FUNC_LOG_ERROR("TODO: tmpnam"); - case 0x355fd1fd: FUNC_LOG_ERROR("TODO: mbtowc"); - case 0x3574d37d: FUNC_LOG_ERROR("TODO: _Wcsxfrmx"); - case 0x36c067c1: FUNC_LOG_ERROR("TODO: _Stoll"); - case 0x36f2b4ed: FUNC_LOG_ERROR("TODO: strtoull"); - case 0x36feb965: FUNC_LOG_ERROR("TODO: raw_spu_write_llong"); - case 0x3704840e: FUNC_LOG_ERROR("TODO: _fs_finalize"); - case 0x38426d25: FUNC_LOG_ERROR("TODO: _Wctombx"); - case 0x3902363a: FUNC_LOG_ERROR("TODO: malloc_footprint"); - case 0x39bf419c: FUNC_LOG_ERROR("TODO: valloc"); - case 0x3a210c93: FUNC_LOG_ERROR("TODO: swscanf"); - case 0x3a840ae3: FUNC_LOG_ERROR("TODO: snprintf"); - case 0x3b22e88a: FUNC_LOG_ERROR("TODO: isxdigit"); - case 0x3b8097ac: FUNC_LOG_ERROR("TODO: _WScanf"); - case 0x3bce073b: FUNC_LOG_ERROR("TODO: putc"); - case 0x3bd9ce0a: FUNC_LOG_ERROR("TODO: fsync"); - case 0x3ca81c76: FUNC_LOG_ERROR("TODO: _Iswctype"); - case 0x3d1460e9: FUNC_LOG_ERROR("TODO: _Strerror"); - case 0x3d541975: FUNC_LOG_ERROR("TODO: atoi"); - case 0x3d5fdea7: FUNC_LOG_ERROR("TODO: vfwprintf"); - case 0x3d85d6f8: FUNC_LOG_ERROR("TODO: strcmp"); - case 0x3dbc3bee: FUNC_LOG_ERROR("TODO: opendir"); - case 0x3e57dfac: FUNC_LOG_ERROR("TODO: _Genld"); - case 0x3ec99a66: FUNC_LOG_ERROR("TODO: _Getptimes"); - case 0x3ee29d0b: FUNC_LOG_ERROR("TODO: _Stof"); - case 0x3f125e2e: FUNC_LOG_ERROR("TODO: spu_thread_write_short"); - case 0x3f4ccdc7: FUNC_LOG_ERROR("TODO: isdigit"); - case 0x3f650700: FUNC_LOG_ERROR("TODO: mspace_is_heap_empty"); - case 0x40a2599a: FUNC_LOG_ERROR("TODO: atol"); - case 0x40d04e4e: FUNC_LOG_ERROR("TODO: fwide"); - case 0x40e0ff25: FUNC_LOG_ERROR("TODO: _WGenld"); - case 0x41283333: FUNC_LOG_ERROR("TODO: isdigit_ascii"); - case 0x418bdfe1: FUNC_LOG_ERROR("TODO: _get_fd"); - case 0x4217b4cf: FUNC_LOG_ERROR("TODO: difftime"); - case 0x433fe2a9: FUNC_LOG_ERROR("TODO: fwscanf"); - case 0x44115dd0: FUNC_LOG_ERROR("TODO: _Geterrno"); - case 0x44796e5c: FUNC_LOG_ERROR("TODO: strerror"); - case 0x449317ed: FUNC_LOG_ERROR("TODO: _Fopen"); - case 0x44d7cae8: FUNC_LOG_ERROR("TODO: raw_spu_read_float"); - case 0x4544c2de: FUNC_LOG_ERROR("TODO: spu_thread_write_mem"); - case 0x4569518c: FUNC_LOG_ERROR("TODO: malloc_stats"); - case 0x459072c3: FUNC_LOG_ERROR("TODO: _init_TT800"); - case 0x4595c42b: FUNC_LOG_ERROR("TODO: wcsxfrm"); - case 0x468b45dc: FUNC_LOG_ERROR("TODO: mspace_calloc"); - case 0x4911ff9c: FUNC_LOG_ERROR("TODO: rand_int31_TT800"); - case 0x498a5036: FUNC_LOG_ERROR("TODO: raw_spu_write_mem"); - case 0x4a0049c6: FUNC_LOG_ERROR("TODO: _Getpctype"); - case 0x4ab5fbe2: FUNC_LOG_ERROR("TODO: _Printf"); - case 0x4b36c0e0: FUNC_LOG_ERROR("TODO: vfscanf"); - case 0x4b6a4010: FUNC_LOG_ERROR("TODO: vswprintf"); - case 0x4bb8e2b2: FUNC_LOG_ERROR("TODO: raw_spu_write_ushort"); - case 0x4c3f5f29: FUNC_LOG_ERROR("TODO: _Getgloballocale"); - case 0x4c7dc863: FUNC_LOG_ERROR("TODO: iswupper"); - case 0x4d348427: FUNC_LOG_ERROR("TODO: fputs"); - case 0x4e4be299: FUNC_LOG_ERROR("TODO: longjmp"); - case 0x4e72f810: FUNC_LOG_ERROR("TODO: wmemchr"); - case 0x4ffba189: FUNC_LOG_ERROR("TODO: feof"); - case 0x508196b4: FUNC_LOG_ERROR("TODO: raw_spu_printf"); - case 0x508e00c6: FUNC_LOG_ERROR("TODO: _Getloc"); - case 0x51b28904: FUNC_LOG_ERROR("TODO: _Stodx"); - case 0x526a496a: FUNC_LOG_ERROR("TODO: write"); - case 0x532b03be: FUNC_LOG_ERROR("TODO: raw_spu_read_uint"); - case 0x53eb43a1: FUNC_LOG_ERROR("TODO: _Getpmbstate"); - case 0x54b383bc: FUNC_LOG_ERROR("TODO: _Locvar"); - case 0x54c2844e: FUNC_LOG_ERROR("TODO: spu_raw_snprintf"); - case 0x54f57626: FUNC_LOG_ERROR("TODO: rewind"); - case 0x5516bbbf: FUNC_LOG_ERROR("TODO: iswctype"); - case 0x55d4866e: FUNC_LOG_ERROR("TODO: fgetws"); - case 0x5751acf9: FUNC_LOG_ERROR("TODO: _LDscale"); - case 0x575fb268: FUNC_LOG_ERROR("TODO: wctrans"); - case 0x57ff7dd7: FUNC_LOG_ERROR("TODO: _WStod"); - case 0x58320830: FUNC_LOG_ERROR("TODO: _WLitob"); - case 0x589b5314: FUNC_LOG_ERROR("TODO: strncat"); - case 0x5909e3c4: FUNC_LOG_ERROR("TODO: memset"); - case 0x59640bc6: FUNC_LOG_ERROR("TODO: raw_spu_read_ullong"); - case 0x59c1bb1f: FUNC_LOG_ERROR("TODO: _Getpwcstate"); - case 0x59e8dd58: FUNC_LOG_ERROR("TODO: strtoll"); - case 0x5a74f774: FUNC_LOG_ERROR("TODO: spu_thread_read_float"); - case 0x5b162b7f: FUNC_LOG_ERROR("TODO: memmove"); - case 0x5b4b6d6d: FUNC_LOG_ERROR("TODO: wcspbrk"); - case 0x5cc71eee: FUNC_LOG_ERROR("TODO: raw_spu_write_ldouble"); - case 0x5d43c1a3: FUNC_LOG_ERROR("TODO: _Mbtowc"); - case 0x5dbceee3: FUNC_LOG_ERROR("TODO: rand_int32_TT800"); - case 0x5e06c3fe: FUNC_LOG_ERROR("TODO: __getpid"); - case 0x5e7888f0: FUNC_LOG_ERROR("TODO: bsearch"); - case 0x5eb95641: FUNC_LOG_ERROR("TODO: _Stold"); - case 0x5f922a30: FUNC_LOG_ERROR("TODO: _Dscale"); - case 0x5f9a65c7: FUNC_LOG_ERROR("TODO: _WStold"); - case 0x5fa1e497: FUNC_LOG_ERROR("TODO: _Unlockfilelock"); - case 0x60627fb3: FUNC_LOG_ERROR("TODO: _LDunscale"); - case 0x6075a3c6: FUNC_LOG_ERROR("TODO: _Ld2rv"); - case 0x609080ec: FUNC_LOG_ERROR("TODO: isspace_ascii"); - case 0x6137d196: FUNC_LOG_ERROR("TODO: memalign"); - case 0x6287ac6a: FUNC_LOG_ERROR("TODO: iswdigit"); - case 0x62bf1d6c: FUNC_LOG_ERROR("TODO: swprintf"); - case 0x64aaf016: FUNC_LOG_ERROR("TODO: raw_spu_read_ldouble"); - case 0x6514dbe5: FUNC_LOG_ERROR("TODO: wcstold"); - case 0x6539ff6d: FUNC_LOG_ERROR("TODO: _Gentime"); - case 0x6545b7de: FUNC_LOG_ERROR("TODO: fgetpos"); - case 0x65e8d4d0: FUNC_LOG_ERROR("TODO: wcslen"); - case 0x6660fc8d: FUNC_LOG_ERROR("TODO: TlsGetValue"); - case 0x6687fba4: FUNC_LOG_ERROR("TODO: _Fgpos"); - case 0x66b71b17: FUNC_LOG_ERROR("TODO: wcsspn"); - case 0x67582370: FUNC_LOG_ERROR("TODO: spu_thread_write_double"); - case 0x676e3e7a: FUNC_LOG_ERROR("TODO: raw_spu_write_ptr"); - case 0x67d6334b: FUNC_LOG_ERROR("TODO: strtof"); - case 0x6823c180: FUNC_LOG_ERROR("TODO: iswprint"); - case 0x69106fd2: FUNC_LOG_ERROR("TODO: _init_by_array_TT800"); - case 0x692b497f: FUNC_LOG_ERROR("TODO: perror"); - case 0x6995f5e8: FUNC_LOG_ERROR("TODO: _Ldtob"); - case 0x69c27c12: FUNC_LOG_ERROR("TODO: fopen"); - case 0x69ff1b9b: FUNC_LOG_ERROR("TODO: fseek"); - case 0x6ba10474: FUNC_LOG_ERROR("TODO: _Tlsalloc"); - case 0x6cf78f3e: FUNC_LOG_ERROR("TODO: _Mtxunlock"); - case 0x6d5115b0: FUNC_LOG_ERROR("TODO: wcsncmp"); - case 0x6e988e5f: FUNC_LOG_ERROR("TODO: _rand_int31_TT800"); - case 0x7028dea9: FUNC_LOG_ERROR("TODO: _Locksyslock"); - case 0x703ec767: FUNC_LOG_ERROR("TODO: setvbuf"); - case 0x70b0e833: FUNC_LOG_ERROR("TODO: mblen"); - case 0x714c9618: FUNC_LOG_ERROR("TODO: __raw_spu_putfld"); - case 0x717b2502: FUNC_LOG_ERROR("TODO: stat"); - case 0x72236cbc: FUNC_LOG_ERROR("TODO: raw_spu_write_ullong"); - case 0x72b84004: FUNC_LOG_ERROR("TODO: spu_printf_attach_thread"); - case 0x73096858: FUNC_LOG_ERROR("TODO: wctob"); - case 0x7345b4be: FUNC_LOG_ERROR("TODO: _WStoll"); - case 0x73eae03d: FUNC_LOG_ERROR("TODO: strrchr"); - case 0x744d2505: FUNC_LOG_ERROR("TODO: ispunct"); - case 0x74fe4a7b: FUNC_LOG_ERROR("TODO: iswgraph"); - case 0x759e0635: FUNC_LOG_ERROR("TODO: malloc"); - case 0x75d4485c: FUNC_LOG_ERROR("TODO: rename"); - case 0x75f98579: FUNC_LOG_ERROR("TODO: wcscoll"); - case 0x76da0c84: FUNC_LOG_ERROR("TODO: ftruncate"); - case 0x76ed4243: FUNC_LOG_ERROR("TODO: _Wcsftime"); - case 0x770bfaee: FUNC_LOG_ERROR("TODO: wctype"); - case 0x77a602dd: FUNC_LOG_ERROR("TODO: free"); - case 0x77c15441: FUNC_LOG_ERROR("TODO: _WGetfloat"); - case 0x77e241bc: FUNC_LOG_ERROR("TODO: _Skip"); - case 0x7817edf0: FUNC_LOG_ERROR("TODO: raw_spu_write_uint"); - case 0x783636d1: FUNC_LOG_ERROR("TODO: spu_thread_read_char"); - case 0x78429d81: FUNC_LOG_ERROR("TODO: putwchar"); - case 0x79819dbf: FUNC_LOG_ERROR("TODO: fputc"); - case 0x7994c28d: FUNC_LOG_ERROR("TODO: _FDtentox"); - case 0x79eadf05: FUNC_LOG_ERROR("TODO: malloc_usable_size"); - case 0x7aaab95c: FUNC_LOG_ERROR("TODO: iswblank"); - case 0x7ae82e0f: FUNC_LOG_ERROR("TODO: vsprintf"); - case 0x7aee5acd: FUNC_LOG_ERROR("TODO: _Lockfilelock"); - case 0x7b5aac20: FUNC_LOG_ERROR("TODO: spu_thread_write_ptr"); - case 0x7b7a687a: FUNC_LOG_ERROR("TODO: _WPutfld"); - case 0x7b9c592e: FUNC_LOG_ERROR("TODO: spu_thread_read_ullong"); - case 0x7c1bcf37: FUNC_LOG_ERROR("TODO: isalnum_ascii"); - case 0x7c370679: FUNC_LOG_ERROR("TODO: _Foprep"); - case 0x7cec7b39: FUNC_LOG_ERROR("TODO: _Putfld"); - case 0x7d894764: FUNC_LOG_ERROR("TODO: _Readloc"); - case 0x7e7017b1: FUNC_LOG_ERROR("TODO: rmdir"); - case 0x7ea8d860: FUNC_LOG_ERROR("TODO: spu_printf_detach_group"); - case 0x7efd420a: FUNC_LOG_ERROR("TODO: _Daysto"); - case 0x7fd325c4: FUNC_LOG_ERROR("TODO: mspace_malloc_stats"); - case 0x7fdcf73e: FUNC_LOG_ERROR("TODO: wcscat"); - case 0x806fd281: FUNC_LOG_ERROR("TODO: isblank_ascii"); - case 0x809a143f: FUNC_LOG_ERROR("TODO: kill"); - case 0x813a9666: FUNC_LOG_ERROR("TODO: ungetwc"); - case 0x814d8cb0: FUNC_LOG_ERROR("TODO: fflush"); - case 0x81a0a858: FUNC_LOG_ERROR("TODO: _memset_int"); - case 0x82a3cc30: FUNC_LOG_ERROR("TODO: wcschr"); - case 0x82a4561a: FUNC_LOG_ERROR("TODO: _put_fd"); - case 0x831d70a5: FUNC_LOG_ERROR("TODO: memcpy"); - case 0x8342b757: FUNC_LOG_ERROR("TODO: utime"); - case 0x84378ddc: FUNC_LOG_ERROR("TODO: wcsncpy"); - case 0x86532174: FUNC_LOG_ERROR("TODO: imaxdiv"); - case 0x867275d7: FUNC_LOG_ERROR("TODO: _Stoul"); - case 0x86b4c669: FUNC_LOG_ERROR("TODO: tolower_ascii"); - case 0x8713c859: FUNC_LOG_ERROR("TODO: link"); - case 0x8725a1a7: FUNC_LOG_ERROR("TODO: _memset_vmx"); - case 0x87e8f748: FUNC_LOG_ERROR("TODO: memset_vmx"); - case 0x8809cdfd: FUNC_LOG_ERROR("TODO: _Getpwctytab"); - case 0x882689f2: FUNC_LOG_ERROR("TODO: _Makeloc"); - case 0x882e7760: FUNC_LOG_ERROR("TODO: raw_spu_write_uchar"); - case 0x889d5804: FUNC_LOG_ERROR("TODO: _Dunscale"); - case 0x88e009f5: FUNC_LOG_ERROR("TODO: vwprintf"); - case 0x896e1bfd: FUNC_LOG_ERROR("TODO: spu_thread_write_uchar"); - case 0x89b62f56: FUNC_LOG_ERROR("TODO: _Etentox"); - case 0x89f6f026: FUNC_LOG_ERROR("TODO: time"); - case 0x8a6830e7: FUNC_LOG_ERROR("TODO: abort"); - case 0x8a71132c: FUNC_LOG_ERROR("TODO: remove"); - case 0x8a847b51: FUNC_LOG_ERROR("TODO: tmpfile"); - case 0x8ab0abc6: FUNC_LOG_ERROR("TODO: strncpy"); - case 0x8b439438: FUNC_LOG_ERROR("TODO: clearerr"); - case 0x8b9d8dd2: FUNC_LOG_ERROR("TODO: iswpunct"); - case 0x8cb6bfdc: FUNC_LOG_ERROR("TODO: _Locsum"); - case 0x8d7ffaf1: FUNC_LOG_ERROR("TODO: _WStopfx"); - case 0x8e2484f1: FUNC_LOG_ERROR("TODO: _Emul"); - case 0x8ed71e8b: FUNC_LOG_ERROR("TODO: _WGetfld"); - case 0x8ef85e47: FUNC_LOG_ERROR("TODO: _WPuttxt"); - case 0x8f5dd179: FUNC_LOG_ERROR("TODO: _Nnl"); - case 0x90010029: FUNC_LOG_ERROR("TODO: gets"); - case 0x9027fd99: FUNC_LOG_ERROR("TODO: _WStoldx"); - case 0x90457fe3: FUNC_LOG_ERROR("TODO: raw_spu_read_long"); - case 0x90b27880: FUNC_LOG_ERROR("TODO: strtoumax"); - case 0x9234f738: FUNC_LOG_ERROR("TODO: raw_spu_read_int"); - case 0x93427cb9: FUNC_LOG_ERROR("TODO: setbuf"); - case 0x938bfcf7: FUNC_LOG_ERROR("TODO: spu_thread_write_char"); - case 0x93a3e3ac: FUNC_LOG_ERROR("TODO: tolower"); - case 0x9439e4cd: FUNC_LOG_ERROR("TODO: wcsncat"); - case 0x96b6baa6: FUNC_LOG_ERROR("TODO: spu_thread_read_mem"); - case 0x96e6303b: FUNC_LOG_ERROR("TODO: _WStoxflt"); - case 0x96ea4de6: FUNC_LOG_ERROR("TODO: wctomb"); - case 0x97896359: FUNC_LOG_ERROR("TODO: isspace"); - case 0x9800573c: FUNC_LOG_ERROR("TODO: _WLdtob"); - case 0x980d3ea7: FUNC_LOG_ERROR("TODO: _Getfld"); - case 0x9886810c: FUNC_LOG_ERROR("TODO: _FDnorm"); - case 0x98f0eeab: FUNC_LOG_ERROR("TODO: raw_spu_write_ulong"); - case 0x99782342: FUNC_LOG_ERROR("TODO: strncasecmp_ascii"); - case 0x99a72146: FUNC_LOG_ERROR("TODO: vsnprintf"); - case 0x99b38ce7: FUNC_LOG_ERROR("TODO: wmemmove"); - case 0x9a87bb3a: FUNC_LOG_ERROR("TODO: _Getmbcurmax"); - case 0x9abe8c74: FUNC_LOG_ERROR("TODO: wprintf"); - case 0x9c7028a5: FUNC_LOG_ERROR("TODO: spu_thread_write_uint"); - case 0x9c9d7b0d: FUNC_LOG_ERROR("TODO: strtold"); - case 0x9cab08d1: FUNC_LOG_ERROR("TODO: spu_thread_write_int"); - case 0x9d140351: FUNC_LOG_ERROR("TODO: _Destroytls"); - case 0x9eb25e00: FUNC_LOG_ERROR("TODO: strcoll"); - case 0x9eee5387: FUNC_LOG_ERROR("TODO: truncate64"); - case 0x9ff08d57: FUNC_LOG_ERROR("TODO: _Clearlocks"); - case 0xa0ab76d5: FUNC_LOG_ERROR("TODO: _absi4"); - case 0xa0bc0efb: FUNC_LOG_ERROR("TODO: mallinfo"); - case 0xa0ddba8e: FUNC_LOG_ERROR("TODO: _Stoulx"); - case 0xa1dbb466: FUNC_LOG_ERROR("TODO: _Gettime"); - case 0xa2945229: FUNC_LOG_ERROR("TODO: _WGetint"); - case 0xa30d4797: FUNC_LOG_ERROR("TODO: wcstoll"); - case 0xa3440924: FUNC_LOG_ERROR("TODO: closedir"); - case 0xa3da58f6: FUNC_LOG_ERROR("TODO: rand_real1_TT800"); - case 0xa45a0313: FUNC_LOG_ERROR("TODO: mspace_create"); - case 0xa483d50d: FUNC_LOG_ERROR("TODO: _rv2d"); - case 0xa53800c2: FUNC_LOG_ERROR("TODO: _malloc_finalize_lv2"); - case 0xa568db82: FUNC_LOG_ERROR("TODO: spu_thread_read_ushort"); - case 0xa57cc615: FUNC_LOG_ERROR("TODO: iswspace"); - case 0xa5bc0e19: FUNC_LOG_ERROR("TODO: getchar"); - case 0xa6463518: FUNC_LOG_ERROR("TODO: __rename"); - case 0xa650df19: FUNC_LOG_ERROR("TODO: toupper"); - case 0xa65886b8: FUNC_LOG_ERROR("TODO: _Findloc"); - case 0xa72a7595: FUNC_LOG_ERROR("TODO: calloc"); - case 0xa797790f: FUNC_LOG_ERROR("TODO: wcsstr"); - case 0xa82d70da: FUNC_LOG_ERROR("TODO: _Tlsget"); - case 0xa835be11: FUNC_LOG_ERROR("TODO: __cxa_atexit"); - case 0xa874036a: FUNC_LOG_ERROR("TODO: wcstof"); - case 0xa8a6f615: FUNC_LOG_ERROR("TODO: TlsSetValue"); - case 0xa8b07f1b: FUNC_LOG_ERROR("TODO: wmemcpy"); - case 0xa9f68eff: FUNC_LOG_ERROR("TODO: qsort"); - case 0xaa1e687d: FUNC_LOG_ERROR("TODO: isgraph"); - case 0xaa266d35: FUNC_LOG_ERROR("TODO: _malloc_init"); - case 0xaa9635d7: FUNC_LOG_ERROR("TODO: strcat"); - case 0xab4c7ca1: FUNC_LOG_ERROR("TODO: _CWcsxfrm"); - case 0xab77019f: FUNC_LOG_ERROR("TODO: fstat"); - case 0xabc27420: FUNC_LOG_ERROR("TODO: wcstoul"); - case 0xac758d20: FUNC_LOG_ERROR("TODO: wmemcmp"); - case 0xac893127: FUNC_LOG_ERROR("TODO: fgetc"); - case 0xace90be4: FUNC_LOG_ERROR("TODO: _Dtentox"); - case 0xad62a342: FUNC_LOG_ERROR("TODO: ldiv"); - case 0xad8e9ad0: FUNC_LOG_ERROR("TODO: _Initlocks"); - case 0xaec7c970: FUNC_LOG_ERROR("TODO: lseek"); - case 0xaf002043: FUNC_LOG_ERROR("TODO: independent_comalloc"); - case 0xaf44a615: FUNC_LOG_ERROR("TODO: fgets"); - case 0xaf6bdcb0: FUNC_LOG_ERROR("TODO: _Nonfatal_Assert"); - case 0xaf89fdbd: FUNC_LOG_ERROR("TODO: _Assert"); - case 0xafa39179: FUNC_LOG_ERROR("TODO: _WPutstr"); - case 0xb120f6ca: FUNC_LOG_ERROR("TODO: close"); - case 0xb17b79d0: FUNC_LOG_ERROR("TODO: isalpha"); - case 0xb18cc115: FUNC_LOG_ERROR("TODO: freopen"); - case 0xb1cc43e3: FUNC_LOG_ERROR("TODO: _CStrftime"); - case 0xb1f4779d: FUNC_LOG_ERROR("TODO: spu_thread_printf"); - case 0xb24cb8d6: FUNC_LOG_ERROR("TODO: _Locterm"); - case 0xb2702e15: FUNC_LOG_ERROR("TODO: wcrtomb"); - case 0xb2748a9f: FUNC_LOG_ERROR("TODO: _Freeloc"); - case 0xb30042ce: FUNC_LOG_ERROR("TODO: lldiv"); - case 0xb37982ea: FUNC_LOG_ERROR("TODO: _Getstr"); - case 0xb3c495bd: FUNC_LOG_ERROR("TODO: imaxabs"); - case 0xb3d98d59: FUNC_LOG_ERROR("TODO: _rand_real1_TT800"); - case 0xb400f226: FUNC_LOG_ERROR("TODO: isupper_ascii"); - case 0xb4225825: FUNC_LOG_ERROR("TODO: mbsinit"); - case 0xb43c25c7: FUNC_LOG_ERROR("TODO: wcstoull"); - case 0xb49eea74: FUNC_LOG_ERROR("TODO: _init_malloc_lock0"); - case 0xb4a54446: FUNC_LOG_ERROR("TODO: _Stofx"); - case 0xb4fc7078: FUNC_LOG_ERROR("TODO: _close_all_FILE"); - case 0xb529d259: FUNC_LOG_ERROR("TODO: isalnum"); - case 0xb569849d: FUNC_LOG_ERROR("TODO: reallocalign"); - case 0xb57bdf7b: FUNC_LOG_ERROR("TODO: iswxdigit"); - case 0xb5d353e8: FUNC_LOG_ERROR("TODO: _LDtentox"); - case 0xb6002508: FUNC_LOG_ERROR("TODO: _Putstr"); - case 0xb6257e3d: FUNC_LOG_ERROR("TODO: strncasecmp"); - case 0xb680e240: FUNC_LOG_ERROR("TODO: wcstombs"); - case 0xb6af290e: FUNC_LOG_ERROR("TODO: _WFrprep"); - case 0xb6d92ac3: FUNC_LOG_ERROR("TODO: strcasecmp"); - case 0xb738027a: FUNC_LOG_ERROR("TODO: strtok_r"); - case 0xb794631e: FUNC_LOG_ERROR("TODO: _WStofx"); - case 0xb7ab5127: FUNC_LOG_ERROR("TODO: wcsrchr"); - case 0xb7b793ed: FUNC_LOG_ERROR("TODO: get_state_TT800"); - case 0xb7ba4aeb: FUNC_LOG_ERROR("TODO: _WStoul"); - case 0xb7d3427f: FUNC_LOG_ERROR("TODO: iscntrl_ascii"); - case 0xb81cd66a: FUNC_LOG_ERROR("TODO: mbrlen"); - case 0xb9ed25d4: FUNC_LOG_ERROR("TODO: raw_spu_read_ulong"); - case 0xba62681f: FUNC_LOG_ERROR("TODO: mspace_memalign"); - case 0xbb605c96: FUNC_LOG_ERROR("TODO: pvalloc"); - case 0xbbd4582f: FUNC_LOG_ERROR("TODO: _Setloc"); - case 0xbc1d69c5: FUNC_LOG_ERROR("TODO: atoll"); - case 0xbc374779: FUNC_LOG_ERROR("TODO: _Getlname"); - case 0xbc5af0b5: FUNC_LOG_ERROR("TODO: fgetwc"); - case 0xbc7b4b8e: FUNC_LOG_ERROR("TODO: ctime"); - case 0xbe11beaa: FUNC_LOG_ERROR("TODO: _wremove"); - case 0xbe251a29: FUNC_LOG_ERROR("TODO: islower_ascii"); - case 0xbe6e5c58: FUNC_LOG_ERROR("TODO: spu_thread_read_uchar"); - case 0xbec43f86: FUNC_LOG_ERROR("TODO: raw_spu_read_ptr"); - case 0xbf5bf5ea: FUNC_LOG_ERROR("TODO: lseek64"); - case 0xbfcd1b3b: FUNC_LOG_ERROR("TODO: _Getdst"); - case 0xc01d9f97: FUNC_LOG_ERROR("TODO: printf"); - case 0xc08cc41d: FUNC_LOG_ERROR("TODO: wcstod"); - case 0xc0e27b2c: FUNC_LOG_ERROR("TODO: _Makestab"); - case 0xc155a73f: FUNC_LOG_ERROR("TODO: _WStoull"); - case 0xc15e657e: FUNC_LOG_ERROR("TODO: spu_raw_sprintf"); - case 0xc1a71972: FUNC_LOG_ERROR("TODO: _d2rv"); - case 0xc1b4bbb9: FUNC_LOG_ERROR("TODO: raw_spu_write_char"); - case 0xc1c8737c: FUNC_LOG_ERROR("TODO: _Getptoupper"); - case 0xc291e698: FUNC_LOG_ERROR("TODO: exit"); - case 0xc3c598e2: FUNC_LOG_ERROR("TODO: spu_printf_initialize"); - case 0xc3e14cbe: FUNC_LOG_ERROR("TODO: memcmp"); - case 0xc4178000: FUNC_LOG_ERROR("TODO: _rand_real3_TT800"); - case 0xc41c6e5d: FUNC_LOG_ERROR("TODO: _Scanf"); - case 0xc57337f8: FUNC_LOG_ERROR("TODO: _Fofind"); - case 0xc5c09834: FUNC_LOG_ERROR("TODO: strstr"); - case 0xc63c354f: FUNC_LOG_ERROR("TODO: _Exit"); - case 0xc69b2427: FUNC_LOG_ERROR("TODO: labs"); - case 0xc78df618: FUNC_LOG_ERROR("TODO: rand_real3_TT800"); - case 0xc7b62ab8: FUNC_LOG_ERROR("TODO: spu_thread_write_ullong"); - case 0xc9471fac: FUNC_LOG_ERROR("TODO: _Mtxinit"); - case 0xc94b27e3: FUNC_LOG_ERROR("TODO: _WStof"); - case 0xc95b20d3: FUNC_LOG_ERROR("TODO: fputwc"); - case 0xc9607d35: FUNC_LOG_ERROR("TODO: _Stopfx"); - case 0xc97a17d7: FUNC_LOG_ERROR("TODO: vsscanf"); - case 0xcab654bf: FUNC_LOG_ERROR("TODO: _Once_ctor"); - case 0xcb85ac70: FUNC_LOG_ERROR("TODO: mspace_malloc"); - case 0xcb9c535b: FUNC_LOG_ERROR("TODO: strftime"); - case 0xcbac7ad7: FUNC_LOG_ERROR("TODO: memchr"); - case 0xcbdc3a6d: FUNC_LOG_ERROR("TODO: raw_spu_write_int"); - case 0xcc5e0c72: FUNC_LOG_ERROR("TODO: _divi4"); - case 0xcca68e9c: FUNC_LOG_ERROR("TODO: putwc"); - case 0xce7a9e76: FUNC_LOG_ERROR("TODO: isprint_ascii"); - case 0xcecbcdc4: FUNC_LOG_ERROR("TODO: _Frv2d"); - case 0xcf863219: FUNC_LOG_ERROR("TODO: _Fwprep"); - case 0xcfbfb7a7: FUNC_LOG_ERROR("TODO: spu_printf_detach_thread"); - case 0xd14ece90: FUNC_LOG_ERROR("TODO: strtol"); - case 0xd1d69cb8: FUNC_LOG_ERROR("TODO: _Stod"); - case 0xd20f6601: FUNC_LOG_ERROR("TODO: independent_calloc"); - case 0xd2a99b1e: FUNC_LOG_ERROR("TODO: isprint"); - case 0xd2ac48d7: FUNC_LOG_ERROR("TODO: iswalnum"); - case 0xd360dcb4: FUNC_LOG_ERROR("TODO: fileno"); - case 0xd3964a09: FUNC_LOG_ERROR("TODO: __spu_thread_putfld"); - case 0xd40723d6: FUNC_LOG_ERROR("TODO: fread"); - case 0xd417eeb5: FUNC_LOG_ERROR("TODO: _Stoull"); - case 0xd4912ee3: FUNC_LOG_ERROR("TODO: _FDscale"); - case 0xd5c8cb55: FUNC_LOG_ERROR("TODO: spu_thread_write_ushort"); - case 0xd69c513d: FUNC_LOG_ERROR("TODO: _Wcscollx"); - case 0xd784459d: FUNC_LOG_ERROR("TODO: isupper"); - case 0xd7dc3a8f: FUNC_LOG_ERROR("TODO: strtod"); - case 0xd8b4eb20: FUNC_LOG_ERROR("TODO: __spu_thread_puttxt"); - case 0xd9674905: FUNC_LOG_ERROR("TODO: mspace_reallocalign"); - case 0xd9a4f812: FUNC_LOG_ERROR("TODO: atoff"); - case 0xda5a7eb8: FUNC_LOG_ERROR("TODO: strtoul"); - case 0xdaeada07: FUNC_LOG_ERROR("TODO: mallopt"); - case 0xdbf4c59c: FUNC_LOG_ERROR("TODO: cellPadGetCapabilityInfo"); - case 0xddbac025: FUNC_LOG_ERROR("TODO: strcasecmp_ascii"); - case 0xddc71a75: FUNC_LOG_ERROR("TODO: _SCE_Assert"); - case 0xde1bb092: FUNC_LOG_ERROR("TODO: init_by_array_TT800"); - case 0xde32a334: FUNC_LOG_ERROR("TODO: _Exitspawn"); - case 0xde7aff7a: FUNC_LOG_ERROR("TODO: memcpy16"); - case 0xdebee2af: FUNC_LOG_ERROR("TODO: strchr"); - case 0xdef86a83: FUNC_LOG_ERROR("TODO: isxdigit_ascii"); - case 0xdfb52083: FUNC_LOG_ERROR("TODO: _Stoxflt"); - case 0xe03c7ab1: FUNC_LOG_ERROR("TODO: _Fspos"); - case 0xe1858899: FUNC_LOG_ERROR("TODO: _Getpwctrtab"); - case 0xe1bd3587: FUNC_LOG_ERROR("TODO: fclose"); - case 0xe1e83c65: FUNC_LOG_ERROR("TODO: strncmp"); - case 0xe2c5274a: FUNC_LOG_ERROR("TODO: _WStoflt"); - case 0xe3812672: FUNC_LOG_ERROR("TODO: fdopen"); - case 0xe3cc73f3: FUNC_LOG_ERROR("TODO: puts"); - case 0xe3d91db3: FUNC_LOG_ERROR("TODO: raw_spu_read_double"); - case 0xe40ba755: FUNC_LOG_ERROR("TODO: strtok"); - case 0xe44bf0bf: FUNC_LOG_ERROR("TODO: atof"); - case 0xe469fb20: FUNC_LOG_ERROR("TODO: _Atexit"); - case 0xe48348e9: FUNC_LOG_ERROR("TODO: vprintf"); - case 0xe4c51d4c: FUNC_LOG_ERROR("TODO: wcstoimax"); - case 0xe5ea9e2b: FUNC_LOG_ERROR("TODO: _Isdst"); - case 0xe5f09c80: FUNC_LOG_ERROR("TODO: llabs"); - case 0xe60ee9e5: FUNC_LOG_ERROR("TODO: fputws"); - case 0xe6a7de0a: FUNC_LOG_ERROR("TODO: ungetc"); - case 0xe7def231: FUNC_LOG_ERROR("TODO: _Getfloat"); - case 0xe89071ad: FUNC_LOG_ERROR("TODO: isalpha_ascii"); - case 0xe9137453: FUNC_LOG_ERROR("TODO: fwprintf"); - case 0xe9a2cc40: FUNC_LOG_ERROR("TODO: raw_spu_write_long"); - case 0xe9b560a5: FUNC_LOG_ERROR("TODO: sscanf"); - case 0xeb26298c: FUNC_LOG_ERROR("TODO: gmtime"); - case 0xeb40c9ec: FUNC_LOG_ERROR("TODO: rand_real2_TT800"); - case 0xeb8abe73: FUNC_LOG_ERROR("TODO: vwscanf"); - case 0xec9e7cb9: FUNC_LOG_ERROR("TODO: spu_thread_read_llong"); - case 0xecddba69: FUNC_LOG_ERROR("TODO: _WStodx"); - case 0xed6ec979: FUNC_LOG_ERROR("TODO: fsetpos"); - case 0xeda48c80: FUNC_LOG_ERROR("TODO: malloc_trim"); - case 0xeddcee2c: FUNC_LOG_ERROR("TODO: init_TT800"); - case 0xedec777d: FUNC_LOG_ERROR("TODO: _Ttotm"); - case 0xeeeb4f3e: FUNC_LOG_ERROR("TODO: _get_state_TT800"); - case 0xeeffc9a6: FUNC_LOG_ERROR("TODO: _wrename"); - case 0xef110b6b: FUNC_LOG_ERROR("TODO: unlink"); - case 0xf06eed36: FUNC_LOG_ERROR("TODO: wmemset"); - case 0xf0776a44: FUNC_LOG_ERROR("TODO: wcscmp"); - case 0xf0e022c6: FUNC_LOG_ERROR("TODO: getc"); - case 0xf2bbbee9: FUNC_LOG_ERROR("TODO: _Litob"); - case 0xf2fca4b2: FUNC_LOG_ERROR("TODO: spu_thread_write_llong"); - case 0xf356418c: FUNC_LOG_ERROR("TODO: open"); - case 0xf3ef3678: FUNC_LOG_ERROR("TODO: wcscspn"); - case 0xf41355f9: FUNC_LOG_ERROR("TODO: wcscpy"); - case 0xf418ee84: FUNC_LOG_ERROR("TODO: _WFwprep"); - case 0xf4207734: FUNC_LOG_ERROR("TODO: spu_thread_write_ulong"); - case 0xf5a32994: FUNC_LOG_ERROR("TODO: _Getpcostate"); - case 0xf5ef229c: FUNC_LOG_ERROR("TODO: _Getpwcostate"); - case 0xf5f7dda8: FUNC_LOG_ERROR("TODO: towupper"); - case 0xf68e2ac9: FUNC_LOG_ERROR("TODO: _init_malloc_lock"); - case 0xf7583d67: FUNC_LOG_ERROR("TODO: vscanf"); - case 0xf7908e27: FUNC_LOG_ERROR("TODO: strcspn"); - case 0xf7a14a22: FUNC_LOG_ERROR("TODO: realloc"); - case 0xf7d51596: FUNC_LOG_ERROR("TODO: scanf"); - case 0xf7ddb471: FUNC_LOG_ERROR("TODO: _Setgloballocale"); - case 0xf88f26c4: FUNC_LOG_ERROR("TODO: fwrite"); - case 0xf8935fe3: FUNC_LOG_ERROR("TODO: spu_thread_write_float"); - case 0xf89dc648: FUNC_LOG_ERROR("TODO: strpbrk"); - case 0xf9dae72c: FUNC_LOG_ERROR("TODO: setjmp"); - case 0xf9dba140: FUNC_LOG_ERROR("TODO: _Mtxlock"); - case 0xf9e26b72: FUNC_LOG_ERROR("TODO: _Once_dtor"); - case 0xfa00d211: FUNC_LOG_ERROR("TODO: read"); - case 0xfae4b063: FUNC_LOG_ERROR("TODO: _Strcollx"); - case 0xfaec8c60: FUNC_LOG_ERROR("TODO: fprintf"); - case 0xfb0f0018: FUNC_LOG_ERROR("TODO: _Makewct"); - case 0xfb2081fd: FUNC_LOG_ERROR("TODO: vfprintf"); - case 0xfb81426d: FUNC_LOG_ERROR("TODO: iswlower"); - case 0xfb8ea4d2: FUNC_LOG_ERROR("TODO: _Fd2rv"); - case 0xfc0428a6: FUNC_LOG_ERROR("TODO: strdup"); - case 0xfc60575c: FUNC_LOG_ERROR("TODO: __spu_thread_printf"); - case 0xfc606237: FUNC_LOG_ERROR("TODO: mbsrtowcs"); - case 0xfcac2e8e: FUNC_LOG_ERROR("TODO: mbstowcs"); - case 0xfd0cb96d: FUNC_LOG_ERROR("TODO: spu_thread_read_short"); - case 0xfd461e85: FUNC_LOG_ERROR("TODO: spu_thread_write_ldouble"); - case 0xfd6a1ddb: FUNC_LOG_ERROR("TODO: raw_spu_read_llong"); - case 0xfd81f6ca: FUNC_LOG_ERROR("TODO: _Stoflt"); - case 0xfe0261aa: FUNC_LOG_ERROR("TODO: mspace_free"); - case 0xfe630fd9: FUNC_LOG_ERROR("TODO: isblank"); - case 0xfe88e97e: FUNC_LOG_ERROR("TODO: fscanf"); - case 0xff689124: FUNC_LOG_ERROR("TODO: strtoimax"); - case 0xffbae95e: FUNC_LOG_ERROR("TODO: asctime"); - case 0xffbd876b: FUNC_LOG_ERROR("TODO: __raw_spu_puttxt"); - case 0x003395d9: FUNC_LOG_ERROR("TODO: _Feraise"); - case 0x00367be0: FUNC_LOG_ERROR("TODO: fminl"); - case 0x007854f4: FUNC_LOG_ERROR("TODO: _FDclass"); - case 0x00fde072: FUNC_LOG_ERROR("TODO: f_powf"); - case 0x010818fc: FUNC_LOG_ERROR("TODO: asinf4"); - case 0x012d0a91: FUNC_LOG_ERROR("TODO: _fminf4"); - case 0x016556df: FUNC_LOG_ERROR("TODO: _sinf4"); - case 0x01b84b27: FUNC_LOG_ERROR("TODO: llround"); - case 0x01ecef7d: FUNC_LOG_ERROR("TODO: _FCbuild"); - case 0x02e68d44: FUNC_LOG_ERROR("TODO: _f_fmodf"); - case 0x032cc709: FUNC_LOG_ERROR("TODO: csin"); - case 0x03593d2c: FUNC_LOG_ERROR("TODO: _f_expf"); - case 0x03aea906: FUNC_LOG_ERROR("TODO: divf4"); - case 0x0522d1af: FUNC_LOG_ERROR("TODO: _recipf4"); - case 0x054aae63: FUNC_LOG_ERROR("TODO: _fdimf4"); - case 0x05cb1718: FUNC_LOG_ERROR("TODO: f_fdimf"); - case 0x05e27a13: FUNC_LOG_ERROR("TODO: log10f4fast"); - case 0x05efc660: FUNC_LOG_ERROR("TODO: asin"); - case 0x05f1dc9e: FUNC_LOG_ERROR("TODO: _FExp"); - case 0x07274304: FUNC_LOG_ERROR("TODO: csinh"); - case 0x07daed62: FUNC_LOG_ERROR("TODO: log2f4"); - case 0x07f400e3: FUNC_LOG_ERROR("TODO: _LCbuild"); - case 0x080414bd: FUNC_LOG_ERROR("TODO: conjl"); - case 0x08139bd2: FUNC_LOG_ERROR("TODO: _fmaxf4"); - case 0x0829a21d: FUNC_LOG_ERROR("TODO: asinhl"); - case 0x0a242ed5: FUNC_LOG_ERROR("TODO: sinf4"); - case 0x0b3f4e90: FUNC_LOG_ERROR("TODO: catanhf"); - case 0x0bb036a6: FUNC_LOG_ERROR("TODO: _cosf4"); - case 0x0c14cfcc: FUNC_LOG_ERROR("TODO: fesetenv"); - case 0x0c9b8305: FUNC_LOG_ERROR("TODO: hypotf4"); - case 0x0cbdae68: FUNC_LOG_ERROR("TODO: sinf"); - case 0x0cf9b8bd: FUNC_LOG_ERROR("TODO: _Erfc"); - case 0x0d86295d: FUNC_LOG_ERROR("TODO: _LCaddcr"); - case 0x0e53319f: FUNC_LOG_ERROR("TODO: _asinf4"); - case 0x0e8573dc: FUNC_LOG_ERROR("TODO: expm1l"); - case 0x0f02f882: FUNC_LOG_ERROR("TODO: llrintl"); - case 0x0f428f0f: FUNC_LOG_ERROR("TODO: rint"); - case 0x0f721a9d: FUNC_LOG_ERROR("TODO: _LCsubcc"); - case 0x10627248: FUNC_LOG_ERROR("TODO: f_fmodf"); - case 0x11c51388: FUNC_LOG_ERROR("TODO: tgamma"); - case 0x1225dd31: FUNC_LOG_ERROR("TODO: casinf"); - case 0x12de4e46: FUNC_LOG_ERROR("TODO: _powf4"); - case 0x12e04cd7: FUNC_LOG_ERROR("TODO: cimagl"); - case 0x1313a420: FUNC_LOG_ERROR("TODO: acos"); - case 0x137f7e77: FUNC_LOG_ERROR("TODO: expf4"); - case 0x14208b00: FUNC_LOG_ERROR("TODO: _asinf4fast"); - case 0x1498a072: FUNC_LOG_ERROR("TODO: _Cmulcr"); - case 0x16bf208a: FUNC_LOG_ERROR("TODO: log10f"); - case 0x17316bee: FUNC_LOG_ERROR("TODO: log2"); - case 0x178d98dd: FUNC_LOG_ERROR("TODO: atanf4fast"); - case 0x17cd5d87: FUNC_LOG_ERROR("TODO: _recipf4fast"); - case 0x182cd542: FUNC_LOG_ERROR("TODO: tgammal"); - case 0x18668ce3: FUNC_LOG_ERROR("TODO: exp"); - case 0x18b26998: FUNC_LOG_ERROR("TODO: remainderl"); - case 0x18ec6099: FUNC_LOG_ERROR("TODO: rintl"); - case 0x1988732d: FUNC_LOG_ERROR("TODO: clog10"); - case 0x1a1adede: FUNC_LOG_ERROR("TODO: rsqrtf4fast"); - case 0x1acb2b16: FUNC_LOG_ERROR("TODO: acosf4"); - case 0x1bbdcd9f: FUNC_LOG_ERROR("TODO: expm1f4"); - case 0x1bcdeb47: FUNC_LOG_ERROR("TODO: _LSinh"); - case 0x1be996cc: FUNC_LOG_ERROR("TODO: _LCdivcc"); - case 0x1c11885d: FUNC_LOG_ERROR("TODO: _floorf4"); - case 0x1d35bfe4: FUNC_LOG_ERROR("TODO: _LLog"); - case 0x1d5bf5d0: FUNC_LOG_ERROR("TODO: _modff4"); - case 0x1e623f95: FUNC_LOG_ERROR("TODO: truncf4"); - case 0x1e85ef02: FUNC_LOG_ERROR("TODO: f_atanf"); - case 0x1e9fd6ba: FUNC_LOG_ERROR("TODO: _sinf4fast"); - case 0x2033eeb7: FUNC_LOG_ERROR("TODO: csqrt"); - case 0x2118fe46: FUNC_LOG_ERROR("TODO: cexpl"); - case 0x21a37b3e: FUNC_LOG_ERROR("TODO: log1pf"); - case 0x21e6d304: FUNC_LOG_ERROR("TODO: ceil"); - case 0x22c3e308: FUNC_LOG_ERROR("TODO: _exp2f4"); - case 0x238af59b: FUNC_LOG_ERROR("TODO: fegetenv"); - case 0x23b985f7: FUNC_LOG_ERROR("TODO: floorf"); - case 0x241f9337: FUNC_LOG_ERROR("TODO: _FCmulcr"); - case 0x24497c52: FUNC_LOG_ERROR("TODO: cosf"); - case 0x246ea8d0: FUNC_LOG_ERROR("TODO: f_sqrtf"); - case 0x2627d6b2: FUNC_LOG_ERROR("TODO: erfc"); - case 0x266d2473: FUNC_LOG_ERROR("TODO: _Caddcr"); - case 0x26deed0b: FUNC_LOG_ERROR("TODO: cosl"); - case 0x26ef50ed: FUNC_LOG_ERROR("TODO: asinh"); - case 0x28faaa5a: FUNC_LOG_ERROR("TODO: ilogbf4"); - case 0x29685118: FUNC_LOG_ERROR("TODO: _negatef4"); - case 0x2a138d2b: FUNC_LOG_ERROR("TODO: truncf"); - case 0x2a4dcbad: FUNC_LOG_ERROR("TODO: cacosl"); - case 0x2a89ce33: FUNC_LOG_ERROR("TODO: llrintf"); - case 0x2af4b73b: FUNC_LOG_ERROR("TODO: fmax"); - case 0x2b282ebb: FUNC_LOG_ERROR("TODO: sqrtl"); - case 0x2bb0f2c9: FUNC_LOG_ERROR("TODO: logb"); - case 0x2c45fe6a: FUNC_LOG_ERROR("TODO: fmaxl"); - case 0x2c601f3b: FUNC_LOG_ERROR("TODO: csinl"); - case 0x2cbb6f53: FUNC_LOG_ERROR("TODO: f_hypotf"); - case 0x2dcab6a4: FUNC_LOG_ERROR("TODO: nanl"); - case 0x2df339bc: FUNC_LOG_ERROR("TODO: _f_floorf"); - case 0x2e69bb2a: FUNC_LOG_ERROR("TODO: _FCosh"); - case 0x2ec867b4: FUNC_LOG_ERROR("TODO: exp2f4fast"); - case 0x30bc7a53: FUNC_LOG_ERROR("TODO: logf4"); - case 0x315673f6: FUNC_LOG_ERROR("TODO: _Csubcc"); - case 0x31be25c3: FUNC_LOG_ERROR("TODO: scalblnf"); - case 0x31db8c89: FUNC_LOG_ERROR("TODO: atan2"); - case 0x321c55de: FUNC_LOG_ERROR("TODO: nexttowardl"); - case 0x3261de11: FUNC_LOG_ERROR("TODO: fesetexceptflag"); - case 0x329ec019: FUNC_LOG_ERROR("TODO: rsqrtf4"); - case 0x32f994a1: FUNC_LOG_ERROR("TODO: cosf4fast"); - case 0x33e5929b: FUNC_LOG_ERROR("TODO: _LDsign"); - case 0x33f27f25: FUNC_LOG_ERROR("TODO: _FCdivcr"); - case 0x3436f008: FUNC_LOG_ERROR("TODO: csinhf"); - case 0x3459748b: FUNC_LOG_ERROR("TODO: log10f4"); - case 0x347c1ee1: FUNC_LOG_ERROR("TODO: atanf4"); - case 0x34c0371e: FUNC_LOG_ERROR("TODO: powl"); - case 0x358d7f93: FUNC_LOG_ERROR("TODO: _f_lrintf"); - case 0x3593a445: FUNC_LOG_ERROR("TODO: clog"); - case 0x35b6e70a: FUNC_LOG_ERROR("TODO: lrintl"); - case 0x35d3f688: FUNC_LOG_ERROR("TODO: creal"); - case 0x36778d1b: FUNC_LOG_ERROR("TODO: coshf"); - case 0x373054d1: FUNC_LOG_ERROR("TODO: cpow"); - case 0x37345541: FUNC_LOG_ERROR("TODO: log1pl"); - case 0x376fb27f: FUNC_LOG_ERROR("TODO: sinhl"); - case 0x3792b12d: FUNC_LOG_ERROR("TODO: lroundl"); - case 0x38ba5590: FUNC_LOG_ERROR("TODO: ccosl"); - case 0x38e69f09: FUNC_LOG_ERROR("TODO: pow"); - case 0x398483aa: FUNC_LOG_ERROR("TODO: _expm1f4fast"); - case 0x39ef81c9: FUNC_LOG_ERROR("TODO: f_fmaxf"); - case 0x3ad203fa: FUNC_LOG_ERROR("TODO: lrint"); - case 0x3adc01d7: FUNC_LOG_ERROR("TODO: f_frexpf"); - case 0x3b802524: FUNC_LOG_ERROR("TODO: ldexpf4"); - case 0x3c057fbd: FUNC_LOG_ERROR("TODO: atanf"); - case 0x3c616743: FUNC_LOG_ERROR("TODO: _LDtest"); - case 0x3cb818fa: FUNC_LOG_ERROR("TODO: _f_fdimf"); - case 0x3d4efafb: FUNC_LOG_ERROR("TODO: atan2l"); - case 0x3d549f2a: FUNC_LOG_ERROR("TODO: ctanhl"); - case 0x3d901a10: FUNC_LOG_ERROR("TODO: _ceilf4"); - case 0x3da55602: FUNC_LOG_ERROR("TODO: fabsf"); - case 0x3dfa060f: FUNC_LOG_ERROR("TODO: scalbnl"); - case 0x3e7eb58f: FUNC_LOG_ERROR("TODO: frexpf4"); - case 0x3e919cba: FUNC_LOG_ERROR("TODO: scalbnf"); - case 0x3ec9de23: FUNC_LOG_ERROR("TODO: _cbrtf4"); - case 0x3eeedb0e: FUNC_LOG_ERROR("TODO: _Dclass"); - case 0x3f6262b3: FUNC_LOG_ERROR("TODO: f_fminf"); - case 0x3f701e78: FUNC_LOG_ERROR("TODO: _Poly"); - case 0x4020f5ef: FUNC_LOG_ERROR("TODO: cbrt"); - case 0x405f9727: FUNC_LOG_ERROR("TODO: _log1pf4fast"); - case 0x40a2e212: FUNC_LOG_ERROR("TODO: _fabsf4"); - case 0x4111b546: FUNC_LOG_ERROR("TODO: _LExp"); - case 0x411434bb: FUNC_LOG_ERROR("TODO: asinf"); - case 0x414c5ecc: FUNC_LOG_ERROR("TODO: _f_hypotf"); - case 0x4152669c: FUNC_LOG_ERROR("TODO: scalbln"); - case 0x417851ce: FUNC_LOG_ERROR("TODO: feholdexcept"); - case 0x418036e3: FUNC_LOG_ERROR("TODO: _FTgamma"); - case 0x4189a367: FUNC_LOG_ERROR("TODO: remquo"); - case 0x41d1b236: FUNC_LOG_ERROR("TODO: _f_rintf"); - case 0x430309a1: FUNC_LOG_ERROR("TODO: ldexpf"); - case 0x434881a0: FUNC_LOG_ERROR("TODO: cacosf"); - case 0x43d522f4: FUNC_LOG_ERROR("TODO: cabsl"); - case 0x44cd6308: FUNC_LOG_ERROR("TODO: remainder"); - case 0x44cf744b: FUNC_LOG_ERROR("TODO: tanhl"); - case 0x45034943: FUNC_LOG_ERROR("TODO: nan"); - case 0x452ac4bb: FUNC_LOG_ERROR("TODO: floorf4"); - case 0x453f9e91: FUNC_LOG_ERROR("TODO: cbrtf"); - case 0x46b66f76: FUNC_LOG_ERROR("TODO: csqrtl"); - case 0x46cf72d9: FUNC_LOG_ERROR("TODO: fdimf"); - case 0x47433144: FUNC_LOG_ERROR("TODO: expm1f4fast"); - case 0x475d855b: FUNC_LOG_ERROR("TODO: trunc"); - case 0x476b5591: FUNC_LOG_ERROR("TODO: fmaf"); - case 0x48157605: FUNC_LOG_ERROR("TODO: _f_llrintf"); - case 0x4826db61: FUNC_LOG_ERROR("TODO: fma"); - case 0x4875601d: FUNC_LOG_ERROR("TODO: _exp2f4fast"); - case 0x487bbd1c: FUNC_LOG_ERROR("TODO: tanf4"); - case 0x488df791: FUNC_LOG_ERROR("TODO: cexp"); - case 0x48d462a9: FUNC_LOG_ERROR("TODO: _FDint"); - case 0x4930ac11: FUNC_LOG_ERROR("TODO: logbl"); - case 0x4a5ae27d: FUNC_LOG_ERROR("TODO: f_exp2f"); - case 0x4a6ca9a6: FUNC_LOG_ERROR("TODO: powf4"); - case 0x4ab22a63: FUNC_LOG_ERROR("TODO: _Caddcc"); - case 0x4add664c: FUNC_LOG_ERROR("TODO: feclearexcept"); - case 0x4ae52dd3: FUNC_LOG_ERROR("TODO: exp2"); - case 0x4b03d5b2: FUNC_LOG_ERROR("TODO: f_rintf"); - case 0x4b584841: FUNC_LOG_ERROR("TODO: f_asinf"); - case 0x4cb5fa99: FUNC_LOG_ERROR("TODO: nexttoward"); - case 0x4d878773: FUNC_LOG_ERROR("TODO: remainderf4"); - case 0x4ddb926b: FUNC_LOG_ERROR("TODO: powf"); - case 0x4e010403: FUNC_LOG_ERROR("TODO: copysign"); - case 0x4eb5eb51: FUNC_LOG_ERROR("TODO: sin"); - case 0x4fa4f5ec: FUNC_LOG_ERROR("TODO: nexttowardf"); - case 0x501c412f: FUNC_LOG_ERROR("TODO: cargf"); - case 0x519ebb77: FUNC_LOG_ERROR("TODO: floor"); - case 0x547fb4a7: FUNC_LOG_ERROR("TODO: sinf4fast"); - case 0x54d2fb8c: FUNC_LOG_ERROR("TODO: rintf"); - case 0x5516d621: FUNC_LOG_ERROR("TODO: acosl"); - case 0x55c8a549: FUNC_LOG_ERROR("TODO: truncl"); - case 0x56c573a8: FUNC_LOG_ERROR("TODO: log1p"); - case 0x575e9b6e: FUNC_LOG_ERROR("TODO: asinl"); - case 0x58eb9e57: FUNC_LOG_ERROR("TODO: fabs"); - case 0x596ab55c: FUNC_LOG_ERROR("TODO: atanh"); - case 0x5b18eded: FUNC_LOG_ERROR("TODO: clogl"); - case 0x5b474c22: FUNC_LOG_ERROR("TODO: casinhl"); - case 0x5bfd37be: FUNC_LOG_ERROR("TODO: _FCaddcc"); - case 0x5e48dede: FUNC_LOG_ERROR("TODO: exp2f4"); - case 0x5ee10a95: FUNC_LOG_ERROR("TODO: catanh"); - case 0x5ee37927: FUNC_LOG_ERROR("TODO: _LErfc"); - case 0x60e9ff3c: FUNC_LOG_ERROR("TODO: _expm1f4"); - case 0x61250988: FUNC_LOG_ERROR("TODO: catanl"); - case 0x6261c0b5: FUNC_LOG_ERROR("TODO: _log10f4"); - case 0x63bbdfa6: FUNC_LOG_ERROR("TODO: _FCmulcc"); - case 0x642e3d18: FUNC_LOG_ERROR("TODO: _frexpf4"); - case 0x642f7d6b: FUNC_LOG_ERROR("TODO: f_copysignf"); - case 0x645557bd: FUNC_LOG_ERROR("TODO: copysignl"); - case 0x64abdb4d: FUNC_LOG_ERROR("TODO: csinhl"); - case 0x657d0e83: FUNC_LOG_ERROR("TODO: divf4fast"); - case 0x65935877: FUNC_LOG_ERROR("TODO: ilogbf"); - case 0x659e011e: FUNC_LOG_ERROR("TODO: sqrt"); - case 0x6636c4a5: FUNC_LOG_ERROR("TODO: frexpf"); - case 0x664e04b9: FUNC_LOG_ERROR("TODO: negatef4"); - case 0x6764c707: FUNC_LOG_ERROR("TODO: f_log2f"); - case 0x683cacb3: FUNC_LOG_ERROR("TODO: sinh"); - case 0x68a8957f: FUNC_LOG_ERROR("TODO: casinhf"); - case 0x68f72416: FUNC_LOG_ERROR("TODO: nextafterl"); - case 0x69040b9b: FUNC_LOG_ERROR("TODO: logbf4"); - case 0x69725dce: FUNC_LOG_ERROR("TODO: lgamma"); - case 0x6ad1c42b: FUNC_LOG_ERROR("TODO: _sincosf4"); - case 0x6b660894: FUNC_LOG_ERROR("TODO: _acosf4fast"); - case 0x6b6ab2a9: FUNC_LOG_ERROR("TODO: _LDclass"); - case 0x6c009c56: FUNC_LOG_ERROR("TODO: f_log10f"); - case 0x6c6285c6: FUNC_LOG_ERROR("TODO: acoshf"); - case 0x6cc4bd13: FUNC_LOG_ERROR("TODO: casinh"); - case 0x6ddd31b2: FUNC_LOG_ERROR("TODO: hypot"); - case 0x6df35518: FUNC_LOG_ERROR("TODO: floorl"); - case 0x6e9eb0dc: FUNC_LOG_ERROR("TODO: sincosf4fast"); - case 0x6ef6b083: FUNC_LOG_ERROR("TODO: _FCsubcr"); - case 0x6f5dd7d2: FUNC_LOG_ERROR("TODO: cexpf"); - case 0x6f639afb: FUNC_LOG_ERROR("TODO: f_llroundf"); - case 0x6fcc1e27: FUNC_LOG_ERROR("TODO: _FPoly"); - case 0x70357b12: FUNC_LOG_ERROR("TODO: _atanf4fast"); - case 0x7048396e: FUNC_LOG_ERROR("TODO: carg"); - case 0x705d9e24: FUNC_LOG_ERROR("TODO: f_acosf"); - case 0x70f71871: FUNC_LOG_ERROR("TODO: _FCdivcc"); - case 0x71293b71: FUNC_LOG_ERROR("TODO: _FLog"); - case 0x714adce1: FUNC_LOG_ERROR("TODO: log"); - case 0x71f2bc56: FUNC_LOG_ERROR("TODO: _divf4fast"); - case 0x728149e5: FUNC_LOG_ERROR("TODO: f_ldexpf"); - case 0x729b7269: FUNC_LOG_ERROR("TODO: cproj"); - case 0x72a3ed28: FUNC_LOG_ERROR("TODO: fesettrapenable"); - case 0x72f1f64b: FUNC_LOG_ERROR("TODO: _logbf4"); - case 0x734ca589: FUNC_LOG_ERROR("TODO: _f_cosf"); - case 0x742f12b4: FUNC_LOG_ERROR("TODO: _Sin"); - case 0x74902d4b: FUNC_LOG_ERROR("TODO: expf4fast"); - case 0x749440f9: FUNC_LOG_ERROR("TODO: lgammal"); - case 0x752fa85e: FUNC_LOG_ERROR("TODO: fmaxf4"); - case 0x758f33dc: FUNC_LOG_ERROR("TODO: nearbyint"); - case 0x75e3e2e9: FUNC_LOG_ERROR("TODO: nearbyintl"); - case 0x76afaf04: FUNC_LOG_ERROR("TODO: _sqrtf4"); - case 0x76e639ec: FUNC_LOG_ERROR("TODO: _atanf4"); - case 0x772f1e4d: FUNC_LOG_ERROR("TODO: lround"); - case 0x7793a86b: FUNC_LOG_ERROR("TODO: ctanf"); - case 0x7831a2e0: FUNC_LOG_ERROR("TODO: hypotl"); - case 0x78e4590a: FUNC_LOG_ERROR("TODO: acosh"); - case 0x790c53bd: FUNC_LOG_ERROR("TODO: _Fpcomp"); - case 0x7919f414: FUNC_LOG_ERROR("TODO: _f_nearbyintf"); - case 0x79ba9b5c: FUNC_LOG_ERROR("TODO: expl"); - case 0x7a893af1: FUNC_LOG_ERROR("TODO: _rsqrtf4"); - case 0x7ab679da: FUNC_LOG_ERROR("TODO: f_cosf"); - case 0x7c2eaeb5: FUNC_LOG_ERROR("TODO: fminf"); - case 0x7d02a5ca: FUNC_LOG_ERROR("TODO: sqrtf4fast"); - case 0x7d6191d0: FUNC_LOG_ERROR("TODO: _Cosh"); - case 0x7f381837: FUNC_LOG_ERROR("TODO: frexp"); - case 0x7f579e03: FUNC_LOG_ERROR("TODO: atan"); - case 0x7f91cd41: FUNC_LOG_ERROR("TODO: tanf4fast"); - case 0x812ed488: FUNC_LOG_ERROR("TODO: cabsf"); - case 0x81daf880: FUNC_LOG_ERROR("TODO: _LCsubcr"); - case 0x8217e783: FUNC_LOG_ERROR("TODO: cosh"); - case 0x833e6b0e: FUNC_LOG_ERROR("TODO: cimag"); - case 0x834f5917: FUNC_LOG_ERROR("TODO: ccosh"); - case 0x842cb14d: FUNC_LOG_ERROR("TODO: _log1pf4"); - case 0x8451edf0: FUNC_LOG_ERROR("TODO: sqrtf"); - case 0x889cccb0: FUNC_LOG_ERROR("TODO: llroundl"); - case 0x88fb4a66: FUNC_LOG_ERROR("TODO: recipf4fast"); - case 0x892f2590: FUNC_LOG_ERROR("TODO: fegetround"); - case 0x895cdb49: FUNC_LOG_ERROR("TODO: fmaxf"); - case 0x89b507b3: FUNC_LOG_ERROR("TODO: catanhl"); - case 0x89d1d168: FUNC_LOG_ERROR("TODO: _LAtan"); - case 0x8b168769: FUNC_LOG_ERROR("TODO: fdiml"); - case 0x8bd1deb2: FUNC_LOG_ERROR("TODO: _LTgamma"); - case 0x8bd67efc: FUNC_LOG_ERROR("TODO: erf"); - case 0x8c85369b: FUNC_LOG_ERROR("TODO: _f_fminf"); - case 0x8d5858db: FUNC_LOG_ERROR("TODO: _f_exp2f"); - case 0x8e01379e: FUNC_LOG_ERROR("TODO: cacoshf"); - case 0x8e258fa0: FUNC_LOG_ERROR("TODO: cacos"); - case 0x8ecae294: FUNC_LOG_ERROR("TODO: nextafter"); - case 0x8f2bcdb5: FUNC_LOG_ERROR("TODO: _logf4"); - case 0x8f96319e: FUNC_LOG_ERROR("TODO: log10l"); - case 0x8fb7bac7: FUNC_LOG_ERROR("TODO: _sqrtf4fast"); - case 0x904e646b: FUNC_LOG_ERROR("TODO: cargl"); - case 0x90f0242f: FUNC_LOG_ERROR("TODO: _f_sinf"); - case 0x9110708a: FUNC_LOG_ERROR("TODO: modfl"); - case 0x91cdfdb0: FUNC_LOG_ERROR("TODO: asinf4fast"); - case 0x9232baea: FUNC_LOG_ERROR("TODO: _FDtest"); - case 0x9245e01b: FUNC_LOG_ERROR("TODO: _divf4"); - case 0x9379e36e: FUNC_LOG_ERROR("TODO: tanf"); - case 0x938fb946: FUNC_LOG_ERROR("TODO: _tanf4fast"); - case 0x947ae18e: FUNC_LOG_ERROR("TODO: _LHypot"); - case 0x9558ed08: FUNC_LOG_ERROR("TODO: lrintf"); - case 0x95dfecb1: FUNC_LOG_ERROR("TODO: _FCsubcc"); - case 0x961688d1: FUNC_LOG_ERROR("TODO: f_nearbyintf"); - case 0x9616e336: FUNC_LOG_ERROR("TODO: _FHypot"); - case 0x964ac044: FUNC_LOG_ERROR("TODO: creall"); - case 0x96d1b95e: FUNC_LOG_ERROR("TODO: log2f4fast"); - case 0x9700d9cd: FUNC_LOG_ERROR("TODO: clogf"); - case 0x970a3432: FUNC_LOG_ERROR("TODO: cacosh"); - case 0x99a6c261: FUNC_LOG_ERROR("TODO: catanf"); - case 0x99c228fc: FUNC_LOG_ERROR("TODO: roundl"); - case 0x9a81e583: FUNC_LOG_ERROR("TODO: fmodf"); - case 0x9af30eaf: FUNC_LOG_ERROR("TODO: casin"); - case 0x9e289062: FUNC_LOG_ERROR("TODO: _f_ceilf"); - case 0x9e3ada21: FUNC_LOG_ERROR("TODO: logl"); - case 0x9e8130b6: FUNC_LOG_ERROR("TODO: ccos"); - case 0x9f03dd3e: FUNC_LOG_ERROR("TODO: lgammaf"); - case 0x9f0efc6e: FUNC_LOG_ERROR("TODO: exp2l"); - case 0x9f46f5a4: FUNC_LOG_ERROR("TODO: tgammaf"); - case 0x9f65bd34: FUNC_LOG_ERROR("TODO: fdimf4"); - case 0x9f78f052: FUNC_LOG_ERROR("TODO: cos"); - case 0x9fded78a: FUNC_LOG_ERROR("TODO: _acosf4"); - case 0xa0160c30: FUNC_LOG_ERROR("TODO: _copysignf4"); - case 0xa20827a8: FUNC_LOG_ERROR("TODO: ctanl"); - case 0xa2c81938: FUNC_LOG_ERROR("TODO: _LSin"); - case 0xa4578433: FUNC_LOG_ERROR("TODO: fmin"); - case 0xa46a70a1: FUNC_LOG_ERROR("TODO: atanhl"); - case 0xa4ca5cf2: FUNC_LOG_ERROR("TODO: llroundf"); - case 0xa56557b6: FUNC_LOG_ERROR("TODO: catan"); - case 0xa5d0b260: FUNC_LOG_ERROR("TODO: acoshl"); - case 0xa713f8cf: FUNC_LOG_ERROR("TODO: modf"); - case 0xa7658186: FUNC_LOG_ERROR("TODO: log1pf4"); - case 0xa823836b: FUNC_LOG_ERROR("TODO: ilogb"); - case 0xa8c16038: FUNC_LOG_ERROR("TODO: _FDsign"); - case 0xa8d180e8: FUNC_LOG_ERROR("TODO: _Cbuild"); - case 0xa92bcc85: FUNC_LOG_ERROR("TODO: cabs"); - case 0xa9e039c4: FUNC_LOG_ERROR("TODO: erfcf"); - case 0xaaa270dc: FUNC_LOG_ERROR("TODO: _LCdivcr"); - case 0xab377381: FUNC_LOG_ERROR("TODO: log2f"); - case 0xabdccc7a: FUNC_LOG_ERROR("TODO: f_atan2f"); - case 0xacca2f83: FUNC_LOG_ERROR("TODO: copysignf"); - case 0xad17e787: FUNC_LOG_ERROR("TODO: _Dint"); - case 0xad3a093d: FUNC_LOG_ERROR("TODO: _LCosh"); - case 0xad5d3e57: FUNC_LOG_ERROR("TODO: _FLgamma"); - case 0xaddce673: FUNC_LOG_ERROR("TODO: erfcl"); - case 0xafa13040: FUNC_LOG_ERROR("TODO: f_llrintf"); - case 0xafcfdad7: FUNC_LOG_ERROR("TODO: _Lgamma"); - case 0xafd9a625: FUNC_LOG_ERROR("TODO: cimagf"); - case 0xb0fa1592: FUNC_LOG_ERROR("TODO: clog10l"); - case 0xb24bd2f8: FUNC_LOG_ERROR("TODO: logbf"); - case 0xb348c5c2: FUNC_LOG_ERROR("TODO: _LLgamma"); - case 0xb412a8dc: FUNC_LOG_ERROR("TODO: _LDint"); - case 0xb4ef29d5: FUNC_LOG_ERROR("TODO: f_floorf"); - case 0xb4f4513e: FUNC_LOG_ERROR("TODO: _Tgamma"); - case 0xb54cc9a1: FUNC_LOG_ERROR("TODO: f_sinf"); - case 0xb5961d4e: FUNC_LOG_ERROR("TODO: _sincosf4fast"); - case 0xb598a495: FUNC_LOG_ERROR("TODO: fmodl"); - case 0xb5e28191: FUNC_LOG_ERROR("TODO: _FSin"); - case 0xb7696143: FUNC_LOG_ERROR("TODO: nextafterf"); - case 0xb79012ba: FUNC_LOG_ERROR("TODO: modff"); - case 0xb89863bc: FUNC_LOG_ERROR("TODO: _rsqrtf4fast"); - case 0xb8aa984e: FUNC_LOG_ERROR("TODO: _expf4"); - case 0xb94b9d13: FUNC_LOG_ERROR("TODO: _Dtest"); - case 0xb9d2ad22: FUNC_LOG_ERROR("TODO: remquol"); - case 0xba136594: FUNC_LOG_ERROR("TODO: csinf"); - case 0xba84eab5: FUNC_LOG_ERROR("TODO: coshl"); - case 0xbaf11866: FUNC_LOG_ERROR("TODO: ceilf"); - case 0xbb165807: FUNC_LOG_ERROR("TODO: expm1f"); - case 0xbb208b20: FUNC_LOG_ERROR("TODO: cbrtf4fast"); - case 0xbb761c89: FUNC_LOG_ERROR("TODO: remquof"); - case 0xbbaa300b: FUNC_LOG_ERROR("TODO: f_log1pf"); - case 0xbbf7354e: FUNC_LOG_ERROR("TODO: fegetexceptflag"); - case 0xbd7410d9: FUNC_LOG_ERROR("TODO: recipf4"); - case 0xbd8bb75c: FUNC_LOG_ERROR("TODO: asinhf"); - case 0xbf23f2e7: FUNC_LOG_ERROR("TODO: cprojl"); - case 0xbfda6837: FUNC_LOG_ERROR("TODO: _f_log10f"); - case 0xc0609820: FUNC_LOG_ERROR("TODO: nearbyintf"); - case 0xc0bcf25e: FUNC_LOG_ERROR("TODO: _logf4fast"); - case 0xc357b33a: FUNC_LOG_ERROR("TODO: frexpl"); - case 0xc406dd09: FUNC_LOG_ERROR("TODO: cbrtf4"); - case 0xc41f01db: FUNC_LOG_ERROR("TODO: fminf4"); - case 0xc477c0f6: FUNC_LOG_ERROR("TODO: f_lroundf"); - case 0xc4cccd1f: FUNC_LOG_ERROR("TODO: modff4"); - case 0xc7369fce: FUNC_LOG_ERROR("TODO: _Atan"); - case 0xc78ac9d0: FUNC_LOG_ERROR("TODO: scalbn"); - case 0xc7b45a19: FUNC_LOG_ERROR("TODO: _LFpcomp"); - case 0xc7f1d407: FUNC_LOG_ERROR("TODO: fmal"); - case 0xc7fb73d6: FUNC_LOG_ERROR("TODO: f_lrintf"); - case 0xc8910002: FUNC_LOG_ERROR("TODO: ilogbl"); - case 0xc8dd9279: FUNC_LOG_ERROR("TODO: expm1"); - case 0xc90f4bbc: FUNC_LOG_ERROR("TODO: _atan2f4"); - case 0xc9481758: FUNC_LOG_ERROR("TODO: _tanf4"); - case 0xc94fcc63: FUNC_LOG_ERROR("TODO: cbrtl"); - case 0xc977e1ea: FUNC_LOG_ERROR("TODO: fetestexcept"); - case 0xc984bf53: FUNC_LOG_ERROR("TODO: roundf"); - case 0xc9c536ce: FUNC_LOG_ERROR("TODO: _ldexpf4"); - case 0xca239640: FUNC_LOG_ERROR("TODO: fmodf4"); - case 0xca463458: FUNC_LOG_ERROR("TODO: _Log"); - case 0xcaaf7ae7: FUNC_LOG_ERROR("TODO: cprojf"); - case 0xcac167a5: FUNC_LOG_ERROR("TODO: _Cmulcc"); - case 0xcb6599c0: FUNC_LOG_ERROR("TODO: exp2f"); - case 0xcb6a147e: FUNC_LOG_ERROR("TODO: _cosf4fast"); - case 0xcbdf9afb: FUNC_LOG_ERROR("TODO: _log10f4fast"); - case 0xccc66f11: FUNC_LOG_ERROR("TODO: _FSinh"); - case 0xce91ff18: FUNC_LOG_ERROR("TODO: nanf"); - case 0xcfee82d8: FUNC_LOG_ERROR("TODO: _remainderf4"); - case 0xd0fd3ca8: FUNC_LOG_ERROR("TODO: _hypotf4"); - case 0xd125b89e: FUNC_LOG_ERROR("TODO: conjf"); - case 0xd1a3574c: FUNC_LOG_ERROR("TODO: clog10f"); - case 0xd231e30a: FUNC_LOG_ERROR("TODO: ldexpl"); - case 0xd28ef6dd: FUNC_LOG_ERROR("TODO: _Hypot"); - case 0xd2a666c9: FUNC_LOG_ERROR("TODO: ctanh"); - case 0xd3a346a8: FUNC_LOG_ERROR("TODO: tanl"); - case 0xd40f3f2c: FUNC_LOG_ERROR("TODO: erff"); - case 0xd42904b7: FUNC_LOG_ERROR("TODO: fabsl"); - case 0xd477852d: FUNC_LOG_ERROR("TODO: logf"); - case 0xd48eaae1: FUNC_LOG_ERROR("TODO: scalblnl"); - case 0xd4f37b9d: FUNC_LOG_ERROR("TODO: tanhf"); - case 0xd50277ad: FUNC_LOG_ERROR("TODO: tan"); - case 0xd54039cb: FUNC_LOG_ERROR("TODO: fegettrapenable"); - case 0xd5adc4b2: FUNC_LOG_ERROR("TODO: cpowl"); - case 0xd5d38552: FUNC_LOG_ERROR("TODO: _LCaddcc"); - case 0xd612fa16: FUNC_LOG_ERROR("TODO: _Sinh"); - case 0xd70df92a: FUNC_LOG_ERROR("TODO: _FCaddcr"); - case 0xd7653782: FUNC_LOG_ERROR("TODO: sinhf"); - case 0xd76a16da: FUNC_LOG_ERROR("TODO: _fmaf4"); - case 0xd8270894: FUNC_LOG_ERROR("TODO: fdim"); - case 0xd8c4096d: FUNC_LOG_ERROR("TODO: atan2f4"); - case 0xd8d157f5: FUNC_LOG_ERROR("TODO: f_expf"); - case 0xd8f79f4c: FUNC_LOG_ERROR("TODO: log10"); - case 0xd97852b7: FUNC_LOG_ERROR("TODO: sinl"); - case 0xd97ce5d4: FUNC_LOG_ERROR("TODO: fesetround"); - case 0xda217d1f: FUNC_LOG_ERROR("TODO: atanl"); - case 0xda31fc5d: FUNC_LOG_ERROR("TODO: _FFpcomp"); - case 0xdc14974c: FUNC_LOG_ERROR("TODO: fmaf4"); - case 0xdc151707: FUNC_LOG_ERROR("TODO: _f_log2f"); - case 0xdd8660d2: FUNC_LOG_ERROR("TODO: atan2f4fast"); - case 0xdd92118e: FUNC_LOG_ERROR("TODO: ceill"); - case 0xdddabb32: FUNC_LOG_ERROR("TODO: remainderf"); - case 0xde7833f2: FUNC_LOG_ERROR("TODO: _log2f4fast"); - case 0xdece76a6: FUNC_LOG_ERROR("TODO: acosf"); - case 0xdfd41734: FUNC_LOG_ERROR("TODO: _Exp"); - case 0xdffb4e3c: FUNC_LOG_ERROR("TODO: casinl"); - case 0xe1288c47: FUNC_LOG_ERROR("TODO: atanhf"); - case 0xe1c71b05: FUNC_LOG_ERROR("TODO: ccoshl"); - case 0xe2b596ec: FUNC_LOG_ERROR("TODO: ccosf"); - case 0xe2de89e6: FUNC_LOG_ERROR("TODO: csqrtf"); - case 0xe2f1d4b2: FUNC_LOG_ERROR("TODO: tanh"); - case 0xe31cc0d3: FUNC_LOG_ERROR("TODO: _ilogbf4"); - case 0xe3e379b8: FUNC_LOG_ERROR("TODO: _expf4fast"); - case 0xe584836c: FUNC_LOG_ERROR("TODO: _LPoly"); - case 0xe58fc9b5: FUNC_LOG_ERROR("TODO: erfl"); - case 0xe5a0be9f: FUNC_LOG_ERROR("TODO: _powf4fast"); - case 0xe5d2293f: FUNC_LOG_ERROR("TODO: _Force_raise"); - case 0xe5ea65e8: FUNC_LOG_ERROR("TODO: feraiseexcept"); - case 0xe6c1ff41: FUNC_LOG_ERROR("TODO: llrint"); - case 0xe769e5cf: FUNC_LOG_ERROR("TODO: fmod"); - case 0xe8fcf1f8: FUNC_LOG_ERROR("TODO: acosf4fast"); - case 0xe913a166: FUNC_LOG_ERROR("TODO: logf4fast"); - case 0xe92f3fb8: FUNC_LOG_ERROR("TODO: _f_fmaf"); - case 0xe93abfca: FUNC_LOG_ERROR("TODO: ctan"); - case 0xe9ac8223: FUNC_LOG_ERROR("TODO: _LCmulcr"); - case 0xe9f501df: FUNC_LOG_ERROR("TODO: crealf"); - case 0xea1e83e3: FUNC_LOG_ERROR("TODO: f_logf"); - case 0xeac62795: FUNC_LOG_ERROR("TODO: _Cdivcc"); - case 0xeac7ca2c: FUNC_LOG_ERROR("TODO: ceilf4"); - case 0xebb4e08a: FUNC_LOG_ERROR("TODO: hypotf"); - case 0xec43b983: FUNC_LOG_ERROR("TODO: _f_sqrtf"); - case 0xec7da0c8: FUNC_LOG_ERROR("TODO: _atan2f4fast"); - case 0xed05c265: FUNC_LOG_ERROR("TODO: sqrtf4"); - case 0xed9d1ac5: FUNC_LOG_ERROR("TODO: f_tanf"); - case 0xeda86c48: FUNC_LOG_ERROR("TODO: copysignf4"); - case 0xee0db701: FUNC_LOG_ERROR("TODO: _Csubcr"); - case 0xee204ac6: FUNC_LOG_ERROR("TODO: f_ceilf"); - case 0xee303936: FUNC_LOG_ERROR("TODO: _Dsign"); - case 0xeed82401: FUNC_LOG_ERROR("TODO: _f_logf"); - case 0xf0947035: FUNC_LOG_ERROR("TODO: ctanhf"); - case 0xf0ab77c1: FUNC_LOG_ERROR("TODO: ccoshf"); - case 0xf16568af: FUNC_LOG_ERROR("TODO: _FAtan"); - case 0xf19c5e94: FUNC_LOG_ERROR("TODO: sincosf4"); - case 0xf1aaa2f8: FUNC_LOG_ERROR("TODO: conj"); - case 0xf3bd7d08: FUNC_LOG_ERROR("TODO: _cbrtf4fast"); - case 0xf3ec0258: FUNC_LOG_ERROR("TODO: round"); - case 0xf4ad6ea8: FUNC_LOG_ERROR("TODO: ldexp"); - case 0xf537d837: FUNC_LOG_ERROR("TODO: _truncf4"); - case 0xf5cd1e19: FUNC_LOG_ERROR("TODO: cosf4"); - case 0xf7844153: FUNC_LOG_ERROR("TODO: _f_fmaxf"); - case 0xf83a372f: FUNC_LOG_ERROR("TODO: f_fmaf"); - case 0xf95b7769: FUNC_LOG_ERROR("TODO: powf4fast"); - case 0xf99da2fc: FUNC_LOG_ERROR("TODO: fabsf4"); - case 0xfa28434b: FUNC_LOG_ERROR("TODO: log2l"); - case 0xfa765d42: FUNC_LOG_ERROR("TODO: _Cdivcr"); - case 0xfa97afbf: FUNC_LOG_ERROR("TODO: feupdateenv"); - case 0xfae9e727: FUNC_LOG_ERROR("TODO: _f_copysignf"); - case 0xfb6e6213: FUNC_LOG_ERROR("TODO: log1pf4fast"); - case 0xfb932a56: FUNC_LOG_ERROR("TODO: atan2f"); - case 0xfbb4047a: FUNC_LOG_ERROR("TODO: lroundf"); - case 0xfbe88922: FUNC_LOG_ERROR("TODO: _FErfc"); - case 0xfcedabc3: FUNC_LOG_ERROR("TODO: _fmodf4"); - case 0xfcf08193: FUNC_LOG_ERROR("TODO: expf"); - case 0xfdec16e1: FUNC_LOG_ERROR("TODO: cacoshl"); - case 0xfe23dbe9: FUNC_LOG_ERROR("TODO: _log2f4"); - case 0xff036800: FUNC_LOG_ERROR("TODO: cpowf"); - case 0xfffe79bf: FUNC_LOG_ERROR("TODO: _LCmulcc"); - case 0x06a840f5: FUNC_LOG_ERROR("TODO: sys_dbg_set_stacksize_ppu_exception_handler"); - case 0x08ef08a9: FUNC_LOG_ERROR("TODO: sys_dbg_get_spu_thread_group_ids"); - case 0x113b0bea: FUNC_LOG_ERROR("TODO: sys_dbg_get_ppu_thread_ids"); - case 0x1860f909: FUNC_LOG_ERROR("TODO: sys_dbg_get_spu_thread_ids"); - case 0x22916f45: FUNC_LOG_ERROR("TODO: sys_dbg_register_ppu_exception_handler"); - case 0x24a3d413: FUNC_LOG_ERROR("TODO: sys_dbg_mat_set_condition"); - case 0x266c2bd3: FUNC_LOG_ERROR("TODO: sys_dbg_read_spu_thread_context2"); - case 0x3147c6ca: FUNC_LOG_ERROR("TODO: sys_dbg_enable_floating_point_enabled_exception"); - case 0x381ae33e: FUNC_LOG_ERROR("TODO: sys_dbg_get_event_queue_information"); - case 0x3e5eed36: FUNC_LOG_ERROR("TODO: sys_dbg_get_spu_thread_name"); - case 0x4b55f456: FUNC_LOG_ERROR("TODO: sys_dbg_get_ppu_thread_name"); - case 0x4ded9f6c: FUNC_LOG_ERROR("TODO: sys_dbg_signal_to_ppu_exception_handler"); - case 0x50453aa8: FUNC_LOG_ERROR("TODO: sys_dbg_get_mutex_information"); - case 0x580f8203: FUNC_LOG_ERROR("TODO: sys_dbg_vm_get_page_information"); - case 0x590a276e: FUNC_LOG_ERROR("TODO: sys_dbg_mat_get_condition"); - case 0x63bd413e: FUNC_LOG_ERROR("TODO: sys_dbg_get_cond_information"); - case 0x6b413178: FUNC_LOG_ERROR("TODO: sys_dbg_get_ppu_thread_status"); - case 0x7bdadb01: FUNC_LOG_ERROR("TODO: sys_dbg_get_lwcond_information"); - case 0x9794bb53: FUNC_LOG_ERROR("TODO: sys_dbg_get_rwlock_information"); - case 0x9ddb9dc3: FUNC_LOG_ERROR("TODO: sys_dbg_get_spu_thread_group_status"); - case 0xa2d6cbd2: FUNC_LOG_ERROR("TODO: sys_dbg_get_semaphore_information"); - case 0xab475d53: FUNC_LOG_ERROR("TODO: sys_dbg_set_mask_to_ppu_exception_handler"); - case 0xb9da87d3: FUNC_LOG_ERROR("TODO: sys_dbg_get_coredump_params"); - case 0xbb0ae221: FUNC_LOG_ERROR("TODO: sys_dbg_get_address_from_dabr"); - case 0xbd69e584: FUNC_LOG_ERROR("TODO: sys_dbg_get_spu_thread_group_name"); - case 0xc0eb9266: FUNC_LOG_ERROR("TODO: sys_dbg_finalize_ppu_exception_handler"); - case 0xc21ee635: FUNC_LOG_ERROR("TODO: sys_dbg_read_spu_thread_context"); - case 0xc353353a: FUNC_LOG_ERROR("TODO: sys_dbg_initialize_ppu_exception_handler"); - case 0xc5eef17f: FUNC_LOG_ERROR("TODO: sys_dbg_read_ppu_thread_context"); - case 0xc6d7ec13: FUNC_LOG_ERROR("TODO: sys_dbg_unregister_ppu_exception_handler"); - case 0xcb377e36: FUNC_LOG_ERROR("TODO: sys_dbg_get_lwmutex_information"); - case 0xd830062a: FUNC_LOG_ERROR("TODO: sys_dbg_signal_to_coredump_handler"); - case 0xdb14b37b: FUNC_LOG_ERROR("TODO: sys_dbg_set_address_to_dabr"); - case 0xdf856979: FUNC_LOG_ERROR("TODO: sys_dbg_get_event_flag_information"); - case 0xf254768c: FUNC_LOG_ERROR("TODO: sys_dbg_disable_floating_point_enabled_exception"); - case 0x051ee3ee: FUNC_LOG_ERROR("TODO: socketpoll"); - case 0x05bd4438: FUNC_LOG_ERROR("TODO: sys_net_get_udpp2p_test_param"); - case 0x10b81ed6: FUNC_LOG_ERROR("TODO: sys_net_set_udpp2p_test_param"); - case 0x139a9e9b: FUNC_LOG_ERROR("TODO: sys_net_initialize_network_ex"); - case 0x13efe7f5: FUNC_LOG_ERROR("TODO: getsockname"); - case 0x1d14d6e4: FUNC_LOG_ERROR("TODO: sys_net_get_lib_name_server"); - case 0x1f953b9f: FUNC_LOG_ERROR("TODO: recvfrom"); - case 0x27fb339d: FUNC_LOG_ERROR("TODO: sys_net_if_ctl"); - case 0x28e208bb: FUNC_LOG_ERROR("TODO: listen"); - case 0x368823c0: FUNC_LOG_ERROR("TODO: sys_net_get_netemu_test_param"); - case 0x3b27c780: FUNC_LOG_ERROR("TODO: sys_net_get_sockinfo"); - case 0x3f09e20a: FUNC_LOG_ERROR("TODO: socketselect"); - case 0x44328aa2: FUNC_LOG_ERROR("TODO: sys_net_close_dump"); - case 0x4ab0b9b9: FUNC_LOG_ERROR("TODO: sys_net_set_test_param"); - case 0x506ad863: FUNC_LOG_ERROR("TODO: inet_network"); - case 0x5420e419: FUNC_LOG_ERROR("TODO: sys_net_show_nameserver"); - case 0x566893ce: FUNC_LOG_ERROR("TODO: inet_lnaof"); - case 0x5a045bd1: FUNC_LOG_ERROR("TODO: getsockopt"); - case 0x6005cde1: FUNC_LOG_ERROR("TODO: _sys_net_errno_loc"); - case 0x64f66d35: FUNC_LOG_ERROR("TODO: connect"); - case 0x6db6e8cd: FUNC_LOG_ERROR("TODO: socketclose"); - case 0x71f4c717: FUNC_LOG_ERROR("TODO: gethostbyname"); - case 0x7687d48c: FUNC_LOG_ERROR("TODO: sys_net_set_resolver_configurations"); - case 0x79b61646: FUNC_LOG_ERROR("TODO: sys_net_show_route"); - case 0x858a930b: FUNC_LOG_ERROR("TODO: inet_ntoa"); - case 0x88f03575: FUNC_LOG_ERROR("TODO: setsockopt"); - case 0x89c9917c: FUNC_LOG_ERROR("TODO: sys_net_read_dump"); - case 0x8af3825e: FUNC_LOG_ERROR("TODO: inet_pton"); - case 0x8ccf05ed: FUNC_LOG_ERROR("TODO: sys_net_abort_resolver"); - case 0x8d1b77fb: FUNC_LOG_ERROR("TODO: sys_net_abort_socket"); - case 0x9647570b: FUNC_LOG_ERROR("TODO: sendto"); - case 0x9a318259: FUNC_LOG_ERROR("TODO: sys_net_set_lib_name_server"); - case 0x9c056962: FUNC_LOG_ERROR("TODO: socket"); - case 0xa50777c6: FUNC_LOG_ERROR("TODO: shutdown"); - case 0xa5a86557: FUNC_LOG_ERROR("TODO: sys_net_get_test_param"); - case 0xa765d029: FUNC_LOG_ERROR("TODO: sys_net_get_sockinfo_ex"); - case 0xa9a079e0: FUNC_LOG_ERROR("TODO: inet_aton"); - case 0xab447704: FUNC_LOG_ERROR("TODO: sys_net_open_dump"); - case 0xad09481b: FUNC_LOG_ERROR("TODO: sendmsg"); - case 0xb0a59804: FUNC_LOG_ERROR("TODO: bind"); - case 0xb4152c74: FUNC_LOG_ERROR("TODO: inet_makeaddr"); - case 0xb48636c4: FUNC_LOG_ERROR("TODO: sys_net_show_ifconfig"); - case 0xb68d5625: FUNC_LOG_ERROR("TODO: sys_net_finalize_network"); - case 0xc9157d30: FUNC_LOG_ERROR("TODO: _sys_net_h_errno_loc"); - case 0xc94f6939: FUNC_LOG_ERROR("TODO: accept"); - case 0xc98a3146: FUNC_LOG_ERROR("TODO: inet_ntop"); - case 0xc9d09c34: FUNC_LOG_ERROR("TODO: recvmsg"); - case 0xdabbc2c0: FUNC_LOG_ERROR("TODO: inet_addr"); - case 0xdc751b40: FUNC_LOG_ERROR("TODO: send"); - case 0xe2434507: FUNC_LOG_ERROR("TODO: sys_net_set_netemu_test_param"); - case 0xe39a62a7: FUNC_LOG_ERROR("TODO: inet_netof"); - case 0xf7ac8941: FUNC_LOG_ERROR("TODO: gethostbyaddr"); - case 0xf9ec2db6: FUNC_LOG_ERROR("TODO: getpeername"); - case 0xfba04f37: FUNC_LOG_ERROR("TODO: recv"); - case 0xfdb8f926: FUNC_LOG_ERROR("TODO: sys_net_free_thread_context"); - case 0x0341bb97: FUNC_LOG_ERROR("TODO: sys_prx_get_module_id_by_address"); - case 0x04e83d2c: FUNC_LOG_ERROR("TODO: _sys_strncmp"); - case 0x052d29a6: FUNC_LOG_ERROR("TODO: _sys_strcat"); - case 0x05c65656: FUNC_LOG_ERROR("TODO: sys_mempool_try_allocate_block"); - case 0x0618936b: FUNC_LOG_ERROR("TODO: _sys_vsnprintf"); - case 0x06574237: FUNC_LOG_ERROR("TODO: _sys_snprintf"); - case 0x1573dc3f: FUNC_LOG_ERROR("TODO: sys_lwmutex_lock"); - case 0x191f0c4a: FUNC_LOG_ERROR("TODO: _sys_strrchr"); - case 0x1ae10b92: FUNC_LOG_ERROR("TODO: _sys_spu_printf_attach_thread"); - case 0x1bc200f4: FUNC_LOG_ERROR("TODO: sys_lwmutex_unlock"); - case 0x1c9a942c: FUNC_LOG_ERROR("TODO: sys_lwcond_destroy"); - case 0x1ca525a2: FUNC_LOG_ERROR("TODO: _sys_strncasecmp"); - case 0x1ed454ce: FUNC_LOG_ERROR("TODO: sys_spu_elf_get_information"); - case 0x24a1ea07: FUNC_LOG_ERROR("TODO: sys_ppu_thread_create"); - case 0x25596f51: FUNC_LOG_ERROR("TODO: sys_mempool_get_count"); - case 0x26090058: FUNC_LOG_ERROR("TODO: sys_prx_load_module"); - case 0x27427742: FUNC_LOG_ERROR("TODO: _sys_memmove"); - case 0x2a6d9d51: FUNC_LOG_ERROR("TODO: sys_lwcond_wait"); - case 0x2c847572: FUNC_LOG_ERROR("TODO: _sys_process_atexitspawn"); - case 0x2d36462b: FUNC_LOG_ERROR("TODO: _sys_strlen"); - case 0x2f85c0ef: FUNC_LOG_ERROR("TODO: sys_lwmutex_create"); - case 0x3172759d: FUNC_LOG_ERROR("TODO: sys_game_get_temperature"); - case 0x318f17e1: FUNC_LOG_ERROR("TODO: _sys_memalign"); - case 0x350d454e: FUNC_LOG_ERROR("TODO: sys_ppu_thread_get_id"); - case 0x35168520: FUNC_LOG_ERROR("TODO: _sys_heap_malloc"); - case 0x3bd53c7b: FUNC_LOG_ERROR("TODO: _sys_memchr"); - case 0x3dd4a957: FUNC_LOG_ERROR("TODO: sys_ppu_thread_register_atexit"); - case 0x409ad939: FUNC_LOG_ERROR("TODO: sys_mmapper_free_memory"); - case 0x42b23552: FUNC_LOG_ERROR("TODO: sys_prx_register_library"); - case 0x44265c08: FUNC_LOG_ERROR("TODO: _sys_heap_memalign"); - case 0x459b4393: FUNC_LOG_ERROR("TODO: _sys_strcmp"); - case 0x45fe2fce: FUNC_LOG_ERROR("TODO: _sys_spu_printf_initialize"); - case 0x4643ba6e: FUNC_LOG_ERROR("TODO: sys_mmapper_unmap_memory"); - case 0x4a071d98: FUNC_LOG_ERROR("TODO: sys_interrupt_thread_disestablish"); - case 0x4b2f301a: FUNC_LOG_ERROR("TODO: _sys_tolower"); - case 0x5267cb35: FUNC_LOG_ERROR("TODO: sys_spinlock_unlock"); - case 0x52aadadf: FUNC_LOG_ERROR("TODO: sys_lwcond_signal_to"); - case 0x5fdfb2fe: FUNC_LOG_ERROR("TODO: _sys_spu_printf_detach_group"); - case 0x608212fc: FUNC_LOG_ERROR("TODO: sys_mempool_free_block"); - case 0x620e35a7: FUNC_LOG_ERROR("TODO: sys_game_get_system_sw_version"); - case 0x67f9fedb: FUNC_LOG_ERROR("TODO: sys_game_process_exitspawn2"); - case 0x68b9b011: FUNC_LOG_ERROR("TODO: _sys_memset"); - case 0x6bf66ea7: FUNC_LOG_ERROR("TODO: _sys_memcpy"); - case 0x6e05231d: FUNC_LOG_ERROR("TODO: sys_game_watchdog_stop"); - case 0x70258515: FUNC_LOG_ERROR("TODO: sys_mmapper_allocate_memory_from_container"); - case 0x71a8472a: FUNC_LOG_ERROR("TODO: sys_get_random_number"); - case 0x722a0254: FUNC_LOG_ERROR("TODO: sys_spinlock_trylock"); - case 0x74311398: FUNC_LOG_ERROR("TODO: sys_prx_get_my_module_id"); - case 0x744680a2: FUNC_LOG_ERROR("TODO: sys_initialize_tls"); - case 0x7498887b: FUNC_LOG_ERROR("TODO: _sys_strchr"); - case 0x791b9219: FUNC_LOG_ERROR("TODO: _sys_vsprintf"); - case 0x80fb0c19: FUNC_LOG_ERROR("TODO: sys_prx_stop_module"); - case 0x8461e528: FUNC_LOG_ERROR("TODO: sys_time_get_system_time"); - case 0x84bb6774: FUNC_LOG_ERROR("TODO: sys_prx_get_module_info"); - case 0x893305fa: FUNC_LOG_ERROR("TODO: sys_raw_spu_load"); - case 0x8985b5b6: FUNC_LOG_ERROR("TODO: _sys_heap_stats"); - case 0x8a2f159b: FUNC_LOG_ERROR("TODO: console_getc"); - case 0x8a561d92: FUNC_LOG_ERROR("TODO: _sys_heap_free"); - case 0x8bb03ab8: FUNC_LOG_ERROR("TODO: sys_game_board_storage_write"); - case 0x8c2bb498: FUNC_LOG_ERROR("TODO: sys_spinlock_initialize"); - case 0x96328741: FUNC_LOG_ERROR("TODO: _sys_process_at_Exitspawn"); - case 0x996f7cf8: FUNC_LOG_ERROR("TODO: _sys_strncat"); - case 0x99c88692: FUNC_LOG_ERROR("TODO: _sys_strcpy"); - case 0x9d3c0f81: FUNC_LOG_ERROR("TODO: sys_mempool_destroy"); - case 0x9e0623b5: FUNC_LOG_ERROR("TODO: sys_game_watchdog_start"); - case 0x9f04f7af: FUNC_LOG_ERROR("TODO: _sys_printf"); - case 0x9f18429d: FUNC_LOG_ERROR("TODO: sys_prx_start_module"); - case 0x9f950780: FUNC_LOG_ERROR("TODO: sys_game_get_rtc_status"); - case 0xa146a143: FUNC_LOG_ERROR("TODO: sys_mempool_allocate_block"); - case 0xa1f9eafe: FUNC_LOG_ERROR("TODO: _sys_sprintf"); - case 0xa285139d: FUNC_LOG_ERROR("TODO: sys_spinlock_lock"); - case 0xa2c7ba64: FUNC_LOG_ERROR("TODO: sys_prx_exitspawn_with_level"); - case 0xa330ad84: FUNC_LOG_ERROR("TODO: sys_prx_load_module_on_memcontainer_by_fd"); - case 0xa3e3be68: FUNC_LOG_ERROR("TODO: sys_ppu_thread_once"); - case 0xa5d06bf0: FUNC_LOG_ERROR("TODO: sys_prx_get_module_list"); - case 0xaa6d9bff: FUNC_LOG_ERROR("TODO: sys_prx_load_module_on_memcontainer"); - case 0xac6fc404: FUNC_LOG_ERROR("TODO: sys_ppu_thread_unregister_atexit"); - case 0xacad8fb6: FUNC_LOG_ERROR("TODO: sys_game_watchdog_clear"); - case 0xaeb78725: FUNC_LOG_ERROR("TODO: sys_lwmutex_trylock"); - case 0xaede4b03: FUNC_LOG_ERROR("TODO: _sys_heap_delete_heap"); - case 0xaff080a4: FUNC_LOG_ERROR("TODO: sys_ppu_thread_exit"); - case 0xb257540b: FUNC_LOG_ERROR("TODO: sys_mmapper_allocate_memory"); - case 0xb27c8ae7: FUNC_LOG_ERROR("TODO: sys_prx_load_module_list"); - case 0xb2fcf2c8: FUNC_LOG_ERROR("TODO: _sys_heap_create_heap"); - case 0xb3bbcf2a: FUNC_LOG_ERROR("TODO: _sys_spu_printf_detach_thread"); - case 0xb6369393: FUNC_LOG_ERROR("TODO: _sys_heap_get_total_free_size"); - case 0xb995662e: FUNC_LOG_ERROR("TODO: sys_raw_spu_image_load"); - case 0xb9bf1078: FUNC_LOG_ERROR("TODO: _sys_heap_alloc_heap_memory"); - case 0xbdb18f83: FUNC_LOG_ERROR("TODO: _sys_malloc"); - case 0xc3476d0c: FUNC_LOG_ERROR("TODO: sys_lwmutex_destroy"); - case 0xc4fd6121: FUNC_LOG_ERROR("TODO: _sys_qsort"); - case 0xca9a60bf: FUNC_LOG_ERROR("TODO: sys_mempool_create"); - case 0xd0ea47a7: FUNC_LOG_ERROR("TODO: sys_prx_unregister_library"); - case 0xd1ad4570: FUNC_LOG_ERROR("TODO: _sys_heap_get_mallinfo"); - case 0xd3039d4d: FUNC_LOG_ERROR("TODO: _sys_strncpy"); - case 0xda0eb71a: FUNC_LOG_ERROR("TODO: sys_lwcond_create"); - case 0xdb6b3250: FUNC_LOG_ERROR("TODO: sys_spu_elf_get_segments"); - case 0xdc578057: FUNC_LOG_ERROR("TODO: sys_mmapper_map_memory"); - case 0xdd0c1e09: FUNC_LOG_ERROR("TODO: _sys_spu_printf_attach_group"); - case 0xdd3b27ac: FUNC_LOG_ERROR("TODO: _sys_spu_printf_finalize"); - case 0xe0998dbf: FUNC_LOG_ERROR("TODO: sys_prx_get_module_id_by_name"); - case 0xe0da8efd: FUNC_LOG_ERROR("TODO: sys_spu_image_close"); - case 0xe66bac36: FUNC_LOG_ERROR("TODO: console_putc"); - case 0xe6f2c1e7: FUNC_LOG_ERROR("TODO: sys_process_exit"); - case 0xe76964f5: FUNC_LOG_ERROR("TODO: sys_game_board_storage_read"); - case 0xe7ef3a80: FUNC_LOG_ERROR("TODO: sys_prx_load_module_list_on_memcontainer"); - case 0xe9a1bd84: FUNC_LOG_ERROR("TODO: sys_lwcond_signal_all"); - case 0xebe5f72f: FUNC_LOG_ERROR("TODO: sys_spu_image_import"); - case 0xeef75113: FUNC_LOG_ERROR("TODO: _sys_toupper"); - case 0xef68c17c: FUNC_LOG_ERROR("TODO: sys_prx_load_module_by_fd"); - case 0xef87a695: FUNC_LOG_ERROR("TODO: sys_lwcond_signal"); - case 0xf0aece0d: FUNC_LOG_ERROR("TODO: sys_prx_unload_module"); - case 0xf57e1d6f: FUNC_LOG_ERROR("TODO: console_write"); - case 0xf7f7fb20: FUNC_LOG_ERROR("TODO: _sys_free"); - case 0xfa7f693d: FUNC_LOG_ERROR("TODO: _sys_vprintf"); - case 0xfb5db080: FUNC_LOG_ERROR("TODO: _sys_memcmp"); - case 0xfc52a7a9: FUNC_LOG_ERROR("TODO: sys_game_process_exitspawn"); + case 0x1529e506: return "cellAdecDecodeAu"; + case 0x487b613e: return "cellAdecStartSeq"; + case 0x7e4a4a49: return "cellAdecQueryAttr"; + case 0x847d2380: return "cellAdecClose"; + case 0x8b5551a4: return "cellAdecOpenEx"; + case 0x97ff2af1: return "cellAdecGetPcm"; + case 0xbd75f78b: return "cellAdecGetPcmItem"; + case 0xd00a6988: return "cellAdecOpen"; + case 0xe2ea549b: return "cellAdecEndSeq"; + case 0x006016da: return "cellAtracGetBitrate"; + case 0x06ddb53e: return "cellAtracSetSecondBuffer"; + case 0x0f9667b6: return "cellAtracGetChannel"; + case 0x2642d4cc: return "cellAtracCreateDecoderExt"; + case 0x2bfff084: return "cellAtracGetStreamDataInfo"; + case 0x46cfc013: return "cellAtracAddStreamData"; + case 0x4797d1ff: return "cellAtracGetNextSample"; + case 0x5f62d546: return "cellAtracGetMaxSample"; + case 0x66afc68e: return "cellAtracSetDataAndGetMemSize"; + case 0x761cb9be: return "cellAtracDeleteDecoder"; + case 0x7772eb2b: return "cellAtracResetPlayPosition"; + case 0x78ba5c41: return "cellAtracSetLoopNum"; + case 0x7b22e672: return "cellAtracGetNextDecodePosition"; + case 0x8eb0e65f: return "cellAtracDecode"; + case 0x99efe171: return "cellAtracIsSecondBufferNeeded"; + case 0x99fb73d1: return "cellAtracGetBufferInfoForResetting"; + case 0xab6b6dbf: return "cellAtracGetLoopInfo"; + case 0xb5c11938: return "cellAtracGetInternalErrorInfo"; + case 0xbe07f05e: return "cellAtracGetSecondBufferInfo"; + case 0xc9a95fcb: return "cellAtracGetVacantSize"; + case 0xcf01d5d4: return "cellAtracGetSoundInfo"; + case 0xdfab73aa: return "cellAtracGetRemainFrame"; + case 0xfa293e88: return "cellAtracCreateDecoder"; + case 0x04af134e: return "cellAudioCreateNotifyEventQueue"; + case 0x0b168f92: return "cellAudioInit"; + case 0x17d1213b: return "cellAudioSendAck"; + case 0x28bc1409: return "cellAudioUnsetPersonalDevice"; + case 0x2b9bd9ad: return "cellAudioRemoveNotifyEventQueueEx"; + case 0x31211f6b: return "cellAudioMiscSetAccessoryVolume"; + case 0x377e0cd9: return "cellAudioSetNotifyEventQueue"; + case 0x4109d08c: return "cellAudioGetPortTimestamp"; + case 0x4129fe2d: return "cellAudioPortClose"; + case 0x5676f81c: return "cellAudioSetPersonalDevice"; + case 0x56dfe179: return "cellAudioSetPortLevel"; + case 0x5b1e2c73: return "cellAudioPortStop"; + case 0x74a66af0: return "cellAudioGetPortConfig"; + case 0x832df17e: return "cellAudioAdd6chData"; + case 0x89be28f2: return "cellAudioPortStart"; + case 0x9e4b1db8: return "cellAudioAdd2chData"; + case 0xa4c9ba65: return "cellAudioCreateNotifyEventQueueEx"; + case 0xb56ef5a1: return "cellAudioSetNotifyEventQueueEx"; + case 0xca5ac370: return "cellAudioQuit"; + case 0xcd7bc431: return "cellAudioPortOpen"; + case 0xdab029aa: return "cellAudioAddData"; + case 0xe4046afe: return "cellAudioGetPortBlockTag"; + case 0xff3626fd: return "cellAudioRemoveNotifyEventQueue"; + case 0x2ab0d183: return "cellBGDLGetInfo2"; + case 0x4e9bb95b: return "cellBGDLGetInfo"; + case 0x74e57bdf: return "cellBGDLGetMode"; + case 0x7e134a90: return "cellBGDLSetMode"; + case 0x02f5ced0: return "cellCameraStop"; + case 0x0e63c444: return "cellCameraGetBufferInfoEx"; + case 0x10697d7f: return "cellCameraGetBufferInfo"; + case 0x21fc151f: return "cellCameraReadEx"; + case 0x2dea3e9b: return "cellCameraSetExtensionUnit"; + case 0x379c5dd6: return "cellCameraClose"; + case 0x3845d39b: return "cellCameraRead"; + case 0x44673f07: return "cellCameraRemoveNotifyEventQueue2"; + case 0x456dc4aa: return "cellCameraStart"; + case 0x532b8aaa: return "cellCameraGetAttribute"; + case 0x58bc5870: return "cellCameraGetType"; + case 0x5ad46570: return "cellCameraEnd"; + case 0x5d25f866: return "cellCameraOpenEx"; + case 0x5eebf24e: return "cellCameraIsStarted"; + case 0x602e2052: return "cellCameraGetDeviceGUID"; + case 0x61dfbe83: return "cellCameraPrepExtensionUnit"; + case 0x7dac520c: return "cellCameraGetBufferSize"; + case 0x7e063bbc: return "cellCameraIsAttached"; + case 0x81f83db9: return "cellCameraReset"; + case 0x85e1b8da: return "cellCameraOpen"; + case 0x8ca53dde: return "cellCameraIsAvailable"; + case 0x8cd56eee: return "cellCameraSetAttribute"; + case 0x9b98d258: return "cellCameraRemoveNotifyEventQueue"; + case 0xa7fd2f5b: return "cellCameraSetNotifyEventQueue2"; + case 0xb0647e5a: return "cellCameraSetNotifyEventQueue"; + case 0xb602e328: return "cellCameraGetExtensionUnit"; + case 0xbf47c5dd: return "cellCameraInit"; + case 0xe28b206b: return "cellCameraReadComplete"; + case 0xeb6f95fb: return "cellCameraCtrlExtensionUnit"; + case 0xfa160f24: return "cellCameraIsOpen"; + case 0x0f6ab57b: return "cellCelp8EncStart"; + case 0x2099f86e: return "cellCelp8EncEncodeFrame"; + case 0x29da1ea6: return "cellCelp8EncWaitForOutput"; + case 0x2d677e0c: return "cellCelp8EncQueryAttr"; + case 0x2eb6efee: return "cellCelp8EncOpen"; + case 0x48c5020d: return "cellCelp8EncGetAu"; + case 0xbbbc2c1c: return "cellCelp8EncEnd"; + case 0xcd48ad62: return "cellCelp8EncOpenEx"; + case 0xfd2566b4: return "cellCelp8EncClose"; + case 0x15ec0cca: return "cellCelpEncClose"; + case 0x3773692f: return "cellCelpEncGetAu"; + case 0x55dc23de: return "cellCelpEncStart"; + case 0x6b148570: return "cellCelpEncQueryAttr"; + case 0x77b3b29a: return "cellCelpEncOpen"; + case 0x81fe030c: return "cellCelpEncEncodeFrame"; + case 0x9b244272: return "cellCelpEncWaitForOutput"; + case 0x9eb084db: return "cellCelpEncOpenEx"; + case 0xf2b85dff: return "cellCelpEncEnd"; + case 0x002e8da2: return "cellDmuxPeekAuEx"; + case 0x02170d1a: return "cellDmuxQueryEsAttr"; + case 0x04e7499f: return "cellDmuxSetStream"; + case 0x05371c8d: return "cellDmuxDisableEs"; + case 0x11bc3a6c: return "cellDmuxOpen2"; + case 0x21d424f0: return "cellDmuxResetEs"; + case 0x24ea6474: return "cellDmuxReleaseAu"; + case 0x2750c5e0: return "cellDmuxPeekAu"; + case 0x2c9a5857: return "cellDmuxGetAuEx"; + case 0x3f76e3cd: return "cellDmuxQueryAttr2"; + case 0x42c716b5: return "cellDmuxGetAu"; + case 0x52911bcf: return "cellDmuxQueryEsAttr2"; + case 0x5d345de9: return "cellDmuxResetStream"; + case 0x68492de9: return "cellDmuxOpen"; + case 0x7b56dc3f: return "cellDmuxEnableEs"; + case 0x8c692521: return "cellDmuxClose"; + case 0xa2d4189b: return "cellDmuxQueryAttr"; + case 0xccff1284: return "cellDmuxResetStreamAndWaitDone"; + case 0xebb3b2bd: return "cellDmuxFlushEs"; + case 0xf6c23560: return "cellDmuxOpenEx"; + case 0x01036193: return "cellFiberPpuContextReturnToThread"; + case 0x081c98be: return "cellFiberPpuContextRunScheduler"; + case 0x0a25b6c8: return "cellFiberPpuContextEnterScheduler"; + case 0x0c44f441: return "cellFiberPpuYield"; + case 0x12b1acf0: return "cellFiberPpuRunFibers"; + case 0x1e7a247a: return "cellFiberPpuUtilWorkerControlRunFibers"; + case 0x31252ec3: return "_cellFiberPpuContextAttributeInitialize"; + case 0x3204b146: return "cellFiberPpuUtilWorkerControlInitialize"; + case 0x34a81091: return "cellFiberPpuContextSelf"; + case 0x3860a12a: return "cellFiberPpuSchedulerTraceFinalize"; + case 0x392c5aa5: return "cellFiberPpuUtilWorkerControlSetPollingMode"; + case 0x3b417f82: return "cellFiberPpuUtilWorkerControlJoinFiber"; + case 0x4fc86b2c: return "cellFiberPpuUtilWorkerControlDisconnectEventQueue"; + case 0x55870804: return "_cellFiberPpuInitialize"; + case 0x5d3992dd: return "cellFiberPpuUtilWorkerControlSendSignal"; + case 0x5d9a7034: return "cellFiberPpuSelf"; + case 0x62a20f0d: return "cellFiberPpuUtilWorkerControlConnectEventQueueToSpurs"; + case 0x68ba4568: return "_cellFiberPpuUtilWorkerControlAttributeInitialize"; + case 0x6c164b3b: return "cellFiberPpuWaitSignal"; + case 0x72086315: return "cellFiberPpuContextInitialize"; + case 0x7c2f4034: return "cellFiberPpuCreateFiber"; + case 0x8afb8356: return "cellFiberPpuSendSignal"; + case 0x8b6baa01: return "cellFiberPpuFinalizeScheduler"; + case 0x9e25c72d: return "_cellFiberPpuSchedulerAttributeInitialize"; + case 0xa27c95ca: return "cellFiberPpuUtilWorkerControlFinalize"; + case 0xa4599cf3: return "cellFiberPpuWaitFlag"; + case 0xa6004249: return "cellFiberPpuJoinFiber"; + case 0xaba1c563: return "cellFiberPpuContextRun"; + case 0xadedbebf: return "cellFiberPpuSchedulerTraceStart"; + case 0xb0594b2d: return "cellFiberPpuGetScheduler"; + case 0xb3a48079: return "cellFiberPpuContextFinalize"; + case 0xb90c871b: return "cellFiberPpuContextCheckStackLimit"; + case 0xbabf714b: return "cellFiberPpuUtilWorkerControlWakeup"; + case 0xbf9cd933: return "cellFiberPpuSchedulerTraceInitialize"; + case 0xbfca88d3: return "cellFiberPpuUtilWorkerControlCreateFiber"; + case 0xc04e2438: return "cellFiberPpuUtilWorkerControlShutdown"; + case 0xc11f8056: return "_cellFiberPpuAttributeInitialize"; + case 0xd0066b17: return "cellFiberPpuContextSwitch"; + case 0xe492a675: return "cellFiberPpuHasRunnableFiber"; + case 0xe665f9a9: return "cellFiberPpuSchedulerTraceStop"; + case 0xea6dc1ad: return "cellFiberPpuUtilWorkerControlCheckFlags"; + case 0xee3b604d: return "cellFiberPpuInitializeScheduler"; + case 0xf2ccad4f: return "cellFiberPpuUtilWorkerControlInitializeWithAttribute"; + case 0xf3e81219: return "cellFiberPpuCheckStackLimit"; + case 0xf6c6900c: return "cellFiberPpuCheckFlags"; + case 0xfa8d5f95: return "cellFiberPpuExit"; + case 0xfbf5fe40: return "cellFiberPpuSetPriority"; + case 0x0109f3d3: return "cellFontGetRenderEffectWeight"; + case 0x03a142b9: return "cellFontGraphicsGetDrawType"; + case 0x042e74e3: return "cellFontCreateRenderer"; + case 0x061049ad: return "cellFontGraphicsSetFontRGBA"; + case 0x06be743d: return "cellFontGetKerning"; + case 0x073fa321: return "cellFontOpenFontsetOnMemory"; + case 0x0a7306a4: return "cellFontOpenFontFile"; + case 0x0baf90fe: return "cellFontGetRenderScaledKerning"; + case 0x0d106a11: return "cellFontGetRenderScalePixel"; + case 0x1387c45c: return "cellFontGetHorizontalLayout"; + case 0x16322df1: return "cellFontGraphicsSetScalePixel"; + case 0x1a218fe4: return "cellFontRenderCharGlyphImageHorizontal"; + case 0x21ebb248: return "cellFontDestroyRenderer"; + case 0x227e1e3c: return "cellFontSetupRenderScalePixel"; + case 0x22e24707: return "cellFontGlyphGetScalePixel"; + case 0x231d5941: return "cellFontGlyphGetHorizontalShift"; + case 0x2388186c: return "cellFontGraphicsGetScalePixel"; + case 0x25253fe4: return "cellFontSetEffectWeight"; + case 0x25dbeff9: return "cellFontGetEffectWeight"; + case 0x285d30d6: return "cellFontGetScalePixel"; + case 0x29329541: return "cellFontOpenFontInstance"; + case 0x297f0e93: return "cellFontSetScalePixel"; + case 0x2da9fd9d: return "cellFontGetRenderCharGlyphMetrics"; + case 0x3da90559: return "cellFontClearFileCache"; + case 0x40d40544: return "cellFontEndLibrary"; + case 0x47ca71ef: return "cellFontAdjustFontScaling"; + case 0x4d19c631: return "cellFontSetupRenderScalePoint"; + case 0x534e785f: return "cellFontGlyphGetVerticalShift"; + case 0x53f529fe: return "cellFontGlyphSetupVertexesGlyph"; + case 0x59ef0073: return "cellFontGetGlyphExpandBufferInfo"; + case 0x5abd8b1e: return "cellFontGetLibrary"; + case 0x66a23100: return "cellFontBindRenderer"; + case 0x698897f8: return "cellFontGetVerticalLayout"; + case 0x6bad7a69: return "cellFontVertexesGlyphRelocate"; + case 0x6bf6f832: return "cellFontSetFontsetOpenMode"; + case 0x6cfada83: return "cellFontSetFontOpenMode"; + case 0x700e6223: return "cellFontGetRenderCharGlyphMetricsVertical"; + case 0x70f3e728: return "cellFontSetScalePoint"; + case 0x78d05e08: return "cellFontSetupRenderEffectSlant"; + case 0x7ab47f7e: return "cellFontEnd"; + case 0x7c5df0d8: return "cellFontGetInitializedRevisionFlags"; + case 0x7c83bc15: return "cellFontGraphicsSetLineRGBA"; + case 0x8657c8f5: return "cellFontSetEffectSlant"; + case 0x87bd650f: return "cellFontGraphicsSetDrawType"; + case 0x88be4799: return "cellFontRenderCharGlyphImage"; + case 0x8a35c887: return "cellFontEndGraphics"; + case 0x8a632038: return "cellFontGetResolutionDpi"; + case 0x8e3f2c40: return "cellFontGlyphRenderImageVertical"; + case 0x90b9465e: return "cellFontRenderSurfaceInit"; + case 0x970d4c22: return "cellFontGraphicsSetupDrawContext"; + case 0x97b95244: return "cellFontGlyphRenderImageHorizontal"; + case 0x98ac5524: return "cellFontGetFontIdCode"; + case 0x9c8d3ff7: return "cellFontGlyphGetOutlineVertexes"; + case 0x9e19072b: return "cellFontOpenFontMemory"; + case 0x9e3b1e16: return "cellFontAdjustGlyphExpandBuffer"; + case 0xa165daae: return "cellFontGetRenderScalePoint"; + case 0xa41342dc: return "cellFontGraphicsGetFontRGBA"; + case 0xa6dc25d1: return "cellFontSetupRenderEffectWeight"; + case 0xa7b2103a: return "cellFontDelete"; + case 0xa885cc9b: return "cellFontOpenFontset"; + case 0xa8fae920: return "cellFontGlyphGetOutlineControlDistance"; + case 0xb015a84e: return "cellFontGetRevisionFlags"; + case 0xb276f1f6: return "cellFontCloseFont"; + case 0xb3d304b2: return "cellFontPatchWorks"; + case 0xb422b005: return "cellFontRenderSurfaceSetScissor"; + case 0xb4d112af: return "cellFontGlyphGetVertexesGlyphSize"; + case 0xc17259de: return "cellFontGenerateCharGlyph"; + case 0xc91c8ece: return "cellFontGetBindingRenderer"; + case 0xcaed32c1: return "cellFontGenerateCharGlyphVertical"; + case 0xced4dda9: return "cellFontGetRenderEffectSlant"; + case 0xd62f5d76: return "cellFontDeleteGlyph"; + case 0xd8eaee9f: return "cellFontGetCharGlyphMetrics"; + case 0xdee0836c: return "cellFontExtend"; + case 0xe01b199e: return "cellFontGlyphRenderImage"; + case 0xe16e679a: return "cellFontGetEffectSlant"; + case 0xe857a0ca: return "cellFontRenderCharGlyphImageVertical"; + case 0xf03dcc29: return "cellFontInitializeWithRevision"; + case 0xf16379fa: return "cellFontUnbindRenderer"; + case 0xf7a19060: return "cellFontGetScalePoint"; + case 0xf7aaa8e2: return "cellFontGraphicsGetLineRGBA"; + case 0xfb3341ba: return "cellFontSetResolutionDpi"; + case 0xfe9a6dd7: return "cellFontGetCharGlyphMetricsVertical"; + case 0x7a0a83c4: return "cellFontInitLibraryFreeTypeWithRevision"; + case 0xec89a187: return "cellFontFTGetRevisionFlags"; + case 0xfa0c2de0: return "cellFontFTGetInitializedRevisionFlags"; + case 0x2a8e6b92: return "cellGameGetDiscContentInfoUpdatePath"; + case 0x3a5d726a: return "cellGameGetParamString"; + case 0x42a2e133: return "cellGameCreateGameData"; + case 0x70acec67: return "cellGameContentPermit"; + case 0x87406734: return "cellGameThemeInstallFromBuffer"; + case 0xa80bf223: return "cellGameGetLocalWebContentPath"; + case 0xb0a1f8c6: return "cellGameContentErrorDialog"; + case 0xb367c6e3: return "cellGameDeleteGameData"; + case 0xb7a45caf: return "cellGameGetParamInt"; + case 0xce4374f6: return "cellGamePatchCheck"; + case 0xd24e3928: return "cellGameThemeInstall"; + case 0xdaa5cd20: return "cellGameSetParamString"; + case 0xdb9819f3: return "cellGameDataCheck"; + case 0xef9d42d5: return "cellGameGetSizeKB"; + case 0xf52639ea: return "cellGameBootCheck"; + case 0x38579ec9: return "cellGameSetExitParam"; + case 0x59b1ede1: return "cellGameGetHomeDataExportPath"; + case 0x59bbebd4: return "cellGameGetHomePath"; + case 0x72cc6cf7: return "cellGameGetHomeDataImportPath"; + case 0x94e9f81d: return "cellGameGetHomeLaunchOptionPath"; + case 0xf6acd0bc: return "cellGameGetBootGameInfo"; + case 0x055bd74d: return "cellGcmGetTiledPitchSize"; + case 0x06edea9e: return "cellGcmSetUserHandler"; + case 0x0a862772: return "cellGcmSetQueueHandler"; + case 0x0b4b62d5: return "cellGcmSetPrepareFlip"; + case 0x0e6b0dae: return "cellGcmGetDisplayInfo"; + case 0x107bf3a1: return "cellGcmInitCursor"; + case 0x15bae46b: return "_cellGcmInitBody"; + case 0x172c3197: return "cellGcmSetDefaultCommandBufferAndSegmentWordSize"; + case 0x1a0de550: return "cellGcmSetCursorPosition"; + case 0x1bd633f8: return "_cellGcmFunc3"; + case 0x1f61b3ff: return "cellGcmDumpGraphicsError"; + case 0x21397818: return "_cellGcmSetFlipCommand"; + case 0x21ac3697: return "cellGcmAddressToOffset"; + case 0x21cee035: return "cellGcmGetNotifyDataAddress"; + case 0x23ae55a3: return "cellGcmGetLastSecondVTime"; + case 0x25b40ab4: return "cellGcmSortRemapEaIoAddress"; + case 0x2922aed0: return "cellGcmGetOffsetTable"; + case 0x2a6fba9c: return "cellGcmIoOffsetToAddress"; + case 0x2ad4951b: return "cellGcmGetTimeStampLocation"; + case 0x371674cf: return "cellGcmGetDisplayBufferByFlipIndex"; + case 0x3a33c1fd: return "_cellGcmFunc15"; + case 0x3b9bd5bd: return "cellGcmUnreserveIoMapSize"; + case 0x4524cccd: return "cellGcmBindTile"; + case 0x4ae8d215: return "cellGcmSetFlipMode"; + case 0x4d7ce993: return "cellGcmSetSecondVFrequency"; + case 0x51c9d62b: return "cellGcmSetDebugOutputLevel"; + case 0x527c6439: return "cellGcmTerminate"; + case 0x5a41c10f: return "cellGcmGetTimeStamp"; + case 0x5e2ee0f0: return "cellGcmGetDefaultCommandWordSize"; + case 0x5f909b17: return "_cellGcmFunc1"; + case 0x626e8518: return "cellGcmMapEaIoAddressWithFlags"; + case 0x63387071: return "cellGcmGetLastFlipTime"; + case 0x63441cb4: return "cellGcmMapEaIoAddress"; + case 0x657571f7: return "cellGcmGetTileInfo"; + case 0x661fe266: return "_cellGcmFunc12"; + case 0x688b8ac9: return "_cellGcmFunc38"; + case 0x69c6cc82: return "cellGcmSetCursorDisable"; + case 0x723bbc7e: return "cellGcmGetVBlankCount"; + case 0x72a577ce: return "cellGcmGetFlipStatus"; + case 0x7fc034bc: return "_cellGcmFunc4"; + case 0x8572bce2: return "cellGcmGetReportDataAddressLocation"; + case 0x8bde5ebf: return "cellGcmSetUserCommand"; + case 0x8cdf8c70: return "cellGcmGetDefaultSegmentWordSize"; + case 0x8effb7fd: return "_cellGcmFunc2"; + case 0x93806525: return "cellGcmGetCurrentDisplayBufferId"; + case 0x983fb9aa: return "cellGcmSetWaitFlip"; + case 0x99d397ac: return "cellGcmGetReport"; + case 0x9a0159af: return "cellGcmGetReportDataAddress"; + case 0x9ba451e4: return "cellGcmSetDefaultFifoSize"; + case 0x9dc04436: return "cellGcmBindZcull"; + case 0xa114ec67: return "cellGcmMapMainMemory"; + case 0xa41ef7e8: return "cellGcmSetFlipHandler"; + case 0xa47c09ff: return "cellGcmSetFlipStatus"; + case 0xa53d12ae: return "cellGcmSetDisplayBuffer"; + case 0xa547adde: return "cellGcmGetControlRegister"; + case 0xa6b180ac: return "cellGcmGetReportDataLocation"; + case 0xa75640e8: return "cellGcmUnbindZcull"; + case 0xa7ede268: return "cellGcmReserveIoMapSize"; + case 0xa91b0402: return "cellGcmSetVBlankHandler"; + case 0xacee8542: return "cellGcmSetFlipImmediate"; + case 0xb2e761d4: return "cellGcmResetFlipStatus"; + case 0xbb42a9dd: return "_cellGcmFunc13"; + case 0xbc982946: return "cellGcmSetDefaultCommandBuffer"; + case 0xbd100dbc: return "cellGcmSetTileInfo"; + case 0xbd2fa0a7: return "cellGcmUpdateCursor"; + case 0xbd6d60d9: return "cellGcmSetInvalidateTile"; + case 0xc47d0812: return "cellGcmSetCursorEnable"; + case 0xc8f3bd09: return "cellGcmGetCurrentField"; + case 0xcaabd992: return "cellGcmInitDefaultFifoMode"; + case 0xd01b570d: return "cellGcmSetGraphicsHandler"; + case 0xd0b1d189: return "cellGcmSetTile"; + case 0xd34a420d: return "cellGcmSetZcull"; + case 0xd8f88e1a: return "_cellGcmSetFlipCommandWithWaitLabel"; + case 0xd9a0a879: return "cellGcmGetZcullInfo"; + case 0xd9b7653e: return "cellGcmUnbindTile"; + case 0xdb23e867: return "cellGcmUnmapIoAddress"; + case 0xdb769b32: return "cellGcmMapLocalMemory"; + case 0xdc09357e: return "cellGcmSetFlip"; + case 0xdc494430: return "cellGcmSetSecondVHandler"; + case 0xdf6476bd: return "cellGcmSetWaitFlipUnsafe"; + case 0xe315a0b2: return "cellGcmGetConfiguration"; + case 0xe44874f3: return "cellGcmSysGetLastVBlankTime"; + case 0xefd00f54: return "cellGcmUnmapEaIoAddress"; + case 0xf80196c1: return "cellGcmGetLabelAddress"; + case 0xf9bfdc72: return "cellGcmSetCursorImageOffset"; + case 0xfb81c03e: return "cellGcmGetMaxIoMapSize"; + case 0xfce9e764: return "cellGcmInitSystemMode"; + case 0xffe0160e: return "cellGcmSetVBlankFrequency"; + case 0x02e7e03e: return "cellGifDecExtDecodeData"; + case 0x116a7da9: return "cellGifDecClose"; + case 0x17fb83c1: return "cellGifDecExtOpen"; + case 0x41a90dc4: return "cellGifDecSetParameter"; + case 0x44b1bc61: return "cellGifDecDecodeData"; + case 0x4711cb7f: return "cellGifDecExtCreate"; + case 0x75745079: return "cellGifDecOpen"; + case 0x95cae771: return "cellGifDecExtSetParameter"; + case 0xb60d42a5: return "cellGifDecCreate"; + case 0xe53f91f2: return "cellGifDecExtReadHeader"; + case 0xe74b2cb1: return "cellGifDecDestroy"; + case 0xf0da95de: return "cellGifDecReadHeader"; + case 0x052a80d9: return "cellHttpCreateTransaction"; + case 0x070f1020: return "cellHttpClientGetTotalPoolSize"; + case 0x0b9fea5f: return "cellHttpRequestGetHeader"; + case 0x0d846d63: return "cellHttpCookieImportWithClientId"; + case 0x0d896b97: return "cellHttpSetProxy"; + case 0x0d9c65be: return "cellHttpClientGetAllHeaders"; + case 0x0ef17399: return "cellHttpTransactionGetUri"; + case 0x10d0d7fc: return "cellHttpResponseGetStatusCode"; + case 0x130150ea: return "cellHttpClientGetRecvBufferSize"; + case 0x1395d8d1: return "cellHttpClientSetSslCallback"; + case 0x13fe767b: return "cellHttpClientSetCookieRecvCallback"; + case 0x14bfc765: return "cellHttpClientGetConnTimeout"; + case 0x16214411: return "cellHttpRequestDeleteHeader"; + case 0x1b5bdcc6: return "cellHttpAddCookieWithClientId"; + case 0x2033b878: return "cellHttpClientCloseAllConnections"; + case 0x211d8ba3: return "cellHttpClientSetAutoRedirect"; + case 0x224e1610: return "cellHttpClientSetRecvTimeout"; + case 0x250c386c: return "cellHttpInit"; + case 0x271a0b06: return "cellHttpClientGetSendTimeout"; + case 0x27f86d70: return "cellHttpClientCloseConnections"; + case 0x2960e309: return "cellHttpClientGetAutoRedirect"; + case 0x296a46cf: return "cellHttpClientSetPipeline"; + case 0x2a1f28f6: return "cellHttpClientGetPipeline"; + case 0x2a78ff04: return "cellHttpTransactionGetSslId"; + case 0x2a87603a: return "cellHttpGetProxy"; + case 0x2d52848b: return "cellHttpTransactionAbortConnection"; + case 0x32f5cae2: return "cellHttpDestroyTransaction"; + case 0x34061e49: return "cellHttpTransactionGetSslCipherId"; + case 0x38954133: return "cellHttpTransactionGetSslCipherBits"; + case 0x40547d8b: return "cellHttpClientSetVersion"; + case 0x4137a1f6: return "cellHttpRequestGetChunkedTransferStatus"; + case 0x42205fe0: return "cellHttpRequestGetAllHeaders"; + case 0x434419c8: return "cellHttpClientSetCookieStatus"; + case 0x464ff889: return "cellHttpResponseGetContentLength"; + case 0x46bcc9ff: return "cellHttpClientGetPerHostKeepAliveMax"; + case 0x473cd9f1: return "cellHttpClientSetRedirectCallback"; + case 0x4b33942a: return "cellHttpClientAddHeader"; + case 0x4d40cf98: return "cellHttpClientGetProxy"; + case 0x4d915204: return "cellHttpClientSetCookieSendCallback"; + case 0x4e4ee53a: return "cellHttpCreateClient"; + case 0x4f5d8d20: return "cellHttpResponseGetHeader"; + case 0x522180bc: return "cellHttpsInit"; + case 0x54f2a4de: return "cellHttpRequestSetHeader"; + case 0x591c21a8: return "cellHttpClientGetKeepAlive"; + case 0x595adee9: return "cellHttpClientSetPerHostKeepAliveMax"; + case 0x5980a293: return "cellHttpClientGetAutoAuthentication"; + case 0x5d473170: return "cellHttpClientSetKeepAlive"; + case 0x617eec02: return "cellHttpClientDeleteHeader"; + case 0x61b2bade: return "cellHttpEndCookie"; + case 0x61c90691: return "cellHttpRecvResponse"; + case 0x65691795: return "cellHttpClientSetSslVersion"; + case 0x660d42a9: return "cellHttpClientSetAuthenticationCallback"; + case 0x6884cdb7: return "cellHttpClientGetResponseBufferMax"; + case 0x6a81b5e4: return "cellHttpResponseGetStatusLine"; + case 0x6eed4999: return "cellHttpClientSetAuthenticationCacheStatus"; + case 0x71714cdc: return "cellHttpClientSetSendTimeout"; + case 0x7313c78d: return "cellHttpClientSetSslIdDestroyCallback"; + case 0x895c604c: return "cellHttpTransactionGetSslCipherName"; + case 0x8aa5fcd3: return "cellHttpClientSetTotalPoolSize"; + case 0x8e3f7ee1: return "cellHttpRequestSetChunkedTransferStatus"; + case 0x8eaf47a3: return "cellHttpClientSetAutoAuthentication"; + case 0x93e938e5: return "cellHttpTransactionGetSslCipherVersion"; + case 0x958323cf: return "cellHttpRequestGetContentLength"; + case 0x9638f766: return "cellHttpInitCookie"; + case 0x980855ac: return "cellHttpDestroyClient"; + case 0xa0d9223c: return "cellHttpTransactionCloseConnection"; + case 0xa34c4b6f: return "cellHttpClientSetHeader"; + case 0xa755b005: return "cellHttpSendRequest"; + case 0xab1c55ab: return "cellHttpClientSetPerHostPoolSize"; + case 0xad1c6f02: return "cellHttpTransactionGetSslVersion"; + case 0xad6a2e5b: return "cellHttpSessionCookieFlush"; + case 0xadc0a4b2: return "cellHttpClientPollConnections"; + case 0xadd66b5c: return "cellHttpClientSetResponseBufferMax"; + case 0xaf73a64e: return "cellHttpRequestSetContentLength"; + case 0xb6feb84b: return "cellHttpClientSetTransactionStateCallback"; + case 0xba78e51f: return "cellHttpClientGetRecvTimeout"; + case 0xbea17389: return "cellHttpResponseGetAllHeaders"; + case 0xbf6e3659: return "cellHttpClientSetRecvBufferSize"; + case 0xcac9fc34: return "cellHttpClientSetUserAgent"; + case 0xccf57336: return "cellHttpClientGetSslVersion"; + case 0xd06c90a4: return "cellHttpClientGetPerPipelineMax"; + case 0xd1ec0b25: return "cellHttpClientGetHeader"; + case 0xd276ff1f: return "cellHttpEnd"; + case 0xd47cc666: return "cellHttpTransactionReleaseConnection"; + case 0xd7471088: return "cellHttpClientSetConnTimeout"; + case 0xd7d3cd5d: return "cellHttpClientSetProxy"; + case 0xd8352a40: return "cellHttpClientSetSslClientCertificate"; + case 0xdc405507: return "cellHttpClientGetVersion"; + case 0xdc7ed599: return "cellHttpClientSetPerPipelineMax"; + case 0xe3c424b3: return "cellHttpTransactionGetSslCipherString"; + case 0xe6d4202f: return "cellHttpsEnd"; + case 0xeb9c1e5e: return "cellHttpClientGetCookieStatus"; + case 0xed993147: return "cellHttpRequestAddHeader"; + case 0xee05b0c1: return "cellHttpClientGetUserAgent"; + case 0xf972c733: return "cellHttpCookieExportWithClientId"; + case 0xfce39343: return "cellHttpClientGetAuthenticationCacheStatus"; + case 0xffc74003: return "cellHttpClientGetPerHostPoolSize"; + case 0x04accebf: return "cellHttpUtilBuildHeader"; + case 0x1c6e4dbb: return "cellHttpUtilBuildRequestLine"; + case 0x2763fd66: return "cellHttpUtilUnescapeUri"; + case 0x2bcbced4: return "cellHttpUtilParseStatusLine"; + case 0x32faaf58: return "cellHttpUtilParseUri"; + case 0x37bb53a2: return "cellHttpUtilAppendHeaderValue"; + case 0x44d756d6: return "cellHttpUtilFormUrlEncode"; + case 0x50ea75bc: return "cellHttpUtilCopyStatusLine"; + case 0x6f0f7667: return "cellHttpUtilBuildUri"; + case 0x83faa354: return "cellHttpUtilBase64Encoder"; + case 0x8bb608e4: return "cellHttpUtilParseUriPath"; + case 0x8e52ee08: return "cellHttpUtilBase64Decoder"; + case 0x8e6c5bb9: return "cellHttpUtilFormUrlDecode"; + case 0x8ea23deb: return "cellHttpUtilMergeUriPath"; + case 0x9003b1f2: return "cellHttpUtilEscapeUri"; + case 0x97f9fbe5: return "cellHttpUtilCopyHeader"; + case 0xa3457869: return "cellHttpUtilParseProxy"; + case 0xaabeb869: return "cellHttpUtilSweepPath"; + case 0xe1fb0ebd: return "cellHttpUtilParseHeader"; + case 0xf05df789: return "cellHttpUtilCopyUri"; + case 0x0e363ae7: return "cellImeJpGetFocusTop"; + case 0x177bd218: return "cellImeJpGetCandidateSelect"; + case 0x1986f2cd: return "cellImeJpGetPredictList"; + case 0x1b119958: return "cellImeJpOpen3"; + case 0x1e29103b: return "cellImeJpConvertForward"; + case 0x1e411261: return "cellImeJpMoveFocusClause"; + case 0x24e9d8fc: return "cellImeJpSetKanaInputMode"; + case 0x36d38701: return "cellImeJpReset"; + case 0x37961cc1: return "cellImeJpExtendConvertArea"; + case 0x441a1c2b: return "cellImeJpEnterString"; + case 0x44608862: return "cellImeJpOpen"; + case 0x46d1234a: return "cellImeJpClose"; + case 0x47b43dd4: return "cellImeJpOpen2"; + case 0x5b6ada55: return "cellImeJpEnterCharExt"; + case 0x5f5b3227: return "cellImeJpGetFocusLength"; + case 0x6298b55a: return "cellImeJpEnterStringExt"; + case 0x6319eda3: return "cellImeJpAllDeleteConvertString"; + case 0x66c6cc78: return "cellImeJpGetStatus"; + case 0x6ccbe3d6: return "cellImeJpEnterChar"; + case 0x7189430b: return "cellImeJpAllConfirm"; + case 0x72257652: return "cellImeJpDeleteWord"; + case 0x7a18c2b9: return "cellImeJpCurrentPartConfirm"; + case 0x89f8a567: return "cellImeJpGetConfirmYomiString"; + case 0x8bb41f47: return "cellImeJpPostConvert"; + case 0xaa1d1f57: return "cellImeJpBackspaceWord"; + case 0xaa2a3287: return "cellImeJpShortenConvertArea"; + case 0xac6693d8: return "cellImeJpModeCaretRight"; + case 0xbd679cc1: return "cellImeJpTemporalConfirm"; + case 0xc1786c81: return "cellImeJpSetFixInputMode"; + case 0xc2bb48bc: return "cellImeJpConvertBackward"; + case 0xc4796a45: return "cellImeJpGetCandidateListSize"; + case 0xcbbc20b7: return "cellImeJpAllConvertCancel"; + case 0xd3fc3606: return "cellImeJpGetConfirmString"; + case 0xe4cc15ba: return "cellImeJpGetCandidateList"; + case 0xe76c9700: return "cellImeJpModeCaretLeft"; + case 0xea2d4881: return "cellImeJpGetConvertYomiString"; + case 0xeae879dc: return "cellImeJpConvertCancel"; + case 0xeede898c: return "cellImeJpConfirmPrediction"; + case 0xf5992ec8: return "cellImeJpSetInputCharType"; + case 0xf91abda3: return "cellImeJpGetConvertString"; + case 0x65cbbb16: return "cellJpgDecExtSetParameter"; + case 0x6d9ebccf: return "cellJpgDecReadHeader"; + case 0x716f8792: return "cellJpgDecExtDecodeData"; + case 0x8b300f66: return "cellJpgDecExtCreate"; + case 0x9338a07a: return "cellJpgDecClose"; + case 0x976ca5c2: return "cellJpgDecOpen"; + case 0xa7978f59: return "cellJpgDecCreate"; + case 0xa9f703e3: return "cellJpgDecExtOpen"; + case 0xaf8bb012: return "cellJpgDecDecodeData"; + case 0xb91eb3d2: return "cellJpgDecExtReadHeader"; + case 0xd8ea91f8: return "cellJpgDecDestroy"; + case 0xe08f3910: return "cellJpgDecSetParameter"; + case 0x0cf2b78b: return "cellJpgEncReset"; + case 0x12d9b6c5: return "cellJpgEncQueryAttr"; + case 0x2ae79be8: return "cellJpgEncWaitForInput"; + case 0x4262e880: return "cellJpgEncGetStreamInfo"; + case 0x636dc89e: return "cellJpgEncEncodePicture2"; + case 0x6f2d371c: return "cellJpgEncOpenEx"; + case 0x969fc5f7: return "cellJpgEncClose"; + case 0x9b4e3a74: return "cellJpgEncWaitForOutput"; + case 0xa4bfae51: return "cellJpgEncOpen"; + case 0xa9e81214: return "cellJpgEncEncodePicture"; + case 0x0dfbadfa: return "cellKey2CharSetArrangement"; + case 0x14bf2dc1: return "cellKey2CharClose"; + case 0x56776c0d: return "cellKey2CharGetChar"; + case 0xabf629c1: return "cellKey2CharOpen"; + case 0xbfc03768: return "cellKey2CharSetMode"; + case 0x005200e6: return "UCS2toEUCJP"; + case 0x01b0cbf4: return "l10n_convert"; + case 0x0356038c: return "UCS2toUTF32"; + case 0x05028763: return "jis2kuten"; + case 0x058addc8: return "UTF8toGB18030"; + case 0x060ee3b2: return "JISstoUTF8s"; + case 0x07168a83: return "SjisZen2Han"; + case 0x0bc386c8: return "ToSjisLower"; + case 0x0bedf77d: return "UCS2toGB18030"; + case 0x0bf867e2: return "HZstoUCS2s"; + case 0x0ce278fd: return "UCS2stoHZs"; + case 0x0d90a48d: return "UCS2stoSJISs"; + case 0x0f624540: return "kuten2eucjp"; + case 0x14ee3649: return "sjis2jis"; + case 0x14f504b8: return "EUCKRstoUCS2s"; + case 0x16eaf5f1: return "UHCstoEUCKRs"; + case 0x1758053c: return "jis2sjis"; + case 0x1906ce6b: return "jstrnchk"; + case 0x1ac0d23d: return "L10nConvert"; + case 0x1ae2acee: return "EUCCNstoUTF8s"; + case 0x1cb1138f: return "GBKstoUCS2s"; + case 0x1da42d70: return "eucjphan2zen"; + case 0x1ec712e0: return "ToSjisHira"; + case 0x1fb50183: return "GBKtoUCS2"; + case 0x21948c03: return "eucjp2jis"; + case 0x21aa3045: return "UTF32stoUTF8s"; + case 0x24fd32a9: return "sjishan2zen"; + case 0x256b6861: return "UCS2toSBCS"; + case 0x262a5ae2: return "UTF8stoGBKs"; + case 0x28724522: return "UTF8toUCS2"; + case 0x2ad091c6: return "UCS2stoUTF8s"; + case 0x2b84030c: return "EUCKRstoUTF8s"; + case 0x2efa7294: return "UTF16stoUTF32s"; + case 0x2f9eb543: return "UTF8toEUCKR"; + case 0x317ab7c2: return "UTF16toUTF8"; + case 0x32689828: return "ARIBstoUTF8s"; + case 0x33435818: return "SJISstoUTF8s"; + case 0x33f8b35c: return "sjiszen2han"; + case 0x3968f176: return "ToEucJpLower"; + case 0x398a3dee: return "MSJIStoUTF8"; + case 0x3a20bc34: return "UCS2stoMSJISs"; + case 0x3dabd5a7: return "EUCJPtoUTF8"; + case 0x3df65b64: return "eucjp2sjis"; + case 0x408a622b: return "ToEucJpHira"; + case 0x41b4a5ae: return "UHCstoUCS2s"; + case 0x41ccf033: return "ToEucJpKata"; + case 0x42838145: return "HZstoUTF8s"; + case 0x4931b44e: return "UTF8toMSJIS"; + case 0x4b3bbacb: return "BIG5toUTF8"; + case 0x511d386b: return "EUCJPstoSJISs"; + case 0x52b7883f: return "UTF8stoBIG5s"; + case 0x53558b6b: return "UTF16stoUCS2s"; + case 0x53764725: return "UCS2stoGB18030s"; + case 0x53c71ac2: return "EUCJPtoSJIS"; + case 0x54f59807: return "EUCJPtoUCS2"; + case 0x55f6921c: return "UCS2stoGBKs"; + case 0x58246762: return "EUCKRtoUHC"; + case 0x596df41c: return "UCS2toSJIS"; + case 0x5a4ab223: return "MSJISstoUTF8s"; + case 0x5ac783dc: return "EUCJPstoUTF8s"; + case 0x5b684dfb: return "UCS2toBIG5"; + case 0x5cd29270: return "UTF8stoEUCKRs"; + case 0x5e1d9330: return "UHCstoUTF8s"; + case 0x60ffa0ec: return "GB18030stoUCS2s"; + case 0x6122e000: return "SJIStoUTF8"; + case 0x6169f205: return "JISstoSJISs"; + case 0x61fb9442: return "UTF8toUTF16"; + case 0x62b36bcf: return "UTF8stoMSJISs"; + case 0x63219199: return "EUCKRtoUTF8"; + case 0x638c2fc1: return "SjisHan2Zen"; + case 0x64a10ec8: return "UCS2toUTF16"; + case 0x65444204: return "UCS2toMSJIS"; + case 0x6621a82c: return "sjis2kuten"; + case 0x6a6f25d1: return "UCS2toUHC"; + case 0x6c62d879: return "UTF32toUCS2"; + case 0x6de4b508: return "ToSjisUpper"; + case 0x6e0705c4: return "UTF8toEUCJP"; + case 0x6e5906fd: return "UCS2stoEUCJPs"; + case 0x6fc530b3: return "UTF16toUCS2"; + case 0x714a9b4a: return "UCS2stoUTF16s"; + case 0x71804d64: return "UCS2stoEUCCNs"; + case 0x72632e53: return "SBCSstoUTF8s"; + case 0x73f2cd21: return "SJISstoJISs"; + case 0x74496718: return "SBCStoUTF8"; + case 0x74871fe0: return "UTF8toUTF32"; + case 0x750c363d: return "jstrchk"; + case 0x7c5bde1c: return "UHCtoEUCKR"; + case 0x7c912bda: return "kuten2jis"; + case 0x7d07a1c2: return "UTF8toEUCCN"; + case 0x8171c1cc: return "EUCCNtoUTF8"; + case 0x82d5ecdf: return "EucJpZen2Han"; + case 0x8555fe15: return "UTF32stoUTF16s"; + case 0x860fc741: return "GBKtoUTF8"; + case 0x867f7b8b: return "ToEucJpUpper"; + case 0x88f8340b: return "UCS2stoJISs"; + case 0x89236c86: return "UTF8stoGB18030s"; + case 0x8a56f148: return "EUCKRstoUHCs"; + case 0x8ccdba38: return "UTF8stoUTF32s"; + case 0x8f472054: return "UTF8stoEUCCNs"; + case 0x90e9b5d2: return "EUCJPstoUCS2s"; + case 0x91a99765: return "UHCtoUCS2"; + case 0x931ff25a: return "L10nConvertStr"; + case 0x949bb14c: return "GBKstoUTF8s"; + case 0x9557ac9b: return "UTF8toUHC"; + case 0x9768b6d3: return "UTF32toUTF8"; + case 0x9874020d: return "sjis2eucjp"; + case 0x9a0e7d23: return "UCS2toEUCCN"; + case 0x9a13d6b8: return "UTF8stoUHCs"; + case 0x9a72059d: return "EUCKRtoUCS2"; + case 0x9b1210c6: return "UTF32toUTF16"; + case 0x9cd8135b: return "EUCCNstoUCS2s"; + case 0x9ce52809: return "SBCSstoUCS2s"; + case 0x9cf1ab77: return "UTF8stoJISs"; + case 0x9d14dc46: return "ToSjisKata"; + case 0x9dcde367: return "jis2eucjp"; + case 0x9ec52258: return "BIG5toUCS2"; + case 0xa0d463c0: return "UCS2toGBK"; + case 0xa19fb9de: return "UTF16toUTF32"; + case 0xa298cad2: return "l10n_convert_str"; + case 0xa34fa0eb: return "EUCJPstoJISs"; + case 0xa5146299: return "UTF8stoARIBs"; + case 0xa609f3e9: return "JISstoEUCJPs"; + case 0xa60ff5c9: return "EucJpHan2Zen"; + case 0xa963619c: return "isEucJpKigou"; + case 0xa9a76fb8: return "UCS2toUTF8"; + case 0xaf18d499: return "GB18030toUCS2"; + case 0xb3361be6: return "UHCtoUTF8"; + case 0xb6e45343: return "MSJIStoUCS2"; + case 0xb7cef4a6: return "UTF8toGBK"; + case 0xb7e08f7a: return "kuten2sjis"; + case 0xb9cf473d: return "UTF8toSBCS"; + case 0xbdd44ee3: return "SJIStoUCS2"; + case 0xbe42e661: return "eucjpzen2han"; + case 0xbe8d5485: return "UCS2stoARIBs"; + case 0xbefe3869: return "isSjisKigou"; + case 0xc62b758d: return "UTF8stoEUCJPs"; + case 0xc7bdcb4c: return "UCS2toEUCKR"; + case 0xc944fa56: return "SBCStoUCS2"; + case 0xc9b78f58: return "MSJISstoUCS2s"; + case 0xcc1633cc: return "l10n_get_converter"; + case 0xd02ef83d: return "GB18030stoUTF8s"; + case 0xd8721e2c: return "SJISstoEUCJPs"; + case 0xd8cb24cb: return "UTF32stoUCS2s"; + case 0xd990858b: return "BIG5stoUTF8s"; + case 0xd9fb1224: return "EUCCNtoUCS2"; + case 0xda67b37f: return "UTF8stoSBCSs"; + case 0xdc54886c: return "UCS2stoEUCKRs"; + case 0xdd5ebdeb: return "UTF8stoSJISs"; + case 0xdefa1c17: return "UTF8stoHZs"; + case 0xe2eabb32: return "eucjp2kuten"; + case 0xe6d9e234: return "UTF8toBIG5"; + case 0xe6f5711b: return "UTF16stoUTF8s"; + case 0xe956dc64: return "JISstoUCS2s"; + case 0xeabc3d00: return "GB18030toUTF8"; + case 0xeb3dc670: return "UTF8toSJIS"; + case 0xeb41cc68: return "ARIBstoUCS2s"; + case 0xeb685b83: return "UCS2stoUTF32s"; + case 0xebae29c0: return "UCS2stoSBCSs"; + case 0xee6c6a39: return "UCS2stoBIG5s"; + case 0xf1dcfa71: return "UCS2stoUHCs"; + case 0xf439728e: return "SJIStoEUCJP"; + case 0xf7681b9a: return "UTF8stoUTF16s"; + case 0xf9b1896d: return "SJISstoUCS2s"; + case 0xfa4a675a: return "BIG5stoUCS2s"; + case 0xfdbf6ac5: return "UTF8stoUCS2s"; + case 0x0252efcc: return "cellUserTraceInit"; + case 0x05893e7c: return "cellUserTraceRegister"; + case 0x6d045c2e: return "cellUserTraceUnregister"; + case 0x898c77bf: return "cellUserTraceTerminate"; + case 0x017024a8: return "cellMicGetDeviceGUID"; + case 0x05709bbf: return "cellMicOpenEx"; + case 0x07e1b12c: return "cellMicRead"; + case 0x186cb1fb: return "cellMicIsOpen"; + case 0x1b42101b: return "cellMicIsAttached"; + case 0x25c5723f: return "cellMicGetStatus"; + case 0x323deb41: return "cellMicSetSignalAttr"; + case 0x3acc118e: return "cellMicReadAux"; + case 0x3ace58f3: return "cellMicSysShareClose"; + case 0x48108a23: return "cellMicGetFormat"; + case 0x4e0b69ee: return "cellMicGetFormatRaw"; + case 0x65336418: return "cellMicRemoveNotifyEventQueue"; + case 0x6a024aa0: return "cellMicGetDeviceAttr"; + case 0x6bc46aab: return "cellMicReset"; + case 0x6cc7ae00: return "cellMicSetNotifyEventQueue2"; + case 0x72165a7f: return "cellMicReadRaw"; + case 0x7903400e: return "cellMicSetNotifyEventQueue"; + case 0x8325e02d: return "cellMicInit"; + case 0x87a08d29: return "cellMicGetFormatDsp"; + case 0x891c6291: return "cellMicSetMultiMicNotifyEventQueue"; + case 0x8d229f8e: return "cellMicClose"; + case 0xa42ac07a: return "cellMicOpenRaw"; + case 0xa52d2ae4: return "cellMicGetType"; + case 0xac5ba03a: return "cellMicGetSignalAttr"; + case 0xad049ecf: return "cellMicGetFormatEx"; + case 0xb2c16321: return "cellMicSetDeviceAttr"; + case 0xb30780eb: return "cellMicGetSignalState"; + case 0xbdfd51e2: return "cellMicSysShareStop"; + case 0xc3610dbd: return "cellMicSysShareOpen"; + case 0xc414faa5: return "cellMicReadDsp"; + case 0xc461563c: return "cellMicCommand"; + case 0xc6328caa: return "cellMicEnd"; + case 0xcac7e7d7: return "cellMicSysShareStart"; + case 0xd127cd3e: return "cellMicSysShareInit"; + case 0xdd1b59f0: return "cellMicOpen"; + case 0xdd724314: return "cellMicStart"; + case 0xddd19a89: return "cellMicStartEx"; + case 0xe839380f: return "cellMicStopEx"; + case 0xf82bbf7c: return "cellMicSysShareEnd"; + case 0xfcfaf246: return "cellMicStop"; + case 0xfda12276: return "cellMicGetFormatAux"; + case 0xfdbbe469: return "cellMicGetDeviceIdentifier"; + case 0x066bb1cf: return "cellMusicDecodeSetDecodeCommand"; + case 0x1576e4f2: return "cellMusicDecodeGetDecodeStatus2"; + case 0x25ea7ac0: return "cellMusicDecodeGetContentsId2"; + case 0x2ef701ec: return "cellMusicDecodeSetDecodeCommand2"; + case 0x491d6ba5: return "cellMusicDecodeSetSelectionContext2"; + case 0x4aef2877: return "cellMusicDecodeFinalize2"; + case 0x58ab1999: return "cellMusicDecodeGetContentsId"; + case 0x5af74c50: return "cellMusicDecodeGetDecodeStatus"; + case 0x84f154b2: return "cellMusicDecodeInitializeSystemWorkload"; + case 0xa8615dc8: return "cellMusicDecodeFinalize"; + case 0xa881b744: return "cellMusicDecodeRead"; + case 0xb2d054df: return "cellMusicDecodeRead2"; + case 0xb641168e: return "cellMusicDecodeInitialize2SystemWorkload"; + case 0xb84f5c81: return "cellMusicDecodeSetSelectionContext"; + case 0xc22563c4: return "cellMusicDecodeSelectContents2"; + case 0xd55dbc11: return "cellMusicDecodeInitialize"; + case 0xdbf70550: return "cellMusicDecodeGetSelectionContext"; + case 0xf24cb963: return "cellMusicDecodeSelectContents"; + case 0xf80e31e5: return "cellMusicDecodeInitialize2"; + case 0xf91639f9: return "cellMusicDecodeGetSelectionContext2"; + case 0x92b50ebc: return "cellMusicExportProgress"; + case 0xb202f0e8: return "cellMusicExportFromFile"; + case 0xb4c9b4f9: return "cellMusicExportInitialize"; + case 0xe0443a44: return "cellMusicExportInitialize2"; + case 0xe90effea: return "cellMusicExportFinalize"; + case 0x0b461648: return "cellMusicGetSelectionContext"; + case 0x2bdc5d6b: return "cellMusicSetSelectionContext2"; + case 0x4014c246: return "cellMusicSetVolume2"; + case 0x4c188caa: return "cellMusicGetContentsId"; + case 0x5bff31bf: return "cellMusicSetSelectionContext"; + case 0x61865281: return "cellMusicInitialize2SystemWorkload"; + case 0x648b7611: return "cellMusicGetPlaybackStatus2"; + case 0x6674de2d: return "cellMusicGetContentsId2"; + case 0x6f2104f3: return "cellMusicFinalize"; + case 0x72876546: return "cellMusicInitializeSystemWorkload"; + case 0x72ec14b5: return "cellMusicInitialize"; + case 0x7be4dc31: return "cellMusicFinalize2"; + case 0x8793ef97: return "cellMusicGetSelectionContext2"; + case 0x8aa188e3: return "cellMusicGetVolume"; + case 0x95f7d9d9: return "cellMusicGetPlaybackStatus"; + case 0x98947a6e: return "cellMusicSetPlaybackCommand2"; + case 0xa0661626: return "cellMusicSetPlaybackCommand"; + case 0xad04cddd: return "cellMusicSelectContents2"; + case 0xb2336ba7: return "cellMusicSelectContents"; + case 0xbe50b11e: return "cellMusicInitialize2"; + case 0xe74ce7bd: return "cellMusicSetVolume"; + case 0xf9073a24: return "cellMusicGetVolume2"; + case 0x04459230: return "cellNetCtlNetStartDialogLoadAsync"; + case 0x0791015f: return "cellGameUpdateCheckStartAsyncEx"; + case 0x0ce13c6b: return "cellNetCtlAddHandler"; + case 0x0f1f13d3: return "cellNetCtlNetStartDialogUnloadAsync"; + case 0x105ee2cb: return "cellNetCtlTerm"; + case 0x10dae56d: return "cellGameUpdateTerm"; + case 0x1e585b5d: return "cellNetCtlGetInfo"; + case 0x3a12865f: return "cellNetCtlGetNatInfo"; + case 0x3e359ab6: return "cellGameUpdateCheckAbort"; + case 0x558700f6: return "cellGameUpdateCheckStartWithoutDialogAsyncEx"; + case 0x71d53210: return "cellNetCtlNetStartDialogAbortAsync"; + case 0x8b3eba69: return "cellNetCtlGetState"; + case 0x901815c3: return "cellNetCtlDelHandler"; + case 0x99ab1a26: return "cellGameUpdateInit"; + case 0xa5e1fa60: return "cellGameUpdateCheckStartWithoutDialogAsync"; + case 0xbd5a59fc: return "cellNetCtlInit"; + case 0xd0a5d727: return "cellGameUpdateCheckStartAsync"; + case 0xf463981c: return "cellGameUpdateCheckFinishAsyncEx"; + case 0xffa3d791: return "cellGameUpdateCheckFinishAsync"; + case 0x09565b21: return "cellOskDialogExtInputDeviceUnlock"; + case 0x1e1b4c97: return "cellOskDialogExtRegisterKeyboardEventHookCallback"; + case 0x23a2ede6: return "cellOskDialogExtAddJapaneseOptionDictionary"; + case 0x42439db5: return "cellOskDialogExtSendFinishMessage"; + case 0x4fe14d09: return "cellOskDialogExtAddOptionDictionary"; + case 0x75370397: return "cellOskDialogExtSetInitialScale"; + case 0x7c95feb8: return "cellOskDialogExtInputDeviceLock"; + case 0x7eb292cd: return "cellOskDialogExtSetBaseColor"; + case 0x8692fcd2: return "cellOskDialogExtRegisterConfirmWordFilterCallback"; + case 0x8b60c469: return "cellOskDialogExtUpdateInputText"; + case 0xe6c43c58: return "cellOskDialogExtEnableHalfByteKana"; + case 0xe800f586: return "cellOskDialogExtRegisterForceFinishCallback"; + case 0x629ba0c0: return "cellOvisInvalidateOverlappedSegments"; + case 0x82f294b2: return "cellOvisGetOverlayTableSize"; + case 0xa876c911: return "cellOvisInitializeOverlayTable"; + case 0xce6cb776: return "cellOvisFixSpuSegments"; + case 0x01067e22: return "cellPamfStreamTypeToEsFilterId"; + case 0x03fd2caa: return "cellPamfReaderSetStreamWithTypeAndChannel"; + case 0x041cc708: return "cellPamfReaderGetStreamIndex"; + case 0x1abeb9d6: return "cellPamfEpIteratorGetEp"; + case 0x28b4e2c1: return "cellPamfReaderSetStreamWithTypeAndIndex"; + case 0x37f723f7: return "cellPamfReaderGetNumberOfStreams"; + case 0x439fba17: return "cellPamfReaderGetEpIteratorWithTimeStamp"; + case 0x44f5c9e3: return "cellPamfGetStreamOffsetAndSize"; + case 0x461534b4: return "cellPamfReaderSetStreamWithIndex"; + case 0x4de501b1: return "cellPamfReaderGetPresentationStartTime"; + case 0x50b83205: return "cellPamfEpIteratorMove"; + case 0x67fd273b: return "cellPamfReaderGetStreamInfo"; + case 0x71df326a: return "cellPamfReaderGetEsFilterId"; + case 0x90fc9a59: return "cellPamfGetHeaderSize2"; + case 0x9ab20793: return "cellPamfReaderGetStreamTypeAndChannel"; + case 0xb8436ee5: return "cellPamfReaderInitialize"; + case 0xca8181c1: return "cellPamfGetHeaderSize"; + case 0xd0230671: return "cellPamfReaderGetNumberOfSpecificStreams"; + case 0xd1a40ef4: return "cellPamfVerify"; + case 0xd9ea3457: return "cellPamfReaderGetNumberOfEp"; + case 0xdb70296c: return "cellPamfReaderGetMuxRateBound"; + case 0xe8586ec6: return "cellPamfReaderGetEpIteratorWithIndex"; + case 0xf61609d6: return "cellPamfReaderGetPresentationEndTime"; + case 0x0f424ecb: return "cellPhotoDecodeInitialize2"; + case 0x28b22e44: return "cellPhotoDecodeFromFile"; + case 0x596f0a56: return "cellPhotoDecodeInitialize"; + case 0xad7d8f38: return "cellPhotoDecodeFinalize"; + case 0x0783bce0: return "cellPhotoImport"; + case 0x1ab8df55: return "cellPhotoImport2"; + case 0x08cbd8e1: return "cellPhotoExportInitialize2"; + case 0x09ce84ac: return "cellPhotoExportFromFile"; + case 0x3f7fc0af: return "cellPhotoFinalize"; + case 0x42a32983: return "cellPhotoRegistFromFile"; + case 0x4357c77f: return "cellPhotoExportInitialize"; + case 0x55c70783: return "cellPhotoInitialize"; + case 0xde509ead: return "cellPhotoExportProgress"; + case 0xed4a0148: return "cellPhotoExportFinalize"; + case 0x0c515302: return "cellPngDecExtOpen"; + case 0x157d30c5: return "cellPngDecCreate"; + case 0x2310f155: return "cellPngDecDecodeData"; + case 0x27c921b5: return "cellPngDecGetoFFs"; + case 0x30cb334a: return "cellPngDecGetsBIT"; + case 0x35a6846c: return "cellPngDecGettIME"; + case 0x3d50016a: return "cellPngDecGetpHYs"; + case 0x48436b2d: return "cellPngDecExtCreate"; + case 0x5b3d1ff1: return "cellPngDecClose"; + case 0x609ec7d5: return "cellPngDecGetUnknownChunks"; + case 0x726fc1d0: return "cellPngDecExtDecodeData"; + case 0x7585a275: return "cellPngDecGetbKGD"; + case 0x7a062d26: return "cellPngDecGetcHRM"; + case 0x820dae1a: return "cellPngDecDestroy"; + case 0x8b33f863: return "cellPngDecExtReadHeader"; + case 0x9ccdcc95: return "cellPngDecReadHeader"; + case 0x9e9d7d42: return "cellPngDecExtSetParameter"; + case 0xa5cdf57e: return "cellPngDecGetsPLT"; + case 0xb153629c: return "cellPngDecGetgAMA"; + case 0xb40ca175: return "cellPngDecGetTextChunk"; + case 0xb4fe75e1: return "cellPngDecGetpCAL"; + case 0xb905ebb7: return "cellPngDecGethIST"; + case 0xb96fb26e: return "cellPngDecGettRNS"; + case 0xc41e1198: return "cellPngDecGetsCAL"; + case 0xd2bc5bfd: return "cellPngDecOpen"; + case 0xe163977f: return "cellPngDecGetPLTE"; + case 0xe4416e82: return "cellPngDecGetsRGB"; + case 0xe97c9bd4: return "cellPngDecSetParameter"; + case 0xf44b6c30: return "cellPngDecGetiCCP"; + case 0x117cd726: return "cellPngEncClose"; + case 0x19256dc5: return "cellPngEncOpen"; + case 0x496cfcd0: return "cellPngEncQueryAttr"; + case 0x585269bc: return "cellPngEncGetStreamInfo"; + case 0x5b546ca4: return "cellPngEncEncodePicture"; + case 0x662bd637: return "cellPngEncWaitForInput"; + case 0x6ac91de3: return "cellPngEncReset"; + case 0x90ef2963: return "cellPngEncWaitForOutput"; + case 0xc82558ce: return "cellPngEncOpenEx"; + case 0x0a373522: return "cellPrintSendBand"; + case 0x0d44f661: return "cellPrintEndPage"; + case 0x293d9e9c: return "cellPrintCancelJob"; + case 0x6802dfb5: return "cellPrintGetStatus"; + case 0x6d996018: return "cellSysutilPrintShutdown"; + case 0x6e952645: return "cellPrintGetPrintableArea"; + case 0x795b12b3: return "cellPrintStartJob"; + case 0x865acf74: return "cellPrintStartPage"; + case 0xc04a7d42: return "cellPrintEndJob"; + case 0xc9c3ef14: return "cellPrintLoadAsync"; + case 0xcf1aaefa: return "cellSysutilPrintInit"; + case 0xeb51aa38: return "cellPrintUnloadAsync"; + case 0xf0865182: return "cellPrintLoadAsync2"; + case 0xf9a53f35: return "cellPrintOpenConfig"; + case 0x39651e01: return "cellRecOpen"; + case 0x4ac76585: return "cellRecClose"; + case 0x5a8a8b0f: return "cellRecGetInfo"; + case 0x5b45439d: return "cellRecStop"; + case 0x964cd1b8: return "cellRecStart"; + case 0xdbf22bd1: return "cellRecQueryMemSize"; + case 0xf0958f73: return "cellRecSetInfo"; + case 0x533f41df: return "cellRemotePlayGetStatus"; + case 0x743918bd: return "cellRemotePlaySetComparativeVolume"; + case 0xa445cd55: return "cellRemotePlayGetPeerInfo"; + case 0xc267987b: return "cellRemotePlayGetSharedMemory"; + case 0xd29fe5e3: return "cellRemotePlayEncryptAllData"; + case 0xd6f3fc82: return "cellRemotePlayStopPeerVideoOut"; + case 0xe12c8c19: return "cellRemotePlayGetComparativeVolume"; + case 0xfb793f27: return "cellRemotePlayBreak"; + case 0x01220224: return "cellRescGcmSurface2RescSrc"; + case 0x0a2069c7: return "cellRescGetNumColorBuffers"; + case 0x0d3c22ce: return "cellRescSetWaitFlip"; + case 0x10db5b1a: return "cellRescSetDsts"; + case 0x129922a0: return "cellRescResetFlipStatus"; + case 0x19a2a967: return "cellRescSetPalInterpolateDropFlexRatio"; + case 0x1dd3c4cd: return "cellRescGetRegisterCount"; + case 0x22ae06d8: return "cellRescAdjustAspectRatio"; + case 0x23134710: return "cellRescSetDisplayMode"; + case 0x25c107e6: return "cellRescSetConvertAndFlip"; + case 0x2ea3061e: return "cellRescExit"; + case 0x2ea94661: return "cellRescSetFlipHandler"; + case 0x516ee89e: return "cellRescInit"; + case 0x5a338cdb: return "cellRescGetBufferSize"; + case 0x66f5e388: return "cellRescGetLastFlipTime"; + case 0x6cd0f95f: return "cellRescSetSrc"; + case 0x7af8a37f: return "cellRescSetRegisterCount"; + case 0x8107277c: return "cellRescSetBufferAddress"; + case 0xc47c5c22: return "cellRescGetFlipStatus"; + case 0xd1ca0503: return "cellRescVideoOutResolutionId2RescBufferMode"; + case 0xd3758645: return "cellRescSetVBlankHandler"; + case 0xe0cef79e: return "cellRescCreateInterlaceTable"; + case 0x1324948a: return "cellRtcFormatRfc3339LocalTime"; + case 0x269a1882: return "cellRtcTickAddTicks"; + case 0x2cce9cf5: return "cellRtcGetCurrentClockLocalTime"; + case 0x2f010bfa: return "cellRtcTickAddMinutes"; + case 0x32c941cf: return "cellRtcGetCurrentClock"; + case 0x332a74dd: return "cellRtcTickAddYears"; + case 0x46ca7fe0: return "cellRtcConvertLocalTimeToUtc"; + case 0x5316b4a8: return "cellRtcIsLeapYear"; + case 0x5491b9d5: return "cellRtcFormatRfc2822"; + case 0x5b6a0a1d: return "cellRtcGetDaysInMonth"; + case 0x5f68c268: return "cellRtcSetWin32FileTime"; + case 0x64c63fd5: return "cellRtcTickAddWeeks"; + case 0x75744e2a: return "cellRtcTickAddDays"; + case 0x7f1086e6: return "cellRtcCheckValid"; + case 0x9598d4b3: return "cellRtcSetDosTime"; + case 0x99b13034: return "cellRtcSetTick"; + case 0x9dafc0d9: return "cellRtcGetCurrentTick"; + case 0xa07c3d2f: return "cellRtcFormatRfc2822LocalTime"; + case 0xbb543189: return "cellRtcSetTime_t"; + case 0xc2d8cf95: return "cellRtcGetDayOfWeek"; + case 0xc48d5002: return "cellRtcConvertUtcToLocalTime"; + case 0xc5bc0fac: return "cellRtcParseDateTime"; + case 0xc7bdb7eb: return "cellRtcGetTick"; + case 0xcb90c761: return "cellRtcGetTime_t"; + case 0xccce71bd: return "cellRtcTickAddSeconds"; + case 0xcf11c3d6: return "cellRtcParseRfc3339"; + case 0xd41d3bd2: return "cellRtcTickAddHours"; + case 0xd9c0b463: return "cellRtcFormatRfc3339"; + case 0xdfff32cf: return "cellRtcGetDosTime"; + case 0xe0ecbb45: return "cellRtcTickAddMonths"; + case 0xe7086f05: return "cellRtcGetWin32FileTime"; + case 0xf8509925: return "cellRtcTickAddMicroseconds"; + case 0xfb51fc61: return "cellRtcCompareTick"; + case 0x2cde989f: return "cellRudpGetSizeReadable"; + case 0x384ba777: return "cellRudpSetOption"; + case 0x48c001b0: return "cellRudpWrite"; + case 0x48d3eeac: return "cellRudpTerminate"; + case 0x54f81789: return "cellRudpSetMaxSegmentSize"; + case 0x576831ae: return "cellRudpGetRemoteInfo"; + case 0x63f63545: return "cellRudpInit"; + case 0x6bc587e9: return "cellRudpPollCreate"; + case 0x6c0cff03: return "cellRudpEnableInternalIOThread"; + case 0x6ee04954: return "cellRudpNetReceived"; + case 0x74bfad12: return "cellRudpGetContextStatus"; + case 0x7dadc739: return "cellRudpCreateContext"; + case 0x7ed95e60: return "cellRudpSetEventHandler"; + case 0x8ac398f1: return "cellRudpPollDestroy"; + case 0x92e4d899: return "cellRudpRead"; + case 0xa3db855c: return "cellRudpPollControl"; + case 0xa70737da: return "cellRudpFlush"; + case 0xa86b28e3: return "cellRudpGetSizeWritable"; + case 0xb6bcb4a1: return "cellRudpEnd"; + case 0xc1ad7ced: return "cellRudpActivate"; + case 0xc407844f: return "cellRudpInitiate"; + case 0xcd1a3f23: return "cellRudpGetStatus"; + case 0xd666931f: return "cellRudpGetLocalInfo"; + case 0xd8310700: return "cellRudpPollWait"; + case 0xee41e16a: return "cellRudpBind"; + case 0xfade48b2: return "cellRudpProcessEvents"; + case 0xfbf7e9e4: return "cellRudpGetMaxSegmentSize"; + case 0xff9d259c: return "cellRudpGetOption"; + case 0x018281a8: return "cellSailGraphicsAdapterGetFrame2"; + case 0x0247c69e: return "cellSailGraphicsAdapterGetFrame"; + case 0x025b4974: return "cellSailPlayerUnregisterSource"; + case 0x06dd4174: return "cellSailRendererAudioFinalize"; + case 0x07924359: return "cellSailPlayerCloseEsVideo"; + case 0x09de25fd: return "cellSailPlayerIsEsAudioMuted"; + case 0x0abb318b: return "cellSailDescriptorCreateDatabase"; + case 0x0c4cb439: return "cellSailFutureReset"; + case 0x0d0c2f0c: return "cellSailDescriptorSetEs"; + case 0x10298371: return "cellSailAviMovieGetHeader"; + case 0x1139a206: return "cellSailPlayerSetSoundAdapter"; + case 0x145f9b11: return "cellSailPlayerOpenEsAudio"; + case 0x15fd6a2a: return "cellSailDescriptorClose"; + case 0x17932b26: return "cellSailPlayerInitialize"; + case 0x186b98d3: return "cellSailPlayerGetRegisteredProtocols"; + case 0x1872331b: return "cellSailGraphicsAdapterPtsToTimePosition"; + case 0x18b4629d: return "cellSailPlayerFinalize"; + case 0x18bcd21b: return "cellSailPlayerSetGraphicsAdapter"; + case 0x1c983864: return "cellSailGraphicsAdapterInitialize"; + case 0x1c9d5e5a: return "cellSailSoundAdapterSetPreferredFormat"; + case 0x23654375: return "cellSailPlayerInitialize2"; + case 0x26563ddc: return "cellSailPlayerNext"; + case 0x277adf21: return "cellSailDescriptorIsAutoSelection"; + case 0x28336e89: return "cellSailDescriptorDestroyDatabase"; + case 0x2e3ccb5e: return "cellSailGraphicsAdapterSetPreferredFormat"; + case 0x325039b9: return "cellSailRendererAudioNotifyOutputEos"; + case 0x346ebba3: return "cellSailMemAllocatorInitialize"; + case 0x34ecc1b9: return "cellSailPlayerOpenStream"; + case 0x38144ecf: return "cellSailPlayerGetRepeatMode"; + case 0x3a1132ed: return "cellSailAuReceiverGet"; + case 0x3a2d806c: return "cellSailFutureGet"; + case 0x3d0d3b72: return "cellSailSoundAdapterInitialize"; + case 0x3dd9639a: return "cellSailAuReceiverInitialize"; + case 0x3df98d41: return "cellSailSourceNotifyOpenCompleted"; + case 0x3e908c56: return "cellSailAviMovieGetStreamByIndex"; + case 0x44a20e79: return "cellSailGraphicsAdapterUpdateAvSync"; + case 0x47055fea: return "cellSailRendererVideoFinalize"; + case 0x47632810: return "cellSailPlayerReplaceEventHandler"; + case 0x477501f6: return "cellSailPlayerOpenEsVideo"; + case 0x4ae979df: return "cellSailSoundAdapterPtsToTimePosition"; + case 0x4c191088: return "cellSailDescriptorGetUri"; + case 0x4cc54f8e: return "cellSailFutureInitialize"; + case 0x4fa5ad09: return "cellSailPlayerReopenEsAudio"; + case 0x51ecf361: return "cellSailFutureIsDone"; + case 0x54c53688: return "cellSailSourceNotifyInputEos"; + case 0x5783a454: return "cellSailMp4MovieGetMovieInfo"; + case 0x5f44f64f: return "cellSailMp4TrackGetTrackReference"; + case 0x5f77e8df: return "cellSailRendererVideoNotifyFrameDone"; + case 0x5f7c7a6f: return "cellSailPlayerSetParameter"; + case 0x5faf802b: return "cellSailMp4MovieGetTrackByIndex"; + case 0x640c7278: return "cellSailSourceNotifyStartCompleted"; + case 0x67b4d01f: return "cellSailRendererAudioInitialize"; + case 0x69793952: return "cellSailPlayerUnsubscribeEvent"; + case 0x6e83f5c0: return "cellSailAviMovieGetMovieInfo"; + case 0x6f0b1002: return "cellSailPlayerSubscribeEvent"; + case 0x72236ec1: return "cellSailMp4TrackGetTrackReferenceCount"; + case 0x7473970a: return "cellSailSourceNotifyStopCompleted"; + case 0x752f8585: return "cellSailPlayerGetDescriptorCount"; + case 0x75fca288: return "cellSailPlayerGetCurrentDescriptor"; + case 0x76488bb1: return "cellSailGraphicsAdapterFinalize"; + case 0x764ec2d2: return "cellSailSourceNotifyCallCompleted"; + case 0x76b1a425: return "cellSailDescriptorSetAutoSelection"; + case 0x7b6fa92e: return "cellSailPlayerReopenEsUser"; + case 0x7c8dff3b: return "cellSailPlayerAddDescriptor"; + case 0x7eb8d6b5: return "cellSailSoundAdapterGetFrame"; + case 0x85b07126: return "cellSailMp4MovieGetTrackById"; + case 0x85beffcc: return "cellSailPlayerCloseStream"; + case 0x8d1ff475: return "cellSailRendererVideoInitialize"; + case 0x91d287f6: return "cellSailPlayerSetEsAudioMuted"; + case 0x92590d52: return "cellSailDescriptorInquireCapability"; + case 0x92eaf6ca: return "cellSailPlayerSetRendererAudio"; + case 0x946ecca0: return "cellSailSourceNotifyReadCompleted"; + case 0x950d53c1: return "cellSailPlayerCancel"; + case 0x952269c9: return "cellSailPlayerGetParameter"; + case 0x954f48f8: return "cellSailRendererVideoNotifyCallCompleted"; + case 0x9553af65: return "cellSailFutureFinalize"; + case 0x95ee1695: return "cellSailSourceNotifyStreamOut"; + case 0x9897fbd1: return "cellSailPlayerRemoveDescriptor"; + case 0x9d30bdce: return "cellSailSourceInitialize"; + case 0xa37fed15: return "cellSailFutureSet"; + case 0xa48be428: return "cellSailMp4TrackGetTrackInfo"; + case 0xa849d0a7: return "cellSailPlayerOpenEsUser"; + case 0xaafa17b8: return "cellSailPlayerIsPaused"; + case 0xac9c3b1f: return "cellSailDescriptorGetCapabilities"; + case 0xaed9d6cd: return "cellSailPlayerCloseEsUser"; + case 0xb7b4ecee: return "cellSailRendererAudioNotifyCallCompleted"; + case 0xb980b76e: return "cellSailMp4MovieGetBrand"; + case 0xbd1635f4: return "cellSailDescriptorGetMediaInfo"; + case 0xbdb2251a: return "cellSailSourceSetDiagHandler"; + case 0xbdf21b0f: return "cellSailPlayerBoot"; + case 0xbedccc74: return "cellSailPlayerRegisterSource"; + case 0xbf9b8d72: return "cellSailPlayerCloseEsAudio"; + case 0xc044fab1: return "cellSailDescriptorOpen"; + case 0xc09e2f23: return "cellSailAviStreamGetMediaType"; + case 0xc2d90ec9: return "cellSailMp4MovieGetTrackByTypeAndIndex"; + case 0xc457b203: return "cellSailSourceNotifyCloseCompleted"; + case 0xcc3cca60: return "cellSailAviStreamGetHeader"; + case 0xcc987ba6: return "cellSailPlayerDumpImage"; + case 0xd1462438: return "cellSailSoundAdapterFinalize"; + case 0xd1d55a90: return "cellSailPlayerSetPaused"; + case 0xd4049de0: return "cellSailMp4MovieIsCompatibleBrand"; + case 0xd5f9a15b: return "cellSailDescriptorGetStreamType"; + case 0xd7938b8d: return "cellSailPlayerCreateDescriptor"; + case 0xdbe32ed4: return "cellSailPlayerIsEsVideoMuted"; + case 0xddebd2a5: return "cellSailAviMovieGetStreamByTypeAndIndex"; + case 0xdf5553ef: return "cellSailDescriptorClearEs"; + case 0xdff1cda2: return "cellSailRendererVideoNotifyOutputEos"; + case 0xe535b0d3: return "cellSailPlayerStart"; + case 0xeba8d4ec: return "cellSailPlayerStop"; + case 0xecf56150: return "cellSailPlayerSetRendererVideo"; + case 0xed58e3ec: return "cellSailAuReceiverFinalize"; + case 0xee724c99: return "cellSailSourceFinalize"; + case 0xee94b99b: return "cellSailDescriptorSetParameter"; + case 0xeec22809: return "cellSailSoundAdapterUpdateAvSync"; + case 0xf1446a40: return "cellSailPlayerSetEsVideoMuted"; + case 0xf25f197d: return "cellSailSoundAdapterGetFormat"; + case 0xf289f0cd: return "cellSailSourceNotifySessionError"; + case 0xf4009a94: return "cellSailSourceNotifyMediaStateChanged"; + case 0xf5747e1f: return "cellSailPlayerSetAuReceiver"; + case 0xf60a8a69: return "cellSailPlayerReopenEsVideo"; + case 0xf841a537: return "cellSailRendererAudioNotifyFrameDone"; + case 0xfc5baf8a: return "cellSailPlayerSetRepeatMode"; + case 0xfc839bd4: return "cellSailPlayerDestroyDescriptor"; + case 0xffd58aa4: return "cellSailGraphicsAdapterGetFormat"; + case 0x0a3ea2a9: return "cellSailRecorderSetParameter"; + case 0x10c81457: return "cellSailRecorderOpenStream"; + case 0x1422a425: return "cellSailProfileSetEsVideoParameter"; + case 0x18ecc741: return "cellSailRecorderStop"; + case 0x376c3926: return "cellSailRecorderDestroyProfile"; + case 0x37aad85f: return "cellSailRecorderDumpImage"; + case 0x3c775cea: return "cellSailFeederAudioNotifyFrameOut"; + case 0x3deae857: return "cellSailRecorderSetFeederAudio"; + case 0x455c4709: return "cellSailRecorderDestroyVideoConverter"; + case 0x4830faf8: return "cellSailRecorderStart"; + case 0x49476a3d: return "cellSailRecorderCreateVideoConverter"; + case 0x4fec43a9: return "cellSailRecorderSetFeederVideo"; + case 0x50affdc1: return "cellSailRecorderCreateProfile"; + case 0x57415dd3: return "cellSailFeederVideoInitialize"; + case 0x7a52bf69: return "cellSailRecorderInitialize"; + case 0x81bfeae8: return "cellSailFeederVideoFinalize"; + case 0x855da8c6: return "cellSailVideoConverterProcess"; + case 0x86cae679: return "cellSailFeederVideoNotifySessionError"; + case 0x899d1587: return "cellSailFeederAudioFinalize"; + case 0x999c0dc5: return "cellSailFeederAudioNotifySessionEnd"; + case 0xaf310ae6: return "cellSailFeederAudioNotifySessionError"; + case 0xb3d30b0d: return "cellSailVideoConverterCanProcess"; + case 0xbd591197: return "cellSailFeederAudioInitialize"; + case 0xbff6e8d3: return "cellSailFeederVideoNotifySessionEnd"; + case 0xc2e2f30d: return "cellSailFeederAudioNotifyCallCompleted"; + case 0xc4617ddc: return "cellSailRecorderBoot"; + case 0xd37fb694: return "cellSailRecorderCancel"; + case 0xd84daeb9: return "cellSailFeederVideoNotifyCallCompleted"; + case 0xe14cae97: return "cellSailProfileSetEsAudioParameter"; + case 0xe15679fe: return "cellSailVideoConverterGetResult"; + case 0xe16de678: return "cellSailVideoConverterCanGetResult"; + case 0xe3f56f62: return "cellSailRecorderCloseStream"; + case 0xe5e0572a: return "cellSailFeederVideoNotifyFrameOut"; + case 0xe8d86c43: return "cellSailProfileSetStreamParameter"; + case 0xf57d74e3: return "cellSailRecorderFinalize"; + case 0xff20157b: return "cellSailRecorderGetParameter"; + case 0x04c06fc2: return "cellSaveDataGetListItem"; + case 0x273d116a: return "cellSaveDataUserListExport"; + case 0x27cb8bc2: return "cellSaveDataListDelete"; + case 0x39d6ee43: return "cellSaveDataUserListImport"; + case 0x46a2d878: return "cellSaveDataFixedExport"; + case 0x491cc554: return "cellSaveDataListExport"; + case 0x52541151: return "cellSaveDataFixedImport"; + case 0x529231b0: return "cellSaveDataUserFixedImport"; + case 0x6b4e0de6: return "cellSaveDataListImport"; + case 0x7048a9ba: return "cellSaveDataUserListDelete"; + case 0x95ae2cde: return "cellSaveDataUserFixedExport"; + case 0xf6482036: return "cellSaveDataUserGetListItem"; + case 0x7a9c2243: return "cellScreenShotSetOverlayImage"; + case 0x9e33ab8f: return "cellScreenShotEnable"; + case 0xd3ad63e4: return "cellScreenShotSetParameter"; + case 0xfc6f4e74: return "cellScreenShotDisable"; + case 0x025ce169: return "cellSearchGetMusicSelectionContext"; + case 0x0591826f: return "cellSearchStartContentSearch"; + case 0x0a4c8295: return "cellSearchStartListSearch"; + case 0x13524faa: return "cellSearchStartSceneSearch"; + case 0x35cda406: return "cellSearchGetContentInfoDeveloperData"; + case 0x37b5ba0c: return "cellSearchGetContentInfoPathMovieThumb"; + case 0x3b210319: return "cellSearchGetContentInfoByOffset"; + case 0x540d9068: return "cellSearchGetOffsetByContentId"; + case 0x64fb0b76: return "cellSearchStartContentSearchInList"; + case 0x774033d6: return "cellSearchEnd"; + case 0x8fe376a6: return "cellSearchCancel"; + case 0x94e21701: return "cellSearchGetContentIdByOffset"; + case 0x9663a44b: return "cellSearchGetContentInfoByContentId"; + case 0xbfab7616: return "cellSearchFinalize"; + case 0xc0ed0522: return "cellSearchStartSceneSearchInVideo"; + case 0xc81ccf8a: return "cellSearchInitialize"; + case 0xd7a7a433: return "cellSearchGetContentInfoGameComment"; + case 0xe73cb0d2: return "cellSearchPrepareFile"; + case 0xed20e079: return "cellSearchGetMusicSelectionContextOfSingleTrack"; + case 0xffb28491: return "cellSearchGetContentInfoPath"; + case 0x2452679f: return "cellKeySheapMutexDelete"; + case 0x3478e1e6: return "cellKeySheapMutexNew"; + case 0x37968718: return "cellSheapQueryMax"; + case 0x4a5b9659: return "cellKeySheapBufferNew"; + case 0x4b1383fb: return "cellSheapAllocate"; + case 0x5c5994bd: return "cellSheapFree"; + case 0x69a5861d: return "cellKeySheapSemaphoreNew"; + case 0x73a45cf8: return "cellKeySheapSemaphoreDelete"; + case 0x79a6abd0: return "cellKeySheapQueueDelete"; + case 0x7fa23275: return "cellSheapQueryFree"; + case 0x987e260e: return "cellKeySheapQueueNew"; + case 0xa1b25841: return "cellKeySheapInitialize"; + case 0xbbb47cd8: return "cellSheapInitialize"; + case 0xe6b37362: return "cellKeySheapBufferDelete"; + case 0xe897c835: return "cellKeySheapBarrierNew"; + case 0xed136702: return "cellKeySheapRwmDelete"; + case 0xf01ac471: return "cellKeySheapRwmNew"; + case 0xf6f5fbca: return "cellKeySheapBarrierDelete"; + case 0x3fbcf1d6: return "cellSpudllHandleConfigSetDefaultValues"; + case 0xcccd3257: return "cellSpudllGetImageSize"; + case 0x00af2519: return "cellSpursJobGuardReset"; + case 0x011ee38b: return "_cellSpursLFQueueInitialize"; + case 0x039d70b7: return "cellSpursQueueDetachLv2EventQueue"; + case 0x07529113: return "cellSpursAttributeSetNamePrefix"; + case 0x082bfb09: return "_cellSpursQueueInitialize"; + case 0x0eb4bc38: return "cellSpursWorkloadAttributeSetShutdownCompletionEventHook"; + case 0x1051d134: return "cellSpursAttributeEnableSpuPrintfIfAvailable"; + case 0x13ae18f3: return "cellSpursTaskExitCodeGet"; + case 0x161da6a7: return "cellSpursJobChainGetError"; + case 0x16394a4e: return "_cellSpursTasksetAttributeInitialize"; + case 0x1656d49f: return "cellSpursLFQueueAttachLv2EventQueue"; + case 0x17001000: return "cellSpursAddUrgentCommand"; + case 0x182d9890: return "cellSpursRequestIdleSpu"; + case 0x1d2bca4b: return "cellSpursSendWorkloadSignal"; + case 0x1d344406: return "cellSpursTaskGetLoadableSegmentPattern"; + case 0x1d46fedf: return "cellSpursCreateTaskWithAttribute"; + case 0x1ebcf459: return "cellSpursDestroyTaskset2"; + case 0x1f402f8f: return "cellSpursGetInfo"; + case 0x2093252b: return "cellSpursQueueGetTasksetAddress"; + case 0x22aab31d: return "cellSpursEventFlagDetachLv2EventQueue"; + case 0x247414d0: return "cellSpursQueueClear"; + case 0x2cfccb99: return "cellSpursJobChainAttributeSetJobTypeMemoryCheck"; + case 0x2ddbcc0a: return "_cellSpursWorkloadFlagReceiver2"; + case 0x2edcff92: return "cellSpursTasksetSetExceptionEventHandler"; + case 0x303c19cd: return "cellSpursCreateJobChainWithAttribute"; + case 0x30aa96c4: return "cellSpursInitializeWithAttribute2"; + case 0x32b94add: return "cellSpursEnableExceptionEventHandler"; + case 0x34552fa6: return "cellSpursTaskExitCodeInitialize"; + case 0x3548f483: return "_cellSpursJobChainAttributeInitialize"; + case 0x35dae22b: return "_cellSpursLFQueuePopBody"; + case 0x35f02287: return "cellSpursQueueDepth"; + case 0x369fe03d: return "cellSpursQueueGetEntrySize"; + case 0x373523d4: return "cellSpursEventFlagWait"; + case 0x39c173fb: return "cellSpursGetSpuThreadGroupId"; + case 0x494613c7: return "cellSpursJobChainGetSpursAddress"; + case 0x49a3426d: return "cellSpursReadyCountSwap"; + case 0x4a5eab63: return "cellSpursWorkloadAttributeSetName"; + case 0x4a6465e3: return "cellSpursCreateTaskset2"; + case 0x4ac7bae4: return "cellSpursEventFlagClear"; + case 0x4c75deb8: return "cellSpursUnsetExceptionEventHandler"; + case 0x4cce88a9: return "cellSpursLookUpTasksetAddress"; + case 0x4ceb9694: return "cellSpursGetJobChainInfo"; + case 0x4d1e9373: return "cellSpursEventFlagGetClearMode"; + case 0x4de203e2: return "cellSpursSetPreemptionVictimHints"; + case 0x4e153e3e: return "cellSpursGetWorkloadInfo"; + case 0x4e66d483: return "cellSpursDetachLv2EventQueue"; + case 0x5202e53b: return "cellSpursJobChainSetExceptionEventHandler"; + case 0x52cc6c82: return "cellSpursCreateTaskset"; + case 0x54876603: return "cellSpursQueueSize"; + case 0x568b2352: return "cellSpursSemaphoreGetTasksetAddress"; + case 0x569674e3: return "cellSpursTraceInitialize"; + case 0x57e4dec3: return "cellSpursRemoveWorkload"; + case 0x58d58fcf: return "cellSpursTasksetGetSpursAddress"; + case 0x5ef96465: return "_cellSpursEventFlagInitialize"; + case 0x5fd43fe4: return "cellSpursWaitForWorkloadShutdown"; + case 0x60eb2dec: return "cellSpursCreateJobChain"; + case 0x652b70e2: return "cellSpursTasksetAttributeSetName"; + case 0x68aaeba9: return "cellSpursJobGuardInitialize"; + case 0x69726aa2: return "cellSpursAddWorkload"; + case 0x6aa76999: return "cellSpursJobChainUnsetExceptionEventHandler"; + case 0x6c960f6d: return "cellSpursGetSpuThreadId"; + case 0x6d2d9339: return "cellSpursEventFlagTryWait"; + case 0x6fcdf6e3: return "cellSpursGetSpuGuid"; + case 0x738e40e6: return "cellSpursShutdownJobChain"; + case 0x73e06f91: return "cellSpursLFQueueDetachLv2EventQueue"; + case 0x7517724a: return "cellSpursSetGlobalExceptionEventHandler"; + case 0x75211196: return "cellSpursReadyCountAdd"; + case 0x77cdac0c: return "_cellSpursSemaphoreInitialize"; + case 0x7b9cbb74: return "cellSpursTraceFinalize"; + case 0x7cb33c2e: return "cellSpursTaskGetReadOnlyAreaPattern"; + case 0x7e4ea023: return "cellSpursWakeUp"; + case 0x7fdf4fef: return "cellSpursBarrierInitialize"; + case 0x80a29e27: return "cellSpursSetPriorities"; + case 0x82275c1c: return "cellSpursAttributeSetMemoryContainerForSpuThread"; + case 0x838fa4f0: return "cellSpursTryJoinTask2"; + case 0x84d2f6d5: return "cellSpursSetMaxContention"; + case 0x861237f8: return "cellSpursUnsetGlobalExceptionEventHandler"; + case 0x86c864a2: return "cellSpursGetJobChainId"; + case 0x87630976: return "cellSpursEventFlagAttachLv2EventQueue"; + case 0x890f9e5a: return "cellSpursEventFlagGetDirection"; + case 0x8a85674d: return "_cellSpursLFQueuePushBody"; + case 0x8adadf65: return "_cellSpursTaskAttribute2Initialize"; + case 0x8f122ef8: return "cellSpursTasksetAttributeSetTasksetSize"; + case 0x8fdf50b2: return "cellSpursAddUrgentCall"; + case 0x9034e538: return "cellSpursTaskGetContextSaveAreaSize"; + case 0x91066667: return "cellSpursQueuePopBody"; + case 0x9197915f: return "cellSpursTaskGenerateLsPattern"; + case 0x92cff6ed: return "cellSpursQueuePushBody"; + case 0x94034c95: return "cellSpursTasksetUnsetExceptionEventHandler"; + case 0x947efb0b: return "cellSpursEventFlagGetTasksetAddress"; + case 0x95180230: return "_cellSpursAttributeInitialize"; + case 0x97a2f6c8: return "cellSpursJobHeaderSetJobbin2Param"; + case 0x98d5b343: return "cellSpursShutdownWorkload"; + case 0x9aeb5432: return "cellSpursBarrierGetTasksetAddress"; + case 0x9dcbcb5d: return "cellSpursAttributeEnableSystemWorkload"; + case 0x9f72add3: return "cellSpursJoinTaskset"; + case 0x9fcb567b: return "cellSpursGetTasksetInfo"; + case 0x9fef70c2: return "cellSpursJobChainAttributeSetName"; + case 0xa121a224: return "cellSpursTaskAttributeSetExitCodeContainer"; + case 0xa73bf47e: return "_cellSpursWorkloadFlagReceiver"; + case 0xa789e631: return "cellSpursShutdownTaskset"; + case 0xa7a94892: return "cellSpursJoinTask2"; + case 0xa7c066de: return "cellSpursJoinJobChain"; + case 0xa7f9e716: return "cellSpursGetWorkloadData"; + case 0xa839a4d9: return "cellSpursAttributeSetSpuThreadGroupType"; + case 0xaa6269a8: return "cellSpursInitializeWithAttribute"; + case 0xacfc8dbc: return "cellSpursInitialize"; + case 0xb792ca1a: return "cellSpursLFQueueGetTasksetAddress"; + case 0xb8474eff: return "_cellSpursTaskAttributeInitialize"; + case 0xb9bc6207: return "cellSpursAttachLv2EventQueue"; + case 0xbb68d76e: return "cellSpursJobChainAttributeSetHaltOnError"; + case 0xbeb600ac: return "cellSpursCreateTask"; + case 0xbfea60fa: return "cellSpursKickJobChain"; + case 0xc0158d8b: return "cellSpursAddWorkloadWithAttribute"; + case 0xc10931cb: return "cellSpursCreateTasksetWithAttribute"; + case 0xc2acdf43: return "_cellSpursTasksetAttribute2Initialize"; + case 0xc56defb5: return "cellSpursGetNumSpuThread"; + case 0xc765b995: return "cellSpursGetWorkloadFlag"; + case 0xca4c4600: return "cellSpursFinalize"; + case 0xce853fbf: return "cellSpursTraceStart"; + case 0xd2e23fa9: return "cellSpursSetExceptionEventHandler"; + case 0xd5d0b256: return "cellSpursJobGuardNotify"; + case 0xd86380d8: return "cellSpursGetJobPipelineInfo"; + case 0xdca13593: return "cellSpursTasksetAttributeEnableClearLS"; + case 0xddc81b5a: return "cellSpursTraceStop"; + case 0xe0a6dbe4: return "_cellSpursSendSignal"; + case 0xe14ca62d: return "cellSpursCreateTask2"; + case 0xe4944a1c: return "cellSpursCreateTask2WithBinInfo"; + case 0xe5443be7: return "cellSpursQueueAttachLv2EventQueue"; + case 0xe717ac73: return "cellSpursTaskExitCodeTryGet"; + case 0xe7b0e69a: return "cellSpursJobSetMaxGrab"; + case 0xe7dd87e1: return "cellSpursGetTasksetId"; + case 0xec68442c: return "cellSpursQueueGetDirection"; + case 0xefeb2679: return "_cellSpursWorkloadAttributeInitialize"; + case 0xf1d3552d: return "cellSpursReadyCountCompareAndSwap"; + case 0xf31731bb: return "cellSpursRunJobChain"; + case 0xf5507729: return "cellSpursEventFlagSet"; + case 0xf843818d: return "cellSpursReadyCountStore"; + case 0x01bbf2e0: return "cellSpursJobQueueGetSpurs"; + case 0x0582338a: return "cellSpursJobQueueAttributeSetDoBusyWaiting"; + case 0x0d69929e: return "_cellSpursJobQueueAllocateJobDescriptorBody"; + case 0x0f03f712: return "cellSpursJobQueueAttributeSetSubmitWithEntryLock"; + case 0x13671514: return "cellSpursJobQueueSetWaitingMode"; + case 0x15934401: return "cellSpursJobQueueGetSuspendedJobSize"; + case 0x1686957e: return "cellSpursJobQueueAttributeSetMaxSizeJobDescriptor"; + case 0x1917359d: return "_cellSpursJobQueuePortCopyPushJobBody"; + case 0x1b6eea7e: return "_cellSpursJobQueuePortPushJobListBody"; + case 0x1da890c7: return "_cellSpursJobQueuePushAndReleaseJobBody"; + case 0x26fa81b4: return "cellSpursJobQueuePortFinalize"; + case 0x29c2acc5: return "cellSpursJobQueueClose"; + case 0x2e775550: return "cellSpursJobQueueGetError"; + case 0x36d0a53c: return "_cellSpursJobQueuePushJob2Body"; + case 0x3d1294fc: return "cellSpursJobQueuePortInitialize"; + case 0x435bff07: return "cellSpursJobQueuePort2GetJobQueue"; + case 0x43ddab4f: return "cellSpursJobQueueAttributeInitialize"; + case 0x46c3fb5a: return "_cellSpursJobQueuePortCopyPushBody"; + case 0x4e1a17a6: return "_cellSpursJobQueuePortPushBody"; + case 0x5659da82: return "cellSpursJobQueueGetMaxSizeJobDescriptor"; + case 0x5fb9b05d: return "cellSpursJobQueueAttributeSetMaxGrab"; + case 0x634b1502: return "cellSpursJobQueuePortSync"; + case 0x677027af: return "cellSpursJobQueueSemaphoreInitialize"; + case 0x6c93ea18: return "cellSpursJobQueueSemaphoreAcquire"; + case 0x701fd8a9: return "_cellSpursJobQueuePushSync"; + case 0x742cec0d: return "cellSpursJobQueueAttributeSetIsJobTypeMemoryCheck"; + case 0x80a0264c: return "cellSpursJobQueuePortTrySync"; + case 0x840c5239: return "cellSpursJobQueueGetHandleCount"; + case 0x85cd04cd: return "_cellSpursJobQueuePortPushJobBody"; + case 0x8c97a96c: return "cellSpursShutdownJobQueue"; + case 0x8ce4cffa: return "cellSpursJoinJobQueue"; + case 0x90c88f84: return "cellSpursJobQueuePortGetJobQueue"; + case 0x90e392cf: return "_cellSpursJobQueuePortPushJobBody2"; + case 0x915455b3: return "cellSpursJobQueueSendSignal"; + case 0x93248b92: return "cellSpursJobQueueUnsetExceptionEventHandler"; + case 0x934abb00: return "cellSpursJobQueuePort2AllocateJobDescriptor"; + case 0x9396be1d: return "_cellSpursJobQueuePortPushSync"; + case 0x97409f67: return "cellSpursJobQueueSemaphoreTryAcquire"; + case 0x98203e3c: return "_cellSpursJobQueuePushJobBody2"; + case 0x983be7fc: return "_cellSpursCreateJobQueueWithJobDescriptorPool"; + case 0x99316997: return "_cellSpursJobQueuePushBody"; + case 0x9c300489: return "cellSpursJobQueueSetExceptionEventHandler"; + case 0xaf1c7a1d: return "_cellSpursJobQueuePushJobListBody"; + case 0xb53436e7: return "_cellSpursJobQueuePort2PushJobListBody"; + case 0xbd1c5d6b: return "_cellSpursJobQueuePortPushFlush"; + case 0xbfea28ab: return "cellSpursJobQueuePort2PushFlush"; + case 0xc343ee10: return "cellSpursGetJobQueueId"; + case 0xc39173a4: return "_cellSpursJobQueuePort2CopyPushJobBody"; + case 0xc4843b74: return "_cellSpursJobQueuePushJobBody"; + case 0xc485d207: return "cellSpursJobQueuePort2Destroy"; + case 0xcf89f218: return "_cellSpursJobQueuePort2PushJobBody"; + case 0xdf0120c2: return "_cellSpursJobQueuePushFlush"; + case 0xe1731df3: return "_cellSpursJobQueuePort2PushAndReleaseJobBody"; + case 0xe70f874e: return "cellSpursJobQueueAttributeSetGrabParameters"; + case 0xef66c4b7: return "_cellSpursJobQueuePortCopyPushJobBody2"; + case 0xf11fe0f1: return "cellSpursJobQueuePort2Create"; + case 0xf244e799: return "_cellSpursCreateJobQueue"; + case 0xf5de6363: return "cellSpursJobQueuePortInitializeWithDescriptorBuffer"; + case 0xfacb3ced: return "cellSpursJobQueuePort2Sync"; + case 0xfc526b72: return "cellSpursJobQueuePort2PushSync"; + case 0xff03cc79: return "cellSpursJobQueueAttributeSetIsHaltOnError"; + case 0xff7a7bd2: return "cellSpursJobQueueOpen"; + case 0x006c4900: return "cellSslCertGetNameEntryInfo"; + case 0x033c4905: return "cellSslCertGetRsaPublicKeyExponent"; + case 0x1650aea4: return "cellSslEnd"; + case 0x218b64da: return "cellSslCertGetNotAfter"; + case 0x31d9ba8d: return "cellSslCertGetNotBefore"; + case 0x32c61bdf: return "cellSslCertGetSubjectName"; + case 0x571afaca: return "cellSslCertificateLoader"; + case 0x5e9253ca: return "cellSslCertGetMd5Fingerprint"; + case 0x766d3ca1: return "cellSslCertGetNameEntryCount"; + case 0x7b689ebc: return "cellSslCertGetSerialNumber"; + case 0x8e505175: return "cellSslCertGetRsaPublicKeyModulus"; + case 0xae6eb491: return "cellSslCertGetIssuerName"; + case 0xf8206492: return "cellSslCertGetPublicKey"; + case 0xfb02c9d2: return "cellSslInit"; + case 0x5468d6b0: return "cellSubDisplayAudioOutNonBlocking"; + case 0x551d80a5: return "cellSubDisplayEnd"; + case 0x6595ce22: return "cellSubDisplayGetRequiredMemory"; + case 0x6d85ddb3: return "cellSubDisplayStop"; + case 0x8a264d71: return "cellSubDisplayGetPeerNum"; + case 0x938ac642: return "cellSubDisplayGetVideoBuffer"; + case 0xa5bccb47: return "cellSubDisplayStart"; + case 0xaee1e0c2: return "cellSubDisplayAudioOutBlocking"; + case 0xe2485f79: return "cellSubDisplayGetPeerList"; + case 0xf9a7e8a5: return "cellSubDisplayInit"; + case 0x07254fda: return "cellSyncBarrierInitialize"; + case 0x0c7cb9f7: return "cellSyncLFQueueGetEntrySize"; + case 0x167ea63e: return "cellSyncLFQueueSize"; + case 0x1bb675c2: return "cellSyncMutexLock"; + case 0x268edd6d: return "cellSyncBarrierTryNotify"; + case 0x2af0c515: return "cellSyncLFQueueClear"; + case 0x35bbdad2: return "_cellSyncLFQueueCompletePushPointer2"; + case 0x35f21355: return "cellSyncBarrierWait"; + case 0x3929948d: return "cellSyncQueueInitialize"; + case 0x46356fe0: return "_cellSyncLFQueueGetPopPointer2"; + case 0x48154c9b: return "cellSyncQueuePeek"; + case 0x4da349b2: return "cellSyncQueueSize"; + case 0x4da6d7e0: return "cellSyncQueuePop"; + case 0x4e88c68d: return "_cellSyncLFQueueCompletePushPointer"; + case 0x54fc2032: return "_cellSyncLFQueueAttachLv2EventQueue"; + case 0x5ae841e5: return "cellSyncQueuePush"; + case 0x68af923c: return "cellSyncQueueTryPeek"; + case 0x6bb4ef9d: return "_cellSyncLFQueueGetPushPointer2"; + case 0x6c272124: return "cellSyncBarrierTryWait"; + case 0x705985cd: return "cellSyncQueueTryPush"; + case 0x74c37666: return "_cellSyncLFQueueGetPopPointer"; + case 0x7a51deee: return "_cellSyncLFQueueCompletePopPointer2"; + case 0x811d148e: return "_cellSyncLFQueueDetachLv2EventQueue"; + case 0x91f2b7b0: return "cellSyncMutexUnlock"; + case 0xa5362e73: return "cellSyncQueueClear"; + case 0xa58df87f: return "cellSyncQueueTryPop"; + case 0xa6669751: return "cellSyncRwmTryRead"; + case 0xa9072dee: return "cellSyncMutexInitialize"; + case 0xaa355278: return "cellSyncLFQueueInitialize"; + case 0xaff7627a: return "_cellSyncLFQueueGetSignalAddress"; + case 0xba5961ca: return "_cellSyncLFQueuePushBody"; + case 0xba5bee48: return "cellSyncRwmTryWrite"; + case 0xcece771f: return "cellSyncRwmRead"; + case 0xd06918c4: return "cellSyncMutexTryLock"; + case 0xd59aa307: return "cellSyncLFQueueGetDirection"; + case 0xe18c273c: return "cellSyncLFQueueDepth"; + case 0xe1bc7add: return "_cellSyncLFQueuePopBody"; + case 0xe9bf2110: return "_cellSyncLFQueueGetPushPointer"; + case 0xed773f5f: return "cellSyncRwmWrite"; + case 0xf06a6415: return "cellSyncBarrierNotify"; + case 0xfc48b03f: return "cellSyncRwmInitialize"; + case 0xfe74e8e7: return "_cellSyncLFQueueCompletePopPointer"; + case 0x0080fe88: return "cellSync2MutexUnlock"; + case 0x0c2983ac: return "cellSync2SemaphoreRelease"; + case 0x0c9a0ea9: return "cellSync2QueueTryPop"; + case 0x12f0a27d: return "cellSync2QueueGetSize"; + case 0x164843a7: return "cellSync2SemaphoreFinalize"; + case 0x27f2d61c: return "cellSync2MutexFinalize"; + case 0x2d77fe17: return "_cellSync2SemaphoreAttributeInitialize"; + case 0x4e2ee031: return "cellSync2SemaphoreGetCount"; + case 0x55836e73: return "_cellSync2MutexAttributeInitialize"; + case 0x58be9a0f: return "cellSync2CondInitialize"; + case 0x5b1e4d7a: return "cellSync2CondEstimateBufferSize"; + case 0x5e00d433: return "_cellSync2QueueAttributeInitialize"; + case 0x5e4b0f87: return "cellSync2SemaphoreTryAcquire"; + case 0x63062249: return "cellSync2CondFinalize"; + case 0x6af85cdf: return "cellSync2QueueFinalize"; + case 0x74c2780f: return "cellSync2SemaphoreEstimateBufferSize"; + case 0x7d967d91: return "cellSync2QueuePush"; + case 0x7fd479fe: return "cellSync2QueueTryPush"; + case 0x871af804: return "cellSync2CondSignal"; + case 0x8aae07c2: return "cellSync2CondSignalAll"; + case 0xa400d82e: return "cellSync2MutexLock"; + case 0xa69c749c: return "cellSync2MutexTryLock"; + case 0xbc96d751: return "cellSync2CondWait"; + case 0xc08cc0f9: return "cellSync2QueueEstimateBufferSize"; + case 0xc5dee254: return "cellSync2SemaphoreInitialize"; + case 0xd1b0d146: return "cellSync2SemaphoreAcquire"; + case 0xd51bfae7: return "cellSync2MutexEstimateBufferSize"; + case 0xd83ab0c9: return "cellSync2QueuePop"; + case 0xdf3c532a: return "_cellSync2CondAttributeInitialize"; + case 0xeb81a467: return "cellSync2MutexInitialize"; + case 0xf0e1471c: return "cellSync2QueueGetDepth"; + case 0xf125e044: return "cellSync2QueueInitialize"; + case 0x08db2adf: return "cellSysconfBtGetDeviceList"; + case 0x112a5ee9: return "cellSysmoduleUnloadModule"; + case 0x1ef115ef: return "cellSysmoduleGetImagesize"; + case 0x32267a31: return "cellSysmoduleLoadModule"; + case 0x3c92be09: return "cellSysmoduleFetchImage"; + case 0x5a59e258: return "cellSysmoduleIsLoaded"; + case 0x63ff6ff9: return "cellSysmoduleInitialize"; + case 0x96c07adf: return "cellSysmoduleFinalize"; + case 0xa193143c: return "cellSysmoduleSetMemcontainer"; + case 0x018a1381: return "cellSysutilAvcSetLayoutMode"; + case 0x01f04d94: return "cellSysutilGamePowerOff_I"; + case 0x02ff3c1b: return "cellSysutilUnregisterCallback"; + case 0x073b89d5: return "cellSysutilAvcGetSpeakerVolumeLevel"; + case 0x08269f37: return "cellSysutilAvcGetShowStatus"; + case 0x0bae8772: return "cellVideoOutConfigure"; + case 0x0c316b87: return "cellWebBrowserConfigGetHeapSize2"; + case 0x0e091c36: return "cellSaveDataUserListAutoSave"; + case 0x0f03cfb0: return "cellSaveDataUserListSave"; + case 0x0f8a3b6b: return "cellWebBrowserConfigSetMimeSet"; + case 0x10cabeff: return "cellWebBrowserGetUsrdataOnGameExit"; + case 0x15b0b0cd: return "cellVideoOutGetConfiguration"; + case 0x15df71ed: return "cellSysutilAvcLoadAsync"; + case 0x17dbe8b3: return "cellSysutilAvcJoinRequest"; + case 0x189a74da: return "cellSysutilCheckCallback"; + case 0x1a91874b: return "cellWebBrowserConfigSetFullScreen2"; + case 0x1d99c3ee: return "cellOskDialogGetInputText"; + case 0x1dfbfdd6: return "cellSaveDataListLoad2"; + case 0x1dfcce99: return "cellSysutilGameDataExit"; + case 0x1e7bff94: return "cellSysCacheMount"; + case 0x1e930eef: return "cellVideoOutGetDeviceInfo"; + case 0x1f6629e4: return "cellWebBrowserConfigSetErrorHook2"; + case 0x20543730: return "cellMsgDialogClose"; + case 0x21425307: return "cellSaveDataListAutoLoad"; + case 0x21fc0c71: return "cellGameUnregisterDiscChangeCallback"; + case 0x220894e3: return "cellSysutilEnableBgmPlayback"; + case 0x24644561: return "cellWebBrowserWakeupWithGameExit"; + case 0x248bd1d8: return "cellSaveDataUserListAutoLoad"; + case 0x27ac51e4: return "cellStorageDataImportMove"; + case 0x2a8eada2: return "cellSaveDataFixedLoad2"; + case 0x2a95d8bc: return "cellSysutilGameExit_I"; + case 0x2aae9ef5: return "cellSaveDataFixedSave2"; + case 0x2beac488: return "cellAudioOutGetSoundAvailability2"; + case 0x2dbc92c7: return "cellSysutilAvcShowPanel"; + case 0x2de0d663: return "cellSaveDataListSave2"; + case 0x30d3d12b: return "cellSysutilGameReboot_I"; + case 0x3261a9c8: return "cellWebBrowserConfigSetDisableTabs"; + case 0x35beade0: return "cellOskDialogGetSize"; + case 0x39dd8425: return "cellSaveDataUserListLoad"; + case 0x3d1e1931: return "cellOskDialogUnloadAsync"; + case 0x3dbd2314: return "cellSaveDataListSave"; + case 0x3e22cb4b: return "cellMsgDialogOpenErrorCode"; + case 0x4056c932: return "cellSysutilAvcSetVoiceMuting"; + case 0x40b34847: return "cellSaveDataUserFixedSave"; + case 0x40e895d3: return "cellSysutilGetSystemParamInt"; + case 0x41bc2ca1: return "cellSaveDataFixedSave"; + case 0x41f20828: return "cellOskDialogDisableDimmer"; + case 0x4692ab35: return "cellAudioOutConfigure"; + case 0x46a0285d: return "cellWebBrowserDeactivate"; + case 0x4b6e8560: return "cellWebBrowserCreateRenderWithRect2"; + case 0x4bdec82a: return "cellHddGameCheck2"; + case 0x4dd03a4e: return "cellSaveDataListAutoSave"; + case 0x50183b44: return "cellSaveDataFixedLoad"; + case 0x523a96c4: return "cellGameDataSetSystemVer"; + case 0x52aac4fa: return "cellSaveDataUserAutoSave"; + case 0x52d9457a: return "cellWebBrowserConfigSetFullVersion2"; + case 0x53e39df3: return "cellOskDialogSetSeparateWindowOption"; + case 0x55e425c3: return "cellVideoOutGetConvertCursorColorInfo"; + case 0x58c89c4a: return "cellWebBrowserEstimate"; + case 0x5e91bc26: return "cellSysutilAvcEnumPlayers"; + case 0x5ee3bc26: return "cellSysutilAvcGetVoiceMuting"; + case 0x60a4daab: return "cellWebBrowserConfigSetVersion"; + case 0x6144f033: return "cellWebComponentCreateAsync"; + case 0x619b1427: return "cellWebBrowserConfigSetTabCount2"; + case 0x62b0f803: return "cellMsgDialogAbort"; + case 0x68bc4ff3: return "cellAudioOutRegisterCallback"; + case 0x6c1082aa: return "cellWebBrowserConfigWithVer"; + case 0x6c673f78: return "cellSysutilAvcUnloadAsync"; + case 0x6cfd856f: return "cellSysutilGetBgmPlaybackStatus2"; + case 0x6d087930: return "cellWebBrowserEstimate2"; + case 0x6d7444e6: return "cellWebBrowserActivate"; + case 0x6dfff31d: return "cellWebBrowserSetSystemCallbackUsrdata"; + case 0x6e7264ed: return "cellSaveDataUserFixedLoad"; + case 0x71acb8d3: return "cellSysutilAvcSetVideoMuting"; + case 0x744c1544: return "cellSysCacheClear"; + case 0x749c9b5f: return "cellWebBrowserInitialize"; + case 0x75bbb672: return "cellVideoOutGetNumberOfDevice"; + case 0x7603d3db: return "cellMsgDialogOpen2"; + case 0x7663e368: return "cellAudioOutGetDeviceInfo"; + case 0x76948bfc: return "cellSysconfAbort"; + case 0x76fc8fb1: return "cellWebBrowserConfigSetHeapSize"; + case 0x7871bed4: return "cellVideoOutUnregisterCallback"; + case 0x7bc2c8a8: return "cellMsgDialogProgressBarReset"; + case 0x7d94ca36: return "cellSysutilAvcGetVideoMuting"; + case 0x7f21c918: return "cellOskDialogAddSupportLanguage"; + case 0x7f881be1: return "cellWebBrowserCreate"; + case 0x7f896a1f: return "cellWebBrowserConfigSetCustomExit"; + case 0x7fb3c6a5: return "cellWebBrowserConfig2"; + case 0x7fcfc915: return "cellOskDialogLoadAsync"; + case 0x83668b8e: return "cellWebBrowserConfig"; + case 0x887572d5: return "cellVideoOutGetState"; + case 0x8a4cb646: return "cellWebBrowserCreateWithConfig"; + case 0x8a5dbb58: return "cellWebComponentCreate"; + case 0x8b7ed64b: return "cellSaveDataAutoSave2"; + case 0x8b8a2f48: return "cellSaveDataUserFixedDelete"; + case 0x8e8bc444: return "cellVideoOutRegisterCallback"; + case 0x9117df20: return "cellHddGameCheck"; + case 0x918288fb: return "cellStorageDataImport"; + case 0x938013a0: return "cellSysutilGetSystemParamString"; + case 0x93c523c6: return "cellWebBrowserConfigSetNotifyHook2"; + case 0x93ced48d: return "cellWebBrowserShutdown"; + case 0x94862702: return "cellMsgDialogProgressBarInc"; + case 0x9949bf82: return "cellGameDataExitBroken"; + case 0x9997e6b6: return "cellSysutilGameDataAssignVmc"; + case 0x9c9fe6a4: return "cellWebBrowserConfigSetFunction"; + case 0x9ca9ffa7: return "cellHddGameSetSystemVer"; + case 0x9d6af72a: return "cellMsgDialogProgressBarSetMsg"; + case 0x9d98afa0: return "cellSysutilRegisterCallback"; + case 0x9dfdad46: return "cellAudioOutUnregisterCallback"; + case 0x9fb97b10: return "cellWebBrowserNavigate2"; + case 0xa11552f6: return "cellSysutilGetBgmPlaybackStatus"; + case 0xa322db75: return "cellVideoOutGetResolutionAvailability"; + case 0xa36335a5: return "cellSysutilDisableBgmPlaybackEx"; + case 0xa4dd11cc: return "cellWebBrowserConfigGetHeapSize"; + case 0xa4ed7dfe: return "cellSaveDataDelete"; + case 0xa58943f8: return "cellWebBrowserCreateWithRect2"; + case 0xa5f12145: return "cellWebBrowserCreate2"; + case 0xa9a439e0: return "cellWebBrowserConfigSetUnknownMIMETypeHook2"; + case 0xa9b0c1d9: return "cellGameDataGetSizeKB"; + case 0xa9b62ac8: return "cellWebBrowserConfigSetViewRect2"; + case 0xabc3cd2c: return "cellStorageDataExport"; + case 0xac16777e: return "cellWebBrowserConfigSetStatusHook2"; + case 0xac58ad2b: return "cellSysutilEnableBgmPlaybackEx"; + case 0xafd605b3: return "cellHddGameExitBroken"; + case 0xaffdadc0: return "cellSysutilAvcSetSpeakerVolumeLevel"; + case 0xb2b6cdd0: return "cellSysconfOpen"; + case 0xb53b3d42: return "cellWebBrowserCreateWithConfigFull"; + case 0xb53c54fa: return "cellOskDialogSetKeyLayoutOption"; + case 0xb6d84526: return "cellOskDialogAbort"; + case 0xb72bc4e6: return "cellDiscGameGetBootDiscInfo"; + case 0xbccd70dd: return "cellSysutilAvcCancelJoinRequest"; + case 0xbed85cb8: return "cellWebBrowserDestroy"; + case 0xc01b4e7c: return "cellAudioOutGetSoundAvailability"; + case 0xc22c79b5: return "cellSaveDataAutoLoad"; + case 0xc427890c: return "cellOskDialogSetInitialKeyLayout"; + case 0xc8971db5: return "cellWebBrowserSetLocalContentsAdditionalTitleID"; + case 0xc9645c41: return "cellGameDataCheckCreate2"; + case 0xc96e89e9: return "cellAudioOutSetCopyControl"; + case 0xcdc6aefd: return "cellSaveDataUserAutoLoad"; + case 0xced17573: return "cellSaveDataFixedDelete"; + case 0xcfdd8e87: return "cellSysutilDisableBgmPlayback"; + case 0xcfdf24bb: return "cellVideoOutDebugSetMonitorType"; + case 0xd3790a86: return "cellOskDialogSetDeviceMask"; + case 0xd7a617f5: return "cellWebBrowserConfigSetViewCondition2"; + case 0xd9ea5709: return "cellSysutilAvcHidePanel"; + case 0xdce51399: return "cellWebComponentDestroy"; + case 0xdfdd302e: return "cellDiscGameRegisterDiscChangeCallback"; + case 0xe22ed55d: return "cellWebBrowserConfigSetFunction2"; + case 0xe558748d: return "cellVideoOutGetResolution"; + case 0xe5e2b09d: return "cellAudioOutGetNumberOfDevice"; + case 0xe7951dee: return "cellGameDataCheckCreate"; + case 0xe7fa820b: return "cellSaveDataEnableOverlay"; + case 0xe8dee79c: return "cellWebBrowserDestroy2"; + case 0xeb9d78d8: return "cellSysutilAvcGetLayoutMode"; + case 0xeca938ca: return "cellSysutilAvcSetAttribute"; + case 0xed5d96af: return "cellAudioOutGetConfiguration"; + case 0xedadd797: return "cellSaveDataDelete2"; + case 0xedc34e1a: return "cellDiscGameUnregisterDiscChangeCallback"; + case 0xee7528f3: return "cellWebBrowserConfigSetRequestHook2"; + case 0xef5a353d: return "cellSaveDataListLoad"; + case 0xf0ec3ccc: return "cellOskDialogSetLayoutMode"; + case 0xf1a443e7: return "cellWebBrowserCreateRender2"; + case 0xf2c4a425: return "cellSysutilAvcByeRequest"; + case 0xf3b4b43e: return "cellOskDialogSetInitialInputDevice"; + case 0xf3dbf5a7: return "cellSysutilSetBgmPlaybackExtraParam"; + case 0xf481967f: return "cellSysutilAvcGetAttribute"; + case 0xf4aa8b27: return "cellSysutilAvcCancelByeRequest"; + case 0xf4e3caa0: return "cellAudioOutGetState"; + case 0xf8115d69: return "cellGameRegisterDiscChangeCallback"; + case 0xf81eca25: return "cellMsgDialogOpen"; + case 0xf82e2ef7: return "cellHddGameGetSizeKB"; + case 0xf8a175ec: return "cellSaveDataAutoSave"; + case 0xfbd5c856: return "cellSaveDataAutoLoad2"; + case 0xfe669845: return "cellWebBrowserConfigSetHeapSize2"; + case 0x3343824c: return "cellSysutilApOn"; + case 0x90c2bb19: return "cellSysutilApOff"; + case 0x9e67e0dd: return "cellSysutilApGetRequiredMemSize"; + case 0x02c5417a: return "cellSysutilAvc2GetPlayerInfo"; + case 0x02dc41ee: return "cellSysutilAvc2JoinChat"; + case 0x04e1e1e4: return "cellSysutilAvc2StopStreaming"; + case 0x07236c83: return "cellSysutilAvc2ChangeVideoResolution"; + case 0x0b45cd84: return "cellSysutilAvc2ShowScreen"; + case 0x0f5a2afb: return "cellSysutilAvc2GetVideoMuting"; + case 0x103d6b46: return "cellSysutilAvc2GetWindowAttribute"; + case 0x11f071cb: return "cellSysutilAvc2StopStreaming2"; + case 0x14937714: return "cellSysutilAvc2SetVoiceMuting"; + case 0x16ff9ba0: return "cellSysutilAvc2StartVoiceDetection"; + case 0x17481336: return "cellSysutilAvc2UnloadAsync"; + case 0x178982d9: return "cellSysutilAvc2StopVoiceDetection"; + case 0x1be2b4e0: return "cellSysutilAvc2GetAttribute"; + case 0x1d73ab8c: return "cellSysutilAvc2LoadAsync"; + case 0x207621a8: return "cellSysutilAvc2SetSpeakerVolumeLevel"; + case 0x225142bd: return "cellSysutilAvc2SetWindowString"; + case 0x2f280883: return "cellSysutilAvc2EstimateMemoryContainerSize"; + case 0x2fc0ab58: return "cellSysutilAvc2SetVideoMuting"; + case 0x31fc8b92: return "cellSysutilAvc2SetPlayerVoiceMuting"; + case 0x3447668a: return "cellSysutilAvc2SetStreamingTarget"; + case 0x38f33624: return "cellSysutilAvc2Unload"; + case 0x3a37e7f1: return "cellSysutilAvc2DestroyWindow"; + case 0x3c8c827c: return "cellSysutilAvc2SetWindowPosition"; + case 0x3ef4f668: return "cellSysutilAvc2GetSpeakerVolumeLevel"; + case 0x4c4b9665: return "cellSysutilAvc2IsCameraAttached"; + case 0x55d7bbfd: return "cellSysutilAvc2MicRead"; + case 0x5f3811f8: return "cellSysutilAvc2GetPlayerVoiceMuting"; + case 0x712d51d6: return "cellSysutilAvc2JoinChatRequest"; + case 0x74d22119: return "cellSysutilAvc2StartStreaming"; + case 0x7a69ecc1: return "cellSysutilAvc2SetWindowAttribute"; + case 0x82ced772: return "cellSysutilAvc2GetWindowShowStatus"; + case 0x89456724: return "cellSysutilAvc2InitParam"; + case 0x8a40a618: return "cellSysutilAvc2GetWindowSize"; + case 0x8c2f5be3: return "cellSysutilAvc2SetStreamPriority"; + case 0x97b2da6a: return "cellSysutilAvc2LeaveChatRequest"; + case 0xa26aa437: return "cellSysutilAvc2IsMicAttached"; + case 0xa8dc0efa: return "cellSysutilAvc2CreateWindow"; + case 0xa9f5b75c: return "cellSysutilAvc2GetSpeakerMuting"; + case 0xac170042: return "cellSysutilAvc2ShowWindow"; + case 0xaee75751: return "cellSysutilAvc2SetWindowSize"; + case 0xb81b9777: return "cellSysutilAvc2EnumPlayers"; + case 0xb856b63f: return "cellSysutilAvc2GetWindowString"; + case 0xbf022284: return "cellSysutilAvc2LeaveChat"; + case 0xc35ed665: return "cellSysutilAvc2SetSpeakerMuting"; + case 0xc6c93d62: return "cellSysutilAvc2Load"; + case 0xccf0aeff: return "cellSysutilAvc2SetAttribute"; + case 0xce6780c9: return "cellSysutilAvc2UnloadAsync2"; + case 0xd42657dd: return "cellSysutilAvc2StartStreaming2"; + case 0xd7d6272f: return "cellSysutilAvc2HideScreen"; + case 0xde6afc37: return "cellSysutilAvc2HideWindow"; + case 0xdf2ed367: return "cellSysutilAvc2GetVoiceMuting"; + case 0xe40e3dfc: return "cellSysutilAvc2GetScreenShowStatus"; + case 0xf3b5ff77: return "cellSysutilAvc2Unload2"; + case 0xfc2873a9: return "cellSysutilAvc2GetWindowPosition"; + case 0x1b6e8cd2: return "cellSysutilAvcExtSetWindowRotation"; + case 0x22a36b23: return "cellSysutilAvcExtGetWindowPosition"; + case 0x22ca0929: return "cellSysutilAvcExtSetHideNamePlate"; + case 0x245ff230: return "cellSysutilAvcExtSetWindowPosition"; + case 0x28f0dc04: return "cellSysutilAvcExtGetWindowSize"; + case 0x2d9a1997: return "cellSysutilAvcExtGetWindowShowStatus"; + case 0x326fab55: return "cellSysutilAvcExtGetNamePlateShowStatus"; + case 0x332ee22c: return "cellSysutilAvcExtSetWindowAlpha"; + case 0x40bc33c8: return "cellSysutilAvcExtSetWindowSize"; + case 0x4466c0e2: return "cellSysutilAvcExtShowPanelEx"; + case 0x51ccbe09: return "cellSysutilAvcExtLoadAsyncEx"; + case 0x5a763d0e: return "cellSysutilAvcExtSetShowNamePlate"; + case 0x5ba98e47: return "cellSysutilAvcExtStopVoiceDetection"; + case 0x61b1cb18: return "cellSysutilAvcExtShowWindow"; + case 0x683fe299: return "cellSysutilAvcExtHidePanelEx"; + case 0x739c2f63: return "cellSysutilAvcExtHideWindow"; + case 0x8ed310e5: return "cellSysutilAvcExtGetWindowRotation"; + case 0xaed82c21: return "cellSysutilAvcExtGetWindowAlpha"; + case 0xc851a4c0: return "cellSysutilAvcExtStartVoiceDetection"; + case 0xcbe0c10a: return "cellSysutilAvcExtGetSurfacePointer"; + case 0xd8685383: return "cellSysutilAvcExtInitOptionParam"; + case 0xe8b1c18d: return "cellSysutilAvcExtSetWindowZorder"; + case 0x0bddef7d: return "cellAudioOutUnregisterDevice"; + case 0x18d0ada6: return "cellAudioOutGetDeviceInfo2"; + case 0x1cfa1a11: return "cellVideoOutSetXVColor"; + case 0x269ffedd: return "cellVideoOutSetupDisplay"; + case 0x3d5730ce: return "cellAudioInGetDeviceInfo"; + case 0x4ec8c141: return "cellVideoOutConvertCursorColor"; + case 0x655a0364: return "cellVideoOutGetGamma"; + case 0x65bf9ea3: return "cellAudioInGetAvailableDeviceInfo"; + case 0xc3273d9b: return "cellAudioOutGetAvailableDeviceInfo"; + case 0xc7020f62: return "cellVideoOutSetGamma"; + case 0xc7087631: return "cellAudioOutRegisterDevice"; + case 0xe4645af8: return "cellAudioOutSetDeviceMode"; + case 0xeb6c50fb: return "cellAudioInSetDeviceMode"; + case 0xeb6fcff1: return "cellAudioInRegisterDevice"; + case 0xfa6bcc17: return "cellAudioInUnregisterDevice"; + case 0xfaa275a4: return "cellVideoOutGetScreenSize"; + case 0x571dc686: return "cellSysutilGetLicenseArea"; + case 0x074dbb39: return "cellUsbdAllocateMemory"; + case 0x0f411262: return "cellUsbdInterruptTransfer"; + case 0x254289ac: return "cellUsbdOpenPipe"; + case 0x2fb08e1e: return "cellUsbdScanStaticDescriptor"; + case 0x359befba: return "cellUsbdRegisterLdd"; + case 0x35f22ac3: return "cellUsbdEnd"; + case 0x4e456e81: return "cellUsbdFreeMemory"; + case 0x5c832bd7: return "cellUsbdSetThreadPriority2"; + case 0x5de3af36: return "cellUsbdGetPrivateData"; + case 0x63bfdb97: return "cellUsbdSetPrivateData"; + case 0x64951ac7: return "cellUsbdUnregisterLdd"; + case 0x7a1b6eab: return "cellUsbdHSIsochronousTransfer"; + case 0x7fe92c54: return "cellUsbdRegisterExtraLdd"; + case 0x90460081: return "cellUsbdUnregisterExtraLdd"; + case 0x9763e962: return "cellUsbdClosePipe"; + case 0x97cf128e: return "cellUsbdControlTransfer"; + case 0xac77eb78: return "cellUsbdBulkTransfer"; + case 0xbd554bcb: return "cellUsbdRegisterExtraLdd2"; + case 0xbdbd2428: return "cellUsbdGetDeviceSpeed"; + case 0xc24af1d7: return "cellUsbdSetThreadPriority"; + case 0xd0e766fe: return "cellUsbdInit"; + case 0xd5263dea: return "cellUsbdGetThreadPriority"; + case 0xdb819e03: return "cellUsbdGetDeviceLocation"; + case 0xde58c4c2: return "cellUsbdIsochronousTransfer"; + case 0x01a4cde0: return "cellUsbPspcmPollBindAsync"; + case 0x02955295: return "cellUsbPspcmRecvAsync"; + case 0x0f7b3b6d: return "cellUsbPspcmEnd"; + case 0x17f42197: return "cellUsbPspcmBindAsync"; + case 0x3caddf6c: return "cellUsbPspcmWaitSendAsync"; + case 0x3f22403e: return "cellUsbPspcmPollResetAsync"; + case 0x461dc8cc: return "cellUsbPspcmWaitRecvAsync"; + case 0x4abe830e: return "cellUsbPspcmWaitBindAsync"; + case 0x4af23efa: return "cellUsbPspcmSendAsync"; + case 0x4ef182dd: return "cellUsbPspcmResetAsync"; + case 0x657fcd36: return "cellUsbPspcmInit"; + case 0x7277d7c3: return "cellUsbPspcmSend"; + case 0x7b249315: return "cellUsbPspcmPollRecvAsync"; + case 0x7f0a3eaf: return "cellUsbPspcmPollSendAsync"; + case 0x7ff72b42: return "cellUsbPspcmUnregister"; + case 0x816799dd: return "cellUsbPspcmPollData"; + case 0x97670a90: return "cellUsbPspcmGetAddr"; + case 0xa4a5ddb4: return "cellUsbPspcmCancelBind"; + case 0xabe090e3: return "cellUsbPspcmBind"; + case 0xdb864d11: return "cellUsbPspcmWaitData"; + case 0xe3fbf64d: return "cellUsbPspcmRegister"; + case 0xe68a65ac: return "cellUsbPspcmReset"; + case 0xe76e79ab: return "cellUsbPspcmCancelWaitData"; + case 0xe840f449: return "cellUsbPspcmWaitResetAsync"; + case 0xf20df7fc: return "cellUsbPspcmCalcPoolSize"; + case 0xf9883d3b: return "cellUsbPspcmRecv"; + case 0xfa07d320: return "cellUsbPspcmClose"; + case 0x2b761140: return "cellUserInfoGetStat"; + case 0x3097cc1c: return "cellUserInfoSelectUser_ListType"; + case 0x55123a25: return "cellUserInfoSelectUser_SetList"; + case 0xb3516536: return "cellUserInfoEnableOverlay"; + case 0xc55e338b: return "cellUserInfoGetList"; + case 0x1bb79ff4: return "cellVideoExportProgress"; + case 0x2f457571: return "cellVideoExportInitialize2"; + case 0x6a24cc70: return "cellVideoExportInitialize"; + case 0x81296524: return "cellVideoExportFromFile"; + case 0xc15be817: return "cellVideoExportFinalize"; + case 0x122e0d0f: return "cellVideoUploadInitialize"; + case 0x0a563878: return "cellVoiceStart"; + case 0x18d3df30: return "cellVoiceDisconnectIPortFromOPort"; + case 0x20bafe31: return "cellVoiceDebugTopology"; + case 0x2a01013e: return "cellVoiceCreateNotifyEventQueue"; + case 0x2de54871: return "cellVoiceCreatePort"; + case 0x2f24fea3: return "cellVoiceUpdatePort"; + case 0x30f0b5ab: return "cellVoiceWriteToIPortEx"; + case 0x35d84910: return "cellVoiceSetNotifyEventQueue"; + case 0x36472c57: return "cellVoiceReadFromOPort"; + case 0x3dad26e7: return "cellVoiceWriteToIPort"; + case 0x474609e2: return "cellVoiceGetMuteFlag"; + case 0x54ac3519: return "cellVoiceGetPortInfo"; + case 0x762dc193: return "cellVoiceGetVolume"; + case 0x7bf17b15: return "cellVoiceResumePort"; + case 0x7e60adc6: return "cellVoiceSetBitRate"; + case 0x7f3963f7: return "cellVoiceResumePortAll"; + case 0x87c71b06: return "cellVoicePausePort"; + case 0x94d51f92: return "cellVoiceStartEx"; + case 0x9d0f4af1: return "cellVoiceSetPortAttr"; + case 0x9f70c475: return "cellVoiceDeletePort"; + case 0xae6a21d5: return "cellVoiceConnectIPortToOPort"; + case 0xb1a2c38f: return "cellVoiceInitEx"; + case 0xbef53a2b: return "cellVoiceGetBitRate"; + case 0xc7cf1182: return "cellVoiceInit"; + case 0xd14e784d: return "cellVoicePausePortAll"; + case 0xd3a84be1: return "cellVoiceStop"; + case 0xd4d80ea5: return "cellVoiceSetMuteFlagAll"; + case 0xd5ae37d8: return "cellVoiceSetVolume"; + case 0xd6811aa7: return "cellVoiceGetSignalState"; + case 0xdd000886: return "cellVoiceRemoveNotifyEventQueue"; + case 0xdde35a0c: return "cellVoiceSetMuteFlag"; + case 0xe0e1ae12: return "cellVoiceEnd"; + case 0xf629ed67: return "cellVoiceGetPortAttr"; + case 0xff0fa43a: return "cellVoiceResetPort"; + case 0x10ef39f6: return "cellVpostClose"; + case 0x40524325: return "cellVpostOpenEx"; + case 0x95e788c3: return "cellVpostQueryAttr"; + case 0xabb8cc3d: return "cellVpostExec"; + case 0xcd33f3e2: return "cellVpostOpen"; + case 0x02eb41bb: return "cellGemGetEnvironmentLightingColor"; + case 0x0ecd2261: return "cellGemUpdateStart"; + case 0x13ea7c64: return "cellGemInit"; + case 0x18ea899a: return "cellGemGetTrackerHue"; + case 0x1a13d010: return "cellGemConvertVideoFinish"; + case 0x1a2518a2: return "cellGemEnableMagnetometer"; + case 0x1b30cc22: return "cellGemGetRGB"; + case 0x1f6328d8: return "cellGemWriteExternalPort"; + case 0x2d2c2764: return "cellGemGetAllTrackableHues"; + case 0x2e0a170d: return "cellGemGetMemorySize"; + case 0x41ae9c31: return "cellGemUpdateFinish"; + case 0x4219de31: return "cellGemEnableCameraPitchAngleCorrection"; + case 0x49609306: return "cellGemSetRumble"; + case 0x6441d38d: return "cellGemGetState"; + case 0x6a5b7048: return "cellGemGetAccelerometerPositionInDevice"; + case 0x6db6b007: return "cellGemGetRumble"; + case 0x6dce048c: return "cellGemConvertVideoStart"; + case 0x6fc4c791: return "cellGemFilterState"; + case 0x77e08704: return "cellGemSetYaw"; + case 0x8befac67: return "cellGemGetCameraState"; + case 0x928ac5f8: return "cellGemTrackHues"; + case 0x92cc4b34: return "cellGemGetImageState"; + case 0x9b9714a4: return "cellGemClearStatusFlags"; + case 0x9e1dff96: return "cellGemGetInfo"; + case 0xa03ef587: return "cellGemPrepareCamera"; + case 0xafa99ead: return "cellGemCalibrate"; + case 0xb8ef56a6: return "cellGemGetHuePixels"; + case 0xc07896f9: return "cellGemPrepareVideoConvert"; + case 0xc7622586: return "cellGemHSVtoRGB"; + case 0xce6d7791: return "cellGemForceRGB"; + case 0xd37b127a: return "cellGemGetInertialState"; + case 0xde54e2fc: return "cellGemReset"; + case 0xe1f85a80: return "cellGemEnd"; + case 0xe3e4f0d6: return "cellGemInvalidateCalibration"; + case 0xfb5887f9: return "cellGemIsTrackableHue"; + case 0xfee33481: return "cellGemGetStatusFlags"; + case 0x40ad67eb: return "cellMediatorCreateContext"; + case 0x4aecea24: return "cellMediatorGetSignatureLength"; + case 0x4d249136: return "cellMediatorGetUserInfo"; + case 0x5d4431f0: return "cellMediatorFlushCache"; + case 0x6b8f5cb9: return "cellMediatorSign"; + case 0x85dc6981: return "cellMediatorPostReports"; + case 0x9d11991d: return "cellMediatorGetProviderUrl"; + case 0xa14c6000: return "cellMediatorReliablePostReports"; + case 0xc324f60c: return "cellMediatorCloseContext"; + case 0xf7e4a50a: return "cellMediatorGetStatus"; + case 0x0053e2d8: return "cellVdecOpenEx"; + case 0x16698e83: return "cellVdecClose"; + case 0x17c702b9: return "cellVdecGetPicItem"; + case 0x2bf4ddd2: return "cellVdecDecodeAu"; + case 0x807c861a: return "cellVdecGetPicture"; + case 0x824433f0: return "cellVdecEndSeq"; + case 0xb6bbcd5d: return "cellVdecOpen"; + case 0xc757c2aa: return "cellVdecStartSeq"; + case 0xc982a84a: return "cellVdecQueryAttrEx"; + case 0xe13ef6fc: return "cellVdecSetFrameRate"; + case 0xff6f6ebe: return "cellVdecQueryAttr"; + case 0x000e53cc: return "sceNpManagerSubSignout"; + case 0x01cd9cfd: return "sceNpCommerceGetChildProductSkuInfo"; + case 0x01fbbc9b: return "sceNpBasicSendMessageGui"; + case 0x03c741a7: return "sceNpMatchingGetResult"; + case 0x04372385: return "sceNpBasicGetFriendListEntry"; + case 0x04ca5e6a: return "sceNpScoreRecordGameData"; + case 0x0561448b: return "sceNpCommerceGetDataFlagAbort"; + case 0x05af1cb8: return "sceNpBasicGetMatchingInvitationEntry"; + case 0x05d65dff: return "sceNpScoreGetRankingByNpId"; + case 0x0968aa36: return "sceNpManagerGetTicket"; + case 0x14497465: return "sceNpMatchingQuickMatchGUI"; + case 0x155de760: return "sceNpSignalingGetConnectionInfo"; + case 0x166dcc11: return "sceNpLookupNpId"; + case 0x1672170e: return "sceNpScoreRecordScore"; + case 0x168a3117: return "sceNpBasicAddPlayersHistory"; + case 0x168fcece: return "sceNpManagerGetAccountAge"; + case 0x16f88a6f: return "sceNpManagerGetPsHandle"; + case 0x1a2704f7: return "sceNpScoreWaitAsync"; + case 0x1a3fcb69: return "sceNpCommerceGetSkuUserData"; + case 0x1ae8a549: return "sceNpBasicAddBlockListEntry"; + case 0x1fdb3ec2: return "sceNpLookupUserProfileWithAvatarSizeAsync"; + case 0x21206642: return "sceNpScoreGetRankingByRangeAsync"; + case 0x227f8763: return "sceNpScoreGetClansRankingByClanIdAsync"; + case 0x259113b8: return "sceNpScoreDestroyTitleCtx"; + case 0x260caedd: return "sceNpBasicGetFriendPresenceByNpId2"; + case 0x2687a127: return "sceNpSignalingGetCtxOpt"; + case 0x26b3bc94: return "sceNpMatchingGetResultGUI"; + case 0x26f33146: return "sceNpCommerceGetProductCategoryStart"; + case 0x2706eaa1: return "sceNpScoreSetPlayerCharacterId"; + case 0x276c72b2: return "sceNpSignalingSetCtxOpt"; + case 0x27c69eba: return "sceNpBasicAddFriend"; + case 0x29dd45dc: return "sceNpScoreSetTimeout"; + case 0x2a76895a: return "sceNpScoreGetClansRankingByClanId"; + case 0x2ad7837d: return "sceNpMatchingAcceptInvitationGUI"; + case 0x2be41ece: return "sceNpCommerceGetNumOfChildCategory"; + case 0x2cd2a1af: return "sceNpScoreSanitizeCommentAsync"; + case 0x2e1c5068: return "sceNpMatchingDestroyCtx"; + case 0x2ecd48ed: return "sceNpDrmVerifyUpgradeLicense"; + case 0x2f2c6b3e: return "sceNpProfileAbortGui"; + case 0x2fccbfe0: return "sceNpLookupUserProfileWithAvatarSize"; + case 0x30d1cbde: return "sceNpBasicGetMessageEntry"; + case 0x32200389: return "sceNpManagerGetMyLanguages"; + case 0x32c78a6a: return "sceNpBasicGetFriendPresenceByIndex"; + case 0x32cf311f: return "sceNpScoreInit"; + case 0x32febb4c: return "sceNpMatchingSearchJoinRoomGUI"; + case 0x34cc0ca4: return "sceNpMatchingKickRoomMember"; + case 0x34ce82a0: return "sceNpSignalingGetConnectionFromPeerAddress"; + case 0x359642a6: return "sceNpCommerceGetCategoryDescription"; + case 0x36d0c2c5: return "sceNpManagerGetAvatarUrl"; + case 0x39a69619: return "sceNpCommerceGetSkuId"; + case 0x3b02418d: return "sceNpScoreGetGameData"; + case 0x3cc8588a: return "sceNpMatchingCreateRoomGUI"; + case 0x3d1760dc: return "sceNpLookupAbortTransaction"; + case 0x3db7914d: return "sceNpScoreGetRankingByNpIdAsync"; + case 0x3f0808aa: return "sceNpBasicSetPresence"; + case 0x3f195b3a: return "sceNpCommerceGetProductCategoryResult"; + case 0x4026eac5: return "sceNpBasicRegisterContextSensitiveHandler"; + case 0x41ffd4f2: return "sceNpScoreGetClansMembersRankingByNpIdPcId"; + case 0x433fcb30: return "sceNpScoreGetClansMembersRankingByNpIdPcIdAsync"; + case 0x43b989f5: return "sceNpBasicSendMessageAttachment"; + case 0x442381f7: return "sceNpManagerSubSignin"; + case 0x45f8f3aa: return "sceNpCustomMenuRegisterActions"; + case 0x474b7b13: return "sceNpMatchingJoinRoomGUI"; + case 0x481ce0e8: return "sceNpBasicAbortGui"; + case 0x4885aa18: return "sceNpTerm"; + case 0x4a18a89e: return "sceNpMatchingSetRoomInfoNoLimit"; + case 0x4b9efb7a: return "sceNpManagerGetCachedInfo"; + case 0x4d5e0670: return "sceNpScoreGetClansMembersRankingByRangeAsync"; + case 0x4d9c615d: return "sceNpBasicGetClanMessageEntry"; + case 0x50b86d94: return "sceNpSignalingAddExtendedHandler"; + case 0x52a6b523: return "sceNpManagerUnregisterCallback"; + case 0x58fa4fcd: return "sceNpManagerGetTicketParam"; + case 0x5d543bbe: return "sceNpBasicGetMessageAttachmentEntry"; + case 0x5de61626: return "sceNpLookupDestroyTitleCtx"; + case 0x5e117ed5: return "sceNpLookupTitleStorageAsync"; + case 0x5e849303: return "sceNpBasicSetPresenceDetails2"; + case 0x5f2d9257: return "sceNpLookupInit"; + case 0x60440c73: return "sceNpManagerSubSigninAbortGui"; + case 0x60897c38: return "sceNpSignalingActivateConnection"; + case 0x6356082e: return "sceNpSignalingCreateCtx"; + case 0x6453b27b: return "sceNpBasicGetFriendPresenceByIndex2"; + case 0x64a704cc: return "sceNpBasicRecvMessageAttachmentLoad"; + case 0x64dbb89d: return "sceNpSignalingCancelPeerNetInfo"; + case 0x674bb9ff: return "sceNpCommerceGetProductCategoryAbort"; + case 0x691f429d: return "sceNpMatchingGetRoomInfo"; + case 0x6cb81eb2: return "sceNpCommerceDestroyProductCategory"; + case 0x6d4adc3b: return "sceNpScoreGetClansMembersRankingByRange"; + case 0x6e2ab18b: return "sceNpCommerceGetCategoryName"; + case 0x6ee62ed2: return "sceNpManagerGetContentRatingFlag"; + case 0x6f5e8143: return "sceNpScoreCreateTransactionCtx"; + case 0x6f8fd267: return "sceNpMatchingSetRoomInfo"; + case 0x71e5af7e: return "sceNpLookupSetTimeout"; + case 0x7208dc08: return "sceNpCommerceGetNumOfChildProductSku"; + case 0x73931bd0: return "sceNpBasicGetBlockListEntryCount"; + case 0x73a2e36b: return "sceNpMatchingGetRoomMemberListLocal"; + case 0x741fbf24: return "sceNpScoreGetClanMemberGameData"; + case 0x7508112e: return "sceNpLookupPollAsync"; + case 0x75eb50cb: return "sceNpSignalingGetPeerNetInfo"; + case 0x78d7f9ad: return "sceNpCommerceGetSkuPrice"; + case 0x79225aa3: return "sceNpCommerceGetCurrencyCode"; + case 0x7b7e9137: return "sceNpScoreGetClansRankingByRangeAsync"; + case 0x7be47e61: return "sceNpScoreCensorCommentAsync"; + case 0x7deb244c: return "sceNpScoreCensorComment"; + case 0x7e2fef28: return "sceNpManagerRequestTicket"; + case 0x806960ab: return "sceNpBasicRecvMessageCustom"; + case 0x816c6a5f: return "_sceNpSysutilClientFree"; + case 0x8297f1ec: return "sceNpManagerRequestTicket2"; + case 0x8440537c: return "sceNpLookupTerm"; + case 0x860b1756: return "sceNpLookupTitleSmallStorageAsync"; + case 0x8b7bbd73: return "sceNpMatchingSendInvitationGUI"; + case 0x8d1d096c: return "sceNpCommerceInitProductCategory"; + case 0x8d4518a0: return "sceNpCommerceSetDataFlagFinish"; + case 0x9153bdf4: return "sceNpBasicGetMessageAttachmentEntryCount"; + case 0x9281e87a: return "sceNpCommerceGetDataFlagFinish"; + case 0x936df4aa: return "sceNpCommerceGetProductId"; + case 0x9452f4f8: return "sceNpCommerceGetCategoryImageURL"; + case 0x9458f464: return "sceNpCustomMenuRegisterExceptionList"; + case 0x95c7bba3: return "sceNpSignalingTerminateConnection"; + case 0x9851f805: return "sceNpScoreTerm"; + case 0x99ac9952: return "sceNpCommerceSetDataFlagStart"; + case 0x9ad7fbd1: return "sceNpSignalingGetLocalNetInfo"; + case 0x9ee9f97e: return "sceNpLookupTitleStorage"; + case 0xa15f35fe: return "sceNpBasicGetPlayersHistoryEntryCount"; + case 0xa1709abd: return "sceNpManagerGetEntitlementById"; + case 0xa284bd1d: return "sceNpMatchingSetRoomSearchFlag"; + case 0xa7a090e5: return "sceNpScorePollAsync"; + case 0xa7bff757: return "sceNpManagerGetStatus"; + case 0xa85a4951: return "sceNpCommerceGetSkuDescription"; + case 0xa8afa7d4: return "sceNpBasicGetCustomInvitationEntryCount"; + case 0xa8cf8451: return "sceNpSignalingDestroyCtx"; + case 0xaa16695f: return "sceNpDrmProcessExitSpawn"; + case 0xac66568c: return "sceNpMatchingCreateCtx"; + case 0xacb9ee8e: return "sceNpBasicUnregisterHandler"; + case 0xad218faf: return "sceNpDrmIsAvailable"; + case 0xaee8cf71: return "sceNpCommerceGetCategoryId"; + case 0xaf3eba5a: return "sceNpCommerceDoCheckoutFinishAsync"; + case 0xaf505def: return "sceNpBasicGetMatchingInvitationEntryCount"; + case 0xaf57d9c9: return "sceNpCommerceGetCurrencyDecimals"; + case 0xafef640d: return "sceNpBasicGetFriendListEntryCount"; + case 0xb020684e: return "sceNpMatchingGetRoomInfoNoLimit"; + case 0xb082003b: return "sceNpScoreGetClansRankingByRange"; + case 0xb1c02d66: return "sceNpCommerceGetCurrencyInfo"; + case 0xb1e0718b: return "sceNpManagerGetAccountRegion"; + case 0xb5cb2d56: return "sceNpBasicRecvMessageAttachment"; + case 0xb6017827: return "sceNpLookupAvatarImage"; + case 0xb66d1c46: return "sceNpManagerGetEntitlementIdList"; + case 0xb9f93bbb: return "sceNpScoreCreateTitleCtx"; + case 0xba65de6d: return "sceNpCommerceGetChildCategoryInfo"; + case 0xbab91fc9: return "sceNpBasicGetPlayersHistoryEntry"; + case 0xbcc09fe7: return "sceNpBasicRegisterHandler"; + case 0xbcdbb2ab: return "sceNpBasicAddPlayersHistoryAsync"; + case 0xbd28fdbf: return "sceNpInit"; + case 0xbdc07fd5: return "sceNpManagerGetNetworkTime"; + case 0xbe07c708: return "sceNpManagerGetOnlineId"; + case 0xbe0e3ee2: return "sceNpDrmVerifyUpgradeLicense2"; + case 0xbe81c71c: return "sceNpBasicSetPresenceDetails"; + case 0xbef887e5: return "sceNpScoreGetClanMemberGameDataAsync"; + case 0xbf607ec6: return "sceNpBasicGetClanMessageEntryCount"; + case 0xbf9eea93: return "sceNpLookupAvatarImageAsync"; + case 0xc3a991ee: return "sceNpScoreGetRankingByNpIdPcId"; + case 0xc4b6cd8f: return "sceNpScoreGetRankingByNpIdPcIdAsync"; + case 0xc5f4cf82: return "sceNpScoreDestroyTransactionCtx"; + case 0xca0a2d04: return "sceNpSignalingGetConnectionStatus"; + case 0xca39c4b2: return "sceNpLookupTitleSmallStorage"; + case 0xccbe2e69: return "sceNpCommerceGetSkuImageURL"; + case 0xce81c7f0: return "sceNpLookupCreateTitleCtx"; + case 0xceeebc7a: return "sceNpProfileCallGui"; + case 0xcf51864b: return "sceNpDrmGetTimelimit"; + case 0xcfd469e4: return "sceNpCommerceGetProductCategoryFinish"; + case 0xd03cea35: return "sceNpCommerceGetDataFlagState"; + case 0xd053f113: return "sceNpBasicGetCustomInvitationEntry"; + case 0xd0958814: return "sceNpSignalingGetPeerNetInfoResult"; + case 0xd12e40ae: return "sceNpLookupNpIdAsync"; + case 0xd208f91d: return "sceNpUtilCmpNpId"; + case 0xd20d7798: return "sceNpMatchingKickRoomMemberWithOpt"; + case 0xd737fd2d: return "sceNpLookupWaitAsync"; + case 0xd7fb1fa6: return "sceNpFriendlistCustom"; + case 0xdae2d351: return "sceNpMatchingGrantOwnership"; + case 0xdb2e4dc2: return "sceNpScoreGetGameDataAsync"; + case 0xdbdb909f: return "sceNpCommerceGetDataFlagStart"; + case 0xddce7d15: return "sceNpScoreGetBoardInfoAsync"; + case 0xded17c26: return "sceNpScoreGetClansMembersRankingByNpId"; + case 0xdfd63b62: return "sceNpLookupUserProfile"; + case 0xe035f7d6: return "sceNpBasicGetEvent"; + case 0xe1c9f675: return "sceNpBasicMarkMessageAsUsed"; + case 0xe24eea19: return "sceNpMatchingGetRoomListLimitGUI"; + case 0xe2877bea: return "sceNpCommerceDestroyCtx"; + case 0xe36c660e: return "sceNpCommerceDoCheckoutStartAsync"; + case 0xe6c8f3f9: return "sceNpDrmProcessExitSpawn2"; + case 0xe7dcd3b4: return "sceNpManagerRegisterCallback"; + case 0xe853d388: return "sceNpSignalingGetConnectionFromNpId"; + case 0xe8a67160: return "sceNpScoreGetClansMembersRankingByNpIdAsync"; + case 0xea2e9ffc: return "sceNpLookupCreateTransactionCtx"; + case 0xeb5f2544: return "sceNpCommerceGetProductName"; + case 0xeb7a3d84: return "sceNpManagerGetChatRestrictionFlag"; + case 0xeb9df054: return "sceNpCommerceGetCategoryInfo"; + case 0xec0a1fbf: return "sceNpBasicSendMessage"; + case 0xecd503de: return "sceNpBasicGetMessageEntryCount"; + case 0xee0cc40c: return "_sceNpSysutilClientMalloc"; + case 0xee530059: return "sceNpCommerceGetSkuName"; + case 0xee5b20d9: return "sceNpScoreAbortTransaction"; + case 0xee64cf8e: return "sceNpMatchingGetRoomSearchFlag"; + case 0xf042b14f: return "sceNpDrmIsAvailable2"; + case 0xf0a9182b: return "sceNpFriendlist"; + case 0xf0b1e399: return "sceNpScoreRecordScoreAsync"; + case 0xf1b77918: return "sceNpScoreSanitizeComment"; + case 0xf283c143: return "sceNpDrmExecuteGamePurchase"; + case 0xf2b3338a: return "sceNpBasicGetBlockListEntry"; + case 0xf42c0df8: return "sceNpManagerGetOnlineName"; + case 0xf4e0f607: return "sceNpScoreGetBoardInfo"; + case 0xf59e1da8: return "sceNpFriendlistAbortGui"; + case 0xf5ff5f31: return "sceNpUtilCmpNpIdInOrder"; + case 0xf76847c2: return "sceNpScoreRecordGameDataAsync"; + case 0xf806c54c: return "sceNpMatchingLeaveRoom"; + case 0xf9732ac8: return "sceNpCustomMenuActionSetActivation"; + case 0xfb87cf5e: return "sceNpLookupDestroyTransactionCtx"; + case 0xfbc82301: return "sceNpScoreGetRankingByRange"; + case 0xfcac355a: return "sceNpCommerceCreateCtx"; + case 0xfd0eb5ae: return "sceNpSignalingDeactivateConnection"; + case 0xfd39ae13: return "sceNpBasicGetFriendPresenceByNpId"; + case 0xfe37a7f4: return "sceNpManagerGetNpId"; + case 0xff0a2378: return "sceNpLookupUserProfileAsync"; + case 0x01379fd7: return "sceNpMatching2DestroyContext"; + case 0x02065e3d: return "sceNpMatching2LeaveLobby"; + case 0x03a2f42a: return "sceNpMatching2RegisterLobbyMessageCallback"; + case 0x05bf2fbd: return "sceNpMatching2GetWorldInfoList"; + case 0x0884fc95: return "sceNpMatching2RegisterLobbyEventCallback"; + case 0x0b2218a3: return "sceNpMatching2GetLobbyMemberDataInternalList"; + case 0x0d22867f: return "sceNpMatching2SearchRoom"; + case 0x0ebe4c6b: return "sceNpMatching2SignalingGetConnectionStatus"; + case 0x1022e6d6: return "sceNpMatching2SetUserInfo"; + case 0x12034412: return "sceNpMatching2GetClanLobbyId"; + case 0x129663d0: return "sceNpMatching2GetLobbyMemberDataInternal"; + case 0x12d0b0f9: return "sceNpMatching2ContextStart"; + case 0x16b3e5a4: return "sceNpMatching2CreateServerContext"; + case 0x196a06f9: return "sceNpMatching2GetMemoryInfo"; + case 0x1f372697: return "sceNpMatching2LeaveRoom"; + case 0x215b0d75: return "sceNpMatching2SetRoomDataExternal"; + case 0x23009d07: return "sceNpMatching2Term2"; + case 0x26ae9ff8: return "sceNpMatching2SignalingGetConnectionInfo"; + case 0x28cad8b3: return "sceNpMatching2SendRoomMessage"; + case 0x29e78389: return "sceNpMatching2JoinLobby"; + case 0x2c5b7fc9: return "sceNpMatching2GetRoomMemberDataExternalList"; + case 0x2ed909dc: return "sceNpMatching2AbortRequest"; + case 0x2fe0da7d: return "sceNpMatching2Term"; + case 0x3457c0db: return "sceNpMatching2GetServerInfo"; + case 0x3c00c9d4: return "sceNpMatching2GetEventData"; + case 0x3cc27344: return "sceNpMatching2GetRoomSlotInfoLocal"; + case 0x3f3bd413: return "sceNpMatching2SendLobbyChatMessage"; + case 0x3f62c759: return "sceNpMatching2Init"; + case 0x41251f74: return "sceNp2Init"; + case 0x430ce063: return "sceNpMatching2AbortContextStart"; + case 0x490124fd: return "sceNpMatching2GetRoomMemberIdListLocal"; + case 0x5721e711: return "sceNpMatching2JoinRoom"; + case 0x58a04247: return "sceNpMatching2GetRoomMemberDataInternalLocal"; + case 0x62d446ac: return "sceNpMatching2GetCbQueueInfo"; + case 0x66f19527: return "sceNpMatching2KickoutRoomMember"; + case 0x6ba4c668: return "sceNpMatching2ContextStartAsync"; + case 0x6fcd84c1: return "sceNpMatching2SetSignalingOptParam"; + case 0x748029a2: return "sceNpMatching2RegisterContextCallback"; + case 0x7bf6e152: return "sceNpMatching2SendRoomChatMessage"; + case 0x817d1090: return "sceNpMatching2SetRoomDataInternal"; + case 0x8b209ca2: return "sceNpMatching2GetRoomDataInternal"; + case 0x8d3f8d49: return "sceNpMatching2SignalingGetPingInfo"; + case 0x8e5cfe9f: return "sceNpMatching2GetServerIdListLocal"; + case 0x8e930999: return "sceNpUtilBuildCdnUrl"; + case 0x9344d41f: return "sceNpMatching2GrantRoomOwner"; + case 0x9cbce3f2: return "sceNpMatching2CreateContext"; + case 0xa2b01449: return "sceNpMatching2GetSignalingOptParamLocal"; + case 0xa9e6103e: return "sceNpMatching2RegisterSignalingCallback"; + case 0xaa6c2c43: return "sceNpMatching2ClearEventData"; + case 0xaadb7c12: return "sceNp2Term"; + case 0xac98b03a: return "sceNpMatching2GetUserInfoList"; + case 0xb0c51412: return "sceNpMatching2GetRoomMemberDataInternal"; + case 0xb851aacf: return "sceNpMatching2SetRoomMemberDataInternal"; + case 0xba578d19: return "sceNpMatching2JoinProhibitiveRoom"; + case 0xbf014813: return "sceNpMatching2SignalingSetCtxOpt"; + case 0xc6b63b7e: return "sceNpMatching2DeleteServerContext"; + case 0xdb87b088: return "sceNpMatching2SetDefaultRequestOptParam"; + case 0xdcb6b27d: return "sceNpMatching2RegisterRoomEventCallback"; + case 0xde6d308b: return "sceNpMatching2GetRoomPasswordLocal"; + case 0xe4ac32ca: return "sceNpMatching2GetRoomDataExternalList"; + case 0xe7a3bc7a: return "sceNpMatching2CreateJoinRoom"; + case 0xe9946648: return "sceNpMatching2SignalingGetCtxOpt"; + case 0xefbd9357: return "sceNpMatching2GetLobbyInfoList"; + case 0xeffe5a16: return "sceNpMatching2GetLobbyMemberIdListLocal"; + case 0xefff8779: return "sceNpMatching2SendLobbyInvitation"; + case 0xf43c647a: return "sceNpMatching2ContextStop"; + case 0xf4babd3f: return "sceNpMatching2Init2"; + case 0xfa0583c6: return "sceNpMatching2SetLobbyMemberDataInternal"; + case 0xfee11e72: return "sceNpMatching2RegisterRoomMessageCallback"; + case 0x095e12c6: return "sceNpClansSendInvitationResponse"; + case 0x09f9e1a9: return "sceNpClansUpdateClanInfo"; + case 0x0df25834: return "sceNpClansRetrieveChallenges"; + case 0x1221a1bf: return "sceNpClansSearchByProfile"; + case 0x20472da0: return "sceNpClansGetMemberInfo"; + case 0x299ccc9b: return "sceNpClansCancelMembershipRequest"; + case 0x38dadf1f: return "sceNpClansGetAutoAcceptStatus"; + case 0x42332cb7: return "sceNpClansTerm"; + case 0x4826f6d5: return "sceNpClansDisbandClan"; + case 0x487de998: return "sceNpClansGetClanInfo"; + case 0x4d06aef7: return "sceNpClansAddBlacklistEntry"; + case 0x560f717b: return "sceNpClansLeaveClan"; + case 0x56bc5a7c: return "sceNpClansGetBlacklist"; + case 0x59743b2b: return "sceNpClansSendMembershipRequest"; + case 0x5bff9da1: return "sceNpClansRemoveBlacklistEntry"; + case 0x5da94854: return "sceNpClansUpdateAutoAcceptStatus"; + case 0x672399a8: return "sceNpClansGetClanListByNpId"; + case 0x726dffd5: return "sceNpClansCancelInvitation"; + case 0x727aa7f8: return "sceNpClansRetrieveAnnouncements"; + case 0x83d65529: return "sceNpClansPostChallenge"; + case 0x856ff5c0: return "sceNpClansGetMemberList"; + case 0x8e785b97: return "sceNpClansRetrievePostedChallenges"; + case 0x942dbdc4: return "sceNpClansSendMembershipResponse"; + case 0x9a72232d: return "sceNpClansCreateRequest"; + case 0x9b820047: return "sceNpClansInit"; + case 0x9cac2085: return "sceNpClansChangeMemberRole"; + case 0xa6a31a38: return "sceNpClansCreateClan"; + case 0xaa7912b5: return "sceNpClansKickMember"; + case 0xace0cfba: return "sceNpClansSearchByName"; + case 0xada45b84: return "sceNpClansPostAnnouncement"; + case 0xbc05ef31: return "sceNpClansSendInvitation"; + case 0xca4181b4: return "sceNpClansGetClanList"; + case 0xce6dc0f0: return "sceNpClansRemoveChallenge"; + case 0xd3346dc4: return "sceNpClansRemovePostedChallenge"; + case 0xd6551cd1: return "sceNpClansDestroyRequest"; + case 0xdbf300ca: return "sceNpClansJoinClan"; + case 0xe2590f60: return "sceNpClansRemoveAnnouncement"; + case 0xe82969e2: return "sceNpClansAbortRequest"; + case 0xf4a2d52b: return "sceNpClansUpdateMemberInfo"; + case 0x104551a6: return "sceNpCommerce2DoCheckoutStartAsync"; + case 0x146618df: return "sceNpCommerce2GetProductInfoListGetResult"; + case 0x150fdca3: return "sceNpCommerce2GetContentRatingDescriptor"; + case 0x1fa1b312: return "sceNpCommerce2GetStoreBrowseUserdata"; + case 0x2a910f05: return "sceNpCommerce2DestroyReq"; + case 0x3539d233: return "sceNpCommerce2Init"; + case 0x371a2edd: return "sceNpCommerce2GetCategoryContentsStart"; + case 0x3d627d81: return "sceNpCommerce2GetBGDLAvailability"; + case 0x410d42be: return "sceNpCommerce2DoDlListFinishAsync"; + case 0x4d4a094c: return "sceNpCommerce2Term"; + case 0x62023e98: return "sceNpCommerce2CreateSessionAbort"; + case 0x6ca9efd4: return "sceNpCommerce2DoDlListStartAsync"; + case 0x6f67ea80: return "sceNpCommerce2DestroyCtx"; + case 0x7370d8d0: return "sceNpCommerce2GetCategoryContentsCreateReq"; + case 0x8df0057f: return "sceNpCommerce2AbortReq"; + case 0x8f46325b: return "sceNpCommerce2GetProductInfoStart"; + case 0x91f8843d: return "sceNpCommerce2CreateSessionFinish"; + case 0x972ab46c: return "sceNpCommerce2GetContentInfo"; + case 0x9825a0fc: return "sceNpCommerce2DoProductBrowseStartAsync"; + case 0x9cde07cc: return "sceNpCommerce2GetProductInfoListStart"; + case 0x9d9cb96b: return "sceNpCommerce2DestroyGetCategoryContentsResult"; + case 0xa5a863fe: return "sceNpCommerce2SetBGDLAvailability"; + case 0xa975ebb4: return "sceNpCommerce2GetProductInfoCreateReq"; + case 0xa9f945b3: return "sceNpCommerce2DoProductCodeFinishAsync"; + case 0xac78c1f3: return "sceNpCommerce2GetContentRatingInfoFromCategoryInfo"; + case 0xb23e3bd1: return "sceNpCommerce2DoProductBrowseFinishAsync"; + case 0xbd49eab2: return "sceNpCommerce2GetCategoryInfo"; + case 0xbf5f58ea: return "sceNpCommerce2GetProductInfoGetResult"; + case 0xca0ea996: return "sceNpCommerce2GetCategoryContentsGetResult"; + case 0xcc18cd2c: return "sceNpCommerce2CreateSessionStart"; + case 0xd43a130e: return "sceNpCommerce2DoCheckoutFinishAsync"; + case 0xd8a473a3: return "sceNpCommerce2InitGetCategoryContentsResult"; + case 0xd9956ce7: return "sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult"; + case 0xd9fdcec2: return "sceNpCommerce2CreateCtx"; + case 0xda8e322d: return "sceNpCommerce2GetPrice"; + case 0xdb19194c: return "sceNpCommerce2GetGameSkuInfoFromGameProductInfo"; + case 0xde7ab33d: return "sceNpCommerce2DoProductCodeStartAsync"; + case 0xe0f90e44: return "sceNpCommerce2InitGetProductInfoListResult"; + case 0xe1e7b5ac: return "sceNpCommerce2GetProductInfoListCreateReq"; + case 0xe51a4944: return "sceNpCommerce2GetGameProductInfoFromContentInfo"; + case 0xec324c8f: return "sceNpCommerce2GetContentRatingInfoFromGameProductInfo"; + case 0xeef51be0: return "sceNpCommerce2ExecuteStoreBrowse"; + case 0xef645654: return "sceNpCommerce2GetGameProductInfo"; + case 0xef8eafcd: return "sceNpCommerce2DestroyGetProductInfoResult"; + case 0xf6139b58: return "sceNpCommerce2DestroyGetProductInfoListResult"; + case 0xf798f5e3: return "sceNpCommerce2InitGetProductInfoResult"; + case 0xfc216890: return "sceNpCommerce2GetCategoryInfoFromContentInfo"; + case 0x079f0e87: return "sceNpTrophyGetGameProgress"; + case 0x1197b52c: return "sceNpTrophyRegisterContext"; + case 0x1c25470d: return "sceNpTrophyCreateHandle"; + case 0x27deda93: return "sceNpTrophySetSoundLevel"; + case 0x370136fe: return "sceNpTrophyGetRequiredDiskSpace"; + case 0x3741ecc7: return "sceNpTrophyDestroyContext"; + case 0x39567781: return "sceNpTrophyInit"; + case 0x48bd97c7: return "sceNpTrophyAbortHandle"; + case 0x49d18217: return "sceNpTrophyGetGameInfo"; + case 0x623cd2dc: return "sceNpTrophyDestroyHandle"; + case 0x8ceedd21: return "sceNpTrophyUnlockTrophy"; + case 0xa7fabf4d: return "sceNpTrophyTerm"; + case 0xb3ac3478: return "sceNpTrophyGetTrophyUnlockState"; + case 0xbaedf689: return "sceNpTrophyGetTrophyIcon"; + case 0xe3bf9a28: return "sceNpTrophyCreateContext"; + case 0xfce6d30a: return "sceNpTrophyGetTrophyInfo"; + case 0xff299e03: return "sceNpTrophyGetGameIcon"; + case 0x01711e81: return "sceNpTusDeleteMultiSlotDataVUser"; + case 0x0423e622: return "sceNpTusGetMultiSlotVariable"; + case 0x065b610d: return "sceNpTusSetMultiSlotVariableAsync"; + case 0x0835deb2: return "sceNpTusSetDataVUser"; + case 0x0d15043b: return "sceNpTusGetMultiUserVariable"; + case 0x17db7aa7: return "sceNpTusTryAndSetVariableVUserAsync"; + case 0x1904435e: return "sceNpTusCreateTransactionCtx"; + case 0x19bce18c: return "sceNpTusPollAsync"; + case 0x1fa5c87d: return "sceNpTusAddAndGetVariableAsync"; + case 0x225aed26: return "sceNpTusTerm"; + case 0x2357ba9e: return "sceNpTusGetMultiSlotVariableVUser"; + case 0x2ab21ea9: return "sceNpTusGetMultiSlotDataStatusVUserAsync"; + case 0x2d1b9f1a: return "sceNpTusGetMultiUserDataStatusVUser"; + case 0x2e162a62: return "sceNpTusDestroyTitleCtx"; + case 0x3175af23: return "sceNpTusDeleteMultiSlotDataAsync"; + case 0x325c6284: return "sceNpTusAbortTransaction"; + case 0x348dbcb4: return "sceNpTusGetMultiUserDataStatus"; + case 0x3602bc80: return "sceNpTusTryAndSetVariableVUser"; + case 0x368fec59: return "sceNpTusGetMultiUserDataStatusVUserAsync"; + case 0x38f364b0: return "sceNpTusGetDataVUserAsync"; + case 0x44eca8b4: return "sceNpTusDestroyTransactionCtx"; + case 0x47e9424a: return "sceNpTusTryAndSetVariable"; + case 0x5175abb9: return "sceNpTusGetDataAsync"; + case 0x59432970: return "sceNpTusSetTimeout"; + case 0x651fd79f: return "sceNpTusGetMultiSlotDataStatusAsync"; + case 0x6c511024: return "sceNpTusGetMultiUserVariableVUser"; + case 0x7caf58ee: return "sceNpTusCreateTitleCtx"; + case 0x7d5f0f0e: return "sceNpTusSetData"; + case 0x8ddd0d85: return "sceNpTusGetData"; + case 0x8f87a06b: return "sceNpTusInit"; + case 0x94989003: return "sceNpTusAddAndGetVariable"; + case 0x9549d22c: return "sceNpTusGetMultiUserVariableVUserAsync"; + case 0x96a06212: return "sceNpTusSetMultiSlotVariableVUserAsync"; + case 0x9cc0cf44: return "sceNpTusSetDataVUserAsync"; + case 0xa3abfadb: return "sceNpTusGetMultiSlotDataStatusVUser"; + case 0xa7993bf3: return "sceNpTusAddAndGetVariableVUserAsync"; + case 0xae4e590e: return "sceNpTusGetDataVUser"; + case 0xaf985783: return "sceNpTusDeleteMultiSlotVariable"; + case 0xb8e8ff22: return "sceNpTusWaitAsync"; + case 0xbb2877f2: return "sceNpTusGetMultiSlotVariableAsync"; + case 0xbbb244b7: return "sceNpTusTryAndSetVariableAsync"; + case 0xc2e18da8: return "sceNpTusDeleteMultiSlotVariableVUserAsync"; + case 0xc4e51fbf: return "sceNpTusDeleteMultiSlotVariableVUser"; + case 0xc66ba67e: return "sceNpTusGetMultiUserDataStatusAsync"; + case 0xc815b219: return "sceNpTusDeleteMultiSlotDataVUserAsync"; + case 0xc848d425: return "sceNpTusGetMultiSlotDataStatus"; + case 0xcc7a31cd: return "sceNpTusGetMultiUserVariableAsync"; + case 0xcc86a8f6: return "sceNpTusSetMultiSlotVariable"; + case 0xe0719847: return "sceNpTusDeleteMultiSlotData"; + case 0xe847341f: return "sceNpTusSetDataAsync"; + case 0xf5363608: return "sceNpTusDeleteMultiSlotVariableAsync"; + case 0xf60be06f: return "sceNpTusAddAndGetVariableVUser"; + case 0xf819be91: return "sceNpTusSetMultiSlotVariableVUser"; + case 0xfc7d346e: return "sceNpTusGetMultiSlotVariableVUserAsync"; + case 0x432b3cbf: return "sceNpUtilBandwidthTestShutdown"; + case 0xc2ced2b7: return "sceNpUtilBandwidthTestInitStart"; + case 0xc880f37d: return "sceNpUtilBandwidthTestGetStatus"; + case 0xc99ee313: return "sceNpUtilBandwidthTestAbort"; + case 0x02671310: return "cellFsSetDefaultContainer"; + case 0x0d5b4a14: return "cellFsReadWithOffset"; + case 0x0e2939e5: return "cellFsFtruncate"; + case 0x103b8632: return "cellFsAllocateFileAreaWithInitialData"; + case 0x190912f6: return "cellFsStReadGetCurrentAddr"; + case 0x1a108ab7: return "cellFsGetBlockSize"; + case 0x1ea02e2f: return "cellFsArcadeHddSerialNumber"; + case 0x2664c8ae: return "cellFsStReadInit"; + case 0x27800c6b: return "cellFsStRead"; + case 0x2796fdf3: return "cellFsRmdir"; + case 0x2cb51f0d: return "cellFsClose"; + case 0x2cf1296b: return "cellFsAllocateFileAreaByFdWithoutZeroFill"; + case 0x3140f6e1: return "cellFsSetIoBuffer"; + case 0x3394f037: return "cellFsAllocateFileAreaByFdWithInitialData"; + case 0x3a1c8393: return "cellFsTruncate2"; + case 0x3f61245c: return "cellFsOpendir"; + case 0x4cef342e: return "cellFsAioWrite"; + case 0x4d5ff8e2: return "cellFsRead"; + case 0x5c74903d: return "cellFsReaddir"; + case 0x606f9f42: return "cellFsChangeFileSizeWithoutAllocation"; + case 0x6d3bb15b: return "cellFsSdataOpenByFd"; + case 0x718bf5f8: return "cellFsOpen"; + case 0x75f16dc5: return "cellFsSetIoBufferFromDefaultContainer"; + case 0x7a0329a1: return "cellFsAllocateFileAreaWithoutZeroFill"; + case 0x7de6dced: return "cellFsStat"; + case 0x7f13fc8c: return "cellFsAioCancel"; + case 0x7f4677a8: return "cellFsUnlink"; + case 0x81f33783: return "cellFsStReadPutCurrentAddr"; + case 0x866f6aec: return "cellFsStReadWaitCallback"; + case 0x8cb722d5: return "cellFsWriteWithOffset"; + case 0x8df28ff9: return "cellFsStReadStart"; + case 0x8f71c5b2: return "cellFsStReadWait"; + case 0x91a1beaa: return "cellFsSetDiscReadRetrySetting"; + case 0x967a162b: return "cellFsFsync"; + case 0x99406d0b: return "cellFsChmod"; + case 0x9b882495: return "cellFsGetDirectoryEntries"; + case 0x9f951810: return "cellFsAioFinish"; + case 0xa01ee33a: return "cellFsRegisterConversionCallback"; + case 0xa397d042: return "cellFsLseek"; + case 0xaa3b4bcd: return "cellFsGetFreeSize"; + case 0xb1840b53: return "cellFsSdataOpen"; + case 0xb3afee8b: return "cellFsStReadGetRingBuf"; + case 0xba901fe6: return "cellFsMkdir"; + case 0xbd273a88: return "cellFsStReadGetRegid"; + case 0xbef554a4: return "cellFsUtime"; + case 0xc1c507e7: return "cellFsAioRead"; + case 0xc9dc3ac5: return "cellFsTruncate"; + case 0xcb588dba: return "cellFsFGetBlockSize"; + case 0xcf34969c: return "cellFsStReadGetStatus"; + case 0xd73938df: return "cellFsStReadFinish"; + case 0xdb869f20: return "cellFsAioInit"; + case 0xe15939c3: return "cellFsChangeFileSizeByFdWithoutAllocation"; + case 0xecdcf2ab: return "cellFsWrite"; + case 0xef3efa34: return "cellFsFstat"; + case 0xf12eecc8: return "cellFsRename"; + case 0xf8e5d9a0: return "cellFsStReadStop"; + case 0xf94baa80: return "cellFsUnregisterL10nCallbacks"; + case 0xff42dcc3: return "cellFsClosedir"; + case 0x068fcbc6: return "sys_config_start"; + case 0x0d5f2c14: return "cellPadClearBuf"; + case 0x0e2dfaad: return "cellPadInfoPressMode"; + case 0x1cf98800: return "cellPadInit"; + case 0x1f71ecbe: return "cellKbGetConfiguration"; + case 0x2073b7f6: return "cellKbClearBuf"; + case 0x20a97ba2: return "cellPadLddRegisterController"; + case 0x21a62e9b: return "cellMouseGetTabletDataList"; + case 0x2d16da4f: return "cellMouseSetTabletMode"; + case 0x2f1774d5: return "cellKbGetInfo"; + case 0x3138e632: return "cellMouseGetData"; + case 0x3aaad464: return "cellPadGetInfo"; + case 0x3ef66b95: return "cellMouseClearBuf"; + case 0x3f72c56e: return "cellKbSetLEDStatus"; + case 0x3f797dff: return "cellPadGetRawData"; + case 0x433f6ec0: return "cellKbInit"; + case 0x4ab1fa77: return "cellKbCnvRawCode"; + case 0x4cc9b68d: return "cellPadPeriphGetInfo"; + case 0x4d0b3b1f: return "cellMouseInfoTabletMode"; + case 0x4d9b75d5: return "cellPadEnd"; + case 0x578e3c98: return "cellPadSetPortSetting"; + case 0x5baf30fb: return "cellMouseGetInfo"; + case 0x5f81900c: return "sys_config_unregister_service"; + case 0x6ae10596: return "sys_config_add_service_listener"; + case 0x6bc09c61: return "cellPadGetDataExtra"; + case 0x6bd131f0: return "cellMouseGetDataList"; + case 0x6d367953: return "sys_config_stop"; + case 0x78200559: return "cellPadInfoSensorMode"; + case 0x78f058a2: return "sys_config_register_service"; + case 0x7c5d5fc1: return "cellPadDbgPeriphRegisterDevice"; + case 0x8a00f264: return "cellPadPeriphGetData"; + case 0x8b72cda1: return "cellPadGetData"; + case 0x8b8231e5: return "cellPadLddGetPortNo"; + case 0x94b98e39: return "cellPadDbgLddSetDataInsertMode"; + case 0xa328cc35: return "cellMouseGetRawData"; + case 0xa5f85e4d: return "cellKbSetCodeType"; + case 0xa703a51d: return "cellPadGetInfo2"; + case 0xa74396e5: return "cellPadDbgLddRegisterController"; + case 0xbafd6409: return "cellPadLddDataInsert"; + case 0xbe5be3ba: return "cellPadSetSensorMode"; + case 0xbfce3285: return "cellKbEnd"; + case 0xc9030138: return "cellMouseInit"; + case 0xcf3051f7: return "cellPadDbgGetData"; + case 0xdeefdfa7: return "cellKbSetReadMode"; + case 0xe10183ce: return "cellMouseEnd"; + case 0xe442faa8: return "cellPadLddUnregisterController"; + case 0xf5d9d571: return "sys_config_remove_service_listener"; + case 0xf65544ee: return "cellPadSetActDirect"; + case 0xf83f8182: return "cellPadSetPressMode"; + case 0xff0a21b7: return "cellKbRead"; + case 0x00acf0e5: return "spu_printf_finalize"; + case 0x00fb4a6b: return "spu_thread_sprintf"; + case 0x0125b2ca: return "_rand_int32_TT800"; + case 0x01508f24: return "raw_spu_write_float"; + case 0x0264f468: return "_Wctomb"; + case 0x02f4d325: return "spu_thread_read_double"; + case 0x02f52a3c: return "_filep_close_it"; + case 0x03becf3c: return "_Defloc"; + case 0x04a183fc: return "strcpy"; + case 0x04a1f19d: return "raw_spu_write_short"; + case 0x05d821c4: return "_Stoullx"; + case 0x077cdb23: return "btowc"; + case 0x07c7971d: return "_Stoldx"; + case 0x0871ffb0: return "mspace_malloc_usable_size"; + case 0x0891a3fa: return "_Tlsfree"; + case 0x09cbee1e: return "strxfrm"; + case 0x0a1d4b00: return "spu_thread_read_uint"; + case 0x0a4e2541: return "spu_thread_read_ldouble"; + case 0x0ae275a4: return "_Stolx"; + case 0x0b0d272f: return "_malloc_finalize"; + case 0x0b9d04d0: return "_Getnloc"; + case 0x0b9ecb98: return "toupper_ascii"; + case 0x0cae547f: return "raw_spu_write_double"; + case 0x0d2a593b: return "srand"; + case 0x0d8a2de0: return "_CStrxfrm"; + case 0x0df8809f: return "__call_functions_registered_with_atexit"; + case 0x0f60eb63: return "vfwscanf"; + case 0x0ff4722c: return "raw_spu_read_ushort"; + case 0x1096f8f1: return "ispunct_ascii"; + case 0x1098a99d: return "localeconv"; + case 0x112ea8ea: return "strspn"; + case 0x115e2f70: return "spu_thread_snprintf"; + case 0x116cda13: return "wcstol"; + case 0x118712ea: return "islower"; + case 0x11d270d2: return "exitspawn"; + case 0x126656b7: return "_Btowc"; + case 0x128b334f: return "raw_spu_read_mem"; + case 0x12a55fb7: return "mbrtowc"; + case 0x130d20a5: return "towlower"; + case 0x1365b52a: return "fcntl"; + case 0x13808972: return "wcstok"; + case 0x14052ae0: return "absi4"; + case 0x14348b57: return "divi4"; + case 0x145853cd: return "mspace_destroy"; + case 0x15362bc9: return "spu_thread_read_long"; + case 0x153b364a: return "mkdir"; + case 0x15bdcc00: return "rand"; + case 0x15c2e29d: return "isgraph_ascii"; + case 0x17752bab: return "wcsftime"; + case 0x17bc0136: return "_Lrv2d"; + case 0x17c031d7: return "spu_thread_read_ulong"; + case 0x1855b9b1: return "setlocale"; + case 0x1895908d: return "mspace_realloc"; + case 0x18e48b5d: return "wscanf"; + case 0x18f7b77d: return "_Dnorm"; + case 0x1970cd7e: return "getpid"; + case 0x19ccbb81: return "mktime"; + case 0x1ab01ea8: return "truncate"; + case 0x1abd0985: return "div"; + case 0x1ae06860: return "wcstoumax"; + case 0x1b4c3ff0: return "atexit"; + case 0x1c0e8ab6: return "vswscanf"; + case 0x1c2ef212: return "getwc"; + case 0x1cf4d80a: return "iswalpha"; + case 0x1dcd8609: return "_Strxfrmx"; + case 0x1dd0d4c5: return "spu_printf_attach_group"; + case 0x1df4732e: return "_Getptolower"; + case 0x1e9d2b4f: return "spu_thread_read_int"; + case 0x1ecae195: return "_Vacopy"; + case 0x1f913e8d: return "chmod"; + case 0x1f925c41: return "_allocate_mapped_pages"; + case 0x206612c4: return "spu_thread_read_ptr"; + case 0x216984ed: return "spu_thread_write_long"; + case 0x216fcd2a: return "_Atrealloc"; + case 0x21807b8e: return "towctrans"; + case 0x225702e1: return "_fs_initialize"; + case 0x22b0e566: return "_Stollx"; + case 0x23d3bca7: return "_Eadd"; + case 0x242c603e: return "_Frprep"; + case 0x243b52d8: return "_Mbtowcx"; + case 0x24802244: return "iswcntrl"; + case 0x24c9e021: return "abs"; + case 0x24e230d2: return "_Wctob"; + case 0x24f6cbdd: return "clock"; + case 0x253b7210: return "_rand_real2_TT800"; + case 0x25beee5a: return "__raw_spu_printf"; + case 0x25da8fbb: return "iscntrl"; + case 0x266311a0: return "localtime"; + case 0x2677568c: return "putchar"; + case 0x26f023d5: return "ftell"; + case 0x273b9711: return "sprintf"; + case 0x28b92ebf: return "raw_spu_read_uchar"; + case 0x296bc72f: return "_FDunscale"; + case 0x2b45cb34: return "wcsrtombs"; + case 0x2b7ba4ca: return "_Tlsset"; + case 0x2b81fb7f: return "readdir"; + case 0x2bc9dee6: return "raw_spu_read_short"; + case 0x2caea755: return "_Once"; + case 0x2d067448: return "ftruncate64"; + case 0x2d17ca7f: return "_Puttxt"; + case 0x2eea9f25: return "_Esub"; + case 0x2f45d39c: return "strlen"; + case 0x2fecec13: return "getwchar"; + case 0x30fb2899: return "_Getmem"; + case 0x312be3b3: return "_malloc_init_lv2"; + case 0x313f04ab: return "raw_spu_read_char"; + case 0x329a4540: return "_WPrintf"; + case 0x32e4a30a: return "_Mtxdst"; + case 0x336b4191: return "_Getint"; + case 0x33d6ae54: return "ferror"; + case 0x344eca7e: return "_WGetstr"; + case 0x34dd6650: return "_Getcloc"; + case 0x34e7c97e: return "_Unlocksyslock"; + case 0x3512ad38: return "tmpnam"; + case 0x355fd1fd: return "mbtowc"; + case 0x3574d37d: return "_Wcsxfrmx"; + case 0x36c067c1: return "_Stoll"; + case 0x36f2b4ed: return "strtoull"; + case 0x36feb965: return "raw_spu_write_llong"; + case 0x3704840e: return "_fs_finalize"; + case 0x38426d25: return "_Wctombx"; + case 0x3902363a: return "malloc_footprint"; + case 0x39bf419c: return "valloc"; + case 0x3a210c93: return "swscanf"; + case 0x3a840ae3: return "snprintf"; + case 0x3b22e88a: return "isxdigit"; + case 0x3b8097ac: return "_WScanf"; + case 0x3bce073b: return "putc"; + case 0x3bd9ce0a: return "fsync"; + case 0x3ca81c76: return "_Iswctype"; + case 0x3d1460e9: return "_Strerror"; + case 0x3d541975: return "atoi"; + case 0x3d5fdea7: return "vfwprintf"; + case 0x3d85d6f8: return "strcmp"; + case 0x3dbc3bee: return "opendir"; + case 0x3e57dfac: return "_Genld"; + case 0x3ec99a66: return "_Getptimes"; + case 0x3ee29d0b: return "_Stof"; + case 0x3f125e2e: return "spu_thread_write_short"; + case 0x3f4ccdc7: return "isdigit"; + case 0x3f650700: return "mspace_is_heap_empty"; + case 0x40a2599a: return "atol"; + case 0x40d04e4e: return "fwide"; + case 0x40e0ff25: return "_WGenld"; + case 0x41283333: return "isdigit_ascii"; + case 0x418bdfe1: return "_get_fd"; + case 0x4217b4cf: return "difftime"; + case 0x433fe2a9: return "fwscanf"; + case 0x44115dd0: return "_Geterrno"; + case 0x44796e5c: return "strerror"; + case 0x449317ed: return "_Fopen"; + case 0x44d7cae8: return "raw_spu_read_float"; + case 0x4544c2de: return "spu_thread_write_mem"; + case 0x4569518c: return "malloc_stats"; + case 0x459072c3: return "_init_TT800"; + case 0x4595c42b: return "wcsxfrm"; + case 0x468b45dc: return "mspace_calloc"; + case 0x4911ff9c: return "rand_int31_TT800"; + case 0x498a5036: return "raw_spu_write_mem"; + case 0x4a0049c6: return "_Getpctype"; + case 0x4ab5fbe2: return "_Printf"; + case 0x4b36c0e0: return "vfscanf"; + case 0x4b6a4010: return "vswprintf"; + case 0x4bb8e2b2: return "raw_spu_write_ushort"; + case 0x4c3f5f29: return "_Getgloballocale"; + case 0x4c7dc863: return "iswupper"; + case 0x4d348427: return "fputs"; + case 0x4e4be299: return "longjmp"; + case 0x4e72f810: return "wmemchr"; + case 0x4ffba189: return "feof"; + case 0x508196b4: return "raw_spu_printf"; + case 0x508e00c6: return "_Getloc"; + case 0x51b28904: return "_Stodx"; + case 0x526a496a: return "write"; + case 0x532b03be: return "raw_spu_read_uint"; + case 0x53eb43a1: return "_Getpmbstate"; + case 0x54b383bc: return "_Locvar"; + case 0x54c2844e: return "spu_raw_snprintf"; + case 0x54f57626: return "rewind"; + case 0x5516bbbf: return "iswctype"; + case 0x55d4866e: return "fgetws"; + case 0x5751acf9: return "_LDscale"; + case 0x575fb268: return "wctrans"; + case 0x57ff7dd7: return "_WStod"; + case 0x58320830: return "_WLitob"; + case 0x589b5314: return "strncat"; + case 0x5909e3c4: return "memset"; + case 0x59640bc6: return "raw_spu_read_ullong"; + case 0x59c1bb1f: return "_Getpwcstate"; + case 0x59e8dd58: return "strtoll"; + case 0x5a74f774: return "spu_thread_read_float"; + case 0x5b162b7f: return "memmove"; + case 0x5b4b6d6d: return "wcspbrk"; + case 0x5cc71eee: return "raw_spu_write_ldouble"; + case 0x5d43c1a3: return "_Mbtowc"; + case 0x5dbceee3: return "rand_int32_TT800"; + case 0x5e06c3fe: return "__getpid"; + case 0x5e7888f0: return "bsearch"; + case 0x5eb95641: return "_Stold"; + case 0x5f922a30: return "_Dscale"; + case 0x5f9a65c7: return "_WStold"; + case 0x5fa1e497: return "_Unlockfilelock"; + case 0x60627fb3: return "_LDunscale"; + case 0x6075a3c6: return "_Ld2rv"; + case 0x609080ec: return "isspace_ascii"; + case 0x6137d196: return "memalign"; + case 0x6287ac6a: return "iswdigit"; + case 0x62bf1d6c: return "swprintf"; + case 0x64aaf016: return "raw_spu_read_ldouble"; + case 0x6514dbe5: return "wcstold"; + case 0x6539ff6d: return "_Gentime"; + case 0x6545b7de: return "fgetpos"; + case 0x65e8d4d0: return "wcslen"; + case 0x6660fc8d: return "TlsGetValue"; + case 0x6687fba4: return "_Fgpos"; + case 0x66b71b17: return "wcsspn"; + case 0x67582370: return "spu_thread_write_double"; + case 0x676e3e7a: return "raw_spu_write_ptr"; + case 0x67d6334b: return "strtof"; + case 0x6823c180: return "iswprint"; + case 0x69106fd2: return "_init_by_array_TT800"; + case 0x692b497f: return "perror"; + case 0x6995f5e8: return "_Ldtob"; + case 0x69c27c12: return "fopen"; + case 0x69ff1b9b: return "fseek"; + case 0x6ba10474: return "_Tlsalloc"; + case 0x6cf78f3e: return "_Mtxunlock"; + case 0x6d5115b0: return "wcsncmp"; + case 0x6e988e5f: return "_rand_int31_TT800"; + case 0x7028dea9: return "_Locksyslock"; + case 0x703ec767: return "setvbuf"; + case 0x70b0e833: return "mblen"; + case 0x714c9618: return "__raw_spu_putfld"; + case 0x717b2502: return "stat"; + case 0x72236cbc: return "raw_spu_write_ullong"; + case 0x72b84004: return "spu_printf_attach_thread"; + case 0x73096858: return "wctob"; + case 0x7345b4be: return "_WStoll"; + case 0x73eae03d: return "strrchr"; + case 0x744d2505: return "ispunct"; + case 0x74fe4a7b: return "iswgraph"; + case 0x759e0635: return "malloc"; + case 0x75d4485c: return "rename"; + case 0x75f98579: return "wcscoll"; + case 0x76da0c84: return "ftruncate"; + case 0x76ed4243: return "_Wcsftime"; + case 0x770bfaee: return "wctype"; + case 0x77a602dd: return "free"; + case 0x77c15441: return "_WGetfloat"; + case 0x77e241bc: return "_Skip"; + case 0x7817edf0: return "raw_spu_write_uint"; + case 0x783636d1: return "spu_thread_read_char"; + case 0x78429d81: return "putwchar"; + case 0x79819dbf: return "fputc"; + case 0x7994c28d: return "_FDtentox"; + case 0x79eadf05: return "malloc_usable_size"; + case 0x7aaab95c: return "iswblank"; + case 0x7ae82e0f: return "vsprintf"; + case 0x7aee5acd: return "_Lockfilelock"; + case 0x7b5aac20: return "spu_thread_write_ptr"; + case 0x7b7a687a: return "_WPutfld"; + case 0x7b9c592e: return "spu_thread_read_ullong"; + case 0x7c1bcf37: return "isalnum_ascii"; + case 0x7c370679: return "_Foprep"; + case 0x7cec7b39: return "_Putfld"; + case 0x7d894764: return "_Readloc"; + case 0x7e7017b1: return "rmdir"; + case 0x7ea8d860: return "spu_printf_detach_group"; + case 0x7efd420a: return "_Daysto"; + case 0x7fd325c4: return "mspace_malloc_stats"; + case 0x7fdcf73e: return "wcscat"; + case 0x806fd281: return "isblank_ascii"; + case 0x809a143f: return "kill"; + case 0x813a9666: return "ungetwc"; + case 0x814d8cb0: return "fflush"; + case 0x81a0a858: return "_memset_int"; + case 0x82a3cc30: return "wcschr"; + case 0x82a4561a: return "_put_fd"; + case 0x831d70a5: return "memcpy"; + case 0x8342b757: return "utime"; + case 0x84378ddc: return "wcsncpy"; + case 0x86532174: return "imaxdiv"; + case 0x867275d7: return "_Stoul"; + case 0x86b4c669: return "tolower_ascii"; + case 0x8713c859: return "link"; + case 0x8725a1a7: return "_memset_vmx"; + case 0x87e8f748: return "memset_vmx"; + case 0x8809cdfd: return "_Getpwctytab"; + case 0x882689f2: return "_Makeloc"; + case 0x882e7760: return "raw_spu_write_uchar"; + case 0x889d5804: return "_Dunscale"; + case 0x88e009f5: return "vwprintf"; + case 0x896e1bfd: return "spu_thread_write_uchar"; + case 0x89b62f56: return "_Etentox"; + case 0x89f6f026: return "time"; + case 0x8a6830e7: return "abort"; + case 0x8a71132c: return "remove"; + case 0x8a847b51: return "tmpfile"; + case 0x8ab0abc6: return "strncpy"; + case 0x8b439438: return "clearerr"; + case 0x8b9d8dd2: return "iswpunct"; + case 0x8cb6bfdc: return "_Locsum"; + case 0x8d7ffaf1: return "_WStopfx"; + case 0x8e2484f1: return "_Emul"; + case 0x8ed71e8b: return "_WGetfld"; + case 0x8ef85e47: return "_WPuttxt"; + case 0x8f5dd179: return "_Nnl"; + case 0x90010029: return "gets"; + case 0x9027fd99: return "_WStoldx"; + case 0x90457fe3: return "raw_spu_read_long"; + case 0x90b27880: return "strtoumax"; + case 0x9234f738: return "raw_spu_read_int"; + case 0x93427cb9: return "setbuf"; + case 0x938bfcf7: return "spu_thread_write_char"; + case 0x93a3e3ac: return "tolower"; + case 0x9439e4cd: return "wcsncat"; + case 0x96b6baa6: return "spu_thread_read_mem"; + case 0x96e6303b: return "_WStoxflt"; + case 0x96ea4de6: return "wctomb"; + case 0x97896359: return "isspace"; + case 0x9800573c: return "_WLdtob"; + case 0x980d3ea7: return "_Getfld"; + case 0x9886810c: return "_FDnorm"; + case 0x98f0eeab: return "raw_spu_write_ulong"; + case 0x99782342: return "strncasecmp_ascii"; + case 0x99a72146: return "vsnprintf"; + case 0x99b38ce7: return "wmemmove"; + case 0x9a87bb3a: return "_Getmbcurmax"; + case 0x9abe8c74: return "wprintf"; + case 0x9c7028a5: return "spu_thread_write_uint"; + case 0x9c9d7b0d: return "strtold"; + case 0x9cab08d1: return "spu_thread_write_int"; + case 0x9d140351: return "_Destroytls"; + case 0x9eb25e00: return "strcoll"; + case 0x9eee5387: return "truncate64"; + case 0x9ff08d57: return "_Clearlocks"; + case 0xa0ab76d5: return "_absi4"; + case 0xa0bc0efb: return "mallinfo"; + case 0xa0ddba8e: return "_Stoulx"; + case 0xa1dbb466: return "_Gettime"; + case 0xa2945229: return "_WGetint"; + case 0xa30d4797: return "wcstoll"; + case 0xa3440924: return "closedir"; + case 0xa3da58f6: return "rand_real1_TT800"; + case 0xa45a0313: return "mspace_create"; + case 0xa483d50d: return "_rv2d"; + case 0xa53800c2: return "_malloc_finalize_lv2"; + case 0xa568db82: return "spu_thread_read_ushort"; + case 0xa57cc615: return "iswspace"; + case 0xa5bc0e19: return "getchar"; + case 0xa6463518: return "__rename"; + case 0xa650df19: return "toupper"; + case 0xa65886b8: return "_Findloc"; + case 0xa72a7595: return "calloc"; + case 0xa797790f: return "wcsstr"; + case 0xa82d70da: return "_Tlsget"; + case 0xa835be11: return "__cxa_atexit"; + case 0xa874036a: return "wcstof"; + case 0xa8a6f615: return "TlsSetValue"; + case 0xa8b07f1b: return "wmemcpy"; + case 0xa9f68eff: return "qsort"; + case 0xaa1e687d: return "isgraph"; + case 0xaa266d35: return "_malloc_init"; + case 0xaa9635d7: return "strcat"; + case 0xab4c7ca1: return "_CWcsxfrm"; + case 0xab77019f: return "fstat"; + case 0xabc27420: return "wcstoul"; + case 0xac758d20: return "wmemcmp"; + case 0xac893127: return "fgetc"; + case 0xace90be4: return "_Dtentox"; + case 0xad62a342: return "ldiv"; + case 0xad8e9ad0: return "_Initlocks"; + case 0xaec7c970: return "lseek"; + case 0xaf002043: return "independent_comalloc"; + case 0xaf44a615: return "fgets"; + case 0xaf6bdcb0: return "_Nonfatal_Assert"; + case 0xaf89fdbd: return "_Assert"; + case 0xafa39179: return "_WPutstr"; + case 0xb120f6ca: return "close"; + case 0xb17b79d0: return "isalpha"; + case 0xb18cc115: return "freopen"; + case 0xb1cc43e3: return "_CStrftime"; + case 0xb1f4779d: return "spu_thread_printf"; + case 0xb24cb8d6: return "_Locterm"; + case 0xb2702e15: return "wcrtomb"; + case 0xb2748a9f: return "_Freeloc"; + case 0xb30042ce: return "lldiv"; + case 0xb37982ea: return "_Getstr"; + case 0xb3c495bd: return "imaxabs"; + case 0xb3d98d59: return "_rand_real1_TT800"; + case 0xb400f226: return "isupper_ascii"; + case 0xb4225825: return "mbsinit"; + case 0xb43c25c7: return "wcstoull"; + case 0xb49eea74: return "_init_malloc_lock0"; + case 0xb4a54446: return "_Stofx"; + case 0xb4fc7078: return "_close_all_FILE"; + case 0xb529d259: return "isalnum"; + case 0xb569849d: return "reallocalign"; + case 0xb57bdf7b: return "iswxdigit"; + case 0xb5d353e8: return "_LDtentox"; + case 0xb6002508: return "_Putstr"; + case 0xb6257e3d: return "strncasecmp"; + case 0xb680e240: return "wcstombs"; + case 0xb6af290e: return "_WFrprep"; + case 0xb6d92ac3: return "strcasecmp"; + case 0xb738027a: return "strtok_r"; + case 0xb794631e: return "_WStofx"; + case 0xb7ab5127: return "wcsrchr"; + case 0xb7b793ed: return "get_state_TT800"; + case 0xb7ba4aeb: return "_WStoul"; + case 0xb7d3427f: return "iscntrl_ascii"; + case 0xb81cd66a: return "mbrlen"; + case 0xb9ed25d4: return "raw_spu_read_ulong"; + case 0xba62681f: return "mspace_memalign"; + case 0xbb605c96: return "pvalloc"; + case 0xbbd4582f: return "_Setloc"; + case 0xbc1d69c5: return "atoll"; + case 0xbc374779: return "_Getlname"; + case 0xbc5af0b5: return "fgetwc"; + case 0xbc7b4b8e: return "ctime"; + case 0xbe11beaa: return "_wremove"; + case 0xbe251a29: return "islower_ascii"; + case 0xbe6e5c58: return "spu_thread_read_uchar"; + case 0xbec43f86: return "raw_spu_read_ptr"; + case 0xbf5bf5ea: return "lseek64"; + case 0xbfcd1b3b: return "_Getdst"; + case 0xc01d9f97: return "printf"; + case 0xc08cc41d: return "wcstod"; + case 0xc0e27b2c: return "_Makestab"; + case 0xc155a73f: return "_WStoull"; + case 0xc15e657e: return "spu_raw_sprintf"; + case 0xc1a71972: return "_d2rv"; + case 0xc1b4bbb9: return "raw_spu_write_char"; + case 0xc1c8737c: return "_Getptoupper"; + case 0xc291e698: return "exit"; + case 0xc3c598e2: return "spu_printf_initialize"; + case 0xc3e14cbe: return "memcmp"; + case 0xc4178000: return "_rand_real3_TT800"; + case 0xc41c6e5d: return "_Scanf"; + case 0xc57337f8: return "_Fofind"; + case 0xc5c09834: return "strstr"; + case 0xc63c354f: return "_Exit"; + case 0xc69b2427: return "labs"; + case 0xc78df618: return "rand_real3_TT800"; + case 0xc7b62ab8: return "spu_thread_write_ullong"; + case 0xc9471fac: return "_Mtxinit"; + case 0xc94b27e3: return "_WStof"; + case 0xc95b20d3: return "fputwc"; + case 0xc9607d35: return "_Stopfx"; + case 0xc97a17d7: return "vsscanf"; + case 0xcab654bf: return "_Once_ctor"; + case 0xcb85ac70: return "mspace_malloc"; + case 0xcb9c535b: return "strftime"; + case 0xcbac7ad7: return "memchr"; + case 0xcbdc3a6d: return "raw_spu_write_int"; + case 0xcc5e0c72: return "_divi4"; + case 0xcca68e9c: return "putwc"; + case 0xce7a9e76: return "isprint_ascii"; + case 0xcecbcdc4: return "_Frv2d"; + case 0xcf863219: return "_Fwprep"; + case 0xcfbfb7a7: return "spu_printf_detach_thread"; + case 0xd14ece90: return "strtol"; + case 0xd1d69cb8: return "_Stod"; + case 0xd20f6601: return "independent_calloc"; + case 0xd2a99b1e: return "isprint"; + case 0xd2ac48d7: return "iswalnum"; + case 0xd360dcb4: return "fileno"; + case 0xd3964a09: return "__spu_thread_putfld"; + case 0xd40723d6: return "fread"; + case 0xd417eeb5: return "_Stoull"; + case 0xd4912ee3: return "_FDscale"; + case 0xd5c8cb55: return "spu_thread_write_ushort"; + case 0xd69c513d: return "_Wcscollx"; + case 0xd784459d: return "isupper"; + case 0xd7dc3a8f: return "strtod"; + case 0xd8b4eb20: return "__spu_thread_puttxt"; + case 0xd9674905: return "mspace_reallocalign"; + case 0xd9a4f812: return "atoff"; + case 0xda5a7eb8: return "strtoul"; + case 0xdaeada07: return "mallopt"; + case 0xdbf4c59c: return "cellPadGetCapabilityInfo"; + case 0xddbac025: return "strcasecmp_ascii"; + case 0xddc71a75: return "_SCE_Assert"; + case 0xde1bb092: return "init_by_array_TT800"; + case 0xde32a334: return "_Exitspawn"; + case 0xde7aff7a: return "memcpy16"; + case 0xdebee2af: return "strchr"; + case 0xdef86a83: return "isxdigit_ascii"; + case 0xdfb52083: return "_Stoxflt"; + case 0xe03c7ab1: return "_Fspos"; + case 0xe1858899: return "_Getpwctrtab"; + case 0xe1bd3587: return "fclose"; + case 0xe1e83c65: return "strncmp"; + case 0xe2c5274a: return "_WStoflt"; + case 0xe3812672: return "fdopen"; + case 0xe3cc73f3: return "puts"; + case 0xe3d91db3: return "raw_spu_read_double"; + case 0xe40ba755: return "strtok"; + case 0xe44bf0bf: return "atof"; + case 0xe469fb20: return "_Atexit"; + case 0xe48348e9: return "vprintf"; + case 0xe4c51d4c: return "wcstoimax"; + case 0xe5ea9e2b: return "_Isdst"; + case 0xe5f09c80: return "llabs"; + case 0xe60ee9e5: return "fputws"; + case 0xe6a7de0a: return "ungetc"; + case 0xe7def231: return "_Getfloat"; + case 0xe89071ad: return "isalpha_ascii"; + case 0xe9137453: return "fwprintf"; + case 0xe9a2cc40: return "raw_spu_write_long"; + case 0xe9b560a5: return "sscanf"; + case 0xeb26298c: return "gmtime"; + case 0xeb40c9ec: return "rand_real2_TT800"; + case 0xeb8abe73: return "vwscanf"; + case 0xec9e7cb9: return "spu_thread_read_llong"; + case 0xecddba69: return "_WStodx"; + case 0xed6ec979: return "fsetpos"; + case 0xeda48c80: return "malloc_trim"; + case 0xeddcee2c: return "init_TT800"; + case 0xedec777d: return "_Ttotm"; + case 0xeeeb4f3e: return "_get_state_TT800"; + case 0xeeffc9a6: return "_wrename"; + case 0xef110b6b: return "unlink"; + case 0xf06eed36: return "wmemset"; + case 0xf0776a44: return "wcscmp"; + case 0xf0e022c6: return "getc"; + case 0xf2bbbee9: return "_Litob"; + case 0xf2fca4b2: return "spu_thread_write_llong"; + case 0xf356418c: return "open"; + case 0xf3ef3678: return "wcscspn"; + case 0xf41355f9: return "wcscpy"; + case 0xf418ee84: return "_WFwprep"; + case 0xf4207734: return "spu_thread_write_ulong"; + case 0xf5a32994: return "_Getpcostate"; + case 0xf5ef229c: return "_Getpwcostate"; + case 0xf5f7dda8: return "towupper"; + case 0xf68e2ac9: return "_init_malloc_lock"; + case 0xf7583d67: return "vscanf"; + case 0xf7908e27: return "strcspn"; + case 0xf7a14a22: return "realloc"; + case 0xf7d51596: return "scanf"; + case 0xf7ddb471: return "_Setgloballocale"; + case 0xf88f26c4: return "fwrite"; + case 0xf8935fe3: return "spu_thread_write_float"; + case 0xf89dc648: return "strpbrk"; + case 0xf9dae72c: return "setjmp"; + case 0xf9dba140: return "_Mtxlock"; + case 0xf9e26b72: return "_Once_dtor"; + case 0xfa00d211: return "read"; + case 0xfae4b063: return "_Strcollx"; + case 0xfaec8c60: return "fprintf"; + case 0xfb0f0018: return "_Makewct"; + case 0xfb2081fd: return "vfprintf"; + case 0xfb81426d: return "iswlower"; + case 0xfb8ea4d2: return "_Fd2rv"; + case 0xfc0428a6: return "strdup"; + case 0xfc60575c: return "__spu_thread_printf"; + case 0xfc606237: return "mbsrtowcs"; + case 0xfcac2e8e: return "mbstowcs"; + case 0xfd0cb96d: return "spu_thread_read_short"; + case 0xfd461e85: return "spu_thread_write_ldouble"; + case 0xfd6a1ddb: return "raw_spu_read_llong"; + case 0xfd81f6ca: return "_Stoflt"; + case 0xfe0261aa: return "mspace_free"; + case 0xfe630fd9: return "isblank"; + case 0xfe88e97e: return "fscanf"; + case 0xff689124: return "strtoimax"; + case 0xffbae95e: return "asctime"; + case 0xffbd876b: return "__raw_spu_puttxt"; + case 0x003395d9: return "_Feraise"; + case 0x00367be0: return "fminl"; + case 0x007854f4: return "_FDclass"; + case 0x00fde072: return "f_powf"; + case 0x010818fc: return "asinf4"; + case 0x012d0a91: return "_fminf4"; + case 0x016556df: return "_sinf4"; + case 0x01b84b27: return "llround"; + case 0x01ecef7d: return "_FCbuild"; + case 0x02e68d44: return "_f_fmodf"; + case 0x032cc709: return "csin"; + case 0x03593d2c: return "_f_expf"; + case 0x03aea906: return "divf4"; + case 0x0522d1af: return "_recipf4"; + case 0x054aae63: return "_fdimf4"; + case 0x05cb1718: return "f_fdimf"; + case 0x05e27a13: return "log10f4fast"; + case 0x05efc660: return "asin"; + case 0x05f1dc9e: return "_FExp"; + case 0x07274304: return "csinh"; + case 0x07daed62: return "log2f4"; + case 0x07f400e3: return "_LCbuild"; + case 0x080414bd: return "conjl"; + case 0x08139bd2: return "_fmaxf4"; + case 0x0829a21d: return "asinhl"; + case 0x0a242ed5: return "sinf4"; + case 0x0b3f4e90: return "catanhf"; + case 0x0bb036a6: return "_cosf4"; + case 0x0c14cfcc: return "fesetenv"; + case 0x0c9b8305: return "hypotf4"; + case 0x0cbdae68: return "sinf"; + case 0x0cf9b8bd: return "_Erfc"; + case 0x0d86295d: return "_LCaddcr"; + case 0x0e53319f: return "_asinf4"; + case 0x0e8573dc: return "expm1l"; + case 0x0f02f882: return "llrintl"; + case 0x0f428f0f: return "rint"; + case 0x0f721a9d: return "_LCsubcc"; + case 0x10627248: return "f_fmodf"; + case 0x11c51388: return "tgamma"; + case 0x1225dd31: return "casinf"; + case 0x12de4e46: return "_powf4"; + case 0x12e04cd7: return "cimagl"; + case 0x1313a420: return "acos"; + case 0x137f7e77: return "expf4"; + case 0x14208b00: return "_asinf4fast"; + case 0x1498a072: return "_Cmulcr"; + case 0x16bf208a: return "log10f"; + case 0x17316bee: return "log2"; + case 0x178d98dd: return "atanf4fast"; + case 0x17cd5d87: return "_recipf4fast"; + case 0x182cd542: return "tgammal"; + case 0x18668ce3: return "exp"; + case 0x18b26998: return "remainderl"; + case 0x18ec6099: return "rintl"; + case 0x1988732d: return "clog10"; + case 0x1a1adede: return "rsqrtf4fast"; + case 0x1acb2b16: return "acosf4"; + case 0x1bbdcd9f: return "expm1f4"; + case 0x1bcdeb47: return "_LSinh"; + case 0x1be996cc: return "_LCdivcc"; + case 0x1c11885d: return "_floorf4"; + case 0x1d35bfe4: return "_LLog"; + case 0x1d5bf5d0: return "_modff4"; + case 0x1e623f95: return "truncf4"; + case 0x1e85ef02: return "f_atanf"; + case 0x1e9fd6ba: return "_sinf4fast"; + case 0x2033eeb7: return "csqrt"; + case 0x2118fe46: return "cexpl"; + case 0x21a37b3e: return "log1pf"; + case 0x21e6d304: return "ceil"; + case 0x22c3e308: return "_exp2f4"; + case 0x238af59b: return "fegetenv"; + case 0x23b985f7: return "floorf"; + case 0x241f9337: return "_FCmulcr"; + case 0x24497c52: return "cosf"; + case 0x246ea8d0: return "f_sqrtf"; + case 0x2627d6b2: return "erfc"; + case 0x266d2473: return "_Caddcr"; + case 0x26deed0b: return "cosl"; + case 0x26ef50ed: return "asinh"; + case 0x28faaa5a: return "ilogbf4"; + case 0x29685118: return "_negatef4"; + case 0x2a138d2b: return "truncf"; + case 0x2a4dcbad: return "cacosl"; + case 0x2a89ce33: return "llrintf"; + case 0x2af4b73b: return "fmax"; + case 0x2b282ebb: return "sqrtl"; + case 0x2bb0f2c9: return "logb"; + case 0x2c45fe6a: return "fmaxl"; + case 0x2c601f3b: return "csinl"; + case 0x2cbb6f53: return "f_hypotf"; + case 0x2dcab6a4: return "nanl"; + case 0x2df339bc: return "_f_floorf"; + case 0x2e69bb2a: return "_FCosh"; + case 0x2ec867b4: return "exp2f4fast"; + case 0x30bc7a53: return "logf4"; + case 0x315673f6: return "_Csubcc"; + case 0x31be25c3: return "scalblnf"; + case 0x31db8c89: return "atan2"; + case 0x321c55de: return "nexttowardl"; + case 0x3261de11: return "fesetexceptflag"; + case 0x329ec019: return "rsqrtf4"; + case 0x32f994a1: return "cosf4fast"; + case 0x33e5929b: return "_LDsign"; + case 0x33f27f25: return "_FCdivcr"; + case 0x3436f008: return "csinhf"; + case 0x3459748b: return "log10f4"; + case 0x347c1ee1: return "atanf4"; + case 0x34c0371e: return "powl"; + case 0x358d7f93: return "_f_lrintf"; + case 0x3593a445: return "clog"; + case 0x35b6e70a: return "lrintl"; + case 0x35d3f688: return "creal"; + case 0x36778d1b: return "coshf"; + case 0x373054d1: return "cpow"; + case 0x37345541: return "log1pl"; + case 0x376fb27f: return "sinhl"; + case 0x3792b12d: return "lroundl"; + case 0x38ba5590: return "ccosl"; + case 0x38e69f09: return "pow"; + case 0x398483aa: return "_expm1f4fast"; + case 0x39ef81c9: return "f_fmaxf"; + case 0x3ad203fa: return "lrint"; + case 0x3adc01d7: return "f_frexpf"; + case 0x3b802524: return "ldexpf4"; + case 0x3c057fbd: return "atanf"; + case 0x3c616743: return "_LDtest"; + case 0x3cb818fa: return "_f_fdimf"; + case 0x3d4efafb: return "atan2l"; + case 0x3d549f2a: return "ctanhl"; + case 0x3d901a10: return "_ceilf4"; + case 0x3da55602: return "fabsf"; + case 0x3dfa060f: return "scalbnl"; + case 0x3e7eb58f: return "frexpf4"; + case 0x3e919cba: return "scalbnf"; + case 0x3ec9de23: return "_cbrtf4"; + case 0x3eeedb0e: return "_Dclass"; + case 0x3f6262b3: return "f_fminf"; + case 0x3f701e78: return "_Poly"; + case 0x4020f5ef: return "cbrt"; + case 0x405f9727: return "_log1pf4fast"; + case 0x40a2e212: return "_fabsf4"; + case 0x4111b546: return "_LExp"; + case 0x411434bb: return "asinf"; + case 0x414c5ecc: return "_f_hypotf"; + case 0x4152669c: return "scalbln"; + case 0x417851ce: return "feholdexcept"; + case 0x418036e3: return "_FTgamma"; + case 0x4189a367: return "remquo"; + case 0x41d1b236: return "_f_rintf"; + case 0x430309a1: return "ldexpf"; + case 0x434881a0: return "cacosf"; + case 0x43d522f4: return "cabsl"; + case 0x44cd6308: return "remainder"; + case 0x44cf744b: return "tanhl"; + case 0x45034943: return "nan"; + case 0x452ac4bb: return "floorf4"; + case 0x453f9e91: return "cbrtf"; + case 0x46b66f76: return "csqrtl"; + case 0x46cf72d9: return "fdimf"; + case 0x47433144: return "expm1f4fast"; + case 0x475d855b: return "trunc"; + case 0x476b5591: return "fmaf"; + case 0x48157605: return "_f_llrintf"; + case 0x4826db61: return "fma"; + case 0x4875601d: return "_exp2f4fast"; + case 0x487bbd1c: return "tanf4"; + case 0x488df791: return "cexp"; + case 0x48d462a9: return "_FDint"; + case 0x4930ac11: return "logbl"; + case 0x4a5ae27d: return "f_exp2f"; + case 0x4a6ca9a6: return "powf4"; + case 0x4ab22a63: return "_Caddcc"; + case 0x4add664c: return "feclearexcept"; + case 0x4ae52dd3: return "exp2"; + case 0x4b03d5b2: return "f_rintf"; + case 0x4b584841: return "f_asinf"; + case 0x4cb5fa99: return "nexttoward"; + case 0x4d878773: return "remainderf4"; + case 0x4ddb926b: return "powf"; + case 0x4e010403: return "copysign"; + case 0x4eb5eb51: return "sin"; + case 0x4fa4f5ec: return "nexttowardf"; + case 0x501c412f: return "cargf"; + case 0x519ebb77: return "floor"; + case 0x547fb4a7: return "sinf4fast"; + case 0x54d2fb8c: return "rintf"; + case 0x5516d621: return "acosl"; + case 0x55c8a549: return "truncl"; + case 0x56c573a8: return "log1p"; + case 0x575e9b6e: return "asinl"; + case 0x58eb9e57: return "fabs"; + case 0x596ab55c: return "atanh"; + case 0x5b18eded: return "clogl"; + case 0x5b474c22: return "casinhl"; + case 0x5bfd37be: return "_FCaddcc"; + case 0x5e48dede: return "exp2f4"; + case 0x5ee10a95: return "catanh"; + case 0x5ee37927: return "_LErfc"; + case 0x60e9ff3c: return "_expm1f4"; + case 0x61250988: return "catanl"; + case 0x6261c0b5: return "_log10f4"; + case 0x63bbdfa6: return "_FCmulcc"; + case 0x642e3d18: return "_frexpf4"; + case 0x642f7d6b: return "f_copysignf"; + case 0x645557bd: return "copysignl"; + case 0x64abdb4d: return "csinhl"; + case 0x657d0e83: return "divf4fast"; + case 0x65935877: return "ilogbf"; + case 0x659e011e: return "sqrt"; + case 0x6636c4a5: return "frexpf"; + case 0x664e04b9: return "negatef4"; + case 0x6764c707: return "f_log2f"; + case 0x683cacb3: return "sinh"; + case 0x68a8957f: return "casinhf"; + case 0x68f72416: return "nextafterl"; + case 0x69040b9b: return "logbf4"; + case 0x69725dce: return "lgamma"; + case 0x6ad1c42b: return "_sincosf4"; + case 0x6b660894: return "_acosf4fast"; + case 0x6b6ab2a9: return "_LDclass"; + case 0x6c009c56: return "f_log10f"; + case 0x6c6285c6: return "acoshf"; + case 0x6cc4bd13: return "casinh"; + case 0x6ddd31b2: return "hypot"; + case 0x6df35518: return "floorl"; + case 0x6e9eb0dc: return "sincosf4fast"; + case 0x6ef6b083: return "_FCsubcr"; + case 0x6f5dd7d2: return "cexpf"; + case 0x6f639afb: return "f_llroundf"; + case 0x6fcc1e27: return "_FPoly"; + case 0x70357b12: return "_atanf4fast"; + case 0x7048396e: return "carg"; + case 0x705d9e24: return "f_acosf"; + case 0x70f71871: return "_FCdivcc"; + case 0x71293b71: return "_FLog"; + case 0x714adce1: return "log"; + case 0x71f2bc56: return "_divf4fast"; + case 0x728149e5: return "f_ldexpf"; + case 0x729b7269: return "cproj"; + case 0x72a3ed28: return "fesettrapenable"; + case 0x72f1f64b: return "_logbf4"; + case 0x734ca589: return "_f_cosf"; + case 0x742f12b4: return "_Sin"; + case 0x74902d4b: return "expf4fast"; + case 0x749440f9: return "lgammal"; + case 0x752fa85e: return "fmaxf4"; + case 0x758f33dc: return "nearbyint"; + case 0x75e3e2e9: return "nearbyintl"; + case 0x76afaf04: return "_sqrtf4"; + case 0x76e639ec: return "_atanf4"; + case 0x772f1e4d: return "lround"; + case 0x7793a86b: return "ctanf"; + case 0x7831a2e0: return "hypotl"; + case 0x78e4590a: return "acosh"; + case 0x790c53bd: return "_Fpcomp"; + case 0x7919f414: return "_f_nearbyintf"; + case 0x79ba9b5c: return "expl"; + case 0x7a893af1: return "_rsqrtf4"; + case 0x7ab679da: return "f_cosf"; + case 0x7c2eaeb5: return "fminf"; + case 0x7d02a5ca: return "sqrtf4fast"; + case 0x7d6191d0: return "_Cosh"; + case 0x7f381837: return "frexp"; + case 0x7f579e03: return "atan"; + case 0x7f91cd41: return "tanf4fast"; + case 0x812ed488: return "cabsf"; + case 0x81daf880: return "_LCsubcr"; + case 0x8217e783: return "cosh"; + case 0x833e6b0e: return "cimag"; + case 0x834f5917: return "ccosh"; + case 0x842cb14d: return "_log1pf4"; + case 0x8451edf0: return "sqrtf"; + case 0x889cccb0: return "llroundl"; + case 0x88fb4a66: return "recipf4fast"; + case 0x892f2590: return "fegetround"; + case 0x895cdb49: return "fmaxf"; + case 0x89b507b3: return "catanhl"; + case 0x89d1d168: return "_LAtan"; + case 0x8b168769: return "fdiml"; + case 0x8bd1deb2: return "_LTgamma"; + case 0x8bd67efc: return "erf"; + case 0x8c85369b: return "_f_fminf"; + case 0x8d5858db: return "_f_exp2f"; + case 0x8e01379e: return "cacoshf"; + case 0x8e258fa0: return "cacos"; + case 0x8ecae294: return "nextafter"; + case 0x8f2bcdb5: return "_logf4"; + case 0x8f96319e: return "log10l"; + case 0x8fb7bac7: return "_sqrtf4fast"; + case 0x904e646b: return "cargl"; + case 0x90f0242f: return "_f_sinf"; + case 0x9110708a: return "modfl"; + case 0x91cdfdb0: return "asinf4fast"; + case 0x9232baea: return "_FDtest"; + case 0x9245e01b: return "_divf4"; + case 0x9379e36e: return "tanf"; + case 0x938fb946: return "_tanf4fast"; + case 0x947ae18e: return "_LHypot"; + case 0x9558ed08: return "lrintf"; + case 0x95dfecb1: return "_FCsubcc"; + case 0x961688d1: return "f_nearbyintf"; + case 0x9616e336: return "_FHypot"; + case 0x964ac044: return "creall"; + case 0x96d1b95e: return "log2f4fast"; + case 0x9700d9cd: return "clogf"; + case 0x970a3432: return "cacosh"; + case 0x99a6c261: return "catanf"; + case 0x99c228fc: return "roundl"; + case 0x9a81e583: return "fmodf"; + case 0x9af30eaf: return "casin"; + case 0x9e289062: return "_f_ceilf"; + case 0x9e3ada21: return "logl"; + case 0x9e8130b6: return "ccos"; + case 0x9f03dd3e: return "lgammaf"; + case 0x9f0efc6e: return "exp2l"; + case 0x9f46f5a4: return "tgammaf"; + case 0x9f65bd34: return "fdimf4"; + case 0x9f78f052: return "cos"; + case 0x9fded78a: return "_acosf4"; + case 0xa0160c30: return "_copysignf4"; + case 0xa20827a8: return "ctanl"; + case 0xa2c81938: return "_LSin"; + case 0xa4578433: return "fmin"; + case 0xa46a70a1: return "atanhl"; + case 0xa4ca5cf2: return "llroundf"; + case 0xa56557b6: return "catan"; + case 0xa5d0b260: return "acoshl"; + case 0xa713f8cf: return "modf"; + case 0xa7658186: return "log1pf4"; + case 0xa823836b: return "ilogb"; + case 0xa8c16038: return "_FDsign"; + case 0xa8d180e8: return "_Cbuild"; + case 0xa92bcc85: return "cabs"; + case 0xa9e039c4: return "erfcf"; + case 0xaaa270dc: return "_LCdivcr"; + case 0xab377381: return "log2f"; + case 0xabdccc7a: return "f_atan2f"; + case 0xacca2f83: return "copysignf"; + case 0xad17e787: return "_Dint"; + case 0xad3a093d: return "_LCosh"; + case 0xad5d3e57: return "_FLgamma"; + case 0xaddce673: return "erfcl"; + case 0xafa13040: return "f_llrintf"; + case 0xafcfdad7: return "_Lgamma"; + case 0xafd9a625: return "cimagf"; + case 0xb0fa1592: return "clog10l"; + case 0xb24bd2f8: return "logbf"; + case 0xb348c5c2: return "_LLgamma"; + case 0xb412a8dc: return "_LDint"; + case 0xb4ef29d5: return "f_floorf"; + case 0xb4f4513e: return "_Tgamma"; + case 0xb54cc9a1: return "f_sinf"; + case 0xb5961d4e: return "_sincosf4fast"; + case 0xb598a495: return "fmodl"; + case 0xb5e28191: return "_FSin"; + case 0xb7696143: return "nextafterf"; + case 0xb79012ba: return "modff"; + case 0xb89863bc: return "_rsqrtf4fast"; + case 0xb8aa984e: return "_expf4"; + case 0xb94b9d13: return "_Dtest"; + case 0xb9d2ad22: return "remquol"; + case 0xba136594: return "csinf"; + case 0xba84eab5: return "coshl"; + case 0xbaf11866: return "ceilf"; + case 0xbb165807: return "expm1f"; + case 0xbb208b20: return "cbrtf4fast"; + case 0xbb761c89: return "remquof"; + case 0xbbaa300b: return "f_log1pf"; + case 0xbbf7354e: return "fegetexceptflag"; + case 0xbd7410d9: return "recipf4"; + case 0xbd8bb75c: return "asinhf"; + case 0xbf23f2e7: return "cprojl"; + case 0xbfda6837: return "_f_log10f"; + case 0xc0609820: return "nearbyintf"; + case 0xc0bcf25e: return "_logf4fast"; + case 0xc357b33a: return "frexpl"; + case 0xc406dd09: return "cbrtf4"; + case 0xc41f01db: return "fminf4"; + case 0xc477c0f6: return "f_lroundf"; + case 0xc4cccd1f: return "modff4"; + case 0xc7369fce: return "_Atan"; + case 0xc78ac9d0: return "scalbn"; + case 0xc7b45a19: return "_LFpcomp"; + case 0xc7f1d407: return "fmal"; + case 0xc7fb73d6: return "f_lrintf"; + case 0xc8910002: return "ilogbl"; + case 0xc8dd9279: return "expm1"; + case 0xc90f4bbc: return "_atan2f4"; + case 0xc9481758: return "_tanf4"; + case 0xc94fcc63: return "cbrtl"; + case 0xc977e1ea: return "fetestexcept"; + case 0xc984bf53: return "roundf"; + case 0xc9c536ce: return "_ldexpf4"; + case 0xca239640: return "fmodf4"; + case 0xca463458: return "_Log"; + case 0xcaaf7ae7: return "cprojf"; + case 0xcac167a5: return "_Cmulcc"; + case 0xcb6599c0: return "exp2f"; + case 0xcb6a147e: return "_cosf4fast"; + case 0xcbdf9afb: return "_log10f4fast"; + case 0xccc66f11: return "_FSinh"; + case 0xce91ff18: return "nanf"; + case 0xcfee82d8: return "_remainderf4"; + case 0xd0fd3ca8: return "_hypotf4"; + case 0xd125b89e: return "conjf"; + case 0xd1a3574c: return "clog10f"; + case 0xd231e30a: return "ldexpl"; + case 0xd28ef6dd: return "_Hypot"; + case 0xd2a666c9: return "ctanh"; + case 0xd3a346a8: return "tanl"; + case 0xd40f3f2c: return "erff"; + case 0xd42904b7: return "fabsl"; + case 0xd477852d: return "logf"; + case 0xd48eaae1: return "scalblnl"; + case 0xd4f37b9d: return "tanhf"; + case 0xd50277ad: return "tan"; + case 0xd54039cb: return "fegettrapenable"; + case 0xd5adc4b2: return "cpowl"; + case 0xd5d38552: return "_LCaddcc"; + case 0xd612fa16: return "_Sinh"; + case 0xd70df92a: return "_FCaddcr"; + case 0xd7653782: return "sinhf"; + case 0xd76a16da: return "_fmaf4"; + case 0xd8270894: return "fdim"; + case 0xd8c4096d: return "atan2f4"; + case 0xd8d157f5: return "f_expf"; + case 0xd8f79f4c: return "log10"; + case 0xd97852b7: return "sinl"; + case 0xd97ce5d4: return "fesetround"; + case 0xda217d1f: return "atanl"; + case 0xda31fc5d: return "_FFpcomp"; + case 0xdc14974c: return "fmaf4"; + case 0xdc151707: return "_f_log2f"; + case 0xdd8660d2: return "atan2f4fast"; + case 0xdd92118e: return "ceill"; + case 0xdddabb32: return "remainderf"; + case 0xde7833f2: return "_log2f4fast"; + case 0xdece76a6: return "acosf"; + case 0xdfd41734: return "_Exp"; + case 0xdffb4e3c: return "casinl"; + case 0xe1288c47: return "atanhf"; + case 0xe1c71b05: return "ccoshl"; + case 0xe2b596ec: return "ccosf"; + case 0xe2de89e6: return "csqrtf"; + case 0xe2f1d4b2: return "tanh"; + case 0xe31cc0d3: return "_ilogbf4"; + case 0xe3e379b8: return "_expf4fast"; + case 0xe584836c: return "_LPoly"; + case 0xe58fc9b5: return "erfl"; + case 0xe5a0be9f: return "_powf4fast"; + case 0xe5d2293f: return "_Force_raise"; + case 0xe5ea65e8: return "feraiseexcept"; + case 0xe6c1ff41: return "llrint"; + case 0xe769e5cf: return "fmod"; + case 0xe8fcf1f8: return "acosf4fast"; + case 0xe913a166: return "logf4fast"; + case 0xe92f3fb8: return "_f_fmaf"; + case 0xe93abfca: return "ctan"; + case 0xe9ac8223: return "_LCmulcr"; + case 0xe9f501df: return "crealf"; + case 0xea1e83e3: return "f_logf"; + case 0xeac62795: return "_Cdivcc"; + case 0xeac7ca2c: return "ceilf4"; + case 0xebb4e08a: return "hypotf"; + case 0xec43b983: return "_f_sqrtf"; + case 0xec7da0c8: return "_atan2f4fast"; + case 0xed05c265: return "sqrtf4"; + case 0xed9d1ac5: return "f_tanf"; + case 0xeda86c48: return "copysignf4"; + case 0xee0db701: return "_Csubcr"; + case 0xee204ac6: return "f_ceilf"; + case 0xee303936: return "_Dsign"; + case 0xeed82401: return "_f_logf"; + case 0xf0947035: return "ctanhf"; + case 0xf0ab77c1: return "ccoshf"; + case 0xf16568af: return "_FAtan"; + case 0xf19c5e94: return "sincosf4"; + case 0xf1aaa2f8: return "conj"; + case 0xf3bd7d08: return "_cbrtf4fast"; + case 0xf3ec0258: return "round"; + case 0xf4ad6ea8: return "ldexp"; + case 0xf537d837: return "_truncf4"; + case 0xf5cd1e19: return "cosf4"; + case 0xf7844153: return "_f_fmaxf"; + case 0xf83a372f: return "f_fmaf"; + case 0xf95b7769: return "powf4fast"; + case 0xf99da2fc: return "fabsf4"; + case 0xfa28434b: return "log2l"; + case 0xfa765d42: return "_Cdivcr"; + case 0xfa97afbf: return "feupdateenv"; + case 0xfae9e727: return "_f_copysignf"; + case 0xfb6e6213: return "log1pf4fast"; + case 0xfb932a56: return "atan2f"; + case 0xfbb4047a: return "lroundf"; + case 0xfbe88922: return "_FErfc"; + case 0xfcedabc3: return "_fmodf4"; + case 0xfcf08193: return "expf"; + case 0xfdec16e1: return "cacoshl"; + case 0xfe23dbe9: return "_log2f4"; + case 0xff036800: return "cpowf"; + case 0xfffe79bf: return "_LCmulcc"; + case 0x06a840f5: return "sys_dbg_set_stacksize_ppu_exception_handler"; + case 0x08ef08a9: return "sys_dbg_get_spu_thread_group_ids"; + case 0x113b0bea: return "sys_dbg_get_ppu_thread_ids"; + case 0x1860f909: return "sys_dbg_get_spu_thread_ids"; + case 0x22916f45: return "sys_dbg_register_ppu_exception_handler"; + case 0x24a3d413: return "sys_dbg_mat_set_condition"; + case 0x266c2bd3: return "sys_dbg_read_spu_thread_context2"; + case 0x3147c6ca: return "sys_dbg_enable_floating_point_enabled_exception"; + case 0x381ae33e: return "sys_dbg_get_event_queue_information"; + case 0x3e5eed36: return "sys_dbg_get_spu_thread_name"; + case 0x4b55f456: return "sys_dbg_get_ppu_thread_name"; + case 0x4ded9f6c: return "sys_dbg_signal_to_ppu_exception_handler"; + case 0x50453aa8: return "sys_dbg_get_mutex_information"; + case 0x580f8203: return "sys_dbg_vm_get_page_information"; + case 0x590a276e: return "sys_dbg_mat_get_condition"; + case 0x63bd413e: return "sys_dbg_get_cond_information"; + case 0x6b413178: return "sys_dbg_get_ppu_thread_status"; + case 0x7bdadb01: return "sys_dbg_get_lwcond_information"; + case 0x9794bb53: return "sys_dbg_get_rwlock_information"; + case 0x9ddb9dc3: return "sys_dbg_get_spu_thread_group_status"; + case 0xa2d6cbd2: return "sys_dbg_get_semaphore_information"; + case 0xab475d53: return "sys_dbg_set_mask_to_ppu_exception_handler"; + case 0xb9da87d3: return "sys_dbg_get_coredump_params"; + case 0xbb0ae221: return "sys_dbg_get_address_from_dabr"; + case 0xbd69e584: return "sys_dbg_get_spu_thread_group_name"; + case 0xc0eb9266: return "sys_dbg_finalize_ppu_exception_handler"; + case 0xc21ee635: return "sys_dbg_read_spu_thread_context"; + case 0xc353353a: return "sys_dbg_initialize_ppu_exception_handler"; + case 0xc5eef17f: return "sys_dbg_read_ppu_thread_context"; + case 0xc6d7ec13: return "sys_dbg_unregister_ppu_exception_handler"; + case 0xcb377e36: return "sys_dbg_get_lwmutex_information"; + case 0xd830062a: return "sys_dbg_signal_to_coredump_handler"; + case 0xdb14b37b: return "sys_dbg_set_address_to_dabr"; + case 0xdf856979: return "sys_dbg_get_event_flag_information"; + case 0xf254768c: return "sys_dbg_disable_floating_point_enabled_exception"; + case 0x051ee3ee: return "socketpoll"; + case 0x05bd4438: return "sys_net_get_udpp2p_test_param"; + case 0x10b81ed6: return "sys_net_set_udpp2p_test_param"; + case 0x139a9e9b: return "sys_net_initialize_network_ex"; + case 0x13efe7f5: return "getsockname"; + case 0x1d14d6e4: return "sys_net_get_lib_name_server"; + case 0x1f953b9f: return "recvfrom"; + case 0x27fb339d: return "sys_net_if_ctl"; + case 0x28e208bb: return "listen"; + case 0x368823c0: return "sys_net_get_netemu_test_param"; + case 0x3b27c780: return "sys_net_get_sockinfo"; + case 0x3f09e20a: return "socketselect"; + case 0x44328aa2: return "sys_net_close_dump"; + case 0x4ab0b9b9: return "sys_net_set_test_param"; + case 0x506ad863: return "inet_network"; + case 0x5420e419: return "sys_net_show_nameserver"; + case 0x566893ce: return "inet_lnaof"; + case 0x5a045bd1: return "getsockopt"; + case 0x6005cde1: return "_sys_net_errno_loc"; + case 0x64f66d35: return "connect"; + case 0x6db6e8cd: return "socketclose"; + case 0x71f4c717: return "gethostbyname"; + case 0x7687d48c: return "sys_net_set_resolver_configurations"; + case 0x79b61646: return "sys_net_show_route"; + case 0x858a930b: return "inet_ntoa"; + case 0x88f03575: return "setsockopt"; + case 0x89c9917c: return "sys_net_read_dump"; + case 0x8af3825e: return "inet_pton"; + case 0x8ccf05ed: return "sys_net_abort_resolver"; + case 0x8d1b77fb: return "sys_net_abort_socket"; + case 0x9647570b: return "sendto"; + case 0x9a318259: return "sys_net_set_lib_name_server"; + case 0x9c056962: return "socket"; + case 0xa50777c6: return "shutdown"; + case 0xa5a86557: return "sys_net_get_test_param"; + case 0xa765d029: return "sys_net_get_sockinfo_ex"; + case 0xa9a079e0: return "inet_aton"; + case 0xab447704: return "sys_net_open_dump"; + case 0xad09481b: return "sendmsg"; + case 0xb0a59804: return "bind"; + case 0xb4152c74: return "inet_makeaddr"; + case 0xb48636c4: return "sys_net_show_ifconfig"; + case 0xb68d5625: return "sys_net_finalize_network"; + case 0xc9157d30: return "_sys_net_h_errno_loc"; + case 0xc94f6939: return "accept"; + case 0xc98a3146: return "inet_ntop"; + case 0xc9d09c34: return "recvmsg"; + case 0xdabbc2c0: return "inet_addr"; + case 0xdc751b40: return "send"; + case 0xe2434507: return "sys_net_set_netemu_test_param"; + case 0xe39a62a7: return "inet_netof"; + case 0xf7ac8941: return "gethostbyaddr"; + case 0xf9ec2db6: return "getpeername"; + case 0xfba04f37: return "recv"; + case 0xfdb8f926: return "sys_net_free_thread_context"; + case 0x0341bb97: return "sys_prx_get_module_id_by_address"; + case 0x04e83d2c: return "_sys_strncmp"; + case 0x052d29a6: return "_sys_strcat"; + case 0x05c65656: return "sys_mempool_try_allocate_block"; + case 0x0618936b: return "_sys_vsnprintf"; + case 0x06574237: return "_sys_snprintf"; + case 0x1573dc3f: return "sys_lwmutex_lock"; + case 0x191f0c4a: return "_sys_strrchr"; + case 0x1ae10b92: return "_sys_spu_printf_attach_thread"; + case 0x1bc200f4: return "sys_lwmutex_unlock"; + case 0x1c9a942c: return "sys_lwcond_destroy"; + case 0x1ca525a2: return "_sys_strncasecmp"; + case 0x1ed454ce: return "sys_spu_elf_get_information"; + case 0x24a1ea07: return "sys_ppu_thread_create"; + case 0x25596f51: return "sys_mempool_get_count"; + case 0x26090058: return "sys_prx_load_module"; + case 0x27427742: return "_sys_memmove"; + case 0x2a6d9d51: return "sys_lwcond_wait"; + case 0x2c847572: return "_sys_process_atexitspawn"; + case 0x2d36462b: return "_sys_strlen"; + case 0x2f85c0ef: return "sys_lwmutex_create"; + case 0x3172759d: return "sys_game_get_temperature"; + case 0x318f17e1: return "_sys_memalign"; + case 0x350d454e: return "sys_ppu_thread_get_id"; + case 0x35168520: return "_sys_heap_malloc"; + case 0x3bd53c7b: return "_sys_memchr"; + case 0x3dd4a957: return "sys_ppu_thread_register_atexit"; + case 0x409ad939: return "sys_mmapper_free_memory"; + case 0x42b23552: return "sys_prx_register_library"; + case 0x44265c08: return "_sys_heap_memalign"; + case 0x459b4393: return "_sys_strcmp"; + case 0x45fe2fce: return "_sys_spu_printf_initialize"; + case 0x4643ba6e: return "sys_mmapper_unmap_memory"; + case 0x4a071d98: return "sys_interrupt_thread_disestablish"; + case 0x4b2f301a: return "_sys_tolower"; + case 0x5267cb35: return "sys_spinlock_unlock"; + case 0x52aadadf: return "sys_lwcond_signal_to"; + case 0x5fdfb2fe: return "_sys_spu_printf_detach_group"; + case 0x608212fc: return "sys_mempool_free_block"; + case 0x620e35a7: return "sys_game_get_system_sw_version"; + case 0x67f9fedb: return "sys_game_process_exitspawn2"; + case 0x68b9b011: return "_sys_memset"; + case 0x6bf66ea7: return "_sys_memcpy"; + case 0x6e05231d: return "sys_game_watchdog_stop"; + case 0x70258515: return "sys_mmapper_allocate_memory_from_container"; + case 0x71a8472a: return "sys_get_random_number"; + case 0x722a0254: return "sys_spinlock_trylock"; + case 0x74311398: return "sys_prx_get_my_module_id"; + case 0x744680a2: return "sys_initialize_tls"; + case 0x7498887b: return "_sys_strchr"; + case 0x791b9219: return "_sys_vsprintf"; + case 0x80fb0c19: return "sys_prx_stop_module"; + case 0x8461e528: return "sys_time_get_system_time"; + case 0x84bb6774: return "sys_prx_get_module_info"; + case 0x893305fa: return "sys_raw_spu_load"; + case 0x8985b5b6: return "_sys_heap_stats"; + case 0x8a2f159b: return "console_getc"; + case 0x8a561d92: return "_sys_heap_free"; + case 0x8bb03ab8: return "sys_game_board_storage_write"; + case 0x8c2bb498: return "sys_spinlock_initialize"; + case 0x96328741: return "_sys_process_at_Exitspawn"; + case 0x996f7cf8: return "_sys_strncat"; + case 0x99c88692: return "_sys_strcpy"; + case 0x9d3c0f81: return "sys_mempool_destroy"; + case 0x9e0623b5: return "sys_game_watchdog_start"; + case 0x9f04f7af: return "_sys_printf"; + case 0x9f18429d: return "sys_prx_start_module"; + case 0x9f950780: return "sys_game_get_rtc_status"; + case 0xa146a143: return "sys_mempool_allocate_block"; + case 0xa1f9eafe: return "_sys_sprintf"; + case 0xa285139d: return "sys_spinlock_lock"; + case 0xa2c7ba64: return "sys_prx_exitspawn_with_level"; + case 0xa330ad84: return "sys_prx_load_module_on_memcontainer_by_fd"; + case 0xa3e3be68: return "sys_ppu_thread_once"; + case 0xa5d06bf0: return "sys_prx_get_module_list"; + case 0xaa6d9bff: return "sys_prx_load_module_on_memcontainer"; + case 0xac6fc404: return "sys_ppu_thread_unregister_atexit"; + case 0xacad8fb6: return "sys_game_watchdog_clear"; + case 0xaeb78725: return "sys_lwmutex_trylock"; + case 0xaede4b03: return "_sys_heap_delete_heap"; + case 0xaff080a4: return "sys_ppu_thread_exit"; + case 0xb257540b: return "sys_mmapper_allocate_memory"; + case 0xb27c8ae7: return "sys_prx_load_module_list"; + case 0xb2fcf2c8: return "_sys_heap_create_heap"; + case 0xb3bbcf2a: return "_sys_spu_printf_detach_thread"; + case 0xb6369393: return "_sys_heap_get_total_free_size"; + case 0xb995662e: return "sys_raw_spu_image_load"; + case 0xb9bf1078: return "_sys_heap_alloc_heap_memory"; + case 0xbdb18f83: return "_sys_malloc"; + case 0xc3476d0c: return "sys_lwmutex_destroy"; + case 0xc4fd6121: return "_sys_qsort"; + case 0xca9a60bf: return "sys_mempool_create"; + case 0xd0ea47a7: return "sys_prx_unregister_library"; + case 0xd1ad4570: return "_sys_heap_get_mallinfo"; + case 0xd3039d4d: return "_sys_strncpy"; + case 0xda0eb71a: return "sys_lwcond_create"; + case 0xdb6b3250: return "sys_spu_elf_get_segments"; + case 0xdc578057: return "sys_mmapper_map_memory"; + case 0xdd0c1e09: return "_sys_spu_printf_attach_group"; + case 0xdd3b27ac: return "_sys_spu_printf_finalize"; + case 0xe0998dbf: return "sys_prx_get_module_id_by_name"; + case 0xe0da8efd: return "sys_spu_image_close"; + case 0xe66bac36: return "console_putc"; + case 0xe6f2c1e7: return "sys_process_exit"; + case 0xe76964f5: return "sys_game_board_storage_read"; + case 0xe7ef3a80: return "sys_prx_load_module_list_on_memcontainer"; + case 0xe9a1bd84: return "sys_lwcond_signal_all"; + case 0xebe5f72f: return "sys_spu_image_import"; + case 0xeef75113: return "_sys_toupper"; + case 0xef68c17c: return "sys_prx_load_module_by_fd"; + case 0xef87a695: return "sys_lwcond_signal"; + case 0xf0aece0d: return "sys_prx_unload_module"; + case 0xf57e1d6f: return "console_write"; + case 0xf7f7fb20: return "_sys_free"; + case 0xfa7f693d: return "_sys_vprintf"; + case 0xfb5db080: return "_sys_memcmp"; + case 0xfc52a7a9: return "sys_game_process_exitspawn"; } - - ConLog.Error("Unknown func id: 0x%08x", id); - return -1; + + return fmt::Format("Unknown func id: 0x%08x", fid); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index bf515ad066..6018e36d1a 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -580,10 +580,9 @@ void SysCalls::DoSyscall(u32 code) { return; } - //ConLog.Error("Unknown function 0x%08x", code); - //return 0; - //TODO: remove this + + ConLog.Error("Unknown function 0x%08x", code); declCPU(); - RESULT(DoFunc(code)); + RESULT(0); } diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 1be86c0543..57ed2e7f0d 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -451,7 +451,7 @@ class SysCalls { public: static void DoSyscall(u32 code); - static s64 DoFunc(const u32 id); + static std::string GetHLEFuncName(const u32 fid); }; //extern SysCalls SysCallsManager; diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 2ddbc955df..a7909eeb89 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -374,8 +374,7 @@ bool ELF64Loader::LoadPhdrData(u64 offset) { if(!module->Load(nid)) { - ConLog.Warning("Unknown function 0x%08x in '%s' module", nid, module_name.c_str()); - SysCalls::DoFunc(nid); + ConLog.Warning("Unimplemented function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); } } #ifdef LOADER_DEBUG From 125b71d2c5f8d0b248a7b66024c3140cc255d817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sat, 7 Jun 2014 17:18:40 +0200 Subject: [PATCH 013/499] Reverted remaining .ToBE() deletions & small fix And fixed wrong comparison on: `_cellSpursEventFlagInitialize`. --- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index daf61c8f6b..30f8ae3fc8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -490,7 +490,7 @@ int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t lwcond, mem_ptr_t l if (lwmutex.IsGood()) { - if (lwmutex->attribute & SYS_SYNC_RETRY) + if (lwmutex->attribute.ToBE() & se32(SYS_SYNC_RETRY)) { sys_lwcond.Warning("Unsupported SYS_SYNC_RETRY lwmutex protocol"); } - if (lwmutex->attribute & SYS_SYNC_RECURSIVE) + if (lwmutex->attribute.ToBE() & se32(SYS_SYNC_RECURSIVE)) { sys_lwcond.Warning("Recursive lwmutex(sq=%d)", (u32)lwmutex->sleep_queue); } @@ -90,7 +89,7 @@ int sys_lwcond_signal(mem_ptr_t lwcond) mem_ptr_t mutex(lwcond->lwmutex); - if (u32 target = (mutex->attribute == SYS_SYNC_PRIORITY ? lw->m_queue.pop_prio() : lw->m_queue.pop())) + if (u32 target = (mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? lw->m_queue.pop_prio() : lw->m_queue.pop())) { lw->signal.lock(target); @@ -121,7 +120,7 @@ int sys_lwcond_signal_all(mem_ptr_t lwcond) mem_ptr_t mutex(lwcond->lwmutex); - while (u32 target = (mutex->attribute == SYS_SYNC_PRIORITY ? lw->m_queue.pop_prio() : lw->m_queue.pop())) + while (u32 target = (mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? lw->m_queue.pop_prio() : lw->m_queue.pop())) { lw->signal.lock(target); @@ -204,7 +203,7 @@ int sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) lw->m_queue.push(tid_le); - if (mutex->recursive_count != 1) + if (mutex->recursive_count.ToBE() != se32(1)) { sys_lwcond.Warning("sys_lwcond_wait(id=%d): associated mutex had wrong recursive value (%d)", (u32)lwcond->lwcond_queue, (u32)mutex->recursive_count); @@ -213,9 +212,9 @@ int sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) if (sq) { - mutex->mutex.unlock(tid, mutex->attribute == SYS_SYNC_PRIORITY ? sq->pop_prio() : sq->pop()); + mutex->mutex.unlock(tid, mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? sq->pop_prio() : sq->pop()); } - else if (mutex->attribute == SYS_SYNC_RETRY) + else if (mutex->attribute.ToBE() == se32(SYS_SYNC_RETRY)) { mutex->mutex.unlock(tid); // SYS_SYNC_RETRY } From 1b1ce85b326d66af43e97e91845acf3ed79df0e2 Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 7 Jun 2014 18:32:15 +0300 Subject: [PATCH 014/499] Fixed small error in Fragment Shader Decompiler --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index c3113353e3..7acdc9c1ae 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -79,9 +79,6 @@ std::string GLFragmentDecompilerThread::GetMask() std::string GLFragmentDecompilerThread::AddReg(u32 index, int fp16) { return m_parr.AddParam(PARAM_NONE, "vec4", std::string(fp16 ? "h" : "r") + std::to_string(index), "vec4(0.0, 0.0, 0.0, 0.0)"); - - //return m_parr.AddParam((index >= 2 && index <= 4) ? PARAM_OUT : PARAM_NONE, "vec4", - // std::string(fp16 ? "h" : "r") + std::to_string(index), (fp16 || !index) ? -1 : ((index >= 2 && index <= 4) ? (index - 1) : -1)); } bool GLFragmentDecompilerThread::HasReg(u32 index, int fp16) @@ -292,9 +289,9 @@ void GLFragmentDecompilerThread::Task() while(true) { - auto finded = std::find(m_end_offsets.begin(), m_end_offsets.end(), m_size); - - if (finded != m_end_offsets.end()) + for (auto finded = std::find(m_end_offsets.begin(), m_end_offsets.end(), m_size); + finded != m_end_offsets.end(); + finded = std::find(m_end_offsets.begin(), m_end_offsets.end(), m_size)) { m_end_offsets.erase(finded); m_code_level--; @@ -302,9 +299,9 @@ void GLFragmentDecompilerThread::Task() m_loop_count--; } - finded = std::find(m_else_offsets.begin(), m_else_offsets.end(), m_size); - - if (finded != m_else_offsets.end()) + for (auto finded = std::find(m_else_offsets.begin(), m_else_offsets.end(), m_size); + finded != m_else_offsets.end(); + finded = std::find(m_else_offsets.begin(), m_else_offsets.end(), m_size)) { m_else_offsets.erase(finded); m_code_level--; From e0046671f1d5c1c1652b5e0baf3a75f23c5a036e Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 7 Jun 2014 18:52:25 +0300 Subject: [PATCH 015/499] Improved Fragment Shader Decompiler - Fixed KIL - Added all regs to reg_table --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 7acdc9c1ae..1382e2ce36 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -183,7 +183,7 @@ std::string GLFragmentDecompilerThread::GetCond() template std::string GLFragmentDecompilerThread::GetSRC(T src) { - std::string ret = ""; + std::string ret; switch(src.reg_type) { @@ -198,7 +198,8 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) "gl_Position", "col0", "col1", "fogc", - "tc0", "tc1", "tc2", "tc3", "tc4", "tc5", "tc6", "tc7" + "tc0", "tc1", "tc2", "tc3", "tc4", "tc5", "tc6", "tc7", "tc8", "tc9", + "ssa" }; switch(dst.src_attr_reg_num) @@ -341,7 +342,7 @@ void GLFragmentDecompilerThread::Task() case 0x10: SetDst("fract($0)"); break; // FRC case 0x11: SetDst("floor($0)"); break; // FLR - case 0x12: SetDst("discard"); break; // KIL (kill fragment) + case 0x12: SetDst("discard", false); break; // KIL (kill fragment) //case 0x13: break; // PK4 (pack four signed 8-bit values) //case 0x14: break; // UP4 (unpack four signed 8-bit values) case 0x15: SetDst("dFdx($0)"); break; // DDX From 03d2798dba63c47a3b06b82019c1297c2b04535a Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 7 Jun 2014 19:20:39 +0300 Subject: [PATCH 016/499] Fragment Shader Decompiler: fixed condition registers. --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 17 +++++++++++------ rpcs3/Emu/GS/GL/GLFragmentProgram.h | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 1382e2ce36..e724681399 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -39,16 +39,21 @@ void GLFragmentDecompilerThread::SetDst(std::string code, bool append_mask) std::string dest; - if(dst.no_dest) + if (dst.no_dest) { - if(dst.set_cond) + if (dst.set_cond) { - dest = m_parr.AddParam(PARAM_NONE , "vec4", std::string(dst.fp16 ? "hc" : "rc") + std::to_string(src0.cond_reg_index)); + dest = m_parr.AddParam(PARAM_NONE, "vec4", "cc" + std::to_string(src0.cond_mod_reg_index)); } } else { dest = AddReg(dst.dest_reg, dst.fp16); + + if (dst.set_cond) + { + dest = m_parr.AddParam(PARAM_NONE, "vec4", "cc" + std::to_string(src0.cond_mod_reg_index)) + mask + " = " + dest; + } } AddCode(cond + (dest.length() ? dest + mask + " = " : "") + code + (append_mask ? mask : "") + ";"); @@ -87,9 +92,9 @@ bool GLFragmentDecompilerThread::HasReg(u32 index, int fp16) std::string(fp16 ? "h" : "r") + std::to_string(index)); } -std::string GLFragmentDecompilerThread::AddCond(int fp16) +std::string GLFragmentDecompilerThread::AddCond() { - return m_parr.AddParam(PARAM_NONE , "vec4", std::string(fp16 ? "hc" : "rc") + std::to_string(src0.cond_mod_reg_index)); + return m_parr.AddParam(PARAM_NONE , "vec4", "cc" + std::to_string(src0.cond_reg_index)); } std::string GLFragmentDecompilerThread::AddConst() @@ -178,7 +183,7 @@ std::string GLFragmentDecompilerThread::GetCond() cond = "equal"; } - return "any(" + cond + "(" + AddCond(dst.no_dest) + swizzle + ", vec4(0.0)))"; + return "any(" + cond + "(" + AddCond() + swizzle + ", vec4(0.0)))"; } template std::string GLFragmentDecompilerThread::GetSRC(T src) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.h b/rpcs3/Emu/GS/GL/GLFragmentProgram.h index 9148444886..3aba8fa7af 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.h +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.h @@ -148,7 +148,7 @@ struct GLFragmentDecompilerThread : public ThreadBase void AddCode(const std::string& code); std::string AddReg(u32 index, int fp16); bool HasReg(u32 index, int fp16); - std::string AddCond(int fp16); + std::string AddCond(); std::string AddConst(); std::string AddTex(); std::string Format(std::string code); From 7bb966ba822240ad6b14935f07326adbcbecaa8f Mon Sep 17 00:00:00 2001 From: DH Date: Sun, 8 Jun 2014 08:27:57 +0300 Subject: [PATCH 017/499] Improved PPU Interpreter - Fixed UpdateCR0 - Fixed XER.CA updating --- rpcs3/Emu/Cell/PPUInterpreter.h | 53 ++++++++++++++------------- rpcs3/Emu/Cell/PPUThread.h | 12 +++--- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 2 +- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index bf68cf9835..6d319db432 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -2045,9 +2045,10 @@ private: void SUBFIC(u32 rd, u32 ra, s32 simm16) { const u64 RA = CPU.GPR[ra]; - const u64 IMM = (u64)(s64)simm16; - CPU.GPR[rd] = IMM - RA; - CPU.XER.CA = RA > IMM; + const u64 IMM = (s64)simm16; + CPU.GPR[rd] = ~RA + IMM + 1; + + CPU.XER.CA = CPU.IsCarry(~RA, IMM, 1); } void CMPLI(u32 crfd, u32 l, u32 ra, u32 uimm16) { @@ -2181,17 +2182,17 @@ private: { const u64 mask = rotate_mask[32 + mb][32 + me]; CPU.GPR[ra] = (CPU.GPR[ra] & ~mask) | (rotl32(CPU.GPR[rs], sh) & mask); - if(rc) CPU.UpdateCR0(CPU.GPR[ra]); + if(rc) CPU.UpdateCR0(CPU.GPR[ra]); } void RLWINM(u32 ra, u32 rs, u32 sh, u32 mb, u32 me, bool rc) { CPU.GPR[ra] = rotl32(CPU.GPR[rs], sh) & rotate_mask[32 + mb][32 + me]; - if(rc) CPU.UpdateCR0(CPU.GPR[ra]); + if(rc) CPU.UpdateCR0(CPU.GPR[ra]); } void RLWNM(u32 ra, u32 rs, u32 rb, u32 mb, u32 me, bool rc) { CPU.GPR[ra] = rotl32(CPU.GPR[rs], CPU.GPR[rb] & 0x1f) & rotate_mask[32 + mb][32 + me]; - if(rc) CPU.UpdateCR0(CPU.GPR[ra]); + if(rc) CPU.UpdateCR0(CPU.GPR[ra]); } void ORI(u32 ra, u32 rs, u32 uimm16) { @@ -2212,12 +2213,12 @@ private: void ANDI_(u32 ra, u32 rs, u32 uimm16) { CPU.GPR[ra] = CPU.GPR[rs] & uimm16; - CPU.UpdateCR0(CPU.GPR[ra]); + CPU.UpdateCR0(CPU.GPR[ra]); } void ANDIS_(u32 ra, u32 rs, u32 uimm16) { CPU.GPR[ra] = CPU.GPR[rs] & (uimm16 << 16); - CPU.UpdateCR0(CPU.GPR[ra]); + CPU.UpdateCR0(CPU.GPR[ra]); } void RLDICL(u32 ra, u32 rs, u32 sh, u32 mb, bool rc) { @@ -2305,10 +2306,10 @@ private: } void SUBFC(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) { - const s64 RA = CPU.GPR[ra]; - const s64 RB = CPU.GPR[rb]; + const u64 RA = CPU.GPR[ra]; + const u64 RB = CPU.GPR[rb]; CPU.GPR[rd] = ~RA + RB + 1; - CPU.XER.CA = CPU.IsCarry(RA, RB); + CPU.XER.CA = CPU.IsCarry(~RA, RB, 1); if(oe) UNK("subfco"); if(rc) CPU.UpdateCR0(CPU.GPR[rd]); } @@ -2317,7 +2318,7 @@ private: const s64 RA = CPU.GPR[ra]; const s64 RB = CPU.GPR[rb]; CPU.GPR[rd] = RA + RB; - CPU.XER.CA = RA <= RB; + CPU.XER.CA = CPU.IsCarry(RA, RB); if(oe) UNK("addco"); if(rc) CPU.UpdateCR0(CPU.GPR[rd]); } @@ -2331,7 +2332,7 @@ private: u32 a = CPU.GPR[ra]; u32 b = CPU.GPR[rb]; CPU.GPR[rd] = ((u64)a * (u64)b) >> 32; - if(rc) CPU.UpdateCR0(CPU.GPR[rd]); + if(rc) CPU.UpdateCR0(CPU.GPR[rd]); } void MFOCRF(u32 a, u32 rd, u32 crm) { @@ -2389,7 +2390,7 @@ private: CPU.GPR[ra] = r & m; - if(rc) CPU.UpdateCR0(CPU.GPR[ra]); + if(rc) CPU.UpdateCR0(CPU.GPR[ra]); } void CNTLZW(u32 ra, u32 rs, bool rc) { @@ -2516,7 +2517,7 @@ private: s32 a = CPU.GPR[ra]; s32 b = CPU.GPR[rb]; CPU.GPR[rd] = ((s64)a * (s64)b) >> 32; - if(rc) CPU.UpdateCR0(CPU.GPR[rd]); + if(rc) CPU.UpdateCR0(CPU.GPR[rd]); } void LDARX(u32 rd, u32 ra, u32 rb) { @@ -2571,7 +2572,7 @@ private: const u64 RA = CPU.GPR[ra]; const u64 RB = CPU.GPR[rb]; CPU.GPR[rd] = ~RA + RB + CPU.XER.CA; - CPU.XER.CA = (~RA + CPU.XER.CA > ~RB) | ((RA == 0) & CPU.XER.CA); + CPU.XER.CA = CPU.IsCarry(~RA, RB, CPU.XER.CA); if(rc) CPU.UpdateCR0(CPU.GPR[rd]); if(oe) UNK("subfeo"); } @@ -2694,7 +2695,7 @@ private: { const u64 RA = CPU.GPR[ra]; CPU.GPR[rd] = ~RA + CPU.XER.CA; - CPU.XER.CA = ((RA == 0) & CPU.XER.CA); + CPU.XER.CA = CPU.IsCarry(~RA, CPU.XER.CA); if (oe) ConLog.Warning("subfzeo"); if (rc) CPU.UpdateCR0(CPU.GPR[rd]); } @@ -2726,8 +2727,8 @@ private: void SUBFME(u32 rd, u32 ra, u32 oe, bool rc) { const u64 RA = CPU.GPR[ra]; - CPU.GPR[rd] = ~RA + CPU.XER.CA + 0xFFFFFFFFFFFFFFFF; - CPU.XER.CA = (~RA + CPU.XER.CA > ~0xFFFFFFFFFFFFFFFF) | ((RA == 0) & CPU.XER.CA); + CPU.GPR[rd] = ~RA + CPU.XER.CA + ~0ULL; + CPU.XER.CA = CPU.IsCarry(~RA, CPU.XER.CA, ~0ULL); if (oe) ConLog.Warning("subfmeo"); if (rc) CPU.UpdateCR0(CPU.GPR[rd]); } @@ -2749,7 +2750,7 @@ private: void MULLW(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) { CPU.GPR[rd] = (s64)((s64)(s32)CPU.GPR[ra] * (s64)(s32)CPU.GPR[rb]); - if(rc) CPU.UpdateCR0(CPU.GPR[rd]); + if(rc) CPU.UpdateCR0(CPU.GPR[rd]); if(oe) UNK("mullwo"); } void DCBTST(u32 ra, u32 rb, u32 th) @@ -2905,7 +2906,7 @@ private: CPU.GPR[rd] = RA / RB; } - if(rc) CPU.UpdateCR0(CPU.GPR[rd]); + if(rc) CPU.UpdateCR0(CPU.GPR[rd]); } void MTSPR(u32 spr, u32 rs) { @@ -2954,7 +2955,7 @@ private: CPU.GPR[rd] = (u32)(RA / RB); } - if(rc) CPU.UpdateCR0(CPU.GPR[rd]); + if(rc) CPU.UpdateCR0(CPU.GPR[rd]); } void LVLX(u32 vd, u32 ra, u32 rb) { @@ -2987,7 +2988,7 @@ private: u32 m = (CPU.GPR[rb] & 0x20) ? 0 : rotate_mask[32 + n][63]; CPU.GPR[ra] = r & m; - if(rc) CPU.UpdateCR0(CPU.GPR[ra]); + if(rc) CPU.UpdateCR0(CPU.GPR[ra]); } void SRD(u32 ra, u32 rs, u32 rb, bool rc) { @@ -3218,7 +3219,7 @@ private: void EXTSH(u32 ra, u32 rs, bool rc) { CPU.GPR[ra] = (s64)(s16)CPU.GPR[rs]; - if(rc) CPU.UpdateCR0(CPU.GPR[ra]); + if(rc) CPU.UpdateCR0(CPU.GPR[ra]); } void STVRXL(u32 vs, u32 ra, u32 rb) { @@ -3230,7 +3231,7 @@ private: void EXTSB(u32 ra, u32 rs, bool rc) { CPU.GPR[ra] = (s64)(s8)CPU.GPR[rs]; - if(rc) CPU.UpdateCR0(CPU.GPR[ra]); + if(rc) CPU.UpdateCR0(CPU.GPR[ra]); } void STFIWX(u32 frs, u32 ra, u32 rb) { @@ -3239,7 +3240,7 @@ private: void EXTSW(u32 ra, u32 rs, bool rc) { CPU.GPR[ra] = (s64)(s32)CPU.GPR[rs]; - if(rc) CPU.UpdateCR0(CPU.GPR[ra]); + if(rc) CPU.UpdateCR0(CPU.GPR[ra]); } void ICBI(u32 ra, u32 rs) { diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 62b43ff36e..a88ba21060 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -247,10 +247,11 @@ union XERhdr struct { - u64 L : 61; - u64 CA : 1; - u64 OV : 1; - u64 SO : 1; + u32 L : 29; + u32 CA : 1; + u32 OV : 1; + u32 SO : 1; + u32 : 32; }; }; @@ -721,7 +722,8 @@ public: const u8 IsCR(const u32 bit) const { return (GetCR(bit >> 2) & GetCRBit(bit)) ? 1 : 0; } - bool IsCarry(const u64 a, const u64 b) { return a > (a + b); } + bool IsCarry(const u64 a, const u64 b) { return (a + b) < a; } + bool IsCarry(const u64 a, const u64 b, const u64 c) { return IsCarry(a, b) || IsCarry(a + b, c); } void SetFPSCRException(const FPSCR_EXP mask) { diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index e724681399..6c603055ea 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -13,7 +13,7 @@ void GLFragmentDecompilerThread::SetDst(std::string code, bool append_mask) if(!src0.exec_if_gr || !src0.exec_if_lt || !src0.exec_if_eq) { - cond = "if(" + GetCond() + ") "; + cond = "if($cond) "; } switch(src1.scale) From 982ea35d44c55269fe40b648c260e9ee2610b892 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sun, 8 Jun 2014 16:43:53 +0200 Subject: [PATCH 018/499] enable full precompiled headers for non-Windows Platforms for now to make people not guess all the time what to include --- rpcs3/stdafx.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index c53fe16278..cafdb54861 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -280,7 +280,6 @@ enum Status #include "Utilities/IdManager.h" #include "Utilities/StrFmt.h" -#ifdef _WIN32 #include "Emu/SysCalls/Callback.h" #include "Ini.h" #include "Gui/FrameBase.h" @@ -302,7 +301,6 @@ enum Status #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" #include "rpcs3.h" -#endif #define _PRGNAME_ "RPCS3" #define _PRGVER_ "0.0.0.4" From 3c8815cc06fb446646f13de02a1b53cbfe369e28 Mon Sep 17 00:00:00 2001 From: DH Date: Sun, 8 Jun 2014 17:52:35 +0300 Subject: [PATCH 019/499] Improved Vertex Shader Decompiler - Fixed condition register selection - Implemented LIT - Fixed RCP --- Utilities/StrFmt.h | 4 +- rpcs3/Emu/ConLog.h | 14 +- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 47 ++- rpcs3/Emu/GS/GL/GLFragmentProgram.h | 2 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 3 +- rpcs3/Emu/GS/GL/GLGSRender.h | 3 + rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 478 ++++++++++++++++---------- rpcs3/Emu/GS/GL/GLVertexProgram.h | 35 +- rpcs3/Emu/GS/RSXThread.cpp | 6 +- 9 files changed, 369 insertions(+), 223 deletions(-) diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 9116c26227..8aa2f897b8 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -116,7 +116,7 @@ namespace fmt{ if (src.substr(pos, comp_length) == list[i].first) { src = (pos ? src.substr(0, pos) + list[i].second : list[i].second) + std::string(src.c_str() + pos + comp_length); - pos += list[i].second.length(); + pos += list[i].second.length() - 1; break; } } @@ -140,7 +140,7 @@ namespace fmt{ if (src.substr(pos, comp_length) == list[i].first) { src = (pos ? src.substr(0, pos) + list[i].second() : list[i].second()) + std::string(src.c_str() + pos + comp_length); - pos += list[i].second().length(); + pos += list[i].second().length() - 1; break; } } diff --git a/rpcs3/Emu/ConLog.h b/rpcs3/Emu/ConLog.h index fffb6bda73..3ec96fd81d 100644 --- a/rpcs3/Emu/ConLog.h +++ b/rpcs3/Emu/ConLog.h @@ -17,28 +17,28 @@ public: LogWriter(); template - void Write(const std::string &fmt, Arg&&... args) + void Write(const std::string &fmt, Arg... args) { std::string frmt = fmt::Format(fmt, std::forward(args)...); WriteToLog("!", frmt, 2); } - + template - void Error(const std::string &fmt, Arg&&... args) + void Error(const std::string &fmt, Arg... args) { std::string frmt = fmt::Format(fmt, std::forward(args)...); WriteToLog("E", frmt, 4); } - + template - void Warning(const std::string &fmt, Arg&&... args) + void Warning(const std::string &fmt, Arg... args) { std::string frmt = fmt::Format(fmt, std::forward(args)...); WriteToLog("W", frmt, 3); } - + template - void Success(const std::string &fmt, Arg&&... args) + void Success(const std::string &fmt, Arg... args) { std::string frmt = fmt::Format(fmt, std::forward(args)...); WriteToLog("S", frmt, 1); diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 6c603055ea..a0813bf35e 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -8,14 +8,6 @@ void GLFragmentDecompilerThread::SetDst(std::string code, bool append_mask) { if(!src0.exec_if_eq && !src0.exec_if_gr && !src0.exec_if_lt) return; - const std::string mask = GetMask(); - std::string cond; - - if(!src0.exec_if_gr || !src0.exec_if_lt || !src0.exec_if_eq) - { - cond = "if($cond) "; - } - switch(src1.scale) { case 0: break; @@ -39,24 +31,17 @@ void GLFragmentDecompilerThread::SetDst(std::string code, bool append_mask) std::string dest; - if (dst.no_dest) + if (dst.set_cond) { - if (dst.set_cond) - { - dest = m_parr.AddParam(PARAM_NONE, "vec4", "cc" + std::to_string(src0.cond_mod_reg_index)); - } - } - else - { - dest = AddReg(dst.dest_reg, dst.fp16); - - if (dst.set_cond) - { - dest = m_parr.AddParam(PARAM_NONE, "vec4", "cc" + std::to_string(src0.cond_mod_reg_index)) + mask + " = " + dest; - } + dest += m_parr.AddParam(PARAM_NONE, "vec4", "cc" + std::to_string(src0.cond_mod_reg_index)) + "$m = "; } - AddCode(cond + (dest.length() ? dest + mask + " = " : "") + code + (append_mask ? mask : "") + ";"); + if (!dst.no_dest) + { + dest += AddReg(dst.dest_reg, dst.fp16) + "$m = "; + } + + AddCode("$ifcond " + dest + code + (append_mask ? "$m;" : ";")); } void GLFragmentDecompilerThread::AddCode(const std::string& code) @@ -122,7 +107,7 @@ std::string GLFragmentDecompilerThread::AddTex() return m_parr.AddParam(PARAM_UNIFORM, "sampler2D", std::string("tex") + std::to_string(dst.tex_num)); } -std::string GLFragmentDecompilerThread::Format(std::string code) +std::string GLFragmentDecompilerThread::Format(const std::string& code) { const std::pair> repl_list[] = { @@ -131,6 +116,14 @@ std::string GLFragmentDecompilerThread::Format(std::string code) { "$1", std::bind(std::mem_fn(&GLFragmentDecompilerThread::GetSRC), this, src1) }, { "$2", std::bind(std::mem_fn(&GLFragmentDecompilerThread::GetSRC), this, src2) }, { "$t", std::bind(std::mem_fn(&GLFragmentDecompilerThread::AddTex), this) }, + { "$m", std::bind(std::mem_fn(&GLFragmentDecompilerThread::GetMask), this) }, + { "$ifcond ", [this]() -> std::string + { + const std::string& cond = GetCond(); + if (cond == "true") return ""; + return "if(" + cond + ") "; + } + }, { "$cond", std::bind(std::mem_fn(&GLFragmentDecompilerThread::GetCond), this) }, { "$c", std::bind(std::mem_fn(&GLFragmentDecompilerThread::AddConst), this) } }; @@ -201,7 +194,7 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) static const std::string reg_table[] = { "gl_Position", - "col0", "col1", + "diff_color", "spec_color", "fogc", "tc0", "tc1", "tc2", "tc3", "tc4", "tc5", "tc6", "tc7", "tc8", "tc9", "ssa" @@ -359,7 +352,7 @@ void GLFragmentDecompilerThread::Task() case 0x1b: SetDst("inversesqrt(abs($0))"); break; // RSQ case 0x1c: SetDst("exp2($0)"); break; // EX2 case 0x1d: SetDst("log2($0)"); break; // LG2 - case 0x1e: SetDst("vec4(1.0, $0.x, ($0.x > 0 ? exp($0.w * log($0.y)) : 0.0), 1.0)"); break; // LIT (compute light coefficients) + case 0x1e: SetDst("vec4(1.0, $0.x, ($0.x > 0 ? exp2($0.w * log2($0.y)) : 0.0), 1.0)"); break; // LIT (compute light coefficients) case 0x1f: SetDst("($0 * ($1 - $2) + $2)"); break; // LRP (linear interpolation) case 0x20: SetDst("vec4(equal($0, vec4(1.0)))"); break; // STR (set on true) @@ -405,7 +398,7 @@ void GLFragmentDecompilerThread::Task() break; case 0x43: //LOOP - AddCode(fmt::Format("if($cond) for(int i%u = %u; i%u < %u; i%u += %u) //LOOP", + AddCode(fmt::Format("$ifcond for(int i%u = %u; i%u < %u; i%u += %u) //LOOP", m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); m_loop_count++; m_end_offsets.push_back(src2.end_offset << 2); diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.h b/rpcs3/Emu/GS/GL/GLFragmentProgram.h index 3aba8fa7af..b903fd927b 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.h +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.h @@ -151,7 +151,7 @@ struct GLFragmentDecompilerThread : public ThreadBase std::string AddCond(); std::string AddConst(); std::string AddTex(); - std::string Format(std::string code); + std::string Format(const std::string& code); std::string GetCond(); template std::string GetSRC(T src); diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 6a3ad40d37..f5dda76c88 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -325,7 +325,7 @@ void GLGSRender::InitVertexData() for(u32 i=0; i 1) + return; + Bind(); const u64 texaddr = GetAddress(tex.GetOffset(), tex.GetLocation()); diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index a9fbd960b7..f77cd244a5 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -39,52 +39,32 @@ std::string GLVertexDecompilerThread::GetScaMask() std::string GLVertexDecompilerThread::GetDST(bool isSca) { - static const std::string reg_table[] = - { - "gl_Position", - "col0", "col1", - "bfc0", "bfc1", - "gl_ClipDistance[%d]", - "gl_ClipDistance[%d]", - "tc0", "tc1", "tc2", "tc3", "tc4", "tc5", "tc6", "tc7" - }; - std::string ret; - switch(isSca ? 0x1f : d3.dst) + switch(d3.dst) { - case 0x0: case 0x5: case 0x6: - ret += reg_table[d3.dst]; - break; - case 0x1f: ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("tmp") + std::to_string(isSca ? d3.sca_dst_tmp : d0.dst_tmp)); break; default: - if(d3.dst < WXSIZEOF(reg_table)) - { - ret += m_parr.AddParam(PARAM_OUT, "vec4", reg_table[d3.dst]); - } - else - { - ConLog.Error("Bad dst reg num: %d", fmt::by_value(d3.dst)); - ret += m_parr.AddParam(PARAM_OUT, "vec4", "unk"); - } + if (d3.dst > 15) + ConLog.Error("dst index out of range: %u", d3.dst); + ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("dst_reg") + std::to_string(d3.dst), d3.dst == 0 ? "vec4(0.0f, 0.0f, 0.0f, 1.0f)" : "vec4(0.0)"); break; } return ret; } -std::string GLVertexDecompilerThread::GetSRC(const u32 n, bool isSca) +std::string GLVertexDecompilerThread::GetSRC(const u32 n) { static const std::string reg_table[] = { "in_pos", "in_weight", "in_normal", - "in_col0", "in_col1", - "in_fogc", - "in_6", "in_7", + "in_diff_color", "in_spec_color", + "in_fog", + "in_point_size", "in_7", "in_tc0", "in_tc1", "in_tc2", "in_tc3", "in_tc4", "in_tc5", "in_tc6", "in_tc7" }; @@ -94,7 +74,7 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n, bool isSca) switch(src[n].reg_type) { case 1: //temp - ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("tmp") + std::to_string(src[n].tmp_src)); + ret += m_parr.AddParam(PARAM_NONE, "vec4", "tmp" + std::to_string(src[n].tmp_src)); break; case 2: //input if(d1.input_src < WXSIZEOF(reg_table)) @@ -108,7 +88,8 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n, bool isSca) } break; case 3: //const - ret += m_parr.AddParam(PARAM_UNIFORM, "vec4", std::string("vc") + std::to_string(d1.const_src)); + m_parr.AddParam(PARAM_UNIFORM, "vec4", std::string("vc[468]")); + ret += std::string("vc[") + std::to_string(d1.const_src) + (d3.index_const ? " + " + AddAddrReg() : "") + "]"; break; default: @@ -119,26 +100,14 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n, bool isSca) static const std::string f = "xyzw"; - if (isSca) - { - assert(src[n].swz_x == src[n].swz_y); - assert(src[n].swz_z == src[n].swz_w); - assert(src[n].swz_x == src[n].swz_z); + std::string swizzle; - ret += '.'; - ret += f[src[n].swz_x]; - } - else - { - std::string swizzle; + swizzle += f[src[n].swz_x]; + swizzle += f[src[n].swz_y]; + swizzle += f[src[n].swz_z]; + swizzle += f[src[n].swz_w]; - swizzle += f[src[n].swz_x]; - swizzle += f[src[n].swz_y]; - swizzle += f[src[n].swz_z]; - swizzle += f[src[n].swz_w]; - - if(swizzle != f) ret += '.' + swizzle; - } + if(swizzle != f) ret += '.' + swizzle; bool abs; @@ -155,10 +124,10 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n, bool isSca) return ret; } -void GLVertexDecompilerThread::AddCode(bool is_sca, const std::string& pCode, bool src_mask, bool set_dst, bool set_cond) +void GLVertexDecompilerThread::SetDST(bool is_sca, std::string value) { - std::string code = pCode; if(d0.cond == 0) return; + enum { lt = 0x1, @@ -166,6 +135,99 @@ void GLVertexDecompilerThread::AddCode(bool is_sca, const std::string& pCode, bo gt = 0x4, }; + std::string mask = GetMask(is_sca); + + value += mask; + + if(is_sca && d0.vec_result) + { + value = "vec4(" + value + ")" + mask; + } + + if(d0.staturate) + { + value = "clamp(" + value + ", 0.0, 1.0)"; + } + + std::string dest; + + if (d0.cond_update_enable_0 && d0.cond_update_enable_1) + { + dest += m_parr.AddParam(PARAM_NONE, "vec4", "cc" + std::to_string(d0.cond_reg_sel_1), "vec4(0.0)") + mask + " = "; + } + + if (d3.dst != 0x1f || (is_sca ? d3.sca_dst_tmp != 0x3f : d0.dst_tmp != 0x3f)) + { + dest += GetDST(is_sca) + mask + " = "; + } + + std::string code; + + if (d0.cond_test_enable) + code += "$ifcond "; + + code += dest + value; + + AddCode(code + ";"); +} + +std::string GLVertexDecompilerThread::GetFunc() +{ + std::string name = "func$a"; + + for(uint i=0; i> repl_list[] = + { + { "$$", []() -> std::string { return "$"; } }, + { "$0", std::bind(std::mem_fn(&GLVertexDecompilerThread::GetSRC), this, 0) }, + { "$1", std::bind(std::mem_fn(&GLVertexDecompilerThread::GetSRC), this, 1) }, + { "$2", std::bind(std::mem_fn(&GLVertexDecompilerThread::GetSRC), this, 2) }, + { "$s", std::bind(std::mem_fn(&GLVertexDecompilerThread::GetSRC), this, 2) }, + { "$am", std::bind(std::mem_fn(&GLVertexDecompilerThread::AddAddrMask), this) }, + { "$a", std::bind(std::mem_fn(&GLVertexDecompilerThread::AddAddrReg), this) }, + + { "$fa", [this]()->std::string {return std::to_string(GetAddr()); } }, + { "$f()", std::bind(std::mem_fn(&GLVertexDecompilerThread::GetFunc), this) }, + { "$ifcond ", [this]() -> std::string + { + const std::string& cond = GetCond(); + if (cond == "true") return ""; + return "if(" + cond + ") "; + } + }, + { "$cond", std::bind(std::mem_fn(&GLVertexDecompilerThread::GetCond), this) } + }; + + return fmt::replace_all(code, repl_list); +} + +std::string GLVertexDecompilerThread::GetCond() +{ + enum + { + lt = 0x1, + eq = 0x2, + gt = 0x4, + }; + + if (d0.cond == 0) return "false"; + if (d0.cond == (lt | gt | eq)) return "true"; + static const char* cond_string_table[(lt | gt | eq) + 1] = { "error", @@ -178,102 +240,51 @@ void GLVertexDecompilerThread::AddCode(bool is_sca, const std::string& pCode, bo "error" }; - std::string cond; + static const char f[4] = { 'x', 'y', 'z', 'w' }; - if((set_cond || d0.cond_test_enable) && d0.cond != (lt | gt | eq)) - { - static const char f[4] = {'x', 'y', 'z', 'w'}; + std::string swizzle; + swizzle += f[d0.mask_x]; + swizzle += f[d0.mask_y]; + swizzle += f[d0.mask_z]; + swizzle += f[d0.mask_w]; - std::string swizzle; - swizzle += f[d0.mask_x]; - swizzle += f[d0.mask_y]; - swizzle += f[d0.mask_z]; - swizzle += f[d0.mask_w]; + swizzle = swizzle == "xyzw" ? "" : "." + swizzle; - swizzle = swizzle == "xyzw" ? "" : "." + swizzle; - - cond = fmt::Format("if(any(%s(rc%s, vec4(0.0)%s))) ", cond_string_table[d0.cond], swizzle.c_str(), swizzle.c_str()); - } - - std::string mask = GetMask(is_sca); - std::string value = src_mask ? code + mask : code; - - if(is_sca && d0.vec_result) - { - value = "vec4(" + value + ")" + mask; - } - - if(d0.staturate) - { - value = "clamp(" + value + ", 0.0, 1.0)"; - } - - if(set_dst) - { - std::string dest; - if(d0.cond_update_enable_0) - { - dest = m_parr.AddParam(PARAM_NONE, "vec4", "rc", "vec4(0.0)") + mask; - } - else if(d3.dst == 5 || d3.dst == 6) - { - if(d3.vec_writemask_x) - { - dest = m_parr.AddParam(PARAM_OUT, "vec4", "fogc") + mask; - } - else - { - int num = d3.dst == 5 ? 0 : 3; - - //if(d3.vec_writemask_y) num += 0; - if(d3.vec_writemask_z) num += 1; - else if(d3.vec_writemask_w) num += 2; - - dest = fmt::Format(GetDST(is_sca) + "/*" + mask + "*/", num); - } - } - else - { - dest = GetDST(is_sca) + mask; - } - - code = cond + dest + " = " + value; - } - else - { - code = cond + value; - } - - m_body.push_back(code + ";"); + return fmt::Format("any(%s(cc%d%s, vec4(0.0)%s))", cond_string_table[d0.cond], d0.cond_reg_sel_1, swizzle.c_str(), swizzle.c_str()); } -std::string GLVertexDecompilerThread::GetFunc() + +std::string GLVertexDecompilerThread::AddAddrMask() { - u32 offset = (d2.iaddrh << 3) | d3.iaddrl; - std::string name = fmt::Format("func%u", offset); - - for(uint i=0; ibody.push_back(Format(code)); +} + +void GLVertexDecompilerThread::SetDSTVec(const std::string& code) +{ + SetDST(false, code); +} + +void GLVertexDecompilerThread::SetDSTSca(const std::string& code) +{ + SetDST(true, code); } std::string GLVertexDecompilerThread::BuildFuncBody(const FuncInfo& func) @@ -309,26 +320,112 @@ std::string GLVertexDecompilerThread::BuildFuncBody(const FuncInfo& func) std::string GLVertexDecompilerThread::BuildCode() { + struct reg_info + { + std::string name; + bool need_declare; + std::string src_reg; + std::string src_reg_mask; + bool need_cast; + }; + + static const reg_info reg_table[] = + { + { "gl_Position", false, "dst_reg0", "", false }, + { "diff_color", true, "dst_reg1", "", false }, + { "spec_color", true, "dst_reg2", "", false }, + { "front_diff_color", true, "dst_reg3", "", false }, + { "front_spec_color", true, "dst_reg4", "", false }, + { "fogc", true, "dst_reg5", ".x", true }, + { "gl_ClipDistance[0]", false, "dst_reg5", ".y", false }, + { "gl_ClipDistance[1]", false, "dst_reg5", ".z", false }, + { "gl_ClipDistance[2]", false, "dst_reg5", ".w", false }, + { "gl_PointSize", false, "dst_reg6", ".x", false }, + { "gl_ClipDistance[3]", false, "dst_reg6", ".y", false }, + { "gl_ClipDistance[4]", false, "dst_reg6", ".z", false }, + { "gl_ClipDistance[5]", false, "dst_reg6", ".w", false }, + { "tc0", true, "dst_reg7", "", false }, + { "tc1", true, "dst_reg8", "", false }, + { "tc2", true, "dst_reg9", "", false }, + { "tc3", true, "dst_reg10", "", false }, + { "tc4", true, "dst_reg11", "", false }, + { "tc5", true, "dst_reg12", "", false }, + { "tc6", true, "dst_reg13", "", false }, + { "tc7", true, "dst_reg14", "", false }, + { "tc8", true, "dst_reg15", "", false }, + { "tc9", true, "dst_reg6", "", false } + }; + + std::string f; + + for (auto &i : reg_table) + { + if (m_parr.HasParam(PARAM_NONE, "vec4", i.src_reg)) + { + if (i.need_declare) + { + m_parr.AddParam(PARAM_OUT, "vec4", i.name); + } + + if (i.need_cast) + { + f += "\t" + i.name + " = vec4(" + i.src_reg + i.src_reg_mask + ");\n"; + } + else + { + f += "\t" + i.name + " = " + i.src_reg + i.src_reg_mask + ";\n"; + } + } + } + std::string p; - for(u32 i=0; i0; --i) + for (int i = m_funcs.size() - 1; i>0; --i) { fp += fmt::Format("void %s();\n", m_funcs[i].name.c_str()); } - std::string f; + f = fmt::Format("void %s()\n{\n\t%s();\n%s\tgl_Position = gl_Position * scaleOffsetMat;\n}\n", + m_funcs[0].name.c_str(), m_funcs[1].name.c_str(), f.c_str()); - f += fmt::Format("void %s()\n{\n\tgl_Position = vec4(0.0f, 0.0f, 0.0f, 1.0f);\n\t%s();\n\tgl_Position = gl_Position * scaleOffsetMat;\n}\n", - m_funcs[0].name.c_str(), m_funcs[1].name.c_str()); + std::string main_body; + for (uint i = 0, lvl = 1; i < m_instr_count; i++) + { + lvl -= m_instructions[i].close_scopes; + if (lvl < 1) lvl = 1; + //assert(lvl >= 1); + for (uint j = 0; j < m_instructions[i].put_close_scopes; ++j) + { + --lvl; + if (lvl < 1) lvl = 1; + main_body.append(lvl, '\t') += "}\n"; + } - for(uint i=1; i 0) ? pow(max(0.0, " + GetSRC(2, true) + ".y), " + GetSRC(2, true) + ".z) : 0), 1.0)"); break; // LIT - case 0x08: AddScaCode("{ /*BRA*/ " + GetFunc() + "; return; }", false, true); break; // BRA - case 0x09: AddScaCode("{ " + GetFunc() + "; return; }", false, true); break; // BRI : works differently (BRI o[1].x(TR) L0;) - case 0x0a: AddScaCode("/*CAL*/ " + GetFunc(), false, true); break; // CAL : works same as BRI - case 0x0b: AddScaCode("/*CLI*/ " + GetFunc(), false, true); break; // CLI : works same as BRI - case 0x0c: AddScaCode("return", false, true); break; // RET : works like BRI but shorter (RET o[1].x(TR);) - case 0x0d: AddScaCode("log2(" + GetSRC(2, true) + ")"); break; // LG2 - case 0x0e: AddScaCode("exp2(" + GetSRC(2, true) + ")"); break; // EX2 - case 0x0f: AddScaCode("sin(" + GetSRC(2, true) + ")"); break; // SIN - case 0x10: AddScaCode("cos(" + GetSRC(2, true) + ")"); break; // COS + case 0x01: SetDSTSca("$s"); break; // MOV + case 0x02: SetDSTSca("(1.0 / $s)"); break; // RCP + case 0x03: SetDSTSca("clamp(1.0 / $s, 5.42101e-20, 1.884467e19)"); break; // RCC + case 0x04: SetDSTSca("inversesqrt(abs($s))"); break; // RSQ + case 0x05: SetDSTSca("exp($s)"); break; // EXP + case 0x06: SetDSTSca("log($s)"); break; // LOG + case 0x07: SetDSTSca("vec4(1.0, $s.x, ($s.x > 0 ? exp2($s.w * log2($s.y)) : 0.0), 1.0)"); break; // LIT + //case 0x08: break; // BRA + case 0x09: // BRI : works differently (BRI o[1].x(TR) L0;) + //AddCode("$ifcond { $f(); return; }"); + if (GetAddr() > m_instr_count) + { + AddCode("if(!$cond)"); + AddCode("{"); + m_cur_instr->open_scopes++; + m_instructions[GetAddr()].put_close_scopes++; + } + else + { + AddCode("} while ($cond);"); + m_cur_instr->close_scopes++; + m_instructions[GetAddr()].do_count++; + } + break; + //case 0x0a: AddCode("$ifcond $f(); //CAL"); break; // CAL : works same as BRI + case 0x0b: AddCode("$ifcond $f(); //CLI"); break; // CLI : works same as BRI + case 0x0c: AddCode("$ifcond return;"); break; // RET : works like BRI but shorter (RET o[1].x(TR);) + case 0x0d: SetDSTSca("log2($s)"); break; // LG2 + case 0x0e: SetDSTSca("exp2($s)"); break; // EX2 + case 0x0f: SetDSTSca("sin($s)"); break; // SIN + case 0x10: SetDSTSca("cos($s)"); break; // COS //case 0x11: break; // BRB : works differently (BRB o[1].x !b0, L0;) //case 0x12: break; // CLB : works same as BRB //case 0x13: break; // PSH : works differently (PSH o[1].x A0;) @@ -400,28 +518,28 @@ void GLVertexDecompilerThread::Task() switch(d1.vec_opcode) { case 0x00: break; //NOP - case 0x01: AddVecCode(GetSRC(0)); break; //MOV - case 0x02: AddVecCode("(" + GetSRC(0) + " * " + GetSRC(1) + ")"); break; //MUL - case 0x03: AddVecCode("(" + GetSRC(0) + " + " + GetSRC(2) + ")"); break; //ADD - case 0x04: AddVecCode("(" + GetSRC(0) + " * " + GetSRC(1) + " + " + GetSRC(2) + ")"); break; //MAD - case 0x05: AddVecCode("vec2(dot(" + GetSRC(0) + ".xyz, " + GetSRC(1) + ".xyz), 0).xxxx"); break; //DP3 - case 0x06: AddVecCode("vec2(dot(vec4(" + GetSRC(0) + ".xyz, 1), " + GetSRC(1) + "), 0).xxxx"); break; //DPH - case 0x07: AddVecCode("vec2(dot(" + GetSRC(0) + ", " + GetSRC(1) + "), 0).xxxx"); break; //DP4 - case 0x08: AddVecCode("vec2(distance(" + GetSRC(0) + ", " + GetSRC(1) + "), 0).xxxx"); break; //DST - case 0x09: AddVecCode("min(" + GetSRC(0) + ", " + GetSRC(1) + ")"); break; //MIN - case 0x0a: AddVecCode("max(" + GetSRC(0) + ", " + GetSRC(1) + ")"); break; //MAX - case 0x0b: AddVecCode("vec4(lessThan(" + GetSRC(0) + ", " + GetSRC(1) + "))"); break; //SLT - case 0x0c: AddVecCode("vec4(greaterThanEqual(" + GetSRC(0) + ", " + GetSRC(1) + "))"); break; //SGE - //case 0x0d: break; - case 0x0e: AddVecCode("fract(" + GetSRC(0) + ")"); break; //FRC - case 0x0f: AddVecCode("floor(" + GetSRC(0) + ")"); break; //FLR - case 0x10: AddVecCode("vec4(equal(" + GetSRC(0) + ", " + GetSRC(1) + "))"); break; //SEQ - case 0x11: AddVecCode("vec4(equal(" + GetSRC(0) + ", vec4(0)))"); break; //SFL - case 0x12: AddVecCode("vec4(greaterThan(" + GetSRC(0) + ", " + GetSRC(1) + "))"); break; //SGT - case 0x13: AddVecCode("vec4(lessThanEqual(" + GetSRC(0) + ", " + GetSRC(1) + "))"); break; //SLE - case 0x14: AddVecCode("vec4(notEqual(" + GetSRC(0) + ", " + GetSRC(1) + "))"); break; //SNE - case 0x15: AddVecCode("vec4(equal(" + GetSRC(0) + ", vec4(1)))"); break; //STR - case 0x16: AddVecCode("sign(" + GetSRC(0) + ")"); break; //SSG + case 0x01: SetDSTVec("$0"); break; //MOV + case 0x02: SetDSTVec("($0 * $1)"); break; //MUL + case 0x03: SetDSTVec("($0 + $2)"); break; //ADD + case 0x04: SetDSTVec("($0 * $1 + $2)"); break; //MAD + case 0x05: SetDSTVec("vec2(dot($0.xyz, $1.xyz), 0.0).xxxx"); break; //DP3 + case 0x06: SetDSTVec("vec2(dot(vec4($0.xyz, 1.0), $1), 0.0).xxxx"); break; //DPH + case 0x07: SetDSTVec("vec2(dot($0, $1), 0.0).xxxx"); break; //DP4 + case 0x08: SetDSTVec("vec2(distance($0, $1), 0.0).xxxx"); break; //DST + case 0x09: SetDSTVec("min($0, $1)"); break; //MIN + case 0x0a: SetDSTVec("max($0, $1)"); break; //MAX + case 0x0b: SetDSTVec("vec4(lessThan($0, $1))"); break; //SLT + case 0x0c: SetDSTVec("vec4(greaterThanEqual($0, $1))"); break; //SGE + case 0x0d: AddCode("$ifcond $a = ivec4($0)$am;"); break; //ARL + case 0x0e: SetDSTVec("fract($0)"); break; //FRC + case 0x0f: SetDSTVec("floor($0)"); break; //FLR + case 0x10: SetDSTVec("vec4(equal($0, $1))"); break; //SEQ + case 0x11: SetDSTVec("vec4(equal($0, vec4(0.0)))"); break; //SFL + case 0x12: SetDSTVec("vec4(greaterThan($0, $1))"); break; //SGT + case 0x13: SetDSTVec("vec4(lessThanEqual($0, $1))"); break; //SLE + case 0x14: SetDSTVec("vec4(notEqual($0, $1))"); break; //SNE + case 0x15: SetDSTVec("vec4(equal($0, vec4(1.0)))"); break; //STR + case 0x16: SetDSTVec("sign($0)"); break; //SSG default: m_body.push_back(fmt::Format("//Unknown vp opcode 0x%x", fmt::by_value(d1.vec_opcode))); @@ -432,6 +550,8 @@ void GLVertexDecompilerThread::Task() if(d3.end) { + m_instr_count++; + if(i < m_data.size()) ConLog.Error("Program end before buffer end."); diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.h b/rpcs3/Emu/GS/GL/GLVertexProgram.h index a74a2cd066..1a0c41c922 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.h +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.h @@ -133,6 +133,26 @@ struct GLVertexDecompilerThread : public ThreadBase std::string name; }; + struct Instruction + { + std::vector body; + int open_scopes; + int close_scopes; + int put_close_scopes; + int do_count; + + void reset() + { + body.clear(); + put_close_scopes = open_scopes = close_scopes = do_count = 0; + } + }; + + static const size_t m_max_instr_count = 512; + Instruction m_instructions[m_max_instr_count]; + Instruction* m_cur_instr; + size_t m_instr_count; + std::vector m_body; std::vector m_funcs; @@ -161,11 +181,18 @@ struct GLVertexDecompilerThread : public ThreadBase std::string GetVecMask(); std::string GetScaMask(); std::string GetDST(bool is_sca = false); - std::string GetSRC(const u32 n, bool is_sca = false); + std::string GetSRC(const u32 n); std::string GetFunc(); - void AddCode(bool is_sca, const std::string& code, bool src_mask = true, bool set_dst = true, bool set_cond = true); - void AddVecCode(const std::string& code, bool src_mask = true, bool set_dst = true); - void AddScaCode(const std::string& code, bool set_dst = true, bool set_cond = true); + std::string GetCond(); + std::string AddAddrMask(); + std::string AddAddrReg(); + u32 GetAddr(); + std::string Format(const std::string& code); + + void AddCode(const std::string& code); + void SetDST(bool is_sca, std::string value); + void SetDSTVec(const std::string& code); + void SetDSTSca(const std::string& code); std::string BuildFuncBody(const FuncInfo& func); std::string BuildCode(); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 5b3c18a2e2..b22e60c47f 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1893,8 +1893,10 @@ void RSXThread::Task() if(cmd == 0) { - ConLog.Error("null cmd: addr=0x%x, put=0x%x, get=0x%x", Memory.RSXIOMem.GetStartAddr() + get, m_ctrl->put, get); - Emu.Pause(); + //HACK! We couldn't be here + //ConLog.Error("null cmd: addr=0x%x, put=0x%x, get=0x%x", Memory.RSXIOMem.GetStartAddr() + get, m_ctrl->put, get); + //Emu.Pause(); + m_ctrl->get = get + (count + 1) * 4; continue; } From 4d84507c9616fb0f650d10e29052465780af9fca Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sun, 8 Jun 2014 16:58:40 +0200 Subject: [PATCH 020/499] try include guards to circumvent a weird error with gcc and unity builds --- rpcs3/Emu/Cell/PPUThread.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index a88ba21060..c7cdef1bf3 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -1,4 +1,5 @@ -#pragma once +#ifndef PPUTHREAD_H +#define PPUTHREAD_H #include "Emu/Cell/PPCThread.h" #include "Emu/SysCalls/SysCalls.h" #include "rpcs3.h" @@ -861,3 +862,4 @@ protected: }; PPUThread& GetCurrentPPUThread(); +#endif //PPUTHREAD_H From f051011fd165c2257578312343f37147f97900a4 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 8 Jun 2014 17:10:31 +0800 Subject: [PATCH 021/499] cellSpurs: create new taskset using attr --- rpcs3/Emu/Cell/SPURSManager.cpp | 19 +++++++++++++++- rpcs3/Emu/Cell/SPURSManager.h | 29 ++++++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 12 ++++++++-- rpcs3/Emu/SysCalls/Modules/cellSpurs.h | 20 ++++++++-------- 4 files changed, 65 insertions(+), 15 deletions(-) diff --git a/rpcs3/Emu/Cell/SPURSManager.cpp b/rpcs3/Emu/Cell/SPURSManager.cpp index 83548482dd..ab61442cb9 100644 --- a/rpcs3/Emu/Cell/SPURSManager.cpp +++ b/rpcs3/Emu/Cell/SPURSManager.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "SPURSManager.h" +#include "Emu/Memory/Memory.h" SPURSManager::SPURSManager(SPURSManagerAttribute *attr) { @@ -9,4 +10,20 @@ SPURSManager::SPURSManager(SPURSManagerAttribute *attr) void SPURSManager::Finalize() { delete this->attr; -} \ No newline at end of file +} + +void SPURSManager::AttachLv2EventQueue(u32 queue, mem8_t port, int isDynamic) +{ + //TODO: +} + +void SPURSManager::DetachLv2EventQueue(u8 port) +{ + //TODO: +} + +SPURSManagerTaskset::SPURSManagerTaskset(u32 address, SPURSManagerTasksetAttribute *tattr) +{ + this->tattr = tattr; + this->address = address; +} diff --git a/rpcs3/Emu/Cell/SPURSManager.h b/rpcs3/Emu/Cell/SPURSManager.h index 120a096c43..9ad7ec0a4b 100644 --- a/rpcs3/Emu/Cell/SPURSManager.h +++ b/rpcs3/Emu/Cell/SPURSManager.h @@ -113,15 +113,40 @@ protected: be_t flagDirection; }; +class SPURSManagerTasksetAttribute +{ +public: + SPURSManagerTasksetAttribute(u64 args, mem8_t priority, u32 maxContention) + { + this->args = args; + this->maxContention = maxContention; + } + +protected: + be_t args; + be_t maxContention; +}; + +class SPURSManagerTaskset +{ +public: + SPURSManagerTaskset(u32 address, SPURSManagerTasksetAttribute *tattr); + +protected: + u32 address; + SPURSManagerTasksetAttribute *tattr; +}; + // Main SPURS manager class. class SPURSManager { public: SPURSManager(SPURSManagerAttribute *attr); - SPURSManager(SPURSManagerEventFlag *eventFlag); + void Finalize(); + void AttachLv2EventQueue(u32 queue, mem8_t port, int isDynamic); + void DetachLv2EventQueue(u8 port); protected: SPURSManagerAttribute *attr; - SPURSManagerEventFlag *eventFlag; }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 30f8ae3fc8..ede0bfd3d2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -135,6 +135,7 @@ int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_tattr->_setMemoryContainerForSpuThread(container); + return CELL_OK; } @@ -368,7 +369,7 @@ int cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, const bool isP int cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t port, int isDynamic) { - cellSpurs.Error("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)", spurs.GetAddr(), queue, port.GetAddr(), isDynamic); + cellSpurs.Warning("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)", spurs.GetAddr(), queue, port.GetAddr(), isDynamic); if (spurs.GetAddr() % 128 != 0) { @@ -382,12 +383,14 @@ int cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t p return CELL_SPURS_CORE_ERROR_NULL_POINTER; } + spurs->spurs->AttachLv2EventQueue(queue, port, isDynamic); + return CELL_OK; } int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) { - cellSpurs.Error("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); + cellSpurs.Warning("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); if (spurs.GetAddr() % 128 != 0) { @@ -401,6 +404,8 @@ int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) return CELL_SPURS_CORE_ERROR_NULL_POINTER; } + spurs->spurs->DetachLv2EventQueue(port); + return CELL_OK; } @@ -954,6 +959,9 @@ int cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_ttaskset = new SPURSManagerTaskset(taskset.GetAddr(), tattr); + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h index 4a3a8cf81e..633da2d541 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h @@ -49,6 +49,16 @@ struct CellSpursAttribute SPURSManagerAttribute *attr; }; +struct CellSpursEventFlag +{ + SPURSManagerEventFlag *eventFlag; +}; + +struct CellSpursTaskset +{ + SPURSManagerTaskset *taskset; +}; + struct CellSpursInfo { be_t nSpus; @@ -135,12 +145,6 @@ struct CellSpursTracePacket } data; }; -// cellSpurs taskset structures. -struct CellSpursTaskset -{ - u8 skip[6400]; -}; - // Exception handlers. typedef void (*CellSpursGlobalExceptionEventHandler)(mem_ptr_t spurs, const mem_ptr_t info, u32 id, mem_ptr_t arg); @@ -241,7 +245,3 @@ struct CellSpursTaskBinInfo be_t __reserved__; CellSpursTaskLsPattern lsPattern; }; - -struct CellSpursEventFlag { - SPURSManagerEventFlag *eventFlag; -}; From c37905e465b0d619b94daea21fb23bd48795d9e2 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 2 May 2014 08:30:32 +0200 Subject: [PATCH 022/499] initial start to eliminate static func init, not compilable atm move module initialization into a module manager, still has some issues like stopping not working and debug crashing add #idef 0 to modules that aren't in the windows project don't double initialize and don't de-initialize for now, since many modules don't expect it and it leads to many errors remove duplicate module lists for empty modules and implemented ones, make Module non-copyable but movable add secondary project, no real use for it now add some memleak config to the emucore and add asmjit path to rpcs3 small rebase error fixed to get it to compile again add filters for emucore re-add the module manager and static file WIP commit, linker errors abound some more abstraction layer stuff fix the remaining linker errors, re-enable platform specific mouse, pad and keyboard handlers rebasing fix memset undefined and re() usage of se_t before declaration Add wxGUI define by default for cmake builds fix copy constructors of Datetime header fix copy constructors of other wx interface classes remove static declarations of global variables make wxGLCanvas constructor non-ambiguous even with wx2.8. compat mode, fix wrong std::exception constructor calls remove duplicate definition for FromUTF8 and ToUTF8 temp changes --- Utilities/BEType.h | 12 + Utilities/IdManager.h | 4 +- Utilities/StrFmt.cpp | 74 +- Utilities/StrFmt.h | 60 ++ Utilities/Thread.h | 4 +- Utilities/rConcurrency.cpp | 130 +++ Utilities/rConcurrency.h | 59 ++ Utilities/rFile.cpp | 327 ++++++ Utilities/rFile.h | 84 ++ Utilities/rMsgBox.cpp | 51 + Utilities/rMsgBox.h | 47 + Utilities/rPlatform.cpp | 165 +++ Utilities/rPlatform.h | 114 ++ Utilities/rTime.cpp | 261 +++++ Utilities/rTime.h | 102 ++ Utilities/rXml.cpp | 101 ++ Utilities/rXml.h | 30 + asmjitsrc/asmjit.vcxproj | 10 +- rpcs3.sln | 13 + rpcs3/CMakeLists.txt | 2 + rpcs3/Crypto/unedat.cpp | 14 +- rpcs3/Crypto/unpkg.cpp | 24 +- rpcs3/Crypto/unpkg.h | 2 +- rpcs3/Crypto/unself.cpp | 12 +- rpcs3/Emu/ARMv7/ARMv7DisAsm.h | 1 - rpcs3/Emu/Audio/AudioDumper.cpp | 2 +- rpcs3/Emu/Audio/AudioDumper.h | 2 +- rpcs3/Emu/CPU/CPUThread.cpp | 58 +- rpcs3/Emu/CPU/CPUThread.h | 6 +- rpcs3/Emu/CPU/CPUThreadManager.cpp | 8 +- rpcs3/Emu/CPU/CPUThreadManager.h | 2 +- rpcs3/Emu/Cell/PPCDisAsm.h | 1 - rpcs3/Emu/Cell/PPCThread.cpp | 1 - rpcs3/Emu/Cell/PPUDisAsm.h | 1 - rpcs3/Emu/Cell/PPUInterpreter.h | 6 +- rpcs3/Emu/Cell/PPUProgramCompiler.cpp | 12 +- rpcs3/Emu/Cell/PPUThread.cpp | 2 +- rpcs3/Emu/Cell/PPUThread.h | 2 +- rpcs3/Emu/Cell/SPUDisAsm.h | 1 - rpcs3/Emu/Cell/SPURecompilerCore.cpp | 10 +- rpcs3/Emu/ConLog.h | 14 +- rpcs3/Emu/DbgCommand.cpp | 6 + rpcs3/Emu/DbgCommand.h | 40 + rpcs3/Emu/DbgConsole.cpp | 135 ++- rpcs3/Emu/DbgConsole.h | 110 +- rpcs3/Emu/FS/VFS.cpp | 12 +- rpcs3/Emu/FS/vfsDevice.cpp | 20 +- rpcs3/Emu/FS/vfsDirBase.cpp | 2 +- rpcs3/Emu/FS/vfsLocalDir.cpp | 18 +- rpcs3/Emu/FS/vfsLocalFile.cpp | 38 +- rpcs3/Emu/FS/vfsLocalFile.h | 2 +- rpcs3/Emu/GS/GCM.h | 2 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 62 +- rpcs3/Emu/GS/GL/GLGSRender.h | 47 +- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 2 +- rpcs3/Emu/GS/GSManager.cpp | 5 - rpcs3/Emu/GS/GSRender.cpp | 76 -- rpcs3/Emu/GS/GSRender.h | 28 - rpcs3/Emu/GS/Null/NullGSRender.h | 43 +- rpcs3/Emu/GS/RSXThread.cpp | 2 +- rpcs3/Emu/GS/RSXThread.h | 6 +- rpcs3/Emu/HDD/HDD.h | 2 +- rpcs3/Emu/Io/Keyboard.cpp | 16 +- rpcs3/Emu/Io/Mouse.cpp | 16 +- rpcs3/Emu/Io/Null/NullKeyboardHandler.h | 1 + rpcs3/Emu/Io/Null/NullMouseHandler.h | 1 + rpcs3/Emu/Io/Null/NullPadHandler.h | 1 + rpcs3/Emu/Io/Pad.cpp | 25 +- rpcs3/Emu/Memory/Memory.h | 7 - rpcs3/Emu/SysCalls/ModuleManager.cpp | 450 ++++++++ rpcs3/Emu/SysCalls/ModuleManager.h | 28 + rpcs3/Emu/SysCalls/Modules.cpp | 364 +------ rpcs3/Emu/SysCalls/Modules.h | 20 +- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 47 +- rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp | 95 +- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 91 +- rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 99 +- rpcs3/Emu/SysCalls/Modules/cellFiber.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellFont.cpp | 167 +-- rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp | 17 +- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 53 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 358 +++---- rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 39 +- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 45 +- rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 344 +++--- rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 27 +- rpcs3/Emu/SysCalls/Modules/cellOvis.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 133 +-- .../Emu/SysCalls/Modules/cellPhotoDecode.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 88 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 155 +-- rpcs3/Emu/SysCalls/Modules/cellRtc.cpp | 335 +++--- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 478 ++++----- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 21 +- rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp | 38 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 305 +++--- rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp | 13 +- .../SysCalls/Modules/cellSysutil_SaveData.cpp | 14 +- rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 19 +- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 65 +- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 35 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 67 +- rpcs3/Emu/SysCalls/Modules/libsnd3.h | 2 - rpcs3/Emu/SysCalls/Modules/libsynth2.h | 4 +- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 71 +- rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 94 +- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 127 +-- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 105 +- rpcs3/Emu/SysCalls/Modules/sys_io.cpp | 73 +- rpcs3/Emu/SysCalls/Modules/sys_net.cpp | 157 +-- rpcs3/Emu/SysCalls/Static.cpp | 80 +- rpcs3/Emu/SysCalls/Static.h | 15 + rpcs3/Emu/SysCalls/SysCalls.cpp | 3 +- rpcs3/Emu/SysCalls/SysCalls.h | 11 +- rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp | 120 +-- rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp | 20 +- rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp | 16 +- rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp | 28 +- rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp | 30 +- rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/SC_Timer.h | 2 +- rpcs3/Emu/System.cpp | 59 +- rpcs3/Emu/System.h | 21 +- rpcs3/Gui/ConLog.cpp | 155 --- rpcs3/Gui/DbgFrame.cpp | 94 ++ rpcs3/Gui/DbgFrame.h | 23 + rpcs3/Gui/GLGSFrame.cpp | 50 + rpcs3/Gui/GLGSFrame.h | 21 + rpcs3/Gui/GSFrame.cpp | 82 ++ rpcs3/Gui/GSFrame.h | 29 + rpcs3/Gui/MainFrame.cpp | 3 +- rpcs3/Gui/MainFrame.h | 3 +- rpcs3/Gui/RSXDebugger.h | 15 - rpcs3/Ini.cpp | 24 +- rpcs3/Ini.h | 2 +- rpcs3/Loader/ELF32.cpp | 6 +- rpcs3/Loader/ELF32.h | 6 +- rpcs3/Loader/ELF64.cpp | 16 +- rpcs3/Loader/ELF64.h | 6 +- rpcs3/Loader/Loader.h | 14 +- rpcs3/Loader/PKG.cpp | 12 +- rpcs3/Loader/PKG.h | 4 +- rpcs3/Loader/TROPUSR.cpp | 12 +- rpcs3/emucore.vcxproj | 506 +++++++++ rpcs3/emucore.vcxproj.filters | 926 ++++++++++++++++ rpcs3/emucore.vcxproj.user | 4 + rpcs3/rpcs3.cpp | 18 + rpcs3/rpcs3.h | 34 - rpcs3/rpcs3.vcxproj | 468 +-------- rpcs3/rpcs3.vcxproj.filters | 986 +----------------- rpcs3/rpcs3.vcxproj.user | 6 +- rpcs3/stdafx.cpp | 2 +- rpcs3/stdafx.h | 31 +- 156 files changed, 6567 insertions(+), 4611 deletions(-) create mode 100644 Utilities/rConcurrency.cpp create mode 100644 Utilities/rConcurrency.h create mode 100644 Utilities/rFile.cpp create mode 100644 Utilities/rFile.h create mode 100644 Utilities/rMsgBox.cpp create mode 100644 Utilities/rMsgBox.h create mode 100644 Utilities/rPlatform.cpp create mode 100644 Utilities/rPlatform.h create mode 100644 Utilities/rTime.cpp create mode 100644 Utilities/rTime.h create mode 100644 Utilities/rXml.cpp create mode 100644 Utilities/rXml.h create mode 100644 rpcs3/Emu/DbgCommand.cpp create mode 100644 rpcs3/Emu/DbgCommand.h create mode 100644 rpcs3/Emu/SysCalls/ModuleManager.cpp create mode 100644 rpcs3/Emu/SysCalls/ModuleManager.h create mode 100644 rpcs3/Emu/SysCalls/Static.h create mode 100644 rpcs3/Gui/DbgFrame.cpp create mode 100644 rpcs3/Gui/DbgFrame.h create mode 100644 rpcs3/Gui/GLGSFrame.cpp create mode 100644 rpcs3/Gui/GLGSFrame.h create mode 100644 rpcs3/Gui/GSFrame.cpp create mode 100644 rpcs3/Gui/GSFrame.h create mode 100644 rpcs3/emucore.vcxproj create mode 100644 rpcs3/emucore.vcxproj.filters create mode 100644 rpcs3/emucore.vcxproj.user diff --git a/Utilities/BEType.h b/Utilities/BEType.h index 853fd32dec..cecb4cd3a6 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -2,12 +2,24 @@ #include "Utilities/GNU.h" +#include + +using std::min; +using std::max; + +//#define re(val) MemoryBase::Reverse(val) +#define re64(val) MemoryBase::Reverse64(val) +#define re32(val) MemoryBase::Reverse32(val) +#define re16(val) MemoryBase::Reverse16(val) + template struct se_t; template struct se_t { static __forceinline void func(T& dst, const T src) { (u8&)dst = (u8&)src; } }; template struct se_t { static __forceinline void func(T& dst, const T src) { (u16&)dst = _byteswap_ushort((u16&)src); } }; template struct se_t { static __forceinline void func(T& dst, const T src) { (u32&)dst = _byteswap_ulong((u32&)src); } }; template struct se_t { static __forceinline void func(T& dst, const T src) { (u64&)dst = _byteswap_uint64((u64&)src); } }; +template T re(const T val) { T res; se_t::func(res, val); return res; } +template void re(T1& dst, const T2 val) { se_t::func(dst, val); } template struct const_se_t; template struct const_se_t diff --git a/Utilities/IdManager.h b/Utilities/IdManager.h index c56fefd061..9d72c65476 100644 --- a/Utilities/IdManager.h +++ b/Utilities/IdManager.h @@ -1,6 +1,8 @@ #pragma once #include +#define rID_ANY -1 // was wxID_ANY + typedef u32 ID_TYPE; class IDData @@ -154,7 +156,7 @@ public: { std::lock_guard lock(m_mtx_main); - if(id == wxID_ANY) + if(id == rID_ANY) return m_id_map.begin() != m_id_map.end(); } diff --git a/Utilities/StrFmt.cpp b/Utilities/StrFmt.cpp index 2bd595992d..259b3c0ce3 100644 --- a/Utilities/StrFmt.cpp +++ b/Utilities/StrFmt.cpp @@ -54,21 +54,23 @@ std::string replace_all(std::string src, const std::string& from, const std::str return src; } -//convert a wxString to a std::string encoded in utf8 -//CAUTION, only use this to interface with wxWidgets classes -std::string fmt::ToUTF8(const wxString& right) -{ - auto ret = std::string(((const char *) right.utf8_str())); - return ret; -} - -//convert a std::string encoded in utf8 to a wxString -//CAUTION, only use this to interface with wxWidgets classes -wxString fmt::FromUTF8(const std::string& right) -{ - auto ret = wxString::FromUTF8(right.c_str()); - return ret; -} +//#ifdef wxGUI +////convert a wxString to a std::string encoded in utf8 +////CAUTION, only use this to interface with wxWidgets classes +//std::string fmt::ToUTF8(const wxString& right) +//{ +// auto ret = std::string(((const char *) right.utf8_str())); +// return ret; +//} +// +////convert a std::string encoded in utf8 to a wxString +////CAUTION, only use this to interface with wxWidgets classes +//wxString fmt::FromUTF8(const std::string& right) +//{ +// auto ret = wxString::FromUTF8(right.c_str()); +// return ret; +//} +//#endif //TODO: remove this after every snippet that uses it is gone //WARNING: not fully compatible with CmpNoCase from wxString @@ -86,4 +88,46 @@ int fmt::CmpNoCase(const std::string& a, const std::string& b) [](const char& a, const char& b){return tolower(a) == tolower(b); }) ? 0 : -1; } +} + +//TODO: remove this after every snippet that uses it is gone +//WARNING: not fully compatible with CmpNoCase from wxString +void fmt::Replace(std::string &str, const std::string &searchterm, const std::string& replaceterm) +{ + size_t cursor = 0; + do + { + cursor = str.find(searchterm, cursor); + if (cursor != std::string::npos) + { + str.replace(cursor, searchterm.size(), replaceterm); + cursor += replaceterm.size(); + } + else + { + break; + } + } while (true); +} + +std::vector fmt::rSplit(const std::string& source, const std::string& delim) +{ + std::vector ret; + size_t cursor = 0; + do + { + size_t prevcurs = cursor; + cursor = source.find(delim, cursor); + if (cursor != std::string::npos) + { + ret.push_back(source.substr(prevcurs,cursor-prevcurs)); + cursor += delim.size(); + } + else + { + ret.push_back(source.substr(prevcurs)); + break; + } + } while (true); + return ret; } \ No newline at end of file diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 8aa2f897b8..9b4892b959 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -9,6 +9,29 @@ #define snprintf _snprintf #endif + + +//int CmpNoCase(const std::string &str, const std::string &str2) +//{ +// bool same; +// if (str.size() > str2.size()) +// { +// same = std::equal(str.cbegin(), str.cend(), str2.cbegin(), [](const char a, const char b) -> bool{ return tolower(a) == tolower(b); }); +// } +// else +// { +// same = std::equal(str2.cbegin(), str2.cend(), str.cbegin(), [](const char a, const char b) -> bool{ return tolower(a) == tolower(b); }); +// } +// if (same) +// { +// return 0; +// } +// else +// { +// return 1; +// } +//} + namespace fmt{ using std::string; using std::ostream; @@ -18,6 +41,38 @@ namespace fmt{ extern const string placeholder; + template + std::string AfterLast(const std::string& source, T searchstr) + { + size_t search_pos = source.rfind(searchstr); + search_pos = search_pos == std::string::npos ? 0 : search_pos; + return source.substr(search_pos); + } + + template + std::string BeforeLast(const std::string& source, T searchstr) + { + size_t search_pos = source.rfind(searchstr); + search_pos = search_pos == std::string::npos ? 0 : search_pos; + return source.substr(0, search_pos); + } + + template + std::string AfterFirst(const std::string& source, T searchstr) + { + size_t search_pos = source.find(searchstr); + search_pos = search_pos == std::string::npos ? 0 : search_pos; + return source.substr(search_pos); + } + + template + std::string BeforeFirst(const std::string& source, T searchstr) + { + size_t search_pos = source.find(searchstr); + search_pos = search_pos == std::string::npos ? 0 : search_pos; + return source.substr(0, search_pos); + } + // write `fmt` from `pos` to the first occurence of `fmt::placeholder` to // the stream `os`. Then write `arg` to to the stream. If there's no // `fmt::placeholder` after `pos` everything in `fmt` after pos is written @@ -161,4 +216,9 @@ namespace fmt{ //WARNING: not fully compatible with CmpNoCase from wxString int CmpNoCase(const std::string& a, const std::string& b); + //TODO: remove this after every snippet that uses it is gone + //WARNING: not fully compatible with Replace from wxString + void Replace(std::string &str, const std::string &searchterm, const std::string& replaceterm); + + std::vector rSplit(const std::string& source, const std::string& delim); } diff --git a/Utilities/Thread.h b/Utilities/Thread.h index cba6bcbdf3..f081b89951 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -124,9 +124,9 @@ public: bool IsBusy() const { return m_busy; } }; -static __forceinline bool SemaphorePostAndWait(wxSemaphore& sem) +static __forceinline bool SemaphorePostAndWait(rSemaphore& sem) { - if(sem.TryWait() != wxSEMA_BUSY) return false; + if(sem.TryWait() != rSEMA_BUSY) return false; sem.Post(); sem.Wait(); diff --git a/Utilities/rConcurrency.cpp b/Utilities/rConcurrency.cpp new file mode 100644 index 0000000000..cf60ff69ca --- /dev/null +++ b/Utilities/rConcurrency.cpp @@ -0,0 +1,130 @@ +#include "stdafx.h" + +rSemaphore::rSemaphore() +{ + handle = reinterpret_cast(new wxSemaphore()); +} + +//rSemaphore::rSemaphore(rSemaphore& other) +//{ +// handle = reinterpret_cast(new wxSemaphore(*reinterpret_cast(other.handle))); +//} + +rSemaphore::~rSemaphore() +{ + delete reinterpret_cast(handle); +} + +rSemaphore::rSemaphore(int initial_count, int max_count) +{ + handle = reinterpret_cast(new wxSemaphore(initial_count,max_count)); +} + +void rSemaphore::Wait() +{ + reinterpret_cast(handle)->Wait(); +} + +rSemaStatus rSemaphore::TryWait() +{ + wxSemaError err = reinterpret_cast(handle)->TryWait(); + if (err == wxSEMA_BUSY) + { + return rSEMA_BUSY; + } + else + { + return rSEMA_OTHER; + } +} + +void rSemaphore::Post() +{ + reinterpret_cast(handle)->Post(); +} + +void rSemaphore::WaitTimeout(u64 timeout) +{ + reinterpret_cast(handle)->WaitTimeout(timeout); +} + +rCriticalSection::rCriticalSection() +{ + handle = reinterpret_cast(new wxCriticalSection()); +} + +//rCriticalSection::rCriticalSection(rCriticalSection&) +//{ +// handle = reinterpret_cast(new wxCriticalSection(*reinterpret_cast(other.handle))); +//} + +rCriticalSection::~rCriticalSection() +{ + delete reinterpret_cast(handle); +} + +void rCriticalSection::Enter() +{ + reinterpret_cast(handle)->Enter(); +} + +void rCriticalSection::Leave() +{ + reinterpret_cast(handle)->Leave(); +} + +rTimer::rTimer() +{ + handle = reinterpret_cast(new wxTimer()); +} + +//rTimer::rTimer(rTimer&) +//{ +// handle = reinterpret_cast(new wxTimer(*reinterpret_cast(other.handle))); +//} + +rTimer::~rTimer() +{ + delete reinterpret_cast(handle); +} + +void rTimer::Start() +{ + reinterpret_cast(handle)->Start(); +} + +void rTimer::Stop() +{ + reinterpret_cast(handle)->Stop(); +} + +void rSleep(u32 time) +{ + wxSleep(time); +} + +void rMicroSleep(u64 time) +{ + wxMicroSleep(time); +} + +rCriticalSectionLocker::rCriticalSectionLocker(const rCriticalSection &sec) +{ + handle = reinterpret_cast(new wxCriticalSectionLocker(*reinterpret_cast(sec.handle))); +} + + +rCriticalSectionLocker::~rCriticalSectionLocker() +{ + delete reinterpret_cast(handle); +} + +bool rThread::IsMain() +{ + return wxThread::IsMain(); +} + +void rYieldIfNeeded() +{ + wxYieldIfNeeded(); +} \ No newline at end of file diff --git a/Utilities/rConcurrency.h b/Utilities/rConcurrency.h new file mode 100644 index 0000000000..506e3fecd3 --- /dev/null +++ b/Utilities/rConcurrency.h @@ -0,0 +1,59 @@ +#pragma once + +enum rSemaStatus +{ + rSEMA_BUSY, + rSEMA_OTHER +}; +struct rSemaphore +{ + rSemaphore(); + rSemaphore(const rSemaphore& other) = delete; + ~rSemaphore(); + rSemaphore(int initial_count, int max_count); + void Wait(); + rSemaStatus TryWait(); + void Post(); + void WaitTimeout(u64 timeout); +private: + void *handle; +}; + +struct rCriticalSection +{ + rCriticalSection(); + rCriticalSection(const rCriticalSection& other) = delete; + ~rCriticalSection(); + void Enter(); + void Leave(); + void *handle; +}; + +struct rTimer +{ + rTimer(); + rTimer(const rTimer& other) = delete; + ~rTimer(); + void Start(); + void Stop(); +private: + void *handle; +}; + +void rSleep(u32 time); +void rMicroSleep(u64 time); + +struct rCriticalSectionLocker +{ + rCriticalSectionLocker(const rCriticalSection& other); + ~rCriticalSectionLocker(); +private: + void *handle; +}; + +struct rThread +{ + static bool IsMain(); +}; + +void rYieldIfNeeded(); \ No newline at end of file diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp new file mode 100644 index 0000000000..c05e8e9c8e --- /dev/null +++ b/Utilities/rFile.cpp @@ -0,0 +1,327 @@ +#include "stdafx.h" + +const int rPATH_MKDIR_FULL = wxPATH_MKDIR_FULL; + +//enum rSeekMode +//{ +// rFromStart, +// rFromCurrent, +// rFromEnd +//}; +// +// enum OpenMode +// { +// read, +// write, +// read_write, +// write_append, +// write_excl +// }; + +wxFile::OpenMode convertOpenMode(rFile::OpenMode open) +{ + wxFile::OpenMode mode; + switch (open) + { + case rFile::read: + mode = wxFile::read; + break; + case rFile::write: + mode = wxFile::write; + break; + case rFile::read_write: + mode = wxFile::read_write; + break; + case rFile::write_append: + mode = wxFile::write_append; + break; + case rFile::write_excl: + mode = wxFile::write_excl; + break; + } + return mode; +} + +rFile::OpenMode rConvertOpenMode(wxFile::OpenMode open) +{ + rFile::OpenMode mode; + switch (open) + { + case wxFile::read: + mode = rFile::read; + break; + case wxFile::write: + mode = rFile::write; + break; + case wxFile::read_write: + mode = rFile::read_write; + break; + case wxFile::write_append: + mode = rFile::write_append; + break; + case wxFile::write_excl: + mode = rFile::write_excl; + break; + } + return mode; +} + +wxSeekMode convertSeekMode(rSeekMode mode) +{ + wxSeekMode ret; + switch (mode) + { + case rFromStart: + ret = wxFromStart; + break; + case rFromCurrent: + ret = wxFromCurrent; + break; + case rFromEnd: + ret = wxFromEnd; + break; + } + return ret; +} + +rSeekMode rConvertSeekMode(wxSeekMode mode) +{ + rSeekMode ret; + switch (mode) + { + case wxFromStart: + ret = rFromStart; + break; + case wxFromCurrent: + ret = rFromCurrent; + break; + case wxFromEnd: + ret = rFromEnd; + break; + } + return ret; +} + + +rFile::rFile() +{ + handle = reinterpret_cast(new wxFile()); +} + +rFile::rFile(const std::string& filename, rFile::OpenMode open) +{ + + handle = reinterpret_cast(new wxFile(fmt::FromUTF8(filename), convertOpenMode(open))); +} + +rFile::rFile(int fd) +{ + handle = reinterpret_cast(new wxFile(fd)); +} + +rFile::~rFile() +{ + delete reinterpret_cast(handle); +} + +bool rFile::Access(const std::string &filename, rFile::OpenMode mode) +{ + return wxFile::Access(fmt::FromUTF8(filename), convertOpenMode(mode)); +} + +size_t rFile::Write(const void *buffer, size_t count) +{ + return reinterpret_cast(handle)->Write(buffer,count); +} + +bool rFile::Write(const std::string &text) +{ + return reinterpret_cast(handle)->Write(fmt::FromUTF8(text)); +} + +bool rFile::Close() +{ + return reinterpret_cast(handle)->Close(); +} + +bool rFile::Create(const std::string &filename, bool overwrite, int access) +{ + return reinterpret_cast(handle)->Create(fmt::FromUTF8(filename),overwrite,access); +} + +bool rFile::Open(const std::string &filename, rFile::OpenMode mode, int access) +{ + return reinterpret_cast(handle)->Open(fmt::FromUTF8(filename), convertOpenMode(mode), access); +} + +bool rFile::Exists(const std::string &file) +{ + return wxFile::Exists(fmt::FromUTF8(file)); +} + +bool rFile::IsOpened() const +{ + return reinterpret_cast(handle)->IsOpened(); +} + +size_t rFile::Length() const +{ + return reinterpret_cast(handle)->Length(); +} + +size_t rFile::Read(void *buffer, size_t count) +{ + return reinterpret_cast(handle)->Read(buffer,count); +} + +size_t rFile::Seek(size_t ofs, rSeekMode mode) +{ + return reinterpret_cast(handle)->Seek(ofs, convertSeekMode(mode)); +} + +size_t rFile::Tell() const +{ + return reinterpret_cast(handle)->Tell(); +} + +std::string rGetCwd() +{ + return fmt::ToUTF8(wxGetCwd()); +} + +bool rMkdir(const std::string &path) +{ + return wxMkdir(fmt::FromUTF8(path)); +} + +bool rRmdir(const std::string &path) +{ + return wxRmdir(fmt::FromUTF8(path)); +} + +bool rDirExists(const std::string &path) +{ + return wxDirExists(fmt::FromUTF8(path)); +} + +bool rFileExists(const std::string &path) +{ + return wxFileExists(fmt::FromUTF8(path)); +} + +bool rRemoveFile(const std::string &path) +{ + return wxRemoveFile(fmt::FromUTF8(path)); +} + +bool rIsWritable(const std::string& path) +{ + return wxIsWritable(fmt::FromUTF8(path)); +} + +bool rIsReadable(const std::string& path) +{ + return wxIsReadable(fmt::FromUTF8(path)); +} + +bool rIsExecutable(const std::string& path) +{ + return wxIsExecutable(fmt::FromUTF8(path)); +} + +rDir::rDir() +{ + handle = reinterpret_cast(new wxDir()); +} + +rDir::~rDir() +{ + delete reinterpret_cast(handle); +} + +rDir::rDir(const std::string &path) +{ + handle = reinterpret_cast(new wxDir(fmt::FromUTF8(path))); +} + +bool rDir::Open(const std::string& path) +{ + return reinterpret_cast(handle)->Open(fmt::FromUTF8(path)); +} + +bool rDir::Exists(const std::string &path) +{ + return wxDir::Exists(fmt::FromUTF8(path)); +} + +bool rDir::GetFirst(std::string *filename) const +{ + wxString str; + bool res; + res = reinterpret_cast(handle)->GetFirst(&str); + *filename = str.ToStdString(); + return res; +} + +bool rDir::GetNext(std::string *filename) const +{ + wxString str; + bool res; + res = reinterpret_cast(handle)->GetNext(&str); + *filename = str.ToStdString(); + return res; +} + + + +rFileName::rFileName() +{ + handle = reinterpret_cast(new wxFileName()); +} + +rFileName::~rFileName() +{ + delete reinterpret_cast(handle); +} + +rFileName::rFileName(const rFileName& filename) +{ + handle = reinterpret_cast(new wxFileName(*reinterpret_cast(filename.handle))); +} + + +rFileName::rFileName(const std::string& name) +{ + handle = reinterpret_cast(new wxFileName(fmt::FromUTF8(name))); +} + +std::string rFileName::GetFullPath() +{ + return fmt::ToUTF8(reinterpret_cast(handle)->GetFullPath()); +} + +std::string rFileName::GetPath() +{ + return fmt::ToUTF8(reinterpret_cast(handle)->GetPath()); +} + +std::string rFileName::GetName() +{ + return fmt::ToUTF8(reinterpret_cast(handle)->GetName()); +} + +std::string rFileName::GetFullName() +{ + return fmt::ToUTF8(reinterpret_cast(handle)->GetFullName()); +} + +bool rFileName::Mkdir(const std::string& name, int permissions , int flags ) +{ + return wxFileName::Mkdir(fmt::FromUTF8(name), permissions, flags); +} + +bool rFileName::Normalize() +{ + return reinterpret_cast(handle)->Normalize(); +} + diff --git a/Utilities/rFile.h b/Utilities/rFile.h new file mode 100644 index 0000000000..cf4da0c284 --- /dev/null +++ b/Utilities/rFile.h @@ -0,0 +1,84 @@ +#pragma once + +#include + +extern const int rPATH_MKDIR_FULL; + +enum rSeekMode +{ + rFromStart, + rFromCurrent, + rFromEnd +}; + +class rFile +{ +public: + enum OpenMode + { + read, + write, + read_write, + write_append, + write_excl + }; + rFile(); + rFile(const rFile& other) = delete; + ~rFile(); + rFile(const std::string& filename, rFile::OpenMode open = rFile::read); + rFile(int fd); + static bool Access(const std::string &filename, rFile::OpenMode mode); + size_t Write(const void *buffer, size_t count); + bool Write(const std::string &text); + bool Close(); + bool Create(const std::string &filename, bool overwrite = false, int access = 0666); + bool Open(const std::string &filename, rFile::OpenMode mode = rFile::read, int access = 0666); + static bool Exists(const std::string&); + bool IsOpened() const; + size_t Length() const; + size_t Read(void *buffer, size_t count); + size_t Seek(size_t ofs, rSeekMode mode = rFromStart); + size_t Tell() const; + + void *handle; +}; + +std::string rGetCwd(); +bool rMkdir(const std::string &path); +bool rRmdir(const std::string &path); +bool rDirExists(const std::string &path); +bool rFileExists(const std::string &path); +bool rRemoveFile(const std::string &path); + +bool rIsWritable(const std::string& path); +bool rIsReadable(const std::string& path); +bool rIsExecutable(const std::string& path); + +struct rDir +{ + rDir(); + ~rDir(); + rDir(const rDir& other) = delete; + rDir(const std::string &path); + bool Open(const std::string& path); + static bool Exists(const std::string &path); + bool GetFirst(std::string *filename) const; + bool GetNext(std::string *filename) const; + + void *handle; +}; +struct rFileName +{ + rFileName(); + rFileName(const rFileName& other); + ~rFileName(); + rFileName(const std::string& name); + std::string GetFullPath(); + std::string GetPath(); + std::string GetName(); + std::string GetFullName(); + static bool Mkdir(const std::string& name, int permissions=0777, int flags=0); + bool Normalize(); + + void *handle; +}; diff --git a/Utilities/rMsgBox.cpp b/Utilities/rMsgBox.cpp new file mode 100644 index 0000000000..bdc9fa4b07 --- /dev/null +++ b/Utilities/rMsgBox.cpp @@ -0,0 +1,51 @@ +#include "stdafx.h" + + +std::string rMessageBoxCaptionStr = "Message"; + +rMessageDialog::rMessageDialog(void *parent, const std::string& msg, const std::string& title , long style ) +{ + handle = reinterpret_cast(new wxMessageDialog( + reinterpret_cast(parent) + , fmt::FromUTF8(msg) + , fmt::FromUTF8(title) + , style + )); +} + +rMessageDialog::~rMessageDialog() +{ + delete reinterpret_cast(handle); +} + +long rMessageDialog::ShowModal() +{ + return reinterpret_cast(handle)->ShowModal(); +} + +long rMessageBox(const std::string& message, const std::string& title, long style) +{ + return wxMessageBox(fmt::FromUTF8(message), fmt::FromUTF8(title),style); +} + +std::string dummyApp::GetAppName() +{ + if (handle) + { + return fmt::ToUTF8(reinterpret_cast(handle)->GetAppName()); + } + else + { + return "NULL"; + } +} +dummyApp::dummyApp() : handle(nullptr) +{ + +} +static dummyApp app; + +dummyApp& rGetApp() +{ + return app; +} \ No newline at end of file diff --git a/Utilities/rMsgBox.h b/Utilities/rMsgBox.h new file mode 100644 index 0000000000..354c850141 --- /dev/null +++ b/Utilities/rMsgBox.h @@ -0,0 +1,47 @@ +#pragma once + +extern std::string rMessageBoxCaptionStr;// = "Message"; + +enum MsgBoxParams : unsigned long +{ + rOK = 0x4 + , rYES =0x2//res + , rNO = 0x8 //res + , rID_YES = 5103 //resDialog + , rCANCEL = 0x10 + , rYES_NO = 0xA + , rHELP = 0x1000 + , rNO_DEFAULT = 0x80 + , rCANCEL_DEFAULT = 0x80000000 + , rYES_DEFAULT = 0x0 + , rOK_DEFAULT = 0x0 + , rICON_NONE = 0x40000 + , rICON_EXCLAMATION = 0x100 + , rICON_ERROR = 0x200 + , rICON_HAND = 0x200 + , rICON_QUESTION = 0x400 + , rICON_INFORMATION = 0x800 + , rICON_AUTH_NEEDED = 0x80000 + , rSTAY_ON_TOP = 0x8000 + , rCENTRE = 0x1 +}; + +struct rMessageDialog +{ + rMessageDialog(void *parent, const std::string& msg, const std::string& title = rMessageBoxCaptionStr, long style = rOK | rCENTRE); + rMessageDialog(const rMessageDialog& other) = delete; + ~rMessageDialog(); + long ShowModal(); + void *handle; +}; + +long rMessageBox(const std::string& message, const std::string& title,long style); + +struct dummyApp +{ + dummyApp(); + std::string GetAppName(); + void* handle; +}; + +dummyApp& rGetApp(); \ No newline at end of file diff --git a/Utilities/rPlatform.cpp b/Utilities/rPlatform.cpp new file mode 100644 index 0000000000..d309feb13e --- /dev/null +++ b/Utilities/rPlatform.cpp @@ -0,0 +1,165 @@ +#include "stdafx.h" + +#include +#include "Gui/GLGSFrame.h" + +#include "Emu/Io/Null/NullKeyboardHandler.h" +#include "Emu/Io/Windows/WindowsKeyboardHandler.h" + +#include "Emu/Io/Null/NullMouseHandler.h" +#include "Emu/Io/Windows/WindowsMouseHandler.h" + +#include "Emu/Io/Null/NullPadHandler.h" +#include "Emu/Io/Windows/WindowsPadHandler.h" + +rCanvas::rCanvas(void *parent) +{ + handle = static_cast(new wxGLCanvas(static_cast(parent),wxID_ANY,NULL)); +} + +rCanvas::~rCanvas() +{ + delete static_cast(handle); +} + +//void *rCanvas::GetCurrent() +//{ +// static_cast(handle)->GetCur; +//} + +bool rCanvas::SetCurrent(void *ctx) +{ + return static_cast(handle)->SetCurrent(*static_cast(ctx)); +} + + + + +rGLFrame::rGLFrame() +{ + handle = static_cast(new GLGSFrame()); +} + +rGLFrame::~rGLFrame() +{ + delete static_cast(handle); +} + +void rGLFrame::Close() +{ + static_cast(handle)->Close(); +} + +bool rGLFrame::IsShown() +{ + return static_cast(handle)->IsShown(); +} + +void rGLFrame::Hide() +{ + static_cast(handle)->Hide(); +} + +void rGLFrame::Show() +{ + static_cast(handle)->Show(); +} + + +void *rGLFrame::GetNewContext() +{ + return static_cast(new wxGLContext( + static_cast(handle)->GetCanvas() + )); +} + +void rGLFrame::Flip(void *ctx) +{ + static_cast(handle)->Flip( + static_cast(ctx)); +} + +void rGLFrame::SetCurrent(void *ctx) +{ + static_cast(handle)->GetCanvas()->SetCurrent(*static_cast(ctx)); +} + + +rImage::rImage() +{ + handle = static_cast(new wxImage()); +} + +rImage::~rImage() +{ + delete static_cast(handle); +} + +void rImage::Create(int width, int height, void *data, void *alpha) +{ + static_cast(handle)->Create(width, height, static_cast(data), static_cast(alpha)); +} +void rImage::SaveFile(const std::string& name, rImageType type) +{ + if (type == rBITMAP_TYPE_PNG) + { + static_cast(handle)->SaveFile(fmt::FromUTF8(name),wxBITMAP_TYPE_PNG); + } + else + { + throw std::string("unsupported type"); + } +} + +int rPlatform::getKeyboardHandlerCount() +{ + return 2; +} + +KeyboardHandlerBase *rPlatform::getKeyboardHandler(int i) +{ + if (i == 0) + { + return new NullKeyboardHandler(); + } + else if (i == 1) + { + return new WindowsKeyboardHandler(); + } +} + +int rPlatform::getMouseHandlerCount() +{ + return 2; +} + + +MouseHandlerBase *rPlatform::getMouseHandler(int i) +{ + if (i == 0) + { + return new NullMouseHandler(); + } + else if (i == 1) + { + return new WindowsMouseHandler(); + } +} + +int rPlatform::getPadHandlerCount() +{ + return 2; +} + + +PadHandlerBase *rPlatform::getPadHandler(int i) +{ + if (i == 0) + { + return new NullPadHandler(); + } + else if (i == 1) + { + return new WindowsPadHandler(); + } +} \ No newline at end of file diff --git a/Utilities/rPlatform.h b/Utilities/rPlatform.h new file mode 100644 index 0000000000..040d1f3e1c --- /dev/null +++ b/Utilities/rPlatform.h @@ -0,0 +1,114 @@ +#pragma once +#include +#include + +//struct rGLContext; +#include "Emu/Io/Null/NullKeyboardHandler.h" +#include "Emu/Io/Null/NullMouseHandler.h" +#include "Emu/Io/Null/NullPadHandler.h" + +struct rCanvas +{ + rCanvas(void *parent); + rCanvas(const rCanvas &) = delete; + ~rCanvas(); + /*rGLContext*/void *GetCurrent(); + bool SetCurrent(/*rGLContext &*/ void *ctx); + + void *handle; +}; + +//struct rGLContext +//{ +// rGLContext(); +// rGLContext(rGLContext &) = delete; +// rGLContext(rCanvas *canvas); +// ~rGLContext(); +// +// void *handle; +//}; + +//struct rFrame +//{ +// rFrame(); +// rFrame(rFrame &) = delete; +// ~rFrame(); +// +// void Close(); +// bool IsShown(); +// void Hide(); +// void Show(); +// +// void *handle; +//}; + +struct rGLFrame/*: public rFrame*/ +{ + rGLFrame(); + rGLFrame(const rGLFrame &) = delete; + ~rGLFrame(); + + void Close(); + bool IsShown(); + void Hide(); + void Show(); + + void *handle; + + void SetCurrent( void *ctx); + //rCanvas *GetCanvas(); + void *GetNewContext(); + void Flip(/*rGLContext*/void *ctx); +}; + +struct rPlatform +{ + rGLFrame *getGLGSFrame(); + static rPlatform &getPlatform(); + + static int getKeyboardHandlerCount(); + static KeyboardHandlerBase *getKeyboardHandler(int i); + static int getMouseHandlerCount(); + static MouseHandlerBase *getMouseHandler(int i); + static int getPadHandlerCount(); + static PadHandlerBase *getPadHandler(int i); +}; + +/********************************************************************** +*********** RSX Debugger +************************************************************************/ + +struct RSXDebuggerProgram +{ + u32 id; + u32 vp_id; + u32 fp_id; + std::string vp_shader; + std::string fp_shader; + bool modified; + + RSXDebuggerProgram() + : modified(false) + { + } +}; + +extern std::vector m_debug_programs; + +/********************************************************************** +*********** Image stuff +************************************************************************/ +enum rImageType +{ + rBITMAP_TYPE_PNG +}; +struct rImage +{ + rImage(); + rImage(const rImage &) = delete; + ~rImage(); + void Create(int width , int height, void *data, void *alpha); + void SaveFile(const std::string& name, rImageType type); + + void *handle; +}; diff --git a/Utilities/rTime.cpp b/Utilities/rTime.cpp new file mode 100644 index 0000000000..aac6d514ab --- /dev/null +++ b/Utilities/rTime.cpp @@ -0,0 +1,261 @@ +#include "stdafx.h" + +#include + +std::string rDefaultDateTimeFormat = "%c"; + +rTimeSpan::rTimeSpan() +{ + handle = static_cast(new wxTimeSpan()); +} + +rTimeSpan::~rTimeSpan() +{ + delete static_cast(handle); +} + +rTimeSpan::rTimeSpan(const rTimeSpan& other) + +{ + handle = static_cast(new wxTimeSpan(*static_cast(other.handle))); + +} + +rTimeSpan::rTimeSpan(int a, int b , int c, int d) +{ + handle = static_cast(new wxTimeSpan(a,b,c,d)); +} + + +rDateSpan::rDateSpan() +{ + handle = static_cast(new wxDateSpan()); +} + +rDateSpan::~rDateSpan() +{ + delete static_cast(handle); +} + +rDateSpan::rDateSpan(const rDateSpan& other) +{ + handle = static_cast(new wxDateSpan(*static_cast(other.handle))); +} + +rDateSpan::rDateSpan(int a, int b, int c, int d) +{ + handle = static_cast(new wxDateSpan(a,b,c,d)); +} + + //enum TZ + //{ + // Local, GMT, UTC + //}; + //enum Calender + //{ + // Gregorian + //}; + + //struct rTimeZone + //{ + // rTimeZone(); + // rTimeZone(rDateTime::TZ timezone); + //}; + //struct WeekDay + //{ + // WeekDay(); + // WeekDay(int a); + //}; + //struct Month + //{ + // Month(); + // Month(int a); + //}; + +rDateTime::rDateTime() +{ + handle = static_cast(new wxDateTime()); +} + +rDateTime::~rDateTime() +{ + delete static_cast(handle); +} + +rDateTime::rDateTime(const rDateTime& other) +{ + handle = static_cast(new wxDateTime(*static_cast(other.handle))); +} + +rDateTime::rDateTime(const time_t& time) +{ + handle = static_cast(new wxDateTime(time)); +} + +rDateTime::rDateTime(u16 day, rDateTime::Month month, u16 year, u16 hour, u16 minute, u16 second, u32 millisecond) +{ + handle = static_cast(new wxDateTime(day,(wxDateTime::Month)month,year,hour,minute,second,millisecond)); +} + +rDateTime rDateTime::UNow() +{ + rDateTime time; + delete static_cast(time.handle); + time.handle = static_cast(new wxDateTime(wxDateTime::UNow())); + + return time; +} + +rDateTime rDateTime::FromUTC(bool val) +{ + rDateTime time(*this); + void *temp = time.handle; + + time.handle = static_cast(new wxDateTime(static_cast(temp)->FromTimezone(wxDateTime::GMT0, val))); + delete static_cast(temp); + + return time; +} + +rDateTime rDateTime::ToUTC(bool val) +{ + rDateTime time(*this); + void *temp = time.handle; + + time.handle = static_cast(new wxDateTime(static_cast(temp)->ToTimezone(wxDateTime::GMT0, val))); + delete static_cast(temp); + + return time; +} + +time_t rDateTime::GetTicks() +{ + return static_cast(handle)->GetTicks(); +} + +void rDateTime::Add(const rTimeSpan& span) +{ + static_cast(handle)->Add(*static_cast(span.handle)); +} + +void rDateTime::Add(const rDateSpan& span) +{ + static_cast(handle)->Add(*static_cast(span.handle)); +} + +//void rDateTime::Close() +//{ +// static_cast(handle)->Close(); +//} + +wxDateTime::TimeZone convertTZ(rDateTime::rTimeZone tz) +{ + switch (tz) + { + case rDateTime::Local: + return wxDateTime::Local; + case rDateTime::GMT0: + return wxDateTime::GMT0; + case rDateTime::UTC: + return wxDateTime::UTC; + default: + throw std::string("WRONG DATETIME"); + } +} + +std::string rDateTime::Format(const std::string &format, const rTimeZone &tz) const +{ + return fmt::ToUTF8(static_cast(handle)->Format(fmt::FromUTF8(format),convertTZ(tz))); +} + +void rDateTime::ParseDateTime(const std::string & format) +{ + /*return fmt::ToUTF8(*/static_cast(handle)->ParseDateTime(fmt::FromUTF8(format)); +} + +u32 rDateTime::GetAsDOS() +{ + return static_cast(handle)->GetAsDOS(); +} + +rDateTime &rDateTime::SetFromDOS(u32 fromdos) +{ + static_cast(handle)->SetFromDOS(fromdos); + return *this; +} + +bool rDateTime::IsLeapYear(int year, rDateTime::Calender cal) +{ + if (cal == Gregorian) + { + return wxDateTime::IsLeapYear(year, wxDateTime::Gregorian); + } + else + { + return wxDateTime::IsLeapYear(year, wxDateTime::Julian); + } +} + +int rDateTime::GetNumberOfDays(rDateTime::Month month, int year, rDateTime::Calender cal) +{ + if (cal == Gregorian) + { + return wxDateTime::GetNumberOfDays(static_cast(month), year, wxDateTime::Gregorian); + } + else + { + return wxDateTime::GetNumberOfDays(static_cast(month), year, wxDateTime::Julian); + } +} + +void rDateTime::SetToWeekDay(rDateTime::WeekDay day, int n, rDateTime::Month month, int year) +{ + static_cast(handle)->SetToWeekDay( + static_cast(day) + , n + , static_cast(month) + , year + ); +} + +int rDateTime::GetWeekDay() +{ + return static_cast(handle)->GetWeekDay(); +} + +u16 rDateTime::GetYear(rDateTime::TZ timezone) +{ + return static_cast(handle)->GetYear(convertTZ(timezone)); +} + +u16 rDateTime::GetMonth(rDateTime::TZ timezone) +{ + return static_cast(handle)->GetMonth(convertTZ(timezone)); +} + +u16 rDateTime::GetDay(rDateTime::TZ timezone) +{ + return static_cast(handle)->GetDay(convertTZ(timezone)); +} + +u16 rDateTime::GetHour(rDateTime::TZ timezone) +{ + return static_cast(handle)->GetHour(convertTZ(timezone)); +} + +u16 rDateTime::GetMinute(rDateTime::TZ timezone) +{ + return static_cast(handle)->GetMinute(convertTZ(timezone)); +} + +u16 rDateTime::GetSecond(rDateTime::TZ timezone) +{ + return static_cast(handle)->GetSecond(convertTZ(timezone)); +} + +u32 rDateTime::GetMillisecond(rDateTime::TZ timezone) +{ + return static_cast(handle)->GetMillisecond(convertTZ(timezone)); +} + + diff --git a/Utilities/rTime.h b/Utilities/rTime.h new file mode 100644 index 0000000000..8f62990382 --- /dev/null +++ b/Utilities/rTime.h @@ -0,0 +1,102 @@ +#pragma once + +extern std::string rDefaultDateTimeFormat; + + +struct rTimeSpan +{ + rTimeSpan(); + ~rTimeSpan(); + rTimeSpan(const rTimeSpan& other); + rTimeSpan(int, int, int, int); + + void *handle; +}; + +struct rDateSpan +{ + rDateSpan(); + ~rDateSpan(); + rDateSpan(const rDateSpan& other); + rDateSpan(int, int, int, int); + + void *handle; +}; + +struct rDateTime +{ + enum TZ + { + Local, GMT0,UTC + }; + enum Calender + { + Gregorian, Julian + }; + + using rTimeZone = TZ; + + enum WeekDay + { + Sun = 0, + Mon, + Tue, + Wed, + Thu, + Fri, + Sat, + Inv_WeekDay + }; + + enum Month { + Jan = 0, + Feb = 1, + Mar = 2, + Apr = 3, + May = 4, + Jun = 5, + Jul = 6, + Aug = 7, + Sep = 8, + Oct = 9, + Nov = 10, + Dec = 11, + Inv_Month = 12 + }; + + rDateTime(); + ~rDateTime(); + rDateTime(const rDateTime& other); + rDateTime(const time_t &time); + rDateTime(u16 day, rDateTime::Month month, u16 year, u16 hour, u16 minute, u16 second, u32 millisecond); + + static rDateTime UNow(); + rDateTime FromUTC(bool val); + rDateTime ToUTC(bool val); + time_t GetTicks(); + void Add(const rTimeSpan& span); + void Add(const rDateSpan& span); + void Close(); + std::string Format(const std::string &format = rDefaultDateTimeFormat, const rTimeZone &tz = Local) const; + + void ParseDateTime(const std::string & format); + + u32 GetAsDOS(); + rDateTime &SetFromDOS(u32 fromdos); + + static bool IsLeapYear(int year, rDateTime::Calender cal); + static int GetNumberOfDays(rDateTime::Month month, int year, rDateTime::Calender cal); + void SetToWeekDay(rDateTime::WeekDay day, int n, rDateTime::Month month, int year); + int GetWeekDay(); + + u16 GetYear( rDateTime::TZ timezone); + u16 GetMonth(rDateTime::TZ timezone); + u16 GetDay(rDateTime::TZ timezone); + u16 GetHour(rDateTime::TZ timezone); + u16 GetMinute(rDateTime::TZ timezone); + u16 GetSecond(rDateTime::TZ timezone); + u32 GetMillisecond(rDateTime::TZ timezone); + + void *handle; +}; + diff --git a/Utilities/rXml.cpp b/Utilities/rXml.cpp new file mode 100644 index 0000000000..089b88114d --- /dev/null +++ b/Utilities/rXml.cpp @@ -0,0 +1,101 @@ +#include "stdafx.h" + +#include + +#include + +rXmlNode::rXmlNode() +{ + ownPtr = true; + handle = reinterpret_cast(new wxXmlNode()); +} + +rXmlNode::rXmlNode(void *ptr) +{ + ownPtr = false; + handle = ptr; +} + +rXmlNode::rXmlNode(const rXmlNode& other) +{ + ownPtr = true; + handle = reinterpret_cast(new wxXmlNode(*reinterpret_cast(other.handle))); +} + +rXmlNode &rXmlNode::operator=(const rXmlNode& other) +{ + if (ownPtr) + { + delete reinterpret_cast(handle); + } + handle = reinterpret_cast(new wxXmlNode(*reinterpret_cast(other.handle))); + ownPtr = true; + return *this; +} + +rXmlNode::~rXmlNode() +{ + if (ownPtr) + { + delete reinterpret_cast(handle); + } +} + +std::shared_ptr rXmlNode::GetChildren() +{ + wxXmlNode* result = reinterpret_cast(handle)->GetChildren(); + return std::make_shared(reinterpret_cast(result)); +} + +std::shared_ptr rXmlNode::GetNext() +{ + wxXmlNode* result = reinterpret_cast(handle)->GetNext(); + return std::make_shared(reinterpret_cast(result)); +} + +std::string rXmlNode::GetName() +{ + return fmt::ToUTF8(reinterpret_cast(handle)->GetName()); +} + +std::string rXmlNode::GetAttribute(const std::string &name) +{ + return fmt::ToUTF8(reinterpret_cast(handle)->GetAttribute(fmt::FromUTF8(name))); +} + +std::string rXmlNode::GetNodeContent() +{ + return fmt::ToUTF8(reinterpret_cast(handle)->GetNodeContent()); +} + +rXmlDocument::rXmlDocument() +{ + handle = reinterpret_cast(new wxXmlDocument()); +} + +rXmlDocument::rXmlDocument(const rXmlDocument& other) +{ + handle = reinterpret_cast(new wxXmlDocument(*reinterpret_cast(other.handle))); +} + +rXmlDocument &rXmlDocument::operator = (const rXmlDocument& other) +{ + delete reinterpret_cast(handle); + handle = reinterpret_cast(new wxXmlDocument(*reinterpret_cast(other.handle))); + return *this; +} + +rXmlDocument::~rXmlDocument() +{ + delete reinterpret_cast(handle); +} + +void rXmlDocument::Load(const std::string & path) +{ + reinterpret_cast(handle)->Load(fmt::FromUTF8(path)); +} + +std::shared_ptr rXmlDocument::GetRoot() +{ + return std::make_shared(reinterpret_cast(reinterpret_cast(handle)->GetRoot())); +} diff --git a/Utilities/rXml.h b/Utilities/rXml.h new file mode 100644 index 0000000000..9531936f73 --- /dev/null +++ b/Utilities/rXml.h @@ -0,0 +1,30 @@ +#pragma once + +struct rXmlNode +{ + rXmlNode(); + rXmlNode(void *); + rXmlNode(const rXmlNode& other); + rXmlNode &operator=(const rXmlNode& other); + ~rXmlNode(); + std::shared_ptr GetChildren(); + std::shared_ptr GetNext(); + std::string GetName(); + std::string GetAttribute( const std::string &name); + std::string GetNodeContent(); + + void *handle; + bool ownPtr; +}; + +struct rXmlDocument +{ + rXmlDocument(); + rXmlDocument(const rXmlDocument& other); + rXmlDocument &operator=(const rXmlDocument& other); + ~rXmlDocument(); + void Load(const std::string & path); + std::shared_ptr GetRoot(); + + void *handle; +}; \ No newline at end of file diff --git a/asmjitsrc/asmjit.vcxproj b/asmjitsrc/asmjit.vcxproj index 28da0c7bdb..67b4f55262 100644 --- a/asmjitsrc/asmjit.vcxproj +++ b/asmjitsrc/asmjit.vcxproj @@ -69,14 +69,14 @@ StaticLibrary false v120 - true + false Unicode StaticLibrary false v120 - true + false Unicode @@ -151,6 +151,9 @@ true true + + false + @@ -166,6 +169,9 @@ true true + + false + diff --git a/rpcs3.sln b/rpcs3.sln index acba28bea4..c1eece25ed 100644 --- a/rpcs3.sln +++ b/rpcs3.sln @@ -1,11 +1,14 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0.21005.1 +# Visual Studio Express 2013 for Windows Desktop +VisualStudioVersion = 12.0.30501.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rpcs3", "rpcs3\rpcs3.vcxproj", "{70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}" ProjectSection(ProjectDependencies) = postProject {CD478F02-7550-58A5-E085-CE4BC0C0AD23} = {CD478F02-7550-58A5-E085-CE4BC0C0AD23} {067D9406-2A93-DACA-9449-93A2D356357D} = {067D9406-2A93-DACA-9449-93A2D356357D} + {C4A10229-4712-4BD2-B63E-50D93C67A038} = {C4A10229-4712-4BD2-B63E-50D93C67A038} {5C363C34-4741-7036-861C-2E2279CF552E} = {5C363C34-4741-7036-861C-2E2279CF552E} {23E1C437-A951-5943-8639-A17F3CF2E606} = {23E1C437-A951-5943-8639-A17F3CF2E606} {22B14659-C5B6-B775-868D-A49198FEAD4A} = {22B14659-C5B6-B775-868D-A49198FEAD4A} @@ -135,6 +138,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asmjit", "asmjitsrc\asmjit. EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "asmjit", "asmjit", "{E2A982F2-4B1A-48B1-8D77-A17A589C58D7}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "emucore", "rpcs3\emucore.vcxproj", "{C4A10229-4712-4BD2-B63E-50D93C67A038}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug - MemLeak|x64 = Debug - MemLeak|x64 @@ -186,6 +191,7 @@ Global {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.Release|x64.Build.0 = Release|x64 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Debug - MemLeak|x64.ActiveCfg = Debug|x64 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Debug - MemLeak|x64.Build.0 = Debug|x64 + {6EDC3B79-D217-F11A-406F-F11D856493F9}.Debug - MemLeak|x64.Deploy.0 = Debug|x64 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Debug|x64.ActiveCfg = Debug|x64 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Debug|x64.Build.0 = Debug|x64 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Release|x64.ActiveCfg = Release|x64 @@ -281,10 +287,17 @@ Global {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|x64.ActiveCfg = Release|x64 {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|x64.Build.0 = Release|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug - MemLeak|x64.ActiveCfg = Debug|x64 + {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug - MemLeak|x64.ActiveCfg = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug|x64.ActiveCfg = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug|x64.Build.0 = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Release|x64.ActiveCfg = Release|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Release|x64.Build.0 = Release|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Debug - MemLeak|x64.ActiveCfg = Debug - MemLeak|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Debug - MemLeak|x64.Build.0 = Debug - MemLeak|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Debug|x64.ActiveCfg = Debug|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Debug|x64.Build.0 = Debug|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Release|x64.ActiveCfg = Release|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 2a1c12f6b8..e278d9643a 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -11,6 +11,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") endif() + add_definitions(-DwxGUI) #add_definitions(-D__WXGTK__) #add_definitions(-Wfatal-errors) add_definitions(-w) # TODO: remove me @@ -19,6 +20,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) add_definitions(-g) # Debugging!! add_definitions(-msse2) elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + add_definitions(-DwxGUI) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions") endif() diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index 3ca97bb917..f16525c7c7 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -133,7 +133,7 @@ unsigned char* get_block_key(int block, NPD_HEADER *npd) } // EDAT/SDAT functions. -int decrypt_data(wxFile *in, wxFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, unsigned char* crypt_key, bool verbose) +int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, unsigned char* crypt_key, bool verbose) { // Get metadata info and setup buffers. int block_num = (int) ((edat->file_size + edat->block_size - 1) / edat->block_size); @@ -338,7 +338,7 @@ static bool check_flags(EDAT_SDAT_HEADER *edat, NPD_HEADER *npd) return true; } -int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, wxFile *f, bool verbose) +int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, rFile *f, bool verbose) { f->Seek(0); unsigned char *header = new unsigned char[0xA0]; @@ -490,7 +490,7 @@ void validate_data(const char* file_name, unsigned char *klicensee, NPD_HEADER * delete[] buf; } -bool extract_data(wxFile *input, wxFile *output, const char* input_file_name, unsigned char* devklic, unsigned char* rifkey, bool verbose) +bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsigned char* devklic, unsigned char* rifkey, bool verbose) { // Setup NPD and EDAT/SDAT structs. NPD_HEADER *NPD = new NPD_HEADER(); @@ -604,9 +604,9 @@ bool extract_data(wxFile *input, wxFile *output, const char* input_file_name, un int DecryptEDAT(const std::string& input_file_name, const std::string& output_file_name, int mode, const std::string& rap_file_name, unsigned char *custom_klic, bool verbose) { // Prepare the files. - wxFile input(input_file_name.c_str()); - wxFile output(output_file_name.c_str(), wxFile::write); - wxFile rap(rap_file_name.c_str()); + rFile input(input_file_name.c_str()); + rFile output(output_file_name.c_str(), rFile::write); + rFile rap(rap_file_name.c_str()); // Set keys (RIF and DEVKLIC). unsigned char rifkey[0x10]; @@ -682,7 +682,7 @@ int DecryptEDAT(const std::string& input_file_name, const std::string& output_fi { input.Close(); output.Close(); - wxRemoveFile(output_file_name); + rRemoveFile(output_file_name); return 0; } diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index 44261f6d33..1192304f34 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -5,7 +5,7 @@ #include "Emu/ConLog.h" // Decryption. -bool CheckHeader(wxFile& pkg_f, PKGHeader* m_header) +bool CheckHeader(rFile& pkg_f, PKGHeader* m_header) { if (m_header->pkg_magic != 0x7F504B47) { ConLog.Error("PKG: Not a package file!"); @@ -48,7 +48,7 @@ bool CheckHeader(wxFile& pkg_f, PKGHeader* m_header) return true; } -bool LoadHeader(wxFile& pkg_f, PKGHeader* m_header) +bool LoadHeader(rFile& pkg_f, PKGHeader* m_header) { pkg_f.Seek(0); @@ -63,7 +63,7 @@ bool LoadHeader(wxFile& pkg_f, PKGHeader* m_header) return true; } -int Decrypt(wxFile& pkg_f, wxFile& dec_pkg_f, PKGHeader* m_header) +int Decrypt(rFile& pkg_f, rFile& dec_pkg_f, PKGHeader* m_header) { if (!LoadHeader(pkg_f, m_header)) return -1; @@ -135,7 +135,7 @@ int Decrypt(wxFile& pkg_f, wxFile& dec_pkg_f, PKGHeader* m_header) } // Unpacking. -bool LoadEntries(wxFile& dec_pkg_f, PKGHeader* m_header, PKGEntry *m_entries) +bool LoadEntries(rFile& dec_pkg_f, PKGHeader* m_header, PKGEntry *m_entries) { dec_pkg_f.Seek(0); dec_pkg_f.Read(m_entries, sizeof(PKGEntry) * m_header->file_count); @@ -148,7 +148,7 @@ bool LoadEntries(wxFile& dec_pkg_f, PKGHeader* m_header, PKGEntry *m_entries) return true; } -bool UnpackEntry(wxFile& dec_pkg_f, const PKGEntry& entry, std::string dir) +bool UnpackEntry(rFile& dec_pkg_f, const PKGEntry& entry, std::string dir) { u8 buf[BUF_SIZE]; @@ -163,8 +163,8 @@ bool UnpackEntry(wxFile& dec_pkg_f, const PKGEntry& entry, std::string dir) case PKG_FILE_ENTRY_SDAT: case PKG_FILE_ENTRY_REGULAR: { - wxFile out; - out.Create(dir + buf); + rFile out; + out.Create(dir + std::string(reinterpret_cast(buf), entry.name_size)); dec_pkg_f.Seek(entry.file_offset); for (u64 size = 0; size < entry.file_size; ) { @@ -179,18 +179,18 @@ bool UnpackEntry(wxFile& dec_pkg_f, const PKGEntry& entry, std::string dir) break; case PKG_FILE_ENTRY_FOLDER: - wxMkdir(dir + buf); + rMkdir(dir + std::string(reinterpret_cast(buf), entry.name_size)); break; } return true; } -int Unpack(wxFile& pkg_f, std::string src, std::string dst) +int Unpack(rFile& pkg_f, std::string src, std::string dst) { PKGHeader* m_header = (PKGHeader*) malloc (sizeof(PKGHeader)); - wxFile dec_pkg_f; - std::string decryptedFile = wxGetCwd().ToStdString() + "/dev_hdd1/" + src + ".dec"; + rFile dec_pkg_f; + std::string decryptedFile = rGetCwd() + "/dev_hdd1/" + src + ".dec"; dec_pkg_f.Create(decryptedFile, true); @@ -199,7 +199,7 @@ int Unpack(wxFile& pkg_f, std::string src, std::string dst) dec_pkg_f.Close(); - wxFile n_dec_pkg_f(decryptedFile, wxFile::read); + rFile n_dec_pkg_f(decryptedFile, rFile::read); std::vector m_entries; m_entries.resize(m_header->file_count); diff --git a/rpcs3/Crypto/unpkg.h b/rpcs3/Crypto/unpkg.h index cb89f8dbee..6a0e7bda28 100644 --- a/rpcs3/Crypto/unpkg.h +++ b/rpcs3/Crypto/unpkg.h @@ -47,4 +47,4 @@ struct PKGEntry be_t pad; // Padding (zeros) }; -extern int Unpack(wxFile& dec_pkg_f, std::string src, std::string dst); \ No newline at end of file +extern int Unpack(rFile& dec_pkg_f, std::string src, std::string dst); \ No newline at end of file diff --git a/rpcs3/Crypto/unself.cpp b/rpcs3/Crypto/unself.cpp index 60950e4c99..4ee7c41806 100644 --- a/rpcs3/Crypto/unself.cpp +++ b/rpcs3/Crypto/unself.cpp @@ -389,7 +389,7 @@ bool SELFDecrypter::DecryptData() bool SELFDecrypter::MakeElf(const std::string& elf, bool isElf32) { // Create a new ELF file. - wxFile e(elf.c_str(), wxFile::write); + rFile e(elf.c_str(), rFile::write); if(!e.IsOpened()) { ConLog.Error("Could not create ELF file! (%s)", elf.c_str()); @@ -505,17 +505,17 @@ bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) // Try to find a matching RAP file under dev_usb000. std::string ci_str((const char *)content_id); - std::string rap_path(fmt::ToUTF8(wxGetCwd()) + "/dev_usb000/" + ci_str + ".rap"); + std::string rap_path(rGetCwd() + "/dev_usb000/" + ci_str + ".rap"); // Check if we have a valid RAP file. - if (!wxFile::Exists(fmt::FromUTF8(rap_path))) + if (!rFile::Exists(rap_path)) { ConLog.Error("This application requires a valid RAP file for decryption!"); return false; } // Open the RAP file and read the key. - wxFile rap_file(fmt::FromUTF8(rap_path), wxFile::read); + rFile rap_file(rap_path, rFile::read); if (!rap_file.IsOpened()) { @@ -569,7 +569,7 @@ bool IsSelfElf32(const std::string& path) bool CheckDebugSelf(const std::string& self, const std::string& elf) { // Open the SELF file. - wxFile s(fmt::FromUTF8(self)); + rFile s(self); if(!s.IsOpened()) { @@ -597,7 +597,7 @@ bool CheckDebugSelf(const std::string& self, const std::string& elf) s.Seek(elf_offset); // Write the real ELF file back. - wxFile e(fmt::FromUTF8(elf), wxFile::write); + rFile e(elf, rFile::write); if(!e.IsOpened()) { ConLog.Error("Could not create ELF file! (%s)", elf.c_str()); diff --git a/rpcs3/Emu/ARMv7/ARMv7DisAsm.h b/rpcs3/Emu/ARMv7/ARMv7DisAsm.h index 1ccba0dc1b..03f99be552 100644 --- a/rpcs3/Emu/ARMv7/ARMv7DisAsm.h +++ b/rpcs3/Emu/ARMv7/ARMv7DisAsm.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/ARMv7/ARMv7Opcodes.h" #include "Emu/CPU/CPUDisAsm.h" -#include "Gui/DisAsmFrame.h" #include "Emu/Memory/Memory.h" static const char* g_arm_cond_name[16] = diff --git a/rpcs3/Emu/Audio/AudioDumper.cpp b/rpcs3/Emu/Audio/AudioDumper.cpp index 1a2e61fea2..3187c3b4be 100644 --- a/rpcs3/Emu/Audio/AudioDumper.cpp +++ b/rpcs3/Emu/Audio/AudioDumper.cpp @@ -11,7 +11,7 @@ AudioDumper::~AudioDumper() bool AudioDumper::Init() { - return m_output.Open("audio.wav", wxFile::write); + return m_output.Open("audio.wav", rFile::write); } void AudioDumper::WriteHeader() diff --git a/rpcs3/Emu/Audio/AudioDumper.h b/rpcs3/Emu/Audio/AudioDumper.h index 11a2f6e7e9..e554b95eca 100644 --- a/rpcs3/Emu/Audio/AudioDumper.h +++ b/rpcs3/Emu/Audio/AudioDumper.h @@ -55,7 +55,7 @@ class AudioDumper { private: WAVHeader m_header; - wxFile m_output; + rFile m_output; public: AudioDumper(u8 ch); diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index cd8c35ad60..e6c7a09cb0 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -4,7 +4,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3/Ini.h" -#include "rpcs3.h" #include "CPUThread.h" @@ -86,13 +85,13 @@ void CPUThread::SetName(const std::string& name) void CPUThread::Wait(bool wait) { - wxCriticalSectionLocker lock(m_cs_sync); + rCriticalSectionLocker lock(m_cs_sync); m_sync_wait = wait; } void CPUThread::Wait(const CPUThread& thr) { - wxCriticalSectionLocker lock(m_cs_sync); + rCriticalSectionLocker lock(m_cs_sync); m_wait_thread_id = thr.GetId(); m_sync_wait = true; } @@ -178,13 +177,13 @@ void CPUThread::SetError(const u32 error) } } -wxArrayString CPUThread::ErrorToString(const u32 error) +std::vector CPUThread::ErrorToString(const u32 error) { - wxArrayString earr; + std::vector earr; if(error == 0) return earr; - earr.Add("Unknown error"); + earr.push_back("Unknown error"); return earr; } @@ -196,9 +195,7 @@ void CPUThread::Run() Reset(); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_START_THREAD, this); -#endif + SendDbgCommand(DID_START_THREAD, this); m_status = Running; @@ -208,18 +205,14 @@ void CPUThread::Run() DoRun(); Emu.CheckStatus(); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_STARTED_THREAD, this); -#endif + SendDbgCommand(DID_STARTED_THREAD, this); } void CPUThread::Resume() { if(!IsPaused()) return; -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_RESUME_THREAD, this); -#endif + SendDbgCommand(DID_RESUME_THREAD, this); m_status = Running; DoResume(); @@ -227,36 +220,28 @@ void CPUThread::Resume() ThreadBase::Start(); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_RESUMED_THREAD, this); -#endif + SendDbgCommand(DID_RESUMED_THREAD, this); } void CPUThread::Pause() { if(!IsRunning()) return; -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_PAUSE_THREAD, this); -#endif + SendDbgCommand(DID_PAUSE_THREAD, this); m_status = Paused; DoPause(); Emu.CheckStatus(); // ThreadBase::Stop(); // "Abort() called" exception -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_PAUSED_THREAD, this); -#endif + SendDbgCommand(DID_PAUSED_THREAD, this); } void CPUThread::Stop() { if(IsStopped()) return; -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_STOP_THREAD, this); -#endif + SendDbgCommand(DID_STOP_THREAD, this); m_status = Stopped; @@ -270,17 +255,13 @@ void CPUThread::Stop() Emu.CheckStatus(); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_STOPED_THREAD, this); -#endif + SendDbgCommand(DID_STOPED_THREAD, this); } void CPUThread::Exec() { m_is_step = false; -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_EXEC_THREAD, this); -#endif + SendDbgCommand(DID_EXEC_THREAD, this); if(IsRunning()) ThreadBase::Start(); @@ -289,17 +270,14 @@ void CPUThread::Exec() void CPUThread::ExecOnce() { m_is_step = true; -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_EXEC_THREAD, this); -#endif + SendDbgCommand(DID_EXEC_THREAD, this); + m_status = Running; ThreadBase::Start(); ThreadBase::Stop(true,false); m_status = Paused; -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_PAUSE_THREAD, this); - wxGetApp().SendDbgCommand(DID_PAUSED_THREAD, this); -#endif + SendDbgCommand(DID_PAUSE_THREAD, this); + SendDbgCommand(DID_PAUSED_THREAD, this); } void CPUThread::Task() diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index b4e2a0784e..62a13d4a3c 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -133,7 +133,7 @@ public: u32 m_wait_thread_id; - wxCriticalSection m_cs_sync; + rCriticalSection m_cs_sync; bool m_sync_wait; void Wait(bool wait); void Wait(const CPUThread& thr); @@ -157,8 +157,8 @@ public: void SetError(const u32 error); - static wxArrayString ErrorToString(const u32 error); - wxArrayString ErrorToString() { return ErrorToString(m_error); } + static std::vector ErrorToString(const u32 error); + std::vector ErrorToString() { return ErrorToString(m_error); } bool IsOk() const { return m_error == 0; } bool IsRunning() const { return m_status == Running; } diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index f9a565ab19..353d44b7b9 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -43,9 +43,7 @@ CPUThread& CPUThreadManager::AddThread(CPUThreadType type) new_thread->SetId(Emu.GetIdManager().GetNewID(fmt::Format("%s Thread", new_thread->GetTypeString().c_str()), new_thread)); m_threads.push_back(new_thread); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_CREATE_THREAD, new_thread); -#endif + SendDbgCommand(DID_CREATE_THREAD, new_thread); return *new_thread; } @@ -73,9 +71,7 @@ void CPUThreadManager::RemoveThread(const u32 id) if (thr) { -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_REMOVE_THREAD, thr); -#endif + SendDbgCommand(DID_REMOVE_THREAD, thr); thr->Close(); m_threads.erase(m_threads.begin() + thread_index); diff --git a/rpcs3/Emu/CPU/CPUThreadManager.h b/rpcs3/Emu/CPU/CPUThreadManager.h index c0595dc693..f4b307a82a 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.h +++ b/rpcs3/Emu/CPU/CPUThreadManager.h @@ -6,7 +6,7 @@ class CPUThreadManager { std::vector m_threads; std::mutex m_mtx_thread; - wxSemaphore m_sem_task; + rSemaphore m_sem_task; u32 m_raw_spu_num; public: diff --git a/rpcs3/Emu/Cell/PPCDisAsm.h b/rpcs3/Emu/Cell/PPCDisAsm.h index 59086e8d94..39541d28ca 100644 --- a/rpcs3/Emu/Cell/PPCDisAsm.h +++ b/rpcs3/Emu/Cell/PPCDisAsm.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/CPU/CPUDisAsm.h" -#include "Gui/DisAsmFrame.h" #include "Emu/Memory/Memory.h" class PPCDisAsm : public CPUDisAsm diff --git a/rpcs3/Emu/Cell/PPCThread.cpp b/rpcs3/Emu/Cell/PPCThread.cpp index 14c5a2a795..a813d10558 100644 --- a/rpcs3/Emu/Cell/PPCThread.cpp +++ b/rpcs3/Emu/Cell/PPCThread.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "PPCThread.h" -#include "Gui/InterpreterDisAsm.h" PPCThread* GetCurrentPPCThread() { diff --git a/rpcs3/Emu/Cell/PPUDisAsm.h b/rpcs3/Emu/Cell/PPUDisAsm.h index 102f30dd78..5fafd6b474 100644 --- a/rpcs3/Emu/Cell/PPUDisAsm.h +++ b/rpcs3/Emu/Cell/PPUDisAsm.h @@ -3,7 +3,6 @@ #include "Emu/Cell/PPUOpcodes.h" #include "Emu/Cell/PPCDisAsm.h" #include "Emu/Cell/PPCThread.h" -#include "Gui/DisAsmFrame.h" #include "Emu/Memory/Memory.h" class PPUDisAsm diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 6d319db432..f2d9e732c0 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -4,7 +4,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -#include "rpcs3.h" +//#include "rpcs3.h" //GUI dependency #include #ifdef _MSC_VER #include @@ -2095,11 +2095,11 @@ private: case 0x1: UNK(fmt::Format("HyperCall %d", CPU.GPR[0])); break; case 0x2: SysCall(); break; case 0x3: - StaticExecute(CPU.GPR[11]); + Emu.GetSFuncManager().StaticExecute(CPU.GPR[11]); if (Ini.HLELogging.GetValue()) { ConLog.Write("'%s' done with code[0x%llx]! #pc: 0x%llx", - g_static_funcs_list[CPU.GPR[11]]->name, CPU.GPR[3], CPU.PC); + Emu.GetSFuncManager()[CPU.GPR[11]]->name, CPU.GPR[3], CPU.PC); } break; case 0x22: UNK("HyperCall LV1"); break; diff --git a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp index 247e85ad99..cc4da73fb1 100644 --- a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp +++ b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp @@ -1495,7 +1495,7 @@ void CompilePPUProgram::Compile() s_shstrtab.sh_size = section_name_offset; section_offset += s_shstrtab.sh_size; - wxFile f(fmt::FromUTF8(m_file_path), wxFile::write); + rFile f(m_file_path, rFile::write); elf_info.e_magic = 0x7F454C46; elf_info.e_class = 2; //ELF64 @@ -1585,7 +1585,7 @@ void CompilePPUProgram::Compile() } f.Seek(s_lib_stub_top.sh_offset); - f.Seek(s_lib_stub_top.sh_size, wxFromCurrent); + f.Seek(s_lib_stub_top.sh_size, rFromCurrent); f.Seek(s_lib_stub.sh_offset); for(u32 i=0, nameoffs=4, dataoffs=0; i enum diff --git a/rpcs3/Emu/Cell/SPUDisAsm.h b/rpcs3/Emu/Cell/SPUDisAsm.h index a480fec7d1..8df572bcf6 100644 --- a/rpcs3/Emu/Cell/SPUDisAsm.h +++ b/rpcs3/Emu/Cell/SPUDisAsm.h @@ -3,7 +3,6 @@ #include "Emu/Cell/SPUOpcodes.h" #include "Emu/Cell/PPCDisAsm.h" #include "Emu/Cell/SPUThread.h" -#include "Gui/DisAsmFrame.h" #include "Emu/Memory/Memory.h" class SPUDisAsm diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index bc0e222d32..5368e3b6d5 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -142,11 +142,11 @@ void SPURecompilerCore::Compile(u16 pos) entry[start].pointer = compiler.make(); compiler.setLogger(nullptr); // crashes without it - wxFile log; - log.Open(wxString::Format("SPUjit_%d.log", GetCurrentSPUThread().GetId()), first ? wxFile::write : wxFile::write_append); - log.Write(wxString::Format("========== START POSITION 0x%x ==========\n\n", start * 4)); - log.Write(wxString(stringLogger.getString())); - log.Write(wxString::Format("========== COMPILED %d (excess %d), time: [start=%lld (decoding=%lld), finalize=%lld]\n\n", + rFile log; + log.Open(fmt::Format("SPUjit_%d.log", GetCurrentSPUThread().GetId()), first ? rFile::write : rFile::write_append); + log.Write(fmt::Format("========== START POSITION 0x%x ==========\n\n", start * 4)); + log.Write(std::string(stringLogger.getString())); + log.Write(fmt::Format("========== COMPILED %d (excess %d), time: [start=%lld (decoding=%lld), finalize=%lld]\n\n", entry[start].count, excess, stamp1 - stamp0, time0, get_system_time() - stamp1)); log.Close(); m_enc->compiler = nullptr; diff --git a/rpcs3/Emu/ConLog.h b/rpcs3/Emu/ConLog.h index 3ec96fd81d..615d8e6d29 100644 --- a/rpcs3/Emu/ConLog.h +++ b/rpcs3/Emu/ConLog.h @@ -1,15 +1,8 @@ #pragma once -#include -#include "Ini.h" -#include "Gui/FrameBase.h" class LogWriter { - wxFile m_logfile; - wxColour m_txtcolour; - - //wxString m_prefix; - //wxString m_value; + rFile m_logfile; void WriteToLog(const std::string& prefix, const std::string& value, u8 lvl); @@ -43,8 +36,9 @@ public: std::string frmt = fmt::Format(fmt, std::forward(args)...); WriteToLog("S", frmt, 1); } - - virtual void SkipLn(); + + virtual void SkipLn(); }; + extern LogWriter ConLog; diff --git a/rpcs3/Emu/DbgCommand.cpp b/rpcs3/Emu/DbgCommand.cpp new file mode 100644 index 0000000000..211195e1cf --- /dev/null +++ b/rpcs3/Emu/DbgCommand.cpp @@ -0,0 +1,6 @@ +#include "stdafx.h" + +void SendDbgCommand(DbgCommand id, CPUThread* thr ) +{ + wxGetApp().SendDbgCommand(id, thr); +} \ No newline at end of file diff --git a/rpcs3/Emu/DbgCommand.h b/rpcs3/Emu/DbgCommand.h new file mode 100644 index 0000000000..88daa6b821 --- /dev/null +++ b/rpcs3/Emu/DbgCommand.h @@ -0,0 +1,40 @@ +#pragma once + +class CPUThread; + +enum DbgCommand +{ + DID_FIRST_COMMAND = 0x500, + + DID_START_EMU, + DID_STARTED_EMU, + DID_STOP_EMU, + DID_STOPPED_EMU, + DID_PAUSE_EMU, + DID_PAUSED_EMU, + DID_RESUME_EMU, + DID_RESUMED_EMU, + DID_READY_EMU, + DID_CREATE_THREAD, + DID_CREATED_THREAD, + DID_REMOVE_THREAD, + DID_REMOVED_THREAD, + DID_RENAME_THREAD, + DID_RENAMED_THREAD, + DID_START_THREAD, + DID_STARTED_THREAD, + DID_STOP_THREAD, + DID_STOPED_THREAD, + DID_PAUSE_THREAD, + DID_PAUSED_THREAD, + DID_RESUME_THREAD, + DID_RESUMED_THREAD, + DID_EXEC_THREAD, + DID_REGISTRED_CALLBACK, + DID_UNREGISTRED_CALLBACK, + DID_EXIT_THR_SYSCALL, + + DID_LAST_COMMAND, +}; + +void SendDbgCommand(DbgCommand id, CPUThread* thr = nullptr); \ No newline at end of file diff --git a/rpcs3/Emu/DbgConsole.cpp b/rpcs3/Emu/DbgConsole.cpp index 712c3d0b77..11bab7990e 100644 --- a/rpcs3/Emu/DbgConsole.cpp +++ b/rpcs3/Emu/DbgConsole.cpp @@ -4,94 +4,91 @@ #include "Emu/System.h" #include "DbgConsole.h" -BEGIN_EVENT_TABLE(DbgConsole, FrameBase) - EVT_CLOSE(DbgConsole::OnQuit) -END_EVENT_TABLE() +LogWriter ConLog; +class LogFrame; +extern LogFrame* ConLogFrame; -DbgConsole::DbgConsole() - : FrameBase(nullptr, wxID_ANY, "Debug Console", "", wxDefaultSize, wxDefaultPosition, wxDEFAULT_FRAME_STYLE, true) - , ThreadBase("DbgConsole thread") - , m_output(nullptr) +_LogBuffer LogBuffer; + +std::mutex g_cs_conlog; + +const uint max_item_count = 500; +const uint buffer_size = 1024 * 64; + +static const std::string g_log_colors[] = { - m_console = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, - wxSize(500, 500), wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH2); - m_console->SetBackgroundColour(wxColor("Black")); - m_console->SetFont(wxFont(8, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL)); + "Black", "Green", "White", "Yellow", "Red", +}; - m_color_white = new wxTextAttr(wxColour(255, 255, 255)); - m_color_red = new wxTextAttr(wxColour(255, 0, 0)); - - if (Ini.HLESaveTTY.GetValue()) - m_output = new wxFile("tty.log", wxFile::write); -} - -DbgConsole::~DbgConsole() +LogWriter::LogWriter() { - ThreadBase::Stop(); - m_dbg_buffer.Flush(); - - safe_delete(m_console); - safe_delete(m_color_white); - safe_delete(m_color_red); - safe_delete(m_output); -} - -void DbgConsole::Write(int ch, const std::string& text) -{ - while (m_dbg_buffer.IsBusy()) + if (!m_logfile.Open(_PRGNAME_ ".log", rFile::write)) { - if (Emu.IsStopped()) - { - return; - } - Sleep(1); + rMessageBox("Can't create log file! (" _PRGNAME_ ".log)", rMessageBoxCaptionStr, rICON_ERROR); } - m_dbg_buffer.Push(DbgPacket(ch, text)); - - if(!IsAlive()) Start(); } -void DbgConsole::Clear() +void LogWriter::WriteToLog(const std::string& prefix, const std::string& value, u8 lvl/*, wxColour bgcolour*/) { - m_console->Clear(); -} - -void DbgConsole::Task() -{ - while(!TestDestroy()) + std::string new_prefix = prefix; + if (!prefix.empty()) { - if(!m_dbg_buffer.HasNewPacket()) + if (NamedThreadBase* thr = GetCurrentNamedThread()) + { + new_prefix += " : " + thr->GetThreadName(); + } + } + + if (m_logfile.IsOpened() && !new_prefix.empty()) + m_logfile.Write("[" + new_prefix + "]: " + value + "\n"); + + if (!ConLogFrame || Ini.HLELogLvl.GetValue() == 4 || (lvl != 0 && lvl <= Ini.HLELogLvl.GetValue())) + return; + + std::lock_guard lock(g_cs_conlog); + + // TODO: Use ThreadBase instead, track main thread id + if (rThread::IsMain()) + { + while (LogBuffer.IsBusy()) + { + // need extra break condition? + rYieldIfNeeded(); + } + } + else + { + while (LogBuffer.IsBusy()) { if (Emu.IsStopped()) { break; } Sleep(1); - continue; } - - DbgPacket packet = m_dbg_buffer.Pop(); - m_console->SetDefaultStyle(packet.m_ch == 1 ? *m_color_red : *m_color_white); - m_console->SetInsertionPointEnd(); - m_console->WriteText(fmt::FromUTF8(packet.m_text)); - - if (m_output && Ini.HLESaveTTY.GetValue()) - m_output->Write(fmt::FromUTF8(packet.m_text)); - - if(!DbgConsole::IsShown()) Show(); } + + //if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush(); + + LogBuffer.Push(LogPacket(new_prefix, value, g_log_colors[lvl])); } -void DbgConsole::OnQuit(wxCloseEvent& event) + +void LogWriter::SkipLn() +{ + WriteToLog("", "", 0); +} + +void DbgConsole::Close() +{ + i = 1; +} + +void DbgConsole::Clear() +{ + i = 2; +} + +void DbgConsole::Write(int ch, const std::string &msg) { - ThreadBase::Stop(false); - Hide(); - - if (m_output) - { - m_output->Close(); - m_output = nullptr; - } - - //event.Skip(); } diff --git a/rpcs3/Emu/DbgConsole.h b/rpcs3/Emu/DbgConsole.h index c4417b3880..ce17097552 100644 --- a/rpcs3/Emu/DbgConsole.h +++ b/rpcs3/Emu/DbgConsole.h @@ -1,5 +1,10 @@ #pragma once +#include //for memset + +extern const uint max_item_count; +extern const uint buffer_size; + struct DbgPacket { int m_ch; @@ -21,6 +26,87 @@ struct DbgPacket } }; +struct LogPacket +{ + const std::string m_prefix; + const std::string m_text; + const std::string m_colour; + + LogPacket(const std::string& prefix, const std::string& text, const std::string& colour) + : m_prefix(prefix) + , m_text(text) + , m_colour(colour) + { + + } +}; + +struct _LogBuffer : public MTPacketBuffer +{ + _LogBuffer() : MTPacketBuffer(buffer_size) + { + } + + void _push(const LogPacket& data) + { + const u32 sprefix = data.m_prefix.length(); + const u32 stext = data.m_text.length(); + const u32 scolour = data.m_colour.length(); + + m_buffer.resize(m_buffer.size() + + sizeof(u32) + sprefix + + sizeof(u32) + stext + + sizeof(u32) + scolour); + + u32 c_put = m_put; + + memcpy(&m_buffer[c_put], &sprefix, sizeof(u32)); + c_put += sizeof(u32); + memcpy(&m_buffer[c_put], data.m_prefix.c_str(), sprefix); + c_put += sprefix; + + memcpy(&m_buffer[c_put], &stext, sizeof(u32)); + c_put += sizeof(u32); + memcpy(&m_buffer[c_put], data.m_text.c_str(), stext); + c_put += stext; + + memcpy(&m_buffer[c_put], &scolour, sizeof(u32)); + c_put += sizeof(u32); + memcpy(&m_buffer[c_put], data.m_colour.c_str(), scolour); + c_put += scolour; + + m_put = c_put; + CheckBusy(); + } + + LogPacket _pop() + { + u32 c_get = m_get; + + const u32& sprefix = *(u32*)&m_buffer[c_get]; + c_get += sizeof(u32); + const std::string prefix((const char*)&m_buffer[c_get], sprefix); + c_get += sprefix; + + const u32& stext = *(u32*)&m_buffer[c_get]; + c_get += sizeof(u32); + const std::string text((const char*)&m_buffer[c_get], stext); + c_get += stext; + + const u32& scolour = *(u32*)&m_buffer[c_get]; + c_get += sizeof(u32); + const std::string colour((const char*)&m_buffer[c_get], scolour); + c_get += scolour; + + m_get = c_get; + if (!HasNewPacket()) Flush(); + + return LogPacket(prefix, text, colour); + } +}; + +extern _LogBuffer LogBuffer; + struct _DbgBuffer : public MTPacketBuffer { _DbgBuffer() : MTPacketBuffer(1024) @@ -68,24 +154,10 @@ struct _DbgBuffer : public MTPacketBuffer } }; -class DbgConsole - : public FrameBase - , public ThreadBase +struct DbgConsole { - wxFile* m_output; - wxTextCtrl* m_console; - wxTextAttr* m_color_white; - wxTextAttr* m_color_red; - _DbgBuffer m_dbg_buffer; - -public: - DbgConsole(); - ~DbgConsole(); - void Write(int ch, const std::string& text); + int i; + void Close(); void Clear(); - virtual void Task(); - -private: - void OnQuit(wxCloseEvent& event); - DECLARE_EVENT_TABLE(); -}; + void Write(int ch, const std::string &msg); +}; \ No newline at end of file diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index ac59b8636e..3a55fc68c1 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -243,9 +243,9 @@ vfsDevice* VFS::GetDeviceLocal(const std::string& local_path, std::string& path) u32 max_eq; s32 max_i=-1; - wxFileName file_path(fmt::FromUTF8(local_path)); + rFileName file_path(local_path); file_path.Normalize(); - std::string mormalized_path = fmt::ToUTF8(file_path.GetFullPath()); + std::string mormalized_path = file_path.GetFullPath(); for(u32 i=0; i arr0 = fmt::rSplit(path0.GetFullPath(), DL); + std::vector arr1 = fmt::rSplit(local_path, DL); - const u32 lim = std::min(arr0.GetCount(), arr1.GetCount()); + const u32 lim = std::min(arr0.size(), arr1.size()); u32 ret = 0; - for(u32 i=0; i& vfsDirBase::GetEntries() const diff --git a/rpcs3/Emu/FS/vfsLocalDir.cpp b/rpcs3/Emu/FS/vfsLocalDir.cpp index 285e3df15e..349923e749 100644 --- a/rpcs3/Emu/FS/vfsLocalDir.cpp +++ b/rpcs3/Emu/FS/vfsLocalDir.cpp @@ -15,24 +15,24 @@ bool vfsLocalDir::Open(const std::string& path) if(!vfsDirBase::Open(path)) return false; - wxDir dir; + rDir dir; if(!dir.Open(path)) return false; - wxString name; + std::string name; for(bool is_ok = dir.GetFirst(&name); is_ok; is_ok = dir.GetNext(&name)) { - wxString dir_path = fmt::FromUTF8(path) + name; + std::string dir_path = path + name; m_entries.emplace_back(); DirEntryInfo& info = m_entries.back(); - info.name = fmt::ToUTF8(name); + info.name = name; info.flags |= dir.Exists(dir_path) ? DirEntry_TypeDir : DirEntry_TypeFile; - if(wxIsWritable(dir_path)) info.flags |= DirEntry_PermWritable; - if(wxIsReadable(dir_path)) info.flags |= DirEntry_PermReadable; - if(wxIsExecutable(dir_path)) info.flags |= DirEntry_PermExecutable; + if(rIsWritable(dir_path)) info.flags |= DirEntry_PermWritable; + if(rIsReadable(dir_path)) info.flags |= DirEntry_PermReadable; + if(rIsExecutable(dir_path)) info.flags |= DirEntry_PermExecutable; } return true; @@ -40,7 +40,7 @@ bool vfsLocalDir::Open(const std::string& path) bool vfsLocalDir::Create(const std::string& path) { - return wxFileName::Mkdir(fmt::FromUTF8(path), 0777, wxPATH_MKDIR_FULL); + return rFileName::Mkdir(path, 0777, rPATH_MKDIR_FULL); } bool vfsLocalDir::Rename(const std::string& from, const std::string& to) @@ -50,5 +50,5 @@ bool vfsLocalDir::Rename(const std::string& from, const std::string& to) bool vfsLocalDir::Remove(const std::string& path) { - return wxRmdir(fmt::FromUTF8(path)); + return rRmdir(path); } diff --git a/rpcs3/Emu/FS/vfsLocalFile.cpp b/rpcs3/Emu/FS/vfsLocalFile.cpp index dd4b145ae2..46e989354f 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.cpp +++ b/rpcs3/Emu/FS/vfsLocalFile.cpp @@ -2,30 +2,30 @@ #include "Emu/ConLog.h" #include "vfsLocalFile.h" -static const wxFile::OpenMode vfs2wx_mode(vfsOpenMode mode) +static const rFile::OpenMode vfs2wx_mode(vfsOpenMode mode) { switch(mode) { - case vfsRead: return wxFile::read; - case vfsWrite: return wxFile::write; - case vfsReadWrite: return wxFile::read_write; - case vfsWriteExcl: return wxFile::write_excl; - case vfsWriteAppend: return wxFile::write_append; + case vfsRead: return rFile::read; + case vfsWrite: return rFile::write; + case vfsReadWrite: return rFile::read_write; + case vfsWriteExcl: return rFile::write_excl; + case vfsWriteAppend: return rFile::write_append; } - return wxFile::read; + return rFile::read; } -static const wxSeekMode vfs2wx_seek(vfsSeekMode mode) +static const rSeekMode vfs2wx_seek(vfsSeekMode mode) { switch(mode) { - case vfsSeekSet: return wxFromStart; - case vfsSeekCur: return wxFromCurrent; - case vfsSeekEnd: return wxFromEnd; + case vfsSeekSet: return rFromStart; + case vfsSeekCur: return rFromCurrent; + case vfsSeekEnd: return rFromEnd; } - return wxFromStart; + return rFromStart; } vfsLocalFile::vfsLocalFile(vfsDevice* device) : vfsFileBase(device) @@ -45,9 +45,9 @@ bool vfsLocalFile::Open(const std::string& path, vfsOpenMode mode) // } // else // { - if(!m_file.Access(fmt::FromUTF8(path), vfs2wx_mode(mode))) return false; + if(!m_file.Access(path, vfs2wx_mode(mode))) return false; - return m_file.Open(fmt::FromUTF8(path), vfs2wx_mode(mode)) && vfsFileBase::Open(path, mode); + return m_file.Open(path, vfs2wx_mode(mode)) && vfsFileBase::Open(path, mode); // } } @@ -63,19 +63,19 @@ bool vfsLocalFile::Create(const std::string& path) break; const std::string& dir = path.substr(0, p); - if(!wxDirExists(fmt::FromUTF8(dir))) + if(!rDirExists(dir)) { ConLog.Write("create dir: %s", dir.c_str()); - wxMkdir(fmt::FromUTF8(dir)); + rMkdir(dir); } } //create file const char m = path[path.length() - 1]; - if(m != '/' && m != '\\' && !wxFileExists(fmt::FromUTF8(path))) // ??? + if(m != '/' && m != '\\' && !rFileExists(path)) // ??? { - wxFile f; - return f.Create(fmt::FromUTF8(path)); + rFile f; + return f.Create(path); } return true; diff --git a/rpcs3/Emu/FS/vfsLocalFile.h b/rpcs3/Emu/FS/vfsLocalFile.h index ec0c12d72a..a7aac7b1ea 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.h +++ b/rpcs3/Emu/FS/vfsLocalFile.h @@ -4,7 +4,7 @@ class vfsLocalFile : public vfsFileBase { private: - wxFile m_file; + rFile m_file; public: vfsLocalFile(vfsDevice* device); diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 6f19cdb6c9..74c88c7a04 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -1269,7 +1269,7 @@ static const std::string GetMethodName(const u32 id) { NV4097_SET_TRANSFORM_BRANCH_BITS, "SetTransformBranchBits" } , }; - for(u32 i = 0; i < WXSIZEOF(METHOD_NAME_LIST); ++i) + for (u32 i = 0; i < SARRSIZEOF(METHOD_NAME_LIST); ++i) { if(METHOD_NAME_LIST[i].id == id) return "cellGcm" + METHOD_NAME_LIST[i].name; } diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index f5dda76c88..7fdcd7e19c 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -4,7 +4,6 @@ #include "Emu/System.h" #include "GLGSRender.h" #include "Emu/Cell/PPCInstrTable.h" -#include "Gui/RSXDebugger.h" #define CMD_DEBUG 0 #define DUMP_VERTEX_DATA 0 @@ -39,53 +38,6 @@ void printGlError(GLenum err, const std::string& situation) #define checkForGlError(x) /*x*/ #endif -GLGSFrame::GLGSFrame() - : GSFrame(nullptr, "GSFrame[OpenGL]") - , m_frames(0) -{ - canvas = new wxGLCanvas(this, wxID_ANY, NULL); - canvas->SetSize(GetClientSize()); - - canvas->Bind(wxEVT_LEFT_DCLICK, &GSFrame::OnLeftDclick, this); -} - -void GLGSFrame::Flip(wxGLContext *context) -{ - if(!canvas) return; - canvas->SetCurrent(*context); - - static Timer fps_t; - canvas->SwapBuffers(); - m_frames++; - - if(fps_t.GetElapsedTimeInSec() >= 0.5) - { - SetTitle(wxString::Format("FPS: %.2f", (double)m_frames / fps_t.GetElapsedTimeInSec())); - m_frames = 0; - fps_t.Start(); - } -} - -void GLGSFrame::OnSize(wxSizeEvent& event) -{ - if(canvas) canvas->SetSize(GetClientSize()); - event.Skip(); -} - -void GLGSFrame::SetViewport(int x, int y, u32 w, u32 h) -{ - /* - //ConLog.Warning("SetViewport(x=%d, y=%d, w=%d, h=%d)", x, y, w, h); - - const wxSize client = GetClientSize(); - const wxSize viewport = AspectRatio(client, wxSize(w, h)); - - const int vx = (client.GetX() - viewport.GetX()) / 2; - const int vy = (client.GetY() - viewport.GetY()) / 2; - - glViewport(vx + x, vy + y, viewport.GetWidth(), viewport.GetHeight()); - */ -} GLGSRender::GLGSRender() : GSRender() @@ -94,7 +46,7 @@ GLGSRender::GLGSRender() , m_vp_buf_num(-1) , m_context(nullptr) { - m_frame = new GLGSFrame(); + m_frame = new rGLFrame();// new GLGSFrame(); } GLGSRender::~GLGSRender() @@ -164,7 +116,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw) checkForGlError("initializing vbo"); #if DUMP_VERTEX_DATA - wxFile dump("VertexDataArray.dump", wxFile::write); + rFile dump("VertexDataArray.dump", rFile::write); #endif for(u32 i=0; iGetCanvas()); + m_context = m_frame->GetNewContext();//new rGLContext(m_frame->GetCanvas()); + + //m_frame->GetCanvas()->SetCurrent(*m_context); + m_frame->SetCurrent(m_context); - m_frame->GetCanvas()->SetCurrent(*m_context); InitProcTable(); glEnable(GL_TEXTURE_2D); diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index b0d7ca74a8..2512062d1b 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -3,7 +3,6 @@ #include "Emu/GS/RSXThread.h" #include "GLBuffers.h" #include "GLProgramBuffer.h" -#include #pragma comment(lib, "opengl32.lib") @@ -501,7 +500,7 @@ public: } } - void Save(RSXTexture& tex, const wxString& name) + void Save(RSXTexture& tex, const std::string& name) { if(!m_id || !tex.GetOffset() || !tex.GetWidth() || !tex.GetHeight()) return; @@ -527,7 +526,7 @@ public: } { - wxFile f(name + ".raw", wxFile::write); + rFile f(name + ".raw", rFile::write); f.Write(alldata, texPixelCount * 4); } u8* data = new u8[texPixelCount * 3]; @@ -544,9 +543,9 @@ public: *dst_a++ = *src++; } - wxImage out; + rImage out; out.Create(tex.GetWidth(), tex.GetHeight(), data, alpha); - out.SaveFile(name, wxBITMAP_TYPE_PNG); + out.SaveFile(name, rBITMAP_TYPE_PNG); delete[] alldata; //free(data); @@ -555,14 +554,14 @@ public: void Save(RSXTexture& tex) { - static const wxString& dir_path = "textures"; - static const wxString& file_fmt = dir_path + "/" + "tex[%d].png"; + static const std::string& dir_path = "textures"; + static const std::string& file_fmt = dir_path + "/" + "tex[%d].png"; - if(!wxDirExists(dir_path)) wxMkdir(dir_path); + if(!rDirExists(dir_path)) rMkdir(dir_path); u32 count = 0; - while(wxFileExists(wxString::Format(file_fmt, count))) count++; - Save(tex, wxString::Format(file_fmt, count)); + while(rFileExists(fmt::Format(file_fmt, count))) count++; + Save(tex, fmt::Format(file_fmt, count)); } void Bind() @@ -585,24 +584,6 @@ public: } }; -struct GLGSFrame : public GSFrame -{ - wxGLCanvas* canvas; - u32 m_frames; - - GLGSFrame(); - ~GLGSFrame() {} - - void Flip(wxGLContext *context); - - wxGLCanvas* GetCanvas() const { return canvas; } - - virtual void SetViewport(int x, int y, u32 w, u32 h); - -private: - virtual void OnSize(wxSizeEvent& event); -}; - class PostDrawObj { protected: @@ -787,9 +768,9 @@ public: } }; -class GLGSRender - : public wxWindow - , public GSRender +class GLGSRender //TODO: find out why this used to inherit from wxWindow + : //public wxWindow + /*,*/ public GSRender { private: std::vector m_vdata; @@ -810,10 +791,10 @@ private: GLrbo m_rbo; GLfbo m_fbo; - wxGLContext* m_context; + void* m_context; public: - GLGSFrame* m_frame; + rGLFrame* m_frame; u32 m_draw_frames; u32 m_skip_frames; diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index f77cd244a5..ac1205e403 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -77,7 +77,7 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n) ret += m_parr.AddParam(PARAM_NONE, "vec4", "tmp" + std::to_string(src[n].tmp_src)); break; case 2: //input - if(d1.input_src < WXSIZEOF(reg_table)) + if (d1.input_src < SARRSIZEOF(reg_table)) { ret += m_parr.AddParam(PARAM_IN, "vec4", reg_table[d1.input_src], d1.input_src); } diff --git a/rpcs3/Emu/GS/GSManager.cpp b/rpcs3/Emu/GS/GSManager.cpp index 16ca4d3bc5..7774f04978 100644 --- a/rpcs3/Emu/GS/GSManager.cpp +++ b/rpcs3/Emu/GS/GSManager.cpp @@ -7,11 +7,6 @@ #include "Null/NullGSRender.h" #include "GL/GLGSRender.h" -BEGIN_EVENT_TABLE(GSFrame, wxFrame) - EVT_PAINT(GSFrame::OnPaint) - EVT_SIZE(GSFrame::OnSize) -END_EVENT_TABLE() - GSManager::GSManager() : m_render(nullptr) { } diff --git a/rpcs3/Emu/GS/GSRender.cpp b/rpcs3/Emu/GS/GSRender.cpp index 255236497f..742aed85d0 100644 --- a/rpcs3/Emu/GS/GSRender.cpp +++ b/rpcs3/Emu/GS/GSRender.cpp @@ -2,85 +2,9 @@ #include "Emu/ConLog.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "rpcs3/rpcs3.h" #include "GSRender.h" -wxSize AspectRatio(wxSize rs, const wxSize as) -{ - const double aq = (double)as.x / as.y; - const double rq = (double)rs.x / rs.y; - const double q = aq / rq; - - if(q > 1.0) - { - rs.y /= q; - } - else if(q < 1.0) - { - rs.x *= q; - } - - return rs; -} - -GSFrame::GSFrame(wxWindow* parent, const wxString& title) : wxFrame(parent, wxID_ANY, title) -{ - CellVideoOutResolution res = ResolutionTable[ResolutionIdToNum(Ini.GSResolution.GetValue())]; - SetClientSize(res.width, res.height); - wxGetApp().Bind(wxEVT_KEY_DOWN, &GSFrame::OnKeyDown, this); - Bind(wxEVT_CLOSE_WINDOW, &GSFrame::OnClose, this); -} - -void GSFrame::OnPaint(wxPaintEvent& event) -{ - wxPaintDC(this); -} - -void GSFrame::OnClose(wxCloseEvent& event) -{ - Emu.Stop(); -} - -/* -void GSFrame::OnSize(wxSizeEvent&) -{ - const wxSize client = GetClientSize(); - const wxSize viewport = AspectRatio(client, m_size); - - const int x = (client.GetX() - viewport.GetX()) / 2; - const int y = (client.GetY() - viewport.GetY()) / 2; - - SetViewport(wxPoint(x, y), viewport); -} -*/ - -void GSFrame::OnKeyDown(wxKeyEvent& event) -{ - switch(event.GetKeyCode()) - { - case WXK_RETURN: if(event.AltDown()) { OnFullScreen(); return; } break; - case WXK_ESCAPE: if(IsFullScreen()) { ShowFullScreen(false); return; } break; - } - event.Skip(); -} - -void GSFrame::OnFullScreen() -{ - ShowFullScreen(!IsFullScreen()); -} - - -/* -void GSFrame::SetSize(int width, int height) -{ - m_size.SetWidth(width); - m_size.SetHeight(height); - //wxFrame::SetSize(width, height); - OnSize(wxSizeEvent()); -} -*/ - GSLockCurrent::GSLockCurrent(GSLockType type) : GSLock(Emu.GetGSManager().GetRender(), type) { } diff --git a/rpcs3/Emu/GS/GSRender.h b/rpcs3/Emu/GS/GSRender.h index 3ae017cb39..5f55543327 100644 --- a/rpcs3/Emu/GS/GSRender.h +++ b/rpcs3/Emu/GS/GSRender.h @@ -2,34 +2,6 @@ #include "Emu/GS/GCM.h" #include "Emu/GS/RSXThread.h" -wxSize AspectRatio(wxSize rs, const wxSize as); - -class GSFrame : public wxFrame -{ -protected: - GSFrame(wxWindow* parent, const wxString& title); - - virtual void SetViewport(int x, int y, u32 w, u32 h) {} - virtual void OnPaint(wxPaintEvent& event); - virtual void OnClose(wxCloseEvent& event); - - //virtual void OnSize(wxSizeEvent&); - - void OnKeyDown(wxKeyEvent& event); - void OnFullScreen(); - -public: - void OnLeftDclick(wxMouseEvent&) - { - OnFullScreen(); - } - - //void SetSize(int width, int height); - -private: - DECLARE_EVENT_TABLE(); -}; - struct GSRender : public RSXThread { virtual ~GSRender() diff --git a/rpcs3/Emu/GS/Null/NullGSRender.h b/rpcs3/Emu/GS/Null/NullGSRender.h index aaba2ec398..b337045b48 100644 --- a/rpcs3/Emu/GS/Null/NullGSRender.h +++ b/rpcs3/Emu/GS/Null/NullGSRender.h @@ -1,58 +1,22 @@ #pragma once #include "Emu/GS/GSRender.h" -struct NullGSFrame : public GSFrame -{ - NullGSFrame() : GSFrame(nullptr, "GSFrame[Null]") - { - Bind(wxEVT_LEFT_DCLICK, &GSFrame::OnLeftDclick, this); - } - - void Draw() - { - wxClientDC dc(this); - Draw(&dc); - } - -private: - virtual void OnPaint(wxPaintEvent& event) - { - wxPaintDC dc(this); - Draw(&dc); - } - virtual void OnSize(wxSizeEvent& event) - { - GSFrame::OnSize(event); - Draw(); - } - - void Draw(wxDC* dc) - { - dc->DrawText("Null GS output", 0, 0); - } -}; - class NullGSRender - : public wxWindow - , public GSRender + : public GSRender { public: - NullGSFrame* m_frame; - NullGSRender() : m_frame(nullptr) + NullGSRender() { - m_frame = new NullGSFrame(); } virtual ~NullGSRender() { - m_frame->Close(); } private: virtual void OnInit() { - m_frame->Show(); } virtual void OnInitThread() @@ -77,8 +41,5 @@ private: virtual void Close() { - Stop(); - - if(m_frame->IsShown()) m_frame->Hide(); } }; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index b22e60c47f..bbc6555344 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1833,7 +1833,7 @@ void RSXThread::Task() while(!TestDestroy()) { - wxCriticalSectionLocker lock(m_cs_main); + rCriticalSectionLocker lock(m_cs_main); inc=1; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index e492ea8708..7e1a3e8f22 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -142,9 +142,9 @@ public: u32 m_draw_array_first; public: - wxCriticalSection m_cs_main; - wxSemaphore m_sem_flush; - wxSemaphore m_sem_flip; + rCriticalSection m_cs_main; + rSemaphore m_sem_flush; + rSemaphore m_sem_flip; Callback m_flip_handler; public: diff --git a/rpcs3/Emu/HDD/HDD.h b/rpcs3/Emu/HDD/HDD.h index f00cf41301..4adfd684fc 100644 --- a/rpcs3/Emu/HDD/HDD.h +++ b/rpcs3/Emu/HDD/HDD.h @@ -63,7 +63,7 @@ public: static void CreateHDD(const std::string& path, u64 size, u64 block_size) { - wxFile f(fmt::FromUTF8(path), wxFile::write); + rFile f(path, rFile::write); static const u64 cur_dir_block = 1; diff --git a/rpcs3/Emu/Io/Keyboard.cpp b/rpcs3/Emu/Io/Keyboard.cpp index 7181459973..fa8df62eb3 100644 --- a/rpcs3/Emu/Io/Keyboard.cpp +++ b/rpcs3/Emu/Io/Keyboard.cpp @@ -1,10 +1,8 @@ #include "stdafx.h" #include "Emu/ConLog.h" #include "rpcs3/Ini.h" -#include "rpcs3.h" #include "Keyboard.h" #include "Null/NullKeyboardHandler.h" -#include "Windows/WindowsKeyboardHandler.h" KeyboardManager::KeyboardManager() : m_keyboard_handler(nullptr) @@ -22,17 +20,13 @@ void KeyboardManager::Init(const u32 max_connect) return; // NOTE: Change these to std::make_unique assignments when C++14 comes out. - switch(Ini.KeyboardHandlerMode.GetValue()) + int numHandlers = rPlatform::getKeyboardHandlerCount(); + int selectedHandler = Ini.KeyboardHandlerMode.GetValue(); + if (selectedHandler > numHandlers) { - case 1: - m_keyboard_handler.reset(new WindowsKeyboardHandler()); - break; - - default: - case 0: - m_keyboard_handler.reset(new NullKeyboardHandler()); - break; + selectedHandler = 0; } + m_keyboard_handler.reset(rPlatform::getKeyboardHandler(selectedHandler)); m_keyboard_handler->Init(max_connect); m_inited = true; diff --git a/rpcs3/Emu/Io/Mouse.cpp b/rpcs3/Emu/Io/Mouse.cpp index 2a75bb3846..8e96c65e95 100644 --- a/rpcs3/Emu/Io/Mouse.cpp +++ b/rpcs3/Emu/Io/Mouse.cpp @@ -1,10 +1,8 @@ #include "stdafx.h" #include "Emu/ConLog.h" #include "rpcs3/Ini.h" -#include "rpcs3.h" #include "Mouse.h" #include "Null/NullMouseHandler.h" -#include "Windows/WindowsMouseHandler.h" MouseManager::MouseManager() : m_mouse_handler(nullptr) @@ -22,17 +20,13 @@ void MouseManager::Init(const u32 max_connect) return; // NOTE: Change these to std::make_unique assignments when C++14 is available. - switch(Ini.MouseHandlerMode.GetValue()) + int numHandlers = rPlatform::getMouseHandlerCount(); + int selectedHandler = Ini.MouseHandlerMode.GetValue(); + if (selectedHandler > numHandlers) { - case 1: - m_mouse_handler.reset(new WindowsMouseHandler()); - break; - - default: - case 0: - m_mouse_handler.reset(new NullMouseHandler()); - break; + selectedHandler = 0; } + m_mouse_handler.reset(rPlatform::getMouseHandler(selectedHandler)); m_mouse_handler->Init(max_connect); m_inited = true; diff --git a/rpcs3/Emu/Io/Null/NullKeyboardHandler.h b/rpcs3/Emu/Io/Null/NullKeyboardHandler.h index 78d25be2b3..d4c187f489 100644 --- a/rpcs3/Emu/Io/Null/NullKeyboardHandler.h +++ b/rpcs3/Emu/Io/Null/NullKeyboardHandler.h @@ -1,6 +1,7 @@ #pragma once #include "Emu/Io/KeyboardHandler.h" +#include //for memset class NullKeyboardHandler final : public KeyboardHandlerBase { diff --git a/rpcs3/Emu/Io/Null/NullMouseHandler.h b/rpcs3/Emu/Io/Null/NullMouseHandler.h index 883bca01ef..4141190d82 100644 --- a/rpcs3/Emu/Io/Null/NullMouseHandler.h +++ b/rpcs3/Emu/Io/Null/NullMouseHandler.h @@ -1,6 +1,7 @@ #pragma once #include "Emu/Io/MouseHandler.h" +#include //for memset class NullMouseHandler final : public MouseHandlerBase { diff --git a/rpcs3/Emu/Io/Null/NullPadHandler.h b/rpcs3/Emu/Io/Null/NullPadHandler.h index d770bf4a00..5add5ae3c7 100644 --- a/rpcs3/Emu/Io/Null/NullPadHandler.h +++ b/rpcs3/Emu/Io/Null/NullPadHandler.h @@ -1,6 +1,7 @@ #pragma once #include "Emu/Io/PadHandler.h" +#include //for memset class NullPadHandler final : public PadHandlerBase { diff --git a/rpcs3/Emu/Io/Pad.cpp b/rpcs3/Emu/Io/Pad.cpp index 486fd37ef4..41d4b7ca43 100644 --- a/rpcs3/Emu/Io/Pad.cpp +++ b/rpcs3/Emu/Io/Pad.cpp @@ -1,13 +1,16 @@ #include "stdafx.h" #include "Emu/ConLog.h" #include "rpcs3/Ini.h" -#include "rpcs3.h" #include "Pad.h" #include "Null/NullPadHandler.h" +#ifdef wxGUI #include "Windows/WindowsPadHandler.h" +#include "rpcs3.h" #if defined(_WIN32) #include "XInput/XInputPadHandler.h" #endif +#endif + PadManager::PadManager() : m_pad_handler(nullptr) @@ -25,23 +28,13 @@ void PadManager::Init(const u32 max_connect) return; // NOTE: Change these to std::make_unique assignments when C++14 is available. - switch(Ini.PadHandlerMode.GetValue()) + int numHandlers = rPlatform::getPadHandlerCount(); + int selectedHandler = Ini.PadHandlerMode.GetValue(); + if (selectedHandler > numHandlers) { - case 1: - m_pad_handler.reset(new WindowsPadHandler()); - break; - -#if defined(_WIN32) - case 2: - m_pad_handler.reset(new XInputPadHandler()); - break; -#endif - - default: - case 0: - m_pad_handler.reset(new NullPadHandler()); - break; + selectedHandler = 0; } + m_pad_handler.reset(rPlatform::getPadHandler(selectedHandler)); m_pad_handler->Init(max_connect); m_inited = true; diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 7742a02027..d4821b4b25 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -1136,10 +1136,3 @@ typedef mem_list_ptr_t mem16_ptr_t; typedef mem_list_ptr_t mem32_ptr_t; typedef mem_list_ptr_t mem64_ptr_t; -//#define re(val) MemoryBase::Reverse(val) -#define re64(val) MemoryBase::Reverse64(val) -#define re32(val) MemoryBase::Reverse32(val) -#define re16(val) MemoryBase::Reverse16(val) - -template T re(const T val) { T res; se_t::func(res, val); return res; } -template void re(T1& dst, const T2 val) { se_t::func(dst, val); } diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp new file mode 100644 index 0000000000..fa03dd18cb --- /dev/null +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -0,0 +1,450 @@ +#include "stdafx.h" +#include "ModuleManager.h" + +extern void cellAdec_init(); +extern Module* cellAdec; +extern void cellAtrac_init(); +extern Module *cellAtrac; +extern void cellAudio_init(); +extern Module *cellAudio; +extern void cellDmux_init(); +extern Module *cellDmux; +extern void cellFont_init(); +extern void cellFont_load(); +extern void cellFont_unload(); +extern Module *cellFont; +extern void sys_net_init(); +extern Module *sys_net; +extern void sceNpTrophy_unload(); +extern void sceNpTrophy_init(); +extern Module *sceNpTrophy; +extern void sceNp_init(); +extern Module *sceNp; +extern void cellUserInfo_init(); +extern Module *cellUserInfo; +extern void cellSysutil_init(); +extern Module *cellSysutil; +extern void cellSysutilAp_init(); +extern Module *cellSysutilAp; +extern void cellPngDec_init(); +extern Module *cellPngDec; +extern void cellNetCtl_init(); +extern Module *cellNetCtl; +extern void cellJpgDec_init(); +extern Module *cellJpgDec; +extern void cellFontFT_init(); +extern void cellFontFT_load(); +extern void cellFontFT_unload(); +extern Module *cellFontFT; +extern void cellGifDec_init(); +extern Module *cellGifDec; +extern void cellGcmSys_init(); +extern void cellGcmSys_load(); +extern void cellGcmSys_unload(); +extern Module *cellGcmSys; +extern void cellGame_init(); +extern Module *cellGame; +extern void sys_io_init(); +extern Module *sys_io; +extern void cellL10n_init(); +extern Module *cellL10n; +extern void cellPamf_init(); +extern Module *cellPamf; +extern void cellResc_init(); +extern void cellResc_load(); +extern void cellResc_unload(); +extern Module *cellResc; +extern void cellRtc_init(); +extern Module *cellRtc; +extern void cellSpurs_init(); +extern Module *cellSpurs; +extern void cellSync_init(); +extern Module *cellSync; +extern void cellSysmodule_init(); +extern Module *cellSysmodule; +extern void cellVdec_init(); +extern Module *cellVdec; +extern void cellVpost_init(); +extern Module *cellVpost; +extern void libmixer_init(); +extern Module *libmixer; +extern void sysPrxForUser_init(); +extern Module *sysPrxForUser; +extern void sys_fs_init(); +extern Module *sys_fs; + +struct ModuleInfo +{ + u32 id; + const char* name; +} +static const g_module_list[] = +{ + { 0x0000, "sys_net" }, + { 0x0001, "sys_http" }, + { 0x0002, "cellHttpUtil" }, + { 0x0003, "cellSsl" }, + { 0x0004, "cellHttps" }, + { 0x0005, "libvdec" }, + { 0x0006, "cellAdec" }, + { 0x0007, "cellDmux" }, + { 0x0008, "cellVpost" }, + { 0x0009, "cellRtc" }, + { 0x000a, "cellSpurs" }, + { 0x000b, "cellOvis" }, + { 0x000c, "cellSheap" }, + { 0x000d, "sys_sync" }, + { 0x000e, "sys_fs" }, + { 0x000f, "cellJpgDec" }, + { 0x0010, "cellGcmSys" }, + { 0x0011, "cellAudio" }, + { 0x0012, "cellPamf" }, + { 0x0013, "cellAtrac" }, + { 0x0014, "cellNetCtl" }, + { 0x0015, "cellSysutil" }, + { 0x0016, "sceNp" }, + { 0x0017, "sys_io" }, + { 0x0018, "cellPngDec" }, + { 0x0019, "cellFont" }, + { 0x001a, "cellFontFT" }, + { 0x001b, "cellFreetype" }, + { 0x001c, "cellUsbd" }, + { 0x001d, "cellSail" }, + { 0x001e, "cellL10n" }, + { 0x001f, "cellResc" }, + { 0x0020, "cellDaisy" }, + { 0x0021, "cellKey2char" }, + { 0x0022, "cellMic" }, + { 0x0023, "cellCamera" }, + { 0x0024, "cellVdecMpeg2" }, + { 0x0025, "cellVdecAvc" }, + { 0x0026, "cellAdecLpcm" }, + { 0x0027, "cellAdecAc3" }, + { 0x0028, "cellAdecAtx" }, + { 0x0029, "cellAdecAt3" }, + { 0x002a, "cellDmuxPamf" }, + { 0x002e, "cellLv2dbg" }, + { 0x0030, "cellUsbpspcm" }, + { 0x0031, "cellAvconfExt" }, + { 0x0032, "cellUserInfo" }, + { 0x0033, "cellSysutilSavedata" }, + { 0x0034, "cellSubdisplay" }, + { 0x0035, "cellSysutilRec" }, + { 0x0036, "cellVideoExport" }, + { 0x0037, "cellGameExec" }, + { 0x0038, "sceNp2" }, + { 0x0039, "cellSysutilAp" }, + { 0x003a, "cellSysutilNpClans" }, + { 0x003b, "cellSysutilOskExt" }, + { 0x003c, "cellVdecDivx" }, + { 0x003d, "cellJpgEnc" }, + { 0x003e, "cellGame" }, + { 0x003f, "cellBgdl" }, + { 0x0040, "cellFreetypeTT" }, + { 0x0041, "cellSysutilVideoUpload" }, + { 0x0042, "cellSysutilSysconfExt" }, + { 0x0043, "cellFiber" }, + { 0x0044, "cellNpCommerce2" }, + { 0x0045, "cellNpTus" }, + { 0x0046, "cellVoice" }, + { 0x0047, "cellAdecCelp8" }, + { 0x0048, "cellCelp8Enc" }, + { 0x0049, "cellLicenseArea" }, + { 0x004a, "cellMusic2" }, + { 0x004e, "cellScreenshot" }, + { 0x004f, "cellMusicDecode" }, + { 0x0050, "cellSpursJq" }, + { 0x0052, "cellPngEnc" }, + { 0x0053, "cellMusicDecode2" }, + { 0x0055, "cellSync2" }, + { 0x0056, "cellNpUtil" }, + { 0x0057, "cellRudp" }, + { 0x0059, "cellNpSns" }, + { 0x005a, "cellGem" }, + { 0xf00a, "cellCelpEnc" }, + { 0xf010, "cellGifDec" }, + { 0xf019, "cellAdecCelp" }, + { 0xf01b, "cellAdecM2bc" }, + { 0xf01d, "cellAdecM4aac" }, + { 0xf01e, "cellAdecMp3" }, + { 0xf023, "cellImejp" }, + { 0xf028, "cellMusic" }, + { 0xf029, "cellPhotoExport" }, + { 0xf02a, "cellPrint" }, + { 0xf02b, "cellPhotoImport" }, + { 0xf02c, "cellMusicExport" }, + { 0xf02e, "cellPhotoDecode" }, + { 0xf02f, "cellSearch" }, + { 0xf030, "cellAvchat2" }, + { 0xf034, "cellSailRec" }, + { 0xf035, "sceNpTrophy" }, + { 0xf053, "cellAdecAt3multi" }, + { 0xf054, "cellLibatrac3multi" } +}; + +void ModuleManager::init() +{ + //this is a really bad hack and the whole idea of Modules and how they're implemented should probably be changed + //the contruction of the modules accessses the global variable for that module. + //For example cellAdec needs to be set before cellAdec_init is called but it would be called in the constructor of + //cellAdec, so we need to point cellAdec to where we will construct it in the future + if (!initialized) + { + m_mod_init.reserve(m_mod_init.size() + 160);//currently 131 + for (auto& m : g_module_list) + { + m_mod_init.emplace_back(m.id, m.name); + } + cellAdec = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0006, cellAdec_init); + cellAtrac = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0013, cellAtrac_init); + cellAudio = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0011, cellAudio_init); + cellDmux = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0007, cellDmux_init); + cellFont = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0019, cellFont_init, cellFont_load, cellFont_unload); + sys_net = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back((u16)0x0000, sys_net_init); + sceNpTrophy = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0xf035, sceNpTrophy_init, nullptr, sceNpTrophy_unload); + sceNp = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0016, sceNp_init); + cellUserInfo = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0032, cellUserInfo_init); + cellSysutil = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0015, cellSysutil_init); + cellSysutilAp = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0039, cellSysutilAp_init); + cellPngDec = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0018, cellPngDec_init); + cellNetCtl = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0014, cellNetCtl_init); + cellJpgDec = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x000f, cellJpgDec_init); + cellFontFT = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x001a, cellFontFT_init, cellFontFT_load, cellFontFT_unload); + cellGifDec = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0xf010, cellGifDec_init); + cellGcmSys = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0010, cellGcmSys_init, cellGcmSys_load, cellGcmSys_unload); + cellGame = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x003e, cellGame_init); + sys_io = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0017, sys_io_init); + cellL10n = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x001e, cellL10n_init); + cellPamf = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0012, cellPamf_init); + cellResc = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x001f, cellResc_init, cellResc_load, cellResc_unload); + cellRtc = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0009, cellRtc_init); + cellSpurs = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x000a, cellSpurs_init); + cellSync = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back("cellSync", cellSync_init); + cellSysmodule = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back("cellSysmodule", cellSysmodule_init); + cellVdec = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0005, cellVdec_init); + cellVpost = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0008, cellVpost_init); + libmixer = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back("libmixer", libmixer_init); + sysPrxForUser = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back("sysPrxForUser", sysPrxForUser_init); + sys_fs = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x000e, sys_fs_init); + initialized = true; + } +} + +ModuleManager::ModuleManager() : +m_max_module_id(0), +m_module_2_count(0), +initialized(false) +{ + memset(m_modules, 0, 3 * 0xFF * sizeof(Module*)); +} + +ModuleManager::~ModuleManager() +{ + m_mod_init.clear(); +} + +bool ModuleManager::IsLoadedFunc(u32 id) +{ + for (u32 i = 0; iid == id) + { + return true; + } + } + + return false; +} + +bool ModuleManager::CallFunc(u32 num) +{ + func_caller* func = nullptr; + { + std::lock_guard lock(m_funcs_lock); + + for (u32 i = 0; iid == num) + { + func = m_modules_funcs_list[i]->func; + break; + } + } + } + if (func) + { + (*func)(); + return true; + } + return false; +} + +bool ModuleManager::UnloadFunc(u32 id) +{ + std::lock_guard lock(m_funcs_lock); + + for (u32 i = 0; iid == id) + { + m_modules_funcs_list.erase(m_modules_funcs_list.begin() + i); + + return true; + } + } + + return false; +} + +u32 ModuleManager::GetFuncNumById(u32 id) +{ + return id; +} + +void ModuleManager::UnloadModules() +{ + for (u32 i = 0; i<3; ++i) + { + for (u32 j = 0; jUnLoad(); + } + } + } + + std::lock_guard lock(m_funcs_lock); + m_modules_funcs_list.clear(); +} + +Module* ModuleManager::GetModuleByName(const std::string& name) +{ + for (u32 i = 0; iGetName() == name) + { + return m_modules[0][i]; + } + + if (m_modules[1][i] && m_modules[1][i]->GetName() == name) + { + return m_modules[1][i]; + } + + if (m_modules[2][i] && m_modules[2][i]->GetName() == name) + { + return m_modules[2][i]; + } + } + + return nullptr; +} + +Module* ModuleManager::GetModuleById(u16 id) +{ + for (u32 i = 0; iGetID() == id) + { + return m_modules[0][i]; + } + + if (m_modules[1][i] && m_modules[1][i]->GetID() == id) + { + return m_modules[1][i]; + } + } + + return nullptr; +} + +void ModuleManager::SetModule(int id, Module* module, bool with_data) +{ + if (id != 0xffff) + { + if (u16((u8)id + 1) > m_max_module_id) + { + m_max_module_id = u16((u8)id + 1); + } + + int index; + switch (id >> 8) + { + case 0x00: index = 0; break; + case 0xf0: index = 1; break; + default: assert(0); return; + } + + if (m_modules[index][(u8)id]) + { + if (with_data) + { + module->SetName(m_modules[index][(u8)id]->GetName()); + // delete m_modules[index][(u8)id]; + m_modules[index][(u8)id] = module; + } + else + { + m_modules[index][(u8)id]->SetName(module->GetName()); + // delete module; + } + } + else + { + m_modules[index][(u8)id] = module; + } + } + else + { + m_modules[2][m_module_2_count++] = module; + + if (m_module_2_count > m_max_module_id) + { + m_max_module_id = m_module_2_count; + } + } +} + + +void ModuleManager::AddFunc(ModuleFunc *func) +{ + std::lock_guard guard(m_funcs_lock); + + if (!IsLoadedFunc(func->id)) + { + m_modules_funcs_list.push_back(func); + } +} + diff --git a/rpcs3/Emu/SysCalls/ModuleManager.h b/rpcs3/Emu/SysCalls/ModuleManager.h new file mode 100644 index 0000000000..e4a85c9958 --- /dev/null +++ b/rpcs3/Emu/SysCalls/ModuleManager.h @@ -0,0 +1,28 @@ +#pragma once +#include "Modules.h" + +class ModuleManager +{ + Module* m_modules[3][0xff]; + uint m_max_module_id; + uint m_module_2_count; + std::mutex m_funcs_lock; + std::vector m_modules_funcs_list; + std::vector m_mod_init; + bool initialized; +public: + ModuleManager(); + ~ModuleManager(); + + void init(); + void AddFunc(ModuleFunc *func); + void SetModule(int id, Module* module, bool with_data); + bool IsLoadedFunc(u32 id); + bool CallFunc(u32 num); + bool UnloadFunc(u32 id); + void UnloadModules(); + u32 GetFuncNumById(u32 id); + Module* GetModuleByName(const std::string& name); + Module* GetModuleById(u16 id); + +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 836836be2b..158b451466 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -6,322 +6,11 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include +#include "Emu/System.h" +#include "ModuleManager.h" -Module* g_modules[3][0xff] = {0}; -uint g_max_module_id = 0; -uint g_module_2_count = 0; -std::vector g_modules_funcs_list; -std::mutex g_funcs_lock; -std::vector g_static_funcs_list; -struct ModuleInfo -{ - u32 id; - const char* name; -} -static const g_module_list[] = -{ - {0x0000, "sys_net"}, - {0x0001, "sys_http"}, - {0x0002, "cellHttpUtil"}, - {0x0003, "cellSsl"}, - {0x0004, "cellHttps"}, - {0x0005, "libvdec"}, - {0x0006, "cellAdec"}, - {0x0007, "cellDmux"}, - {0x0008, "cellVpost"}, - {0x0009, "cellRtc"}, - {0x000a, "cellSpurs"}, - {0x000b, "cellOvis"}, - {0x000c, "cellSheap"}, - {0x000d, "sys_sync"}, - {0x000e, "sys_fs"}, - {0x000f, "cellJpgDec"}, - {0x0010, "cellGcmSys"}, - {0x0011, "cellAudio"}, - {0x0012, "cellPamf"}, - {0x0013, "cellAtrac"}, - {0x0014, "cellNetCtl"}, - {0x0015, "cellSysutil"}, - {0x0016, "sceNp"}, - {0x0017, "sys_io"}, - {0x0018, "cellPngDec"}, - {0x0019, "cellFont"}, - {0x001a, "cellFontFT"}, - {0x001b, "cellFreetype"}, - {0x001c, "cellUsbd"}, - {0x001d, "cellSail"}, - {0x001e, "cellL10n"}, - {0x001f, "cellResc"}, - {0x0020, "cellDaisy"}, - {0x0021, "cellKey2char"}, - {0x0022, "cellMic"}, - {0x0023, "cellCamera"}, - {0x0024, "cellVdecMpeg2"}, - {0x0025, "cellVdecAvc"}, - {0x0026, "cellAdecLpcm"}, - {0x0027, "cellAdecAc3"}, - {0x0028, "cellAdecAtx"}, - {0x0029, "cellAdecAt3"}, - {0x002a, "cellDmuxPamf"}, - {0x002e, "cellLv2dbg"}, - {0x0030, "cellUsbpspcm"}, - {0x0031, "cellAvconfExt"}, - {0x0032, "cellUserInfo"}, - {0x0033, "cellSysutilSavedata"}, - {0x0034, "cellSubdisplay"}, - {0x0035, "cellSysutilRec"}, - {0x0036, "cellVideoExport"}, - {0x0037, "cellGameExec"}, - {0x0038, "sceNp2"}, - {0x0039, "cellSysutilAp"}, - {0x003a, "cellSysutilNpClans"}, - {0x003b, "cellSysutilOskExt"}, - {0x003c, "cellVdecDivx"}, - {0x003d, "cellJpgEnc"}, - {0x003e, "cellGame"}, - {0x003f, "cellBgdl"}, - {0x0040, "cellFreetypeTT"}, - {0x0041, "cellSysutilVideoUpload"}, - {0x0042, "cellSysutilSysconfExt"}, - {0x0043, "cellFiber"}, - {0x0044, "cellNpCommerce2"}, - {0x0045, "cellNpTus"}, - {0x0046, "cellVoice"}, - {0x0047, "cellAdecCelp8"}, - {0x0048, "cellCelp8Enc"}, - {0x0049, "cellLicenseArea"}, - {0x004a, "cellMusic2"}, - {0x004e, "cellScreenshot"}, - {0x004f, "cellMusicDecode"}, - {0x0050, "cellSpursJq"}, - {0x0052, "cellPngEnc"}, - {0x0053, "cellMusicDecode2"}, - {0x0055, "cellSync2"}, - {0x0056, "cellNpUtil"}, - {0x0057, "cellRudp"}, - {0x0059, "cellNpSns"}, - {0x005a, "cellGem"}, - {0xf00a, "cellCelpEnc"}, - {0xf010, "cellGifDec"}, - {0xf019, "cellAdecCelp"}, - {0xf01b, "cellAdecM2bc"}, - {0xf01d, "cellAdecM4aac"}, - {0xf01e, "cellAdecMp3"}, - {0xf023, "cellImejp"}, - {0xf028, "cellMusic"}, - {0xf029, "cellPhotoExport"}, - {0xf02a, "cellPrint"}, - {0xf02b, "cellPhotoImport"}, - {0xf02c, "cellMusicExport"}, - {0xf02e, "cellPhotoDecode"}, - {0xf02f, "cellSearch"}, - {0xf030, "cellAvchat2"}, - {0xf034, "cellSailRec"}, - {0xf035, "sceNpTrophy"}, - {0xf053, "cellAdecAt3multi"}, - {0xf054, "cellLibatrac3multi"} -}; - -struct _InitNullModules -{ - std::vector m_modules; - - _InitNullModules() - { - for(auto& m : g_module_list) - { - m_modules.push_back(new Module(m.id, m.name)); - } - } - - ~_InitNullModules() - { - for (int i = 0; i < m_modules.size(); ++i) - { - delete m_modules[i]; - } - } -} InitNullModules; - -/** HACK: Used to delete SFunc objects that get added to the global static function array (g_static_funcs_list). - * The destructor of this static object gets called when the program shuts down. - */ -struct StaticFunctionListCleaner_t -{ - StaticFunctionListCleaner_t() {} - ~StaticFunctionListCleaner_t() - { - for (int i = 0; i < g_static_funcs_list.size(); ++i) - { - delete g_static_funcs_list[i]; - } - } -} StaticFunctionListCleaner; - -bool IsLoadedFunc(u32 id) -{ - for(u32 i=0; iid == id) - { - return true; - } - } - - return false; -} - -bool CallFunc(u32 num) -{ - func_caller* func = nullptr; - { - std::lock_guard lock(g_funcs_lock); - - for(u32 i=0; iid == num) - { - func = g_modules_funcs_list[i]->func; - break; - } - } - } - if (func) - { - (*func)(); - return true; - } - return false; -} - -bool UnloadFunc(u32 id) -{ - std::lock_guard lock(g_funcs_lock); - - for(u32 i=0; iid == id) - { - g_modules_funcs_list.erase(g_modules_funcs_list.begin() +i); - - return true; - } - } - - return false; -} - -u32 GetFuncNumById(u32 id) -{ - return id; -} - -void UnloadModules() -{ - for(u32 i=0; i<3; ++i) - { - for(u32 j=0; jUnLoad(); - } - } - } - - std::lock_guard lock(g_funcs_lock); - g_modules_funcs_list.clear(); -} - -Module* GetModuleByName(const std::string& name) -{ - for(u32 i=0; iGetName() == name) - { - return g_modules[0][i]; - } - - if(g_modules[1][i] && g_modules[1][i]->GetName() == name) - { - return g_modules[1][i]; - } - - if(g_modules[2][i] && g_modules[2][i]->GetName() == name) - { - return g_modules[2][i]; - } - } - - return nullptr; -} - -Module* GetModuleById(u16 id) -{ - for(u32 i=0; iGetID() == id) - { - return g_modules[0][i]; - } - - if(g_modules[1][i] && g_modules[1][i]->GetID() == id) - { - return g_modules[1][i]; - } - } - - return nullptr; -} - -void SetModule(int id, Module* module, bool with_data) -{ - if(id != 0xffff) - { - if(u16((u8)id + 1) > g_max_module_id) - { - g_max_module_id = u16((u8)id + 1); - } - - int index; - switch(id >> 8) - { - case 0x00: index = 0; break; - case 0xf0: index = 1; break; - default: assert(0); return; - } - - if(g_modules[index][(u8)id]) - { - if(with_data) - { - module->SetName(g_modules[index][(u8)id]->GetName()); - // delete g_modules[index][(u8)id]; - g_modules[index][(u8)id] = module; - } - else - { - g_modules[index][(u8)id]->SetName(module->GetName()); - // delete module; - } - } - else - { - g_modules[index][(u8)id] = module; - } - } - else - { - g_modules[2][g_module_2_count++] = module; - - if(g_module_2_count > g_max_module_id) - { - g_max_module_id = g_module_2_count; - } - } -} Module::Module(u16 id, const char* name) : m_is_loaded(false) @@ -330,7 +19,7 @@ Module::Module(u16 id, const char* name) , m_load_func(nullptr) , m_unload_func(nullptr) { - SetModule(m_id, this, false); + Emu.GetModuleManager().SetModule(m_id, this, false); } Module::Module(const char* name, void (*init)(), void (*load)(), void (*unload)()) @@ -340,7 +29,7 @@ Module::Module(const char* name, void (*init)(), void (*load)(), void (*unload)( , m_load_func(load) , m_unload_func(unload) { - SetModule(m_id, this, init != nullptr); + Emu.GetModuleManager().SetModule(m_id, this, init != nullptr); if(init) init(); } @@ -350,10 +39,35 @@ Module::Module(u16 id, void (*init)(), void (*load)(), void (*unload)()) , m_load_func(load) , m_unload_func(unload) { - SetModule(m_id, this, init != nullptr); + Emu.GetModuleManager().SetModule(m_id, this, init != nullptr); if(init) init(); } +Module::Module(Module &&other) + : m_is_loaded(false) + , m_id(0) + , m_load_func(nullptr) + , m_unload_func(nullptr) +{ + std::swap(this->m_name,other.m_name); + std::swap(this->m_id, other.m_id); + std::swap(this->m_is_loaded, other.m_is_loaded); + std::swap(this->m_load_func, other.m_load_func); + std::swap(this->m_unload_func, other.m_unload_func); + std::swap(this->m_funcs_list, other.m_funcs_list); +} + +Module &Module::operator =(Module &&other) +{ + std::swap(this->m_name, other.m_name); + std::swap(this->m_id, other.m_id); + std::swap(this->m_is_loaded, other.m_is_loaded); + std::swap(this->m_load_func, other.m_load_func); + std::swap(this->m_unload_func, other.m_unload_func); + std::swap(this->m_funcs_list, other.m_funcs_list); + return *this; +} + Module::~Module() { UnLoad(); @@ -373,11 +87,7 @@ void Module::Load() for(u32 i=0; i lock(g_funcs_lock); - - if(IsLoadedFunc(m_funcs_list[i]->id)) continue; - - g_modules_funcs_list.push_back(m_funcs_list[i]); + Emu.GetModuleManager().AddFunc(m_funcs_list[i]); } SetLoaded(true); @@ -392,7 +102,7 @@ void Module::UnLoad() for(u32 i=0; iid); + Emu.GetModuleManager().UnloadFunc(m_funcs_list[i]->id); } SetLoaded(false); @@ -400,16 +110,16 @@ void Module::UnLoad() bool Module::Load(u32 id) { - std::lock_guard lock(g_funcs_lock); + //std::lock_guard lock(g_funcs_lock); - if(IsLoadedFunc(id)) return false; + if(Emu.GetModuleManager().IsLoadedFunc(id)) return false; for(u32 i=0; iid == id) { - g_modules_funcs_list.push_back(m_funcs_list[i]); - + //g_modules_funcs_list.push_back(m_funcs_list[i]); + Emu.GetModuleManager().AddFunc(m_funcs_list[i]); return true; } } @@ -419,7 +129,7 @@ bool Module::Load(u32 id) bool Module::UnLoad(u32 id) { - return UnloadFunc(id); + return Emu.GetModuleManager().UnloadFunc(id); } void Module::SetLoaded(bool loaded) diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index 8ed63b7f26..a558246faf 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -42,12 +42,10 @@ struct SFunc } }; -extern std::vector g_static_funcs_list; - class Module { std::string m_name; - const u16 m_id; + u16 m_id; bool m_is_loaded; void (*m_load_func)(); void (*m_unload_func)(); @@ -59,6 +57,12 @@ public: Module(const char* name, void (*init)(), void (*load)() = nullptr, void (*unload)() = nullptr); Module(u16 id, void (*init)(), void (*load)() = nullptr, void (*unload)() = nullptr); + Module(Module &other) = delete; + Module(Module &&other); + + Module &operator =(Module &other) = delete; + Module &operator =(Module &&other); + ~Module(); void Load(); @@ -151,14 +155,6 @@ __forceinline void Module::AddFuncSub(const char group[8], const u64 ops[], cons op.crc = re(op.crc); sf->ops.push_back(op); } - g_static_funcs_list.push_back(sf); + Emu.GetSFuncManager().push_back(sf); } -bool IsLoadedFunc(u32 id); -bool CallFunc(u32 num); -bool UnloadFunc(u32 id); -void UnloadModules(); -u32 GetFuncNumById(u32 id); -Module* GetModuleByName(const std::string& name); -Module* GetModuleById(u16 id); - diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 96f3f159b2..e5983c399e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -19,8 +19,9 @@ extern "C" #include "cellAdec.h" -void cellAdec_init(); -Module cellAdec(0x0006, cellAdec_init); +//void cellAdec_init(); +//Module cellAdec(0x0006, cellAdec_init); +extern Module *cellAdec=nullptr; int adecRawRead(void* opaque, u8* buf, int buf_size) { @@ -189,7 +190,7 @@ u32 adecOpen(AudioDecoder* data) adec.adecCb = &Emu.GetCPU().AddThread(CPU_THREAD_PPU); - u32 adec_id = cellAdec.GetNewId(data); + u32 adec_id = cellAdec->GetNewId(data); adec.id = adec_id; @@ -530,7 +531,7 @@ bool adecCheckType(AudioCodecType type) case CELL_ADEC_TYPE_CELP: case CELL_ADEC_TYPE_M4AAC: case CELL_ADEC_TYPE_CELP8: - cellAdec.Error("Unimplemented audio codec type (%d)", type); + cellAdec->Error("Unimplemented audio codec type (%d)", type); break; default: return false; @@ -541,7 +542,7 @@ bool adecCheckType(AudioCodecType type) int cellAdecQueryAttr(mem_ptr_t type, mem_ptr_t attr) { - cellAdec.Warning("cellAdecQueryAttr(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); + cellAdec->Warning("cellAdecQueryAttr(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); if (!type.IsGood() || !attr.IsGood()) { @@ -560,7 +561,7 @@ int cellAdecQueryAttr(mem_ptr_t type, mem_ptr_t attr int cellAdecOpen(mem_ptr_t type, mem_ptr_t res, mem_ptr_t cb, mem32_t handle) { - cellAdec.Warning("cellAdecOpen(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", + cellAdec->Warning("cellAdecOpen(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.GetAddr(), res.GetAddr(), cb.GetAddr(), handle.GetAddr()); if (!type.IsGood() || !res.IsGood() || !cb.IsGood() || !handle.IsGood()) @@ -577,7 +578,7 @@ int cellAdecOpen(mem_ptr_t type, mem_ptr_t res, int cellAdecOpenEx(mem_ptr_t type, mem_ptr_t res, mem_ptr_t cb, mem32_t handle) { - cellAdec.Warning("cellAdecOpenEx(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", + cellAdec->Warning("cellAdecOpenEx(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.GetAddr(), res.GetAddr(), cb.GetAddr(), handle.GetAddr()); if (!type.IsGood() || !res.IsGood() || !cb.IsGood() || !handle.IsGood()) @@ -594,7 +595,7 @@ int cellAdecOpenEx(mem_ptr_t type, mem_ptr_t r int cellAdecClose(u32 handle) { - cellAdec.Warning("cellAdecClose(handle=%d)", handle); + cellAdec->Warning("cellAdecClose(handle=%d)", handle); AudioDecoder* adec; if (!Emu.GetIdManager().GetIDData(handle, adec)) @@ -621,7 +622,7 @@ int cellAdecClose(u32 handle) int cellAdecStartSeq(u32 handle, u32 param_addr) { - cellAdec.Log("cellAdecStartSeq(handle=%d, param_addr=0x%x)", handle, param_addr); + cellAdec->Log("cellAdecStartSeq(handle=%d, param_addr=0x%x)", handle, param_addr); AudioDecoder* adec; if (!Emu.GetIdManager().GetIDData(handle, adec)) @@ -636,7 +637,7 @@ int cellAdecStartSeq(u32 handle, u32 param_addr) } else*/ { - cellAdec.Warning("cellAdecStartSeq: (TODO) initialization"); + cellAdec->Warning("cellAdecStartSeq: (TODO) initialization"); } adec->job.Push(task); @@ -645,7 +646,7 @@ int cellAdecStartSeq(u32 handle, u32 param_addr) int cellAdecEndSeq(u32 handle) { - cellAdec.Warning("cellAdecEndSeq(handle=%d)", handle); + cellAdec->Warning("cellAdecEndSeq(handle=%d)", handle); AudioDecoder* adec; if (!Emu.GetIdManager().GetIDData(handle, adec)) @@ -659,7 +660,7 @@ int cellAdecEndSeq(u32 handle) int cellAdecDecodeAu(u32 handle, mem_ptr_t auInfo) { - cellAdec.Log("cellAdecDecodeAu(handle=%d, auInfo_addr=0x%x)", handle, auInfo.GetAddr()); + cellAdec->Log("cellAdecDecodeAu(handle=%d, auInfo_addr=0x%x)", handle, auInfo.GetAddr()); AudioDecoder* adec; if (!Emu.GetIdManager().GetIDData(handle, adec)) @@ -685,7 +686,7 @@ int cellAdecDecodeAu(u32 handle, mem_ptr_t auInfo) int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) { - cellAdec.Log("cellAdecGetPcm(handle=%d, outBuffer_addr=0x%x)", handle, outBuffer_addr); + cellAdec->Log("cellAdecGetPcm(handle=%d, outBuffer_addr=0x%x)", handle, outBuffer_addr); AudioDecoder* adec; if (!Emu.GetIdManager().GetIDData(handle, adec)) @@ -775,7 +776,7 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) int cellAdecGetPcmItem(u32 handle, mem32_t pcmItem_ptr) { - cellAdec.Log("cellAdecGetPcmItem(handle=%d, pcmItem_ptr_addr=0x%x)", handle, pcmItem_ptr.GetAddr()); + cellAdec->Log("cellAdecGetPcmItem(handle=%d, pcmItem_ptr_addr=0x%x)", handle, pcmItem_ptr.GetAddr()); AudioDecoder* adec; if (!Emu.GetIdManager().GetIDData(handle, adec)) @@ -828,15 +829,15 @@ int cellAdecGetPcmItem(u32 handle, mem32_t pcmItem_ptr) void cellAdec_init() { - cellAdec.AddFunc(0x7e4a4a49, cellAdecQueryAttr); - cellAdec.AddFunc(0xd00a6988, cellAdecOpen); - cellAdec.AddFunc(0x8b5551a4, cellAdecOpenEx); - cellAdec.AddFunc(0x847d2380, cellAdecClose); - cellAdec.AddFunc(0x487b613e, cellAdecStartSeq); - cellAdec.AddFunc(0xe2ea549b, cellAdecEndSeq); - cellAdec.AddFunc(0x1529e506, cellAdecDecodeAu); - cellAdec.AddFunc(0x97ff2af1, cellAdecGetPcm); - cellAdec.AddFunc(0xbd75f78b, cellAdecGetPcmItem); + cellAdec->AddFunc(0x7e4a4a49, cellAdecQueryAttr); + cellAdec->AddFunc(0xd00a6988, cellAdecOpen); + cellAdec->AddFunc(0x8b5551a4, cellAdecOpenEx); + cellAdec->AddFunc(0x847d2380, cellAdecClose); + cellAdec->AddFunc(0x487b613e, cellAdecStartSeq); + cellAdec->AddFunc(0xe2ea549b, cellAdecEndSeq); + cellAdec->AddFunc(0x1529e506, cellAdecDecodeAu); + cellAdec->AddFunc(0x97ff2af1, cellAdecGetPcm); + cellAdec->AddFunc(0xbd75f78b, cellAdecGetPcmItem); av_register_all(); avcodec_register_all(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp index 6a95c1c3a2..b170e3073e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp @@ -7,14 +7,13 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" -void cellAtrac_init(); -Module cellAtrac(0x0013, cellAtrac_init); +extern Module *cellAtrac = nullptr; #include "cellAtrac.h" int cellAtracSetDataAndGetMemSize(mem_ptr_t pHandle, u32 pucBufferAddr, u32 uiReadByte, u32 uiBufferByte, mem32_t puiWorkMemByte) { - cellAtrac.Error("cellAtracSetDataAndGetMemSize(pHandle=0x%x, pucBufferAddr=0x%x, uiReadByte=0x%x, uiBufferByte=0x%x, puiWorkMemByte_addr=0x%x)", + cellAtrac->Error("cellAtracSetDataAndGetMemSize(pHandle=0x%x, pucBufferAddr=0x%x, uiReadByte=0x%x, uiBufferByte=0x%x, puiWorkMemByte_addr=0x%x)", pHandle.GetAddr(), pucBufferAddr, uiReadByte, uiBufferByte, puiWorkMemByte.GetAddr()); puiWorkMemByte = 0x1000; // unproved @@ -23,7 +22,7 @@ int cellAtracSetDataAndGetMemSize(mem_ptr_t pHandle, u32 pucBuf int cellAtracCreateDecoder(mem_ptr_t pHandle, u32 pucWorkMem_addr, u32 uiPpuThreadPriority, u32 uiSpuThreadPriority) { - cellAtrac.Error("cellAtracCreateDecoder(pHandle=0x%x, pucWorkMem_addr=0x%x, uiPpuThreadPriority=%d, uiSpuThreadPriority=%d)", + cellAtrac->Error("cellAtracCreateDecoder(pHandle=0x%x, pucWorkMem_addr=0x%x, uiPpuThreadPriority=%d, uiSpuThreadPriority=%d)", pHandle.GetAddr(), pucWorkMem_addr, uiPpuThreadPriority, uiSpuThreadPriority); pHandle->data.pucWorkMem_addr = pucWorkMem_addr; @@ -32,7 +31,7 @@ int cellAtracCreateDecoder(mem_ptr_t pHandle, u32 pucWorkMem_ad int cellAtracCreateDecoderExt(mem_ptr_t pHandle, u32 pucWorkMem_addr, u32 uiPpuThreadPriority, mem_ptr_t pExtRes) { - cellAtrac.Error("cellAtracCreateDecoderExt(pHandle=0x%x, pucWorkMem_addr=0x%x, uiPpuThreadPriority=%d, pExtRes_addr=0x%x)", + cellAtrac->Error("cellAtracCreateDecoderExt(pHandle=0x%x, pucWorkMem_addr=0x%x, uiPpuThreadPriority=%d, pExtRes_addr=0x%x)", pHandle.GetAddr(), pucWorkMem_addr, uiPpuThreadPriority, pExtRes.GetAddr()); pHandle->data.pucWorkMem_addr = pucWorkMem_addr; @@ -41,13 +40,13 @@ int cellAtracCreateDecoderExt(mem_ptr_t pHandle, u32 pucWorkMem int cellAtracDeleteDecoder(mem_ptr_t pHandle) { - cellAtrac.Error("cellAtracDeleteDecoder(pHandle=0x%x)", pHandle.GetAddr()); + cellAtrac->Error("cellAtracDeleteDecoder(pHandle=0x%x)", pHandle.GetAddr()); return CELL_OK; } int cellAtracDecode(mem_ptr_t pHandle, u32 pfOutAddr, mem32_t puiSamples, mem32_t puiFinishflag, mem32_t piRemainFrame) { - cellAtrac.Error("cellAtracDecode(pHandle=0x%x, pfOutAddr=0x%x, puiSamples_addr=0x%x, puiFinishFlag_addr=0x%x, piRemainFrame_addr=0x%x)", + cellAtrac->Error("cellAtracDecode(pHandle=0x%x, pfOutAddr=0x%x, puiSamples_addr=0x%x, puiFinishFlag_addr=0x%x, piRemainFrame_addr=0x%x)", pHandle.GetAddr(), pfOutAddr, puiSamples.GetAddr(), puiFinishflag.GetAddr(), piRemainFrame.GetAddr()); puiSamples = 0; @@ -58,7 +57,7 @@ int cellAtracDecode(mem_ptr_t pHandle, u32 pfOutAddr, mem32_t p int cellAtracGetStreamDataInfo(mem_ptr_t pHandle, mem32_t ppucWritePointer, mem32_t puiWritableByte, mem32_t puiReadPosition) { - cellAtrac.Error("cellAtracGetStreamDataInfo(pHandle=0x%x, ppucWritePointer_addr=0x%x, puiWritableByte_addr=0x%x, puiReadPosition_addr=0x%x)", + cellAtrac->Error("cellAtracGetStreamDataInfo(pHandle=0x%x, ppucWritePointer_addr=0x%x, puiWritableByte_addr=0x%x, puiReadPosition_addr=0x%x)", pHandle.GetAddr(), ppucWritePointer.GetAddr(), puiWritableByte.GetAddr(), puiReadPosition.GetAddr()); ppucWritePointer = pHandle->data.pucWorkMem_addr; @@ -69,13 +68,13 @@ int cellAtracGetStreamDataInfo(mem_ptr_t pHandle, mem32_t ppucW int cellAtracAddStreamData(mem_ptr_t pHandle, u32 uiAddByte) { - cellAtrac.Error("cellAtracAddStreamData(pHandle=0x%x, uiAddByte=0x%x)", pHandle.GetAddr(), uiAddByte); + cellAtrac->Error("cellAtracAddStreamData(pHandle=0x%x, uiAddByte=0x%x)", pHandle.GetAddr(), uiAddByte); return CELL_OK; } int cellAtracGetRemainFrame(mem_ptr_t pHandle, mem32_t piRemainFrame) { - cellAtrac.Error("cellAtracGetRemainFrame(pHandle=0x%x, piRemainFrame_addr=0x%x)", pHandle.GetAddr(), piRemainFrame.GetAddr()); + cellAtrac->Error("cellAtracGetRemainFrame(pHandle=0x%x, piRemainFrame_addr=0x%x)", pHandle.GetAddr(), piRemainFrame.GetAddr()); piRemainFrame = CELL_ATRAC_ALLDATA_IS_ON_MEMORY; return CELL_OK; @@ -83,7 +82,7 @@ int cellAtracGetRemainFrame(mem_ptr_t pHandle, mem32_t piRemain int cellAtracGetVacantSize(mem_ptr_t pHandle, mem32_t puiVacantSize) { - cellAtrac.Error("cellAtracGetVacantSize(pHandle=0x%x, puiVacantSize_addr=0x%x)", pHandle.GetAddr(), puiVacantSize.GetAddr()); + cellAtrac->Error("cellAtracGetVacantSize(pHandle=0x%x, puiVacantSize_addr=0x%x)", pHandle.GetAddr(), puiVacantSize.GetAddr()); puiVacantSize = 0x1000; return CELL_OK; @@ -91,13 +90,13 @@ int cellAtracGetVacantSize(mem_ptr_t pHandle, mem32_t puiVacant int cellAtracIsSecondBufferNeeded(mem_ptr_t pHandle) { - cellAtrac.Error("cellAtracIsSecondBufferNeeded(pHandle=0x%x)", pHandle.GetAddr()); + cellAtrac->Error("cellAtracIsSecondBufferNeeded(pHandle=0x%x)", pHandle.GetAddr()); return CELL_OK; } int cellAtracGetSecondBufferInfo(mem_ptr_t pHandle, mem32_t puiReadPosition, mem32_t puiDataByte) { - cellAtrac.Error("cellAtracGetSecondBufferInfo(pHandle=0x%x, puiReadPosition_addr=0x%x, puiDataByte_addr=0x%x)", + cellAtrac->Error("cellAtracGetSecondBufferInfo(pHandle=0x%x, puiReadPosition_addr=0x%x, puiDataByte_addr=0x%x)", pHandle.GetAddr(), puiReadPosition.GetAddr(), puiDataByte.GetAddr()); puiReadPosition = 0; @@ -107,14 +106,14 @@ int cellAtracGetSecondBufferInfo(mem_ptr_t pHandle, mem32_t pui int cellAtracSetSecondBuffer(mem_ptr_t pHandle, u32 pucSecondBufferAddr, u32 uiSecondBufferByte) { - cellAtrac.Error("cellAtracSetSecondBuffer(pHandle=0x%x, pucSecondBufferAddr=0x%x, uiSecondBufferByte=0x%x)", + cellAtrac->Error("cellAtracSetSecondBuffer(pHandle=0x%x, pucSecondBufferAddr=0x%x, uiSecondBufferByte=0x%x)", pHandle.GetAddr(), pucSecondBufferAddr, uiSecondBufferByte); return CELL_OK; } int cellAtracGetChannel(mem_ptr_t pHandle, mem32_t puiChannel) { - cellAtrac.Error("cellAtracGetChannel(pHandle=0x%x, puiChannel_addr=0x%x)", pHandle.GetAddr(), puiChannel.GetAddr()); + cellAtrac->Error("cellAtracGetChannel(pHandle=0x%x, puiChannel_addr=0x%x)", pHandle.GetAddr(), puiChannel.GetAddr()); puiChannel = 2; return CELL_OK; @@ -122,7 +121,7 @@ int cellAtracGetChannel(mem_ptr_t pHandle, mem32_t puiChannel) int cellAtracGetMaxSample(mem_ptr_t pHandle, mem32_t puiMaxSample) { - cellAtrac.Error("cellAtracGetMaxSample(pHandle=0x%x, puiMaxSample_addr=0x%x)", pHandle.GetAddr(), puiMaxSample.GetAddr()); + cellAtrac->Error("cellAtracGetMaxSample(pHandle=0x%x, puiMaxSample_addr=0x%x)", pHandle.GetAddr(), puiMaxSample.GetAddr()); puiMaxSample = 512; return CELL_OK; @@ -130,7 +129,7 @@ int cellAtracGetMaxSample(mem_ptr_t pHandle, mem32_t puiMaxSamp int cellAtracGetNextSample(mem_ptr_t pHandle, mem32_t puiNextSample) { - cellAtrac.Error("cellAtracGetNextSample(pHandle=0x%x, puiNextSample_addr=0x%x)", pHandle.GetAddr(), puiNextSample.GetAddr()); + cellAtrac->Error("cellAtracGetNextSample(pHandle=0x%x, puiNextSample_addr=0x%x)", pHandle.GetAddr(), puiNextSample.GetAddr()); puiNextSample = 0; return CELL_OK; @@ -138,7 +137,7 @@ int cellAtracGetNextSample(mem_ptr_t pHandle, mem32_t puiNextSa int cellAtracGetSoundInfo(mem_ptr_t pHandle, mem32_t piEndSample, mem32_t piLoopStartSample, mem32_t piLoopEndSample) { - cellAtrac.Error("cellAtracGetSoundInfo(pHandle=0x%x, piEndSample_addr=0x%x, piLoopStartSample_addr=0x%x, piLoopEndSample_addr=0x%x)", + cellAtrac->Error("cellAtracGetSoundInfo(pHandle=0x%x, piEndSample_addr=0x%x, piLoopStartSample_addr=0x%x, piLoopEndSample_addr=0x%x)", pHandle.GetAddr(), piEndSample.GetAddr(), piLoopStartSample.GetAddr(), piLoopEndSample.GetAddr()); piEndSample = 0; @@ -149,7 +148,7 @@ int cellAtracGetSoundInfo(mem_ptr_t pHandle, mem32_t piEndSampl int cellAtracGetNextDecodePosition(mem_ptr_t pHandle, mem32_t puiSamplePosition) { - cellAtrac.Error("cellAtracGetNextDecodePosition(pHandle=0x%x, puiSamplePosition_addr=0x%x)", + cellAtrac->Error("cellAtracGetNextDecodePosition(pHandle=0x%x, puiSamplePosition_addr=0x%x)", pHandle.GetAddr(), puiSamplePosition.GetAddr()); puiSamplePosition = 0; @@ -158,7 +157,7 @@ int cellAtracGetNextDecodePosition(mem_ptr_t pHandle, mem32_t p int cellAtracGetBitrate(mem_ptr_t pHandle, mem32_t puiBitrate) { - cellAtrac.Error("cellAtracGetBitrate(pHandle=0x%x, puiBitrate_addr=0x%x)", + cellAtrac->Error("cellAtracGetBitrate(pHandle=0x%x, puiBitrate_addr=0x%x)", pHandle.GetAddr(), puiBitrate.GetAddr()); puiBitrate = 128; @@ -167,7 +166,7 @@ int cellAtracGetBitrate(mem_ptr_t pHandle, mem32_t puiBitrate) int cellAtracGetLoopInfo(mem_ptr_t pHandle, mem32_t piLoopNum, mem32_t puiLoopStatus) { - cellAtrac.Error("cellAtracGetLoopInfo(pHandle=0x%x, piLoopNum_addr=0x%x, puiLoopStatus_addr=0x%x)", + cellAtrac->Error("cellAtracGetLoopInfo(pHandle=0x%x, piLoopNum_addr=0x%x, puiLoopStatus_addr=0x%x)", pHandle.GetAddr(), piLoopNum.GetAddr(), puiLoopStatus.GetAddr()); piLoopNum = 0; @@ -177,13 +176,13 @@ int cellAtracGetLoopInfo(mem_ptr_t pHandle, mem32_t piLoopNum, int cellAtracSetLoopNum(mem_ptr_t pHandle, int iLoopNum) { - cellAtrac.Error("cellAtracSetLoopNum(pHandle=0x%x, iLoopNum=0x%x)", pHandle.GetAddr(), iLoopNum); + cellAtrac->Error("cellAtracSetLoopNum(pHandle=0x%x, iLoopNum=0x%x)", pHandle.GetAddr(), iLoopNum); return CELL_OK; } int cellAtracGetBufferInfoForResetting(mem_ptr_t pHandle, u32 uiSample, mem_ptr_t pBufferInfo) { - cellAtrac.Error("cellAtracGetBufferInfoForResetting(pHandle=0x%x, uiSample=0x%x, pBufferInfo_addr=0x%x)", + cellAtrac->Error("cellAtracGetBufferInfoForResetting(pHandle=0x%x, uiSample=0x%x, pBufferInfo_addr=0x%x)", pHandle.GetAddr(), uiSample, pBufferInfo.GetAddr()); pBufferInfo->pucWriteAddr = pHandle->data.pucWorkMem_addr; @@ -195,14 +194,14 @@ int cellAtracGetBufferInfoForResetting(mem_ptr_t pHandle, u32 u int cellAtracResetPlayPosition(mem_ptr_t pHandle, u32 uiSample, u32 uiWriteByte) { - cellAtrac.Error("cellAtracResetPlayPosition(pHandle=0x%x, uiSample=0x%x, uiWriteByte=0x%x)", + cellAtrac->Error("cellAtracResetPlayPosition(pHandle=0x%x, uiSample=0x%x, uiWriteByte=0x%x)", pHandle.GetAddr(), uiSample, uiWriteByte); return CELL_OK; } int cellAtracGetInternalErrorInfo(mem_ptr_t pHandle, mem32_t piResult) { - cellAtrac.Error("cellAtracGetInternalErrorInfo(pHandle=0x%x, piResult_addr=0x%x)", + cellAtrac->Error("cellAtracGetInternalErrorInfo(pHandle=0x%x, piResult_addr=0x%x)", pHandle.GetAddr(), piResult.GetAddr()); piResult = 0; @@ -211,34 +210,34 @@ int cellAtracGetInternalErrorInfo(mem_ptr_t pHandle, mem32_t pi void cellAtrac_init() { - cellAtrac.AddFunc(0x66afc68e, cellAtracSetDataAndGetMemSize); + cellAtrac->AddFunc(0x66afc68e, cellAtracSetDataAndGetMemSize); - cellAtrac.AddFunc(0xfa293e88, cellAtracCreateDecoder); - cellAtrac.AddFunc(0x2642d4cc, cellAtracCreateDecoderExt); - cellAtrac.AddFunc(0x761cb9be, cellAtracDeleteDecoder); + cellAtrac->AddFunc(0xfa293e88, cellAtracCreateDecoder); + cellAtrac->AddFunc(0x2642d4cc, cellAtracCreateDecoderExt); + cellAtrac->AddFunc(0x761cb9be, cellAtracDeleteDecoder); - cellAtrac.AddFunc(0x8eb0e65f, cellAtracDecode); + cellAtrac->AddFunc(0x8eb0e65f, cellAtracDecode); - cellAtrac.AddFunc(0x2bfff084, cellAtracGetStreamDataInfo); - cellAtrac.AddFunc(0x46cfc013, cellAtracAddStreamData); - cellAtrac.AddFunc(0xdfab73aa, cellAtracGetRemainFrame); - cellAtrac.AddFunc(0xc9a95fcb, cellAtracGetVacantSize); - cellAtrac.AddFunc(0x99efe171, cellAtracIsSecondBufferNeeded); - cellAtrac.AddFunc(0xbe07f05e, cellAtracGetSecondBufferInfo); - cellAtrac.AddFunc(0x06ddb53e, cellAtracSetSecondBuffer); + cellAtrac->AddFunc(0x2bfff084, cellAtracGetStreamDataInfo); + cellAtrac->AddFunc(0x46cfc013, cellAtracAddStreamData); + cellAtrac->AddFunc(0xdfab73aa, cellAtracGetRemainFrame); + cellAtrac->AddFunc(0xc9a95fcb, cellAtracGetVacantSize); + cellAtrac->AddFunc(0x99efe171, cellAtracIsSecondBufferNeeded); + cellAtrac->AddFunc(0xbe07f05e, cellAtracGetSecondBufferInfo); + cellAtrac->AddFunc(0x06ddb53e, cellAtracSetSecondBuffer); - cellAtrac.AddFunc(0x0f9667b6, cellAtracGetChannel); - cellAtrac.AddFunc(0x5f62d546, cellAtracGetMaxSample); - cellAtrac.AddFunc(0x4797d1ff, cellAtracGetNextSample); - cellAtrac.AddFunc(0xcf01d5d4, cellAtracGetSoundInfo); - cellAtrac.AddFunc(0x7b22e672, cellAtracGetNextDecodePosition); - cellAtrac.AddFunc(0x006016da, cellAtracGetBitrate); + cellAtrac->AddFunc(0x0f9667b6, cellAtracGetChannel); + cellAtrac->AddFunc(0x5f62d546, cellAtracGetMaxSample); + cellAtrac->AddFunc(0x4797d1ff, cellAtracGetNextSample); + cellAtrac->AddFunc(0xcf01d5d4, cellAtracGetSoundInfo); + cellAtrac->AddFunc(0x7b22e672, cellAtracGetNextDecodePosition); + cellAtrac->AddFunc(0x006016da, cellAtracGetBitrate); - cellAtrac.AddFunc(0xab6b6dbf, cellAtracGetLoopInfo); - cellAtrac.AddFunc(0x78ba5c41, cellAtracSetLoopNum); + cellAtrac->AddFunc(0xab6b6dbf, cellAtracGetLoopInfo); + cellAtrac->AddFunc(0x78ba5c41, cellAtracSetLoopNum); - cellAtrac.AddFunc(0x99fb73d1, cellAtracGetBufferInfoForResetting); - cellAtrac.AddFunc(0x7772eb2b, cellAtracResetPlayPosition); + cellAtrac->AddFunc(0x99fb73d1, cellAtracGetBufferInfoForResetting); + cellAtrac->AddFunc(0x7772eb2b, cellAtracResetPlayPosition); - cellAtrac.AddFunc(0xb5c11938, cellAtracGetInternalErrorInfo); + cellAtrac->AddFunc(0xb5c11938, cellAtracGetInternalErrorInfo); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index cc0afca787..1e9d2af4ad 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -11,8 +11,9 @@ #include "Emu/Audio/AudioManager.h" #include "Emu/Audio/AudioDumper.h" -void cellAudio_init(); -Module cellAudio(0x0011, cellAudio_init); +//void cellAudio_init(); +//Module cellAudio(0x0011, cellAudio_init); +extern Module *cellAudio = nullptr; static SMutexGeneral audioMutex; @@ -24,7 +25,7 @@ static const bool g_is_u16 = Ini.AudioConvertToU16.GetValue(); int cellAudioInit() { - cellAudio.Warning("cellAudioInit()"); + cellAudio->Warning("cellAudioInit()"); if (m_config.m_is_audio_initialized) { @@ -490,7 +491,7 @@ abort: int cellAudioQuit() { - cellAudio.Warning("cellAudioQuit()"); + cellAudio->Warning("cellAudioQuit()"); if (!m_config.m_is_audio_initialized) { @@ -517,7 +518,7 @@ int cellAudioQuit() int cellAudioPortOpen(mem_ptr_t audioParam, mem32_t portNum) { - cellAudio.Warning("cellAudioPortOpen(audioParam_addr=0x%x, portNum_addr=0x%x)", audioParam.GetAddr(), portNum.GetAddr()); + cellAudio->Warning("cellAudioPortOpen(audioParam_addr=0x%x, portNum_addr=0x%x)", audioParam.GetAddr(), portNum.GetAddr()); if(!audioParam.IsGood() || !portNum.IsGood()) { @@ -553,7 +554,7 @@ int cellAudioPortOpen(mem_ptr_t audioParam, mem32_t portNum) } portNum = i; - cellAudio.Warning("*** audio port opened(nChannel=%d, nBlock=%d, attr=0x%llx, level=%f): port = %d", + cellAudio->Warning("*** audio port opened(nChannel=%d, nBlock=%d, attr=0x%llx, level=%f): port = %d", port.channel, port.block, port.attr, port.level, i); port.m_is_audio_port_opened = true; @@ -570,7 +571,7 @@ int cellAudioPortOpen(mem_ptr_t audioParam, mem32_t portNum) int cellAudioGetPortConfig(u32 portNum, mem_ptr_t portConfig) { - cellAudio.Warning("cellAudioGetPortConfig(portNum=0x%x, portConfig_addr=0x%x)", portNum, portConfig.GetAddr()); + cellAudio->Warning("cellAudioGetPortConfig(portNum=0x%x, portConfig_addr=0x%x)", portNum, portConfig.GetAddr()); if (!portConfig.IsGood() || portNum >= m_config.AUDIO_PORT_COUNT) { @@ -598,7 +599,7 @@ int cellAudioGetPortConfig(u32 portNum, mem_ptr_t portConfi portConfig->portAddr = m_config.m_buffer + (128 * 1024 * portNum); // 0x20020000 portConfig->readIndexAddr = m_config.m_indexes + (sizeof(u64) * portNum); // 0x20010010 on ps3 - cellAudio.Log("*** port config: nChannel=%d, nBlock=%d, portSize=0x%x, portAddr=0x%x, readIndexAddr=0x%x", + cellAudio->Log("*** port config: nChannel=%d, nBlock=%d, portSize=0x%x, portAddr=0x%x, readIndexAddr=0x%x", (u32)portConfig->nChannel, (u32)portConfig->nBlock, (u32)portConfig->portSize, (u32)portConfig->portAddr, (u32)portConfig->readIndexAddr); // portAddr - readIndexAddr == 0xFFF0 on ps3 @@ -607,7 +608,7 @@ int cellAudioGetPortConfig(u32 portNum, mem_ptr_t portConfi int cellAudioPortStart(u32 portNum) { - cellAudio.Warning("cellAudioPortStart(portNum=0x%x)", portNum); + cellAudio->Warning("cellAudioPortStart(portNum=0x%x)", portNum); if (portNum >= m_config.AUDIO_PORT_COUNT) { @@ -631,7 +632,7 @@ int cellAudioPortStart(u32 portNum) int cellAudioPortClose(u32 portNum) { - cellAudio.Warning("cellAudioPortClose(portNum=0x%x)", portNum); + cellAudio->Warning("cellAudioPortClose(portNum=0x%x)", portNum); if (portNum >= m_config.AUDIO_PORT_COUNT) { @@ -651,7 +652,7 @@ int cellAudioPortClose(u32 portNum) int cellAudioPortStop(u32 portNum) { - cellAudio.Warning("cellAudioPortStop(portNum=0x%x)",portNum); + cellAudio->Warning("cellAudioPortStop(portNum=0x%x)",portNum); if (portNum >= m_config.AUDIO_PORT_COUNT) { @@ -674,7 +675,7 @@ int cellAudioPortStop(u32 portNum) int cellAudioGetPortTimestamp(u32 portNum, u64 tag, mem64_t stamp) { - cellAudio.Log("cellAudioGetPortTimestamp(portNum=0x%x, tag=0x%llx, stamp_addr=0x%x)", portNum, tag, stamp.GetAddr()); + cellAudio->Log("cellAudioGetPortTimestamp(portNum=0x%x, tag=0x%llx, stamp_addr=0x%x)", portNum, tag, stamp.GetAddr()); if (portNum >= m_config.AUDIO_PORT_COUNT) { @@ -702,7 +703,7 @@ int cellAudioGetPortTimestamp(u32 portNum, u64 tag, mem64_t stamp) int cellAudioGetPortBlockTag(u32 portNum, u64 blockNo, mem64_t tag) { - cellAudio.Log("cellAudioGetPortBlockTag(portNum=0x%x, blockNo=0x%llx, tag_addr=0x%x)", portNum, blockNo, tag.GetAddr()); + cellAudio->Log("cellAudioGetPortBlockTag(portNum=0x%x, blockNo=0x%llx, tag_addr=0x%x)", portNum, blockNo, tag.GetAddr()); if (portNum >= m_config.AUDIO_PORT_COUNT) { @@ -723,7 +724,7 @@ int cellAudioGetPortBlockTag(u32 portNum, u64 blockNo, mem64_t tag) if (blockNo >= port.block) { - cellAudio.Error("cellAudioGetPortBlockTag: wrong blockNo(%lld)", blockNo); + cellAudio->Error("cellAudioGetPortBlockTag: wrong blockNo(%lld)", blockNo); return CELL_AUDIO_ERROR_PARAM; } @@ -746,14 +747,14 @@ int cellAudioGetPortBlockTag(u32 portNum, u64 blockNo, mem64_t tag) int cellAudioSetPortLevel(u32 portNum, float level) { - cellAudio.Error("cellAudioSetPortLevel(portNum=0x%x, level=%f)", portNum, level); + cellAudio->Error("cellAudioSetPortLevel(portNum=0x%x, level=%f)", portNum, level); return CELL_OK; } // Utility Functions int cellAudioCreateNotifyEventQueue(mem32_t id, mem64_t key) { - cellAudio.Warning("cellAudioCreateNotifyEventQueue(id_addr=0x%x, key_addr=0x%x)", id.GetAddr(), key.GetAddr()); + cellAudio->Warning("cellAudioCreateNotifyEventQueue(id_addr=0x%x, key_addr=0x%x)", id.GetAddr(), key.GetAddr()); SMutexGeneralLocker lock(audioMutex); @@ -773,7 +774,7 @@ int cellAudioCreateNotifyEventQueue(mem32_t id, mem64_t key) return CELL_AUDIO_ERROR_EVENT_QUEUE; } - id = cellAudio.GetNewId(eq); + id = cellAudio->GetNewId(eq); key = event_key; return CELL_OK; @@ -781,13 +782,13 @@ int cellAudioCreateNotifyEventQueue(mem32_t id, mem64_t key) int cellAudioCreateNotifyEventQueueEx(mem32_t id, mem64_t key, u32 iFlags) { - cellAudio.Error("cellAudioCreateNotifyEventQueueEx(id_addr=0x%x, key_addr=0x%x, iFlags=0x%x)", id.GetAddr(), key.GetAddr(), iFlags); + cellAudio->Error("cellAudioCreateNotifyEventQueueEx(id_addr=0x%x, key_addr=0x%x, iFlags=0x%x)", id.GetAddr(), key.GetAddr(), iFlags); return CELL_OK; } int cellAudioSetNotifyEventQueue(u64 key) { - cellAudio.Warning("cellAudioSetNotifyEventQueue(key=0x%llx)", key); + cellAudio->Warning("cellAudioSetNotifyEventQueue(key=0x%llx)", key); SMutexGeneralLocker lock(audioMutex); @@ -813,13 +814,13 @@ int cellAudioSetNotifyEventQueue(u64 key) int cellAudioSetNotifyEventQueueEx(u64 key, u32 iFlags) { - cellAudio.Error("cellAudioSetNotifyEventQueueEx(key=0x%llx, iFlags=0x%x)", key, iFlags); + cellAudio->Error("cellAudioSetNotifyEventQueueEx(key=0x%llx, iFlags=0x%x)", key, iFlags); return CELL_OK; } int cellAudioRemoveNotifyEventQueue(u64 key) { - cellAudio.Warning("cellAudioRemoveNotifyEventQueue(key=0x%llx)", key); + cellAudio->Warning("cellAudioRemoveNotifyEventQueue(key=0x%llx)", key); SMutexGeneralLocker lock(audioMutex); @@ -853,68 +854,68 @@ int cellAudioRemoveNotifyEventQueue(u64 key) int cellAudioRemoveNotifyEventQueueEx(u64 key, u32 iFlags) { - cellAudio.Error("cellAudioRemoveNotifyEventQueueEx(key=0x%llx, iFlags=0x%x)", key, iFlags); + cellAudio->Error("cellAudioRemoveNotifyEventQueueEx(key=0x%llx, iFlags=0x%x)", key, iFlags); return CELL_OK; } int cellAudioAddData(u32 portNum, mem32_t src, u32 samples, float volume) { - cellAudio.Error("cellAudioAddData(portNum=0x%x, src_addr=0x%x, samples=%d, volume=%f)", portNum, src.GetAddr(), samples, volume); + cellAudio->Error("cellAudioAddData(portNum=0x%x, src_addr=0x%x, samples=%d, volume=%f)", portNum, src.GetAddr(), samples, volume); return CELL_OK; } int cellAudioAdd2chData(u32 portNum, mem32_t src, u32 samples, float volume) { - cellAudio.Error("cellAudioAdd2chData(portNum=0x%x, src_addr=0x%x, samples=%d, volume=%f)", portNum, src.GetAddr(), samples, volume); + cellAudio->Error("cellAudioAdd2chData(portNum=0x%x, src_addr=0x%x, samples=%d, volume=%f)", portNum, src.GetAddr(), samples, volume); return CELL_OK; } int cellAudioAdd6chData(u32 portNum, mem32_t src, float volume) { - cellAudio.Error("cellAudioAdd6chData(portNum=0x%x, src_addr=0x%x, volume=%f)", portNum, src.GetAddr(), volume); + cellAudio->Error("cellAudioAdd6chData(portNum=0x%x, src_addr=0x%x, volume=%f)", portNum, src.GetAddr(), volume); return CELL_OK; } int cellAudioMiscSetAccessoryVolume(u32 devNum, float volume) { - cellAudio.Error("cellAudioMiscSetAccessoryVolume(devNum=0x%x, volume=%f)", devNum, volume); + cellAudio->Error("cellAudioMiscSetAccessoryVolume(devNum=0x%x, volume=%f)", devNum, volume); return CELL_OK; } int cellAudioSendAck(u64 data3) { - cellAudio.Error("cellAudioSendAck(data3=0x%llx)", data3); + cellAudio->Error("cellAudioSendAck(data3=0x%llx)", data3); return CELL_OK; } int cellAudioSetPersonalDevice(int iPersonalStream, int iDevice) { - cellAudio.Error("cellAudioSetPersonalDevice(iPersonalStream=0x%x, iDevice=0x%x)", iPersonalStream, iDevice); + cellAudio->Error("cellAudioSetPersonalDevice(iPersonalStream=0x%x, iDevice=0x%x)", iPersonalStream, iDevice); return CELL_OK; } int cellAudioUnsetPersonalDevice(int iPersonalStream) { - cellAudio.Error("cellAudioUnsetPersonalDevice(iPersonalStream=0x%x)", iPersonalStream); + cellAudio->Error("cellAudioUnsetPersonalDevice(iPersonalStream=0x%x)", iPersonalStream); return CELL_OK; } void cellAudio_init() { - cellAudio.AddFunc(0x0b168f92, cellAudioInit); - cellAudio.AddFunc(0x4129fe2d, cellAudioPortClose); - cellAudio.AddFunc(0x5b1e2c73, cellAudioPortStop); - cellAudio.AddFunc(0x74a66af0, cellAudioGetPortConfig); - cellAudio.AddFunc(0x89be28f2, cellAudioPortStart); - cellAudio.AddFunc(0xca5ac370, cellAudioQuit); - cellAudio.AddFunc(0xcd7bc431, cellAudioPortOpen); - cellAudio.AddFunc(0x56dfe179, cellAudioSetPortLevel); - cellAudio.AddFunc(0x04af134e, cellAudioCreateNotifyEventQueue); - cellAudio.AddFunc(0x31211f6b, cellAudioMiscSetAccessoryVolume); - cellAudio.AddFunc(0x377e0cd9, cellAudioSetNotifyEventQueue); - cellAudio.AddFunc(0x4109d08c, cellAudioGetPortTimestamp); - cellAudio.AddFunc(0x9e4b1db8, cellAudioAdd2chData); - cellAudio.AddFunc(0xdab029aa, cellAudioAddData); - cellAudio.AddFunc(0xe4046afe, cellAudioGetPortBlockTag); - cellAudio.AddFunc(0xff3626fd, cellAudioRemoveNotifyEventQueue); + cellAudio->AddFunc(0x0b168f92, cellAudioInit); + cellAudio->AddFunc(0x4129fe2d, cellAudioPortClose); + cellAudio->AddFunc(0x5b1e2c73, cellAudioPortStop); + cellAudio->AddFunc(0x74a66af0, cellAudioGetPortConfig); + cellAudio->AddFunc(0x89be28f2, cellAudioPortStart); + cellAudio->AddFunc(0xca5ac370, cellAudioQuit); + cellAudio->AddFunc(0xcd7bc431, cellAudioPortOpen); + cellAudio->AddFunc(0x56dfe179, cellAudioSetPortLevel); + cellAudio->AddFunc(0x04af134e, cellAudioCreateNotifyEventQueue); + cellAudio->AddFunc(0x31211f6b, cellAudioMiscSetAccessoryVolume); + cellAudio->AddFunc(0x377e0cd9, cellAudioSetNotifyEventQueue); + cellAudio->AddFunc(0x4109d08c, cellAudioGetPortTimestamp); + cellAudio->AddFunc(0x9e4b1db8, cellAudioAdd2chData); + cellAudio->AddFunc(0xdab029aa, cellAudioAddData); + cellAudio->AddFunc(0xe4046afe, cellAudioGetPortBlockTag); + cellAudio->AddFunc(0xff3626fd, cellAudioRemoveNotifyEventQueue); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp index 90ba783cbf..80bea81089 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp @@ -83,4 +83,4 @@ void cellCelpEnc_init() cellCelpEnc.AddFunc(0x9b244272, cellCelpEncWaitForOutput); cellCelpEnc.AddFunc(0x3773692f, cellCelpEncGetAu); } -#endif +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 9a636263e0..0abaed44aa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -10,8 +10,9 @@ #include "cellPamf.h" #include "cellDmux.h" -void cellDmux_init(); -Module cellDmux(0x0007, cellDmux_init); +//void cellDmux_init(); +//Module cellDmux(0x0007, cellDmux_init); +Module *cellDmux = nullptr; void dmuxQueryAttr(u32 info_addr /* may be 0 */, mem_ptr_t attr) { @@ -28,7 +29,7 @@ void dmuxQueryEsAttr(u32 info_addr /* may be 0 */, const mem_ptr_tmemSize = 0x8000; // 0x73d9 from ps3 - cellDmux.Warning("*** filter(0x%x, 0x%x, 0x%x, 0x%x)", (u32)esFilterId->filterIdMajor, (u32)esFilterId->filterIdMinor, + cellDmux->Warning("*** filter(0x%x, 0x%x, 0x%x, 0x%x)", (u32)esFilterId->filterIdMajor, (u32)esFilterId->filterIdMinor, (u32)esFilterId->supplementalInfo1, (u32)esFilterId->supplementalInfo2); } @@ -38,7 +39,7 @@ u32 dmuxOpen(Demuxer* data) dmux.dmuxCb = &Emu.GetCPU().AddThread(CPU_THREAD_PPU); - u32 dmux_id = cellDmux.GetNewId(data); + u32 dmux_id = cellDmux->GetNewId(data); dmux.id = dmux_id; @@ -463,7 +464,7 @@ u32 dmuxOpen(Demuxer* data) int cellDmuxQueryAttr(const mem_ptr_t demuxerType, mem_ptr_t demuxerAttr) { - cellDmux.Warning("cellDmuxQueryAttr(demuxerType_addr=0x%x, demuxerAttr_addr=0x%x)", demuxerType.GetAddr(), demuxerAttr.GetAddr()); + cellDmux->Warning("cellDmuxQueryAttr(demuxerType_addr=0x%x, demuxerAttr_addr=0x%x)", demuxerType.GetAddr(), demuxerAttr.GetAddr()); if (!demuxerType.IsGood() || !demuxerAttr.IsGood()) { @@ -481,7 +482,7 @@ int cellDmuxQueryAttr(const mem_ptr_t demuxerType, mem_ptr_t demuxerType2, mem_ptr_t demuxerAttr) { - cellDmux.Warning("cellDmuxQueryAttr2(demuxerType2_addr=0x%x, demuxerAttr_addr=0x%x)", demuxerType2.GetAddr(), demuxerAttr.GetAddr()); + cellDmux->Warning("cellDmuxQueryAttr2(demuxerType2_addr=0x%x, demuxerAttr_addr=0x%x)", demuxerType2.GetAddr(), demuxerAttr.GetAddr()); if (!demuxerType2.IsGood() || !demuxerAttr.IsGood()) { @@ -500,7 +501,7 @@ int cellDmuxQueryAttr2(const mem_ptr_t demuxerType2, mem_ptr_t demuxerType, const mem_ptr_t demuxerResource, const mem_ptr_t demuxerCb, mem32_t demuxerHandle) { - cellDmux.Warning("cellDmuxOpen(demuxerType_addr=0x%x, demuxerResource_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", + cellDmux->Warning("cellDmuxOpen(demuxerType_addr=0x%x, demuxerResource_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType.GetAddr(), demuxerResource.GetAddr(), demuxerCb.GetAddr(), demuxerHandle.GetAddr()); if (!demuxerType.IsGood() || !demuxerResource.IsGood() || !demuxerCb.IsGood() || !demuxerHandle.IsGood()) @@ -528,7 +529,7 @@ int cellDmuxOpen(const mem_ptr_t demuxerType, const mem_ptr_t demuxerType, const mem_ptr_t demuxerResourceEx, const mem_ptr_t demuxerCb, mem32_t demuxerHandle) { - cellDmux.Warning("cellDmuxOpenEx(demuxerType_addr=0x%x, demuxerResourceEx_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", + cellDmux->Warning("cellDmuxOpenEx(demuxerType_addr=0x%x, demuxerResourceEx_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType.GetAddr(), demuxerResourceEx.GetAddr(), demuxerCb.GetAddr(), demuxerHandle.GetAddr()); if (!demuxerType.IsGood() || !demuxerResourceEx.IsGood() || !demuxerCb.IsGood() || !demuxerHandle.IsGood()) @@ -556,7 +557,7 @@ int cellDmuxOpenEx(const mem_ptr_t demuxerType, const mem_ptr_t demuxerType2, const mem_ptr_t demuxerResource2, const mem_ptr_t demuxerCb, mem32_t demuxerHandle) { - cellDmux.Warning("cellDmuxOpen2(demuxerType2_addr=0x%x, demuxerResource2_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", + cellDmux->Warning("cellDmuxOpen2(demuxerType2_addr=0x%x, demuxerResource2_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType2.GetAddr(), demuxerResource2.GetAddr(), demuxerCb.GetAddr(), demuxerHandle.GetAddr()); if (!demuxerType2.IsGood() || !demuxerResource2.IsGood() || !demuxerCb.IsGood() || !demuxerHandle.IsGood()) @@ -583,7 +584,7 @@ int cellDmuxOpen2(const mem_ptr_t demuxerType2, const mem_ptr_tWarning("cellDmuxClose(demuxerHandle=%d)", demuxerHandle); Demuxer* dmux; if (!Emu.GetIdManager().GetIDData(demuxerHandle, dmux)) @@ -611,7 +612,7 @@ int cellDmuxClose(u32 demuxerHandle) int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize, bool discontinuity, u64 userData) { - cellDmux.Log("cellDmuxSetStream(demuxerHandle=%d, streamAddress=0x%x, streamSize=%d, discontinuity=%d, userData=0x%llx", + cellDmux->Log("cellDmuxSetStream(demuxerHandle=%d, streamAddress=0x%x, streamSize=%d, discontinuity=%d, userData=0x%llx", demuxerHandle, streamAddress, streamSize, discontinuity, userData); Demuxer* dmux; @@ -661,7 +662,7 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize int cellDmuxResetStream(u32 demuxerHandle) { - cellDmux.Warning("cellDmuxResetStream(demuxerHandle=%d)", demuxerHandle); + cellDmux->Warning("cellDmuxResetStream(demuxerHandle=%d)", demuxerHandle); Demuxer* dmux; if (!Emu.GetIdManager().GetIDData(demuxerHandle, dmux)) @@ -676,7 +677,7 @@ int cellDmuxResetStream(u32 demuxerHandle) int cellDmuxResetStreamAndWaitDone(u32 demuxerHandle) { - cellDmux.Warning("cellDmuxResetStreamAndWaitDone(demuxerHandle=%d)", demuxerHandle); + cellDmux->Warning("cellDmuxResetStreamAndWaitDone(demuxerHandle=%d)", demuxerHandle); Demuxer* dmux; if (!Emu.GetIdManager().GetIDData(demuxerHandle, dmux)) @@ -703,7 +704,7 @@ int cellDmuxResetStreamAndWaitDone(u32 demuxerHandle) int cellDmuxQueryEsAttr(const mem_ptr_t demuxerType, const mem_ptr_t esFilterId, const u32 esSpecificInfo_addr, mem_ptr_t esAttr) { - cellDmux.Warning("cellDmuxQueryEsAttr(demuxerType_addr=0x%x, esFilterId_addr=0x%x, esSpecificInfo_addr=0x%x, esAttr_addr=0x%x)", + cellDmux->Warning("cellDmuxQueryEsAttr(demuxerType_addr=0x%x, esFilterId_addr=0x%x, esSpecificInfo_addr=0x%x, esAttr_addr=0x%x)", demuxerType.GetAddr(), esFilterId.GetAddr(), esSpecificInfo_addr, esAttr.GetAddr()); if (!demuxerType.IsGood() || !esFilterId.IsGood() || !esAttr.IsGood()) @@ -713,7 +714,7 @@ int cellDmuxQueryEsAttr(const mem_ptr_t demuxerType, const mem_ptr if (!Memory.IsGoodAddr(esSpecificInfo_addr, 12)) { - cellDmux.Error("cellDmuxQueryEsAttr: invalid specific info addr (0x%x)", esSpecificInfo_addr); + cellDmux->Error("cellDmuxQueryEsAttr: invalid specific info addr (0x%x)", esSpecificInfo_addr); return CELL_DMUX_ERROR_FATAL; } @@ -731,7 +732,7 @@ int cellDmuxQueryEsAttr(const mem_ptr_t demuxerType, const mem_ptr int cellDmuxQueryEsAttr2(const mem_ptr_t demuxerType2, const mem_ptr_t esFilterId, const u32 esSpecificInfo_addr, mem_ptr_t esAttr) { - cellDmux.Warning("cellDmuxQueryEsAttr2(demuxerType2_addr=0x%x, esFilterId_addr=0x%x, esSpecificInfo_addr=0x%x, esAttr_addr=0x%x)", + cellDmux->Warning("cellDmuxQueryEsAttr2(demuxerType2_addr=0x%x, esFilterId_addr=0x%x, esSpecificInfo_addr=0x%x, esAttr_addr=0x%x)", demuxerType2.GetAddr(), esFilterId.GetAddr(), esSpecificInfo_addr, esAttr.GetAddr()); if (!demuxerType2.IsGood() || !esFilterId.IsGood() || !esAttr.IsGood()) @@ -741,7 +742,7 @@ int cellDmuxQueryEsAttr2(const mem_ptr_t demuxerType2, const mem_ if (!Memory.IsGoodAddr(esSpecificInfo_addr, 12)) { - cellDmux.Error("cellDmuxQueryEsAttr2: invalid specific info addr (0x%x)", esSpecificInfo_addr); + cellDmux->Error("cellDmuxQueryEsAttr2: invalid specific info addr (0x%x)", esSpecificInfo_addr); return CELL_DMUX_ERROR_FATAL; } @@ -760,7 +761,7 @@ int cellDmuxEnableEs(u32 demuxerHandle, const mem_ptr_t esF const mem_ptr_t esResourceInfo, const mem_ptr_t esCb, const u32 esSpecificInfo_addr, mem32_t esHandle) { - cellDmux.Warning("cellDmuxEnableEs(demuxerHandle=%d, esFilterId_addr=0x%x, esResourceInfo_addr=0x%x, esCb_addr=0x%x, " + cellDmux->Warning("cellDmuxEnableEs(demuxerHandle=%d, esFilterId_addr=0x%x, esResourceInfo_addr=0x%x, esCb_addr=0x%x, " "esSpecificInfo_addr=0x%x, esHandle_addr=0x%x)", demuxerHandle, esFilterId.GetAddr(), esResourceInfo.GetAddr(), esCb.GetAddr(), esSpecificInfo_addr, esHandle.GetAddr()); @@ -771,7 +772,7 @@ int cellDmuxEnableEs(u32 demuxerHandle, const mem_ptr_t esF if (!Memory.IsGoodAddr(esSpecificInfo_addr, 12)) { - cellDmux.Error("cellDmuxEnableEs: invalid specific info addr (0x%x)", esSpecificInfo_addr); + cellDmux->Error("cellDmuxEnableEs: invalid specific info addr (0x%x)", esSpecificInfo_addr); return CELL_DMUX_ERROR_FATAL; } @@ -792,11 +793,11 @@ int cellDmuxEnableEs(u32 demuxerHandle, const mem_ptr_t esF esFilterId->filterIdMajor, esFilterId->filterIdMinor, esFilterId->supplementalInfo1, esFilterId->supplementalInfo2, esCb->cbEsMsgFunc, esCb->cbArg_addr, esSpecificInfo_addr); - u32 id = cellDmux.GetNewId(es); + u32 id = cellDmux->GetNewId(es); es->id = id; esHandle = id; - cellDmux.Warning("*** New ES(dmux=%d, addr=0x%x, size=0x%x, filter(0x%x, 0x%x, 0x%x, 0x%x), cb=0x%x(arg=0x%x), spec=0x%x): id = %d", + cellDmux->Warning("*** New ES(dmux=%d, addr=0x%x, size=0x%x, filter(0x%x, 0x%x, 0x%x, 0x%x), cb=0x%x(arg=0x%x), spec=0x%x): id = %d", demuxerHandle, es->memAddr, es->memSize, es->fidMajor, es->fidMinor, es->sup1, es->sup2, (u32)esCb->cbEsMsgFunc, es->cbArg, es->spec, id); DemuxerTask task(dmuxEnableEs); @@ -809,7 +810,7 @@ int cellDmuxEnableEs(u32 demuxerHandle, const mem_ptr_t esF int cellDmuxDisableEs(u32 esHandle) { - cellDmux.Warning("cellDmuxDisableEs(esHandle=0x%x)", esHandle); + cellDmux->Warning("cellDmuxDisableEs(esHandle=0x%x)", esHandle); ElementaryStream* es; if (!Emu.GetIdManager().GetIDData(esHandle, es)) @@ -827,7 +828,7 @@ int cellDmuxDisableEs(u32 esHandle) int cellDmuxResetEs(u32 esHandle) { - cellDmux.Log("cellDmuxResetEs(esHandle=0x%x)", esHandle); + cellDmux->Log("cellDmuxResetEs(esHandle=0x%x)", esHandle); ElementaryStream* es; if (!Emu.GetIdManager().GetIDData(esHandle, es)) @@ -845,7 +846,7 @@ int cellDmuxResetEs(u32 esHandle) int cellDmuxGetAu(u32 esHandle, mem32_t auInfo_ptr, mem32_t auSpecificInfo_ptr) { - cellDmux.Log("cellDmuxGetAu(esHandle=0x%x, auInfo_ptr_addr=0x%x, auSpecificInfo_ptr_addr=0x%x)", + cellDmux->Log("cellDmuxGetAu(esHandle=0x%x, auInfo_ptr_addr=0x%x, auSpecificInfo_ptr_addr=0x%x)", esHandle, auInfo_ptr.GetAddr(), auSpecificInfo_ptr.GetAddr()); ElementaryStream* es; @@ -873,7 +874,7 @@ int cellDmuxGetAu(u32 esHandle, mem32_t auInfo_ptr, mem32_t auSpecificInfo_ptr) int cellDmuxPeekAu(u32 esHandle, mem32_t auInfo_ptr, mem32_t auSpecificInfo_ptr) { - cellDmux.Log("cellDmuxPeekAu(esHandle=0x%x, auInfo_ptr_addr=0x%x, auSpecificInfo_ptr_addr=0x%x)", + cellDmux->Log("cellDmuxPeekAu(esHandle=0x%x, auInfo_ptr_addr=0x%x, auSpecificInfo_ptr_addr=0x%x)", esHandle, auInfo_ptr.GetAddr(), auSpecificInfo_ptr.GetAddr()); ElementaryStream* es; @@ -901,7 +902,7 @@ int cellDmuxPeekAu(u32 esHandle, mem32_t auInfo_ptr, mem32_t auSpecificInfo_ptr) int cellDmuxGetAuEx(u32 esHandle, mem32_t auInfoEx_ptr, mem32_t auSpecificInfo_ptr) { - cellDmux.Log("cellDmuxGetAuEx(esHandle=0x%x, auInfoEx_ptr_addr=0x%x, auSpecificInfo_ptr_addr=0x%x)", + cellDmux->Log("cellDmuxGetAuEx(esHandle=0x%x, auInfoEx_ptr_addr=0x%x, auSpecificInfo_ptr_addr=0x%x)", esHandle, auInfoEx_ptr.GetAddr(), auSpecificInfo_ptr.GetAddr()); ElementaryStream* es; @@ -929,7 +930,7 @@ int cellDmuxGetAuEx(u32 esHandle, mem32_t auInfoEx_ptr, mem32_t auSpecificInfo_p int cellDmuxPeekAuEx(u32 esHandle, mem32_t auInfoEx_ptr, mem32_t auSpecificInfo_ptr) { - cellDmux.Log("cellDmuxPeekAuEx(esHandle=0x%x, auInfoEx_ptr_addr=0x%x, auSpecificInfo_ptr_addr=0x%x)", + cellDmux->Log("cellDmuxPeekAuEx(esHandle=0x%x, auInfoEx_ptr_addr=0x%x, auSpecificInfo_ptr_addr=0x%x)", esHandle, auInfoEx_ptr.GetAddr(), auSpecificInfo_ptr.GetAddr()); ElementaryStream* es; @@ -957,7 +958,7 @@ int cellDmuxPeekAuEx(u32 esHandle, mem32_t auInfoEx_ptr, mem32_t auSpecificInfo_ int cellDmuxReleaseAu(u32 esHandle) { - cellDmux.Log("cellDmuxReleaseAu(esHandle=0x%x)", esHandle); + cellDmux->Log("cellDmuxReleaseAu(esHandle=0x%x)", esHandle); ElementaryStream* es; if (!Emu.GetIdManager().GetIDData(esHandle, es)) @@ -974,7 +975,7 @@ int cellDmuxReleaseAu(u32 esHandle) int cellDmuxFlushEs(u32 esHandle) { - cellDmux.Warning("cellDmuxFlushEs(esHandle=0x%x)", esHandle); + cellDmux->Warning("cellDmuxFlushEs(esHandle=0x%x)", esHandle); ElementaryStream* es; if (!Emu.GetIdManager().GetIDData(esHandle, es)) @@ -992,24 +993,24 @@ int cellDmuxFlushEs(u32 esHandle) void cellDmux_init() { - cellDmux.AddFunc(0xa2d4189b, cellDmuxQueryAttr); - cellDmux.AddFunc(0x3f76e3cd, cellDmuxQueryAttr2); - cellDmux.AddFunc(0x68492de9, cellDmuxOpen); - cellDmux.AddFunc(0xf6c23560, cellDmuxOpenEx); - cellDmux.AddFunc(0x11bc3a6c, cellDmuxOpen2); - cellDmux.AddFunc(0x8c692521, cellDmuxClose); - cellDmux.AddFunc(0x04e7499f, cellDmuxSetStream); - cellDmux.AddFunc(0x5d345de9, cellDmuxResetStream); - cellDmux.AddFunc(0xccff1284, cellDmuxResetStreamAndWaitDone); - cellDmux.AddFunc(0x02170d1a, cellDmuxQueryEsAttr); - cellDmux.AddFunc(0x52911bcf, cellDmuxQueryEsAttr2); - cellDmux.AddFunc(0x7b56dc3f, cellDmuxEnableEs); - cellDmux.AddFunc(0x05371c8d, cellDmuxDisableEs); - cellDmux.AddFunc(0x21d424f0, cellDmuxResetEs); - cellDmux.AddFunc(0x42c716b5, cellDmuxGetAu); - cellDmux.AddFunc(0x2750c5e0, cellDmuxPeekAu); - cellDmux.AddFunc(0x2c9a5857, cellDmuxGetAuEx); - cellDmux.AddFunc(0x002e8da2, cellDmuxPeekAuEx); - cellDmux.AddFunc(0x24ea6474, cellDmuxReleaseAu); - cellDmux.AddFunc(0xebb3b2bd, cellDmuxFlushEs); + cellDmux->AddFunc(0xa2d4189b, cellDmuxQueryAttr); + cellDmux->AddFunc(0x3f76e3cd, cellDmuxQueryAttr2); + cellDmux->AddFunc(0x68492de9, cellDmuxOpen); + cellDmux->AddFunc(0xf6c23560, cellDmuxOpenEx); + cellDmux->AddFunc(0x11bc3a6c, cellDmuxOpen2); + cellDmux->AddFunc(0x8c692521, cellDmuxClose); + cellDmux->AddFunc(0x04e7499f, cellDmuxSetStream); + cellDmux->AddFunc(0x5d345de9, cellDmuxResetStream); + cellDmux->AddFunc(0xccff1284, cellDmuxResetStreamAndWaitDone); + cellDmux->AddFunc(0x02170d1a, cellDmuxQueryEsAttr); + cellDmux->AddFunc(0x52911bcf, cellDmuxQueryEsAttr2); + cellDmux->AddFunc(0x7b56dc3f, cellDmuxEnableEs); + cellDmux->AddFunc(0x05371c8d, cellDmuxDisableEs); + cellDmux->AddFunc(0x21d424f0, cellDmuxResetEs); + cellDmux->AddFunc(0x42c716b5, cellDmuxGetAu); + cellDmux->AddFunc(0x2750c5e0, cellDmuxPeekAu); + cellDmux->AddFunc(0x2c9a5857, cellDmuxGetAuEx); + cellDmux->AddFunc(0x002e8da2, cellDmuxPeekAuEx); + cellDmux->AddFunc(0x24ea6474, cellDmuxReleaseAu); + cellDmux->AddFunc(0xebb3b2bd, cellDmuxFlushEs); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp index 9d6bb5eb5e..a64a9a914f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp @@ -360,4 +360,4 @@ void cellFiber_init() cellFiber.AddFunc(0xea6dc1ad, cellFiberPpuUtilWorkerControlCheckFlags); cellFiber.AddFunc(0xf2ccad4f, cellFiberPpuUtilWorkerControlInitializeWithAttribute); } -#endif +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index 460a4d9ef6..a20329da74 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -10,10 +10,11 @@ #include "cellFont.h" #include "stblib/stb_truetype.h" -void cellFont_init(); -void cellFont_load(); -void cellFont_unload(); -Module cellFont(0x0019, cellFont_init, cellFont_load, cellFont_unload); +//void cellFont_init(); +//void cellFont_load(); +//void cellFont_unload(); +//Module cellFont(0x0019, cellFont_init, cellFont_load, cellFont_unload); +Module *cellFont = nullptr; // Font Set Types enum @@ -238,7 +239,7 @@ CCellFontInternal* s_fontInternalInstance = nullptr; // Functions int cellFontInitializeWithRevision(u64 revisionFlags, mem_ptr_t config) { - cellFont.Warning("cellFontInitializeWithRevision(revisionFlags=0x%llx, config=0x%x)", revisionFlags, config.GetAddr()); + cellFont->Warning("cellFontInitializeWithRevision(revisionFlags=0x%llx, config=0x%x)", revisionFlags, config.GetAddr()); if (s_fontInternalInstance->m_bInitialized) return CELL_FONT_ERROR_ALREADY_INITIALIZED; @@ -249,7 +250,7 @@ int cellFontInitializeWithRevision(u64 revisionFlags, mem_ptr_t if (config->FileCache.size < 24) return CELL_FONT_ERROR_INVALID_PARAMETER; if (config->flags != 0) - cellFont.Warning("cellFontInitializeWithRevision: Unknown flags (0x%x)", config->flags); + cellFont->Warning("cellFontInitializeWithRevision: Unknown flags (0x%x)", config->flags); s_fontInternalInstance->m_buffer_addr = config->FileCache.buffer_addr; s_fontInternalInstance->m_buffer_size = config->FileCache.size; @@ -267,7 +268,7 @@ int cellFontGetRevisionFlags(mem64_t revisionFlags) int cellFontInit(mem_ptr_t config) { - cellFont.Log("cellFontInit(config=0x%x)", config.GetAddr()); + cellFont->Log("cellFontInit(config=0x%x)", config.GetAddr()); MemoryAllocator revisionFlags = 0; cellFontGetRevisionFlags(revisionFlags.GetAddr()); @@ -276,7 +277,7 @@ int cellFontInit(mem_ptr_t config) int cellFontEnd() { - cellFont.Log("cellFontEnd()"); + cellFont->Log("cellFontEnd()"); if (!s_fontInternalInstance->m_bInitialized) return CELL_FONT_ERROR_UNINITIALIZED; @@ -287,14 +288,14 @@ int cellFontEnd() s32 cellFontSetFontsetOpenMode(u32 openMode) { - cellFont.Log("cellFontSetFontsetOpenMode(openMode=0x%x)", openMode); + cellFont->Log("cellFontSetFontsetOpenMode(openMode=0x%x)", openMode); UNIMPLEMENTED_FUNC(cellFont); return CELL_FONT_OK; } int cellFontOpenFontMemory(mem_ptr_t library, u32 fontAddr, u32 fontSize, u32 subNum, u32 uniqueId, mem_ptr_t font) { - cellFont.Warning("cellFontOpenFontMemory(library_addr=0x%x, fontAddr=0x%x, fontSize=%d, subNum=%d, uniqueId=%d, font_addr=0x%x)", + cellFont->Warning("cellFontOpenFontMemory(library_addr=0x%x, fontAddr=0x%x, fontSize=%d, subNum=%d, uniqueId=%d, font_addr=0x%x)", library.GetAddr(), fontAddr, fontSize, subNum, uniqueId, font.GetAddr()); if (!s_fontInternalInstance->m_bInitialized) @@ -316,7 +317,7 @@ int cellFontOpenFontMemory(mem_ptr_t library, u32 fontAddr, u32 int cellFontOpenFontFile(mem_ptr_t library, mem8_ptr_t fontPath, u32 subNum, s32 uniqueId, mem_ptr_t font) { std::string fp(fontPath.GetString()); - cellFont.Warning("cellFontOpenFontFile(library_addr=0x%x, fontPath=\"%s\", subNum=%d, uniqueId=%d, font_addr=0x%x)", + cellFont->Warning("cellFontOpenFontFile(library_addr=0x%x, fontPath=\"%s\", subNum=%d, uniqueId=%d, font_addr=0x%x)", library.GetAddr(), fp.c_str(), subNum, uniqueId, font.GetAddr()); vfsFile f(fp); @@ -333,7 +334,7 @@ int cellFontOpenFontFile(mem_ptr_t library, mem8_ptr_t fontPath int cellFontOpenFontset(mem_ptr_t library, mem_ptr_t fontType, mem_ptr_t font) { - cellFont.Log("cellFontOpenFontset(library_addr=0x%x, fontType_addr=0x%x, font_addr=0x%x)", + cellFont->Log("cellFontOpenFontset(library_addr=0x%x, fontType_addr=0x%x, font_addr=0x%x)", library.GetAddr(), fontType.GetAddr(), font.GetAddr()); if (!library.IsGood() || !fontType.IsGood() || !font.IsGood()) @@ -341,7 +342,7 @@ int cellFontOpenFontset(mem_ptr_t library, mem_ptr_tm_bInitialized) return CELL_FONT_ERROR_UNINITIALIZED; if (fontType->map != CELL_FONT_MAP_UNICODE) - cellFont.Warning("cellFontOpenFontset: Only Unicode is supported"); + cellFont->Warning("cellFontOpenFontset: Only Unicode is supported"); std::string file; switch((u32)fontType->type) @@ -400,12 +401,12 @@ int cellFontOpenFontset(mem_ptr_t library, mem_ptr_ttype = %d not supported yet. RD-R-LATIN.TTF will be used instead.", fontType->type); + cellFont->Warning("cellFontOpenFontset: fontType->type = %d not supported yet. RD-R-LATIN.TTF will be used instead.", fontType->type); file = "/dev_flash/data/font/SCE-PS3-RD-R-LATIN.TTF"; break; default: - cellFont.Warning("cellFontOpenFontset: fontType->type = %d not supported.", fontType->type); + cellFont->Warning("cellFontOpenFontset: fontType->type = %d not supported.", fontType->type); return CELL_FONT_ERROR_NO_SUPPORT_FONTSET; } @@ -419,7 +420,7 @@ int cellFontOpenFontset(mem_ptr_t library, mem_ptr_t openedFont, mem_ptr_t font) { - cellFont.Warning("cellFontOpenFontInstance(openedFont=0x%x, font=0x%x)", openedFont.GetAddr(), font.GetAddr()); + cellFont->Warning("cellFontOpenFontInstance(openedFont=0x%x, font=0x%x)", openedFont.GetAddr(), font.GetAddr()); if (!openedFont.IsGood() || !font.IsGood()) return CELL_FONT_ERROR_INVALID_PARAMETER; @@ -436,14 +437,14 @@ int cellFontOpenFontInstance(mem_ptr_t openedFont, mem_ptr_t s32 cellFontSetFontOpenMode(u32 openMode) { - cellFont.Log("cellFontSetFontOpenMode(openMode=0x%x)", openMode); + cellFont->Log("cellFontSetFontOpenMode(openMode=0x%x)", openMode); UNIMPLEMENTED_FUNC(cellFont); return CELL_FONT_OK; } int cellFontCreateRenderer(mem_ptr_t library, mem_ptr_t config, mem_ptr_t Renderer) { - cellFont.Warning("cellFontCreateRenderer(library_addr=0x%x, config_addr=0x%x, Renderer_addr=0x%x)", + cellFont->Warning("cellFontCreateRenderer(library_addr=0x%x, config_addr=0x%x, Renderer_addr=0x%x)", library.GetAddr(), config.GetAddr(), Renderer.GetAddr()); if (!library.IsGood() || !config.IsGood() || !Renderer.IsGood()) @@ -458,7 +459,7 @@ int cellFontCreateRenderer(mem_ptr_t library, mem_ptr_t surface, u32 buffer_addr, s32 bufferWidthByte, s32 pixelSizeByte, s32 w, s32 h) { - cellFont.Warning("cellFontRenderSurfaceInit(surface_addr=0x%x, buffer_addr=0x%x, bufferWidthByte=%d, pixelSizeByte=%d, w=%d, h=%d)", + cellFont->Warning("cellFontRenderSurfaceInit(surface_addr=0x%x, buffer_addr=0x%x, bufferWidthByte=%d, pixelSizeByte=%d, w=%d, h=%d)", surface.GetAddr(), buffer_addr, bufferWidthByte, pixelSizeByte, w, h); surface->buffer_addr = buffer_addr; @@ -473,7 +474,7 @@ void cellFontRenderSurfaceInit(mem_ptr_t surface, u32 buf void cellFontRenderSurfaceSetScissor(mem_ptr_t surface, s32 x0, s32 y0, s32 w, s32 h) { - cellFont.Warning("cellFontRenderSurfaceSetScissor(surface_addr=0x%x, x0=%d, y0=%d, w=%d, h=%d)", + cellFont->Warning("cellFontRenderSurfaceSetScissor(surface_addr=0x%x, x0=%d, y0=%d, w=%d, h=%d)", surface.GetAddr(), x0, y0, w, h); surface->Scissor.x0 = x0; @@ -486,7 +487,7 @@ int cellFontSetScalePixel(mem_ptr_t font, float w, float h) { w = GetCurrentPPUThread().FPR[1]; // TODO: Something is wrong with the float arguments h = GetCurrentPPUThread().FPR[2]; // TODO: Something is wrong with the float arguments - cellFont.Log("cellFontSetScalePixel(font_addr=0x%x, w=%f, h=%f)", font.GetAddr(), w, h); + cellFont->Log("cellFontSetScalePixel(font_addr=0x%x, w=%f, h=%f)", font.GetAddr(), w, h); if (!font.IsGood()) return CELL_FONT_ERROR_INVALID_PARAMETER; @@ -498,7 +499,7 @@ int cellFontSetScalePixel(mem_ptr_t font, float w, float h) int cellFontGetHorizontalLayout(mem_ptr_t font, mem_ptr_t layout) { - cellFont.Log("cellFontGetHorizontalLayout(font_addr=0x%x, layout_addr=0x%x)", + cellFont->Log("cellFontGetHorizontalLayout(font_addr=0x%x, layout_addr=0x%x)", font.GetAddr(), layout.GetAddr()); if (!font.IsGood() || !layout.IsGood()) @@ -516,7 +517,7 @@ int cellFontGetHorizontalLayout(mem_ptr_t font, mem_ptr_t font, mem_ptr_t renderer) { - cellFont.Warning("cellFontBindRenderer(font_addr=0x%x, renderer_addr=0x%x)", + cellFont->Warning("cellFontBindRenderer(font_addr=0x%x, renderer_addr=0x%x)", font.GetAddr(), renderer.GetAddr()); if (!font.IsGood() || !renderer.IsGood()) @@ -530,7 +531,7 @@ int cellFontBindRenderer(mem_ptr_t font, mem_ptr_t r int cellFontUnbindRenderer(mem_ptr_t font) { - cellFont.Warning("cellFontBindRenderer(font_addr=0x%x)", font.GetAddr()); + cellFont->Warning("cellFontBindRenderer(font_addr=0x%x)", font.GetAddr()); if (!font.IsGood()) return CELL_FONT_ERROR_INVALID_PARAMETER; @@ -551,7 +552,7 @@ int cellFontSetupRenderScalePixel(mem_ptr_t font, float w, float h) { w = GetCurrentPPUThread().FPR[1]; // TODO: Something is wrong with the float arguments h = GetCurrentPPUThread().FPR[2]; // TODO: Something is wrong with the float arguments - cellFont.Log("cellFontSetupRenderScalePixel(font_addr=0x%x, w=%f, h=%f)", font.GetAddr(), w, h); + cellFont->Log("cellFontSetupRenderScalePixel(font_addr=0x%x, w=%f, h=%f)", font.GetAddr(), w, h); if (!font.IsGood()) return CELL_FONT_ERROR_INVALID_PARAMETER; @@ -564,7 +565,7 @@ int cellFontSetupRenderScalePixel(mem_ptr_t font, float w, float h) int cellFontGetRenderCharGlyphMetrics(mem_ptr_t font, u32 code, mem_ptr_t metrics) { - cellFont.Log("cellFontGetRenderCharGlyphMetrics(font_addr=0x%x, code=0x%x, metrics_addr=0x%x)", + cellFont->Log("cellFontGetRenderCharGlyphMetrics(font_addr=0x%x, code=0x%x, metrics_addr=0x%x)", font.GetAddr(), code, metrics.GetAddr()); if (!font.IsGood() || !metrics.IsGood()) @@ -580,7 +581,7 @@ int cellFontRenderCharGlyphImage(mem_ptr_t font, u32 code, mem_ptr_tLog("cellFontRenderCharGlyphImage(font_addr=0x%x, code=0x%x, surface_addr=0x%x, x=%f, y=%f, metrics_addr=0x%x, trans_addr=0x%x)", font.GetAddr(), code, surface.GetAddr(), x, y, metrics.GetAddr(), transInfo.GetAddr()); if (!font.IsGood() || !surface.IsGood() || !metrics.IsGood() || !transInfo.IsGood()) @@ -627,7 +628,7 @@ int cellFontEndLibrary() int cellFontSetEffectSlant(mem_ptr_t font, float slantParam) { slantParam = GetCurrentPPUThread().FPR[1]; // TODO: Something is wrong with the float arguments - cellFont.Log("cellFontSetEffectSlant(font_addr=0x%x, slantParam=%f)", font.GetAddr(), slantParam); + cellFont->Log("cellFontSetEffectSlant(font_addr=0x%x, slantParam=%f)", font.GetAddr(), slantParam); if (!font.IsGood() || slantParam < -1.0 || slantParam > 1.0) return CELL_FONT_ERROR_INVALID_PARAMETER; @@ -638,7 +639,7 @@ int cellFontSetEffectSlant(mem_ptr_t font, float slantParam) int cellFontGetEffectSlant(mem_ptr_t font, mem32_t slantParam) { - cellFont.Warning("cellFontSetEffectSlant(font_addr=0x%x, slantParam_addr=0x%x)", font.GetAddr(), slantParam.GetAddr()); + cellFont->Warning("cellFontSetEffectSlant(font_addr=0x%x, slantParam_addr=0x%x)", font.GetAddr(), slantParam.GetAddr()); if (!font.IsGood() || !slantParam.IsGood()) return CELL_FONT_ERROR_INVALID_PARAMETER; @@ -649,7 +650,7 @@ int cellFontGetEffectSlant(mem_ptr_t font, mem32_t slantParam) int cellFontGetFontIdCode(mem_ptr_t font, u32 code, mem32_t fontId, mem32_t fontCode) { - cellFont.Log("cellFontGetFontIdCode(font_addr=0x%x, code=0x%x, fontId_addr=0x%x, fontCode_addr=0x%x", + cellFont->Log("cellFontGetFontIdCode(font_addr=0x%x, code=0x%x, fontId_addr=0x%x, fontCode_addr=0x%x", font.GetAddr(), code, fontId.GetAddr(), fontCode.GetAddr()); if (!font.IsGood() || !fontId.IsGood()) //fontCode isn't used @@ -661,7 +662,7 @@ int cellFontGetFontIdCode(mem_ptr_t font, u32 code, mem32_t fontId, me int cellFontCloseFont(mem_ptr_t font) { - cellFont.Warning("cellFontCloseFont(font_addr=0x%x)", font.GetAddr()); + cellFont->Warning("cellFontCloseFont(font_addr=0x%x)", font.GetAddr()); if (!font.IsGood()) return CELL_FONT_ERROR_INVALID_PARAMETER; @@ -676,7 +677,7 @@ int cellFontCloseFont(mem_ptr_t font) int cellFontGetCharGlyphMetrics(mem_ptr_t font, u32 code, mem_ptr_t metrics) { - cellFont.Log("cellFontGetCharGlyphMetrics(font_addr=0x%x, code=0x%x, metrics_addr=0x%x", + cellFont->Log("cellFontGetCharGlyphMetrics(font_addr=0x%x, code=0x%x, metrics_addr=0x%x", font.GetAddr(), code, metrics.GetAddr()); if (!font.IsGood() || metrics.IsGood()) @@ -816,7 +817,7 @@ int cellFontDeleteGlyph() int cellFontExtend(u32 a1, u32 a2, u32 a3) { - cellFont.Warning("cellFontExtend(a1=0x%x, a2=0x%x, a3=0x%x)", a1, a2, a3); + cellFont->Warning("cellFontExtend(a1=0x%x, a2=0x%x, a3=0x%x)", a1, a2, a3); //In a test I did: a1=0xcfe00000, a2=0x0, a3=(pointer to something) if (a1 == 0xcfe00000) { @@ -854,56 +855,56 @@ int cellFontGetCharGlyphMetricsVertical() void cellFont_init() { - cellFont.AddFunc(0x25c107e6, cellFontInit); - cellFont.AddFunc(0x6bf6f832, cellFontSetFontsetOpenMode); - cellFont.AddFunc(0x6cfada83, cellFontSetFontOpenMode); - cellFont.AddFunc(0x042e74e3, cellFontCreateRenderer); - cellFont.AddFunc(0x1387c45c, cellFontGetHorizontalLayout); - cellFont.AddFunc(0x21ebb248, cellFontDestroyRenderer); - cellFont.AddFunc(0x227e1e3c, cellFontSetupRenderScalePixel); - cellFont.AddFunc(0x29329541, cellFontOpenFontInstance); - cellFont.AddFunc(0x297f0e93, cellFontSetScalePixel); - cellFont.AddFunc(0x2da9fd9d, cellFontGetRenderCharGlyphMetrics); - cellFont.AddFunc(0x40d40544, cellFontEndLibrary); - cellFont.AddFunc(0x66a23100, cellFontBindRenderer); - cellFont.AddFunc(0x7ab47f7e, cellFontEnd); - cellFont.AddFunc(0x8657c8f5, cellFontSetEffectSlant); - cellFont.AddFunc(0xe16e679a, cellFontGetEffectSlant); - cellFont.AddFunc(0x88be4799, cellFontRenderCharGlyphImage); - cellFont.AddFunc(0x90b9465e, cellFontRenderSurfaceInit); - cellFont.AddFunc(0x98ac5524, cellFontGetFontIdCode); - cellFont.AddFunc(0xa885cc9b, cellFontOpenFontset); - cellFont.AddFunc(0xb276f1f6, cellFontCloseFont); - cellFont.AddFunc(0xb422b005, cellFontRenderSurfaceSetScissor); - cellFont.AddFunc(0xd8eaee9f, cellFontGetCharGlyphMetrics); - cellFont.AddFunc(0xf03dcc29, cellFontInitializeWithRevision); - cellFont.AddFunc(0x061049ad, cellFontGraphicsSetFontRGBA); - cellFont.AddFunc(0x073fa321, cellFontOpenFontsetOnMemory); - cellFont.AddFunc(0x0a7306a4, cellFontOpenFontFile); - cellFont.AddFunc(0x16322df1, cellFontGraphicsSetScalePixel); - cellFont.AddFunc(0x2388186c, cellFontGraphicsGetScalePixel); - cellFont.AddFunc(0x25253fe4, cellFontSetEffectWeight); - cellFont.AddFunc(0x53f529fe, cellFontGlyphSetupVertexesGlyph); - cellFont.AddFunc(0x698897f8, cellFontGetVerticalLayout); - cellFont.AddFunc(0x700e6223, cellFontGetRenderCharGlyphMetricsVertical); - cellFont.AddFunc(0x70f3e728, cellFontSetScalePoint); - cellFont.AddFunc(0x78d05e08, cellFontSetupRenderEffectSlant); - cellFont.AddFunc(0x7c83bc15, cellFontGraphicsSetLineRGBA); - cellFont.AddFunc(0x87bd650f, cellFontGraphicsSetDrawType); - cellFont.AddFunc(0x8a35c887, cellFontEndGraphics); - cellFont.AddFunc(0x970d4c22, cellFontGraphicsSetupDrawContext); - cellFont.AddFunc(0x9e19072b, cellFontOpenFontMemory); - cellFont.AddFunc(0xa6dc25d1, cellFontSetupRenderEffectWeight); - cellFont.AddFunc(0xa8fae920, cellFontGlyphGetOutlineControlDistance); - cellFont.AddFunc(0xb4d112af, cellFontGlyphGetVertexesGlyphSize); - cellFont.AddFunc(0xc17259de, cellFontGenerateCharGlyph); - cellFont.AddFunc(0xd62f5d76, cellFontDeleteGlyph); - cellFont.AddFunc(0xdee0836c, cellFontExtend); - cellFont.AddFunc(0xe857a0ca, cellFontRenderCharGlyphImageVertical); - cellFont.AddFunc(0xfb3341ba, cellFontSetResolutionDpi); - cellFont.AddFunc(0xfe9a6dd7, cellFontGetCharGlyphMetricsVertical); - cellFont.AddFunc(0xf16379fa, cellFontUnbindRenderer); - cellFont.AddFunc(0xb015a84e, cellFontGetRevisionFlags); + cellFont->AddFunc(0x25c107e6, cellFontInit); + cellFont->AddFunc(0x6bf6f832, cellFontSetFontsetOpenMode); + cellFont->AddFunc(0x6cfada83, cellFontSetFontOpenMode); + cellFont->AddFunc(0x042e74e3, cellFontCreateRenderer); + cellFont->AddFunc(0x1387c45c, cellFontGetHorizontalLayout); + cellFont->AddFunc(0x21ebb248, cellFontDestroyRenderer); + cellFont->AddFunc(0x227e1e3c, cellFontSetupRenderScalePixel); + cellFont->AddFunc(0x29329541, cellFontOpenFontInstance); + cellFont->AddFunc(0x297f0e93, cellFontSetScalePixel); + cellFont->AddFunc(0x2da9fd9d, cellFontGetRenderCharGlyphMetrics); + cellFont->AddFunc(0x40d40544, cellFontEndLibrary); + cellFont->AddFunc(0x66a23100, cellFontBindRenderer); + cellFont->AddFunc(0x7ab47f7e, cellFontEnd); + cellFont->AddFunc(0x8657c8f5, cellFontSetEffectSlant); + cellFont->AddFunc(0xe16e679a, cellFontGetEffectSlant); + cellFont->AddFunc(0x88be4799, cellFontRenderCharGlyphImage); + cellFont->AddFunc(0x90b9465e, cellFontRenderSurfaceInit); + cellFont->AddFunc(0x98ac5524, cellFontGetFontIdCode); + cellFont->AddFunc(0xa885cc9b, cellFontOpenFontset); + cellFont->AddFunc(0xb276f1f6, cellFontCloseFont); + cellFont->AddFunc(0xb422b005, cellFontRenderSurfaceSetScissor); + cellFont->AddFunc(0xd8eaee9f, cellFontGetCharGlyphMetrics); + cellFont->AddFunc(0xf03dcc29, cellFontInitializeWithRevision); + cellFont->AddFunc(0x061049ad, cellFontGraphicsSetFontRGBA); + cellFont->AddFunc(0x073fa321, cellFontOpenFontsetOnMemory); + cellFont->AddFunc(0x0a7306a4, cellFontOpenFontFile); + cellFont->AddFunc(0x16322df1, cellFontGraphicsSetScalePixel); + cellFont->AddFunc(0x2388186c, cellFontGraphicsGetScalePixel); + cellFont->AddFunc(0x25253fe4, cellFontSetEffectWeight); + cellFont->AddFunc(0x53f529fe, cellFontGlyphSetupVertexesGlyph); + cellFont->AddFunc(0x698897f8, cellFontGetVerticalLayout); + cellFont->AddFunc(0x700e6223, cellFontGetRenderCharGlyphMetricsVertical); + cellFont->AddFunc(0x70f3e728, cellFontSetScalePoint); + cellFont->AddFunc(0x78d05e08, cellFontSetupRenderEffectSlant); + cellFont->AddFunc(0x7c83bc15, cellFontGraphicsSetLineRGBA); + cellFont->AddFunc(0x87bd650f, cellFontGraphicsSetDrawType); + cellFont->AddFunc(0x8a35c887, cellFontEndGraphics); + cellFont->AddFunc(0x970d4c22, cellFontGraphicsSetupDrawContext); + cellFont->AddFunc(0x9e19072b, cellFontOpenFontMemory); + cellFont->AddFunc(0xa6dc25d1, cellFontSetupRenderEffectWeight); + cellFont->AddFunc(0xa8fae920, cellFontGlyphGetOutlineControlDistance); + cellFont->AddFunc(0xb4d112af, cellFontGlyphGetVertexesGlyphSize); + cellFont->AddFunc(0xc17259de, cellFontGenerateCharGlyph); + cellFont->AddFunc(0xd62f5d76, cellFontDeleteGlyph); + cellFont->AddFunc(0xdee0836c, cellFontExtend); + cellFont->AddFunc(0xe857a0ca, cellFontRenderCharGlyphImageVertical); + cellFont->AddFunc(0xfb3341ba, cellFontSetResolutionDpi); + cellFont->AddFunc(0xfe9a6dd7, cellFontGetCharGlyphMetricsVertical); + cellFont->AddFunc(0xf16379fa, cellFontUnbindRenderer); + cellFont->AddFunc(0xb015a84e, cellFontGetRevisionFlags); } void cellFont_load() diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp index b421af3ac2..317a318242 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp @@ -8,10 +8,11 @@ #include "Emu/SysCalls/SysCalls.h" #include "cellFont.h" -void cellFontFT_init(); -void cellFontFT_load(); -void cellFontFT_unload(); -Module cellFontFT(0x001a, cellFontFT_init, cellFontFT_load, cellFontFT_unload); +//void cellFontFT_init(); +//void cellFontFT_load(); +//void cellFontFT_unload(); +//Module cellFontFT(0x001a, cellFontFT_init, cellFontFT_load, cellFontFT_unload); +extern Module *cellFontFT = nullptr; struct CellFontLibraryConfigFT { @@ -44,7 +45,7 @@ CCellFontFTInternal* s_fontFtInternalInstance = nullptr; int cellFontInitLibraryFreeTypeWithRevision(u64 revisionFlags, mem_ptr_t config, u32 lib_addr_addr) { - cellFontFT.Warning("cellFontInitLibraryFreeTypeWithRevision(revisionFlags=0x%llx, config_addr=0x%x, lib_addr_addr=0x%x", + cellFontFT->Warning("cellFontInitLibraryFreeTypeWithRevision(revisionFlags=0x%llx, config_addr=0x%x, lib_addr_addr=0x%x", revisionFlags, config.GetAddr(), lib_addr_addr); if (!config.IsGood() || !Memory.IsGoodAddr(lib_addr_addr)) @@ -71,9 +72,9 @@ int cellFontFTGetInitializedRevisionFlags() void cellFontFT_init() { - cellFontFT.AddFunc(0x7a0a83c4, cellFontInitLibraryFreeTypeWithRevision); - cellFontFT.AddFunc(0xec89a187, cellFontFTGetRevisionFlags); - cellFontFT.AddFunc(0xfa0c2de0, cellFontFTGetInitializedRevisionFlags); + cellFontFT->AddFunc(0x7a0a83c4, cellFontInitLibraryFreeTypeWithRevision); + cellFontFT->AddFunc(0xec89a187, cellFontFTGetRevisionFlags); + cellFontFT->AddFunc(0xfa0c2de0, cellFontFTGetInitializedRevisionFlags); } void cellFontFT_load() diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 470d2dc66a..200894c3b9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -10,8 +10,9 @@ #include "Loader/PSF.h" -void cellGame_init(); -Module cellGame(0x003e, cellGame_init); +//void cellGame_init(); +//Module cellGame(0x003e, cellGame_init); +extern Module *cellGame = nullptr; // Return Codes enum @@ -118,12 +119,12 @@ struct CellGameContentSize int cellGameBootCheck(mem32_t type, mem32_t attributes, mem_ptr_t size, mem_list_ptr_t dirName) { - cellGame.Warning("cellGameBootCheck(type_addr=0x%x, attributes_addr=0x%x, size_addr=0x%x, dirName_addr=0x%x)", + cellGame->Warning("cellGameBootCheck(type_addr=0x%x, attributes_addr=0x%x, size_addr=0x%x, dirName_addr=0x%x)", type.GetAddr(), attributes.GetAddr(), size.GetAddr(), dirName.GetAddr()); if (!type.IsGood() || !attributes.IsGood() || !size.IsGood() || !dirName.IsGood()) { - cellGame.Warning("cellGameBootCheck returns CELL_GAME_ERROR_PARAM. As a result size->hddFreeSizeKB may be 0."); + cellGame->Warning("cellGameBootCheck returns CELL_GAME_ERROR_PARAM. As a result size->hddFreeSizeKB may be 0."); return CELL_GAME_ERROR_PARAM; } @@ -159,7 +160,7 @@ int cellGameDataCheck() int cellGameContentPermit(mem_list_ptr_t contentInfoPath, mem_list_ptr_t usrdirPath) { - cellGame.Warning("cellGameContentPermit(contentInfoPath_addr=0x%x, usrdirPath_addr=0x%x)", + cellGame->Warning("cellGameContentPermit(contentInfoPath_addr=0x%x, usrdirPath_addr=0x%x)", contentInfoPath.GetAddr(), usrdirPath.GetAddr()); if (!contentInfoPath.IsGood() || !usrdirPath.IsGood()) @@ -192,7 +193,7 @@ int cellGameDeleteGameData() int cellGameGetParamInt(u32 id, mem32_t value) { - cellGame.Warning("cellGameGetParamInt(id=%d, value_addr=0x%x)", id, value.GetAddr()); + cellGame->Warning("cellGameGetParamInt(id=%d, value_addr=0x%x)", id, value.GetAddr()); if(!value.IsGood()) return CELL_GAME_ERROR_PARAM; @@ -218,7 +219,7 @@ int cellGameGetParamInt(u32 id, mem32_t value) int cellGameGetParamString(u32 id, u32 buf_addr, u32 bufsize) { - cellGame.Warning("cellGameGetParamString(id=%d, buf_addr=0x%x, bufsize=%d)", id, buf_addr, bufsize); + cellGame->Warning("cellGameGetParamString(id=%d, buf_addr=0x%x, bufsize=%d)", id, buf_addr, bufsize); if(!Memory.IsGoodAddr(buf_addr)) return CELL_GAME_ERROR_PARAM; @@ -293,7 +294,7 @@ int cellGameGetLocalWebContentPath() int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) { - cellGame.Warning("cellGameContentErrorDialog(type=%d, errNeedSizeKB=%d, dirName_addr=0x%x)", type, errNeedSizeKB, dirName_addr); + cellGame->Warning("cellGameContentErrorDialog(type=%d, errNeedSizeKB=%d, dirName_addr=0x%x)", type, errNeedSizeKB, dirName_addr); if (Memory.IsGoodAddr(dirName_addr)) return CELL_GAME_ERROR_PARAM; @@ -313,7 +314,7 @@ int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) std::string errorMsg = fmt::Format("%s\nSpace needed: %d KB\nDirectory name: %s", errorName.c_str(), errNeedSizeKB, dirName); - wxMessageBox(fmt::FromUTF8(errorMsg), wxGetApp().GetAppName(), wxICON_ERROR | wxOK); + rMessageBox(errorMsg, rGetApp().GetAppName(), rICON_ERROR | rOK); return CELL_OK; } @@ -333,25 +334,25 @@ void cellGame_init() { // (TODO: Disc Exchange functions missing) - cellGame.AddFunc(0xf52639ea, cellGameBootCheck); - cellGame.AddFunc(0xce4374f6, cellGamePatchCheck); - cellGame.AddFunc(0xdb9819f3, cellGameDataCheck); - cellGame.AddFunc(0x70acec67, cellGameContentPermit); + cellGame->AddFunc(0xf52639ea, cellGameBootCheck); + cellGame->AddFunc(0xce4374f6, cellGamePatchCheck); + cellGame->AddFunc(0xdb9819f3, cellGameDataCheck); + cellGame->AddFunc(0x70acec67, cellGameContentPermit); - cellGame.AddFunc(0x42a2e133, cellGameCreateGameData); - cellGame.AddFunc(0xb367c6e3, cellGameDeleteGameData); + cellGame->AddFunc(0x42a2e133, cellGameCreateGameData); + cellGame->AddFunc(0xb367c6e3, cellGameDeleteGameData); - cellGame.AddFunc(0xb7a45caf, cellGameGetParamInt); - //cellGame.AddFunc(, cellGameSetParamInt); - cellGame.AddFunc(0x3a5d726a, cellGameGetParamString); - cellGame.AddFunc(0xdaa5cd20, cellGameSetParamString); - cellGame.AddFunc(0xef9d42d5, cellGameGetSizeKB); - cellGame.AddFunc(0x2a8e6b92, cellGameGetDiscContentInfoUpdatePath); - cellGame.AddFunc(0xa80bf223, cellGameGetLocalWebContentPath); + cellGame->AddFunc(0xb7a45caf, cellGameGetParamInt); + //cellGame->AddFunc(, cellGameSetParamInt); + cellGame->AddFunc(0x3a5d726a, cellGameGetParamString); + cellGame->AddFunc(0xdaa5cd20, cellGameSetParamString); + cellGame->AddFunc(0xef9d42d5, cellGameGetSizeKB); + cellGame->AddFunc(0x2a8e6b92, cellGameGetDiscContentInfoUpdatePath); + cellGame->AddFunc(0xa80bf223, cellGameGetLocalWebContentPath); - cellGame.AddFunc(0xb0a1f8c6, cellGameContentErrorDialog); + cellGame->AddFunc(0xb0a1f8c6, cellGameContentErrorDialog); - cellGame.AddFunc(0xd24e3928, cellGameThemeInstall); - cellGame.AddFunc(0x87406734, cellGameThemeInstallFromBuffer); - //cellGame.AddFunc(, CellGameThemeInstallCallback); + cellGame->AddFunc(0xd24e3928, cellGameThemeInstall); + cellGame->AddFunc(0x87406734, cellGameThemeInstallFromBuffer); + //cellGame->AddFunc(, CellGameThemeInstallCallback); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index a7911d5d0f..d42a0b7ca7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -8,10 +8,11 @@ #include "Emu/SysCalls/SysCalls.h" #include "Emu/GS/GCM.h" -void cellGcmSys_init(); -void cellGcmSys_load(); -void cellGcmSys_unload(); -Module cellGcmSys(0x0010, cellGcmSys_init, cellGcmSys_load, cellGcmSys_unload); +//void cellGcmSys_init(); +//void cellGcmSys_load(); +//void cellGcmSys_unload(); +//Module cellGcmSys(0x0010, cellGcmSys_init, cellGcmSys_load, cellGcmSys_unload); +extern Module *cellGcmSys = nullptr; u32 local_size = 0; u32 local_addr = 0; @@ -67,17 +68,17 @@ u32 map_offset_pos = 0; u32 cellGcmGetLabelAddress(u8 index) { - cellGcmSys.Log("cellGcmGetLabelAddress(index=%d)", index); + cellGcmSys->Log("cellGcmGetLabelAddress(index=%d)", index); return Memory.RSXCMDMem.GetStartAddr() + 0x10 * index; } u32 cellGcmGetReportDataAddressLocation(u32 index, u32 location) { - cellGcmSys.Warning("cellGcmGetReportDataAddressLocation(index=%d, location=%d)", index, location); + cellGcmSys->Warning("cellGcmGetReportDataAddressLocation(index=%d, location=%d)", index, location); if (location == CELL_GCM_LOCATION_LOCAL) { if (index >= 2048) { - cellGcmSys.Error("cellGcmGetReportDataAddressLocation: Wrong local index (%d)", index); + cellGcmSys->Error("cellGcmGetReportDataAddressLocation: Wrong local index (%d)", index); return 0; } return Memory.RSXFBMem.GetStartAddr() + index * 0x10; @@ -85,23 +86,23 @@ u32 cellGcmGetReportDataAddressLocation(u32 index, u32 location) if (location == CELL_GCM_LOCATION_MAIN) { if (index >= 1024*1024) { - cellGcmSys.Error("cellGcmGetReportDataAddressLocation: Wrong main index (%d)", index); + cellGcmSys->Error("cellGcmGetReportDataAddressLocation: Wrong main index (%d)", index); return 0; } // TODO: It seems m_report_main_addr is not initialized return Emu.GetGSManager().GetRender().m_report_main_addr + index * 0x10; } - cellGcmSys.Error("cellGcmGetReportDataAddressLocation: Wrong location (%d)", location); + cellGcmSys->Error("cellGcmGetReportDataAddressLocation: Wrong location (%d)", location); return 0; } u64 cellGcmGetTimeStamp(u32 index) { - cellGcmSys.Log("cellGcmGetTimeStamp(index=%d)", index); + cellGcmSys->Log("cellGcmGetTimeStamp(index=%d)", index); if (index >= 2048) { - cellGcmSys.Error("cellGcmGetTimeStamp: Wrong local index (%d)", index); + cellGcmSys->Error("cellGcmGetTimeStamp: Wrong local index (%d)", index); return 0; } return Memory.Read64(Memory.RSXFBMem.GetStartAddr() + index * 0x10); @@ -121,10 +122,10 @@ int cellGcmGetNotifyDataAddress() u32 cellGcmGetReport(u32 type, u32 index) { - cellGcmSys.Warning("cellGcmGetReport(type=%d, index=%d)", type, index); + cellGcmSys->Warning("cellGcmGetReport(type=%d, index=%d)", type, index); if (index >= 2048) { - cellGcmSys.Error("cellGcmGetReport: Wrong local index (%d)", index); + cellGcmSys->Error("cellGcmGetReport: Wrong local index (%d)", index); return 0; } // TODO: What does the argument type do? @@ -133,10 +134,10 @@ u32 cellGcmGetReport(u32 type, u32 index) u32 cellGcmGetReportDataAddress(u32 index) { - cellGcmSys.Warning("cellGcmGetReportDataAddress(index=%d)", index); + cellGcmSys->Warning("cellGcmGetReportDataAddress(index=%d)", index); if (index >= 2048) { - cellGcmSys.Error("cellGcmGetReportDataAddress: Wrong local index (%d)", index); + cellGcmSys->Error("cellGcmGetReportDataAddress: Wrong local index (%d)", index); return 0; } return Memory.RSXFBMem.GetStartAddr() + index * 0x10; @@ -144,11 +145,11 @@ u32 cellGcmGetReportDataAddress(u32 index) u32 cellGcmGetReportDataLocation(u32 index, u32 location) { - cellGcmSys.Warning("cellGcmGetReportDataLocation(index=%d, location=%d)", index, location); + cellGcmSys->Warning("cellGcmGetReportDataLocation(index=%d, location=%d)", index, location); if (location == CELL_GCM_LOCATION_LOCAL) { if (index >= 2048) { - cellGcmSys.Error("cellGcmGetReportDataLocation: Wrong local index (%d)", index); + cellGcmSys->Error("cellGcmGetReportDataLocation: Wrong local index (%d)", index); return 0; } return Memory.Read32(Memory.RSXFBMem.GetStartAddr() + index * 0x10 + 0x8); @@ -156,24 +157,24 @@ u32 cellGcmGetReportDataLocation(u32 index, u32 location) if (location == CELL_GCM_LOCATION_MAIN) { if (index >= 1024*1024) { - cellGcmSys.Error("cellGcmGetReportDataLocation: Wrong main index (%d)", index); + cellGcmSys->Error("cellGcmGetReportDataLocation: Wrong main index (%d)", index); return 0; } // TODO: It seems m_report_main_addr is not initialized return Memory.Read32(Emu.GetGSManager().GetRender().m_report_main_addr + index * 0x10 + 0x8); } - cellGcmSys.Error("cellGcmGetReportDataLocation: Wrong location (%d)", location); + cellGcmSys->Error("cellGcmGetReportDataLocation: Wrong location (%d)", location); return 0; } u64 cellGcmGetTimeStampLocation(u32 index, u32 location) { - cellGcmSys.Warning("cellGcmGetTimeStampLocation(index=%d, location=%d)", index, location); + cellGcmSys->Warning("cellGcmGetTimeStampLocation(index=%d, location=%d)", index, location); if (location == CELL_GCM_LOCATION_LOCAL) { if (index >= 2048) { - cellGcmSys.Error("cellGcmGetTimeStampLocation: Wrong local index (%d)", index); + cellGcmSys->Error("cellGcmGetTimeStampLocation: Wrong local index (%d)", index); return 0; } return Memory.Read64(Memory.RSXFBMem.GetStartAddr() + index * 0x10); @@ -181,14 +182,14 @@ u64 cellGcmGetTimeStampLocation(u32 index, u32 location) if (location == CELL_GCM_LOCATION_MAIN) { if (index >= 1024*1024) { - cellGcmSys.Error("cellGcmGetTimeStampLocation: Wrong main index (%d)", index); + cellGcmSys->Error("cellGcmGetTimeStampLocation: Wrong main index (%d)", index); return 0; } // TODO: It seems m_report_main_addr is not initialized return Memory.Read64(Emu.GetGSManager().GetRender().m_report_main_addr + index * 0x10); } - cellGcmSys.Error("cellGcmGetTimeStampLocation: Wrong location (%d)", location); + cellGcmSys->Error("cellGcmGetTimeStampLocation: Wrong location (%d)", location); return 0; } @@ -198,32 +199,32 @@ u64 cellGcmGetTimeStampLocation(u32 index, u32 location) u32 cellGcmGetControlRegister() { - cellGcmSys.Log("cellGcmGetControlRegister()"); + cellGcmSys->Log("cellGcmGetControlRegister()"); return gcm_info.control_addr; } u32 cellGcmGetDefaultCommandWordSize() { - cellGcmSys.Log("cellGcmGetDefaultCommandWordSize()"); + cellGcmSys->Log("cellGcmGetDefaultCommandWordSize()"); return 0x400; } u32 cellGcmGetDefaultSegmentWordSize() { - cellGcmSys.Log("cellGcmGetDefaultSegmentWordSize()"); + cellGcmSys->Log("cellGcmGetDefaultSegmentWordSize()"); return 0x100; } int cellGcmInitDefaultFifoMode(s32 mode) { - cellGcmSys.Warning("cellGcmInitDefaultFifoMode(mode=%d)", mode); + cellGcmSys->Warning("cellGcmInitDefaultFifoMode(mode=%d)", mode); return CELL_OK; } int cellGcmSetDefaultFifoSize(u32 bufferSize, u32 segmentSize) { - cellGcmSys.Warning("cellGcmSetDefaultFifoSize(bufferSize=0x%x, segmentSize=0x%x)", bufferSize, segmentSize); + cellGcmSys->Warning("cellGcmSetDefaultFifoSize(bufferSize=0x%x, segmentSize=0x%x)", bufferSize, segmentSize); return CELL_OK; } @@ -233,11 +234,11 @@ int cellGcmSetDefaultFifoSize(u32 bufferSize, u32 segmentSize) int cellGcmBindTile(u8 index) { - cellGcmSys.Warning("cellGcmBindTile(index=%d)", index); + cellGcmSys->Warning("cellGcmBindTile(index=%d)", index); if (index >= RSXThread::m_tiles_count) { - cellGcmSys.Error("cellGcmBindTile : CELL_GCM_ERROR_INVALID_VALUE"); + cellGcmSys->Error("cellGcmBindTile : CELL_GCM_ERROR_INVALID_VALUE"); return CELL_GCM_ERROR_INVALID_VALUE; } @@ -249,11 +250,11 @@ int cellGcmBindTile(u8 index) int cellGcmBindZcull(u8 index) { - cellGcmSys.Warning("cellGcmBindZcull(index=%d)", index); + cellGcmSys->Warning("cellGcmBindZcull(index=%d)", index); if (index >= RSXThread::m_zculls_count) { - cellGcmSys.Error("cellGcmBindZcull : CELL_GCM_ERROR_INVALID_VALUE"); + cellGcmSys->Error("cellGcmBindZcull : CELL_GCM_ERROR_INVALID_VALUE"); return CELL_GCM_ERROR_INVALID_VALUE; } @@ -265,11 +266,11 @@ int cellGcmBindZcull(u8 index) int cellGcmGetConfiguration(mem_ptr_t config) { - cellGcmSys.Log("cellGcmGetConfiguration(config_addr=0x%x)", config.GetAddr()); + cellGcmSys->Log("cellGcmGetConfiguration(config_addr=0x%x)", config.GetAddr()); if (!config.IsGood()) { - cellGcmSys.Error("cellGcmGetConfiguration : CELL_EFAULT"); + cellGcmSys->Error("cellGcmGetConfiguration : CELL_EFAULT"); return CELL_EFAULT; } @@ -280,15 +281,14 @@ int cellGcmGetConfiguration(mem_ptr_t config) int cellGcmGetFlipStatus() { - cellGcmSys.Log("cellGcmGetFlipStatus()"); + cellGcmSys->Log("cellGcmGetFlipStatus()"); return Emu.GetGSManager().GetRender().m_flip_status; } u32 cellGcmGetTiledPitchSize(u32 size) { - cellGcmSys.Warning("cellGcmGetTiledPitchSize(size=%d)", size); - + cellGcmSys->Warning("cellGcmGetTiledPitchSize(size=%d)", size); // TODO: return size; @@ -296,10 +296,10 @@ u32 cellGcmGetTiledPitchSize(u32 size) int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) { - cellGcmSys.Warning("cellGcmInit(context_addr=0x%x,cmdSize=0x%x,ioSize=0x%x,ioAddress=0x%x)", context_addr, cmdSize, ioSize, ioAddress); + cellGcmSys->Warning("cellGcmInit(context_addr=0x%x,cmdSize=0x%x,ioSize=0x%x,ioAddress=0x%x)", context_addr, cmdSize, ioSize, ioAddress); - if(!cellGcmSys.IsLoaded()) - cellGcmSys.Load(); + if(!cellGcmSys->IsLoaded()) + cellGcmSys->Load(); if(!local_size && !local_addr) { @@ -308,14 +308,14 @@ int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) Memory.RSXFBMem.AllocAlign(local_size); } - cellGcmSys.Warning("*** local memory(addr=0x%x, size=0x%x)", local_addr, local_size); + cellGcmSys->Warning("*** local memory(addr=0x%x, size=0x%x)", local_addr, local_size); InitOffsetTable(); Memory.MemoryBlocks.push_back(Memory.RSXIOMem.SetRange(0x50000000, 0x10000000/*256MB*/));//TODO: implement allocateAdressSpace in memoryBase if(cellGcmMapEaIoAddress(ioAddress, 0, ioSize) != CELL_OK) { Memory.MemoryBlocks.pop_back(); - cellGcmSys.Error("cellGcmInit : CELL_GCM_ERROR_FAILURE"); + cellGcmSys->Error("cellGcmInit : CELL_GCM_ERROR_FAILURE"); return CELL_GCM_ERROR_FAILURE; } @@ -363,7 +363,7 @@ int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) int cellGcmResetFlipStatus() { - cellGcmSys.Log("cellGcmResetFlipStatus()"); + cellGcmSys->Log("cellGcmResetFlipStatus()"); Emu.GetGSManager().GetRender().m_flip_status = CELL_GCM_DISPLAY_FLIP_STATUS_WAITING; @@ -372,7 +372,7 @@ int cellGcmResetFlipStatus() int cellGcmSetDebugOutputLevel(int level) { - cellGcmSys.Warning("cellGcmSetDebugOutputLevel(level=%d)", level); + cellGcmSys->Warning("cellGcmSetDebugOutputLevel(level=%d)", level); switch (level) { @@ -390,11 +390,11 @@ int cellGcmSetDebugOutputLevel(int level) int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height) { - cellGcmSys.Log("cellGcmSetDisplayBuffer(id=0x%x,offset=0x%x,pitch=%d,width=%d,height=%d)", id, offset, width ? pitch / width : pitch, width, height); + cellGcmSys->Log("cellGcmSetDisplayBuffer(id=0x%x,offset=0x%x,pitch=%d,width=%d,height=%d)", id, offset, width ? pitch / width : pitch, width, height); if (id > 7) { - cellGcmSys.Error("cellGcmSetDisplayBuffer : CELL_EINVAL"); + cellGcmSys->Error("cellGcmSetDisplayBuffer : CELL_EINVAL"); return CELL_EINVAL; } @@ -415,7 +415,7 @@ int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height int cellGcmSetFlip(mem_ptr_t ctxt, u32 id) { - cellGcmSys.Log("cellGcmSetFlip(ctx=0x%x, id=0x%x)", ctxt.GetAddr(), id); + cellGcmSys->Log("cellGcmSetFlip(ctx=0x%x, id=0x%x)", ctxt.GetAddr(), id); int res = cellGcmSetPrepareFlip(ctxt, id); return res < 0 ? CELL_GCM_ERROR_FAILURE : CELL_OK; @@ -423,11 +423,11 @@ int cellGcmSetFlip(mem_ptr_t ctxt, u32 id) int cellGcmSetFlipHandler(u32 handler_addr) { - cellGcmSys.Warning("cellGcmSetFlipHandler(handler_addr=%d)", handler_addr); + cellGcmSys->Warning("cellGcmSetFlipHandler(handler_addr=%d)", handler_addr); if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) { - cellGcmSys.Error("cellGcmSetFlipHandler : CELL_EFAULT"); + cellGcmSys->Error("cellGcmSetFlipHandler : CELL_EFAULT"); return CELL_EFAULT; } @@ -437,7 +437,7 @@ int cellGcmSetFlipHandler(u32 handler_addr) int cellGcmSetFlipMode(u32 mode) { - cellGcmSys.Warning("cellGcmSetFlipMode(mode=%d)", mode); + cellGcmSys->Warning("cellGcmSetFlipMode(mode=%d)", mode); switch (mode) { @@ -456,18 +456,18 @@ int cellGcmSetFlipMode(u32 mode) void cellGcmSetFlipStatus() { - cellGcmSys.Warning("cellGcmSetFlipStatus()"); + cellGcmSys->Warning("cellGcmSetFlipStatus()"); Emu.GetGSManager().GetRender().m_flip_status = 0; } int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) { - cellGcmSys.Log("cellGcmSetPrepareFlip(ctx=0x%x, id=0x%x)", ctxt.GetAddr(), id); + cellGcmSys->Log("cellGcmSetPrepareFlip(ctx=0x%x, id=0x%x)", ctxt.GetAddr(), id); if(id >= 8) { - cellGcmSys.Error("cellGcmSetPrepareFlip : CELL_GCM_ERROR_FAILURE"); + cellGcmSys->Error("cellGcmSetPrepareFlip : CELL_GCM_ERROR_FAILURE"); return CELL_GCM_ERROR_FAILURE; } @@ -508,7 +508,7 @@ int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) int cellGcmSetSecondVFrequency(u32 freq) { - cellGcmSys.Warning("cellGcmSetSecondVFrequency(level=%d)", freq); + cellGcmSys->Warning("cellGcmSetSecondVFrequency(level=%d)", freq); switch (freq) { @@ -526,30 +526,30 @@ int cellGcmSetSecondVFrequency(u32 freq) int cellGcmSetTileInfo(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u8 comp, u16 base, u8 bank) { - cellGcmSys.Warning("cellGcmSetTileInfo(index=%d, location=%d, offset=%d, size=%d, pitch=%d, comp=%d, base=%d, bank=%d)", + cellGcmSys->Warning("cellGcmSetTileInfo(index=%d, location=%d, offset=%d, size=%d, pitch=%d, comp=%d, base=%d, bank=%d)", index, location, offset, size, pitch, comp, base, bank); if (index >= RSXThread::m_tiles_count || base >= 800 || bank >= 4) { - cellGcmSys.Error("cellGcmSetTileInfo : CELL_GCM_ERROR_INVALID_VALUE"); + cellGcmSys->Error("cellGcmSetTileInfo : CELL_GCM_ERROR_INVALID_VALUE"); return CELL_GCM_ERROR_INVALID_VALUE; } if (offset & 0xffff || size & 0xffff || pitch & 0xf) { - cellGcmSys.Error("cellGcmSetTileInfo : CELL_GCM_ERROR_INVALID_ALIGNMENT"); + cellGcmSys->Error("cellGcmSetTileInfo : CELL_GCM_ERROR_INVALID_ALIGNMENT"); return CELL_GCM_ERROR_INVALID_ALIGNMENT; } if (location >= 2 || (comp != 0 && (comp < 7 || comp > 12))) { - cellGcmSys.Error("cellGcmSetTileInfo : CELL_GCM_ERROR_INVALID_ALIGNMENT"); + cellGcmSys->Error("cellGcmSetTileInfo : CELL_GCM_ERROR_INVALID_ALIGNMENT"); return CELL_GCM_ERROR_INVALID_ENUM; } if (comp) { - cellGcmSys.Error("cellGcmSetTileInfo: bad compression mode! (%d)", comp); + cellGcmSys->Error("cellGcmSetTileInfo: bad compression mode! (%d)", comp); } auto& tile = Emu.GetGSManager().GetRender().m_tiles[index]; @@ -567,7 +567,7 @@ int cellGcmSetTileInfo(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u u32 cellGcmSetUserHandler(u32 handler) { - cellGcmSys.Warning("cellGcmSetUserHandler(handler=0x%x)", handler); + cellGcmSys->Warning("cellGcmSetUserHandler(handler=0x%x)", handler); return handler; } @@ -579,7 +579,7 @@ int cellGcmSetVBlankHandler() int cellGcmSetWaitFlip(mem_ptr_t ctxt) { - cellGcmSys.Log("cellGcmSetWaitFlip(ctx=0x%x)", ctxt.GetAddr()); + cellGcmSys->Log("cellGcmSetWaitFlip(ctx=0x%x)", ctxt.GetAddr()); GSLockCurrent lock(GS_LOCK_WAIT_FLIP); return CELL_OK; @@ -587,12 +587,12 @@ int cellGcmSetWaitFlip(mem_ptr_t ctxt) int cellGcmSetZcull(u8 index, u32 offset, u32 width, u32 height, u32 cullStart, u32 zFormat, u32 aaFormat, u32 zCullDir, u32 zCullFormat, u32 sFunc, u32 sRef, u32 sMask) { - cellGcmSys.Warning("TODO: cellGcmSetZcull(index=%d, offset=0x%x, width=%d, height=%d, cullStart=0x%x, zFormat=0x%x, aaFormat=0x%x, zCullDir=0x%x, zCullFormat=0x%x, sFunc=0x%x, sRef=0x%x, sMask=0x%x)", + cellGcmSys->Warning("TODO: cellGcmSetZcull(index=%d, offset=0x%x, width=%d, height=%d, cullStart=0x%x, zFormat=0x%x, aaFormat=0x%x, zCullDir=0x%x, zCullFormat=0x%x, sFunc=0x%x, sRef=0x%x, sMask=0x%x)", index, offset, width, height, cullStart, zFormat, aaFormat, zCullDir, zCullFormat, sFunc, sRef, sMask); if (index >= RSXThread::m_zculls_count) { - cellGcmSys.Error("cellGcmSetZcull : CELL_GCM_ERROR_INVALID_VALUE"); + cellGcmSys->Error("cellGcmSetZcull : CELL_GCM_ERROR_INVALID_VALUE"); return CELL_GCM_ERROR_INVALID_VALUE; } @@ -616,11 +616,11 @@ int cellGcmSetZcull(u8 index, u32 offset, u32 width, u32 height, u32 cullStart, int cellGcmUnbindTile(u8 index) { - cellGcmSys.Warning("cellGcmUnbindTile(index=%d)", index); + cellGcmSys->Warning("cellGcmUnbindTile(index=%d)", index); if (index >= RSXThread::m_tiles_count) { - cellGcmSys.Error("cellGcmUnbindTile : CELL_GCM_ERROR_INVALID_VALUE"); + cellGcmSys->Error("cellGcmUnbindTile : CELL_GCM_ERROR_INVALID_VALUE"); return CELL_GCM_ERROR_INVALID_VALUE; } @@ -632,11 +632,11 @@ int cellGcmUnbindTile(u8 index) int cellGcmUnbindZcull(u8 index) { - cellGcmSys.Warning("cellGcmUnbindZcull(index=%d)", index); + cellGcmSys->Warning("cellGcmUnbindZcull(index=%d)", index); if (index >= 8) { - cellGcmSys.Error("cellGcmUnbindZcull : CELL_EINVAL"); + cellGcmSys->Error("cellGcmUnbindZcull : CELL_EINVAL"); return CELL_EINVAL; } @@ -648,29 +648,29 @@ int cellGcmUnbindZcull(u8 index) u32 cellGcmGetTileInfo() { - cellGcmSys.Warning("cellGcmGetTileInfo()"); + cellGcmSys->Warning("cellGcmGetTileInfo()"); return Emu.GetGSManager().GetRender().m_tiles_addr; } u32 cellGcmGetZcullInfo() { - cellGcmSys.Warning("cellGcmGetZcullInfo()"); + cellGcmSys->Warning("cellGcmGetZcullInfo()"); return Emu.GetGSManager().GetRender().m_zculls_addr; } u32 cellGcmGetDisplayInfo() { - cellGcmSys.Warning("cellGcmGetDisplayInfo() = 0x%x", Emu.GetGSManager().GetRender().m_gcm_buffers_addr); + cellGcmSys->Warning("cellGcmGetDisplayInfo() = 0x%x", Emu.GetGSManager().GetRender().m_gcm_buffers_addr); return Emu.GetGSManager().GetRender().m_gcm_buffers_addr; } int cellGcmGetCurrentDisplayBufferId(u32 id_addr) { - cellGcmSys.Warning("cellGcmGetCurrentDisplayBufferId(id_addr=0x%x)", id_addr); + cellGcmSys->Warning("cellGcmGetCurrentDisplayBufferId(id_addr=0x%x)", id_addr); if (!Memory.IsGoodAddr(id_addr)) { - cellGcmSys.Error("cellGcmGetCurrentDisplayBufferId : CELL_EFAULT"); + cellGcmSys->Error("cellGcmGetCurrentDisplayBufferId : CELL_EFAULT"); return CELL_EFAULT; } @@ -780,7 +780,7 @@ void InitOffsetTable() int32_t cellGcmAddressToOffset(u64 address, mem32_t offset) { - cellGcmSys.Log("cellGcmAddressToOffset(address=0x%x,offset_addr=0x%x)", address, offset.GetAddr()); + cellGcmSys->Log("cellGcmAddressToOffset(address=0x%x,offset_addr=0x%x)", address, offset.GetAddr()); if (address >= 0xD0000000/*not on main memory or local*/) return CELL_GCM_ERROR_FAILURE; @@ -838,7 +838,7 @@ int32_t cellGcmIoOffsetToAddress(u32 ioOffset, u64 address) int32_t cellGcmMapEaIoAddress(const u32 ea, const u32 io, const u32 size) { - cellGcmSys.Warning("cellGcmMapEaIoAddress(ea=0x%x, io=0x%x, size=0x%x)", ea, io, size); + cellGcmSys->Warning("cellGcmMapEaIoAddress(ea=0x%x, io=0x%x, size=0x%x)", ea, io, size); if ((ea & 0xFFFFF) || (io & 0xFFFFF) || (size & 0xFFFFF)) return CELL_GCM_ERROR_FAILURE; @@ -854,7 +854,7 @@ int32_t cellGcmMapEaIoAddress(const u32 ea, const u32 io, const u32 size) } else { - cellGcmSys.Error("cellGcmMapEaIoAddress : CELL_GCM_ERROR_FAILURE"); + cellGcmSys->Error("cellGcmMapEaIoAddress : CELL_GCM_ERROR_FAILURE"); return CELL_GCM_ERROR_FAILURE; } @@ -863,7 +863,7 @@ int32_t cellGcmMapEaIoAddress(const u32 ea, const u32 io, const u32 size) int32_t cellGcmMapEaIoAddressWithFlags(const u32 ea, const u32 io, const u32 size, const u32 flags) { - cellGcmSys.Warning("cellGcmMapEaIoAddressWithFlags(ea=0x%x, io=0x%x, size=0x%x, flags=0x%x)", ea, io, size, flags); + cellGcmSys->Warning("cellGcmMapEaIoAddressWithFlags(ea=0x%x, io=0x%x, size=0x%x, flags=0x%x)", ea, io, size, flags); return cellGcmMapEaIoAddress(ea, io, size); // TODO: strict ordering } @@ -879,7 +879,7 @@ int32_t cellGcmMapLocalMemory(u64 address, u64 size) } else { - cellGcmSys.Error("RSX local memory already mapped"); + cellGcmSys->Error("RSX local memory already mapped"); return CELL_GCM_ERROR_FAILURE; } @@ -888,7 +888,7 @@ int32_t cellGcmMapLocalMemory(u64 address, u64 size) int32_t cellGcmMapMainMemory(u64 ea, u32 size, mem32_t offset) { - cellGcmSys.Warning("cellGcmMapMainMemory(ea=0x%x,size=0x%x,offset_addr=0x%x)", ea, size, offset.GetAddr()); + cellGcmSys->Warning("cellGcmMapMainMemory(ea=0x%x,size=0x%x,offset_addr=0x%x)", ea, size, offset.GetAddr()); u64 io; @@ -911,7 +911,7 @@ int32_t cellGcmMapMainMemory(u64 ea, u32 size, mem32_t offset) } else { - cellGcmSys.Error("cellGcmMapMainMemory : CELL_GCM_ERROR_NO_IO_PAGE_TABLE"); + cellGcmSys->Error("cellGcmMapMainMemory : CELL_GCM_ERROR_NO_IO_PAGE_TABLE"); return CELL_GCM_ERROR_NO_IO_PAGE_TABLE; } @@ -924,13 +924,13 @@ int32_t cellGcmReserveIoMapSize(const u32 size) { if (size & 0xFFFFF) { - cellGcmSys.Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_ALIGNMENT"); + cellGcmSys->Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_ALIGNMENT"); return CELL_GCM_ERROR_INVALID_ALIGNMENT; } if (size > cellGcmGetMaxIoMapSize()) { - cellGcmSys.Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_VALUE"); + cellGcmSys->Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_VALUE"); return CELL_GCM_ERROR_INVALID_VALUE; } @@ -955,7 +955,7 @@ int32_t cellGcmUnmapEaIoAddress(u64 ea) } else { - cellGcmSys.Error("cellGcmUnmapEaIoAddress : CELL_GCM_ERROR_FAILURE"); + cellGcmSys->Error("cellGcmUnmapEaIoAddress : CELL_GCM_ERROR_FAILURE"); return CELL_GCM_ERROR_FAILURE; } @@ -979,7 +979,7 @@ int32_t cellGcmUnmapIoAddress(u64 io) } else { - cellGcmSys.Error("cellGcmUnmapIoAddress : CELL_GCM_ERROR_FAILURE"); + cellGcmSys->Error("cellGcmUnmapIoAddress : CELL_GCM_ERROR_FAILURE"); return CELL_GCM_ERROR_FAILURE; } @@ -991,13 +991,13 @@ int32_t cellGcmUnreserveIoMapSize(u32 size) if (size & 0xFFFFF) { - cellGcmSys.Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_ALIGNMENT"); + cellGcmSys->Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_ALIGNMENT"); return CELL_GCM_ERROR_INVALID_ALIGNMENT; } if (size > Memory.RSXIOMem.GetReservedAmount()) { - cellGcmSys.Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_VALUE"); + cellGcmSys->Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_VALUE"); return CELL_GCM_ERROR_INVALID_VALUE; } @@ -1051,7 +1051,7 @@ int cellGcmSetCursorImageOffset(u32 offset) void cellGcmSetDefaultCommandBuffer() { - cellGcmSys.Warning("cellGcmSetDefaultCommandBuffer()"); + cellGcmSys->Warning("cellGcmSetDefaultCommandBuffer()"); Memory.Write32(Emu.GetGSManager().GetRender().m_ctxt_addr, gcm_info.context_addr); } @@ -1066,7 +1066,7 @@ int cellGcmSetFlipCommand(u32 ctx, u32 id) s64 cellGcmFunc15() { - cellGcmSys.Error("cellGcmFunc15()"); + cellGcmSys->Error("cellGcmFunc15()"); return 0; } @@ -1079,31 +1079,31 @@ int cellGcmSetFlipCommandWithWaitLabel(u32 ctx, u32 id, u32 label_index, u32 lab int cellGcmSetTile(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u8 comp, u16 base, u8 bank) { - cellGcmSys.Warning("cellGcmSetTile(index=%d, location=%d, offset=%d, size=%d, pitch=%d, comp=%d, base=%d, bank=%d)", + cellGcmSys->Warning("cellGcmSetTile(index=%d, location=%d, offset=%d, size=%d, pitch=%d, comp=%d, base=%d, bank=%d)", index, location, offset, size, pitch, comp, base, bank); // Copied form cellGcmSetTileInfo if(index >= RSXThread::m_tiles_count || base >= 800 || bank >= 4) { - cellGcmSys.Error("cellGcmSetTile : CELL_GCM_ERROR_INVALID_VALUE"); + cellGcmSys->Error("cellGcmSetTile : CELL_GCM_ERROR_INVALID_VALUE"); return CELL_GCM_ERROR_INVALID_VALUE; } if(offset & 0xffff || size & 0xffff || pitch & 0xf) { - cellGcmSys.Error("cellGcmSetTile : CELL_GCM_ERROR_INVALID_ALIGNMENT"); + cellGcmSys->Error("cellGcmSetTile : CELL_GCM_ERROR_INVALID_ALIGNMENT"); return CELL_GCM_ERROR_INVALID_ALIGNMENT; } if(location >= 2 || (comp != 0 && (comp < 7 || comp > 12))) { - cellGcmSys.Error("cellGcmSetTile : CELL_GCM_ERROR_INVALID_ENUM"); + cellGcmSys->Error("cellGcmSetTile : CELL_GCM_ERROR_INVALID_ENUM"); return CELL_GCM_ERROR_INVALID_ENUM; } if(comp) { - cellGcmSys.Error("cellGcmSetTile: bad comp! (%d)", comp); + cellGcmSys->Error("cellGcmSetTile: bad comp! (%d)", comp); } auto& tile = Emu.GetGSManager().GetRender().m_tiles[index]; @@ -1124,105 +1124,105 @@ int cellGcmSetTile(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u8 co void cellGcmSys_init() { // Data Retrieval - cellGcmSys.AddFunc(0xc8f3bd09, cellGcmGetCurrentField); - cellGcmSys.AddFunc(0xf80196c1, cellGcmGetLabelAddress); - cellGcmSys.AddFunc(0x21cee035, cellGcmGetNotifyDataAddress); - cellGcmSys.AddFunc(0x99d397ac, cellGcmGetReport); - cellGcmSys.AddFunc(0x9a0159af, cellGcmGetReportDataAddress); - cellGcmSys.AddFunc(0x8572bce2, cellGcmGetReportDataAddressLocation); - cellGcmSys.AddFunc(0xa6b180ac, cellGcmGetReportDataLocation); - cellGcmSys.AddFunc(0x5a41c10f, cellGcmGetTimeStamp); - cellGcmSys.AddFunc(0x2ad4951b, cellGcmGetTimeStampLocation); + cellGcmSys->AddFunc(0xc8f3bd09, cellGcmGetCurrentField); + cellGcmSys->AddFunc(0xf80196c1, cellGcmGetLabelAddress); + cellGcmSys->AddFunc(0x21cee035, cellGcmGetNotifyDataAddress); + cellGcmSys->AddFunc(0x99d397ac, cellGcmGetReport); + cellGcmSys->AddFunc(0x9a0159af, cellGcmGetReportDataAddress); + cellGcmSys->AddFunc(0x8572bce2, cellGcmGetReportDataAddressLocation); + cellGcmSys->AddFunc(0xa6b180ac, cellGcmGetReportDataLocation); + cellGcmSys->AddFunc(0x5a41c10f, cellGcmGetTimeStamp); + cellGcmSys->AddFunc(0x2ad4951b, cellGcmGetTimeStampLocation); // Command Buffer Control - cellGcmSys.AddFunc(0xa547adde, cellGcmGetControlRegister); - cellGcmSys.AddFunc(0x5e2ee0f0, cellGcmGetDefaultCommandWordSize); - cellGcmSys.AddFunc(0x8cdf8c70, cellGcmGetDefaultSegmentWordSize); - cellGcmSys.AddFunc(0xcaabd992, cellGcmInitDefaultFifoMode); - cellGcmSys.AddFunc(0x9ba451e4, cellGcmSetDefaultFifoSize); - //cellGcmSys.AddFunc(, cellGcmReserveMethodSize); - //cellGcmSys.AddFunc(, cellGcmResetDefaultCommandBuffer); - //cellGcmSys.AddFunc(, cellGcmSetupContextData); - //cellGcmSys.AddFunc(, cellGcmCallbackForSnc); - //cellGcmSys.AddFunc(, cellGcmFinish); - //cellGcmSys.AddFunc(, cellGcmFlush); + cellGcmSys->AddFunc(0xa547adde, cellGcmGetControlRegister); + cellGcmSys->AddFunc(0x5e2ee0f0, cellGcmGetDefaultCommandWordSize); + cellGcmSys->AddFunc(0x8cdf8c70, cellGcmGetDefaultSegmentWordSize); + cellGcmSys->AddFunc(0xcaabd992, cellGcmInitDefaultFifoMode); + cellGcmSys->AddFunc(0x9ba451e4, cellGcmSetDefaultFifoSize); + //cellGcmSys->AddFunc(, cellGcmReserveMethodSize); + //cellGcmSys->AddFunc(, cellGcmResetDefaultCommandBuffer); + //cellGcmSys->AddFunc(, cellGcmSetupContextData); + //cellGcmSys->AddFunc(, cellGcmCallbackForSnc); + //cellGcmSys->AddFunc(, cellGcmFinish); + //cellGcmSys->AddFunc(, cellGcmFlush); // Hardware Resource Management - cellGcmSys.AddFunc(0x4524cccd, cellGcmBindTile); - cellGcmSys.AddFunc(0x9dc04436, cellGcmBindZcull); - cellGcmSys.AddFunc(0x1f61b3ff, cellGcmDumpGraphicsError); - cellGcmSys.AddFunc(0xe315a0b2, cellGcmGetConfiguration); - cellGcmSys.AddFunc(0x371674cf, cellGcmGetDisplayBufferByFlipIndex); - cellGcmSys.AddFunc(0x72a577ce, cellGcmGetFlipStatus); - cellGcmSys.AddFunc(0x63387071, cellGcmgetLastFlipTime); - cellGcmSys.AddFunc(0x23ae55a3, cellGcmGetLastSecondVTime); - cellGcmSys.AddFunc(0x055bd74d, cellGcmGetTiledPitchSize); - cellGcmSys.AddFunc(0x723bbc7e, cellGcmGetVBlankCount); - cellGcmSys.AddFunc(0x15bae46b, cellGcmInit); - cellGcmSys.AddFunc(0xfce9e764, cellGcmInitSystemMode); - cellGcmSys.AddFunc(0xb2e761d4, cellGcmResetFlipStatus); - cellGcmSys.AddFunc(0x51c9d62b, cellGcmSetDebugOutputLevel); - cellGcmSys.AddFunc(0xa53d12ae, cellGcmSetDisplayBuffer); - cellGcmSys.AddFunc(0xdc09357e, cellGcmSetFlip); - cellGcmSys.AddFunc(0xa41ef7e8, cellGcmSetFlipHandler); - cellGcmSys.AddFunc(0xacee8542, cellGcmSetFlipImmediate); - cellGcmSys.AddFunc(0x4ae8d215, cellGcmSetFlipMode); - cellGcmSys.AddFunc(0xa47c09ff, cellGcmSetFlipStatus); - cellGcmSys.AddFunc(0xd01b570d, cellGcmSetGraphicsHandler); - cellGcmSys.AddFunc(0x0b4b62d5, cellGcmSetPrepareFlip); - cellGcmSys.AddFunc(0x0a862772, cellGcmSetQueueHandler); - cellGcmSys.AddFunc(0x4d7ce993, cellGcmSetSecondVFrequency); - cellGcmSys.AddFunc(0xdc494430, cellGcmSetSecondVHandler); - cellGcmSys.AddFunc(0xbd100dbc, cellGcmSetTileInfo); - cellGcmSys.AddFunc(0x06edea9e, cellGcmSetUserHandler); - cellGcmSys.AddFunc(0xffe0160e, cellGcmSetVBlankFrequency); - cellGcmSys.AddFunc(0xa91b0402, cellGcmSetVBlankHandler); - cellGcmSys.AddFunc(0x983fb9aa, cellGcmSetWaitFlip); - cellGcmSys.AddFunc(0xd34a420d, cellGcmSetZcull); - cellGcmSys.AddFunc(0x25b40ab4, cellGcmSortRemapEaIoAddress); - cellGcmSys.AddFunc(0xd9b7653e, cellGcmUnbindTile); - cellGcmSys.AddFunc(0xa75640e8, cellGcmUnbindZcull); - cellGcmSys.AddFunc(0x657571f7, cellGcmGetTileInfo); - cellGcmSys.AddFunc(0xd9a0a879, cellGcmGetZcullInfo); - cellGcmSys.AddFunc(0x0e6b0dae, cellGcmGetDisplayInfo); - cellGcmSys.AddFunc(0x93806525, cellGcmGetCurrentDisplayBufferId); - cellGcmSys.AddFunc(0xbd6d60d9, cellGcmSetInvalidateTile); - //cellGcmSys.AddFunc(, cellGcmSetFlipWithWaitLabel); + cellGcmSys->AddFunc(0x4524cccd, cellGcmBindTile); + cellGcmSys->AddFunc(0x9dc04436, cellGcmBindZcull); + cellGcmSys->AddFunc(0x1f61b3ff, cellGcmDumpGraphicsError); + cellGcmSys->AddFunc(0xe315a0b2, cellGcmGetConfiguration); + cellGcmSys->AddFunc(0x371674cf, cellGcmGetDisplayBufferByFlipIndex); + cellGcmSys->AddFunc(0x72a577ce, cellGcmGetFlipStatus); + cellGcmSys->AddFunc(0x63387071, cellGcmgetLastFlipTime); + cellGcmSys->AddFunc(0x23ae55a3, cellGcmGetLastSecondVTime); + cellGcmSys->AddFunc(0x055bd74d, cellGcmGetTiledPitchSize); + cellGcmSys->AddFunc(0x723bbc7e, cellGcmGetVBlankCount); + cellGcmSys->AddFunc(0x15bae46b, cellGcmInit); + cellGcmSys->AddFunc(0xfce9e764, cellGcmInitSystemMode); + cellGcmSys->AddFunc(0xb2e761d4, cellGcmResetFlipStatus); + cellGcmSys->AddFunc(0x51c9d62b, cellGcmSetDebugOutputLevel); + cellGcmSys->AddFunc(0xa53d12ae, cellGcmSetDisplayBuffer); + cellGcmSys->AddFunc(0xdc09357e, cellGcmSetFlip); + cellGcmSys->AddFunc(0xa41ef7e8, cellGcmSetFlipHandler); + cellGcmSys->AddFunc(0xacee8542, cellGcmSetFlipImmediate); + cellGcmSys->AddFunc(0x4ae8d215, cellGcmSetFlipMode); + cellGcmSys->AddFunc(0xa47c09ff, cellGcmSetFlipStatus); + cellGcmSys->AddFunc(0xd01b570d, cellGcmSetGraphicsHandler); + cellGcmSys->AddFunc(0x0b4b62d5, cellGcmSetPrepareFlip); + cellGcmSys->AddFunc(0x0a862772, cellGcmSetQueueHandler); + cellGcmSys->AddFunc(0x4d7ce993, cellGcmSetSecondVFrequency); + cellGcmSys->AddFunc(0xdc494430, cellGcmSetSecondVHandler); + cellGcmSys->AddFunc(0xbd100dbc, cellGcmSetTileInfo); + cellGcmSys->AddFunc(0x06edea9e, cellGcmSetUserHandler); + cellGcmSys->AddFunc(0xffe0160e, cellGcmSetVBlankFrequency); + cellGcmSys->AddFunc(0xa91b0402, cellGcmSetVBlankHandler); + cellGcmSys->AddFunc(0x983fb9aa, cellGcmSetWaitFlip); + cellGcmSys->AddFunc(0xd34a420d, cellGcmSetZcull); + cellGcmSys->AddFunc(0x25b40ab4, cellGcmSortRemapEaIoAddress); + cellGcmSys->AddFunc(0xd9b7653e, cellGcmUnbindTile); + cellGcmSys->AddFunc(0xa75640e8, cellGcmUnbindZcull); + cellGcmSys->AddFunc(0x657571f7, cellGcmGetTileInfo); + cellGcmSys->AddFunc(0xd9a0a879, cellGcmGetZcullInfo); + cellGcmSys->AddFunc(0x0e6b0dae, cellGcmGetDisplayInfo); + cellGcmSys->AddFunc(0x93806525, cellGcmGetCurrentDisplayBufferId); + cellGcmSys->AddFunc(0xbd6d60d9, cellGcmSetInvalidateTile); + //cellGcmSys->AddFunc(, cellGcmSetFlipWithWaitLabel); // Memory Mapping - cellGcmSys.AddFunc(0x21ac3697, cellGcmAddressToOffset); - cellGcmSys.AddFunc(0xfb81c03e, cellGcmGetMaxIoMapSize); - cellGcmSys.AddFunc(0x2922aed0, cellGcmGetOffsetTable); - cellGcmSys.AddFunc(0x2a6fba9c, cellGcmIoOffsetToAddress); - cellGcmSys.AddFunc(0x63441cb4, cellGcmMapEaIoAddress); - cellGcmSys.AddFunc(0x626e8518, cellGcmMapEaIoAddressWithFlags); - cellGcmSys.AddFunc(0xdb769b32, cellGcmMapLocalMemory); - cellGcmSys.AddFunc(0xa114ec67, cellGcmMapMainMemory); - cellGcmSys.AddFunc(0xa7ede268, cellGcmReserveIoMapSize); - cellGcmSys.AddFunc(0xefd00f54, cellGcmUnmapEaIoAddress); - cellGcmSys.AddFunc(0xdb23e867, cellGcmUnmapIoAddress); - cellGcmSys.AddFunc(0x3b9bd5bd, cellGcmUnreserveIoMapSize); + cellGcmSys->AddFunc(0x21ac3697, cellGcmAddressToOffset); + cellGcmSys->AddFunc(0xfb81c03e, cellGcmGetMaxIoMapSize); + cellGcmSys->AddFunc(0x2922aed0, cellGcmGetOffsetTable); + cellGcmSys->AddFunc(0x2a6fba9c, cellGcmIoOffsetToAddress); + cellGcmSys->AddFunc(0x63441cb4, cellGcmMapEaIoAddress); + cellGcmSys->AddFunc(0x626e8518, cellGcmMapEaIoAddressWithFlags); + cellGcmSys->AddFunc(0xdb769b32, cellGcmMapLocalMemory); + cellGcmSys->AddFunc(0xa114ec67, cellGcmMapMainMemory); + cellGcmSys->AddFunc(0xa7ede268, cellGcmReserveIoMapSize); + cellGcmSys->AddFunc(0xefd00f54, cellGcmUnmapEaIoAddress); + cellGcmSys->AddFunc(0xdb23e867, cellGcmUnmapIoAddress); + cellGcmSys->AddFunc(0x3b9bd5bd, cellGcmUnreserveIoMapSize); // Cursor - cellGcmSys.AddFunc(0x107bf3a1, cellGcmInitCursor); - cellGcmSys.AddFunc(0xc47d0812, cellGcmSetCursorEnable); - cellGcmSys.AddFunc(0x69c6cc82, cellGcmSetCursorDisable); - cellGcmSys.AddFunc(0xf9bfdc72, cellGcmSetCursorImageOffset); - cellGcmSys.AddFunc(0x1a0de550, cellGcmSetCursorPosition); - cellGcmSys.AddFunc(0xbd2fa0a7, cellGcmUpdateCursor); + cellGcmSys->AddFunc(0x107bf3a1, cellGcmInitCursor); + cellGcmSys->AddFunc(0xc47d0812, cellGcmSetCursorEnable); + cellGcmSys->AddFunc(0x69c6cc82, cellGcmSetCursorDisable); + cellGcmSys->AddFunc(0xf9bfdc72, cellGcmSetCursorImageOffset); + cellGcmSys->AddFunc(0x1a0de550, cellGcmSetCursorPosition); + cellGcmSys->AddFunc(0xbd2fa0a7, cellGcmUpdateCursor); // Functions for Maintaining Compatibility - cellGcmSys.AddFunc(0xbc982946, cellGcmSetDefaultCommandBuffer); - //cellGcmSys.AddFunc(, cellGcmGetCurrentBuffer); - //cellGcmSys.AddFunc(, cellGcmSetCurrentBuffer); - //cellGcmSys.AddFunc(, cellGcmSetDefaultCommandBufferAndSegmentWordSize); - //cellGcmSys.AddFunc(, cellGcmSetUserCallback); + cellGcmSys->AddFunc(0xbc982946, cellGcmSetDefaultCommandBuffer); + //cellGcmSys->AddFunc(, cellGcmGetCurrentBuffer); + //cellGcmSys->AddFunc(, cellGcmSetCurrentBuffer); + //cellGcmSys->AddFunc(, cellGcmSetDefaultCommandBufferAndSegmentWordSize); + //cellGcmSys->AddFunc(, cellGcmSetUserCallback); // Other - cellGcmSys.AddFunc(0x21397818, cellGcmSetFlipCommand); - cellGcmSys.AddFunc(0x3a33c1fd, cellGcmFunc15); - cellGcmSys.AddFunc(0xd8f88e1a, cellGcmSetFlipCommandWithWaitLabel); - cellGcmSys.AddFunc(0xd0b1d189, cellGcmSetTile); + cellGcmSys->AddFunc(0x21397818, cellGcmSetFlipCommand); + cellGcmSys->AddFunc(0x3a33c1fd, cellGcmFunc15); + cellGcmSys->AddFunc(0xd8f88e1a, cellGcmSetFlipCommandWithWaitLabel); + cellGcmSys->AddFunc(0xd0b1d189, cellGcmSetTile); } void cellGcmSys_load() diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index a557e05673..5133ce51c4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -283,4 +283,4 @@ void cellGem_init() cellGem.AddFunc(0x1f6328d8, cellGemWriteExternalPort); } -#endif +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index cc83f278e5..bdfdc72dbb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -11,8 +11,9 @@ #include "stblib/stb_image.h" #include "stblib/stb_image.c" // (TODO: Should we put this elsewhere?) -void cellGifDec_init(); -Module cellGifDec(0xf010, cellGifDec_init); +//void cellGifDec_init(); +//Module cellGifDec(0xf010, cellGifDec_init); +extern Module *cellGifDec = nullptr; int cellGifDecCreate(u32 mainHandle, u32 threadInParam, u32 threadOutParam) { @@ -73,7 +74,7 @@ int cellGifDecOpen(u32 mainHandle, mem32_t subHandle, const mem_ptr_tfileSize = sb->st_size; // Get CellFsStat.st_size // From now, every u32 subHandle argument is a pointer to a CellPngDecSubHandle struct. - subHandle = cellGifDec.GetNewId(current_subHandle); + subHandle = cellGifDec->GetNewId(current_subHandle); return CELL_OK; } @@ -84,7 +85,7 @@ int cellGifDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tCheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; const u32& fd = subHandle_data->fd; @@ -125,7 +126,7 @@ int cellGifDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_tCheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; CellGifDecInfo& current_info = subHandle_data->info; @@ -157,7 +158,7 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m dataOutInfo->status = CELL_GIFDEC_DEC_STATUS_STOP; CellGifDecSubHandle* subHandle_data; - if(!cellGifDec.CheckId(subHandle, subHandle_data)) + if(!cellGifDec->CheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; const u32& fd = subHandle_data->fd; @@ -206,7 +207,7 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int cellGifDecClose(u32 mainHandle, u32 subHandle) { CellGifDecSubHandle* subHandle_data; - if(!cellGifDec.CheckId(subHandle, subHandle_data)) + if(!cellGifDec->CheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; cellFsClose(subHandle_data->fd); @@ -223,17 +224,17 @@ int cellGifDecDestroy(u32 mainHandle) void cellGifDec_init() { - cellGifDec.AddFunc(0xb60d42a5, cellGifDecCreate); - cellGifDec.AddFunc(0x4711cb7f, cellGifDecExtCreate); - cellGifDec.AddFunc(0x75745079, cellGifDecOpen); - cellGifDec.AddFunc(0xf0da95de, cellGifDecReadHeader); - cellGifDec.AddFunc(0x41a90dc4, cellGifDecSetParameter); - cellGifDec.AddFunc(0x44b1bc61, cellGifDecDecodeData); - cellGifDec.AddFunc(0x116a7da9, cellGifDecClose); - cellGifDec.AddFunc(0xe74b2cb1, cellGifDecDestroy); + cellGifDec->AddFunc(0xb60d42a5, cellGifDecCreate); + cellGifDec->AddFunc(0x4711cb7f, cellGifDecExtCreate); + cellGifDec->AddFunc(0x75745079, cellGifDecOpen); + cellGifDec->AddFunc(0xf0da95de, cellGifDecReadHeader); + cellGifDec->AddFunc(0x41a90dc4, cellGifDecSetParameter); + cellGifDec->AddFunc(0x44b1bc61, cellGifDecDecodeData); + cellGifDec->AddFunc(0x116a7da9, cellGifDecClose); + cellGifDec->AddFunc(0xe74b2cb1, cellGifDecDestroy); - /*cellGifDec.AddFunc(0x17fb83c1, cellGifDecExtOpen); - cellGifDec.AddFunc(0xe53f91f2, cellGifDecExtReadHeader); - cellGifDec.AddFunc(0x95cae771, cellGifDecExtSetParameter); - cellGifDec.AddFunc(0x02e7e03e, cellGifDecExtDecodeData);*/ + /*cellGifDec->AddFunc(0x17fb83c1, cellGifDecExtOpen); + cellGifDec->AddFunc(0xe53f91f2, cellGifDecExtReadHeader); + cellGifDec->AddFunc(0x95cae771, cellGifDecExtSetParameter); + cellGifDec->AddFunc(0x02e7e03e, cellGifDecExtDecodeData);*/ } diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index e2ba8b24df..74105d0c53 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -8,8 +8,9 @@ #include "cellJpgDec.h" #include "stblib/stb_image.h" -void cellJpgDec_init(); -Module cellJpgDec(0x000f, cellJpgDec_init); +//void cellJpgDec_init(); +//Module cellJpgDec(0x000f, cellJpgDec_init); +extern Module *cellJpgDec = nullptr; int cellJpgDecCreate(u32 mainHandle, u32 threadInParam, u32 threadOutParam) { @@ -31,7 +32,7 @@ int cellJpgDecDestroy(u32 mainHandle) int cellJpgDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t src, mem_ptr_t openInfo) { - cellJpgDec.Warning("cellJpgDecOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x)", + cellJpgDec->Warning("cellJpgDecOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x)", mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo); if (!subHandle.IsGood() || !src.IsGood() || !openInfo.IsGood()) @@ -52,7 +53,7 @@ int cellJpgDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s current_subHandle->fileSize = sb->st_size; // Get CellFsStat.st_size // From now, every u32 subHandle argument is a pointer to a CellPngDecSubHandle struct. - subHandle = cellJpgDec.GetNewId(current_subHandle); + subHandle = cellJpgDec->GetNewId(current_subHandle); return CELL_OK; } @@ -60,7 +61,7 @@ int cellJpgDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s int cellJpgDecClose(u32 mainHandle, u32 subHandle) { CellJpgDecSubHandle* subHandle_data; - if(!cellJpgDec.CheckId(subHandle, subHandle_data)) + if(!cellJpgDec->CheckId(subHandle, subHandle_data)) return CELL_JPGDEC_ERROR_FATAL; cellFsClose(subHandle_data->fd); @@ -71,13 +72,13 @@ int cellJpgDecClose(u32 mainHandle, u32 subHandle) int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t info) { - cellJpgDec.Log("cellJpgDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%llx)", mainHandle, subHandle, info.GetAddr()); + cellJpgDec->Log("cellJpgDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%llx)", mainHandle, subHandle, info.GetAddr()); if (!info.IsGood()) return CELL_JPGDEC_ERROR_ARG; CellJpgDecSubHandle* subHandle_data; - if(!cellJpgDec.CheckId(subHandle, subHandle_data)) + if(!cellJpgDec->CheckId(subHandle, subHandle_data)) return CELL_JPGDEC_ERROR_FATAL; const u32& fd = subHandle_data->fd; @@ -137,7 +138,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m dataOutInfo->status = CELL_JPGDEC_DEC_STATUS_STOP; CellJpgDecSubHandle* subHandle_data; - if(!cellJpgDec.CheckId(subHandle, subHandle_data)) + if(!cellJpgDec->CheckId(subHandle, subHandle_data)) return CELL_JPGDEC_ERROR_FATAL; const u32& fd = subHandle_data->fd; @@ -182,7 +183,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m case CELL_JPG_UPSAMPLE_ONLY: case CELL_JPG_GRAYSCALE_TO_ALPHA_RGBA: case CELL_JPG_GRAYSCALE_TO_ALPHA_ARGB: - cellJpgDec.Error("cellJpgDecDecodeData: Unsupported color space (%d)", current_outParam.outputColorSpace.ToLE()); + cellJpgDec->Error("cellJpgDecDecodeData: Unsupported color space (%d)", current_outParam.outputColorSpace.ToLE()); break; default: @@ -203,7 +204,7 @@ int cellJpgDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_tCheckId(subHandle, subHandle_data)) return CELL_JPGDEC_ERROR_FATAL; CellJpgDecInfo& current_info = subHandle_data->info; @@ -243,17 +244,17 @@ int cellJpgDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_tAddFunc(0xa7978f59, cellJpgDecCreate); + cellJpgDec->AddFunc(0x8b300f66, cellJpgDecExtCreate); + cellJpgDec->AddFunc(0x976ca5c2, cellJpgDecOpen); + cellJpgDec->AddFunc(0x6d9ebccf, cellJpgDecReadHeader); + cellJpgDec->AddFunc(0xe08f3910, cellJpgDecSetParameter); + cellJpgDec->AddFunc(0xaf8bb012, cellJpgDecDecodeData); + cellJpgDec->AddFunc(0x9338a07a, cellJpgDecClose); + cellJpgDec->AddFunc(0xd8ea91f8, cellJpgDecDestroy); - /*cellJpgDec.AddFunc(0xa9f703e3, cellJpgDecExtOpen); - cellJpgDec.AddFunc(0xb91eb3d2, cellJpgDecExtReadHeader); - cellJpgDec.AddFunc(0x65cbbb16, cellJpgDecExtSetParameter); - cellJpgDec.AddFunc(0x716f8792, cellJpgDecExtDecodeData);*/ + /*cellJpgDec->AddFunc(0xa9f703e3, cellJpgDecExtOpen); + cellJpgDec->AddFunc(0xb91eb3d2, cellJpgDecExtReadHeader); + cellJpgDec->AddFunc(0x65cbbb16, cellJpgDecExtSetParameter); + cellJpgDec->AddFunc(0x716f8792, cellJpgDecExtDecodeData);*/ } diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index 641322fb6f..d09464ba5a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -11,8 +11,10 @@ #include #endif -void cellL10n_init(); -Module cellL10n(0x001e, cellL10n_init); +//void cellL10n_init(); +//Module cellL10n(0x001e, cellL10n_init); +Module *cellL10n = nullptr; + // L10nResult enum @@ -38,7 +40,7 @@ enum int UTF16stoUTF8s(mem16_ptr_t utf16, mem64_t utf16_len, mem8_ptr_t utf8, mem64_t utf8_len) { - cellL10n.Warning("UTF16stoUTF8s(utf16_addr=0x%x, utf16_len_addr=0x%x, utf8_addr=0x%x, utf8_len_addr=0x%x)", + cellL10n->Warning("UTF16stoUTF8s(utf16_addr=0x%x, utf16_len_addr=0x%x, utf8_addr=0x%x, utf8_len_addr=0x%x)", utf16.GetAddr(), utf16_len.GetAddr(), utf8.GetAddr(), utf8_len.GetAddr()); if (!utf16.IsGood() || !utf16_len.IsGood() || !utf8_len.IsGood()) @@ -65,11 +67,11 @@ int UTF16stoUTF8s(mem16_ptr_t utf16, mem64_t utf16_len, mem8_ptr_t utf8, mem64_t int jstrchk(mem8_ptr_t jstr) { if (!jstr.IsGood()) - cellL10n.Error("jstrchk(jstr_addr=0x%x): invalid address", jstr.GetAddr()); + cellL10n->Error("jstrchk(jstr_addr=0x%x): invalid address", jstr.GetAddr()); else if (jstr[0]) - cellL10n.Log("jstrchk(jstr_addr=0x%x): utf-8: [%s]", jstr.GetAddr(), Memory.ReadString(jstr.GetAddr()).c_str()); + cellL10n->Log("jstrchk(jstr_addr=0x%x): utf-8: [%s]", jstr.GetAddr(), Memory.ReadString(jstr.GetAddr()).c_str()); else - cellL10n.Log("jstrchk(jstr_addr=0x%x): empty string", jstr.GetAddr()); + cellL10n->Log("jstrchk(jstr_addr=0x%x): empty string", jstr.GetAddr()); return L10N_STR_UTF8; } @@ -78,169 +80,169 @@ void cellL10n_init() { // NOTE: I think this module should be LLE'd instead of implementing all its functions - // cellL10n.AddFunc(0x005200e6, UCS2toEUCJP); - // cellL10n.AddFunc(0x01b0cbf4, l10n_convert); - // cellL10n.AddFunc(0x0356038c, UCS2toUTF32); - // cellL10n.AddFunc(0x05028763, jis2kuten); - // cellL10n.AddFunc(0x058addc8, UTF8toGB18030); - // cellL10n.AddFunc(0x060ee3b2, JISstoUTF8s); - // cellL10n.AddFunc(0x07168a83, SjisZen2Han); - // cellL10n.AddFunc(0x0bc386c8, ToSjisLower); - // cellL10n.AddFunc(0x0bedf77d, UCS2toGB18030); - // cellL10n.AddFunc(0x0bf867e2, HZstoUCS2s); - // cellL10n.AddFunc(0x0ce278fd, UCS2stoHZs); - // cellL10n.AddFunc(0x0d90a48d, UCS2stoSJISs); - // cellL10n.AddFunc(0x0f624540, kuten2eucjp); - // cellL10n.AddFunc(0x14ee3649, sjis2jis); - // cellL10n.AddFunc(0x14f504b8, EUCKRstoUCS2s); - // cellL10n.AddFunc(0x16eaf5f1, UHCstoEUCKRs); - // cellL10n.AddFunc(0x1758053c, jis2sjis); - // cellL10n.AddFunc(0x1906ce6b, jstrnchk); - // cellL10n.AddFunc(0x1ac0d23d, L10nConvert); - // cellL10n.AddFunc(0x1ae2acee, EUCCNstoUTF8s); - // cellL10n.AddFunc(0x1cb1138f, GBKstoUCS2s); - // cellL10n.AddFunc(0x1da42d70, eucjphan2zen); - // cellL10n.AddFunc(0x1ec712e0, ToSjisHira); - // cellL10n.AddFunc(0x1fb50183, GBKtoUCS2); - // cellL10n.AddFunc(0x21948c03, eucjp2jis); - // cellL10n.AddFunc(0x21aa3045, UTF32stoUTF8s); - // cellL10n.AddFunc(0x24fd32a9, sjishan2zen); - // cellL10n.AddFunc(0x256b6861, UCS2toSBCS); - // cellL10n.AddFunc(0x262a5ae2, UTF8stoGBKs); - // cellL10n.AddFunc(0x28724522, UTF8toUCS2); - // cellL10n.AddFunc(0x2ad091c6, UCS2stoUTF8s); - // cellL10n.AddFunc(0x2b84030c, EUCKRstoUTF8s); - // cellL10n.AddFunc(0x2efa7294, UTF16stoUTF32s); - // cellL10n.AddFunc(0x2f9eb543, UTF8toEUCKR); - // cellL10n.AddFunc(0x317ab7c2, UTF16toUTF8); - // cellL10n.AddFunc(0x32689828, ARIBstoUTF8s); - // cellL10n.AddFunc(0x33435818, SJISstoUTF8s); - // cellL10n.AddFunc(0x33f8b35c, sjiszen2han); - // cellL10n.AddFunc(0x3968f176, ToEucJpLower); - // cellL10n.AddFunc(0x398a3dee, MSJIStoUTF8); - // cellL10n.AddFunc(0x3a20bc34, UCS2stoMSJISs); - // cellL10n.AddFunc(0x3dabd5a7, EUCJPtoUTF8); - // cellL10n.AddFunc(0x3df65b64, eucjp2sjis); - // cellL10n.AddFunc(0x408a622b, ToEucJpHira); - // cellL10n.AddFunc(0x41b4a5ae, UHCstoUCS2s); - // cellL10n.AddFunc(0x41ccf033, ToEucJpKata); - // cellL10n.AddFunc(0x42838145, HZstoUTF8s); - // cellL10n.AddFunc(0x4931b44e, UTF8toMSJIS); - // cellL10n.AddFunc(0x4b3bbacb, BIG5toUTF8); - // cellL10n.AddFunc(0x511d386b, EUCJPstoSJISs); - // cellL10n.AddFunc(0x52b7883f, UTF8stoBIG5s); - // cellL10n.AddFunc(0x53558b6b, UTF16stoUCS2s); - // cellL10n.AddFunc(0x53764725, UCS2stoGB18030s); - // cellL10n.AddFunc(0x53c71ac2, EUCJPtoSJIS); - // cellL10n.AddFunc(0x54f59807, EUCJPtoUCS2); - // cellL10n.AddFunc(0x55f6921c, UCS2stoGBKs); - // cellL10n.AddFunc(0x58246762, EUCKRtoUHC); - // cellL10n.AddFunc(0x596df41c, UCS2toSJIS); - // cellL10n.AddFunc(0x5a4ab223, MSJISstoUTF8s); - // cellL10n.AddFunc(0x5ac783dc, EUCJPstoUTF8s); - // cellL10n.AddFunc(0x5b684dfb, UCS2toBIG5); - // cellL10n.AddFunc(0x5cd29270, UTF8stoEUCKRs); - // cellL10n.AddFunc(0x5e1d9330, UHCstoUTF8s); - // cellL10n.AddFunc(0x60ffa0ec, GB18030stoUCS2s); - // cellL10n.AddFunc(0x6122e000, SJIStoUTF8); - // cellL10n.AddFunc(0x6169f205, JISstoSJISs); - // cellL10n.AddFunc(0x61fb9442, UTF8toUTF16); - // cellL10n.AddFunc(0x62b36bcf, UTF8stoMSJISs); - // cellL10n.AddFunc(0x63219199, EUCKRtoUTF8); - // cellL10n.AddFunc(0x638c2fc1, SjisHan2Zen); - // cellL10n.AddFunc(0x64a10ec8, UCS2toUTF16); - // cellL10n.AddFunc(0x65444204, UCS2toMSJIS); - // cellL10n.AddFunc(0x6621a82c, sjis2kuten); - // cellL10n.AddFunc(0x6a6f25d1, UCS2toUHC); - // cellL10n.AddFunc(0x6c62d879, UTF32toUCS2); - // cellL10n.AddFunc(0x6de4b508, ToSjisUpper); - // cellL10n.AddFunc(0x6e0705c4, UTF8toEUCJP); - // cellL10n.AddFunc(0x6e5906fd, UCS2stoEUCJPs); - // cellL10n.AddFunc(0x6fc530b3, UTF16toUCS2); - // cellL10n.AddFunc(0x714a9b4a, UCS2stoUTF16s); - // cellL10n.AddFunc(0x71804d64, UCS2stoEUCCNs); - // cellL10n.AddFunc(0x72632e53, SBCSstoUTF8s); - // cellL10n.AddFunc(0x73f2cd21, SJISstoJISs); - // cellL10n.AddFunc(0x74496718, SBCStoUTF8); - // cellL10n.AddFunc(0x74871fe0, UTF8toUTF32); - cellL10n.AddFunc(0x750c363d, jstrchk); - // cellL10n.AddFunc(0x7c5bde1c, UHCtoEUCKR); - // cellL10n.AddFunc(0x7c912bda, kuten2jis); - // cellL10n.AddFunc(0x7d07a1c2, UTF8toEUCCN); - // cellL10n.AddFunc(0x8171c1cc, EUCCNtoUTF8); - // cellL10n.AddFunc(0x82d5ecdf, EucJpZen2Han); - // cellL10n.AddFunc(0x8555fe15, UTF32stoUTF16s); - // cellL10n.AddFunc(0x860fc741, GBKtoUTF8); - // cellL10n.AddFunc(0x867f7b8b, ToEucJpUpper); - // cellL10n.AddFunc(0x88f8340b, UCS2stoJISs); - // cellL10n.AddFunc(0x89236c86, UTF8stoGB18030s); - // cellL10n.AddFunc(0x8a56f148, EUCKRstoUHCs); - // cellL10n.AddFunc(0x8ccdba38, UTF8stoUTF32s); - // cellL10n.AddFunc(0x8f472054, UTF8stoEUCCNs); - // cellL10n.AddFunc(0x90e9b5d2, EUCJPstoUCS2s); - // cellL10n.AddFunc(0x91a99765, UHCtoUCS2); - // cellL10n.AddFunc(0x931ff25a, L10nConvertStr); - // cellL10n.AddFunc(0x949bb14c, GBKstoUTF8s); - // cellL10n.AddFunc(0x9557ac9b, UTF8toUHC); - // cellL10n.AddFunc(0x9768b6d3, UTF32toUTF8); - // cellL10n.AddFunc(0x9874020d, sjis2eucjp); - // cellL10n.AddFunc(0x9a0e7d23, UCS2toEUCCN); - // cellL10n.AddFunc(0x9a13d6b8, UTF8stoUHCs); - // cellL10n.AddFunc(0x9a72059d, EUCKRtoUCS2); - // cellL10n.AddFunc(0x9b1210c6, UTF32toUTF16); - // cellL10n.AddFunc(0x9cd8135b, EUCCNstoUCS2s); - // cellL10n.AddFunc(0x9ce52809, SBCSstoUCS2s); - // cellL10n.AddFunc(0x9cf1ab77, UTF8stoJISs); - // cellL10n.AddFunc(0x9d14dc46, ToSjisKata); - // cellL10n.AddFunc(0x9dcde367, jis2eucjp); - // cellL10n.AddFunc(0x9ec52258, BIG5toUCS2); - // cellL10n.AddFunc(0xa0d463c0, UCS2toGBK); - // cellL10n.AddFunc(0xa19fb9de, UTF16toUTF32); - // cellL10n.AddFunc(0xa298cad2, l10n_convert_str); - // cellL10n.AddFunc(0xa34fa0eb, EUCJPstoJISs); - // cellL10n.AddFunc(0xa5146299, UTF8stoARIBs); - // cellL10n.AddFunc(0xa609f3e9, JISstoEUCJPs); - // cellL10n.AddFunc(0xa60ff5c9, EucJpHan2Zen); - // cellL10n.AddFunc(0xa963619c, isEucJpKigou); - // cellL10n.AddFunc(0xa9a76fb8, UCS2toUTF8); - // cellL10n.AddFunc(0xaf18d499, GB18030toUCS2); - // cellL10n.AddFunc(0xb3361be6, UHCtoUTF8); - // cellL10n.AddFunc(0xb6e45343, MSJIStoUCS2); - // cellL10n.AddFunc(0xb7cef4a6, UTF8toGBK); - // cellL10n.AddFunc(0xb7e08f7a, kuten2sjis); - // cellL10n.AddFunc(0xb9cf473d, UTF8toSBCS); - // cellL10n.AddFunc(0xbdd44ee3, SJIStoUCS2); - // cellL10n.AddFunc(0xbe42e661, eucjpzen2han); - // cellL10n.AddFunc(0xbe8d5485, UCS2stoARIBs); - // cellL10n.AddFunc(0xbefe3869, isSjisKigou); - // cellL10n.AddFunc(0xc62b758d, UTF8stoEUCJPs); - // cellL10n.AddFunc(0xc7bdcb4c, UCS2toEUCKR); - // cellL10n.AddFunc(0xc944fa56, SBCStoUCS2); - // cellL10n.AddFunc(0xc9b78f58, MSJISstoUCS2s); - // cellL10n.AddFunc(0xcc1633cc, l10n_get_converter); - // cellL10n.AddFunc(0xd02ef83d, GB18030stoUTF8s); - // cellL10n.AddFunc(0xd8721e2c, SJISstoEUCJPs); - // cellL10n.AddFunc(0xd8cb24cb, UTF32stoUCS2s); - // cellL10n.AddFunc(0xd990858b, BIG5stoUTF8s); - // cellL10n.AddFunc(0xd9fb1224, EUCCNtoUCS2); - // cellL10n.AddFunc(0xda67b37f, UTF8stoSBCSs); - // cellL10n.AddFunc(0xdc54886c, UCS2stoEUCKRs); - // cellL10n.AddFunc(0xdd5ebdeb, UTF8stoSJISs); - // cellL10n.AddFunc(0xdefa1c17, UTF8stoHZs); - // cellL10n.AddFunc(0xe2eabb32, eucjp2kuten); - // cellL10n.AddFunc(0xe6d9e234, UTF8toBIG5); - cellL10n.AddFunc(0xe6f5711b, UTF16stoUTF8s); - // cellL10n.AddFunc(0xe956dc64, JISstoUCS2s); - // cellL10n.AddFunc(0xeabc3d00, GB18030toUTF8); - // cellL10n.AddFunc(0xeb3dc670, UTF8toSJIS); - // cellL10n.AddFunc(0xeb41cc68, ARIBstoUCS2s); - // cellL10n.AddFunc(0xeb685b83, UCS2stoUTF32s); - // cellL10n.AddFunc(0xebae29c0, UCS2stoSBCSs); - // cellL10n.AddFunc(0xee6c6a39, UCS2stoBIG5s); - // cellL10n.AddFunc(0xf1dcfa71, UCS2stoUHCs); - // cellL10n.AddFunc(0xf439728e, SJIStoEUCJP); - // cellL10n.AddFunc(0xf7681b9a, UTF8stoUTF16s); - // cellL10n.AddFunc(0xf9b1896d, SJISstoUCS2s); - // cellL10n.AddFunc(0xfa4a675a, BIG5stoUCS2s); - // cellL10n.AddFunc(0xfdbf6ac5, UTF8stoUCS2s); + // cellL10n->AddFunc(0x005200e6, UCS2toEUCJP); + // cellL10n->AddFunc(0x01b0cbf4, l10n_convert); + // cellL10n->AddFunc(0x0356038c, UCS2toUTF32); + // cellL10n->AddFunc(0x05028763, jis2kuten); + // cellL10n->AddFunc(0x058addc8, UTF8toGB18030); + // cellL10n->AddFunc(0x060ee3b2, JISstoUTF8s); + // cellL10n->AddFunc(0x07168a83, SjisZen2Han); + // cellL10n->AddFunc(0x0bc386c8, ToSjisLower); + // cellL10n->AddFunc(0x0bedf77d, UCS2toGB18030); + // cellL10n->AddFunc(0x0bf867e2, HZstoUCS2s); + // cellL10n->AddFunc(0x0ce278fd, UCS2stoHZs); + // cellL10n->AddFunc(0x0d90a48d, UCS2stoSJISs); + // cellL10n->AddFunc(0x0f624540, kuten2eucjp); + // cellL10n->AddFunc(0x14ee3649, sjis2jis); + // cellL10n->AddFunc(0x14f504b8, EUCKRstoUCS2s); + // cellL10n->AddFunc(0x16eaf5f1, UHCstoEUCKRs); + // cellL10n->AddFunc(0x1758053c, jis2sjis); + // cellL10n->AddFunc(0x1906ce6b, jstrnchk); + // cellL10n->AddFunc(0x1ac0d23d, L10nConvert); + // cellL10n->AddFunc(0x1ae2acee, EUCCNstoUTF8s); + // cellL10n->AddFunc(0x1cb1138f, GBKstoUCS2s); + // cellL10n->AddFunc(0x1da42d70, eucjphan2zen); + // cellL10n->AddFunc(0x1ec712e0, ToSjisHira); + // cellL10n->AddFunc(0x1fb50183, GBKtoUCS2); + // cellL10n->AddFunc(0x21948c03, eucjp2jis); + // cellL10n->AddFunc(0x21aa3045, UTF32stoUTF8s); + // cellL10n->AddFunc(0x24fd32a9, sjishan2zen); + // cellL10n->AddFunc(0x256b6861, UCS2toSBCS); + // cellL10n->AddFunc(0x262a5ae2, UTF8stoGBKs); + // cellL10n->AddFunc(0x28724522, UTF8toUCS2); + // cellL10n->AddFunc(0x2ad091c6, UCS2stoUTF8s); + // cellL10n->AddFunc(0x2b84030c, EUCKRstoUTF8s); + // cellL10n->AddFunc(0x2efa7294, UTF16stoUTF32s); + // cellL10n->AddFunc(0x2f9eb543, UTF8toEUCKR); + // cellL10n->AddFunc(0x317ab7c2, UTF16toUTF8); + // cellL10n->AddFunc(0x32689828, ARIBstoUTF8s); + // cellL10n->AddFunc(0x33435818, SJISstoUTF8s); + // cellL10n->AddFunc(0x33f8b35c, sjiszen2han); + // cellL10n->AddFunc(0x3968f176, ToEucJpLower); + // cellL10n->AddFunc(0x398a3dee, MSJIStoUTF8); + // cellL10n->AddFunc(0x3a20bc34, UCS2stoMSJISs); + // cellL10n->AddFunc(0x3dabd5a7, EUCJPtoUTF8); + // cellL10n->AddFunc(0x3df65b64, eucjp2sjis); + // cellL10n->AddFunc(0x408a622b, ToEucJpHira); + // cellL10n->AddFunc(0x41b4a5ae, UHCstoUCS2s); + // cellL10n->AddFunc(0x41ccf033, ToEucJpKata); + // cellL10n->AddFunc(0x42838145, HZstoUTF8s); + // cellL10n->AddFunc(0x4931b44e, UTF8toMSJIS); + // cellL10n->AddFunc(0x4b3bbacb, BIG5toUTF8); + // cellL10n->AddFunc(0x511d386b, EUCJPstoSJISs); + // cellL10n->AddFunc(0x52b7883f, UTF8stoBIG5s); + // cellL10n->AddFunc(0x53558b6b, UTF16stoUCS2s); + // cellL10n->AddFunc(0x53764725, UCS2stoGB18030s); + // cellL10n->AddFunc(0x53c71ac2, EUCJPtoSJIS); + // cellL10n->AddFunc(0x54f59807, EUCJPtoUCS2); + // cellL10n->AddFunc(0x55f6921c, UCS2stoGBKs); + // cellL10n->AddFunc(0x58246762, EUCKRtoUHC); + // cellL10n->AddFunc(0x596df41c, UCS2toSJIS); + // cellL10n->AddFunc(0x5a4ab223, MSJISstoUTF8s); + // cellL10n->AddFunc(0x5ac783dc, EUCJPstoUTF8s); + // cellL10n->AddFunc(0x5b684dfb, UCS2toBIG5); + // cellL10n->AddFunc(0x5cd29270, UTF8stoEUCKRs); + // cellL10n->AddFunc(0x5e1d9330, UHCstoUTF8s); + // cellL10n->AddFunc(0x60ffa0ec, GB18030stoUCS2s); + // cellL10n->AddFunc(0x6122e000, SJIStoUTF8); + // cellL10n->AddFunc(0x6169f205, JISstoSJISs); + // cellL10n->AddFunc(0x61fb9442, UTF8toUTF16); + // cellL10n->AddFunc(0x62b36bcf, UTF8stoMSJISs); + // cellL10n->AddFunc(0x63219199, EUCKRtoUTF8); + // cellL10n->AddFunc(0x638c2fc1, SjisHan2Zen); + // cellL10n->AddFunc(0x64a10ec8, UCS2toUTF16); + // cellL10n->AddFunc(0x65444204, UCS2toMSJIS); + // cellL10n->AddFunc(0x6621a82c, sjis2kuten); + // cellL10n->AddFunc(0x6a6f25d1, UCS2toUHC); + // cellL10n->AddFunc(0x6c62d879, UTF32toUCS2); + // cellL10n->AddFunc(0x6de4b508, ToSjisUpper); + // cellL10n->AddFunc(0x6e0705c4, UTF8toEUCJP); + // cellL10n->AddFunc(0x6e5906fd, UCS2stoEUCJPs); + // cellL10n->AddFunc(0x6fc530b3, UTF16toUCS2); + // cellL10n->AddFunc(0x714a9b4a, UCS2stoUTF16s); + // cellL10n->AddFunc(0x71804d64, UCS2stoEUCCNs); + // cellL10n->AddFunc(0x72632e53, SBCSstoUTF8s); + // cellL10n->AddFunc(0x73f2cd21, SJISstoJISs); + // cellL10n->AddFunc(0x74496718, SBCStoUTF8); + // cellL10n->AddFunc(0x74871fe0, UTF8toUTF32); + cellL10n->AddFunc(0x750c363d, jstrchk); + // cellL10n->AddFunc(0x7c5bde1c, UHCtoEUCKR); + // cellL10n->AddFunc(0x7c912bda, kuten2jis); + // cellL10n->AddFunc(0x7d07a1c2, UTF8toEUCCN); + // cellL10n->AddFunc(0x8171c1cc, EUCCNtoUTF8); + // cellL10n->AddFunc(0x82d5ecdf, EucJpZen2Han); + // cellL10n->AddFunc(0x8555fe15, UTF32stoUTF16s); + // cellL10n->AddFunc(0x860fc741, GBKtoUTF8); + // cellL10n->AddFunc(0x867f7b8b, ToEucJpUpper); + // cellL10n->AddFunc(0x88f8340b, UCS2stoJISs); + // cellL10n->AddFunc(0x89236c86, UTF8stoGB18030s); + // cellL10n->AddFunc(0x8a56f148, EUCKRstoUHCs); + // cellL10n->AddFunc(0x8ccdba38, UTF8stoUTF32s); + // cellL10n->AddFunc(0x8f472054, UTF8stoEUCCNs); + // cellL10n->AddFunc(0x90e9b5d2, EUCJPstoUCS2s); + // cellL10n->AddFunc(0x91a99765, UHCtoUCS2); + // cellL10n->AddFunc(0x931ff25a, L10nConvertStr); + // cellL10n->AddFunc(0x949bb14c, GBKstoUTF8s); + // cellL10n->AddFunc(0x9557ac9b, UTF8toUHC); + // cellL10n->AddFunc(0x9768b6d3, UTF32toUTF8); + // cellL10n->AddFunc(0x9874020d, sjis2eucjp); + // cellL10n->AddFunc(0x9a0e7d23, UCS2toEUCCN); + // cellL10n->AddFunc(0x9a13d6b8, UTF8stoUHCs); + // cellL10n->AddFunc(0x9a72059d, EUCKRtoUCS2); + // cellL10n->AddFunc(0x9b1210c6, UTF32toUTF16); + // cellL10n->AddFunc(0x9cd8135b, EUCCNstoUCS2s); + // cellL10n->AddFunc(0x9ce52809, SBCSstoUCS2s); + // cellL10n->AddFunc(0x9cf1ab77, UTF8stoJISs); + // cellL10n->AddFunc(0x9d14dc46, ToSjisKata); + // cellL10n->AddFunc(0x9dcde367, jis2eucjp); + // cellL10n->AddFunc(0x9ec52258, BIG5toUCS2); + // cellL10n->AddFunc(0xa0d463c0, UCS2toGBK); + // cellL10n->AddFunc(0xa19fb9de, UTF16toUTF32); + // cellL10n->AddFunc(0xa298cad2, l10n_convert_str); + // cellL10n->AddFunc(0xa34fa0eb, EUCJPstoJISs); + // cellL10n->AddFunc(0xa5146299, UTF8stoARIBs); + // cellL10n->AddFunc(0xa609f3e9, JISstoEUCJPs); + // cellL10n->AddFunc(0xa60ff5c9, EucJpHan2Zen); + // cellL10n->AddFunc(0xa963619c, isEucJpKigou); + // cellL10n->AddFunc(0xa9a76fb8, UCS2toUTF8); + // cellL10n->AddFunc(0xaf18d499, GB18030toUCS2); + // cellL10n->AddFunc(0xb3361be6, UHCtoUTF8); + // cellL10n->AddFunc(0xb6e45343, MSJIStoUCS2); + // cellL10n->AddFunc(0xb7cef4a6, UTF8toGBK); + // cellL10n->AddFunc(0xb7e08f7a, kuten2sjis); + // cellL10n->AddFunc(0xb9cf473d, UTF8toSBCS); + // cellL10n->AddFunc(0xbdd44ee3, SJIStoUCS2); + // cellL10n->AddFunc(0xbe42e661, eucjpzen2han); + // cellL10n->AddFunc(0xbe8d5485, UCS2stoARIBs); + // cellL10n->AddFunc(0xbefe3869, isSjisKigou); + // cellL10n->AddFunc(0xc62b758d, UTF8stoEUCJPs); + // cellL10n->AddFunc(0xc7bdcb4c, UCS2toEUCKR); + // cellL10n->AddFunc(0xc944fa56, SBCStoUCS2); + // cellL10n->AddFunc(0xc9b78f58, MSJISstoUCS2s); + // cellL10n->AddFunc(0xcc1633cc, l10n_get_converter); + // cellL10n->AddFunc(0xd02ef83d, GB18030stoUTF8s); + // cellL10n->AddFunc(0xd8721e2c, SJISstoEUCJPs); + // cellL10n->AddFunc(0xd8cb24cb, UTF32stoUCS2s); + // cellL10n->AddFunc(0xd990858b, BIG5stoUTF8s); + // cellL10n->AddFunc(0xd9fb1224, EUCCNtoUCS2); + // cellL10n->AddFunc(0xda67b37f, UTF8stoSBCSs); + // cellL10n->AddFunc(0xdc54886c, UCS2stoEUCKRs); + // cellL10n->AddFunc(0xdd5ebdeb, UTF8stoSJISs); + // cellL10n->AddFunc(0xdefa1c17, UTF8stoHZs); + // cellL10n->AddFunc(0xe2eabb32, eucjp2kuten); + // cellL10n->AddFunc(0xe6d9e234, UTF8toBIG5); + cellL10n->AddFunc(0xe6f5711b, UTF16stoUTF8s); + // cellL10n->AddFunc(0xe956dc64, JISstoUCS2s); + // cellL10n->AddFunc(0xeabc3d00, GB18030toUTF8); + // cellL10n->AddFunc(0xeb3dc670, UTF8toSJIS); + // cellL10n->AddFunc(0xeb41cc68, ARIBstoUCS2s); + // cellL10n->AddFunc(0xeb685b83, UCS2stoUTF32s); + // cellL10n->AddFunc(0xebae29c0, UCS2stoSBCSs); + // cellL10n->AddFunc(0xee6c6a39, UCS2stoBIG5s); + // cellL10n->AddFunc(0xf1dcfa71, UCS2stoUHCs); + // cellL10n->AddFunc(0xf439728e, SJIStoEUCJP); + // cellL10n->AddFunc(0xf7681b9a, UTF8stoUTF16s); + // cellL10n->AddFunc(0xf9b1896d, SJISstoUCS2s); + // cellL10n->AddFunc(0xfa4a675a, BIG5stoUCS2s); + // cellL10n->AddFunc(0xfdbf6ac5, UTF8stoUCS2s); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index aed1af162e..2874a0b3d4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -6,8 +6,9 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" -void cellNetCtl_init(); -Module cellNetCtl(0x0014, cellNetCtl_init); +//void cellNetCtl_init(); +//Module cellNetCtl(0x0014, cellNetCtl_init); +Module *cellNetCtl; // Error Codes enum @@ -72,7 +73,7 @@ int cellNetCtlTerm() int cellNetCtlGetState(mem32_t state) { - cellNetCtl.Log("cellNetCtlGetState(state_addr=0x%x)", state.GetAddr()); + cellNetCtl->Log("cellNetCtlGetState(state_addr=0x%x)", state.GetAddr()); if (!state.IsGood()) return CELL_NET_CTL_ERROR_INVALID_ADDR; @@ -125,18 +126,18 @@ int cellNetCtlGetNatInfo() void cellNetCtl_init() { - cellNetCtl.AddFunc(0xbd5a59fc, cellNetCtlInit); - cellNetCtl.AddFunc(0x105ee2cb, cellNetCtlTerm); + cellNetCtl->AddFunc(0xbd5a59fc, cellNetCtlInit); + cellNetCtl->AddFunc(0x105ee2cb, cellNetCtlTerm); - cellNetCtl.AddFunc(0x8b3eba69, cellNetCtlGetState); - cellNetCtl.AddFunc(0x0ce13c6b, cellNetCtlAddHandler); - cellNetCtl.AddFunc(0x901815c3, cellNetCtlDelHandler); + cellNetCtl->AddFunc(0x8b3eba69, cellNetCtlGetState); + cellNetCtl->AddFunc(0x0ce13c6b, cellNetCtlAddHandler); + cellNetCtl->AddFunc(0x901815c3, cellNetCtlDelHandler); - cellNetCtl.AddFunc(0x1e585b5d, cellNetCtlGetInfo); + cellNetCtl->AddFunc(0x1e585b5d, cellNetCtlGetInfo); - cellNetCtl.AddFunc(0x04459230, cellNetCtlNetStartDialogLoadAsync); - cellNetCtl.AddFunc(0x71d53210, cellNetCtlNetStartDialogAbortAsync); - cellNetCtl.AddFunc(0x0f1f13d3, cellNetCtlNetStartDialogUnloadAsync); + cellNetCtl->AddFunc(0x04459230, cellNetCtlNetStartDialogLoadAsync); + cellNetCtl->AddFunc(0x71d53210, cellNetCtlNetStartDialogAbortAsync); + cellNetCtl->AddFunc(0x0f1f13d3, cellNetCtlNetStartDialogUnloadAsync); - cellNetCtl.AddFunc(0x3a12865f, cellNetCtlGetNatInfo); + cellNetCtl->AddFunc(0x3a12865f, cellNetCtlGetNatInfo); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp index 42ccbc8f80..25907207e1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp @@ -45,4 +45,4 @@ void cellOvis_init() cellOvis.AddFunc(0xce6cb776, cellOvisFixSpuSegments); cellOvis.AddFunc(0x629ba0c0, cellOvisInvalidateOverlappedSegments); } -#endif +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index f3d20b252d..66c31b128a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -7,8 +7,10 @@ #include "Emu/SysCalls/Modules.h" #include "cellPamf.h" -void cellPamf_init(); -Module cellPamf(0x0012, cellPamf_init); +//void cellPamf_init(); +//Module cellPamf(0x0012, cellPamf_init); +Module *cellPamf = nullptr; + int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pEsFilterId) { @@ -30,7 +32,7 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pE pEsFilterId->supplementalInfo2 = 0; } else - cellPamf.Error("pamfStreamTypeToEsFilterId: invalid CELL_PAMF_STREAM_TYPE_AVC channel (ch=%d)", ch); + cellPamf->Error("pamfStreamTypeToEsFilterId: invalid CELL_PAMF_STREAM_TYPE_AVC channel (ch=%d)", ch); } break; case CELL_PAMF_STREAM_TYPE_ATRAC3PLUS: @@ -42,7 +44,7 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pE pEsFilterId->supplementalInfo2 = 0; } else - cellPamf.Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS (ch=%d)", ch); + cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS (ch=%d)", ch); break; case CELL_PAMF_STREAM_TYPE_PAMF_LPCM: if (ch == 0) @@ -53,7 +55,7 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pE pEsFilterId->supplementalInfo2 = 0; } else - cellPamf.Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_LPCM (ch=%d)", ch); + cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_LPCM (ch=%d)", ch); break; case CELL_PAMF_STREAM_TYPE_USER_DATA: if (ch == 0) @@ -64,13 +66,13 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pE pEsFilterId->supplementalInfo2 = 0; } else - cellPamf.Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_USER_DATA (ch=%d)", ch); + cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_USER_DATA (ch=%d)", ch); break; case CELL_PAMF_STREAM_TYPE_AC3: - cellPamf.Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_AC3 (ch=%d)", ch); + cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_AC3 (ch=%d)", ch); break; case CELL_PAMF_STREAM_TYPE_M2V: - cellPamf.Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_M2V (ch=%d)", ch); + cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_M2V (ch=%d)", ch); break; default: return CELL_PAMF_ERROR_INVALID_ARG; @@ -90,7 +92,7 @@ u8 pamfGetStreamType(mem_ptr_t pSelf, u8 stream) case 0x80: return CELL_PAMF_STREAM_TYPE_PAMF_LPCM; case 0xdd: return CELL_PAMF_STREAM_TYPE_USER_DATA; default: - cellPamf.Error("pamfGetStreamType: (TODO) unsupported stream type found(0x%x)", + cellPamf->Error("pamfGetStreamType: (TODO) unsupported stream type found(0x%x)", pAddr->stream_headers[stream].type); return 0; } @@ -107,13 +109,13 @@ u8 pamfGetStreamChannel(mem_ptr_t pSelf, u8 stream) { return pAddr->stream_headers[stream].stream_id - 0xe0; } - cellPamf.Error("TODO: pamfGetStreamChannel (-> 0)"); + cellPamf->Error("TODO: pamfGetStreamChannel (-> 0)"); return 0; } int cellPamfGetHeaderSize(mem_ptr_t pAddr, u64 fileSize, mem64_t pSize) { - cellPamf.Warning("cellPamfGetHeaderSize(pAddr=0x%x, fileSize=%d, pSize_addr=0x%x)", + cellPamf->Warning("cellPamfGetHeaderSize(pAddr=0x%x, fileSize=%d, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, pSize.GetAddr()); if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pSize.IsGood()) @@ -129,7 +131,7 @@ int cellPamfGetHeaderSize(mem_ptr_t pAddr, u64 fileSize, mem64_t pSi int cellPamfGetHeaderSize2(mem_ptr_t pAddr, u64 fileSize, u32 attribute, mem64_t pSize) { - cellPamf.Warning("cellPamfGetHeaderSize2(pAddr=0x%x, fileSize=%d, attribute=0x%x, pSize_addr=0x%x)", + cellPamf->Warning("cellPamfGetHeaderSize2(pAddr=0x%x, fileSize=%d, attribute=0x%x, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, attribute, pSize.GetAddr()); if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pSize.IsGood()) @@ -145,7 +147,7 @@ int cellPamfGetHeaderSize2(mem_ptr_t pAddr, u64 fileSize, u32 attrib int cellPamfGetStreamOffsetAndSize(mem_ptr_t pAddr, u64 fileSize, mem64_t pOffset, mem64_t pSize) { - cellPamf.Warning("cellPamfGetStreamOffsetAndSize(pAddr=0x%x, fileSize=%d, pOffset_addr=0x%x, pSize_addr=0x%x)", + cellPamf->Warning("cellPamfGetStreamOffsetAndSize(pAddr=0x%x, fileSize=%d, pOffset_addr=0x%x, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, pOffset.GetAddr(), pSize.GetAddr()); if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pOffset.IsGood() || !pSize.IsGood()) @@ -163,7 +165,7 @@ int cellPamfGetStreamOffsetAndSize(mem_ptr_t pAddr, u64 fileSize, me int cellPamfVerify(mem_ptr_t pAddr, u64 fileSize) { - cellPamf.Warning("cellPamfVerify(pAddr=0x%x, fileSize=%d)", pAddr.GetAddr(), fileSize); + cellPamf->Warning("cellPamfVerify(pAddr=0x%x, fileSize=%d)", pAddr.GetAddr(), fileSize); if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048)) return CELL_PAMF_ERROR_INVALID_ARG; @@ -177,7 +179,7 @@ int cellPamfReaderInitialize(mem_ptr_t pSelf, mem_ptr_tWarning("cellPamfReaderInitialize(pSelf=0x%x, pAddr=0x%x, fileSize=%d, attribute=0x%x)", pSelf.GetAddr(), pAddr.GetAddr(), fileSize, attribute); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pAddr.GetAddr(), 2048)) @@ -204,7 +206,7 @@ int cellPamfReaderInitialize(mem_ptr_t pSelf, mem_ptr_t pSelf, mem_ptr_t pTimeStamp) { - cellPamf.Warning("cellPamfReaderGetPresentationStartTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", + cellPamf->Warning("cellPamfReaderGetPresentationStartTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -219,7 +221,7 @@ int cellPamfReaderGetPresentationStartTime(mem_ptr_t pSelf, mem_ int cellPamfReaderGetPresentationEndTime(mem_ptr_t pSelf, mem_ptr_t pTimeStamp) { - cellPamf.Warning("cellPamfReaderGetPresentationEndTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", + cellPamf->Warning("cellPamfReaderGetPresentationEndTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -234,7 +236,7 @@ int cellPamfReaderGetPresentationEndTime(mem_ptr_t pSelf, mem_pt int cellPamfReaderGetMuxRateBound(mem_ptr_t pSelf) { - cellPamf.Warning("cellPamfReaderGetMuxRateBound(pSelf=0x%x)", pSelf.GetAddr()); + cellPamf->Warning("cellPamfReaderGetMuxRateBound(pSelf=0x%x)", pSelf.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) return CELL_PAMF_ERROR_INVALID_ARG; @@ -245,7 +247,7 @@ int cellPamfReaderGetMuxRateBound(mem_ptr_t pSelf) int cellPamfReaderGetNumberOfStreams(mem_ptr_t pSelf) { - cellPamf.Warning("cellPamfReaderGetNumberOfStreams(pSelf=0x%x)", pSelf.GetAddr()); + cellPamf->Warning("cellPamfReaderGetNumberOfStreams(pSelf=0x%x)", pSelf.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) return CELL_PAMF_ERROR_INVALID_ARG; @@ -256,7 +258,7 @@ int cellPamfReaderGetNumberOfStreams(mem_ptr_t pSelf) int cellPamfReaderGetNumberOfSpecificStreams(mem_ptr_t pSelf, u8 streamType) { - cellPamf.Warning("cellPamfReaderGetNumberOfSpecificStreams(pSelf=0x%x, streamType=%d)", + cellPamf->Warning("cellPamfReaderGetNumberOfSpecificStreams(pSelf=0x%x, streamType=%d)", pSelf.GetAddr(), streamType); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -292,7 +294,7 @@ int cellPamfReaderGetNumberOfSpecificStreams(mem_ptr_t pSelf, u8 int cellPamfReaderSetStreamWithIndex(mem_ptr_t pSelf, u8 streamIndex) { - cellPamf.Warning("cellPamfReaderSetStreamWithIndex(pSelf=0x%x, streamIndex=%d)", + cellPamf->Warning("cellPamfReaderSetStreamWithIndex(pSelf=0x%x, streamIndex=%d)", pSelf.GetAddr(), streamIndex); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -313,7 +315,7 @@ int cellPamfReaderSetStreamWithIndex(mem_ptr_t pSelf, u8 streamI int cellPamfReaderSetStreamWithTypeAndChannel(mem_ptr_t pSelf, u8 streamType, u8 ch) { - cellPamf.Warning("cellPamfReaderSetStreamWithTypeAndChannel(pSelf=0x%x, streamType=%d, ch=%d)", + cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndChannel(pSelf=0x%x, streamType=%d, ch=%d)", pSelf.GetAddr(), streamType, ch); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -323,7 +325,7 @@ int cellPamfReaderSetStreamWithTypeAndChannel(mem_ptr_t pSelf, u if (streamType > 5) { - cellPamf.Error("cellPamfReaderSetStreamWithTypeAndChannel: invalid stream type(%d)", streamType); + cellPamf->Error("cellPamfReaderSetStreamWithTypeAndChannel: invalid stream type(%d)", streamType); //it probably doesn't support "any audio" or "any video" argument return CELL_PAMF_ERROR_INVALID_ARG; } @@ -345,7 +347,7 @@ int cellPamfReaderSetStreamWithTypeAndChannel(mem_ptr_t pSelf, u int cellPamfReaderSetStreamWithTypeAndIndex(mem_ptr_t pSelf, u8 streamType, u8 streamIndex) { - cellPamf.Warning("cellPamfReaderSetStreamWithTypeAndIndex(pSelf=0x%x, streamType=%d, streamIndex=%d)", + cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndIndex(pSelf=0x%x, streamType=%d, streamIndex=%d)", pSelf.GetAddr(), streamType, streamIndex); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -396,7 +398,7 @@ int cellPamfReaderSetStreamWithTypeAndIndex(mem_ptr_t pSelf, u8 int cellPamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pEsFilterId) { - cellPamf.Warning("cellPamfStreamTypeToEsFilterId(type=%d, ch=%d, pEsFilterId_addr=0x%x)", + cellPamf->Warning("cellPamfStreamTypeToEsFilterId(type=%d, ch=%d, pEsFilterId_addr=0x%x)", type, ch, pEsFilterId.GetAddr()); if (!pEsFilterId.IsGood()) @@ -407,7 +409,7 @@ int cellPamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pSelf) { - cellPamf.Log("cellPamfReaderGetStreamIndex(pSelf=0x%x)", pSelf.GetAddr()); + cellPamf->Log("cellPamfReaderGetStreamIndex(pSelf=0x%x)", pSelf.GetAddr()); if (!pSelf.IsGood()) return CELL_PAMF_ERROR_INVALID_ARG; @@ -417,7 +419,7 @@ int cellPamfReaderGetStreamIndex(mem_ptr_t pSelf) int cellPamfReaderGetStreamTypeAndChannel(mem_ptr_t pSelf, mem8_t pType, mem8_t pCh) { - cellPamf.Warning("cellPamfReaderGetStreamTypeAndChannel(pSelf=0x%x (stream=%d), pType_addr=0x%x, pCh_addr=0x%x", + cellPamf->Warning("cellPamfReaderGetStreamTypeAndChannel(pSelf=0x%x (stream=%d), pType_addr=0x%x, pCh_addr=0x%x", pSelf.GetAddr(), pSelf->stream, pType.GetAddr(), pCh.GetAddr()); if (!pSelf.IsGood() || !pCh.IsGood()) @@ -430,7 +432,7 @@ int cellPamfReaderGetStreamTypeAndChannel(mem_ptr_t pSelf, mem8_ int cellPamfReaderGetEsFilterId(mem_ptr_t pSelf, mem_ptr_t pEsFilterId) { - cellPamf.Warning("cellPamfReaderGetEsFilterId(pSelf=0x%x (stream=%d), pEsFilterId_addr=0x%x)", + cellPamf->Warning("cellPamfReaderGetEsFilterId(pSelf=0x%x (stream=%d), pEsFilterId_addr=0x%x)", pSelf.GetAddr(), pSelf->stream, pEsFilterId.GetAddr()); if (!pSelf.IsGood() || !pEsFilterId.IsGood()) @@ -442,7 +444,7 @@ int cellPamfReaderGetEsFilterId(mem_ptr_t pSelf, mem_ptr_t pSelf, u32 pInfo_addr, u32 size) { - cellPamf.Warning("cellPamfReaderGetStreamInfo(pSelf=0x%x (stream=%d), pInfo_addr=0x%x, size=%d)", + cellPamf->Warning("cellPamfReaderGetStreamInfo(pSelf=0x%x (stream=%d), pInfo_addr=0x%x, size=%d)", pSelf.GetAddr(), pSelf->stream, pInfo_addr, size); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -461,7 +463,7 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, if (size != sizeof(CellPamfAvcInfo)) { - cellPamf.Error("cellPamfReaderGetStreamInfo: wrong AVC data size(%d)", size); + cellPamf->Error("cellPamfReaderGetStreamInfo: wrong AVC data size(%d)", size); return CELL_PAMF_ERROR_INVALID_ARG; } @@ -481,13 +483,13 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, pInfo->matrixCoefficients = 1; //fake //pInfo->deblockingFilterFlag = 1; //??? - cellPamf.Warning("cellPamfReaderGetStreamInfo: CELL_PAMF_STREAM_TYPE_AVC"); + cellPamf->Warning("cellPamfReaderGetStreamInfo: CELL_PAMF_STREAM_TYPE_AVC"); } break; case CELL_PAMF_STREAM_TYPE_M2V: { //TODO - cellPamf.Error("TODO: cellPamfReaderGetStreamInfo: CELL_PAMF_STREAM_TYPE_M2V"); + cellPamf->Error("TODO: cellPamfReaderGetStreamInfo: CELL_PAMF_STREAM_TYPE_M2V"); } break; case CELL_PAMF_STREAM_TYPE_ATRAC3PLUS: @@ -497,7 +499,7 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, if (size != sizeof(CellPamfAtrac3plusInfo)) { - cellPamf.Error("cellPamfReaderGetStreamInfo: wrong ATRAC3+ data size(%d)", size); + cellPamf->Error("cellPamfReaderGetStreamInfo: wrong ATRAC3+ data size(%d)", size); return CELL_PAMF_ERROR_INVALID_ARG; } @@ -512,7 +514,7 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, if (size != sizeof(CellPamfAc3Info)) { - cellPamf.Error("cellPamfReaderGetStreamInfo: wrong AC3 data size(%d)", size); + cellPamf->Error("cellPamfReaderGetStreamInfo: wrong AC3 data size(%d)", size); return CELL_PAMF_ERROR_INVALID_ARG; } @@ -527,7 +529,7 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, if (size != sizeof(CellPamfLpcmInfo)) { - cellPamf.Error("cellPamfReaderGetStreamInfo: wrong LPCM data size(%d)", size); + cellPamf->Error("cellPamfReaderGetStreamInfo: wrong LPCM data size(%d)", size); return CELL_PAMF_ERROR_INVALID_ARG; } @@ -538,12 +540,12 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, pInfo->bitsPerSample = CELL_PAMF_BIT_LENGTH_16; else //TODO: CELL_PAMF_BIT_LENGTH_24 - cellPamf.Error("cellPamfReaderGetStreamInfo: unknown bps(0x%x)", (u8)pAudio->bps); + cellPamf->Error("cellPamfReaderGetStreamInfo: unknown bps(0x%x)", (u8)pAudio->bps); } break; case CELL_PAMF_STREAM_TYPE_USER_DATA: { - cellPamf.Error("cellPamfReaderGetStreamInfo: CELL_PAMF_STREAM_TYPE_USER_DATA"); + cellPamf->Error("cellPamfReaderGetStreamInfo: CELL_PAMF_STREAM_TYPE_USER_DATA"); return CELL_PAMF_ERROR_INVALID_ARG; } } @@ -553,7 +555,7 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, int cellPamfReaderGetNumberOfEp(mem_ptr_t pSelf) { - cellPamf.Warning("cellPamfReaderGetNumberOfEp(pSelf=0x%x (stream=%d))", + cellPamf->Warning("cellPamfReaderGetNumberOfEp(pSelf=0x%x (stream=%d))", pSelf.GetAddr(), pSelf->stream); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -565,7 +567,7 @@ int cellPamfReaderGetNumberOfEp(mem_ptr_t pSelf) int cellPamfReaderGetEpIteratorWithIndex(mem_ptr_t pSelf, u32 epIndex, mem_ptr_t pIt) { - cellPamf.Error("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x (stream=%d), epIndex=%d, pIt_addr=0x%x)", + cellPamf->Error("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x (stream=%d), epIndex=%d, pIt_addr=0x%x)", pSelf.GetAddr(), pSelf->stream, epIndex, pIt.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) @@ -578,7 +580,7 @@ int cellPamfReaderGetEpIteratorWithIndex(mem_ptr_t pSelf, u32 ep int cellPamfReaderGetEpIteratorWithTimeStamp(mem_ptr_t pSelf, mem_ptr_t pTimeStamp, mem_ptr_t pIt) { - cellPamf.Error("cellPamfReaderGetEpIteratorWithTimeStamp(pSelf=0x%x, pTimeStamp_addr=0x%x, pIt_addr=0x%x)", + cellPamf->Error("cellPamfReaderGetEpIteratorWithTimeStamp(pSelf=0x%x, pTimeStamp_addr=0x%x, pIt_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr(), pIt.GetAddr()); const mem_ptr_t pAddr(pSelf->pAddr); @@ -588,41 +590,42 @@ int cellPamfReaderGetEpIteratorWithTimeStamp(mem_ptr_t pSelf, me int cellPamfEpIteratorGetEp(mem_ptr_t pIt, mem_ptr_t pEp) { - cellPamf.Error("cellPamfEpIteratorGetEp(pIt_addr=0x%x, pEp_addr=0x%x)", pIt.GetAddr(), pEp.GetAddr()); + cellPamf->Error("cellPamfEpIteratorGetEp(pIt_addr=0x%x, pEp_addr=0x%x)", pIt.GetAddr(), pEp.GetAddr()); //TODO: return CELL_OK; } int cellPamfEpIteratorMove(mem_ptr_t pIt, s32 steps, mem_ptr_t pEp) { - cellPamf.Error("cellPamfEpIteratorMove(pIt_addr=0x%x, steps=%d, pEp_addr=0x%x)", pIt.GetAddr(), steps, pEp.GetAddr()); + cellPamf->Error("cellPamfEpIteratorMove(pIt_addr=0x%x, steps=%d, pEp_addr=0x%x)", pIt.GetAddr(), steps, pEp.GetAddr()); //TODO: return CELL_OK; } void cellPamf_init() { - cellPamf.AddFunc(0xca8181c1, cellPamfGetHeaderSize); - cellPamf.AddFunc(0x90fc9a59, cellPamfGetHeaderSize2); - cellPamf.AddFunc(0x44f5c9e3, cellPamfGetStreamOffsetAndSize); - cellPamf.AddFunc(0xd1a40ef4, cellPamfVerify); - cellPamf.AddFunc(0xb8436ee5, cellPamfReaderInitialize); - cellPamf.AddFunc(0x4de501b1, cellPamfReaderGetPresentationStartTime); - cellPamf.AddFunc(0xf61609d6, cellPamfReaderGetPresentationEndTime); - cellPamf.AddFunc(0xdb70296c, cellPamfReaderGetMuxRateBound); - cellPamf.AddFunc(0x37f723f7, cellPamfReaderGetNumberOfStreams); - cellPamf.AddFunc(0xd0230671, cellPamfReaderGetNumberOfSpecificStreams); - cellPamf.AddFunc(0x461534b4, cellPamfReaderSetStreamWithIndex); - cellPamf.AddFunc(0x03fd2caa, cellPamfReaderSetStreamWithTypeAndChannel); - cellPamf.AddFunc(0x28b4e2c1, cellPamfReaderSetStreamWithTypeAndIndex); - cellPamf.AddFunc(0x01067e22, cellPamfStreamTypeToEsFilterId); - cellPamf.AddFunc(0x041cc708, cellPamfReaderGetStreamIndex); - cellPamf.AddFunc(0x9ab20793, cellPamfReaderGetStreamTypeAndChannel); - cellPamf.AddFunc(0x71df326a, cellPamfReaderGetEsFilterId); - cellPamf.AddFunc(0x67fd273b, cellPamfReaderGetStreamInfo); - cellPamf.AddFunc(0xd9ea3457, cellPamfReaderGetNumberOfEp); - cellPamf.AddFunc(0xe8586ec6, cellPamfReaderGetEpIteratorWithIndex); - cellPamf.AddFunc(0x439fba17, cellPamfReaderGetEpIteratorWithTimeStamp); - cellPamf.AddFunc(0x1abeb9d6, cellPamfEpIteratorGetEp); - cellPamf.AddFunc(0x50b83205, cellPamfEpIteratorMove); + cellPamf->AddFunc(0xca8181c1, cellPamfGetHeaderSize); + cellPamf->AddFunc(0x90fc9a59, cellPamfGetHeaderSize2); + cellPamf->AddFunc(0x44f5c9e3, cellPamfGetStreamOffsetAndSize); + cellPamf->AddFunc(0xd1a40ef4, cellPamfVerify); + cellPamf->AddFunc(0xb8436ee5, cellPamfReaderInitialize); + cellPamf->AddFunc(0x4de501b1, cellPamfReaderGetPresentationStartTime); + cellPamf->AddFunc(0xf61609d6, cellPamfReaderGetPresentationEndTime); + cellPamf->AddFunc(0xdb70296c, cellPamfReaderGetMuxRateBound); + cellPamf->AddFunc(0x37f723f7, cellPamfReaderGetNumberOfStreams); + cellPamf->AddFunc(0xd0230671, cellPamfReaderGetNumberOfSpecificStreams); + cellPamf->AddFunc(0x461534b4, cellPamfReaderSetStreamWithIndex); + cellPamf->AddFunc(0x03fd2caa, cellPamfReaderSetStreamWithTypeAndChannel); + cellPamf->AddFunc(0x28b4e2c1, cellPamfReaderSetStreamWithTypeAndIndex); + cellPamf->AddFunc(0x01067e22, cellPamfStreamTypeToEsFilterId); + cellPamf->AddFunc(0x041cc708, cellPamfReaderGetStreamIndex); + cellPamf->AddFunc(0x9ab20793, cellPamfReaderGetStreamTypeAndChannel); + cellPamf->AddFunc(0x71df326a, cellPamfReaderGetEsFilterId); + cellPamf->AddFunc(0x67fd273b, cellPamfReaderGetStreamInfo); + cellPamf->AddFunc(0xd9ea3457, cellPamfReaderGetNumberOfEp); + cellPamf->AddFunc(0xe8586ec6, cellPamfReaderGetEpIteratorWithIndex); + cellPamf->AddFunc(0x439fba17, cellPamfReaderGetEpIteratorWithTimeStamp); + cellPamf->AddFunc(0x1abeb9d6, cellPamfEpIteratorGetEp); + cellPamf->AddFunc(0x50b83205, cellPamfEpIteratorMove); } + diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp index fcf6521d86..9281f3c17b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp @@ -65,4 +65,4 @@ void cellPhotoDecode_init() cellPhotoDecode.AddFunc(0xad7d8f38, cellPhotoDecodeFinalize); cellPhotoDecode.AddFunc(0x28b22e44, cellPhotoDecodeFromFile); } -#endif +#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 508e6234ea..448677dad1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -9,8 +9,9 @@ #include "stblib/stb_image.h" #include -void cellPngDec_init(); -Module cellPngDec(0x0018, cellPngDec_init); +//void cellPngDec_init(); +//Module cellPngDec(0x0018, cellPngDec_init); +extern Module *cellPngDec = nullptr; static std::map cellPngDecMap; @@ -23,7 +24,7 @@ CellPngDecMainHandle *getCellPngDecCtx(u32 mainHandle) { int cellPngDecCreate(u32 mainHandle, u32 threadInParam, u32 threadOutParam) { - cellPngDec.Warning("cellPngDecCreate(mainHandle=0x%x, threadInParam=0x%x, threadOutParam=0x%x)", mainHandle, threadInParam, threadOutParam); + cellPngDec->Warning("cellPngDecCreate(mainHandle=0x%x, threadInParam=0x%x, threadOutParam=0x%x)", mainHandle, threadInParam, threadOutParam); CellPngDecMainHandle *ctx = new CellPngDecMainHandle; if (cellPngDecMap.find(mainHandle) != cellPngDecMap.end()) { delete cellPngDecMap[mainHandle]; @@ -39,10 +40,10 @@ int cellPngDecCreate(u32 mainHandle, u32 threadInParam, u32 threadOutParam) int cellPngDecDestroy(u32 mainHandle) { - cellPngDec.Warning("cellPngDecDestroy(mainHandle=0x%x)", mainHandle); + cellPngDec->Warning("cellPngDecDestroy(mainHandle=0x%x)", mainHandle); CellPngDecMainHandle *ctx = getCellPngDecCtx(mainHandle); if (!ctx) { - cellPngDec.Warning("cellPngDecDestroy(mainHandle=0x%x): bad handle", mainHandle); + cellPngDec->Warning("cellPngDecDestroy(mainHandle=0x%x): bad handle", mainHandle); return -1; } @@ -54,7 +55,7 @@ int cellPngDecDestroy(u32 mainHandle) int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t src, u32 openInfo) { - cellPngDec.Warning("cellPngDecOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x)", + cellPngDec->Warning("cellPngDecOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x)", mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo); if (!subHandle.IsGood() || !src.IsGood()) @@ -87,17 +88,17 @@ int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s } // From now, every u32 subHandle argument is a pointer to a CellPngDecSubHandle struct. - subHandle = cellPngDec.GetNewId(current_subHandle); + subHandle = cellPngDec->GetNewId(current_subHandle); return CELL_OK; } int cellPngDecClose(u32 mainHandle, u32 subHandle) { - cellPngDec.Warning("cellPngDecClose(mainHandle=0x%x,subHandle=0x%x)", mainHandle, subHandle); + cellPngDec->Warning("cellPngDecClose(mainHandle=0x%x,subHandle=0x%x)", mainHandle, subHandle); CellPngDecSubHandle* subHandle_data; - if(!cellPngDec.CheckId(subHandle, subHandle_data)) + if(!cellPngDec->CheckId(subHandle, subHandle_data)) return CELL_PNGDEC_ERROR_FATAL; cellFsClose(subHandle_data->fd); @@ -111,9 +112,9 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tWarning("cellPngDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%llx)", mainHandle, subHandle, info.GetAddr()); CellPngDecSubHandle* subHandle_data; - if(!cellPngDec.CheckId(subHandle, subHandle_data)) + if(!cellPngDec->CheckId(subHandle, subHandle_data)) return CELL_PNGDEC_ERROR_FATAL; const u32& fd = subHandle_data->fd; @@ -173,7 +174,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m dataOutInfo->status = CELL_PNGDEC_DEC_STATUS_STOP; CellPngDecSubHandle* subHandle_data; - if(!cellPngDec.CheckId(subHandle, subHandle_data)) + if(!cellPngDec->CheckId(subHandle, subHandle_data)) return CELL_PNGDEC_ERROR_FATAL; const u32& fd = subHandle_data->fd; @@ -211,6 +212,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m switch((u32)current_outParam.outputColorSpace) { case CELL_PNGDEC_RGB: + image_size = width * height; case CELL_PNGDEC_RGBA: { const char nComponents = current_outParam.outputColorSpace == CELL_PNGDEC_RGBA ? 4 : 3; @@ -278,7 +280,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m case CELL_PNGDEC_GRAYSCALE: case CELL_PNGDEC_PALETTE: case CELL_PNGDEC_GRAYSCALE_ALPHA: - cellPngDec.Error("cellPngDecDecodeData: Unsupported color space (%d)", current_outParam.outputColorSpace.ToLE()); + cellPngDec->Error("cellPngDecDecodeData: Unsupported color space (%d)", current_outParam.outputColorSpace.ToLE()); break; default: @@ -296,7 +298,7 @@ int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_tCheckId(subHandle, subHandle_data)) return CELL_PNGDEC_ERROR_FATAL; CellPngDecInfo& current_info = subHandle_data->info; @@ -333,34 +335,34 @@ int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_tAddFunc(0x157d30c5, cellPngDecCreate); + cellPngDec->AddFunc(0x820dae1a, cellPngDecDestroy); + cellPngDec->AddFunc(0xd2bc5bfd, cellPngDecOpen); + cellPngDec->AddFunc(0x5b3d1ff1, cellPngDecClose); + cellPngDec->AddFunc(0x9ccdcc95, cellPngDecReadHeader); + cellPngDec->AddFunc(0x2310f155, cellPngDecDecodeData); + cellPngDec->AddFunc(0xe97c9bd4, cellPngDecSetParameter); - /*cellPngDec.AddFunc(0x48436b2d, cellPngDecExtCreate); - cellPngDec.AddFunc(0x0c515302, cellPngDecExtOpen); - cellPngDec.AddFunc(0x8b33f863, cellPngDecExtReadHeader); - cellPngDec.AddFunc(0x726fc1d0, cellPngDecExtDecodeData); - cellPngDec.AddFunc(0x9e9d7d42, cellPngDecExtSetParameter); - cellPngDec.AddFunc(0x7585a275, cellPngDecGetbKGD); - cellPngDec.AddFunc(0x7a062d26, cellPngDecGetcHRM); - cellPngDec.AddFunc(0xb153629c, cellPngDecGetgAMA); - cellPngDec.AddFunc(0xb905ebb7, cellPngDecGethIST); - cellPngDec.AddFunc(0xf44b6c30, cellPngDecGetiCCP); - cellPngDec.AddFunc(0x27c921b5, cellPngDecGetoFFs); - cellPngDec.AddFunc(0xb4fe75e1, cellPngDecGetpCAL); - cellPngDec.AddFunc(0x3d50016a, cellPngDecGetpHYs); - cellPngDec.AddFunc(0x30cb334a, cellPngDecGetsBIT); - cellPngDec.AddFunc(0xc41e1198, cellPngDecGetsCAL); - cellPngDec.AddFunc(0xa5cdf57e, cellPngDecGetsPLT); - cellPngDec.AddFunc(0xe4416e82, cellPngDecGetsRGB); - cellPngDec.AddFunc(0x35a6846c, cellPngDecGettIME); - cellPngDec.AddFunc(0xb96fb26e, cellPngDecGettRNS); - cellPngDec.AddFunc(0xe163977f, cellPngDecGetPLTE); - cellPngDec.AddFunc(0x609ec7d5, cellPngDecUnknownChunks); - cellPngDec.AddFunc(0xb40ca175, cellPngDecGetTextChunk);*/ + /*cellPngDec->AddFunc(0x48436b2d, cellPngDecExtCreate); + cellPngDec->AddFunc(0x0c515302, cellPngDecExtOpen); + cellPngDec->AddFunc(0x8b33f863, cellPngDecExtReadHeader); + cellPngDec->AddFunc(0x726fc1d0, cellPngDecExtDecodeData); + cellPngDec->AddFunc(0x9e9d7d42, cellPngDecExtSetParameter); + cellPngDec->AddFunc(0x7585a275, cellPngDecGetbKGD); + cellPngDec->AddFunc(0x7a062d26, cellPngDecGetcHRM); + cellPngDec->AddFunc(0xb153629c, cellPngDecGetgAMA); + cellPngDec->AddFunc(0xb905ebb7, cellPngDecGethIST); + cellPngDec->AddFunc(0xf44b6c30, cellPngDecGetiCCP); + cellPngDec->AddFunc(0x27c921b5, cellPngDecGetoFFs); + cellPngDec->AddFunc(0xb4fe75e1, cellPngDecGetpCAL); + cellPngDec->AddFunc(0x3d50016a, cellPngDecGetpHYs); + cellPngDec->AddFunc(0x30cb334a, cellPngDecGetsBIT); + cellPngDec->AddFunc(0xc41e1198, cellPngDecGetsCAL); + cellPngDec->AddFunc(0xa5cdf57e, cellPngDecGetsPLT); + cellPngDec->AddFunc(0xe4416e82, cellPngDecGetsRGB); + cellPngDec->AddFunc(0x35a6846c, cellPngDecGettIME); + cellPngDec->AddFunc(0xb96fb26e, cellPngDecGettRNS); + cellPngDec->AddFunc(0xe163977f, cellPngDecGetPLTE); + cellPngDec->AddFunc(0x609ec7d5, cellPngDecUnknownChunks); + cellPngDec->AddFunc(0xb40ca175, cellPngDecGetTextChunk);*/ } diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 0a58d81acc..aaa1a464f8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -7,10 +7,11 @@ #include "Emu/SysCalls/Modules.h" #include "cellResc.h" -void cellResc_init(); -void cellResc_load(); -void cellResc_unload(); -Module cellResc(0x001f, cellResc_init, cellResc_load, cellResc_unload); +//void cellResc_init(); +//void cellResc_load(); +//void cellResc_unload(); +//Module cellResc(0x001f, cellResc_init, cellResc_load, cellResc_unload); +Module *cellResc = nullptr; // Error Codes enum @@ -419,16 +420,16 @@ void InitVertex(mem_ptr_t& cntxt) // Module Functions int cellRescInit(mem_ptr_t initConfig) { - cellResc.Warning("cellRescInit(initConfig_addr=0x%x)", initConfig.GetAddr()); + cellResc->Warning("cellRescInit(initConfig_addr=0x%x)", initConfig.GetAddr()); if (s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescInit : CELL_RESC_ERROR_REINITIALIZED"); + cellResc->Error("cellRescInit : CELL_RESC_ERROR_REINITIALIZED"); return CELL_RESC_ERROR_REINITIALIZED; } if (!initConfig.IsGood() || InternalVersion(initConfig.GetAddr()) == -1 || !CheckInitConfig(initConfig)) { - cellResc.Error("cellRescInit : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescInit : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -441,11 +442,11 @@ int cellRescInit(mem_ptr_t initConfig) void cellRescExit() { - cellResc.Warning("cellRescExit()"); + cellResc->Warning("cellRescExit()"); if(!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescExit()"); + cellResc->Error("cellRescExit()"); return; } @@ -456,11 +457,11 @@ void cellRescExit() int cellRescVideoOutResolutionId2RescBufferMode(u32 resolutionId, mem32_t bufferMode) { - cellResc.Log("cellRescVideoOutResolutionId2RescBufferMode(resolutionId=%d, bufferMode_addr=0x%x)", resolutionId, bufferMode.GetAddr()); + cellResc->Log("cellRescVideoOutResolutionId2RescBufferMode(resolutionId=%d, bufferMode_addr=0x%x)", resolutionId, bufferMode.GetAddr()); if (!bufferMode.IsGood()) { - cellResc.Error("cellRescVideoOutResolutionId2RescBufferMode : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescVideoOutResolutionId2RescBufferMode : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -471,7 +472,7 @@ int cellRescVideoOutResolutionId2RescBufferMode(u32 resolutionId, mem32_t buffer case CELL_VIDEO_OUT_RESOLUTION_480: bufferMode = CELL_RESC_720x480; break; case CELL_VIDEO_OUT_RESOLUTION_576: bufferMode = CELL_RESC_720x576; break; default: - cellResc.Error("cellRescVideoOutResolutionId2RescBufferMod : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescVideoOutResolutionId2RescBufferMod : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -480,24 +481,24 @@ int cellRescVideoOutResolutionId2RescBufferMode(u32 resolutionId, mem32_t buffer int cellRescSetDsts(u32 dstsMode, mem_ptr_t dsts) { - cellResc.Log("cellRescSetDsts(dstsMode=%d, CellRescDsts_addr=0x%x)", dstsMode, dsts.GetAddr()); + cellResc->Log("cellRescSetDsts(dstsMode=%d, CellRescDsts_addr=0x%x)", dstsMode, dsts.GetAddr()); if (!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescSetDst : CELL_RESC_ERROR_NOT_INITIALIZED"); + cellResc->Error("cellRescSetDst : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } if (!dsts.IsGood()) { - cellResc.Error("cellRescSetDst : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetDst : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } if ((dstsMode != CELL_RESC_720x480) && (dstsMode != CELL_RESC_720x576) && (dstsMode != CELL_RESC_1280x720) && (dstsMode != CELL_RESC_1920x1080)) { - cellResc.Error("cellRescSetDsts : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetDsts : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -508,24 +509,24 @@ int cellRescSetDsts(u32 dstsMode, mem_ptr_t dsts) int cellRescSetDisplayMode(u32 displayMode) { - cellResc.Warning("cellRescSetDisplayMode(displayMode=%d)", displayMode); + cellResc->Warning("cellRescSetDisplayMode(displayMode=%d)", displayMode); if (!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_NOT_INITIALIZED"); + cellResc->Error("cellRescSetDisplayMode : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } if (!(s_rescInternalInstance->m_initConfig.supportModes & displayMode)) { - cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } if ((displayMode != CELL_RESC_720x480) && (displayMode != CELL_RESC_720x576) && (displayMode != CELL_RESC_1280x720) && (displayMode != CELL_RESC_1920x1080)) { - cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -533,13 +534,13 @@ int cellRescSetDisplayMode(u32 displayMode) if ((IsPalInterpolate() || IsPalDrop()) && s_rescInternalInstance->m_initConfig.flipMode == CELL_RESC_DISPLAY_HSYNC) { - cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_COMBINATIONT"); + cellResc->Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_COMBINATIONT"); return CELL_RESC_ERROR_BAD_COMBINATION; } if(IsPal60Hsync() && s_rescInternalInstance->m_initConfig.flipMode==CELL_RESC_DISPLAY_VSYNC) { - cellResc.Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_COMBINATIONT"); + cellResc->Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_COMBINATIONT"); return CELL_RESC_ERROR_BAD_COMBINATION; } @@ -598,17 +599,17 @@ int cellRescSetDisplayMode(u32 displayMode) int cellRescAdjustAspectRatio(float horizontal, float vertical) { - cellResc.Warning("cellRescAdjustAspectRatio(horizontal=%f, vertical=%f)", horizontal, vertical); + cellResc->Warning("cellRescAdjustAspectRatio(horizontal=%f, vertical=%f)", horizontal, vertical); if(!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescAdjustAspectRatio : CELL_RESC_ERROR_NOT_INITIALIZED"); + cellResc->Error("cellRescAdjustAspectRatio : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } if((horizontal < 0.5f || 2.f < horizontal) || (vertical < 0.5f || 2.f < vertical)) { - cellResc.Error("cellRescAdjustAspectRatio : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescAdjustAspectRatio : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -628,17 +629,17 @@ int cellRescAdjustAspectRatio(float horizontal, float vertical) int cellRescSetPalInterpolateDropFlexRatio(float ratio) { - cellResc.Warning("cellRescSetPalInterpolateDropFlexRatio(ratio=%f)", ratio); + cellResc->Warning("cellRescSetPalInterpolateDropFlexRatio(ratio=%f)", ratio); if(!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescSetPalInterpolateDropFlexRatio : CELL_RESC_ERROR_NOT_INITIALIZED"); + cellResc->Error("cellRescSetPalInterpolateDropFlexRatio : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } if(ratio < 0.f || 1.f < ratio) { - cellResc.Error("cellRescSetPalInterpolateDropFlexRatio : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetPalInterpolateDropFlexRatio : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -649,11 +650,11 @@ int cellRescSetPalInterpolateDropFlexRatio(float ratio) int cellRescGetBufferSize(mem32_t colorBuffers, mem32_t vertexArray, mem32_t fragmentShader) { - cellResc.Warning("cellRescGetBufferSize(colorBuffers_addr=0x%x, vertexArray_addr=0x%x, fragmentShader_addr=0x%x)", colorBuffers.GetAddr(), vertexArray.GetAddr(), fragmentShader.GetAddr()); + cellResc->Warning("cellRescGetBufferSize(colorBuffers_addr=0x%x, vertexArray_addr=0x%x, fragmentShader_addr=0x%x)", colorBuffers.GetAddr(), vertexArray.GetAddr(), fragmentShader.GetAddr()); if (!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescGetBufferSize : CELL_RESC_ERROR_NOT_INITIALIZED"); + cellResc->Error("cellRescGetBufferSize : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } @@ -681,11 +682,11 @@ int cellRescGetBufferSize(mem32_t colorBuffers, mem32_t vertexArray, mem32_t fra int cellRescGetNumColorBuffers(u32 dstMode, u32 palTemporalMode, u32 reserved) { - cellResc.Log("cellRescGetNumColorBuffers(dstMode=%d, palTemporalMode=%d, reserved=%d)", dstMode, palTemporalMode, reserved); + cellResc->Log("cellRescGetNumColorBuffers(dstMode=%d, palTemporalMode=%d, reserved=%d)", dstMode, palTemporalMode, reserved); if (reserved != 0) { - cellResc.Error("cellRescGetNumColorBuffers : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescGetNumColorBuffers : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -702,11 +703,11 @@ int cellRescGetNumColorBuffers(u32 dstMode, u32 palTemporalMode, u32 reserved) int cellRescGcmSurface2RescSrc(mem_ptr_t gcmSurface, mem_ptr_t rescSrc) { - cellResc.Log("cellRescGcmSurface2RescSrc(gcmSurface_addr=0x%x, rescSrc_addr=0x%x)", gcmSurface.GetAddr(), rescSrc.GetAddr()); + cellResc->Log("cellRescGcmSurface2RescSrc(gcmSurface_addr=0x%x, rescSrc_addr=0x%x)", gcmSurface.GetAddr(), rescSrc.GetAddr()); if(!gcmSurface.IsGood() || !rescSrc.IsGood()) { - cellResc.Error("cellRescGcmSurface2RescSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescGcmSurface2RescSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -732,32 +733,32 @@ int cellRescGcmSurface2RescSrc(mem_ptr_t gcmSurface, mem_ptr_t src) { - cellResc.Log("cellRescSetSrc(idx=0x%x, src_addr=0x%x)", idx, src.GetAddr()); + cellResc->Log("cellRescSetSrc(idx=0x%x, src_addr=0x%x)", idx, src.GetAddr()); if(!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescSetSrc : CELL_RESC_ERROR_NOT_INITIALIZED"); + cellResc->Error("cellRescSetSrc : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } if(idx < 0 || SRC_BUFFER_NUM <= idx || !src.IsGood()) { - cellResc.Error("cellRescSetSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } if(src->width < 1 || 4096 < src->width || src->height < 1 || 4096 < src->height) { - cellResc.Error("cellRescSetSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } - cellResc.Log(" *** format=0x%x", src->format.ToLE()); - cellResc.Log(" *** pitch=%d", src->pitch.ToLE()); - cellResc.Log(" *** width=%d", src->width.ToLE()); - cellResc.Log(" *** height=%d", src->height.ToLE()); - cellResc.Log(" *** offset=0x%x", src->offset.ToLE()); + cellResc->Log(" *** format=0x%x", src->format.ToLE()); + cellResc->Log(" *** pitch=%d", src->pitch.ToLE()); + cellResc->Log(" *** width=%d", src->width.ToLE()); + cellResc->Log(" *** height=%d", src->height.ToLE()); + cellResc->Log(" *** offset=0x%x", src->offset.ToLE()); //Emu.GetGSManager().GetRender().SetData(src.offset, 800, 600); //Emu.GetGSManager().GetRender().Draw(); @@ -770,17 +771,17 @@ int cellRescSetSrc(s32 idx, mem_ptr_t src) int cellRescSetConvertAndFlip(mem_ptr_t cntxt, s32 idx) { - cellResc.Log("cellRescSetConvertAndFlip(cntxt_addr=0x%x, indx=0x%x)", cntxt.GetAddr(), idx); + cellResc->Log("cellRescSetConvertAndFlip(cntxt_addr=0x%x, indx=0x%x)", cntxt.GetAddr(), idx); if(!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescSetConvertAndFlip : CELL_RESC_ERROR_NOT_INITIALIZED"); + cellResc->Error("cellRescSetConvertAndFlip : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } if(idx < 0 || SRC_BUFFER_NUM <= idx) { - cellResc.Error("cellRescSetConvertAndFlip : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetConvertAndFlip : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -800,7 +801,7 @@ int cellRescSetConvertAndFlip(mem_ptr_t cntxt, s32 idx) int cellRescSetWaitFlip() { - cellResc.Log("cellRescSetWaitFlip()"); + cellResc->Log("cellRescSetWaitFlip()"); GSLockCurrent lock(GS_LOCK_WAIT_FLIP); // could stall on exit return CELL_OK; @@ -808,17 +809,17 @@ int cellRescSetWaitFlip() int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t fragmentShader) { - cellResc.Warning("cellRescSetBufferAddress(colorBuffers_addr=0x%x, vertexArray_addr=0x%x, fragmentShader_addr=0x%x)", colorBuffers.GetAddr(), vertexArray.GetAddr(), fragmentShader.GetAddr()); + cellResc->Warning("cellRescSetBufferAddress(colorBuffers_addr=0x%x, vertexArray_addr=0x%x, fragmentShader_addr=0x%x)", colorBuffers.GetAddr(), vertexArray.GetAddr(), fragmentShader.GetAddr()); if(!s_rescInternalInstance->m_bInitialized) { - cellResc.Error("cellRescSetBufferAddress : CELL_RESC_ERROR_NOT_INITIALIZED"); + cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } if(!colorBuffers.IsGood() || !vertexArray.IsGood() || !fragmentShader.IsGood()) { - cellResc.Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -826,7 +827,7 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t vertexArray.GetAddr() % VERTEX_BUFFER_ALIGNMENT || fragmentShader.GetAddr() % FRAGMENT_SHADER_ALIGNMENT) { - cellResc.Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } @@ -858,11 +859,11 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t int cellRescSetFlipHandler(u32 handler_addr) { - cellResc.Warning("cellRescSetFlipHandler(handler_addr=0x%x)", handler_addr); + cellResc->Warning("cellRescSetFlipHandler(handler_addr=0x%x)", handler_addr); if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) { - cellResc.Error("cellRescSetFlipHandler : CELL_EFAULT"); + cellResc->Error("cellRescSetFlipHandler : CELL_EFAULT"); return CELL_EFAULT; } @@ -873,14 +874,14 @@ int cellRescSetFlipHandler(u32 handler_addr) void cellRescResetFlipStatus() { - cellResc.Log("cellRescResetFlipStatus()"); + cellResc->Log("cellRescResetFlipStatus()"); Emu.GetGSManager().GetRender().m_flip_status = 1; } int cellRescGetFlipStatus() { - cellResc.Log("cellRescGetFlipStatus()"); + cellResc->Log("cellRescGetFlipStatus()"); return Emu.GetGSManager().GetRender().m_flip_status; } @@ -918,28 +919,28 @@ int cellRescCreateInterlaceTable() void cellResc_init() { - cellResc.AddFunc(0x25c107e6, cellRescSetConvertAndFlip); - cellResc.AddFunc(0x0d3c22ce, cellRescSetWaitFlip); - cellResc.AddFunc(0x2ea94661, cellRescSetFlipHandler); - cellResc.AddFunc(0x01220224, cellRescGcmSurface2RescSrc); - cellResc.AddFunc(0x0a2069c7, cellRescGetNumColorBuffers); - cellResc.AddFunc(0x10db5b1a, cellRescSetDsts); - cellResc.AddFunc(0x129922a0, cellRescResetFlipStatus); - cellResc.AddFunc(0x19a2a967, cellRescSetPalInterpolateDropFlexRatio); - cellResc.AddFunc(0x1dd3c4cd, cellRescGetRegisterCount); - cellResc.AddFunc(0x22ae06d8, cellRescAdjustAspectRatio); - cellResc.AddFunc(0x23134710, cellRescSetDisplayMode); - cellResc.AddFunc(0x2ea3061e, cellRescExit); - cellResc.AddFunc(0x516ee89e, cellRescInit); - cellResc.AddFunc(0x5a338cdb, cellRescGetBufferSize); - cellResc.AddFunc(0x66f5e388, cellRescGetLastFlipTime); - cellResc.AddFunc(0x6cd0f95f, cellRescSetSrc); - cellResc.AddFunc(0x7af8a37f, cellRescSetRegisterCount); - cellResc.AddFunc(0x8107277c, cellRescSetBufferAddress); - cellResc.AddFunc(0xc47c5c22, cellRescGetFlipStatus); - cellResc.AddFunc(0xd1ca0503, cellRescVideoOutResolutionId2RescBufferMode); - cellResc.AddFunc(0xd3758645, cellRescSetVBlankHandler); - cellResc.AddFunc(0xe0cef79e, cellRescCreateInterlaceTable); + cellResc->AddFunc(0x25c107e6, cellRescSetConvertAndFlip); + cellResc->AddFunc(0x0d3c22ce, cellRescSetWaitFlip); + cellResc->AddFunc(0x2ea94661, cellRescSetFlipHandler); + cellResc->AddFunc(0x01220224, cellRescGcmSurface2RescSrc); + cellResc->AddFunc(0x0a2069c7, cellRescGetNumColorBuffers); + cellResc->AddFunc(0x10db5b1a, cellRescSetDsts); + cellResc->AddFunc(0x129922a0, cellRescResetFlipStatus); + cellResc->AddFunc(0x19a2a967, cellRescSetPalInterpolateDropFlexRatio); + cellResc->AddFunc(0x1dd3c4cd, cellRescGetRegisterCount); + cellResc->AddFunc(0x22ae06d8, cellRescAdjustAspectRatio); + cellResc->AddFunc(0x23134710, cellRescSetDisplayMode); + cellResc->AddFunc(0x2ea3061e, cellRescExit); + cellResc->AddFunc(0x516ee89e, cellRescInit); + cellResc->AddFunc(0x5a338cdb, cellRescGetBufferSize); + cellResc->AddFunc(0x66f5e388, cellRescGetLastFlipTime); + cellResc->AddFunc(0x6cd0f95f, cellRescSetSrc); + cellResc->AddFunc(0x7af8a37f, cellRescSetRegisterCount); + cellResc->AddFunc(0x8107277c, cellRescSetBufferAddress); + cellResc->AddFunc(0xc47c5c22, cellRescGetFlipStatus); + cellResc->AddFunc(0xd1ca0503, cellRescVideoOutResolutionId2RescBufferMode); + cellResc->AddFunc(0xd3758645, cellRescSetVBlankHandler); + cellResc->AddFunc(0xe0cef79e, cellRescCreateInterlaceTable); } void cellResc_load() diff --git a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp index c82adf7415..9ac5b8462b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp @@ -8,8 +8,9 @@ #include "cellRtc.h" -void cellRtc_init(); -Module cellRtc(0x0009, cellRtc_init); +//void cellRtc_init(); +//Module cellRtc(0x0009, cellRtc_init); +Module *cellRtc = nullptr; long convertToUNIXTime(u16 seconds, u16 minutes, u16 hours, u16 days, int years) { @@ -26,76 +27,76 @@ u64 convertToWin32FILETIME(u16 seconds, u16 minutes, u16 hours, u16 days, int ye int cellRtcGetCurrentTick(mem_ptr_t pTick) { - cellRtc.Log("cellRtcGetCurrentTick(pTick=0x%x)", pTick.GetAddr()); + cellRtc->Log("cellRtcGetCurrentTick(pTick=0x%x)", pTick.GetAddr()); if (!pTick.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime unow = wxDateTime::UNow(); + rDateTime unow = rDateTime::UNow(); pTick->tick = unow.GetTicks(); return CELL_OK; } int cellRtcGetCurrentClock(mem_ptr_t pClock, s32 iTimeZone) { - cellRtc.Log("cellRtcGetCurrentClock(pClock=0x%x, time_zone=%d)", pClock.GetAddr(), iTimeZone); + cellRtc->Log("cellRtcGetCurrentClock(pClock=0x%x, time_zone=%d)", pClock.GetAddr(), iTimeZone); if (!pClock.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime unow = wxDateTime::UNow(); + rDateTime unow = rDateTime::UNow(); // Add time_zone as offset in minutes. - wxTimeSpan tz = wxTimeSpan(0, (long) iTimeZone, 0, 0); + rTimeSpan tz = rTimeSpan(0, (long) iTimeZone, 0, 0); unow.Add(tz); - pClock->year = unow.GetYear(wxDateTime::TZ::UTC); - pClock->month = unow.GetMonth(wxDateTime::TZ::UTC); - pClock->day = unow.GetDay(wxDateTime::TZ::UTC); - pClock->hour = unow.GetHour(wxDateTime::TZ::UTC); - pClock->minute = unow.GetMinute(wxDateTime::TZ::UTC); - pClock->second = unow.GetSecond(wxDateTime::TZ::UTC); - pClock->microsecond = unow.GetMillisecond(wxDateTime::TZ::UTC) * 1000; + pClock->year = unow.GetYear(rDateTime::TZ::UTC); + pClock->month = unow.GetMonth(rDateTime::TZ::UTC); + pClock->day = unow.GetDay(rDateTime::TZ::UTC); + pClock->hour = unow.GetHour(rDateTime::TZ::UTC); + pClock->minute = unow.GetMinute(rDateTime::TZ::UTC); + pClock->second = unow.GetSecond(rDateTime::TZ::UTC); + pClock->microsecond = unow.GetMillisecond(rDateTime::TZ::UTC) * 1000; return CELL_OK; } int cellRtcGetCurrentClockLocalTime(mem_ptr_t pClock) { - cellRtc.Log("cellRtcGetCurrentClockLocalTime(pClock=0x%x)", pClock.GetAddr()); + cellRtc->Log("cellRtcGetCurrentClockLocalTime(pClock=0x%x)", pClock.GetAddr()); if (!pClock.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime unow = wxDateTime::UNow(); + rDateTime unow = rDateTime::UNow(); - pClock->year = unow.GetYear(wxDateTime::TZ::Local); - pClock->month = unow.GetMonth(wxDateTime::TZ::Local); - pClock->day = unow.GetDay(wxDateTime::TZ::Local); - pClock->hour = unow.GetHour(wxDateTime::TZ::Local); - pClock->minute = unow.GetMinute(wxDateTime::TZ::Local); - pClock->second = unow.GetSecond(wxDateTime::TZ::Local); - pClock->microsecond = unow.GetMillisecond(wxDateTime::TZ::Local) * 1000; + pClock->year = unow.GetYear(rDateTime::TZ::Local); + pClock->month = unow.GetMonth(rDateTime::TZ::Local); + pClock->day = unow.GetDay(rDateTime::TZ::Local); + pClock->hour = unow.GetHour(rDateTime::TZ::Local); + pClock->minute = unow.GetMinute(rDateTime::TZ::Local); + pClock->second = unow.GetSecond(rDateTime::TZ::Local); + pClock->microsecond = unow.GetMillisecond(rDateTime::TZ::Local) * 1000; return CELL_OK; } int cellRtcFormatRfc2822(u32 pszDateTime_addr, mem_ptr_t pUtc, s32 iTimeZone) { - cellRtc.Log("cellRtcFormatRfc2822(pszDateTime_addr=0x%x, pUtc=0x%x, time_zone=%d)", pszDateTime_addr, pUtc.GetAddr(), iTimeZone); + cellRtc->Log("cellRtcFormatRfc2822(pszDateTime_addr=0x%x, pUtc=0x%x, time_zone=%d)", pszDateTime_addr, pUtc.GetAddr(), iTimeZone); if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) return CELL_RTC_ERROR_INVALID_POINTER; // Add time_zone as offset in minutes. - wxTimeSpan tz = wxTimeSpan(0, (long) iTimeZone, 0, 0); + rTimeSpan tz = rTimeSpan(0, (long) iTimeZone, 0, 0); // Get date from ticks + tz. - wxDateTime date = wxDateTime((time_t)pUtc->tick); + rDateTime date = rDateTime((time_t)pUtc->tick); date.Add(tz); // Format date string in RFC2822 format (e.g.: Mon, 01 Jan 1990 12:00:00 +0000). - const std::string& str = fmt::ToUTF8(date.Format("%a, %d %b %Y %T %z", wxDateTime::TZ::UTC)); + const std::string& str = date.Format("%a, %d %b %Y %T %z", rDateTime::TZ::UTC); Memory.WriteString(pszDateTime_addr, str); return CELL_OK; @@ -103,16 +104,16 @@ int cellRtcFormatRfc2822(u32 pszDateTime_addr, mem_ptr_t pUtc, s32 int cellRtcFormatRfc2822LocalTime(u32 pszDateTime_addr, mem_ptr_t pUtc) { - cellRtc.Log("cellRtcFormatRfc2822LocalTime(pszDateTime_addr=0x%x, pUtc=0x%x)", pszDateTime_addr, pUtc.GetAddr()); + cellRtc->Log("cellRtcFormatRfc2822LocalTime(pszDateTime_addr=0x%x, pUtc=0x%x)", pszDateTime_addr, pUtc.GetAddr()); if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) return CELL_RTC_ERROR_INVALID_POINTER; // Get date from ticks. - wxDateTime date = wxDateTime((time_t)pUtc->tick); + rDateTime date = rDateTime((time_t)pUtc->tick); // Format date string in RFC2822 format (e.g.: Mon, 01 Jan 1990 12:00:00 +0000). - const std::string& str = fmt::ToUTF8(date.Format("%a, %d %b %Y %T %z", wxDateTime::TZ::Local)); + const std::string& str = date.Format("%a, %d %b %Y %T %z", rDateTime::TZ::Local); Memory.WriteString(pszDateTime_addr, str); return CELL_OK; @@ -120,20 +121,20 @@ int cellRtcFormatRfc2822LocalTime(u32 pszDateTime_addr, mem_ptr_t p int cellRtcFormatRfc3339(u32 pszDateTime_addr, mem_ptr_t pUtc, s32 iTimeZone) { - cellRtc.Log("cellRtcFormatRfc3339(pszDateTime_addr=0x%x, pUtc=0x%x, iTimeZone=%d)", pszDateTime_addr, pUtc.GetAddr(), iTimeZone); + cellRtc->Log("cellRtcFormatRfc3339(pszDateTime_addr=0x%x, pUtc=0x%x, iTimeZone=%d)", pszDateTime_addr, pUtc.GetAddr(), iTimeZone); if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) return CELL_RTC_ERROR_INVALID_POINTER; // Add time_zone as offset in minutes. - wxTimeSpan tz = wxTimeSpan(0, (long) iTimeZone, 0, 0); + rTimeSpan tz = rTimeSpan(0, (long) iTimeZone, 0, 0); // Get date from ticks + tz. - wxDateTime date = wxDateTime((time_t)pUtc->tick); + rDateTime date = rDateTime((time_t)pUtc->tick); date.Add(tz); // Format date string in RFC3339 format (e.g.: 1990-01-01T12:00:00.00Z). - const std::string& str = fmt::ToUTF8(date.Format("%FT%T.%zZ", wxDateTime::TZ::UTC)); + const std::string& str = date.Format("%FT%T.%zZ", rDateTime::TZ::UTC); Memory.WriteString(pszDateTime_addr, str); return CELL_OK; @@ -141,16 +142,16 @@ int cellRtcFormatRfc3339(u32 pszDateTime_addr, mem_ptr_t pUtc, s32 int cellRtcFormatRfc3339LocalTime(u32 pszDateTime_addr, mem_ptr_t pUtc) { - cellRtc.Log("cellRtcFormatRfc3339LocalTime(pszDateTime_addr=0x%x, pUtc=0x%x)", pszDateTime_addr, pUtc.GetAddr()); + cellRtc->Log("cellRtcFormatRfc3339LocalTime(pszDateTime_addr=0x%x, pUtc=0x%x)", pszDateTime_addr, pUtc.GetAddr()); if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) return CELL_RTC_ERROR_INVALID_POINTER; // Get date from ticks. - wxDateTime date = wxDateTime((time_t) pUtc->tick); + rDateTime date = rDateTime((time_t) pUtc->tick); // Format date string in RFC3339 format (e.g.: 1990-01-01T12:00:00.00Z). - const std::string& str = fmt::ToUTF8(date.Format("%FT%T.%zZ", wxDateTime::TZ::Local)); + const std::string& str = date.Format("%FT%T.%zZ", rDateTime::TZ::Local); Memory.WriteString(pszDateTime_addr, str); return CELL_OK; @@ -158,15 +159,15 @@ int cellRtcFormatRfc3339LocalTime(u32 pszDateTime_addr, mem_ptr_t p int cellRtcParseDateTime(mem_ptr_t pUtc, u32 pszDateTime_addr) { - cellRtc.Log("cellRtcParseDateTime(pUtc=0x%x, pszDateTime_addr=0x%x)", pUtc.GetAddr(), pszDateTime_addr); + cellRtc->Log("cellRtcParseDateTime(pUtc=0x%x, pszDateTime_addr=0x%x)", pUtc.GetAddr(), pszDateTime_addr); if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) return CELL_RTC_ERROR_INVALID_POINTER; // Get date from formatted string. - wxDateTime date; + rDateTime date; const std::string& format = Memory.ReadString(pszDateTime_addr); - date.ParseDateTime(fmt::FromUTF8(format)); + date.ParseDateTime(format); pUtc->tick = date.GetTicks(); @@ -175,15 +176,15 @@ int cellRtcParseDateTime(mem_ptr_t pUtc, u32 pszDateTime_addr) int cellRtcParseRfc3339(mem_ptr_t pUtc, u32 pszDateTime_addr) { - cellRtc.Log("cellRtcParseRfc3339(pUtc=0x%x, pszDateTime_addr=0x%x)", pUtc.GetAddr(), pszDateTime_addr); + cellRtc->Log("cellRtcParseRfc3339(pUtc=0x%x, pszDateTime_addr=0x%x)", pUtc.GetAddr(), pszDateTime_addr); if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) return CELL_RTC_ERROR_INVALID_POINTER; // Get date from RFC3339 formatted string. - wxDateTime date; + rDateTime date; const std::string& format = Memory.ReadString(pszDateTime_addr); - date.ParseDateTime(fmt::FromUTF8(format)); + date.ParseDateTime(format); pUtc->tick = date.GetTicks(); @@ -192,12 +193,12 @@ int cellRtcParseRfc3339(mem_ptr_t pUtc, u32 pszDateTime_addr) int cellRtcGetTick(mem_ptr_t pTime, mem_ptr_t pTick) { - cellRtc.Log("cellRtcGetTick(pTime=0x%x, pTick=0x%x)", pTime.GetAddr(), pTick.GetAddr()); + cellRtc->Log("cellRtcGetTick(pTime=0x%x, pTick=0x%x)", pTime.GetAddr(), pTick.GetAddr()); if (!pTime.IsGood() || !pTick.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime datetime = wxDateTime(pTime->day, (wxDateTime::Month)pTime->month.ToLE(), pTime->year, pTime->hour, pTime->minute, pTime->second, (pTime->microsecond / 1000)); + rDateTime datetime = rDateTime(pTime->day, (rDateTime::Month)pTime->month.ToLE(), pTime->year, pTime->hour, pTime->minute, pTime->second, (pTime->microsecond / 1000)); pTick->tick = datetime.GetTicks(); return CELL_OK; @@ -205,27 +206,27 @@ int cellRtcGetTick(mem_ptr_t pTime, mem_ptr_t pTic int cellRtcSetTick(mem_ptr_t pTime, mem_ptr_t pTick) { - cellRtc.Log("cellRtcSetTick(pTime=0x%x, pTick=0x%x)", pTime.GetAddr(), pTick.GetAddr()); + cellRtc->Log("cellRtcSetTick(pTime=0x%x, pTick=0x%x)", pTime.GetAddr(), pTick.GetAddr()); if (!pTime.IsGood() || !pTick.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick->tick); + rDateTime date = rDateTime((time_t)pTick->tick); - pTime->year = date.GetYear(wxDateTime::TZ::UTC); - pTime->month = date.GetMonth(wxDateTime::TZ::UTC); - pTime->day = date.GetDay(wxDateTime::TZ::UTC); - pTime->hour = date.GetHour(wxDateTime::TZ::UTC); - pTime->minute = date.GetMinute(wxDateTime::TZ::UTC); - pTime->second = date.GetSecond(wxDateTime::TZ::UTC); - pTime->microsecond = date.GetMillisecond(wxDateTime::TZ::UTC) * 1000; + pTime->year = date.GetYear(rDateTime::TZ::UTC); + pTime->month = date.GetMonth(rDateTime::TZ::UTC); + pTime->day = date.GetDay(rDateTime::TZ::UTC); + pTime->hour = date.GetHour(rDateTime::TZ::UTC); + pTime->minute = date.GetMinute(rDateTime::TZ::UTC); + pTime->second = date.GetSecond(rDateTime::TZ::UTC); + pTime->microsecond = date.GetMillisecond(rDateTime::TZ::UTC) * 1000; return CELL_OK; } int cellRtcTickAddTicks(mem_ptr_t pTick0, mem_ptr_t pTick1, s64 lAdd) { - cellRtc.Log("cellRtcTickAddTicks(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); + cellRtc->Log("cellRtcTickAddTicks(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; @@ -236,13 +237,13 @@ int cellRtcTickAddTicks(mem_ptr_t pTick0, mem_ptr_t pT int cellRtcTickAddMicroseconds(mem_ptr_t pTick0, mem_ptr_t pTick1, s64 lAdd) { - cellRtc.Log("cellRtcTickAddMicroseconds(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); + cellRtc->Log("cellRtcTickAddMicroseconds(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick1->tick); - wxTimeSpan microseconds = wxTimeSpan(0, 0, 0, lAdd / 1000); + rDateTime date = rDateTime((time_t)pTick1->tick); + rTimeSpan microseconds = rTimeSpan(0, 0, 0, lAdd / 1000); date.Add(microseconds); pTick0->tick = date.GetTicks(); @@ -251,13 +252,13 @@ int cellRtcTickAddMicroseconds(mem_ptr_t pTick0, mem_ptr_t pTick0, mem_ptr_t pTick1, s64 lAdd) { - cellRtc.Log("cellRtcTickAddSeconds(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); + cellRtc->Log("cellRtcTickAddSeconds(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick1->tick); - wxTimeSpan seconds = wxTimeSpan(0, 0, lAdd, 0); + rDateTime date = rDateTime((time_t)pTick1->tick); + rTimeSpan seconds = rTimeSpan(0, 0, lAdd, 0); date.Add(seconds); pTick0->tick = date.GetTicks(); @@ -266,13 +267,13 @@ int cellRtcTickAddSeconds(mem_ptr_t pTick0, mem_ptr_t int cellRtcTickAddMinutes(mem_ptr_t pTick0, mem_ptr_t pTick1, s64 lAdd) { - cellRtc.Log("cellRtcTickAddMinutes(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); + cellRtc->Log("cellRtcTickAddMinutes(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick1->tick); - wxTimeSpan minutes = wxTimeSpan(0, lAdd, 0, 0); + rDateTime date = rDateTime((time_t)pTick1->tick); + rTimeSpan minutes = rTimeSpan(0, lAdd, 0, 0); date.Add(minutes); pTick0->tick = date.GetTicks(); @@ -281,13 +282,13 @@ int cellRtcTickAddMinutes(mem_ptr_t pTick0, mem_ptr_t int cellRtcTickAddHours(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { - cellRtc.Log("cellRtcTickAddHours(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); + cellRtc->Log("cellRtcTickAddHours(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick1->tick); - wxTimeSpan hours = wxTimeSpan(iAdd, 0, 0, 0); + rDateTime date = rDateTime((time_t)pTick1->tick); + rTimeSpan hours = rTimeSpan(iAdd, 0, 0, 0); date.Add(hours); pTick0->tick = date.GetTicks(); @@ -296,13 +297,13 @@ int cellRtcTickAddHours(mem_ptr_t pTick0, mem_ptr_t pT int cellRtcTickAddDays(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { - cellRtc.Log("cellRtcTickAddDays(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); + cellRtc->Log("cellRtcTickAddDays(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick1->tick); - wxDateSpan days = wxDateSpan(0, 0, 0, iAdd); + rDateTime date = rDateTime((time_t)pTick1->tick); + rDateSpan days = rDateSpan(0, 0, 0, iAdd); date.Add(days); pTick0->tick = date.GetTicks(); @@ -311,13 +312,13 @@ int cellRtcTickAddDays(mem_ptr_t pTick0, mem_ptr_t pTi int cellRtcTickAddWeeks(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { - cellRtc.Log("cellRtcTickAddWeeks(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); + cellRtc->Log("cellRtcTickAddWeeks(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick1->tick); - wxDateSpan weeks = wxDateSpan(0, 0, iAdd, 0); + rDateTime date = rDateTime((time_t)pTick1->tick); + rDateSpan weeks = rDateSpan(0, 0, iAdd, 0); date.Add(weeks); pTick0->tick = date.GetTicks(); @@ -326,13 +327,13 @@ int cellRtcTickAddWeeks(mem_ptr_t pTick0, mem_ptr_t pT int cellRtcTickAddMonths(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { - cellRtc.Log("cellRtcTickAddMonths(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); + cellRtc->Log("cellRtcTickAddMonths(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick1->tick); - wxDateSpan months = wxDateSpan(0, iAdd, 0, 0); + rDateTime date = rDateTime((time_t)pTick1->tick); + rDateSpan months = rDateSpan(0, iAdd, 0, 0); date.Add(months); pTick0->tick = date.GetTicks(); @@ -341,13 +342,13 @@ int cellRtcTickAddMonths(mem_ptr_t pTick0, mem_ptr_t p int cellRtcTickAddYears(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { - cellRtc.Log("cellRtcTickAddYears(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); + cellRtc->Log("cellRtcTickAddYears(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date = wxDateTime((time_t)pTick1->tick); - wxDateSpan years = wxDateSpan(iAdd, 0, 0, 0); + rDateTime date = rDateTime((time_t)pTick1->tick); + rDateSpan years = rDateSpan(iAdd, 0, 0, 0); date.Add(years); pTick0->tick = date.GetTicks(); @@ -356,39 +357,39 @@ int cellRtcTickAddYears(mem_ptr_t pTick0, mem_ptr_t pT int cellRtcConvertUtcToLocalTime(mem_ptr_t pUtc, mem_ptr_t pLocalTime) { - cellRtc.Log("cellRtcConvertUtcToLocalTime(pUtc=0x%x, pLocalTime=0x%x)", pUtc.GetAddr(), pLocalTime.GetAddr()); + cellRtc->Log("cellRtcConvertUtcToLocalTime(pUtc=0x%x, pLocalTime=0x%x)", pUtc.GetAddr(), pLocalTime.GetAddr()); if (!pUtc.IsGood() || !pLocalTime.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime time = wxDateTime((time_t)pUtc->tick); - wxDateTime local_time = time.FromUTC(false); + rDateTime time = rDateTime((time_t)pUtc->tick); + rDateTime local_time = time.FromUTC(false); pLocalTime->tick = local_time.GetTicks(); return CELL_OK; } int cellRtcConvertLocalTimeToUtc(mem_ptr_t pLocalTime, mem_ptr_t pUtc) { - cellRtc.Log("cellRtcConvertLocalTimeToUtc(pLocalTime=0x%x, pUtc=0x%x)", pLocalTime.GetAddr(), pUtc.GetAddr()); + cellRtc->Log("cellRtcConvertLocalTimeToUtc(pLocalTime=0x%x, pUtc=0x%x)", pLocalTime.GetAddr(), pUtc.GetAddr()); if (!pLocalTime.IsGood() || !pUtc.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime time = wxDateTime((time_t)pLocalTime->tick); - wxDateTime utc_time = time.ToUTC(false); + rDateTime time = rDateTime((time_t)pLocalTime->tick); + rDateTime utc_time = time.ToUTC(false); pUtc->tick = utc_time.GetTicks(); return CELL_OK; } int cellRtcGetDosTime(mem_ptr_t pDateTime, mem32_t puiDosTime) { - cellRtc.Log("cellRtcGetDosTime(pDateTime=0x%x, puiDosTime=0x%x)", pDateTime.GetAddr(), puiDosTime.GetAddr()); + cellRtc->Log("cellRtcGetDosTime(pDateTime=0x%x, puiDosTime=0x%x)", pDateTime.GetAddr(), puiDosTime.GetAddr()); if (!pDateTime.IsGood() || !puiDosTime.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; // Convert to DOS time. - wxDateTime date_time = wxDateTime(pDateTime->day, (wxDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); + rDateTime date_time = rDateTime(pDateTime->day, (rDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); puiDosTime = date_time.GetAsDOS(); return CELL_OK; @@ -396,123 +397,123 @@ int cellRtcGetDosTime(mem_ptr_t pDateTime, mem32_t puiDosTime) int cellRtcGetTime_t(mem_ptr_t pDateTime, mem64_t piTime) { - cellRtc.Log("cellRtcGetTime_t(pDateTime=0x%x, piTime=0x%x)", pDateTime.GetAddr(), piTime.GetAddr()); + cellRtc->Log("cellRtcGetTime_t(pDateTime=0x%x, piTime=0x%x)", pDateTime.GetAddr(), piTime.GetAddr()); if (!pDateTime.IsGood() || !piTime.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; // Convert to POSIX time_t. - wxDateTime date_time = wxDateTime(pDateTime->day, (wxDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); - piTime = convertToUNIXTime(date_time.GetSecond(wxDateTime::TZ::UTC), date_time.GetMinute(wxDateTime::TZ::UTC), - date_time.GetHour(wxDateTime::TZ::UTC), date_time.GetDay(wxDateTime::TZ::UTC), date_time.GetYear(wxDateTime::TZ::UTC)); + rDateTime date_time = rDateTime(pDateTime->day, (rDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); + piTime = convertToUNIXTime(date_time.GetSecond(rDateTime::TZ::UTC), date_time.GetMinute(rDateTime::TZ::UTC), + date_time.GetHour(rDateTime::TZ::UTC), date_time.GetDay(rDateTime::TZ::UTC), date_time.GetYear(rDateTime::TZ::UTC)); return CELL_OK; } int cellRtcGetWin32FileTime(mem_ptr_t pDateTime, mem64_t pulWin32FileTime) { - cellRtc.Log("cellRtcGetWin32FileTime(pDateTime=0x%x, pulWin32FileTime=0x%x)", pDateTime.GetAddr(), pulWin32FileTime.GetAddr()); + cellRtc->Log("cellRtcGetWin32FileTime(pDateTime=0x%x, pulWin32FileTime=0x%x)", pDateTime.GetAddr(), pulWin32FileTime.GetAddr()); if (!pDateTime.IsGood() || !pulWin32FileTime.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; // Convert to WIN32 FILETIME. - wxDateTime date_time = wxDateTime(pDateTime->day, (wxDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); - pulWin32FileTime = convertToWin32FILETIME(date_time.GetSecond(wxDateTime::TZ::UTC), date_time.GetMinute(wxDateTime::TZ::UTC), - date_time.GetHour(wxDateTime::TZ::UTC), date_time.GetDay(wxDateTime::TZ::UTC), date_time.GetYear(wxDateTime::TZ::UTC)); + rDateTime date_time = rDateTime(pDateTime->day, (rDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); + pulWin32FileTime = convertToWin32FILETIME(date_time.GetSecond(rDateTime::TZ::UTC), date_time.GetMinute(rDateTime::TZ::UTC), + date_time.GetHour(rDateTime::TZ::UTC), date_time.GetDay(rDateTime::TZ::UTC), date_time.GetYear(rDateTime::TZ::UTC)); return CELL_OK; } int cellRtcSetDosTime(mem_ptr_t pDateTime, u32 uiDosTime) { - cellRtc.Log("cellRtcSetDosTime(pDateTime=0x%x, uiDosTime=0x%x)", pDateTime.GetAddr(), uiDosTime); + cellRtc->Log("cellRtcSetDosTime(pDateTime=0x%x, uiDosTime=0x%x)", pDateTime.GetAddr(), uiDosTime); if (!pDateTime.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date_time; - wxDateTime dos_time = date_time.SetFromDOS(uiDosTime); + rDateTime date_time; + rDateTime dos_time = date_time.SetFromDOS(uiDosTime); - pDateTime->year = dos_time.GetYear(wxDateTime::TZ::UTC); - pDateTime->month = dos_time.GetMonth(wxDateTime::TZ::UTC); - pDateTime->day = dos_time.GetDay(wxDateTime::TZ::UTC); - pDateTime->hour = dos_time.GetHour(wxDateTime::TZ::UTC); - pDateTime->minute = dos_time.GetMinute(wxDateTime::TZ::UTC); - pDateTime->second = dos_time.GetSecond(wxDateTime::TZ::UTC); - pDateTime->microsecond = dos_time.GetMillisecond(wxDateTime::TZ::UTC) * 1000; + pDateTime->year = dos_time.GetYear(rDateTime::TZ::UTC); + pDateTime->month = dos_time.GetMonth(rDateTime::TZ::UTC); + pDateTime->day = dos_time.GetDay(rDateTime::TZ::UTC); + pDateTime->hour = dos_time.GetHour(rDateTime::TZ::UTC); + pDateTime->minute = dos_time.GetMinute(rDateTime::TZ::UTC); + pDateTime->second = dos_time.GetSecond(rDateTime::TZ::UTC); + pDateTime->microsecond = dos_time.GetMillisecond(rDateTime::TZ::UTC) * 1000; return CELL_OK; } int cellRtcSetTime_t(mem_ptr_t pDateTime, u64 iTime) { - cellRtc.Log("cellRtcSetTime_t(pDateTime=0x%x, iTime=0x%llx)", pDateTime.GetAddr(), iTime); + cellRtc->Log("cellRtcSetTime_t(pDateTime=0x%x, iTime=0x%llx)", pDateTime.GetAddr(), iTime); if (!pDateTime.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date_time = wxDateTime((time_t)iTime); + rDateTime date_time = rDateTime((time_t)iTime); - pDateTime->year = date_time.GetYear(wxDateTime::TZ::UTC); - pDateTime->month = date_time.GetMonth(wxDateTime::TZ::UTC); - pDateTime->day = date_time.GetDay(wxDateTime::TZ::UTC); - pDateTime->hour = date_time.GetHour(wxDateTime::TZ::UTC); - pDateTime->minute = date_time.GetMinute(wxDateTime::TZ::UTC); - pDateTime->second = date_time.GetSecond(wxDateTime::TZ::UTC); - pDateTime->microsecond = date_time.GetMillisecond(wxDateTime::TZ::UTC) * 1000; + pDateTime->year = date_time.GetYear(rDateTime::TZ::UTC); + pDateTime->month = date_time.GetMonth(rDateTime::TZ::UTC); + pDateTime->day = date_time.GetDay(rDateTime::TZ::UTC); + pDateTime->hour = date_time.GetHour(rDateTime::TZ::UTC); + pDateTime->minute = date_time.GetMinute(rDateTime::TZ::UTC); + pDateTime->second = date_time.GetSecond(rDateTime::TZ::UTC); + pDateTime->microsecond = date_time.GetMillisecond(rDateTime::TZ::UTC) * 1000; return CELL_OK; } int cellRtcSetWin32FileTime(mem_ptr_t pDateTime, u64 ulWin32FileTime) { - cellRtc.Log("cellRtcSetWin32FileTime(pDateTime=0x%x, ulWin32FileTime=0x%llx)", pDateTime, ulWin32FileTime); + cellRtc->Log("cellRtcSetWin32FileTime(pDateTime=0x%x, ulWin32FileTime=0x%llx)", pDateTime, ulWin32FileTime); if (!pDateTime.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; - wxDateTime date_time = wxDateTime((time_t)ulWin32FileTime); + rDateTime date_time = rDateTime((time_t)ulWin32FileTime); - pDateTime->year = date_time.GetYear(wxDateTime::TZ::UTC); - pDateTime->month = date_time.GetMonth(wxDateTime::TZ::UTC); - pDateTime->day = date_time.GetDay(wxDateTime::TZ::UTC); - pDateTime->hour = date_time.GetHour(wxDateTime::TZ::UTC); - pDateTime->minute = date_time.GetMinute(wxDateTime::TZ::UTC); - pDateTime->second = date_time.GetSecond(wxDateTime::TZ::UTC); - pDateTime->microsecond = date_time.GetMillisecond(wxDateTime::TZ::UTC) * 1000; + pDateTime->year = date_time.GetYear(rDateTime::TZ::UTC); + pDateTime->month = date_time.GetMonth(rDateTime::TZ::UTC); + pDateTime->day = date_time.GetDay(rDateTime::TZ::UTC); + pDateTime->hour = date_time.GetHour(rDateTime::TZ::UTC); + pDateTime->minute = date_time.GetMinute(rDateTime::TZ::UTC); + pDateTime->second = date_time.GetSecond(rDateTime::TZ::UTC); + pDateTime->microsecond = date_time.GetMillisecond(rDateTime::TZ::UTC) * 1000; return CELL_OK; } int cellRtcIsLeapYear(s32 year) { - cellRtc.Log("cellRtcIsLeapYear(year=%d)", year); + cellRtc->Log("cellRtcIsLeapYear(year=%d)", year); - wxDateTime datetime; - return datetime.IsLeapYear(year, wxDateTime::Gregorian); + rDateTime datetime; + return datetime.IsLeapYear(year, rDateTime::Gregorian); } int cellRtcGetDaysInMonth(s32 year, s32 month) { - cellRtc.Log("cellRtcGetDaysInMonth(year=%d, month=%d)", year, month); + cellRtc->Log("cellRtcGetDaysInMonth(year=%d, month=%d)", year, month); - wxDateTime datetime; - return datetime.GetNumberOfDays((wxDateTime::Month) month, year, wxDateTime::Gregorian); + rDateTime datetime; + return datetime.GetNumberOfDays((rDateTime::Month) month, year, rDateTime::Gregorian); } int cellRtcGetDayOfWeek(s32 year, s32 month, s32 day) { - cellRtc.Log("cellRtcGetDayOfWeek(year=%d, month=%d, day=%d)", year, month, day); + cellRtc->Log("cellRtcGetDayOfWeek(year=%d, month=%d, day=%d)", year, month, day); - wxDateTime datetime; - datetime.SetToWeekDay((wxDateTime::WeekDay) day, 1, (wxDateTime::Month) month, year); + rDateTime datetime; + datetime.SetToWeekDay((rDateTime::WeekDay) day, 1, (rDateTime::Month) month, year); return datetime.GetWeekDay(); } int cellRtcCheckValid(mem_ptr_t pTime) { - cellRtc.Log("cellRtcCheckValid(pTime=0x%x)", pTime.GetAddr()); + cellRtc->Log("cellRtcCheckValid(pTime=0x%x)", pTime.GetAddr()); if (!pTime.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; @@ -529,7 +530,7 @@ int cellRtcCheckValid(mem_ptr_t pTime) int cellRtcCompareTick(mem_ptr_t pTick0, mem_ptr_t pTick1) { - cellRtc.Log("cellRtcCompareTick(pTick0=0x%x, pTick1=0x%x)", pTick0.GetAddr(), pTick1.GetAddr()); + cellRtc->Log("cellRtcCompareTick(pTick0=0x%x, pTick1=0x%x)", pTick0.GetAddr(), pTick1.GetAddr()); if (!pTick0.IsGood() || !pTick1.IsGood()) return CELL_RTC_ERROR_INVALID_POINTER; @@ -541,44 +542,44 @@ int cellRtcCompareTick(mem_ptr_t pTick0, mem_ptr_t pTi void cellRtc_init() { - cellRtc.AddFunc(0x9dafc0d9, cellRtcGetCurrentTick); - cellRtc.AddFunc(0x32c941cf, cellRtcGetCurrentClock); - cellRtc.AddFunc(0x2cce9cf5, cellRtcGetCurrentClockLocalTime); + cellRtc->AddFunc(0x9dafc0d9, cellRtcGetCurrentTick); + cellRtc->AddFunc(0x32c941cf, cellRtcGetCurrentClock); + cellRtc->AddFunc(0x2cce9cf5, cellRtcGetCurrentClockLocalTime); - cellRtc.AddFunc(0x5491b9d5, cellRtcFormatRfc2822); - cellRtc.AddFunc(0xa07c3d2f, cellRtcFormatRfc2822LocalTime); - cellRtc.AddFunc(0xd9c0b463, cellRtcFormatRfc3339); - cellRtc.AddFunc(0x1324948a, cellRtcFormatRfc3339LocalTime); - cellRtc.AddFunc(0xc5bc0fac, cellRtcParseDateTime); - cellRtc.AddFunc(0xcf11c3d6, cellRtcParseRfc3339); + cellRtc->AddFunc(0x5491b9d5, cellRtcFormatRfc2822); + cellRtc->AddFunc(0xa07c3d2f, cellRtcFormatRfc2822LocalTime); + cellRtc->AddFunc(0xd9c0b463, cellRtcFormatRfc3339); + cellRtc->AddFunc(0x1324948a, cellRtcFormatRfc3339LocalTime); + cellRtc->AddFunc(0xc5bc0fac, cellRtcParseDateTime); + cellRtc->AddFunc(0xcf11c3d6, cellRtcParseRfc3339); - cellRtc.AddFunc(0xc7bdb7eb, cellRtcGetTick); - cellRtc.AddFunc(0x99b13034, cellRtcSetTick); - cellRtc.AddFunc(0x269a1882, cellRtcTickAddTicks); - cellRtc.AddFunc(0xf8509925, cellRtcTickAddMicroseconds); - cellRtc.AddFunc(0xccce71bd, cellRtcTickAddSeconds); - cellRtc.AddFunc(0x2f010bfa, cellRtcTickAddMinutes); - cellRtc.AddFunc(0xd41d3bd2, cellRtcTickAddHours); - cellRtc.AddFunc(0x75744e2a, cellRtcTickAddDays); - cellRtc.AddFunc(0x64c63fd5, cellRtcTickAddWeeks); - cellRtc.AddFunc(0xe0ecbb45, cellRtcTickAddMonths); - cellRtc.AddFunc(0x332a74dd, cellRtcTickAddYears); - cellRtc.AddFunc(0xc48d5002, cellRtcConvertUtcToLocalTime); - cellRtc.AddFunc(0x46ca7fe0, cellRtcConvertLocalTimeToUtc); + cellRtc->AddFunc(0xc7bdb7eb, cellRtcGetTick); + cellRtc->AddFunc(0x99b13034, cellRtcSetTick); + cellRtc->AddFunc(0x269a1882, cellRtcTickAddTicks); + cellRtc->AddFunc(0xf8509925, cellRtcTickAddMicroseconds); + cellRtc->AddFunc(0xccce71bd, cellRtcTickAddSeconds); + cellRtc->AddFunc(0x2f010bfa, cellRtcTickAddMinutes); + cellRtc->AddFunc(0xd41d3bd2, cellRtcTickAddHours); + cellRtc->AddFunc(0x75744e2a, cellRtcTickAddDays); + cellRtc->AddFunc(0x64c63fd5, cellRtcTickAddWeeks); + cellRtc->AddFunc(0xe0ecbb45, cellRtcTickAddMonths); + cellRtc->AddFunc(0x332a74dd, cellRtcTickAddYears); + cellRtc->AddFunc(0xc48d5002, cellRtcConvertUtcToLocalTime); + cellRtc->AddFunc(0x46ca7fe0, cellRtcConvertLocalTimeToUtc); // (TODO: Time Information Manipulation Functions missing) - cellRtc.AddFunc(0xdfff32cf, cellRtcGetDosTime); - cellRtc.AddFunc(0xcb90c761, cellRtcGetTime_t); - cellRtc.AddFunc(0xe7086f05, cellRtcGetWin32FileTime); - cellRtc.AddFunc(0x9598d4b3, cellRtcSetDosTime); - cellRtc.AddFunc(0xbb543189, cellRtcSetTime_t); - cellRtc.AddFunc(0x5f68c268, cellRtcSetWin32FileTime); + cellRtc->AddFunc(0xdfff32cf, cellRtcGetDosTime); + cellRtc->AddFunc(0xcb90c761, cellRtcGetTime_t); + cellRtc->AddFunc(0xe7086f05, cellRtcGetWin32FileTime); + cellRtc->AddFunc(0x9598d4b3, cellRtcSetDosTime); + cellRtc->AddFunc(0xbb543189, cellRtcSetTime_t); + cellRtc->AddFunc(0x5f68c268, cellRtcSetWin32FileTime); - cellRtc.AddFunc(0x5316b4a8, cellRtcIsLeapYear); - cellRtc.AddFunc(0x5b6a0a1d, cellRtcGetDaysInMonth); - cellRtc.AddFunc(0xc2d8cf95, cellRtcGetDayOfWeek); - cellRtc.AddFunc(0x7f1086e6, cellRtcCheckValid); + cellRtc->AddFunc(0x5316b4a8, cellRtcIsLeapYear); + cellRtc->AddFunc(0x5b6a0a1d, cellRtcGetDaysInMonth); + cellRtc->AddFunc(0xc2d8cf95, cellRtcGetDayOfWeek); + cellRtc->AddFunc(0x7f1086e6, cellRtcCheckValid); - cellRtc.AddFunc(0xfb51fc61, cellRtcCompareTick); + cellRtc->AddFunc(0xfb51fc61, cellRtcCompareTick); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index ede0bfd3d2..ea3541be23 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -8,23 +8,24 @@ #include "cellSpurs.h" -void cellSpurs_init(); -Module cellSpurs(0x000a, cellSpurs_init); +//void cellSpurs_init(); +//Module cellSpurs(0x000a, cellSpurs_init); +Module *cellSpurs = nullptr; int cellSpursInitialize(mem_ptr_t spurs, int nSpus, int spuPriority, int ppuPriority, bool exitIfNoWork) { - cellSpurs.Warning("cellSpursInitialize(spurs_addr=0x%x, nSpus=%u, spuPriority=%u, ppuPriority=%u, exitIfNoWork=%u)", spurs.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork); + cellSpurs->Warning("cellSpursInitialize(spurs_addr=0x%x, nSpus=%u, spuPriority=%u, ppuPriority=%u, exitIfNoWork=%u)", spurs.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursInitialize : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursInitialize : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursInitialize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursInitialize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -36,17 +37,17 @@ int cellSpursInitialize(mem_ptr_t spurs, int nSpus, int spuPriority, int cellSpursFinalize(mem_ptr_t spurs) { - cellSpurs.Warning("cellSpursFinalize(spurs_addr=0x%x)", spurs.GetAddr()); + cellSpurs->Warning("cellSpursFinalize(spurs_addr=0x%x)", spurs.GetAddr()); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursFinalize : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursFinalize : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursFinalize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursFinalize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -57,17 +58,17 @@ int cellSpursFinalize(mem_ptr_t spurs) int cellSpursInitializeWithAttribute(mem_ptr_t spurs, const mem_ptr_t attr) { - cellSpurs.Warning("cellSpursInitializeWithAttribute(spurs_addr=0x%x, spurs_addr=0x%x)", spurs.GetAddr(), attr.GetAddr()); + cellSpurs->Warning("cellSpursInitializeWithAttribute(spurs_addr=0x%x, spurs_addr=0x%x)", spurs.GetAddr(), attr.GetAddr()); if ((spurs.GetAddr() % 128 != 0) || (attr.GetAddr() % 8 != 0)) { - cellSpurs.Error("cellSpursInitializeWithAttribute : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursInitializeWithAttribute : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood() || !attr.IsGood()) { - cellSpurs.Error("cellSpursInitializeWithAttribute : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursInitializeWithAttribute : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -78,17 +79,17 @@ int cellSpursInitializeWithAttribute(mem_ptr_t spurs, const mem_ptr_t int cellSpursInitializeWithAttribute2(mem_ptr_t spurs, const mem_ptr_t attr) { - cellSpurs.Warning("cellSpursInitializeWithAttribute2(spurs_addr=0x%x, spurs_addr=0x%x)", spurs.GetAddr(), attr.GetAddr()); + cellSpurs->Warning("cellSpursInitializeWithAttribute2(spurs_addr=0x%x, spurs_addr=0x%x)", spurs.GetAddr(), attr.GetAddr()); if ((spurs.GetAddr() % 128 != 0) || (attr.GetAddr() % 8 != 0)) { - cellSpurs.Error("cellSpursInitializeWithAttribute2 : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursInitializeWithAttribute2 : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood() || !attr.IsGood()) { - cellSpurs.Error("cellSpursInitializeWithAttribute2 : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursInitializeWithAttribute2 : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -99,17 +100,17 @@ int cellSpursInitializeWithAttribute2(mem_ptr_t spurs, const mem_ptr int _cellSpursAttributeInitialize(mem_ptr_t attr, int nSpus, int spuPriority, int ppuPriority, bool exitIfNoWork) { - cellSpurs.Warning("_cellSpursAttributeInitialize(attr_addr=0x%x, nSpus=%u, spuPriority=%u, ppuPriority=%u, exitIfNoWork=%u)", attr.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork); + cellSpurs->Warning("_cellSpursAttributeInitialize(attr_addr=0x%x, nSpus=%u, spuPriority=%u, ppuPriority=%u, exitIfNoWork=%u)", attr.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork); if (attr.GetAddr() % 8 != 0) { - cellSpurs.Error("_cellSpursAttributeInitialize : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("_cellSpursAttributeInitialize : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!attr.IsGood()) { - cellSpurs.Error("_cellSpursAttributeInitialize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("_cellSpursAttributeInitialize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -120,17 +121,17 @@ int _cellSpursAttributeInitialize(mem_ptr_t attr, int nSpus, int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_t attr, u32 container) { - cellSpurs.Warning("cellSpursAttributeSetMemoryContainerForSpuThread(attr_addr=0x%x, container=0x%x)", attr.GetAddr(), container); + cellSpurs->Warning("cellSpursAttributeSetMemoryContainerForSpuThread(attr_addr=0x%x, container=0x%x)", attr.GetAddr(), container); if (attr.GetAddr() % 8 != 0) { - cellSpurs.Error("cellSpursAttributeSetMemoryContainerForSpuThread : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursAttributeSetMemoryContainerForSpuThread : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!attr.IsGood()) { - cellSpurs.Error("cellSpursAttributeSetMemoryContainerForSpuThread : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursAttributeSetMemoryContainerForSpuThread : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -141,23 +142,23 @@ int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_t attr, const mem8_t prefix, u32 size) { - cellSpurs.Warning("cellSpursAttributeSetNamePrefix(attr_addr=0x%x, prefix_addr=0x%x, size=0x%x)", attr.GetAddr(), prefix.GetAddr(), size); + cellSpurs->Warning("cellSpursAttributeSetNamePrefix(attr_addr=0x%x, prefix_addr=0x%x, size=0x%x)", attr.GetAddr(), prefix.GetAddr(), size); if (attr.GetAddr() % 8 != 0) { - cellSpurs.Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!attr.IsGood() || !prefix.IsGood()) { - cellSpurs.Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } if (size > CELL_SPURS_NAME_MAX_LENGTH) { - cellSpurs.Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_INVAL"); + cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_INVAL"); return CELL_SPURS_CORE_ERROR_INVAL; } @@ -168,17 +169,17 @@ int cellSpursAttributeSetNamePrefix(mem_ptr_t attr, const me int cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t attr) { - cellSpurs.Error("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr()); + cellSpurs->Error("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr()); if (attr.GetAddr() % 8 != 0) { - cellSpurs.Error("cellSpursAttributeEnableSpuPrintfIfAvailable : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursAttributeEnableSpuPrintfIfAvailable : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!attr.IsGood()) { - cellSpurs.Error("cellSpursAttributeEnableSpuPrintfIfAvailable : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursAttributeEnableSpuPrintfIfAvailable : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -187,17 +188,17 @@ int cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t a int cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t attr, int type) { - cellSpurs.Warning("cellSpursAttributeSetSpuThreadGroupType(attr_addr=0x%x, type=%u)", attr.GetAddr(), type); + cellSpurs->Warning("cellSpursAttributeSetSpuThreadGroupType(attr_addr=0x%x, type=%u)", attr.GetAddr(), type); if (attr.GetAddr() % 8 != 0) { - cellSpurs.Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!attr.IsGood()) { - cellSpurs.Error("cellSpursAttributeSetSpuThreadGroupType : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursAttributeSetSpuThreadGroupType : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -209,17 +210,17 @@ int cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t attr, int cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, const u8 priority[CELL_SPURS_MAX_SPU], u32 maxSpu, const bool isPreemptible[CELL_SPURS_MAX_SPU]) { - cellSpurs.Error("cellSpursAttributeEnableSystemWorkload(attr_addr=0x%x, priority[%u], maxSpu=%u, isPreemptible[%u])", attr.GetAddr(), priority, maxSpu, isPreemptible); + cellSpurs->Error("cellSpursAttributeEnableSystemWorkload(attr_addr=0x%x, priority[%u], maxSpu=%u, isPreemptible[%u])", attr.GetAddr(), priority, maxSpu, isPreemptible); if (attr.GetAddr() % 8 != 0) { - cellSpurs.Error("cellSpursAttributeEnableSystemWorkload : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursAttributeEnableSystemWorkload : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!attr.IsGood()) { - cellSpurs.Error("cellSpursAttributeEnableSystemWorkload : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursAttributeEnableSystemWorkload : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -227,7 +228,7 @@ int cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, c { if (priority[i] != 1 || maxSpu == 0) { - cellSpurs.Error("cellSpursAttributeEnableSystemWorkload : CELL_SPURS_CORE_ERROR_INVAL"); + cellSpurs->Error("cellSpursAttributeEnableSystemWorkload : CELL_SPURS_CORE_ERROR_INVAL"); return CELL_SPURS_CORE_ERROR_INVAL; } } @@ -236,17 +237,17 @@ int cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, c int cellSpursGetSpuThreadGroupId(mem_ptr_t spurs, mem32_t group) { - cellSpurs.Error("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)", spurs.GetAddr(), group.GetAddr()); + cellSpurs->Error("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)", spurs.GetAddr(), group.GetAddr()); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursGetSpuThreadGroupId : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursGetSpuThreadGroupId : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood() || group.IsGood()) { - cellSpurs.Error("cellSpursGetSpuThreadGroupId : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursGetSpuThreadGroupId : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -255,17 +256,17 @@ int cellSpursGetSpuThreadGroupId(mem_ptr_t spurs, mem32_t group) int cellSpursGetNumSpuThread(mem_ptr_t spurs, mem32_t nThreads) { - cellSpurs.Error("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), nThreads.GetAddr()); + cellSpurs->Error("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), nThreads.GetAddr()); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursGetNumSpuThread : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursGetNumSpuThread : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood() || nThreads.IsGood()) { - cellSpurs.Error("cellSpursGetNumSpuThread : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursGetNumSpuThread : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -274,17 +275,17 @@ int cellSpursGetNumSpuThread(mem_ptr_t spurs, mem32_t nThreads) int cellSpursGetSpuThreadId(mem_ptr_t spurs, mem32_t thread, mem32_t nThreads) { - cellSpurs.Error("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr()); + cellSpurs->Error("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr()); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursGetSpuThreadId : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursGetSpuThreadId : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood() || !thread.IsGood() || nThreads.IsGood()) { - cellSpurs.Error("cellSpursGetSpuThreadId : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursGetSpuThreadId : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -293,17 +294,17 @@ int cellSpursGetSpuThreadId(mem_ptr_t spurs, mem32_t thread, mem32_t int cellSpursSetMaxContention(mem_ptr_t spurs, u32 workloadId, u32 maxContention) { - cellSpurs.Error("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%u, maxContention=%u)", spurs.GetAddr(), workloadId, maxContention); + cellSpurs->Error("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%u, maxContention=%u)", spurs.GetAddr(), workloadId, maxContention); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursSetMaxContention : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursSetMaxContention : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursSetMaxContention : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursSetMaxContention : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -312,17 +313,17 @@ int cellSpursSetMaxContention(mem_ptr_t spurs, u32 workloadId, u32 ma int cellSpursSetPriorities(mem_ptr_t spurs, u32 workloadId, const u8 priorities[CELL_SPURS_MAX_SPU]) { - cellSpurs.Error("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%u, priorities[%u])", spurs.GetAddr(), workloadId, priorities); + cellSpurs->Error("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%u, priorities[%u])", spurs.GetAddr(), workloadId, priorities); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursSetPriorities : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursSetPriorities : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursSetPriorities : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursSetPriorities : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -331,17 +332,17 @@ int cellSpursSetPriorities(mem_ptr_t spurs, u32 workloadId, const u8 int cellSpursSetPriority(mem_ptr_t spurs, u32 workloadId, u32 spuId, u32 priority) { - cellSpurs.Error("cellSpursSetPriority(spurs_addr=0x%x, workloadId=%u, spuId=%u, priority=%u)", spurs.GetAddr(), workloadId, spuId, priority); + cellSpurs->Error("cellSpursSetPriority(spurs_addr=0x%x, workloadId=%u, spuId=%u, priority=%u)", spurs.GetAddr(), workloadId, spuId, priority); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursSetPriority : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursSetPriority : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursSetPriority : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursSetPriority : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -350,17 +351,17 @@ int cellSpursSetPriority(mem_ptr_t spurs, u32 workloadId, u32 spuId, int cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, const bool isPreemptible[CELL_SPURS_MAX_SPU]) { - cellSpurs.Error("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible[%u])", spurs.GetAddr(), isPreemptible); + cellSpurs->Error("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible[%u])", spurs.GetAddr(), isPreemptible); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursSetPreemptionVictimHints : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursSetPreemptionVictimHints : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursSetPreemptionVictimHints : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursSetPreemptionVictimHints : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -369,17 +370,17 @@ int cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, const bool isP int cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t port, int isDynamic) { - cellSpurs.Warning("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)", spurs.GetAddr(), queue, port.GetAddr(), isDynamic); + cellSpurs->Warning("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)", spurs.GetAddr(), queue, port.GetAddr(), isDynamic); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursAttachLv2EventQueue : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursAttachLv2EventQueue : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood() || !port.IsGood()) { - cellSpurs.Error("cellSpursAttachLv2EventQueue : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursAttachLv2EventQueue : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -390,17 +391,17 @@ int cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t p int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) { - cellSpurs.Warning("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); + cellSpurs->Warning("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursDetachLv2EventQueue : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursDetachLv2EventQueue : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursDetachLv2EventQueue : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursDetachLv2EventQueue : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -411,17 +412,17 @@ int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) int cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) { - cellSpurs.Error("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%u)", spurs.GetAddr(), flag); + cellSpurs->Error("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%u)", spurs.GetAddr(), flag); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEnableExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEnableExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursEnableExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEnableExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -430,17 +431,17 @@ int cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, mem_func_ptr_t eaHandler, mem_ptr_t arg) { - cellSpurs.Error("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)", spurs.GetAddr(), eaHandler.GetAddr(), arg.GetAddr()); + cellSpurs->Error("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)", spurs.GetAddr(), eaHandler.GetAddr(), arg.GetAddr()); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursSetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursSetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood() || eaHandler.IsGood()) { - cellSpurs.Error("cellSpursSetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursSetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -449,17 +450,17 @@ int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, mem_func int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t spurs) { - cellSpurs.Error("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr()); + cellSpurs->Error("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr()); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursUnsetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursUnsetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood()) { - cellSpurs.Error("cellSpursUnsetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursUnsetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -468,17 +469,17 @@ int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t spurs) int cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) { - cellSpurs.Error("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr()); + cellSpurs->Error("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr()); if (spurs.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursGetInfo : CELL_SPURS_CORE_ERROR_ALIGN"); + cellSpurs->Error("cellSpursGetInfo : CELL_SPURS_CORE_ERROR_ALIGN"); return CELL_SPURS_CORE_ERROR_ALIGN; } if (!spurs.IsGood() || !info.IsGood()) { - cellSpurs.Error("cellSpursGetInfo : CELL_SPURS_CORE_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursGetInfo : CELL_SPURS_CORE_ERROR_NULL_POINTER"); return CELL_SPURS_CORE_ERROR_NULL_POINTER; } @@ -487,17 +488,17 @@ int cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t taskset, mem_ptr_t eventFlag, u32 flagClearMode, u32 flagDirection) { - cellSpurs.Warning("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%u, flagDirection=%u)", spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); + cellSpurs->Warning("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%u, flagDirection=%u)", spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); if ((taskset.GetAddr() % 128 != 0) || (eventFlag.GetAddr() % 128 != 0)) { - cellSpurs.Error("_cellSpursEventFlagInitialize : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("_cellSpursEventFlagInitialize : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if ((!spurs.IsGood() && !taskset.IsGood()) || !eventFlag.IsGood()) { - cellSpurs.Error("_cellSpursEventFlagInitialize : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("_cellSpursEventFlagInitialize : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -508,17 +509,17 @@ int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t eventFlag) { - cellSpurs.Error("cellSpursEventFlagAttachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); + cellSpurs->Error("cellSpursEventFlagAttachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagAttachLv2EventQueue : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagAttachLv2EventQueue : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood()) { - cellSpurs.Error("cellSpursEventFlagAttachLv2EventQueue : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagAttachLv2EventQueue : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -527,17 +528,17 @@ int cellSpursEventFlagAttachLv2EventQueue(mem_ptr_t eventFla int cellSpursEventFlagDetachLv2EventQueue(mem_ptr_t eventFlag) { - cellSpurs.Error("cellSpursEventFlagDetachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); + cellSpurs->Error("cellSpursEventFlagDetachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagDetachLv2EventQueue : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagDetachLv2EventQueue : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood()) { - cellSpurs.Error("cellSpursEventFlagDetachLv2EventQueue : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagDetachLv2EventQueue : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -546,17 +547,17 @@ int cellSpursEventFlagDetachLv2EventQueue(mem_ptr_t eventFla int cellSpursEventFlagWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) { - cellSpurs.Error("cellSpursEventFlagWait(eventFlag_addr=0x%x, mask=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); + cellSpurs->Error("cellSpursEventFlagWait(eventFlag_addr=0x%x, mask=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagWait : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagWait : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood() || !mask.IsGood()) { - cellSpurs.Error("cellSpursEventFlagWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -565,17 +566,17 @@ int cellSpursEventFlagWait(mem_ptr_t eventFlag, mem16_t mask int cellSpursEventFlagClear(mem_ptr_t eventFlag, u16 bits) { - cellSpurs.Error("cellSpursEventFlagClear(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); + cellSpurs->Error("cellSpursEventFlagClear(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagClear : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagClear : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood()) { - cellSpurs.Error("cellSpursEventFlagClear : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagClear : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -584,17 +585,17 @@ int cellSpursEventFlagClear(mem_ptr_t eventFlag, u16 bits) int cellSpursEventFlagSet(mem_ptr_t eventFlag, u16 bits) { - cellSpurs.Error("cellSpursEventFlagSet(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); + cellSpurs->Error("cellSpursEventFlagSet(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagSet : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagSet : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood()) { - cellSpurs.Error("cellSpursEventFlagSet : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagSet : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -603,17 +604,17 @@ int cellSpursEventFlagSet(mem_ptr_t eventFlag, u16 bits) int cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) { - cellSpurs.Error("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); + cellSpurs->Error("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood()) { - cellSpurs.Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -622,17 +623,17 @@ int cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t m int cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem32_t direction) { - cellSpurs.Warning("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=%u)", eventFlag.GetAddr(), direction.GetAddr()); + cellSpurs->Warning("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=%u)", eventFlag.GetAddr(), direction.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagGetDirection : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagGetDirection : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood() || !direction.IsGood()) { - cellSpurs.Error("cellSpursEventFlagGetDirection : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagGetDirection : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -643,17 +644,17 @@ int cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem3 int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem32_t clear_mode) { - cellSpurs.Warning("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=%u)", eventFlag.GetAddr(), clear_mode.GetAddr()); + cellSpurs->Warning("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=%u)", eventFlag.GetAddr(), clear_mode.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagGetClearMode : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagGetClearMode : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood() || !clear_mode.IsGood()) { - cellSpurs.Error("cellSpursEventFlagGetClearMode : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagGetClearMode : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -664,17 +665,17 @@ int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem3 int cellSpursEventFlagGetTasksetAddress(mem_ptr_t eventFlag, mem_ptr_t taskset) { - cellSpurs.Error("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); + cellSpurs->Error("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!eventFlag.IsGood() || !taskset.IsGood()) { - cellSpurs.Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -945,17 +946,17 @@ int cellSpursCreateTasksetWithAttribute() int cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_t taskset, u64 args, mem8_t priority, u32 maxContention) { - cellSpurs.Error("cellSpursCreateTaskset(spurs_addr=0x%x, taskset_addr=0x%x, args=0x%x, priority_addr=0x%x, maxContention=%u)", spurs.GetAddr(), taskset.GetAddr(), args, priority.GetAddr(), maxContention); + cellSpurs->Error("cellSpursCreateTaskset(spurs_addr=0x%x, taskset_addr=0x%x, args=0x%x, priority_addr=0x%x, maxContention=%u)", spurs.GetAddr(), taskset.GetAddr(), args, priority.GetAddr(), maxContention); if ((spurs.GetAddr() % 128 != 0) || (taskset.GetAddr() % 128 != 0)) { - cellSpurs.Error("cellSpursCreateTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursCreateTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!spurs.IsGood() || !taskset.IsGood()) { - cellSpurs.Error("cellSpursCreateTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursCreateTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -967,17 +968,17 @@ int cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_t taskset) { - cellSpurs.Error("cellSpursJoinTaskset(taskset_addr=0x%x)", taskset.GetAddr()); + cellSpurs->Error("cellSpursJoinTaskset(taskset_addr=0x%x)", taskset.GetAddr()); if (taskset.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursJoinTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursJoinTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!taskset.IsGood()) { - cellSpurs.Error("cellSpursJoinTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursJoinTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -986,17 +987,17 @@ int cellSpursJoinTaskset(mem_ptr_t taskset) int cellSpursGetTasksetId(mem_ptr_t taskset, mem32_t workloadId) { - cellSpurs.Error("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr()); + cellSpurs->Error("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr()); if (taskset.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursGetTasksetId : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursGetTasksetId : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!taskset.IsGood() || !workloadId.IsGood()) { - cellSpurs.Error("cellSpursGetTasksetId : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursGetTasksetId : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -1005,17 +1006,17 @@ int cellSpursGetTasksetId(mem_ptr_t taskset, mem32_t workloadI int cellSpursShutdownTaskset(mem_ptr_t taskset) { - cellSpurs.Error("cellSpursShutdownTaskset(taskset_addr=0x%x)", taskset.GetAddr()); + cellSpurs->Error("cellSpursShutdownTaskset(taskset_addr=0x%x)", taskset.GetAddr()); if (taskset.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursShutdownTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursShutdownTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!taskset.IsGood()) { - cellSpurs.Error("cellSpursShutdownTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursShutdownTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -1026,18 +1027,18 @@ int cellSpursCreateTask(mem_ptr_t taskset, mem32_t taskID, mem mem_ptr_t context_addr, u32 context_size, mem_ptr_t lsPattern, mem_ptr_t argument) { - cellSpurs.Error("cellSpursCreateTask(taskset_addr=0x%x, taskID_addr=0x%x, elf_addr_addr=0x%x, context_addr_addr=0x%x, context_size=%u, lsPattern_addr=0x%x, argument_addr=0x%x)", + cellSpurs->Error("cellSpursCreateTask(taskset_addr=0x%x, taskID_addr=0x%x, elf_addr_addr=0x%x, context_addr_addr=0x%x, context_size=%u, lsPattern_addr=0x%x, argument_addr=0x%x)", taskset.GetAddr(), taskID.GetAddr(), elf_addr.GetAddr(), context_addr.GetAddr(), context_size, lsPattern.GetAddr(), argument.GetAddr()); if (taskset.GetAddr() % 128 != 0) { - cellSpurs.Error("cellSpursCreateTask : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("cellSpursCreateTask : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!taskset.IsGood()) { - cellSpurs.Error("cellSpursCreateTask : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("cellSpursCreateTask : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -1046,17 +1047,17 @@ int cellSpursCreateTask(mem_ptr_t taskset, mem32_t taskID, mem int _cellSpursSendSignal(mem_ptr_t taskset, u32 taskID) { - cellSpurs.Error("_cellSpursSendSignal(taskset_addr=0x%x, taskID=%u)", taskset.GetAddr(), taskID); + cellSpurs->Error("_cellSpursSendSignal(taskset_addr=0x%x, taskID=%u)", taskset.GetAddr(), taskID); if (taskset.GetAddr() % 128 != 0) { - cellSpurs.Error("_cellSpursSendSignal : CELL_SPURS_TASK_ERROR_ALIGN"); + cellSpurs->Error("_cellSpursSendSignal : CELL_SPURS_TASK_ERROR_ALIGN"); return CELL_SPURS_TASK_ERROR_ALIGN; } if (!taskset.IsGood()) { - cellSpurs.Error("_cellSpursSendSignal : CELL_SPURS_TASK_ERROR_NULL_POINTER"); + cellSpurs->Error("_cellSpursSendSignal : CELL_SPURS_TASK_ERROR_NULL_POINTER"); return CELL_SPURS_TASK_ERROR_NULL_POINTER; } @@ -1270,132 +1271,133 @@ int cellSpursJobChainGetError() void cellSpurs_init() { // Core - cellSpurs.AddFunc(0xacfc8dbc, cellSpursInitialize); - cellSpurs.AddFunc(0xaa6269a8, cellSpursInitializeWithAttribute); - cellSpurs.AddFunc(0x30aa96c4, cellSpursInitializeWithAttribute2); - cellSpurs.AddFunc(0xca4c4600, cellSpursFinalize); - cellSpurs.AddFunc(0x95180230, _cellSpursAttributeInitialize); - cellSpurs.AddFunc(0x82275c1c, cellSpursAttributeSetMemoryContainerForSpuThread); - cellSpurs.AddFunc(0x07529113, cellSpursAttributeSetNamePrefix); - cellSpurs.AddFunc(0x1051d134, cellSpursAttributeEnableSpuPrintfIfAvailable); - cellSpurs.AddFunc(0xa839a4d9, cellSpursAttributeSetSpuThreadGroupType); - cellSpurs.AddFunc(0x9dcbcb5d, cellSpursAttributeEnableSystemWorkload); - cellSpurs.AddFunc(0x39c173fb, cellSpursGetSpuThreadGroupId); - cellSpurs.AddFunc(0xc56defb5, cellSpursGetNumSpuThread); - cellSpurs.AddFunc(0x6c960f6d, cellSpursGetSpuThreadId); - cellSpurs.AddFunc(0x1f402f8f, cellSpursGetInfo); - cellSpurs.AddFunc(0x84d2f6d5, cellSpursSetMaxContention); - cellSpurs.AddFunc(0x80a29e27, cellSpursSetPriorities); - // cellSpurs.AddFunc(, cellSpursSetPriority); - cellSpurs.AddFunc(0x4de203e2, cellSpursSetPreemptionVictimHints); - cellSpurs.AddFunc(0xb9bc6207, cellSpursAttachLv2EventQueue); - cellSpurs.AddFunc(0x4e66d483, cellSpursDetachLv2EventQueue); - cellSpurs.AddFunc(0x32b94add, cellSpursEnableExceptionEventHandler); - cellSpurs.AddFunc(0x7517724a, cellSpursSetGlobalExceptionEventHandler); - cellSpurs.AddFunc(0x861237f8, cellSpursUnsetGlobalExceptionEventHandler); + cellSpurs->AddFunc(0xacfc8dbc, cellSpursInitialize); + cellSpurs->AddFunc(0xaa6269a8, cellSpursInitializeWithAttribute); + cellSpurs->AddFunc(0x30aa96c4, cellSpursInitializeWithAttribute2); + cellSpurs->AddFunc(0xca4c4600, cellSpursFinalize); + cellSpurs->AddFunc(0x95180230, _cellSpursAttributeInitialize); + cellSpurs->AddFunc(0x82275c1c, cellSpursAttributeSetMemoryContainerForSpuThread); + cellSpurs->AddFunc(0x07529113, cellSpursAttributeSetNamePrefix); + cellSpurs->AddFunc(0x1051d134, cellSpursAttributeEnableSpuPrintfIfAvailable); + cellSpurs->AddFunc(0xa839a4d9, cellSpursAttributeSetSpuThreadGroupType); + cellSpurs->AddFunc(0x9dcbcb5d, cellSpursAttributeEnableSystemWorkload); + cellSpurs->AddFunc(0x39c173fb, cellSpursGetSpuThreadGroupId); + cellSpurs->AddFunc(0xc56defb5, cellSpursGetNumSpuThread); + cellSpurs->AddFunc(0x6c960f6d, cellSpursGetSpuThreadId); + cellSpurs->AddFunc(0x1f402f8f, cellSpursGetInfo); + cellSpurs->AddFunc(0x84d2f6d5, cellSpursSetMaxContention); + cellSpurs->AddFunc(0x80a29e27, cellSpursSetPriorities); + // cellSpurs->AddFunc(, cellSpursSetPriority); + cellSpurs->AddFunc(0x4de203e2, cellSpursSetPreemptionVictimHints); + cellSpurs->AddFunc(0xb9bc6207, cellSpursAttachLv2EventQueue); + cellSpurs->AddFunc(0x4e66d483, cellSpursDetachLv2EventQueue); + cellSpurs->AddFunc(0x32b94add, cellSpursEnableExceptionEventHandler); + cellSpurs->AddFunc(0x7517724a, cellSpursSetGlobalExceptionEventHandler); + cellSpurs->AddFunc(0x861237f8, cellSpursUnsetGlobalExceptionEventHandler); // Event flag - cellSpurs.AddFunc(0x5ef96465, _cellSpursEventFlagInitialize); - cellSpurs.AddFunc(0x87630976, cellSpursEventFlagAttachLv2EventQueue); - cellSpurs.AddFunc(0x22aab31d, cellSpursEventFlagDetachLv2EventQueue); - cellSpurs.AddFunc(0x373523d4, cellSpursEventFlagWait); - cellSpurs.AddFunc(0x4ac7bae4, cellSpursEventFlagClear); - cellSpurs.AddFunc(0xf5507729, cellSpursEventFlagSet); - cellSpurs.AddFunc(0x6d2d9339, cellSpursEventFlagTryWait); - cellSpurs.AddFunc(0x890f9e5a, cellSpursEventFlagGetDirection); - cellSpurs.AddFunc(0x4d1e9373, cellSpursEventFlagGetClearMode); - cellSpurs.AddFunc(0x947efb0b, cellSpursEventFlagGetTasksetAddress); + cellSpurs->AddFunc(0x5ef96465, _cellSpursEventFlagInitialize); + cellSpurs->AddFunc(0x87630976, cellSpursEventFlagAttachLv2EventQueue); + cellSpurs->AddFunc(0x22aab31d, cellSpursEventFlagDetachLv2EventQueue); + cellSpurs->AddFunc(0x373523d4, cellSpursEventFlagWait); + cellSpurs->AddFunc(0x4ac7bae4, cellSpursEventFlagClear); + cellSpurs->AddFunc(0xf5507729, cellSpursEventFlagSet); + cellSpurs->AddFunc(0x6d2d9339, cellSpursEventFlagTryWait); + cellSpurs->AddFunc(0x890f9e5a, cellSpursEventFlagGetDirection); + cellSpurs->AddFunc(0x4d1e9373, cellSpursEventFlagGetClearMode); + cellSpurs->AddFunc(0x947efb0b, cellSpursEventFlagGetTasksetAddress); // Taskset - cellSpurs.AddFunc(0x52cc6c82, cellSpursCreateTaskset); - cellSpurs.AddFunc(0xc10931cb, cellSpursCreateTasksetWithAttribute); - cellSpurs.AddFunc(0x16394a4e, _cellSpursTasksetAttributeInitialize); - cellSpurs.AddFunc(0xc2acdf43, _cellSpursTasksetAttribute2Initialize); - cellSpurs.AddFunc(0x652b70e2, cellSpursTasksetAttributeSetName); - cellSpurs.AddFunc(0x9f72add3, cellSpursJoinTaskset); - cellSpurs.AddFunc(0xe7dd87e1, cellSpursGetTasksetId); - cellSpurs.AddFunc(0xa789e631, cellSpursShutdownTaskset); - cellSpurs.AddFunc(0xbeb600ac, cellSpursCreateTask); - cellSpurs.AddFunc(0x1d46fedf, cellSpursCreateTaskWithAttribute); - cellSpurs.AddFunc(0xb8474eff, cellSpursTaskAttributeInitialize); - cellSpurs.AddFunc(0x8adadf65, _cellSpursTaskAttribute2Initialize); - cellSpurs.AddFunc(0xa121a224, cellSpursTaskAttributeSetExitCodeContainer); - cellSpurs.AddFunc(0x13ae18f3, cellSpursTaskExitCodeGet); - cellSpurs.AddFunc(0x34552fa6, cellSpursTaskExitCodeInitialize); - cellSpurs.AddFunc(0xe717ac73, cellSpursTaskExitCodeTryGet); - cellSpurs.AddFunc(0x1d344406, cellSpursTaskGetLoadableSegmentPattern); - cellSpurs.AddFunc(0x7cb33c2e, cellSpursTaskGetReadOnlyAreaPattern); - cellSpurs.AddFunc(0x9197915f, cellSpursTaskGenerateLsPattern); - cellSpurs.AddFunc(0x9034e538, cellSpursTaskGetContextSaveAreaSize); - cellSpurs.AddFunc(0xe0a6dbe4, _cellSpursSendSignal); - cellSpurs.AddFunc(0x4a6465e3, cellSpursCreateTaskset2); - cellSpurs.AddFunc(0xe14ca62d, cellSpursCreateTask2); - cellSpurs.AddFunc(0xa7a94892, cellSpursJoinTask2); - cellSpurs.AddFunc(0x838fa4f0, cellSpursTryJoinTask2); - cellSpurs.AddFunc(0x1ebcf459, cellSpursDestroyTaskset2); - cellSpurs.AddFunc(0xe4944a1c, cellSpursCreateTask2WithBinInfo); - cellSpurs.AddFunc(0x4cce88a9, cellSpursLookUpTasksetAddress); - cellSpurs.AddFunc(0x58d58fcf, cellSpursTasksetGetSpursAddress); - cellSpurs.AddFunc(0xd2e23fa9, cellSpurssetExceptionEventHandler); - cellSpurs.AddFunc(0x4c75deb8, cellSpursUnsetExceptionEventHandler); - cellSpurs.AddFunc(0x9fcb567b, cellSpursGetTasksetInfo); + cellSpurs->AddFunc(0x52cc6c82, cellSpursCreateTaskset); + cellSpurs->AddFunc(0xc10931cb, cellSpursCreateTasksetWithAttribute); + cellSpurs->AddFunc(0x16394a4e, _cellSpursTasksetAttributeInitialize); + cellSpurs->AddFunc(0xc2acdf43, _cellSpursTasksetAttribute2Initialize); + cellSpurs->AddFunc(0x652b70e2, cellSpursTasksetAttributeSetName); + cellSpurs->AddFunc(0x9f72add3, cellSpursJoinTaskset); + cellSpurs->AddFunc(0xe7dd87e1, cellSpursGetTasksetId); + cellSpurs->AddFunc(0xa789e631, cellSpursShutdownTaskset); + cellSpurs->AddFunc(0xbeb600ac, cellSpursCreateTask); + cellSpurs->AddFunc(0x1d46fedf, cellSpursCreateTaskWithAttribute); + cellSpurs->AddFunc(0xb8474eff, cellSpursTaskAttributeInitialize); + cellSpurs->AddFunc(0x8adadf65, _cellSpursTaskAttribute2Initialize); + cellSpurs->AddFunc(0xa121a224, cellSpursTaskAttributeSetExitCodeContainer); + cellSpurs->AddFunc(0x13ae18f3, cellSpursTaskExitCodeGet); + cellSpurs->AddFunc(0x34552fa6, cellSpursTaskExitCodeInitialize); + cellSpurs->AddFunc(0xe717ac73, cellSpursTaskExitCodeTryGet); + cellSpurs->AddFunc(0x1d344406, cellSpursTaskGetLoadableSegmentPattern); + cellSpurs->AddFunc(0x7cb33c2e, cellSpursTaskGetReadOnlyAreaPattern); + cellSpurs->AddFunc(0x9197915f, cellSpursTaskGenerateLsPattern); + cellSpurs->AddFunc(0x9034e538, cellSpursTaskGetContextSaveAreaSize); + cellSpurs->AddFunc(0xe0a6dbe4, _cellSpursSendSignal); + cellSpurs->AddFunc(0x4a6465e3, cellSpursCreateTaskset2); + cellSpurs->AddFunc(0xe14ca62d, cellSpursCreateTask2); + cellSpurs->AddFunc(0xa7a94892, cellSpursJoinTask2); + cellSpurs->AddFunc(0x838fa4f0, cellSpursTryJoinTask2); + cellSpurs->AddFunc(0x1ebcf459, cellSpursDestroyTaskset2); + cellSpurs->AddFunc(0xe4944a1c, cellSpursCreateTask2WithBinInfo); + cellSpurs->AddFunc(0x4cce88a9, cellSpursLookUpTasksetAddress); + cellSpurs->AddFunc(0x58d58fcf, cellSpursTasksetGetSpursAddress); + cellSpurs->AddFunc(0xd2e23fa9, cellSpurssetExceptionEventHandler); + cellSpurs->AddFunc(0x4c75deb8, cellSpursUnsetExceptionEventHandler); + cellSpurs->AddFunc(0x9fcb567b, cellSpursGetTasksetInfo); // Job Chain - cellSpurs.AddFunc(0x60eb2dec, cellSpursCreateJobChain); - cellSpurs.AddFunc(0x303c19cd, cellSpursCreateJobChainWithAttribute); - cellSpurs.AddFunc(0x738e40e6, cellSpursShutdownJobChain); - cellSpurs.AddFunc(0xa7c066de, cellSpursJoinJobChain); - cellSpurs.AddFunc(0xbfea60fa, cellSpursKickJobChain); - cellSpurs.AddFunc(0xf31731bb, cellSpursRunJobChain); - cellSpurs.AddFunc(0x161da6a7, cellSpursJobChainGetError); - cellSpurs.AddFunc(0x3548f483, _cellSpursJobChainAttributeInitialize); - cellSpurs.AddFunc(0x9fef70c2, cellSpursJobChainAttributeSetName); - cellSpurs.AddFunc(0xbb68d76e, cellSpursJobChainAttributeSetHaltOnError); - cellSpurs.AddFunc(0x2cfccb99, cellSpursJobChainAttributesetJobTypeMemoryCheck); + cellSpurs->AddFunc(0x60eb2dec, cellSpursCreateJobChain); + cellSpurs->AddFunc(0x303c19cd, cellSpursCreateJobChainWithAttribute); + cellSpurs->AddFunc(0x738e40e6, cellSpursShutdownJobChain); + cellSpurs->AddFunc(0xa7c066de, cellSpursJoinJobChain); + cellSpurs->AddFunc(0xbfea60fa, cellSpursKickJobChain); + cellSpurs->AddFunc(0xf31731bb, cellSpursRunJobChain); + cellSpurs->AddFunc(0x161da6a7, cellSpursJobChainGetError); + cellSpurs->AddFunc(0x3548f483, _cellSpursJobChainAttributeInitialize); + cellSpurs->AddFunc(0x9fef70c2, cellSpursJobChainAttributeSetName); + cellSpurs->AddFunc(0xbb68d76e, cellSpursJobChainAttributeSetHaltOnError); + cellSpurs->AddFunc(0x2cfccb99, cellSpursJobChainAttributesetJobTypeMemoryCheck); // Job Guard - cellSpurs.AddFunc(0x68aaeba9, cellSpursJobGuardInitialize); - cellSpurs.AddFunc(0xd5d0b256, cellSpursJobGuardNotify); - cellSpurs.AddFunc(0x00af2519, cellSpursJobGuardReset); + cellSpurs->AddFunc(0x68aaeba9, cellSpursJobGuardInitialize); + cellSpurs->AddFunc(0xd5d0b256, cellSpursJobGuardNotify); + cellSpurs->AddFunc(0x00af2519, cellSpursJobGuardReset); // Queue/LFQueue - cellSpurs.AddFunc(0x011ee38b, _cellSpursLFQueueInitialize); - cellSpurs.AddFunc(0x8a85674d, _cellSpursLFQueuePushBody); - cellSpurs.AddFunc(0x1656d49f, cellSpursLFQueueAttachLv2EventQueue); - cellSpurs.AddFunc(0x73e06f91, cellSpursLFQueueDetachLv2EventQueue); - cellSpurs.AddFunc(0x082bfb09, _cellSpursQueueInitialize); - cellSpurs.AddFunc(0x91066667, cellSpursQueuePopBody); - cellSpurs.AddFunc(0x92cff6ed, cellSpursQueuePushBody); - cellSpurs.AddFunc(0xe5443be7, cellSpursQueueAttachLv2EventQueue); - cellSpurs.AddFunc(0x039d70b7, cellSpursQueueDetachLv2EventQueue); - cellSpurs.AddFunc(0x35dae22b, _cellSpursLFQueuePopBody); - cellSpurs.AddFunc(0xb792ca1a, cellSpursLFQueueGetTasksetAddress); - cellSpurs.AddFunc(0x0c7cb9f7, cellSyncLFQueueGetEntrySize); - cellSpurs.AddFunc(0x167ea63e, cellSyncLFQueueSize); - cellSpurs.AddFunc(0x2af0c515, cellSyncLFQueueClear); - cellSpurs.AddFunc(0x35bbdad2, _cellSyncLFQueueCompletePushPointer2); - cellSpurs.AddFunc(0x46356fe0, _cellSyncLFQueueGetPopPointer2); - cellSpurs.AddFunc(0x48154c9b, cellSyncQueuePeek); - cellSpurs.AddFunc(0x4da349b2, cellSyncQueueSize); - cellSpurs.AddFunc(0x4da6d7e0, cellSyncQueuePop); - cellSpurs.AddFunc(0x4e88c68d, _cellSyncLFQueueCompletePushPointer); - cellSpurs.AddFunc(0x54fc2032, _cellSyncLFQueueAttachLv2EventQueue); - cellSpurs.AddFunc(0x5ae841e5, cellSyncQueuePush); - cellSpurs.AddFunc(0x68af923c, cellSyncQueueTryPeek); - cellSpurs.AddFunc(0x6bb4ef9d,_cellSyncLFQueueGetPushPointer2); - cellSpurs.AddFunc(0x705985cd, cellSyncQueueTryPush); - cellSpurs.AddFunc(0x74c37666, _cellSyncLFQueueGetPopPointer); - cellSpurs.AddFunc(0x7a51deee, _cellSyncLFQueueCompletePopPointer2); - cellSpurs.AddFunc(0x811d148e, _cellSyncLFQueueDetachLv2EventQueue); - cellSpurs.AddFunc(0xa5362e73, cellSyncQueueClear); - cellSpurs.AddFunc(0xa58df87f, cellSyncQueueTryPop); - cellSpurs.AddFunc(0xaa355278, cellSyncLFQueueInitialize); - cellSpurs.AddFunc(0xaff7627a, _cellSyncLFQueueGetSignalAddress); - cellSpurs.AddFunc(0xba5961ca, _cellSyncLFQueuePushBody); - cellSpurs.AddFunc(0xd59aa307, cellSyncLFQueueGetDirection); - cellSpurs.AddFunc(0xe18c273c, cellSyncLFQueueDepth); - cellSpurs.AddFunc(0xe1bc7add, _cellSyncLFQueuePopBody); - cellSpurs.AddFunc(0xe9bf2110, _cellSyncLFQueueGetPushPointer); - cellSpurs.AddFunc(0xfe74e8e7, _cellSyncLFQueueCompletePopPointer); + cellSpurs->AddFunc(0x011ee38b, _cellSpursLFQueueInitialize); + cellSpurs->AddFunc(0x8a85674d, _cellSpursLFQueuePushBody); + cellSpurs->AddFunc(0x1656d49f, cellSpursLFQueueAttachLv2EventQueue); + cellSpurs->AddFunc(0x73e06f91, cellSpursLFQueueDetachLv2EventQueue); + cellSpurs->AddFunc(0x082bfb09, _cellSpursQueueInitialize); + cellSpurs->AddFunc(0x91066667, cellSpursQueuePopBody); + cellSpurs->AddFunc(0x92cff6ed, cellSpursQueuePushBody); + cellSpurs->AddFunc(0xe5443be7, cellSpursQueueAttachLv2EventQueue); + cellSpurs->AddFunc(0x039d70b7, cellSpursQueueDetachLv2EventQueue); + cellSpurs->AddFunc(0x35dae22b, _cellSpursLFQueuePopBody); + cellSpurs->AddFunc(0xb792ca1a, cellSpursLFQueueGetTasksetAddress); + cellSpurs->AddFunc(0x0c7cb9f7, cellSyncLFQueueGetEntrySize); + cellSpurs->AddFunc(0x167ea63e, cellSyncLFQueueSize); + cellSpurs->AddFunc(0x2af0c515, cellSyncLFQueueClear); + cellSpurs->AddFunc(0x35bbdad2, _cellSyncLFQueueCompletePushPointer2); + cellSpurs->AddFunc(0x46356fe0, _cellSyncLFQueueGetPopPointer2); + cellSpurs->AddFunc(0x48154c9b, cellSyncQueuePeek); + cellSpurs->AddFunc(0x4da349b2, cellSyncQueueSize); + cellSpurs->AddFunc(0x4da6d7e0, cellSyncQueuePop); + cellSpurs->AddFunc(0x4e88c68d, _cellSyncLFQueueCompletePushPointer); + cellSpurs->AddFunc(0x54fc2032, _cellSyncLFQueueAttachLv2EventQueue); + cellSpurs->AddFunc(0x5ae841e5, cellSyncQueuePush); + cellSpurs->AddFunc(0x68af923c, cellSyncQueueTryPeek); + cellSpurs->AddFunc(0x6bb4ef9d,_cellSyncLFQueueGetPushPointer2); + cellSpurs->AddFunc(0x705985cd, cellSyncQueueTryPush); + cellSpurs->AddFunc(0x74c37666, _cellSyncLFQueueGetPopPointer); + cellSpurs->AddFunc(0x7a51deee, _cellSyncLFQueueCompletePopPointer2); + cellSpurs->AddFunc(0x811d148e, _cellSyncLFQueueDetachLv2EventQueue); + cellSpurs->AddFunc(0xa5362e73, cellSyncQueueClear); + cellSpurs->AddFunc(0xa58df87f, cellSyncQueueTryPop); + cellSpurs->AddFunc(0xaa355278, cellSyncLFQueueInitialize); + cellSpurs->AddFunc(0xaff7627a, _cellSyncLFQueueGetSignalAddress); + cellSpurs->AddFunc(0xba5961ca, _cellSyncLFQueuePushBody); + cellSpurs->AddFunc(0xd59aa307, cellSyncLFQueueGetDirection); + cellSpurs->AddFunc(0xe18c273c, cellSyncLFQueueDepth); + cellSpurs->AddFunc(0xe1bc7add, _cellSyncLFQueuePopBody); + cellSpurs->AddFunc(0xe9bf2110, _cellSyncLFQueueGetPushPointer); + cellSpurs->AddFunc(0xfe74e8e7, _cellSyncLFQueueCompletePopPointer); } + diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index fff44dd5a4..2181a6b09e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -6,8 +6,9 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" -void cellSync_init(); -Module cellSync("cellSync", cellSync_init); +//void cellSync_init(); +//Module cellSync("cellSync", cellSync_init); +Module *cellSync = nullptr; // Return Codes enum @@ -47,7 +48,7 @@ static_assert(sizeof(CellSyncMutex) == 4, "CellSyncMutex: wrong sizeof"); int cellSyncMutexInitialize(mem_ptr_t mutex) { - cellSync.Log("cellSyncMutexInitialize(mutex=0x%x)", mutex.GetAddr()); + cellSync->Log("cellSyncMutexInitialize(mutex=0x%x)", mutex.GetAddr()); if (!mutex.IsGood()) { @@ -64,7 +65,7 @@ int cellSyncMutexInitialize(mem_ptr_t mutex) int cellSyncMutexLock(mem_ptr_t mutex) { - cellSync.Log("cellSyncMutexLock(mutex=0x%x)", mutex.GetAddr()); + cellSync->Log("cellSyncMutexLock(mutex=0x%x)", mutex.GetAddr()); if (!mutex.IsGood()) { @@ -102,7 +103,7 @@ int cellSyncMutexLock(mem_ptr_t mutex) int cellSyncMutexTryLock(mem_ptr_t mutex) { - cellSync.Log("cellSyncMutexTryLock(mutex=0x%x)", mutex.GetAddr()); + cellSync->Log("cellSyncMutexTryLock(mutex=0x%x)", mutex.GetAddr()); if (!mutex.IsGood()) { @@ -138,7 +139,7 @@ int cellSyncMutexTryLock(mem_ptr_t mutex) int cellSyncMutexUnlock(mem_ptr_t mutex) { - cellSync.Log("cellSyncMutexUnlock(mutex=0x%x)", mutex.GetAddr()); + cellSync->Log("cellSyncMutexUnlock(mutex=0x%x)", mutex.GetAddr()); if (!mutex.IsGood()) { @@ -164,8 +165,8 @@ int cellSyncMutexUnlock(mem_ptr_t mutex) void cellSync_init() { - cellSync.AddFunc(0xa9072dee, cellSyncMutexInitialize); - cellSync.AddFunc(0x1bb675c2, cellSyncMutexLock); - cellSync.AddFunc(0xd06918c4, cellSyncMutexTryLock); - cellSync.AddFunc(0x91f2b7b0, cellSyncMutexUnlock); + cellSync->AddFunc(0xa9072dee, cellSyncMutexInitialize); + cellSync->AddFunc(0x1bb675c2, cellSyncMutexLock); + cellSync->AddFunc(0xd06918c4, cellSyncMutexTryLock); + cellSync->AddFunc(0x91f2b7b0, cellSyncMutexUnlock); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp index 992b9d5c73..498cd67d62 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp @@ -4,10 +4,12 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/ModuleManager.h" #include "Emu/SysCalls/Modules.h" -void cellSysmodule_init(); -Module cellSysmodule("cellSysmodule", cellSysmodule_init); +//void cellSysmodule_init(); +//Module cellSysmodule("cellSysmodule", cellSysmodule_init); +Module *cellSysmodule = nullptr; enum { @@ -144,19 +146,19 @@ const char *getModuleName(int id) { int cellSysmoduleInitialize() { - cellSysmodule.Log("cellSysmoduleInitialize()"); + cellSysmodule->Log("cellSysmoduleInitialize()"); return CELL_OK; } int cellSysmoduleFinalize() { - cellSysmodule.Log("cellSysmoduleFinalize()"); + cellSysmodule->Log("cellSysmoduleFinalize()"); return CELL_OK; } int cellSysmoduleSetMemcontainer(u32 ct_id) { - cellSysmodule.Warning("TODO: cellSysmoduleSetMemcontainer(ct_id=0x%x)", ct_id); + cellSysmodule->Warning("TODO: cellSysmoduleSetMemcontainer(ct_id=0x%x)", ct_id); return CELL_OK; } @@ -164,10 +166,10 @@ int cellSysmoduleLoadModule(u16 id) { if (id == 0xf054) { - cellSysmodule.Error("cellSysmoduleLoadModule: TODO: CELL_SYSMODULE_LIBATRAC3MULTI"); + cellSysmodule->Error("cellSysmoduleLoadModule: TODO: CELL_SYSMODULE_LIBATRAC3MULTI"); } - cellSysmodule.Warning("cellSysmoduleLoadModule(%s)", getModuleName(id)); - Module* m = GetModuleById(id); + cellSysmodule->Warning("cellSysmoduleLoadModule(%s)", getModuleName(id)); + Module* m = Emu.GetModuleManager().GetModuleById(id); if(!m) { @@ -185,8 +187,8 @@ int cellSysmoduleLoadModule(u16 id) int cellSysmoduleUnloadModule(u16 id) { - cellSysmodule.Warning("cellSysmoduleUnloadModule(%s)", getModuleName(id)); - Module* m = GetModuleById(id); + cellSysmodule->Warning("cellSysmoduleUnloadModule(%s)", getModuleName(id)); + Module* m = Emu.GetModuleManager().GetModuleById(id); if(!m) { @@ -204,8 +206,8 @@ int cellSysmoduleUnloadModule(u16 id) int cellSysmoduleIsLoaded(u16 id) { - cellSysmodule.Warning("cellSysmoduleIsLoaded(%s)", getModuleName(id)); - Module* m = GetModuleById(id); + cellSysmodule->Warning("cellSysmoduleIsLoaded(%s)", getModuleName(id)); + Module* m = Emu.GetModuleManager().GetModuleById(id); if(!m) { @@ -217,10 +219,10 @@ int cellSysmoduleIsLoaded(u16 id) void cellSysmodule_init() { - cellSysmodule.AddFunc(0x63ff6ff9, cellSysmoduleInitialize); - cellSysmodule.AddFunc(0x96c07adf, cellSysmoduleFinalize); - cellSysmodule.AddFunc(0xa193143c, cellSysmoduleSetMemcontainer); - cellSysmodule.AddFunc(0x32267a31, cellSysmoduleLoadModule); - cellSysmodule.AddFunc(0x112a5ee9, cellSysmoduleUnloadModule); - cellSysmodule.AddFunc(0x5a59e258, cellSysmoduleIsLoaded); + cellSysmodule->AddFunc(0x63ff6ff9, cellSysmoduleInitialize); + cellSysmodule->AddFunc(0x96c07adf, cellSysmoduleFinalize); + cellSysmodule->AddFunc(0xa193143c, cellSysmoduleSetMemcontainer); + cellSysmodule->AddFunc(0x32267a31, cellSysmoduleLoadModule); + cellSysmodule->AddFunc(0x112a5ee9, cellSysmoduleUnloadModule); + cellSysmodule->AddFunc(0x5a59e258, cellSysmoduleIsLoaded); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 369b1690d1..ca0b7f84f0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -17,12 +17,13 @@ typedef void (*CellMsgDialogCallback)(int buttonType, mem_ptr_t userData); typedef void (*CellHddGameStatCallback)(mem_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set); -void cellSysutil_init(); -Module cellSysutil(0x0015, cellSysutil_init); +//void cellSysutil_init(); +//Module cellSysutil(0x0015, cellSysutil_init); +Module *cellSysutil; int cellSysutilGetSystemParamInt(int id, mem32_t value) { - cellSysutil.Log("cellSysutilGetSystemParamInt(id=0x%x, value_addr=0x%x)", id, value.GetAddr()); + cellSysutil->Log("cellSysutilGetSystemParamInt(id=0x%x, value_addr=0x%x)", id, value.GetAddr()); if(!value.IsGood()) { @@ -32,77 +33,77 @@ int cellSysutilGetSystemParamInt(int id, mem32_t value) switch(id) { case CELL_SYSUTIL_SYSTEMPARAM_ID_LANG: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_LANG"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_LANG"); value = Ini.SysLanguage.GetValue(); break; case CELL_SYSUTIL_SYSTEMPARAM_ID_ENTER_BUTTON_ASSIGN: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_ENTER_BUTTON_ASSIGN"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_ENTER_BUTTON_ASSIGN"); value = CELL_SYSUTIL_ENTER_BUTTON_ASSIGN_CROSS; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_DATE_FORMAT: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_DATE_FORMAT"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_DATE_FORMAT"); value = CELL_SYSUTIL_DATE_FMT_DDMMYYYY; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_TIME_FORMAT: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_TIME_FORMAT"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_TIME_FORMAT"); value = CELL_SYSUTIL_TIME_FMT_CLOCK24; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE"); value = 3; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_SUMMERTIME: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_SUMMERTIME"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_SUMMERTIME"); value = 1; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL"); value = CELL_SYSUTIL_GAME_PARENTAL_OFF; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL0_RESTRICT: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL0_RESTRICT"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL0_RESTRICT"); value = CELL_SYSUTIL_GAME_PARENTAL_LEVEL0_RESTRICT_OFF; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USER_HAS_NP_ACCOUNT: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USER_HAS_NP_ACCOUNT"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USER_HAS_NP_ACCOUNT"); value = 0; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_CAMERA_PLFREQ: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_CAMERA_PLFREQ"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_CAMERA_PLFREQ"); value = CELL_SYSUTIL_CAMERA_PLFREQ_DISABLED; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_RUMBLE: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_RUMBLE"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_RUMBLE"); value = CELL_SYSUTIL_PAD_RUMBLE_OFF; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_KEYBOARD_TYPE: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_KEYBOARD_TYPE"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_KEYBOARD_TYPE"); value = 0; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_JAPANESE_KEYBOARD_ENTRY_METHOD: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_JAPANESE_KEYBOARD_ENTRY_METHOD"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_JAPANESE_KEYBOARD_ENTRY_METHOD"); value = 0; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_CHINESE_KEYBOARD_ENTRY_METHOD: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_CHINESE_KEYBOARD_ENTRY_METHOD"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_CHINESE_KEYBOARD_ENTRY_METHOD"); value = 0; break; case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_AUTOOFF: - cellSysutil.Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_AUTOOFF"); + cellSysutil->Warning("cellSysutilGetSystemParamInt: CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_AUTOOFF"); value = 0; break; @@ -115,7 +116,7 @@ int cellSysutilGetSystemParamInt(int id, mem32_t value) int cellSysutilGetSystemParamString(s32 id, mem_list_ptr_t buf, u32 bufsize) { - cellSysutil.Log("cellSysutilGetSystemParamString(id=%d, buf_addr=0x%x, bufsize=%d)", id, buf.GetAddr(), bufsize); + cellSysutil->Log("cellSysutilGetSystemParamString(id=%d, buf_addr=0x%x, bufsize=%d)", id, buf.GetAddr(), bufsize); if (!buf.IsGood()) return CELL_EFAULT; @@ -125,12 +126,12 @@ int cellSysutilGetSystemParamString(s32 id, mem_list_ptr_t buf, u32 bufsize) switch(id) { case CELL_SYSUTIL_SYSTEMPARAM_ID_NICKNAME: - cellSysutil.Warning("cellSysutilGetSystemParamString: CELL_SYSUTIL_SYSTEMPARAM_ID_NICKNAME"); + cellSysutil->Warning("cellSysutilGetSystemParamString: CELL_SYSUTIL_SYSTEMPARAM_ID_NICKNAME"); memcpy(buf, "Unknown", 8); //for example break; case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USERNAME: - cellSysutil.Warning("cellSysutilGetSystemParamString: CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USERNAME"); + cellSysutil->Warning("cellSysutilGetSystemParamString: CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USERNAME"); memcpy(buf, "Unknown", 8); break; @@ -143,7 +144,7 @@ int cellSysutilGetSystemParamString(s32 id, mem_list_ptr_t buf, u32 bufsize) int cellVideoOutGetState(u32 videoOut, u32 deviceIndex, u32 state_addr) { - cellSysutil.Log("cellVideoOutGetState(videoOut=0x%x, deviceIndex=0x%x, state_addr=0x%x)", videoOut, deviceIndex, state_addr); + cellSysutil->Log("cellVideoOutGetState(videoOut=0x%x, deviceIndex=0x%x, state_addr=0x%x)", videoOut, deviceIndex, state_addr); if(deviceIndex) return CELL_VIDEO_OUT_ERROR_DEVICE_NOT_FOUND; @@ -181,7 +182,7 @@ int cellVideoOutGetState(u32 videoOut, u32 deviceIndex, u32 state_addr) int cellVideoOutGetResolution(u32 resolutionId, mem_ptr_t resolution) { - cellSysutil.Log("cellVideoOutGetResolution(resolutionId=%d, resolution_addr=0x%x)", + cellSysutil->Log("cellVideoOutGetResolution(resolutionId=%d, resolution_addr=0x%x)", resolutionId, resolution.GetAddr()); if (!resolution.IsGood()) @@ -199,7 +200,7 @@ int cellVideoOutGetResolution(u32 resolutionId, mem_ptr_tWarning("cellVideoOutConfigure(videoOut=%d, config_addr=0x%x, option_addr=0x%x, waitForEvent=0x%x)", videoOut, config_addr, option_addr, waitForEvent); if(!Memory.IsGoodAddr(config_addr, sizeof(CellVideoOutConfiguration))) @@ -240,7 +241,7 @@ int cellVideoOutConfigure(u32 videoOut, u32 config_addr, u32 option_addr, u32 wa int cellVideoOutGetConfiguration(u32 videoOut, u32 config_addr, u32 option_addr) { - cellSysutil.Warning("cellVideoOutGetConfiguration(videoOut=%d, config_addr=0x%x, option_addr=0x%x)", + cellSysutil->Warning("cellVideoOutGetConfiguration(videoOut=%d, config_addr=0x%x, option_addr=0x%x)", videoOut, config_addr, option_addr); if(!Memory.IsGoodAddr(config_addr, sizeof(CellVideoOutConfiguration))) return CELL_EFAULT; @@ -271,7 +272,7 @@ int cellVideoOutGetConfiguration(u32 videoOut, u32 config_addr, u32 option_addr) int cellVideoOutGetDeviceInfo(u32 videoOut, u32 deviceIndex, mem_ptr_t info) { - cellSysutil.Warning("cellVideoOutGetDeviceInfo(videoOut=%u, deviceIndex=%u, info_addr=0x%x)", + cellSysutil->Warning("cellVideoOutGetDeviceInfo(videoOut=%u, deviceIndex=%u, info_addr=0x%x)", videoOut, deviceIndex, info.GetAddr()); if(deviceIndex) return CELL_VIDEO_OUT_ERROR_DEVICE_NOT_FOUND; @@ -303,7 +304,7 @@ int cellVideoOutGetDeviceInfo(u32 videoOut, u32 deviceIndex, mem_ptr_tWarning("cellVideoOutGetNumberOfDevice(videoOut=%d)", videoOut); switch(videoOut) { @@ -316,7 +317,7 @@ int cellVideoOutGetNumberOfDevice(u32 videoOut) int cellVideoOutGetResolutionAvailability(u32 videoOut, u32 resolutionId, u32 aspect, u32 option) { - cellSysutil.Warning("cellVideoOutGetResolutionAvailability(videoOut=%d, resolutionId=0x%x, option_addr=0x%x, aspect=0x%x, option=0x%x)", + cellSysutil->Warning("cellVideoOutGetResolutionAvailability(videoOut=%d, resolutionId=0x%x, option_addr=0x%x, aspect=0x%x, option=0x%x)", videoOut, resolutionId, aspect, option); if(!ResolutionIdToNum(resolutionId)) @@ -338,7 +339,7 @@ extern std::atomic g_FsAioReadCur; int cellSysutilCheckCallback() { - cellSysutil.Log("cellSysutilCheckCallback()"); + cellSysutil->Log("cellSysutilCheckCallback()"); Emu.GetCallbackManager().m_exit_callback.Check(); @@ -359,22 +360,22 @@ int cellSysutilCheckCallback() int cellSysutilRegisterCallback(int slot, u64 func_addr, u64 userdata) { - cellSysutil.Warning("cellSysutilRegisterCallback(slot=%d, func_addr=0x%llx, userdata=0x%llx)", slot, func_addr, userdata); + cellSysutil->Warning("cellSysutilRegisterCallback(slot=%d, func_addr=0x%llx, userdata=0x%llx)", slot, func_addr, userdata); Emu.GetCallbackManager().m_exit_callback.Register(slot, func_addr, userdata); - wxGetApp().SendDbgCommand(DID_REGISTRED_CALLBACK); + SendDbgCommand(DID_REGISTRED_CALLBACK); return CELL_OK; } int cellSysutilUnregisterCallback(int slot) { - cellSysutil.Warning("cellSysutilUnregisterCallback(slot=%d)", slot); + cellSysutil->Warning("cellSysutilUnregisterCallback(slot=%d)", slot); Emu.GetCallbackManager().m_exit_callback.Unregister(slot); - wxGetApp().SendDbgCommand(DID_UNREGISTRED_CALLBACK); + SendDbgCommand(DID_UNREGISTRED_CALLBACK); return CELL_OK; } @@ -385,31 +386,31 @@ int cellMsgDialogOpen2(u32 type, char* msgString, mem_func_ptr_t callback, mem_ptr_t userData, u32 extParam) { - cellSysutil.Warning("cellMsgDialogOpenErrorCode(errorCode=0x%x, callback_addr=0x%x, userData=%d, extParam=%d)", + cellSysutil->Warning("cellMsgDialogOpenErrorCode(errorCode=0x%x, callback_addr=0x%x, userData=%d, extParam=%d)", errorCode, callback.GetAddr(), userData, extParam); std::string errorMessage; @@ -508,10 +509,10 @@ int cellMsgDialogOpenErrorCode(u32 errorCode, mem_func_ptr_tWarning("cellAudioOutGetSoundAvailability(audioOut=%d, type=%d, fs=0x%x, option=%d)", audioOut, type, fs, option); option = 0; @@ -573,7 +574,7 @@ int cellAudioOutGetSoundAvailability(u32 audioOut, u32 type, u32 fs, u32 option) int cellAudioOutGetSoundAvailability2(u32 audioOut, u32 type, u32 fs, u32 ch, u32 option) { - cellSysutil.Warning("cellAudioOutGetSoundAvailability2(audioOut=%d, type=%d, fs=0x%x, ch=%d, option=%d)", + cellSysutil->Warning("cellAudioOutGetSoundAvailability2(audioOut=%d, type=%d, fs=0x%x, ch=%d, option=%d)", audioOut, type, fs, ch, option); option = 0; @@ -623,7 +624,7 @@ int cellAudioOutGetSoundAvailability2(u32 audioOut, u32 type, u32 fs, u32 ch, u3 int cellAudioOutGetState(u32 audioOut, u32 deviceIndex, u32 state_addr) { - cellSysutil.Warning("cellAudioOutGetState(audioOut=0x%x,deviceIndex=0x%x,state_addr=0x%x)",audioOut,deviceIndex,state_addr); + cellSysutil->Warning("cellAudioOutGetState(audioOut=0x%x,deviceIndex=0x%x,state_addr=0x%x)",audioOut,deviceIndex,state_addr); CellAudioOutState state; memset(&state, 0, sizeof(CellAudioOutState)); @@ -655,7 +656,7 @@ int cellAudioOutGetState(u32 audioOut, u32 deviceIndex, u32 state_addr) int cellAudioOutConfigure(u32 audioOut, mem_ptr_t config, mem_ptr_t option, u32 waitForEvent) { - cellSysutil.Warning("cellAudioOutConfigure(audioOut=%d, config_addr=0x%x, option_addr=0x%x, (!)waitForEvent=%d)", + cellSysutil->Warning("cellAudioOutConfigure(audioOut=%d, config_addr=0x%x, option_addr=0x%x, (!)waitForEvent=%d)", audioOut, config.GetAddr(), option.GetAddr(), waitForEvent); if (!config.IsGood()) @@ -689,7 +690,7 @@ int cellAudioOutConfigure(u32 audioOut, mem_ptr_t con int cellAudioOutGetConfiguration(u32 audioOut, u32 config_addr, u32 option_addr) { - cellSysutil.Warning("cellAudioOutGetConfiguration(audioOut=%d, config_addr=0x%x, option_addr=0x%x)", + cellSysutil->Warning("cellAudioOutGetConfiguration(audioOut=%d, config_addr=0x%x, option_addr=0x%x)", audioOut, config_addr, option_addr); if(!Memory.IsGoodAddr(config_addr, sizeof(CellAudioOutConfiguration))) return CELL_EFAULT; @@ -719,7 +720,7 @@ int cellAudioOutGetConfiguration(u32 audioOut, u32 config_addr, u32 option_addr) int cellAudioOutGetNumberOfDevice(u32 audioOut) { - cellSysutil.Warning("cellAudioOutGetNumberOfDevice(videoOut=%d)",audioOut); + cellSysutil->Warning("cellAudioOutGetNumberOfDevice(videoOut=%d)",audioOut); switch(audioOut) { @@ -732,7 +733,7 @@ int cellAudioOutGetNumberOfDevice(u32 audioOut) int cellAudioOutGetDeviceInfo(u32 audioOut, u32 deviceIndex, mem_ptr_t info) { - cellSysutil.Error("Unimplemented function: cellAudioOutGetDeviceInfo(audioOut=%u, deviceIndex=%u, info_addr=0x%x)", + cellSysutil->Error("Unimplemented function: cellAudioOutGetDeviceInfo(audioOut=%u, deviceIndex=%u, info_addr=0x%x)", audioOut, deviceIndex, info.GetAddr()); if(deviceIndex) return CELL_AUDIO_OUT_ERROR_DEVICE_NOT_FOUND; @@ -751,7 +752,7 @@ int cellAudioOutGetDeviceInfo(u32 audioOut, u32 deviceIndex, mem_ptr_tWarning("cellAudioOutSetCopyControl(audioOut=%d,control=%d)",audioOut,control); switch(audioOut) { @@ -785,28 +786,28 @@ typedef struct{ } CellSysCacheParam; -class WxDirDeleteTraverser : public wxDirTraverser -{ -public: - virtual wxDirTraverseResult OnFile(const wxString& filename) - { - if (!wxRemoveFile(filename)){ - cellSysutil.Error("Couldn't delete File: %s", fmt::ToUTF8(filename).c_str()); - } - return wxDIR_CONTINUE; - } - virtual wxDirTraverseResult OnDir(const wxString& dirname) - { - wxDir dir(dirname); - dir.Traverse(*this); - if (!wxRmDir(dirname)){ - //this get triggered a few times while clearing folders - //but if this gets reimplented we should probably warn - //if directories can't be removed - } - return wxDIR_CONTINUE; - } -}; +//class WxDirDeleteTraverser : public wxDirTraverser +//{ +//public: +// virtual wxDirTraverseResult OnFile(const wxString& filename) +// { +// if (!wxRemoveFile(filename)){ +// cellSysutil->Error("Couldn't delete File: %s", fmt::ToUTF8(filename).c_str()); +// } +// return wxDIR_CONTINUE; +// } +// virtual wxDirTraverseResult OnDir(const wxString& dirname) +// { +// wxDir dir(dirname); +// dir.Traverse(*this); +// if (!wxRmDir(dirname)){ +// //this get triggered a few times while clearing folders +// //but if this gets reimplented we should probably warn +// //if directories can't be removed +// } +// return wxDIR_CONTINUE; +// } +//}; int cellSysCacheClear(void) { @@ -816,21 +817,23 @@ int cellSysCacheClear(void) std::string localPath; Emu.GetVFS().GetDevice(std::string("/dev_hdd1/cache/"), localPath); - //TODO: replace wxWidgetsSpecific filesystem stuff - if (wxDirExists(fmt::FromUTF8(localPath))){ - WxDirDeleteTraverser deleter; - wxString f = wxFindFirstFile(fmt::FromUTF8(localPath+"\\*"),wxDIR); - while (!f.empty()) - { - wxDir dir(f); - dir.Traverse(deleter); - f = wxFindNextFile(); - } - return CELL_SYSCACHE_RET_OK_CLEARED; - } - else{ - return CELL_SYSCACHE_ERROR_ACCESS_ERROR; - } + //TODO: implement + //if (rDirExists(localPath)){ + // WxDirDeleteTraverser deleter; + // wxString f = wxFindFirstFile(fmt::FromUTF8(localPath+"\\*"),wxDIR); + // while (!f.empty()) + // { + // wxDir dir(f); + // dir.Traverse(deleter); + // f = wxFindNextFile(); + // } + // return CELL_SYSCACHE_RET_OK_CLEARED; + //} + //else{ + // return CELL_SYSCACHE_ERROR_ACCESS_ERROR; + //} + + return CELL_SYSCACHE_RET_OK_CLEARED; } int cellSysCacheMount(mem_ptr_t param) @@ -847,7 +850,7 @@ int cellSysCacheMount(mem_ptr_t param) int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_t funcStat, u32 container) { - cellSysutil.Warning("cellHddGameCheck(version=%d, dirName_addr=0x%xx, errDialog=%d, funcStat_addr=0x%x, container=%d)", + cellSysutil->Warning("cellHddGameCheck(version=%d, dirName_addr=0x%xx, errDialog=%d, funcStat_addr=0x%x, container=%d)", version, dirName_addr, errDialog, funcStat, container); if (!Memory.IsGoodAddr(dirName_addr) || !funcStat.IsGood()) @@ -918,7 +921,7 @@ int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_ int cellSysutilGetBgmPlaybackStatus(mem_ptr_t status) { - cellSysutil.Warning("cellSysutilGetBgmPlaybackStatus(status=0x%x)", status.GetAddr()); + cellSysutil->Warning("cellSysutilGetBgmPlaybackStatus(status=0x%x)", status.GetAddr()); // non-essential, so always assume background music is stopped/disabled status->playbackState = CELL_BGMPLAYBACK_STATUS_STOP; @@ -939,74 +942,74 @@ int cellWebBrowserEstimate2(mem8_ptr_t _config, mem32_ptr_t memSize) void cellSysutil_init() { - cellSysutil.AddFunc(0x40e895d3, cellSysutilGetSystemParamInt); - cellSysutil.AddFunc(0x938013a0, cellSysutilGetSystemParamString); + cellSysutil->AddFunc(0x40e895d3, cellSysutilGetSystemParamInt); + cellSysutil->AddFunc(0x938013a0, cellSysutilGetSystemParamString); - cellSysutil.AddFunc(0x887572d5, cellVideoOutGetState); - cellSysutil.AddFunc(0xe558748d, cellVideoOutGetResolution); - cellSysutil.AddFunc(0x0bae8772, cellVideoOutConfigure); - cellSysutil.AddFunc(0x15b0b0cd, cellVideoOutGetConfiguration); - cellSysutil.AddFunc(0x1e930eef, cellVideoOutGetDeviceInfo); - cellSysutil.AddFunc(0x75bbb672, cellVideoOutGetNumberOfDevice); - cellSysutil.AddFunc(0xa322db75, cellVideoOutGetResolutionAvailability); + cellSysutil->AddFunc(0x887572d5, cellVideoOutGetState); + cellSysutil->AddFunc(0xe558748d, cellVideoOutGetResolution); + cellSysutil->AddFunc(0x0bae8772, cellVideoOutConfigure); + cellSysutil->AddFunc(0x15b0b0cd, cellVideoOutGetConfiguration); + cellSysutil->AddFunc(0x1e930eef, cellVideoOutGetDeviceInfo); + cellSysutil->AddFunc(0x75bbb672, cellVideoOutGetNumberOfDevice); + cellSysutil->AddFunc(0xa322db75, cellVideoOutGetResolutionAvailability); - cellSysutil.AddFunc(0x189a74da, cellSysutilCheckCallback); - cellSysutil.AddFunc(0x9d98afa0, cellSysutilRegisterCallback); - cellSysutil.AddFunc(0x02ff3c1b, cellSysutilUnregisterCallback); + cellSysutil->AddFunc(0x189a74da, cellSysutilCheckCallback); + cellSysutil->AddFunc(0x9d98afa0, cellSysutilRegisterCallback); + cellSysutil->AddFunc(0x02ff3c1b, cellSysutilUnregisterCallback); - cellSysutil.AddFunc(0x7603d3db, cellMsgDialogOpen2); - cellSysutil.AddFunc(0x3e22cb4b, cellMsgDialogOpenErrorCode); + cellSysutil->AddFunc(0x7603d3db, cellMsgDialogOpen2); + cellSysutil->AddFunc(0x3e22cb4b, cellMsgDialogOpenErrorCode); - cellSysutil.AddFunc(0xf4e3caa0, cellAudioOutGetState); - cellSysutil.AddFunc(0x4692ab35, cellAudioOutConfigure); - cellSysutil.AddFunc(0xc01b4e7c, cellAudioOutGetSoundAvailability); - cellSysutil.AddFunc(0x2beac488, cellAudioOutGetSoundAvailability2); - cellSysutil.AddFunc(0x7663e368, cellAudioOutGetDeviceInfo); - cellSysutil.AddFunc(0xe5e2b09d, cellAudioOutGetNumberOfDevice); - cellSysutil.AddFunc(0xed5d96af, cellAudioOutGetConfiguration); - cellSysutil.AddFunc(0xc96e89e9, cellAudioOutSetCopyControl); + cellSysutil->AddFunc(0xf4e3caa0, cellAudioOutGetState); + cellSysutil->AddFunc(0x4692ab35, cellAudioOutConfigure); + cellSysutil->AddFunc(0xc01b4e7c, cellAudioOutGetSoundAvailability); + cellSysutil->AddFunc(0x2beac488, cellAudioOutGetSoundAvailability2); + cellSysutil->AddFunc(0x7663e368, cellAudioOutGetDeviceInfo); + cellSysutil->AddFunc(0xe5e2b09d, cellAudioOutGetNumberOfDevice); + cellSysutil->AddFunc(0xed5d96af, cellAudioOutGetConfiguration); + cellSysutil->AddFunc(0xc96e89e9, cellAudioOutSetCopyControl); - cellSysutil.AddFunc(0xa11552f6, cellSysutilGetBgmPlaybackStatus); + cellSysutil->AddFunc(0xa11552f6, cellSysutilGetBgmPlaybackStatus); - cellSysutil.AddFunc(0x1e7bff94, cellSysCacheMount); - cellSysutil.AddFunc(0x744c1544, cellSysCacheClear); + cellSysutil->AddFunc(0x1e7bff94, cellSysCacheMount); + cellSysutil->AddFunc(0x744c1544, cellSysCacheClear); - cellSysutil.AddFunc(0x9117df20, cellHddGameCheck); - //cellSysutil.AddFunc(0x4bdec82a, cellHddGameCheck2); - //cellSysutil.AddFunc(0xf82e2ef7, cellHddGameGetSizeKB); - //cellSysutil.AddFunc(0x9ca9ffa7, cellHddGameSetSystemVer); - //cellSysutil.AddFunc(0xafd605b3, cellHddGameExitBroken); + cellSysutil->AddFunc(0x9117df20, cellHddGameCheck); + //cellSysutil->AddFunc(0x4bdec82a, cellHddGameCheck2); + //cellSysutil->AddFunc(0xf82e2ef7, cellHddGameGetSizeKB); + //cellSysutil->AddFunc(0x9ca9ffa7, cellHddGameSetSystemVer); + //cellSysutil->AddFunc(0xafd605b3, cellHddGameExitBroken); //cellSysutil_SaveData - //cellSysutil.AddFunc(0x04c06fc2, cellSaveDataGetListItem); - //cellSysutil.AddFunc(0x273d116a, cellSaveDataUserListExport); - //cellSysutil.AddFunc(0x27cb8bc2, cellSaveDataListDelete); - //cellSysutil.AddFunc(0x39d6ee43, cellSaveDataUserListImport); - //cellSysutil.AddFunc(0x46a2d878, cellSaveDataFixedExport); - //cellSysutil.AddFunc(0x491cc554, cellSaveDataListExport); - //cellSysutil.AddFunc(0x52541151, cellSaveDataFixedImport); - //cellSysutil.AddFunc(0x529231b0, cellSaveDataUserFixedImport); - //cellSysutil.AddFunc(0x6b4e0de6, cellSaveDataListImport); - //cellSysutil.AddFunc(0x7048a9ba, cellSaveDataUserListDelete); - //cellSysutil.AddFunc(0x95ae2cde, cellSaveDataUserFixedExport); - //cellSysutil.AddFunc(0xf6482036, cellSaveDataUserGetListItem); - cellSysutil.AddFunc(0x2de0d663, cellSaveDataListSave2); - cellSysutil.AddFunc(0x1dfbfdd6, cellSaveDataListLoad2); - cellSysutil.AddFunc(0x2aae9ef5, cellSaveDataFixedSave2); - cellSysutil.AddFunc(0x2a8eada2, cellSaveDataFixedLoad2); - cellSysutil.AddFunc(0x8b7ed64b, cellSaveDataAutoSave2); - cellSysutil.AddFunc(0xfbd5c856, cellSaveDataAutoLoad2); - //cellSysutil.AddFunc(0x4dd03a4e, cellSaveDataListAutoSave); - //cellSysutil.AddFunc(0x21425307, cellSaveDataListAutoLoad); - //cellSysutil.AddFunc(0xedadd797, cellSaveDataDelete2); - //cellSysutil.AddFunc(0x0f03cfb0, cellSaveDataUserListSave); - //cellSysutil.AddFunc(0x39dd8425, cellSaveDataUserListLoad); - //cellSysutil.AddFunc(0x40b34847, cellSaveDataUserFixedSave); - //cellSysutil.AddFunc(0x6e7264ed, cellSaveDataUserFixedLoad); - //cellSysutil.AddFunc(0x52aac4fa, cellSaveDataUserAutoSave); - //cellSysutil.AddFunc(0xcdc6aefd, cellSaveDataUserAutoLoad); - //cellSysutil.AddFunc(0x0e091c36, cellSaveDataUserListAutoSave); - //cellSysutil.AddFunc(0xe7fa820b, cellSaveDataEnableOverlay); + //cellSysutil->AddFunc(0x04c06fc2, cellSaveDataGetListItem); + //cellSysutil->AddFunc(0x273d116a, cellSaveDataUserListExport); + //cellSysutil->AddFunc(0x27cb8bc2, cellSaveDataListDelete); + //cellSysutil->AddFunc(0x39d6ee43, cellSaveDataUserListImport); + //cellSysutil->AddFunc(0x46a2d878, cellSaveDataFixedExport); + //cellSysutil->AddFunc(0x491cc554, cellSaveDataListExport); + //cellSysutil->AddFunc(0x52541151, cellSaveDataFixedImport); + //cellSysutil->AddFunc(0x529231b0, cellSaveDataUserFixedImport); + //cellSysutil->AddFunc(0x6b4e0de6, cellSaveDataListImport); + //cellSysutil->AddFunc(0x7048a9ba, cellSaveDataUserListDelete); + //cellSysutil->AddFunc(0x95ae2cde, cellSaveDataUserFixedExport); + //cellSysutil->AddFunc(0xf6482036, cellSaveDataUserGetListItem); + cellSysutil->AddFunc(0x2de0d663, cellSaveDataListSave2); + cellSysutil->AddFunc(0x1dfbfdd6, cellSaveDataListLoad2); + cellSysutil->AddFunc(0x2aae9ef5, cellSaveDataFixedSave2); + cellSysutil->AddFunc(0x2a8eada2, cellSaveDataFixedLoad2); + cellSysutil->AddFunc(0x8b7ed64b, cellSaveDataAutoSave2); + cellSysutil->AddFunc(0xfbd5c856, cellSaveDataAutoLoad2); + //cellSysutil->AddFunc(0x4dd03a4e, cellSaveDataListAutoSave); + //cellSysutil->AddFunc(0x21425307, cellSaveDataListAutoLoad); + //cellSysutil->AddFunc(0xedadd797, cellSaveDataDelete2); + //cellSysutil->AddFunc(0x0f03cfb0, cellSaveDataUserListSave); + //cellSysutil->AddFunc(0x39dd8425, cellSaveDataUserListLoad); + //cellSysutil->AddFunc(0x40b34847, cellSaveDataUserFixedSave); + //cellSysutil->AddFunc(0x6e7264ed, cellSaveDataUserFixedLoad); + //cellSysutil->AddFunc(0x52aac4fa, cellSaveDataUserAutoSave); + //cellSysutil->AddFunc(0xcdc6aefd, cellSaveDataUserAutoLoad); + //cellSysutil->AddFunc(0x0e091c36, cellSaveDataUserListAutoSave); + //cellSysutil->AddFunc(0xe7fa820b, cellSaveDataEnableOverlay); - cellSysutil.AddFunc(0x6d087930, cellWebBrowserEstimate2); + cellSysutil->AddFunc(0x6d087930, cellWebBrowserEstimate2); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp index 7a45a5b5d5..79552479e6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp @@ -6,8 +6,9 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" -void cellSysutilAp_init(); -Module cellSysutilAp(0x0039, cellSysutilAp_init); +//void cellSysutilAp_init(); +//Module cellSysutilAp(0x0039, cellSysutilAp_init); +extern Module *cellSysutilAp = nullptr; // Return Codes enum @@ -24,7 +25,7 @@ enum s32 cellSysutilApGetRequiredMemSize() { - cellSysutilAp.Log("cellSysutilApGetRequiredMemSize()"); + cellSysutilAp->Log("cellSysutilApGetRequiredMemSize()"); return 1024*1024; // Return 1 MB as required size } @@ -42,7 +43,7 @@ int cellSysutilApOff() void cellSysutilAp_init() { - cellSysutilAp.AddFunc(0x9e67e0dd, cellSysutilApGetRequiredMemSize); - cellSysutilAp.AddFunc(0x3343824c, cellSysutilApOn); - cellSysutilAp.AddFunc(0x90c2bb19, cellSysutilApOff); + cellSysutilAp->AddFunc(0x9e67e0dd, cellSysutilApGetRequiredMemSize); + cellSysutilAp->AddFunc(0x3343824c, cellSysutilApOn); + cellSysutilAp->AddFunc(0x90c2bb19, cellSysutilApOff); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index 29acae0df9..af747c1f6c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -12,7 +12,7 @@ #include "cellSysutil_SaveData.h" #include "Loader/PSF.h" -extern Module cellSysutil; +extern Module *cellSysutil; // Auxiliary Classes class sortSaveDataEntry @@ -294,7 +294,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m mem_func_ptr_t funcList, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil.Warning("cellSaveDataListSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataListSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcList.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); if (!setList.IsGood() || !setBuf.IsGood() || !funcList.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) @@ -379,7 +379,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m mem_func_ptr_t funcList, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil.Warning("cellSaveDataListLoad2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataListLoad2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcList.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); if (!setList.IsGood() || !setBuf.IsGood() || !funcList.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) @@ -464,7 +464,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, mem_func_ptr_t funcFixed, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil.Warning("cellSaveDataFixedSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcFixed_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataFixedSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcFixed_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); if (!setList.IsGood() || !setBuf.IsGood() || !funcFixed.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) @@ -536,7 +536,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, mem_func_ptr_t funcFixed, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil.Warning("cellSaveDataFixedLoad2(version=%d, setList_addr=0x%x, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataFixedLoad2(version=%d, setList_addr=0x%x, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); if (!setList.IsGood() || !setBuf.IsGood() || !funcFixed.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) @@ -608,7 +608,7 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil.Warning("cellSaveDataAutoSave2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataAutoSave2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); if (!setBuf.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) @@ -664,7 +664,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil.Warning("cellSaveDataAutoLoad2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataAutoLoad2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); if (!setBuf.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index bbe3bcbc6b..5f7a08c10d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -8,12 +8,13 @@ #include "cellUserInfo.h" -void cellUserInfo_init(); -Module cellUserInfo(0x0032, cellUserInfo_init); +//void cellUserInfo_init(); +//Module cellUserInfo(0x0032, cellUserInfo_init); +extern Module *cellUserInfo = nullptr; int cellUserInfoGetStat(u32 id, mem_ptr_t stat) { - cellUserInfo.Warning("cellUserInfoGetStat(id=%d, stat_addr=0x%x)", id, stat.GetAddr()); + cellUserInfo->Warning("cellUserInfoGetStat(id=%d, stat_addr=0x%x)", id, stat.GetAddr()); if (!stat.IsGood()) return CELL_USERINFO_ERROR_PARAM; @@ -61,7 +62,7 @@ int cellUserInfoEnableOverlay() int cellUserInfoGetList(mem32_t listNum, mem_ptr_t listBuf, mem32_t currentUserId) { - cellUserInfo.Warning("cellUserInfoGetList(listNum_addr=0x%x, listBuf_addr=0x%x, currentUserId_addr=0x%x)", + cellUserInfo->Warning("cellUserInfoGetList(listNum_addr=0x%x, listBuf_addr=0x%x, currentUserId_addr=0x%x)", listNum.GetAddr(), listBuf.GetAddr(), currentUserId.GetAddr()); // If only listNum is NULL, an error will be returned @@ -80,9 +81,9 @@ int cellUserInfoGetList(mem32_t listNum, mem_ptr_t listBuf void cellUserInfo_init() { - cellUserInfo.AddFunc(0x2b761140, cellUserInfoGetStat); - cellUserInfo.AddFunc(0x3097cc1c, cellUserInfoSelectUser_ListType); - cellUserInfo.AddFunc(0x55123a25, cellUserInfoSelectUser_SetList); - cellUserInfo.AddFunc(0xb3516536, cellUserInfoEnableOverlay); - cellUserInfo.AddFunc(0xc55e338b, cellUserInfoGetList); + cellUserInfo->AddFunc(0x2b761140, cellUserInfoGetStat); + cellUserInfo->AddFunc(0x3097cc1c, cellUserInfoSelectUser_ListType); + cellUserInfo->AddFunc(0x55123a25, cellUserInfoSelectUser_SetList); + cellUserInfo->AddFunc(0xb3516536, cellUserInfoEnableOverlay); + cellUserInfo->AddFunc(0xc55e338b, cellUserInfoGetList); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 6396e8a8cd..eda5a0511d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -18,8 +18,9 @@ extern "C" #include "cellVdec.h" -void cellVdec_init(); -Module cellVdec(0x0005, cellVdec_init); +//void cellVdec_init(); +//Module cellVdec(0x0005, cellVdec_init); +Module *cellVdec = nullptr; int vdecRead(void* opaque, u8* buf, int buf_size) { @@ -107,9 +108,9 @@ u32 vdecQueryAttr(CellVdecCodecType type, u32 profile, u32 spec_addr /* may be 0 { switch (type) // TODO: check profile levels { - case CELL_VDEC_CODEC_TYPE_AVC: cellVdec.Warning("cellVdecQueryAttr: AVC (profile=%d)", profile); break; - case CELL_VDEC_CODEC_TYPE_MPEG2: cellVdec.Error("TODO: MPEG2 not supported"); break; - case CELL_VDEC_CODEC_TYPE_DIVX: cellVdec.Error("TODO: DIVX not supported"); break; + case CELL_VDEC_CODEC_TYPE_AVC: cellVdec->Warning("cellVdecQueryAttr: AVC (profile=%d)", profile); break; + case CELL_VDEC_CODEC_TYPE_MPEG2: cellVdec->Error("TODO: MPEG2 not supported"); break; + case CELL_VDEC_CODEC_TYPE_DIVX: cellVdec->Error("TODO: DIVX not supported"); break; default: return CELL_VDEC_ERROR_ARG; } @@ -127,7 +128,7 @@ u32 vdecOpen(VideoDecoder* data) vdec.vdecCb = &Emu.GetCPU().AddThread(CPU_THREAD_PPU); - u32 vdec_id = cellVdec.GetNewId(data); + u32 vdec_id = cellVdec->GetNewId(data); vdec.id = vdec_id; @@ -423,7 +424,7 @@ u32 vdecOpen(VideoDecoder* data) int cellVdecQueryAttr(const mem_ptr_t type, mem_ptr_t attr) { - cellVdec.Warning("cellVdecQueryAttr(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); + cellVdec->Warning("cellVdecQueryAttr(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); if (!type.IsGood() || !attr.IsGood()) { @@ -435,7 +436,7 @@ int cellVdecQueryAttr(const mem_ptr_t type, mem_ptr_t type, mem_ptr_t attr) { - cellVdec.Warning("cellVdecQueryAttrEx(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); + cellVdec->Warning("cellVdecQueryAttrEx(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); if (!type.IsGood() || !attr.IsGood()) { @@ -447,7 +448,7 @@ int cellVdecQueryAttrEx(const mem_ptr_t type, mem_ptr_t type, const mem_ptr_t res, const mem_ptr_t cb, mem32_t handle) { - cellVdec.Warning("cellVdecOpen(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", + cellVdec->Warning("cellVdecOpen(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.GetAddr(), res.GetAddr(), cb.GetAddr(), handle.GetAddr()); if (!type.IsGood() || !res.IsGood() || !cb.IsGood() || !handle.IsGood()) @@ -467,7 +468,7 @@ int cellVdecOpen(const mem_ptr_t type, const mem_ptr_t type, const mem_ptr_t res, const mem_ptr_t cb, mem32_t handle) { - cellVdec.Warning("cellVdecOpenEx(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", + cellVdec->Warning("cellVdecOpenEx(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.GetAddr(), res.GetAddr(), cb.GetAddr(), handle.GetAddr()); if (!type.IsGood() || !res.IsGood() || !cb.IsGood() || !handle.IsGood()) @@ -487,7 +488,7 @@ int cellVdecOpenEx(const mem_ptr_t type, const mem_ptr_tWarning("cellVdecClose(handle=%d)", handle); VideoDecoder* vdec; if (!Emu.GetIdManager().GetIDData(handle, vdec)) @@ -514,7 +515,7 @@ int cellVdecClose(u32 handle) int cellVdecStartSeq(u32 handle) { - cellVdec.Log("cellVdecStartSeq(handle=%d)", handle); + cellVdec->Log("cellVdecStartSeq(handle=%d)", handle); VideoDecoder* vdec; if (!Emu.GetIdManager().GetIDData(handle, vdec)) @@ -528,7 +529,7 @@ int cellVdecStartSeq(u32 handle) int cellVdecEndSeq(u32 handle) { - cellVdec.Warning("cellVdecEndSeq(handle=%d)", handle); + cellVdec->Warning("cellVdecEndSeq(handle=%d)", handle); VideoDecoder* vdec; if (!Emu.GetIdManager().GetIDData(handle, vdec)) @@ -564,7 +565,7 @@ int cellVdecEndSeq(u32 handle) int cellVdecDecodeAu(u32 handle, CellVdecDecodeMode mode, const mem_ptr_t auInfo) { - cellVdec.Log("cellVdecDecodeAu(handle=%d, mode=0x%x, auInfo_addr=0x%x)", handle, mode, auInfo.GetAddr()); + cellVdec->Log("cellVdecDecodeAu(handle=%d, mode=0x%x, auInfo_addr=0x%x)", handle, mode, auInfo.GetAddr()); VideoDecoder* vdec; if (!Emu.GetIdManager().GetIDData(handle, vdec)) @@ -588,7 +589,7 @@ int cellVdecDecodeAu(u32 handle, CellVdecDecodeMode mode, const mem_ptr_t format, u32 out_addr) { - cellVdec.Log("cellVdecGetPicture(handle=%d, format_addr=0x%x, out_addr=0x%x)", handle, format.GetAddr(), out_addr); + cellVdec->Log("cellVdecGetPicture(handle=%d, format_addr=0x%x, out_addr=0x%x)", handle, format.GetAddr(), out_addr); VideoDecoder* vdec; if (!Emu.GetIdManager().GetIDData(handle, vdec)) @@ -617,13 +618,13 @@ int cellVdecGetPicture(u32 handle, const mem_ptr_t format, u3 if (format->formatType != CELL_VDEC_PICFMT_YUV420_PLANAR) { - cellVdec.Error("cellVdecGetPicture: TODO: unknown formatType(%d)", (u32)format->formatType); + cellVdec->Error("cellVdecGetPicture: TODO: unknown formatType(%d)", (u32)format->formatType); return CELL_OK; } if (format->colorMatrixType != CELL_VDEC_COLOR_MATRIX_TYPE_BT709) { - cellVdec.Error("cellVdecGetPicture: TODO: unknown colorMatrixType(%d)", (u32)format->colorMatrixType); + cellVdec->Error("cellVdecGetPicture: TODO: unknown colorMatrixType(%d)", (u32)format->colorMatrixType); return CELL_OK; } @@ -640,13 +641,13 @@ int cellVdecGetPicture(u32 handle, const mem_ptr_t format, u3 int err = av_image_copy_to_buffer(buf, buf_size, frame.data, frame.linesize, vdec->ctx->pix_fmt, frame.width, frame.height, 1); if (err < 0) { - cellVdec.Error("cellVdecGetPicture: av_image_copy_to_buffer failed(%d)", err); + cellVdec->Error("cellVdecGetPicture: av_image_copy_to_buffer failed(%d)", err); Emu.Pause(); } if (!Memory.CopyFromReal(out_addr, buf, buf_size)) { - cellVdec.Error("cellVdecGetPicture: data copying failed"); + cellVdec->Error("cellVdecGetPicture: data copying failed"); Emu.Pause(); } @@ -660,7 +661,7 @@ int cellVdecGetPicture(u32 handle, const mem_ptr_t format, u3 int cellVdecGetPicItem(u32 handle, mem32_t picItem_ptr) { - cellVdec.Log("cellVdecGetPicItem(handle=%d, picItem_ptr_addr=0x%x)", handle, picItem_ptr.GetAddr()); + cellVdec->Log("cellVdecGetPicItem(handle=%d, picItem_ptr_addr=0x%x)", handle, picItem_ptr.GetAddr()); VideoDecoder* vdec; if (!Emu.GetIdManager().GetIDData(handle, vdec)) @@ -775,7 +776,7 @@ int cellVdecGetPicItem(u32 handle, mem32_t picItem_ptr) int cellVdecSetFrameRate(u32 handle, CellVdecFrameRate frc) { - cellVdec.Log("cellVdecSetFrameRate(handle=%d, frc=0x%x)", handle, frc); + cellVdec->Log("cellVdecSetFrameRate(handle=%d, frc=0x%x)", handle, frc); VideoDecoder* vdec; if (!Emu.GetIdManager().GetIDData(handle, vdec)) @@ -793,17 +794,17 @@ int cellVdecSetFrameRate(u32 handle, CellVdecFrameRate frc) void cellVdec_init() { - cellVdec.AddFunc(0xff6f6ebe, cellVdecQueryAttr); - cellVdec.AddFunc(0xc982a84a, cellVdecQueryAttrEx); - cellVdec.AddFunc(0xb6bbcd5d, cellVdecOpen); - cellVdec.AddFunc(0x0053e2d8, cellVdecOpenEx); - cellVdec.AddFunc(0x16698e83, cellVdecClose); - cellVdec.AddFunc(0xc757c2aa, cellVdecStartSeq); - cellVdec.AddFunc(0x824433f0, cellVdecEndSeq); - cellVdec.AddFunc(0x2bf4ddd2, cellVdecDecodeAu); - cellVdec.AddFunc(0x807c861a, cellVdecGetPicture); - cellVdec.AddFunc(0x17c702b9, cellVdecGetPicItem); - cellVdec.AddFunc(0xe13ef6fc, cellVdecSetFrameRate); + cellVdec->AddFunc(0xff6f6ebe, cellVdecQueryAttr); + cellVdec->AddFunc(0xc982a84a, cellVdecQueryAttrEx); + cellVdec->AddFunc(0xb6bbcd5d, cellVdecOpen); + cellVdec->AddFunc(0x0053e2d8, cellVdecOpenEx); + cellVdec->AddFunc(0x16698e83, cellVdecClose); + cellVdec->AddFunc(0xc757c2aa, cellVdecStartSeq); + cellVdec->AddFunc(0x824433f0, cellVdecEndSeq); + cellVdec->AddFunc(0x2bf4ddd2, cellVdecDecodeAu); + cellVdec->AddFunc(0x807c861a, cellVdecGetPicture); + cellVdec->AddFunc(0x17c702b9, cellVdecGetPicItem); + cellVdec->AddFunc(0xe13ef6fc, cellVdecSetFrameRate); av_register_all(); avcodec_register_all(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index a8139c8856..ce91fbf3e4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -13,12 +13,13 @@ extern "C" #include "cellVpost.h" -void cellVpost_init(); -Module cellVpost(0x0008, cellVpost_init); +//void cellVpost_init(); +//Module cellVpost(0x0008, cellVpost_init); +Module *cellVpost = nullptr; int cellVpostQueryAttr(const mem_ptr_t cfgParam, mem_ptr_t attr) { - cellVpost.Warning("cellVpostQueryAttr(cfgParam_addr=0x%x, attr_addr=0x%x)", cfgParam.GetAddr(), attr.GetAddr()); + cellVpost->Warning("cellVpostQueryAttr(cfgParam_addr=0x%x, attr_addr=0x%x)", cfgParam.GetAddr(), attr.GetAddr()); if (!cfgParam.IsGood()) return CELL_VPOST_ERROR_Q_ARG_CFG_NULL; if (!attr.IsGood()) return CELL_VPOST_ERROR_Q_ARG_ATTR_NULL; @@ -35,7 +36,7 @@ int cellVpostQueryAttr(const mem_ptr_t cfgParam, mem_ptr_tGetNewId(data); ConLog.Write("*** Vpost instance created (to_rgba=%d): id = %d", data->to_rgba, id); @@ -44,7 +45,7 @@ u32 vpostOpen(VpostInstance* data) int cellVpostOpen(const mem_ptr_t cfgParam, const mem_ptr_t resource, mem32_t handle) { - cellVpost.Warning("cellVpostOpen(cfgParam_addr=0x%x, resource_addr=0x%x, handle_addr=0x%x)", + cellVpost->Warning("cellVpostOpen(cfgParam_addr=0x%x, resource_addr=0x%x, handle_addr=0x%x)", cfgParam.GetAddr(), resource.GetAddr(), handle.GetAddr()); if (!cfgParam.IsGood()) return CELL_VPOST_ERROR_O_ARG_CFG_NULL; @@ -58,7 +59,7 @@ int cellVpostOpen(const mem_ptr_t cfgParam, const mem_ptr_t cfgParam, const mem_ptr_t resource, mem32_t handle) { - cellVpost.Warning("cellVpostOpenEx(cfgParam_addr=0x%x, resource_addr=0x%x, handle_addr=0x%x)", + cellVpost->Warning("cellVpostOpenEx(cfgParam_addr=0x%x, resource_addr=0x%x, handle_addr=0x%x)", cfgParam.GetAddr(), resource.GetAddr(), handle.GetAddr()); if (!cfgParam.IsGood()) return CELL_VPOST_ERROR_O_ARG_CFG_NULL; @@ -72,7 +73,7 @@ int cellVpostOpenEx(const mem_ptr_t cfgParam, const mem_ptr_t int cellVpostClose(u32 handle) { - cellVpost.Warning("cellVpostClose(handle=0x%x)", handle); + cellVpost->Warning("cellVpostClose(handle=0x%x)", handle); VpostInstance* vpost; if (!Emu.GetIdManager().GetIDData(handle, vpost)) @@ -87,7 +88,7 @@ int cellVpostClose(u32 handle) int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_t ctrlParam, u32 outPicBuff_addr, mem_ptr_t picInfo) { - cellVpost.Log("cellVpostExec(handle=0x%x, inPicBuff_addr=0x%x, ctrlParam_addr=0x%x, outPicBuff_addr=0x%x, picInfo_addr=0x%x)", + cellVpost->Log("cellVpostExec(handle=0x%x, inPicBuff_addr=0x%x, ctrlParam_addr=0x%x, outPicBuff_addr=0x%x, picInfo_addr=0x%x)", handle, inPicBuff_addr, ctrlParam.GetAddr(), outPicBuff_addr, picInfo.GetAddr()); VpostInstance* vpost; @@ -170,19 +171,19 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_tError("cellVpostExec: data copying failed(pY)"); Emu.Pause(); } if (!Memory.CopyToReal(pU, inPicBuff_addr + w*h, w*h/4)) { - cellVpost.Error("cellVpostExec: data copying failed(pU)"); + cellVpost->Error("cellVpostExec: data copying failed(pU)"); Emu.Pause(); } if (!Memory.CopyToReal(pV, inPicBuff_addr + w*h + w*h/4, w*h/4)) { - cellVpost.Error("cellVpostExec: data copying failed(pV)"); + cellVpost->Error("cellVpostExec: data copying failed(pV)"); Emu.Pause(); } @@ -207,7 +208,7 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_tError("cellVpostExec: data copying failed(result)"); Emu.Pause(); } @@ -224,9 +225,9 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_tAddFunc(0x95e788c3, cellVpostQueryAttr); + cellVpost->AddFunc(0xcd33f3e2, cellVpostOpen); + cellVpost->AddFunc(0x40524325, cellVpostOpenEx); + cellVpost->AddFunc(0x10ef39f6, cellVpostClose); + cellVpost->AddFunc(0xabb8cc3d, cellVpostExec); } diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 211211cf05..fbff7eb9ee 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -8,8 +8,9 @@ #include "Emu/Audio/cellAudio.h" #include "libmixer.h" -void libmixer_init(); -Module libmixer("libmixer", libmixer_init); +//void libmixer_init(); +//Module libmixer("libmixer", libmixer_init); +Module *libmixer = nullptr; CellSurMixerConfig surMixer; @@ -41,12 +42,12 @@ int cellAANAddData(u32 aan_handle, u32 aan_port, u32 offset, u32 addr, u32 sampl if (aan_handle == 0x11111111 && samples == 256 && type && offset == 0) { - libmixer.Log("cellAANAddData(handle=0x%x, port=0x%x, offset=0x%x, addr=0x%x, samples=0x%x)", + libmixer->Log("cellAANAddData(handle=0x%x, port=0x%x, offset=0x%x, addr=0x%x, samples=0x%x)", aan_handle, aan_port, offset, addr, samples); } else { - libmixer.Error("cellAANAddData(handle=0x%x, port=0x%x, offset=0x%x, addr=0x%x, samples=0x%x)", + libmixer->Error("cellAANAddData(handle=0x%x, port=0x%x, offset=0x%x, addr=0x%x, samples=0x%x)", aan_handle, aan_port, offset, addr, samples); Emu.Pause(); return CELL_OK; @@ -108,88 +109,88 @@ int cellAANAddData(u32 aan_handle, u32 aan_port, u32 offset, u32 addr, u32 sampl int cellAANConnect(u32 receive, u32 receivePortNo, u32 source, u32 sourcePortNo) { - libmixer.Error("cellAANConnect(receive=0x%x, receivePortNo=0x%x, source=0x%x, sourcePortNo=0x%x)", + libmixer->Error("cellAANConnect(receive=0x%x, receivePortNo=0x%x, source=0x%x, sourcePortNo=0x%x)", receive, receivePortNo, source, sourcePortNo); return CELL_OK; } int cellAANDisconnect(u32 receive, u32 receivePortNo, u32 source, u32 sourcePortNo) { - libmixer.Error("cellAANDisconnect(receive=0x%x, receivePortNo=0x%x, source=0x%x, sourcePortNo=0x%x)", + libmixer->Error("cellAANDisconnect(receive=0x%x, receivePortNo=0x%x, source=0x%x, sourcePortNo=0x%x)", receive, receivePortNo, source, sourcePortNo); return CELL_OK; } int cellSSPlayerCreate(mem32_t handle, mem_ptr_t config) { - libmixer.Error("cellSSPlayerCreate(handle_addr=0x%x, config_addr=0x%x)", + libmixer->Error("cellSSPlayerCreate(handle_addr=0x%x, config_addr=0x%x)", handle.GetAddr(), config.GetAddr()); return CELL_OK; } int cellSSPlayerRemove(u32 handle) { - libmixer.Error("cellSSPlayerRemove(handle=%d)", handle); + libmixer->Error("cellSSPlayerRemove(handle=%d)", handle); return CELL_OK; } int cellSSPlayerSetWave(u32 handle, mem_ptr_t waveInfo, mem_ptr_t commonInfo) { - libmixer.Error("cellSSPlayerSetWave(handle=%d, waveInfo_addr=0x%x, commonInfo_addr=0x%x)", + libmixer->Error("cellSSPlayerSetWave(handle=%d, waveInfo_addr=0x%x, commonInfo_addr=0x%x)", handle, waveInfo.GetAddr(), commonInfo.GetAddr()); return CELL_OK; } int cellSSPlayerPlay(u32 handle, mem_ptr_t info) { - libmixer.Error("cellSSPlayerPlay(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); + libmixer->Error("cellSSPlayerPlay(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); return CELL_OK; } int cellSSPlayerStop(u32 handle, u32 mode) { - libmixer.Error("cellSSPlayerStop(handle=%d, mode=0x%x)", handle, mode); + libmixer->Error("cellSSPlayerStop(handle=%d, mode=0x%x)", handle, mode); return CELL_OK; } int cellSSPlayerSetParam(u32 handle, mem_ptr_t info) { - libmixer.Error("cellSSPlayerSetParam(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); + libmixer->Error("cellSSPlayerSetParam(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); return CELL_OK; } s32 cellSSPlayerGetState(u32 handle) { - libmixer.Error("cellSSPlayerGetState(handle=%d) -> OFF", handle); + libmixer->Error("cellSSPlayerGetState(handle=%d) -> OFF", handle); return CELL_SSPLAYER_STATE_OFF; } int cellSurMixerCreate(const mem_ptr_t config) { - libmixer.Warning("cellSurMixerCreate(config_addr=0x%x)", config.GetAddr()); + libmixer->Warning("cellSurMixerCreate(config_addr=0x%x)", config.GetAddr()); surMixer = *config; - libmixer.Warning("*** surMixer created (ch1=%d, ch2=%d, ch6=%d, ch8=%d)", + libmixer->Warning("*** surMixer created (ch1=%d, ch2=%d, ch6=%d, ch8=%d)", (u32)surMixer.chStrips1, (u32)surMixer.chStrips2, (u32)surMixer.chStrips6, (u32)surMixer.chStrips8); return CELL_OK; } int cellSurMixerGetAANHandle(mem32_t handle) { - libmixer.Warning("cellSurMixerGetAANHandle(handle_addr=0x%x) -> 0x11111111", handle.GetAddr()); + libmixer->Warning("cellSurMixerGetAANHandle(handle_addr=0x%x) -> 0x11111111", handle.GetAddr()); handle = 0x11111111; return CELL_OK; } int cellSurMixerChStripGetAANPortNo(mem32_t port, u32 type, u32 index) { - libmixer.Warning("cellSurMixerChStripGetAANPortNo(port_addr=0x%x, type=0x%x, index=0x%x) -> 0x%x", port.GetAddr(), type, index, (type << 16) | index); + libmixer->Warning("cellSurMixerChStripGetAANPortNo(port_addr=0x%x, type=0x%x, index=0x%x) -> 0x%x", port.GetAddr(), type, index, (type << 16) | index); port = (type << 16) | index; return CELL_OK; } int cellSurMixerSetNotifyCallback(u32 func, u32 arg) { - libmixer.Warning("cellSurMixerSetNotifyCallback(func_addr=0x%x, arg=0x%x) (surMixerCb=0x%x)", func, arg, surMixerCb); + libmixer->Warning("cellSurMixerSetNotifyCallback(func_addr=0x%x, arg=0x%x) (surMixerCb=0x%x)", func, arg, surMixerCb); surMixerCb = func; surMixerCbArg = arg; return CELL_OK; @@ -197,7 +198,7 @@ int cellSurMixerSetNotifyCallback(u32 func, u32 arg) int cellSurMixerRemoveNotifyCallback(u32 func) { - libmixer.Warning("cellSurMixerSetNotifyCallback(func_addr=0x%x) (surMixerCb=0x%x)", func, surMixerCb); + libmixer->Warning("cellSurMixerSetNotifyCallback(func_addr=0x%x) (surMixerCb=0x%x)", func, surMixerCb); surMixerCb = 0; surMixerCbArg = 0; return CELL_OK; @@ -205,7 +206,7 @@ int cellSurMixerRemoveNotifyCallback(u32 func) int cellSurMixerStart() { - libmixer.Warning("cellSurMixerStart()"); + libmixer->Warning("cellSurMixerStart()"); AudioPortConfig& port = m_config.m_ports[SUR_PORT]; @@ -219,7 +220,7 @@ int cellSurMixerStart() port.attr = 0; port.level = 1.0f; - libmixer.Warning("*** audio port opened(default)"); + libmixer->Warning("*** audio port opened(default)"); port.m_is_audio_port_opened = true; port.tag = 0; @@ -282,13 +283,13 @@ int cellSurMixerStart() int cellSurMixerSetParameter(u32 param, float value) { - libmixer.Error("cellSurMixerSetParameter(param=0x%x, value=%f)", param, value); + libmixer->Error("cellSurMixerSetParameter(param=0x%x, value=%f)", param, value); return CELL_OK; } int cellSurMixerFinalize() { - libmixer.Warning("cellSurMixerFinalize()"); + libmixer->Warning("cellSurMixerFinalize()"); AudioPortConfig& port = m_config.m_ports[SUR_PORT]; @@ -306,11 +307,11 @@ int cellSurMixerSurBusAddData(u32 busNo, u32 offset, u32 addr, u32 samples) { if (busNo < 8 && samples == 256 && offset == 0) { - libmixer.Log("cellSurMixerSurBusAddData(busNo=%d, offset=0x%x, addr=0x%x, samples=%d)", busNo, offset, addr, samples); + libmixer->Log("cellSurMixerSurBusAddData(busNo=%d, offset=0x%x, addr=0x%x, samples=%d)", busNo, offset, addr, samples); } else { - libmixer.Error("cellSurMixerSurBusAddData(busNo=%d, offset=0x%x, addr=0x%x, samples=%d)", busNo, offset, addr, samples); + libmixer->Error("cellSurMixerSurBusAddData(busNo=%d, offset=0x%x, addr=0x%x, samples=%d)", busNo, offset, addr, samples); Emu.Pause(); return CELL_OK; } @@ -329,38 +330,38 @@ int cellSurMixerSurBusAddData(u32 busNo, u32 offset, u32 addr, u32 samples) int cellSurMixerChStripSetParameter(u32 type, u32 index, mem_ptr_t param) { - libmixer.Error("cellSurMixerChStripSetParameter(type=%d, index=%d, param_addr=0x%x)", type, index, param.GetAddr()); + libmixer->Error("cellSurMixerChStripSetParameter(type=%d, index=%d, param_addr=0x%x)", type, index, param.GetAddr()); return CELL_OK; } int cellSurMixerPause(u32 type) { - libmixer.Error("cellSurMixerPause(type=%d)", type); + libmixer->Error("cellSurMixerPause(type=%d)", type); return CELL_OK; } int cellSurMixerGetCurrentBlockTag(mem64_t tag) { - libmixer.Error("cellSurMixerGetCurrentBlockTag(tag_addr=0x%x)", tag.GetAddr()); + libmixer->Error("cellSurMixerGetCurrentBlockTag(tag_addr=0x%x)", tag.GetAddr()); return CELL_OK; } int cellSurMixerGetTimestamp(u64 tag, mem64_t stamp) { - libmixer.Error("cellSurMixerGetTimestamp(tag=0x%llx, stamp_addr=0x%x)", tag, stamp.GetAddr()); + libmixer->Error("cellSurMixerGetTimestamp(tag=0x%llx, stamp_addr=0x%x)", tag, stamp.GetAddr()); return CELL_OK; } void cellSurMixerBeep(u32 arg) { - libmixer.Error("cellSurMixerBeep(arg=%d)", arg); + libmixer->Error("cellSurMixerBeep(arg=%d)", arg); return; } void cellSurMixerUtilGetLevelFromDB(float dB) { // not hooked, probably unnecessary - libmixer.Error("cellSurMixerUtilGetLevelFromDB(dB=%f)", dB); + libmixer->Error("cellSurMixerUtilGetLevelFromDB(dB=%f)", dB); declCPU(); (float&)CPU.FPR[0] = 0.0f; } @@ -368,7 +369,7 @@ void cellSurMixerUtilGetLevelFromDB(float dB) void cellSurMixerUtilGetLevelFromDBIndex(int index) { // not hooked, probably unnecessary - libmixer.Error("cellSurMixerUtilGetLevelFromDBIndex(index=%d)", index); + libmixer->Error("cellSurMixerUtilGetLevelFromDBIndex(index=%d)", index); declCPU(); (float&)CPU.FPR[0] = 0.0f; } @@ -376,7 +377,7 @@ void cellSurMixerUtilGetLevelFromDBIndex(int index) void cellSurMixerUtilNoteToRatio(u8 refNote, u8 note) { // not hooked, probably unnecessary - libmixer.Error("cellSurMixerUtilNoteToRatio(refNote=%d, note=%d)", refNote, note); + libmixer->Error("cellSurMixerUtilNoteToRatio(refNote=%d, note=%d)", refNote, note); declCPU(); (float&)CPU.FPR[0] = 0.0f; } diff --git a/rpcs3/Emu/SysCalls/Modules/libsnd3.h b/rpcs3/Emu/SysCalls/Modules/libsnd3.h index ade551315b..7e97a34839 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsnd3.h +++ b/rpcs3/Emu/SysCalls/Modules/libsnd3.h @@ -1,4 +1,3 @@ -#if 0 #pragma once //libsnd3 Error Codes @@ -53,4 +52,3 @@ struct CellSnd3RequestQueueCtx void *rearQueue; be_t rearQueueSize; }; -#endif diff --git a/rpcs3/Emu/SysCalls/Modules/libsynth2.h b/rpcs3/Emu/SysCalls/Modules/libsynth2.h index d7985c0742..8b1c428855 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsynth2.h +++ b/rpcs3/Emu/SysCalls/Modules/libsynth2.h @@ -1,4 +1,3 @@ -#if 0 #pragma once enum @@ -17,5 +16,4 @@ struct CellSoundSynth2EffectAttr be_t depth_R; be_t delay; be_t feedback; -}; -#endif +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index a144896681..eef93a06e0 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -9,71 +9,74 @@ #include "Crypto/unedat.h" #include "sceNp.h" -void sceNp_init(); -Module sceNp(0x0016, sceNp_init); +//void sceNp_init(); +//Module sceNp(0x0016, sceNp_init); +Module *sceNp = nullptr; int sceNpInit(u32 mem_size, u32 mem_addr) { - sceNp.Log("sceNpInit(mem_size=0x%x, mem_addr=0x%x)", mem_size, mem_addr); + sceNp->Log("sceNpInit(mem_size=0x%x, mem_addr=0x%x)", mem_size, mem_addr); return CELL_OK; } int sceNpTerm() { - sceNp.Log("sceNpTerm"); + sceNp->Log("sceNpTerm"); return CELL_OK; } int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) { - sceNp.Warning("sceNpDrmIsAvailable(k_licensee_addr=0x%x, drm_path_addr=0x%x)", k_licensee_addr, drm_path_addr); + sceNp->Warning("sceNpDrmIsAvailable(k_licensee_addr=0x%x, drm_path_addr=0x%x)", k_licensee_addr, drm_path_addr); - wxString drm_path = fmt::FromUTF8(Memory.ReadString(drm_path_addr)); - wxString k_licensee_str; + std::string drm_path = Memory.ReadString(drm_path_addr); + std::string k_licensee_str; u8 k_licensee[0x10]; for(int i = 0; i < 0x10; i++) { k_licensee[i] = Memory.Read8(k_licensee_addr + i); - k_licensee_str += wxString::Format("%02x", k_licensee[i]); + k_licensee_str += fmt::Format("%02x", k_licensee[i]); } - sceNp.Warning("sceNpDrmIsAvailable: Found DRM license file at %s", fmt::ToUTF8(drm_path).c_str()); - sceNp.Warning("sceNpDrmIsAvailable: Using k_licensee 0x%s", fmt::ToUTF8(k_licensee_str).c_str()); + sceNp->Warning("sceNpDrmIsAvailable: Found DRM license file at %s", drm_path.c_str()); + sceNp->Warning("sceNpDrmIsAvailable: Using k_licensee 0x%s", k_licensee_str.c_str()); // Set the necessary file paths. - wxString drm_file_name = drm_path.AfterLast('/'); - wxString titleID = drm_path.AfterFirst('/').AfterFirst('/').AfterFirst('/').BeforeFirst('/'); + std::string drm_file_name = fmt::AfterLast(drm_path,'/'); - wxString enc_drm_path = wxGetCwd() + drm_path; - wxString dec_drm_path = wxGetCwd() + "/dev_hdd1/" + titleID + "/" + drm_file_name; + //make more explicit what this actually does (currently everything after the third slash and before the fourth slash) + std::string titleID = fmt::BeforeFirst(fmt::AfterFirst(fmt::AfterFirst(fmt::AfterFirst(drm_path,'/'),'/'),'/'),'/'); - wxString rap_dir_path = wxGetCwd() + "/dev_usb000/"; - wxString rap_file_path = rap_dir_path; + std::string enc_drm_path = rGetCwd() + drm_path; + std::string dec_drm_path = rGetCwd() + "/dev_hdd1/" + titleID + "/" + drm_file_name; + + std::string rap_dir_path = rGetCwd() + "/dev_usb000/"; + std::string rap_file_path = rap_dir_path; // Search dev_usb000 for a compatible RAP file. - vfsDir *raps_dir = new vfsDir(fmt::ToUTF8(rap_dir_path)); + vfsDir *raps_dir = new vfsDir(rap_dir_path); if (!raps_dir->IsOpened()) - sceNp.Warning("sceNpDrmIsAvailable: Can't find RAP file for DRM!"); + sceNp->Warning("sceNpDrmIsAvailable: Can't find RAP file for DRM!"); else { const std::vector &entries = raps_dir->GetEntries(); for (auto &entry: entries) { - if (entry.name.find(fmt::ToUTF8(titleID)) != std::string::npos ) + if (entry.name.find(titleID) != std::string::npos ) { - rap_file_path += fmt::FromUTF8(entry.name); + rap_file_path += entry.name; break; } } } // Create a new directory under dev_hdd1/titleID to hold the decrypted data. - wxString tmp_dir = wxGetCwd() + "/dev_hdd1/" + titleID; - if (!wxDir::Exists(tmp_dir)) - wxMkdir(wxGetCwd() + "/dev_hdd1/" + titleID); + std::string tmp_dir = rGetCwd() + "/dev_hdd1/" + titleID; + if (!rDir::Exists(tmp_dir)) + rMkdir(rGetCwd() + "/dev_hdd1/" + titleID); // Decrypt this EDAT using the supplied k_licensee and matching RAP file. - DecryptEDAT(fmt::ToUTF8(enc_drm_path), fmt::ToUTF8(dec_drm_path), 8, fmt::ToUTF8(rap_file_path), k_licensee, false); + DecryptEDAT(enc_drm_path, dec_drm_path, 8, rap_file_path, k_licensee, false); return CELL_OK; } @@ -110,7 +113,7 @@ int sceNpDrmGetTimelimit(u32 drm_path_addr, mem64_t time_remain_usec) int sceNpManagerGetStatus(mem32_t status) { - sceNp.Log("sceNpManagerGetStatus(status_addr=0x%x)", status.GetAddr()); + sceNp->Log("sceNpManagerGetStatus(status_addr=0x%x)", status.GetAddr()); // TODO: Check if sceNpInit() was called, if not return SCE_NP_ERROR_NOT_INITIALIZED if (!status.IsGood()) @@ -123,13 +126,13 @@ int sceNpManagerGetStatus(mem32_t status) void sceNp_init() { - sceNp.AddFunc(0xbd28fdbf, sceNpInit); - sceNp.AddFunc(0x4885aa18, sceNpTerm); - sceNp.AddFunc(0xad218faf, sceNpDrmIsAvailable); - sceNp.AddFunc(0xf042b14f, sceNpDrmIsAvailable2); - sceNp.AddFunc(0x2ecd48ed, sceNpDrmVerifyUpgradeLicense); - sceNp.AddFunc(0xbe0e3ee2, sceNpDrmVerifyUpgradeLicense2); - sceNp.AddFunc(0xf283c143, sceNpDrmExecuteGamePurchase); - sceNp.AddFunc(0xcf51864b, sceNpDrmGetTimelimit); - sceNp.AddFunc(0xa7bff757, sceNpManagerGetStatus); + sceNp->AddFunc(0xbd28fdbf, sceNpInit); + sceNp->AddFunc(0x4885aa18, sceNpTerm); + sceNp->AddFunc(0xad218faf, sceNpDrmIsAvailable); + sceNp->AddFunc(0xf042b14f, sceNpDrmIsAvailable2); + sceNp->AddFunc(0x2ecd48ed, sceNpDrmVerifyUpgradeLicense); + sceNp->AddFunc(0xbe0e3ee2, sceNpDrmVerifyUpgradeLicense2); + sceNp->AddFunc(0xf283c143, sceNpDrmExecuteGamePurchase); + sceNp->AddFunc(0xcf51864b, sceNpDrmGetTimelimit); + sceNp->AddFunc(0xa7bff757, sceNpManagerGetStatus); } diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index ab31e1097b..0897f5ab61 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -16,10 +16,12 @@ #include "Emu/SysCalls/lv2/SC_Time.h" #include +#include -void sceNpTrophy_unload(); -void sceNpTrophy_init(); -Module sceNpTrophy(0xf035, sceNpTrophy_init, nullptr, sceNpTrophy_unload); +//void sceNpTrophy_unload(); +//void sceNpTrophy_init(); +//Module sceNpTrophy(0xf035, sceNpTrophy_init, nullptr, sceNpTrophy_unload); +Module *sceNpTrophy = nullptr; // Internal Structs struct sceNpTrophyInternalContext @@ -76,7 +78,7 @@ sceNpTrophyInternal s_npTrophyInstance; // Functions int sceNpTrophyInit(u32 pool_addr, u32 poolSize, u32 containerId, u64 options) { - sceNpTrophy.Log("sceNpTrophyInit(pool_addr=0x%x, poolSize=%d, containerId=%d, options=0x%llx)", pool_addr, poolSize, containerId, options); + sceNpTrophy->Log("sceNpTrophyInit(pool_addr=0x%x, poolSize=%d, containerId=%d, options=0x%llx)", pool_addr, poolSize, containerId, options); if (s_npTrophyInstance.m_bInitialized) return SCE_NP_TROPHY_ERROR_ALREADY_INITIALIZED; @@ -89,7 +91,7 @@ int sceNpTrophyInit(u32 pool_addr, u32 poolSize, u32 containerId, u64 options) int sceNpTrophyCreateContext(mem32_t context, mem_ptr_t commID, mem_ptr_t commSign, u64 options) { - sceNpTrophy.Warning("sceNpTrophyCreateContext(context_addr=0x%x, commID_addr=0x%x, commSign_addr=0x%x, options=0x%llx)", + sceNpTrophy->Warning("sceNpTrophyCreateContext(context_addr=0x%x, commID_addr=0x%x, commSign_addr=0x%x, options=0x%llx)", context.GetAddr(), commID.GetAddr(), commSign.GetAddr(), options); if (!s_npTrophyInstance.m_bInitialized) @@ -129,7 +131,7 @@ int sceNpTrophyCreateContext(mem32_t context, mem_ptr_t co int sceNpTrophyCreateHandle(mem32_t handle) { - sceNpTrophy.Warning("sceNpTrophyCreateHandle(handle_addr=0x%x)", handle.GetAddr()); + sceNpTrophy->Warning("sceNpTrophyCreateHandle(handle_addr=0x%x)", handle.GetAddr()); if (!s_npTrophyInstance.m_bInitialized) return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; @@ -144,7 +146,7 @@ int sceNpTrophyCreateHandle(mem32_t handle) int sceNpTrophyRegisterContext(u32 context, u32 handle, u32 statusCb_addr, u32 arg_addr, u64 options) { - sceNpTrophy.Warning("sceNpTrophyRegisterContext(context=%d, handle=%d, statusCb_addr=0x%x, arg_addr=0x%x, options=0x%llx)", + sceNpTrophy->Warning("sceNpTrophyRegisterContext(context=%d, handle=%d, statusCb_addr=0x%x, arg_addr=0x%x, options=0x%llx)", context, handle, statusCb_addr, arg_addr, options); if (!(s_npTrophyInstance.m_bInitialized)) @@ -221,7 +223,7 @@ int sceNpTrophySetSoundLevel() int sceNpTrophyGetRequiredDiskSpace(u32 context, u32 handle, mem64_t reqspace, u64 options) { - sceNpTrophy.Warning("sceNpTrophyGetRequiredDiskSpace(context=%d, handle=%d, reqspace_addr=0x%x, options=0x%llx)", + sceNpTrophy->Warning("sceNpTrophyGetRequiredDiskSpace(context=%d, handle=%d, reqspace_addr=0x%x, options=0x%llx)", context, handle, reqspace.GetAddr(), options); if (!s_npTrophyInstance.m_bInitialized) @@ -254,7 +256,7 @@ int sceNpTrophyAbortHandle() int sceNpTrophyGetGameInfo(u32 context, u32 handle, mem_ptr_t details, mem_ptr_t data) { - sceNpTrophy.Warning("sceNpTrophyGetGameInfo(context=%d, handle=%d, details_addr=0x%x, data_addr=0x%x)", + sceNpTrophy->Warning("sceNpTrophyGetGameInfo(context=%d, handle=%d, details_addr=0x%x, data_addr=0x%x)", context, handle, details.GetAddr(), data.GetAddr()); if (!s_npTrophyInstance.m_bInitialized) @@ -264,24 +266,24 @@ int sceNpTrophyGetGameInfo(u32 context, u32 handle, mem_ptr_tGetChildren(); n; n = n->GetNext()) { + for (std::shared_ptr n = doc.GetRoot()->GetChildren(); n; n = n->GetNext()) { if (n->GetName() == "title-name") - titleName = fmt::ToUTF8(n->GetNodeContent()); + titleName = n->GetNodeContent(); if (n->GetName() == "title-detail") - titleDetail = fmt::ToUTF8(n->GetNodeContent()); + titleDetail = n->GetNodeContent(); if (n->GetName() == "trophy") { - u32 trophy_id = atoi(fmt::ToUTF8(n->GetAttribute("id")).c_str()); + u32 trophy_id = atoi(n->GetAttribute("id").c_str()); details->numTrophies++; - switch (fmt::ToUTF8(n->GetAttribute("ttype"))[0]) { + switch (n->GetAttribute("ttype")[0]) { case 'B': details->numBronze++; break; case 'S': details->numSilver++; break; case 'G': details->numGold++; break; @@ -291,7 +293,7 @@ int sceNpTrophyGetGameInfo(u32 context, u32 handle, mem_ptr_tGetTrophyUnlockState(trophy_id)) { data->unlockedTrophies++; - switch (fmt::ToUTF8(n->GetAttribute("ttype"))[0]) { + switch (n->GetAttribute("ttype")[0]) { case 'B': data->unlockedBronze++; break; case 'S': data->unlockedSilver++; break; case 'G': data->unlockedGold++; break; @@ -314,7 +316,7 @@ int sceNpTrophyDestroyHandle() int sceNpTrophyUnlockTrophy(u32 context, u32 handle, s32 trophyId, mem32_t platinumId) { - sceNpTrophy.Warning("sceNpTrophyUnlockTrophy(context=%d, handle=%d, trophyId=%d, platinumId_addr=0x%x)", + sceNpTrophy->Warning("sceNpTrophyUnlockTrophy(context=%d, handle=%d, trophyId=%d, platinumId_addr=0x%x)", context, handle, trophyId, platinumId.GetAddr()); if (!s_npTrophyInstance.m_bInitialized) @@ -347,7 +349,7 @@ int sceNpTrophyTerm() int sceNpTrophyGetTrophyUnlockState(u32 context, u32 handle, mem_ptr_t flags, mem32_t count) { - sceNpTrophy.Warning("sceNpTrophyGetTrophyUnlockState(context=%d, handle=%d, flags_addr=0x%x, count_addr=0x%x)", + sceNpTrophy->Warning("sceNpTrophyGetTrophyUnlockState(context=%d, handle=%d, flags_addr=0x%x, count_addr=0x%x)", context, handle, flags.GetAddr(), count.GetAddr()); if (!s_npTrophyInstance.m_bInitialized) @@ -381,7 +383,7 @@ int sceNpTrophyGetTrophyIcon() int sceNpTrophyGetTrophyInfo(u32 context, u32 handle, s32 trophyId, mem_ptr_t details, mem_ptr_t data) { - sceNpTrophy.Warning("sceNpTrophyGetTrophyInfo(context=%u, handle=%u, trophyId=%d, details_addr=0x%x, data_addr=0x%x)", + sceNpTrophy->Warning("sceNpTrophyGetTrophyInfo(context=%u, handle=%u, trophyId=%d, details_addr=0x%x, data_addr=0x%x)", context, handle, trophyId, details.GetAddr(), data.GetAddr()); if (!s_npTrophyInstance.m_bInitialized) @@ -391,32 +393,32 @@ int sceNpTrophyGetTrophyInfo(u32 context, u32 handle, s32 trophyId, mem_ptr_tGetChildren(); n; n = n->GetNext()) { - if (n->GetName() == "trophy" && (trophyId == atoi(fmt::ToUTF8(n->GetAttribute("id")).c_str()))) + for (std::shared_ptr n = doc.GetRoot()->GetChildren(); n; n = n->GetNext()) { + if (n->GetName() == "trophy" && (trophyId == atoi(n->GetAttribute("id").c_str()))) { details->trophyId = trophyId; - switch (fmt::ToUTF8(n->GetAttribute("ttype"))[0]) { + switch (n->GetAttribute("ttype")[0]) { case 'B': details->trophyGrade = SCE_NP_TROPHY_GRADE_BRONZE; break; case 'S': details->trophyGrade = SCE_NP_TROPHY_GRADE_SILVER; break; case 'G': details->trophyGrade = SCE_NP_TROPHY_GRADE_GOLD; break; case 'P': details->trophyGrade = SCE_NP_TROPHY_GRADE_PLATINUM; break; } - switch (fmt::ToUTF8(n->GetAttribute("ttype"))[0]) { + switch (n->GetAttribute("ttype")[0]) { case 'y': details->hidden = true; break; case 'n': details->hidden = false; break; } - for (wxXmlNode *n2 = n->GetChildren(); n2; n2 = n2->GetNext()) { - if (n2->GetName() == "name") name = fmt::ToUTF8(n2->GetNodeContent()); - if (n2->GetName() == "detail") detail = fmt::ToUTF8(n2->GetNodeContent()); + for (std::shared_ptr n2 = n->GetChildren(); n2; n2 = n2->GetNext()) { + if (n2->GetName() == "name") name = n2->GetNodeContent(); + if (n2->GetName() == "detail") detail = n2->GetNodeContent(); } data->trophyId = trophyId; @@ -443,21 +445,21 @@ void sceNpTrophy_unload() void sceNpTrophy_init() { - sceNpTrophy.AddFunc(0x079f0e87, sceNpTrophyGetGameProgress); - sceNpTrophy.AddFunc(0x1197b52c, sceNpTrophyRegisterContext); - sceNpTrophy.AddFunc(0x1c25470d, sceNpTrophyCreateHandle); - sceNpTrophy.AddFunc(0x27deda93, sceNpTrophySetSoundLevel); - sceNpTrophy.AddFunc(0x370136fe, sceNpTrophyGetRequiredDiskSpace); - sceNpTrophy.AddFunc(0x3741ecc7, sceNpTrophyDestroyContext); - sceNpTrophy.AddFunc(0x39567781, sceNpTrophyInit); - sceNpTrophy.AddFunc(0x48bd97c7, sceNpTrophyAbortHandle); - sceNpTrophy.AddFunc(0x49d18217, sceNpTrophyGetGameInfo); - sceNpTrophy.AddFunc(0x623cd2dc, sceNpTrophyDestroyHandle); - sceNpTrophy.AddFunc(0x8ceedd21, sceNpTrophyUnlockTrophy); - sceNpTrophy.AddFunc(0xa7fabf4d, sceNpTrophyTerm); - sceNpTrophy.AddFunc(0xb3ac3478, sceNpTrophyGetTrophyUnlockState); - sceNpTrophy.AddFunc(0xbaedf689, sceNpTrophyGetTrophyIcon); - sceNpTrophy.AddFunc(0xe3bf9a28, sceNpTrophyCreateContext); - sceNpTrophy.AddFunc(0xfce6d30a, sceNpTrophyGetTrophyInfo); - sceNpTrophy.AddFunc(0xff299e03, sceNpTrophyGetGameIcon); + sceNpTrophy->AddFunc(0x079f0e87, sceNpTrophyGetGameProgress); + sceNpTrophy->AddFunc(0x1197b52c, sceNpTrophyRegisterContext); + sceNpTrophy->AddFunc(0x1c25470d, sceNpTrophyCreateHandle); + sceNpTrophy->AddFunc(0x27deda93, sceNpTrophySetSoundLevel); + sceNpTrophy->AddFunc(0x370136fe, sceNpTrophyGetRequiredDiskSpace); + sceNpTrophy->AddFunc(0x3741ecc7, sceNpTrophyDestroyContext); + sceNpTrophy->AddFunc(0x39567781, sceNpTrophyInit); + sceNpTrophy->AddFunc(0x48bd97c7, sceNpTrophyAbortHandle); + sceNpTrophy->AddFunc(0x49d18217, sceNpTrophyGetGameInfo); + sceNpTrophy->AddFunc(0x623cd2dc, sceNpTrophyDestroyHandle); + sceNpTrophy->AddFunc(0x8ceedd21, sceNpTrophyUnlockTrophy); + sceNpTrophy->AddFunc(0xa7fabf4d, sceNpTrophyTerm); + sceNpTrophy->AddFunc(0xb3ac3478, sceNpTrophyGetTrophyUnlockState); + sceNpTrophy->AddFunc(0xbaedf689, sceNpTrophyGetTrophyIcon); + sceNpTrophy->AddFunc(0xe3bf9a28, sceNpTrophyCreateContext); + sceNpTrophy->AddFunc(0xfce6d30a, sceNpTrophyGetTrophyInfo); + sceNpTrophy->AddFunc(0xff299e03, sceNpTrophyGetGameIcon); } diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 9bd4d52244..7012678dcc 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -11,23 +11,24 @@ #include "Loader/ELF.h" #include "Emu/Cell/RawSPUThread.h" -void sysPrxForUser_init(); -Module sysPrxForUser("sysPrxForUser", sysPrxForUser_init); +//void sysPrxForUser_init(); +//Module sysPrxForUser("sysPrxForUser", sysPrxForUser_init); +Module *sysPrxForUser = nullptr; void sys_initialize_tls() { - sysPrxForUser.Log("sys_initialize_tls()"); + sysPrxForUser->Log("sys_initialize_tls()"); } s64 sys_process_atexitspawn() { - sysPrxForUser.Log("sys_process_atexitspawn()"); + sysPrxForUser->Log("sys_process_atexitspawn()"); return CELL_OK; } s64 sys_process_at_Exitspawn() { - sysPrxForUser.Log("sys_process_at_Exitspawn"); + sysPrxForUser->Log("sys_process_at_Exitspawn"); return CELL_OK; } @@ -42,44 +43,44 @@ int sys_process_is_stack(u32 p) int sys_spu_printf_initialize(int a1, int a2, int a3, int a4, int a5) { - sysPrxForUser.Warning("sys_spu_printf_initialize(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)", a1, a2, a3, a4, a5); + sysPrxForUser->Warning("sys_spu_printf_initialize(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)", a1, a2, a3, a4, a5); return CELL_OK; } s64 sys_prx_register_library(u32 lib_addr) { - sysPrxForUser.Error("sys_prx_register_library(lib_addr=0x%x)", lib_addr); + sysPrxForUser->Error("sys_prx_register_library(lib_addr=0x%x)", lib_addr); return CELL_OK; } s64 sys_prx_exitspawn_with_level() { - sysPrxForUser.Log("sys_prx_exitspawn_with_level()"); + sysPrxForUser->Log("sys_prx_exitspawn_with_level()"); return CELL_OK; } s64 sys_strlen(u32 addr) { const std::string& str = Memory.ReadString(addr); - sysPrxForUser.Log("sys_strlen(0x%x - \"%s\")", addr, str.c_str()); + sysPrxForUser->Log("sys_strlen(0x%x - \"%s\")", addr, str.c_str()); return str.length(); } int sys_spu_elf_get_information(u32 elf_img, mem32_t entry, mem32_t nseg) { - sysPrxForUser.Warning("sys_spu_elf_get_information(elf_img=0x%x, entry_addr=0x%x, nseg_addr=0x%x", elf_img, entry.GetAddr(), nseg.GetAddr()); + sysPrxForUser->Warning("sys_spu_elf_get_information(elf_img=0x%x, entry_addr=0x%x, nseg_addr=0x%x", elf_img, entry.GetAddr(), nseg.GetAddr()); return CELL_OK; } int sys_spu_elf_get_segments(u32 elf_img, mem_ptr_t segments, int nseg) { - sysPrxForUser.Warning("sys_spu_elf_get_segments(elf_img=0x%x, segments_addr=0x%x, nseg=0x%x)", elf_img, segments.GetAddr(), nseg); + sysPrxForUser->Warning("sys_spu_elf_get_segments(elf_img=0x%x, segments_addr=0x%x, nseg=0x%x)", elf_img, segments.GetAddr(), nseg); return CELL_OK; } int sys_spu_image_import(mem_ptr_t img, u32 src, u32 type) { - sysPrxForUser.Warning("sys_spu_image_import(img=0x%x, src=0x%x, type=0x%x)", img.GetAddr(), src, type); + sysPrxForUser->Warning("sys_spu_image_import(img=0x%x, src=0x%x, type=0x%x)", img.GetAddr(), src, type); if(!img.IsGood() || !Memory.IsGoodAddr(src)) { @@ -100,20 +101,20 @@ int sys_spu_image_import(mem_ptr_t img, u32 src, u32 type) int sys_spu_image_close(mem_ptr_t img) { - sysPrxForUser.Warning("sys_spu_image_close(img=0x%x)", img.GetAddr()); + sysPrxForUser->Warning("sys_spu_image_close(img=0x%x)", img.GetAddr()); return CELL_OK; } int sys_raw_spu_load(int id, u32 path_addr, mem32_t entry) { const std::string path = Memory.ReadString(path_addr); - sysPrxForUser.Warning("sys_raw_spu_load(id=0x%x, path=0x%x [%s], entry_addr=0x%x)", + sysPrxForUser->Warning("sys_raw_spu_load(id=0x%x, path=0x%x [%s], entry_addr=0x%x)", id, path_addr, path.c_str(), entry.GetAddr()); vfsFile f(path); if(!f.IsOpened()) { - sysPrxForUser.Error("sys_raw_spu_load error: '%s' not found!", path.c_str()); + sysPrxForUser->Error("sys_raw_spu_load error: '%s' not found!", path.c_str()); return CELL_ENOENT; } @@ -128,7 +129,7 @@ int sys_raw_spu_load(int id, u32 path_addr, mem32_t entry) int sys_raw_spu_image_load(int id, mem_ptr_t img) { - sysPrxForUser.Warning("sys_raw_spu_image_load(id=0x%x, img_addr=0x%x)", id, img.GetAddr()); + sysPrxForUser->Warning("sys_raw_spu_image_load(id=0x%x, img_addr=0x%x)", id, img.GetAddr()); Memory.Copy(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id, (u32)img->segs_addr, 256 * 1024); Memory.Write32(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id + RAW_SPU_PROB_OFFSET + SPU_NPC_offs, @@ -139,66 +140,66 @@ int sys_raw_spu_image_load(int id, mem_ptr_t img) void sysPrxForUser_init() { - sysPrxForUser.AddFunc(0x744680a2, sys_initialize_tls); + sysPrxForUser->AddFunc(0x744680a2, sys_initialize_tls); - sysPrxForUser.AddFunc(0x2f85c0ef, sys_lwmutex_create); - sysPrxForUser.AddFunc(0xc3476d0c, sys_lwmutex_destroy); - sysPrxForUser.AddFunc(0x1573dc3f, sys_lwmutex_lock); - sysPrxForUser.AddFunc(0xaeb78725, sys_lwmutex_trylock); - sysPrxForUser.AddFunc(0x1bc200f4, sys_lwmutex_unlock); + sysPrxForUser->AddFunc(0x2f85c0ef, sys_lwmutex_create); + sysPrxForUser->AddFunc(0xc3476d0c, sys_lwmutex_destroy); + sysPrxForUser->AddFunc(0x1573dc3f, sys_lwmutex_lock); + sysPrxForUser->AddFunc(0xaeb78725, sys_lwmutex_trylock); + sysPrxForUser->AddFunc(0x1bc200f4, sys_lwmutex_unlock); - sysPrxForUser.AddFunc(0x8461e528, sys_time_get_system_time); + sysPrxForUser->AddFunc(0x8461e528, sys_time_get_system_time); - sysPrxForUser.AddFunc(0xe6f2c1e7, sys_process_exit); - sysPrxForUser.AddFunc(0x2c847572, sys_process_atexitspawn); - sysPrxForUser.AddFunc(0x96328741, sys_process_at_Exitspawn); - sysPrxForUser.AddFunc(0x4f7172c9, sys_process_is_stack); + sysPrxForUser->AddFunc(0xe6f2c1e7, sys_process_exit); + sysPrxForUser->AddFunc(0x2c847572, sys_process_atexitspawn); + sysPrxForUser->AddFunc(0x96328741, sys_process_at_Exitspawn); + sysPrxForUser->AddFunc(0x4f7172c9, sys_process_is_stack); - sysPrxForUser.AddFunc(0x24a1ea07, sys_ppu_thread_create); - sysPrxForUser.AddFunc(0x350d454e, sys_ppu_thread_get_id); - sysPrxForUser.AddFunc(0xaff080a4, sys_ppu_thread_exit); - sysPrxForUser.AddFunc(0xa3e3be68, sys_ppu_thread_once); + sysPrxForUser->AddFunc(0x24a1ea07, sys_ppu_thread_create); + sysPrxForUser->AddFunc(0x350d454e, sys_ppu_thread_get_id); + sysPrxForUser->AddFunc(0xaff080a4, sys_ppu_thread_exit); + sysPrxForUser->AddFunc(0xa3e3be68, sys_ppu_thread_once); - sysPrxForUser.AddFunc(0x45fe2fce, sys_spu_printf_initialize); + sysPrxForUser->AddFunc(0x45fe2fce, sys_spu_printf_initialize); - sysPrxForUser.AddFunc(0x42b23552, sys_prx_register_library); - sysPrxForUser.AddFunc(0xa2c7ba64, sys_prx_exitspawn_with_level); + sysPrxForUser->AddFunc(0x42b23552, sys_prx_register_library); + sysPrxForUser->AddFunc(0xa2c7ba64, sys_prx_exitspawn_with_level); - sysPrxForUser.AddFunc(0x2d36462b, sys_strlen); + sysPrxForUser->AddFunc(0x2d36462b, sys_strlen); - sysPrxForUser.AddFunc(0x35168520, sys_heap_malloc); - //sysPrxForUser.AddFunc(0xaede4b03, sys_heap_free); - //sysPrxForUser.AddFunc(0x8a561d92, sys_heap_delete_heap); - sysPrxForUser.AddFunc(0xb2fcf2c8, sys_heap_create_heap); - sysPrxForUser.AddFunc(0x44265c08, _sys_heap_memalign); + sysPrxForUser->AddFunc(0x35168520, sys_heap_malloc); + //sysPrxForUser->AddFunc(0xaede4b03, sys_heap_free); + //sysPrxForUser->AddFunc(0x8a561d92, sys_heap_delete_heap); + sysPrxForUser->AddFunc(0xb2fcf2c8, sys_heap_create_heap); + sysPrxForUser->AddFunc(0x44265c08, _sys_heap_memalign); - sysPrxForUser.AddFunc(0xb257540b, sys_mmapper_allocate_memory); - sysPrxForUser.AddFunc(0x70258515, sys_mmapper_allocate_memory_from_container); - sysPrxForUser.AddFunc(0xdc578057, sys_mmapper_map_memory); - sysPrxForUser.AddFunc(0x4643ba6e, sys_mmapper_unmap_memory); - sysPrxForUser.AddFunc(0x409ad939, sys_mmapper_free_memory); + sysPrxForUser->AddFunc(0xb257540b, sys_mmapper_allocate_memory); + sysPrxForUser->AddFunc(0x70258515, sys_mmapper_allocate_memory_from_container); + sysPrxForUser->AddFunc(0xdc578057, sys_mmapper_map_memory); + sysPrxForUser->AddFunc(0x4643ba6e, sys_mmapper_unmap_memory); + sysPrxForUser->AddFunc(0x409ad939, sys_mmapper_free_memory); - sysPrxForUser.AddFunc(0x1ed454ce, sys_spu_elf_get_information); - sysPrxForUser.AddFunc(0xdb6b3250, sys_spu_elf_get_segments); - sysPrxForUser.AddFunc(0xebe5f72f, sys_spu_image_import); - sysPrxForUser.AddFunc(0xe0da8efd, sys_spu_image_close); + sysPrxForUser->AddFunc(0x1ed454ce, sys_spu_elf_get_information); + sysPrxForUser->AddFunc(0xdb6b3250, sys_spu_elf_get_segments); + sysPrxForUser->AddFunc(0xebe5f72f, sys_spu_image_import); + sysPrxForUser->AddFunc(0xe0da8efd, sys_spu_image_close); - sysPrxForUser.AddFunc(0x893305fa, sys_raw_spu_load); - sysPrxForUser.AddFunc(0xb995662e, sys_raw_spu_image_load); + sysPrxForUser->AddFunc(0x893305fa, sys_raw_spu_load); + sysPrxForUser->AddFunc(0xb995662e, sys_raw_spu_image_load); - sysPrxForUser.AddFunc(0xda0eb71a, sys_lwcond_create); - sysPrxForUser.AddFunc(0x1c9a942c, sys_lwcond_destroy); - sysPrxForUser.AddFunc(0xef87a695, sys_lwcond_signal); - sysPrxForUser.AddFunc(0xe9a1bd84, sys_lwcond_signal_all); - sysPrxForUser.AddFunc(0x52aadadf, sys_lwcond_signal_to); - sysPrxForUser.AddFunc(0x2a6d9d51, sys_lwcond_wait); + sysPrxForUser->AddFunc(0xda0eb71a, sys_lwcond_create); + sysPrxForUser->AddFunc(0x1c9a942c, sys_lwcond_destroy); + sysPrxForUser->AddFunc(0xef87a695, sys_lwcond_signal); + sysPrxForUser->AddFunc(0xe9a1bd84, sys_lwcond_signal_all); + sysPrxForUser->AddFunc(0x52aadadf, sys_lwcond_signal_to); + sysPrxForUser->AddFunc(0x2a6d9d51, sys_lwcond_wait); - sysPrxForUser.AddFunc(0x8c2bb498, sys_spinlock_initialize); - sysPrxForUser.AddFunc(0xa285139d, sys_spinlock_lock); - sysPrxForUser.AddFunc(0x722a0254, sys_spinlock_trylock); - sysPrxForUser.AddFunc(0x5267cb35, sys_spinlock_unlock); + sysPrxForUser->AddFunc(0x8c2bb498, sys_spinlock_initialize); + sysPrxForUser->AddFunc(0xa285139d, sys_spinlock_lock); + sysPrxForUser->AddFunc(0x722a0254, sys_spinlock_trylock); + sysPrxForUser->AddFunc(0x5267cb35, sys_spinlock_unlock); - sysPrxForUser.AddFunc(0x67f9fedb, sys_game_process_exitspawn2); - sysPrxForUser.AddFunc(0xfc52a7a9, sys_game_process_exitspawn); + sysPrxForUser->AddFunc(0x67f9fedb, sys_game_process_exitspawn2); + sysPrxForUser->AddFunc(0xfc52a7a9, sys_game_process_exitspawn); } diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 6895aea967..6fa451d26e 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -6,8 +6,9 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" -void sys_fs_init(); -Module sys_fs(0x000e, sys_fs_init); +//void sys_fs_init(); +//Module sys_fs(0x000e, sys_fs_init); +Module *sys_fs = nullptr; bool sdata_check(u32 version, u32 flags, u64 filesizeInput, u64 filesizeTmp) { @@ -42,13 +43,13 @@ int sdata_unpack(const std::string& packed_file, const std::string& unpacked_fil if(!packed_stream || !packed_stream->IsOpened()) { - sys_fs.Error("'%s' not found! flags: 0x%08x", packed_file.c_str(), vfsRead); + sys_fs->Error("'%s' not found! flags: 0x%08x", packed_file.c_str(), vfsRead); return CELL_ENOENT; } if(!unpacked_stream || !unpacked_stream->IsOpened()) { - sys_fs.Error("'%s' couldn't be created! flags: 0x%08x", unpacked_file.c_str(), vfsWrite); + sys_fs->Error("'%s' couldn't be created! flags: 0x%08x", unpacked_file.c_str(), vfsWrite); return CELL_ENOENT; } @@ -57,7 +58,7 @@ int sdata_unpack(const std::string& packed_file, const std::string& unpacked_fil u32 format = re32(*(u32*)&buffer[0]); if (format != 0x4E504400) // "NPD\x00" { - sys_fs.Error("Illegal format. Expected 0x4E504400, but got 0x%08x", format); + sys_fs->Error("Illegal format. Expected 0x4E504400, but got 0x%08x", format); return CELL_EFSSPECIFIC; } @@ -71,7 +72,7 @@ int sdata_unpack(const std::string& packed_file, const std::string& unpacked_fil // SDATA file is compressed if (flags & 0x1) { - sys_fs.Warning("cellFsSdataOpen: Compressed SDATA files are not supported yet."); + sys_fs->Warning("cellFsSdataOpen: Compressed SDATA files are not supported yet."); return CELL_EFSSPECIFIC; } @@ -84,7 +85,7 @@ int sdata_unpack(const std::string& packed_file, const std::string& unpacked_fil if (!sdata_check(version, flags, filesizeInput, filesizeTmp)) { - sys_fs.Error("cellFsSdataOpen: Wrong header information."); + sys_fs->Error("cellFsSdataOpen: Wrong header information."); return CELL_EFSSPECIFIC; } @@ -113,7 +114,7 @@ int sdata_unpack(const std::string& packed_file, const std::string& unpacked_fil int cellFsSdataOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) { const std::string& path = Memory.ReadString(path_addr); - sys_fs.Warning("cellFsSdataOpen(path=\"%s\", flags=0x%x, fd_addr=0x%x, arg_addr=0x%x, size=0x%llx)", + sys_fs->Warning("cellFsSdataOpen(path=\"%s\", flags=0x%x, fd_addr=0x%x, arg_addr=0x%x, size=0x%llx)", path.c_str(), flags, fd.GetAddr(), arg.GetAddr(), size); if (!fd.IsGood() || (!arg.IsGood() && size)) @@ -132,7 +133,7 @@ int cellFsSdataOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) int ret = sdata_unpack(path, unpacked_path); if (ret) return ret; - fd = sys_fs.GetNewId(Emu.GetVFS().OpenFile(unpacked_path, vfsRead), flags); + fd = sys_fs->GetNewId(Emu.GetVFS().OpenFile(unpacked_path, vfsRead), flags); return CELL_OK; } @@ -154,7 +155,7 @@ void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_tCheckId(fd, orig_file)) return; u64 nbytes = aio->size; u32 buf_addr = aio->buf_addr; @@ -232,7 +233,7 @@ fin: int cellFsAioRead(mem_ptr_t aio, mem32_t aio_id, mem_func_ptr_t xaio, int error, int xid, u64 size)> func) { - sys_fs.Warning("cellFsAioRead(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.GetAddr(), aio_id.GetAddr(), func.GetAddr()); + sys_fs->Warning("cellFsAioRead(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.GetAddr(), aio_id.GetAddr(), func.GetAddr()); if (!aio.IsGood() || !aio_id.IsGood() || !func.IsGood()) { @@ -246,7 +247,7 @@ int cellFsAioRead(mem_ptr_t aio, mem32_t aio_id, mem_func_ptr_tfd; - if (!sys_fs.CheckId(fd, orig_file)) return CELL_EBADF; + if (!sys_fs->CheckId(fd, orig_file)) return CELL_EBADF; //get a unique id for the callback (may be used by cellFsAioCancel) const u32 xid = g_FsAioReadID++; @@ -263,7 +264,7 @@ int cellFsAioRead(mem_ptr_t aio, mem32_t aio_id, mem_func_ptr_tWarning("cellFsAioInit(mount_point_addr=0x%x (%s))", mount_point.GetAddr(), mp.c_str()); aio_init = true; return CELL_OK; } @@ -271,14 +272,14 @@ int cellFsAioInit(mem8_ptr_t mount_point) int cellFsAioFinish(mem8_ptr_t mount_point) { std::string mp = Memory.ReadString(mount_point.GetAddr()); - sys_fs.Warning("cellFsAioFinish(mount_point_addr=0x%x (%s))", mount_point.GetAddr(), mp.c_str()); + sys_fs->Warning("cellFsAioFinish(mount_point_addr=0x%x (%s))", mount_point.GetAddr(), mp.c_str()); aio_init = false; return CELL_OK; } int cellFsReadWithOffset(u32 fd, u64 offset, u32 buf_addr, u64 buffer_size, mem64_t nread) { - sys_fs.Warning("cellFsReadWithOffset(fd=%d, offset=0x%llx, buf_addr=0x%x, buffer_size=%lld nread=0x%llx)", + sys_fs->Warning("cellFsReadWithOffset(fd=%d, offset=0x%llx, buf_addr=0x%x, buffer_size=%lld nread=0x%llx)", fd, offset, buf_addr, buffer_size, nread.GetAddr()); int ret; @@ -297,43 +298,43 @@ int cellFsReadWithOffset(u32 fd, u64 offset, u32 buf_addr, u64 buffer_size, mem6 void sys_fs_init() { - sys_fs.AddFunc(0x718bf5f8, cellFsOpen); - sys_fs.AddFunc(0xb1840b53, cellFsSdataOpen); - sys_fs.AddFunc(0x4d5ff8e2, cellFsRead); - sys_fs.AddFunc(0xecdcf2ab, cellFsWrite); - sys_fs.AddFunc(0x2cb51f0d, cellFsClose); - sys_fs.AddFunc(0x3f61245c, cellFsOpendir); - sys_fs.AddFunc(0x5c74903d, cellFsReaddir); - sys_fs.AddFunc(0xff42dcc3, cellFsClosedir); - sys_fs.AddFunc(0x7de6dced, cellFsStat); - sys_fs.AddFunc(0xef3efa34, cellFsFstat); - sys_fs.AddFunc(0xba901fe6, cellFsMkdir); - sys_fs.AddFunc(0xf12eecc8, cellFsRename); - sys_fs.AddFunc(0x2796fdf3, cellFsRmdir); - sys_fs.AddFunc(0x7f4677a8, cellFsUnlink); - sys_fs.AddFunc(0xa397d042, cellFsLseek); - sys_fs.AddFunc(0x0e2939e5, cellFsFtruncate); - sys_fs.AddFunc(0xc9dc3ac5, cellFsTruncate); - sys_fs.AddFunc(0xcb588dba, cellFsFGetBlockSize); - sys_fs.AddFunc(0xc1c507e7, cellFsAioRead); - sys_fs.AddFunc(0xdb869f20, cellFsAioInit); - sys_fs.AddFunc(0x9f951810, cellFsAioFinish); - sys_fs.AddFunc(0x1a108ab7, cellFsGetBlockSize); - sys_fs.AddFunc(0xaa3b4bcd, cellFsGetFreeSize); - sys_fs.AddFunc(0x0d5b4a14, cellFsReadWithOffset); - sys_fs.AddFunc(0x9b882495, cellFsGetDirectoryEntries); - sys_fs.AddFunc(0x2664c8ae, cellFsStReadInit); - sys_fs.AddFunc(0xd73938df, cellFsStReadFinish); - sys_fs.AddFunc(0xb3afee8b, cellFsStReadGetRingBuf); - sys_fs.AddFunc(0xcf34969c, cellFsStReadGetStatus); - sys_fs.AddFunc(0xbd273a88, cellFsStReadGetRegid); - sys_fs.AddFunc(0x8df28ff9, cellFsStReadStart); - sys_fs.AddFunc(0xf8e5d9a0, cellFsStReadStop); - sys_fs.AddFunc(0x27800c6b, cellFsStRead); - sys_fs.AddFunc(0x190912f6, cellFsStReadGetCurrentAddr); - sys_fs.AddFunc(0x81f33783, cellFsStReadPutCurrentAddr); - sys_fs.AddFunc(0x8f71c5b2, cellFsStReadWait); - sys_fs.AddFunc(0x866f6aec, cellFsStReadWaitCallback); + sys_fs->AddFunc(0x718bf5f8, cellFsOpen); + sys_fs->AddFunc(0xb1840b53, cellFsSdataOpen); + sys_fs->AddFunc(0x4d5ff8e2, cellFsRead); + sys_fs->AddFunc(0xecdcf2ab, cellFsWrite); + sys_fs->AddFunc(0x2cb51f0d, cellFsClose); + sys_fs->AddFunc(0x3f61245c, cellFsOpendir); + sys_fs->AddFunc(0x5c74903d, cellFsReaddir); + sys_fs->AddFunc(0xff42dcc3, cellFsClosedir); + sys_fs->AddFunc(0x7de6dced, cellFsStat); + sys_fs->AddFunc(0xef3efa34, cellFsFstat); + sys_fs->AddFunc(0xba901fe6, cellFsMkdir); + sys_fs->AddFunc(0xf12eecc8, cellFsRename); + sys_fs->AddFunc(0x2796fdf3, cellFsRmdir); + sys_fs->AddFunc(0x7f4677a8, cellFsUnlink); + sys_fs->AddFunc(0xa397d042, cellFsLseek); + sys_fs->AddFunc(0x0e2939e5, cellFsFtruncate); + sys_fs->AddFunc(0xc9dc3ac5, cellFsTruncate); + sys_fs->AddFunc(0xcb588dba, cellFsFGetBlockSize); + sys_fs->AddFunc(0xc1c507e7, cellFsAioRead); + sys_fs->AddFunc(0xdb869f20, cellFsAioInit); + sys_fs->AddFunc(0x9f951810, cellFsAioFinish); + sys_fs->AddFunc(0x1a108ab7, cellFsGetBlockSize); + sys_fs->AddFunc(0xaa3b4bcd, cellFsGetFreeSize); + sys_fs->AddFunc(0x0d5b4a14, cellFsReadWithOffset); + sys_fs->AddFunc(0x9b882495, cellFsGetDirectoryEntries); + sys_fs->AddFunc(0x2664c8ae, cellFsStReadInit); + sys_fs->AddFunc(0xd73938df, cellFsStReadFinish); + sys_fs->AddFunc(0xb3afee8b, cellFsStReadGetRingBuf); + sys_fs->AddFunc(0xcf34969c, cellFsStReadGetStatus); + sys_fs->AddFunc(0xbd273a88, cellFsStReadGetRegid); + sys_fs->AddFunc(0x8df28ff9, cellFsStReadStart); + sys_fs->AddFunc(0xf8e5d9a0, cellFsStReadStop); + sys_fs->AddFunc(0x27800c6b, cellFsStRead); + sys_fs->AddFunc(0x190912f6, cellFsStReadGetCurrentAddr); + sys_fs->AddFunc(0x81f33783, cellFsStReadPutCurrentAddr); + sys_fs->AddFunc(0x8f71c5b2, cellFsStReadWait); + sys_fs->AddFunc(0x866f6aec, cellFsStReadWaitCallback); aio_init = false; } diff --git a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp index 5a0fb41e8c..031dc065a2 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp @@ -6,45 +6,46 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" -void sys_io_init(); -Module sys_io(0x0017, sys_io_init); +//void sys_io_init(); +//Module sys_io(0x0017, sys_io_init); +Module *sys_io = nullptr; void sys_io_init() { - sys_io.AddFunc(0x1cf98800, cellPadInit); - sys_io.AddFunc(0x4d9b75d5, cellPadEnd); - sys_io.AddFunc(0x0d5f2c14, cellPadClearBuf); - sys_io.AddFunc(0x8b72cda1, cellPadGetData); - sys_io.AddFunc(0x6bc09c61, cellPadGetDataExtra); - sys_io.AddFunc(0xf65544ee, cellPadSetActDirect); - sys_io.AddFunc(0x3aaad464, cellPadGetInfo); - sys_io.AddFunc(0xa703a51d, cellPadGetInfo2); - sys_io.AddFunc(0x578e3c98, cellPadSetPortSetting); - sys_io.AddFunc(0x0e2dfaad, cellPadInfoPressMode); - sys_io.AddFunc(0x78200559, cellPadInfoSensorMode); - sys_io.AddFunc(0xf83f8182, cellPadSetPressMode); - sys_io.AddFunc(0xbe5be3ba, cellPadSetSensorMode); - sys_io.AddFunc(0xdbf4c59c, cellPadGetCapabilityInfo); + sys_io->AddFunc(0x1cf98800, cellPadInit); + sys_io->AddFunc(0x4d9b75d5, cellPadEnd); + sys_io->AddFunc(0x0d5f2c14, cellPadClearBuf); + sys_io->AddFunc(0x8b72cda1, cellPadGetData); + sys_io->AddFunc(0x6bc09c61, cellPadGetDataExtra); + sys_io->AddFunc(0xf65544ee, cellPadSetActDirect); + sys_io->AddFunc(0x3aaad464, cellPadGetInfo); + sys_io->AddFunc(0xa703a51d, cellPadGetInfo2); + sys_io->AddFunc(0x578e3c98, cellPadSetPortSetting); + sys_io->AddFunc(0x0e2dfaad, cellPadInfoPressMode); + sys_io->AddFunc(0x78200559, cellPadInfoSensorMode); + sys_io->AddFunc(0xf83f8182, cellPadSetPressMode); + sys_io->AddFunc(0xbe5be3ba, cellPadSetSensorMode); + sys_io->AddFunc(0xdbf4c59c, cellPadGetCapabilityInfo); - sys_io.AddFunc(0x433f6ec0, cellKbInit); - sys_io.AddFunc(0xbfce3285, cellKbEnd); - sys_io.AddFunc(0x2073b7f6, cellKbClearBuf); - sys_io.AddFunc(0x4ab1fa77, cellKbCnvRawCode); - sys_io.AddFunc(0x2f1774d5, cellKbGetInfo); - sys_io.AddFunc(0xff0a21b7, cellKbRead); - sys_io.AddFunc(0xa5f85e4d, cellKbSetCodeType); - sys_io.AddFunc(0x3f72c56e, cellKbSetLEDStatus); - sys_io.AddFunc(0xdeefdfa7, cellKbSetReadMode); - sys_io.AddFunc(0x1f71ecbe, cellKbGetConfiguration); + sys_io->AddFunc(0x433f6ec0, cellKbInit); + sys_io->AddFunc(0xbfce3285, cellKbEnd); + sys_io->AddFunc(0x2073b7f6, cellKbClearBuf); + sys_io->AddFunc(0x4ab1fa77, cellKbCnvRawCode); + sys_io->AddFunc(0x2f1774d5, cellKbGetInfo); + sys_io->AddFunc(0xff0a21b7, cellKbRead); + sys_io->AddFunc(0xa5f85e4d, cellKbSetCodeType); + sys_io->AddFunc(0x3f72c56e, cellKbSetLEDStatus); + sys_io->AddFunc(0xdeefdfa7, cellKbSetReadMode); + sys_io->AddFunc(0x1f71ecbe, cellKbGetConfiguration); - sys_io.AddFunc(0xc9030138, cellMouseInit); - sys_io.AddFunc(0x3ef66b95, cellMouseClearBuf); - sys_io.AddFunc(0xe10183ce, cellMouseEnd); - sys_io.AddFunc(0x5baf30fb, cellMouseGetInfo); - sys_io.AddFunc(0x4d0b3b1f, cellMouseInfoTabletMode); - sys_io.AddFunc(0x3138e632, cellMouseGetData); - sys_io.AddFunc(0x6bd131f0, cellMouseGetDataList); - sys_io.AddFunc(0x2d16da4f, cellMouseSetTabletMode); - sys_io.AddFunc(0x21a62e9b, cellMouseGetTabletDataList); - sys_io.AddFunc(0xa328cc35, cellMouseGetRawData); + sys_io->AddFunc(0xc9030138, cellMouseInit); + sys_io->AddFunc(0x3ef66b95, cellMouseClearBuf); + sys_io->AddFunc(0xe10183ce, cellMouseEnd); + sys_io->AddFunc(0x5baf30fb, cellMouseGetInfo); + sys_io->AddFunc(0x4d0b3b1f, cellMouseInfoTabletMode); + sys_io->AddFunc(0x3138e632, cellMouseGetData); + sys_io->AddFunc(0x6bd131f0, cellMouseGetDataList); + sys_io->AddFunc(0x2d16da4f, cellMouseSetTabletMode); + sys_io->AddFunc(0x21a62e9b, cellMouseGetTabletDataList); + sys_io->AddFunc(0xa328cc35, cellMouseGetRawData); } diff --git a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp index 7285e27201..af0c53c620 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp @@ -20,8 +20,9 @@ extern "C" } #endif -void sys_net_init(); -Module sys_net((u16)0x0000, sys_net_init); +//void sys_net_init(); +//Module sys_net((u16)0x0000, sys_net_init); +Module *sys_net = nullptr; mem32_t g_lastError(0); @@ -98,7 +99,7 @@ using pck_len_t = u32; // Functions int sys_net_accept(s32 s, mem_ptr_t addr, mem32_t paddrlen) { - sys_net.Warning("accept(s=%d, family_addr=0x%x, paddrlen=0x%x)", s, addr.GetAddr(), paddrlen.GetAddr()); + sys_net->Warning("accept(s=%d, family_addr=0x%x, paddrlen=0x%x)", s, addr.GetAddr(), paddrlen.GetAddr()); if (addr.GetAddr() == 0) { int ret = accept(s, NULL, NULL); g_lastError = getLastError(); @@ -117,12 +118,12 @@ int sys_net_accept(s32 s, mem_ptr_t addr, mem32_t paddrlen) int sys_net_bind(s32 s, mem_ptr_t addr, u32 addrlen) { - sys_net.Warning("bind(s=%d, family_addr=0x%x, addrlen=%u)", s, addr.GetAddr(), addrlen); + sys_net->Warning("bind(s=%d, family_addr=0x%x, addrlen=%u)", s, addr.GetAddr(), addrlen); sockaddr_in saddr; memcpy(&saddr, Memory.VirtualToRealAddr(addr.GetAddr()), sizeof(sockaddr_in)); saddr.sin_family = addr->sin_family; const char *ipaddr = inet_ntoa(saddr.sin_addr); - sys_net.Warning("binding on %s to port %d", ipaddr, ntohs(saddr.sin_port)); + sys_net->Warning("binding on %s to port %d", ipaddr, ntohs(saddr.sin_port)); int ret = bind(s, (const sockaddr *)&saddr, addrlen); g_lastError = getLastError(); return ret; @@ -130,12 +131,12 @@ int sys_net_bind(s32 s, mem_ptr_t addr, u32 addrlen) int sys_net_connect(s32 s, mem_ptr_t addr, u32 addrlen) { - sys_net.Warning("connect(s=%d, family_addr=0x%x, addrlen=%u)", s, addr.GetAddr(), addrlen); + sys_net->Warning("connect(s=%d, family_addr=0x%x, addrlen=%u)", s, addr.GetAddr(), addrlen); sockaddr_in saddr; memcpy(&saddr, Memory.VirtualToRealAddr(addr.GetAddr()), sizeof(sockaddr_in)); saddr.sin_family = addr->sin_family; const char *ipaddr = inet_ntoa(saddr.sin_addr); - sys_net.Warning("connecting on %s to port %d", ipaddr, ntohs(saddr.sin_port)); + sys_net->Warning("connecting on %s to port %d", ipaddr, ntohs(saddr.sin_port)); int ret = connect(s, (const sockaddr *) &saddr, addrlen); g_lastError = getLastError(); return ret; @@ -174,7 +175,7 @@ int getsockopt() int sys_net_inet_addr(mem8_ptr_t cp) { std::string cp_ = Memory.ReadString(cp.GetAddr()); - sys_net.Warning("inet_addr(cp=\"%s\")", cp_.c_str()); + sys_net->Warning("inet_addr(cp=\"%s\")", cp_.c_str()); return htonl(inet_addr(cp_.c_str())); // return a big-endian IP address } @@ -222,7 +223,7 @@ int inet_ntop() int sys_net_inet_pton(s32 af, u32 src_addr, u32 dst_addr) { - sys_net.Warning("inet_pton(af=%d, src_addr=0x%x, dst_addr=0x%x)", af, src_addr, dst_addr); + sys_net->Warning("inet_pton(af=%d, src_addr=0x%x, dst_addr=0x%x)", af, src_addr, dst_addr); char *src = (char *)Memory.VirtualToRealAddr(src_addr); char *dst = (char *)Memory.VirtualToRealAddr(dst_addr); return inet_pton(af, src, dst); @@ -230,7 +231,7 @@ int sys_net_inet_pton(s32 af, u32 src_addr, u32 dst_addr) int sys_net_listen(s32 s, s32 backlog) { - sys_net.Warning("listen(s=%d, backlog=%d)", s, backlog); + sys_net->Warning("listen(s=%d, backlog=%d)", s, backlog); int ret = listen(s, backlog); g_lastError = getLastError(); return ret; @@ -238,7 +239,7 @@ int sys_net_listen(s32 s, s32 backlog) int sys_net_recv(s32 s, u32 buf_addr, u32 len, s32 flags) { - sys_net.Warning("recv(s=%d, buf_addr=0x%x, len=%d, flags=0x%x)", s, buf_addr, len, flags); + sys_net->Warning("recv(s=%d, buf_addr=0x%x, len=%d, flags=0x%x)", s, buf_addr, len, flags); char *buf = (char *)Memory.VirtualToRealAddr(buf_addr); int ret = recv(s, buf, len, flags); g_lastError = getLastError(); @@ -247,7 +248,7 @@ int sys_net_recv(s32 s, u32 buf_addr, u32 len, s32 flags) int sys_net_recvfrom(s32 s, u32 buf_addr, u32 len, s32 flags, mem_ptr_t addr, mem32_t paddrlen) { - sys_net.Warning("recvfrom(s=%d, buf_addr=0x%x, len=%u, flags=0x%x, addr_addr=0x%x, paddrlen=0x%x)", + sys_net->Warning("recvfrom(s=%d, buf_addr=0x%x, len=%u, flags=0x%x, addr_addr=0x%x, paddrlen=0x%x)", s, buf_addr, len, flags, addr.GetAddr(), paddrlen.GetAddr()); char *_buf_addr = (char *)Memory.VirtualToRealAddr(buf_addr); @@ -268,7 +269,7 @@ int recvmsg() int sys_net_send(s32 s, u32 buf_addr, u32 len, s32 flags) { - sys_net.Warning("send(s=%d, buf_addr=0x%x, len=%d, flags=0x%x)", s, buf_addr, len, flags); + sys_net->Warning("send(s=%d, buf_addr=0x%x, len=%d, flags=0x%x)", s, buf_addr, len, flags); char *buf = (char *)Memory.VirtualToRealAddr(buf_addr); int ret = send(s, buf, len, flags); g_lastError = getLastError(); @@ -283,7 +284,7 @@ int sendmsg() int sys_net_sendto(s32 s, u32 buf_addr, u32 len, s32 flags, mem_ptr_t addr, u32 addrlen) { - sys_net.Warning("sendto(s=%d, buf_addr=0x%x, len=%u, flags=0x%x, addr=0x%x, addrlen=%u)", + sys_net->Warning("sendto(s=%d, buf_addr=0x%x, len=%u, flags=0x%x, addr=0x%x, addrlen=%u)", s, buf_addr, len, flags, addr.GetAddr(), addrlen); char *_buf_addr = (char *)Memory.VirtualToRealAddr(buf_addr); @@ -297,7 +298,7 @@ int sys_net_sendto(s32 s, u32 buf_addr, u32 len, s32 flags, mem_ptr_tWarning("socket(s=%d, level=%d, optname=%d, optval_addr=0x%x, optlen=%u)", s, level, optname, optval_addr, optlen); char *_optval_addr = (char *)Memory.VirtualToRealAddr(optval_addr); int ret = setsockopt(s, level, optname, _optval_addr, optlen); g_lastError = getLastError(); @@ -306,7 +307,7 @@ int sys_net_setsockopt(s32 s, s32 level, s32 optname, u32 optval_addr, u32 optle int sys_net_shutdown(s32 s, s32 how) { - sys_net.Warning("shutdown(s=%d, how=%d)", s, how); + sys_net->Warning("shutdown(s=%d, how=%d)", s, how); int ret = shutdown(s, how); g_lastError = getLastError(); return ret; @@ -314,7 +315,7 @@ int sys_net_shutdown(s32 s, s32 how) int sys_net_socket(s32 family, s32 type, s32 protocol) { - sys_net.Warning("socket(family=%d, type=%d, protocol=%d)", family, type, protocol); + sys_net->Warning("socket(family=%d, type=%d, protocol=%d)", family, type, protocol); int ret = socket(family, type, protocol); g_lastError = getLastError(); return ret; @@ -322,7 +323,7 @@ int sys_net_socket(s32 family, s32 type, s32 protocol) int sys_net_socketclose(s32 s) { - sys_net.Warning("socket(s=%d)", s); + sys_net->Warning("socket(s=%d)", s); #ifdef _WIN32 int ret = closesocket(s); #else @@ -346,7 +347,7 @@ int socketselect() int sys_net_initialize_network_ex(mem_ptr_t param) { - sys_net.Warning("sys_net_initialize_network_ex(param_addr=0x%x)", param.GetAddr()); + sys_net->Warning("sys_net_initialize_network_ex(param_addr=0x%x)", param.GetAddr()); g_lastError.SetAddr(Memory.Alloc(4, 1)); #ifdef _WIN32 WSADATA wsaData; @@ -412,7 +413,7 @@ int sys_net_show_nameserver() s32 _sys_net_errno_loc() { - sys_net.Warning("_sys_net_errno_loc()"); + sys_net->Warning("_sys_net_errno_loc()"); return g_lastError.GetAddr(); } @@ -478,7 +479,7 @@ int sys_net_show_ifconfig() int sys_net_finalize_network() { - sys_net.Warning("sys_net_initialize_network_ex()"); + sys_net->Warning("sys_net_initialize_network_ex()"); Memory.Free(g_lastError.GetAddr()); g_lastError.SetAddr(0); #ifdef _WIN32 @@ -508,62 +509,62 @@ int sys_net_free_thread_context() void sys_net_init() { // The names of the following functions are modified to avoid overloading problems - sys_net.AddFunc(0xc94f6939, sys_net_accept); - sys_net.AddFunc(0xb0a59804, sys_net_bind); - sys_net.AddFunc(0x64f66d35, sys_net_connect); - //sys_net.AddFunc(0xf7ac8941, sys_net_gethostbyaddr); - //sys_net.AddFunc(0x71f4c717, sys_net_gethostbyname); - //sys_net.AddFunc(0xf9ec2db6, sys_net_getpeername); - //sys_net.AddFunc(0x13efe7f5, sys_net_getsockname); - //sys_net.AddFunc(0x5a045bd1, sys_net_getsockopt); - sys_net.AddFunc(0xdabbc2c0, sys_net_inet_addr); - //sys_net.AddFunc(0xa9a079e0, sys_net_inet_aton); - //sys_net.AddFunc(0x566893ce, sys_net_inet_lnaof); - //sys_net.AddFunc(0xb4152c74, sys_net_inet_makeaddr); - //sys_net.AddFunc(0xe39a62a7, sys_net_inet_netof); - //sys_net.AddFunc(0x506ad863, sys_net_inet_network); - //sys_net.AddFunc(0x858a930b, sys_net_inet_ntoa); - //sys_net.AddFunc(0xc98a3146, sys_net_inet_ntop); - sys_net.AddFunc(0x8af3825e, sys_net_inet_pton); - sys_net.AddFunc(0x28e208bb, sys_net_listen); - //sys_net.AddFunc(, sys_net_ntohl); - //sys_net.AddFunc(, sys_net_ntohs); - sys_net.AddFunc(0xfba04f37, sys_net_recv); - sys_net.AddFunc(0x1f953b9f, sys_net_recvfrom); - //sys_net.AddFunc(0xc9d09c34, sys_net_recvmsg); - sys_net.AddFunc(0xdc751b40, sys_net_send); - //sys_net.AddFunc(0xad09481b, sys_net_sendmsg); - sys_net.AddFunc(0x9647570b, sys_net_sendto); - sys_net.AddFunc(0x88f03575, sys_net_setsockopt); - sys_net.AddFunc(0xa50777c6, sys_net_shutdown); - sys_net.AddFunc(0x9c056962, sys_net_socket); - sys_net.AddFunc(0x6db6e8cd, sys_net_socketclose); - //sys_net.AddFunc(0x051ee3ee, sys_net_socketpoll); - //sys_net.AddFunc(0x3f09e20a, sys_net_socketselect); + sys_net->AddFunc(0xc94f6939, sys_net_accept); + sys_net->AddFunc(0xb0a59804, sys_net_bind); + sys_net->AddFunc(0x64f66d35, sys_net_connect); + //sys_net->AddFunc(0xf7ac8941, sys_net_gethostbyaddr); + //sys_net->AddFunc(0x71f4c717, sys_net_gethostbyname); + //sys_net->AddFunc(0xf9ec2db6, sys_net_getpeername); + //sys_net->AddFunc(0x13efe7f5, sys_net_getsockname); + //sys_net->AddFunc(0x5a045bd1, sys_net_getsockopt); + sys_net->AddFunc(0xdabbc2c0, sys_net_inet_addr); + //sys_net->AddFunc(0xa9a079e0, sys_net_inet_aton); + //sys_net->AddFunc(0x566893ce, sys_net_inet_lnaof); + //sys_net->AddFunc(0xb4152c74, sys_net_inet_makeaddr); + //sys_net->AddFunc(0xe39a62a7, sys_net_inet_netof); + //sys_net->AddFunc(0x506ad863, sys_net_inet_network); + //sys_net->AddFunc(0x858a930b, sys_net_inet_ntoa); + //sys_net->AddFunc(0xc98a3146, sys_net_inet_ntop); + sys_net->AddFunc(0x8af3825e, sys_net_inet_pton); + sys_net->AddFunc(0x28e208bb, sys_net_listen); + //sys_net->AddFunc(, sys_net_ntohl); + //sys_net->AddFunc(, sys_net_ntohs); + sys_net->AddFunc(0xfba04f37, sys_net_recv); + sys_net->AddFunc(0x1f953b9f, sys_net_recvfrom); + //sys_net->AddFunc(0xc9d09c34, sys_net_recvmsg); + sys_net->AddFunc(0xdc751b40, sys_net_send); + //sys_net->AddFunc(0xad09481b, sys_net_sendmsg); + sys_net->AddFunc(0x9647570b, sys_net_sendto); + sys_net->AddFunc(0x88f03575, sys_net_setsockopt); + sys_net->AddFunc(0xa50777c6, sys_net_shutdown); + sys_net->AddFunc(0x9c056962, sys_net_socket); + sys_net->AddFunc(0x6db6e8cd, sys_net_socketclose); + //sys_net->AddFunc(0x051ee3ee, sys_net_socketpoll); + //sys_net->AddFunc(0x3f09e20a, sys_net_socketselect); - sys_net.AddFunc(0x139a9e9b, sys_net_initialize_network_ex); - sys_net.AddFunc(0x05bd4438, sys_net_get_udpp2p_test_param); - sys_net.AddFunc(0x10b81ed6, sys_net_set_udpp2p_test_param); - sys_net.AddFunc(0x1d14d6e4, sys_net_get_lib_name_server); - sys_net.AddFunc(0x27fb339d, sys_net_if_ctl); - sys_net.AddFunc(0x368823c0, sys_net_get_netemu_test_param); - sys_net.AddFunc(0x3b27c780, sys_net_get_sockinfo); - sys_net.AddFunc(0x44328aa2, sys_net_close_dump); - sys_net.AddFunc(0x4ab0b9b9, sys_net_set_test_param); - sys_net.AddFunc(0x5420e419, sys_net_show_nameserver); - sys_net.AddFunc(0x6005cde1, _sys_net_errno_loc); - sys_net.AddFunc(0x7687d48c, sys_net_set_resolver_configurations); - sys_net.AddFunc(0x79b61646, sys_net_show_route); - sys_net.AddFunc(0x89c9917c, sys_net_read_dump); - sys_net.AddFunc(0x8ccf05ed, sys_net_abort_resolver); - sys_net.AddFunc(0x8d1b77fb, sys_net_abort_socket); - sys_net.AddFunc(0x9a318259, sys_net_set_lib_name_server); - sys_net.AddFunc(0xa5a86557, sys_net_get_test_param); - sys_net.AddFunc(0xa765d029, sys_net_get_sockinfo_ex); - sys_net.AddFunc(0xab447704, sys_net_open_dump); - sys_net.AddFunc(0xb48636c4, sys_net_show_ifconfig); - sys_net.AddFunc(0xb68d5625, sys_net_finalize_network); - sys_net.AddFunc(0xc9157d30, _sys_net_h_errno_loc); - sys_net.AddFunc(0xe2434507, sys_net_set_netemu_test_param); - sys_net.AddFunc(0xfdb8f926, sys_net_free_thread_context); + sys_net->AddFunc(0x139a9e9b, sys_net_initialize_network_ex); + sys_net->AddFunc(0x05bd4438, sys_net_get_udpp2p_test_param); + sys_net->AddFunc(0x10b81ed6, sys_net_set_udpp2p_test_param); + sys_net->AddFunc(0x1d14d6e4, sys_net_get_lib_name_server); + sys_net->AddFunc(0x27fb339d, sys_net_if_ctl); + sys_net->AddFunc(0x368823c0, sys_net_get_netemu_test_param); + sys_net->AddFunc(0x3b27c780, sys_net_get_sockinfo); + sys_net->AddFunc(0x44328aa2, sys_net_close_dump); + sys_net->AddFunc(0x4ab0b9b9, sys_net_set_test_param); + sys_net->AddFunc(0x5420e419, sys_net_show_nameserver); + sys_net->AddFunc(0x6005cde1, _sys_net_errno_loc); + sys_net->AddFunc(0x7687d48c, sys_net_set_resolver_configurations); + sys_net->AddFunc(0x79b61646, sys_net_show_route); + sys_net->AddFunc(0x89c9917c, sys_net_read_dump); + sys_net->AddFunc(0x8ccf05ed, sys_net_abort_resolver); + sys_net->AddFunc(0x8d1b77fb, sys_net_abort_socket); + sys_net->AddFunc(0x9a318259, sys_net_set_lib_name_server); + sys_net->AddFunc(0xa5a86557, sys_net_get_test_param); + sys_net->AddFunc(0xa765d029, sys_net_get_sockinfo_ex); + sys_net->AddFunc(0xab447704, sys_net_open_dump); + sys_net->AddFunc(0xb48636c4, sys_net_show_ifconfig); + sys_net->AddFunc(0xb68d5625, sys_net_finalize_network); + sys_net->AddFunc(0xc9157d30, _sys_net_h_errno_loc); + sys_net->AddFunc(0xe2434507, sys_net_set_netemu_test_param); + sys_net->AddFunc(0xfdb8f926, sys_net_free_thread_context); } diff --git a/rpcs3/Emu/SysCalls/Static.cpp b/rpcs3/Emu/SysCalls/Static.cpp index 789b38aee3..21d70269d3 100644 --- a/rpcs3/Emu/SysCalls/Static.cpp +++ b/rpcs3/Emu/SysCalls/Static.cpp @@ -5,10 +5,9 @@ #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" +#include "Static.h" -extern std::vector g_static_funcs_list; - -void StaticAnalyse(void* ptr, u32 size, u32 base) +void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) { u32* data = (u32*)ptr; size /= 4; @@ -18,13 +17,13 @@ void StaticAnalyse(void* ptr, u32 size, u32 base) // TODO: optimize search for (u32 i = 0; i < size; i++) { - for (u32 j = 0; j < g_static_funcs_list.size(); j++) + for (u32 j = 0; j < m_static_funcs_list.size(); j++) { - if ((data[i] & g_static_funcs_list[j]->ops[0].mask) == g_static_funcs_list[j]->ops[0].crc) + if ((data[i] & m_static_funcs_list[j]->ops[0].mask) == m_static_funcs_list[j]->ops[0].crc) { bool found = true; u32 can_skip = 0; - for (u32 k = i, x = 0; x + 1 <= g_static_funcs_list[j]->ops.size(); k++, x++) + for (u32 k = i, x = 0; x + 1 <= m_static_funcs_list[j]->ops.size(); k++, x++) { if (k >= size) { @@ -39,8 +38,8 @@ void StaticAnalyse(void* ptr, u32 size, u32 base) continue; } - const u32 mask = g_static_funcs_list[j]->ops[x].mask; - const u32 crc = g_static_funcs_list[j]->ops[x].crc; + const u32 mask = m_static_funcs_list[j]->ops[x].mask; + const u32 crc = m_static_funcs_list[j]->ops[x].crc; if (!mask) { @@ -86,8 +85,8 @@ void StaticAnalyse(void* ptr, u32 size, u32 base) } if (found) { - ConLog.Write("Function '%s' hooked (addr=0x%x)", g_static_funcs_list[j]->name, i * 4 + base); - g_static_funcs_list[j]->found++; + ConLog.Write("Function '%s' hooked (addr=0x%x)", m_static_funcs_list[j]->name, i * 4 + base); + m_static_funcs_list[j]->found++; data[i+0] = re32(0x39600000 | j); // li r11, j data[i+1] = se32(0x44000003); // sc 3 data[i+2] = se32(0x4e800020); // blr @@ -98,11 +97,11 @@ void StaticAnalyse(void* ptr, u32 size, u32 base) } // check function groups - for (u32 i = 0; i < g_static_funcs_list.size(); i++) + for (u32 i = 0; i < m_static_funcs_list.size(); i++) { - if (g_static_funcs_list[i]->found) // start from some group + if (m_static_funcs_list[i]->found) // start from some group { - const u64 group = g_static_funcs_list[i]->group; + const u64 group = m_static_funcs_list[i]->group; enum GroupSearchResult : u32 { @@ -113,24 +112,24 @@ void StaticAnalyse(void* ptr, u32 size, u32 base) u32 res = GSR_SUCCESS; // analyse - for (u32 j = 0; j < g_static_funcs_list.size(); j++) if (g_static_funcs_list[j]->group == group) + for (u32 j = 0; j < m_static_funcs_list.size(); j++) if (m_static_funcs_list[j]->group == group) { - u32 count = g_static_funcs_list[j]->found; + u32 count = m_static_funcs_list[j]->found; if (count == 0) // not found { // check if this function has been found with different pattern - for (u32 k = 0; k < g_static_funcs_list.size(); k++) if (g_static_funcs_list[k]->group == group) + for (u32 k = 0; k < m_static_funcs_list.size(); k++) if (m_static_funcs_list[k]->group == group) { - if (k != j && g_static_funcs_list[k]->ptr == g_static_funcs_list[j]->ptr) + if (k != j && m_static_funcs_list[k]->ptr == m_static_funcs_list[j]->ptr) { - count += g_static_funcs_list[k]->found; + count += m_static_funcs_list[k]->found; } } if (count == 0) { res |= GSR_MISSING; - ConLog.Error("Function '%s' not found", g_static_funcs_list[j]->name); + ConLog.Error("Function '%s' not found", m_static_funcs_list[j]->name); } else if (count > 1) { @@ -140,14 +139,14 @@ void StaticAnalyse(void* ptr, u32 size, u32 base) else if (count == 1) // found { // ensure that this function has NOT been found with different pattern - for (u32 k = 0; k < g_static_funcs_list.size(); k++) if (g_static_funcs_list[k]->group == group) + for (u32 k = 0; k < m_static_funcs_list.size(); k++) if (m_static_funcs_list[k]->group == group) { - if (k != j && g_static_funcs_list[k]->ptr == g_static_funcs_list[j]->ptr) + if (k != j && m_static_funcs_list[k]->ptr == m_static_funcs_list[j]->ptr) { - if (g_static_funcs_list[k]->found) + if (m_static_funcs_list[k]->found) { res |= GSR_EXCESS; - ConLog.Error("Function '%s' hooked twice", g_static_funcs_list[j]->name); + ConLog.Error("Function '%s' hooked twice", m_static_funcs_list[j]->name); } } } @@ -155,14 +154,14 @@ void StaticAnalyse(void* ptr, u32 size, u32 base) else { res |= GSR_EXCESS; - ConLog.Error("Function '%s' hooked twice", g_static_funcs_list[j]->name); + ConLog.Error("Function '%s' hooked twice", m_static_funcs_list[j]->name); } } // clear data - for (u32 j = 0; j < g_static_funcs_list.size(); j++) + for (u32 j = 0; j < m_static_funcs_list.size(); j++) { - if (g_static_funcs_list[j]->group == group) g_static_funcs_list[j]->found = 0; + if (m_static_funcs_list[j]->group == group) m_static_funcs_list[j]->found = 0; } char name[9] = "????????"; @@ -183,11 +182,11 @@ void StaticAnalyse(void* ptr, u32 size, u32 base) } } -void StaticExecute(u32 code) +void StaticFuncManager::StaticExecute(u32 code) { - if (code < g_static_funcs_list.size()) + if (code < m_static_funcs_list.size()) { - (*g_static_funcs_list[code]->func)(); + (*m_static_funcs_list[code]->func)(); } else { @@ -195,7 +194,26 @@ void StaticExecute(u32 code) } } -void StaticFinalize() +void StaticFuncManager::StaticFinalize() { - g_static_funcs_list.clear(); + m_static_funcs_list.clear(); } + +void StaticFuncManager::push_back(SFunc *ele) +{ + m_static_funcs_list.push_back(ele); +} + +SFunc *StaticFuncManager::operator[](size_t i) +{ + return m_static_funcs_list[i]; +} + +StaticFuncManager::~StaticFuncManager() +{ + for (SFunc *s : m_static_funcs_list) + { + delete s; + } +} + diff --git a/rpcs3/Emu/SysCalls/Static.h b/rpcs3/Emu/SysCalls/Static.h new file mode 100644 index 0000000000..9050ed8b80 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Static.h @@ -0,0 +1,15 @@ +#pragma once + +class SFunc; + +class StaticFuncManager +{ + std::vector m_static_funcs_list; +public: + void StaticAnalyse(void* ptr, u32 size, u32 base); + void StaticExecute(u32 code); + void StaticFinalize(); + void push_back(SFunc *ele); + SFunc *operator[](size_t i); + ~StaticFuncManager(); +}; diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 6018e36d1a..7ee82b5eb5 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -5,6 +5,7 @@ #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" +#include "ModuleManager.h" namespace detail{ template<> bool CheckId(u32 id, ID*& _id,const std::string &name) @@ -576,7 +577,7 @@ void SysCalls::DoSyscall(u32 code) return; } - if(CallFunc(code)) + if(Emu.GetModuleManager().CallFunc(code)) { return; } diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 57ed2e7f0d..57dc717219 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -12,6 +12,7 @@ #include "lv2/SC_Condition.h" #include "lv2/SC_Spinlock.h" #include "Emu/event.h" +#include "Static.h" //#define SYSCALLS_DEBUG #define declCPU PPUThread& CPU = GetCurrentPPUThread @@ -413,7 +414,7 @@ extern int sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 a3); extern int sys_rsx_device_unmap(); extern int sys_rsx_attribute(); -#define UNIMPLEMENTED_FUNC(module) module.Error("Unimplemented function: %s", __FUNCTION__) +#define UNIMPLEMENTED_FUNC(module) module->Error("Unimplemented function: %s", __FUNCTION__) #define SC_ARG_0 CPU.GPR[3] #define SC_ARG_1 CPU.GPR[4] @@ -456,16 +457,12 @@ public: //extern SysCalls SysCallsManager; -void StaticAnalyse(void* ptr, u32 size, u32 base); -void StaticExecute(u32 code); -void StaticFinalize(); - #define REG_SUB(module, group, name, ...) \ static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ - module.AddFuncSub(group, name ## _table, #name, name) + module->AddFuncSub(group, name ## _table, #name, name) #define REG_SUB_EMPTY(module, group, name,...) \ static const u64 name ## _table[] = {0}; \ - module.AddFuncSub(group, name ## _table, #name, name) + module->AddFuncSub(group, name ## _table, #name, name) extern u64 get_system_time(); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp index 921f135fb4..841b9651cf 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp @@ -11,7 +11,7 @@ #include "SC_FileSystem.h" #include "Emu/SysCalls/SysCalls.h" -extern Module sys_fs; +extern Module *sys_fs; enum { @@ -55,7 +55,7 @@ struct FsRingBufferConfig int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) { const std::string& path = Memory.ReadString(path_addr); - sys_fs.Log("cellFsOpen(path=\"%s\", flags=0x%x, fd_addr=0x%x, arg_addr=0x%x, size=0x%llx)", + sys_fs->Log("cellFsOpen(path=\"%s\", flags=0x%x, fd_addr=0x%x, arg_addr=0x%x, size=0x%llx)", path.c_str(), flags, fd.GetAddr(), arg.GetAddr(), size); const std::string& ppath = path; @@ -112,7 +112,7 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) if(_oflags != 0) { - sys_fs.Error("\"%s\" has unknown flags! flags: 0x%08x", ppath.c_str(), flags); + sys_fs->Error("\"%s\" has unknown flags! flags: 0x%08x", ppath.c_str(), flags); return CELL_EINVAL; } @@ -121,11 +121,11 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) if(!stream || !stream->IsOpened()) { delete stream; - sys_fs.Error("\"%s\" not found! flags: 0x%08x", ppath.c_str(), flags); + sys_fs->Error("\"%s\" not found! flags: 0x%08x", ppath.c_str(), flags); return CELL_ENOENT; } - fd = sys_fs.GetNewId(stream, IDFlag_File); + fd = sys_fs->GetNewId(stream, IDFlag_File); ConLog.Warning("*** cellFsOpen(path=\"%s\"): fd = %d", path.c_str(), fd.GetValue()); return CELL_OK; @@ -133,10 +133,10 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) int cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread) { - sys_fs.Log("cellFsRead(fd=%d, buf_addr=0x%x, nbytes=0x%llx, nread_addr=0x%x)", + sys_fs->Log("cellFsRead(fd=%d, buf_addr=0x%x, nbytes=0x%llx, nread_addr=0x%x)", fd, buf_addr, nbytes, nread.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; if (nread.GetAddr() && !nread.IsGood()) return CELL_EFAULT; @@ -181,10 +181,10 @@ fin: int cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite) { - sys_fs.Log("cellFsWrite(fd=%d, buf_addr=0x%x, nbytes=0x%llx, nwrite_addr=0x%x)", + sys_fs->Log("cellFsWrite(fd=%d, buf_addr=0x%x, nbytes=0x%llx, nwrite_addr=0x%x)", fd, buf_addr, nbytes, nwrite.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; if(Memory.IsGoodAddr(buf_addr) && !Memory.IsGoodAddr(buf_addr, nbytes)) { @@ -202,7 +202,7 @@ int cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite) int cellFsClose(u32 fd) { - sys_fs.Warning("cellFsClose(fd=%d)", fd); + sys_fs->Warning("cellFsClose(fd=%d)", fd); if(!Emu.GetIdManager().RemoveID(fd)) return CELL_ESRCH; @@ -213,7 +213,7 @@ int cellFsClose(u32 fd) int cellFsOpendir(u32 path_addr, mem32_t fd) { const std::string& path = Memory.ReadString(path_addr); - sys_fs.Warning("cellFsOpendir(path=\"%s\", fd_addr=0x%x)", path.c_str(), fd.GetAddr()); + sys_fs->Warning("cellFsOpendir(path=\"%s\", fd_addr=0x%x)", path.c_str(), fd.GetAddr()); if(!Memory.IsGoodAddr(path_addr) || !fd.IsGood()) return CELL_EFAULT; @@ -225,16 +225,16 @@ int cellFsOpendir(u32 path_addr, mem32_t fd) return CELL_ENOENT; } - fd = sys_fs.GetNewId(dir, IDFlag_Dir); + fd = sys_fs->GetNewId(dir, IDFlag_Dir); return CELL_OK; } int cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread) { - sys_fs.Log("cellFsReaddir(fd=%d, dir_addr=0x%x, nread_addr=0x%x)", fd, dir.GetAddr(), nread.GetAddr()); + sys_fs->Log("cellFsReaddir(fd=%d, dir_addr=0x%x, nread_addr=0x%x)", fd, dir.GetAddr(), nread.GetAddr()); vfsDirBase* directory; - if(!sys_fs.CheckId(fd, directory)) + if(!sys_fs->CheckId(fd, directory)) return CELL_ESRCH; if(!dir.IsGood() || !nread.IsGood()) return CELL_EFAULT; @@ -257,7 +257,7 @@ int cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread) int cellFsClosedir(u32 fd) { - sys_fs.Log("cellFsClosedir(fd=%d)", fd); + sys_fs->Log("cellFsClosedir(fd=%d)", fd); if(!Emu.GetIdManager().RemoveID(fd)) return CELL_ESRCH; @@ -268,7 +268,7 @@ int cellFsClosedir(u32 fd) int cellFsStat(const u32 path_addr, mem_ptr_t sb) { const std::string& path = Memory.ReadString(path_addr); - sys_fs.Log("cellFsStat(path=\"%s\", sb_addr: 0x%x)", path.c_str(), sb.GetAddr()); + sys_fs->Log("cellFsStat(path=\"%s\", sb_addr: 0x%x)", path.c_str(), sb.GetAddr()); sb->st_mode = CELL_FS_S_IRUSR | CELL_FS_S_IWUSR | CELL_FS_S_IXUSR | @@ -301,17 +301,17 @@ int cellFsStat(const u32 path_addr, mem_ptr_t sb) } } - sys_fs.Warning("cellFsStat: \"%s\" not found.", path.c_str()); + sys_fs->Warning("cellFsStat: \"%s\" not found.", path.c_str()); return CELL_ENOENT; } int cellFsFstat(u32 fd, mem_ptr_t sb) { - sys_fs.Log("cellFsFstat(fd=%d, sb_addr: 0x%x)", fd, sb.GetAddr()); + sys_fs->Log("cellFsFstat(fd=%d, sb_addr: 0x%x)", fd, sb.GetAddr()); u32 attr; vfsStream* file; - if(!sys_fs.CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; sb->st_mode = CELL_FS_S_IRUSR | CELL_FS_S_IWUSR | CELL_FS_S_IXUSR | @@ -333,7 +333,7 @@ int cellFsFstat(u32 fd, mem_ptr_t sb) int cellFsMkdir(u32 path_addr, u32 mode) { const std::string& ps3_path = Memory.ReadString(path_addr); - sys_fs.Log("cellFsMkdir(path=\"%s\", mode=0x%x)", ps3_path.c_str(), mode); + sys_fs->Log("cellFsMkdir(path=\"%s\", mode=0x%x)", ps3_path.c_str(), mode); /*vfsDir dir; if(dir.IsExists(ps3_path)) @@ -382,7 +382,7 @@ int cellFsRename(u32 from_addr, u32 to_addr) int cellFsRmdir(u32 path_addr) { const std::string& ps3_path = Memory.ReadString(path_addr); - sys_fs.Log("cellFsRmdir(path=\"%s\")", ps3_path.c_str()); + sys_fs->Log("cellFsRmdir(path=\"%s\")", ps3_path.c_str()); vfsDir d; if(!d.IsExists(ps3_path)) @@ -397,7 +397,7 @@ int cellFsRmdir(u32 path_addr) int cellFsUnlink(u32 path_addr) { const std::string& ps3_path = Memory.ReadString(path_addr); - sys_fs.Warning("cellFsUnlink(path=\"%s\")", ps3_path.c_str()); + sys_fs->Warning("cellFsUnlink(path=\"%s\")", ps3_path.c_str()); if (ps3_path.empty()) return CELL_EFAULT; @@ -417,30 +417,30 @@ int cellFsUnlink(u32 path_addr) int cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos) { vfsSeekMode seek_mode; - sys_fs.Log("cellFsLseek(fd=%d, offset=0x%llx, whence=0x%x, pos_addr=0x%x)", fd, offset, whence, pos.GetAddr()); + sys_fs->Log("cellFsLseek(fd=%d, offset=0x%llx, whence=0x%x, pos_addr=0x%x)", fd, offset, whence, pos.GetAddr()); switch(whence) { case CELL_SEEK_SET: seek_mode = vfsSeekSet; break; case CELL_SEEK_CUR: seek_mode = vfsSeekCur; break; case CELL_SEEK_END: seek_mode = vfsSeekEnd; break; default: - sys_fs.Error(fd, "Unknown seek whence! (0x%x)", whence); + sys_fs->Error(fd, "Unknown seek whence! (0x%x)", whence); return CELL_EINVAL; } u32 attr; vfsStream* file; - if(!sys_fs.CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; pos = file->Seek(offset, seek_mode); return CELL_OK; } int cellFsFtruncate(u32 fd, u64 size) { - sys_fs.Log("cellFsFtruncate(fd=%d, size=%lld)", fd, size); + sys_fs->Log("cellFsFtruncate(fd=%d, size=%lld)", fd, size); u32 attr; vfsStream* file; - if(!sys_fs.CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; u64 initialSize = file->GetSize(); if (initialSize < size) @@ -464,12 +464,12 @@ int cellFsFtruncate(u32 fd, u64 size) int cellFsTruncate(u32 path_addr, u64 size) { const std::string& path = Memory.ReadString(path_addr); - sys_fs.Log("cellFsTruncate(path=\"%s\", size=%lld)", path.c_str(), size); + sys_fs->Log("cellFsTruncate(path=\"%s\", size=%lld)", path.c_str(), size); vfsFile f(path, vfsReadWrite); if(!f.IsOpened()) { - sys_fs.Warning("cellFsTruncate: \"%s\" not found.", path.c_str()); + sys_fs->Warning("cellFsTruncate: \"%s\" not found.", path.c_str()); return CELL_ENOENT; } u64 initialSize = f.GetSize(); @@ -494,10 +494,10 @@ int cellFsTruncate(u32 path_addr, u64 size) int cellFsFGetBlockSize(u32 fd, mem64_t sector_size, mem64_t block_size) { - sys_fs.Log("cellFsFGetBlockSize(fd=%d, sector_size_addr: 0x%x, block_size_addr: 0x%x)", fd, sector_size.GetAddr(), block_size.GetAddr()); + sys_fs->Log("cellFsFGetBlockSize(fd=%d, sector_size_addr: 0x%x, block_size_addr: 0x%x)", fd, sector_size.GetAddr(), block_size.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; sector_size = 4096; // ? block_size = 4096; // ? @@ -507,7 +507,7 @@ int cellFsFGetBlockSize(u32 fd, mem64_t sector_size, mem64_t block_size) int cellFsGetBlockSize(u32 path_addr, mem64_t sector_size, mem64_t block_size) { - sys_fs.Log("cellFsGetBlockSize(file: %s, sector_size_addr: 0x%x, block_size_addr: 0x%x)", Memory.ReadString(path_addr).c_str(), sector_size.GetAddr(), block_size.GetAddr()); + sys_fs->Log("cellFsGetBlockSize(file: %s, sector_size_addr: 0x%x, block_size_addr: 0x%x)", Memory.ReadString(path_addr).c_str(), sector_size.GetAddr(), block_size.GetAddr()); sector_size = 4096; // ? block_size = 4096; // ? @@ -518,7 +518,7 @@ int cellFsGetBlockSize(u32 path_addr, mem64_t sector_size, mem64_t block_size) int cellFsGetFreeSize(u32 path_addr, mem32_t block_size, mem64_t block_count) { const std::string& ps3_path = Memory.ReadString(path_addr); - sys_fs.Warning("cellFsGetFreeSize(path=\"%s\", block_size_addr=0x%x, block_count_addr=0x%x)", + sys_fs->Warning("cellFsGetFreeSize(path=\"%s\", block_size_addr=0x%x, block_count_addr=0x%x)", ps3_path.c_str(), block_size.GetAddr(), block_count.GetAddr()); if (!Memory.IsGoodAddr(path_addr) || !block_size.IsGood() || !block_count.IsGood()) @@ -536,10 +536,10 @@ int cellFsGetFreeSize(u32 path_addr, mem32_t block_size, mem64_t block_count) int cellFsGetDirectoryEntries(u32 fd, mem_ptr_t entries, u32 entries_size, mem32_t data_count) { - sys_fs.Log("cellFsGetDirectoryEntries(fd=%d, entries_addr=0x%x, entries_size = 0x%x, data_count_addr=0x%x)", fd, entries.GetAddr(), entries_size, data_count.GetAddr()); + sys_fs->Log("cellFsGetDirectoryEntries(fd=%d, entries_addr=0x%x, entries_size = 0x%x, data_count_addr=0x%x)", fd, entries.GetAddr(), entries_size, data_count.GetAddr()); vfsDirBase* directory; - if(!sys_fs.CheckId(fd, directory)) + if(!sys_fs->CheckId(fd, directory)) return CELL_ESRCH; if(!entries.IsGood() || !data_count.IsGood()) return CELL_EFAULT; @@ -574,10 +574,10 @@ int cellFsGetDirectoryEntries(u32 fd, mem_ptr_t entries, u int cellFsStReadInit(u32 fd, mem_ptr_t ringbuf) { - sys_fs.Warning("cellFsStReadInit(fd=%d, ringbuf_addr=0x%x)", fd, ringbuf.GetAddr()); + sys_fs->Warning("cellFsStReadInit(fd=%d, ringbuf_addr=0x%x)", fd, ringbuf.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; if(!ringbuf.IsGood()) return CELL_EFAULT; @@ -604,10 +604,10 @@ int cellFsStReadInit(u32 fd, mem_ptr_t ringbuf) int cellFsStReadFinish(u32 fd) { - sys_fs.Warning("cellFsStReadFinish(fd=%d)", fd); + sys_fs->Warning("cellFsStReadFinish(fd=%d)", fd); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; Memory.Free(m_fs_config.m_buffer); m_fs_config.m_fs_status = CELL_FS_ST_NOT_INITIALIZED; @@ -617,10 +617,10 @@ int cellFsStReadFinish(u32 fd) int cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf) { - sys_fs.Warning("cellFsStReadGetRingBuf(fd=%d, ringbuf_addr=0x%x)", fd, ringbuf.GetAddr()); + sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, ringbuf_addr=0x%x)", fd, ringbuf.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; if(!ringbuf.IsGood()) return CELL_EFAULT; @@ -632,17 +632,17 @@ int cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf) ringbuf->ringbuf_size = buffer.m_ringbuf_size; ringbuf->transfer_rate = buffer.m_transfer_rate; - sys_fs.Warning("*** fs stream config: block_size=0x%llx, copy=%d, ringbuf_size = 0x%llx, transfer_rate = 0x%llx", ringbuf->block_size, ringbuf->copy, + sys_fs->Warning("*** fs stream config: block_size=0x%llx, copy=%d, ringbuf_size = 0x%llx, transfer_rate = 0x%llx", ringbuf->block_size, ringbuf->copy, ringbuf->ringbuf_size, ringbuf->transfer_rate); return CELL_OK; } int cellFsStReadGetStatus(u32 fd, mem64_t status) { - sys_fs.Warning("cellFsStReadGetRingBuf(fd=%d, status_addr=0x%x)", fd, status.GetAddr()); + sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, status_addr=0x%x)", fd, status.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; status = m_fs_config.m_fs_status; @@ -651,10 +651,10 @@ int cellFsStReadGetStatus(u32 fd, mem64_t status) int cellFsStReadGetRegid(u32 fd, mem64_t regid) { - sys_fs.Warning("cellFsStReadGetRingBuf(fd=%d, regid_addr=0x%x)", fd, regid.GetAddr()); + sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, regid_addr=0x%x)", fd, regid.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; regid = m_fs_config.m_regid; @@ -663,10 +663,10 @@ int cellFsStReadGetRegid(u32 fd, mem64_t regid) int cellFsStReadStart(u32 fd, u64 offset, u64 size) { - sys_fs.Warning("TODO: cellFsStReadStart(fd=%d, offset=0x%llx, size=0x%llx)", fd, offset, size); + sys_fs->Warning("TODO: cellFsStReadStart(fd=%d, offset=0x%llx, size=0x%llx)", fd, offset, size); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; m_fs_config.m_current_addr = m_fs_config.m_buffer + (u32)offset; m_fs_config.m_fs_status = CELL_FS_ST_PROGRESS; @@ -676,10 +676,10 @@ int cellFsStReadStart(u32 fd, u64 offset, u64 size) int cellFsStReadStop(u32 fd) { - sys_fs.Warning("cellFsStReadStop(fd=%d)", fd); + sys_fs->Warning("cellFsStReadStop(fd=%d)", fd); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; m_fs_config.m_fs_status = CELL_FS_ST_STOP; @@ -688,10 +688,10 @@ int cellFsStReadStop(u32 fd) int cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) { - sys_fs.Warning("TODO: cellFsStRead(fd=%d, buf_addr=0x%x, size=0x%llx, rsize_addr = 0x%x)", fd, buf_addr, size, rsize.GetAddr()); + sys_fs->Warning("TODO: cellFsStRead(fd=%d, buf_addr=0x%x, size=0x%llx, rsize_addr = 0x%x)", fd, buf_addr, size, rsize.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; if (rsize.GetAddr() && !rsize.IsGood()) return CELL_EFAULT; @@ -703,10 +703,10 @@ int cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) int cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size) { - sys_fs.Warning("TODO: cellFsStReadGetCurrentAddr(fd=%d, addr_addr=0x%x, size_addr = 0x%x)", fd, addr_addr.GetAddr(), size.GetAddr()); + sys_fs->Warning("TODO: cellFsStReadGetCurrentAddr(fd=%d, addr_addr=0x%x, size_addr = 0x%x)", fd, addr_addr.GetAddr(), size.GetAddr()); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; if (!addr_addr.IsGood() && !size.IsGood()) return CELL_EFAULT; @@ -715,10 +715,10 @@ int cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size) int cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) { - sys_fs.Warning("TODO: cellFsStReadPutCurrentAddr(fd=%d, addr_addr=0x%x, size = 0x%llx)", fd, addr_addr, size); + sys_fs->Warning("TODO: cellFsStReadPutCurrentAddr(fd=%d, addr_addr=0x%x, size = 0x%llx)", fd, addr_addr, size); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; if (!Memory.IsGoodAddr(addr_addr)) return CELL_EFAULT; @@ -727,23 +727,23 @@ int cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) int cellFsStReadWait(u32 fd, u64 size) { - sys_fs.Warning("TODO: cellFsStReadWait(fd=%d, size = 0x%llx)", fd, size); + sys_fs->Warning("TODO: cellFsStReadWait(fd=%d, size = 0x%llx)", fd, size); vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; return CELL_OK; } int cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_t func) { - sys_fs.Warning("TODO: cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.GetAddr()); + sys_fs->Warning("TODO: cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.GetAddr()); if (!func.IsGood()) return CELL_EFAULT; vfsStream* file; - if(!sys_fs.CheckId(fd, file)) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; return CELL_OK; } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp index f0fd45d1cb..2a88871912 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp @@ -8,7 +8,7 @@ #include "Emu/Io/Keyboard.h" #include "Emu/SysCalls/SysCalls.h" -extern Module sys_io; +extern Module *sys_io; enum CELL_KB_ERROR_CODE { @@ -24,7 +24,7 @@ enum CELL_KB_ERROR_CODE int cellKbInit(u32 max_connect) { - sys_io.Log("cellKbInit(max_connect=%d)", max_connect); + sys_io->Log("cellKbInit(max_connect=%d)", max_connect); if(Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_ALREADY_INITIALIZED; if(max_connect > 7) return CELL_KB_ERROR_INVALID_PARAMETER; @@ -34,7 +34,7 @@ int cellKbInit(u32 max_connect) int cellKbEnd() { - sys_io.Log("cellKbEnd()"); + sys_io->Log("cellKbEnd()"); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; Emu.GetKeyboardManager().Close(); return CELL_OK; @@ -42,7 +42,7 @@ int cellKbEnd() int cellKbClearBuf(u32 port_no) { - sys_io.Log("cellKbClearBuf(port_no=%d)", port_no); + sys_io->Log("cellKbClearBuf(port_no=%d)", port_no); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; if(port_no >= Emu.GetKeyboardManager().GetKeyboards().size()) return CELL_KB_ERROR_INVALID_PARAMETER; @@ -53,7 +53,7 @@ int cellKbClearBuf(u32 port_no) u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode) { - sys_io.Log("cellKbCnvRawCode(arrange=%d,mkey=%d,led=%d,rawcode=%d)", arrange, mkey, led, rawcode); + sys_io->Log("cellKbCnvRawCode(arrange=%d,mkey=%d,led=%d,rawcode=%d)", arrange, mkey, led, rawcode); // CELL_KB_RAWDAT if ((rawcode >= 0x00 && rawcode <= 0x03) || rawcode == 0x29 || rawcode == 0x35 || @@ -101,7 +101,7 @@ u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode) int cellKbGetInfo(mem_class_t info) { - sys_io.Log("cellKbGetInfo(info_addr=0x%x)", info.GetAddr()); + sys_io->Log("cellKbGetInfo(info_addr=0x%x)", info.GetAddr()); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; const KbInfo& current_info = Emu.GetKeyboardManager().GetInfo(); @@ -118,7 +118,7 @@ int cellKbGetInfo(mem_class_t info) int cellKbRead(u32 port_no, mem_class_t data) { - sys_io.Log("cellKbRead(port_no=%d,info_addr=0x%x)", port_no, data.GetAddr()); + sys_io->Log("cellKbRead(port_no=%d,info_addr=0x%x)", port_no, data.GetAddr()); const std::vector& keyboards = Emu.GetKeyboardManager().GetKeyboards(); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; @@ -140,7 +140,7 @@ int cellKbRead(u32 port_no, mem_class_t data) int cellKbSetCodeType(u32 port_no, u32 type) { - sys_io.Log("cellKbSetCodeType(port_no=%d,type=%d)", port_no, type); + sys_io->Log("cellKbSetCodeType(port_no=%d,type=%d)", port_no, type); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); @@ -156,7 +156,7 @@ int cellKbSetLEDStatus(u32 port_no, u8 led) int cellKbSetReadMode(u32 port_no, u32 rmode) { - sys_io.Log("cellKbSetReadMode(port_no=%d,rmode=%d)", port_no, rmode); + sys_io->Log("cellKbSetReadMode(port_no=%d,rmode=%d)", port_no, rmode); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); @@ -167,7 +167,7 @@ int cellKbSetReadMode(u32 port_no, u32 rmode) int cellKbGetConfiguration(u32 port_no, mem_class_t config) { - sys_io.Log("cellKbGetConfiguration(port_no=%d,config_addr=0x%x)", port_no, config.GetAddr()); + sys_io->Log("cellKbGetConfiguration(port_no=%d,config_addr=0x%x)", port_no, config.GetAddr()); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; const CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp index 3e8846c2d6..bf409e6748 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp @@ -8,7 +8,7 @@ #include "Emu/Io/Mouse.h" #include "Emu/SysCalls/SysCalls.h" -extern Module sys_io; +extern Module *sys_io; enum CELL_MOUSE_ERROR_CODE { @@ -24,7 +24,7 @@ enum CELL_MOUSE_ERROR_CODE int cellMouseInit(u32 max_connect) { - sys_io.Log("cellMouseInit(max_connect=%d)", max_connect); + sys_io->Log("cellMouseInit(max_connect=%d)", max_connect); if(Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_ALREADY_INITIALIZED; if(max_connect > 7) return CELL_MOUSE_ERROR_INVALID_PARAMETER; @@ -35,7 +35,7 @@ int cellMouseInit(u32 max_connect) int cellMouseClearBuf(u32 port_no) { - sys_io.Log("cellMouseClearBuf(port_no=%d)", port_no); + sys_io->Log("cellMouseClearBuf(port_no=%d)", port_no); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; if(port_no >= Emu.GetMouseManager().GetMice().size()) return CELL_MOUSE_ERROR_INVALID_PARAMETER; @@ -46,7 +46,7 @@ int cellMouseClearBuf(u32 port_no) int cellMouseEnd() { - sys_io.Log("cellMouseEnd()"); + sys_io->Log("cellMouseEnd()"); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; Emu.GetMouseManager().Close(); return CELL_OK; @@ -54,7 +54,7 @@ int cellMouseEnd() int cellMouseGetInfo(mem_class_t info) { - sys_io.Log("cellMouseGetInfo(info_addr=0x%x)", info.GetAddr()); + sys_io->Log("cellMouseGetInfo(info_addr=0x%x)", info.GetAddr()); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; const MouseInfo& current_info = Emu.GetMouseManager().GetInfo(); @@ -70,7 +70,7 @@ int cellMouseGetInfo(mem_class_t info) int cellMouseInfoTabletMode(u32 port_no, mem_class_t info) { - sys_io.Log("cellMouseInfoTabletMode(port_no=%d,info_addr=0x%x)", port_no, info.GetAddr()); + sys_io->Log("cellMouseInfoTabletMode(port_no=%d,info_addr=0x%x)", port_no, info.GetAddr()); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; if(port_no >= Emu.GetMouseManager().GetMice().size()) return CELL_MOUSE_ERROR_INVALID_PARAMETER; @@ -82,7 +82,7 @@ int cellMouseInfoTabletMode(u32 port_no, mem_class_t info) int cellMouseGetData(u32 port_no, mem_class_t data) { - sys_io.Log("cellMouseGetData(port_no=%d,data_addr=0x%x)", port_no, data.GetAddr()); + sys_io->Log("cellMouseGetData(port_no=%d,data_addr=0x%x)", port_no, data.GetAddr()); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; if(port_no >= Emu.GetMouseManager().GetMice().size()) return CELL_MOUSE_ERROR_NO_DEVICE; @@ -127,7 +127,7 @@ int cellMouseGetRawData(u32 port_no, mem_class_t data) { UNIMPLEMENTED_FUNC(sys_io); - /*sys_io.Log("cellMouseGetRawData(port_no=%d,data_addr=0x%x)", port_no, data.GetAddr()); + /*sys_io->Log("cellMouseGetRawData(port_no=%d,data_addr=0x%x)", port_no, data.GetAddr()); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; if(port_no >= Emu.GetMouseManager().GetMice().size()) return CELL_MOUSE_ERROR_NO_DEVICE; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp index 1c8a82e4c6..c383dae656 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp @@ -7,7 +7,7 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" -extern Module sysPrxForUser; +extern Module *sysPrxForUser; static const u32 PPU_THREAD_ID_INVALID = 0xFFFFFFFFU; enum @@ -18,7 +18,7 @@ enum void sys_ppu_thread_exit(u64 errorcode) { - sysPrxForUser.Log("sys_ppu_thread_exit(0x%llx)", errorcode); + sysPrxForUser->Log("sys_ppu_thread_exit(0x%llx)", errorcode); PPUThread& thr = GetCurrentPPUThread(); u32 tid = thr.GetId(); @@ -35,14 +35,14 @@ void sys_ppu_thread_exit(u64 errorcode) int sys_ppu_thread_yield() { - sysPrxForUser.Log("sys_ppu_thread_yield()"); + sysPrxForUser->Log("sys_ppu_thread_yield()"); Sleep(1); return CELL_OK; } int sys_ppu_thread_join(u32 thread_id, mem64_t vptr) { - sysPrxForUser.Warning("sys_ppu_thread_join(thread_id=%d, vptr_addr=0x%x)", thread_id, vptr.GetAddr()); + sysPrxForUser->Warning("sys_ppu_thread_join(thread_id=%d, vptr_addr=0x%x)", thread_id, vptr.GetAddr()); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -63,7 +63,7 @@ int sys_ppu_thread_join(u32 thread_id, mem64_t vptr) int sys_ppu_thread_detach(u32 thread_id) { - sysPrxForUser.Error("sys_ppu_thread_detach(thread_id=%d)", thread_id); + sysPrxForUser->Error("sys_ppu_thread_detach(thread_id=%d)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -77,13 +77,13 @@ int sys_ppu_thread_detach(u32 thread_id) void sys_ppu_thread_get_join_state(u32 isjoinable_addr) { - sysPrxForUser.Warning("sys_ppu_thread_get_join_state(isjoinable_addr=0x%x)", isjoinable_addr); + sysPrxForUser->Warning("sys_ppu_thread_get_join_state(isjoinable_addr=0x%x)", isjoinable_addr); Memory.Write32(isjoinable_addr, GetCurrentPPUThread().IsJoinable()); } int sys_ppu_thread_set_priority(u32 thread_id, int prio) { - sysPrxForUser.Warning("sys_ppu_thread_set_priority(thread_id=%d, prio=%d)", thread_id, prio); + sysPrxForUser->Warning("sys_ppu_thread_set_priority(thread_id=%d, prio=%d)", thread_id, prio); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -95,7 +95,7 @@ int sys_ppu_thread_set_priority(u32 thread_id, int prio) int sys_ppu_thread_get_priority(u32 thread_id, u32 prio_addr) { - sysPrxForUser.Log("sys_ppu_thread_get_priority(thread_id=%d, prio_addr=0x%x)", thread_id, prio_addr); + sysPrxForUser->Log("sys_ppu_thread_get_priority(thread_id=%d, prio_addr=0x%x)", thread_id, prio_addr); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -108,7 +108,7 @@ int sys_ppu_thread_get_priority(u32 thread_id, u32 prio_addr) int sys_ppu_thread_get_stack_information(u32 info_addr) { - sysPrxForUser.Log("sys_ppu_thread_get_stack_information(info_addr=0x%x)", info_addr); + sysPrxForUser->Log("sys_ppu_thread_get_stack_information(info_addr=0x%x)", info_addr); if(!Memory.IsGoodAddr(info_addr)) return CELL_EFAULT; @@ -122,7 +122,7 @@ int sys_ppu_thread_get_stack_information(u32 info_addr) int sys_ppu_thread_stop(u32 thread_id) { - sysPrxForUser.Warning("sys_ppu_thread_stop(thread_id=%d)", thread_id); + sysPrxForUser->Warning("sys_ppu_thread_stop(thread_id=%d)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -134,7 +134,7 @@ int sys_ppu_thread_stop(u32 thread_id) int sys_ppu_thread_restart(u32 thread_id) { - sysPrxForUser.Warning("sys_ppu_thread_restart(thread_id=%d)", thread_id); + sysPrxForUser->Warning("sys_ppu_thread_restart(thread_id=%d)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -147,7 +147,7 @@ int sys_ppu_thread_restart(u32 thread_id) int sys_ppu_thread_create(u32 thread_id_addr, u32 entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr) { - sysPrxForUser.Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", + sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", thread_id_addr, entry, arg, prio, stacksize, flags, threadname_addr, Memory.ReadString(threadname_addr).c_str()); if(!Memory.IsGoodAddr(entry) || !Memory.IsGoodAddr(thread_id_addr) || !Memory.IsGoodAddr(threadname_addr)) @@ -175,7 +175,7 @@ int sys_ppu_thread_create(u32 thread_id_addr, u32 entry, u64 arg, int prio, u32 void sys_ppu_thread_once(u32 once_ctrl_addr, u32 entry) { - sysPrxForUser.Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, entry=0x%x)", once_ctrl_addr, entry); + sysPrxForUser->Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, entry=0x%x)", once_ctrl_addr, entry); if(Memory.IsGoodAddr(once_ctrl_addr, 4) && Memory.Read32(once_ctrl_addr) == SYS_PPU_THREAD_ONCE_INIT) { @@ -192,7 +192,7 @@ void sys_ppu_thread_once(u32 once_ctrl_addr, u32 entry) int sys_ppu_thread_get_id(const u32 id_addr) { - sysPrxForUser.Log("sys_ppu_thread_get_id(id_addr=0x%x)", id_addr); + sysPrxForUser->Log("sys_ppu_thread_get_id(id_addr=0x%x)", id_addr); Memory.Write64(id_addr, GetCurrentPPUThread().GetId()); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp index dead7e5e58..79467d519e 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp @@ -8,7 +8,7 @@ #include "Emu/Io/Pad.h" #include "Emu/SysCalls/SysCalls.h" -extern Module sys_io; +extern Module *sys_io; enum CELL_PAD_ERROR_CODE { @@ -58,7 +58,7 @@ struct CellCapabilityInfo int cellPadInit(u32 max_connect) { - sys_io.Log("cellPadInit(max_connect=%d)", max_connect); + sys_io->Log("cellPadInit(max_connect=%d)", max_connect); if(Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_ALREADY_INITIALIZED; if (max_connect > CELL_PAD_MAX_PORT_NUM) return CELL_PAD_ERROR_INVALID_PARAMETER; Emu.GetPadManager().Init(max_connect); @@ -67,7 +67,7 @@ int cellPadInit(u32 max_connect) int cellPadEnd() { - sys_io.Log("cellPadEnd()"); + sys_io->Log("cellPadEnd()"); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; Emu.GetPadManager().Close(); return CELL_OK; @@ -75,7 +75,7 @@ int cellPadEnd() int cellPadClearBuf(u32 port_no) { - sys_io.Log("cellPadClearBuf(port_no=%d)", port_no); + sys_io->Log("cellPadClearBuf(port_no=%d)", port_no); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); if (port_no >= rinfo.max_connect) return CELL_PAD_ERROR_INVALID_PARAMETER; @@ -104,7 +104,7 @@ int cellPadClearBuf(u32 port_no) int cellPadGetData(u32 port_no, u32 data_addr) { - sys_io.Log("cellPadGetData[port_no: %d, data_addr: 0x%x]", port_no, data_addr); + sys_io->Log("cellPadGetData[port_no: %d, data_addr: 0x%x]", port_no, data_addr); std::vector& pads = Emu.GetPadManager().GetPads(); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); @@ -279,7 +279,7 @@ int cellPadGetData(u32 port_no, u32 data_addr) int cellPadGetDataExtra(u32 port_no, u32 device_type_addr, u32 data_addr) { - sys_io.Log("cellPadGetDataExtra(port_no=%d, device_type_addr=0x%x, device_type_addr=0x%x)", port_no, device_type_addr, data_addr); + sys_io->Log("cellPadGetDataExtra(port_no=%d, device_type_addr=0x%x, device_type_addr=0x%x)", port_no, device_type_addr, data_addr); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); if (port_no >= rinfo.max_connect) return CELL_PAD_ERROR_INVALID_PARAMETER; @@ -290,7 +290,7 @@ int cellPadGetDataExtra(u32 port_no, u32 device_type_addr, u32 data_addr) int cellPadSetActDirect(u32 port_no, u32 param_addr) { - sys_io.Log("cellPadSetActDirect(port_no=%d, param_addr=0x%x)", port_no, param_addr); + sys_io->Log("cellPadSetActDirect(port_no=%d, param_addr=0x%x)", port_no, param_addr); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); if (port_no >= rinfo.max_connect) return CELL_PAD_ERROR_INVALID_PARAMETER; @@ -301,7 +301,7 @@ int cellPadSetActDirect(u32 port_no, u32 param_addr) int cellPadGetInfo(u32 info_addr) { - sys_io.Log("cellPadGetInfo(info_addr=0x%x)", info_addr); + sys_io->Log("cellPadGetInfo(info_addr=0x%x)", info_addr); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; CellPadInfo info; @@ -333,7 +333,7 @@ int cellPadGetInfo(u32 info_addr) int cellPadGetInfo2(u32 info_addr) { - sys_io.Log("cellPadGetInfo2(info_addr=0x%x)", info_addr); + sys_io->Log("cellPadGetInfo2(info_addr=0x%x)", info_addr); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; CellPadInfo2 info; @@ -365,7 +365,7 @@ int cellPadGetInfo2(u32 info_addr) int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr) { - sys_io.Log("cellPadGetCapabilityInfo[port_no: %d, data_addr: 0x%x]", port_no, info_addr.GetAddr()); + sys_io->Log("cellPadGetCapabilityInfo[port_no: %d, data_addr: 0x%x]", port_no, info_addr.GetAddr()); if (!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); if (port_no >= rinfo.max_connect) return CELL_PAD_ERROR_INVALID_PARAMETER; @@ -386,7 +386,7 @@ int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr) int cellPadSetPortSetting(u32 port_no, u32 port_setting) { - sys_io.Log("cellPadSetPortSetting(port_no=%d, port_setting=0x%x)", port_no, port_setting); + sys_io->Log("cellPadSetPortSetting(port_no=%d, port_setting=0x%x)", port_no, port_setting); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; if ((port_setting < CELL_PAD_SETTING_PRESS_ON) || port_setting >(CELL_PAD_SETTING_PRESS_ON | CELL_PAD_SETTING_SENSOR_ON) && port_setting != 0) return CELL_PAD_ERROR_INVALID_PARAMETER; @@ -402,7 +402,7 @@ int cellPadSetPortSetting(u32 port_no, u32 port_setting) int cellPadInfoPressMode(u32 port_no) { - sys_io.Log("cellPadInfoPressMode(port_no=%d)", port_no); + sys_io->Log("cellPadInfoPressMode(port_no=%d)", port_no); if (!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); if (port_no >= rinfo.max_connect) return CELL_PAD_ERROR_INVALID_PARAMETER; @@ -415,7 +415,7 @@ int cellPadInfoPressMode(u32 port_no) int cellPadInfoSensorMode(u32 port_no) { - sys_io.Log("cellPadInfoSensorMode(port_no=%d)", port_no); + sys_io->Log("cellPadInfoSensorMode(port_no=%d)", port_no); if (!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); if (port_no >= rinfo.max_connect) return CELL_PAD_ERROR_INVALID_PARAMETER; @@ -428,7 +428,7 @@ int cellPadInfoSensorMode(u32 port_no) int cellPadSetPressMode(u32 port_no, u32 mode) { - sys_io.Log("cellPadSetPressMode(port_no=%u, mode=%u)", port_no, mode); + sys_io->Log("cellPadSetPressMode(port_no=%u, mode=%u)", port_no, mode); if (!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; if (mode != 0 && mode != 1) return CELL_PAD_ERROR_INVALID_PARAMETER; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); @@ -447,7 +447,7 @@ int cellPadSetPressMode(u32 port_no, u32 mode) int cellPadSetSensorMode(u32 port_no, u32 mode) { - sys_io.Log("cellPadSetSensorMode(port_no=%u, mode=%u)", port_no, mode); + sys_io->Log("cellPadSetSensorMode(port_no=%u, mode=%u)", port_no, mode); if (!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; if (mode != 0 && mode != 1) return CELL_PAD_ERROR_INVALID_PARAMETER; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp index c92e38a0d8..174dfd839a 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp @@ -18,7 +18,7 @@ struct semaphore_attr struct semaphore { - wxSemaphore sem; + rSemaphore sem; semaphore_attr attr; int sem_count; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp index 5e58c41d5e..9d2e410fa3 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp @@ -100,7 +100,7 @@ int sys_timer_disconnect_event_queue(u32 timer_id) int sys_timer_sleep(u32 sleep_time) { sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); - wxSleep(sleep_time); + rSleep(sleep_time); return CELL_OK; } @@ -108,6 +108,6 @@ int sys_timer_usleep(u64 sleep_time) { sys_timer.Log("sys_timer_usleep(sleep_time=%lld)", sleep_time); if (sleep_time > 0xFFFFFFFFFFFF) sleep_time = 0xFFFFFFFFFFFF; //2^48-1 - wxMicroSleep(sleep_time); //TODO: If (sleep_time >= 2^32) shit may happen + rMicroSleep(sleep_time); //TODO: If (sleep_time >= 2^32) shit may happen return CELL_OK; } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Timer.h b/rpcs3/Emu/SysCalls/lv2/SC_Timer.h index 182008733b..f8749970fe 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Timer.h +++ b/rpcs3/Emu/SysCalls/lv2/SC_Timer.h @@ -16,7 +16,7 @@ struct sys_timer_information_t struct timer { - wxTimer tmr; + rTimer tmr; sys_timer_information_t timer_information_t; }; diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index a6bbe584ae..f07840c167 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -4,11 +4,16 @@ #include "Emu/System.h" #include "Ini.h" +#include "Emu/GameInfo.h" +#include "Emu/SysCalls/Static.h" +#include "Emu/SysCalls/ModuleManager.h" #include "Emu/Cell/PPUThread.h" #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/PPUInstrTable.h" #include "Emu/FS/vfsFile.h" +#include "Emu/CPU/CPUThreadManager.h" //gui dependency + #include "../Crypto/unself.h" #include #include @@ -29,6 +34,9 @@ Emulator::Emulator() , m_rsx_callback(0) , m_ppu_callback_thr(0) , m_event_manager(new EventManager()) + , m_sfunc_manager(new StaticFuncManager()) + , m_module_manager(new ModuleManager()) + , m_thread_manager(new CPUThreadManager()) { } @@ -107,7 +115,7 @@ bool Emulator::BootGame(const std::string& path) { const std::string& curpath = path + elf_path[i]; - if(wxFile::Access(fmt::FromUTF8(curpath), wxFile::read)) + if(rFile::Access(curpath, rFile::read)) { SetPath(curpath); Load(); @@ -121,20 +129,22 @@ bool Emulator::BootGame(const std::string& path) void Emulator::Load() { - if(!wxFileExists(fmt::FromUTF8(m_path))) return; + GetModuleManager().init(); + + if(!rFileExists(m_path)) return; if(IsSelf(m_path)) { std::string self_path = m_path; - std::string elf_path = fmt::ToUTF8(wxFileName(fmt::FromUTF8(m_path)).GetPath()); + std::string elf_path = rFileName(m_path).GetPath(); - if (wxFileName(fmt::FromUTF8(m_path)).GetFullName().CmpNoCase("EBOOT.BIN") == 0) + if (fmt::CmpNoCase(rFileName(m_path).GetFullName(),"EBOOT.BIN") == 0) { elf_path += "/BOOT.BIN"; } else { - elf_path += "/" + fmt::ToUTF8(wxFileName(fmt::FromUTF8(m_path)).GetName()) + ".elf"; + elf_path += "/" + rFileName(m_path).GetName() + ".elf"; } if(!DecryptSelf(elf_path, self_path)) @@ -297,9 +307,7 @@ void Emulator::Load() thread.Run(); m_status = Ready; -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_READY_EMU); -#endif + SendDbgCommand(DID_READY_EMU); } void Emulator::Run() @@ -316,9 +324,7 @@ void Emulator::Run() Resume(); return; } -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_START_EMU); -#endif + SendDbgCommand(DID_START_EMU); //ConLog.Write("run..."); m_status = Running; @@ -330,40 +336,30 @@ void Emulator::Run() //m_memory_viewer->ShowPC(); GetCPU().Exec(); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_STARTED_EMU); -#endif + SendDbgCommand(DID_STARTED_EMU); } void Emulator::Pause() { if(!IsRunning()) return; //ConLog.Write("pause..."); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_PAUSE_EMU); -#endif + SendDbgCommand(DID_PAUSE_EMU); m_status = Paused; -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_PAUSED_EMU); -#endif + SendDbgCommand(DID_PAUSED_EMU); } void Emulator::Resume() { if(!IsPaused()) return; //ConLog.Write("resume..."); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_RESUME_EMU); -#endif + SendDbgCommand(DID_RESUME_EMU); m_status = Running; CheckStatus(); //if(IsRunning() && Ini.CPUDecoderMode.GetValue() != 1) GetCPU().Exec(); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_RESUMED_EMU); -#endif + SendDbgCommand(DID_RESUMED_EMU); } void Emulator::Stop() @@ -371,9 +367,7 @@ void Emulator::Stop() if(IsStopped()) return; //ConLog.Write("shutdown..."); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_STOP_EMU); -#endif + SendDbgCommand(DID_STOP_EMU); m_status = Stopped; m_rsx_callback = 0; @@ -394,15 +388,14 @@ void Emulator::Stop() GetKeyboardManager().Close(); GetMouseManager().Close(); GetCallbackManager().Clear(); - UnloadModules(); + //not all modules unload cleanly, so we're not unloading them for now + //GetModuleManager().UnloadModules(); CurGameInfo.Reset(); Memory.Close(); //if(m_memory_viewer && m_memory_viewer->IsShown()) m_memory_viewer->Hide(); -#ifndef QT_UI - wxGetApp().SendDbgCommand(DID_STOPPED_EMU); -#endif + SendDbgCommand(DID_STOPPED_EMU); } void Emulator::SavePoints(const std::string& path) diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 63755b65f3..c967e66de8 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -1,20 +1,21 @@ #pragma once #include -#include "Gui/MemoryViewer.h" -#include "Emu/CPU/CPUThreadManager.h" +#include "Emu/CPU/CPUThreadManager.h" //gui dependency #include "Emu/Io/Pad.h" #include "Emu/Io/Keyboard.h" #include "Emu/Io/Mouse.h" #include "Emu/GS/GSManager.h" #include "Emu/Audio/AudioManager.h" #include "Emu/FS/VFS.h" -#include "Emu/DbgConsole.h" #include "Loader/Loader.h" #include "SysCalls/Callback.h" class EventManager; -extern void UnloadModules(); +class ModuleManager; +class StaticFuncManager; +//class CPUThreadManager; +//class CPUThread; struct EmuInfo { @@ -74,14 +75,14 @@ class Emulator u32 m_rsx_callback; u32 m_ppu_thr_exit; - MemoryViewerPanel* m_memory_viewer; + //MemoryViewerPanel* m_memory_viewer; //GUI dependency //ArrayF m_cpu_threads; std::vector> m_modules_init; std::vector m_break_points; std::vector m_marked_points; - CPUThreadManager m_thread_manager; + CPUThreadManager *m_thread_manager; PadManager m_pad_manager; KeyboardManager m_keyboard_manager; MouseManager m_mouse_manager; @@ -92,6 +93,8 @@ class Emulator CallbackManager m_callback_manager; CPUThread* m_ppu_callback_thr; std::unique_ptr m_event_manager; + std::unique_ptr m_sfunc_manager; + std::unique_ptr m_module_manager; VFS m_vfs; @@ -108,7 +111,7 @@ public: void SetPath(const std::string& path, const std::string& elf_path = ""); void SetTitleID(const std::string& id); - CPUThreadManager& GetCPU() { return m_thread_manager; } + CPUThreadManager& GetCPU() { return *m_thread_manager; } PadManager& GetPadManager() { return m_pad_manager; } KeyboardManager& GetKeyboardManager() { return m_keyboard_manager; } MouseManager& GetMouseManager() { return m_mouse_manager; } @@ -122,7 +125,9 @@ public: std::vector& GetMarkedPoints() { return m_marked_points; } CPUThread& GetCallbackThread() { return *m_ppu_callback_thr; } EventManager& GetEventManager() { return *m_event_manager; } - + StaticFuncManager& GetSFuncManager() { return *m_sfunc_manager; } + ModuleManager& GetModuleManager() { return *m_module_manager; } + void AddModuleInit(std::unique_ptr m) { m_modules_init.push_back(std::move(m)); diff --git a/rpcs3/Gui/ConLog.cpp b/rpcs3/Gui/ConLog.cpp index d25f16e256..870d3b7204 100644 --- a/rpcs3/Gui/ConLog.cpp +++ b/rpcs3/Gui/ConLog.cpp @@ -16,163 +16,8 @@ #include "Emu/System.h" -LogWriter ConLog; LogFrame* ConLogFrame; -std::mutex g_cs_conlog; - -static const uint max_item_count = 500; -static const uint buffer_size = 1024 * 64; - -static const std::string g_log_colors[] = -{ - "Black", "Green", "White", "Yellow", "Red", -}; - -struct LogPacket -{ - const std::string m_prefix; - const std::string m_text; - const std::string m_colour; - - LogPacket(const std::string& prefix, const std::string& text, const std::string& colour) - : m_prefix(prefix) - , m_text(text) - , m_colour(colour) - { - - } -}; - -struct _LogBuffer : public MTPacketBuffer -{ - _LogBuffer() : MTPacketBuffer(buffer_size) - { - } - - void _push(const LogPacket& data) - { - const u32 sprefix = data.m_prefix.length(); - const u32 stext = data.m_text.length(); - const u32 scolour = data.m_colour.length(); - - m_buffer.resize( m_buffer.size() + - sizeof(u32) + sprefix + - sizeof(u32) + stext + - sizeof(u32) + scolour); - - u32 c_put = m_put; - - memcpy(&m_buffer[c_put], &sprefix, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_prefix.c_str(), sprefix); - c_put += sprefix; - - memcpy(&m_buffer[c_put], &stext, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_text.c_str(), stext); - c_put += stext; - - memcpy(&m_buffer[c_put], &scolour, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_colour.c_str(), scolour); - c_put += scolour; - - m_put = c_put; - CheckBusy(); - } - - LogPacket _pop() - { - u32 c_get = m_get; - - const u32& sprefix = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string prefix( (const char*) &m_buffer[c_get], sprefix); - c_get += sprefix; - - const u32& stext = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string text( (const char*) &m_buffer[c_get], stext); - c_get += stext; - - const u32& scolour = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string colour( (const char*) &m_buffer[c_get], scolour); - c_get += scolour; - - m_get = c_get; - if(!HasNewPacket()) Flush(); - - return LogPacket(prefix, text, colour); - } -} LogBuffer; - -LogWriter::LogWriter() -{ - if(!m_logfile.Open(_PRGNAME_ ".log", wxFile::write)) - { -#ifndef QT_UI - wxMessageBox("Can't create log file! (" _PRGNAME_ ".log)", wxMessageBoxCaptionStr, wxICON_ERROR); -#endif - } -} - -void LogWriter::WriteToLog(const std::string& prefix, const std::string& value, u8 lvl/*, wxColour bgcolour*/) -{ - std::string new_prefix = prefix; - if(!prefix.empty()) - { - if(NamedThreadBase* thr = GetCurrentNamedThread()) - { - new_prefix += " : " + thr->GetThreadName(); - } - } - - if(m_logfile.IsOpened() && !new_prefix.empty()) - m_logfile.Write(fmt::FromUTF8("[" + new_prefix + "]: " + value + "\n")); - - if(!ConLogFrame || Ini.HLELogLvl.GetValue() == 4 || (lvl != 0 && lvl <= Ini.HLELogLvl.GetValue())) - return; - - std::lock_guard lock(g_cs_conlog); - -#ifdef QT_UI - // TODO: Use ThreadBase instead, track main thread id - if(QThread::currentThread() == qApp->thread()) -#else - if(wxThread::IsMain()) -#endif - { - while(LogBuffer.IsBusy()) - { - // need extra break condition? - wxYieldIfNeeded(); - } - } - else - { - while (LogBuffer.IsBusy()) - { - if (Emu.IsStopped()) - { - break; - } - Sleep(1); - } - } - - //if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush(); - - LogBuffer.Push(LogPacket(new_prefix, value, g_log_colors[lvl])); -} - - -void LogWriter::SkipLn() -{ - WriteToLog("", "", 0); -} - BEGIN_EVENT_TABLE(LogFrame, wxPanel) EVT_CLOSE(LogFrame::OnQuit) END_EVENT_TABLE() diff --git a/rpcs3/Gui/DbgFrame.cpp b/rpcs3/Gui/DbgFrame.cpp new file mode 100644 index 0000000000..9f966fd932 --- /dev/null +++ b/rpcs3/Gui/DbgFrame.cpp @@ -0,0 +1,94 @@ +#include "stdafx.h" +#include "DbgFrame.h" + +BEGIN_EVENT_TABLE(DbgFrame, FrameBase) +EVT_CLOSE(DbgFrame::OnQuit) +END_EVENT_TABLE() + +DbgFrame::DbgFrame() +: FrameBase(nullptr, wxID_ANY, "DbgFrame", "", wxDefaultSize, wxDefaultPosition, wxDEFAULT_FRAME_STYLE, true) +, ThreadBase("DbgFrame thread") +, m_output(nullptr) +{ + m_console = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, + wxSize(500, 500), wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH2); + m_console->SetBackgroundColour(wxColor("Black")); + m_console->SetFont(wxFont(8, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL)); + + m_color_white = new wxTextAttr(wxColour(255, 255, 255)); + m_color_red = new wxTextAttr(wxColour(255, 0, 0)); + + if (Ini.HLESaveTTY.GetValue()) + m_output = new rFile("tty.log", rFile::write); +} + +DbgFrame::~DbgFrame() +{ + ThreadBase::Stop(); + m_dbg_buffer.Flush(); + + safe_delete(m_console); + safe_delete(m_color_white); + safe_delete(m_color_red); + safe_delete(m_output); +} + +void DbgFrame::Write(int ch, const std::string& text) +{ + while (m_dbg_buffer.IsBusy()) + { + if (Emu.IsStopped()) + { + return; + } + Sleep(1); + } + m_dbg_buffer.Push(DbgPacket(ch, text)); + + if (!IsAlive()) Start(); +} + +void DbgFrame::Clear() +{ + m_console->Clear(); +} + +void DbgFrame::Task() +{ + while (!TestDestroy()) + { + if (!m_dbg_buffer.HasNewPacket()) + { + if (Emu.IsStopped()) + { + break; + } + Sleep(1); + continue; + } + + DbgPacket packet = m_dbg_buffer.Pop(); + m_console->SetDefaultStyle(packet.m_ch == 1 ? *m_color_red : *m_color_white); + m_console->SetInsertionPointEnd(); + m_console->WriteText(fmt::FromUTF8(packet.m_text)); + + if (m_output && Ini.HLESaveTTY.GetValue()) + m_output->Write(packet.m_text); + + if (!DbgFrame::IsShown()) Show(); + } +} + +void DbgFrame::OnQuit(wxCloseEvent& event) +{ + ThreadBase::Stop(false); + Hide(); + + if (m_output) + { + m_output->Close(); + m_output = nullptr; + } + + //event.Skip(); +} \ No newline at end of file diff --git a/rpcs3/Gui/DbgFrame.h b/rpcs3/Gui/DbgFrame.h new file mode 100644 index 0000000000..d6dda5d873 --- /dev/null +++ b/rpcs3/Gui/DbgFrame.h @@ -0,0 +1,23 @@ +#pragma once + +class DbgFrame + : public FrameBase + , public ThreadBase +{ + rFile* m_output; + wxTextCtrl* m_console; + wxTextAttr* m_color_white; + wxTextAttr* m_color_red; + _DbgBuffer m_dbg_buffer; + +public: + DbgFrame(); + ~DbgFrame(); + void Write(int ch, const std::string& text); + void Clear(); + virtual void Task(); + +private: + void OnQuit(wxCloseEvent& event); + DECLARE_EVENT_TABLE(); +}; diff --git a/rpcs3/Gui/GLGSFrame.cpp b/rpcs3/Gui/GLGSFrame.cpp new file mode 100644 index 0000000000..d5205f029e --- /dev/null +++ b/rpcs3/Gui/GLGSFrame.cpp @@ -0,0 +1,50 @@ +#include "stdafx.h" +#include "GLGSFrame.h" + +GLGSFrame::GLGSFrame() + : GSFrame(nullptr, "GSFrame[OpenGL]") + , m_frames(0) +{ + canvas = new wxGLCanvas(this, wxID_ANY, NULL); + canvas->SetSize(GetClientSize()); + + canvas->Bind(wxEVT_LEFT_DCLICK, &GSFrame::OnLeftDclick, this); +} + +void GLGSFrame::Flip(wxGLContext *context) +{ + if (!canvas) return; + canvas->SetCurrent(*context); + + static Timer fps_t; + canvas->SwapBuffers(); + m_frames++; + + if (fps_t.GetElapsedTimeInSec() >= 0.5) + { + SetTitle(wxString::Format("FPS: %.2f", (double)m_frames / fps_t.GetElapsedTimeInSec())); + m_frames = 0; + fps_t.Start(); + } +} + +void GLGSFrame::OnSize(wxSizeEvent& event) +{ + if (canvas) canvas->SetSize(GetClientSize()); + event.Skip(); +} + +void GLGSFrame::SetViewport(int x, int y, u32 w, u32 h) +{ + /* + //ConLog.Warning("SetViewport(x=%d, y=%d, w=%d, h=%d)", x, y, w, h); + + const wxSize client = GetClientSize(); + const wxSize viewport = AspectRatio(client, wxSize(w, h)); + + const int vx = (client.GetX() - viewport.GetX()) / 2; + const int vy = (client.GetY() - viewport.GetY()) / 2; + + glViewport(vx + x, vy + y, viewport.GetWidth(), viewport.GetHeight()); + */ +} \ No newline at end of file diff --git a/rpcs3/Gui/GLGSFrame.h b/rpcs3/Gui/GLGSFrame.h new file mode 100644 index 0000000000..acbc06cccc --- /dev/null +++ b/rpcs3/Gui/GLGSFrame.h @@ -0,0 +1,21 @@ +#pragma once +#include "wx/glcanvas.h" +#include "Gui/GSFrame.h" + +struct GLGSFrame : public GSFrame +{ + wxGLCanvas* canvas; + u32 m_frames; + + GLGSFrame(); + ~GLGSFrame() {} + + void Flip(wxGLContext *context); + + wxGLCanvas* GetCanvas() const { return canvas; } + + virtual void SetViewport(int x, int y, u32 w, u32 h); + +private: + virtual void OnSize(wxSizeEvent& event); +}; \ No newline at end of file diff --git a/rpcs3/Gui/GSFrame.cpp b/rpcs3/Gui/GSFrame.cpp new file mode 100644 index 0000000000..b180c0c54d --- /dev/null +++ b/rpcs3/Gui/GSFrame.cpp @@ -0,0 +1,82 @@ +#include "stdafx.h" +#include "GSFrame.h" + +BEGIN_EVENT_TABLE(GSFrame, wxFrame) + EVT_PAINT(GSFrame::OnPaint) + EVT_SIZE(GSFrame::OnSize) +END_EVENT_TABLE() + +wxSize AspectRatio(wxSize rs, const wxSize as) +{ + const double aq = (double)as.x / as.y; + const double rq = (double)rs.x / rs.y; + const double q = aq / rq; + + if (q > 1.0) + { + rs.y /= q; + } + else if (q < 1.0) + { + rs.x *= q; + } + + return rs; +} + +GSFrame::GSFrame(wxWindow* parent, const wxString& title) : wxFrame(parent, wxID_ANY, title) +{ + CellVideoOutResolution res = ResolutionTable[ResolutionIdToNum(Ini.GSResolution.GetValue())]; + SetClientSize(res.width, res.height); + wxGetApp().Bind(wxEVT_KEY_DOWN, &GSFrame::OnKeyDown, this); + Bind(wxEVT_CLOSE_WINDOW, &GSFrame::OnClose, this); +} + +void GSFrame::OnPaint(wxPaintEvent& event) +{ + wxPaintDC(this); +} + +void GSFrame::OnClose(wxCloseEvent& event) +{ + Emu.Stop(); +} + +/* +void GSFrame::OnSize(wxSizeEvent&) +{ +const wxSize client = GetClientSize(); +const wxSize viewport = AspectRatio(client, m_size); + +const int x = (client.GetX() - viewport.GetX()) / 2; +const int y = (client.GetY() - viewport.GetY()) / 2; + +SetViewport(wxPoint(x, y), viewport); +} +*/ + +void GSFrame::OnKeyDown(wxKeyEvent& event) +{ + switch (event.GetKeyCode()) + { + case WXK_RETURN: if (event.AltDown()) { OnFullScreen(); return; } break; + case WXK_ESCAPE: if (IsFullScreen()) { ShowFullScreen(false); return; } break; + } + event.Skip(); +} + +void GSFrame::OnFullScreen() +{ + ShowFullScreen(!IsFullScreen()); +} + + +/* +void GSFrame::SetSize(int width, int height) +{ +m_size.SetWidth(width); +m_size.SetHeight(height); +//wxFrame::SetSize(width, height); +OnSize(wxSizeEvent()); +} +*/ \ No newline at end of file diff --git a/rpcs3/Gui/GSFrame.h b/rpcs3/Gui/GSFrame.h new file mode 100644 index 0000000000..83601a00cf --- /dev/null +++ b/rpcs3/Gui/GSFrame.h @@ -0,0 +1,29 @@ +#pragma once + +wxSize AspectRatio(wxSize rs, const wxSize as); + +class GSFrame : public wxFrame +{ +protected: + GSFrame(wxWindow* parent, const wxString& title); + + virtual void SetViewport(int x, int y, u32 w, u32 h) {} + virtual void OnPaint(wxPaintEvent& event); + virtual void OnClose(wxCloseEvent& event); + + //virtual void OnSize(wxSizeEvent&); + + void OnKeyDown(wxKeyEvent& event); + void OnFullScreen(); + +public: + void OnLeftDclick(wxMouseEvent&) + { + OnFullScreen(); + } + + //void SetSize(int width, int height); + +private: + DECLARE_EVENT_TABLE(); +}; \ No newline at end of file diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 62a7288a95..3dcfd9c31a 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -17,6 +17,7 @@ #include "Gui/VHDDManager.h" #include "Gui/VFSManager.h" #include "Gui/AboutDialog.h" +#include "Gui/GameViewer.h" #include #include "Loader/PKG.h" @@ -261,7 +262,7 @@ void MainFrame::InstallPkg(wxCommandEvent& WXUNUSED(event)) // Open and install PKG file wxString filePath = ctrl.GetPath(); - wxFile pkg_f(filePath, wxFile::read); // TODO: Use VFS to install PKG files + rFile pkg_f(filePath.ToStdString(), rFile::read); // TODO: Use VFS to install PKG files if (pkg_f.IsOpened()) { diff --git a/rpcs3/Gui/MainFrame.h b/rpcs3/Gui/MainFrame.h index 15ab70c11e..a7b0341de1 100644 --- a/rpcs3/Gui/MainFrame.h +++ b/rpcs3/Gui/MainFrame.h @@ -1,10 +1,11 @@ #pragma once #include "Gui/Debugger.h" -#include "Gui/GameViewer.h" #include +class GameViewer; + class MainFrame : public FrameBase { DebuggerPanel* m_debugger_frame; diff --git a/rpcs3/Gui/RSXDebugger.h b/rpcs3/Gui/RSXDebugger.h index bcdae7d6cb..733e552efb 100644 --- a/rpcs3/Gui/RSXDebugger.h +++ b/rpcs3/Gui/RSXDebugger.h @@ -2,22 +2,7 @@ #include -struct RSXDebuggerProgram -{ - u32 id; - u32 vp_id; - u32 fp_id; - std::string vp_shader; - std::string fp_shader; - bool modified; - RSXDebuggerProgram() - : modified(false) - { - } -}; - -extern std::vector m_debug_programs; class RSXDebugger : public wxFrame { diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index 28372b9be2..6dbfa06ec4 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -31,12 +31,12 @@ Inis Ini; static bool StringToBool(const wxString& str) { - if( + if ( !str.CmpNoCase("enable") || !str.CmpNoCase("e") || !str.CmpNoCase("1") || !str.CmpNoCase("true") || - !str.CmpNoCase("t") ) + !str.CmpNoCase("t")) { return true; } @@ -46,7 +46,7 @@ static bool StringToBool(const wxString& str) static wxString BoolToString(const bool b) { - if(b) return "true"; + if (b) return "true"; return "false"; } @@ -100,20 +100,20 @@ static wxPoint StringToPosition(const wxString& str) { wxPoint ret; - wxString s[2] = {wxEmptyString, wxEmptyString}; + wxString s[2] = { wxEmptyString, wxEmptyString }; - for(uint i=0, a=0; i= 2) return wxDefaultPosition; + if (++a >= 2) return wxDefaultPosition; continue; } s[a] += str(i, 1); } - - if(s[0].IsEmpty() || s[1].IsEmpty()) + + if (s[0].IsEmpty() || s[1].IsEmpty()) { return wxDefaultPosition; } @@ -121,7 +121,7 @@ static wxPoint StringToPosition(const wxString& str) s[0].ToLong((long*)&ret.x); s[1].ToLong((long*)&ret.y); - if(ret.x <= 0 || ret.y <= 0) + if (ret.x <= 0 || ret.y <= 0) { return wxDefaultPosition; } @@ -179,7 +179,7 @@ static std::string WindowInfoToString(const WindowInfo& wind) //Ini Ini::Ini() { - m_Config = getIniFile(); + m_Config = getIniFile(); } Ini::~Ini() @@ -246,4 +246,4 @@ WindowInfo Ini::Load(const std::string& section, const std::string& key, const W { return StringToWindowInfo(m_Config->GetValue(section.c_str(), key.c_str(), WindowInfoToString(def_value).c_str())); saveIniFile(); -} +} \ No newline at end of file diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index ba9fed46aa..543b8b4075 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -362,4 +362,4 @@ public: } }; -extern Inis Ini; +extern Inis Ini; \ No newline at end of file diff --git a/rpcs3/Loader/ELF32.cpp b/rpcs3/Loader/ELF32.cpp index 6de63abb6f..c126f51991 100644 --- a/rpcs3/Loader/ELF32.cpp +++ b/rpcs3/Loader/ELF32.cpp @@ -3,7 +3,7 @@ #include "Emu/Memory/Memory.h" #include "ELF32.h" -void WriteEhdr(wxFile& f, Elf32_Ehdr& ehdr) +void WriteEhdr(rFile& f, Elf32_Ehdr& ehdr) { Write32(f, ehdr.e_magic); Write8(f, ehdr.e_class); @@ -26,7 +26,7 @@ void WriteEhdr(wxFile& f, Elf32_Ehdr& ehdr) Write16(f, ehdr.e_shstrndx); } -void WritePhdr(wxFile& f, Elf32_Phdr& phdr) +void WritePhdr(rFile& f, Elf32_Phdr& phdr) { Write32(f, phdr.p_type); Write32(f, phdr.p_offset); @@ -38,7 +38,7 @@ void WritePhdr(wxFile& f, Elf32_Phdr& phdr) Write32(f, phdr.p_align); } -void WriteShdr(wxFile& f, Elf32_Shdr& shdr) +void WriteShdr(rFile& f, Elf32_Shdr& shdr) { Write32(f, shdr.sh_name); Write32(f, shdr.sh_type); diff --git a/rpcs3/Loader/ELF32.h b/rpcs3/Loader/ELF32.h index 5882d3ffea..c69d467585 100644 --- a/rpcs3/Loader/ELF32.h +++ b/rpcs3/Loader/ELF32.h @@ -307,6 +307,6 @@ private: bool LoadShdrData(u64 offset); }; -void WriteEhdr(wxFile& f, Elf32_Ehdr& ehdr); -void WritePhdr(wxFile& f, Elf32_Phdr& phdr); -void WriteShdr(wxFile& f, Elf32_Shdr& shdr); +void WriteEhdr(rFile& f, Elf32_Ehdr& ehdr); +void WritePhdr(rFile& f, Elf32_Phdr& phdr); +void WriteShdr(rFile& f, Elf32_Shdr& shdr); diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index a7909eeb89..63e9852770 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -7,9 +7,12 @@ #include "Emu/SysCalls/Modules.h" #include "ELF64.h" #include "Emu/Cell/PPUInstrTable.h" +#include "Emu/System.h" +#include "Emu/SysCalls/ModuleManager.h" + using namespace PPU_instr; -void WriteEhdr(wxFile& f, Elf64_Ehdr& ehdr) +void WriteEhdr(rFile& f, Elf64_Ehdr& ehdr) { Write32(f, ehdr.e_magic); Write8(f, ehdr.e_class); @@ -32,7 +35,7 @@ void WriteEhdr(wxFile& f, Elf64_Ehdr& ehdr) Write16(f, ehdr.e_shstrndx); } -void WritePhdr(wxFile& f, Elf64_Phdr& phdr) +void WritePhdr(rFile& f, Elf64_Phdr& phdr) { Write32(f, phdr.p_type); Write32(f, phdr.p_flags); @@ -44,7 +47,7 @@ void WritePhdr(wxFile& f, Elf64_Phdr& phdr) Write64(f, phdr.p_align); } -void WriteShdr(wxFile& f, Elf64_Shdr& shdr) +void WriteShdr(rFile& f, Elf64_Shdr& shdr) { Write32(f, shdr.sh_name); Write32(f, shdr.sh_type); @@ -62,6 +65,7 @@ ELF64Loader::ELF64Loader(vfsStream& f) : elf64_f(f) , LoaderBase() { + int a = 0; } bool ELF64Loader::LoadInfo() @@ -249,7 +253,7 @@ bool ELF64Loader::LoadPhdrData(u64 offset) { elf64_f.Seek(phdr_arr[i].p_offset); elf64_f.Read(&Memory[offset + phdr_arr[i].p_vaddr], phdr_arr[i].p_filesz); - StaticAnalyse(&Memory[offset + phdr_arr[i].p_vaddr], phdr_arr[i].p_filesz, phdr_arr[i].p_vaddr); + Emu.GetSFuncManager().StaticAnalyse(&Memory[offset + phdr_arr[i].p_vaddr], phdr_arr[i].p_filesz, phdr_arr[i].p_vaddr); } } break; @@ -340,7 +344,7 @@ bool ELF64Loader::LoadPhdrData(u64 offset) stub.s_text = re(stub.s_text); const std::string& module_name = Memory.ReadString(stub.s_modulename); - Module* module = GetModuleByName(module_name); + Module* module = Emu.GetModuleManager().GetModuleByName(module_name); if(module) { //module->SetLoaded(); @@ -386,7 +390,7 @@ bool ELF64Loader::LoadPhdrData(u64 offset) mem32_ptr_t out_tbl(tbl + i*8); out_tbl += dst + i*section; - out_tbl += GetFuncNumById(nid); + out_tbl += Emu.GetModuleManager().GetFuncNumById(nid); mem32_ptr_t out_dst(dst + i*section); out_dst += OR(11, 2, 2, 0); diff --git a/rpcs3/Loader/ELF64.h b/rpcs3/Loader/ELF64.h index fc8005b5ef..4a54a08232 100644 --- a/rpcs3/Loader/ELF64.h +++ b/rpcs3/Loader/ELF64.h @@ -186,6 +186,6 @@ private: //bool LoadImports(); }; -void WriteEhdr(wxFile& f, Elf64_Ehdr& ehdr); -void WritePhdr(wxFile& f, Elf64_Phdr& phdr); -void WriteShdr(wxFile& f, Elf64_Shdr& shdr); +void WriteEhdr(rFile& f, Elf64_Ehdr& ehdr); +void WritePhdr(rFile& f, Elf64_Phdr& phdr); +void WriteShdr(rFile& f, Elf64_Shdr& shdr); diff --git a/rpcs3/Loader/Loader.h b/rpcs3/Loader/Loader.h index e630b7a947..9112eddc41 100644 --- a/rpcs3/Loader/Loader.h +++ b/rpcs3/Loader/Loader.h @@ -75,42 +75,42 @@ __forceinline static u64 Read64LE(vfsStream& f) return ((u64)Read32LE(f) | (u64)Read32LE(f) << 32); } -__forceinline static void Write8(wxFile& f, const u8 data) +__forceinline static void Write8(rFile& f, const u8 data) { f.Write(&data, 1); } -__forceinline static void Write16(wxFile& f, const u16 data) +__forceinline static void Write16(rFile& f, const u16 data) { Write8(f, data >> 8); Write8(f, data); } -__forceinline static void Write32(wxFile& f, const u32 data) +__forceinline static void Write32(rFile& f, const u32 data) { Write16(f, data >> 16); Write16(f, data); } -__forceinline static void Write64(wxFile& f, const u64 data) +__forceinline static void Write64(rFile& f, const u64 data) { Write32(f, data >> 32); Write32(f, data); } -__forceinline static void Write16LE(wxFile& f, const u16 data) +__forceinline static void Write16LE(rFile& f, const u16 data) { Write8(f, data); Write8(f, data >> 8); } -__forceinline static void Write32LE(wxFile& f, const u32 data) +__forceinline static void Write32LE(rFile& f, const u32 data) { Write16LE(f, data); Write16LE(f, data >> 16); } -__forceinline static void Write64LE(wxFile& f, const u64 data) +__forceinline static void Write64LE(rFile& f, const u64 data) { Write32LE(f, data); Write32LE(f, data >> 32); diff --git a/rpcs3/Loader/PKG.cpp b/rpcs3/Loader/PKG.cpp index 43512e16ba..f634b179a8 100644 --- a/rpcs3/Loader/PKG.cpp +++ b/rpcs3/Loader/PKG.cpp @@ -3,7 +3,7 @@ #include "PKG.h" #include "../Crypto/unpkg.h" -PKGLoader::PKGLoader(wxFile& f) : pkg_f(f) +PKGLoader::PKGLoader(rFile& f) : pkg_f(f) { } @@ -13,7 +13,7 @@ bool PKGLoader::Install(std::string dest) if (!pkg_f.IsOpened()) return false; - dest = fmt::ToUTF8(wxGetCwd()) + dest; + dest = rGetCwd() + dest; if (!dest.empty() && dest.back() != '/') dest += '/'; @@ -24,9 +24,9 @@ bool PKGLoader::Install(std::string dest) std::string titleID = std::string(title_id).substr(7, 9); - if (wxDirExists(fmt::FromUTF8(dest+titleID))) { - wxMessageDialog d_overwrite(NULL, "Another installation was found. Do you want to overwrite it?", "PKG Decrypter / Installer", wxYES_NO|wxCENTRE); - if (d_overwrite.ShowModal() != wxID_YES) { + if (rDirExists(dest+titleID)) { + rMessageDialog d_overwrite(NULL, "Another installation was found. Do you want to overwrite it?", "PKG Decrypter / Installer", rYES_NO|rCENTRE); + if (d_overwrite.ShowModal() != rID_YES) { ConLog.Error("PKG Loader: Another installation found in: %s", titleID.c_str()); return false; } @@ -34,7 +34,7 @@ bool PKGLoader::Install(std::string dest) ConLog.Error("PKG Loader: Another installation found in: %s", titleID.c_str()); return false; } - if (!wxMkdir(fmt::FromUTF8(dest+titleID))) { + if (!rMkdir(dest+titleID)) { ConLog.Error("PKG Loader: Could not make the installation directory: %s", titleID.c_str()); return false; } diff --git a/rpcs3/Loader/PKG.h b/rpcs3/Loader/PKG.h index 8c2b3da125..f616df04dd 100644 --- a/rpcs3/Loader/PKG.h +++ b/rpcs3/Loader/PKG.h @@ -3,10 +3,10 @@ class PKGLoader { - wxFile& pkg_f; + rFile& pkg_f; public: - PKGLoader(wxFile& f); + PKGLoader(rFile& f); virtual bool Install(std::string dest); virtual bool Close(); }; diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index 8b97d6160a..d15e8f00b4 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -4,8 +4,6 @@ #include "Emu/System.h" #include "TROPUSR.h" -#include "wx/xml/xml.h" - TROPUSRLoader::TROPUSRLoader() { m_file = NULL; @@ -123,19 +121,19 @@ bool TROPUSRLoader::Save(const std::string& filepath) bool TROPUSRLoader::Generate(const std::string& filepath, const std::string& configpath) { std::string path; - wxXmlDocument doc; + rXmlDocument doc; Emu.GetVFS().GetDevice(configpath.c_str(), path); - doc.Load(fmt::FromUTF8(path)); + doc.Load(path); m_table4.clear(); m_table6.clear(); - for (wxXmlNode *n = doc.GetRoot()->GetChildren(); n; n = n->GetNext()) + for (std::shared_ptr n = doc.GetRoot()->GetChildren(); n; n = n->GetNext()) { if (n->GetName() == "trophy") { - u32 trophy_id = atoi(n->GetAttribute("id").mb_str()); + u32 trophy_id = atoi(n->GetAttribute("id").c_str()); u32 trophy_grade; - switch (((const char *)n->GetAttribute("ttype").mb_str())[0]) + switch (((const char *)n->GetAttribute("ttype").c_str())[0]) { case 'B': trophy_grade = 4; break; case 'S': trophy_grade = 3; break; diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj new file mode 100644 index 0000000000..1eea900d87 --- /dev/null +++ b/rpcs3/emucore.vcxproj @@ -0,0 +1,506 @@ + + + + + Debug - MemLeak + Win32 + + + Debug - MemLeak + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {C4A10229-4712-4BD2-B63E-50D93C67A038} + emucore + + + + StaticLibrary + true + v120 + Unicode + + + StaticLibrary + true + v120 + Unicode + + + StaticLibrary + true + v120 + Unicode + + + StaticLibrary + true + v120 + Unicode + + + StaticLibrary + false + v120 + false + Unicode + + + StaticLibrary + false + v120 + false + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + .\;..\;..\asmjit\src\asmjit;..\wxWidgets\include\msvc;..\wxWidgets\include;.\OpenAL\include;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86\Include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + .\;..\;..\asmjit\src\asmjit;..\wxWidgets\include\msvc;..\wxWidgets\include;.\OpenAL\include;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86\Include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + .\;..\;..\asmjit\src\asmjit;..\wxWidgets\include\msvc;..\wxWidgets\include;.\OpenAL\include;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86\Include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + .\;..\;..\asmjit\src\asmjit;..\wxWidgets\include\msvc;..\wxWidgets\include;.\OpenAL\include;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86_64\Include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(Platform)\$(Configuration)\emucore\ + + + .\;..\;..\asmjit\src\asmjit;..\wxWidgets\include\msvc;..\wxWidgets\include;.\OpenAL\include;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86_64\Include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(Platform)\$(Configuration)\emucore\ + + + .\;..\;..\asmjit\src\asmjit;..\wxWidgets\include\msvc;..\wxWidgets\include;.\OpenAL\include;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86_64\Include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(Platform)\$(Configuration)\emucore\ + + + + Level3 + Disabled + false + Use + stdafx.h + + + true + + + + + Level3 + Disabled + false + Use + _UNICODE;UNICODE;MSVC_CRT_MEMLEAK_DETECTION;%(PreprocessorDefinitions) + stdafx.h + + + true + + + + + Level3 + Disabled + false + Use + _UNICODE;UNICODE;%(PreprocessorDefinitions) + stdafx.h + + + true + + + + + Level3 + Disabled + false + Use + _UNICODE;UNICODE;MSVC_CRT_MEMLEAK_DETECTION;%(PreprocessorDefinitions) + stdafx.h + + + true + + + + + Level3 + MaxSpeed + true + true + false + Use + stdafx.h + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + false + Use + stdafx.h + + + true + true + true + + + + + + \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters new file mode 100644 index 0000000000..af59ad9daa --- /dev/null +++ b/rpcs3/emucore.vcxproj.filters @@ -0,0 +1,926 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {d614f6ff-cd3b-40c4-8a76-1ff82b68d3d4} + + + {ad58328f-b041-41e0-ad17-dbad7d193051} + + + {d79d0db9-c3fc-480a-9979-175b82ffecf7} + + + {269371f1-45b7-4ca9-a4a7-376e6e62a8ba} + + + {4317ac27-38e4-4f8d-9bac-496f9b00f615} + + + {1df5b438-f263-4ff4-9b86-a9ea368f2106} + + + {d489f5c9-f7b7-4402-9cfb-6aa2c813cdf6} + + + {c04826b8-05a1-4015-b3aa-ef44805531a2} + + + {c344f241-48a9-4950-8b94-8b60adc4a67f} + + + {9aaa9b5c-c890-485c-a729-d2b5e783406f} + + + {f81523a6-0846-4abc-96b2-1284b2506485} + + + {b26b6b08-a8ce-4bb5-8339-c5352a23ce96} + + + {28902cf4-4fa6-428b-ab94-6b410fd5077f} + + + {13d20086-2188-425a-9856-0440fe6f79f2} + + + {037247b4-0370-4193-a25d-bc9d075bf0a7} + + + {93b1cff1-0158-4327-a437-e9abcac8d724} + + + {5a18e5b1-2632-4849-ba94-e7a2ea0b78fa} + + + {f5d19014-3c8f-43d2-bb46-af3d7f4add2b} + + + {960c535f-dabe-4f7e-b73f-fb0fac60d7c0} + + + {cd540262-1ecb-4160-a69f-95704e32f2d0} + + + {be701b55-2a3d-4692-a3bf-347681ab1c7e} + + + {84c34dd1-4c49-4ecf-8ee2-4165c14f24be} + + + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Emu + + + Emu + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\Io + + + Emu\Io + + + Emu\Io + + + Emu\GS + + + Emu\GS + + + Emu\GS + + + Emu\GS + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\HDD + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\CPU + + + Emu\CPU + + + Emu\ARMv7 + + + Emu\Audio + + + Emu\Audio + + + Emu\Audio\AL + + + Emu\Memory + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Source Files + + + Utilities + + + Utilities + + + Utilities + + + Emu\SysCalls + + + Emu\Cell + + + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Crypto + + + Emu + + + Emu + + + Emu + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\Io + + + Emu\Io + + + Emu\Io + + + Emu\Io + + + Emu\Io + + + Emu\Io + + + Emu\Io\Null + + + Emu\Io\Windows + + + Emu\Io\Windows + + + Emu\Io\Windows + + + Emu\GS + + + Emu\GS + + + Emu\GS + + + Emu\GS + + + Emu\GS + + + Emu\GS + + + Emu\GS + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\GL + + + Emu\GS\Null + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\FS + + + Emu\HDD + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\Cell + + + Emu\CPU + + + Emu\CPU + + + Emu\CPU + + + Emu\CPU + + + Emu\CPU + + + Emu\ARMv7 + + + Emu\ARMv7 + + + Emu\ARMv7 + + + Emu\ARMv7 + + + Emu\ARMv7 + + + Emu\Audio + + + Emu\Audio + + + Emu\Audio\AL + + + Emu\Memory + + + Emu\Memory + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Loader + + + Header Files + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Emu\SysCalls + + + Emu\SysCalls + + + Utilities + + + Utilities\SimpleIni + + + Utilities\SimpleIni + + + Utilities + + + Emu + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Emu\Cell + + + \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj.user b/rpcs3/emucore.vcxproj.user new file mode 100644 index 0000000000..ef5ff2a1fa --- /dev/null +++ b/rpcs3/emucore.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index 199a2d30a3..f0a50e9b3f 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -5,6 +5,7 @@ #include "rpcs3.h" #include "Ini.h" #include "Gui/ConLogFrame.h" +#include "Emu/GameInfo.h" #ifdef _WIN32 #include @@ -85,4 +86,21 @@ CPUThread& GetCPU(const u8 core) return Emu.GetCPU().Get(core); }*/ +//TODOB: remove this +//convert a wxString to a std::string encoded in utf8 +//CAUTION, only use this to interface with wxWidgets classes +std::string fmt::ToUTF8(const wxString& right) +{ + auto ret = std::string(((const char *)right.utf8_str())); + return ret; +} + +//convert a std::string encoded in utf8 to a wxString +//CAUTION, only use this to interface with wxWidgets classes +wxString fmt::FromUTF8(const std::string& right) +{ + auto ret = wxString::FromUTF8(right.c_str()); + return ret; +} + GameInfo CurGameInfo; diff --git a/rpcs3/rpcs3.h b/rpcs3/rpcs3.h index 4ee43a327c..f99984ddb7 100644 --- a/rpcs3/rpcs3.h +++ b/rpcs3/rpcs3.h @@ -5,40 +5,6 @@ class CPUThread; wxDECLARE_EVENT(wxEVT_DBG_COMMAND, wxCommandEvent); -enum DbgCommand -{ - DID_FIRST_COMMAND = 0x500, - - DID_START_EMU, - DID_STARTED_EMU, - DID_STOP_EMU, - DID_STOPPED_EMU, - DID_PAUSE_EMU, - DID_PAUSED_EMU, - DID_RESUME_EMU, - DID_RESUMED_EMU, - DID_READY_EMU, - DID_CREATE_THREAD, - DID_CREATED_THREAD, - DID_REMOVE_THREAD, - DID_REMOVED_THREAD, - DID_RENAME_THREAD, - DID_RENAMED_THREAD, - DID_START_THREAD, - DID_STARTED_THREAD, - DID_STOP_THREAD, - DID_STOPED_THREAD, - DID_PAUSE_THREAD, - DID_PAUSED_THREAD, - DID_RESUME_THREAD, - DID_RESUMED_THREAD, - DID_EXEC_THREAD, - DID_REGISTRED_CALLBACK, - DID_UNREGISTRED_CALLBACK, - DID_EXIT_THR_SYSCALL, - - DID_LAST_COMMAND, -}; class Rpcs3App : public wxApp { diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index ff0f4476a2..d0e69a97e9 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -1,26 +1,14 @@  - - Debug - MemLeak - Win32 - Debug - MemLeak x64 - - Debug - Win32 - Debug x64 - - Release - Win32 - Release x64 @@ -32,18 +20,6 @@ rpcs3 - - Application - true - Unicode - v120 - - - Application - true - Unicode - v120 - Application true @@ -56,14 +32,6 @@ Unicode v120 - - Application - false - true - Unicode - v120 - false - Application false @@ -75,37 +43,16 @@ - - - - - - - - - - - .\;..\wxWidgets\include;..\SDL-1.3.0-5538\include;..\SDL_image-1.2.10;..\pthreads-2.8.0;..\;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86\Include;.\OpenAL\include;$(IncludePath);..\asmjit\src\asmjit - $(SolutionDir)bin\ - ..\libs\$(Configuration)\;$(LibraryPath) - $(ProjectName)-$(PlatformShortName)-dbg - - - .\;..\wxWidgets\include;..\SDL-1.3.0-5538\include;..\SDL_image-1.2.10;..\pthreads-2.8.0;..\;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86\Include;.\OpenAL\include;$(IncludePath) - $(SolutionDir)bin\ - ..\libs\$(Configuration)\;$(LibraryPath) - $(ProjectName)-$(PlatformShortName)-dbg - .\;..\wxWidgets\include;..\SDL-1.3.0-5538\include;..\SDL_image-1.2.10;..\pthreads-2.8.0;..\;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86_64\Include;.\OpenAL\include;$(IncludePath);..\asmjit\src\asmjit $(SolutionDir)bin\ @@ -118,15 +65,6 @@ ..\libs\$(Configuration)\;$(LibraryPath) $(ProjectName)-$(PlatformShortName)-dbg - - false - .\;..\wxWidgets\include;..\SDL-1.3.0-5538\include;..\SDL_image-1.2.10;..\pthreads-2.8.0;..\;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86\Include;.\OpenAL\include;$(IncludePath);..\asmjit\src\asmjit - $(SolutionDir)bin\ - ..\libs\$(Configuration)\;$(LibraryPath) - false - false - $(ProjectName)-$(PlatformShortName) - false .\;..\wxWidgets\include;..\SDL-1.3.0-5538\include;..\SDL_image-1.2.10;..\pthreads-2.8.0;..\;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86_64\Include;.\OpenAL\include;$(IncludePath);..\asmjit\src\asmjit @@ -136,48 +74,6 @@ false $(ProjectName)-$(PlatformShortName) - - - Level3 - Disabled - EditAndContinue - Use - true - ..\wxWidgets\include\msvc - - - true - wxmsw31ud_adv.lib;wxbase31ud.lib;wxmsw31ud_core.lib;wxmsw31ud_aui.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) - %(IgnoreSpecificDefaultLibraries) - false - ..\wxWidgets\lib\vc_lib;..\ffmpeg\Windows\x86\lib;..\OpenAL\Win32 - - - - - - - - - Level3 - Disabled - EditAndContinue - Use - true - ..\wxWidgets\include\msvc - - - true - wxmsw31ud_adv.lib;wxbase31ud.lib;wxmsw31ud_core.lib;wxmsw31ud_aui.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) - %(IgnoreSpecificDefaultLibraries) - false - ..\wxWidgets\lib\vc_lib;..\ffmpeg\Windows\x86\lib;..\OpenAL\Win32 - - - - - - Level3 @@ -188,7 +84,7 @@ true - wxmsw31ud_adv.lib;wxbase31ud.lib;wxmsw31ud_core.lib;wxmsw31ud_aui.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\emucore.lib;wxmsw31ud_adv.lib;wxbase31ud.lib;wxmsw31ud_core.lib;wxmsw31ud_aui.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) %(IgnoreSpecificDefaultLibraries) false ..\wxWidgets\lib\vc_x64_lib;..\ffmpeg\Windows\x86_64\lib;..\OpenAL\Win64 @@ -211,7 +107,7 @@ true - wxmsw31ud_adv.lib;wxbase31ud.lib;wxmsw31ud_core.lib;wxmsw31ud_aui.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\emucore.lib;wxmsw31ud_adv.lib;wxbase31ud.lib;wxmsw31ud_core.lib;wxmsw31ud_aui.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) %(IgnoreSpecificDefaultLibraries) false ..\wxWidgets\lib\vc_x64_lib;..\ffmpeg\Windows\x86_64\lib;..\OpenAL\Win64 @@ -223,38 +119,6 @@ false - - - TurnOffAllWarnings - Full - true - true - ..\wxWidgets\include\msvc - MultiThreadedDLL - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - false - Use - Speed - Sync - false - - - Windows - true - true - true - wxmsw31u_adv.lib;wxbase31u.lib;wxmsw31u_core.lib;wxmsw31u_aui.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;wxzlib.lib;wxregexu.lib;wxexpat.lib;wsock32.lib;wininet.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) - - - %(IgnoreSpecificDefaultLibraries) - false - ..\wxWidgets\lib\vc_lib;..\ffmpeg\Windows\x86\lib;..\OpenAL\Win32 - - - - - - Level3 @@ -276,7 +140,7 @@ true true true - wxmsw31u_adv.lib;wxbase31u.lib;wxmsw31u_core.lib;wxmsw31u_aui.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;wxzlib.lib;wxregexu.lib;wxexpat.lib;wsock32.lib;wininet.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\emucore.lib;wxmsw31u_adv.lib;wxbase31u.lib;wxmsw31u_core.lib;wxmsw31u_aui.lib;odbc32.lib;odbccp32.lib;comctl32.lib;ws2_32.lib;shlwapi.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;wxzlib.lib;wxregexu.lib;wxexpat.lib;wsock32.lib;wininet.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libOpenAL32.dll.a;asmjit.lib;%(AdditionalDependencies) %(IgnoreSpecificDefaultLibraries) @@ -289,172 +153,24 @@ + + + + + + - - - - NotUsing - NotUsing - NotUsing - NotUsing - NotUsing - NotUsing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -465,21 +181,9 @@ - - - - - - - - - - Create Create - Create - Create Create Create @@ -492,145 +196,28 @@ + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -641,15 +228,6 @@ - - - - - - - - - diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 854c30c41b..23360f567c 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -10,73 +10,9 @@ {47155d25-741d-42c0-8850-f22aafca082a} - - {f306c137-6d2c-4e21-ba79-ac87d0ded22c} - - - {adfec460-d940-4482-9fdb-18cb0814c3d5} - true - - - {6c36f15e-07fd-45d6-a81c-1ab43ee1b58b} - - - {57263311-75a4-4309-81aa-b86fd212794b} - - - {461eddb5-b8a8-46be-918c-98cc7eaf995b} - - - {e79e49c8-6967-4776-8f50-5479c3821b51} - {9bd88f78-8528-48f3-b9e0-78e06476b04d} - - {fd7cea02-e77f-41b1-8b61-f78e7d280e04} - - - {dfd581c4-aed0-4229-bb30-7ee5816049e1} - - - {718bc358-b7ef-4988-8547-2148d14bb08b} - - - {f66e37f9-5e58-443b-bcff-2e9e002ac89e} - - - {041a844e-9f8b-4b4b-a4c5-6c72ecbde475} - - - {bee6a4b4-6371-4c1b-8558-fc7888b1574e} - - - {46cb6261-7ba2-4511-b576-4b491c04bed8} - - - {28cf8d4a-ff56-45ef-a824-3bd71c626257} - - - {e9937271-a8ff-49f6-a326-c4659f96703f} - - - {8e0f4d81-cb1a-4f3a-ae11-704ead4e1826} - - - {ee9b80ba-467b-47d0-9e20-670fec13ef5d} - - - {16f84899-2e1c-4033-8832-f1b6abb2056b} - - - {899523fa-c26a-44ea-b272-73c4585e3821} - - - {a77ab520-4399-4c95-a7ee-985c9a5ad694} - - - {c7dba541-6b78-47fd-b1aa-2325317a8bf0} - @@ -97,180 +33,24 @@ Gui - - Emu - rpcs3 Gui - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - Gui - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - Gui - - Loader - - - Loader - - - Loader - - - Loader - - - Loader - - - Loader - - - Emu\Cell - - - Emu\Cell - - - Emu\SysCalls - - - Emu\SysCalls\lv2 - - - Emu\Io - - - Emu - - - Emu\GS - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS - - - Emu\SysCalls\lv2 - - - Emu\GS - - - Emu\Cell - - - Emu\SysCalls\lv2 - Utilities - - Emu\SysCalls - - - Emu\SysCalls\lv2 - - - Emu\SysCalls - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - Gui - - Emu\Cell - - - Emu\SysCalls\lv2 - - - Emu\SysCalls - - - Emu\SysCalls\Modules - - - Emu\Cell - - - Emu\Cell - - - Emu\HDD - Gui @@ -280,96 +60,6 @@ Gui - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\Io - - - Emu\SysCalls\lv2 - - - Emu\Io - - - Emu\SysCalls\lv2 - - - Emu\FS - - - Emu\CPU - - - Emu\CPU - - - Emu\Cell - - - Emu\ARMv7 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\SysCalls\Modules - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\Modules - - - Emu\Audio - - - Emu\SysCalls\Modules - Gui @@ -379,245 +69,41 @@ Gui - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\lv2 - - - Emu\FS - - - Emu\FS - Utilities - - Emu\SysCalls\lv2 - - - Emu\SysCalls\Modules - - - Emu\SysCalls - - - Loader - - - Emu\GS - - - Emu\SysCalls\Modules - - - Emu\FS - - - Emu\FS - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Loader - - - Emu\SysCalls\Modules - - - Crypto - - - Crypto - - - Crypto - - - Crypto - - - Crypto - - - Crypto - - - Emu\SysCalls - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\Audio - - - Emu\Audio\AL - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\lv2 - - - Loader - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Crypto - - - Emu\Cell - Utilities - - Emu\Cell + + Utilities - - Emu\Memory + + Utilities - - Crypto + + Utilities - - Emu\Io\XInput + + Utilities - - Emu\SysCalls\Modules\currently_unused + + Utilities - - Emu\SysCalls\Modules\currently_unused + + Utilities - - Emu\SysCalls\Modules\currently_unused + + Gui - - Emu\SysCalls\Modules\currently_unused + + Gui - - Emu\SysCalls\Modules\currently_unused + + Gui - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused - - - Emu\SysCalls\Modules\currently_unused + + Emu @@ -648,27 +134,6 @@ Utilities - - Crypto - - - Crypto - - - Crypto - - - Crypto - - - Crypto - - - Crypto - - - Crypto - Utilities @@ -708,96 +173,6 @@ Gui - - Loader - - - Loader - - - Loader - - - Loader - - - Loader - - - Loader - - - Loader - - - Loader - - - Loader - - - Emu\Audio - - - Emu\Audio - - - Emu\Audio\AL - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\CPU - - - Emu\CPU - - - Emu\CPU - - - Emu\CPU - - - Emu\CPU - - - Emu - - - Emu\Memory - - - Emu\Memory - - - Emu - rpcs3 @@ -813,308 +188,41 @@ Gui - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS\Null - - - Emu\GS - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu - - - Emu\Io - - - Emu\Io - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Cell - - - Emu\Io\Null - - - Emu\Io - - - Emu\Io - - - Emu\Io - - - Emu\Io\Windows - - - Emu\Io\Windows - - - Emu\Io\Windows - - - Emu\SysCalls - - - Emu\SysCalls - - - Emu\ARMv7 - - - Emu\ARMv7 - - - Emu\ARMv7 - - - Emu\ARMv7 - - - Emu\ARMv7 - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\FS - - - Emu\HDD - - - Emu\Io - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls - - - Emu\SysCalls - - - Emu\SysCalls - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\SysCalls\Modules - - - Emu\Cell - - - Emu\Cell - - - Crypto - Gui - - Emu\Io\XInput - Emu - - Emu\SysCalls\Modules\currently_unused + + Utilities - - Emu\SysCalls\Modules\currently_unused + + Utilities - - Emu\SysCalls\lv2 + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Gui + + + Gui + + + Gui + + + Gui \ No newline at end of file diff --git a/rpcs3/rpcs3.vcxproj.user b/rpcs3/rpcs3.vcxproj.user index b03467fb6a..02ce42b74d 100644 --- a/rpcs3/rpcs3.vcxproj.user +++ b/rpcs3/rpcs3.vcxproj.user @@ -1,15 +1,15 @@  - $(SolutionDir)bin\ + $(SolutionDir)..\rpcs3_bin\ WindowsLocalDebugger - $(SolutionDir)bin\ + $(SolutionDir)..\rpcs3_bin\ WindowsLocalDebugger - $(SolutionDir)bin\ + $(SolutionDir)..\rpcs3_bin\ WindowsLocalDebugger diff --git a/rpcs3/stdafx.cpp b/rpcs3/stdafx.cpp index 1577c4e3bc..fd4f341c7b 100644 --- a/rpcs3/stdafx.cpp +++ b/rpcs3/stdafx.cpp @@ -1 +1 @@ -#include "stdafx.h" \ No newline at end of file +#include "stdafx.h" diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index cafdb54861..641cd68ca2 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -6,12 +6,16 @@ #include #endif -#define NOMINMAX +/* size of statically declared array */ +#define SARRSIZEOF(array) (sizeof(array)/sizeof(array[0])) +#define NOMINMAX +//#ifdef wxGUI #ifndef QT_UI #ifdef _WIN32 -#include +//#include #endif +#include #include #include #include @@ -37,9 +41,10 @@ #include #include "wx/app.h" #include +#include -#include #endif +//#endif #ifdef MSVC_CRT_MEMLEAK_DETECTION #ifdef _DEBUG @@ -274,19 +279,30 @@ enum Status }; #include "Utilities/BEType.h" +#include "Utilities/rFile.h" +#include "Utilities/rTime.h" +#include "Utilities/rXml.h" +#include "Utilities/rConcurrency.h" +#include "Utilities/rMsgBox.h" +#include "Utilities/rPlatform.h" #include "Utilities/Thread.h" #include "Utilities/Array.h" #include "Utilities/Timer.h" #include "Utilities/IdManager.h" #include "Utilities/StrFmt.h" -#include "Emu/SysCalls/Callback.h" -#include "Ini.h" -#include "Gui/FrameBase.h" -#include "Gui/ConLogFrame.h" #include "Emu/ConLog.h" +#include "Emu/DbgConsole.h" +#include "rpcs3/Ini.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Emu/SysCalls/Callback.h" +#include "Emu/DbgCommand.h" +//#ifdef wxGUI +#include "Gui/FrameBase.h" +#include "Gui/DbgFrame.h" +#include "Gui/ConLogFrame.h" +//#endif #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" @@ -300,6 +316,7 @@ enum Status #include "Emu/FS/vfsStreamMemory.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" +//#ifdef wxGUI #include "rpcs3.h" #define _PRGNAME_ "RPCS3" From 314307b84068c04e1772c750cea0b2f501ec0451 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sun, 8 Jun 2014 13:43:13 +0200 Subject: [PATCH 023/499] Fix building with precompiled headers add the unimplemented modules to the emucore project fix a bug in the rXml wrapper that didn't consider the possiblity of functions returning null pointers --- Utilities/rPlatform.cpp | 52 ++++++++++----- Utilities/rXml.cpp | 18 +++++- rpcs3/emucore.vcxproj | 41 +++++++++++- rpcs3/emucore.vcxproj.filters | 118 +++++++++++++++++++++++++++++++++- rpcs3/rpcs3.vcxproj | 2 +- 5 files changed, 209 insertions(+), 22 deletions(-) diff --git a/Utilities/rPlatform.cpp b/Utilities/rPlatform.cpp index d309feb13e..2fa307fb58 100644 --- a/Utilities/rPlatform.cpp +++ b/Utilities/rPlatform.cpp @@ -11,6 +11,10 @@ #include "Emu/Io/Null/NullPadHandler.h" #include "Emu/Io/Windows/WindowsPadHandler.h" +#if defined(_WIN32) +#include "Emu/Io/XInput/XInputPadHandler.h" +#endif + rCanvas::rCanvas(void *parent) { @@ -118,13 +122,16 @@ int rPlatform::getKeyboardHandlerCount() KeyboardHandlerBase *rPlatform::getKeyboardHandler(int i) { - if (i == 0) + switch (i) { - return new NullKeyboardHandler(); - } - else if (i == 1) - { - return new WindowsKeyboardHandler(); + case 0: + return new NullKeyboardHandler(); + break; + case 1: + return new WindowsKeyboardHandler(); + break; + default: + return new NullKeyboardHandler(); } } @@ -136,30 +143,45 @@ int rPlatform::getMouseHandlerCount() MouseHandlerBase *rPlatform::getMouseHandler(int i) { - if (i == 0) + switch (i) { + case 0: return new NullMouseHandler(); - } - else if (i == 1) - { + break; + case 1: return new WindowsMouseHandler(); + break; + default: + return new NullMouseHandler(); } } int rPlatform::getPadHandlerCount() { +#if defined(_WIN32) + return 3; +#else return 2; +#endif } PadHandlerBase *rPlatform::getPadHandler(int i) { - if (i == 0) + switch (i) { + case 0: + return new NullPadHandler(); + break; + case 1: + return new WindowsPadHandler(); + break; +#if defined(_WIN32) + case 2: + return new XInputPadHandler(); + break; +#endif + default: return new NullPadHandler(); } - else if (i == 1) - { - return new WindowsPadHandler(); - } } \ No newline at end of file diff --git a/Utilities/rXml.cpp b/Utilities/rXml.cpp index 089b88114d..62da3d4c0c 100644 --- a/Utilities/rXml.cpp +++ b/Utilities/rXml.cpp @@ -44,13 +44,27 @@ rXmlNode::~rXmlNode() std::shared_ptr rXmlNode::GetChildren() { wxXmlNode* result = reinterpret_cast(handle)->GetChildren(); - return std::make_shared(reinterpret_cast(result)); + if (result) + { + return std::make_shared(reinterpret_cast(result)); + } + else + { + return std::shared_ptr(nullptr); + } } std::shared_ptr rXmlNode::GetNext() { wxXmlNode* result = reinterpret_cast(handle)->GetNext(); - return std::make_shared(reinterpret_cast(result)); + if (result) + { + return std::make_shared(reinterpret_cast(result)); + } + else + { + return std::shared_ptr(nullptr); + } } std::string rXmlNode::GetName() diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 1eea900d87..706c2e44e5 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -52,6 +52,7 @@ + @@ -120,39 +121,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -215,6 +250,7 @@ + @@ -306,6 +342,8 @@ + + @@ -313,7 +351,6 @@ - diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index af59ad9daa..adf0547ca4 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -75,6 +75,9 @@ {84c34dd1-4c49-4ecf-8ee2-4165c14f24be} + + {ead7494f-a872-4b4d-a864-1a61c3b6012f} + @@ -461,9 +464,114 @@ Emu\SysCalls - + Emu\Cell + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + @@ -919,8 +1027,14 @@ Utilities - + Emu\Cell + + Emu\Cell\currently_unused + + + Emu\Cell\currently_unused + \ No newline at end of file diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index d0e69a97e9..aaafa6aa15 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -73,7 +73,7 @@ false false $(ProjectName)-$(PlatformShortName) - + Level3 From 10e10de98d119052abded8190779013e0e5aad4a Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sun, 8 Jun 2014 15:57:37 +0200 Subject: [PATCH 024/499] add xinput pad handler to the windows emucore --- rpcs3/emucore.vcxproj | 2 ++ rpcs3/emucore.vcxproj.filters | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 706c2e44e5..22759f96d8 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -188,6 +188,7 @@ + @@ -351,6 +352,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index adf0547ca4..8b0787ecba 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -78,6 +78,9 @@ {ead7494f-a872-4b4d-a864-1a61c3b6012f} + + {187d33b8-7b69-4081-9545-de6ad1d8fe98} + @@ -572,6 +575,9 @@ Emu\Cell\currently_unused + + Emu\Io\XInput + @@ -1036,5 +1042,8 @@ Emu\Cell\currently_unused + + Emu\Io\XInput + \ No newline at end of file From ed10ea754438e4ef58ec51b095ba471ee44c5895 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sun, 8 Jun 2014 23:02:20 +0200 Subject: [PATCH 025/499] add back fused gui log classes, this needs to be redone another way also, add back wx requirement for strfmt --- Utilities/StrFmt.cpp | 33 ++++--- rpcs3/Emu/DbgConsole.cpp | 131 +++++++++++++------------- rpcs3/Emu/DbgConsole.h | 164 +++++++++++++++----------------- rpcs3/Gui/ConLog.cpp | 170 ++++++++++++++++++++++++++++++++-- rpcs3/Gui/DbgFrame.cpp | 94 ------------------- rpcs3/Gui/DbgFrame.h | 23 ----- rpcs3/emucore.vcxproj | 2 - rpcs3/emucore.vcxproj.filters | 6 -- rpcs3/rpcs3.cpp | 17 ---- rpcs3/rpcs3.vcxproj | 6 +- rpcs3/rpcs3.vcxproj.filters | 12 +-- rpcs3/stdafx.h | 7 +- 12 files changed, 332 insertions(+), 333 deletions(-) delete mode 100644 rpcs3/Gui/DbgFrame.cpp delete mode 100644 rpcs3/Gui/DbgFrame.h diff --git a/Utilities/StrFmt.cpp b/Utilities/StrFmt.cpp index 259b3c0ce3..2ee8d8c9f6 100644 --- a/Utilities/StrFmt.cpp +++ b/Utilities/StrFmt.cpp @@ -54,23 +54,22 @@ std::string replace_all(std::string src, const std::string& from, const std::str return src; } -//#ifdef wxGUI -////convert a wxString to a std::string encoded in utf8 -////CAUTION, only use this to interface with wxWidgets classes -//std::string fmt::ToUTF8(const wxString& right) -//{ -// auto ret = std::string(((const char *) right.utf8_str())); -// return ret; -//} -// -////convert a std::string encoded in utf8 to a wxString -////CAUTION, only use this to interface with wxWidgets classes -//wxString fmt::FromUTF8(const std::string& right) -//{ -// auto ret = wxString::FromUTF8(right.c_str()); -// return ret; -//} -//#endif +//TODO: move this wx Stuff somewhere else +//convert a wxString to a std::string encoded in utf8 +//CAUTION, only use this to interface with wxWidgets classes +std::string fmt::ToUTF8(const wxString& right) +{ + auto ret = std::string(((const char *)right.utf8_str())); + return ret; +} + +//convert a std::string encoded in utf8 to a wxString +//CAUTION, only use this to interface with wxWidgets classes +wxString fmt::FromUTF8(const std::string& right) +{ + auto ret = wxString::FromUTF8(right.c_str()); + return ret; +} //TODO: remove this after every snippet that uses it is gone //WARNING: not fully compatible with CmpNoCase from wxString diff --git a/rpcs3/Emu/DbgConsole.cpp b/rpcs3/Emu/DbgConsole.cpp index 11bab7990e..3e9605cbbd 100644 --- a/rpcs3/Emu/DbgConsole.cpp +++ b/rpcs3/Emu/DbgConsole.cpp @@ -4,91 +4,94 @@ #include "Emu/System.h" #include "DbgConsole.h" -LogWriter ConLog; -class LogFrame; -extern LogFrame* ConLogFrame; +BEGIN_EVENT_TABLE(DbgConsole, FrameBase) +EVT_CLOSE(DbgConsole::OnQuit) +END_EVENT_TABLE() -_LogBuffer LogBuffer; - -std::mutex g_cs_conlog; - -const uint max_item_count = 500; -const uint buffer_size = 1024 * 64; - -static const std::string g_log_colors[] = +DbgConsole::DbgConsole() +: FrameBase(nullptr, wxID_ANY, "Debug Console", "", wxDefaultSize, wxDefaultPosition, wxDEFAULT_FRAME_STYLE, true) +, ThreadBase("DbgConsole thread") +, m_output(nullptr) { - "Black", "Green", "White", "Yellow", "Red", -}; + m_console = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, + wxSize(500, 500), wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH2); + m_console->SetBackgroundColour(wxColor("Black")); + m_console->SetFont(wxFont(8, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL)); -LogWriter::LogWriter() -{ - if (!m_logfile.Open(_PRGNAME_ ".log", rFile::write)) - { - rMessageBox("Can't create log file! (" _PRGNAME_ ".log)", rMessageBoxCaptionStr, rICON_ERROR); - } + m_color_white = new wxTextAttr(wxColour(255, 255, 255)); + m_color_red = new wxTextAttr(wxColour(255, 0, 0)); + + if (Ini.HLESaveTTY.GetValue()) + m_output = new wxFile("tty.log", wxFile::write); } -void LogWriter::WriteToLog(const std::string& prefix, const std::string& value, u8 lvl/*, wxColour bgcolour*/) +DbgConsole::~DbgConsole() { - std::string new_prefix = prefix; - if (!prefix.empty()) + ThreadBase::Stop(); + m_dbg_buffer.Flush(); + + safe_delete(m_console); + safe_delete(m_color_white); + safe_delete(m_color_red); + safe_delete(m_output); +} + +void DbgConsole::Write(int ch, const std::string& text) +{ + while (m_dbg_buffer.IsBusy()) { - if (NamedThreadBase* thr = GetCurrentNamedThread()) + if (Emu.IsStopped()) { - new_prefix += " : " + thr->GetThreadName(); + return; } + Sleep(1); } + m_dbg_buffer.Push(DbgPacket(ch, text)); - if (m_logfile.IsOpened() && !new_prefix.empty()) - m_logfile.Write("[" + new_prefix + "]: " + value + "\n"); + if (!IsAlive()) Start(); +} - if (!ConLogFrame || Ini.HLELogLvl.GetValue() == 4 || (lvl != 0 && lvl <= Ini.HLELogLvl.GetValue())) - return; +void DbgConsole::Clear() +{ + m_console->Clear(); +} - std::lock_guard lock(g_cs_conlog); - - // TODO: Use ThreadBase instead, track main thread id - if (rThread::IsMain()) +void DbgConsole::Task() +{ + while (!TestDestroy()) { - while (LogBuffer.IsBusy()) - { - // need extra break condition? - rYieldIfNeeded(); - } - } - else - { - while (LogBuffer.IsBusy()) + if (!m_dbg_buffer.HasNewPacket()) { if (Emu.IsStopped()) { break; } Sleep(1); + continue; } + + DbgPacket packet = m_dbg_buffer.Pop(); + m_console->SetDefaultStyle(packet.m_ch == 1 ? *m_color_red : *m_color_white); + m_console->SetInsertionPointEnd(); + m_console->WriteText(fmt::FromUTF8(packet.m_text)); + + if (m_output && Ini.HLESaveTTY.GetValue()) + m_output->Write(fmt::FromUTF8(packet.m_text)); + + if (!DbgConsole::IsShown()) Show(); + } +} + +void DbgConsole::OnQuit(wxCloseEvent& event) +{ + ThreadBase::Stop(false); + Hide(); + + if (m_output) + { + m_output->Close(); + m_output = nullptr; } - //if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush(); - - LogBuffer.Push(LogPacket(new_prefix, value, g_log_colors[lvl])); -} - - -void LogWriter::SkipLn() -{ - WriteToLog("", "", 0); -} - -void DbgConsole::Close() -{ - i = 1; -} - -void DbgConsole::Clear() -{ - i = 2; -} - -void DbgConsole::Write(int ch, const std::string &msg) -{ + //event.Skip(); } diff --git a/rpcs3/Emu/DbgConsole.h b/rpcs3/Emu/DbgConsole.h index ce17097552..83ea344da6 100644 --- a/rpcs3/Emu/DbgConsole.h +++ b/rpcs3/Emu/DbgConsole.h @@ -2,8 +2,61 @@ #include //for memset -extern const uint max_item_count; -extern const uint buffer_size; +//struct _DbgBuffer : public MTPacketBuffer +//{ +// _DbgBuffer() : MTPacketBuffer(1024) +// { +// } +// +// void _push(const DbgPacket& data) +// { +// const u32 stext = data.m_text.length(); +// +// m_buffer.resize(m_buffer.size() + sizeof(int) + sizeof(u32) + stext); +// +// u32 c_put = m_put; +// +// memcpy(&m_buffer[c_put], &data.m_ch, sizeof(int)); +// c_put += sizeof(int); +// +// memcpy(&m_buffer[c_put], &stext, sizeof(u32)); +// c_put += sizeof(u32); +// memcpy(&m_buffer[c_put], data.m_text.data(), stext); +// c_put += stext; +// +// m_put = c_put; +// CheckBusy(); +// } +// +// DbgPacket _pop() +// { +// DbgPacket ret; +// +// u32 c_get = m_get; +// +// ret.m_ch = *(int*)&m_buffer[c_get]; +// c_get += sizeof(int); +// +// const u32& stext = *(u32*)&m_buffer[c_get]; +// c_get += sizeof(u32); +// if (stext) ret.m_text = std::string(reinterpret_cast(&m_buffer[c_get]), stext ); +// c_get += stext; +// +// m_get = c_get; +// if(!HasNewPacket()) Flush(); +// +// return ret; +// } +//}; +// +//struct DbgConsole +//{ +// void *congui; +// DbgConsole(); +// void Close(); +// void Clear(); +// void Write(int ch, const std::string &msg); +//}; struct DbgPacket { @@ -26,87 +79,6 @@ struct DbgPacket } }; -struct LogPacket -{ - const std::string m_prefix; - const std::string m_text; - const std::string m_colour; - - LogPacket(const std::string& prefix, const std::string& text, const std::string& colour) - : m_prefix(prefix) - , m_text(text) - , m_colour(colour) - { - - } -}; - -struct _LogBuffer : public MTPacketBuffer -{ - _LogBuffer() : MTPacketBuffer(buffer_size) - { - } - - void _push(const LogPacket& data) - { - const u32 sprefix = data.m_prefix.length(); - const u32 stext = data.m_text.length(); - const u32 scolour = data.m_colour.length(); - - m_buffer.resize(m_buffer.size() + - sizeof(u32) + sprefix + - sizeof(u32) + stext + - sizeof(u32) + scolour); - - u32 c_put = m_put; - - memcpy(&m_buffer[c_put], &sprefix, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_prefix.c_str(), sprefix); - c_put += sprefix; - - memcpy(&m_buffer[c_put], &stext, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_text.c_str(), stext); - c_put += stext; - - memcpy(&m_buffer[c_put], &scolour, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_colour.c_str(), scolour); - c_put += scolour; - - m_put = c_put; - CheckBusy(); - } - - LogPacket _pop() - { - u32 c_get = m_get; - - const u32& sprefix = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string prefix((const char*)&m_buffer[c_get], sprefix); - c_get += sprefix; - - const u32& stext = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string text((const char*)&m_buffer[c_get], stext); - c_get += stext; - - const u32& scolour = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string colour((const char*)&m_buffer[c_get], scolour); - c_get += scolour; - - m_get = c_get; - if (!HasNewPacket()) Flush(); - - return LogPacket(prefix, text, colour); - } -}; - -extern _LogBuffer LogBuffer; - struct _DbgBuffer : public MTPacketBuffer { _DbgBuffer() : MTPacketBuffer(1024) @@ -144,20 +116,34 @@ struct _DbgBuffer : public MTPacketBuffer const u32& stext = *(u32*)&m_buffer[c_get]; c_get += sizeof(u32); - if (stext) ret.m_text = std::string(reinterpret_cast(&m_buffer[c_get]), stext ); + if (stext) ret.m_text = std::string(reinterpret_cast(&m_buffer[c_get]), stext); c_get += stext; m_get = c_get; - if(!HasNewPacket()) Flush(); + if (!HasNewPacket()) Flush(); return ret; } }; -struct DbgConsole +class DbgConsole + : public FrameBase + , public ThreadBase { - int i; - void Close(); + wxFile* m_output; + wxTextCtrl* m_console; + wxTextAttr* m_color_white; + wxTextAttr* m_color_red; + _DbgBuffer m_dbg_buffer; + +public: + DbgConsole(); + ~DbgConsole(); + void Write(int ch, const std::string& text); void Clear(); - void Write(int ch, const std::string &msg); + virtual void Task(); + +private: + void OnQuit(wxCloseEvent& event); + DECLARE_EVENT_TABLE(); }; \ No newline at end of file diff --git a/rpcs3/Gui/ConLog.cpp b/rpcs3/Gui/ConLog.cpp index 870d3b7204..210600bd4a 100644 --- a/rpcs3/Gui/ConLog.cpp +++ b/rpcs3/Gui/ConLog.cpp @@ -15,17 +15,171 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" +LogWriter ConLog; +class LogFrame; +extern LogFrame* ConLogFrame; + +std::mutex g_cs_conlog; + +const uint max_item_count = 500; +const uint buffer_size = 1024 * 64; + +static const std::string g_log_colors[] = +{ + "Black", "Green", "White", "Yellow", "Red", +}; + + +struct LogPacket +{ + const std::string m_prefix; + const std::string m_text; + const std::string m_colour; + + LogPacket(const std::string& prefix, const std::string& text, const std::string& colour) + : m_prefix(prefix) + , m_text(text) + , m_colour(colour) + { + + } +}; + +struct _LogBuffer : public MTPacketBuffer +{ + _LogBuffer() : MTPacketBuffer(buffer_size) + { + } + + void _push(const LogPacket& data) + { + const u32 sprefix = data.m_prefix.length(); + const u32 stext = data.m_text.length(); + const u32 scolour = data.m_colour.length(); + + m_buffer.resize(m_buffer.size() + + sizeof(u32) + sprefix + + sizeof(u32) + stext + + sizeof(u32) + scolour); + + u32 c_put = m_put; + + memcpy(&m_buffer[c_put], &sprefix, sizeof(u32)); + c_put += sizeof(u32); + memcpy(&m_buffer[c_put], data.m_prefix.c_str(), sprefix); + c_put += sprefix; + + memcpy(&m_buffer[c_put], &stext, sizeof(u32)); + c_put += sizeof(u32); + memcpy(&m_buffer[c_put], data.m_text.c_str(), stext); + c_put += stext; + + memcpy(&m_buffer[c_put], &scolour, sizeof(u32)); + c_put += sizeof(u32); + memcpy(&m_buffer[c_put], data.m_colour.c_str(), scolour); + c_put += scolour; + + m_put = c_put; + CheckBusy(); + } + + LogPacket _pop() + { + u32 c_get = m_get; + + const u32& sprefix = *(u32*)&m_buffer[c_get]; + c_get += sizeof(u32); + const std::string prefix((const char*)&m_buffer[c_get], sprefix); + c_get += sprefix; + + const u32& stext = *(u32*)&m_buffer[c_get]; + c_get += sizeof(u32); + const std::string text((const char*)&m_buffer[c_get], stext); + c_get += stext; + + const u32& scolour = *(u32*)&m_buffer[c_get]; + c_get += sizeof(u32); + const std::string colour((const char*)&m_buffer[c_get], scolour); + c_get += scolour; + + m_get = c_get; + if (!HasNewPacket()) Flush(); + + return LogPacket(prefix, text, colour); + } +}; + +_LogBuffer LogBuffer; + +LogWriter::LogWriter() +{ + if (!m_logfile.Open(_PRGNAME_ ".log", rFile::write)) + { + rMessageBox("Can't create log file! (" _PRGNAME_ ".log)", rMessageBoxCaptionStr, rICON_ERROR); + } +} + +void LogWriter::WriteToLog(const std::string& prefix, const std::string& value, u8 lvl/*, wxColour bgcolour*/) +{ + std::string new_prefix = prefix; + if (!prefix.empty()) + { + if (NamedThreadBase* thr = GetCurrentNamedThread()) + { + new_prefix += " : " + thr->GetThreadName(); + } + } + + if (m_logfile.IsOpened() && !new_prefix.empty()) + m_logfile.Write("[" + new_prefix + "]: " + value + "\n"); + + if (!ConLogFrame || Ini.HLELogLvl.GetValue() == 4 || (lvl != 0 && lvl <= Ini.HLELogLvl.GetValue())) + return; + + std::lock_guard lock(g_cs_conlog); + + // TODO: Use ThreadBase instead, track main thread id + if (rThread::IsMain()) + { + while (LogBuffer.IsBusy()) + { + // need extra break condition? + rYieldIfNeeded(); + } + } + else + { + while (LogBuffer.IsBusy()) + { + if (Emu.IsStopped()) + { + break; + } + Sleep(1); + } + } + + //if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush(); + + LogBuffer.Push(LogPacket(new_prefix, value, g_log_colors[lvl])); +} + + +void LogWriter::SkipLn() +{ + WriteToLog("", "", 0); +} LogFrame* ConLogFrame; BEGIN_EVENT_TABLE(LogFrame, wxPanel) - EVT_CLOSE(LogFrame::OnQuit) +EVT_CLOSE(LogFrame::OnQuit) END_EVENT_TABLE() LogFrame::LogFrame(wxWindow* parent) - : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(600, 500)) - , ThreadBase("LogThread") - , m_log(*new wxListView(this)) +: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(600, 500)) +, ThreadBase("LogThread") +, m_log(*new wxListView(this)) { m_log.InsertColumn(0, "Thread"); m_log.InsertColumn(1, "Log"); @@ -35,7 +189,7 @@ LogFrame::LogFrame(wxWindow* parent) s_main->Add(&m_log, 1, wxEXPAND); SetSizer(s_main); Layout(); - + Show(); ThreadBase::Start(); } @@ -53,9 +207,9 @@ bool LogFrame::Close(bool force) void LogFrame::Task() { - while(!TestDestroy()) + while (!TestDestroy()) { - if(!LogBuffer.HasNewPacket()) + if (!LogBuffer.HasNewPacket()) { Sleep(1); continue; @@ -99,4 +253,4 @@ void LogFrame::OnQuit(wxCloseEvent& event) Stop(false); ConLogFrame = nullptr; event.Skip(); -} +} \ No newline at end of file diff --git a/rpcs3/Gui/DbgFrame.cpp b/rpcs3/Gui/DbgFrame.cpp deleted file mode 100644 index 9f966fd932..0000000000 --- a/rpcs3/Gui/DbgFrame.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "stdafx.h" -#include "DbgFrame.h" - -BEGIN_EVENT_TABLE(DbgFrame, FrameBase) -EVT_CLOSE(DbgFrame::OnQuit) -END_EVENT_TABLE() - -DbgFrame::DbgFrame() -: FrameBase(nullptr, wxID_ANY, "DbgFrame", "", wxDefaultSize, wxDefaultPosition, wxDEFAULT_FRAME_STYLE, true) -, ThreadBase("DbgFrame thread") -, m_output(nullptr) -{ - m_console = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, - wxSize(500, 500), wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH2); - m_console->SetBackgroundColour(wxColor("Black")); - m_console->SetFont(wxFont(8, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL)); - - m_color_white = new wxTextAttr(wxColour(255, 255, 255)); - m_color_red = new wxTextAttr(wxColour(255, 0, 0)); - - if (Ini.HLESaveTTY.GetValue()) - m_output = new rFile("tty.log", rFile::write); -} - -DbgFrame::~DbgFrame() -{ - ThreadBase::Stop(); - m_dbg_buffer.Flush(); - - safe_delete(m_console); - safe_delete(m_color_white); - safe_delete(m_color_red); - safe_delete(m_output); -} - -void DbgFrame::Write(int ch, const std::string& text) -{ - while (m_dbg_buffer.IsBusy()) - { - if (Emu.IsStopped()) - { - return; - } - Sleep(1); - } - m_dbg_buffer.Push(DbgPacket(ch, text)); - - if (!IsAlive()) Start(); -} - -void DbgFrame::Clear() -{ - m_console->Clear(); -} - -void DbgFrame::Task() -{ - while (!TestDestroy()) - { - if (!m_dbg_buffer.HasNewPacket()) - { - if (Emu.IsStopped()) - { - break; - } - Sleep(1); - continue; - } - - DbgPacket packet = m_dbg_buffer.Pop(); - m_console->SetDefaultStyle(packet.m_ch == 1 ? *m_color_red : *m_color_white); - m_console->SetInsertionPointEnd(); - m_console->WriteText(fmt::FromUTF8(packet.m_text)); - - if (m_output && Ini.HLESaveTTY.GetValue()) - m_output->Write(packet.m_text); - - if (!DbgFrame::IsShown()) Show(); - } -} - -void DbgFrame::OnQuit(wxCloseEvent& event) -{ - ThreadBase::Stop(false); - Hide(); - - if (m_output) - { - m_output->Close(); - m_output = nullptr; - } - - //event.Skip(); -} \ No newline at end of file diff --git a/rpcs3/Gui/DbgFrame.h b/rpcs3/Gui/DbgFrame.h deleted file mode 100644 index d6dda5d873..0000000000 --- a/rpcs3/Gui/DbgFrame.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -class DbgFrame - : public FrameBase - , public ThreadBase -{ - rFile* m_output; - wxTextCtrl* m_console; - wxTextAttr* m_color_white; - wxTextAttr* m_color_red; - _DbgBuffer m_dbg_buffer; - -public: - DbgFrame(); - ~DbgFrame(); - void Write(int ch, const std::string& text); - void Clear(); - virtual void Task(); - -private: - void OnQuit(wxCloseEvent& event); - DECLARE_EVENT_TABLE(); -}; diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 22759f96d8..98c3d61ac6 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -60,7 +60,6 @@ - @@ -268,7 +267,6 @@ - diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 8b0787ecba..0e7e6156ab 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -107,9 +107,6 @@ Crypto - - Emu - Emu @@ -604,9 +601,6 @@ Crypto - - Emu - Emu diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index f0a50e9b3f..ac0bec64b9 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -86,21 +86,4 @@ CPUThread& GetCPU(const u8 core) return Emu.GetCPU().Get(core); }*/ -//TODOB: remove this -//convert a wxString to a std::string encoded in utf8 -//CAUTION, only use this to interface with wxWidgets classes -std::string fmt::ToUTF8(const wxString& right) -{ - auto ret = std::string(((const char *)right.utf8_str())); - return ret; -} - -//convert a std::string encoded in utf8 to a wxString -//CAUTION, only use this to interface with wxWidgets classes -wxString fmt::FromUTF8(const std::string& right) -{ - auto ret = wxString::FromUTF8(right.c_str()); - return ret; -} - GameInfo CurGameInfo; diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index aaafa6aa15..d243fdc91a 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -73,7 +73,7 @@ false false $(ProjectName)-$(PlatformShortName) - + Level3 @@ -163,9 +163,9 @@ + - @@ -208,10 +208,10 @@ + - diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 23360f567c..a9707872ef 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -99,12 +99,12 @@ Gui - - Gui - Emu + + Emu + @@ -218,11 +218,11 @@ Gui - - Gui - Gui + + Emu + \ No newline at end of file diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 641cd68ca2..2a55bac8f1 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -291,17 +291,16 @@ enum Status #include "Utilities/IdManager.h" #include "Utilities/StrFmt.h" +#include "rpcs3/Ini.h" +#include "Gui/FrameBase.h" +#include "Gui/ConLogFrame.h" #include "Emu/ConLog.h" #include "Emu/DbgConsole.h" -#include "rpcs3/Ini.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Callback.h" #include "Emu/DbgCommand.h" //#ifdef wxGUI -#include "Gui/FrameBase.h" -#include "Gui/DbgFrame.h" -#include "Gui/ConLogFrame.h" //#endif #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" From 33d82e0d6e9525cb102ae688fa53521004205783 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sun, 8 Jun 2014 23:23:36 +0200 Subject: [PATCH 026/499] reset debug output directory --- rpcs3/rpcs3.vcxproj.user | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpcs3/rpcs3.vcxproj.user b/rpcs3/rpcs3.vcxproj.user index 02ce42b74d..b03467fb6a 100644 --- a/rpcs3/rpcs3.vcxproj.user +++ b/rpcs3/rpcs3.vcxproj.user @@ -1,15 +1,15 @@  - $(SolutionDir)..\rpcs3_bin\ + $(SolutionDir)bin\ WindowsLocalDebugger - $(SolutionDir)..\rpcs3_bin\ + $(SolutionDir)bin\ WindowsLocalDebugger - $(SolutionDir)..\rpcs3_bin\ + $(SolutionDir)bin\ WindowsLocalDebugger From e85abdeb2c9d372beb73354f95f84200bba0a8fc Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Mon, 9 Jun 2014 02:51:55 +0200 Subject: [PATCH 027/499] remove unexplained commented out code that I added myself with the last PR * remove unexplained commented out code that I added myself * revert asmjit settings change that was meant to only be local for me --- Utilities/StrFmt.h | 23 -------------- Utilities/rConcurrency.cpp | 15 --------- Utilities/rFile.cpp | 16 ---------- Utilities/rPlatform.cpp | 5 --- Utilities/rPlatform.h | 28 +---------------- Utilities/rTime.cpp | 32 +------------------ asmjitsrc/asmjit.vcxproj | 10 ++---- rpcs3.sln | 2 -- rpcs3/Emu/Cell/PPUInterpreter.h | 1 - rpcs3/Emu/Cell/PPUThread.h | 1 - rpcs3/Emu/DbgConsole.h | 56 --------------------------------- rpcs3/Emu/GS/GL/GLGSRender.cpp | 3 +- rpcs3/Emu/Io/Pad.cpp | 8 ----- rpcs3/Emu/SysCalls/Modules.cpp | 3 -- rpcs3/Emu/System.h | 4 --- rpcs3/stdafx.h | 13 -------- 16 files changed, 5 insertions(+), 215 deletions(-) diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 9b4892b959..2ac1d27cc7 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -9,29 +9,6 @@ #define snprintf _snprintf #endif - - -//int CmpNoCase(const std::string &str, const std::string &str2) -//{ -// bool same; -// if (str.size() > str2.size()) -// { -// same = std::equal(str.cbegin(), str.cend(), str2.cbegin(), [](const char a, const char b) -> bool{ return tolower(a) == tolower(b); }); -// } -// else -// { -// same = std::equal(str2.cbegin(), str2.cend(), str.cbegin(), [](const char a, const char b) -> bool{ return tolower(a) == tolower(b); }); -// } -// if (same) -// { -// return 0; -// } -// else -// { -// return 1; -// } -//} - namespace fmt{ using std::string; using std::ostream; diff --git a/Utilities/rConcurrency.cpp b/Utilities/rConcurrency.cpp index cf60ff69ca..10afc624e2 100644 --- a/Utilities/rConcurrency.cpp +++ b/Utilities/rConcurrency.cpp @@ -5,11 +5,6 @@ rSemaphore::rSemaphore() handle = reinterpret_cast(new wxSemaphore()); } -//rSemaphore::rSemaphore(rSemaphore& other) -//{ -// handle = reinterpret_cast(new wxSemaphore(*reinterpret_cast(other.handle))); -//} - rSemaphore::~rSemaphore() { delete reinterpret_cast(handle); @@ -53,11 +48,6 @@ rCriticalSection::rCriticalSection() handle = reinterpret_cast(new wxCriticalSection()); } -//rCriticalSection::rCriticalSection(rCriticalSection&) -//{ -// handle = reinterpret_cast(new wxCriticalSection(*reinterpret_cast(other.handle))); -//} - rCriticalSection::~rCriticalSection() { delete reinterpret_cast(handle); @@ -78,11 +68,6 @@ rTimer::rTimer() handle = reinterpret_cast(new wxTimer()); } -//rTimer::rTimer(rTimer&) -//{ -// handle = reinterpret_cast(new wxTimer(*reinterpret_cast(other.handle))); -//} - rTimer::~rTimer() { delete reinterpret_cast(handle); diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index c05e8e9c8e..51f47a990e 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -2,22 +2,6 @@ const int rPATH_MKDIR_FULL = wxPATH_MKDIR_FULL; -//enum rSeekMode -//{ -// rFromStart, -// rFromCurrent, -// rFromEnd -//}; -// -// enum OpenMode -// { -// read, -// write, -// read_write, -// write_append, -// write_excl -// }; - wxFile::OpenMode convertOpenMode(rFile::OpenMode open) { wxFile::OpenMode mode; diff --git a/Utilities/rPlatform.cpp b/Utilities/rPlatform.cpp index 2fa307fb58..60144f5001 100644 --- a/Utilities/rPlatform.cpp +++ b/Utilities/rPlatform.cpp @@ -26,11 +26,6 @@ rCanvas::~rCanvas() delete static_cast(handle); } -//void *rCanvas::GetCurrent() -//{ -// static_cast(handle)->GetCur; -//} - bool rCanvas::SetCurrent(void *ctx) { return static_cast(handle)->SetCurrent(*static_cast(ctx)); diff --git a/Utilities/rPlatform.h b/Utilities/rPlatform.h index 040d1f3e1c..8d8edfca98 100644 --- a/Utilities/rPlatform.h +++ b/Utilities/rPlatform.h @@ -2,7 +2,6 @@ #include #include -//struct rGLContext; #include "Emu/Io/Null/NullKeyboardHandler.h" #include "Emu/Io/Null/NullMouseHandler.h" #include "Emu/Io/Null/NullPadHandler.h" @@ -18,31 +17,7 @@ struct rCanvas void *handle; }; -//struct rGLContext -//{ -// rGLContext(); -// rGLContext(rGLContext &) = delete; -// rGLContext(rCanvas *canvas); -// ~rGLContext(); -// -// void *handle; -//}; - -//struct rFrame -//{ -// rFrame(); -// rFrame(rFrame &) = delete; -// ~rFrame(); -// -// void Close(); -// bool IsShown(); -// void Hide(); -// void Show(); -// -// void *handle; -//}; - -struct rGLFrame/*: public rFrame*/ +struct rGLFrame { rGLFrame(); rGLFrame(const rGLFrame &) = delete; @@ -56,7 +31,6 @@ struct rGLFrame/*: public rFrame*/ void *handle; void SetCurrent( void *ctx); - //rCanvas *GetCanvas(); void *GetNewContext(); void Flip(/*rGLContext*/void *ctx); }; diff --git a/Utilities/rTime.cpp b/Utilities/rTime.cpp index aac6d514ab..21aba77740 100644 --- a/Utilities/rTime.cpp +++ b/Utilities/rTime.cpp @@ -47,31 +47,6 @@ rDateSpan::rDateSpan(int a, int b, int c, int d) handle = static_cast(new wxDateSpan(a,b,c,d)); } - //enum TZ - //{ - // Local, GMT, UTC - //}; - //enum Calender - //{ - // Gregorian - //}; - - //struct rTimeZone - //{ - // rTimeZone(); - // rTimeZone(rDateTime::TZ timezone); - //}; - //struct WeekDay - //{ - // WeekDay(); - // WeekDay(int a); - //}; - //struct Month - //{ - // Month(); - // Month(int a); - //}; - rDateTime::rDateTime() { handle = static_cast(new wxDateTime()); @@ -143,11 +118,6 @@ void rDateTime::Add(const rDateSpan& span) static_cast(handle)->Add(*static_cast(span.handle)); } -//void rDateTime::Close() -//{ -// static_cast(handle)->Close(); -//} - wxDateTime::TimeZone convertTZ(rDateTime::rTimeZone tz) { switch (tz) @@ -170,7 +140,7 @@ std::string rDateTime::Format(const std::string &format, const rTimeZone &tz) co void rDateTime::ParseDateTime(const std::string & format) { - /*return fmt::ToUTF8(*/static_cast(handle)->ParseDateTime(fmt::FromUTF8(format)); + static_cast(handle)->ParseDateTime(fmt::FromUTF8(format)); } u32 rDateTime::GetAsDOS() diff --git a/asmjitsrc/asmjit.vcxproj b/asmjitsrc/asmjit.vcxproj index 67b4f55262..28da0c7bdb 100644 --- a/asmjitsrc/asmjit.vcxproj +++ b/asmjitsrc/asmjit.vcxproj @@ -69,14 +69,14 @@ StaticLibrary false v120 - false + true Unicode StaticLibrary false v120 - false + true Unicode @@ -151,9 +151,6 @@ true true - - false - @@ -169,9 +166,6 @@ true true - - false - diff --git a/rpcs3.sln b/rpcs3.sln index c1eece25ed..fbf2e2cd4e 100644 --- a/rpcs3.sln +++ b/rpcs3.sln @@ -1,8 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0.21005.1 -# Visual Studio Express 2013 for Windows Desktop -VisualStudioVersion = 12.0.30501.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rpcs3", "rpcs3\rpcs3.vcxproj", "{70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}" ProjectSection(ProjectDependencies) = postProject diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index f2d9e732c0..c8e5960d21 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -4,7 +4,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -//#include "rpcs3.h" //GUI dependency #include #ifdef _MSC_VER #include diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 4e33741965..57b65474aa 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -2,7 +2,6 @@ #define PPUTHREAD_H #include "Emu/Cell/PPCThread.h" #include "Emu/SysCalls/SysCalls.h" -//#include "rpcs3.h" //GUI dependency #include enum diff --git a/rpcs3/Emu/DbgConsole.h b/rpcs3/Emu/DbgConsole.h index 83ea344da6..5775f98865 100644 --- a/rpcs3/Emu/DbgConsole.h +++ b/rpcs3/Emu/DbgConsole.h @@ -2,62 +2,6 @@ #include //for memset -//struct _DbgBuffer : public MTPacketBuffer -//{ -// _DbgBuffer() : MTPacketBuffer(1024) -// { -// } -// -// void _push(const DbgPacket& data) -// { -// const u32 stext = data.m_text.length(); -// -// m_buffer.resize(m_buffer.size() + sizeof(int) + sizeof(u32) + stext); -// -// u32 c_put = m_put; -// -// memcpy(&m_buffer[c_put], &data.m_ch, sizeof(int)); -// c_put += sizeof(int); -// -// memcpy(&m_buffer[c_put], &stext, sizeof(u32)); -// c_put += sizeof(u32); -// memcpy(&m_buffer[c_put], data.m_text.data(), stext); -// c_put += stext; -// -// m_put = c_put; -// CheckBusy(); -// } -// -// DbgPacket _pop() -// { -// DbgPacket ret; -// -// u32 c_get = m_get; -// -// ret.m_ch = *(int*)&m_buffer[c_get]; -// c_get += sizeof(int); -// -// const u32& stext = *(u32*)&m_buffer[c_get]; -// c_get += sizeof(u32); -// if (stext) ret.m_text = std::string(reinterpret_cast(&m_buffer[c_get]), stext ); -// c_get += stext; -// -// m_get = c_get; -// if(!HasNewPacket()) Flush(); -// -// return ret; -// } -//}; -// -//struct DbgConsole -//{ -// void *congui; -// DbgConsole(); -// void Close(); -// void Clear(); -// void Write(int ch, const std::string &msg); -//}; - struct DbgPacket { int m_ch; diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 7fdcd7e19c..af45cda7fb 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -608,9 +608,8 @@ void GLGSRender::OnInit() void GLGSRender::OnInitThread() { - m_context = m_frame->GetNewContext();//new rGLContext(m_frame->GetCanvas()); + m_context = m_frame->GetNewContext(); - //m_frame->GetCanvas()->SetCurrent(*m_context); m_frame->SetCurrent(m_context); InitProcTable(); diff --git a/rpcs3/Emu/Io/Pad.cpp b/rpcs3/Emu/Io/Pad.cpp index 41d4b7ca43..eea1e552c7 100644 --- a/rpcs3/Emu/Io/Pad.cpp +++ b/rpcs3/Emu/Io/Pad.cpp @@ -3,14 +3,6 @@ #include "rpcs3/Ini.h" #include "Pad.h" #include "Null/NullPadHandler.h" -#ifdef wxGUI -#include "Windows/WindowsPadHandler.h" -#include "rpcs3.h" -#if defined(_WIN32) -#include "XInput/XInputPadHandler.h" -#endif -#endif - PadManager::PadManager() : m_pad_handler(nullptr) diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 158b451466..590063f397 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -110,15 +110,12 @@ void Module::UnLoad() bool Module::Load(u32 id) { - //std::lock_guard lock(g_funcs_lock); - if(Emu.GetModuleManager().IsLoadedFunc(id)) return false; for(u32 i=0; iid == id) { - //g_modules_funcs_list.push_back(m_funcs_list[i]); Emu.GetModuleManager().AddFunc(m_funcs_list[i]); return true; } diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index c967e66de8..ad43f078ac 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -14,8 +14,6 @@ class EventManager; class ModuleManager; class StaticFuncManager; -//class CPUThreadManager; -//class CPUThread; struct EmuInfo { @@ -75,8 +73,6 @@ class Emulator u32 m_rsx_callback; u32 m_ppu_thr_exit; - //MemoryViewerPanel* m_memory_viewer; //GUI dependency - //ArrayF m_cpu_threads; std::vector> m_modules_init; std::vector m_break_points; diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 2a55bac8f1..16c34d9301 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -10,11 +10,7 @@ #define SARRSIZEOF(array) (sizeof(array)/sizeof(array[0])) #define NOMINMAX -//#ifdef wxGUI #ifndef QT_UI -#ifdef _WIN32 -//#include -#endif #include #include #include @@ -44,7 +40,6 @@ #include #endif -//#endif #ifdef MSVC_CRT_MEMLEAK_DETECTION #ifdef _DEBUG @@ -55,11 +50,6 @@ #endif // _DEBUG #endif // MSVC_CRT_MEMLEAK_DETECTION -#ifndef _WIN32 -//hack, disabled -//#define wx_str() ToStdString().c_str() -#endif - #include typedef unsigned int uint; @@ -300,8 +290,6 @@ enum Status #include "Emu/System.h" #include "Emu/SysCalls/Callback.h" #include "Emu/DbgCommand.h" -//#ifdef wxGUI -//#endif #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" @@ -315,7 +303,6 @@ enum Status #include "Emu/FS/vfsStreamMemory.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" -//#ifdef wxGUI #include "rpcs3.h" #define _PRGNAME_ "RPCS3" From 2382f3b69eb290b21e984bc8f766a86849cfd6a9 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Mon, 9 Jun 2014 03:36:26 +0200 Subject: [PATCH 028/499] add dependency on asmjit to rpcs3 project, might fix the buildbot --- rpcs3.sln | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3.sln b/rpcs3.sln index fbf2e2cd4e..b01864e15a 100644 --- a/rpcs3.sln +++ b/rpcs3.sln @@ -4,6 +4,7 @@ VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rpcs3", "rpcs3\rpcs3.vcxproj", "{70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}" ProjectSection(ProjectDependencies) = postProject + {AC40FF01-426E-4838-A317-66354CEFAE88} = {AC40FF01-426E-4838-A317-66354CEFAE88} {CD478F02-7550-58A5-E085-CE4BC0C0AD23} = {CD478F02-7550-58A5-E085-CE4BC0C0AD23} {067D9406-2A93-DACA-9449-93A2D356357D} = {067D9406-2A93-DACA-9449-93A2D356357D} {C4A10229-4712-4BD2-B63E-50D93C67A038} = {C4A10229-4712-4BD2-B63E-50D93C67A038} @@ -285,7 +286,6 @@ Global {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|x64.ActiveCfg = Release|x64 {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|x64.Build.0 = Release|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug - MemLeak|x64.ActiveCfg = Debug|x64 - {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug - MemLeak|x64.ActiveCfg = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug|x64.ActiveCfg = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug|x64.Build.0 = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Release|x64.ActiveCfg = Release|x64 From 779117d129014946abdf299e16272821e6107456 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Mon, 9 Jun 2014 05:37:12 +0200 Subject: [PATCH 029/499] fix machine specific path, sorry about that one --- rpcs3/emucore.vcxproj | 4 ++-- rpcs3/emucore.vcxproj.filters | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 98c3d61ac6..5f751eda79 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -187,7 +187,7 @@ - + @@ -350,7 +350,7 @@ - + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 0e7e6156ab..7534b4b0b8 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -572,7 +572,7 @@ Emu\Cell\currently_unused - + Emu\Io\XInput @@ -1036,7 +1036,7 @@ Emu\Cell\currently_unused - + Emu\Io\XInput From 4fedf5749e24f791ddda9f9abb7f3c3acdb72d47 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 9 Jun 2014 17:35:35 +0400 Subject: [PATCH 030/499] cellSysmoduleLoadModule modified cellSysutilEnableBgmPlayback draft cellSurMixerGetCurrentBlockTag cellSurMixerGetTimestamp Interval.h draft --- Utilities/Interval.h | 42 +++++++++++++++ rpcs3/Emu/Cell/SPURecompiler.h | 56 ++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp | 18 +++---- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 15 +++++- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 8 ++- 5 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 Utilities/Interval.h diff --git a/Utilities/Interval.h b/Utilities/Interval.h new file mode 100644 index 0000000000..bc8009c743 --- /dev/null +++ b/Utilities/Interval.h @@ -0,0 +1,42 @@ +#pragma once + +template +struct BaseInterval +{ + static const uint64_t zero = 0ull; + static const uint64_t notz = 0xffffffffffffffffull; + + T m_min, m_max; + + static BaseInterval make(T min_value, T max_value) + { + BaseInterval res = { min_value, max_value }; + return res; + } + + static BaseInterval make() + { + return make((T&)zero, (T&)notz); + } + + bool getconst(T& result) + { + if (m_min == m_max) + { + result = m_min; + return true; + } + else + { + return false; + } + } + + bool isindef() + { + if (T == float) + { + + } + } +}; \ No newline at end of file diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 8a4c2d9ce2..782f7c4d0a 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -1211,12 +1211,19 @@ private: c.add(*addr, cpu_dword(GPR[rb]._u32[3])); } c.and_(*addr, 0x3fff0); + + /*const XmmLink& vt = XmmGet(rt); + c.pshufb(vt.get(), XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); + c.movdqa(oword_ptr(*ls_var, *addr), vt.get()); + XmmFinalize(vt);*/ + c.mov(*qw0, cpu_qword(GPR[rt]._u64[0])); c.mov(*qw1, cpu_qword(GPR[rt]._u64[1])); c.bswap(*qw0); c.bswap(*qw1); c.mov(qword_ptr(*ls_var, *addr, 0, 0), *qw1); c.mov(qword_ptr(*ls_var, *addr, 0, 8), *qw0); + LOG_OPCODE(); } void BI(u32 ra) @@ -1350,12 +1357,19 @@ private: c.add(*addr, cpu_dword(GPR[rb]._u32[3])); } c.and_(*addr, 0x3fff0); + + /*const XmmLink& vt = XmmAlloc(rt); + c.movdqa(vt.get(), oword_ptr(*ls_var, *addr)); + c.pshufb(vt.get(), XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); + XmmFinalize(vt, rt);*/ + c.mov(*qw0, qword_ptr(*ls_var, *addr, 0, 0)); c.mov(*qw1, qword_ptr(*ls_var, *addr, 0, 8)); c.bswap(*qw0); c.bswap(*qw1); c.mov(cpu_qword(GPR[rt]._u64[0]), *qw1); c.mov(cpu_qword(GPR[rt]._u64[1]), *qw0); + LOG_OPCODE(); } void ROTQBYBI(u32 rt, u32 ra, u32 rb) @@ -2798,12 +2812,19 @@ private: void STQA(u32 rt, s32 i16) { const u32 lsa = (i16 << 2) & 0x3fff0; + + /*const XmmLink& vt = XmmGet(rt); + c.pshufb(vt.get(), XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); + c.movdqa(oword_ptr(*ls_var, lsa), vt.get()); + XmmFinalize(vt);*/ + c.mov(*qw0, cpu_qword(GPR[rt]._u64[0])); c.mov(*qw1, cpu_qword(GPR[rt]._u64[1])); c.bswap(*qw0); c.bswap(*qw1); c.mov(qword_ptr(*ls_var, lsa), *qw1); c.mov(qword_ptr(*ls_var, lsa + 8), *qw0); + LOG_OPCODE(); } void BRNZ(u32 rt, s32 i16) @@ -2842,12 +2863,19 @@ private: void STQR(u32 rt, s32 i16) { const u32 lsa = branchTarget(CPU.PC, i16) & 0x3fff0; + + /*const XmmLink& vt = XmmGet(rt); + c.pshufb(vt.get(), XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); + c.movdqa(oword_ptr(*ls_var, lsa), vt.get()); + XmmFinalize(vt);*/ + c.mov(*qw0, cpu_qword(GPR[rt]._u64[0])); c.mov(*qw1, cpu_qword(GPR[rt]._u64[1])); c.bswap(*qw0); c.bswap(*qw1); c.mov(qword_ptr(*ls_var, lsa), *qw1); c.mov(qword_ptr(*ls_var, lsa + 8), *qw0); + LOG_OPCODE(); } void BRA(s32 i16) @@ -2863,12 +2891,19 @@ private: XmmInvalidate(rt); const u32 lsa = (i16 << 2) & 0x3fff0; + + /*const XmmLink& vt = XmmAlloc(rt); + c.movdqa(vt.get(), oword_ptr(*ls_var, lsa)); + c.pshufb(vt.get(), XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); + XmmFinalize(vt, rt);*/ + c.mov(*qw0, qword_ptr(*ls_var, lsa)); c.mov(*qw1, qword_ptr(*ls_var, lsa + 8)); c.bswap(*qw0); c.bswap(*qw1); c.mov(cpu_qword(GPR[rt]._u64[0]), *qw1); c.mov(cpu_qword(GPR[rt]._u64[1]), *qw0); + LOG_OPCODE(); } void BRASL(u32 rt, s32 i16) @@ -2931,12 +2966,19 @@ private: XmmInvalidate(rt); const u32 lsa = branchTarget(CPU.PC, i16) & 0x3fff0; + + /*const XmmLink& vt = XmmAlloc(rt); + c.movdqa(vt.get(), oword_ptr(*ls_var, lsa)); + c.pshufb(vt.get(), XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); + XmmFinalize(vt, rt);*/ + c.mov(*qw0, qword_ptr(*ls_var, lsa)); c.mov(*qw1, qword_ptr(*ls_var, lsa + 8)); c.bswap(*qw0); c.bswap(*qw1); c.mov(cpu_qword(GPR[rt]._u64[0]), *qw1); c.mov(cpu_qword(GPR[rt]._u64[1]), *qw0); + LOG_OPCODE(); } void IL(u32 rt, s32 i16) @@ -3265,12 +3307,19 @@ private: c.mov(*addr, cpu_dword(GPR[ra]._u32[3])); if (i10) c.add(*addr, i10); c.and_(*addr, 0x3fff0); + + /*const XmmLink& vt = XmmGet(rt); + c.pshufb(vt.get(), XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); + c.movdqa(oword_ptr(*ls_var, *addr), vt.get()); + XmmFinalize(vt);*/ + c.mov(*qw0, cpu_qword(GPR[rt]._u64[0])); c.mov(*qw1, cpu_qword(GPR[rt]._u64[1])); c.bswap(*qw0); c.bswap(*qw1); c.mov(qword_ptr(*ls_var, *addr, 0, 0), *qw1); c.mov(qword_ptr(*ls_var, *addr, 0, 8), *qw0); + LOG_OPCODE(); } void LQD(u32 rt, s32 i10, u32 ra) // i10 is shifted left by 4 while decoding @@ -3280,12 +3329,19 @@ private: c.mov(*addr, cpu_dword(GPR[ra]._u32[3])); if (i10) c.add(*addr, i10); c.and_(*addr, 0x3fff0); + + /*const XmmLink& vt = XmmAlloc(rt); + c.movdqa(vt.get(), oword_ptr(*ls_var, *addr)); + c.pshufb(vt.get(), XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); + XmmFinalize(vt, rt);*/ + c.mov(*qw0, qword_ptr(*ls_var, *addr, 0, 0)); c.mov(*qw1, qword_ptr(*ls_var, *addr, 0, 8)); c.bswap(*qw0); c.bswap(*qw1); c.mov(cpu_qword(GPR[rt]._u64[0]), *qw1); c.mov(cpu_qword(GPR[rt]._u64[1]), *qw0); + LOG_OPCODE(); } void XORI(u32 rt, u32 ra, s32 i10) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp index 498cd67d62..6ff960e848 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp @@ -169,20 +169,18 @@ int cellSysmoduleLoadModule(u16 id) cellSysmodule->Error("cellSysmoduleLoadModule: TODO: CELL_SYSMODULE_LIBATRAC3MULTI"); } cellSysmodule->Warning("cellSysmoduleLoadModule(%s)", getModuleName(id)); - Module* m = Emu.GetModuleManager().GetModuleById(id); - if(!m) + if (Module* m = Emu.GetModuleManager().GetModuleById(id)) + { + // CELL_SYSMODULE_ERROR_DUPLICATED shouldn't be returned (it breaks some games) + // If some game requires it yet, there probably should be a configurable hack or something. + m->Load(); + return CELL_OK; + } + else { return CELL_SYSMODULE_ERROR_UNKNOWN; } - - if(m->IsLoaded() && id != 0x10) // CELL_SYSMODULE_GCM_SYS and CELL_SYSMODULE_GCM share the same ID - { - return CELL_SYSMODULE_ERROR_DUPLICATED; - } - - m->Load(); - return CELL_OK; } int cellSysmoduleUnloadModule(u16 id) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index ca0b7f84f0..7507e00dc6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -919,13 +919,23 @@ int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_ return CELL_OK; } +bool bgm_playback_enabled = false; + +int cellSysutilEnableBgmPlayback() +{ + cellSysutil->Warning("cellSysutilEnableBgmPlayback()"); + + bgm_playback_enabled = true; + return CELL_OK; +} + int cellSysutilGetBgmPlaybackStatus(mem_ptr_t status) { cellSysutil->Warning("cellSysutilGetBgmPlaybackStatus(status=0x%x)", status.GetAddr()); - // non-essential, so always assume background music is stopped/disabled + // TODO status->playbackState = CELL_BGMPLAYBACK_STATUS_STOP; - status->enabled = CELL_BGMPLAYBACK_STATUS_DISABLE; + status->enabled = bgm_playback_enabled ? CELL_BGMPLAYBACK_STATUS_ENABLE : CELL_BGMPLAYBACK_STATUS_DISABLE; status->fadeRatio = 0; // volume ratio memset(status->contentId, 0, sizeof(status->contentId)); @@ -970,6 +980,7 @@ void cellSysutil_init() cellSysutil->AddFunc(0xc96e89e9, cellAudioOutSetCopyControl); cellSysutil->AddFunc(0xa11552f6, cellSysutilGetBgmPlaybackStatus); + cellSysutil->AddFunc(0x220894e3, cellSysutilEnableBgmPlayback); cellSysutil->AddFunc(0x1e7bff94, cellSysCacheMount); cellSysutil->AddFunc(0x744c1544, cellSysCacheClear); diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index fbff7eb9ee..02ed6425ad 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -342,13 +342,17 @@ int cellSurMixerPause(u32 type) int cellSurMixerGetCurrentBlockTag(mem64_t tag) { - libmixer->Error("cellSurMixerGetCurrentBlockTag(tag_addr=0x%x)", tag.GetAddr()); + libmixer->Log("cellSurMixerGetCurrentBlockTag(tag_addr=0x%x)", tag.GetAddr()); + + tag = mixcount; return CELL_OK; } int cellSurMixerGetTimestamp(u64 tag, mem64_t stamp) { - libmixer->Error("cellSurMixerGetTimestamp(tag=0x%llx, stamp_addr=0x%x)", tag, stamp.GetAddr()); + libmixer->Log("cellSurMixerGetTimestamp(tag=0x%llx, stamp_addr=0x%x)", tag, stamp.GetAddr()); + + stamp = m_config.start_time + (tag) * 256000000 / 48000; // ??? return CELL_OK; } From a28ad25221908755734d0cb1a52b28468bf9b5f8 Mon Sep 17 00:00:00 2001 From: raven02 Date: Tue, 10 Jun 2014 00:28:52 +0800 Subject: [PATCH 031/499] cellSysUtil : stub remaining BGM playback functions --- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 7507e00dc6..317a927b23 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -926,6 +926,34 @@ int cellSysutilEnableBgmPlayback() cellSysutil->Warning("cellSysutilEnableBgmPlayback()"); bgm_playback_enabled = true; + + return CELL_OK; +} + +int cellSysutilEnableBgmPlaybackEx() +{ + cellSysutil->Warning("cellSysutilEnableBgmPlaybackEx()"); + + bgm_playback_enabled = true; + + return CELL_OK; +} + +int cellSysutilDisableBgmPlayback() +{ + cellSysutil->Warning("cellSysutilDisableBgmPlayback()"); + + bgm_playback_enabled = false; + + return CELL_OK; +} + +int cellSysutilDisableBgmPlaybackEx() +{ + cellSysutil->Warning("cellSysutilDisableBgmPlaybackEx()"); + + bgm_playback_enabled = false; + return CELL_OK; } @@ -942,6 +970,19 @@ int cellSysutilGetBgmPlaybackStatus(mem_ptr_t status) return CELL_OK; } +int cellSysutilGetBgmPlaybackStatus2(mem_ptr_t status2) +{ + cellSysutil->Warning("cellSysutilGetBgmPlaybackStatus2(status=0x%x)", status2.GetAddr()); + + // TODO + status2->playbackState = CELL_BGMPLAYBACK_STATUS_STOP; + status2->enabled = bgm_playback_enabled ? CELL_BGMPLAYBACK_STATUS_ENABLE : CELL_BGMPLAYBACK_STATUS_DISABLE; + status2->fadeRatio = 0; // volume ratio + memset(status2->contentId, 0, sizeof(status2->contentId)); + + return CELL_OK; +} + int cellWebBrowserEstimate2(mem8_ptr_t _config, mem32_ptr_t memSize) { // TODO: When cellWebBrowser stuff is implemented, change this to some real @@ -980,7 +1021,11 @@ void cellSysutil_init() cellSysutil->AddFunc(0xc96e89e9, cellAudioOutSetCopyControl); cellSysutil->AddFunc(0xa11552f6, cellSysutilGetBgmPlaybackStatus); + cellSysutil->AddFunc(0x6cfd856f, cellSysutilGetBgmPlaybackStatus2); cellSysutil->AddFunc(0x220894e3, cellSysutilEnableBgmPlayback); + cellSysutil->AddFunc(0xac58ad2b, cellSysutilEnableBgmPlaybackEx); + cellSysutil->AddFunc(0xcfdd8e87, cellSysutilDisableBgmPlayback); + cellSysutil->AddFunc(0xa36335a5, cellSysutilDisableBgmPlaybackEx); cellSysutil->AddFunc(0x1e7bff94, cellSysCacheMount); cellSysutil->AddFunc(0x744c1544, cellSysCacheClear); From 70f687136333697d2bc614d06fed0b6a795305c1 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 12 Jun 2014 04:22:32 +0800 Subject: [PATCH 032/499] Fix vertex program decompile function --- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index ac1205e403..8dbc57081a 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -601,7 +601,8 @@ void GLVertexProgram::Wait() void GLVertexProgram::Decompile(RSXVertexProgram& prog) { - GLVertexDecompilerThread(prog.data, shader, parr); + GLVertexDecompilerThread decompiler(prog.data, shader, parr); + decompiler.Task(); } void GLVertexProgram::DecompileAsync(RSXVertexProgram& prog) From 9b951d5d3f57890956b3ebf8ba7219851fe6f00c Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 12 Jun 2014 05:24:37 +0800 Subject: [PATCH 033/499] Gameviewer : read PARAM.SFO for blue-ray disc --- rpcs3/Gui/GameViewer.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 2b72536d9b..9c2c31c0c0 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -126,9 +126,18 @@ void GameViewer::LoadPSF() m_game_data.clear(); for(uint i=0; i Date: Fri, 13 Jun 2014 01:37:33 +0800 Subject: [PATCH 034/499] Fix point size/line_width/poly_offset_scale_factor/bias --- rpcs3/Emu/GS/GCM.h | 2 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 18 ++--- rpcs3/Emu/GS/RSXThread.cpp | 131 ++++++++++++++++++--------------- rpcs3/Emu/GS/RSXThread.h | 10 +-- 4 files changed, 86 insertions(+), 75 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 74c88c7a04..28fbdb2265 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -496,7 +496,7 @@ enum NV4097_SET_VERTEX_ATTRIB_INPUT_MASK = 0x00001ff0, NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK = 0x00001ff4, NV4097_SET_TRANSFORM_BRANCH_BITS = 0x00001ff8, - NV4097_SET_FLIP = 0x00003fead, + NV4097_SET_FLIP = 0x0003fead, // NV0039 NV0039_SET_OBJECT = 0x00002000, diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index af45cda7fb..1e8afddd79 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -969,8 +969,8 @@ void GLGSRender::ExecCMD() if(m_set_depth_func) { - glDepthFunc(m_depth_func); //ConLog.Warning("glDepthFunc(0x%x)", m_depth_func); + glDepthFunc(m_depth_func); checkForGlError("glDepthFunc"); } @@ -990,7 +990,7 @@ void GLGSRender::ExecCMD() if(m_set_line_width) { - glLineWidth(m_line_width / 255.f); + glLineWidth(m_line_width); checkForGlError("glLineWidth"); } @@ -1020,17 +1020,13 @@ void GLGSRender::ExecCMD() if (m_set_front_face) { - // Sanity check . Disgaea 3 return 0x1d0 here and cause openGL 0x0500 - if (m_front_face == GL_CW || m_front_face == GL_CCW) - { - glFrontFace(m_front_face); - checkForGlError("glFrontFace"); - } + glFrontFace(m_front_face); + checkForGlError("glFrontFace"); } if(m_set_alpha_func && m_set_alpha_ref) { - glAlphaFunc(m_alpha_func, m_alpha_ref/255.0f); + glAlphaFunc(m_alpha_func, m_alpha_ref); checkForGlError("glAlphaFunc"); } @@ -1050,7 +1046,7 @@ void GLGSRender::ExecCMD() if(m_set_restart_index) { - glPrimitiveRestartIndex(m_restart_index); // Requires OpenGL 3.1+ + glPrimitiveRestartIndex(m_restart_index); checkForGlError("glPrimitiveRestartIndex"); } @@ -1116,7 +1112,9 @@ void GLGSRender::ExecCMD() } if (Ini.GSDumpColorBuffers.GetValue()) + { WriteColorBuffers(); + } } void GLGSRender::Flip() diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index bbc6555344..8694acde5c 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -219,7 +219,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 break; case NV406E_SET_REFERENCE: + { m_ctrl->ref = ARGS(0); + } break; // Texture @@ -279,7 +281,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case_16(NV4097_SET_TEXTURE_CONTROL3, 4) : { RSXTexture& tex = m_textures[index]; - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); u32 pitch = a0 & 0xFFFFF; u16 depth = a0 >> 20; tex.SetControl3(depth, pitch); @@ -289,11 +291,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Vertex data case_16(NV4097_SET_VERTEX_DATA4UB_M, 4): { - u32 v = ARGS(0); - u8 v0 = v; - u8 v1 = v >> 8; - u8 v2 = v >> 16; - u8 v3 = v >> 24; + const u32 a0 = ARGS(0); + u8 v0 = a0; + u8 v1 = a0 >> 8; + u8 v2 = a0 >> 16; + u8 v3 = a0 >> 24; m_vertex_data[index].Reset(); m_vertex_data[index].size = 4; @@ -308,8 +310,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case_16(NV4097_SET_VERTEX_DATA2F_M, 8): { - u32 a0 = ARGS(0); - u32 a1 = ARGS(1); + const u32 a0 = ARGS(0); + const u32 a1 = ARGS(1); float v0 = (float&)a0; float v1 = (float&)a1; @@ -327,10 +329,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case_16(NV4097_SET_VERTEX_DATA4F_M, 16): { - u32 a0 = ARGS(0); - u32 a1 = ARGS(1); - u32 a2 = ARGS(2); - u32 a3 = ARGS(3); + const u32 a0 = ARGS(0); + const u32 a1 = ARGS(1); + const u32 a2 = ARGS(2); + const u32 a3 = ARGS(3); float v0 = (float&)a0; float v1 = (float&)a1; @@ -361,14 +363,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case_16(NV4097_SET_VERTEX_DATA_ARRAY_FORMAT, 4) : { - u32 a0 = ARGS(0); - const u16 frequency = a0 >> 16; - const u8 stride = (a0 >> 8) & 0xff; - const u8 size = (a0 >> 4) & 0xf; - const u8 type = a0 & 0xf; + const u32 a0 = ARGS(0); + u16 frequency = a0 >> 16; + u8 stride = (a0 >> 8) & 0xff; + u8 size = (a0 >> 4) & 0xf; + u8 type = a0 & 0xf; - CMD_LOG("index=%d, frequency=%d, stride=%d, size=%d, type=%d", - index, frequency, stride, size, type); + CMD_LOG("index=%d, frequency=%d, stride=%d, size=%d, type=%d", index, frequency, stride, size, type); RSXVertexData& cv = m_vertex_data[index]; cv.frequency = frequency; @@ -401,13 +402,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Color Mask case NV4097_SET_COLOR_MASK: { - const u32 flags = ARGS(0); + const u32 a0 = ARGS(0); m_set_color_mask = true; - m_color_mask_a = flags & 0x1000000 ? true : false; - m_color_mask_r = flags & 0x0010000 ? true : false; - m_color_mask_g = flags & 0x0000100 ? true : false; - m_color_mask_b = flags & 0x0000001 ? true : false; + m_color_mask_a = a0 & 0x1000000 ? true : false; + m_color_mask_r = a0 & 0x0010000 ? true : false; + m_color_mask_g = a0 & 0x0000100 ? true : false; + m_color_mask_b = a0 & 0x0000001 ? true : false; } break; @@ -433,7 +434,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 if (count >= 2) { m_set_alpha_ref = true; - m_alpha_ref = ARGS(1); + + const u32 a1 = ARGS(1); + m_alpha_ref = (float&)a1; } } break; @@ -441,7 +444,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ALPHA_REF: { m_set_alpha_ref = true; - m_alpha_ref = ARGS(0); + const u32 a0 = ARGS(0); + m_alpha_ref = (float&)a0; } break; @@ -544,12 +548,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_DEPTH_BOUNDS_MIN: { m_set_depth_bounds = true; - const u32 depth_bounds_min = ARGS(0); - m_depth_bounds_min = (float&)depth_bounds_min; + const u32 a0 = ARGS(0); + m_depth_bounds_min = (float&)a0; if (count > 1) { - const u32 depth_bounds_max = ARGS(1); - m_depth_bounds_max = (float&)depth_bounds_max; + const u32 a1 = ARGS(1); + m_depth_bounds_max = (float&)a1; } } break; @@ -608,12 +612,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Clipping case NV4097_SET_CLIP_MIN: { - const u32 clip_min = ARGS(0); - const u32 clip_max = ARGS(1); + const u32 a0 = ARGS(0); + const u32 a1 = ARGS(1); m_set_clip = true; - m_clip_min = (float&)clip_min; - m_clip_max = (float&)clip_max; + m_clip_min = (float&)a0; + m_clip_max = (float&)a1; CMD_LOG("clip_min=%.01f, clip_max=%.01f", m_clip_min, m_clip_max); } @@ -684,7 +688,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_set_depth_test = true; m_set_poly_offset_mode = true; - m_poly_offset_scale_factor = ARGS(0); + + const u32 a0 = ARGS(0); + m_poly_offset_scale_factor = (float&)a0; } break; @@ -692,7 +698,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_set_depth_test = true; m_set_poly_offset_mode = true; - m_poly_offset_bias = ARGS(0); + + const u32 a0 = ARGS(0); + m_poly_offset_bias = (float&)a0; } break; @@ -710,7 +718,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_CLEAR_SURFACE: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); if(a0 & 0x01) m_clear_surface_z = m_clear_z; if(a0 & 0x02) m_clear_surface_s = m_clear_s; @@ -725,7 +733,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ZSTENCIL_CLEAR_VALUE: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_clear_s = a0 & 0xff; m_clear_z = a0 >> 8; } @@ -827,7 +835,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_BEGIN_END: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); //ConLog.Warning("NV4097_SET_BEGIN_END: %x", a0); @@ -849,7 +857,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_cur_shader_prog = &m_shader_progs[m_cur_shader_prog_num]; //m_cur_shader_prog_num = (m_cur_shader_prog_num + 1) % 16; - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_cur_shader_prog->offset = a0 & ~0x3; m_cur_shader_prog->addr = GetAddress(m_cur_shader_prog->offset, (a0 & 0x3) - 1); m_cur_shader_prog->ctrl = 0x40; @@ -877,7 +885,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_SHADER_WINDOW: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_shader_window_height = a0 & 0xfff; m_shader_window_origin = (a0 >> 12) & 0xf; m_shader_window_pixel_centers = a0 >> 16; @@ -1134,7 +1142,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_SCULL_CONTROL: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_set_stencil_func = m_set_stencil_func_ref = m_set_stencil_func_mask = true; m_stencil_func = a0 & 0xffff; @@ -1160,7 +1168,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_POINT_SIZE: { m_set_point_size = true; - m_point_size = ARGS(0); + const u32 a0 = ARGS(0); + m_point_size = (float&)a0; } break; @@ -1252,7 +1261,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Depth/ Color buffer usage case NV4097_SET_SURFACE_FORMAT: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_set_surface_format = true; m_surface_color_format = a0 & 0x1f; m_surface_depth_format = (a0 >> 5) & 0x7; @@ -1326,7 +1335,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_SURFACE_PITCH_C: { - if(count != 4) + if (count != 4) { ConLog.Error("NV4097_SET_SURFACE_PITCH_C: Bad count (%d)", count); break; @@ -1395,7 +1404,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_SURFACE_CLIP_VERTICAL: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_set_surface_clip_vertical = true; m_surface_clip_y = a0; m_surface_clip_h = a0 >> 16; @@ -1404,7 +1413,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_SURFACE_CLIP_HORIZONTAL: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_set_surface_clip_horizontal = true; m_surface_clip_x = a0; @@ -1412,7 +1421,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 if(count >= 2) { - u32 a1 = ARGS(1); + const u32 a1 = ARGS(1); m_set_surface_clip_vertical = true; m_surface_clip_y = a1; m_surface_clip_h = a1 >> 16; @@ -1445,14 +1454,15 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_LINE_WIDTH: { m_set_line_width = true; - m_line_width = ARGS(0); + const u32 a0 = ARGS(0); + m_line_width = (float&)a0; } break; // Zcull case NV4097_SET_ZCULL_EN: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_set_depth_test = a0 & 0x1 ? true : false; m_set_stencil_test = a0 & 0x2 ? true : false; @@ -1482,7 +1492,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Reporting case NV4097_GET_REPORT: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); u8 type = a0 >> 24; u32 offset = a0 & 0xffffff; @@ -1517,7 +1527,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Clip Plane case NV4097_SET_USER_CLIP_PLANE_CONTROL: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_set_clip_plane = true; m_clip_plane_0 = a0 & 0xf; m_clip_plane_1 = (a0 >> 4) & 0xf; @@ -1532,8 +1542,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_FOG_PARAMS: { m_set_fog_params = true; - u32 a0 = ARGS(0); - u32 a1 = ARGS(1); + const u32 a0 = ARGS(0); + const u32 a1 = ARGS(1); m_fog_param0 = (float&)a0; m_fog_param1 = (float&)a1; } @@ -1657,14 +1667,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 RSXTransformConstant c; c.id = m_dst_offset | ((u32)m_point_x << 2); - if(count >= 1) + if (count >= 1) { u32 a = ARGS(0); a = a << 16 | a >> 16; c.x = (float&)a; } - if(count >= 2) + if (count >= 2) { u32 a = ARGS(1); a = a << 16 | a >> 16; @@ -1697,7 +1707,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV308A_POINT: { - u32 a0 = ARGS(0); + const u32 a0 = ARGS(0); m_point_x = a0 & 0xffff; m_point_y = a0 >> 16; } @@ -1731,12 +1741,15 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV3089_IMAGE_IN_SIZE: { - u16 w = ARGS(0); - u16 h = ARGS(0) >> 16; + u16 width = ARGS(0); + u16 height = ARGS(0) >> 16; + u16 pitch = ARGS(1); u8 origin = ARGS(1) >> 16; u8 inter = ARGS(1) >> 24; + u32 offset = ARGS(2); + u16 u = ARGS(3); u16 v = ARGS(3) >> 16; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 7e1a3e8f22..b3d6fb64eb 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -183,7 +183,7 @@ public: // Point bool m_set_point_size; bool m_set_point_sprite_control; - u32 m_point_size; + float m_point_size; u16 m_point_x; u16 m_point_y; @@ -214,8 +214,8 @@ public: bool m_set_back_polygon_mode; u32 m_back_polygon_mode; bool m_set_poly_offset_mode; - u32 m_poly_offset_scale_factor; - u32 m_poly_offset_bias; + float m_poly_offset_scale_factor; + float m_poly_offset_bias; // Logic Ops bool m_set_logic_op; @@ -287,7 +287,7 @@ public: // Line width bool m_set_line_width; - u32 m_line_width; + float m_line_width; // Shader mode bool m_set_shade_mode; @@ -384,7 +384,7 @@ public: bool m_set_alpha_func; u32 m_alpha_func; bool m_set_alpha_ref; - u32 m_alpha_ref; + float m_alpha_ref; // Shader u16 m_shader_window_height; From 469faf43aabc354fcd1289044a0a16db7dd664f7 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 14 Jun 2014 02:44:18 +0800 Subject: [PATCH 035/499] Fix line width conversion and comment out point size which already done in vertex shader --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 6 ------ rpcs3/Emu/GS/RSXThread.cpp | 28 ++++------------------------ rpcs3/Emu/GS/RSXThread.h | 4 ---- 3 files changed, 4 insertions(+), 34 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 1e8afddd79..3eadb2f1da 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -872,12 +872,6 @@ void GLGSRender::ExecCMD() checkForGlError("glPolygonMode(Back)"); } - if (m_set_point_size) - { - glPointSize(m_point_size); - checkForGlError("glPointSize"); - } - if (m_set_poly_offset_mode) { glPolygonOffset(m_poly_offset_scale_factor, m_poly_offset_bias); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 8694acde5c..00add356ae 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -227,7 +227,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Texture case_16(NV4097_SET_TEXTURE_FORMAT, 0x20) : { - // Done in ethodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] + // Done in methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] } break; @@ -585,27 +585,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 break; case NV4097_SET_VIEWPORT_SCALE: - { - if (ARGS(0)) - ConLog.Warning("NV4097_SET_VIEWPORT_SCALE: %x", ARGS(0)); - } - break; - case NV4097_SET_VIEWPORT_OFFSET: { - if (ARGS(0)) - ConLog.Warning("NV4097_SET_VIEWPORT_OFFSET: %x", ARGS(0)); - /*const u32 offset0 = ARGS(0); - const u32 offset1 = ARGS(1); - const u32 offset2 = ARGS(2); - const u32 offset3 = ARGS(3); - const u32 scale0 = ARGS(4); - const u32 scale1 = ARGS(5); - const u32 scale2 = ARGS(6); - const u32 scale3 = ARGS(7);*/ - //TODO - //ConLog.Warning("NV4097_SET_VIEWPORT_OFFSET: offset (%d, %d, %d, %d), scale (%d, %d, %d, %d)", - //offset0, offset1, offset2, offset3, scale0, scale1, scale2, scale3); + // Done in Vertex Shader } break; @@ -1167,9 +1149,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Point case NV4097_SET_POINT_SIZE: { - m_set_point_size = true; - const u32 a0 = ARGS(0); - m_point_size = (float&)a0; + // Done in Vertex Shader } break; @@ -1455,7 +1435,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_set_line_width = true; const u32 a0 = ARGS(0); - m_line_width = (float&)a0; + m_line_width = (float&)a0 / 8.0; } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index b3d6fb64eb..da5875dd0c 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -181,9 +181,7 @@ public: u32 m_restart_index; // Point - bool m_set_point_size; bool m_set_point_sprite_control; - float m_point_size; u16 m_point_x; u16 m_point_y; @@ -457,7 +455,6 @@ protected: m_point_x = 0; m_point_y = 0; - m_point_size = 0; // Construct Textures for(int i=0; i<16; i++) @@ -523,7 +520,6 @@ protected: m_set_poly_offset_point = false; m_set_poly_offset_mode = false; m_set_restart_index = false; - m_set_point_size = false; m_set_point_sprite_control = false; m_set_specular = false; From bf456d5d168ea49a75a9a65e9dc81e405a3a637a Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 14 Jun 2014 04:44:53 +0800 Subject: [PATCH 036/499] Build fix --- rpcs3/Emu/GS/RSXThread.h | 1 - 1 file changed, 1 deletion(-) diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index da5875dd0c..72cf7b229f 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -426,7 +426,6 @@ protected: m_set_scissor_vertical = false; m_set_line_smooth = false; m_set_poly_smooth = false; - m_set_point_size = false; m_set_two_sided_stencil_test_enable = false; m_set_surface_clip_horizontal = false; m_set_surface_clip_vertical = false; From f471857a255fad42f275ae74a95da402551726a3 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 14 Jun 2014 14:16:23 +0800 Subject: [PATCH 037/499] Gameviewer : name category HG as HDD game and DG as Disc game --- rpcs3/Gui/GameViewer.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 9c2c31c0c0..5b2062a908 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -154,9 +154,15 @@ void GameViewer::LoadPSF() game.parental_lvl = psf.GetInteger("PARENTAL_LEVEL"); game.resolution = psf.GetInteger("RESOLUTION"); game.sound_format = psf.GetInteger("SOUND_FORMAT"); + if(game.serial.length() == 9) game.serial = game.serial.substr(0, 4) + "-" + game.serial.substr(4, 5); + if (game.category.find("HG")) + game.category = "HDD Game"; + else if (game.category.find("DG")) + game.category = "Disc Game"; + m_game_data.push_back(game); } From 5007d62e2714e8f7ea1418c5f344eb67febdc198 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 15 Jun 2014 00:54:09 +0800 Subject: [PATCH 038/499] Regresion fix : restore point size functionality --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 8 +++++++- rpcs3/Emu/GS/RSXThread.cpp | 4 +++- rpcs3/Emu/GS/RSXThread.h | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 3eadb2f1da..ec05c45421 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -843,7 +843,7 @@ void GLGSRender::ExecCMD() Enable(m_set_poly_offset_fill, GL_POLYGON_OFFSET_FILL); Enable(m_set_poly_offset_line, GL_POLYGON_OFFSET_LINE); Enable(m_set_poly_offset_point, GL_POLYGON_OFFSET_POINT); - Enable(m_set_restart_index, GL_PRIMITIVE_RESTART); // Requires OpenGL 3.1+ + Enable(m_set_restart_index, GL_PRIMITIVE_RESTART); if(m_set_clip_plane) { @@ -872,6 +872,12 @@ void GLGSRender::ExecCMD() checkForGlError("glPolygonMode(Back)"); } + if (m_set_point_size) + { + glPointSize(m_point_size); + checkForGlError("glPointSize"); + } + if (m_set_poly_offset_mode) { glPolygonOffset(m_poly_offset_scale_factor, m_poly_offset_bias); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 00add356ae..d1334e904a 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1149,7 +1149,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Point case NV4097_SET_POINT_SIZE: { - // Done in Vertex Shader + m_set_point_size = true; + const u32 a0 = ARGS(0); + m_point_size = (float&)a0; } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 72cf7b229f..887581712e 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -181,7 +181,9 @@ public: u32 m_restart_index; // Point + bool m_set_point_size; bool m_set_point_sprite_control; + u32 m_point_size; u16 m_point_x; u16 m_point_y; @@ -426,6 +428,7 @@ protected: m_set_scissor_vertical = false; m_set_line_smooth = false; m_set_poly_smooth = false; + m_set_point_size = false; m_set_two_sided_stencil_test_enable = false; m_set_surface_clip_horizontal = false; m_set_surface_clip_vertical = false; @@ -454,6 +457,7 @@ protected: m_point_x = 0; m_point_y = 0; + m_point_size = 0; // Construct Textures for(int i=0; i<16; i++) From 44dd770cecbced22da22ca6ca0702cd07878a193 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 15 Jun 2014 02:20:11 +0800 Subject: [PATCH 039/499] RSX: fix line width --- rpcs3/Emu/GS/RSXThread.cpp | 2 +- rpcs3/Emu/GS/RSXThread.h | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index d1334e904a..ff7b473c54 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1437,7 +1437,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_set_line_width = true; const u32 a0 = ARGS(0); - m_line_width = (float&)a0 / 8.0; + m_line_width = (float)a0 / 8.0f; } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 887581712e..347c2b5fe5 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -183,7 +183,7 @@ public: // Point bool m_set_point_size; bool m_set_point_sprite_control; - u32 m_point_size; + float m_point_size; u16 m_point_x; u16 m_point_y; @@ -428,7 +428,8 @@ protected: m_set_scissor_vertical = false; m_set_line_smooth = false; m_set_poly_smooth = false; - m_set_point_size = false; + m_set_point_sprite_control = false; + m_set_specular = false; m_set_two_sided_stencil_test_enable = false; m_set_surface_clip_horizontal = false; m_set_surface_clip_vertical = false; @@ -444,8 +445,8 @@ protected: m_clear_z = 0xffffff; m_clear_s = 0; - m_poly_offset_scale_factor = 0; - m_poly_offset_bias = 0; + m_poly_offset_scale_factor = 0.0; + m_poly_offset_bias = 0.0; m_depth_bounds_min = 0.0; m_depth_bounds_max = 1.0; @@ -457,7 +458,8 @@ protected: m_point_x = 0; m_point_y = 0; - m_point_size = 0; + m_point_size = 1.0; + m_line_width = 1.0; // Construct Textures for(int i=0; i<16; i++) @@ -501,6 +503,7 @@ protected: m_set_back_stencil_zpass = false; m_set_blend_equation = false; m_set_depth_mask = false; + m_set_point_size = false; m_set_line_width = false; m_set_shade_mode = false; m_set_blend_color = false; From 76c8eedb250a043a7d3031631b2d1ea711f9fde0 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 15 Jun 2014 05:41:11 +0800 Subject: [PATCH 040/499] RSX : implement line stipple --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 8 +++++++- rpcs3/Emu/GS/RSXThread.cpp | 16 ++++++++++++++++ rpcs3/Emu/GS/RSXThread.h | 7 +++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index ec05c45421..c21170045e 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -844,6 +844,7 @@ void GLGSRender::ExecCMD() Enable(m_set_poly_offset_line, GL_POLYGON_OFFSET_LINE); Enable(m_set_poly_offset_point, GL_POLYGON_OFFSET_POINT); Enable(m_set_restart_index, GL_PRIMITIVE_RESTART); + Enable(m_set_line_stipple, GL_LINE_STIPPLE); if(m_set_clip_plane) { @@ -859,7 +860,6 @@ void GLGSRender::ExecCMD() checkForGlError("glEnable"); - if (m_set_front_polygon_mode) { glPolygonMode(GL_FRONT, m_front_polygon_mode); @@ -994,6 +994,12 @@ void GLGSRender::ExecCMD() checkForGlError("glLineWidth"); } + if (m_set_line_stipple) + { + glLineStipple(m_line_stipple_factor, m_line_stipple_pattern); + checkForGlError("glLineStipple"); + } + if(m_set_blend_equation) { glBlendEquationSeparate(m_blend_equation_rgb, m_blend_equation_alpha); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index ff7b473c54..096ef0de48 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1441,6 +1441,22 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + // Line/Polygon Stipple + case NV4097_SET_LINE_STIPPLE: + { + m_set_line_stipple = ARGS(0) ? true : false; + } + break; + + case NV4097_SET_LINE_STIPPLE_PATTERN: + { + m_set_line_stipple = true; + const u32 a0 = ARGS(0); + m_line_stipple_factor = a0 & 0xffff; + m_line_stipple_pattern = a0 >> 16; + } + break; + // Zcull case NV4097_SET_ZCULL_EN: { diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 347c2b5fe5..4aa2f71bf0 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -216,6 +216,9 @@ public: bool m_set_poly_offset_mode; float m_poly_offset_scale_factor; float m_poly_offset_bias; + bool m_set_line_stipple; + u16 m_line_stipple_pattern; + u16 m_line_stipple_factor; // Logic Ops bool m_set_logic_op; @@ -437,6 +440,7 @@ protected: m_set_poly_offset_line = false; m_set_poly_offset_point = false; m_set_restart_index = false; + m_set_line_stipple = false; m_clear_color_r = 0; m_clear_color_g = 0; @@ -460,6 +464,8 @@ protected: m_point_y = 0; m_point_size = 1.0; m_line_width = 1.0; + m_line_stipple_pattern = 0x1111; + m_line_stipple_factor = 1; // Construct Textures for(int i=0; i<16; i++) @@ -528,6 +534,7 @@ protected: m_set_restart_index = false; m_set_point_sprite_control = false; m_set_specular = false; + m_set_line_stipple = false; m_clear_surface_mask = 0; m_begin_end = 0; From 64044173c65e5b9cc1353540c5834f07b5e375bd Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 15 Jun 2014 12:25:09 +0800 Subject: [PATCH 041/499] set default m_line_stipple_pattern as 0xffff --- rpcs3/Emu/GS/RSXThread.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 4aa2f71bf0..0424317aa0 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -456,15 +456,15 @@ protected: m_depth_bounds_max = 1.0; m_restart_index = 0xffffffff; - m_front_polygon_mode = 0x1B02; // GL_FILL - m_back_polygon_mode = 0x1B02; // GL_FILL + m_front_polygon_mode = 0x1b02; // GL_FILL + m_back_polygon_mode = 0x1b02; // GL_FILL m_front_face = 0x0901; m_point_x = 0; m_point_y = 0; m_point_size = 1.0; m_line_width = 1.0; - m_line_stipple_pattern = 0x1111; + m_line_stipple_pattern = 0xffff; m_line_stipple_factor = 1; // Construct Textures From ee58ba9fd9d607520987ccea8b6470c358a3bee8 Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 16 Jun 2014 03:05:28 +0800 Subject: [PATCH 042/499] Paritally fix depth read elf --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 51 ++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index c21170045e..9e7827f818 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -615,7 +615,11 @@ void GLGSRender::OnInitThread() InitProcTable(); glEnable(GL_TEXTURE_2D); - + glEnable(GL_SCISSOR_TEST); + glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); + glGenTextures(1, &g_depth_tex); + glGenTextures(1, &g_flip_tex); + #ifdef _WIN32 glSwapInterval(Ini.GSVSyncEnable.GetValue() ? 1 : 0); // Undefined reference: glXSwapIntervalEXT @@ -624,9 +628,7 @@ void GLGSRender::OnInitThread() glXSwapIntervalEXT(glXGetCurrentDisplay(), drawable, Ini.GSVSyncEnable.GetValue() ? 1 : 0); }*/ #endif - glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); - glGenTextures(1, &g_depth_tex); - glGenTextures(1, &g_flip_tex); + } void GLGSRender::OnExitThread() @@ -794,7 +796,13 @@ void GLGSRender::ExecCMD() //glViewport(m_viewport_x, m_viewport_y, m_viewport_w, m_viewport_h); //checkForGlError("glViewport"); } - + + if (m_set_scissor_horizontal && m_set_scissor_vertical) + { + glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); + checkForGlError("glScissor"); + } + if(m_clear_surface_mask) { GLbitfield f = 0; @@ -835,7 +843,6 @@ void GLGSRender::ExecCMD() Enable(m_set_cull_face, GL_CULL_FACE); Enable(m_set_dither, GL_DITHER); Enable(m_set_stencil_test, GL_STENCIL_TEST); - Enable(m_set_scissor_horizontal && m_set_scissor_vertical, GL_SCISSOR_TEST); Enable(m_set_line_smooth, GL_LINE_SMOOTH); Enable(m_set_poly_smooth, GL_POLYGON_SMOOTH); Enable(m_set_point_sprite_control, GL_POINT_SPRITE); @@ -890,12 +897,6 @@ void GLGSRender::ExecCMD() checkForGlError("glLogicOp"); } - if (m_set_scissor_horizontal && m_set_scissor_vertical) - { - glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); - checkForGlError("glScissor"); - } - if(m_set_two_sided_stencil_test_enable) { if(m_set_stencil_fail && m_set_stencil_zfail && m_set_stencil_zpass) @@ -1125,6 +1126,13 @@ void GLGSRender::ExecCMD() void GLGSRender::Flip() { + // Set scissor to FBO size + if (m_set_scissor_horizontal && m_set_scissor_vertical) + { + glScissor(0, 0, RSXThread::m_width, RSXThread::m_height); + checkForGlError("glScissor"); + } + switch (m_surface_colour_target) { case CELL_GCM_SURFACE_TARGET_0: @@ -1143,12 +1151,6 @@ void GLGSRender::Flip() case CELL_GCM_SURFACE_TARGET_MRT3: { // Slow path for MRT/None target using glReadPixels. - if (m_set_scissor_horizontal && m_set_scissor_vertical) - { - glScissor(0, 0, RSXThread::m_width, RSXThread::m_height); - checkForGlError("glScissor"); - } - static u8* src_buffer = nullptr; static u32 width = 0; static u32 height = 0; @@ -1230,12 +1232,6 @@ void GLGSRender::Flip() glVertex2i(0, 1); glEnd(); } - - if (m_set_scissor_horizontal && m_set_scissor_vertical) - { - glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); - checkForGlError("glScissor"); - } } break; } @@ -1247,6 +1243,13 @@ void GLGSRender::Flip() } m_frame->Flip(m_context); + + // Restore scissor + if (m_set_scissor_horizontal && m_set_scissor_vertical) + { + glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); + checkForGlError("glScissor"); + } } From 0541482ee4b5b0c0aa3405edac5c686c1186e40a Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 16 Jun 2014 06:32:11 +0800 Subject: [PATCH 043/499] Drop off glEnable(GL_SCISSOR_TEST) --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 9e7827f818..cde3d5129e 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -615,7 +615,6 @@ void GLGSRender::OnInitThread() InitProcTable(); glEnable(GL_TEXTURE_2D); - glEnable(GL_SCISSOR_TEST); glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); glGenTextures(1, &g_depth_tex); glGenTextures(1, &g_flip_tex); From 79d34afb96c9b3109df36319d61a3515a008d42b Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 18 Jun 2014 00:21:40 +0800 Subject: [PATCH 044/499] Remove glDetachShader for vp and fp --- rpcs3/Emu/GS/GL/GLProgram.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLProgram.cpp b/rpcs3/Emu/GS/GL/GLProgram.cpp index 34fd42a61c..9a76b723aa 100644 --- a/rpcs3/Emu/GS/GL/GLProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLProgram.cpp @@ -79,9 +79,6 @@ void GLProgram::Create(const u32 vp, const u32 fp) return; } } - - glDetachShader(id, vp); - glDetachShader(id, fp); } void GLProgram::UnUse() From 4f4ab4c81add1742e3076d3745e644ca0c06fcb6 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 19 Jun 2014 05:02:04 +0800 Subject: [PATCH 045/499] Fix 1024x768 resolution not being saved --- rpcs3/Emu/GS/sysutil_video.h | 1 + 1 file changed, 1 insertion(+) diff --git a/rpcs3/Emu/GS/sysutil_video.h b/rpcs3/Emu/GS/sysutil_video.h index 4281737d4b..6dd5197d0a 100644 --- a/rpcs3/Emu/GS/sysutil_video.h +++ b/rpcs3/Emu/GS/sysutil_video.h @@ -275,6 +275,7 @@ inline static u32 ResolutionNumToId(u32 num) 12, 13, 14, + 15, }; return num <= 10 ? res[num] : 0; From 07006fd093836ea42089e5f8a09b587c16347292 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 19 Jun 2014 05:20:27 +0800 Subject: [PATCH 046/499] Add comment --- rpcs3/Emu/GS/sysutil_video.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/GS/sysutil_video.h b/rpcs3/Emu/GS/sysutil_video.h index 6dd5197d0a..800196e60c 100644 --- a/rpcs3/Emu/GS/sysutil_video.h +++ b/rpcs3/Emu/GS/sysutil_video.h @@ -232,8 +232,8 @@ static const CellVideoOutResolution ResolutionTable[] = {1440, 1080}, //11 - 6 {1280, 1080}, //12 - 7 {960, 1080}, //13 - 8 - {960, 540}, //14 - 9 - {1024,768}, //15 - 10 + {960, 540}, //14 - 9 (Terraria [BLES01938]) + {1024,768}, //15 - 10 (Eskiss Homebrew) }; inline static u32 ResolutionIdToNum(u32 id) From ccfaabd1d705f0bb3c07803621935608f7beb4a2 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 19 Jun 2014 17:50:18 +0400 Subject: [PATCH 047/499] Defined thread_local for MSVC Updated asmjit project Tried to fix crash on exit Fixed hypothetical issue when pausing already stopped emulator --- .gitignore | 2 ++ Utilities/GNU.h | 6 +++++ Utilities/SMutex.cpp | 9 +------- Utilities/Thread.cpp | 15 ++++++------ asmjit | 2 +- asmjitsrc/asmjit.vcxproj | 11 +++++---- asmjitsrc/asmjit.vcxproj.filters | 11 +++++---- rpcs3/Emu/GS/RSXThread.cpp | 5 ++++ rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp | 2 +- rpcs3/Emu/System.cpp | 28 ++++++++++++++++++++--- 12 files changed, 62 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index cfe1dc5f6e..396f474d54 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,5 @@ rpcs3/git-version.h # Ignore other system generated files bin/dev_hdd0/log.txt +x64/Debug/emucore.lib +x64/Release/emucore.lib diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 32f616a6d2..a3a2ba48e5 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -1,5 +1,11 @@ #pragma once +#ifdef _WIN32 +#define thread_local __declspec(thread) +#elif __APPLE__ +#define thread_local __thread +#endif + #if defined(__GNUG__) #include #include diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index b5ddd548d2..e253a52346 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -11,14 +11,7 @@ __forceinline void SM_Sleep() Sleep(1); } -#ifdef _WIN32 -__declspec(thread) -#elif __APPLE__ -__thread -#else -thread_local -#endif -size_t g_this_thread_id = 0; +thread_local size_t g_this_thread_id = 0; __forceinline size_t SM_GetCurrentThreadId() { diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index d18728fc5d..dba77485c2 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -3,14 +3,8 @@ #include "Thread.h" -#ifdef _WIN32 -__declspec(thread) -#elif __APPLE__ -__thread -#else -thread_local -#endif -NamedThreadBase* g_tls_this_thread = nullptr; +thread_local NamedThreadBase* g_tls_this_thread = nullptr; +std::atomic g_thread_count = 0; NamedThreadBase* GetCurrentNamedThread() { @@ -56,10 +50,12 @@ void ThreadBase::Start() [this]() { g_tls_this_thread = this; + g_thread_count++; Task(); m_alive = false; + g_thread_count--; }); } @@ -130,6 +126,7 @@ void thread::start(std::function func) { NamedThreadBase info(name); g_tls_this_thread = &info; + g_thread_count++; try { @@ -140,6 +137,8 @@ void thread::start(std::function func) ConLog.Error("Crash :("); //std::terminate(); } + + g_thread_count--; }); } diff --git a/asmjit b/asmjit index b76922fde9..a66efd5460 160000 --- a/asmjit +++ b/asmjit @@ -1 +1 @@ -Subproject commit b76922fde96232030be302b3bdd9673e9bcec568 +Subproject commit a66efd54609aab7dd98e34c069937f34aa7c8f95 diff --git a/asmjitsrc/asmjit.vcxproj b/asmjitsrc/asmjit.vcxproj index 28da0c7bdb..04f30a8e35 100644 --- a/asmjitsrc/asmjit.vcxproj +++ b/asmjitsrc/asmjit.vcxproj @@ -1,4 +1,4 @@ - + @@ -26,12 +26,10 @@ - - - + @@ -42,8 +40,11 @@ - + + + + diff --git a/asmjitsrc/asmjit.vcxproj.filters b/asmjitsrc/asmjit.vcxproj.filters index 3bc6ddf9b2..b82be7b1a7 100644 --- a/asmjitsrc/asmjit.vcxproj.filters +++ b/asmjitsrc/asmjit.vcxproj.filters @@ -1,11 +1,10 @@ - + - @@ -14,18 +13,20 @@ - - - + + + + + diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 096ef0de48..4023a11969 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1844,6 +1844,11 @@ void RSXThread::Task() while(!TestDestroy()) { + if (Emu.IsStopped()) + { + ConLog.Warning("RSX thread aborted"); + return; + } rCriticalSectionLocker lock(m_cs_main); inc=1; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index d42a0b7ca7..ee394c5254 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -471,7 +471,7 @@ int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) return CELL_GCM_ERROR_FAILURE; } - GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); // could stall on exit + GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); // could freeze on exit u32 current = ctxt->current; u32 end = ctxt->end; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp index 283072895c..53767cdb94 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp @@ -13,7 +13,7 @@ extern gcmInfo gcm_info; int cellGcmCallback(u32 context_addr, u32 count) { - GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); // could stall on exit + GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); // could freeze on exit CellGcmContextData& ctx = (CellGcmContextData&)Memory[context_addr]; CellGcmControl& ctrl = (CellGcmControl&)Memory[gcm_info.control_addr]; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp index c383dae656..9e31b63c62 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp @@ -83,7 +83,7 @@ void sys_ppu_thread_get_join_state(u32 isjoinable_addr) int sys_ppu_thread_set_priority(u32 thread_id, int prio) { - sysPrxForUser->Warning("sys_ppu_thread_set_priority(thread_id=%d, prio=%d)", thread_id, prio); + sysPrxForUser->Log("sys_ppu_thread_set_priority(thread_id=%d, prio=%d)", thread_id, prio); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index f07840c167..e599ceb217 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -21,6 +21,7 @@ using namespace PPU_instr; static const std::string& BreakPointsDBName = "BreakPoints.dat"; static const u16 bpdb_version = 0x1000; +extern std::atomic g_thread_count; ModuleInitializer::ModuleInitializer() { @@ -345,8 +346,10 @@ void Emulator::Pause() //ConLog.Write("pause..."); SendDbgCommand(DID_PAUSE_EMU); - m_status = Paused; - SendDbgCommand(DID_PAUSED_EMU); + if (InterlockedCompareExchange((volatile unsigned long*)&m_status, Paused, Running) == Running) + { + SendDbgCommand(DID_PAUSED_EMU); + } } void Emulator::Resume() @@ -370,8 +373,27 @@ void Emulator::Stop() SendDbgCommand(DID_STOP_EMU); m_status = Stopped; + u32 uncounted = 0 + (u32)(bool)m_dbg_console; + u32 counter = 0; + while (true) + { + if (g_thread_count <= uncounted) + { + ConLog.Write("All threads stopped..."); + break; + } + Sleep(1); + if (counter++ > 3000) + { + ConLog.Error("%d threads not stopped (timeout)", (u32)(g_thread_count - uncounted)); + break; + } + } + m_rsx_callback = 0; + // TODO: check finalization order + SavePoints(BreakPointsDBName); m_break_points.clear(); m_marked_points.clear(); @@ -388,7 +410,7 @@ void Emulator::Stop() GetKeyboardManager().Close(); GetMouseManager().Close(); GetCallbackManager().Clear(); - //not all modules unload cleanly, so we're not unloading them for now + // TODO: not all modules unload cleanly, so we're not unloading them for now //GetModuleManager().UnloadModules(); CurGameInfo.Reset(); From f131f134a52e4723677b8bc69e79f464542451b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Thu, 19 Jun 2014 20:15:53 +0200 Subject: [PATCH 048/499] Minor changes * Removed old lv2Process* functions * Function name is displayed again in unimplemented syscalls * Minor changes that won't affect the emulator. --- rpcs3/Emu/GS/GCM.h | 7 +++++++ rpcs3/Emu/GS/RSXThread.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 10 +++++----- rpcs3/Emu/SysCalls/SysCalls.cpp | 14 +------------- 4 files changed, 14 insertions(+), 19 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 28fbdb2265..8d57541ff6 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -132,6 +132,13 @@ enum CELL_GCM_ZCULL_STATS3 = 5, }; +// GPU Class Handles +enum +{ + CELL_GCM_CONTEXT_SURFACE2D = 0x313371C3, + CELL_GCM_CONTEXT_SWIZZLE2D = 0x31337A73, +}; + struct CellGcmControl { be_t put; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 096ef0de48..e2b0fe61c8 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1780,7 +1780,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV3089_SET_CONTEXT_SURFACE: { - if(ARGS(0) != 0x313371C3) + if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D) { ConLog.Warning("NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0)); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 448677dad1..eb7537f3d8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -68,11 +68,11 @@ int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s switch(src->srcSelect.ToBE()) { - case const_se_t::value: + case se32(CELL_PNGDEC_BUFFER): current_subHandle->fileSize = src->streamSize.ToLE(); break; - case const_se_t::value: + case se32(CELL_PNGDEC_FILE): // Get file descriptor MemoryAllocator> fd; int ret = cellFsOpen(src->fileName_addr, 0, fd.GetAddr(), 0, 0); @@ -128,12 +128,12 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t> buffer(34); // Alloc buffer for PNG header MemoryAllocator> pos, nread; - switch(subHandle_data->src.srcSelect.ToLE()) + switch(subHandle_data->src.srcSelect.ToBE()) { - case CELL_PNGDEC_BUFFER: + case se32(CELL_PNGDEC_BUFFER): Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize()); break; - case CELL_PNGDEC_FILE: + case se32(CELL_PNGDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); cellFsRead(fd, buffer.GetAddr(), buffer.GetSize(), nread.GetAddr()); break; diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 7ee82b5eb5..4bff0b64d7 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -533,18 +533,6 @@ void default_syscall() //TODO: remove this switch(code) { - /* - //process - case 2: RESULT(lv2ProcessWaitForChild(CPU)); return; - case 4: RESULT(lv2ProcessGetStatus(CPU)); return; - case 5: RESULT(lv2ProcessDetachChild(CPU)); return; - case 12: RESULT(lv2ProcessGetNumberOfObject(CPU)); return; - case 13: RESULT(lv2ProcessGetId(CPU)); return; - case 18: RESULT(lv2ProcessGetPpid(CPU)); return; - case 19: RESULT(lv2ProcessKill(CPU)); return; - case 23: RESULT(lv2ProcessWaitForChild2(CPU)); return; - case 25: RESULT(lv2ProcessGetSdkVersion(CPU)); return; - */ //tty case 988: ConLog.Warning("SysCall 988! r3: 0x%llx, r4: 0x%llx, pc: 0x%llx", @@ -583,7 +571,7 @@ void SysCalls::DoSyscall(u32 code) } - ConLog.Error("Unknown function 0x%08x", code); + ConLog.Error("TODO: %s", GetHLEFuncName(code).c_str()); declCPU(); RESULT(0); } From 237e7989b45b8e4346b31adafe05eee8ea1a7203 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 20 Jun 2014 00:34:09 +0400 Subject: [PATCH 049/499] Tried to avoid glDeleteShader crash --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 9 ++++++++- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index a0813bf35e..8da1d20a63 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -536,7 +536,14 @@ void GLShaderProgram::Delete() if (m_id) { - glDeleteShader(m_id); + if (Emu.IsStopped()) + { + ConLog.Warning("GLShaderProgram::Delete(): glDeleteShader(%d) avoided", m_id); + } + else + { + glDeleteShader(m_id); + } m_id = 0; } } diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index 8dbc57081a..4ff7af13c8 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -665,7 +665,14 @@ void GLVertexProgram::Delete() if(id) { - glDeleteShader(id); + if (Emu.IsStopped()) + { + ConLog.Warning("GLVertexProgram::Delete(): glDeleteShader(%d) avoided", id); + } + else + { + glDeleteShader(id); + } id = 0; } } From efffc7e6bc2ebbc9d93756783ed25cf35caa7115 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 20 Jun 2014 17:33:02 +0800 Subject: [PATCH 050/499] Option allow downscaling 720p/1080p to 480p --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 16 +++++++++------- rpcs3/Emu/GS/RSXThread.cpp | 25 +++++++++++++++++++++++++ rpcs3/Emu/GS/RSXThread.h | 5 ++++- rpcs3/Gui/MainFrame.cpp | 10 +++++++--- rpcs3/Ini.h | 6 +++++- 5 files changed, 50 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index cde3d5129e..a19194566d 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -287,17 +287,17 @@ void GLGSRender::InitVertexData() } // Scale - scaleOffsetMat[0] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4*0)] / (RSXThread::m_width / 2.0f); - scaleOffsetMat[5] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4*1)] / (RSXThread::m_height / 2.0f); + scaleOffsetMat[0] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4 * 0)] / (RSXThread::m_width / RSXThread::m_width_scale); + scaleOffsetMat[5] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4 * 1)] / (RSXThread::m_height / RSXThread::m_height_scale); scaleOffsetMat[10] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4*2)]; // Offset - scaleOffsetMat[3] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4*0)] - (RSXThread::m_width / 2.0f); - scaleOffsetMat[7] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4*1)] - (RSXThread::m_height / 2.0f); - scaleOffsetMat[11] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4*2)] - 1/2.0f; + scaleOffsetMat[3] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4 * 0)] - (RSXThread::m_width / RSXThread::m_width_scale); + scaleOffsetMat[7] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4 * 1)] - (RSXThread::m_height / RSXThread::m_height_scale); + scaleOffsetMat[11] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4 * 2)]; - scaleOffsetMat[3] /= RSXThread::m_width / 2.0f; - scaleOffsetMat[7] /= RSXThread::m_height / 2.0f; + scaleOffsetMat[3] /= RSXThread::m_width / RSXThread::m_width_scale; + scaleOffsetMat[7] /= RSXThread::m_height / RSXThread::m_height_scale; l = m_program.GetLocation("scaleOffsetMat"); glUniformMatrix4fv(l, 1, false, scaleOffsetMat); @@ -598,6 +598,8 @@ void GLGSRender::OnInit() m_skip_frames = 0; RSXThread::m_width = 720; RSXThread::m_height = 576; + RSXThread::m_width_scale = 2.0f; + RSXThread::m_height_scale = 2.0f; last_width = 0; last_height = 0; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index e2b0fe61c8..c335870cd8 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1264,6 +1264,31 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(m_gcm_buffers_addr); m_width = re(buffers[m_gcm_current_buffer].width); m_height = re(buffers[m_gcm_current_buffer].height); + + if (Ini.GSDownscale.GetValue()) + { + if (m_width == 1280 && m_height == 720) + { + // Set scale ratio for 720p + m_width_scale = 1.125f; + m_height_scale = 1.33f; + + // Downscale 720p to 480p + m_width = 720; + m_height = 480; + } + + if (m_width == 1920 && m_height == 1080) + { + // Set scale ratio for 1080p + m_width_scale = 0.75f; + m_height_scale = 0.88f; + + // Downscale 1080p to 480p + m_width = 720; + m_height = 480; + } + } } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 0424317aa0..2a5020c12e 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -137,7 +137,10 @@ public: public: uint m_draw_mode; - u32 m_width, m_height; + u32 m_width; + u32 m_height; + float m_width_scale; + float m_height_scale; u32 m_draw_array_count; u32 m_draw_array_first; diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 3dcfd9c31a..65f026e024 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -420,10 +420,11 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_gs_log_prog = new wxCheckBox(p_graphics, wxID_ANY, "Log vertex/fragment programs"); wxCheckBox* chbox_gs_dump_depth = new wxCheckBox(p_graphics, wxID_ANY, "Write Depth Buffer"); wxCheckBox* chbox_gs_dump_color = new wxCheckBox(p_graphics, wxID_ANY, "Write Color Buffers"); - wxCheckBox* chbox_skip_pamf = new wxCheckBox(p_graphics, wxID_ANY, "Skip Pamf"); + wxCheckBox* chbox_skip_pamf = new wxCheckBox(p_graphics, wxID_ANY, "Skip Pamf"); + wxCheckBox* chbox_gs_downscale = new wxCheckBox(p_graphics, wxID_ANY, "480p Downscale"); wxCheckBox* chbox_gs_vsync = new wxCheckBox(p_graphics, wxID_ANY, "VSync"); wxCheckBox* chbox_audio_dump = new wxCheckBox(p_audio, wxID_ANY, "Dump to file"); - wxCheckBox* chbox_audio_conv = new wxCheckBox(p_audio, wxID_ANY, "Convert to 16 bit"); + wxCheckBox* chbox_audio_conv = new wxCheckBox(p_audio, wxID_ANY, "Convert to 16 bit"); wxCheckBox* chbox_hle_logging = new wxCheckBox(p_hle, wxID_ANY, "Log all SysCalls"); wxCheckBox* chbox_hle_hook_stfunc = new wxCheckBox(p_hle, wxID_ANY, "Hook static functions"); wxCheckBox* chbox_hle_savetty = new wxCheckBox(p_hle, wxID_ANY, "Save TTY output to file"); @@ -500,9 +501,10 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_gs_dump_depth ->SetValue(Ini.GSDumpDepthBuffer.GetValue()); chbox_gs_dump_color ->SetValue(Ini.GSDumpColorBuffers.GetValue()); chbox_skip_pamf ->SetValue(Ini.SkipPamf.GetValue()); + chbox_gs_downscale ->SetValue(Ini.GSDownscale.GetValue()); chbox_gs_vsync ->SetValue(Ini.GSVSyncEnable.GetValue()); chbox_audio_dump ->SetValue(Ini.AudioDumpToFile.GetValue()); - chbox_audio_conv ->SetValue(Ini.AudioConvertToU16.GetValue()); + chbox_audio_conv ->SetValue(Ini.AudioConvertToU16.GetValue()); chbox_hle_logging ->SetValue(Ini.HLELogging.GetValue()); chbox_hle_hook_stfunc ->SetValue(Ini.HLEHookStFunc.GetValue()); chbox_hle_savetty ->SetValue(Ini.HLESaveTTY.GetValue()); @@ -561,6 +563,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_graphics->Add(chbox_gs_dump_color, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_skip_pamf, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_vsync, wxSizerFlags().Border(wxALL, 5).Expand()); + s_subpanel_graphics->Add(chbox_gs_downscale, wxSizerFlags().Border(wxALL, 5).Expand()); // Input - Output s_subpanel_io->Add(s_round_io_pad_handler, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -609,6 +612,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.GSResolution.SetValue(ResolutionNumToId(cbox_gs_resolution->GetSelection() + 1)); Ini.GSAspectRatio.SetValue(cbox_gs_aspect->GetSelection() + 1); Ini.GSVSyncEnable.SetValue(chbox_gs_vsync->GetValue()); + Ini.GSDownscale.SetValue(chbox_gs_downscale->GetValue()); Ini.GSLogPrograms.SetValue(chbox_gs_log_prog->GetValue()); Ini.GSDumpDepthBuffer.SetValue(chbox_gs_dump_depth->GetValue()); Ini.GSDumpColorBuffers.SetValue(chbox_gs_dump_color->GetValue()); diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index 543b8b4075..a0c17b6dc3 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -116,6 +116,7 @@ public: IniEntry GSDumpColorBuffers; IniEntry GSDumpDepthBuffer; IniEntry SkipPamf; + IniEntry GSDownscale; // Audio IniEntry AudioOutMode; @@ -184,6 +185,7 @@ public: GSDumpColorBuffers.Init("GS_DumpColorBuffers", path); GSDumpDepthBuffer.Init("GS_DumpDepthBuffer", path); SkipPamf.Init("GS_SkipPamf", path); + GSDownscale.Init("GS_Downscale", path); // Audio AudioOutMode.Init("Audio_AudioOutMode", path); @@ -248,6 +250,7 @@ public: GSDumpColorBuffers.Load(false); GSDumpDepthBuffer.Load(false); SkipPamf.Load(false); + GSDownscale.Load(false); // Audio AudioOutMode.Load(1); @@ -313,6 +316,7 @@ public: GSDumpColorBuffers.Save(); GSDumpDepthBuffer.Save(); SkipPamf.Save(); + GSDownscale.Save(); // Audio AudioOutMode.Save(); @@ -362,4 +366,4 @@ public: } }; -extern Inis Ini; \ No newline at end of file +extern Inis Ini; From 90b9861043797edfd955597c481336564a765372 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 20 Jun 2014 15:00:36 +0400 Subject: [PATCH 051/499] SMutex partially replaced with std::mutex SPURecompiler.h: SETcc bug fixed --- Utilities/SMutex.cpp | 9 +++++++- Utilities/SMutex.h | 16 +++++++-------- Utilities/SQueue.h | 25 +++++------------------ Utilities/Thread.cpp | 2 +- Utilities/Thread.h | 14 +++++++++++++ rpcs3/Emu/CPU/CPUThread.h | 7 ++++++- rpcs3/Emu/Cell/PPUInterpreter.h | 8 ++++---- rpcs3/Emu/Cell/SPURecompiler.h | 12 +++++------ rpcs3/Emu/Cell/SPUThread.cpp | 2 +- rpcs3/Emu/Cell/SPUThread.h | 10 ++++----- rpcs3/Emu/Event.cpp | 11 +++++----- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 4 ++-- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 14 ++++++------- rpcs3/Emu/SysCalls/Modules/cellDmux.h | 18 ++++++++-------- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 4 ++-- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 6 +++--- rpcs3/Emu/SysCalls/lv2/SC_Event.cpp | 26 +++++++++--------------- rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp | 4 ++-- rpcs3/Emu/event.h | 24 +++++++++++----------- rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 +++ 21 files changed, 114 insertions(+), 106 deletions(-) diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index e253a52346..807a55c268 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -8,7 +8,14 @@ __forceinline void SM_Sleep() { - Sleep(1); + if (NamedThreadBase* t = GetCurrentNamedThread()) + { + t->WaitForAnySignal(); + } + else + { + Sleep(1); + } } thread_local size_t g_this_thread_id = 0; diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index 4023641c73..1e129809fc 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -123,7 +123,7 @@ public: default: return res; } - wait(); + if (wait) wait(); if (timeout && counter++ > timeout) { @@ -133,14 +133,14 @@ public: } }; -template +template class SMutexLockerBase { - SMutexBase& sm; + T& sm; public: - const T tid; + const Tid tid; - __forceinline SMutexLockerBase(SMutexBase& _sm) + __forceinline SMutexLockerBase(T& _sm) : sm(_sm) , tid(get_tid()) { @@ -169,9 +169,9 @@ typedef SMutexBase typedef SMutexBase> SMutexBE; -typedef SMutexLockerBase +typedef SMutexLockerBase SMutexGeneralLocker; -typedef SMutexLockerBase +typedef SMutexLockerBase SMutexLocker; -typedef SMutexLockerBase, SM_GetCurrentCPUThreadIdBE> +typedef SMutexLockerBase, SM_GetCurrentCPUThreadIdBE> SMutexBELocker; diff --git a/Utilities/SQueue.h b/Utilities/SQueue.h index dd0b7787fc..c6e4f7c01a 100644 --- a/Utilities/SQueue.h +++ b/Utilities/SQueue.h @@ -3,7 +3,7 @@ template class SQueue { - SMutexGeneral m_mutex; + std::mutex m_mutex; u32 m_pos; u32 m_count; T m_data[SQSize]; @@ -24,11 +24,6 @@ public: { while (true) { - if (m_mutex.GetOwner() == m_mutex.GetDeadValue()) - { - return false; - } - if (m_count >= SQSize) { if (Emu.IsStopped()) @@ -40,7 +35,7 @@ public: } { - SMutexGeneralLocker lock(m_mutex); + std::lock_guard lock(m_mutex); if (m_count >= SQSize) continue; @@ -55,11 +50,6 @@ public: { while (true) { - if (m_mutex.GetOwner() == m_mutex.GetDeadValue()) - { - return false; - } - if (!m_count) { if (Emu.IsStopped()) @@ -71,7 +61,7 @@ public: } { - SMutexGeneralLocker lock(m_mutex); + std::lock_guard lock(m_mutex); if (!m_count) continue; @@ -96,7 +86,7 @@ public: void Clear() { - SMutexGeneralLocker lock(m_mutex); + std::lock_guard lock(m_mutex); m_count = 0; } @@ -104,11 +94,6 @@ public: { while (true) { - if (m_mutex.GetOwner() == m_mutex.GetDeadValue()) - { - break; - } - if (!m_count) { if (Emu.IsStopped()) @@ -120,7 +105,7 @@ public: } { - SMutexGeneralLocker lock(m_mutex); + std::lock_guard lock(m_mutex); if (m_count) break; } } diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index dba77485c2..ed54c45245 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -4,7 +4,7 @@ #include "Thread.h" thread_local NamedThreadBase* g_tls_this_thread = nullptr; -std::atomic g_thread_count = 0; +std::atomic g_thread_count(0); NamedThreadBase* GetCurrentNamedThread() { diff --git a/Utilities/Thread.h b/Utilities/Thread.h index f081b89951..7a4065015b 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -13,6 +13,9 @@ class NamedThreadBase { std::string m_name; + std::condition_variable m_signal_cv; + std::mutex m_signal_mtx; + public: NamedThreadBase(const std::string& name) : m_name(name) { @@ -24,6 +27,17 @@ public: virtual std::string GetThreadName() const; virtual void SetThreadName(const std::string& name); + + void WaitForAnySignal() // wait 1 ms for something + { + std::unique_lock lock(m_signal_mtx); + m_signal_cv.wait_for(lock, std::chrono::milliseconds(1)); + } + + void Notify() // wake up waiting thread or nothing + { + m_signal_cv.notify_one(); + } }; NamedThreadBase* GetCurrentNamedThread(); diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 62a13d4a3c..5fd14c402b 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -3,9 +3,14 @@ #include "Emu/CPU/CPUDecoder.h" #include "Utilities/SMutex.h" +typedef SMutexBase SMutexR; +typedef SMutexLockerBase SMutexLockerR; + struct reservation_struct { - SMutex mutex; // mutex for updating reservation_owner and data + SMutexR mutex; // mutex for updating reservation_owner and data + // std::mutex doesn't work because it probably wakes up waiting threads in the most unwanted order + // and doesn't give a chance to finish some work before losing the reservation u32 owner; // id of thread that got reservation u32 addr; u32 size; diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index c8e5960d21..a28ee3a050 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -2367,7 +2367,7 @@ private: { const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - SMutexLocker lock(reservation.mutex); + SMutexLockerR lock(reservation.mutex); reservation.owner = lock.tid; reservation.addr = addr; reservation.size = 4; @@ -2522,7 +2522,7 @@ private: { const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - SMutexLocker lock(reservation.mutex); + SMutexLockerR lock(reservation.mutex); reservation.owner = lock.tid; reservation.addr = addr; reservation.size = 8; @@ -2641,7 +2641,7 @@ private: { const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - SMutexLocker lock(reservation.mutex); + SMutexLockerR lock(reservation.mutex); if (lock.tid == reservation.owner && reservation.addr == addr && reservation.size == 4) { // Memory.Write32(addr, CPU.GPR[rs]); @@ -2702,7 +2702,7 @@ private: { const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - SMutexLocker lock(reservation.mutex); + SMutexLockerR lock(reservation.mutex); if (lock.tid == reservation.owner && reservation.addr == addr && reservation.size == 8) { // Memory.Write64(addr, CPU.GPR[rs]); diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 782f7c4d0a..b68a7c6cd1 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -1931,7 +1931,7 @@ private: c.mov(*addr, cpu_dword(GPR[ra]._i32[3])); c.cmp(*addr, cpu_dword(GPR[rb]._i32[3])); c.mov(*addr, 0); - c.setg(*addr); + c.setg(addr->r8()); c.neg(*addr); c.mov(*pos_var, (CPU.PC >> 2) + 1); c.xor_(*pos_var, *addr); @@ -2311,7 +2311,7 @@ private: c.mov(*addr, cpu_dword(GPR[ra]._u32[3])); c.cmp(*addr, cpu_dword(GPR[rb]._u32[3])); c.mov(*addr, 0); - c.seta(*addr); + c.seta(addr->r8()); c.neg(*addr); c.mov(*pos_var, (CPU.PC >> 2) + 1); c.xor_(*pos_var, *addr); @@ -2729,7 +2729,7 @@ private: c.mov(*addr, cpu_dword(GPR[ra]._i32[3])); c.cmp(*addr, cpu_dword(GPR[rb]._i32[3])); c.mov(*addr, 0); - c.sete(*addr); + c.sete(addr->r8()); c.neg(*addr); c.mov(*pos_var, (CPU.PC >> 2) + 1); c.xor_(*pos_var, *addr); @@ -3391,7 +3391,7 @@ private: c.mov(*addr, cpu_dword(GPR[ra]._i32[3])); c.cmp(*addr, i10); c.mov(*addr, 0); - c.setg(*addr); + c.setg(addr->r8()); c.neg(*addr); c.mov(*pos_var, (CPU.PC >> 2) + 1); c.xor_(*pos_var, *addr); @@ -3457,7 +3457,7 @@ private: c.mov(*addr, cpu_dword(GPR[ra]._u32[3])); c.cmp(*addr, i10); c.mov(*addr, 0); - c.seta(*addr); + c.seta(addr->r8()); c.neg(*addr); c.mov(*pos_var, (CPU.PC >> 2) + 1); c.xor_(*pos_var, *addr); @@ -3508,7 +3508,7 @@ private: c.mov(*addr, cpu_dword(GPR[ra]._u32[3])); c.cmp(*addr, i10); c.mov(*addr, 0); - c.sete(*addr); + c.sete(addr->r8()); c.neg(*addr); c.mov(*pos_var, (CPU.PC >> 2) + 1); c.xor_(*pos_var, *addr); diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 663e80d777..c454171422 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -115,7 +115,7 @@ void SPUThread::DoClose() for (u32 i = 0; i < 64; i++) { EventPort& port = SPUPs[i]; - SMutexLocker lock(port.mutex); + std::lock_guard lock(port.m_mutex); if (port.eq) { port.eq->ports.remove(&port); diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index c71b2d3d68..664a1e24f0 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -733,7 +733,7 @@ public: if (op == MFC_GETLLAR_CMD) // get reservation { - SMutexLocker lock(reservation.mutex); + SMutexLockerR lock(reservation.mutex); reservation.owner = lock.tid; reservation.addr = ea; reservation.size = 128; @@ -746,7 +746,7 @@ public: } else if (op == MFC_PUTLLC_CMD) // store conditional { - SMutexLocker lock(reservation.mutex); + SMutexLockerR lock(reservation.mutex); if (reservation.owner == lock.tid) // succeeded { if (reservation.addr == ea && reservation.size == 128) @@ -827,7 +827,7 @@ public: } else // store unconditional { - SMutexLocker lock(reservation.mutex); + SMutexLockerR lock(reservation.mutex); ProcessCmd(MFC_PUT_CMD, tag, lsa, ea, 128); if (op == MFC_PUTLLUC_CMD) { @@ -929,7 +929,7 @@ public: EventPort& port = SPUPs[spup]; - SMutexLocker lock(port.mutex); + std::lock_guard lock(port.m_mutex); if (!port.eq) { @@ -937,7 +937,7 @@ public: return; } - if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, lock.tid, ((u64)code << 32) | (v & 0x00ffffff), data)) + if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, GetCurrentCPUThread()->GetId(), ((u64)code << 32) | (v & 0x00ffffff), data)) { SPU.In_MBox.PushUncond(CELL_EBUSY); return; diff --git a/rpcs3/Emu/Event.cpp b/rpcs3/Emu/Event.cpp index 06d9abfe38..528b9703c6 100644 --- a/rpcs3/Emu/Event.cpp +++ b/rpcs3/Emu/Event.cpp @@ -6,7 +6,6 @@ void EventManager::Init() { - } void EventManager::Clear() @@ -17,7 +16,7 @@ void EventManager::Clear() bool EventManager::CheckKey(u64 key) { if (!key) return true; - SMutexLocker lock(m_lock); + std::lock_guard lock(m_lock); return key_map.find(key) != key_map.end(); } @@ -25,7 +24,7 @@ bool EventManager::CheckKey(u64 key) bool EventManager::RegisterKey(EventQueue* data, u64 key) { if (!key) return true; - SMutexLocker lock(m_lock); + std::lock_guard lock(m_lock); if (key_map.find(key) != key_map.end()) return false; @@ -43,7 +42,7 @@ bool EventManager::GetEventQueue(u64 key, EventQueue*& data) { data = nullptr; if (!key) return false; - SMutexLocker lock(m_lock); + std::lock_guard lock(m_lock); auto f = key_map.find(key); if (f != key_map.end()) @@ -57,7 +56,7 @@ bool EventManager::GetEventQueue(u64 key, EventQueue*& data) bool EventManager::UnregisterKey(u64 key) { if (!key) return false; - SMutexLocker lock(m_lock); + std::lock_guard lock(m_lock); auto f = key_map.find(key); if (f != key_map.end()) @@ -71,7 +70,7 @@ bool EventManager::UnregisterKey(u64 key) bool EventManager::SendEvent(u64 key, u64 source, u64 d1, u64 d2, u64 d3) { if (!key) return false; - SMutexLocker lock(m_lock); + std::lock_guard lock(m_lock); auto f = key_map.find(key); if (f == key_map.end()) diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index e5983c399e..d4ef62518b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -8,7 +8,7 @@ #include "Emu/SysCalls/SysCalls.h" #include "cellPamf.h" -extern SMutexGeneral g_mutex_avcodec_open2; +extern std::mutex g_mutex_avcodec_open2; extern "C" { @@ -352,7 +352,7 @@ u32 adecOpen(AudioDecoder* data) AVDictionary* opts = nullptr; av_dict_set(&opts, "refcounted_frames", "1", 0); { - SMutexGeneralLocker lock(g_mutex_avcodec_open2); + std::lock_guard lock(g_mutex_avcodec_open2); // not multithread-safe err = avcodec_open2(adec.ctx, codec, &opts); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 1e9d2af4ad..ca4d8072f0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -15,7 +15,7 @@ //Module cellAudio(0x0011, cellAudio_init); extern Module *cellAudio = nullptr; -static SMutexGeneral audioMutex; +static std::mutex audioMutex; AudioConfig m_config; @@ -394,7 +394,7 @@ int cellAudioInit() // send aftermix event (normal audio event) { - SMutexGeneralLocker lock(audioMutex); + std::lock_guard lock(audioMutex); // update indexes: for (u32 i = 0; i < m_config.AUDIO_PORT_COUNT; i++) { @@ -694,7 +694,7 @@ int cellAudioGetPortTimestamp(u32 portNum, u64 tag, mem64_t stamp) AudioPortConfig& port = m_config.m_ports[portNum]; - SMutexGeneralLocker lock(audioMutex); + std::lock_guard lock(audioMutex); stamp = m_config.start_time + (port.counter + (tag - port.tag)) * 256000000 / 48000; @@ -728,7 +728,7 @@ int cellAudioGetPortBlockTag(u32 portNum, u64 blockNo, mem64_t tag) return CELL_AUDIO_ERROR_PARAM; } - SMutexGeneralLocker lock(audioMutex); + std::lock_guard lock(audioMutex); u64 tag_base = port.tag; if (tag_base % port.block > blockNo) @@ -756,7 +756,7 @@ int cellAudioCreateNotifyEventQueue(mem32_t id, mem64_t key) { cellAudio->Warning("cellAudioCreateNotifyEventQueue(id_addr=0x%x, key_addr=0x%x)", id.GetAddr(), key.GetAddr()); - SMutexGeneralLocker lock(audioMutex); + std::lock_guard lock(audioMutex); u64 event_key = 0; while (Emu.GetEventManager().CheckKey((event_key << 48) | 0x80004d494f323221)) @@ -790,7 +790,7 @@ int cellAudioSetNotifyEventQueue(u64 key) { cellAudio->Warning("cellAudioSetNotifyEventQueue(key=0x%llx)", key); - SMutexGeneralLocker lock(audioMutex); + std::lock_guard lock(audioMutex); for (u32 i = 0; i < m_config.m_keys.size(); i++) // check for duplicates { @@ -822,7 +822,7 @@ int cellAudioRemoveNotifyEventQueue(u64 key) { cellAudio->Warning("cellAudioRemoveNotifyEventQueue(key=0x%llx)", key); - SMutexGeneralLocker lock(audioMutex); + std::lock_guard lock(audioMutex); bool found = false; for (u32 i = 0; i < m_config.m_keys.size(); i++) diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.h b/rpcs3/Emu/SysCalls/Modules/cellDmux.h index e57aca33c3..7d2f8082a7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.h +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.h @@ -481,7 +481,7 @@ public: class ElementaryStream { - SMutex mutex; + std::mutex m_mutex; SQueue entries; // AU starting addresses u32 put_count; // number of AU written @@ -566,19 +566,19 @@ public: bool hasunseen() { - SMutexLocker lock(mutex); + std::lock_guard lock(m_mutex); return peek_count < put_count; } bool hasdata() { - SMutexLocker lock(mutex); + std::lock_guard lock(m_mutex); return size; } bool isfull() { - SMutexLocker lock(mutex); + std::lock_guard lock(m_mutex); return is_full(); } @@ -586,7 +586,7 @@ public: { u32 addr; { - SMutexLocker lock(mutex); + std::lock_guard lock(m_mutex); //if (fidMajor != 0xbd) ConLog.Write(">>> es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); addr = put; @@ -621,7 +621,7 @@ public: void push(DemuxerStream& stream, u32 sz, PesHeader& pes) { - SMutexLocker lock(mutex); + std::lock_guard lock(m_mutex); if (is_full()) { @@ -673,7 +673,7 @@ public: bool release() { - SMutexLocker lock(mutex); + std::lock_guard lock(m_mutex); //if (fidMajor != 0xbd) ConLog.Write(">>> es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); if (released >= put_count) { @@ -720,7 +720,7 @@ public: bool peek(u32& out_data, bool no_ex, u32& out_spec, bool update_index) { - SMutexLocker lock(mutex); + std::lock_guard lock(m_mutex); //if (fidMajor != 0xbd) ConLog.Write(">>> es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); if (peek_count >= put_count) return false; @@ -767,7 +767,7 @@ public: void reset() { - SMutexLocker lock(mutex); + std::lock_guard lock(m_mutex); //first = 0; //peek = 0; put = memAddr; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index eda5a0511d..69a6256de3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -7,7 +7,7 @@ #include "Emu/SysCalls/Modules.h" #include "cellPamf.h" -SMutexGeneral g_mutex_avcodec_open2; +std::mutex g_mutex_avcodec_open2; extern "C" { @@ -284,7 +284,7 @@ u32 vdecOpen(VideoDecoder* data) AVDictionary* opts = nullptr; av_dict_set(&opts, "refcounted_frames", "1", 0); { - SMutexGeneralLocker lock(g_mutex_avcodec_open2); + std::lock_guard lock(g_mutex_avcodec_open2); // not multithread-safe err = avcodec_open2(vdec.ctx, codec, &opts); } diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 02ed6425ad..a159e0eec1 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -17,7 +17,7 @@ CellSurMixerConfig surMixer; #define SUR_PORT (7) u32 surMixerCb = 0; u32 surMixerCbArg = 0; -SMutex mixer_mutex; +std::mutex mixer_mutex; float mixdata[8*256]; u64 mixcount = 0; @@ -53,7 +53,7 @@ int cellAANAddData(u32 aan_handle, u32 aan_port, u32 offset, u32 addr, u32 sampl return CELL_OK; } - SMutexLocker lock(mixer_mutex); + std::lock_guard lock(mixer_mutex); if (type == CELL_SURMIXER_CHSTRIP_TYPE1A) { @@ -316,7 +316,7 @@ int cellSurMixerSurBusAddData(u32 busNo, u32 offset, u32 addr, u32 samples) return CELL_OK; } - SMutexLocker lock(mixer_mutex); + std::lock_guard lock(mixer_mutex); for (u32 i = 0; i < samples; i++) { diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp index 46bc43fcdb..b755a4d16a 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp @@ -280,20 +280,18 @@ int sys_event_port_destroy(u32 eport_id) return CELL_ESRCH; } - u32 tid = GetCurrentPPUThread().GetId(); - - if (eport->mutex.trylock(tid) != SMR_OK) + if (!eport->m_mutex.try_lock()) { return CELL_EISCONN; } if (eport->eq) { - eport->mutex.unlock(tid); + eport->m_mutex.unlock(); return CELL_EISCONN; } - eport->mutex.unlock(tid, ~0); + eport->m_mutex.unlock(); Emu.GetIdManager().RemoveID(eport_id); return CELL_OK; } @@ -308,16 +306,14 @@ int sys_event_port_connect_local(u32 eport_id, u32 equeue_id) return CELL_ESRCH; } - u32 tid = GetCurrentPPUThread().GetId(); - - if (eport->mutex.trylock(tid) != SMR_OK) + if (!eport->m_mutex.try_lock()) { return CELL_EISCONN; } if (eport->eq) { - eport->mutex.unlock(tid); + eport->m_mutex.unlock(); return CELL_EISCONN; } @@ -325,7 +321,7 @@ int sys_event_port_connect_local(u32 eport_id, u32 equeue_id) if (!Emu.GetIdManager().GetIDData(equeue_id, equeue)) { sys_event.Error("sys_event_port_connect_local: event_queue(%d) not found!", equeue_id); - eport->mutex.unlock(tid); + eport->m_mutex.unlock(); return CELL_ESRCH; } else @@ -334,7 +330,7 @@ int sys_event_port_connect_local(u32 eport_id, u32 equeue_id) } eport->eq = equeue; - eport->mutex.unlock(tid); + eport->m_mutex.unlock(); return CELL_OK; } @@ -353,16 +349,14 @@ int sys_event_port_disconnect(u32 eport_id) return CELL_ENOTCONN; } - u32 tid = GetCurrentPPUThread().GetId(); - - if (eport->mutex.trylock(tid) != SMR_OK) + if (!eport->m_mutex.try_lock()) { return CELL_EBUSY; } eport->eq->ports.remove(eport); eport->eq = nullptr; - eport->mutex.unlock(tid); + eport->m_mutex.unlock(); return CELL_OK; } @@ -377,7 +371,7 @@ int sys_event_port_send(u32 eport_id, u64 data1, u64 data2, u64 data3) return CELL_ESRCH; } - SMutexLocker lock(eport->mutex); + std::lock_guard lock(eport->m_mutex); EventQueue* eq = eport->eq; if (!eq) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp index b71e02889c..3a4ebb5837 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp @@ -604,7 +604,7 @@ int sys_spu_thread_connect_event(u32 id, u32 eq_id, u32 et, u8 spup) EventPort& port = spu.SPUPs[spup]; - SMutexLocker lock(port.mutex); + std::lock_guard lock(port.m_mutex); if (port.eq) { @@ -645,7 +645,7 @@ int sys_spu_thread_disconnect_event(u32 id, u32 et, u8 spup) EventPort& port = spu.SPUPs[spup]; - SMutexLocker lock(port.mutex); + std::lock_guard lock(port.m_mutex); if (!port.eq) { diff --git a/rpcs3/Emu/event.h b/rpcs3/Emu/event.h index a9a3630c45..cb0e0a77c1 100644 --- a/rpcs3/Emu/event.h +++ b/rpcs3/Emu/event.h @@ -58,7 +58,7 @@ struct EventPort { u64 name; // generated or user-specified code that is passed to sys_event_data struct EventQueue* eq; // event queue this port has been connected to - SMutex mutex; // may be locked until the event sending is finished + std::mutex m_mutex; // may be locked until the event sending is finished EventPort(u64 name = 0) : eq(nullptr) @@ -70,7 +70,7 @@ struct EventPort class EventRingBuffer { std::vector data; - SMutex m_lock; + std::mutex m_mutex; u32 buf_pos; u32 buf_count; @@ -87,14 +87,14 @@ public: void clear() { - SMutexLocker lock(m_lock); + std::lock_guard lock(m_mutex); buf_count = 0; buf_pos = 0; } bool push(u64 name, u64 d1, u64 d2, u64 d3) { - SMutexLocker lock(m_lock); + std::lock_guard lock(m_mutex); if (buf_count >= size) return false; sys_event_data& ref = data[(buf_pos + buf_count++) % size]; @@ -108,7 +108,7 @@ public: bool pop(sys_event_data& ref) { - SMutexLocker lock(m_lock); + std::lock_guard lock(m_mutex); if (!buf_count) return false; sys_event_data& from = data[buf_pos]; @@ -124,7 +124,7 @@ public: u32 pop_all(sys_event_data* ptr, u32 max) { - SMutexLocker lock(m_lock); + std::lock_guard lock(m_mutex); u32 res = 0; while (buf_count && max) @@ -152,16 +152,16 @@ public: class EventPortList { std::vector data; - SMutex m_lock; + std::mutex m_mutex; public: void clear() { - SMutexLocker lock(m_lock); + std::lock_guard lock(m_mutex); for (u32 i = 0; i < data.size(); i++) { - SMutexLocker lock2(data[i]->mutex); + std::lock_guard lock2(data[i]->m_mutex); data[i]->eq = nullptr; // force all ports to disconnect } data.clear(); @@ -169,13 +169,13 @@ public: void add(EventPort* port) { - SMutexLocker lock(m_lock); + std::lock_guard lock(m_mutex); data.push_back(port); } void remove(EventPort* port) { - SMutexLocker lock(m_lock); + std::lock_guard lock(m_mutex); for (u32 i = 0; i < data.size(); i++) { if (data[i] == port) @@ -215,7 +215,7 @@ struct EventQueue class EventManager { - SMutex m_lock; + std::mutex m_lock; std::unordered_map key_map; public: diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 5f751eda79..4e8b8bd3ab 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -267,6 +267,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 7534b4b0b8..a5db320871 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1039,5 +1039,8 @@ Emu\Io\XInput + + Emu\SysCalls + \ No newline at end of file From fda97f25a0228d2a449202d83fadba6c1610c8ab Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 21 Jun 2014 02:25:32 +0800 Subject: [PATCH 052/499] Downscale small bug fix --- rpcs3/Emu/GS/RSXThread.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 7b928ae8ef..5c76ab3792 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1265,8 +1265,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_width = re(buffers[m_gcm_current_buffer].width); m_height = re(buffers[m_gcm_current_buffer].height); - if (Ini.GSDownscale.GetValue()) + if (Ini.GSDownscale.GetValue() && Ini.GSResolution.GetValue() == 4) { + // Disable write color/depth buffer during downscaling as it is not yet scaled propertly + Ini.GSDumpColorBuffers.SetValue(false); + Ini.GSDumpDepthBuffer.SetValue(false); + if (m_width == 1280 && m_height == 720) { // Set scale ratio for 720p From 7fca980887644b3776f98a1b8d17ae13e6a1558a Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 20 Jun 2014 23:54:04 +0400 Subject: [PATCH 053/499] sys_ppu_thread_create threadname workaround --- rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp index 9e31b63c62..94b9f9f969 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp @@ -147,10 +147,21 @@ int sys_ppu_thread_restart(u32 thread_id) int sys_ppu_thread_create(u32 thread_id_addr, u32 entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr) { - sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", - thread_id_addr, entry, arg, prio, stacksize, flags, threadname_addr, Memory.ReadString(threadname_addr).c_str()); + std::string threadname = ""; + if (Memory.IsGoodAddr(threadname_addr)) + { + threadname = Memory.ReadString(threadname_addr); + sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", + thread_id_addr, entry, arg, prio, stacksize, flags, threadname_addr, threadname.c_str()); + } + else + { + sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x)", + thread_id_addr, entry, arg, prio, stacksize, flags, threadname_addr); + if (threadname_addr != 0) return CELL_EFAULT; + } - if(!Memory.IsGoodAddr(entry) || !Memory.IsGoodAddr(thread_id_addr) || !Memory.IsGoodAddr(threadname_addr)) + if(!Memory.IsGoodAddr(entry) || !Memory.IsGoodAddr(thread_id_addr)) { return CELL_EFAULT; } @@ -163,7 +174,7 @@ int sys_ppu_thread_create(u32 thread_id_addr, u32 entry, u64 arg, int prio, u32 new_thread.SetPrio(prio); new_thread.SetStackSize(stacksize); //new_thread.flags = flags; - new_thread.SetName(Memory.ReadString(threadname_addr)); + new_thread.SetName(threadname); ConLog.Write("*** New PPU Thread [%s] (): id = %d", new_thread.GetName().c_str(), new_thread.GetId()); From 1c4ae999d63cac8cfbcf1a93fbc267d696b9f231 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 20 Jun 2014 23:56:19 +0400 Subject: [PATCH 054/499] SSemaphore basic implementation Set for RSX --- Utilities/SSemaphore.cpp | 75 +++++++++++++++++++++++++++++++++++ Utilities/SSemaphore.h | 34 ++++++++++++++++ Utilities/Thread.h | 11 +---- rpcs3/Emu/GS/GSRender.h | 8 ++-- rpcs3/Emu/GS/RSXThread.cpp | 4 +- rpcs3/Emu/GS/RSXThread.h | 5 ++- rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 +++ 8 files changed, 127 insertions(+), 18 deletions(-) create mode 100644 Utilities/SSemaphore.cpp create mode 100644 Utilities/SSemaphore.h diff --git a/Utilities/SSemaphore.cpp b/Utilities/SSemaphore.cpp new file mode 100644 index 0000000000..91754b764f --- /dev/null +++ b/Utilities/SSemaphore.cpp @@ -0,0 +1,75 @@ +#include "stdafx.h" +#include "Utilities/SSemaphore.h" + +bool SSemaphore::wait(u64 timeout) +{ + std::unique_lock lock(m_cv_mutex); + + u64 counter = 0; + while (true) + { + if (Emu.IsStopped()) + { + return false; + } + if (timeout && counter >= timeout) + { + return false; + } + m_cond.wait_for(lock, std::chrono::milliseconds(1)); + counter++; + + std::lock_guard lock(m_mutex); + if (m_count) + { + m_count--; + return true; + } + } +} + +bool SSemaphore::try_wait() +{ + std::lock_guard lock(m_mutex); + + if (m_count) + { + m_count--; + return true; + } + else + { + return false; + } +} + +void SSemaphore::post(u32 value) +{ + std::lock_guard lock(m_mutex); + + if (m_count >= m_max) + { + value = 0; + } + else if (value > (m_max - m_count)) + { + value = m_max - m_count; + } + + while (value) + { + m_count++; + value--; + m_cond.notify_one(); + } +} + +bool SSemaphore::post_and_wait() +{ + if (try_wait()) return false; + + post(); + wait(); + + return true; +} \ No newline at end of file diff --git a/Utilities/SSemaphore.h b/Utilities/SSemaphore.h new file mode 100644 index 0000000000..af46997bbf --- /dev/null +++ b/Utilities/SSemaphore.h @@ -0,0 +1,34 @@ +#pragma once + +class SSemaphore +{ + const u32 m_max; + u32 m_count; + std::mutex m_mutex, m_cv_mutex; + std::condition_variable m_cond; + +public: + SSemaphore(u32 value, u32 max = 1) + : m_max(max > 0 ? max : 0xffffffff) + , m_count(value > m_max ? m_max : value) + { + } + + SSemaphore() + : m_max(0xffffffff) + , m_count(0) + { + } + + ~SSemaphore() + { + } + + bool wait(u64 timeout = 0); + + bool try_wait(); + + void post(u32 value = 1); + + bool post_and_wait(); +}; \ No newline at end of file diff --git a/Utilities/Thread.h b/Utilities/Thread.h index 7a4065015b..4485227e2d 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -6,6 +6,7 @@ #include #include #include +#include class ThreadExec; @@ -138,16 +139,6 @@ public: bool IsBusy() const { return m_busy; } }; -static __forceinline bool SemaphorePostAndWait(rSemaphore& sem) -{ - if(sem.TryWait() != rSEMA_BUSY) return false; - - sem.Post(); - sem.Wait(); - - return true; -} - /* class StepThread : public ThreadBase { diff --git a/rpcs3/Emu/GS/GSRender.h b/rpcs3/Emu/GS/GSRender.h index 5f55543327..556c889606 100644 --- a/rpcs3/Emu/GS/GSRender.h +++ b/rpcs3/Emu/GS/GSRender.h @@ -32,8 +32,8 @@ public: switch(m_type) { case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.Enter(); break; - case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.Wait(); break; - case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.Wait(); break; + case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.wait(); break; + case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.wait(); break; } } @@ -42,8 +42,8 @@ public: switch(m_type) { case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.Leave(); break; - case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.Post(); break; - case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.Post(); break; + case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.post(); break; + case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.post(); break; } } }; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 5c76ab3792..8f5b9f2d1a 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1891,9 +1891,9 @@ void RSXThread::Task() if(put == get) { if(m_flip_status == 0) - SemaphorePostAndWait(m_sem_flip); + m_sem_flip.post_and_wait(); - SemaphorePostAndWait(m_sem_flush); + m_sem_flush.post_and_wait(); } Sleep(1); diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 2a5020c12e..96166d4c0f 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -7,6 +7,7 @@ #include #include // For tracking a list of used gcm commands +#include "Utilities/SSemaphore.h" enum Method { @@ -146,8 +147,8 @@ public: public: rCriticalSection m_cs_main; - rSemaphore m_sem_flush; - rSemaphore m_sem_flip; + SSemaphore m_sem_flush; + SSemaphore m_sem_flip; Callback m_flip_handler; public: diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 4e8b8bd3ab..25be8d5571 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -28,6 +28,7 @@ + @@ -220,6 +221,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index a5db320871..4f530fafa5 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -575,6 +575,9 @@ Emu\Io\XInput + + Utilities + @@ -1042,5 +1045,8 @@ Emu\SysCalls + + Utilities + \ No newline at end of file From e79236a97f6964cfb40990ee3ccb372825ddf5a9 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 20 Jun 2014 23:57:28 +0400 Subject: [PATCH 055/499] SQueue little improvement --- Utilities/SQueue.h | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/Utilities/SQueue.h b/Utilities/SQueue.h index c6e4f7c01a..4e3b317a9d 100644 --- a/Utilities/SQueue.h +++ b/Utilities/SQueue.h @@ -4,6 +4,8 @@ template class SQueue { std::mutex m_mutex; + NamedThreadBase* push_waiter; + NamedThreadBase* pop_waiter; u32 m_pos; u32 m_count; T m_data[SQSize]; @@ -12,6 +14,8 @@ public: SQueue() : m_pos(0) , m_count(0) + , push_waiter(nullptr) + , pop_waiter(nullptr) { } @@ -22,6 +26,9 @@ public: bool Push(const T& data) { + NamedThreadBase* t = GetCurrentNamedThread(); + push_waiter = t; + while (true) { if (m_count >= SQSize) @@ -30,7 +37,8 @@ public: { return false; } - Sleep(1); + + SM_Sleep(); continue; } @@ -38,9 +46,11 @@ public: std::lock_guard lock(m_mutex); if (m_count >= SQSize) continue; + if (pop_waiter && !m_count) pop_waiter->Notify(); m_data[(m_pos + m_count++) % SQSize] = data; + push_waiter = nullptr; return true; } } @@ -48,6 +58,9 @@ public: bool Pop(T& data) { + NamedThreadBase* t = GetCurrentNamedThread(); + pop_waiter = t; + while (true) { if (!m_count) @@ -56,7 +69,8 @@ public: { return false; } - Sleep(1); + + SM_Sleep(); continue; } @@ -64,22 +78,24 @@ public: std::lock_guard lock(m_mutex); if (!m_count) continue; + if (push_waiter && m_count >= SQSize) push_waiter->Notify(); data = m_data[m_pos]; m_pos = (m_pos + 1) % SQSize; m_count--; + pop_waiter = nullptr; return true; } } } - volatile u32 GetCount() // may be not safe + volatile u32 GetCount() // may be thread unsafe { return m_count; } - volatile bool IsEmpty() // may be not safe + volatile bool IsEmpty() // may be thread unsafe { return !m_count; } @@ -87,11 +103,15 @@ public: void Clear() { std::lock_guard lock(m_mutex); + if (push_waiter && m_count >= SQSize) push_waiter->Notify(); m_count = 0; } T& Peek(u32 pos = 0) { + NamedThreadBase* t = GetCurrentNamedThread(); + pop_waiter = t; + while (true) { if (!m_count) @@ -100,13 +120,18 @@ public: { break; } - Sleep(1); + + SM_Sleep(); continue; } { std::lock_guard lock(m_mutex); - if (m_count) break; + if (m_count) + { + pop_waiter = nullptr; + break; + } } } return m_data[(m_pos + pos) % SQSize]; From 12f217aba997dab447c0247b1716d3197ee0eb41 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 21 Jun 2014 06:57:23 +0800 Subject: [PATCH 056/499] RSX: matrix offset fix and use original buffer width for writing color/depth --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 16 ++++++++-------- rpcs3/Emu/GS/RSXThread.cpp | 8 ++------ rpcs3/Emu/GS/RSXThread.h | 2 ++ 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index a19194566d..8ef82ae519 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -289,12 +289,12 @@ void GLGSRender::InitVertexData() // Scale scaleOffsetMat[0] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4 * 0)] / (RSXThread::m_width / RSXThread::m_width_scale); scaleOffsetMat[5] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4 * 1)] / (RSXThread::m_height / RSXThread::m_height_scale); - scaleOffsetMat[10] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4*2)]; + scaleOffsetMat[10] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_SCALE + (0x4 * 2)]; // Offset scaleOffsetMat[3] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4 * 0)] - (RSXThread::m_width / RSXThread::m_width_scale); scaleOffsetMat[7] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4 * 1)] - (RSXThread::m_height / RSXThread::m_height_scale); - scaleOffsetMat[11] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4 * 2)]; + scaleOffsetMat[11] = (GLfloat&)methodRegisters[NV4097_SET_VIEWPORT_OFFSET + (0x4 * 2)] - 1 / 2.0f; scaleOffsetMat[3] /= RSXThread::m_width / RSXThread::m_width_scale; scaleOffsetMat[7] /= RSXThread::m_height / RSXThread::m_height_scale; @@ -452,11 +452,11 @@ void GLGSRender::WriteDepthBuffer() return; } - glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, &Memory[address]); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, &Memory[address]); checkForGlError("glReadPixels"); glBindTexture(GL_TEXTURE_2D, g_depth_tex); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, RSXThread::m_width, RSXThread::m_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &Memory[address]); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, RSXThread::m_buffer_width, RSXThread::m_buffer_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &Memory[address]); checkForGlError("glTexImage2D"); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); checkForGlError("glGetTexImage"); @@ -481,7 +481,7 @@ void GLGSRender::WriteColourBufferA() glReadBuffer(GL_COLOR_ATTACHMENT0); checkForGlError("glReadBuffer(GL_COLOR_ATTACHMENT0)"); - glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); checkForGlError("glReadPixels(GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)"); } @@ -504,7 +504,7 @@ void GLGSRender::WriteColourBufferB() glReadBuffer(GL_COLOR_ATTACHMENT1); checkForGlError("glReadBuffer(GL_COLOR_ATTACHMENT1)"); - glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); checkForGlError("glReadPixels(GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)"); } @@ -527,7 +527,7 @@ void GLGSRender::WriteColourBufferC() glReadBuffer(GL_COLOR_ATTACHMENT2); checkForGlError("glReadBuffer(GL_COLOR_ATTACHMENT2)"); - glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); checkForGlError("glReadPixels(GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)"); } @@ -550,7 +550,7 @@ void GLGSRender::WriteColourBufferD() glReadBuffer(GL_COLOR_ATTACHMENT3); checkForGlError("glReadBuffer(GL_COLOR_ATTACHMENT3)"); - glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); checkForGlError("glReadPixels(GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)"); } diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 8f5b9f2d1a..4bd4330d7b 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1267,10 +1267,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 if (Ini.GSDownscale.GetValue() && Ini.GSResolution.GetValue() == 4) { - // Disable write color/depth buffer during downscaling as it is not yet scaled propertly - Ini.GSDumpColorBuffers.SetValue(false); - Ini.GSDumpDepthBuffer.SetValue(false); - if (m_width == 1280 && m_height == 720) { // Set scale ratio for 720p @@ -1867,7 +1863,7 @@ void RSXThread::End() void RSXThread::Task() { u8 inc; - ConLog.Write("RSX thread entry"); + ConLog.Write("RSX thread enter"); OnInitThread(); @@ -1957,7 +1953,7 @@ void RSXThread::Task() //memset(Memory.GetMemFromAddr(p.m_ioAddress + get), 0, (count + 1) * 4); } - ConLog.Write("RSX thread exit..."); + ConLog.Write("RSX thread exit"); OnExitThread(); } diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 96166d4c0f..310011e044 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -140,6 +140,8 @@ public: u32 m_width; u32 m_height; + u32 m_buffer_width; + u32 m_buffer_height; float m_width_scale; float m_height_scale; u32 m_draw_array_count; From c3960b7f4392dc785c7ec8641b83cfa956f2fd80 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 21 Jun 2014 12:29:17 +0800 Subject: [PATCH 057/499] Misc thread started/ended/aborted aligment --- rpcs3/Emu/GS/RSXThread.cpp | 4 ++-- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 22 +++++++++++----------- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 16 ++++++++-------- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 8 ++++---- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 16 ++++++++-------- 5 files changed, 33 insertions(+), 33 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 4bd4330d7b..a3768f4c2d 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1863,7 +1863,7 @@ void RSXThread::End() void RSXThread::Task() { u8 inc; - ConLog.Write("RSX thread enter"); + ConLog.Write("RSX thread started"); OnInitThread(); @@ -1953,7 +1953,7 @@ void RSXThread::Task() //memset(Memory.GetMemFromAddr(p.m_ioAddress + get), 0, (count + 1) * 4); } - ConLog.Write("RSX thread exit"); + ConLog.Write("RSX thread ended"); OnExitThread(); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index d4ef62518b..f15d9e1792 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -36,7 +36,7 @@ next: { if (Emu.IsStopped()) { - ConLog.Warning("adecRawRead() aborted"); + ConLog.Warning("adecRawRead(): aborted"); return 0; } Sleep(1); @@ -53,7 +53,7 @@ next: { if (!Memory.CopyToReal(buf, adec.reader.addr, adec.reader.size)) { - ConLog.Error("adecRawRead: data reading failed (reader.size=0x%x)", adec.reader.size); + ConLog.Error("adecRawRead(): data reading failed (reader.size=0x%x)", adec.reader.size); Emu.Pause(); return 0; } @@ -89,7 +89,7 @@ next: } else if (!Memory.CopyToReal(buf, adec.reader.addr, buf_size)) { - ConLog.Error("adecRawRead: data reading failed (buf_size=0x%x)", buf_size); + ConLog.Error("adecRawRead(): data reading failed (buf_size=0x%x)", buf_size); Emu.Pause(); return 0; } @@ -111,7 +111,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) { if (buf_size < (int)adec.reader.rem_size) { - ConLog.Error("adecRead: too small buf_size (rem_size = %d, buf_size = %d)", adec.reader.rem_size, buf_size); + ConLog.Error("adecRead(): too small buf_size (rem_size = %d, buf_size = %d)", adec.reader.rem_size, buf_size); Emu.Pause(); return 0; } @@ -131,7 +131,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) if (adecRawRead(opaque, header, 8) < 8) break; if (header[0] != 0x0f || header[1] != 0xd0) { - ConLog.Error("adecRead: 0x0FD0 header not found"); + ConLog.Error("adecRead(): 0x0FD0 header not found"); Emu.Pause(); return -1; } @@ -141,7 +141,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) OMAHeader oma(1 /* atrac3p id */, header[2], header[3]); if (buf_size < sizeof(oma) + 8) { - ConLog.Error("adecRead: OMAHeader writing failed"); + ConLog.Error("adecRead(): OMAHeader writing failed"); Emu.Pause(); return 0; } @@ -198,7 +198,7 @@ u32 adecOpen(AudioDecoder* data) thread t("Audio Decoder[" + std::to_string(adec_id) + "] Thread", [&]() { - ConLog.Write("Audio Decoder enter()"); + ConLog.Write("Audio Decoder thread started"); AdecTask& task = adec.task; @@ -371,7 +371,7 @@ u32 adecOpen(AudioDecoder* data) { if (Emu.IsStopped()) { - ConLog.Warning("adecDecodeAu aborted"); + ConLog.Warning("adecDecodeAu: aborted"); return; } @@ -497,16 +497,16 @@ u32 adecOpen(AudioDecoder* data) case adecClose: { adec.is_finished = true; - ConLog.Write("Audio Decoder exit"); + ConLog.Write("Audio Decoder thread ended"); return; } default: - ConLog.Error("Audio Decoder error: unknown task(%d)", task.type); + ConLog.Error("Audio Decoder thread error: unknown task(%d)", task.type); } } adec.is_finished = true; - ConLog.Warning("Audio Decoder aborted"); + ConLog.Warning("Audio Decoder thread aborted"); }); t.detach(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index ca4d8072f0..4538f042a0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -50,11 +50,11 @@ int cellAudioInit() if (do_dump && !m_dump.Init()) { - ConLog.Error("Audio aborted: AudioDumper::Init() failed"); + ConLog.Error("cellAudioInit(): AudioDumper::Init() failed"); return; } - ConLog.Write("Audio started"); + ConLog.Write("Audio thread started"); if (Ini.AudioDumpToFile.GetValue()) m_dump.WriteHeader(); @@ -146,7 +146,7 @@ int cellAudioInit() { if (Emu.IsStopped()) { - ConLog.Warning("Audio aborted"); + ConLog.Warning("Audio thread aborted"); goto abort; } @@ -426,7 +426,7 @@ int cellAudioInit() { if (m_dump.WriteData(&buf8ch, sizeof(buf8ch)) != sizeof(buf8ch)) // write file data { - ConLog.Error("Audio aborted: AudioDumper::WriteData() failed"); + ConLog.Error("cellAudioInit(): AudioDumper::WriteData() failed"); goto abort; } } @@ -434,13 +434,13 @@ int cellAudioInit() { if (m_dump.WriteData(&buf2ch, sizeof(buf2ch)) != sizeof(buf2ch)) // write file data { - ConLog.Error("Audio aborted: AudioDumper::WriteData() failed"); + ConLog.Error("cellAudioInit(): AudioDumper::WriteData() failed"); goto abort; } } else { - ConLog.Error("Audio aborted: unknown AudioDumper::GetCh() value (%d)", m_dump.GetCh()); + ConLog.Error("cellAudioInit(): unknown AudioDumper::GetCh() value (%d)", m_dump.GetCh()); goto abort; } } @@ -448,7 +448,7 @@ int cellAudioInit() //ConLog.Write("Audio perf: start=%d (access=%d, AddData=%d, events=%d, dump=%d)", //stamp0 - m_config.start_time, stamp1 - stamp0, stamp2 - stamp1, stamp3 - stamp2, get_system_time() - stamp3); } - ConLog.Write("Audio finished"); + ConLog.Write("Audio thread ended"); abort: queue.Push(nullptr); queue_float.Push(nullptr); @@ -505,7 +505,7 @@ int cellAudioQuit() Sleep(1); if (Emu.IsStopped()) { - ConLog.Warning("cellAudioQuit() aborted"); + ConLog.Warning("cellAudioQuit(): aborted"); return CELL_OK; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 0abaed44aa..ccada21244 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -47,7 +47,7 @@ u32 dmuxOpen(Demuxer* data) thread t("Demuxer[" + std::to_string(dmux_id) + "] Thread", [&]() { - ConLog.Write("Demuxer enter (mem=0x%x, size=0x%x, cb=0x%x, arg=0x%x)", dmux.memAddr, dmux.memSize, dmux.cbFunc, dmux.cbArg); + ConLog.Write("Demuxer thread started (mem=0x%x, size=0x%x, cb=0x%x, arg=0x%x)", dmux.memAddr, dmux.memSize, dmux.cbFunc, dmux.cbArg); DemuxerTask task; DemuxerStream stream; @@ -357,7 +357,7 @@ u32 dmuxOpen(Demuxer* data) case dmuxClose: { dmux.is_finished = true; - ConLog.Write("Demuxer exit"); + ConLog.Write("Demuxer thread ended"); return; } @@ -450,11 +450,11 @@ u32 dmuxOpen(Demuxer* data) break; default: - ConLog.Error("Demuxer error: unknown task(%d)", task.type); + ConLog.Error("Demuxer thread error: unknown task(%d)", task.type); return; } } - ConLog.Warning("Demuxer aborted"); + ConLog.Warning("Demuxer thread aborted"); }); t.detach(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 69a6256de3..be6d1f6e96 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -35,7 +35,7 @@ next: { if (Emu.IsStopped()) { - ConLog.Warning("vdecRead() aborted"); + ConLog.Warning("vdecRead(): aborted"); return 0; } Sleep(1); @@ -52,7 +52,7 @@ next: { if (!Memory.CopyToReal(buf, vdec.reader.addr, vdec.reader.size)) { - ConLog.Error("vdecRead: data reading failed (reader.size=0x%x)", vdec.reader.size); + ConLog.Error("vdecRead(): data reading failed (reader.size=0x%x)", vdec.reader.size); Emu.Pause(); return 0; } @@ -92,7 +92,7 @@ next: } else if (!Memory.CopyToReal(buf, vdec.reader.addr, buf_size)) { - ConLog.Error("vdecRead: data reading failed (buf_size=0x%x)", buf_size); + ConLog.Error("vdecRead(): data reading failed (buf_size=0x%x)", buf_size); Emu.Pause(); return 0; } @@ -136,7 +136,7 @@ u32 vdecOpen(VideoDecoder* data) thread t("Video Decoder[" + std::to_string(vdec_id) + "] Thread", [&]() { - ConLog.Write("Video Decoder enter()"); + ConLog.Write("Video Decoder thread started"); VdecTask& task = vdec.task; @@ -305,7 +305,7 @@ u32 vdecOpen(VideoDecoder* data) { if (Emu.IsStopped()) { - ConLog.Warning("vdecDecodeAu aborted"); + ConLog.Warning("vdecDecodeAu: aborted"); return; } @@ -398,7 +398,7 @@ u32 vdecOpen(VideoDecoder* data) case vdecClose: { vdec.is_finished = true; - ConLog.Write("Video Decoder exit"); + ConLog.Write("Video Decoder thread ended"); return; } @@ -409,12 +409,12 @@ u32 vdecOpen(VideoDecoder* data) break; default: - ConLog.Error("Video Decoder error: unknown task(%d)", task.type); + ConLog.Error("Video Decoder thread error: unknown task(%d)", task.type); } } vdec.is_finished = true; - ConLog.Warning("Video Decoder aborted"); + ConLog.Warning("Video Decoder thread aborted"); }); t.detach(); From 4e55e6abbd331ad61d9cd24896fcf1ad2f031a1b Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 21 Jun 2014 18:04:59 +0800 Subject: [PATCH 058/499] Set rendering width/height to buffer width/height --- rpcs3/Emu/GS/RSXThread.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index a3768f4c2d..7e4c1bfa2a 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1262,9 +1262,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(m_gcm_buffers_addr); - m_width = re(buffers[m_gcm_current_buffer].width); - m_height = re(buffers[m_gcm_current_buffer].height); + m_buffer_width = re(buffers[m_gcm_current_buffer].width); + m_buffer_height = re(buffers[m_gcm_current_buffer].height); + m_width = m_buffer_width; + m_height = m_buffer_height; + if (Ini.GSDownscale.GetValue() && Ini.GSResolution.GetValue() == 4) { if (m_width == 1280 && m_height == 720) From 5da33c62430026e5d5885e957dbed111d13c41fa Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 21 Jun 2014 18:24:27 +0400 Subject: [PATCH 059/499] SC_Semaphore rewritten --- rpcs3/Emu/CPU/CPUThreadManager.cpp | 16 ++ rpcs3/Emu/CPU/CPUThreadManager.h | 1 + rpcs3/Emu/SysCalls/SysCalls.h | 13 +- rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp | 7 + rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.h | 1 + rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp | 277 ++++++++++++++++-------- rpcs3/Emu/SysCalls/lv2/SC_Semaphore.h | 36 +++ rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 + 9 files changed, 254 insertions(+), 101 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Semaphore.h diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index 353d44b7b9..b99573e6a6 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -108,6 +108,22 @@ CPUThread* CPUThreadManager::GetThread(u32 id) return res; } +void CPUThreadManager::NotifyThread(const u32 id) +{ + if (!id) return; + + std::lock_guard lock(m_mtx_thread); + + for (u32 i = 0; i < m_threads.size(); i++) + { + if (m_threads[i]->GetId() == id) + { + m_threads[i]->Notify(); + return; + } + } +} + void CPUThreadManager::Exec() { std::lock_guard lock(m_mtx_thread); diff --git a/rpcs3/Emu/CPU/CPUThreadManager.h b/rpcs3/Emu/CPU/CPUThreadManager.h index f4b307a82a..f40a9e936d 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.h +++ b/rpcs3/Emu/CPU/CPUThreadManager.h @@ -17,6 +17,7 @@ public: CPUThread& AddThread(CPUThreadType type); void RemoveThread(const u32 id); + void NotifyThread(const u32 id); std::vector& GetThreads() { return m_threads; } s32 GetThreadNumById(CPUThreadType type, u32 id); diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 57dc717219..bb438c33f2 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -11,6 +11,7 @@ #include "lv2/SC_Event_flag.h" #include "lv2/SC_Condition.h" #include "lv2/SC_Spinlock.h" +#include "lv2/SC_Semaphore.h" #include "Emu/event.h" #include "Static.h" //#define SYSCALLS_DEBUG @@ -144,12 +145,12 @@ extern int sys_event_flag_cancel(u32 eflag_id, mem32_t num); extern int sys_event_flag_get(u32 eflag_id, mem64_t flags); //sys_semaphore -extern int sys_semaphore_create(u32 sem_addr, u32 attr_addr, int initial_val, int max_val); -extern int sys_semaphore_destroy(u32 sem); -extern int sys_semaphore_wait(u32 sem, u64 timeout); -extern int sys_semaphore_trywait(u32 sem); -extern int sys_semaphore_post(u32 sem, int count); -extern int sys_semaphore_get_value(u32 sem, u32 count_addr); +extern int sys_semaphore_create(mem32_t sem, mem_ptr_t attr, int initial_count, int max_count); +extern int sys_semaphore_destroy(u32 sem_id); +extern int sys_semaphore_wait(u32 sem_id, u64 timeout); +extern int sys_semaphore_trywait(u32 sem_id); +extern int sys_semaphore_post(u32 sem_id, int count); +extern int sys_semaphore_get_value(u32 sem_id, mem32_t count); //sys_lwcond extern int sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t lwmutex, mem_ptr_t attr); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp index 20a5f64f54..4461ce9dfe 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp @@ -190,6 +190,13 @@ bool SleepQueue::invalidate(u32 tid) return false; } +u32 SleepQueue::count() +{ + std::lock_guard lock(m_mutex); + + return list.size(); +} + bool SleepQueue::finalize() { if (!m_mutex.try_lock()) return false; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.h b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.h index 1239593bee..ed24e07047 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.h +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.h @@ -60,6 +60,7 @@ struct SleepQueue u32 pop_prio(); // SYS_SYNC_PRIORITY u32 pop_prio_inherit(); // (TODO) bool invalidate(u32 tid); + u32 count(); bool finalize(); }; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp index 174dfd839a..2ef88daefd 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp @@ -3,116 +3,203 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "SC_Semaphore.h" SysCallBase sys_sem("sys_semaphore"); -struct semaphore_attr -{ - u32 protocol; - u32 pshared; - u64 ipc_key; - int flags; - u32 pad; - char name[8]; -}; - -struct semaphore -{ - rSemaphore sem; - semaphore_attr attr; - int sem_count; - - semaphore(int initial_count, int max_count, semaphore_attr attr) - : sem(initial_count, max_count) - , attr(attr) - { - } -}; - -int sys_semaphore_create(u32 sem_addr, u32 attr_addr, int initial_count, int max_count) +int sys_semaphore_create(mem32_t sem, mem_ptr_t attr, int initial_count, int max_count) { sys_sem.Warning("sys_semaphore_create(sem_addr=0x%x, attr_addr=0x%x, initial_count=%d, max_count=%d)", - sem_addr, attr_addr, initial_count, max_count); + sem.GetAddr(), attr.GetAddr(), initial_count, max_count); - if(!Memory.IsGoodAddr(sem_addr) || !Memory.IsGoodAddr(attr_addr)) return CELL_EFAULT; - - semaphore_attr attr = (semaphore_attr&)Memory[attr_addr]; - attr.protocol = re(attr.protocol); - attr.pshared = re(attr.pshared); - attr.ipc_key = re(attr.ipc_key); - attr.flags = re(attr.flags); - - sys_sem.Log("*** protocol = %d", attr.protocol); - sys_sem.Log("*** pshared = %d", attr.pshared); - sys_sem.Log("*** ipc_key = 0x%llx", attr.ipc_key); - sys_sem.Log("*** flags = 0x%x", attr.flags); - sys_sem.Log("*** name = %s", attr.name); - - Memory.Write32(sem_addr, sys_sem.GetNewId(new semaphore(initial_count, max_count, attr))); - - return CELL_OK; -} - -int sys_semaphore_destroy(u32 sem) -{ - sys_sem.Log("sys_semaphore_destroy(sem=%d)", sem); - - if(!sys_sem.CheckId(sem)) return CELL_ESRCH; - - Emu.GetIdManager().RemoveID(sem); - return CELL_OK; -} - -int sys_semaphore_wait(u32 sem, u64 timeout) -{ - sys_sem.Log("sys_semaphore_wait(sem=0x%x, timeout=0x%llx)", sem, timeout); - - semaphore* sem_data = nullptr; - if(!sys_sem.CheckId(sem, sem_data)) return CELL_ESRCH; - - sem_data->sem_count = 0; // Reset internal counter for sys_semaphore_get_value. - sem_data->sem.WaitTimeout(timeout ? timeout : INFINITE); - - return CELL_OK; -} - -int sys_semaphore_trywait(u32 sem) -{ - sys_sem.Log("sys_semaphore_trywait(sem=%d)", sem); - - semaphore* sem_data = nullptr; - if(!sys_sem.CheckId(sem, sem_data)) return CELL_ESRCH; - - sem_data->sem_count = 0; // Reset internal counter for sys_semaphore_get_value. - if(sem_data->sem.TryWait()) return 1; - - return CELL_OK; -} - -int sys_semaphore_post(u32 sem, int count) -{ - sys_sem.Log("sys_semaphore_post(sem=%d, count=%d)", sem, count); - - semaphore* sem_data = nullptr; - if(!sys_sem.CheckId(sem, sem_data)) return CELL_ESRCH; - - while(count--) + if (!sem.IsGood() || !attr.IsGood()) { - sem_data->sem_count++; // Increment internal counter for sys_semaphore_get_value. - sem_data->sem.Post(); + return CELL_EFAULT; + } + + if (max_count <= 0) + { + return CELL_EINVAL; + } + + if (attr->pshared.ToBE() != se32(0x200)) + { + sys_sem.Error("Invalid pshared attribute(0x%x)", (u32)attr->pshared); + return CELL_EINVAL; + } + + switch (attr->protocol.ToBE()) + { + case se32(SYS_SYNC_FIFO): break; + case se32(SYS_SYNC_PRIORITY): break; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_sem.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT protocol"); break; + case se32(SYS_SYNC_RETRY): sys_sem.Error("Invalid SYS_SYNC_RETRY protocol"); return CELL_EINVAL; + default: sys_sem.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; + } + + sem = sys_sem.GetNewId(new Semaphore(initial_count, max_count, attr->protocol, attr->name_u64)); + ConLog.Write("*** semaphore created [%s] (protocol=0x%x): id = %d", + std::string(attr->name, 8).c_str(), (u32)attr->protocol, sem.GetValue()); + + return CELL_OK; +} + +int sys_semaphore_destroy(u32 sem_id) +{ + sys_sem.Warning("sys_semaphore_destroy(sem_id=%d)", sem_id); + + Semaphore* sem; + if (!Emu.GetIdManager().GetIDData(sem_id, sem)) + { + return CELL_ESRCH; + } + + if (!sem->m_queue.finalize()) + { + return CELL_EBUSY; + } + + Emu.GetIdManager().RemoveID(sem_id); + return CELL_OK; +} + +int sys_semaphore_wait(u32 sem_id, u64 timeout) +{ + sys_sem.Log("sys_semaphore_wait(sem_id=%d, timeout=%lld)", sem_id, timeout); + + Semaphore* sem; + if (!Emu.GetIdManager().GetIDData(sem_id, sem)) + { + return CELL_ESRCH; + } + + const u32 tid = GetCurrentPPUThread().GetId(); + const u64 start_time = get_system_time(); + + { + std::lock_guard lock(sem->m_mutex); + if (sem->m_value > 0) + { + sem->m_value--; + return CELL_OK; + } + sem->m_queue.push(tid); + } + + while (true) + { + if (Emu.IsStopped()) + { + ConLog.Warning("sys_semaphore_wait(%d) aborted", sem_id); + return CELL_OK; + } + + if (timeout && get_system_time() - start_time > timeout) + { + return CELL_ETIMEDOUT; + } + + if (tid == sem->signal) + { + std::lock_guard lock(sem->m_mutex); + + sem->signal = 0; + // TODO: notify signaler + return CELL_OK; + } + + SM_Sleep(); + } +} + +int sys_semaphore_trywait(u32 sem_id) +{ + sys_sem.Log("sys_semaphore_trywait(sem_id=%d)", sem_id); + + Semaphore* sem; + if (!Emu.GetIdManager().GetIDData(sem_id, sem)) + { + return CELL_ESRCH; + } + + std::lock_guard lock(sem->m_mutex); + + if (sem->m_value > 0) + { + sem->m_value--; + return CELL_OK; + } + else + { + return CELL_EBUSY; + } +} + +int sys_semaphore_post(u32 sem_id, int count) +{ + sys_sem.Log("sys_semaphore_post(sem_id=%d, count=%d)", sem_id, count); + + Semaphore* sem; + if (!Emu.GetIdManager().GetIDData(sem_id, sem)) + { + return CELL_ESRCH; + } + + if (count < 0) + { + return CELL_EINVAL; + } + + if (count + sem->m_value - sem->m_queue.count() > sem->max) + { + return CELL_EINVAL; + } + + while (count > 0) + { + if (Emu.IsStopped()) + { + ConLog.Warning("sys_semaphore_post(%d) aborted", sem_id); + return CELL_OK; + } + + std::lock_guard lock(sem->m_mutex); + + if (sem->signal && sem->m_queue.count()) + { + SM_Sleep(); + continue; + } + + if (u32 target = (sem->protocol == SYS_SYNC_FIFO) ? sem->m_queue.pop() : sem->m_queue.pop_prio()) + { + count--; + sem->signal = target; + Emu.GetCPU().NotifyThread(target); + } + else + { + sem->m_value += count; + count = 0; + } } return CELL_OK; } -int sys_semaphore_get_value(u32 sem, u32 count_addr) +int sys_semaphore_get_value(u32 sem_id, mem32_t count) { - sys_sem.Log("sys_semaphore_get_value(sem=%d, count_addr=0x%x)", sem, count_addr); + sys_sem.Log("sys_semaphore_get_value(sem_id=%d, count_addr=0x%x)", sem_id, count.GetAddr()); - semaphore* sem_data = nullptr; - if(!sys_sem.CheckId(sem, sem_data)) return CELL_ESRCH; + Semaphore* sem; + if (!Emu.GetIdManager().GetIDData(sem_id, sem)) + { + return CELL_ESRCH; + } - Memory.Write32(count_addr, sem_data->sem_count); + std::lock_guard lock(sem->m_mutex); + + count = sem->m_value; return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.h b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.h new file mode 100644 index 0000000000..4531041312 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.h @@ -0,0 +1,36 @@ +#pragma once + +struct sys_semaphore_attribute +{ + be_t protocol; + be_t pshared; // undefined + be_t ipc_key; // undefined + be_t flags; // undefined + be_t pad; // not used + union + { + char name[8]; + u64 name_u64; + }; +}; + +struct Semaphore +{ + std::mutex m_mutex; + SleepQueue m_queue; + int m_value; + u32 signal; + + const int max; + const u32 protocol; + const u64 name; + + Semaphore(int initial_count, int max_count, u32 protocol, u64 name) + : m_value(initial_count) + , signal(0) + , max(max_count) + , protocol(protocol) + , name(name) + { + } +}; \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 25be8d5571..031e1039df 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -321,6 +321,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 4f530fafa5..5ddf7ac06e 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1048,5 +1048,8 @@ Utilities + + Emu\SysCalls\lv2 + \ No newline at end of file From 54cdc41ac82573a5f0311d39aee4eb72edf0f9c3 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 21 Jun 2014 18:26:37 +0400 Subject: [PATCH 060/499] Small workaround --- Utilities/SSemaphore.cpp | 17 +++++------------ Utilities/SSemaphore.h | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp | 12 ++++++++++-- rpcs3/Emu/SysCalls/lv2/SC_Condition.h | 3 +++ rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp | 24 ++++++++++++------------ 6 files changed, 32 insertions(+), 28 deletions(-) diff --git a/Utilities/SSemaphore.cpp b/Utilities/SSemaphore.cpp index 91754b764f..60c0331971 100644 --- a/Utilities/SSemaphore.cpp +++ b/Utilities/SSemaphore.cpp @@ -43,29 +43,22 @@ bool SSemaphore::try_wait() } } -void SSemaphore::post(u32 value) +void SSemaphore::post() { std::lock_guard lock(m_mutex); if (m_count >= m_max) { - value = 0; - } - else if (value > (m_max - m_count)) - { - value = m_max - m_count; + return; } - while (value) - { - m_count++; - value--; - m_cond.notify_one(); - } + m_count++; + m_cond.notify_one(); } bool SSemaphore::post_and_wait() { + // TODO: ??? if (try_wait()) return false; post(); diff --git a/Utilities/SSemaphore.h b/Utilities/SSemaphore.h index af46997bbf..4c96a9c5a3 100644 --- a/Utilities/SSemaphore.h +++ b/Utilities/SSemaphore.h @@ -28,7 +28,7 @@ public: bool try_wait(); - void post(u32 value = 1); + void post(); bool post_and_wait(); }; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp index a5b97d88f3..f759f3f1b4 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp @@ -81,6 +81,7 @@ int sys_cond_signal(u32 cond_id) { cond->signal_stamp = get_system_time(); cond->signal.lock(target); + Emu.GetCPU().NotifyThread(target); if (Emu.IsStopped()) { @@ -105,15 +106,19 @@ int sys_cond_signal_all(u32 cond_id) while (u32 target = (mutex->protocol == SYS_SYNC_PRIORITY ? cond->m_queue.pop_prio() : cond->m_queue.pop())) { + cond->signaler = GetCurrentCPUThread()->GetId(); cond->signal_stamp = get_system_time(); cond->signal.lock(target); + Emu.GetCPU().NotifyThread(target); if (Emu.IsStopped()) { ConLog.Warning("sys_cond_signal_all(id=%d) aborted", cond_id); + break; } } + cond->signaler = 0; return CELL_OK; } @@ -143,6 +148,7 @@ int sys_cond_signal_to(u32 cond_id, u32 thread_id) { cond->signal_stamp = get_system_time(); cond->signal.lock(target); + Emu.GetCPU().NotifyThread(target); } if (Emu.IsStopped()) @@ -188,6 +194,7 @@ int sys_cond_wait(u32 cond_id, u64 timeout) { if (cond->signal.unlock(tid, tid) == SMR_OK) { + const u64 stamp2 = get_system_time(); if (SMutexResult res = mutex->m_mutex.trylock(tid)) { if (res != SMR_FAILED) @@ -209,11 +216,12 @@ int sys_cond_wait(u32 cond_id, u64 timeout) mutex->recursive = 1; const volatile u64 stamp = cond->signal_stamp; cond->signal.unlock(tid); - //ConLog.Write("sys_cond_wait(): signal latency %d", get_system_time() - stamp); + Emu.GetCPU().NotifyThread(cond->signaler); + //ConLog.Write("sys_cond_wait(): signal latency %lld (minimum %lld)", get_system_time() - stamp, stamp2 - stamp); return CELL_OK; } - Sleep(1); + SM_Sleep(); if (counter++ > max_counter) { diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Condition.h b/rpcs3/Emu/SysCalls/lv2/SC_Condition.h index 145a20868a..d4b64c12cd 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Condition.h +++ b/rpcs3/Emu/SysCalls/lv2/SC_Condition.h @@ -17,12 +17,15 @@ struct Cond { Mutex* mutex; // associated with mutex SMutex signal; + u32 signaler; // signaler thread id (for signal_all) SleepQueue m_queue; + u64 signal_stamp; Cond(Mutex* mutex, u64 name) : mutex(mutex) , m_queue(name) + , signaler(0) { } }; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp index f4cf2785ff..c176dcc8fa 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp @@ -93,7 +93,7 @@ int sys_mutex_destroy(u32 mutex_id) int sys_mutex_lock(u32 mutex_id, u64 timeout) { - sys_mtx.Log("sys_mutex_lock(mutex_id=%d, timeout=0x%llx)", mutex_id, timeout); + sys_mtx.Log("sys_mutex_lock(mutex_id=%d, timeout=%lld)", mutex_id, timeout); Mutex* mutex; if (!Emu.GetIdManager().GetIDData(mutex_id, mutex)) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp b/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp index 3020518815..1fce0dc7d0 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp @@ -8,72 +8,72 @@ SysCallBase sys_rsx("sys_rsx"); int sys_rsx_device_open() { - sys_rsx.Warning("Unimplemented function: sys_rsx_device_open()"); + sys_rsx.Error("TODO: sys_rsx_device_open()"); return CELL_OK; } int sys_rsx_device_close() { - sys_rsx.Warning("Unimplemented function: sys_rsx_device_close()"); + sys_rsx.Error("TODO: sys_rsx_device_close()"); return CELL_OK; } int sys_rsx_memory_allocate() { - sys_rsx.Warning("Unimplemented function: sys_rsx_memory_allocate()"); + sys_rsx.Error("TODO: sys_rsx_memory_allocate()"); return CELL_OK; } int sys_rsx_memory_free() { - sys_rsx.Warning("Unimplemented function: sys_rsx_memory_free()"); + sys_rsx.Error("TODO: sys_rsx_memory_free()"); return CELL_OK; } int sys_rsx_context_allocate() { - sys_rsx.Warning("Unimplemented function: sys_rsx_context_allocate()"); + sys_rsx.Error("TODO: sys_rsx_context_allocate()"); return CELL_OK; } int sys_rsx_context_free() { - sys_rsx.Warning("Unimplemented function: sys_rsx_context_free()"); + sys_rsx.Error("TODO: sys_rsx_context_free()"); return CELL_OK; } int sys_rsx_context_iomap() { - sys_rsx.Warning("Unimplemented function: sys_rsx_context_iomap()"); + sys_rsx.Error("TODO: sys_rsx_context_iomap()"); return CELL_OK; } int sys_rsx_context_iounmap() { - sys_rsx.Warning("Unimplemented function: sys_rsx_context_iounmap()"); + sys_rsx.Error("TODO: sys_rsx_context_iounmap()"); return CELL_OK; } int sys_rsx_context_attribute(s32 context_id, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6) { - sys_rsx.Warning("Unimplemented function: sys_rsx_context_attribute(context_id=%d, a2=%llu, a3=%llu, a4=%llu, a5=%llu, a6=%llu)", context_id, a2, a3, a4, a5, a6); + sys_rsx.Error("TODO: sys_rsx_context_attribute(context_id=%d, a2=%llu, a3=%llu, a4=%llu, a5=%llu, a6=%llu)", context_id, a2, a3, a4, a5, a6); return CELL_OK; } int sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 a3) { - sys_rsx.Warning("Unimplemented function: sys_rsx_device_map(a1_addr=0x%x, a2_addr=0x%x, a3=%d)", a1.GetAddr(), a2.GetAddr(), a3); + sys_rsx.Error("TODO: sys_rsx_device_map(a1_addr=0x%x, a2_addr=0x%x, a3=%d)", a1.GetAddr(), a2.GetAddr(), a3); return CELL_OK; } int sys_rsx_device_unmap() { - sys_rsx.Warning("Unimplemented function: sys_rsx_device_unmap()"); + sys_rsx.Error("TODO: sys_rsx_device_unmap()"); return CELL_OK; } int sys_rsx_attribute() { - sys_rsx.Warning("Unimplemented function: sys_rsx_attribute()"); + sys_rsx.Error("TODO: sys_rsx_attribute()"); return CELL_OK; } From 2f2a0c8fbc685141f4b4b77a544ae286d2ef8b64 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 22 Jun 2014 05:23:24 +0800 Subject: [PATCH 061/499] FP: flush m_code_level & check emptyness of m_end_offsets --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 8da1d20a63..af38bce677 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -423,11 +423,16 @@ void GLFragmentDecompilerThread::Task() m_size += m_offset; + // Check emptyness of m_end_offsets + if (m_end_offsets.empty()) break; + if(dst.end) break; data.Skip(m_offset); } + // flush m_code_level + m_code_level = 1; m_shader = BuildCode(); main.clear(); m_parr.params.clear(); From f5813bf2cd394228ff49611fa7e861308087b0ad Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 22 Jun 2014 06:55:02 +0800 Subject: [PATCH 062/499] Paritally revert #359 --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index af38bce677..79b8bfedff 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -423,9 +423,6 @@ void GLFragmentDecompilerThread::Task() m_size += m_offset; - // Check emptyness of m_end_offsets - if (m_end_offsets.empty()) break; - if(dst.end) break; data.Skip(m_offset); From a99061127fd4eb906c3536bf7476f622872f1e71 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 22 Jun 2014 16:01:59 +0800 Subject: [PATCH 063/499] RSX: asynchronous glReadPixels with PBO for writing color/depth buffers --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 88 ++++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 8ef82ae519..b94a7ba0b5 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -17,6 +17,9 @@ gcmBuffer gcmBuffers[8]; GLuint g_flip_tex; GLuint g_depth_tex; +GLuint g_color_pbo[4]; +GLuint g_depth_pbo; + int last_width = 0, last_height = 0, last_depth_format = 0; @@ -437,7 +440,7 @@ bool GLGSRender::LoadProgram() void GLGSRender::WriteDepthBuffer() { - if(!m_set_context_dma_z) + if (!m_set_context_dma_z) { return; } @@ -446,25 +449,32 @@ void GLGSRender::WriteDepthBuffer() m_set_context_dma_z = false; u32 address = GetAddress(m_surface_offset_z, m_context_dma_z - 0xfeed0000); - if(!Memory.IsGoodAddr(address)) + if (!Memory.IsGoodAddr(address)) { ConLog.Warning("Bad depth address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); return; } - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, &Memory[address]); - checkForGlError("glReadPixels"); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_depth_pbo); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_DYNAMIC_READ); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); + checkForGlError("WriteDepthBuffer(): glReadPixels(GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE)"); + GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); glBindTexture(GL_TEXTURE_2D, g_depth_tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, RSXThread::m_buffer_width, RSXThread::m_buffer_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &Memory[address]); checkForGlError("glTexImage2D"); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); checkForGlError("glGetTexImage"); + } void GLGSRender::WriteColourBufferA() { - if(!m_set_context_dma_color_a) + if (!m_set_context_dma_color_a) { return; } @@ -473,21 +483,27 @@ void GLGSRender::WriteColourBufferA() m_set_context_dma_color_a = false; u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000); - if(!Memory.IsGoodAddr(address)) + if (!Memory.IsGoodAddr(address)) { ConLog.Warning("Bad colour buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); return; } glReadBuffer(GL_COLOR_ATTACHMENT0); - checkForGlError("glReadBuffer(GL_COLOR_ATTACHMENT0)"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); - checkForGlError("glReadPixels(GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColourBufferA(): glReadBuffer(GL_COLOR_ATTACHMENT0)"); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_color_pbo[0]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); + checkForGlError("WriteColourBufferA(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } void GLGSRender::WriteColourBufferB() { - if(!m_set_context_dma_color_b) + if (!m_set_context_dma_color_b) { return; } @@ -496,21 +512,28 @@ void GLGSRender::WriteColourBufferB() m_set_context_dma_color_b = false; u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000); - if(!Memory.IsGoodAddr(address)) + if (!Memory.IsGoodAddr(address)) { ConLog.Warning("Bad colour buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); return; } glReadBuffer(GL_COLOR_ATTACHMENT1); - checkForGlError("glReadBuffer(GL_COLOR_ATTACHMENT1)"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); - checkForGlError("glReadPixels(GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColourBufferB(): glReadBuffer(GL_COLOR_ATTACHMENT1)"); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_color_pbo[1]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); + checkForGlError("WriteColourBufferB(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + } void GLGSRender::WriteColourBufferC() { - if(!m_set_context_dma_color_c) + if (!m_set_context_dma_color_c) { return; } @@ -519,21 +542,27 @@ void GLGSRender::WriteColourBufferC() m_set_context_dma_color_c = false; u32 address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000); - if(!Memory.IsGoodAddr(address)) + if (!Memory.IsGoodAddr(address)) { ConLog.Warning("Bad colour buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); return; } glReadBuffer(GL_COLOR_ATTACHMENT2); - checkForGlError("glReadBuffer(GL_COLOR_ATTACHMENT2)"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); - checkForGlError("glReadPixels(GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColourBufferC(): glReadBuffer(GL_COLOR_ATTACHMENT2)"); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_color_pbo[2]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); + checkForGlError("WriteColourBufferC(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } void GLGSRender::WriteColourBufferD() { - if(!m_set_context_dma_color_d) + if (!m_set_context_dma_color_d) { return; } @@ -542,16 +571,23 @@ void GLGSRender::WriteColourBufferD() m_set_context_dma_color_d = false; u32 address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000); - if(!Memory.IsGoodAddr(address)) + if (!Memory.IsGoodAddr(address)) { ConLog.Warning("Bad colour buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); return; } glReadBuffer(GL_COLOR_ATTACHMENT3); - checkForGlError("glReadBuffer(GL_COLOR_ATTACHMENT3)"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); - checkForGlError("glReadPixels(GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColourBufferD(): glReadBuffer(GL_COLOR_ATTACHMENT3)"); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_color_pbo[3]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); + checkForGlError("WriteColourBufferD(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + } void GLGSRender::WriteColorBuffers() @@ -620,7 +656,9 @@ void GLGSRender::OnInitThread() glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); glGenTextures(1, &g_depth_tex); glGenTextures(1, &g_flip_tex); - + glGenBuffers(4, g_color_pbo); + glGenBuffers(1, &g_depth_pbo); + #ifdef _WIN32 glSwapInterval(Ini.GSVSyncEnable.GetValue() ? 1 : 0); // Undefined reference: glXSwapIntervalEXT From 30b8e512341b98989e4ba36297f0a64a51575608 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 22 Jun 2014 14:59:28 +0400 Subject: [PATCH 064/499] rCriticalSection & rSemaphore removed SC_Semaphore errors fixed Room for interrupt threads --- Utilities/rConcurrency.cpp | 74 ------------------------ Utilities/rConcurrency.h | 37 ------------ rpcs3/Emu/CPU/CPUThread.cpp | 4 +- rpcs3/Emu/CPU/CPUThread.h | 2 +- rpcs3/Emu/CPU/CPUThreadManager.h | 1 - rpcs3/Emu/Cell/SPUThread.h | 11 +++- rpcs3/Emu/GS/GSRender.h | 4 +- rpcs3/Emu/GS/RSXThread.cpp | 2 +- rpcs3/Emu/GS/RSXThread.h | 2 +- rpcs3/Emu/SysCalls/SysCalls.h | 14 ++--- rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp | 7 ++- rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp | 51 ++++++++++++---- rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp | 19 ++++-- rpcs3/emucore.vcxproj | 1 - rpcs3/emucore.vcxproj.filters | 3 - 15 files changed, 84 insertions(+), 148 deletions(-) diff --git a/Utilities/rConcurrency.cpp b/Utilities/rConcurrency.cpp index 10afc624e2..c36f70e486 100644 --- a/Utilities/rConcurrency.cpp +++ b/Utilities/rConcurrency.cpp @@ -1,68 +1,5 @@ #include "stdafx.h" -rSemaphore::rSemaphore() -{ - handle = reinterpret_cast(new wxSemaphore()); -} - -rSemaphore::~rSemaphore() -{ - delete reinterpret_cast(handle); -} - -rSemaphore::rSemaphore(int initial_count, int max_count) -{ - handle = reinterpret_cast(new wxSemaphore(initial_count,max_count)); -} - -void rSemaphore::Wait() -{ - reinterpret_cast(handle)->Wait(); -} - -rSemaStatus rSemaphore::TryWait() -{ - wxSemaError err = reinterpret_cast(handle)->TryWait(); - if (err == wxSEMA_BUSY) - { - return rSEMA_BUSY; - } - else - { - return rSEMA_OTHER; - } -} - -void rSemaphore::Post() -{ - reinterpret_cast(handle)->Post(); -} - -void rSemaphore::WaitTimeout(u64 timeout) -{ - reinterpret_cast(handle)->WaitTimeout(timeout); -} - -rCriticalSection::rCriticalSection() -{ - handle = reinterpret_cast(new wxCriticalSection()); -} - -rCriticalSection::~rCriticalSection() -{ - delete reinterpret_cast(handle); -} - -void rCriticalSection::Enter() -{ - reinterpret_cast(handle)->Enter(); -} - -void rCriticalSection::Leave() -{ - reinterpret_cast(handle)->Leave(); -} - rTimer::rTimer() { handle = reinterpret_cast(new wxTimer()); @@ -93,17 +30,6 @@ void rMicroSleep(u64 time) wxMicroSleep(time); } -rCriticalSectionLocker::rCriticalSectionLocker(const rCriticalSection &sec) -{ - handle = reinterpret_cast(new wxCriticalSectionLocker(*reinterpret_cast(sec.handle))); -} - - -rCriticalSectionLocker::~rCriticalSectionLocker() -{ - delete reinterpret_cast(handle); -} - bool rThread::IsMain() { return wxThread::IsMain(); diff --git a/Utilities/rConcurrency.h b/Utilities/rConcurrency.h index 506e3fecd3..8504daef1b 100644 --- a/Utilities/rConcurrency.h +++ b/Utilities/rConcurrency.h @@ -1,34 +1,5 @@ #pragma once -enum rSemaStatus -{ - rSEMA_BUSY, - rSEMA_OTHER -}; -struct rSemaphore -{ - rSemaphore(); - rSemaphore(const rSemaphore& other) = delete; - ~rSemaphore(); - rSemaphore(int initial_count, int max_count); - void Wait(); - rSemaStatus TryWait(); - void Post(); - void WaitTimeout(u64 timeout); -private: - void *handle; -}; - -struct rCriticalSection -{ - rCriticalSection(); - rCriticalSection(const rCriticalSection& other) = delete; - ~rCriticalSection(); - void Enter(); - void Leave(); - void *handle; -}; - struct rTimer { rTimer(); @@ -43,14 +14,6 @@ private: void rSleep(u32 time); void rMicroSleep(u64 time); -struct rCriticalSectionLocker -{ - rCriticalSectionLocker(const rCriticalSection& other); - ~rCriticalSectionLocker(); -private: - void *handle; -}; - struct rThread { static bool IsMain(); diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index e6c7a09cb0..10da0f8608 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -85,13 +85,13 @@ void CPUThread::SetName(const std::string& name) void CPUThread::Wait(bool wait) { - rCriticalSectionLocker lock(m_cs_sync); + std::lock_guard lock(m_cs_sync); m_sync_wait = wait; } void CPUThread::Wait(const CPUThread& thr) { - rCriticalSectionLocker lock(m_cs_sync); + std::lock_guard lock(m_cs_sync); m_wait_thread_id = thr.GetId(); m_sync_wait = true; } diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 5fd14c402b..e725e719d9 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -138,7 +138,7 @@ public: u32 m_wait_thread_id; - rCriticalSection m_cs_sync; + std::mutex m_cs_sync; bool m_sync_wait; void Wait(bool wait); void Wait(const CPUThread& thr); diff --git a/rpcs3/Emu/CPU/CPUThreadManager.h b/rpcs3/Emu/CPU/CPUThreadManager.h index f40a9e936d..6ccdf568e7 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.h +++ b/rpcs3/Emu/CPU/CPUThreadManager.h @@ -6,7 +6,6 @@ class CPUThreadManager { std::vector m_threads; std::mutex m_mtx_thread; - rSemaphore m_sem_task; u32 m_raw_spu_num; public: diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 664a1e24f0..270d92dde5 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -900,6 +900,13 @@ public: switch(ch) { case SPU_WrOutIntrMbox: + if (!group) // if RawSPU + { + // TODO: run PPU interrupt thread + ConLog.Error("SPU_WrOutIntrMbox interrupt unimplemented"); + Emu.Pause(); + } + else { u8 code = v >> 24; if (code < 64) @@ -933,7 +940,9 @@ public: if (!port.eq) { - SPU.In_MBox.PushUncond(CELL_ENOTCONN); // check error passing + // spu_printf fails there + ConLog.Warning("sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, v & 0x00ffffff, data); + SPU.In_MBox.PushUncond(CELL_ENOTCONN); // TODO: check error passing return; } diff --git a/rpcs3/Emu/GS/GSRender.h b/rpcs3/Emu/GS/GSRender.h index 556c889606..86d74748a2 100644 --- a/rpcs3/Emu/GS/GSRender.h +++ b/rpcs3/Emu/GS/GSRender.h @@ -31,7 +31,7 @@ public: { switch(m_type) { - case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.Enter(); break; + case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.lock(); break; case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.wait(); break; case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.wait(); break; } @@ -41,7 +41,7 @@ public: { switch(m_type) { - case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.Leave(); break; + case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.unlock(); break; case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.post(); break; case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.post(); break; } diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 7e4c1bfa2a..268eb8cf1d 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1877,7 +1877,7 @@ void RSXThread::Task() ConLog.Warning("RSX thread aborted"); return; } - rCriticalSectionLocker lock(m_cs_main); + std::lock_guard lock(m_cs_main); inc=1; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 310011e044..e1068c4c55 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -148,7 +148,7 @@ public: u32 m_draw_array_first; public: - rCriticalSection m_cs_main; + std::mutex m_cs_main; SSemaphore m_sem_flush; SSemaphore m_sem_flip; Callback m_flip_handler; diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index bb438c33f2..413df89e7b 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -201,15 +201,15 @@ extern void sys_spinlock_unlock(mem_ptr_t lock); //ppu_thread extern void sys_ppu_thread_exit(u64 errorcode); extern int sys_ppu_thread_yield(); -extern int sys_ppu_thread_join(u32 thread_id, mem64_t vptr); -extern int sys_ppu_thread_detach(u32 thread_id); +extern int sys_ppu_thread_join(u64 thread_id, mem64_t vptr); +extern int sys_ppu_thread_detach(u64 thread_id); extern void sys_ppu_thread_get_join_state(u32 isjoinable_addr); -extern int sys_ppu_thread_set_priority(u32 thread_id, int prio); -extern int sys_ppu_thread_get_priority(u32 thread_id, u32 prio_addr); +extern int sys_ppu_thread_set_priority(u64 thread_id, int prio); +extern int sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr); extern int sys_ppu_thread_get_stack_information(u32 info_addr); -extern int sys_ppu_thread_stop(u32 thread_id); -extern int sys_ppu_thread_restart(u32 thread_id); -extern int sys_ppu_thread_create(u32 thread_id_addr, u32 entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr); +extern int sys_ppu_thread_stop(u64 thread_id); +extern int sys_ppu_thread_restart(u64 thread_id); +extern int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr); extern void sys_ppu_thread_once(u32 once_ctrl_addr, u32 entry); extern int sys_ppu_thread_get_id(const u32 id_addr); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp index 4461ce9dfe..c1650a6efa 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp @@ -194,7 +194,12 @@ u32 SleepQueue::count() { std::lock_guard lock(m_mutex); - return list.size(); + u32 result = 0; + for (u32 i = 0; i < list.size(); i++) + { + if (list[i]) result++; + } + return result; } bool SleepQueue::finalize() diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp index 94b9f9f969..83316d7e45 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp @@ -10,12 +10,19 @@ extern Module *sysPrxForUser; static const u32 PPU_THREAD_ID_INVALID = 0xFFFFFFFFU; + enum { SYS_PPU_THREAD_ONCE_INIT, SYS_PPU_THREAD_DONE_INIT, }; +enum ppu_thread_flags : u64 +{ + SYS_PPU_THREAD_CREATE_JOINABLE = 0x1, + SYS_PPU_THREAD_CREATE_INTERRUPT = 0x2, +}; + void sys_ppu_thread_exit(u64 errorcode) { sysPrxForUser->Log("sys_ppu_thread_exit(0x%llx)", errorcode); @@ -40,7 +47,7 @@ int sys_ppu_thread_yield() return CELL_OK; } -int sys_ppu_thread_join(u32 thread_id, mem64_t vptr) +int sys_ppu_thread_join(u64 thread_id, mem64_t vptr) { sysPrxForUser->Warning("sys_ppu_thread_join(thread_id=%d, vptr_addr=0x%x)", thread_id, vptr.GetAddr()); @@ -61,7 +68,7 @@ int sys_ppu_thread_join(u32 thread_id, mem64_t vptr) return CELL_OK; } -int sys_ppu_thread_detach(u32 thread_id) +int sys_ppu_thread_detach(u64 thread_id) { sysPrxForUser->Error("sys_ppu_thread_detach(thread_id=%d)", thread_id); @@ -81,7 +88,7 @@ void sys_ppu_thread_get_join_state(u32 isjoinable_addr) Memory.Write32(isjoinable_addr, GetCurrentPPUThread().IsJoinable()); } -int sys_ppu_thread_set_priority(u32 thread_id, int prio) +int sys_ppu_thread_set_priority(u64 thread_id, int prio) { sysPrxForUser->Log("sys_ppu_thread_set_priority(thread_id=%d, prio=%d)", thread_id, prio); @@ -93,7 +100,7 @@ int sys_ppu_thread_set_priority(u32 thread_id, int prio) return CELL_OK; } -int sys_ppu_thread_get_priority(u32 thread_id, u32 prio_addr) +int sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr) { sysPrxForUser->Log("sys_ppu_thread_get_priority(thread_id=%d, prio_addr=0x%x)", thread_id, prio_addr); @@ -120,7 +127,7 @@ int sys_ppu_thread_get_stack_information(u32 info_addr) return CELL_OK; } -int sys_ppu_thread_stop(u32 thread_id) +int sys_ppu_thread_stop(u64 thread_id) { sysPrxForUser->Warning("sys_ppu_thread_stop(thread_id=%d)", thread_id); @@ -132,7 +139,7 @@ int sys_ppu_thread_stop(u32 thread_id) return CELL_OK; } -int sys_ppu_thread_restart(u32 thread_id) +int sys_ppu_thread_restart(u64 thread_id) { sysPrxForUser->Warning("sys_ppu_thread_restart(thread_id=%d)", thread_id); @@ -145,30 +152,50 @@ int sys_ppu_thread_restart(u32 thread_id) return CELL_OK; } -int sys_ppu_thread_create(u32 thread_id_addr, u32 entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr) +int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr) { std::string threadname = ""; if (Memory.IsGoodAddr(threadname_addr)) { threadname = Memory.ReadString(threadname_addr); sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", - thread_id_addr, entry, arg, prio, stacksize, flags, threadname_addr, threadname.c_str()); + thread_id.GetAddr(), entry, arg, prio, stacksize, flags, threadname_addr, threadname.c_str()); } else { sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x)", - thread_id_addr, entry, arg, prio, stacksize, flags, threadname_addr); + thread_id.GetAddr(), entry, arg, prio, stacksize, flags, threadname_addr); if (threadname_addr != 0) return CELL_EFAULT; } - if(!Memory.IsGoodAddr(entry) || !Memory.IsGoodAddr(thread_id_addr)) + if (!Memory.IsGoodAddr(entry) || !thread_id.IsGood()) { return CELL_EFAULT; } + bool is_joinable = false; + bool is_interrupt = false; + + switch (flags) + { + case 0: break; + case SYS_PPU_THREAD_CREATE_JOINABLE: + { + is_joinable = true; + break; + } + case SYS_PPU_THREAD_CREATE_INTERRUPT: + { + sysPrxForUser->Error("sys_ppu_thread_create: unimplemented flag (SYS_PPU_THREAD_CREATE_INTERRUPT)"); + is_interrupt = true; + break; + } + default: sysPrxForUser->Error("sys_ppu_thread_create(): unknown flags value (0x%llx)", flags); return CELL_EPERM; + } + CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_PPU); - Memory.Write64(thread_id_addr, new_thread.GetId()); + thread_id = new_thread.GetId(); new_thread.SetEntry(entry); new_thread.SetArg(0, arg); new_thread.SetPrio(prio); @@ -176,7 +203,7 @@ int sys_ppu_thread_create(u32 thread_id_addr, u32 entry, u64 arg, int prio, u32 //new_thread.flags = flags; new_thread.SetName(threadname); - ConLog.Write("*** New PPU Thread [%s] (): id = %d", new_thread.GetName().c_str(), new_thread.GetId()); + ConLog.Write("*** New PPU Thread [%s] (flags=0x%llx, entry=0x%x): id = %d", new_thread.GetName().c_str(), flags, entry, new_thread.GetId()); new_thread.Run(); new_thread.Exec(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp index 2ef88daefd..b256e1c380 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp @@ -17,14 +17,15 @@ int sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i return CELL_EFAULT; } - if (max_count <= 0) + if (max_count <= 0 || initial_count > max_count || initial_count < 0) { + sys_sem.Error("sys_semaphore_create(): invalid parameters (initial_count=%d, max_count=%d)", initial_count, max_count); return CELL_EINVAL; } if (attr->pshared.ToBE() != se32(0x200)) { - sys_sem.Error("Invalid pshared attribute(0x%x)", (u32)attr->pshared); + sys_sem.Error("sys_semaphore_create(): invalid pshared value(0x%x)", (u32)attr->pshared); return CELL_EINVAL; } @@ -96,6 +97,7 @@ int sys_semaphore_wait(u32 sem_id, u64 timeout) if (timeout && get_system_time() - start_time > timeout) { + sem->m_queue.invalidate(tid); return CELL_ETIMEDOUT; } @@ -103,6 +105,10 @@ int sys_semaphore_wait(u32 sem_id, u64 timeout) { std::lock_guard lock(sem->m_mutex); + if (tid != sem->signal) + { + continue; + } sem->signal = 0; // TODO: notify signaler return CELL_OK; @@ -150,9 +156,9 @@ int sys_semaphore_post(u32 sem_id, int count) return CELL_EINVAL; } - if (count + sem->m_value - sem->m_queue.count() > sem->max) + if (count + sem->m_value - (int)sem->m_queue.count() > sem->max) { - return CELL_EINVAL; + return CELL_EBUSY; } while (count > 0) @@ -191,6 +197,11 @@ int sys_semaphore_get_value(u32 sem_id, mem32_t count) { sys_sem.Log("sys_semaphore_get_value(sem_id=%d, count_addr=0x%x)", sem_id, count.GetAddr()); + if (!count.IsGood()) + { + return CELL_EFAULT; + } + Semaphore* sem; if (!Emu.GetIdManager().GetIDData(sem_id, sem)) { diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 031e1039df..61140cd079 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -246,7 +246,6 @@ - diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 5ddf7ac06e..7e3284658a 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -850,9 +850,6 @@ Emu\Cell - - Emu\Cell - Emu\Cell From fe74f97d442a467e3e1589888928900f75e087a0 Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 23 Jun 2014 03:45:32 +0800 Subject: [PATCH 065/499] RSX : delete PBO when exit thread --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index b94a7ba0b5..f2046d10bc 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -674,7 +674,9 @@ void GLGSRender::OnExitThread() { glDeleteTextures(1, &g_flip_tex); glDeleteTextures(1, &g_depth_tex); - + glDeleteBuffers(4, g_color_pbo); + glDeleteBuffers(1, &g_depth_pbo); + m_program.Delete(); m_rbo.Delete(); m_fbo.Delete(); From f9c592098f7d8c83e7340fc0fef651c5dc27a23e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 23 Jun 2014 05:03:16 +0400 Subject: [PATCH 066/499] Work on RawSPU: interrupt mailbox Achievement unlocked: run spu_test! --- rpcs3/Emu/CPU/CPUThread.h | 4 + rpcs3/Emu/CPU/CPUThreadManager.cpp | 20 +++ rpcs3/Emu/CPU/CPUThreadManager.h | 2 + rpcs3/Emu/Cell/RawSPUThread.cpp | 9 +- rpcs3/Emu/Cell/SPUInterpreter.h | 36 +++- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 1 + rpcs3/Emu/Cell/SPUThread.h | 42 ++++- rpcs3/Emu/SysCalls/SysCalls.cpp | 26 +-- rpcs3/Emu/SysCalls/SysCalls.h | 17 +- rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp | 111 ++++++++++++ rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h | 1 + rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp | 26 +-- rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp | 207 +++++++++++++++++++++-- rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 + 15 files changed, 458 insertions(+), 52 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp create mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index e725e719d9..87d9b9963d 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -130,6 +130,10 @@ public: u64 cycle; bool m_is_branch; + bool m_is_interrupt; + bool m_has_interrupt; + u64 m_interrupt_arg; + protected: CPUThread(CPUThreadType type); diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index b99573e6a6..b89c58fbeb 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -108,6 +108,26 @@ CPUThread* CPUThreadManager::GetThread(u32 id) return res; } +RawSPUThread* CPUThreadManager::GetRawSPUThread(u32 num) +{ + std::lock_guard lock(m_mtx_thread); + + for (u32 i = 0; i < m_threads.size(); i++) + { + if (m_threads[i]->GetType() == CPU_THREAD_RAW_SPU) + { + RawSPUThread* t = (RawSPUThread*)m_threads[i]; + + if (t->GetIndex() == num) + { + return t; + } + } + } + + return nullptr; +} + void CPUThreadManager::NotifyThread(const u32 id) { if (!id) return; diff --git a/rpcs3/Emu/CPU/CPUThreadManager.h b/rpcs3/Emu/CPU/CPUThreadManager.h index 6ccdf568e7..ba71cb78b9 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.h +++ b/rpcs3/Emu/CPU/CPUThreadManager.h @@ -1,5 +1,6 @@ #pragma once class CPUThread; +class RawSPUThread; enum CPUThreadType : unsigned char; class CPUThreadManager @@ -21,6 +22,7 @@ public: std::vector& GetThreads() { return m_threads; } s32 GetThreadNumById(CPUThreadType type, u32 id); CPUThread* GetThread(u32 id); + RawSPUThread* GetRawSPUThread(u32 num); void Exec(); void Task(); diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 6d513b664d..53a1710093 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -79,7 +79,7 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) case Prxy_QueryMask_offs: ConLog.Warning("RawSPUThread[%d]: Read32(Prxy_QueryMask)", m_index); *value = Prxy.QueryMask.GetValue(); break; case Prxy_TagStatus_offs: ConLog.Warning("RawSPUThread[%d]: Read32(Prxy_TagStatus)", m_index); *value = Prxy.TagStatus.GetValue(); break; case SPU_Out_MBox_offs: - ConLog.Warning("RawSPUThread[%d]: Read32(SPU_Out_MBox)", m_index); + //ConLog.Warning("RawSPUThread[%d]: Read32(SPU_Out_MBox)", m_index); SPU.Out_MBox.PopUncond(*value); //if Out_MBox is empty yet, the result will be undefined break; case SPU_In_MBox_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); while(!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) Sleep(1); break; @@ -89,7 +89,10 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) *value = SPU.MBox_Status.GetValue(); break; case SPU_RunCntl_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); *value = SPU.RunCntl.GetValue(); break; - case SPU_Status_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_Status)", m_index); *value = SPU.Status.GetValue(); break; + case SPU_Status_offs: + //ConLog.Warning("RawSPUThread[%d]: Read32(SPU_Status)", m_index); + *value = SPU.Status.GetValue(); + break; case SPU_NPC_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_NPC)", m_index); *value = SPU.NPC.GetValue(); break; case SPU_RdSigNotify1_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_RdSigNotify1)", m_index); *value = SPU.SNR[0].GetValue(); break; case SPU_RdSigNotify2_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_RdSigNotify2)", m_index); *value = SPU.SNR[1].GetValue(); break; @@ -199,7 +202,7 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) case Prxy_TagStatus_offs: ConLog.Warning("RawSPUThread[%d]: Write32(Prxy_TagStatus, 0x%x)", m_index, value); Prxy.TagStatus.SetValue(value); break; case SPU_Out_MBox_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); while(!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) Sleep(1); break; case SPU_In_MBox_offs: - ConLog.Warning("RawSPUThread[%d]: Write32(SPU_In_MBox, 0x%x)", m_index, value); + //ConLog.Warning("RawSPUThread[%d]: Write32(SPU_In_MBox, 0x%x)", m_index, value); SPU.In_MBox.PushUncond(value); //if In_MBox is already full, the last message will be overwritten break; case SPU_MBox_Status_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); SPU.MBox_Status.SetValue(value); break; diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index 8522a34889..209d3c5efb 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -679,7 +679,11 @@ private: //HGT uses signed values. HLGT uses unsigned values void HGT(u32 rt, s32 ra, s32 rb) { - if(CPU.GPR[ra]._i32[3] > CPU.GPR[rb]._i32[3]) CPU.Stop(); + if (CPU.GPR[ra]._i32[3] > CPU.GPR[rb]._i32[3]) + { + CPU.SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_HALT); + CPU.Stop(); + } } void CLZ(u32 rt, u32 ra) { @@ -806,7 +810,11 @@ private: } void HLGT(u32 rt, u32 ra, u32 rb) { - if(CPU.GPR[ra]._u32[3] > CPU.GPR[rb]._u32[3]) CPU.Stop(); + if (CPU.GPR[ra]._u32[3] > CPU.GPR[rb]._u32[3]) + { + CPU.SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_HALT); + CPU.Stop(); + } } void DFMA(u32 rt, u32 ra, u32 rb) { @@ -1018,7 +1026,11 @@ private: } void HEQ(u32 rt, u32 ra, u32 rb) { - if(CPU.GPR[ra]._i32[3] == CPU.GPR[rb]._i32[3]) CPU.Stop(); + if (CPU.GPR[ra]._i32[3] == CPU.GPR[rb]._i32[3]) + { + CPU.SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_HALT); + CPU.Stop(); + } } //0 - 9 @@ -1373,7 +1385,11 @@ private: } void HGTI(u32 rt, u32 ra, s32 i10) { - if(CPU.GPR[ra]._i32[3] > i10) CPU.Stop(); + if (CPU.GPR[ra]._i32[3] > i10) + { + CPU.SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_HALT); + CPU.Stop(); + } } void CLGTI(u32 rt, u32 ra, s32 i10) { @@ -1396,7 +1412,11 @@ private: } void HLGTI(u32 rt, u32 ra, s32 i10) { - if(CPU.GPR[ra]._u32[3] > (u32)i10) CPU.Stop(); + if (CPU.GPR[ra]._u32[3] > (u32)i10) + { + CPU.SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_HALT); + CPU.Stop(); + } } void MPYI(u32 rt, u32 ra, s32 i10) { @@ -1425,7 +1445,11 @@ private: } void HEQI(u32 rt, u32 ra, s32 i10) { - if(CPU.GPR[ra]._i32[3] == i10) CPU.Stop(); + if (CPU.GPR[ra]._i32[3] == i10) + { + CPU.SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_HALT); + CPU.Stop(); + } } diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 5368e3b6d5..565132430f 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -232,6 +232,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) if (res > 0xffff) { + CPU.SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_HALT); CPU.Stop(); res = ~res; } diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 270d92dde5..aa6d8d33a4 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -295,6 +295,22 @@ public: EventManager SPUQs; // SPU Queue Mapping SpuGroupInfo* group; // associated SPU Thread Group (null for raw spu) + struct IntrTag + { + u32 enabled; // 1 == true + u32 thread; // established interrupt PPU thread + u64 mask; + u64 stat; + + IntrTag() + : enabled(0) + , thread(0) + , mask(0) + , stat(0) + { + } + } m_intrtag[3]; + template class Channel { @@ -510,6 +526,7 @@ public: struct { Channel<1> Out_MBox; + Channel<1> Out_IntrMBox; Channel<4> In_MBox; Channel<1> MBox_Status; Channel<1> RunCntl; @@ -544,7 +561,7 @@ public: { if (cmd & (MFC_BARRIER_MASK | MFC_FENCE_MASK)) _mm_mfence(); - if ((ea & 0xf0000000) == SYS_SPU_THREAD_BASE_LOW) + if (ea >= SYS_SPU_THREAD_BASE_LOW) { if (group) { @@ -902,9 +919,24 @@ public: case SPU_WrOutIntrMbox: if (!group) // if RawSPU { - // TODO: run PPU interrupt thread - ConLog.Error("SPU_WrOutIntrMbox interrupt unimplemented"); - Emu.Pause(); + if (Ini.HLELogging.GetValue()) ConLog.Write("SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); + SPU.Out_IntrMBox.PushUncond(v); + m_intrtag[2].stat |= 1; + if (CPUThread* t = Emu.GetCPU().GetThread(m_intrtag[2].thread)) + { + while (t->IsAlive()) + { + Sleep(1); + if (Emu.IsStopped()) + { + ConLog.Warning("%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + return; + } + } + t->SetArg(0, t->m_interrupt_arg); + t->Run(); + t->Exec(); + } } else { @@ -1223,6 +1255,7 @@ public: // the real exit status ConLog.Write("sys_spu_thread_exit (status=0x%x)", SPU.Out_MBox.GetValue()); } + SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); Stop(); break; default: @@ -1234,6 +1267,7 @@ public: { ConLog.Error("Unknown STOP code: 0x%x (message=0x%x)", code, SPU.Out_MBox.GetValue()); } + SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); Stop(); break; } diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 4bff0b64d7..e745ae995b 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -102,15 +102,15 @@ static func_caller* sc_table[kSyscallTableLength] = null_func, null_func,//bind_func(sys_interrupt_tag_create) //80 (0x050) - null_func,//bind_func(sys_interrupt_tag_destroy) //81 (0x051) + bind_func(sys_interrupt_tag_destroy), //81 (0x051) bind_func(sys_event_flag_create), //82 (0x052) bind_func(sys_event_flag_destroy), //83 (0x053) - null_func,//bind_func(sys_interrupt_thread_establish) //84 (0x054) + bind_func(sys_interrupt_thread_establish), //84 (0x054) bind_func(sys_event_flag_wait), //85 (0x055) bind_func(sys_event_flag_trywait), //86 (0x056) bind_func(sys_event_flag_set), //87 (0x057) - null_func,//bind_func(sys_interrupt_thread_eoi) //88 (0x058) - null_func,//bind_func(sys_interrupt_thread_disestablish)//89 (0x059) + bind_func(sys_interrupt_thread_eoi), //88 (0x058) + bind_func(sys_interrupt_thread_disestablish), //89 (0x059) bind_func(sys_semaphore_create), //90 (0x05A) bind_func(sys_semaphore_destroy), //91 (0x05B) bind_func(sys_semaphore_wait), //92 (0x05C) @@ -174,20 +174,20 @@ static func_caller* sc_table[kSyscallTableLength] = // Unused: 149 null_func, - null_func,//bind_func(sys_raw_spu_create_interrupt_tag) //150 (0x096) - null_func,//bind_func(sys_raw_spu_set_int_mask) //151 (0x097) - null_func,//bind_func(sys_raw_spu_get_int_mask) //152 (0x098) - null_func,//bind_func(sys_raw_spu_set_int_stat) //153 (0x099) - null_func,//bind_func(sys_raw_spu_get_int_stat) //154 (0x09A) + bind_func(sys_raw_spu_create_interrupt_tag), //150 (0x096) + bind_func(sys_raw_spu_set_int_mask), //151 (0x097) + bind_func(sys_raw_spu_get_int_mask), //152 (0x098) + bind_func(sys_raw_spu_set_int_stat), //153 (0x099) + bind_func(sys_raw_spu_get_int_stat), //154 (0x09A) null_func,//bind_func(sys_spu_image_get_information?) //155 (0x09B) bind_func(sys_spu_image_open), //156 (0x09C) null_func,//bind_func(sys_spu_image_import) //157 (0x09D) null_func,//bind_func(sys_spu_image_close) //158 (0x09E) null_func,//bind_func(sys_raw_spu_load) //159 (0x09F) bind_func(sys_raw_spu_create), //160 (0x0A0) - null_func,//bind_func(sys_raw_spu_destroy) //161 (0x0A1) + bind_func(sys_raw_spu_destroy), //161 (0x0A1) null_func, // - null_func,//bind_func(sys_raw_spu_read_puint_mb) //163 (0x0A3) + bind_func(sys_raw_spu_read_puint_mb), //163 (0x0A3) null_func, // bind_func(sys_spu_thread_get_exit_status), //165 (0x0A5) bind_func(sys_spu_thread_set_argument), //166 (0x0A6) @@ -220,8 +220,8 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_spu_thread_bind_queue), //193 (0x0C1) bind_func(sys_spu_thread_unbind_queue), //194 (0x0C2) null_func, // - null_func,//bind_func(sys_raw_spu_set_spu_cfg) //196 (0x0C4) - null_func,//bind_func(sys_raw_spu_get_spu_cfg) //197 (0x0C5) + bind_func(sys_raw_spu_set_spu_cfg), //196 (0x0C4) + bind_func(sys_raw_spu_get_spu_cfg), //197 (0x0C5) null_func,//bind_func(sys_spu_thread_recover_page_fault)//198 (0x0C6) null_func,//bind_func(sys_raw_spu_recover_page_fault) //199 (0x0C7) diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 413df89e7b..584d9f1aa4 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -358,7 +358,6 @@ extern int sys_spu_thread_group_connect_event(u32 id, u32 eq, u32 et); extern int sys_spu_thread_group_disconnect_event(u32 id, u32 et); extern int sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq, u64 req, u32 spup_addr); extern int sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup); -extern int sys_raw_spu_create(mem32_t id, u32 attr_addr); extern int sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu); extern int sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type); extern int sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type); @@ -371,6 +370,22 @@ extern int sys_spu_thread_disconnect_event(u32 id, u32 event_type, u8 spup); extern int sys_spu_thread_bind_queue(u32 id, u32 spuq, u32 spuq_num); extern int sys_spu_thread_unbind_queue(u32 id, u32 spuq_num); extern int sys_spu_thread_get_exit_status(u32 id, mem32_t status); +extern int sys_raw_spu_create(mem32_t id, u32 attr_addr); +extern int sys_raw_spu_destroy(u32 id); +extern int sys_raw_spu_create_interrupt_tag(u32 id, u32 class_id, u32 hwthread, mem32_t intrtag); +extern int sys_raw_spu_set_int_mask(u32 id, u32 class_id, u64 mask); +extern int sys_raw_spu_get_int_mask(u32 id, u32 class_id, mem64_t mask); +extern int sys_raw_spu_set_int_stat(u32 id, u32 class_id, u64 stat); +extern int sys_raw_spu_get_int_stat(u32 id, u32 class_id, mem64_t stat); +extern int sys_raw_spu_read_puint_mb(u32 id, mem32_t value); +extern int sys_raw_spu_set_spu_cfg(u32 id, u32 value); +extern int sys_raw_spu_get_spu_cfg(u32 id, mem32_t value); + +//sys_interrupt +extern int sys_interrupt_tag_destroy(u32 intrtag); +extern int sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 arg); +extern int sys_interrupt_thread_disestablish(u32 ih); +extern void sys_interrupt_thread_eoi(); //sys_time extern int sys_time_get_timezone(mem32_t timezone, mem32_t summertime); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp new file mode 100644 index 0000000000..78e5a22a36 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp @@ -0,0 +1,111 @@ +#include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/Cell/RawSPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SysCalls.h" +#include "SC_Interrupt.h" + +static SysCallBase sc_int("sys_interrupt"); + +int sys_interrupt_tag_destroy(u32 intrtag) +{ + sc_int.Error("sys_interrupt_tag_destroy(intrtag=%d)", intrtag); + + u32 id = intrtag & 0xff; + u32 class_id = intrtag >> 8; + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + + if (!t || class_id > 2 || class_id == 1) + { + return CELL_ESRCH; + } + + if (!t->m_intrtag[class_id].enabled) + { + return CELL_ESRCH; + } + + if (t->m_intrtag[class_id].thread) + { + return CELL_EBUSY; + } + + t->m_intrtag[class_id].enabled = 0; + return CELL_OK; +} + +int sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 arg) +{ + sc_int.Error("sys_interrupt_thread_establish(ih_addr=0x%x, intrtag=%d, intrthread=%lld, arg=0x%llx)", ih.GetAddr(), intrtag, intrthread, arg); + + if (!ih.IsGood()) + { + return CELL_EFAULT; + } + + u32 id = intrtag & 0xff; + u32 class_id = intrtag >> 8; + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + + if (!t || class_id > 2 || class_id == 1) + { + return CELL_ESRCH; + } + + if (!t->m_intrtag[class_id].enabled) + { + return CELL_ESRCH; + } + + if (t->m_intrtag[class_id].thread) // ??? + { + return CELL_ESTAT; + } + + CPUThread* it = Emu.GetCPU().GetThread(intrthread); + if (!it) + { + return CELL_ESRCH; + } + + if (it->m_has_interrupt || !it->m_is_interrupt) + { + return CELL_EAGAIN; + } + + ih = (t->m_intrtag[class_id].thread = intrthread); + it->m_interrupt_arg = arg; + return CELL_OK; +} + +int sys_interrupt_thread_disestablish(u32 ih) +{ + sc_int.Error("sys_interrupt_thread_disestablish(ih=%d)", ih); + + CPUThread* it = Emu.GetCPU().GetThread(ih); + if (!it) + { + return CELL_ESRCH; + } + + if (!it->m_has_interrupt || !it->m_is_interrupt) + { + return CELL_ESRCH; + } + + // TODO: wait for sys_interrupt_thread_eoi() and destroy interrupt thread + + return CELL_OK; +} + +void sys_interrupt_thread_eoi() +{ + sc_int.Log("sys_interrupt_thread_eoi()"); + + GetCurrentPPUThread().Stop(); + return; +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h new file mode 100644 index 0000000000..7b9637ef9c --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h @@ -0,0 +1 @@ +#pragma once \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp index 83316d7e45..5e37196bd8 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp @@ -49,7 +49,7 @@ int sys_ppu_thread_yield() int sys_ppu_thread_join(u64 thread_id, mem64_t vptr) { - sysPrxForUser->Warning("sys_ppu_thread_join(thread_id=%d, vptr_addr=0x%x)", thread_id, vptr.GetAddr()); + sysPrxForUser->Warning("sys_ppu_thread_join(thread_id=%lld, vptr_addr=0x%x)", thread_id, vptr.GetAddr()); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -70,7 +70,7 @@ int sys_ppu_thread_join(u64 thread_id, mem64_t vptr) int sys_ppu_thread_detach(u64 thread_id) { - sysPrxForUser->Error("sys_ppu_thread_detach(thread_id=%d)", thread_id); + sysPrxForUser->Error("sys_ppu_thread_detach(thread_id=%lld)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -90,7 +90,7 @@ void sys_ppu_thread_get_join_state(u32 isjoinable_addr) int sys_ppu_thread_set_priority(u64 thread_id, int prio) { - sysPrxForUser->Log("sys_ppu_thread_set_priority(thread_id=%d, prio=%d)", thread_id, prio); + sysPrxForUser->Log("sys_ppu_thread_set_priority(thread_id=%lld, prio=%d)", thread_id, prio); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -102,7 +102,7 @@ int sys_ppu_thread_set_priority(u64 thread_id, int prio) int sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr) { - sysPrxForUser->Log("sys_ppu_thread_get_priority(thread_id=%d, prio_addr=0x%x)", thread_id, prio_addr); + sysPrxForUser->Log("sys_ppu_thread_get_priority(thread_id=%lld, prio_addr=0x%x)", thread_id, prio_addr); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -129,7 +129,7 @@ int sys_ppu_thread_get_stack_information(u32 info_addr) int sys_ppu_thread_stop(u64 thread_id) { - sysPrxForUser->Warning("sys_ppu_thread_stop(thread_id=%d)", thread_id); + sysPrxForUser->Warning("sys_ppu_thread_stop(thread_id=%lld)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -141,7 +141,7 @@ int sys_ppu_thread_stop(u64 thread_id) int sys_ppu_thread_restart(u64 thread_id) { - sysPrxForUser->Warning("sys_ppu_thread_restart(thread_id=%d)", thread_id); + sysPrxForUser->Warning("sys_ppu_thread_restart(thread_id=%lld)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -158,12 +158,12 @@ int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 s if (Memory.IsGoodAddr(threadname_addr)) { threadname = Memory.ReadString(threadname_addr); - sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", + sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", thread_id.GetAddr(), entry, arg, prio, stacksize, flags, threadname_addr, threadname.c_str()); } else { - sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%x, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x)", + sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x)", thread_id.GetAddr(), entry, arg, prio, stacksize, flags, threadname_addr); if (threadname_addr != 0) return CELL_EFAULT; } @@ -186,7 +186,6 @@ int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 s } case SYS_PPU_THREAD_CREATE_INTERRUPT: { - sysPrxForUser->Error("sys_ppu_thread_create: unimplemented flag (SYS_PPU_THREAD_CREATE_INTERRUPT)"); is_interrupt = true; break; } @@ -201,12 +200,17 @@ int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 s new_thread.SetPrio(prio); new_thread.SetStackSize(stacksize); //new_thread.flags = flags; + new_thread.m_has_interrupt = false; + new_thread.m_is_interrupt = is_interrupt; new_thread.SetName(threadname); ConLog.Write("*** New PPU Thread [%s] (flags=0x%llx, entry=0x%x): id = %d", new_thread.GetName().c_str(), flags, entry, new_thread.GetId()); - new_thread.Run(); - new_thread.Exec(); + if (!is_interrupt) + { + new_thread.Run(); + new_thread.Exec(); + } return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp index 3a4ebb5837..c734990b63 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp @@ -364,20 +364,6 @@ int sys_spu_thread_create(mem32_t thread_id, mem32_t entry, u64 arg, int prio, u return CELL_OK; } -//160 -int sys_raw_spu_create(mem32_t id, u32 attr_addr) -{ - sc_spu.Warning("sys_raw_spu_create(id_addr=0x%x, attr_addr=0x%x)", id.GetAddr(), attr_addr); - - //Emu.GetIdManager().GetNewID("sys_raw_spu", new u32(attr_addr)); - CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_RAW_SPU); - id = ((RawSPUThread&)new_thread).GetIndex(); - new_thread.Run(); - new_thread.Exec(); - - return CELL_OK; -} - //169 int sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu) { @@ -760,3 +746,196 @@ int sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup) return CELL_OK; } + +//160 +int sys_raw_spu_create(mem32_t id, u32 attr_addr) +{ + sc_spu.Warning("sys_raw_spu_create(id_addr=0x%x, attr_addr=0x%x)", id.GetAddr(), attr_addr); + + //Emu.GetIdManager().GetNewID("sys_raw_spu", new u32(attr_addr)); + CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_RAW_SPU); + id = ((RawSPUThread&)new_thread).GetIndex(); + new_thread.Run(); + new_thread.Exec(); + + return CELL_OK; +} + +int sys_raw_spu_destroy(u32 id) +{ + sc_spu.Error("sys_raw_spu_destroy(id=%d)", id); + + return CELL_OK; +} + +int sys_raw_spu_create_interrupt_tag(u32 id, u32 class_id, u32 hwthread, mem32_t intrtag) +{ + sc_spu.Error("sys_raw_spu_create_interrupt_tag(id=%d, class_id=%d, hwthread=0x%x, intrtag_addr=0x%x)", id, class_id, hwthread, intrtag.GetAddr()); + + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + + if (!t) + { + return CELL_ESRCH; + } + + if (class_id != 0 && class_id != 2) + { + return CELL_EINVAL; + } + + if (!intrtag.IsGood()) + { + return CELL_EFAULT; + } + + if (t->m_intrtag[class_id].enabled) + { + return CELL_EAGAIN; + } + + t->m_intrtag[class_id].enabled = 1; + intrtag = (id & 0xff) | (class_id << 8); + + return CELL_OK; +} + +int sys_raw_spu_set_int_mask(u32 id, u32 class_id, u64 mask) +{ + sc_spu.Warning("sys_raw_spu_set_int_mask(id=%d, class_id=%d, mask=0x%llx)", id, class_id, mask); + + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + if (!t) + { + return CELL_ESRCH; + } + + if (class_id != 0 && class_id != 2) + { + return CELL_EINVAL; + } + + t->m_intrtag[class_id].mask = mask; // TODO: check this + return CELL_OK; +} + +int sys_raw_spu_get_int_mask(u32 id, u32 class_id, mem64_t mask) +{ + sc_spu.Log("sys_raw_spu_get_int_mask(id=%d, class_id=%d, mask_addr=0x%x)", id, class_id, mask.GetAddr()); + + if (!mask.IsGood()) + { + return CELL_EFAULT; + } + + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + if (!t) + { + return CELL_ESRCH; + } + + if (class_id != 0 && class_id != 2) + { + return CELL_EINVAL; + } + + mask = t->m_intrtag[class_id].mask; + return CELL_OK; +} + +int sys_raw_spu_set_int_stat(u32 id, u32 class_id, u64 stat) +{ + sc_spu.Log("sys_raw_spu_set_int_stat(id=%d, class_id=%d, stat=0x%llx)", id, class_id, stat); + + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + if (!t) + { + return CELL_ESRCH; + } + + if (class_id != 0 && class_id != 2) + { + return CELL_EINVAL; + } + + t->m_intrtag[class_id].stat = stat; // TODO: check this + return CELL_OK; +} + +int sys_raw_spu_get_int_stat(u32 id, u32 class_id, mem64_t stat) +{ + sc_spu.Log("sys_raw_spu_get_int_stat(id=%d, class_id=%d, stat_addr=0xx)", id, class_id, stat.GetAddr()); + + if (!stat.IsGood()) + { + return CELL_EFAULT; + } + + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + if (!t) + { + return CELL_ESRCH; + } + + if (class_id != 0 && class_id != 2) + { + return CELL_EINVAL; + } + + stat = t->m_intrtag[class_id].stat; + return CELL_OK; +} + +int sys_raw_spu_read_puint_mb(u32 id, mem32_t value) +{ + sc_spu.Log("sys_raw_spu_read_puint_mb(id=%d, value_addr=0x%x)", id, value.GetAddr()); + + if (!value.IsGood()) + { + return CELL_EFAULT; + } + + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + if (!t) + { + return CELL_ESRCH; + } + + u32 v; + t->SPU.Out_IntrMBox.PopUncond(v); + value = v; + return CELL_OK; +} + +int sys_raw_spu_set_spu_cfg(u32 id, u32 value) +{ + sc_spu.Log("sys_raw_spu_set_spu_cfg(id=%d, value=0x%x)", id, value); + + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + if (!t) + { + return CELL_ESRCH; + } + + t->cfg.value = value; + return CELL_OK; +} + +int sys_raw_spu_get_spu_cfg(u32 id, mem32_t value) +{ + sc_spu.Log("sys_raw_spu_get_spu_afg(id=%d, value_addr=0x%x)", id, value.GetAddr()); + + if (!value.IsGood()) + { + return CELL_EFAULT; + } + + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + if (!t) + { + return CELL_ESRCH; + } + + value = t->cfg.value; + return CELL_OK; +} diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 61140cd079..be81c1885c 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -97,6 +97,7 @@ + @@ -315,6 +316,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 7e3284658a..ef24a74336 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -578,6 +578,9 @@ Utilities + + Emu\SysCalls\lv2 + @@ -1048,5 +1051,8 @@ Emu\SysCalls\lv2 + + Emu\SysCalls\lv2 + \ No newline at end of file From 677bc4c553c2d80ddb205a2936b87f9c888f18bd Mon Sep 17 00:00:00 2001 From: raven02 Date: Tue, 24 Jun 2014 00:42:57 +0800 Subject: [PATCH 067/499] RSX: Use blit for MRT as well --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 38 ++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index f2046d10bc..c06a98c5e4 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -17,8 +17,7 @@ gcmBuffer gcmBuffers[8]; GLuint g_flip_tex; GLuint g_depth_tex; -GLuint g_color_pbo[4]; -GLuint g_depth_pbo; +GLuint g_pbo[6]; int last_width = 0, last_height = 0, last_depth_format = 0; @@ -455,7 +454,7 @@ void GLGSRender::WriteDepthBuffer() return; } - glBindBuffer(GL_PIXEL_PACK_BUFFER, g_depth_pbo); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[5]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_DYNAMIC_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); checkForGlError("WriteDepthBuffer(): glReadPixels(GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE)"); @@ -491,7 +490,7 @@ void GLGSRender::WriteColourBufferA() glReadBuffer(GL_COLOR_ATTACHMENT0); checkForGlError("WriteColourBufferA(): glReadBuffer(GL_COLOR_ATTACHMENT0)"); - glBindBuffer(GL_PIXEL_PACK_BUFFER, g_color_pbo[0]); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[0]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColourBufferA(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); @@ -520,7 +519,7 @@ void GLGSRender::WriteColourBufferB() glReadBuffer(GL_COLOR_ATTACHMENT1); checkForGlError("WriteColourBufferB(): glReadBuffer(GL_COLOR_ATTACHMENT1)"); - glBindBuffer(GL_PIXEL_PACK_BUFFER, g_color_pbo[1]); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[1]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColourBufferB(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); @@ -550,7 +549,7 @@ void GLGSRender::WriteColourBufferC() glReadBuffer(GL_COLOR_ATTACHMENT2); checkForGlError("WriteColourBufferC(): glReadBuffer(GL_COLOR_ATTACHMENT2)"); - glBindBuffer(GL_PIXEL_PACK_BUFFER, g_color_pbo[2]); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[2]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColourBufferC(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); @@ -579,7 +578,7 @@ void GLGSRender::WriteColourBufferD() glReadBuffer(GL_COLOR_ATTACHMENT3); checkForGlError("WriteColourBufferD(): glReadBuffer(GL_COLOR_ATTACHMENT3)"); - glBindBuffer(GL_PIXEL_PACK_BUFFER, g_color_pbo[3]); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[3]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColourBufferD(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); @@ -656,8 +655,7 @@ void GLGSRender::OnInitThread() glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); glGenTextures(1, &g_depth_tex); glGenTextures(1, &g_flip_tex); - glGenBuffers(4, g_color_pbo); - glGenBuffers(1, &g_depth_pbo); + glGenBuffers(6, g_pbo); #ifdef _WIN32 glSwapInterval(Ini.GSVSyncEnable.GetValue() ? 1 : 0); @@ -674,8 +672,7 @@ void GLGSRender::OnExitThread() { glDeleteTextures(1, &g_flip_tex); glDeleteTextures(1, &g_depth_tex); - glDeleteBuffers(4, g_color_pbo); - glDeleteBuffers(1, &g_depth_pbo); + glDeleteBuffers(6, g_pbo); m_program.Delete(); m_rbo.Delete(); @@ -791,8 +788,10 @@ void GLGSRender::ExecCMD() m_fbo.Bind(); - if(Ini.GSDumpDepthBuffer.GetValue()) + if (Ini.GSDumpDepthBuffer.GetValue()) + { WriteDepthBuffer(); + } static const GLenum draw_buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 }; @@ -1178,6 +1177,9 @@ void GLGSRender::Flip() { case CELL_GCM_SURFACE_TARGET_0: case CELL_GCM_SURFACE_TARGET_1: + case CELL_GCM_SURFACE_TARGET_MRT1: + case CELL_GCM_SURFACE_TARGET_MRT2: + case CELL_GCM_SURFACE_TARGET_MRT3: { // Fast path for non-MRT using glBlitFramebuffer. GLfbo::Bind(GL_DRAW_FRAMEBUFFER, 0); @@ -1187,9 +1189,6 @@ void GLGSRender::Flip() break; case CELL_GCM_SURFACE_TARGET_NONE: - case CELL_GCM_SURFACE_TARGET_MRT1: - case CELL_GCM_SURFACE_TARGET_MRT2: - case CELL_GCM_SURFACE_TARGET_MRT3: { // Slow path for MRT/None target using glReadPixels. static u8* src_buffer = nullptr; @@ -1220,7 +1219,14 @@ void GLGSRender::Flip() static std::vector pixels; pixels.resize(RSXThread::m_width * RSXThread::m_height * 4); m_fbo.Bind(GL_READ_FRAMEBUFFER); - glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, pixels.data()); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[5]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_width * RSXThread::m_height * 4, 0, GL_STREAM_READ); + glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, 0); + checkForGlError("Flip(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + memcpy(pixels.data(), packed, RSXThread::m_width * RSXThread::m_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); src_buffer = pixels.data(); width = RSXThread::m_width; From eb3e18ac7e31b6c042eb83fb5388f0a08d1d4efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Mon, 23 Jun 2014 19:40:40 +0200 Subject: [PATCH 068/499] Added some lv2 syscalls for sys_prx --- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 15 +- rpcs3/Emu/SysCalls/SysCalls.cpp | 26 ++- rpcs3/Emu/SysCalls/SysCalls.h | 1 + rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp | 190 +++++++++++++++++++ rpcs3/Emu/SysCalls/lv2/SC_PRX.h | 89 +++++++++ rpcs3/emucore.vcxproj | 3 + rpcs3/emucore.vcxproj.filters | 9 + 7 files changed, 323 insertions(+), 10 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp create mode 100644 rpcs3/Emu/SysCalls/lv2/SC_PRX.h diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 7012678dcc..f37464a794 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -47,12 +47,6 @@ int sys_spu_printf_initialize(int a1, int a2, int a3, int a4, int a5) return CELL_OK; } -s64 sys_prx_register_library(u32 lib_addr) -{ - sysPrxForUser->Error("sys_prx_register_library(lib_addr=0x%x)", lib_addr); - return CELL_OK; -} - s64 sys_prx_exitspawn_with_level() { sysPrxForUser->Log("sys_prx_exitspawn_with_level()"); @@ -162,7 +156,16 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0x45fe2fce, sys_spu_printf_initialize); + sysPrxForUser->AddFunc(0x26090058, sys_prx_load_module); + sysPrxForUser->AddFunc(0x9f18429d, sys_prx_start_module); + sysPrxForUser->AddFunc(0x80fb0c19, sys_prx_stop_module); + sysPrxForUser->AddFunc(0xf0aece0d, sys_prx_unload_module); sysPrxForUser->AddFunc(0x42b23552, sys_prx_register_library); + sysPrxForUser->AddFunc(0xd0ea47a7, sys_prx_unregister_library); + sysPrxForUser->AddFunc(0xa5d06bf0, sys_prx_get_module_list); + sysPrxForUser->AddFunc(0x84bb6774, sys_prx_get_module_info); + sysPrxForUser->AddFunc(0xe0998dbf, sys_prx_get_module_id_by_name); + sysPrxForUser->AddFunc(0xaa6d9bff, sys_prx_load_module_on_memcontainer); sysPrxForUser->AddFunc(0xa2c7ba64, sys_prx_exitspawn_with_level); sysPrxForUser->AddFunc(0x2d36462b, sys_strlen); diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index e745ae995b..1c502457c5 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -342,10 +342,28 @@ static func_caller* sc_table[kSyscallTableLength] = null_func, null_func, null_func, null_func, null_func, //469 null_func, null_func, null_func, null_func, null_func, //474 null_func, null_func, null_func, null_func, null_func, //479 - null_func, null_func, null_func, null_func, null_func, //484 - null_func, null_func, null_func, null_func, null_func, //489 - null_func, null_func, null_func, null_func, null_func, //494 - null_func, null_func, null_func, null_func, null_func, //499 + + bind_func(sys_prx_load_module), //480 (0x1E0) + bind_func(sys_prx_start_module), //481 (0x1E1) + bind_func(sys_prx_stop_module), //482 (0x1E2) + bind_func(sys_prx_unload_module), //483 (0x1E3) + bind_func(sys_prx_register_module), //484 (0x1E4) + bind_func(sys_prx_query_module), //485 (0x1E5) + bind_func(sys_prx_register_library), //486 (0x1E6) + bind_func(sys_prx_unregister_library), //487 (0x1E7) + bind_func(sys_prx_link_library), //488 (0x1E8) + bind_func(sys_prx_unlink_library), //489 (0x1E9) + bind_func(sys_prx_query_library), //490 (0x1EA) + null_func, //491 (0x1EB) + null_func, //492 (0x1EC) + null_func,//sys_prx_dbg_get_module_info //493 (0x1ED) + bind_func(sys_prx_get_module_list), //494 (0x1EE) + bind_func(sys_prx_get_module_info), //495 (0x1EF) + bind_func(sys_prx_get_module_id_by_name), //496 (0x1F0) + bind_func(sys_prx_load_module_on_memcontainer), //497 (0x1F1) + bind_func(sys_prx_start), //498 (0x1F2) + bind_func(sys_prx_stop), //499 (0x1F3) + null_func, null_func, null_func, null_func, null_func, //504 null_func, null_func, null_func, null_func, null_func, //509 null_func, null_func, null_func, null_func, null_func, //514 diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 584d9f1aa4..47ec3c25b7 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -1,6 +1,7 @@ #pragma once #include "ErrorCodes.h" #include "lv2/SC_Process.h" +#include "lv2/SC_PRX.h" #include "lv2/SC_FileSystem.h" #include "lv2/SC_Memory.h" #include "lv2/SC_Timer.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp new file mode 100644 index 0000000000..962d67fb37 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp @@ -0,0 +1,190 @@ +#include "stdafx.h" +#include "Emu/ConLog.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/SysCalls.h" +#include "SC_PRX.h" + +SysCallBase sys_prx("sys_prx"); + +s32 sys_prx_load_module(u32 path_addr, u64 flags, mem_ptr_t pOpt) +{ + if (!Memory.IsGoodAddr(path_addr)) + return CELL_PRX_ERROR_INVAL; + + std::string path = Memory.ReadString(path_addr); + sys_prx.Error("TODO: sys_prx_load_module(path=\"%s\", flags=0x%llx, pOpt=0x%x)", path.c_str(), flags, pOpt.GetAddr()); + + vfsFile f(path); + if (!f.IsOpened()) { + return CELL_PRX_ERROR_UNKNOWN_MODULE; + } + + // Load the PRX into memory + u64 prx_size = f.GetSize(); + u32 prx_address = Memory.Alloc(prx_size, 4); + f.Read(Memory.VirtualToRealAddr(prx_address), prx_size); + + // Create the PRX object and return its id + sys_prx_t* prx = new sys_prx_t(prx_size, prx_address); + u32 id = sys_prx.GetNewId(prx); + return id; +} + +s32 sys_prx_load_module_on_memcontainer() +{ + sys_prx.Error("TODO: sys_prx_load_module_on_memcontainer()"); + return CELL_OK; +} + +s32 sys_prx_load_module_by_fd() +{ + sys_prx.Error("TODO: sys_prx_load_module_by_fd()"); + return CELL_OK; +} + +s32 sys_prx_load_module_on_memcontainer_by_fd() +{ + sys_prx.Error("TODO: sys_prx_load_module_on_memcontainer_by_fd()"); + return CELL_OK; +} + +s32 sys_prx_start_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 flags, mem_ptr_t pOpt) +{ + sys_prx.Error("TODO: sys_prx_start_module(id=%d, args=%d, argp_addr=0x%x, modres_addr=0x%x, flags=0x%llx, pOpt=0x%x)", + id, args, argp_addr, modres.GetAddr(), flags, pOpt.GetAddr()); + + if (!modres.IsGood()) + return CELL_EINVAL; + + sys_prx_t* prx; + if (!Emu.GetIdManager().GetIDData(id, prx)) + return CELL_ESRCH; + + if (prx->isStarted) + return CELL_PRX_ERROR_ALREADY_STARTED; + + return CELL_OK; +} + +s32 sys_prx_stop_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 flags, mem_ptr_t pOpt) +{ + sys_prx.Error("TODO: sys_prx_stop_module(id=%d, args=%d, argp_addr=0x%x, modres_addr=0x%x, flags=0x%llx, pOpt=0x%x)", + id, args, argp_addr, modres.GetAddr(), flags, pOpt.GetAddr()); + + if (!modres.IsGood()) + return CELL_EINVAL; + + sys_prx_t* prx; + if (!Emu.GetIdManager().GetIDData(id, prx)) + return CELL_ESRCH; + + if (!prx->isStarted) + return CELL_PRX_ERROR_ALREADY_STOPPED; + + return CELL_OK; +} + +s32 sys_prx_unload_module(s32 id, u64 flags, mem_ptr_t pOpt) +{ + sys_prx.Error("TODO: sys_prx_unload_module(id=%d, flags=0x%llx, pOpt=0x%x)", id, flags, pOpt.GetAddr()); + + // Get the PRX, free the used memory and delete the object and its ID + sys_prx_t* prx; + if (!Emu.GetIdManager().GetIDData(id, prx)) + return CELL_ESRCH; + Memory.Free(prx->address); + Emu.GetIdManager().RemoveID(id); + + return CELL_OK; +} + +s32 sys_prx_get_module_list() +{ + sys_prx.Error("TODO: sys_prx_get_module_list()"); + return CELL_OK; +} + +s32 sys_prx_get_my_module_id() +{ + sys_prx.Error("TODO: sys_prx_get_my_module_id()"); + return CELL_OK; +} + +s32 sys_prx_get_module_id_by_address() +{ + sys_prx.Error("TODO: sys_prx_get_module_id_by_address()"); + return CELL_OK; +} + +s32 sys_prx_get_module_id_by_name() +{ + sys_prx.Error("TODO: sys_prx_get_module_id_by_name()"); + return CELL_OK; +} + +s32 sys_prx_get_module_info() +{ + sys_prx.Error("TODO: sys_prx_get_module_info()"); + return CELL_OK; +} + +s32 sys_prx_register_library(u32 lib_addr) +{ + sys_prx.Error("TODO: sys_prx_register_library(lib_addr=0x%x)", lib_addr); + return CELL_OK; +} + +s32 sys_prx_unregister_library() +{ + sys_prx.Error("TODO: sys_prx_unregister_library()"); + return CELL_OK; +} + +s32 sys_prx_get_ppu_guid() +{ + sys_prx.Error("TODO: sys_prx_get_ppu_guid()"); + return CELL_OK; +} + +s32 sys_prx_register_module() +{ + sys_prx.Error("TODO: sys_prx_register_module()"); + return CELL_OK; +} + +s32 sys_prx_query_module() +{ + sys_prx.Error("TODO: sys_prx_query_module()"); + return CELL_OK; +} + +s32 sys_prx_link_library() +{ + sys_prx.Error("TODO: sys_prx_link_library()"); + return CELL_OK; +} + +s32 sys_prx_unlink_library() +{ + sys_prx.Error("TODO: sys_prx_unlink_library()"); + return CELL_OK; +} + +s32 sys_prx_query_library() +{ + sys_prx.Error("TODO: sys_prx_query_library()"); + return CELL_OK; +} + +s32 sys_prx_start() +{ + sys_prx.Error("TODO: sys_prx_start()"); + return CELL_OK; +} + +s32 sys_prx_stop() +{ + sys_prx.Error("TODO: sys_prx_stop()"); + return CELL_OK; +} diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PRX.h b/rpcs3/Emu/SysCalls/lv2/SC_PRX.h new file mode 100644 index 0000000000..523ccc82cc --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/SC_PRX.h @@ -0,0 +1,89 @@ +#pragma once + +// Return codes +enum +{ + CELL_PRX_ERROR_ERROR = 0x80011001, // Error state + CELL_PRX_ERROR_ILLEGAL_PERM = 0x800110d1, // No permission to execute API + CELL_PRX_ERROR_UNKNOWN_MODULE = 0x8001112e, // Specified PRX could not be found + CELL_PRX_ERROR_ALREADY_STARTED = 0x80011133, // Specified PRX is already started + CELL_PRX_ERROR_NOT_STARTED = 0x80011134, // Specified PRX is not started + CELL_PRX_ERROR_ALREADY_STOPPED = 0x80011135, // Specified PRX is already stopped + CELL_PRX_ERROR_CAN_NOT_STOP = 0x80011136, // Specified PRX must not be stopped + CELL_PRX_ERROR_NOT_REMOVABLE = 0x80011138, // Specified PRX must not be deleted + CELL_PRX_ERROR_LIBRARY_NOT_YET_LINKED = 0x8001113a, // Called unlinked function + CELL_PRX_ERROR_LIBRARY_FOUND = 0x8001113b, // Specified library is already registered + CELL_PRX_ERROR_LIBRARY_NOTFOUND = 0x8001113c, // Specified library is not registered + CELL_PRX_ERROR_ILLEGAL_LIBRARY = 0x8001113d, // Library structure is invalid + CELL_PRX_ERROR_LIBRARY_INUSE = 0x8001113e, // Library cannot be deleted because it is linked + CELL_PRX_ERROR_ALREADY_STOPPING = 0x8001113f, // Specified PRX is in the process of stopping + CELL_PRX_ERROR_UNSUPPORTED_PRX_TYPE = 0x80011148, // Specified PRX format is invalid and cannot be loaded + CELL_PRX_ERROR_INVAL = 0x80011324, // Argument value is invalid + CELL_PRX_ERROR_ILLEGAL_PROCESS = 0x80011801, // Specified process does not exist + CELL_PRX_ERROR_NO_LIBLV2 = 0x80011881, // liblv2.sprx does not exist + CELL_PRX_ERROR_UNSUPPORTED_ELF_TYPE = 0x80011901, // ELF type of specified file is not supported + CELL_PRX_ERROR_UNSUPPORTED_ELF_CLASS = 0x80011902, // ELF class of specified file is not supported + CELL_PRX_ERROR_UNDEFINED_SYMBOL = 0x80011904, // References undefined symbols + CELL_PRX_ERROR_UNSUPPORTED_RELOCATION_TYPE = 0x80011905, // Uses unsupported relocation type + CELL_PRX_ERROR_ELF_IS_REGISTERED = 0x80011910, // Fixed ELF is already registered +}; + +// Data types +struct sys_prx_load_module_option_t +{ + be_t size; + be_t base_addr; // void* +}; + +struct sys_prx_start_module_option_t +{ + be_t size; +}; + +struct sys_prx_stop_module_option_t +{ + be_t size; +}; + +struct sys_prx_unload_module_option_t +{ + be_t size; +}; + +// Auxiliary data types +struct sys_prx_t { + u32 size; + u32 address; + bool isStarted; + + sys_prx_t(u32 prx_size, u32 prx_address) + : size(prx_size) + , address(prx_address) + , isStarted(false) + { + } +}; + +// SysCalls +s32 sys_prx_load_module(u32 path_addr, u64 flags, mem_ptr_t pOpt); +s32 sys_prx_load_module_on_memcontainer(); +s32 sys_prx_load_module_by_fd(); +s32 sys_prx_load_module_on_memcontainer_by_fd(); +s32 sys_prx_start_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 flags, mem_ptr_t pOpt); +s32 sys_prx_stop_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 flags, mem_ptr_t pOpt); +s32 sys_prx_unload_module(s32 id, u64 flags, mem_ptr_t pOpt); +s32 sys_prx_get_module_list(); +s32 sys_prx_get_my_module_id(); +s32 sys_prx_get_module_id_by_address(); +s32 sys_prx_get_module_id_by_name(); +s32 sys_prx_get_module_info(); +s32 sys_prx_register_library(u32 lib_addr); +s32 sys_prx_unregister_library(); +s32 sys_prx_get_ppu_guid(); +s32 sys_prx_register_module(); +s32 sys_prx_query_module(); +s32 sys_prx_link_library(); +s32 sys_prx_unlink_library(); +s32 sys_prx_query_library(); +s32 sys_prx_start(); +s32 sys_prx_stop(); diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index be81c1885c..fde02246a6 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -107,6 +107,7 @@ + @@ -321,6 +322,8 @@ + + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index ef24a74336..398e3f933e 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -581,6 +581,9 @@ Emu\SysCalls\lv2 + + Emu\SysCalls\lv2 + @@ -1054,5 +1057,11 @@ Emu\SysCalls\lv2 + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + \ No newline at end of file From 6f3b3f11c8870f6b63eaa12cbb576f9bb446eb4d Mon Sep 17 00:00:00 2001 From: raven02 Date: Tue, 24 Jun 2014 23:03:27 +0800 Subject: [PATCH 069/499] Gameviewer : fix wrong category --- rpcs3/Gui/GameViewer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 5b2062a908..0f9732b912 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -158,9 +158,9 @@ void GameViewer::LoadPSF() if(game.serial.length() == 9) game.serial = game.serial.substr(0, 4) + "-" + game.serial.substr(4, 5); - if (game.category.find("HG")) + if (game.category.substr(0, 2) == "HG") game.category = "HDD Game"; - else if (game.category.find("DG")) + else if (game.category.substr(0, 2) == "DG") game.category = "Disc Game"; m_game_data.push_back(game); From 2200e6f4d9eb79d96c89660ec1ace4aa464cd88b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 25 Jun 2014 02:16:44 +0400 Subject: [PATCH 070/499] Small fixes --- Utilities/SSemaphore.cpp | 36 ++++++---- Utilities/SSemaphore.h | 8 ++- rpcs3/Emu/Cell/RawSPUThread.h | 30 --------- rpcs3/Emu/Cell/SPUThread.h | 87 ++++++++++++++++++++++--- rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp | 4 +- 5 files changed, 110 insertions(+), 55 deletions(-) diff --git a/Utilities/SSemaphore.cpp b/Utilities/SSemaphore.cpp index 60c0331971..ec23211dd6 100644 --- a/Utilities/SSemaphore.cpp +++ b/Utilities/SSemaphore.cpp @@ -1,29 +1,38 @@ #include "stdafx.h" #include "Utilities/SSemaphore.h" -bool SSemaphore::wait(u64 timeout) +void SSemaphore::wait() { - std::unique_lock lock(m_cv_mutex); + u32 order; + { + std::lock_guard lock(m_mutex); + order = m_in_order++; + } + + std::unique_lock cv_lock(m_cv_mutex); - u64 counter = 0; while (true) { if (Emu.IsStopped()) { - return false; + return; } - if (timeout && counter >= timeout) - { - return false; - } - m_cond.wait_for(lock, std::chrono::milliseconds(1)); - counter++; + + m_cond.wait_for(cv_lock, std::chrono::milliseconds(1)); std::lock_guard lock(m_mutex); if (m_count) { - m_count--; - return true; + if (m_out_order == order) + { + m_count--; + m_out_order++; + return; + } + else + { + m_cond.notify_one(); + } } } } @@ -32,7 +41,8 @@ bool SSemaphore::try_wait() { std::lock_guard lock(m_mutex); - if (m_count) + // TODO: ordering? + if (m_count && m_in_order == m_out_order) { m_count--; return true; diff --git a/Utilities/SSemaphore.h b/Utilities/SSemaphore.h index 4c96a9c5a3..890b445d91 100644 --- a/Utilities/SSemaphore.h +++ b/Utilities/SSemaphore.h @@ -4,6 +4,8 @@ class SSemaphore { const u32 m_max; u32 m_count; + u32 m_in_order; + u32 m_out_order; std::mutex m_mutex, m_cv_mutex; std::condition_variable m_cond; @@ -11,12 +13,16 @@ public: SSemaphore(u32 value, u32 max = 1) : m_max(max > 0 ? max : 0xffffffff) , m_count(value > m_max ? m_max : value) + , m_in_order(0) + , m_out_order(0) { } SSemaphore() : m_max(0xffffffff) , m_count(0) + , m_in_order(0) + , m_out_order(0) { } @@ -24,7 +30,7 @@ public: { } - bool wait(u64 timeout = 0); + void wait(); bool try_wait(); diff --git a/rpcs3/Emu/Cell/RawSPUThread.h b/rpcs3/Emu/Cell/RawSPUThread.h index 51164dfad6..78a3bb297d 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.h +++ b/rpcs3/Emu/Cell/RawSPUThread.h @@ -2,36 +2,6 @@ #include "SPUThread.h" #include "Emu/event.h" -enum -{ - MFC_LSA_offs = 0x3004, - MFC_EAH_offs = 0x3008, - MFC_EAL_offs = 0x300C, - MFC_Size_Tag_offs = 0x3010, - MFC_Class_CMD_offs = 0x3014, - MFC_CMDStatus_offs = 0x3014, - MFC_QStatus_offs = 0x3104, - Prxy_QueryType_offs = 0x3204, - Prxy_QueryMask_offs = 0x321C, - Prxy_TagStatus_offs = 0x322C, - SPU_Out_MBox_offs = 0x4004, - SPU_In_MBox_offs = 0x400C, - SPU_MBox_Status_offs = 0x4014, - SPU_RunCntl_offs = 0x401C, - SPU_Status_offs = 0x4024, - SPU_NPC_offs = 0x4034, - SPU_RdSigNotify1_offs = 0x1400C, - SPU_RdSigNotify2_offs = 0x1C00C, -}; - -enum : u64 -{ - RAW_SPU_OFFSET = 0x0000000000100000, - RAW_SPU_BASE_ADDR = 0x00000000E0000000, - RAW_SPU_LS_OFFSET = 0x0000000000000000, - RAW_SPU_PROB_OFFSET = 0x0000000000040000, -}; - __forceinline static u32 GetRawSPURegAddrByNum(int num, int offset) { return RAW_SPU_OFFSET * num + RAW_SPU_BASE_ADDR + RAW_SPU_PROB_OFFSET + offset; diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index aa6d8d33a4..8a789cee2a 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -129,6 +129,36 @@ enum : u32 SYS_SPU_THREAD_SNR2 = 0x05C00c, }; +enum +{ + MFC_LSA_offs = 0x3004, + MFC_EAH_offs = 0x3008, + MFC_EAL_offs = 0x300C, + MFC_Size_Tag_offs = 0x3010, + MFC_Class_CMD_offs = 0x3014, + MFC_CMDStatus_offs = 0x3014, + MFC_QStatus_offs = 0x3104, + Prxy_QueryType_offs = 0x3204, + Prxy_QueryMask_offs = 0x321C, + Prxy_TagStatus_offs = 0x322C, + SPU_Out_MBox_offs = 0x4004, + SPU_In_MBox_offs = 0x400C, + SPU_MBox_Status_offs = 0x4014, + SPU_RunCntl_offs = 0x401C, + SPU_Status_offs = 0x4024, + SPU_NPC_offs = 0x4034, + SPU_RdSigNotify1_offs = 0x1400C, + SPU_RdSigNotify2_offs = 0x1C00C, +}; + +enum : u64 +{ + RAW_SPU_OFFSET = 0x0000000000100000, + RAW_SPU_BASE_ADDR = 0x00000000E0000000, + RAW_SPU_LS_OFFSET = 0x0000000000000000, + RAW_SPU_PROB_OFFSET = 0x0000000000040000, +}; + //Floating point status and control register. Unsure if this is one of the GPRs or SPRs //Is 128 bits, but bits 0-19, 24-28, 32-49, 56-60, 64-81, 88-92, 96-115, 120-124 are unused class FPSCR @@ -598,26 +628,65 @@ public: return false; } } - - //Sleep(1); // hack - - switch(cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK | MFC_RESULT_MASK)) + else if (ea >= RAW_SPU_BASE_ADDR && size == 4) { - case MFC_PUT_CMD: + switch (cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK | MFC_RESULT_MASK)) { - return Memory.Copy(ea, dmac.ls_offset + lsa, size); + case MFC_PUT_CMD: + { + Memory.Write32(ea, ReadLS32(lsa)); + return true; } - case MFC_GET_CMD: + case MFC_GET_CMD: { - return Memory.Copy(dmac.ls_offset + lsa, ea, size); + WriteLS32(lsa, Memory.Read32(ea)); + return true; } - default: + default: { ConLog.Error("DMAC::ProcessCmd(): Unknown DMA cmd."); return false; } + } + } + + //Sleep(1); // hack + + switch (cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK | MFC_RESULT_MASK)) + { + case MFC_PUT_CMD: + { + if (Memory.Copy(ea, dmac.ls_offset + lsa, size)) + { + return true; + } + else + { + ConLog.Error("DMAC::ProcessCmd(): PUT* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); + return false; // TODO: page fault (?) + } + } + + case MFC_GET_CMD: + { + if (Memory.Copy(dmac.ls_offset + lsa, ea, size)) + { + return true; + } + else + { + ConLog.Error("DMAC::ProcessCmd(): GET* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); + return false; // TODO: page fault (?) + } + } + + default: + { + ConLog.Error("DMAC::ProcessCmd(): Unknown DMA cmd."); + return false; // ??? + } } } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp index 78e5a22a36..95573ba690 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp @@ -13,7 +13,7 @@ static SysCallBase sc_int("sys_interrupt"); int sys_interrupt_tag_destroy(u32 intrtag) { - sc_int.Error("sys_interrupt_tag_destroy(intrtag=%d)", intrtag); + sc_int.Warning("sys_interrupt_tag_destroy(intrtag=%d)", intrtag); u32 id = intrtag & 0xff; u32 class_id = intrtag >> 8; @@ -40,7 +40,7 @@ int sys_interrupt_tag_destroy(u32 intrtag) int sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 arg) { - sc_int.Error("sys_interrupt_thread_establish(ih_addr=0x%x, intrtag=%d, intrthread=%lld, arg=0x%llx)", ih.GetAddr(), intrtag, intrthread, arg); + sc_int.Warning("sys_interrupt_thread_establish(ih_addr=0x%x, intrtag=%d, intrthread=%lld, arg=0x%llx)", ih.GetAddr(), intrtag, intrthread, arg); if (!ih.IsGood()) { From eb7128bcc1d07dc2fb4e8a146f4bd4e29100adf9 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 26 Jun 2014 00:10:17 +0800 Subject: [PATCH 071/499] Log error when flag 0x3c/0x3d EDAT files detected --- rpcs3/Crypto/unedat.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index f16525c7c7..ea8c9bab5f 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -156,6 +156,12 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, int length = 0; int compression_end = 0; + if ((edat->flags & EDAT_FLAG_0x3C) != 0 || (edat->flags & EDAT_FLAG_0x3D) != 0) + { + ConLog.Error("EDAT: Flag 0x3C/0x3D EDAT files are unsupported yet"); + return -1; + } + if ((edat->flags & EDAT_COMPRESSED_FLAG) != 0) { unsigned char metadata[0x20]; From 0ed518a85d08b83133d155912cdb3944989684e8 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 26 Jun 2014 00:11:10 +0800 Subject: [PATCH 072/499] Add EDAT_FLAG_0x3C/0x3D --- rpcs3/Crypto/unedat.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rpcs3/Crypto/unedat.h b/rpcs3/Crypto/unedat.h index 01ce706f3f..4d60949790 100644 --- a/rpcs3/Crypto/unedat.h +++ b/rpcs3/Crypto/unedat.h @@ -9,6 +9,8 @@ #define EDAT_FLAG_0x10 0x00000010 #define EDAT_FLAG_0x20 0x00000020 #define EDAT_DEBUG_DATA_FLAG 0x80000000 +#define EDAT_FLAG_0x3C 0x0000003C +#define EDAT_FLAG_0x3D 0x0000003D typedef struct { @@ -31,4 +33,4 @@ typedef struct unsigned long long file_size; } EDAT_SDAT_HEADER; -int DecryptEDAT(const std::string& input_file_name, const std::string& output_file_name, int mode, const std::string& rap_file_name, unsigned char *custom_klic, bool verbose); \ No newline at end of file +int DecryptEDAT(const std::string& input_file_name, const std::string& output_file_name, int mode, const std::string& rap_file_name, unsigned char *custom_klic, bool verbose); From eca7339a67e38f70ee9992f061ff81bfee220832 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 26 Jun 2014 01:59:23 +0400 Subject: [PATCH 073/499] Some freezing fixed --- Utilities/SSemaphore.cpp | 41 ++++++++++++++--------- Utilities/SSemaphore.h | 3 +- rpcs3/Emu/GS/RSXThread.cpp | 5 +++ rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 4 ++- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp | 3 +- 6 files changed, 38 insertions(+), 20 deletions(-) diff --git a/Utilities/SSemaphore.cpp b/Utilities/SSemaphore.cpp index ec23211dd6..47e9c76079 100644 --- a/Utilities/SSemaphore.cpp +++ b/Utilities/SSemaphore.cpp @@ -6,6 +6,11 @@ void SSemaphore::wait() u32 order; { std::lock_guard lock(m_mutex); + if (m_count && m_out_order == m_in_order) + { + m_count--; + return; + } order = m_in_order++; } @@ -17,21 +22,23 @@ void SSemaphore::wait() { return; } - - m_cond.wait_for(cv_lock, std::chrono::milliseconds(1)); - std::lock_guard lock(m_mutex); - if (m_count) + m_cond.wait_for(cv_lock, std::chrono::milliseconds(1)); + { - if (m_out_order == order) + std::lock_guard lock(m_mutex); + if (m_count) { - m_count--; - m_out_order++; - return; - } - else - { - m_cond.notify_one(); + if (m_out_order == order) + { + m_count--; + m_out_order++; + return; + } + else + { + m_cond.notify_one(); + } } } } @@ -41,7 +48,6 @@ bool SSemaphore::try_wait() { std::lock_guard lock(m_mutex); - // TODO: ordering? if (m_count && m_in_order == m_out_order) { m_count--; @@ -57,18 +63,21 @@ void SSemaphore::post() { std::lock_guard lock(m_mutex); - if (m_count >= m_max) + if (m_count < m_max) + { + m_count++; + } + else { return; } - m_count++; m_cond.notify_one(); } bool SSemaphore::post_and_wait() { - // TODO: ??? + // TODO: merge these functions? Probably has a race condition. if (try_wait()) return false; post(); diff --git a/Utilities/SSemaphore.h b/Utilities/SSemaphore.h index 890b445d91..2e61262959 100644 --- a/Utilities/SSemaphore.h +++ b/Utilities/SSemaphore.h @@ -6,7 +6,8 @@ class SSemaphore u32 m_count; u32 m_in_order; u32 m_out_order; - std::mutex m_mutex, m_cv_mutex; + std::mutex m_cv_mutex; + std::mutex m_mutex; std::condition_variable m_cond; public: diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 268eb8cf1d..a8b2d853e4 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1882,8 +1882,13 @@ void RSXThread::Task() inc=1; u32 put, get; + // this code produces only mov + bswap: se_t::func(put, std::atomic_load((volatile std::atomic*)((u8*)m_ctrl + offsetof(CellGcmControl, put)))); se_t::func(get, std::atomic_load((volatile std::atomic*)((u8*)m_ctrl + offsetof(CellGcmControl, get)))); + /* + se_t::func(put, InterlockedCompareExchange((volatile unsigned long*)((u8*)m_ctrl + offsetof(CellGcmControl, put)), 0, 0)); + se_t::func(get, InterlockedCompareExchange((volatile unsigned long*)((u8*)m_ctrl + offsetof(CellGcmControl, get)), 0, 0)); + */ if(put == get || !Emu.IsRunning()) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index ee394c5254..2ecab1dab9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -471,7 +471,7 @@ int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) return CELL_GCM_ERROR_FAILURE; } - GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); // could freeze on exit + GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); u32 current = ctxt->current; u32 end = ctxt->end; @@ -488,6 +488,8 @@ int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) if(res > 0) Memory.Copy(ctxt->begin, ctxt->current - res, res); ctxt->current = ctxt->begin + res; + + //InterlockedExchange64((volatile long long*)((u8*)&ctrl + offsetof(CellGcmControl, put)), (u64)(u32)re(res)); ctrl.put = res; ctrl.get = 0; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index aaa1a464f8..7ba35d2e92 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -802,7 +802,7 @@ int cellRescSetConvertAndFlip(mem_ptr_t cntxt, s32 idx) int cellRescSetWaitFlip() { cellResc->Log("cellRescSetWaitFlip()"); - GSLockCurrent lock(GS_LOCK_WAIT_FLIP); // could stall on exit + GSLockCurrent lock(GS_LOCK_WAIT_FLIP); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp index 53767cdb94..c81b3e9e45 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp @@ -13,7 +13,7 @@ extern gcmInfo gcm_info; int cellGcmCallback(u32 context_addr, u32 count) { - GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); // could freeze on exit + GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); CellGcmContextData& ctx = (CellGcmContextData&)Memory[context_addr]; CellGcmControl& ctrl = (CellGcmControl&)Memory[gcm_info.control_addr]; @@ -24,6 +24,7 @@ int cellGcmCallback(u32 context_addr, u32 count) ctx.current = ctx.begin + res; + //InterlockedExchange64((volatile long long*)((u8*)&ctrl + offsetof(CellGcmControl, put)), (u64)(u32)re(res)); ctrl.put = res; ctrl.get = 0; From 458322e548c09926b5ad5a8a3f1d3533df75be56 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 26 Jun 2014 18:17:07 +0400 Subject: [PATCH 074/499] SC_Event_flag: test passed --- rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp index 02d551dbab..83d1fdbec7 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp @@ -142,8 +142,6 @@ int sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 { SMutexLocker lock(ef->m_mutex); - ef->signal.unlock(tid); - u64 flags = ef->flags; for (u32 i = 0; i < ef->waiters.size(); i++) @@ -161,6 +159,17 @@ int sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 ef->flags = 0; } + if (u32 target = ef->check()) + { + // if signal, leave both mutexes locked... + ef->signal.unlock(tid, target); + ef->m_mutex.unlock(tid, target); + } + else + { + ef->signal.unlock(tid); + } + if (result.IsGood()) { result = flags; @@ -175,6 +184,7 @@ int sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 } } + ef->signal.unlock(tid); return CELL_ECANCELED; } From 21da317453b45c3aa4e765c3e980164fb8ac9b1e Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Tue, 17 Jun 2014 17:44:03 +0200 Subject: [PATCH 075/499] Logging system rework * use one central unified log with channels/priorities ad-hoc listener registration and de-registration * disable buffering by default * add multi-threaded ringbuffer implementation * use buffered listener for the gui (using the ringbuffer) --- Utilities/Log.cpp | 225 +++++++++++++ Utilities/Log.h | 139 ++++++++ Utilities/MTRingbuffer.h | 159 +++++++++ Utilities/SMutex.cpp | 2 +- Utilities/SMutex.h | 2 +- Utilities/StrFmt.h | 1 + Utilities/Thread.cpp | 4 +- Utilities/rFile.cpp | 2 +- rpcs3/Crypto/unedat.cpp | 88 ++--- rpcs3/Crypto/unpkg.cpp | 18 +- rpcs3/Crypto/unself.cpp | 98 +++--- rpcs3/Crypto/unself.h | 122 +++---- rpcs3/Emu/ARMv7/ARMv7Interpreter.h | 6 +- rpcs3/Emu/ARMv7/ARMv7Thread.cpp | 2 +- rpcs3/Emu/Audio/AL/OpenALThread.cpp | 8 +- rpcs3/Emu/CPU/CPUThread.cpp | 20 +- rpcs3/Emu/CPU/CPUThreadManager.cpp | 2 +- rpcs3/Emu/Cell/MFC.h | 16 +- rpcs3/Emu/Cell/PPCDecoder.cpp | 2 +- rpcs3/Emu/Cell/PPCThread.cpp | 2 +- rpcs3/Emu/Cell/PPUInterpreter.h | 44 +-- rpcs3/Emu/Cell/PPUProgramCompiler.cpp | 2 +- rpcs3/Emu/Cell/PPUThread.cpp | 8 +- rpcs3/Emu/Cell/RawSPUThread.cpp | 94 +++--- rpcs3/Emu/Cell/SPUInterpreter.h | 26 +- rpcs3/Emu/Cell/SPURecompiler.h | 2 +- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 14 +- rpcs3/Emu/Cell/SPUThread.cpp | 4 +- rpcs3/Emu/Cell/SPUThread.h | 92 +++--- rpcs3/Emu/ConLog.h | 44 --- rpcs3/Emu/DbgConsole.cpp | 97 ------ rpcs3/Emu/DbgConsole.h | 93 ------ rpcs3/Emu/Event.cpp | 2 +- rpcs3/Emu/FS/VFS.cpp | 2 +- rpcs3/Emu/FS/vfsDir.cpp | 2 +- rpcs3/Emu/FS/vfsFile.cpp | 2 +- rpcs3/Emu/FS/vfsLocalFile.cpp | 6 +- rpcs3/Emu/FS/vfsStreamMemory.cpp | 2 +- rpcs3/Emu/GS/GL/GLBuffers.cpp | 2 +- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 16 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 42 +-- rpcs3/Emu/GS/GL/GLGSRender.h | 6 +- rpcs3/Emu/GS/GL/GLProgram.cpp | 8 +- rpcs3/Emu/GS/GL/GLProgramBuffer.cpp | 42 +-- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 22 +- rpcs3/Emu/GS/GL/OpenGL.cpp | 6 +- rpcs3/Emu/GS/GSManager.cpp | 2 +- rpcs3/Emu/GS/GSRender.cpp | 2 +- rpcs3/Emu/GS/RSXTexture.cpp | 2 +- rpcs3/Emu/GS/RSXThread.cpp | 130 ++++---- rpcs3/Emu/HDD/HDD.cpp | 2 +- rpcs3/Emu/HDD/HDD.h | 10 +- rpcs3/Emu/Io/Keyboard.cpp | 2 +- rpcs3/Emu/Io/Mouse.cpp | 2 +- rpcs3/Emu/Io/Pad.cpp | 2 +- rpcs3/Emu/Io/XInput/XInputPadHandler.cpp | 4 +- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 6 +- rpcs3/Emu/Memory/Memory.cpp | 22 +- rpcs3/Emu/Memory/Memory.h | 18 +- rpcs3/Emu/Memory/MemoryBlock.h | 2 +- rpcs3/Emu/SysCalls/Callback.cpp | 8 +- rpcs3/Emu/SysCalls/FuncList.cpp | 6 +- rpcs3/Emu/SysCalls/Modules.cpp | 14 +- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 68 ++-- rpcs3/Emu/SysCalls/Modules/cellAdec.h | 6 +- rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 22 +- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 48 +-- rpcs3/Emu/SysCalls/Modules/cellDmux.h | 38 +-- rpcs3/Emu/SysCalls/Modules/cellFont.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellRtc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp | 2 +- .../SysCalls/Modules/cellSysutil_SaveData.cpp | 36 +- rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 58 ++-- rpcs3/Emu/SysCalls/Modules/cellVdec.h | 8 +- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 20 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/sys_io.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/sys_net.cpp | 2 +- rpcs3/Emu/SysCalls/Static.cpp | 20 +- rpcs3/Emu/SysCalls/SysCalls.cpp | 12 +- rpcs3/Emu/SysCalls/SysCalls.h | 12 +- rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp | 12 +- rpcs3/Emu/SysCalls/lv2/SC_Event.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp | 10 +- rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Mutex.h | 4 +- rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Process.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp | 10 +- rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp | 16 +- rpcs3/Emu/SysCalls/lv2/SC_Time.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_VM.cpp | 2 +- rpcs3/Emu/System.cpp | 44 +-- rpcs3/Emu/System.h | 2 - rpcs3/Gui/CompilerELF.cpp | 2 +- rpcs3/Gui/ConLog.cpp | 311 +++++++----------- rpcs3/Gui/ConLogFrame.h | 15 +- rpcs3/Gui/Debugger.cpp | 2 +- rpcs3/Gui/DisAsmFrame.cpp | 18 +- rpcs3/Gui/FnIdGenerator.cpp | 6 +- rpcs3/Gui/GameViewer.cpp | 8 +- rpcs3/Gui/GameViewer.h | 6 +- rpcs3/Gui/InterpreterDisAsm.cpp | 2 +- rpcs3/Gui/MainFrame.cpp | 18 +- rpcs3/Gui/MainFrame.h | 1 + rpcs3/Gui/MemoryViewer.cpp | 2 +- rpcs3/Gui/PADManager.cpp | 10 +- rpcs3/Gui/Plugins.h | 2 +- rpcs3/Gui/RSXDebugger.cpp | 2 +- rpcs3/Gui/VFSManager.cpp | 2 +- rpcs3/Gui/VHDDManager.cpp | 6 +- rpcs3/Loader/ELF32.cpp | 47 +-- rpcs3/Loader/ELF32.h | 74 ++--- rpcs3/Loader/ELF64.cpp | 101 +++--- rpcs3/Loader/ELF64.h | 74 ++--- rpcs3/Loader/Loader.cpp | 6 +- rpcs3/Loader/PKG.cpp | 12 +- rpcs3/Loader/PSF.cpp | 4 +- rpcs3/Loader/SELF.cpp | 6 +- rpcs3/Loader/SELF.h | 34 +- rpcs3/Loader/TROPUSR.cpp | 6 +- rpcs3/Loader/TRP.cpp | 6 +- rpcs3/emucore.vcxproj | 3 + rpcs3/emucore.vcxproj.filters | 9 + rpcs3/rpcs3.cpp | 4 +- rpcs3/rpcs3.vcxproj | 4 +- rpcs3/rpcs3.vcxproj.filters | 10 +- rpcs3/stdafx.h | 7 +- 165 files changed, 1731 insertions(+), 1519 deletions(-) create mode 100644 Utilities/Log.cpp create mode 100644 Utilities/Log.h create mode 100644 Utilities/MTRingbuffer.h delete mode 100644 rpcs3/Emu/ConLog.h delete mode 100644 rpcs3/Emu/DbgConsole.cpp delete mode 100644 rpcs3/Emu/DbgConsole.h diff --git a/Utilities/Log.cpp b/Utilities/Log.cpp new file mode 100644 index 0000000000..f4e0cdbdd2 --- /dev/null +++ b/Utilities/Log.cpp @@ -0,0 +1,225 @@ +#include "stdafx.h" +#include "Log.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Log; + +LogManager *gLogManager = nullptr; + +u32 LogMessage::size() +{ + //1 byte for NULL terminator + return sizeof(LogMessage::size_type) + sizeof(LogType) + sizeof(LogSeverity) + sizeof(std::string::value_type)*mText.size() + 1; +} + +void LogMessage::serialize(char *output) +{ + LogMessage::size_type size = this->size(); + memcpy(output, &size, sizeof(LogMessage::size_type)); + output += sizeof(LogMessage::size_type); + memcpy(output, &mType, sizeof(LogType)); + output += sizeof(LogType); + memcpy(output, &mServerity, sizeof(LogSeverity)); + output += sizeof(LogSeverity); + memcpy(output, mText.c_str(), mText.size() ); + output += sizeof(std::string::value_type)*mText.size(); + *output = '\0'; + +} +LogMessage LogMessage::deserialize(char *input, u32* size_out) +{ + LogMessage msg; + LogMessage::size_type msgSize = *(reinterpret_cast(input)); + input += sizeof(LogMessage::size_type); + msg.mType = *(reinterpret_cast(input)); + input += sizeof(LogType); + msg.mServerity = *(reinterpret_cast(input)); + input += sizeof(LogSeverity); + if (msgSize > 9000) + { + int wtf = 6; + } + msg.mText.append(input, msgSize - 1 - sizeof(LogSeverity) - sizeof(LogType)); + if (size_out){(*size_out) = msgSize;} + return msg; +} + + + +LogChannel::LogChannel() : LogChannel("unknown") +{} + +LogChannel::LogChannel(const std::string& name) : + name(name) + , mEnabled(true) + , mLogLevel(Warning) +{} + +void LogChannel::log(LogMessage msg) +{ + std::lock_guard lock(mListenerLock); + for (auto &listener : mListeners) + { + listener->log(msg); + } +} + +void LogChannel::addListener(std::shared_ptr listener) +{ + std::lock_guard lock(mListenerLock); + mListeners.insert(listener); +} +void LogChannel::removeListener(std::shared_ptr listener) +{ + std::lock_guard lock(mListenerLock); + mListeners.erase(listener); +} + +struct CoutListener : LogListener +{ + void log(LogMessage msg) + { + std::cerr << msg.mText << std::endl; + } +}; + +struct FileListener : LogListener +{ + rFile mFile; + bool mPrependChannelName; + + FileListener(const std::string& name = _PRGNAME_, bool prependChannel = true) + : mFile(name + ".log", rFile::write), + mPrependChannelName(prependChannel) + { + if (!mFile.IsOpened()) + { + rMessageBox("Can't create log file! (" + name + ".log)", rMessageBoxCaptionStr, rICON_ERROR); + } + } + + void log(LogMessage msg) + { + if (mPrependChannelName) + { + msg.mText.insert(0, gTypeNameTable[static_cast(msg.mType)].mName); + } + mFile.Write(msg.mText); + } +}; + +LogManager::LogManager() +#ifdef BUFFERED_LOGGING + : mExiting(false), mLogConsumer() +#endif +{ + auto it = mChannels.begin(); + std::shared_ptr listener(new FileListener()); + for (const LogTypeName& name : gTypeNameTable) + { + it->name = name.mName; + it->addListener(listener); + it++; + } + std::shared_ptr TTYListener(new FileListener("TTY",false)); + getChannel(TTY).addListener(TTYListener); +#ifdef BUFFERED_LOGGING + mLogConsumer = std::thread(&LogManager::consumeLog, this); +#endif +} + +LogManager::~LogManager() +{ +#ifdef BUFFERED_LOGGING + mExiting = true; + mBufferReady.notify_all(); + mLogConsumer.join(); +} + +void LogManager::consumeLog() +{ + std::unique_lock lock(mStatusMut); + while (!mExiting) + { + mBufferReady.wait(lock); + mBuffer.lockGet(); + size_t size = mBuffer.size(); + std::vector local_messages(size); + mBuffer.popN(&local_messages.front(), size); + mBuffer.unlockGet(); + + u32 cursor = 0; + u32 removed = 0; + while (cursor < size) + { + Log::LogMessage msg = Log::LogMessage::deserialize(local_messages.data() + cursor, &removed); + cursor += removed; + getChannel(msg.mType).log(msg); + } + } +#endif +} + +void LogManager::log(LogMessage msg) +{ + //don't do any formatting changes or filtering to the TTY output since we + //use the raw output to do diffs with the output of a real PS3 and some + //programs write text in single bytes to the console + if (msg.mType != TTY) + { + std::string prefix; + switch (msg.mServerity) + { + case Success: + prefix = "S "; + break; + case Notice: + prefix = "! "; + break; + case Warning: + prefix = "W "; + break; + case Error: + prefix = "E "; + break; + } + if (NamedThreadBase* thr = GetCurrentNamedThread()) + { + prefix += thr->GetThreadName(); + } + msg.mText.insert(0, prefix); + msg.mText.append(1,'\n'); + } +#ifdef BUFFERED_LOGGING + size_t size = msg.size(); + std::vector temp_buffer(size); + msg.serialize(temp_buffer.data()); + mBuffer.pushRange(temp_buffer.begin(), temp_buffer.end()); + mBufferReady.notify_one(); +#else + mChannels[static_cast(msg.mType)].log(msg); +#endif +} + + +LogManager& LogManager::getInstance() +{ + if (!gLogManager) + { + gLogManager = new LogManager(); + } + return *gLogManager; +} +LogChannel &LogManager::getChannel(LogType type) +{ + return mChannels[static_cast(type)]; +} \ No newline at end of file diff --git a/Utilities/Log.h b/Utilities/Log.h new file mode 100644 index 0000000000..bf98355690 --- /dev/null +++ b/Utilities/Log.h @@ -0,0 +1,139 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include "Utilities/MTRingbuffer.h" + +//#define BUFFERED_LOGGING 1 + +//another msvc bug makes these not work, uncomment these and replace it with the one at the bottom when it's fixed +//#define LOG_MESSAGE(logType, severity, text) Log::LogManager::getInstance().log({logType, severity, text}) + +//first parameter is of type Log::LogType and text is of type std::string +#define LOG_MESSAGE(logType, severity, text) do{Log::LogMessage msg{logType, severity, text}; Log::LogManager::getInstance().log(msg);}while(0) + +#define LOG_SUCCESS(logType, text) LOG_MESSAGE(logType, Log::Success, text) +#define LOG_NOTICE(logType, text) LOG_MESSAGE(logType, Log::Notice, text) +#define LOG_WARNING(logType, text) LOG_MESSAGE(logType, Log::Warning, text) +#define LOG_ERROR(logType, text) LOG_MESSAGE(logType, Log::Error, text) + +#define LOGF_SUCCESS(logType, fmtstring, ...) LOG_SUCCESS(logType, fmt::Format(fmtstring, ##__VA_ARGS__ )) +#define LOGF_NOTICE(logType, fmtstring, ...) LOG_NOTICE(logType, fmt::Format(fmtstring, ##__VA_ARGS__ )) +#define LOGF_WARNING(logType, fmtstring, ...) LOG_WARNING(logType, fmt::Format(fmtstring, ##__VA_ARGS__ )) +#define LOGF_ERROR(logType, fmtstring, ...) LOG_ERROR(logType, fmt::Format(fmtstring, ##__VA_ARGS__ )) + +namespace Log +{ + const unsigned int MAX_LOG_BUFFER_LENGTH = 1024*1024; + const unsigned int gBuffSize = 1000; + + enum LogType : u32 + { + GENERAL = 0, + LOADER, + MEMORY, + RSX, + HLE, + PPU, + SPU, + TTY, + }; + + + struct LogTypeName + { + LogType mType; + std::string mName; + }; + + //well I'd love make_array() but alas manually counting is not the end of the world + static const std::array gTypeNameTable = { { + { GENERAL, "G: " }, + { LOADER, "LDR: " }, + { MEMORY, "MEM: " }, + { RSX, "RSX: " }, + { HLE, "HLE: " }, + { PPU, "PPU: " }, + { SPU, "SPU: " }, + { TTY, "TTY: " } + } }; + + enum LogSeverity : u32 + { + Success = 0, + Notice, + Warning, + Error, + }; + + struct LogMessage + { + using size_type = u32; + LogType mType; + LogSeverity mServerity; + std::string mText; + + u32 size(); + void serialize(char *output); + static LogMessage deserialize(char *input, u32* size_out=nullptr); + }; + + struct LogListener + { + virtual ~LogListener() {}; + virtual void log(LogMessage msg) = 0; + }; + + struct LogChannel + { + LogChannel(); + LogChannel(const std::string& name); + LogChannel(LogChannel& other) = delete; + LogChannel& operator = (LogChannel& other) = delete; + void log(LogMessage msg); + void addListener(std::shared_ptr listener); + void removeListener(std::shared_ptr listener); + std::string name; + private: + bool mEnabled; + LogSeverity mLogLevel; + std::mutex mListenerLock; + std::set> mListeners; + }; + + struct LogManager + { + LogManager(); + ~LogManager(); + static LogManager& getInstance(); + LogChannel& getChannel(LogType type); + void log(LogMessage msg); +#ifdef BUFFERED_LOGGING + void consumeLog(); +#endif + private: +#ifdef BUFFERED_LOGGING + MTRingbuffer mBuffer; + std::condition_variable mBufferReady; + std::mutex mStatusMut; + std::atomic mExiting; + std::thread mLogConsumer; +#endif + std::array::value> mChannels; + //std::array mChannels; //TODO: use this once Microsoft sorts their shit out + }; +} + +static struct { inline operator Log::LogType() { return Log::LogType::GENERAL; } } GENERAL; +static struct { inline operator Log::LogType() { return Log::LogType::LOADER; } } LOADER; +static struct { inline operator Log::LogType() { return Log::LogType::MEMORY; } } MEMORY; +static struct { inline operator Log::LogType() { return Log::LogType::RSX; } } RSX; +static struct { inline operator Log::LogType() { return Log::LogType::HLE; } } HLE; +static struct { inline operator Log::LogType() { return Log::LogType::PPU; } } PPU; +static struct { inline operator Log::LogType() { return Log::LogType::SPU; } } SPU; +static struct { inline operator Log::LogType() { return Log::LogType::TTY; } } TTY; diff --git a/Utilities/MTRingbuffer.h b/Utilities/MTRingbuffer.h new file mode 100644 index 0000000000..cb01422a0d --- /dev/null +++ b/Utilities/MTRingbuffer.h @@ -0,0 +1,159 @@ +#pragma once +#include +#include +#include +#include + +//Simple non-resizable FIFO Ringbuffer that can be simultaneously be read from and written to +//if we ever get to use boost please replace this with boost::circular_buffer, there's no reason +//why we would have to keep this amateur attempt at such a fundamental data-structure around +template< typename T, unsigned int MAX_MTRINGBUFFER_BUFFER_SIZE> +class MTRingbuffer{ + std::array mBuffer; + //this is a recursive mutex because the get methods lock it but the only + //way to be sure that they do not block is to check the size and the only + //way to check the size and use get atomically is to lock this mutex, + //so it goes: + //lock get mutex-->check size-->call get-->lock get mutex-->unlock get mutex-->return from get-->unlock get mutex + std::recursive_mutex mMutGet; + std::mutex mMutPut; + + size_t mGet; + size_t mPut; + size_t moveGet(size_t by = 1){ return (mGet + by) % MAX_MTRINGBUFFER_BUFFER_SIZE; } + size_t movePut(size_t by = 1){ return (mPut + by) % MAX_MTRINGBUFFER_BUFFER_SIZE; } +public: + MTRingbuffer() : mGet(0), mPut(0){} + + //blocks until there's something to get, so check "free()" if you want to avoid blocking + //also lock the get mutex around the free() check and the pop if you want to avoid racing + T pop() + { + std::lock_guard lock(mMutGet); + while (mGet == mPut) + { + //wait until there's actually something to get + //throwing an exception might be better, blocking here is a little awkward + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + size_t ret = mGet; + mGet = moveGet(); + return mBuffer[ret]; + } + + //blocks if the buffer is full until there's enough room + void push(T &putEle) + { + std::lock_guard lock(mMutPut); + while (movePut() == mGet) + { + //if this is reached a lot it's time to increase the buffer size + //or implement dynamic re-sizing + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + mBuffer[mPut] = std::forward(putEle); + mPut = movePut(); + } + + bool empty() + { + return mGet == mPut; + } + + //returns the amount of free places, this is the amount of actual free spaces-1 + //since mGet==mPut signals an empty buffer we can't actually use the last free + //space, so we shouldn't report it as free. + size_t free() + { + if (mGet < mPut) + { + return mBuffer.size() - (mPut - mGet) - 1; + } + else if (mGet > mPut) + { + return mGet - mPut - 1; + } + else + { + return mBuffer.size() - 1; + } + } + + size_t size() + { + //the magic -1 is the same magic 1 that is explained in the free() function + return mBuffer.size() - free() - 1; + } + + //takes random access iterator to T + template + void pushRange(IteratorType from, IteratorType until) + { + std::lock_guard lock(mMutPut); + size_t length = until - from; + + //if whatever we're trying to store is greater than the entire buffer the following loop will be infinite + assert(mBuffer.size() > length); + while (free() < length) + { + //if this is reached a lot it's time to increase the buffer size + //or implement dynamic re-sizing + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + if (mPut + length <= mBuffer.size()) + { + std::copy(from, until, mBuffer.begin() + mPut); + } + else + { + size_t tillEnd = mBuffer.size() - mPut; + std::copy(from, from + tillEnd, mBuffer.begin() + mPut); + std::copy(from + tillEnd, until, mBuffer.begin()); + } + mPut = movePut(length); + + } + + //takes output iterator to T + template + void popN(IteratorType output, size_t n) + { + std::lock_guard lock(mMutGet); + //make sure we're not trying to retrieve more than is in + assert(n <= size()); + peekN(output, n); + mGet = moveGet(n); + } + + //takes output iterator to T + template + void peekN(IteratorType output, size_t n) + { + size_t lGet = mGet; + if (lGet + n <= mBuffer.size()) + { + std::copy_n(mBuffer.begin() + lGet, n, output); + } + else + { + auto next = std::copy(mBuffer.begin() + lGet, mBuffer.end(), output); + std::copy_n(mBuffer.begin(), n - (mBuffer.size() - lGet), next); + } + } + + //well this is just asking for trouble + //but the comment above the declaration of mMutGet explains why it's there + //if there's a better way please remove this + void lockGet() + { + mMutGet.lock(); + } + + //well this is just asking for trouble + //but the comment above the declaration of mMutGet explains why it's there + //if there's a better way please remove this + void unlockGet() + { + mMutGet.unlock(); + } +}; diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index 807a55c268..157e9103f0 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -1,5 +1,5 @@ #include -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/CPU/CPUThread.h" diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index 1e129809fc..9ca53ce0e9 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -148,7 +148,7 @@ public: { if (!Emu.IsStopped()) { - ConLog.Error("SMutexLockerBase: thread id == 0"); + LOG_ERROR(HLE, "SMutexLockerBase: thread id == 0"); Emu.Pause(); } return; diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 2ac1d27cc7..596a4d1a9e 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -4,6 +4,7 @@ #include #include #include +#include #if defined(_MSC_VER) #define snprintf _snprintf diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index ed54c45245..c11a48183f 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Thread.h" @@ -134,7 +134,7 @@ void thread::start(std::function func) } catch(...) { - ConLog.Error("Crash :("); + LOG_ERROR(HLE, "Crash :("); //std::terminate(); } diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 51f47a990e..40cd2e0c49 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -120,7 +120,7 @@ size_t rFile::Write(const void *buffer, size_t count) bool rFile::Write(const std::string &text) { - return reinterpret_cast(handle)->Write(fmt::FromUTF8(text)); + return reinterpret_cast(handle)->Write(reinterpret_cast(text.c_str()),text.size()); } bool rFile::Close() diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index ea8c9bab5f..6ad5207582 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -1,6 +1,6 @@ #include "stdafx.h" #include "unedat.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" void generate_key(int crypto_mode, int version, unsigned char *key_final, unsigned char *iv_final, unsigned char *key, unsigned char *iv) { @@ -74,7 +74,7 @@ bool crypto(int hash_mode, int crypto_mode, int version, unsigned char *in, unsi } else { - ConLog.Error("EDAT: Unknown crypto algorithm!\n"); + LOG_ERROR(LOADER, "EDAT: Unknown crypto algorithm!\n"); return false; } @@ -92,7 +92,7 @@ bool crypto(int hash_mode, int crypto_mode, int version, unsigned char *in, unsi } else { - ConLog.Error("EDAT: Unknown hashing algorithm!\n"); + LOG_ERROR(LOADER, "EDAT: Unknown hashing algorithm!\n"); return false; } } @@ -158,7 +158,7 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, if ((edat->flags & EDAT_FLAG_0x3C) != 0 || (edat->flags & EDAT_FLAG_0x3D) != 0) { - ConLog.Error("EDAT: Flag 0x3C/0x3D EDAT files are unsupported yet"); + LOG_ERROR(LOADER, "EDAT: Flag 0x3C/0x3D EDAT files are unsupported yet"); return -1; } @@ -268,15 +268,15 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, memset(decomp_data, 0, decomp_size); if (verbose) - ConLog.Write("EDAT: Decompressing...\n"); + LOG_NOTICE(LOADER, "EDAT: Decompressing...\n"); int res = lz_decompress(decomp_data, dec_data, decomp_size); out->Write(decomp_data, res); if (verbose) { - ConLog.Write("EDAT: Compressed block size: %d\n", pad_length); - ConLog.Write("EDAT: Decompressed block size: %d\n", res); + LOGF_NOTICE(LOADER, "EDAT: Compressed block size: %d\n", pad_length); + LOGF_NOTICE(LOADER, "EDAT: Decompressed block size: %d\n", res); } edat->file_size -= res; @@ -285,11 +285,11 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, { if (res < 0) { - ConLog.Error("EDAT: Decompression failed!\n"); + LOG_ERROR(LOADER, "EDAT: Decompression failed!\n"); return 1; } else - ConLog.Success("EDAT: Data successfully decompressed!\n"); + LOG_SUCCESS(LOADER, "EDAT: Data successfully decompressed!\n"); } delete[] decomp_data; @@ -315,7 +315,7 @@ static bool check_flags(EDAT_SDAT_HEADER *edat, NPD_HEADER *npd) { if (edat->flags & 0x7EFFFFFE) { - ConLog.Error("EDAT: Bad header flags!\n"); + LOG_ERROR(LOADER, "EDAT: Bad header flags!\n"); return false; } } @@ -323,7 +323,7 @@ static bool check_flags(EDAT_SDAT_HEADER *edat, NPD_HEADER *npd) { if (edat->flags & 0x7EFFFFE0) { - ConLog.Error("EDAT: Bad header flags!\n"); + LOG_ERROR(LOADER, "EDAT: Bad header flags!\n"); return false; } } @@ -331,13 +331,13 @@ static bool check_flags(EDAT_SDAT_HEADER *edat, NPD_HEADER *npd) { if (edat->flags & 0x7EFFFFC0) { - ConLog.Error("EDAT: Bad header flags!\n"); + LOG_ERROR(LOADER, "EDAT: Bad header flags!\n"); return false; } } else if (npd->version > 4) { - ConLog.Error("EDAT: Unknown version - %d\n", npd->version); + LOGF_ERROR(LOADER, "EDAT: Unknown version - %d\n", npd->version); return false; } @@ -370,7 +370,7 @@ int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, rFil int hash_mode = ((edat->flags & EDAT_ENCRYPTED_KEY_FLAG) == 0) ? 0x00000002 : 0x10000002; if ((edat->flags & EDAT_DEBUG_DATA_FLAG) != 0) { - ConLog.Warning("EDAT: DEBUG data detected!\n"); + LOG_ERROR(LOADER, "EDAT: DEBUG data detected!\n"); hash_mode |= 0x01000000; } @@ -382,14 +382,14 @@ int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, rFil if (!crypto(hash_mode, crypto_mode, (npd->version == 4), header, tmp, 0xA0, header_key, header_iv, key, hash_result)) { if (verbose) - ConLog.Warning("EDAT: Header hash is invalid!\n"); + LOG_WARNING(LOADER, "EDAT: Header hash is invalid!\n"); } // Parse the metadata info. int metadata_section_size = 0x10; if (((edat->flags & EDAT_COMPRESSED_FLAG) != 0)) { - ConLog.Warning("EDAT: COMPRESSED data detected!\n"); + LOG_WARNING(LOADER, "EDAT: COMPRESSED data detected!\n"); metadata_section_size = 0x20; } @@ -418,7 +418,7 @@ int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, rFil if (!crypto(hash_mode, crypto_mode, (npd->version == 4), data, tmp, block_size, header_key, header_iv, key, hash_result)) { if (verbose) - ConLog.Warning("EDAT: Metadata hash from block 0x%08x is invalid!\n", metadata_offset + bytes_read); + LOGF_WARNING(LOADER, "EDAT: Metadata hash from block 0x%08x is invalid!\n", metadata_offset + bytes_read); } // Adjust sizes. @@ -455,9 +455,9 @@ void validate_data(const char* file_name, unsigned char *klicensee, NPD_HEADER * if (verbose) { if (title_hash_result) - ConLog.Success("EDAT: NPD title hash is valid!\n"); + LOG_SUCCESS(LOADER, "EDAT: NPD title hash is valid!\n"); else - ConLog.Warning("EDAT: NPD title hash is invalid!\n"); + LOG_WARNING(LOADER, "EDAT: NPD title hash is invalid!\n"); } // Check for an empty dev_hash (can't validate if devklic is NULL); @@ -474,7 +474,7 @@ void validate_data(const char* file_name, unsigned char *klicensee, NPD_HEADER * if (isDevklicEmpty) { if (verbose) - ConLog.Warning("EDAT: NPD dev hash is empty!\n"); + LOG_WARNING(LOADER, "EDAT: NPD dev hash is empty!\n"); } else { @@ -487,9 +487,9 @@ void validate_data(const char* file_name, unsigned char *klicensee, NPD_HEADER * if (verbose) { if (dev_hash_result) - ConLog.Success("EDAT: NPD dev hash is valid!\n"); + LOG_SUCCESS(LOADER, "EDAT: NPD dev hash is valid!\n"); else - ConLog.Warning("EDAT: NPD dev hash is invalid!\n"); + LOG_WARNING(LOADER, "EDAT: NPD dev hash is invalid!\n"); } } @@ -522,7 +522,7 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi unsigned char npd_magic[4] = {0x4E, 0x50, 0x44, 0x00}; //NPD0 if(memcmp(NPD->magic, npd_magic, 4)) { - ConLog.Error("EDAT: File has invalid NPD header."); + LOG_ERROR(LOADER, "EDAT: File has invalid NPD header."); delete NPD; delete EDAT; return 1; @@ -534,16 +534,16 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi if (verbose) { - ConLog.Write("NPD HEADER\n"); - ConLog.Write("NPD version: %d\n", NPD->version); - ConLog.Write("NPD license: %d\n", NPD->license); - ConLog.Write("NPD type: %d\n", NPD->type); - ConLog.Write("\n"); - ConLog.Write("EDAT HEADER\n"); - ConLog.Write("EDAT flags: 0x%08X\n", EDAT->flags); - ConLog.Write("EDAT block size: 0x%08X\n", EDAT->block_size); - ConLog.Write("EDAT file size: 0x%08X\n", EDAT->file_size); - ConLog.Write("\n"); + LOG_NOTICE(LOADER, "NPD HEADER\n"); + LOGF_NOTICE(LOADER, "NPD version: %d\n", NPD->version); + LOGF_NOTICE(LOADER, "NPD license: %d\n", NPD->license); + LOGF_NOTICE(LOADER, "NPD type: %d\n", NPD->type); + LOG_NOTICE(LOADER, "\n"); + LOG_NOTICE(LOADER, "EDAT HEADER\n"); + LOGF_NOTICE(LOADER, "EDAT flags: 0x%08X\n", EDAT->flags); + LOGF_NOTICE(LOADER, "EDAT block size: 0x%08X\n", EDAT->block_size); + LOGF_NOTICE(LOADER, "EDAT file size: 0x%08X\n", EDAT->file_size); + LOG_NOTICE(LOADER, "\n"); } // Set decryption key. @@ -552,7 +552,7 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi if((EDAT->flags & SDAT_FLAG) == SDAT_FLAG) { - ConLog.Warning("EDAT: SDAT detected!\n"); + LOG_WARNING(LOADER, "EDAT: SDAT detected!\n"); xor_(key, NPD->dev_hash, SDAT_KEY, 0x10); } else @@ -579,7 +579,7 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi if (!test) { - ConLog.Error("EDAT: A valid RAP file is needed!"); + LOG_ERROR(LOADER, "EDAT: A valid RAP file is needed!"); delete NPD; delete EDAT; return 1; @@ -587,19 +587,19 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi } } - ConLog.Write("EDAT: Parsing data...\n"); + LOG_NOTICE(LOADER, "EDAT: Parsing data...\n"); if (check_data(key, EDAT, NPD, input, verbose)) - ConLog.Error("EDAT: Data parsing failed!\n"); + LOG_ERROR(LOADER, "EDAT: Data parsing failed!\n"); else - ConLog.Success("EDAT: Data successfully parsed!\n"); + LOG_SUCCESS(LOADER, "EDAT: Data successfully parsed!\n"); printf("\n"); - ConLog.Write("EDAT: Decrypting data...\n"); + LOG_NOTICE(LOADER, "EDAT: Decrypting data...\n"); if (decrypt_data(input, output, EDAT, NPD, key, verbose)) - ConLog.Error("EDAT: Data decryption failed!"); + LOG_ERROR(LOADER, "EDAT: Data decryption failed!"); else - ConLog.Success("EDAT: Data successfully decrypted!"); + LOG_SUCCESS(LOADER, "EDAT: Data successfully decrypted!"); delete NPD; delete EDAT; @@ -652,21 +652,21 @@ int DecryptEDAT(const std::string& input_file_name, const std::string& output_fi memcpy(devklic, custom_klic, 0x10); else { - ConLog.Error("EDAT: Invalid custom klic!\n"); + LOG_ERROR(LOADER, "EDAT: Invalid custom klic!\n"); return -1; } break; } default: - ConLog.Error("EDAT: Invalid mode!\n"); + LOG_ERROR(LOADER, "EDAT: Invalid mode!\n"); return -1; } // Check the input/output files. if (!input.IsOpened() || !output.IsOpened()) { - ConLog.Error("EDAT: Failed to open files!\n"); + LOG_ERROR(LOADER, "EDAT: Failed to open files!\n"); return -1; } diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index 1192304f34..1b499ce61c 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -2,13 +2,13 @@ #include "unpkg.h" #include -#include "Emu/ConLog.h" +#include "Utilities/Log.h" // Decryption. bool CheckHeader(rFile& pkg_f, PKGHeader* m_header) { if (m_header->pkg_magic != 0x7F504B47) { - ConLog.Error("PKG: Not a package file!"); + LOG_ERROR(LOADER, "PKG: Not a package file!"); return false; } @@ -17,7 +17,7 @@ bool CheckHeader(rFile& pkg_f, PKGHeader* m_header) case PKG_RELEASE_TYPE_DEBUG: break; case PKG_RELEASE_TYPE_RELEASE: break; default: - ConLog.Error("PKG: Unknown PKG type!"); + LOG_ERROR(LOADER, "PKG: Unknown PKG type!"); return false; } @@ -26,22 +26,22 @@ bool CheckHeader(rFile& pkg_f, PKGHeader* m_header) case PKG_PLATFORM_TYPE_PS3: break; case PKG_PLATFORM_TYPE_PSP: break; default: - ConLog.Error("PKG: Unknown PKG type!"); + LOG_ERROR(LOADER, "PKG: Unknown PKG type!"); return false; } if (m_header->header_size != PKG_HEADER_SIZE) { - ConLog.Error("PKG: Wrong header size!"); + LOG_ERROR(LOADER, "PKG: Wrong header size!"); return false; } if (m_header->pkg_size != pkg_f.Length()) { - ConLog.Error("PKG: File size mismatch."); + LOG_ERROR(LOADER, "PKG: File size mismatch."); return false; } if (m_header->data_size + m_header->data_offset + 0x60 != pkg_f.Length()) { - ConLog.Error("PKG: Data size mismatch."); + LOG_ERROR(LOADER, "PKG: Data size mismatch."); return false; } @@ -53,7 +53,7 @@ bool LoadHeader(rFile& pkg_f, PKGHeader* m_header) pkg_f.Seek(0); if (pkg_f.Read(m_header, sizeof(PKGHeader)) != sizeof(PKGHeader)) { - ConLog.Error("PKG: Package file is too short!"); + LOG_ERROR(LOADER, "PKG: Package file is too short!"); return false; } @@ -141,7 +141,7 @@ bool LoadEntries(rFile& dec_pkg_f, PKGHeader* m_header, PKGEntry *m_entries) dec_pkg_f.Read(m_entries, sizeof(PKGEntry) * m_header->file_count); if (m_entries->name_offset / sizeof(PKGEntry) != m_header->file_count) { - ConLog.Error("PKG: Entries are damaged!"); + LOG_ERROR(LOADER, "PKG: Entries are damaged!"); return false; } diff --git a/rpcs3/Crypto/unself.cpp b/rpcs3/Crypto/unself.cpp index 4ee7c41806..7f889a8c8b 100644 --- a/rpcs3/Crypto/unself.cpp +++ b/rpcs3/Crypto/unself.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/FS/vfsLocalFile.h" #include "unself.h" @@ -17,7 +17,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) // Check SCE magic. if (!sce_hdr.CheckMagic()) { - ConLog.Error("SELF: Not a SELF file!"); + LOGF_ERROR(LOADER, "SELF: Not a SELF file!"); return false; } @@ -41,7 +41,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) phdr32_arr.clear(); if(elf32_hdr.e_phoff == 0 && elf32_hdr.e_phnum) { - ConLog.Error("SELF: ELF program header offset is null!"); + LOGF_ERROR(LOADER, "SELF: ELF program header offset is null!"); return false; } self_f.Seek(self_hdr.se_phdroff); @@ -56,7 +56,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) phdr64_arr.clear(); if(elf64_hdr.e_phoff == 0 && elf64_hdr.e_phnum) { - ConLog.Error("SELF: ELF program header offset is null!"); + LOGF_ERROR(LOADER, "SELF: ELF program header offset is null!"); return false; } self_f.Seek(self_hdr.se_phdroff); @@ -101,7 +101,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) shdr32_arr.clear(); if(elf32_hdr.e_shoff == 0 && elf32_hdr.e_shnum) { - ConLog.Warning("SELF: ELF section header offset is null!"); + LOGF_WARNING(LOADER, "SELF: ELF section header offset is null!"); return true; } self_f.Seek(self_hdr.se_shdroff); @@ -116,7 +116,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) shdr64_arr.clear(); if(elf64_hdr.e_shoff == 0 && elf64_hdr.e_shnum) { - ConLog.Warning("SELF: ELF section header offset is null!"); + LOGF_WARNING(LOADER, "SELF: ELF section header offset is null!"); return true; } self_f.Seek(self_hdr.se_shdroff); @@ -132,46 +132,46 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) void SELFDecrypter::ShowHeaders(bool isElf32) { - ConLog.Write("SCE header"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "SCE header"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); sce_hdr.Show(); - ConLog.Write("----------------------------------------------------"); - ConLog.Write("SELF header"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOGF_NOTICE(LOADER, "SELF header"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); self_hdr.Show(); - ConLog.Write("----------------------------------------------------"); - ConLog.Write("APP INFO"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOGF_NOTICE(LOADER, "APP INFO"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); app_info.Show(); - ConLog.Write("----------------------------------------------------"); - ConLog.Write("ELF header"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOGF_NOTICE(LOADER, "ELF header"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); isElf32 ? elf32_hdr.Show() : elf64_hdr.Show(); - ConLog.Write("----------------------------------------------------"); - ConLog.Write("ELF program headers"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOGF_NOTICE(LOADER, "ELF program headers"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); for(unsigned int i = 0; i < ((isElf32) ? phdr32_arr.size() : phdr64_arr.size()); i++) isElf32 ? phdr32_arr[i].Show() : phdr64_arr[i].Show(); - ConLog.Write("----------------------------------------------------"); - ConLog.Write("Section info"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOGF_NOTICE(LOADER, "Section info"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); for(unsigned int i = 0; i < secinfo_arr.size(); i++) secinfo_arr[i].Show(); - ConLog.Write("----------------------------------------------------"); - ConLog.Write("SCE version info"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOGF_NOTICE(LOADER, "SCE version info"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); scev_info.Show(); - ConLog.Write("----------------------------------------------------"); - ConLog.Write("Control info"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOGF_NOTICE(LOADER, "Control info"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); for(unsigned int i = 0; i < ctrlinfo_arr.size(); i++) ctrlinfo_arr[i].Show(); - ConLog.Write("----------------------------------------------------"); - ConLog.Write("ELF section headers"); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOGF_NOTICE(LOADER, "ELF section headers"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); for(unsigned int i = 0; i < ((isElf32) ? shdr32_arr.size() : shdr64_arr.size()); i++) isElf32 ? shdr32_arr[i].Show() : shdr64_arr[i].Show(); - ConLog.Write("----------------------------------------------------"); + LOGF_NOTICE(LOADER, "----------------------------------------------------"); } bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) @@ -195,7 +195,7 @@ bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) // If not, the data has no NPDRM layer. if (!ctrl) { - ConLog.Warning("SELF: No NPDRM control info found!"); + LOGF_WARNING(LOADER, "SELF: No NPDRM control info found!"); return true; } @@ -208,7 +208,7 @@ bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) if (ctrl->npdrm.license == 1) // Network license. { - ConLog.Error("SELF: Can't decrypt network NPDRM!"); + LOGF_ERROR(LOADER, "SELF: Can't decrypt network NPDRM!"); return false; } else if (ctrl->npdrm.license == 2) // Local license. @@ -216,7 +216,7 @@ bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) // Try to find a RAP file to get the key. if (!GetKeyFromRap(ctrl->npdrm.content_id, npdrm_key)) { - ConLog.Error("SELF: Can't find RAP file for NPDRM decryption!"); + LOGF_ERROR(LOADER, "SELF: Can't find RAP file for NPDRM decryption!"); return false; } } @@ -227,7 +227,7 @@ bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) } else { - ConLog.Error("SELF: Invalid NPDRM license type!"); + LOGF_ERROR(LOADER, "SELF: Invalid NPDRM license type!"); return false; } @@ -290,7 +290,7 @@ bool SELFDecrypter::LoadMetadata() if ((meta_info.key_pad[0] != 0x00) || (meta_info.iv_pad[0] != 0x00)) { - ConLog.Error("SELF: Failed to decrypt metadata info!"); + LOGF_ERROR(LOADER, "SELF: Failed to decrypt metadata info!"); return false; } @@ -392,7 +392,7 @@ bool SELFDecrypter::MakeElf(const std::string& elf, bool isElf32) rFile e(elf.c_str(), rFile::write); if(!e.IsOpened()) { - ConLog.Error("Could not create ELF file! (%s)", elf.c_str()); + LOGF_ERROR(LOADER, "Could not create ELF file! (%s)", elf.c_str()); return false; } @@ -510,7 +510,7 @@ bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) // Check if we have a valid RAP file. if (!rFile::Exists(rap_path)) { - ConLog.Error("This application requires a valid RAP file for decryption!"); + LOGF_ERROR(LOADER, "This application requires a valid RAP file for decryption!"); return false; } @@ -519,11 +519,11 @@ bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) if (!rap_file.IsOpened()) { - ConLog.Error("Failed to load RAP file!"); + LOGF_ERROR(LOADER, "Failed to load RAP file!"); return false; } - ConLog.Write("Loading RAP file %s", (ci_str + ".rap").c_str()); + LOGF_NOTICE(LOADER, "Loading RAP file %s", (ci_str + ".rap").c_str()); rap_file.Read(rap_key, 0x10); rap_file.Close(); @@ -573,7 +573,7 @@ bool CheckDebugSelf(const std::string& self, const std::string& elf) if(!s.IsOpened()) { - ConLog.Error("Could not open SELF file! (%s)", self.c_str()); + LOGF_ERROR(LOADER, "Could not open SELF file! (%s)", self.c_str()); return false; } @@ -585,7 +585,7 @@ bool CheckDebugSelf(const std::string& self, const std::string& elf) // Check for DEBUG version. if(swap16(key_version) == 0x8000) { - ConLog.Warning("Debug SELF detected! Removing fake header..."); + LOGF_WARNING(LOADER, "Debug SELF detected! Removing fake header..."); // Get the real elf offset. s.Seek(0x10); @@ -600,7 +600,7 @@ bool CheckDebugSelf(const std::string& self, const std::string& elf) rFile e(elf, rFile::write); if(!e.IsOpened()) { - ConLog.Error("Could not create ELF file! (%s)", elf.c_str()); + LOGF_ERROR(LOADER, "Could not create ELF file! (%s)", elf.c_str()); return false; } @@ -640,28 +640,28 @@ bool DecryptSelf(const std::string& elf, const std::string& self) // Load the SELF file headers. if (!self_dec.LoadHeaders(isElf32)) { - ConLog.Error("SELF: Failed to load SELF file headers!"); + LOGF_ERROR(LOADER, "SELF: Failed to load SELF file headers!"); return false; } // Load and decrypt the SELF file metadata. if (!self_dec.LoadMetadata()) { - ConLog.Error("SELF: Failed to load SELF file metadata!"); + LOGF_ERROR(LOADER, "SELF: Failed to load SELF file metadata!"); return false; } // Decrypt the SELF file data. if (!self_dec.DecryptData()) { - ConLog.Error("SELF: Failed to decrypt SELF file data!"); + LOGF_ERROR(LOADER, "SELF: Failed to decrypt SELF file data!"); return false; } // Make a new ELF file from this SELF. if (!self_dec.MakeElf(elf, isElf32)) { - ConLog.Error("SELF: Failed to make ELF file from SELF!"); + LOGF_ERROR(LOADER, "SELF: Failed to make ELF file from SELF!"); return false; } } diff --git a/rpcs3/Crypto/unself.h b/rpcs3/Crypto/unself.h index bd72125eac..b4e504853e 100644 --- a/rpcs3/Crypto/unself.h +++ b/rpcs3/Crypto/unself.h @@ -25,10 +25,10 @@ struct AppInfo void Show() { - ConLog.Write("AuthID: 0x%llx", authid); - ConLog.Write("VendorID: 0x%08x", vendor_id); - ConLog.Write("SELF type: 0x%08x", self_type); - ConLog.Write("Version: 0x%llx", version); + LOGF_NOTICE(LOADER, "AuthID: 0x%llx", authid); + LOGF_NOTICE(LOADER, "VendorID: 0x%08x", vendor_id); + LOGF_NOTICE(LOADER, "SELF type: 0x%08x", self_type); + LOGF_NOTICE(LOADER, "Version: 0x%llx", version); } }; @@ -53,12 +53,12 @@ struct SectionInfo void Show() { - ConLog.Write("Offset: 0x%llx", offset); - ConLog.Write("Size: 0x%llx", size); - ConLog.Write("Compressed: 0x%08x", compressed); - ConLog.Write("Unknown1: 0x%08x", unknown1); - ConLog.Write("Unknown2: 0x%08x", unknown2); - ConLog.Write("Encrypted: 0x%08x", encrypted); + LOGF_NOTICE(LOADER, "Offset: 0x%llx", offset); + LOGF_NOTICE(LOADER, "Size: 0x%llx", size); + LOGF_NOTICE(LOADER, "Compressed: 0x%08x", compressed); + LOGF_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); + LOGF_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); + LOGF_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); } }; @@ -79,10 +79,10 @@ struct SCEVersionInfo void Show() { - ConLog.Write("Sub-header type: 0x%08x", subheader_type); - ConLog.Write("Present: 0x%08x", present); - ConLog.Write("Size: 0x%08x", size); - ConLog.Write("Unknown: 0x%08x", unknown); + LOGF_NOTICE(LOADER, "Sub-header type: 0x%08x", subheader_type); + LOGF_NOTICE(LOADER, "Present: 0x%08x", present); + LOGF_NOTICE(LOADER, "Size: 0x%08x", size); + LOGF_NOTICE(LOADER, "Unknown: 0x%08x", unknown); } }; @@ -181,20 +181,20 @@ struct ControlInfo void Show() { - ConLog.Write("Type: 0x%08x", type); - ConLog.Write("Size: 0x%08x", size); - ConLog.Write("Next: 0x%llx", next); + LOGF_NOTICE(LOADER, "Type: 0x%08x", type); + LOGF_NOTICE(LOADER, "Size: 0x%08x", size); + LOGF_NOTICE(LOADER, "Next: 0x%llx", next); if (type == 1) { - ConLog.Write("Control flag 1: 0x%08x", control_flags.ctrl_flag1); - ConLog.Write("Unknown1: 0x%08x", control_flags.unknown1); - ConLog.Write("Unknown2: 0x%08x", control_flags.unknown2); - ConLog.Write("Unknown3: 0x%08x", control_flags.unknown3); - ConLog.Write("Unknown4: 0x%08x", control_flags.unknown4); - ConLog.Write("Unknown5: 0x%08x", control_flags.unknown5); - ConLog.Write("Unknown6: 0x%08x", control_flags.unknown6); - ConLog.Write("Unknown7: 0x%08x", control_flags.unknown7); + LOGF_NOTICE(LOADER, "Control flag 1: 0x%08x", control_flags.ctrl_flag1); + LOGF_NOTICE(LOADER, "Unknown1: 0x%08x", control_flags.unknown1); + LOGF_NOTICE(LOADER, "Unknown2: 0x%08x", control_flags.unknown2); + LOGF_NOTICE(LOADER, "Unknown3: 0x%08x", control_flags.unknown3); + LOGF_NOTICE(LOADER, "Unknown4: 0x%08x", control_flags.unknown4); + LOGF_NOTICE(LOADER, "Unknown5: 0x%08x", control_flags.unknown5); + LOGF_NOTICE(LOADER, "Unknown6: 0x%08x", control_flags.unknown6); + LOGF_NOTICE(LOADER, "Unknown7: 0x%08x", control_flags.unknown7); } else if (type == 2) { @@ -204,8 +204,8 @@ struct ControlInfo for (int i = 0; i < 20; i++) digest_str += fmt::Format("%02x", file_digest_30.digest[i]); - ConLog.Write("Digest: %s", digest_str.c_str()); - ConLog.Write("Unknown: 0x%llx", file_digest_30.unknown); + LOGF_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); + LOGF_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_30.unknown); } else if (size == 0x40) { @@ -217,9 +217,9 @@ struct ControlInfo digest_str2 += fmt::Format("%02x", file_digest_40.digest2[i]); } - ConLog.Write("Digest1: %s", digest_str1.c_str()); - ConLog.Write("Digest2: %s", digest_str2.c_str()); - ConLog.Write("Unknown: 0x%llx", file_digest_40.unknown); + LOGF_NOTICE(LOADER, "Digest1: %s", digest_str1.c_str()); + LOGF_NOTICE(LOADER, "Digest2: %s", digest_str2.c_str()); + LOGF_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_40.unknown); } } else if (type == 3) @@ -237,16 +237,16 @@ struct ControlInfo xordigest_str += fmt::Format("%02x", npdrm.xordigest[i]); } - ConLog.Write("Magic: 0x%08x", npdrm.magic); - ConLog.Write("Unknown1: 0x%08x", npdrm.unknown1); - ConLog.Write("License: 0x%08x", npdrm.license); - ConLog.Write("Type: 0x%08x", npdrm.type); - ConLog.Write("ContentID: %s", contentid_str.c_str()); - ConLog.Write("Digest: %s", digest_str.c_str()); - ConLog.Write("Inverse digest: %s", invdigest_str.c_str()); - ConLog.Write("XOR digest: %s", xordigest_str.c_str()); - ConLog.Write("Unknown2: 0x%llx", npdrm.unknown2); - ConLog.Write("Unknown3: 0x%llx", npdrm.unknown3); + LOGF_NOTICE(LOADER, "Magic: 0x%08x", npdrm.magic); + LOGF_NOTICE(LOADER, "Unknown1: 0x%08x", npdrm.unknown1); + LOGF_NOTICE(LOADER, "License: 0x%08x", npdrm.license); + LOGF_NOTICE(LOADER, "Type: 0x%08x", npdrm.type); + LOGF_NOTICE(LOADER, "ContentID: %s", contentid_str.c_str()); + LOGF_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); + LOGF_NOTICE(LOADER, "Inverse digest: %s", invdigest_str.c_str()); + LOGF_NOTICE(LOADER, "XOR digest: %s", xordigest_str.c_str()); + LOGF_NOTICE(LOADER, "Unknown2: 0x%llx", npdrm.unknown2); + LOGF_NOTICE(LOADER, "Unknown3: 0x%llx", npdrm.unknown3); } } }; @@ -281,10 +281,10 @@ struct MetadataInfo iv_pad_str += fmt::Format("%02x", iv_pad[i]); } - ConLog.Write("Key: %s", key_str.c_str()); - ConLog.Write("Key pad: %s", key_pad_str.c_str()); - ConLog.Write("IV: %s", iv_str.c_str()); - ConLog.Write("IV pad: %s", iv_pad_str.c_str()); + LOGF_NOTICE(LOADER, "Key: %s", key_str.c_str()); + LOGF_NOTICE(LOADER, "Key pad: %s", key_pad_str.c_str()); + LOGF_NOTICE(LOADER, "IV: %s", iv_str.c_str()); + LOGF_NOTICE(LOADER, "IV pad: %s", iv_pad_str.c_str()); } }; @@ -320,13 +320,13 @@ struct MetadataHeader void Show() { - ConLog.Write("Signature input length: 0x%llx", signature_input_length); - ConLog.Write("Unknown1: 0x%08x", unknown1); - ConLog.Write("Section count: 0x%08x", section_count); - ConLog.Write("Key count: 0x%08x", key_count); - ConLog.Write("Optional header size: 0x%08x", opt_header_size); - ConLog.Write("Unknown2: 0x%08x", unknown2); - ConLog.Write("Unknown3: 0x%08x", unknown3); + LOGF_NOTICE(LOADER, "Signature input length: 0x%llx", signature_input_length); + LOGF_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); + LOGF_NOTICE(LOADER, "Section count: 0x%08x", section_count); + LOGF_NOTICE(LOADER, "Key count: 0x%08x", key_count); + LOGF_NOTICE(LOADER, "Optional header size: 0x%08x", opt_header_size); + LOGF_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); + LOGF_NOTICE(LOADER, "Unknown3: 0x%08x", unknown3); } }; @@ -371,16 +371,16 @@ struct MetadataSectionHeader void Show() { - ConLog.Write("Data offset: 0x%llx", data_offset); - ConLog.Write("Data size: 0x%llx", data_size); - ConLog.Write("Type: 0x%08x", type); - ConLog.Write("Program index: 0x%08x", program_idx); - ConLog.Write("Hashed: 0x%08x", hashed); - ConLog.Write("SHA1 index: 0x%08x", sha1_idx); - ConLog.Write("Encrypted: 0x%08x", encrypted); - ConLog.Write("Key index: 0x%08x", key_idx); - ConLog.Write("IV index: 0x%08x", iv_idx); - ConLog.Write("Compressed: 0x%08x", compressed); + LOGF_NOTICE(LOADER, "Data offset: 0x%llx", data_offset); + LOGF_NOTICE(LOADER, "Data size: 0x%llx", data_size); + LOGF_NOTICE(LOADER, "Type: 0x%08x", type); + LOGF_NOTICE(LOADER, "Program index: 0x%08x", program_idx); + LOGF_NOTICE(LOADER, "Hashed: 0x%08x", hashed); + LOGF_NOTICE(LOADER, "SHA1 index: 0x%08x", sha1_idx); + LOGF_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); + LOGF_NOTICE(LOADER, "Key index: 0x%08x", key_idx); + LOGF_NOTICE(LOADER, "IV index: 0x%08x", iv_idx); + LOGF_NOTICE(LOADER, "Compressed: 0x%08x", compressed); } }; diff --git a/rpcs3/Emu/ARMv7/ARMv7Interpreter.h b/rpcs3/Emu/ARMv7/ARMv7Interpreter.h index 9aabb473fc..5a820cb512 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Interpreter.h +++ b/rpcs3/Emu/ARMv7/ARMv7Interpreter.h @@ -260,7 +260,7 @@ public: protected: void NULL_OP() { - ConLog.Error("null"); + LOG_ERROR(HLE, "null"); Emu.Pause(); } @@ -316,7 +316,7 @@ protected: void UNK(const u16 code0, const u16 code1) { - ConLog.Error("Unknown/Illegal opcode! (0x%04x : 0x%04x)", code0, code1); + LOGF_ERROR(HLE, "Unknown/Illegal opcode! (0x%04x : 0x%04x)", code0, code1); Emu.Pause(); } -}; \ No newline at end of file +}; diff --git a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp index ed38c8d96d..d4cdddc2c9 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp +++ b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPCThread.h" diff --git a/rpcs3/Emu/Audio/AL/OpenALThread.cpp b/rpcs3/Emu/Audio/AL/OpenALThread.cpp index f07b0eb1a4..a7111511be 100644 --- a/rpcs3/Emu/Audio/AL/OpenALThread.cpp +++ b/rpcs3/Emu/Audio/AL/OpenALThread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3/Ini.h" @@ -18,7 +18,7 @@ void printAlError(ALenum err, const char* situation) { if(err != AL_NO_ERROR) { - ConLog.Error("%s: OpenAL error 0x%04x", situation, err); + LOGF_ERROR(HLE, "%s: OpenAL error 0x%04x", situation, err); Emu.Pause(); } } @@ -27,7 +27,7 @@ void printAlcError(ALCenum err, const char* situation) { if(err != ALC_NO_ERROR) { - ConLog.Error("%s: OpenALC error 0x%04x", situation, err); + LOGF_ERROR(HLE, "%s: OpenALC error 0x%04x", situation, err); Emu.Pause(); } } @@ -137,7 +137,7 @@ void OpenALThread::AddData(const void* src, ALsizei size) int bsize = size < m_buffer_size ? size : m_buffer_size; if (!AddBlock(buffer, bsize, bsrc)) - ConLog.Error("OpenALThread::AddBlock: invalid block size: %d", bsize); + LOGF_ERROR(HLE, "OpenALThread::AddBlock: invalid block size: %d", bsize); alSourceQueueBuffers(m_source, 1, &buffer); checkForAlError("alSourceQueueBuffers"); diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 10da0f8608..74934b68eb 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -1,6 +1,6 @@ #include "stdafx.h" #include "Emu/SysCalls/ErrorCodes.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3/Ini.h" @@ -149,7 +149,7 @@ void CPUThread::SetBranch(const u64 pc, bool record_branch) { if(!Memory.IsGoodAddr(m_offset + pc)) { - ConLog.Error("%s branch error: bad address 0x%llx #pc: 0x%llx", GetFName().c_str(), m_offset + pc, m_offset + PC); + LOGF_ERROR(PPU, "%s branch error: bad address 0x%llx #pc: 0x%llx", GetFName().c_str(), m_offset + pc, m_offset + PC); Emu.Pause(); } @@ -282,7 +282,7 @@ void CPUThread::ExecOnce() void CPUThread::Task() { - if (Ini.HLELogging.GetValue()) ConLog.Write("%s enter", CPUThread::GetFName().c_str()); + if (Ini.HLELogging.GetValue()) LOGF_NOTICE(PPU, "%s enter", CPUThread::GetFName().c_str()); const std::vector& bp = Emu.GetBreakPoints(); @@ -333,18 +333,18 @@ void CPUThread::Task() } catch(const std::string& e) { - ConLog.Error("Exception: %s", e.c_str()); + LOGF_ERROR(PPU, "Exception: %s", e.c_str()); } catch(const char* e) { - ConLog.Error("Exception: %s", e); + LOGF_ERROR(PPU, "Exception: %s", e); } catch(int exitcode) { - ConLog.Success("Exit Code: %d", exitcode); + LOGF_SUCCESS(PPU, "Exit Code: %d", exitcode); } - if (Ini.HLELogging.GetValue()) ConLog.Write("%s leave", CPUThread::GetFName().c_str()); + if (Ini.HLELogging.GetValue()) LOGF_NOTICE(PPU, "%s leave", CPUThread::GetFName().c_str()); } s64 CPUThread::ExecAsCallback(u64 pc, bool wait, u64 a1, u64 a2, u64 a3, u64 a4) // not multithread-safe @@ -353,7 +353,7 @@ s64 CPUThread::ExecAsCallback(u64 pc, bool wait, u64 a1, u64 a2, u64 a3, u64 a4) { if (Emu.IsStopped()) { - ConLog.Warning("ExecAsCallback() aborted"); + LOGF_WARNING(PPU, "ExecAsCallback() aborted"); return CELL_ECANCELED; // doesn't mean anything } Sleep(1); @@ -379,11 +379,11 @@ s64 CPUThread::ExecAsCallback(u64 pc, bool wait, u64 a1, u64 a2, u64 a3, u64 a4) { if (Emu.IsStopped()) { - ConLog.Warning("ExecAsCallback(wait=%s) aborted", wait ? "true" : "false"); + LOGF_WARNING(PPU, "ExecAsCallback(wait=%s) aborted", wait ? "true" : "false"); return CELL_EABORT; // doesn't mean anything } Sleep(1); } return wait * m_exit_status; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index b89c58fbeb..e2e3ad886d 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/Cell/MFC.h b/rpcs3/Emu/Cell/MFC.h index a4cb348559..f3d9d9ebee 100644 --- a/rpcs3/Emu/Cell/MFC.h +++ b/rpcs3/Emu/Cell/MFC.h @@ -183,7 +183,7 @@ struct DMAC return true; default: - ConLog.Error("DMAC::ProcessCmd(): Unknown DMA cmd."); + LOGF_ERROR(HLE, "DMAC::ProcessCmd(): Unknown DMA cmd."); return true; } } @@ -268,19 +268,19 @@ struct DMAC u16 tag = (u16)size_tag; u16 size = size_tag >> 16; - ConLog.Warning("RawSPU DMA %s:", op == MFC_PUT_CMD ? "PUT" : "GET"); - ConLog.Warning("*** lsa = 0x%x", lsa); - ConLog.Warning("*** ea = 0x%llx", ea); - ConLog.Warning("*** tag = 0x%x", tag); - ConLog.Warning("*** size = 0x%x", size); - ConLog.SkipLn(); + LOGF_WARNING(HLE, "RawSPU DMA %s:", op == MFC_PUT_CMD ? "PUT" : "GET"); + LOGF_WARNING(HLE, "*** lsa = 0x%x", lsa); + LOGF_WARNING(HLE, "*** ea = 0x%llx", ea); + LOGF_WARNING(HLE, "*** tag = 0x%x", tag); + LOGF_WARNING(HLE, "*** size = 0x%x", size); + LOG_WARNING(HLE, " "); MFC_CMDStatus.SetValue(dmac.Cmd(cmd, tag, lsa, ea, size)); } break; default: - ConLog.Error("Unknown MFC cmd. (opcode=0x%x, cmd=0x%x)", op, cmd); + LOGF_ERROR(HLE, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x)", op, cmd); break; } } diff --git a/rpcs3/Emu/Cell/PPCDecoder.cpp b/rpcs3/Emu/Cell/PPCDecoder.cpp index fa7d5fc75e..bff5c3e02f 100644 --- a/rpcs3/Emu/Cell/PPCDecoder.cpp +++ b/rpcs3/Emu/Cell/PPCDecoder.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "PPCDecoder.h" diff --git a/rpcs3/Emu/Cell/PPCThread.cpp b/rpcs3/Emu/Cell/PPCThread.cpp index a813d10558..c8f5411432 100644 --- a/rpcs3/Emu/Cell/PPCThread.cpp +++ b/rpcs3/Emu/Cell/PPCThread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "PPCThread.h" diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index a28ee3a050..84aafcd45f 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -70,16 +70,16 @@ private: if(Ini.HLELogging.GetValue()) { - ConLog.Warning("SysCall[0x%llx ('%s')] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], SysCalls::GetHLEFuncName(CPU.GPR[11]).c_str(), CPU.GPR[3], CPU.PC); + LOGF_WARNING(PPU, "SysCall[0x%llx ('%s')] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], SysCalls::GetHLEFuncName(CPU.GPR[11]).c_str(), CPU.GPR[3], CPU.PC); } /*else if ((s64)CPU.GPR[3] < 0) // probably, error code { - ConLog.Error("SysCall[0x%llx] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); + LOGF_ERROR(PPU, "SysCall[0x%llx] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); if(CPU.GPR[11] > 1024) SysCalls::DoFunc(CPU.GPR[11]); }*/ #ifdef HLE_CALL_DEBUG - ConLog.Write("SysCall[%lld] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); + LOGF_NOTICE(PPU, "SysCall[%lld] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); #endif } @@ -2097,7 +2097,7 @@ private: Emu.GetSFuncManager().StaticExecute(CPU.GPR[11]); if (Ini.HLELogging.GetValue()) { - ConLog.Write("'%s' done with code[0x%llx]! #pc: 0x%llx", + LOGF_NOTICE(PPU, "'%s' done with code[0x%llx]! #pc: 0x%llx", Emu.GetSFuncManager()[CPU.GPR[11]]->name, CPU.GPR[3], CPU.PC); } break; @@ -2687,7 +2687,7 @@ private: const u64 RA = CPU.GPR[ra]; CPU.GPR[rd] = RA + CPU.XER.CA; CPU.XER.CA = CPU.IsCarry(RA, CPU.XER.CA); - if(oe) ConLog.Warning("addzeo"); + if(oe) LOG_WARNING(PPU, "addzeo"); if(rc) CPU.UpdateCR0(CPU.GPR[rd]); } void SUBFZE(u32 rd, u32 ra, u32 oe, bool rc) @@ -2695,7 +2695,7 @@ private: const u64 RA = CPU.GPR[ra]; CPU.GPR[rd] = ~RA + CPU.XER.CA; CPU.XER.CA = CPU.IsCarry(~RA, CPU.XER.CA); - if (oe) ConLog.Warning("subfzeo"); + if (oe) LOG_WARNING(PPU, "subfzeo"); if (rc) CPU.UpdateCR0(CPU.GPR[rd]); } void STDCX_(u32 rs, u32 ra, u32 rb) @@ -2728,7 +2728,7 @@ private: const u64 RA = CPU.GPR[ra]; CPU.GPR[rd] = ~RA + CPU.XER.CA + ~0ULL; CPU.XER.CA = CPU.IsCarry(~RA, CPU.XER.CA, ~0ULL); - if (oe) ConLog.Warning("subfmeo"); + if (oe) LOG_WARNING(PPU, "subfmeo"); if (rc) CPU.UpdateCR0(CPU.GPR[rd]); } void MULLD(u32 rd, u32 ra, u32 rb, u32 oe, bool rc) @@ -3509,7 +3509,7 @@ private: void MTFSB1(u32 crbd, bool rc) { u64 mask = (1ULL << crbd); - if ((crbd == 29) && !CPU.FPSCR.NI) ConLog.Warning("Non-IEEE mode enabled"); + if ((crbd == 29) && !CPU.FPSCR.NI) LOG_WARNING(PPU, "Non-IEEE mode enabled"); CPU.FPSCR.FPSCR |= mask; if(rc) UNIMPLEMENTED(); @@ -3523,7 +3523,7 @@ private: void MTFSB0(u32 crbd, bool rc) { u64 mask = (1ULL << crbd); - if ((crbd == 29) && !CPU.FPSCR.NI) ConLog.Warning("Non-IEEE mode disabled"); + if ((crbd == 29) && !CPU.FPSCR.NI) LOG_WARNING(PPU, "Non-IEEE mode disabled"); CPU.FPSCR.FPSCR &= ~mask; if(rc) UNIMPLEMENTED(); @@ -3534,12 +3534,12 @@ private: if(i) { - if ((crfd == 29) && !CPU.FPSCR.NI) ConLog.Warning("Non-IEEE mode enabled"); + if ((crfd == 29) && !CPU.FPSCR.NI) LOG_WARNING(PPU, "Non-IEEE mode enabled"); CPU.FPSCR.FPSCR |= mask; } else { - if ((crfd == 29) && CPU.FPSCR.NI) ConLog.Warning("Non-IEEE mode disabled"); + if ((crfd == 29) && CPU.FPSCR.NI) LOG_WARNING(PPU, "Non-IEEE mode disabled"); CPU.FPSCR.FPSCR &= ~mask; } @@ -3563,9 +3563,9 @@ private: if (CPU.FPSCR.NI != oldNI) { if (oldNI) - ConLog.Warning("Non-IEEE mode disabled"); + LOG_WARNING(PPU, "Non-IEEE mode disabled"); else - ConLog.Warning("Non-IEEE mode enabled"); + LOG_WARNING(PPU, "Non-IEEE mode enabled"); } if(rc) UNK("mtfsf."); } @@ -3995,20 +3995,20 @@ private: void UNK(const std::string& err, bool pause = true) { - ConLog.Error(err + fmt::Format(" #pc: 0x%llx", CPU.PC)); + LOGF_ERROR(PPU, err + fmt::Format(" #pc: 0x%llx", CPU.PC)); if(!pause) return; Emu.Pause(); - for(uint i=0; i<32; ++i) ConLog.Write("r%d = 0x%llx", i, CPU.GPR[i]); - for(uint i=0; i<32; ++i) ConLog.Write("f%d = %llf", i, CPU.FPR[i]); - for(uint i=0; i<32; ++i) ConLog.Write("v%d = 0x%s [%s]", i, CPU.VPR[i].ToString(true).c_str(), CPU.VPR[i].ToString().c_str()); - ConLog.Write("CR = 0x%08x", CPU.CR); - ConLog.Write("LR = 0x%llx", CPU.LR); - ConLog.Write("CTR = 0x%llx", CPU.CTR); - ConLog.Write("XER = 0x%llx [CA=%lld | OV=%lld | SO=%lld]", CPU.XER, fmt::by_value(CPU.XER.CA), fmt::by_value(CPU.XER.OV), fmt::by_value(CPU.XER.SO)); - ConLog.Write("FPSCR = 0x%x " + for(uint i=0; i<32; ++i) LOGF_NOTICE(PPU, "r%d = 0x%llx", i, CPU.GPR[i]); + for(uint i=0; i<32; ++i) LOGF_NOTICE(PPU, "f%d = %llf", i, CPU.FPR[i]); + for(uint i=0; i<32; ++i) LOGF_NOTICE(PPU, "v%d = 0x%s [%s]", i, CPU.VPR[i].ToString(true).c_str(), CPU.VPR[i].ToString().c_str()); + LOGF_NOTICE(PPU, "CR = 0x%08x", CPU.CR); + LOGF_NOTICE(PPU, "LR = 0x%llx", CPU.LR); + LOGF_NOTICE(PPU, "CTR = 0x%llx", CPU.CTR); + LOGF_NOTICE(PPU, "XER = 0x%llx [CA=%lld | OV=%lld | SO=%lld]", CPU.XER, fmt::by_value(CPU.XER.CA), fmt::by_value(CPU.XER.OV), fmt::by_value(CPU.XER.SO)); + LOGF_NOTICE(PPU, "FPSCR = 0x%x " "[RN=%d | NI=%d | XE=%d | ZE=%d | UE=%d | OE=%d | VE=%d | " "VXCVI=%d | VXSQRT=%d | VXSOFT=%d | FPRF=%d | " "FI=%d | FR=%d | VXVC=%d | VXIMZ=%d | " diff --git a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp index cc4da73fb1..6c239fe1cc 100644 --- a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp +++ b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "PPUProgramCompiler.h" diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 09cbc477c5..4e2396d668 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -76,7 +76,7 @@ void PPUThread::InitRegs() if(thread_num < 0) { - ConLog.Error("GetThreadNumById failed."); + LOG_ERROR(PPU, "GetThreadNumById failed."); Emu.Pause(); return; } @@ -87,7 +87,7 @@ void PPUThread::InitRegs() if(tls_size >= Emu.GetTLSMemsz()) { - ConLog.Error("Out of TLS memory."); + LOG_ERROR(PPU, "Out of TLS memory."); Emu.Pause(); return; } @@ -163,7 +163,7 @@ void PPUThread::DoRun() break; default: - ConLog.Error("Invalid CPU decoder mode: %d", Ini.CPUDecoderMode.GetValue()); + LOGF_ERROR(PPU, "Invalid CPU decoder mode: %d", Ini.CPUDecoderMode.GetValue()); Emu.Pause(); } } diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 53a1710093..fe3d115739 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/lv2/SC_Lwmutex.h" @@ -38,7 +38,7 @@ bool RawSPUThread::Read8(const u64 addr, u8* value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - ConLog.Error("RawSPUThread[%d]: Read8(0x%x)", m_index, offset); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read8(0x%x)", m_index, offset); Emu.Pause(); return false; } @@ -51,7 +51,7 @@ bool RawSPUThread::Read16(const u64 addr, u16* value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - ConLog.Error("RawSPUThread[%d]: Read16(0x%x)", m_index, offset); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read16(0x%x)", m_index, offset); Emu.Pause(); return false; } @@ -66,39 +66,39 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; switch(offset) { - case MFC_LSA_offs: ConLog.Warning("RawSPUThread[%d]: Read32(MFC_LSA)", m_index); *value = MFC2.LSA.GetValue(); break; - case MFC_EAH_offs: ConLog.Warning("RawSPUThread[%d]: Read32(MFC_EAH)", m_index); *value = MFC2.EAH.GetValue(); break; - case MFC_EAL_offs: ConLog.Warning("RawSPUThread[%d]: Read32(MFC_EAL)", m_index); *value = MFC2.EAL.GetValue(); break; - case MFC_Size_Tag_offs: ConLog.Warning("RawSPUThread[%d]: Read32(MFC_Size_Tag)", m_index); *value = MFC2.Size_Tag.GetValue(); break; - case MFC_CMDStatus_offs: ConLog.Warning("RawSPUThread[%d]: Read32(MFC_CMDStatus)", m_index); *value = MFC2.CMDStatus.GetValue(); break; + case MFC_LSA_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_LSA)", m_index); *value = MFC2.LSA.GetValue(); break; + case MFC_EAH_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAH)", m_index); *value = MFC2.EAH.GetValue(); break; + case MFC_EAL_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAL)", m_index); *value = MFC2.EAL.GetValue(); break; + case MFC_Size_Tag_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_Size_Tag)", m_index); *value = MFC2.Size_Tag.GetValue(); break; + case MFC_CMDStatus_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_CMDStatus)", m_index); *value = MFC2.CMDStatus.GetValue(); break; case MFC_QStatus_offs: - ConLog.Warning("RawSPUThread[%d]: Read32(MFC_QStatus)", m_index); + LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_QStatus)", m_index); *value = MFC2.QStatus.GetValue(); break; - case Prxy_QueryType_offs: ConLog.Warning("RawSPUThread[%d]: Read32(Prxy_QueryType)", m_index); *value = Prxy.QueryType.GetValue(); break; - case Prxy_QueryMask_offs: ConLog.Warning("RawSPUThread[%d]: Read32(Prxy_QueryMask)", m_index); *value = Prxy.QueryMask.GetValue(); break; - case Prxy_TagStatus_offs: ConLog.Warning("RawSPUThread[%d]: Read32(Prxy_TagStatus)", m_index); *value = Prxy.TagStatus.GetValue(); break; + case Prxy_QueryType_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryType)", m_index); *value = Prxy.QueryType.GetValue(); break; + case Prxy_QueryMask_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryMask)", m_index); *value = Prxy.QueryMask.GetValue(); break; + case Prxy_TagStatus_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_TagStatus)", m_index); *value = Prxy.TagStatus.GetValue(); break; case SPU_Out_MBox_offs: - //ConLog.Warning("RawSPUThread[%d]: Read32(SPU_Out_MBox)", m_index); + //LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Out_MBox)", m_index); SPU.Out_MBox.PopUncond(*value); //if Out_MBox is empty yet, the result will be undefined break; - case SPU_In_MBox_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); while(!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) Sleep(1); break; - case SPU_MBox_Status_offs: //ConLog.Warning("RawSPUThread[%d]: Read32(SPU_MBox_Status)", m_index); + case SPU_In_MBox_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); while(!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) Sleep(1); break; + case SPU_MBox_Status_offs: //LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_MBox_Status)", m_index); //SPU.MBox_Status.SetValue(SPU.Out_MBox.GetCount() ? SPU.MBox_Status.GetValue() | 1 : SPU.MBox_Status.GetValue() & ~1); SPU.MBox_Status.SetValue((SPU.Out_MBox.GetCount() & 0xff) | (SPU.In_MBox.GetFreeCount() << 8)); *value = SPU.MBox_Status.GetValue(); break; - case SPU_RunCntl_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); *value = SPU.RunCntl.GetValue(); break; + case SPU_RunCntl_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); *value = SPU.RunCntl.GetValue(); break; case SPU_Status_offs: - //ConLog.Warning("RawSPUThread[%d]: Read32(SPU_Status)", m_index); + //LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Status)", m_index); *value = SPU.Status.GetValue(); break; - case SPU_NPC_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_NPC)", m_index); *value = SPU.NPC.GetValue(); break; - case SPU_RdSigNotify1_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_RdSigNotify1)", m_index); *value = SPU.SNR[0].GetValue(); break; - case SPU_RdSigNotify2_offs: ConLog.Warning("RawSPUThread[%d]: Read32(SPU_RdSigNotify2)", m_index); *value = SPU.SNR[1].GetValue(); break; + case SPU_NPC_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_NPC)", m_index); *value = SPU.NPC.GetValue(); break; + case SPU_RdSigNotify1_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify1)", m_index); *value = SPU.SNR[0].GetValue(); break; + case SPU_RdSigNotify2_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify2)", m_index); *value = SPU.SNR[1].GetValue(); break; default: - ConLog.Error("RawSPUThread[%d]: Read32(0x%x)", m_index, offset); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(0x%x)", m_index, offset); Emu.Pause(); break; } @@ -114,7 +114,7 @@ bool RawSPUThread::Read64(const u64 addr, u64* value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - ConLog.Error("RawSPUThread[%d]: Read64(0x%x)", m_index, offset); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read64(0x%x)", m_index, offset); Emu.Pause(); return false; } @@ -127,7 +127,7 @@ bool RawSPUThread::Read128(const u64 addr, u128* value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - ConLog.Error("RawSPUThread[%d]: Read128(0x%x)", m_index, offset); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read128(0x%x)", m_index, offset); Emu.Pause(); return false; } @@ -140,7 +140,7 @@ bool RawSPUThread::Write8(const u64 addr, const u8 value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - ConLog.Error("RawSPUThread[%d]: Write8(0x%x, 0x%x)", m_index, offset, value); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write8(0x%x, 0x%x)", m_index, offset, value); Emu.Pause(); return false; } @@ -153,7 +153,7 @@ bool RawSPUThread::Write16(const u64 addr, const u16 value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - ConLog.Error("RawSPUThread[%d]: Write16(0x%x, 0x%x)", m_index, offset, value); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write16(0x%x, 0x%x)", m_index, offset, value); Emu.Pause(); return false; } @@ -177,20 +177,20 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) MFC2.CMDStatus.SetValue(value); EnqMfcCmd(MFC2); break; - case MFC_QStatus_offs: ConLog.Warning("RawSPUThread[%d]: Write32(MFC_QStatus, 0x%x)", m_index, value); MFC2.QStatus.SetValue(value); break; + case MFC_QStatus_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(MFC_QStatus, 0x%x)", m_index, value); MFC2.QStatus.SetValue(value); break; case Prxy_QueryType_offs: { - ConLog.Warning("RawSPUThread[%d]: Write32(Prxy_QueryType, 0x%x)", m_index, value); + LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryType, 0x%x)", m_index, value); Prxy.QueryType.SetValue(value); switch(value) { case 2: - ConLog.Warning("RawSPUThread[%d]: Prxy Query Immediate.", m_index); + LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Prxy Query Immediate.", m_index); break; default: - ConLog.Error("RawSPUThread[%d]: Unknown Prxy Query Type. (prxy_query=0x%x)", m_index, value); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Unknown Prxy Query Type. (prxy_query=0x%x)", m_index, value); break; } @@ -198,22 +198,22 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) MFC2.QStatus.SetValue(Prxy.QueryMask.GetValue()); } break; - case Prxy_QueryMask_offs: ConLog.Warning("RawSPUThread[%d]: Write32(Prxy_QueryMask, 0x%x)", m_index, value); Prxy.QueryMask.SetValue(value); break; - case Prxy_TagStatus_offs: ConLog.Warning("RawSPUThread[%d]: Write32(Prxy_TagStatus, 0x%x)", m_index, value); Prxy.TagStatus.SetValue(value); break; - case SPU_Out_MBox_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); while(!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) Sleep(1); break; + case Prxy_QueryMask_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryMask, 0x%x)", m_index, value); Prxy.QueryMask.SetValue(value); break; + case Prxy_TagStatus_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_TagStatus, 0x%x)", m_index, value); Prxy.TagStatus.SetValue(value); break; + case SPU_Out_MBox_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); while(!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) Sleep(1); break; case SPU_In_MBox_offs: - //ConLog.Warning("RawSPUThread[%d]: Write32(SPU_In_MBox, 0x%x)", m_index, value); + //LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_In_MBox, 0x%x)", m_index, value); SPU.In_MBox.PushUncond(value); //if In_MBox is already full, the last message will be overwritten break; - case SPU_MBox_Status_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); SPU.MBox_Status.SetValue(value); break; - case SPU_RunCntl_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_RunCntl, 0x%x)", m_index, value); SPU.RunCntl.SetValue(value); break; - case SPU_Status_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_Status, 0x%x)", m_index, value); SPU.Status.SetValue(value); break; - case SPU_NPC_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_NPC, 0x%x)", m_index, value); SPU.NPC.SetValue(value); break; - case SPU_RdSigNotify1_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_RdSigNotify1, 0x%x)", m_index, value); SPU.SNR[0].SetValue(value); break; - case SPU_RdSigNotify2_offs: ConLog.Warning("RawSPUThread[%d]: Write32(SPU_RdSigNotify2, 0x%x)", m_index, value); SPU.SNR[1].SetValue(value); break; + case SPU_MBox_Status_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); SPU.MBox_Status.SetValue(value); break; + case SPU_RunCntl_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RunCntl, 0x%x)", m_index, value); SPU.RunCntl.SetValue(value); break; + case SPU_Status_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Status, 0x%x)", m_index, value); SPU.Status.SetValue(value); break; + case SPU_NPC_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_NPC, 0x%x)", m_index, value); SPU.NPC.SetValue(value); break; + case SPU_RdSigNotify1_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify1, 0x%x)", m_index, value); SPU.SNR[0].SetValue(value); break; + case SPU_RdSigNotify2_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify2, 0x%x)", m_index, value); SPU.SNR[1].SetValue(value); break; default: - ConLog.Error("RawSPUThread[%d]: Write32(0x%x, 0x%x)", m_index, offset, value); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(0x%x, 0x%x)", m_index, offset, value); Emu.Pause(); break; } @@ -229,7 +229,7 @@ bool RawSPUThread::Write64(const u64 addr, const u64 value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - ConLog.Error("RawSPUThread[%d]: Write64(0x%x, 0x%llx)", m_index, offset, value); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write64(0x%x, 0x%llx)", m_index, offset, value); Emu.Pause(); return false; } @@ -242,7 +242,7 @@ bool RawSPUThread::Write128(const u64 addr, const u128 value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - ConLog.Error("RawSPUThread[%d]: Write128(0x%x, 0x%llx_%llx)", m_index, offset, value._u64[1], value._u64[0]); + LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write128(0x%x, 0x%llx_%llx)", m_index, offset, value._u64[1], value._u64[0]); Emu.Pause(); return false; } @@ -260,7 +260,7 @@ u32 RawSPUThread::GetIndex() const void RawSPUThread::Task() { - if (Ini.HLELogging.GetValue()) ConLog.Write("%s enter", PPCThread::GetFName().c_str()); + if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "%s enter", PPCThread::GetFName().c_str()); const std::vector& bp = Emu.GetBreakPoints(); @@ -312,7 +312,7 @@ void RawSPUThread::Task() is_last_paused = false; PC = SPU.NPC.GetValue(); SPU.Status.SetValue(SPU_STATUS_RUNNING); - ConLog.Warning("Starting RawSPU..."); + LOGF_WARNING(Log::SPU, "Starting RawSPU..."); } Step(); @@ -336,12 +336,12 @@ void RawSPUThread::Task() } catch(const std::string& e) { - ConLog.Error("Exception: %s", e.c_str()); + LOGF_ERROR(Log::SPU, "Exception: %s", e.c_str()); } catch(const char* e) { - ConLog.Error("Exception: %s", e); + LOGF_ERROR(Log::SPU, "Exception: %s", e); } - if (Ini.HLELogging.GetValue()) ConLog.Write("%s leave", PPCThread::GetFName().c_str()); + if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "%s leave", PPCThread::GetFName().c_str()); } diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index 209d3c5efb..2161b4f7f6 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -18,9 +18,9 @@ #define MEM_AND_REG_HASH() \ unsigned char mem_h[20]; sha1(&Memory[CPU.dmac.ls_offset], 256*1024, mem_h); \ unsigned char reg_h[20]; sha1((const unsigned char*)CPU.GPR, sizeof(CPU.GPR), reg_h); \ - ConLog.Write("Mem hash: 0x%llx, reg hash: 0x%llx", *(u64*)mem_h, *(u64*)reg_h); + LOGF_NOTICE(Log::SPU, "Mem hash: 0x%llx, reg hash: 0x%llx", *(u64*)mem_h, *(u64*)reg_h); -#define LOG2_OPCODE(...) //MEM_AND_REG_HASH(); ConLog.Write(__FUNCTION__ "(): " __VA_ARGS__) +#define LOG2_OPCODE(...) //MEM_AND_REG_HASH(); LOGF_NOTICE(Log::SPU, __FUNCTION__ "(): " __VA_ARGS__) #define LOG5_OPCODE(...) /// @@ -339,7 +339,7 @@ private: u32 lsa = (CPU.GPR[ra]._u32[3] + CPU.GPR[rb]._u32[3]) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - ConLog.Error("STQX: bad lsa (0x%x)", lsa); + LOGF_ERROR(Log::SPU, "STQX: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -438,7 +438,7 @@ private: if(!CPU.IsGoodLSA(lsa)) { - ConLog.Error("LQX: bad lsa (0x%x)", lsa); + LOGF_ERROR(Log::SPU, "LQX: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1126,7 +1126,7 @@ private: u32 lsa = (i16 << 2) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - ConLog.Error("STQA: bad lsa (0x%x)", lsa); + LOGF_ERROR(Log::SPU, "STQA: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1177,7 +1177,7 @@ private: u32 lsa = branchTarget(CPU.PC, i16) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - ConLog.Error("STQR: bad lsa (0x%x)", lsa); + LOGF_ERROR(Log::SPU, "STQR: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1195,7 +1195,7 @@ private: u32 lsa = (i16 << 2) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - ConLog.Error("LQA: bad lsa (0x%x)", lsa); + LOGF_ERROR(Log::SPU, "LQA: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1245,7 +1245,7 @@ private: u32 lsa = branchTarget(CPU.PC, i16) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - ConLog.Error("LQR: bad lsa (0x%x)", lsa); + LOGF_ERROR(Log::SPU, "LQR: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1334,11 +1334,11 @@ private: const u32 lsa = (CPU.GPR[ra]._i32[3] + i10) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - ConLog.Error("STQD: bad lsa (0x%x)", lsa); + LOGF_ERROR(Log::SPU, "STQD: bad lsa (0x%x)", lsa); Emu.Pause(); return; } - //ConLog.Write("STQD(lsa=0x%x): GPR[%d] (0x%llx%llx)", lsa, rt, CPU.GPR[rt]._u64[1], CPU.GPR[rt]._u64[0]); + //LOGF_NOTICE(Log::SPU, "STQD(lsa=0x%x): GPR[%d] (0x%llx%llx)", lsa, rt, CPU.GPR[rt]._u64[1], CPU.GPR[rt]._u64[0]); CPU.WriteLS128(lsa, CPU.GPR[rt]._u128); } void LQD(u32 rt, s32 i10, u32 ra) //i10 is shifted left by 4 while decoding @@ -1346,7 +1346,7 @@ private: const u32 lsa = (CPU.GPR[ra]._i32[3] + i10) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - ConLog.Error("LQD: bad lsa (0x%x)", lsa); + LOGF_ERROR(Log::SPU, "LQD: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1540,8 +1540,8 @@ private: void UNK(const std::string& err) { - ConLog.Error(err + fmt::Format(" #pc: 0x%x", CPU.PC)); + LOGF_ERROR(Log::SPU, err + fmt::Format(" #pc: 0x%x", CPU.PC)); Emu.Pause(); - for(uint i=0; i<128; ++i) ConLog.Write("r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); + for(uint i=0; i<128; ++i) LOGF_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); } }; diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index b68a7c6cd1..382f064b0e 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -3845,7 +3845,7 @@ private: void UNK(const std::string& err) { - ConLog.Error(err + fmt::Format(" #pc: 0x%x", CPU.PC)); + LOGF_ERROR(Log::SPU, err + fmt::Format(" #pc: 0x%x", CPU.PC)); c.mov(cpu_qword(PC), (u32)CPU.PC); do_finalize = true; Emu.Pause(); diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 565132430f..2d990c5d55 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/lv2/SC_Lwmutex.h" @@ -164,7 +164,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) if (!pos) { - ConLog.Error("SPURecompilerCore::DecodeMemory(): ls_addr = 0"); + LOGF_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(): ls_addr = 0"); Emu.Pause(); return 0; } @@ -185,7 +185,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) if (!is_valid) { // TODO - ConLog.Error("SPURecompilerCore::DecodeMemory(ls_addr=0x%x): code has changed", pos * sizeof(u32)); + LOGF_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(ls_addr=0x%x): code has changed", pos * sizeof(u32)); Emu.Pause(); return 0; } @@ -198,7 +198,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) did_compile = true; if (entry[pos].valid == 0) { - ConLog.Error("SPURecompilerCore::Compile(ls_addr=0x%x): branch to 0x0 opcode", pos * sizeof(u32)); + LOGF_ERROR(Log::SPU, "SPURecompilerCore::Compile(ls_addr=0x%x): branch to 0x0 opcode", pos * sizeof(u32)); Emu.Pause(); return 0; } @@ -206,7 +206,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) if (!entry[pos].pointer) { - ConLog.Error("SPURecompilerCore::DecodeMemory(ls_addr=0x%x): compilation failed", pos * sizeof(u32)); + LOGF_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(ls_addr=0x%x): compilation failed", pos * sizeof(u32)); Emu.Pause(); return 0; } @@ -223,7 +223,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) //if (pos == 0x19c >> 2) { //Emu.Pause(); - //for (uint i = 0; i < 128; ++i) ConLog.Write("r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); + //for (uint i = 0; i < 128; ++i) LOGF_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); } } @@ -243,7 +243,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) //if (pos == 0x340 >> 2) { //Emu.Pause(); - //for (uint i = 0; i < 128; ++i) ConLog.Write("r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); + //for (uint i = 0; i < 128; ++i) LOGF_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); } } diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index c454171422..9e6acd5827 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/lv2/SC_Lwmutex.h" @@ -86,7 +86,7 @@ void SPUThread::DoRun() break; default: - ConLog.Error("Invalid SPU decoder mode: %d", Ini.SPUDecoderMode.GetValue()); + LOGF_ERROR(Log::SPU, "Invalid SPU decoder mode: %d", Ini.SPUDecoderMode.GetValue()); Emu.Pause(); } } diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 8a789cee2a..a28f8e906b 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -211,7 +211,7 @@ public: return this->low >> 22 & 0x3; default: - ConLog.Error("Unexpected slice value in FPSCR::checkSliceRounding(): %d", slice); + LOGF_ERROR(SPU, "Unexpected slice value in FPSCR::checkSliceRounding(): %d", slice); return 0; } } @@ -599,7 +599,7 @@ public: u32 num = (ea & SYS_SPU_THREAD_BASE_MASK) / SYS_SPU_THREAD_OFFSET; // thread number in group if (num >= group->list.size() || !group->list[num]) { - ConLog.Error("DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): invalid thread", ea); + LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): invalid thread", ea); return false; } @@ -618,13 +618,13 @@ public: } else { - ConLog.Error("DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx, size=%d, cmd=0x%x): invalid command", ea, size, cmd); + LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx, size=%d, cmd=0x%x): invalid command", ea, size, cmd); return false; } } else { - ConLog.Error("DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): group not set", ea); + LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): group not set", ea); return false; } } @@ -646,7 +646,7 @@ public: default: { - ConLog.Error("DMAC::ProcessCmd(): Unknown DMA cmd."); + LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): Unknown DMA cmd."); return false; } } @@ -664,7 +664,7 @@ public: } else { - ConLog.Error("DMAC::ProcessCmd(): PUT* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); + LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): PUT* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); return false; // TODO: page fault (?) } } @@ -677,14 +677,14 @@ public: } else { - ConLog.Error("DMAC::ProcessCmd(): GET* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); + LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): GET* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); return false; // TODO: page fault (?) } } default: { - ConLog.Error("DMAC::ProcessCmd(): Unknown DMA cmd."); + LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): Unknown DMA cmd."); return false; // ??? } } @@ -725,7 +725,7 @@ public: u32 size = rec->ts; if (size < 16 && size != 1 && size != 2 && size != 4 && size != 8) { - ConLog.Error("DMA List: invalid transfer size(%d)", size); + LOGF_ERROR(Log::SPU, "DMA List: invalid transfer size(%d)", size); return; } @@ -737,7 +737,7 @@ public: } if (Ini.HLELogging.GetValue() || rec->s) - ConLog.Write("*** list element(%d/%d): s = 0x%x, ts = 0x%x, low ea = 0x%x (lsa = 0x%x)", + LOGF_NOTICE(Log::SPU, "*** list element(%d/%d): s = 0x%x, ts = 0x%x, low ea = 0x%x (lsa = 0x%x)", i, list_size, (u16)rec->s, (u16)rec->ts, (u32)rec->ea, lsa | (addr & 0xf)); lsa += std::max(size, (u32)16); @@ -748,7 +748,7 @@ public: if (StallList[tag].MFCArgs) { - ConLog.Error("DMA List: existing stalled list found (tag=%d)", tag); + LOGF_ERROR(Log::SPU, "DMA List: existing stalled list found (tag=%d)", tag); } StallList[tag].MFCArgs = &MFCArgs; StallList[tag].cmd = cmd; @@ -780,7 +780,7 @@ public: case MFC_PUTR_CMD: // ??? case MFC_GET_CMD: { - if (Ini.HLELogging.GetValue()) ConLog.Write("DMA %s%s%s%s: lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", + if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", (op & MFC_PUT_CMD ? "PUT" : "GET"), (op & MFC_RESULT_MASK ? "R" : ""), (op & MFC_BARRIER_MASK ? "B" : ""), @@ -795,7 +795,7 @@ public: case MFC_PUTRL_CMD: // ??? case MFC_GETL_CMD: { - if (Ini.HLELogging.GetValue()) ConLog.Write("DMA %s%s%s%s: lsa = 0x%x, list = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", + if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, list = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", (op & MFC_PUT_CMD ? "PUT" : "GET"), (op & MFC_RESULT_MASK ? "RL" : "L"), (op & MFC_BARRIER_MASK ? "B" : ""), @@ -811,7 +811,7 @@ public: case MFC_PUTLLUC_CMD: case MFC_PUTQLLUC_CMD: { - if (Ini.HLELogging.GetValue() || size != 128) ConLog.Write("DMA %s: lsa=0x%x, ea = 0x%llx, (tag) = 0x%x, (size) = 0x%x, cmd = 0x%x", + if (Ini.HLELogging.GetValue() || size != 128) LOGF_NOTICE(Log::SPU, "DMA %s: lsa=0x%x, ea = 0x%llx, (tag) = 0x%x, (size) = 0x%x, cmd = 0x%x", (op == MFC_GETLLAR_CMD ? "GETLLAR" : op == MFC_PUTLLC_CMD ? "PUTLLC" : op == MFC_PUTLLUC_CMD ? "PUTLLUC" : "PUTQLLUC"), @@ -857,7 +857,7 @@ public: { if (buf[last].hi != reservation.data[last].hi && buf[last].lo != reservation.data[last].lo) { - ConLog.Error("MFC_PUTLLC_CMD: TODO: 128bit compare and swap"); + LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: TODO: 128bit compare and swap"); Emu.Pause(); Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); } @@ -885,7 +885,7 @@ public: } else // full 64 bit { - ConLog.Error("MFC_PUTLLC_CMD: TODO: 64bit compare and swap"); + LOGF_ERROR(Log::SPU, "MFC_PUTLLC_CMD: TODO: 64bit compare and swap"); Emu.Pause(); Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); }*/ @@ -894,7 +894,7 @@ public: else { ProcessCmd(MFC_PUT_CMD, tag, lsa, ea, 128); - ConLog.Error("MFC_PUTLLC_CMD: Reservation Error: impossibru (~ 16x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + LOGF_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Reservation Error: impossibru (~ 16x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", changed, mask, op, cmd, lsa, ea, tag, size); Emu.Pause(); Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); @@ -929,7 +929,7 @@ public: break; default: - ConLog.Error("Unknown MFC cmd. (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + LOGF_ERROR( Log::SPU, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", op, cmd, lsa, ea, tag, size); break; } @@ -949,7 +949,7 @@ public: return count; case SPU_WrOutIntrMbox: - ConLog.Warning("GetChannelCount(%s) = 0", spu_ch_name[ch]); + LOGF_WARNING(Log::SPU, "GetChannelCount(%s) = 0", spu_ch_name[ch]); return 0; case MFC_RdTagStat: @@ -971,7 +971,7 @@ public: return Prxy.AtomicStat.GetCount(); default: - ConLog.Error("%s error: unknown/illegal channel (%d [%s]).", + LOGF_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); break; } @@ -988,7 +988,7 @@ public: case SPU_WrOutIntrMbox: if (!group) // if RawSPU { - if (Ini.HLELogging.GetValue()) ConLog.Write("SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); + if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); SPU.Out_IntrMBox.PushUncond(v); m_intrtag[2].stat |= 1; if (CPUThread* t = Emu.GetCPU().GetThread(m_intrtag[2].thread)) @@ -998,7 +998,7 @@ public: Sleep(1); if (Emu.IsStopped()) { - ConLog.Warning("%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + LOGF_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); return; } } @@ -1019,20 +1019,20 @@ public: u32 data; if (!SPU.Out_MBox.Pop(data)) { - ConLog.Error("sys_spu_thread_send_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); + LOGF_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); return; } if (SPU.In_MBox.GetCount()) { - ConLog.Error("sys_spu_thread_send_event(v=0x%x, spup=%d): In_MBox is not empty", v, spup); + LOGF_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): In_MBox is not empty", v, spup); SPU.In_MBox.PushUncond(CELL_EBUSY); // ??? return; } if (Ini.HLELogging.GetValue()) { - ConLog.Write("sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); + LOGF_NOTICE(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); } EventPort& port = SPUPs[spup]; @@ -1042,7 +1042,7 @@ public: if (!port.eq) { // spu_printf fails there - ConLog.Warning("sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, v & 0x00ffffff, data); + LOGF_WARNING(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); SPU.In_MBox.PushUncond(CELL_ENOTCONN); // TODO: check error passing return; } @@ -1064,25 +1064,25 @@ public: u32 data; if (!SPU.Out_MBox.Pop(data)) { - ConLog.Error("sys_event_flag_set_bit(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); + LOGF_ERROR(Log::SPU, "sys_event_flag_set_bit(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); return; } if (flag > 63) { - ConLog.Error("sys_event_flag_set_bit(id=%d, v=0x%x): flag > 63", data, v, flag); + LOGF_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x): flag > 63", data, v, flag); return; } //if (Ini.HLELogging.GetValue()) { - ConLog.Warning("sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d))", data, v, flag); + LOGF_WARNING(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d))", data, v, flag); } EventFlag* ef; if (!Emu.GetIdManager().GetIDData(data, ef)) { - ConLog.Error("sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); + LOGF_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); SPU.In_MBox.PushUncond(CELL_ESRCH); return; } @@ -1110,11 +1110,11 @@ public: u32 data; if (SPU.Out_MBox.Pop(data)) { - ConLog.Error("SPU_WrOutIntrMbox: unknown data (v=0x%x); Out_MBox = 0x%x", v, data); + LOGF_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x); Out_MBox = 0x%x", v, data); } else { - ConLog.Error("SPU_WrOutIntrMbox: unknown data (v=0x%x)", v); + LOGF_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x)", v); } SPU.In_MBox.PushUncond(CELL_EINVAL); // ??? return; @@ -1166,13 +1166,13 @@ public: { if (v >= 32) { - ConLog.Error("MFC_WrListStallAck error: invalid tag(%d)", v); + LOGF_ERROR(Log::SPU, "MFC_WrListStallAck error: invalid tag(%d)", v); return; } StalledList temp = StallList[v]; if (!temp.MFCArgs) { - ConLog.Error("MFC_WrListStallAck error: empty tag(%d)", v); + LOGF_ERROR(Log::SPU, "MFC_WrListStallAck error: empty tag(%d)", v); return; } StallList[v].MFCArgs = nullptr; @@ -1181,11 +1181,11 @@ public: break; default: - ConLog.Error("%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); + LOGF_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); break; } - if (Emu.IsStopped()) ConLog.Warning("%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + if (Emu.IsStopped()) LOGF_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); } void ReadChannel(SPU_GPR_hdr& r, u32 ch) @@ -1224,11 +1224,11 @@ public: break; default: - ConLog.Error("%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); + LOGF_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); break; } - if (Emu.IsStopped()) ConLog.Warning("%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + if (Emu.IsStopped()) LOGF_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); } void DoStop(u32 code) @@ -1242,21 +1242,21 @@ public: u32 spuq = 0; if (!SPU.Out_MBox.Pop(spuq)) { - ConLog.Error("sys_spu_thread_receive_event: cannot read Out_MBox"); + LOG_ERROR(Log::SPU, "sys_spu_thread_receive_event: cannot read Out_MBox"); SPU.In_MBox.PushUncond(CELL_EINVAL); // ??? return; } if (SPU.In_MBox.GetCount()) { - ConLog.Error("sys_spu_thread_receive_event(spuq=0x%x): In_MBox is not empty", spuq); + LOGF_ERROR(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x): In_MBox is not empty", spuq); SPU.In_MBox.PushUncond(CELL_EBUSY); // ??? return; } if (Ini.HLELogging.GetValue()) { - ConLog.Write("sys_spu_thread_receive_event(spuq=0x%x)", spuq); + LOGF_NOTICE(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x)", spuq); } EventQueue* eq; @@ -1307,7 +1307,7 @@ public: Sleep(1); if (Emu.IsStopped()) { - ConLog.Warning("sys_spu_thread_receive_event(spuq=0x%x) aborted", spuq); + LOGF_WARNING(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x) aborted", spuq); eq->sq.invalidate(tid); return; } @@ -1317,12 +1317,12 @@ public: case 0x102: if (!SPU.Out_MBox.GetCount()) { - ConLog.Error("sys_spu_thread_exit (no status, code 0x102)"); + LOG_ERROR(Log::SPU, "sys_spu_thread_exit (no status, code 0x102)"); } else if (Ini.HLELogging.GetValue()) { // the real exit status - ConLog.Write("sys_spu_thread_exit (status=0x%x)", SPU.Out_MBox.GetValue()); + LOGF_NOTICE(Log::SPU, "sys_spu_thread_exit (status=0x%x)", SPU.Out_MBox.GetValue()); } SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); Stop(); @@ -1330,11 +1330,11 @@ public: default: if (!SPU.Out_MBox.GetCount()) { - ConLog.Error("Unknown STOP code: 0x%x (no message)", code); + LOGF_ERROR(Log::SPU, "Unknown STOP code: 0x%x (no message)", code); } else { - ConLog.Error("Unknown STOP code: 0x%x (message=0x%x)", code, SPU.Out_MBox.GetValue()); + LOGF_ERROR(Log::SPU, "Unknown STOP code: 0x%x (message=0x%x)", code, SPU.Out_MBox.GetValue()); } SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); Stop(); diff --git a/rpcs3/Emu/ConLog.h b/rpcs3/Emu/ConLog.h deleted file mode 100644 index 615d8e6d29..0000000000 --- a/rpcs3/Emu/ConLog.h +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once - -class LogWriter -{ - rFile m_logfile; - - void WriteToLog(const std::string& prefix, const std::string& value, u8 lvl); - -public: - LogWriter(); - - template - void Write(const std::string &fmt, Arg... args) - { - std::string frmt = fmt::Format(fmt, std::forward(args)...); - WriteToLog("!", frmt, 2); - } - - template - void Error(const std::string &fmt, Arg... args) - { - std::string frmt = fmt::Format(fmt, std::forward(args)...); - WriteToLog("E", frmt, 4); - } - - template - void Warning(const std::string &fmt, Arg... args) - { - std::string frmt = fmt::Format(fmt, std::forward(args)...); - WriteToLog("W", frmt, 3); - } - - template - void Success(const std::string &fmt, Arg... args) - { - std::string frmt = fmt::Format(fmt, std::forward(args)...); - WriteToLog("S", frmt, 1); - } - - virtual void SkipLn(); -}; - - -extern LogWriter ConLog; diff --git a/rpcs3/Emu/DbgConsole.cpp b/rpcs3/Emu/DbgConsole.cpp deleted file mode 100644 index 3e9605cbbd..0000000000 --- a/rpcs3/Emu/DbgConsole.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "stdafx.h" -#include "Emu/ConLog.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "DbgConsole.h" - -BEGIN_EVENT_TABLE(DbgConsole, FrameBase) -EVT_CLOSE(DbgConsole::OnQuit) -END_EVENT_TABLE() - -DbgConsole::DbgConsole() -: FrameBase(nullptr, wxID_ANY, "Debug Console", "", wxDefaultSize, wxDefaultPosition, wxDEFAULT_FRAME_STYLE, true) -, ThreadBase("DbgConsole thread") -, m_output(nullptr) -{ - m_console = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, - wxSize(500, 500), wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH2); - m_console->SetBackgroundColour(wxColor("Black")); - m_console->SetFont(wxFont(8, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL)); - - m_color_white = new wxTextAttr(wxColour(255, 255, 255)); - m_color_red = new wxTextAttr(wxColour(255, 0, 0)); - - if (Ini.HLESaveTTY.GetValue()) - m_output = new wxFile("tty.log", wxFile::write); -} - -DbgConsole::~DbgConsole() -{ - ThreadBase::Stop(); - m_dbg_buffer.Flush(); - - safe_delete(m_console); - safe_delete(m_color_white); - safe_delete(m_color_red); - safe_delete(m_output); -} - -void DbgConsole::Write(int ch, const std::string& text) -{ - while (m_dbg_buffer.IsBusy()) - { - if (Emu.IsStopped()) - { - return; - } - Sleep(1); - } - m_dbg_buffer.Push(DbgPacket(ch, text)); - - if (!IsAlive()) Start(); -} - -void DbgConsole::Clear() -{ - m_console->Clear(); -} - -void DbgConsole::Task() -{ - while (!TestDestroy()) - { - if (!m_dbg_buffer.HasNewPacket()) - { - if (Emu.IsStopped()) - { - break; - } - Sleep(1); - continue; - } - - DbgPacket packet = m_dbg_buffer.Pop(); - m_console->SetDefaultStyle(packet.m_ch == 1 ? *m_color_red : *m_color_white); - m_console->SetInsertionPointEnd(); - m_console->WriteText(fmt::FromUTF8(packet.m_text)); - - if (m_output && Ini.HLESaveTTY.GetValue()) - m_output->Write(fmt::FromUTF8(packet.m_text)); - - if (!DbgConsole::IsShown()) Show(); - } -} - -void DbgConsole::OnQuit(wxCloseEvent& event) -{ - ThreadBase::Stop(false); - Hide(); - - if (m_output) - { - m_output->Close(); - m_output = nullptr; - } - - //event.Skip(); -} diff --git a/rpcs3/Emu/DbgConsole.h b/rpcs3/Emu/DbgConsole.h deleted file mode 100644 index 5775f98865..0000000000 --- a/rpcs3/Emu/DbgConsole.h +++ /dev/null @@ -1,93 +0,0 @@ -#pragma once - -#include //for memset - -struct DbgPacket -{ - int m_ch; - std::string m_text; - - DbgPacket(int ch, const std::string& text) - : m_ch(ch) - , m_text(text) - { - } - - DbgPacket() - { - } - - void Clear() - { - m_text.clear(); - } -}; - -struct _DbgBuffer : public MTPacketBuffer -{ - _DbgBuffer() : MTPacketBuffer(1024) - { - } - - void _push(const DbgPacket& data) - { - const u32 stext = data.m_text.length(); - - m_buffer.resize(m_buffer.size() + sizeof(int) + sizeof(u32) + stext); - - u32 c_put = m_put; - - memcpy(&m_buffer[c_put], &data.m_ch, sizeof(int)); - c_put += sizeof(int); - - memcpy(&m_buffer[c_put], &stext, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_text.data(), stext); - c_put += stext; - - m_put = c_put; - CheckBusy(); - } - - DbgPacket _pop() - { - DbgPacket ret; - - u32 c_get = m_get; - - ret.m_ch = *(int*)&m_buffer[c_get]; - c_get += sizeof(int); - - const u32& stext = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - if (stext) ret.m_text = std::string(reinterpret_cast(&m_buffer[c_get]), stext); - c_get += stext; - - m_get = c_get; - if (!HasNewPacket()) Flush(); - - return ret; - } -}; - -class DbgConsole - : public FrameBase - , public ThreadBase -{ - wxFile* m_output; - wxTextCtrl* m_console; - wxTextAttr* m_color_white; - wxTextAttr* m_color_red; - _DbgBuffer m_dbg_buffer; - -public: - DbgConsole(); - ~DbgConsole(); - void Write(int ch, const std::string& text); - void Clear(); - virtual void Task(); - -private: - void OnQuit(wxCloseEvent& event); - DECLARE_EVENT_TABLE(); -}; \ No newline at end of file diff --git a/rpcs3/Emu/Event.cpp b/rpcs3/Emu/Event.cpp index 528b9703c6..d36bc08bc6 100644 --- a/rpcs3/Emu/Event.cpp +++ b/rpcs3/Emu/Event.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "event.h" diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index 3a55fc68c1..83da350d73 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "VFS.h" #include "Emu/HDD/HDD.h" diff --git a/rpcs3/Emu/FS/vfsDir.cpp b/rpcs3/Emu/FS/vfsDir.cpp index 6c567a85de..ae32e0b05f 100644 --- a/rpcs3/Emu/FS/vfsDir.cpp +++ b/rpcs3/Emu/FS/vfsDir.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/FS/vfsFile.cpp b/rpcs3/Emu/FS/vfsFile.cpp index 6bd1defc95..1a80009ba7 100644 --- a/rpcs3/Emu/FS/vfsFile.cpp +++ b/rpcs3/Emu/FS/vfsFile.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/FS/vfsLocalFile.cpp b/rpcs3/Emu/FS/vfsLocalFile.cpp index 46e989354f..9c40645808 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.cpp +++ b/rpcs3/Emu/FS/vfsLocalFile.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "vfsLocalFile.h" static const rFile::OpenMode vfs2wx_mode(vfsOpenMode mode) @@ -53,7 +53,7 @@ bool vfsLocalFile::Open(const std::string& path, vfsOpenMode mode) bool vfsLocalFile::Create(const std::string& path) { - ConLog.Warning("vfsLocalFile::Create('%s')", path.c_str()); + LOGF_WARNING(HLE, "vfsLocalFile::Create('%s')", path.c_str()); for(uint p=1; p < path.length() && path[p] != '\0' ; p++) { for(; p < path.length() && path[p] != '\0'; p++) @@ -65,7 +65,7 @@ bool vfsLocalFile::Create(const std::string& path) const std::string& dir = path.substr(0, p); if(!rDirExists(dir)) { - ConLog.Write("create dir: %s", dir.c_str()); + LOGF_NOTICE(HLE, "create dir: %s", dir.c_str()); rMkdir(dir); } } diff --git a/rpcs3/Emu/FS/vfsStreamMemory.cpp b/rpcs3/Emu/FS/vfsStreamMemory.cpp index 7b508a05fb..7f140bf35b 100644 --- a/rpcs3/Emu/FS/vfsStreamMemory.cpp +++ b/rpcs3/Emu/FS/vfsStreamMemory.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "vfsStreamMemory.h" diff --git a/rpcs3/Emu/GS/GL/GLBuffers.cpp b/rpcs3/Emu/GS/GL/GLBuffers.cpp index ae0307796b..41ddddf619 100644 --- a/rpcs3/Emu/GS/GL/GLBuffers.cpp +++ b/rpcs3/Emu/GS/GL/GLBuffers.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "GLBuffers.h" #include "GLGSRender.h" diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 79b8bfedff..710d2678b6 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "GLFragmentProgram.h" @@ -19,7 +19,7 @@ void GLFragmentDecompilerThread::SetDst(std::string code, bool append_mask) case 7: code = "(" + code + " / 8.0)"; break; default: - ConLog.Error("Bad scale: %d", fmt::by_value(src1.scale)); + LOGF_ERROR(RSX, "Bad scale: %d", fmt::by_value(src1.scale)); Emu.Pause(); break; } @@ -210,7 +210,7 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) } else { - ConLog.Error("Bad src reg num: %d", fmt::by_value(dst.src_attr_reg_num)); + LOGF_ERROR(RSX, "Bad src reg num: %d", fmt::by_value(dst.src_attr_reg_num)); ret += m_parr.AddParam(PARAM_IN, "vec4", "unk"); Emu.Pause(); } @@ -224,7 +224,7 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) break; default: - ConLog.Error("Bad src type %d", fmt::by_value(src.reg_type)); + LOGF_ERROR(RSX, "Bad src type %d", fmt::by_value(src.reg_type)); Emu.Pause(); break; } @@ -416,7 +416,7 @@ void GLFragmentDecompilerThread::Task() //case 0x45: SetDst("return"); break; //RET default: - ConLog.Error("Unknown fp opcode 0x%x (inst %d)", opcode, m_size / (4 * 4)); + LOGF_ERROR(RSX, "Unknown fp opcode 0x%x (inst %d)", opcode, m_size / (4 * 4)); //Emu.Pause(); break; } @@ -515,12 +515,12 @@ void GLShaderProgram::Compile() char* buf = new char[infoLength]; // Buffer to store infoLog glGetShaderInfoLog(m_id, infoLength, &len, buf); // Retrieve the shader info log into our buffer - ConLog.Error("Failed to compile shader: %s", buf); // Write log to the console + LOGF_ERROR(RSX, "Failed to compile shader: %s", buf); // Write log to the console delete[] buf; } - ConLog.Write(m_shader.c_str()); // Log the text of the shader that failed to compile + LOG_NOTICE(RSX, m_shader.c_str()); // Log the text of the shader that failed to compile Emu.Pause(); // Pause the emulator, we can't really continue from here } } @@ -540,7 +540,7 @@ void GLShaderProgram::Delete() { if (Emu.IsStopped()) { - ConLog.Warning("GLShaderProgram::Delete(): glDeleteShader(%d) avoided", m_id); + LOGF_WARNING(RSX, "GLShaderProgram::Delete(): glDeleteShader(%d) avoided", m_id); } else { diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index c06a98c5e4..4cb0dcd0a2 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "GLGSRender.h" @@ -9,7 +9,7 @@ #define DUMP_VERTEX_DATA 0 #if CMD_DEBUG - #define CMD_LOG ConLog.Write + #define CMD_LOG(...) LOGF_NOTICE(RSX, __VA_ARGS__) #else #define CMD_LOG(...) #endif @@ -27,7 +27,7 @@ void printGlError(GLenum err, const char* situation) { if(err != GL_NO_ERROR) { - ConLog.Error("%s: opengl error 0x%04x", situation, err); + LOGF_ERROR(RSX, "%s: opengl error 0x%04x", situation, err); Emu.Pause(); } } @@ -180,7 +180,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw) break; default: - ConLog.Error("Bad cv type! %d", m_vertex_data[i].type); + LOGF_ERROR(HLE, "Bad cv type! %d", m_vertex_data[i].type); return; } @@ -309,7 +309,7 @@ void GLGSRender::InitFragmentData() { if(!m_cur_shader_prog) { - ConLog.Error("InitFragmentData: m_cur_shader_prog == NULL"); + LOGF_ERROR(RSX, "InitFragmentData: m_cur_shader_prog == NULL"); return; } @@ -330,20 +330,20 @@ void GLGSRender::InitFragmentData() } //if(m_fragment_constants.GetCount()) - // ConLog.SkipLn(); + // LOG_NOTICE(HLE, ""); } bool GLGSRender::LoadProgram() { if(!m_cur_shader_prog) { - ConLog.Warning("LoadProgram: m_cur_shader_prog == NULL"); + LOGF_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL"); return false; } if(!m_cur_vertex_prog) { - ConLog.Warning("LoadProgram: m_cur_vertex_prog == NULL"); + LOGF_WARNING(RSX, "LoadProgram: m_cur_vertex_prog == NULL"); return false; } @@ -354,7 +354,7 @@ bool GLGSRender::LoadProgram() if(m_fp_buf_num == -1) { - ConLog.Warning("FP not found in buffer!"); + LOGF_WARNING(RSX, "FP not found in buffer!"); m_shader_prog.DecompileAsync(*m_cur_shader_prog); m_shader_prog.Wait(); m_shader_prog.Compile(); @@ -366,7 +366,7 @@ bool GLGSRender::LoadProgram() if(m_vp_buf_num == -1) { - ConLog.Warning("VP not found in buffer!"); + LOGF_WARNING(RSX, "VP not found in buffer!"); m_vertex_prog.DecompileAsync(*m_cur_vertex_prog); m_vertex_prog.Wait(); m_vertex_prog.Compile(); @@ -450,7 +450,7 @@ void GLGSRender::WriteDepthBuffer() u32 address = GetAddress(m_surface_offset_z, m_context_dma_z - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - ConLog.Warning("Bad depth address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); + LOGF_WARNING(RSX, "Bad depth address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); return; } @@ -484,7 +484,7 @@ void GLGSRender::WriteColourBufferA() u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - ConLog.Warning("Bad colour buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); + LOGF_WARNING(RSX, "Bad colour buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); return; } @@ -513,7 +513,7 @@ void GLGSRender::WriteColourBufferB() u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - ConLog.Warning("Bad colour buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); + LOGF_WARNING(RSX, "Bad colour buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); return; } @@ -543,7 +543,7 @@ void GLGSRender::WriteColourBufferC() u32 address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - ConLog.Warning("Bad colour buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); + LOGF_WARNING(RSX, "Bad colour buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); return; } @@ -572,7 +572,7 @@ void GLGSRender::WriteColourBufferD() u32 address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - ConLog.Warning("Bad colour buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); + LOGF_WARNING(RSX, "Bad colour buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); return; } @@ -703,14 +703,14 @@ void GLGSRender::ExecCMD() //return; if(!LoadProgram()) { - ConLog.Error("LoadProgram failed."); + LOGF_ERROR(RSX, "LoadProgram failed."); Emu.Pause(); return; } if(!m_fbo.IsCreated() || RSXThread::m_width != last_width || RSXThread::m_height != last_height || last_depth_format != m_surface_depth_format) { - ConLog.Warning("New FBO (%dx%d)", RSXThread::m_width, RSXThread::m_height); + LOGF_WARNING(RSX, "New FBO (%dx%d)", RSXThread::m_width, RSXThread::m_height); last_width = RSXThread::m_width; last_height = RSXThread::m_height; last_depth_format = m_surface_depth_format; @@ -753,7 +753,7 @@ void GLGSRender::ExecCMD() break; default: - ConLog.Error("Bad depth format! (%d)", m_surface_depth_format); + LOGF_ERROR(RSX, "Bad depth format! (%d)", m_surface_depth_format); assert(0); break; } @@ -821,7 +821,7 @@ void GLGSRender::ExecCMD() break; default: - ConLog.Error("Bad surface colour target: %d", m_surface_colour_target); + LOGF_ERROR(RSX, "Bad surface colour target: %d", m_surface_colour_target); break; } @@ -1099,7 +1099,7 @@ void GLGSRender::ExecCMD() if(m_indexed_array.m_count && m_draw_array_count) { - ConLog.Warning("m_indexed_array.m_count && draw_array_count"); + LOGF_WARNING(RSX, "m_indexed_array.m_count && draw_array_count"); } for(u32 i=0; i 15) - ConLog.Error("dst index out of range: %u", d3.dst); + LOGF_ERROR(RSX, "dst index out of range: %u", d3.dst); ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("dst_reg") + std::to_string(d3.dst), d3.dst == 0 ? "vec4(0.0f, 0.0f, 0.0f, 1.0f)" : "vec4(0.0)"); break; } @@ -83,7 +83,7 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n) } else { - ConLog.Error("Bad input src num: %d", fmt::by_value(d1.input_src)); + LOGF_ERROR(RSX, "Bad input src num: %d", fmt::by_value(d1.input_src)); ret += m_parr.AddParam(PARAM_IN, "vec4", "in_unk", d1.input_src); } break; @@ -93,7 +93,7 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n) break; default: - ConLog.Error("Bad src%u reg type: %d", n, fmt::by_value(src[n].reg_type)); + LOGF_ERROR(RSX, "Bad src%u reg type: %d", n, fmt::by_value(src[n].reg_type)); Emu.Pause(); break; } @@ -510,7 +510,7 @@ void GLVertexDecompilerThread::Task() default: m_body.push_back(fmt::Format("//Unknown vp sca_opcode 0x%x", fmt::by_value(d1.sca_opcode))); - ConLog.Error("Unknown vp sca_opcode 0x%x", fmt::by_value(d1.sca_opcode)); + LOGF_ERROR(RSX, "Unknown vp sca_opcode 0x%x", fmt::by_value(d1.sca_opcode)); Emu.Pause(); break; } @@ -543,7 +543,7 @@ void GLVertexDecompilerThread::Task() default: m_body.push_back(fmt::Format("//Unknown vp opcode 0x%x", fmt::by_value(d1.vec_opcode))); - ConLog.Error("Unknown vp opcode 0x%x", fmt::by_value(d1.vec_opcode)); + LOGF_ERROR(RSX, "Unknown vp opcode 0x%x", fmt::by_value(d1.vec_opcode)); Emu.Pause(); break; } @@ -553,7 +553,7 @@ void GLVertexDecompilerThread::Task() m_instr_count++; if(i < m_data.size()) - ConLog.Error("Program end before buffer end."); + LOG_ERROR(RSX, "Program end before buffer end."); break; } @@ -647,14 +647,14 @@ void GLVertexProgram::Compile() GLsizei len; memset(buf, 0, r+1); glGetShaderInfoLog(id, r, &len, buf); - ConLog.Error("Failed to compile vertex shader: %s", buf); + LOGF_ERROR(RSX, "Failed to compile vertex shader: %s", buf); delete[] buf; } - ConLog.Write(shader); + LOG_NOTICE(RSX, shader); Emu.Pause(); } - //else ConLog.Write("Vertex shader compiled successfully!"); + //else LOGF_WARNING(RSX, "Vertex shader compiled successfully!"); } @@ -667,7 +667,7 @@ void GLVertexProgram::Delete() { if (Emu.IsStopped()) { - ConLog.Warning("GLVertexProgram::Delete(): glDeleteShader(%d) avoided", id); + LOGF_WARNING(RSX, "GLVertexProgram::Delete(): glDeleteShader(%d) avoided", id); } else { diff --git a/rpcs3/Emu/GS/GL/OpenGL.cpp b/rpcs3/Emu/GS/GL/OpenGL.cpp index bedf302764..d87d7349f6 100644 --- a/rpcs3/Emu/GS/GL/OpenGL.cpp +++ b/rpcs3/Emu/GS/GL/OpenGL.cpp @@ -1,12 +1,12 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "OpenGL.h" void InitProcTable() { #ifdef _WIN32 #define OPENGL_PROC(p, n) OPENGL_PROC2(p, n, gl##n) -#define OPENGL_PROC2(p, n, tn) /*if(!gl##n)*/ if(!(gl##n = (p)wglGetProcAddress(#tn))) ConLog.Error("OpenGL: initialization of " #tn " failed.") +#define OPENGL_PROC2(p, n, tn) /*if(!gl##n)*/ if(!(gl##n = (p)wglGetProcAddress(#tn))) LOG_ERROR(RSX, "OpenGL: initialization of " #tn " failed.") #include "GLProcTable.h" #undef OPENGL_PROC #undef OPENGL_PROC2 @@ -40,7 +40,7 @@ void OpenGL::Init() { #ifdef _WIN32 #define OPENGL_PROC(p, n) OPENGL_PROC2(p, n, gl##n) -#define OPENGL_PROC2(p, n, tn) if(!(n = (p)wglGetProcAddress(#tn))) ConLog.Error("OpenGL: initialization of " #tn " failed.") +#define OPENGL_PROC2(p, n, tn) if(!(n = (p)wglGetProcAddress(#tn))) LOG_ERROR(RSX, "OpenGL: initialization of " #tn " failed.") #include "GLProcTable.h" #undef OPENGL_PROC #undef OPENGL_PROC2 diff --git a/rpcs3/Emu/GS/GSManager.cpp b/rpcs3/Emu/GS/GSManager.cpp index 7774f04978..0e24117f5b 100644 --- a/rpcs3/Emu/GS/GSManager.cpp +++ b/rpcs3/Emu/GS/GSManager.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "rpcs3/Ini.h" diff --git a/rpcs3/Emu/GS/GSRender.cpp b/rpcs3/Emu/GS/GSRender.cpp index 742aed85d0..6290d09893 100644 --- a/rpcs3/Emu/GS/GSRender.cpp +++ b/rpcs3/Emu/GS/GSRender.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/GS/RSXTexture.cpp b/rpcs3/Emu/GS/RSXTexture.cpp index c4afde8b29..0c4a8a100f 100644 --- a/rpcs3/Emu/GS/RSXTexture.cpp +++ b/rpcs3/Emu/GS/RSXTexture.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "RSXThread.h" #include "RSXThread.h" diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index a8b2d853e4..c950dfb2f7 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "RSXThread.h" @@ -20,7 +20,7 @@ u32 GetAddress(u32 offset, u8 location) return realAddr; } - ConLog.Error("GetAddress(offset=0x%x, location=0x%x)", location); + LOGF_ERROR(RSX, "GetAddress(offset=0x%x, location=0x%x)", location); assert(0); return 0; } @@ -97,14 +97,14 @@ u32 RSXVertexData::GetTypeSize() case 7: return 1; } - ConLog.Error("Bad vertex data type! %d", type); + LOGF_ERROR(RSX, "Bad vertex data type! %d", type); return 1; } #define CMD_DEBUG 0 #if CMD_DEBUG - #define CMD_LOG ConLog.Write + #define CMD_LOG(...) LOG_NOTICE(RSX, __VA_ARGS__) #else #define CMD_LOG(...) #endif @@ -115,7 +115,7 @@ u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count) debug += "("; for(u32 i=0; i> 24) + 1; - //ConLog.Warning("NV4097_DRAW_ARRAYS: %d - %d", first, _count); + //LOGF_WARNING(RSX, "NV4097_DRAW_ARRAYS: %d - %d", first, _count); LoadVertexData(first, _count); @@ -791,7 +791,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_indexed_array.m_data.resize(m_indexed_array.m_data.size() + 4); index = Memory.Read32(m_indexed_array.m_addr + i * 4); *(u32*)&m_indexed_array.m_data[pos] = index; - //ConLog.Warning("index 4: %d", *(u32*)&m_indexed_array.m_data[pos]); + //LOGF_WARNING(RSX, "index 4: %d", *(u32*)&m_indexed_array.m_data[pos]); } break; @@ -800,7 +800,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 int pos = m_indexed_array.m_data.size(); m_indexed_array.m_data.resize(m_indexed_array.m_data.size() + 2); index = Memory.Read16(m_indexed_array.m_addr + i * 2); - //ConLog.Warning("index 2: %d", index); + //LOGF_WARNING(RSX, "index 2: %d", index); *(u16*)&m_indexed_array.m_data[pos] = index; } break; @@ -819,7 +819,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { const u32 a0 = ARGS(0); - //ConLog.Warning("NV4097_SET_BEGIN_END: %x", a0); + //LOGF_WARNING(RSX, "NV4097_SET_BEGIN_END: %x", a0); m_read_buffer = false; @@ -850,7 +850,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { if(!m_cur_shader_prog) { - ConLog.Error("NV4097_SET_SHADER_CONTROL: m_cur_shader_prog == NULL"); + LOGF_ERROR(RSX, "NV4097_SET_SHADER_CONTROL: m_cur_shader_prog == NULL"); break; } @@ -877,7 +877,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Transform case NV4097_SET_TRANSFORM_PROGRAM_LOAD: { - //ConLog.Warning("NV4097_SET_TRANSFORM_PROGRAM_LOAD: prog = %d", ARGS(0)); + //LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_LOAD: prog = %d", ARGS(0)); m_cur_vertex_prog = &m_vertex_progs[ARGS(0)]; m_cur_vertex_prog->data.clear(); @@ -886,7 +886,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { const u32 start = ARGS(1); if(start) - ConLog.Warning("NV4097_SET_TRANSFORM_PROGRAM_LOAD: start = %d", start); + LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_LOAD: start = %d", start); } } break; @@ -894,17 +894,17 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_TRANSFORM_PROGRAM_START: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_TRANSFORM_PROGRAM_START: 0x%x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_START: 0x%x", ARGS(0)); } break; case_32(NV4097_SET_TRANSFORM_PROGRAM, 4): { - //ConLog.Warning("NV4097_SET_TRANSFORM_PROGRAM[%d](%d)", index, count); + //LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM[%d](%d)", index, count); if(!m_cur_vertex_prog) { - ConLog.Warning("NV4097_SET_TRANSFORM_PROGRAM: m_cur_vertex_prog == NULL"); + LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM: m_cur_vertex_prog == NULL"); break; } @@ -916,7 +916,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 if(!m_cur_vertex_prog) { - ConLog.Warning("NV4097_SET_TRANSFORM_TIMEOUT: m_cur_vertex_prog == NULL"); + LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_TIMEOUT: m_cur_vertex_prog == NULL"); break; } @@ -950,28 +950,28 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_INVALIDATE_L2: { if (ARGS(0)) - ConLog.Warning("NV4097_INVALIDATE_L2: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_INVALIDATE_L2: %x", ARGS(0)); } break; case NV4097_INVALIDATE_VERTEX_CACHE_FILE: { if (ARGS(0)) - ConLog.Warning("NV4097_INVALIDATE_VERTEX_CACHE_FILE: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_CACHE_FILE: %x", ARGS(0)); } break; case NV4097_INVALIDATE_VERTEX_FILE: { if (ARGS(0)) - ConLog.Warning("NV4097_INVALIDATE_VERTEX_FILE: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_FILE: %x", ARGS(0)); } break; case NV4097_INVALIDATE_ZCULL: { if (ARGS(0)) - ConLog.Warning("NV4097_INVALIDATE_ZCULL: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_INVALIDATE_ZCULL: %x", ARGS(0)); } break; @@ -1158,7 +1158,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_POINT_PARAMS_ENABLE: { if (ARGS(0)) - ConLog.Error("NV4097_SET_POINT_PARAMS_ENABLE"); + LOG_ERROR(RSX, "NV4097_SET_POINT_PARAMS_ENABLE"); } break; @@ -1235,7 +1235,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV406E_SEMAPHORE_ACQUIRE: { if (ARGS(0)) - ConLog.Warning("NV406E_SEMAPHORE_ACQUIRE: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV406E_SEMAPHORE_ACQUIRE: %x", ARGS(0)); } break; @@ -1347,7 +1347,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { if (count != 4) { - ConLog.Error("NV4097_SET_SURFACE_PITCH_C: Bad count (%d)", count); + LOGF_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_C: Bad count (%d)", count); break; } @@ -1361,7 +1361,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_SURFACE_PITCH_D: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_SURFACE_PITCH_D: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_D: %x", ARGS(0)); } break; @@ -1401,7 +1401,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_CONTEXT_DMA_COLOR_D: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_CONTEXT_DMA_COLOR_D: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_COLOR_D: %x", ARGS(0)); } break; @@ -1443,7 +1443,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ANTI_ALIASING_CONTROL: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_ANTI_ALIASING_CONTROL: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_ANTI_ALIASING_CONTROL: %x", ARGS(0)); } break; @@ -1498,7 +1498,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ZCULL_CONTROL0: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_ZCULL_CONTROL0: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_ZCULL_CONTROL0: %x", ARGS(0)); //m_set_depth_func = true; //m_depth_func = ARGS(0) >> 4; @@ -1508,7 +1508,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ZCULL_CONTROL1: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_ZCULL_CONTROL1: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_ZCULL_CONTROL1: %x", ARGS(0)); //m_set_depth_func = true; //m_depth_func = ARGS(0) >> 4; @@ -1531,12 +1531,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case CELL_GCM_ZCULL_STATS2: case CELL_GCM_ZCULL_STATS3: value = 0; - ConLog.Warning("NV4097_GET_REPORT: Unimplemented type %d", type); + LOGF_WARNING(RSX, "NV4097_GET_REPORT: Unimplemented type %d", type); break; default: value = 0; - ConLog.Error("NV4097_GET_REPORT: Bad type %d", type); + LOGF_WARNING(RSX, "NV4097_GET_REPORT: Bad type %d", type); break; } @@ -1586,7 +1586,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ZMIN_MAX_CONTROL: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_ZMIN_MAX_CONTROL: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_ZMIN_MAX_CONTROL: %x", ARGS(0)); } break; @@ -1594,28 +1594,28 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_WINDOW_OFFSET: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_WINDOW_OFFSET: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_WINDOW_OFFSET: %x", ARGS(0)); } break; case NV4097_SET_WINDOW_CLIP_TYPE: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_WINDOW_CLIP_TYPE: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_TYPE: %x", ARGS(0)); } break; case NV4097_SET_WINDOW_CLIP_HORIZONTAL: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_WINDOW_CLIP_HORIZONTAL: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_HORIZONTAL: %x", ARGS(0)); } break; case NV4097_SET_WINDOW_CLIP_VERTICAL: { if (ARGS(0)) - ConLog.Warning("NV4097_SET_WINDOW_CLIP_VERTICAL: %x", ARGS(0)); + LOGF_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_VERTICAL: %x", ARGS(0)); } break; @@ -1638,7 +1638,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } else { - ConLog.Warning("NV0039_SET_CONTEXT_DMA_BUFFER_IN: TODO: srcContext=0x%x, dstContext=0x%x", srcContext, dstContext); + LOGF_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_IN: TODO: srcContext=0x%x, dstContext=0x%x", srcContext, dstContext); } } break; @@ -1662,7 +1662,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } else { - ConLog.Warning("NV0039_OFFSET_IN: TODO: offset(in=0x%x, out=0x%x), pitch(in=0x%x, out=0x%x), line(len=0x%x, cnt=0x%x), fmt(in=0x%x, out=0x%x), notify=0x%x", + LOGF_WARNING(RSX, "NV0039_OFFSET_IN: TODO: offset(in=0x%x, out=0x%x), pitch(in=0x%x, out=0x%x), line(len=0x%x, cnt=0x%x), fmt(in=0x%x, out=0x%x), notify=0x%x", inOffset, outOffset, inPitch, outPitch, lineLength, lineCount, inFormat, outFormat, notify); } } @@ -1677,7 +1677,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } else { - ConLog.Warning("NV0039_OFFSET_OUT: TODO: offset=0x%x", offset); + LOGF_WARNING(RSX, "NV0039_OFFSET_OUT: TODO: offset=0x%x", offset); } } break; @@ -1723,10 +1723,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 if(count >= 5) { - ConLog.Warning("NV308A_COLOR: count = %d", count); + LOGF_WARNING(RSX, "NV308A_COLOR: count = %d", count); } - //ConLog.Warning("NV308A_COLOR: [%d]: %f, %f, %f, %f", c.id, c.x, c.y, c.z, c.w); + //LOGF_WARNING(RSX, "NV308A_COLOR: [%d]: %f, %f, %f, %f", c.id, c.x, c.y, c.z, c.w); m_fragment_constants.push_back(c); } break; @@ -1810,7 +1810,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D) { - ConLog.Warning("NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0)); + LOGF_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0)); } } break; @@ -1821,7 +1821,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 log += "("; for(u32 i=0; i lock(m_cs_main); @@ -1912,7 +1912,7 @@ void RSXThread::Task() if(cmd & CELL_GCM_METHOD_FLAG_JUMP) { u32 addr = cmd & ~(CELL_GCM_METHOD_FLAG_JUMP | CELL_GCM_METHOD_FLAG_NON_INCREMENT); - //ConLog.Warning("rsx jump(0x%x) #addr=0x%x, cmd=0x%x, get=0x%x, put=0x%x", addr, m_ioAddress + get, cmd, get, put); + //LOGF_WARNING(RSX, "rsx jump(0x%x) #addr=0x%x, cmd=0x%x, get=0x%x, put=0x%x", addr, m_ioAddress + get, cmd, get, put); m_ctrl->get = addr; continue; } @@ -1921,22 +1921,22 @@ void RSXThread::Task() m_call_stack.push(get + 4); u32 offs = cmd & ~CELL_GCM_METHOD_FLAG_CALL; u32 addr = Memory.RSXIOMem.GetStartAddr() + offs; - //ConLog.Warning("rsx call(0x%x) #0x%x - 0x%x - 0x%x", offs, addr, cmd, get); + //LOGF_WARNING(RSX, "rsx call(0x%x) #0x%x - 0x%x - 0x%x", offs, addr, cmd, get); m_ctrl->get = offs; continue; } if(cmd == CELL_GCM_METHOD_FLAG_RETURN) { - //ConLog.Warning("rsx return!"); + //LOGF_WARNING(RSX, "rsx return!"); u32 get = m_call_stack.top(); m_call_stack.pop(); - //ConLog.Warning("rsx return(0x%x)", get); + //LOGF_WARNING(RSX, "rsx return(0x%x)", get); m_ctrl->get = get; continue; } if(cmd & CELL_GCM_METHOD_FLAG_NON_INCREMENT) { - //ConLog.Warning("non increment cmd! 0x%x", cmd); + //LOGF_WARNING(RSX, "non increment cmd! 0x%x", cmd); inc=0; } @@ -1961,7 +1961,7 @@ void RSXThread::Task() //memset(Memory.GetMemFromAddr(p.m_ioAddress + get), 0, (count + 1) * 4); } - ConLog.Write("RSX thread ended"); + LOGF_NOTICE(RSX, "RSX thread ended"); OnExitThread(); } diff --git a/rpcs3/Emu/HDD/HDD.cpp b/rpcs3/Emu/HDD/HDD.cpp index 9908a36a91..27927c3218 100644 --- a/rpcs3/Emu/HDD/HDD.cpp +++ b/rpcs3/Emu/HDD/HDD.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "HDD.h" vfsDeviceHDD::vfsDeviceHDD(const std::string& hdd_path) : m_hdd_path(hdd_path) diff --git a/rpcs3/Emu/HDD/HDD.h b/rpcs3/Emu/HDD/HDD.h index 4adfd684fc..ab85001815 100644 --- a/rpcs3/Emu/HDD/HDD.h +++ b/rpcs3/Emu/HDD/HDD.h @@ -445,7 +445,7 @@ public: m_cur_dir_block = m_hdd_info.next_block; if(!m_hdd_info.block_size) { - ConLog.Error("Bad block size!"); + LOG_ERROR(HLE, "Bad block size!"); m_hdd_info.block_size = 2048; } m_hdd_file.Seek(m_cur_dir_block * m_hdd_info.block_size); @@ -486,7 +486,7 @@ public: int OpenDir(const std::string& name) { - ConLog.Warning("OpenDir(%s)", name.c_str()); + LOGF_WARNING(HLE, "OpenDir(%s)", name.c_str()); u64 entry_block; if(!SearchEntry(name, entry_block)) return -1; @@ -594,7 +594,7 @@ public: return false; } - ConLog.Write("CREATING ENTRY AT 0x%llx", new_block); + LOGF_NOTICE(HLE, "CREATING ENTRY AT 0x%llx", new_block); WriteBlock(new_block, g_used_block); { @@ -744,7 +744,7 @@ public: return false; } - ConLog.Write("ENTRY FOUND AT 0x%llx", file_block); + LOGF_NOTICE(HLE, "ENTRY FOUND AT 0x%llx", file_block); m_file.Open(file_block); return vfsFileBase::Open(path, mode); @@ -774,7 +774,7 @@ public: if(entry.type == vfsHDD_Entry_Dir && name != "." && name != "..") { - ConLog.Warning("Removing sub folder '%s'", name.c_str()); + LOGF_WARNING(HLE, "Removing sub folder '%s'", name.c_str()); RemoveBlocksDir(entry.data_block); } else if(entry.type == vfsHDD_Entry_File) diff --git a/rpcs3/Emu/Io/Keyboard.cpp b/rpcs3/Emu/Io/Keyboard.cpp index fa8df62eb3..b6c1f2e963 100644 --- a/rpcs3/Emu/Io/Keyboard.cpp +++ b/rpcs3/Emu/Io/Keyboard.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "rpcs3/Ini.h" #include "Keyboard.h" #include "Null/NullKeyboardHandler.h" diff --git a/rpcs3/Emu/Io/Mouse.cpp b/rpcs3/Emu/Io/Mouse.cpp index 8e96c65e95..e938745249 100644 --- a/rpcs3/Emu/Io/Mouse.cpp +++ b/rpcs3/Emu/Io/Mouse.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "rpcs3/Ini.h" #include "Mouse.h" #include "Null/NullMouseHandler.h" diff --git a/rpcs3/Emu/Io/Pad.cpp b/rpcs3/Emu/Io/Pad.cpp index eea1e552c7..0e29f5a85b 100644 --- a/rpcs3/Emu/Io/Pad.cpp +++ b/rpcs3/Emu/Io/Pad.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "rpcs3/Ini.h" #include "Pad.h" #include "Null/NullPadHandler.h" diff --git a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp index 3ac16baaff..923377ed96 100644 --- a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp +++ b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" #if defined (_WIN32) #include -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "XInputPadHandler.h" #include @@ -113,7 +113,7 @@ void XInputPadHandler::Close() { active = false; if (WaitForSingleObject(thread, THREAD_TIMEOUT) != WAIT_OBJECT_0) - ConLog.Error("XInput thread could not stop within %d milliseconds", THREAD_TIMEOUT); + LOGF_ERROR(HLE, "XInput thread could not stop within %d milliseconds", THREAD_TIMEOUT); thread = nullptr; } diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index fb87f12d81..2bd8435868 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -212,10 +212,10 @@ bool DynamicMemoryBlockBase::Free(u64 addr) } } - ConLog.Error("DynamicMemoryBlock::Free(addr=0x%llx): failed", addr); + LOGF_ERROR(MEMORY, "DynamicMemoryBlock::Free(addr=0x%llx): failed", addr); for (u32 i = 0; i < m_allocated.size(); i++) { - ConLog.Write("*** Memory Block: addr = 0x%llx, size = 0x%x", m_allocated[i].addr, m_allocated[i].size); + LOGF_NOTICE(MEMORY, "*** Memory Block: addr = 0x%llx, size = 0x%x", m_allocated[i].addr, m_allocated[i].size); } return false; } @@ -233,7 +233,7 @@ u8* DynamicMemoryBlockBase::GetMem(u64 addr) const // lock-free, addr is fix } } - ConLog.Error("GetMem(%llx) from not allocated address.", addr); + LOGF_ERROR(MEMORY, "GetMem(%llx) from not allocated address.", addr); assert(0); return nullptr; } diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 2bcdbdd215..02899130d3 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" #include -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Memory.h" #include "MemoryBlock.h" #include "Emu/System.h" @@ -331,7 +331,7 @@ bool MemoryBlockLE::Write128(const u64 addr, const u128 value) //NullMemoryBlock bool NullMemoryBlock::Read8(const u64 addr, u8* ) { - ConLog.Error("Read8 from null block: [%08llx]", addr); + LOGF_ERROR(MEMORY, "Read8 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -339,7 +339,7 @@ bool NullMemoryBlock::Read8(const u64 addr, u8* ) bool NullMemoryBlock::Read16(const u64 addr, u16* ) { - ConLog.Error("Read16 from null block: [%08llx]", addr); + LOGF_ERROR(MEMORY, "Read16 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -347,7 +347,7 @@ bool NullMemoryBlock::Read16(const u64 addr, u16* ) bool NullMemoryBlock::Read32(const u64 addr, u32* ) { - ConLog.Error("Read32 from null block: [%08llx]", addr); + LOGF_ERROR(MEMORY, "Read32 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -355,7 +355,7 @@ bool NullMemoryBlock::Read32(const u64 addr, u32* ) bool NullMemoryBlock::Read64(const u64 addr, u64* ) { - ConLog.Error("Read64 from null block: [%08llx]", addr); + LOGF_ERROR(MEMORY, "Read64 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -363,7 +363,7 @@ bool NullMemoryBlock::Read64(const u64 addr, u64* ) bool NullMemoryBlock::Read128(const u64 addr, u128* ) { - ConLog.Error("Read128 from null block: [%08llx]", addr); + LOGF_ERROR(MEMORY, "Read128 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -371,7 +371,7 @@ bool NullMemoryBlock::Read128(const u64 addr, u128* ) bool NullMemoryBlock::Write8(const u64 addr, const u8 value) { - ConLog.Error("Write8 to null block: [%08llx]: %x", addr, value); + LOGF_ERROR(MEMORY, "Write8 to null block: [%08llx]: %x", addr, value); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -379,7 +379,7 @@ bool NullMemoryBlock::Write8(const u64 addr, const u8 value) bool NullMemoryBlock::Write16(const u64 addr, const u16 value) { - ConLog.Error("Write16 to null block: [%08llx]: %x", addr, value); + LOGF_ERROR(MEMORY, "Write16 to null block: [%08llx]: %x", addr, value); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -387,7 +387,7 @@ bool NullMemoryBlock::Write16(const u64 addr, const u16 value) bool NullMemoryBlock::Write32(const u64 addr, const u32 value) { - ConLog.Error("Write32 to null block: [%08llx]: %x", addr, value); + LOGF_ERROR(MEMORY, "Write32 to null block: [%08llx]: %x", addr, value); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -395,7 +395,7 @@ bool NullMemoryBlock::Write32(const u64 addr, const u32 value) bool NullMemoryBlock::Write64(const u64 addr, const u64 value) { - ConLog.Error("Write64 to null block: [%08llx]: %llx", addr, value); + LOGF_ERROR(MEMORY, "Write64 to null block: [%08llx]: %llx", addr, value); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -403,7 +403,7 @@ bool NullMemoryBlock::Write64(const u64 addr, const u64 value) bool NullMemoryBlock::Write128(const u64 addr, const u128 value) { - ConLog.Error("Write128 to null block: [%08llx]: %llx_%llx", addr, value.hi, value.lo); + LOGF_ERROR(MEMORY, "Write128 to null block: [%08llx]: %llx_%llx", addr, value.hi, value.lo); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index d4821b4b25..ee1a5bb32f 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -211,7 +211,7 @@ public: if(m_inited) return; m_inited = true; - ConLog.Write("Initing memory..."); + LOG_NOTICE(MEMORY, "Initing memory..."); switch(type) { @@ -240,7 +240,7 @@ public: break; } - ConLog.Write("Memory initialized."); + LOG_NOTICE(MEMORY, "Memory initialized."); } bool IsGoodAddr(const u64 addr) @@ -271,7 +271,7 @@ public: if(!m_inited) return; m_inited = false; - ConLog.Write("Closing memory..."); + LOG_NOTICE(MEMORY, "Closing memory..."); for (auto block : MemoryBlocks) { @@ -405,7 +405,7 @@ public: if(mem.IsNULL()) { - ConLog.Error("ReadLeft[%d] from null block (0x%llx)", size, addr); + LOGF_ERROR(MEMORY, "ReadLeft[%d] from null block (0x%llx)", size, addr); return; } @@ -418,7 +418,7 @@ public: if(mem.IsNULL()) { - ConLog.Error("WriteLeft[%d] to null block (0x%llx)", size, addr); + LOGF_ERROR(MEMORY, "WriteLeft[%d] to null block (0x%llx)", size, addr); return; } @@ -431,7 +431,7 @@ public: if(mem.IsNULL()) { - ConLog.Error("ReadRight[%d] from null block (0x%llx)", size, addr); + LOGF_ERROR(MEMORY, "ReadRight[%d] from null block (0x%llx)", size, addr); return; } @@ -444,7 +444,7 @@ public: if(mem.IsNULL()) { - ConLog.Error("WriteRight[%d] to null block (0x%llx)", size, addr); + LOGF_ERROR(MEMORY, "WriteRight[%d] to null block (0x%llx)", size, addr); return; } @@ -477,7 +477,7 @@ public: { if(!IsGoodAddr(addr, str.length())) { - ConLog.Error("Memory::WriteString error: bad address (0x%llx)", addr); + LOGF_ERROR(MEMORY,"Memory::WriteString error: bad address (0x%llx)", addr); return; } @@ -527,7 +527,7 @@ public: } MemoryBlocks.push_back((new MemoryMirror())->SetRange(GetMemFromAddr(src_addr), dst_addr, size)); - ConLog.Warning("memory mapped 0x%llx to 0x%llx size=0x%x", src_addr, dst_addr, size); + LOGF_WARNING(MEMORY, "memory mapped 0x%llx to 0x%llx size=0x%x", src_addr, dst_addr, size); return true; } diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index 1709214878..e9a6e7c1d1 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -28,7 +28,7 @@ struct MemBlockInfo : public MemInfo { if(!mem) { - ConLog.Error("Not enough free memory."); + LOG_ERROR(MEMORY, "Not enough free memory."); assert(0); } memset(mem, 0, size); diff --git a/rpcs3/Emu/SysCalls/Callback.cpp b/rpcs3/Emu/SysCalls/Callback.cpp index 3fbe1e4227..0c7785fac4 100644 --- a/rpcs3/Emu/SysCalls/Callback.cpp +++ b/rpcs3/Emu/SysCalls/Callback.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Callback.h" @@ -66,7 +66,7 @@ again: { if (Emu.IsStopped()) { - ConLog.Warning("Callback::Branch() aborted"); + LOG_WARNING(HLE, "Callback::Branch() aborted"); return; } Sleep(1); @@ -80,7 +80,7 @@ again: } if (Emu.IsStopped()) { - ConLog.Warning("Callback::Branch() aborted"); + LOG_WARNING(HLE, "Callback::Branch() aborted"); return; } @@ -109,7 +109,7 @@ again: { if (Emu.IsStopped()) { - ConLog.Warning("Callback::Branch(true) aborted (end)"); + LOG_WARNING(HLE, "Callback::Branch(true) aborted (end)"); return; } Sleep(1); diff --git a/rpcs3/Emu/SysCalls/FuncList.cpp b/rpcs3/Emu/SysCalls/FuncList.cpp index fdebc1a05c..c4760519c0 100644 --- a/rpcs3/Emu/SysCalls/FuncList.cpp +++ b/rpcs3/Emu/SysCalls/FuncList.cpp @@ -1,10 +1,10 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "SysCalls.h" -#define FUNC_LOG_ERROR(x) ConLog.Error(x); return 0 +#define FUNC_LOG_ERROR(x) LOG_ERROR(HLE, x); return 0 std::string SysCalls::GetHLEFuncName(const u32 fid) { switch(fid) @@ -3846,4 +3846,4 @@ std::string SysCalls::GetHLEFuncName(const u32 fid) } return fmt::Format("Unknown func id: 0x%08x", fid); -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 590063f397..20a5669c5d 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -160,7 +160,7 @@ void Module::Log(const u32 id, std::string fmt, ...) { va_list list; va_start(list, fmt); - ConLog.Write(GetName() + fmt::Format("[%d]: ", id) + fmt::FormatV(fmt, list)); + LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::FormatV(fmt, list)); va_end(list); } } @@ -171,7 +171,7 @@ void Module::Log(std::string fmt, ...) { va_list list; va_start(list, fmt); - ConLog.Write(GetName() + ": " + fmt::FormatV(fmt, list)); + LOG_NOTICE(HLE, GetName() + ": " + fmt::FormatV(fmt, list)); va_end(list); } } @@ -180,7 +180,7 @@ void Module::Warning(const u32 id, std::string fmt, ...) { va_list list; va_start(list, fmt); - ConLog.Warning(GetName() + fmt::Format("[%d] warning: ", id) + fmt::FormatV(fmt, list)); + LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::FormatV(fmt, list)); va_end(list); } @@ -188,7 +188,7 @@ void Module::Warning(std::string fmt, ...) { va_list list; va_start(list, fmt); - ConLog.Warning(GetName() + " warning: " + fmt::FormatV(fmt, list)); + LOG_WARNING(HLE, GetName() + " warning: " + fmt::FormatV(fmt, list)); va_end(list); } @@ -196,7 +196,7 @@ void Module::Error(const u32 id, std::string fmt, ...) { va_list list; va_start(list, fmt); - ConLog.Error(GetName() + fmt::Format("[%d] error: ", id) + fmt::FormatV(fmt, list)); + LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::FormatV(fmt, list)); va_end(list); } @@ -204,7 +204,7 @@ void Module::Error(std::string fmt, ...) { va_list list; va_start(list, fmt); - ConLog.Error(GetName() + " error: " + fmt::FormatV(fmt, list)); + LOG_ERROR(HLE, GetName() + " error: " + fmt::FormatV(fmt, list)); va_end(list); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index f15d9e1792..2b7d945837 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -36,7 +36,7 @@ next: { if (Emu.IsStopped()) { - ConLog.Warning("adecRawRead(): aborted"); + LOG_WARNING(HLE, "adecRawRead(): aborted"); return 0; } Sleep(1); @@ -53,7 +53,7 @@ next: { if (!Memory.CopyToReal(buf, adec.reader.addr, adec.reader.size)) { - ConLog.Error("adecRawRead(): data reading failed (reader.size=0x%x)", adec.reader.size); + LOGF_ERROR(HLE, "adecRawRead(): data reading failed (reader.size=0x%x)", adec.reader.size); Emu.Pause(); return 0; } @@ -68,11 +68,11 @@ next: adec.reader.addr = adec.task.au.addr; adec.reader.size = adec.task.au.size; - //ConLog.Write("Audio AU: size = 0x%x, pts = 0x%llx", adec.task.au.size, adec.task.au.pts); + //LOGF_NOTICE(HLE, "Audio AU: size = 0x%x, pts = 0x%llx", adec.task.au.size, adec.task.au.pts); } break; default: - ConLog.Error("adecRawRead(): sequence error (task %d)", adec.job.Peek().type); + LOGF_ERROR(HLE, "adecRawRead(): sequence error (task %d)", adec.job.Peek().type); return -1; } @@ -89,7 +89,7 @@ next: } else if (!Memory.CopyToReal(buf, adec.reader.addr, buf_size)) { - ConLog.Error("adecRawRead(): data reading failed (buf_size=0x%x)", buf_size); + LOGF_ERROR(HLE, "adecRawRead(): data reading failed (buf_size=0x%x)", buf_size); Emu.Pause(); return 0; } @@ -111,7 +111,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) { if (buf_size < (int)adec.reader.rem_size) { - ConLog.Error("adecRead(): too small buf_size (rem_size = %d, buf_size = %d)", adec.reader.rem_size, buf_size); + LOGF_ERROR(HLE, "adecRead(): too small buf_size (rem_size = %d, buf_size = %d)", adec.reader.rem_size, buf_size); Emu.Pause(); return 0; } @@ -131,7 +131,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) if (adecRawRead(opaque, header, 8) < 8) break; if (header[0] != 0x0f || header[1] != 0xd0) { - ConLog.Error("adecRead(): 0x0FD0 header not found"); + LOGF_ERROR(HLE, "adecRead(): 0x0FD0 header not found"); Emu.Pause(); return -1; } @@ -141,7 +141,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) OMAHeader oma(1 /* atrac3p id */, header[2], header[3]); if (buf_size < sizeof(oma) + 8) { - ConLog.Error("adecRead(): OMAHeader writing failed"); + LOGF_ERROR(HLE, "adecRead(): OMAHeader writing failed"); Emu.Pause(); return 0; } @@ -159,7 +159,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) u32 size = (((header[2] & 0x3) << 8) | header[3]) * 8 + 8; // data to be read before next header - //ConLog.Write("*** audio block read: size = 0x%x", size); + //LOGF_NOTICE(HLE, "*** audio block read: size = 0x%x", size); if (buf_size < (int)size) { @@ -198,7 +198,7 @@ u32 adecOpen(AudioDecoder* data) thread t("Audio Decoder[" + std::to_string(adec_id) + "] Thread", [&]() { - ConLog.Write("Audio Decoder thread started"); + LOGF_NOTICE(HLE, "Audio Decoder thread started"); AdecTask& task = adec.task; @@ -231,7 +231,7 @@ u32 adecOpen(AudioDecoder* data) case adecStartSeq: { // TODO: reset data - ConLog.Warning("adecStartSeq:"); + LOGF_WARNING(HLE, "adecStartSeq:"); adec.reader.addr = 0; adec.reader.size = 0; @@ -247,7 +247,7 @@ u32 adecOpen(AudioDecoder* data) case adecEndSeq: { // TODO: finalize - ConLog.Warning("adecEndSeq:"); + LOGF_WARNING(HLE, "adecEndSeq:"); /*Callback cb; cb.SetAddr(adec.cbFunc); @@ -268,7 +268,7 @@ u32 adecOpen(AudioDecoder* data) adec.reader.addr = task.au.addr; adec.reader.size = task.au.size; - //ConLog.Write("Audio AU: size = 0x%x, pts = 0x%llx", task.au.size, task.au.pts); + //LOGF_NOTICE(HLE, "Audio AU: size = 0x%x, pts = 0x%llx", task.au.size, task.au.pts); if (adec.just_started) { @@ -317,33 +317,33 @@ u32 adecOpen(AudioDecoder* data) err = avformat_open_input(&adec.fmt, NULL, av_find_input_format("oma"), NULL); if (err) { - ConLog.Error("adecDecodeAu: avformat_open_input() failed"); + LOGF_ERROR(HLE, "adecDecodeAu: avformat_open_input() failed"); Emu.Pause(); break; } AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); // ??? if (!codec) { - ConLog.Error("adecDecodeAu: avcodec_find_decoder() failed"); + LOGF_ERROR(HLE, "adecDecodeAu: avcodec_find_decoder() failed"); Emu.Pause(); break; } /*err = avformat_find_stream_info(adec.fmt, NULL); if (err) { - ConLog.Error("adecDecodeAu: avformat_find_stream_info() failed"); + LOGF_ERROR(HLE, "adecDecodeAu: avformat_find_stream_info() failed"); Emu.Pause(); break; } if (!adec.fmt->nb_streams) { - ConLog.Error("adecDecodeAu: no stream found"); + LOGF_ERROR(HLE, "adecDecodeAu: no stream found"); Emu.Pause(); break; }*/ if (!avformat_new_stream(adec.fmt, codec)) { - ConLog.Error("adecDecodeAu: avformat_new_stream() failed"); + LOGF_ERROR(HLE, "adecDecodeAu: avformat_new_stream() failed"); Emu.Pause(); break; } @@ -358,7 +358,7 @@ u32 adecOpen(AudioDecoder* data) } if (err) { - ConLog.Error("adecDecodeAu: avcodec_open2() failed"); + LOGF_ERROR(HLE, "adecDecodeAu: avcodec_open2() failed"); Emu.Pause(); break; } @@ -371,7 +371,7 @@ u32 adecOpen(AudioDecoder* data) { if (Emu.IsStopped()) { - ConLog.Warning("adecDecodeAu: aborted"); + LOGF_WARNING(HLE, "adecDecodeAu: aborted"); return; } @@ -420,7 +420,7 @@ u32 adecOpen(AudioDecoder* data) if (!frame.data) { - ConLog.Error("adecDecodeAu: av_frame_alloc() failed"); + LOGF_ERROR(HLE, "adecDecodeAu: av_frame_alloc() failed"); Emu.Pause(); break; } @@ -433,7 +433,7 @@ u32 adecOpen(AudioDecoder* data) { if (!last_frame && decode < 0) { - ConLog.Error("adecDecodeAu: AU decoding error(0x%x)", decode); + LOGF_ERROR(HLE, "adecDecodeAu: AU decoding error(0x%x)", decode); } if (!got_frame && adec.reader.size == 0) break; } @@ -460,18 +460,18 @@ u32 adecOpen(AudioDecoder* data) if (frame.data->format != AV_SAMPLE_FMT_FLTP) { - ConLog.Error("adecDecodeaAu: unsupported frame format(%d)", frame.data->format); + LOGF_ERROR(HLE, "adecDecodeaAu: unsupported frame format(%d)", frame.data->format); Emu.Pause(); break; } if (frame.data->channels != 2) { - ConLog.Error("adecDecodeAu: unsupported channel count (%d)", frame.data->channels); + LOGF_ERROR(HLE, "adecDecodeAu: unsupported channel count (%d)", frame.data->channels); Emu.Pause(); break; } - //ConLog.Write("got audio frame (pts=0x%llx, nb_samples=%d, ch=%d, sample_rate=%d, nbps=%d)", + //LOGF_NOTICE(HLE, "got audio frame (pts=0x%llx, nb_samples=%d, ch=%d, sample_rate=%d, nbps=%d)", //frame.pts, frame.data->nb_samples, frame.data->channels, frame.data->sample_rate, //av_get_bytes_per_sample((AVSampleFormat)frame.data->format)); @@ -497,16 +497,16 @@ u32 adecOpen(AudioDecoder* data) case adecClose: { adec.is_finished = true; - ConLog.Write("Audio Decoder thread ended"); + LOGF_NOTICE(HLE, "Audio Decoder thread ended"); return; } default: - ConLog.Error("Audio Decoder thread error: unknown task(%d)", task.type); + LOGF_ERROR(HLE, "Audio Decoder thread error: unknown task(%d)", task.type); } } adec.is_finished = true; - ConLog.Warning("Audio Decoder thread aborted"); + LOGF_WARNING(HLE, "Audio Decoder thread aborted"); }); t.detach(); @@ -518,8 +518,8 @@ bool adecCheckType(AudioCodecType type) { switch (type) { - case CELL_ADEC_TYPE_ATRACX: ConLog.Write("*** (?) type: ATRAC3plus"); break; - case CELL_ADEC_TYPE_ATRACX_2CH: ConLog.Write("*** type: ATRAC3plus 2ch"); break; + case CELL_ADEC_TYPE_ATRACX: LOGF_NOTICE(HLE, "*** (?) type: ATRAC3plus"); break; + case CELL_ADEC_TYPE_ATRACX_2CH: LOGF_NOTICE(HLE, "*** type: ATRAC3plus 2ch"); break; case CELL_ADEC_TYPE_ATRACX_6CH: case CELL_ADEC_TYPE_ATRACX_8CH: @@ -609,7 +609,7 @@ int cellAdecClose(u32 handle) { if (Emu.IsStopped()) { - ConLog.Warning("cellAdecClose(%d) aborted", handle); + LOGF_WARNING(HLE, "cellAdecClose(%d) aborted", handle); break; } Sleep(1); @@ -732,7 +732,7 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) if (!swr) { - ConLog.Error("cellAdecGetPcm(%d): swr_alloc_set_opts() failed", handle); + LOGF_ERROR(HLE, "cellAdecGetPcm(%d): swr_alloc_set_opts() failed", handle); Emu.Pause(); free(out); if (af.data) @@ -759,7 +759,7 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) if (!Memory.CopyFromReal(outBuffer_addr, out, af.size)) { - ConLog.Error("cellAdecGetPcm(%d): data copying failed (addr=0x%x)", handle, outBuffer_addr); + LOGF_ERROR(HLE, "cellAdecGetPcm(%d): data copying failed (addr=0x%x)", handle, outBuffer_addr); Emu.Pause(); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.h b/rpcs3/Emu/SysCalls/Modules/cellAdec.h index 385d2486c4..9c27cd09bf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.h @@ -1133,14 +1133,14 @@ public: AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); if (!codec) { - ConLog.Error("AudioDecoder(): avcodec_find_decoder(ATRAC3P) failed"); + LOGF_ERROR(HLE, "AudioDecoder(): avcodec_find_decoder(ATRAC3P) failed"); Emu.Pause(); return; } fmt = avformat_alloc_context(); if (!fmt) { - ConLog.Error("AudioDecoder(): avformat_alloc_context failed"); + LOGF_ERROR(HLE, "AudioDecoder(): avformat_alloc_context failed"); Emu.Pause(); return; } @@ -1148,7 +1148,7 @@ public: fmt->pb = avio_alloc_context(io_buf, 4096, 0, this, adecRead, NULL, NULL); if (!fmt->pb) { - ConLog.Error("AudioDecoder(): avio_alloc_context failed"); + LOGF_ERROR(HLE, "AudioDecoder(): avio_alloc_context failed"); Emu.Pause(); return; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp index b170e3073e..f0b2ac8206 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 4538f042a0..dab64ff67a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -50,11 +50,11 @@ int cellAudioInit() if (do_dump && !m_dump.Init()) { - ConLog.Error("cellAudioInit(): AudioDumper::Init() failed"); + LOGF_ERROR(HLE, "cellAudioInit(): AudioDumper::Init() failed"); return; } - ConLog.Write("Audio thread started"); + LOGF_NOTICE(HLE, "Audio thread started"); if (Ini.AudioDumpToFile.GetValue()) m_dump.WriteHeader(); @@ -146,7 +146,7 @@ int cellAudioInit() { if (Emu.IsStopped()) { - ConLog.Warning("Audio thread aborted"); + LOGF_WARNING(HLE, "Audio thread aborted"); goto abort; } @@ -426,7 +426,7 @@ int cellAudioInit() { if (m_dump.WriteData(&buf8ch, sizeof(buf8ch)) != sizeof(buf8ch)) // write file data { - ConLog.Error("cellAudioInit(): AudioDumper::WriteData() failed"); + LOGF_ERROR(HLE, "cellAudioInit(): AudioDumper::WriteData() failed"); goto abort; } } @@ -434,21 +434,21 @@ int cellAudioInit() { if (m_dump.WriteData(&buf2ch, sizeof(buf2ch)) != sizeof(buf2ch)) // write file data { - ConLog.Error("cellAudioInit(): AudioDumper::WriteData() failed"); + LOGF_ERROR(HLE, "cellAudioInit(): AudioDumper::WriteData() failed"); goto abort; } } else { - ConLog.Error("cellAudioInit(): unknown AudioDumper::GetCh() value (%d)", m_dump.GetCh()); + LOGF_ERROR(HLE, "cellAudioInit(): unknown AudioDumper::GetCh() value (%d)", m_dump.GetCh()); goto abort; } } - //ConLog.Write("Audio perf: start=%d (access=%d, AddData=%d, events=%d, dump=%d)", + //LOGF_NOTICE(HLE, "Audio perf: start=%d (access=%d, AddData=%d, events=%d, dump=%d)", //stamp0 - m_config.start_time, stamp1 - stamp0, stamp2 - stamp1, stamp3 - stamp2, get_system_time() - stamp3); } - ConLog.Write("Audio thread ended"); + LOGF_NOTICE(HLE, "Audio thread ended"); abort: queue.Push(nullptr); queue_float.Push(nullptr); @@ -480,7 +480,7 @@ abort: { if (Emu.IsStopped()) { - ConLog.Warning("cellAudioInit() aborted"); + LOGF_WARNING(HLE, "cellAudioInit() aborted"); return CELL_OK; } Sleep(1); @@ -505,7 +505,7 @@ int cellAudioQuit() Sleep(1); if (Emu.IsStopped()) { - ConLog.Warning("cellAudioQuit(): aborted"); + LOGF_WARNING(HLE, "cellAudioQuit(): aborted"); return CELL_OK; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index ccada21244..b3722229e4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -47,7 +47,7 @@ u32 dmuxOpen(Demuxer* data) thread t("Demuxer[" + std::to_string(dmux_id) + "] Thread", [&]() { - ConLog.Write("Demuxer thread started (mem=0x%x, size=0x%x, cb=0x%x, arg=0x%x)", dmux.memAddr, dmux.memSize, dmux.cbFunc, dmux.cbArg); + LOGF_NOTICE(HLE, "Demuxer thread started (mem=0x%x, size=0x%x, cb=0x%x, arg=0x%x)", dmux.memAddr, dmux.memSize, dmux.cbFunc, dmux.cbArg); DemuxerTask task; DemuxerStream stream; @@ -134,7 +134,7 @@ u32 dmuxOpen(Demuxer* data) if (!pes.new_au) // temporarily { - ConLog.Error("No pts info found"); + LOGF_ERROR(HLE, "No pts info found"); } // read additional header: @@ -149,7 +149,7 @@ u32 dmuxOpen(Demuxer* data) { if (Emu.IsStopped()) { - ConLog.Warning("esATX[%d] was full, waiting aborted", ch); + LOGF_WARNING(HLE, "esATX[%d] was full, waiting aborted", ch); return; } Sleep(1); @@ -166,7 +166,7 @@ u32 dmuxOpen(Demuxer* data) es.push(stream, len - pes.size - 3, pes); es.finish(stream); - //ConLog.Write("*** AT3+ AU sent (len=0x%x, pts=0x%llx)", len - pes.size - 3, pes.pts); + //LOGF_NOTICE(HLE, "*** AT3+ AU sent (len=0x%x, pts=0x%llx)", len - pes.size - 3, pes.pts); mem_ptr_t esMsg(a128(dmux.memAddr) + (cb_add ^= 16)); esMsg->msgType = CELL_DMUX_ES_MSG_TYPE_AU_FOUND; @@ -198,7 +198,7 @@ u32 dmuxOpen(Demuxer* data) { if (Emu.IsStopped()) { - ConLog.Warning("esAVC[%d] was full, waiting aborted", ch); + LOGF_WARNING(HLE, "esAVC[%d] was full, waiting aborted", ch); return; } Sleep(1); @@ -236,7 +236,7 @@ u32 dmuxOpen(Demuxer* data) if (pes.new_au) { - //ConLog.Write("*** AVC AU detected (pts=0x%llx, dts=0x%llx)", pes.pts, pes.dts); + //LOGF_NOTICE(HLE, "*** AVC AU detected (pts=0x%llx, dts=0x%llx)", pes.pts, pes.dts); } if (es.isfull()) @@ -268,7 +268,7 @@ u32 dmuxOpen(Demuxer* data) case 0x1dc: case 0x1dd: case 0x1de: case 0x1df: { // unknown - ConLog.Warning("Unknown MPEG stream found"); + LOGF_WARNING(HLE, "Unknown MPEG stream found"); stream.skip(4); stream.get(len); stream.skip(len); @@ -277,7 +277,7 @@ u32 dmuxOpen(Demuxer* data) case USER_DATA_START_CODE: { - ConLog.Error("USER_DATA_START_CODE found"); + LOGF_ERROR(HLE, "USER_DATA_START_CODE found"); return; } @@ -304,7 +304,7 @@ u32 dmuxOpen(Demuxer* data) { if (task.stream.discontinuity) { - ConLog.Warning("dmuxSetStream (beginning)"); + LOGF_WARNING(HLE, "dmuxSetStream (beginning)"); for (u32 i = 0; i < 192; i++) { if (esALL[i]) @@ -318,13 +318,13 @@ u32 dmuxOpen(Demuxer* data) if (updates_count != updates_signaled) { - ConLog.Error("dmuxSetStream: stream update inconsistency (input=%d, signaled=%d)", updates_count, updates_signaled); + LOGF_ERROR(HLE, "dmuxSetStream: stream update inconsistency (input=%d, signaled=%d)", updates_count, updates_signaled); return; } updates_count++; stream = task.stream; - //ConLog.Write("*** stream updated(addr=0x%x, size=0x%x, discont=%d, userdata=0x%llx)", + //LOGF_NOTICE(HLE, "*** stream updated(addr=0x%x, size=0x%x, discont=%d, userdata=0x%llx)", //stream.addr, stream.size, stream.discontinuity, stream.userdata); dmux.is_running = true; @@ -357,7 +357,7 @@ u32 dmuxOpen(Demuxer* data) case dmuxClose: { dmux.is_finished = true; - ConLog.Write("Demuxer thread ended"); + LOGF_NOTICE(HLE, "Demuxer thread ended"); return; } @@ -381,7 +381,7 @@ u32 dmuxOpen(Demuxer* data) } else { - ConLog.Warning("dmuxEnableEs: (TODO) unsupported filter (0x%x, 0x%x, 0x%x, 0x%x)", es.fidMajor, es.fidMinor, es.sup1, es.sup2); + LOGF_WARNING(HLE, "dmuxEnableEs: (TODO) unsupported filter (0x%x, 0x%x, 0x%x, 0x%x)", es.fidMajor, es.fidMinor, es.sup1, es.sup2); } es.dmux = &dmux; } @@ -392,7 +392,7 @@ u32 dmuxOpen(Demuxer* data) ElementaryStream& es = *task.es.es_ptr; if (es.dmux != &dmux) { - ConLog.Warning("dmuxDisableEs: invalid elementary stream"); + LOGF_WARNING(HLE, "dmuxDisableEs: invalid elementary stream"); break; } for (u32 i = 0; i < 192; i++) @@ -450,11 +450,11 @@ u32 dmuxOpen(Demuxer* data) break; default: - ConLog.Error("Demuxer thread error: unknown task(%d)", task.type); + LOGF_ERROR(HLE, "Demuxer thread error: unknown task(%d)", task.type); return; } } - ConLog.Warning("Demuxer thread aborted"); + LOGF_WARNING(HLE, "Demuxer thread aborted"); }); t.detach(); @@ -598,7 +598,7 @@ int cellDmuxClose(u32 demuxerHandle) { if (Emu.IsStopped()) { - ConLog.Warning("cellDmuxClose(%d) aborted", demuxerHandle); + LOGF_WARNING(HLE, "cellDmuxClose(%d) aborted", demuxerHandle); return CELL_OK; } @@ -630,7 +630,7 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize { if (Emu.IsStopped()) { - ConLog.Warning("cellDmuxSetStream(%d) aborted (waiting)", demuxerHandle); + LOGF_WARNING(HLE, "cellDmuxSetStream(%d) aborted (waiting)", demuxerHandle); return CELL_OK; } Sleep(1); @@ -649,12 +649,12 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize u32 addr; if (!dmux->fbSetStream.Pop(addr)) { - ConLog.Warning("cellDmuxSetStream(%d) aborted (fbSetStream.Pop())", demuxerHandle); + LOGF_WARNING(HLE, "cellDmuxSetStream(%d) aborted (fbSetStream.Pop())", demuxerHandle); return CELL_OK; } if (addr != info.addr) { - ConLog.Error("cellDmuxSetStream(%d): wrong stream queued (right=0x%x, queued=0x%x)", demuxerHandle, info.addr, addr); + LOGF_ERROR(HLE, "cellDmuxSetStream(%d): wrong stream queued (right=0x%x, queued=0x%x)", demuxerHandle, info.addr, addr); Emu.Pause(); } return CELL_OK; @@ -690,12 +690,12 @@ int cellDmuxResetStreamAndWaitDone(u32 demuxerHandle) u32 addr; if (!dmux->fbSetStream.Pop(addr)) { - ConLog.Warning("cellDmuxResetStreamAndWaitDone(%d) aborted (fbSetStream.Pop())", demuxerHandle); + LOGF_WARNING(HLE, "cellDmuxResetStreamAndWaitDone(%d) aborted (fbSetStream.Pop())", demuxerHandle); return CELL_OK; } if (addr != 0) { - ConLog.Error("cellDmuxResetStreamAndWaitDone(%d): wrong stream queued (0x%x)", demuxerHandle, addr); + LOGF_ERROR(HLE, "cellDmuxResetStreamAndWaitDone(%d): wrong stream queued (0x%x)", demuxerHandle, addr); Emu.Pause(); } return CELL_OK; @@ -1013,4 +1013,4 @@ void cellDmux_init() cellDmux->AddFunc(0x002e8da2, cellDmuxPeekAuEx); cellDmux->AddFunc(0x24ea6474, cellDmuxReleaseAu); cellDmux->AddFunc(0xebb3b2bd, cellDmuxFlushEs); -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.h b/rpcs3/Emu/SysCalls/Modules/cellDmux.h index 7d2f8082a7..48f4775bab 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.h +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.h @@ -394,14 +394,14 @@ struct PesHeader new_au = true; if ((v & 0xF0) != 0x30 || (size - empty) < 10) { - ConLog.Error("PesHeader(): pts not found"); + LOGF_ERROR(HLE, "PesHeader(): pts not found"); Emu.Pause(); } pts = stream.get_ts(v); stream.get(v); if ((v & 0xF0) != 0x10) { - ConLog.Error("PesHeader(): dts not found"); + LOGF_ERROR(HLE, "PesHeader(): dts not found"); Emu.Pause(); } dts = stream.get_ts(v); @@ -557,7 +557,7 @@ public: { if (size > GetMaxAU()) { - ConLog.Error("es::freespace(): last_size too big (size=0x%x, max_au=0x%x)", size, GetMaxAU()); + LOGF_ERROR(HLE, "es::freespace(): last_size too big (size=0x%x, max_au=0x%x)", size, GetMaxAU()); Emu.Pause(); return 0; } @@ -587,7 +587,7 @@ public: u32 addr; { std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) ConLog.Write(">>> es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, ">>> es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); addr = put; /*if (!first) @@ -600,7 +600,7 @@ public: }*/ mem_ptr_t info(put); - //if (fidMajor != 0xbd) ConLog.Warning("es::finish(): (%s) size = 0x%x, info_addr=0x%x, pts = 0x%x", + //if (fidMajor != 0xbd) LOGF_WARNING(HLE, "es::finish(): (%s) size = 0x%x, info_addr=0x%x, pts = 0x%x", //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), //(u32)info->auSize, put, (u32)info->ptsLower); @@ -611,11 +611,11 @@ public: size = 0; put_count++; - //if (fidMajor != 0xbd) ConLog.Write("<<< es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, "<<< es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); } if (!entries.Push(addr)) { - ConLog.Error("es::finish() aborted (no space)"); + LOGF_ERROR(HLE, "es::finish() aborted (no space)"); } } @@ -625,7 +625,7 @@ public: if (is_full()) { - ConLog.Error("es::push(): buffer is full"); + LOGF_ERROR(HLE, "es::push(): buffer is full"); Emu.Pause(); return; } @@ -634,7 +634,7 @@ public: size += sz; if (!Memory.Copy(data_addr, stream.addr, sz)) { - ConLog.Error("es::push(): data copying failed"); + LOGF_ERROR(HLE, "es::push(): data copying failed"); Emu.Pause(); return; } @@ -674,22 +674,22 @@ public: bool release() { std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) ConLog.Write(">>> es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, ">>> es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); if (released >= put_count) { - ConLog.Error("es::release(): buffer is empty"); + LOGF_ERROR(HLE, "es::release(): buffer is empty"); return false; } u32 addr = entries.Peek(); mem_ptr_t info(addr); - //if (fidMajor != 0xbd) ConLog.Warning("es::release(): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", + //if (fidMajor != 0xbd) LOGF_WARNING(HLE, "es::release(): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), (u32)info->auSize, first, (u32)info->ptsLower); if (released >= peek_count) { - ConLog.Error("es::release(): buffer has not been seen yet"); + LOGF_ERROR(HLE, "es::release(): buffer has not been seen yet"); return false; } @@ -711,30 +711,30 @@ public: released++; if (!entries.Pop(addr)) { - ConLog.Error("es::release(): entries.Pop() aborted (no entries found)"); + LOGF_ERROR(HLE, "es::release(): entries.Pop() aborted (no entries found)"); return false; } - //if (fidMajor != 0xbd) ConLog.Write("<<< es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, "<<< es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); return true; } bool peek(u32& out_data, bool no_ex, u32& out_spec, bool update_index) { std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) ConLog.Write(">>> es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), + //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, ">>> es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); if (peek_count >= put_count) return false; if (peek_count < released) { - ConLog.Error("es::peek(): sequence error: peek_count < released (peek_count=%d, released=%d)", peek_count, released); + LOGF_ERROR(HLE, "es::peek(): sequence error: peek_count < released (peek_count=%d, released=%d)", peek_count, released); Emu.Pause(); return false; } u32 addr = entries.Peek(peek_count - released); mem_ptr_t info(addr); - //if (fidMajor != 0xbd) ConLog.Warning("es::peek(%sAu(Ex)): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", + //if (fidMajor != 0xbd) LOGF_WARNING(HLE, "es::peek(%sAu(Ex)): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", //wxString(update_index ? "Get" : "Peek").wx_str(), //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), (u32)info->auSize, peek, (u32)info->ptsLower); @@ -760,7 +760,7 @@ public: peek_count++; } - //if (fidMajor != 0xbd) ConLog.Write("<<< es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), + //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, "<<< es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); return true; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index a20329da74..3692abbcdd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp index 317a318242..92361c370f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 200894c3b9..02af4d083c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 2ecab1dab9..2133bac53f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -478,7 +478,7 @@ int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) if(current + 8 >= end) { - ConLog.Warning("bad flip!"); + LOG_WARNING(HLE, "bad flip!"); //cellGcmCallback(ctxt.GetAddr(), current + 8 - end); //copied: diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index bdfdc72dbb..1aeb261a14 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index 74105d0c53..dc7a4b53a6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index d09464ba5a..571a332fe9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index 2874a0b3d4..611979dbb8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 66c31b128a..53cc3f5c62 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index eb7537f3d8..4ffcc7d04f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 7ba35d2e92..ea9047f1b3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp index 9ac5b8462b..2d62e82d8d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index ea3541be23..79d330909d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 2181a6b09e..57e166334c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -93,7 +93,7 @@ int cellSyncMutexLock(mem_ptr_t mutex) Sleep(1); if (Emu.IsStopped()) { - ConLog.Warning("cellSyncMutexLock(mutex=0x%x) aborted", mutex.GetAddr()); + LOGF_WARNING(HLE, "cellSyncMutexLock(mutex=0x%x) aborted", mutex.GetAddr()); break; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp index 6ff960e848..50c75daa24 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 317a927b23..ebad56ef57 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -350,7 +350,7 @@ int cellSysutilCheckCallback() Sleep(1); if (Emu.IsStopped()) { - ConLog.Warning("cellSysutilCheckCallback() aborted"); + LOG_WARNING(HLE, "cellSysutilCheckCallback() aborted"); break; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp index 79552479e6..834871b5d5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index af747c1f6c..96936a39ff 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -230,7 +230,7 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ { funcFile(result.GetAddr(), fileGet.GetAddr(), fileSet.GetAddr()); if (result->result < 0) { - ConLog.Error("modifySaveDataFiles: CellSaveDataFileCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "modifySaveDataFiles: CellSaveDataFileCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } if (result->result == CELL_SAVEDATA_CBRESULT_OK_LAST) { @@ -251,7 +251,7 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ case CELL_SAVEDATA_FILETYPE_CONTENT_SND0: filepath += "SND0.AT3"; break; default: - ConLog.Error("modifySaveDataFiles: Unknown fileType! Aborting..."); + LOGF_ERROR(HLE, "modifySaveDataFiles: Unknown fileType! Aborting..."); return CELL_SAVEDATA_ERROR_PARAM; } @@ -274,11 +274,11 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ break; case CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC: - ConLog.Warning("modifySaveDataFiles: File operation CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC not yet implemented"); + LOGF_WARNING(HLE, "modifySaveDataFiles: File operation CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC not yet implemented"); break; default: - ConLog.Error("modifySaveDataFiles: Unknown fileOperation! Aborting..."); + LOGF_ERROR(HLE, "modifySaveDataFiles: Unknown fileOperation! Aborting..."); return CELL_SAVEDATA_ERROR_PARAM; } @@ -339,7 +339,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m funcList(result.GetAddr(), listGet.GetAddr(), listSet.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } if (!listSet->fixedList.IsGood()) @@ -349,7 +349,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m if (listSet->newData.IsGood()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { - ConLog.Warning("cellSaveDataListSave2: No save entries found!"); // TODO: Find a better way to handle this error + LOGF_WARNING(HLE, "cellSaveDataListSave2: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -362,7 +362,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -424,7 +424,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m funcList(result.GetAddr(), listGet.GetAddr(), listSet.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } if (!listSet->fixedList.IsGood()) @@ -434,7 +434,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m if (listSet->newData.IsGood()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { - ConLog.Warning("cellSaveDataListLoad2: No save entries found!"); // TODO: Find a better way to handle this error + LOGF_WARNING(HLE, "cellSaveDataListLoad2: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -447,7 +447,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -508,7 +508,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, } funcFixed(result.GetAddr(), listGet.GetAddr(), fixedSet.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataFixedSave2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } setSaveDataFixed(saveEntries, fixedSet.GetAddr()); @@ -519,7 +519,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -580,7 +580,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, } funcFixed(result.GetAddr(), listGet.GetAddr(), fixedSet.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataFixedLoad2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } setSaveDataFixed(saveEntries, fixedSet.GetAddr()); @@ -591,7 +591,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -647,7 +647,7 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataAutoSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataAutoSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -690,7 +690,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ // The target entry does not exist if (saveEntries.size() == 0) { - ConLog.Warning("cellSaveDataAutoLoad2: Couldn't find save entry (%s)", dirName.c_str()); + LOGF_WARNING(HLE, "cellSaveDataAutoLoad2: Couldn't find save entry (%s)", dirName.c_str()); return CELL_OK; // TODO: Can anyone check the actual behaviour of a PS3 when saves are not found? } @@ -700,7 +700,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - ConLog.Error("cellSaveDataAutoLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOGF_ERROR(HLE, "cellSaveDataAutoLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index 5f7a08c10d..a148c957b5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index be6d1f6e96..94bd9c0be6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -35,7 +35,7 @@ next: { if (Emu.IsStopped()) { - ConLog.Warning("vdecRead(): aborted"); + LOGF_WARNING(HLE, "vdecRead(): aborted"); return 0; } Sleep(1); @@ -52,7 +52,7 @@ next: { if (!Memory.CopyToReal(buf, vdec.reader.addr, vdec.reader.size)) { - ConLog.Error("vdecRead(): data reading failed (reader.size=0x%x)", vdec.reader.size); + LOGF_ERROR(HLE, "vdecRead(): data reading failed (reader.size=0x%x)", vdec.reader.size); Emu.Pause(); return 0; } @@ -71,11 +71,11 @@ next: vdec.reader.addr = vdec.task.addr; vdec.reader.size = vdec.task.size; - //ConLog.Write("Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", vdec.task.size, vdec.task.pts, vdec.task.dts); + //LOGF_NOTICE(HLE, "Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", vdec.task.size, vdec.task.pts, vdec.task.dts); } break; default: - ConLog.Error("vdecRead(): sequence error (task %d)", vdec.job.Peek().type); + LOGF_ERROR(HLE, "vdecRead(): sequence error (task %d)", vdec.job.Peek().type); return 0; } @@ -92,7 +92,7 @@ next: } else if (!Memory.CopyToReal(buf, vdec.reader.addr, buf_size)) { - ConLog.Error("vdecRead(): data reading failed (buf_size=0x%x)", buf_size); + LOGF_ERROR(HLE, "vdecRead(): data reading failed (buf_size=0x%x)", buf_size); Emu.Pause(); return 0; } @@ -136,7 +136,7 @@ u32 vdecOpen(VideoDecoder* data) thread t("Video Decoder[" + std::to_string(vdec_id) + "] Thread", [&]() { - ConLog.Write("Video Decoder thread started"); + LOGF_NOTICE(HLE, "Video Decoder thread started"); VdecTask& task = vdec.task; @@ -169,7 +169,7 @@ u32 vdecOpen(VideoDecoder* data) case vdecStartSeq: { // TODO: reset data - ConLog.Warning("vdecStartSeq:"); + LOGF_WARNING(HLE, "vdecStartSeq:"); vdec.reader.addr = 0; vdec.reader.size = 0; @@ -181,7 +181,7 @@ u32 vdecOpen(VideoDecoder* data) case vdecEndSeq: { // TODO: finalize - ConLog.Warning("vdecEndSeq:"); + LOGF_WARNING(HLE, "vdecEndSeq:"); vdec.vdecCb->ExecAsCallback(vdec.cbFunc, false, vdec.id, CELL_VDEC_MSG_TYPE_SEQDONE, CELL_OK, vdec.cbArg); /*Callback cb; @@ -202,13 +202,13 @@ u32 vdecOpen(VideoDecoder* data) if (task.mode != CELL_VDEC_DEC_MODE_NORMAL) { - ConLog.Error("vdecDecodeAu: unsupported decoding mode(%d)", task.mode); + LOGF_ERROR(HLE, "vdecDecodeAu: unsupported decoding mode(%d)", task.mode); break; } vdec.reader.addr = task.addr; vdec.reader.size = task.size; - //ConLog.Write("Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", task.size, task.pts, task.dts); + //LOGF_NOTICE(HLE, "Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", task.size, task.pts, task.dts); if (vdec.just_started) { @@ -249,33 +249,33 @@ u32 vdecOpen(VideoDecoder* data) err = avformat_open_input(&vdec.fmt, NULL, av_find_input_format("mpeg"), NULL); if (err) { - ConLog.Error("vdecDecodeAu: avformat_open_input() failed"); + LOGF_ERROR(HLE, "vdecDecodeAu: avformat_open_input() failed"); Emu.Pause(); break; } AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); // ??? if (!codec) { - ConLog.Error("vdecDecodeAu: avcodec_find_decoder() failed"); + LOGF_ERROR(HLE, "vdecDecodeAu: avcodec_find_decoder() failed"); Emu.Pause(); break; } /*err = avformat_find_stream_info(vdec.fmt, NULL); if (err) { - ConLog.Error("vdecDecodeAu: avformat_find_stream_info() failed"); + LOGF_ERROR(HLE, "vdecDecodeAu: avformat_find_stream_info() failed"); Emu.Pause(); break; } if (!vdec.fmt->nb_streams) { - ConLog.Error("vdecDecodeAu: no stream found"); + LOGF_ERROR(HLE, "vdecDecodeAu: no stream found"); Emu.Pause(); break; }*/ if (!avformat_new_stream(vdec.fmt, codec)) { - ConLog.Error("vdecDecodeAu: avformat_new_stream() failed"); + LOGF_ERROR(HLE, "vdecDecodeAu: avformat_new_stream() failed"); Emu.Pause(); break; } @@ -290,7 +290,7 @@ u32 vdecOpen(VideoDecoder* data) } if (err) { - ConLog.Error("vdecDecodeAu: avcodec_open2() failed"); + LOGF_ERROR(HLE, "vdecDecodeAu: avcodec_open2() failed"); Emu.Pause(); break; } @@ -305,7 +305,7 @@ u32 vdecOpen(VideoDecoder* data) { if (Emu.IsStopped()) { - ConLog.Warning("vdecDecodeAu: aborted"); + LOGF_WARNING(HLE, "vdecDecodeAu: aborted"); return; } @@ -338,7 +338,7 @@ u32 vdecOpen(VideoDecoder* data) if (!frame.data) { - ConLog.Error("vdecDecodeAu: av_frame_alloc() failed"); + LOGF_ERROR(HLE, "vdecDecodeAu: av_frame_alloc() failed"); Emu.Pause(); break; } @@ -351,7 +351,7 @@ u32 vdecOpen(VideoDecoder* data) { if (!last_frame && decode < 0) { - ConLog.Error("vdecDecodeAu: AU decoding error(0x%x)", decode); + LOGF_ERROR(HLE, "vdecDecodeAu: AU decoding error(0x%x)", decode); } if (!got_picture && vdec.reader.size == 0) break; // video end? } @@ -374,7 +374,7 @@ u32 vdecOpen(VideoDecoder* data) frame.dts = (frame.pts - vdec.first_pts) + vdec.first_dts; frame.userdata = task.userData; - //ConLog.Write("got picture (pts=0x%llx, dts=0x%llx)", frame.pts, frame.dts); + //LOGF_NOTICE(HLE, "got picture (pts=0x%llx, dts=0x%llx)", frame.pts, frame.dts); vdec.frames.Push(frame); // !!!!!!!! frame.data = nullptr; // to prevent destruction @@ -398,23 +398,23 @@ u32 vdecOpen(VideoDecoder* data) case vdecClose: { vdec.is_finished = true; - ConLog.Write("Video Decoder thread ended"); + LOGF_NOTICE(HLE, "Video Decoder thread ended"); return; } case vdecSetFrameRate: { - ConLog.Error("TODO: vdecSetFrameRate(%d)", task.frc); + LOGF_ERROR(HLE, "TODO: vdecSetFrameRate(%d)", task.frc); } break; default: - ConLog.Error("Video Decoder thread error: unknown task(%d)", task.type); + LOGF_ERROR(HLE, "Video Decoder thread error: unknown task(%d)", task.type); } } vdec.is_finished = true; - ConLog.Warning("Video Decoder thread aborted"); + LOGF_WARNING(HLE, "Video Decoder thread aborted"); }); t.detach(); @@ -502,7 +502,7 @@ int cellVdecClose(u32 handle) { if (Emu.IsStopped()) { - ConLog.Warning("cellVdecClose(%d) aborted", handle); + LOGF_WARNING(HLE, "cellVdecClose(%d) aborted", handle); break; } Sleep(1); @@ -553,7 +553,7 @@ int cellVdecEndSeq(u32 handle) { if (Emu.IsStopped()) { - ConLog.Warning("cellVdecEndSeq(%d) aborted", handle); + LOGF_WARNING(HLE, "cellVdecEndSeq(%d) aborted", handle); return CELL_OK; } Sleep(1); @@ -751,13 +751,13 @@ int cellVdecGetPicItem(u32 handle, mem32_t picItem_ptr) } else { - ConLog.Error("cellVdecGetPicItem: unsupported time_base.den (%d)", vdec->ctx->time_base.den); + LOGF_ERROR(HLE, "cellVdecGetPicItem: unsupported time_base.den (%d)", vdec->ctx->time_base.den); Emu.Pause(); } } else { - ConLog.Error("cellVdecGetPicItem: unsupported time_base.num (%d)", vdec->ctx->time_base.num); + LOGF_ERROR(HLE, "cellVdecGetPicItem: unsupported time_base.num (%d)", vdec->ctx->time_base.num); Emu.Pause(); } avc->fixed_frame_rate_flag = true; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.h b/rpcs3/Emu/SysCalls/Modules/cellVdec.h index b0cc5cee54..2e7133fdc3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.h @@ -741,14 +741,14 @@ public: AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); if (!codec) { - ConLog.Error("VideoDecoder(): avcodec_find_decoder(H264) failed"); + LOGF_ERROR(HLE, "VideoDecoder(): avcodec_find_decoder(H264) failed"); Emu.Pause(); return; } fmt = avformat_alloc_context(); if (!fmt) { - ConLog.Error("VideoDecoder(): avformat_alloc_context failed"); + LOGF_ERROR(HLE, "VideoDecoder(): avformat_alloc_context failed"); Emu.Pause(); return; } @@ -756,7 +756,7 @@ public: fmt->pb = avio_alloc_context(io_buf, 4096, 0, this, vdecRead, NULL, NULL); if (!fmt->pb) { - ConLog.Error("VideoDecoder(): avio_alloc_context failed"); + LOGF_ERROR(HLE, "VideoDecoder(): avio_alloc_context failed"); Emu.Pause(); return; } @@ -785,4 +785,4 @@ public: avformat_free_context(fmt); } } -}; \ No newline at end of file +}; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index ce91fbf3e4..0fbab6924b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -38,7 +38,7 @@ u32 vpostOpen(VpostInstance* data) { u32 id = cellVpost->GetNewId(data); - ConLog.Write("*** Vpost instance created (to_rgba=%d): id = %d", data->to_rgba, id); + LOGF_NOTICE(HLE, "*** Vpost instance created (to_rgba=%d): id = %d", data->to_rgba, id); return id; } @@ -123,15 +123,15 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_tinWindow; // ignored - if (ctrlParam->inWindow.x) ConLog.Warning("*** inWindow.x = %d", (u32)ctrlParam->inWindow.x); - if (ctrlParam->inWindow.y) ConLog.Warning("*** inWindow.y = %d", (u32)ctrlParam->inWindow.y); - if (ctrlParam->inWindow.width != w) ConLog.Warning("*** inWindow.width = %d", (u32)ctrlParam->inWindow.width); - if (ctrlParam->inWindow.height != h) ConLog.Warning("*** inWindow.height = %d", (u32)ctrlParam->inWindow.height); + if (ctrlParam->inWindow.x) LOGF_WARNING(HLE, "*** inWindow.x = %d", (u32)ctrlParam->inWindow.x); + if (ctrlParam->inWindow.y) LOGF_WARNING(HLE, "*** inWindow.y = %d", (u32)ctrlParam->inWindow.y); + if (ctrlParam->inWindow.width != w) LOGF_WARNING(HLE, "*** inWindow.width = %d", (u32)ctrlParam->inWindow.width); + if (ctrlParam->inWindow.height != h) LOGF_WARNING(HLE, "*** inWindow.height = %d", (u32)ctrlParam->inWindow.height); ctrlParam->outWindow; // ignored - if (ctrlParam->outWindow.x) ConLog.Warning("*** outWindow.x = %d", (u32)ctrlParam->outWindow.x); - if (ctrlParam->outWindow.y) ConLog.Warning("*** outWindow.y = %d", (u32)ctrlParam->outWindow.y); - if (ctrlParam->outWindow.width != ow) ConLog.Warning("*** outWindow.width = %d", (u32)ctrlParam->outWindow.width); - if (ctrlParam->outWindow.height != oh) ConLog.Warning("*** outWindow.height = %d", (u32)ctrlParam->outWindow.height); + if (ctrlParam->outWindow.x) LOGF_WARNING(HLE, "*** outWindow.x = %d", (u32)ctrlParam->outWindow.x); + if (ctrlParam->outWindow.y) LOGF_WARNING(HLE, "*** outWindow.y = %d", (u32)ctrlParam->outWindow.y); + if (ctrlParam->outWindow.width != ow) LOGF_WARNING(HLE, "*** outWindow.width = %d", (u32)ctrlParam->outWindow.width); + if (ctrlParam->outWindow.height != oh) LOGF_WARNING(HLE, "*** outWindow.height = %d", (u32)ctrlParam->outWindow.height); ctrlParam->execType; // ignored ctrlParam->scalerType; // ignored ctrlParam->ipcType; // ignored diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index a159e0eec1..18618ff190 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -241,7 +241,7 @@ int cellSurMixerStart() { if (Emu.IsStopped()) { - ConLog.Warning("Surmixer aborted"); + LOG_WARNING(HLE, "Surmixer aborted"); return; } @@ -953,4 +953,4 @@ void libmixer_init() REG_SUB_EMPTY(libmixer, "surmxUti", cellSurMixerUtilGetLevelFromDB); REG_SUB_EMPTY(libmixer, "surmxUti", cellSurMixerUtilGetLevelFromDBIndex); REG_SUB_EMPTY(libmixer, "surmxUti", cellSurMixerUtilNoteToRatio); -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index eef93a06e0..aaff7e08b1 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 0897f5ab61..3f4c4f82c4 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -361,7 +361,7 @@ int sceNpTrophyGetTrophyUnlockState(u32 context, u32 handle, mem_ptr_tGetTrophiesCount(); if (count.GetValue() > 128) - ConLog.Warning("sceNpTrophyGetTrophyUnlockState: More than 128 trophies detected!"); + LOG_WARNING(HLE, "sceNpTrophyGetTrophyUnlockState: More than 128 trophies detected!"); // Pack up to 128 bools in u32 flag_bits[4] for (u32 id=0; id aio, int xid, mem_func_ptr_t aio, int xid, mem_func_ptr_toffset, buf_addr, (u64)aio->size, error, res, xid, orig_file->GetPath().c_str()); if (func) // start callback thread @@ -223,7 +223,7 @@ fin: Sleep(1); if (Emu.IsStopped()) { - ConLog.Warning("fsAioRead() aborted"); + LOGF_WARNING(HLE, "fsAioRead() aborted"); break; } }*/ diff --git a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp index 031dc065a2..e2343a02bf 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp index af0c53c620..7885312aae 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/Static.cpp b/rpcs3/Emu/SysCalls/Static.cpp index 21d70269d3..02c8a679c0 100644 --- a/rpcs3/Emu/SysCalls/Static.cpp +++ b/rpcs3/Emu/SysCalls/Static.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -54,14 +54,14 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) k--; if (can_skip) // cannot define this behaviour properly { - ConLog.Warning("StaticAnalyse(): can_skip = %d (unchanged)", can_skip); + LOGF_WARNING(LOADER, "StaticAnalyse(): can_skip = %d (unchanged)", can_skip); } } else { if (can_skip) // cannot define this behaviour properly { - ConLog.Warning("StaticAnalyse(): can_skip = %d (set to 0)", can_skip); + LOGF_WARNING(LOADER, "StaticAnalyse(): can_skip = %d (set to 0)", can_skip); can_skip = 0; } } @@ -85,7 +85,7 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) } if (found) { - ConLog.Write("Function '%s' hooked (addr=0x%x)", m_static_funcs_list[j]->name, i * 4 + base); + LOGF_NOTICE(LOADER, "Function '%s' hooked (addr=0x%x)", m_static_funcs_list[j]->name, i * 4 + base); m_static_funcs_list[j]->found++; data[i+0] = re32(0x39600000 | j); // li r11, j data[i+1] = se32(0x44000003); // sc 3 @@ -129,7 +129,7 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) if (count == 0) { res |= GSR_MISSING; - ConLog.Error("Function '%s' not found", m_static_funcs_list[j]->name); + LOGF_ERROR(LOADER, "Function '%s' not found", m_static_funcs_list[j]->name); } else if (count > 1) { @@ -146,7 +146,7 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) if (m_static_funcs_list[k]->found) { res |= GSR_EXCESS; - ConLog.Error("Function '%s' hooked twice", m_static_funcs_list[j]->name); + LOGF_ERROR(LOADER, "Function '%s' hooked twice", m_static_funcs_list[j]->name); } } } @@ -154,7 +154,7 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) else { res |= GSR_EXCESS; - ConLog.Error("Function '%s' hooked twice", m_static_funcs_list[j]->name); + LOGF_ERROR(LOADER, "Function '%s' hooked twice", m_static_funcs_list[j]->name); } } @@ -170,11 +170,11 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) if (res == GSR_SUCCESS) { - ConLog.Success("Function group [%s] successfully hooked", std::string(name, 9).c_str()); + LOGF_SUCCESS(LOADER, "Function group [%s] successfully hooked", std::string(name, 9).c_str()); } else { - ConLog.Error("Function group [%s] failed:%s%s", std::string(name, 9).c_str(), + LOGF_ERROR(LOADER, "Function group [%s] failed:%s%s", std::string(name, 9).c_str(), (res & GSR_MISSING ? " missing;" : ""), (res & GSR_EXCESS ? " excess;" : "")); } @@ -190,7 +190,7 @@ void StaticFuncManager::StaticExecute(u32 code) } else { - ConLog.Error("StaticExecute(%d): unknown function or illegal opcode", code); + LOGF_ERROR(LOADER, "StaticExecute(%d): unknown function or illegal opcode", code); } } diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 1c502457c5..7a3bb4a787 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -553,7 +553,7 @@ void default_syscall() { //tty case 988: - ConLog.Warning("SysCall 988! r3: 0x%llx, r4: 0x%llx, pc: 0x%llx", + LOGF_WARNING(HLE, "SysCall 988! r3: 0x%llx, r4: 0x%llx, pc: 0x%llx", CPU.GPR[3], CPU.GPR[4], CPU.PC); RESULT(0); return; @@ -561,16 +561,16 @@ void default_syscall() case 999: dump_enable = !dump_enable; Emu.Pause(); - ConLog.Warning("Dump %s", (dump_enable ? "enabled" : "disabled")); + LOGF_WARNING(HLE, "Dump %s", (dump_enable ? "enabled" : "disabled")); return; case 1000: Ini.HLELogging.SetValue(!Ini.HLELogging.GetValue()); - ConLog.Warning("Log %s", (Ini.HLELogging.GetValue() ? "enabled" : "disabled")); + LOGF_WARNING(HLE, "Log %s", (Ini.HLELogging.GetValue() ? "enabled" : "disabled")); return; } - ConLog.Error("Unknown syscall: %d - %08x", code, code); + LOGF_ERROR(HLE, "Unknown syscall: %d - %08x", code, code); RESULT(0); return; } @@ -589,7 +589,7 @@ void SysCalls::DoSyscall(u32 code) } - ConLog.Error("TODO: %s", GetHLEFuncName(code).c_str()); + LOGF_ERROR(HLE, "TODO: %s", GetHLEFuncName(code).c_str()); declCPU(); RESULT(0); } diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 47ec3c25b7..d470b5a720 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -54,7 +54,7 @@ public: { va_list list; va_start(list, fmt); - ConLog.Write(GetName() + fmt::Format("[%d]: ", id) + fmt::FormatV(fmt, list)); + LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::FormatV(fmt, list)); va_end(list); } } @@ -65,7 +65,7 @@ public: { va_list list; va_start(list, fmt); - ConLog.Write(GetName() + ": " + fmt::FormatV(fmt, list)); + LOG_NOTICE(HLE, GetName() + ": " + fmt::FormatV(fmt, list)); va_end(list); } } @@ -75,7 +75,7 @@ public: //#ifdef SYSCALLS_DEBUG va_list list; va_start(list, fmt); - ConLog.Warning(GetName() + fmt::Format("[%d] warning: ", id) + fmt::FormatV(fmt, list)); + LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::FormatV(fmt, list)); va_end(list); //#endif } @@ -85,7 +85,7 @@ public: //#ifdef SYSCALLS_DEBUG va_list list; va_start(list, fmt); - ConLog.Warning(GetName() + " warning: " + fmt::FormatV(fmt, list)); + LOG_WARNING(HLE, GetName() + " warning: " + fmt::FormatV(fmt, list)); va_end(list); //#endif } @@ -94,7 +94,7 @@ public: { va_list list; va_start(list, fmt); - ConLog.Error(GetName() + fmt::Format("[%d] error: ", id) + fmt::FormatV(fmt, list)); + LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::FormatV(fmt, list)); va_end(list); } @@ -102,7 +102,7 @@ public: { va_list list; va_start(list, fmt); - ConLog.Error(GetName() + " error: " + fmt::FormatV(fmt, list)); + LOG_ERROR(HLE, GetName() + " error: " + fmt::FormatV(fmt, list)); va_end(list); } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp index f759f3f1b4..dfd7312a2e 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -85,7 +85,7 @@ int sys_cond_signal(u32 cond_id) if (Emu.IsStopped()) { - ConLog.Warning("sys_cond_signal(id=%d) aborted", cond_id); + LOGF_WARNING(HLE, "sys_cond_signal(id=%d) aborted", cond_id); } } @@ -113,7 +113,7 @@ int sys_cond_signal_all(u32 cond_id) if (Emu.IsStopped()) { - ConLog.Warning("sys_cond_signal_all(id=%d) aborted", cond_id); + LOGF_WARNING(HLE, "sys_cond_signal_all(id=%d) aborted", cond_id); break; } } @@ -153,7 +153,7 @@ int sys_cond_signal_to(u32 cond_id, u32 thread_id) if (Emu.IsStopped()) { - ConLog.Warning("sys_cond_signal_to(id=%d, to=%d) aborted", cond_id, thread_id); + LOGF_WARNING(HLE, "sys_cond_signal_to(id=%d, to=%d) aborted", cond_id, thread_id); } return CELL_OK; @@ -236,6 +236,6 @@ int sys_cond_wait(u32 cond_id, u64 timeout) } abort: - ConLog.Warning("sys_cond_wait(id=%d) aborted", cond_id); + LOGF_WARNING(HLE, "sys_cond_wait(id=%d) aborted", cond_id); return CELL_OK; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp index b755a4d16a..fdf409b0d3 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -95,7 +95,7 @@ int sys_event_queue_destroy(u32 equeue_id, int mode) Sleep(1); if (Emu.IsStopped()) { - ConLog.Warning("sys_event_queue_destroy(equeue=%d) aborted", equeue_id); + LOGF_WARNING(HLE, "sys_event_queue_destroy(equeue=%d) aborted", equeue_id); break; } } @@ -223,7 +223,7 @@ int sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 Sleep(1); if (counter++ > timeout || Emu.IsStopped()) { - if (Emu.IsStopped()) ConLog.Warning("sys_event_queue_receive(equeue=%d) aborted", equeue_id); + if (Emu.IsStopped()) LOGF_WARNING(HLE, "sys_event_queue_receive(equeue=%d) aborted", equeue_id); eq->sq.invalidate(tid); return CELL_ETIMEDOUT; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp index 02d551dbab..8244fdf672 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -197,7 +197,7 @@ int sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 } if (Emu.IsStopped()) { - ConLog.Warning("sys_event_flag_wait(id=%d) aborted", eflag_id); + LOGF_WARNING(HLE, "sys_event_flag_wait(id=%d) aborted", eflag_id); return CELL_OK; } } @@ -324,7 +324,7 @@ int sys_event_flag_cancel(u32 eflag_id, mem32_t num) if (Emu.IsStopped()) { - ConLog.Warning("sys_event_flag_cancel(id=%d) aborted", eflag_id); + LOGF_WARNING(HLE, "sys_event_flag_cancel(id=%d) aborted", eflag_id); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp index 841b9651cf..0e16de98d2 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -126,7 +126,7 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) } fd = sys_fs->GetNewId(stream, IDFlag_File); - ConLog.Warning("*** cellFsOpen(path=\"%s\"): fd = %d", path.c_str(), fd.GetValue()); + LOGF_WARNING(HLE, "*** cellFsOpen(path=\"%s\"): fd = %d", path.c_str(), fd.GetValue()); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp index c81b3e9e45..d0f80fcc90 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp index 2065564d4a..ca0d633251 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp index 95573ba690..0914d8e39c 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp index 2a88871912..af657d37de 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp index 66342bc9fd..5bbb02e92e 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -95,7 +95,7 @@ int sys_lwcond_signal(mem_ptr_t lwcond) if (Emu.IsStopped()) { - ConLog.Warning("sys_lwcond_signal(id=%d) aborted", (u32)lwcond->lwcond_queue); + LOGF_WARNING(HLE, "sys_lwcond_signal(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } } @@ -126,7 +126,7 @@ int sys_lwcond_signal_all(mem_ptr_t lwcond) if (Emu.IsStopped()) { - ConLog.Warning("sys_lwcond_signal_all(id=%d) aborted", (u32)lwcond->lwcond_queue); + LOGF_WARNING(HLE, "sys_lwcond_signal_all(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } } @@ -165,7 +165,7 @@ int sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id) if (Emu.IsStopped()) { - ConLog.Warning("sys_lwcond_signal_to(id=%d, to=%d) aborted", (u32)lwcond->lwcond_queue, ppu_thread_id); + LOGF_WARNING(HLE, "sys_lwcond_signal_to(id=%d, to=%d) aborted", (u32)lwcond->lwcond_queue, ppu_thread_id); return CELL_OK; } } @@ -260,6 +260,6 @@ int sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) } abort: - ConLog.Warning("sys_lwcond_wait(id=%d) aborted", (u32)lwcond->lwcond_queue); + LOGF_WARNING(HLE, "sys_lwcond_wait(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp index c1650a6efa..8af57345a6 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -169,7 +169,7 @@ u32 SleepQueue::pop_prio() // SYS_SYNC_PRIORITY u32 SleepQueue::pop_prio_inherit() // (TODO) { - ConLog.Error("TODO: SleepQueue::pop_prio_inherit()"); + LOG_ERROR(HLE, "TODO: SleepQueue::pop_prio_inherit()"); Emu.Pause(); return 0; } @@ -251,7 +251,7 @@ int sys_lwmutex_t::trylock(be_t tid) { if (Emu.IsStopped()) { - ConLog.Warning("(hack) sys_lwmutex_t::(try)lock aborted (waiting for recursive attribute, attr=0x%x)", (u32)attribute); + LOGF_WARNING(HLE, "(hack) sys_lwmutex_t::(try)lock aborted (waiting for recursive attribute, attr=0x%x)", (u32)attribute); return CELL_ESRCH; } Sleep(1); @@ -340,7 +340,7 @@ int sys_lwmutex_t::lock(be_t tid, u64 timeout) case SMR_TIMEOUT: sq->invalidate(tid); return CELL_ETIMEDOUT; case SMR_ABORT: - if (Emu.IsStopped()) ConLog.Warning("sys_lwmutex_t::lock(sq=%d) aborted", (u32)sleep_queue); + if (Emu.IsStopped()) LOGF_WARNING(HLE, "sys_lwmutex_t::lock(sq=%d) aborted", (u32)sleep_queue); default: sq->invalidate(tid); return CELL_EINVAL; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp index c1aa7e562e..b82ab31570 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp index bf409e6748..374b3dc3cc 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp index c176dcc8fa..635f3cbaa0 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h index 0c30fe3e66..0345d1ee97 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h @@ -39,14 +39,14 @@ struct Mutex { if (u32 owner = m_mutex.GetOwner()) { - ConLog.Write("Mutex(%d) was owned by thread %d (recursive=%d)", id, owner, recursive); + LOGF_NOTICE(HLE, "Mutex(%d) was owned by thread %d (recursive=%d)", id, owner, recursive); } if (!m_queue.m_mutex.try_lock()) return; for (u32 i = 0; i < m_queue.list.size(); i++) { - if (u32 owner = m_queue.list[i]) ConLog.Write("Mutex(%d) was waited by thread %d", id, owner); + if (u32 owner = m_queue.list[i]) LOGF_NOTICE(HLE, "Mutex(%d) was waited by thread %d", id, owner); } m_queue.m_mutex.unlock(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp index 5e37196bd8..f30705c430 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -32,7 +32,7 @@ void sys_ppu_thread_exit(u64 errorcode) if (thr.owned_mutexes) { - ConLog.Error("Owned mutexes found (%d)", thr.owned_mutexes); + LOGF_ERROR(PPU, "Owned mutexes found (%d)", thr.owned_mutexes); thr.owned_mutexes = 0; } @@ -58,7 +58,7 @@ int sys_ppu_thread_join(u64 thread_id, mem64_t vptr) { if (Emu.IsStopped()) { - ConLog.Warning("sys_ppu_thread_join(%d) aborted", thread_id); + LOGF_WARNING(PPU, "sys_ppu_thread_join(%d) aborted", thread_id); return CELL_OK; } Sleep(1); @@ -204,7 +204,7 @@ int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 s new_thread.m_is_interrupt = is_interrupt; new_thread.SetName(threadname); - ConLog.Write("*** New PPU Thread [%s] (flags=0x%llx, entry=0x%x): id = %d", new_thread.GetName().c_str(), flags, entry, new_thread.GetId()); + LOGF_NOTICE(PPU, "*** New PPU Thread [%s] (flags=0x%llx, entry=0x%x): id = %d", new_thread.GetName().c_str(), flags, entry, new_thread.GetId()); if (!is_interrupt) { diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp index 962d67fb37..40075871ad 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp index 79467d519e..639c7efa84 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp index d0bf322846..007bd5b8f8 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" @@ -24,7 +24,7 @@ int sys_process_exit(s32 errorcode) { sc_p.Warning("sys_process_exit(%d)", errorcode); Emu.Pause(); // Emu.Stop() does crash - ConLog.Success("Process finished"); + LOG_SUCCESS(HLE, "Process finished"); if (Ini.HLEExitOnStop.GetValue()) { diff --git a/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp b/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp index 1fce0dc7d0..d36e96f846 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp index 88922f07e7..4db7ed85b5 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -69,7 +69,7 @@ int sys_rwlock_rlock(u32 rw_lock_id, u64 timeout) { if (Emu.IsStopped()) { - ConLog.Warning("sys_rwlock_rlock(rw_lock_id=%d, ...) aborted", rw_lock_id); + LOGF_WARNING(HLE, "sys_rwlock_rlock(rw_lock_id=%d, ...) aborted", rw_lock_id); return CELL_ETIMEDOUT; } Sleep(1); @@ -132,7 +132,7 @@ int sys_rwlock_wlock(u32 rw_lock_id, u64 timeout) { if (Emu.IsStopped()) { - ConLog.Warning("sys_rwlock_wlock(rw_lock_id=%d, ...) aborted", rw_lock_id); + LOGF_WARNING(HLE, "sys_rwlock_wlock(rw_lock_id=%d, ...) aborted", rw_lock_id); return CELL_ETIMEDOUT; } Sleep(1); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp index c734990b63..9f876ccd42 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -346,7 +346,7 @@ int sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) } if (Emu.IsStopped()) { - ConLog.Warning("sys_spu_thread_group_join(id=%d, ...) aborted", id); + LOGF_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d, ...) aborted", id); return CELL_OK; } Sleep(1); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp index b256e1c380..3c7e85032a 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" @@ -39,7 +39,7 @@ int sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i } sem = sys_sem.GetNewId(new Semaphore(initial_count, max_count, attr->protocol, attr->name_u64)); - ConLog.Write("*** semaphore created [%s] (protocol=0x%x): id = %d", + LOGF_NOTICE(HLE, "*** semaphore created [%s] (protocol=0x%x): id = %d", std::string(attr->name, 8).c_str(), (u32)attr->protocol, sem.GetValue()); return CELL_OK; @@ -91,7 +91,7 @@ int sys_semaphore_wait(u32 sem_id, u64 timeout) { if (Emu.IsStopped()) { - ConLog.Warning("sys_semaphore_wait(%d) aborted", sem_id); + LOGF_WARNING(HLE, "sys_semaphore_wait(%d) aborted", sem_id); return CELL_OK; } @@ -165,7 +165,7 @@ int sys_semaphore_post(u32 sem_id, int count) { if (Emu.IsStopped()) { - ConLog.Warning("sys_semaphore_post(%d) aborted", sem_id); + LOGF_WARNING(HLE, "sys_semaphore_post(%d) aborted", sem_id); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp index c7a9bfd8aa..ba9b50239f 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -22,8 +22,8 @@ void sys_spinlock_lock(mem_ptr_t lock) be_t tid = GetCurrentPPUThread().GetId(); switch (lock->mutex.lock(tid)) { - case SMR_ABORT: ConLog.Warning("sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); break; - case SMR_DEADLOCK: ConLog.Error("sys_spinlock_lock(0x%x) reached deadlock", lock.GetAddr()); break; // ??? + case SMR_ABORT: LOGF_WARNING(HLE, "sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); break; + case SMR_DEADLOCK: LOGF_ERROR(HLE, "sys_spinlock_lock(0x%x) reached deadlock", lock.GetAddr()); break; // ??? default: break; } } @@ -36,8 +36,8 @@ int sys_spinlock_trylock(mem_ptr_t lock) switch (lock->mutex.trylock(tid)) { case SMR_FAILED: return CELL_EBUSY; - case SMR_ABORT: ConLog.Warning("sys_spinlock_trylock(0x%x) aborted", lock.GetAddr()); break; - case SMR_DEADLOCK: ConLog.Error("sys_spinlock_trylock(0x%x) reached deadlock", lock.GetAddr()); break; + case SMR_ABORT: LOGF_WARNING(HLE, "sys_spinlock_trylock(0x%x) aborted", lock.GetAddr()); break; + case SMR_DEADLOCK: LOGF_ERROR(HLE, "sys_spinlock_trylock(0x%x) reached deadlock", lock.GetAddr()); break; default: break; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp b/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp index 634075de82..b043c54529 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp @@ -1,12 +1,13 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" int sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) { - ConLog.Warning("sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); + //we currently do not support reading from the Console + LOGF_WARNING(HLE, "sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); Memory.Write32NN(preadlen_addr, len); Emu.Pause(); @@ -18,11 +19,16 @@ int sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) if(ch > 15 || (s32)len <= 0) return CELL_EINVAL; if(!Memory.IsGoodAddr(buf_addr)) return CELL_EFAULT; - if (!Ini.HLEHideDebugConsole.GetValue()) + //ch 0 seems to be stdout and ch 1 stderr + if (ch == 1) { - Emu.GetDbgCon().Write(ch, Memory.ReadString(buf_addr, len)); + LOG_ERROR(TTY, Memory.ReadString(buf_addr, len)); } - + else + { + LOG_NOTICE(TTY, Memory.ReadString(buf_addr, len)); + } + if(!Memory.IsGoodAddr(pwritelen_addr)) return CELL_EFAULT; Memory.Write32(pwritelen_addr, len); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp index 12c4d3881d..5b14c233b3 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp @@ -6,7 +6,7 @@ * GNU LGPL 2.1 license * */ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp index 9d2e410fa3..3a212ad74d 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "SC_Timer.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp index 6361e880ca..190e3b1d7d 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp b/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp index c761abf6e1..d7c9f58d40 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index e599ceb217..68bba82a55 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Ini.h" @@ -31,7 +31,6 @@ ModuleInitializer::ModuleInitializer() Emulator::Emulator() : m_status(Stopped) , m_mode(DisAsm) - , m_dbg_console(nullptr) , m_rsx_callback(0) , m_ppu_callback_thr(0) , m_event_manager(new EventManager()) @@ -154,17 +153,17 @@ void Emulator::Load() m_path = elf_path; } - ConLog.Write("Loading '%s'...", m_path.c_str()); + LOGF_NOTICE(LOADER, "Loading '%s'...", m_path.c_str()); GetInfo().Reset(); m_vfs.Init(m_path); - ConLog.SkipLn(); - ConLog.Write("Mount info:"); + LOG_NOTICE(LOADER, " "); //used to be skip_line + LOG_NOTICE(LOADER, "Mount info:"); for(uint i=0; i %s", m_vfs.m_devices[i]->GetPs3Path().c_str(), m_vfs.m_devices[i]->GetLocalPath().c_str()); + LOGF_NOTICE(LOADER, "%s -> %s", m_vfs.m_devices[i]->GetPs3Path().c_str(), m_vfs.m_devices[i]->GetLocalPath().c_str()); } - ConLog.SkipLn(); + LOG_NOTICE(LOADER, " ");//used to be skip_line if(m_elf_path.empty()) { @@ -175,7 +174,7 @@ void Emulator::Load() if(!f.IsOpened()) { - ConLog.Error("Elf not found! (%s - %s)", m_path.c_str(), m_elf_path.c_str()); + LOGF_ERROR(LOADER, "Elf not found! (%s - %s)", m_path.c_str(), m_elf_path.c_str()); return; } @@ -208,12 +207,12 @@ void Emulator::Load() } catch(const std::string& e) { - ConLog.Error(e); + LOG_ERROR(LOADER, e); is_error = true; } catch(...) { - ConLog.Error("Unhandled loader error."); + LOG_ERROR(LOADER, "Unhandled loader error."); is_error = true; } @@ -228,7 +227,7 @@ void Emulator::Load() case MACHINE_ARM: thread_type = CPU_THREAD_ARMv7; break; default: - ConLog.Error("Unimplemented thread type for machine."); + LOG_ERROR(LOADER, "Unimplemented thread type for machine."); is_error = true; break; } @@ -248,8 +247,8 @@ void Emulator::Load() switch(l.GetMachine()) { case MACHINE_SPU: - ConLog.Write("offset = 0x%llx", Memory.MainMem.GetStartAddr()); - ConLog.Write("max addr = 0x%x", l.GetMaxAddr()); + LOGF_NOTICE(LOADER, "offset = 0x%llx", Memory.MainMem.GetStartAddr()); + LOGF_NOTICE(LOADER, "max addr = 0x%x", l.GetMaxAddr()); thread.SetOffset(Memory.MainMem.GetStartAddr()); Memory.MainMem.AllocFixed(Memory.MainMem.GetStartAddr() + l.GetMaxAddr(), 0xFFFFED - l.GetMaxAddr()); thread.SetEntry(l.GetEntry() - Memory.MainMem.GetStartAddr()); @@ -290,16 +289,6 @@ void Emulator::Load() break; } - if(!m_dbg_console) - { - m_dbg_console = new DbgConsole(); - } - else - { - GetDbgCon().Close(); - GetDbgCon().Clear(); - } - GetGSManager().Init(); GetCallbackManager().Init(); GetAudioManager().Init(); @@ -313,6 +302,7 @@ void Emulator::Load() void Emulator::Run() { + if(!IsReady()) { Load(); @@ -373,19 +363,19 @@ void Emulator::Stop() SendDbgCommand(DID_STOP_EMU); m_status = Stopped; - u32 uncounted = 0 + (u32)(bool)m_dbg_console; + u32 uncounted = 0; u32 counter = 0; while (true) { if (g_thread_count <= uncounted) { - ConLog.Write("All threads stopped..."); + LOG_NOTICE(HLE, "All threads stopped..."); break; } Sleep(1); if (counter++ > 3000) { - ConLog.Error("%d threads not stopped (timeout)", (u32)(g_thread_count - uncounted)); + LOGF_ERROR(HLE, "%d threads not stopped (timeout)", (u32)(g_thread_count - uncounted)); break; } } @@ -458,7 +448,7 @@ void Emulator::LoadPoints(const std::string& path) if(version != bpdb_version || (sizeof(u16) + break_count * sizeof(u64) + sizeof(u32) + marked_count * sizeof(u64) + sizeof(u32)) != length) { - ConLog.Error("'%s' is broken", path.c_str()); + LOGF_ERROR(LOADER, "'%s' is broken", path.c_str()); return; } diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index ad43f078ac..8f99e5b284 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -83,7 +83,6 @@ class Emulator KeyboardManager m_keyboard_manager; MouseManager m_mouse_manager; IdManager m_id_manager; - DbgConsole* m_dbg_console; GSManager m_gs_manager; AudioManager m_audio_manager; CallbackManager m_callback_manager; @@ -112,7 +111,6 @@ public: KeyboardManager& GetKeyboardManager() { return m_keyboard_manager; } MouseManager& GetMouseManager() { return m_mouse_manager; } IdManager& GetIdManager() { return m_id_manager; } - DbgConsole& GetDbgCon() { return *m_dbg_console; } GSManager& GetGSManager() { return m_gs_manager; } AudioManager& GetAudioManager() { return m_audio_manager; } CallbackManager& GetCallbackManager() { return m_callback_manager; } diff --git a/rpcs3/Gui/CompilerELF.cpp b/rpcs3/Gui/CompilerELF.cpp index cbf283df6e..b2141c4794 100644 --- a/rpcs3/Gui/CompilerELF.cpp +++ b/rpcs3/Gui/CompilerELF.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "CompilerELF.h" diff --git a/rpcs3/Gui/ConLog.cpp b/rpcs3/Gui/ConLog.cpp index 210600bd4a..e62927bef6 100644 --- a/rpcs3/Gui/ConLog.cpp +++ b/rpcs3/Gui/ConLog.cpp @@ -8,169 +8,119 @@ #include "Ini.h" #include "Utilities/Thread.h" #include "Utilities/StrFmt.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" +#include "Utilities/Log.h" #include "Gui/ConLogFrame.h" #include "Utilities/BEType.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -LogWriter ConLog; -class LogFrame; -extern LogFrame* ConLogFrame; +wxDEFINE_EVENT(EVT_LOG_COMMAND, wxCommandEvent); -std::mutex g_cs_conlog; +//amount of memory in bytes used to buffer log messages for the gui +const int BUFFER_MAX_SIZE = 1024 * 1024; -const uint max_item_count = 500; -const uint buffer_size = 1024 * 64; +//amount of characters in the TextCtrl text-buffer for the emulation log +const int GUI_BUFFER_MAX_SIZE = 1024 * 1024; -static const std::string g_log_colors[] = +struct wxWriter : Log::LogListener { - "Black", "Green", "White", "Yellow", "Red", -}; + wxTextCtrl *m_log; + wxTextCtrl *m_tty; + wxTextAttr m_color_white; + wxTextAttr m_color_yellow; + wxTextAttr m_color_red; + MTRingbuffer messages; + std::atomic newLog; + bool inited; - -struct LogPacket -{ - const std::string m_prefix; - const std::string m_text; - const std::string m_colour; - - LogPacket(const std::string& prefix, const std::string& text, const std::string& colour) - : m_prefix(prefix) - , m_text(text) - , m_colour(colour) - { - - } -}; - -struct _LogBuffer : public MTPacketBuffer -{ - _LogBuffer() : MTPacketBuffer(buffer_size) + wxWriter(wxTextCtrl* p_log, wxTextCtrl* p_tty) : + m_color_white(wxColour(255, 255, 255)) , + m_color_yellow(wxColour(255, 255, 0)) , + m_color_red(wxColour(255, 0, 0)) , + m_log(p_log), + m_tty(p_tty), + newLog(false), + inited(false) { + m_log->Bind(EVT_LOG_COMMAND, [this](wxCommandEvent &evt){this->write(evt);}); } - void _push(const LogPacket& data) + wxWriter(wxWriter &other) = delete; + + //read messages from buffer and write them to the screen + void write(wxCommandEvent &) { - const u32 sprefix = data.m_prefix.length(); - const u32 stext = data.m_text.length(); - const u32 scolour = data.m_colour.length(); - - m_buffer.resize(m_buffer.size() + - sizeof(u32) + sprefix + - sizeof(u32) + stext + - sizeof(u32) + scolour); - - u32 c_put = m_put; - - memcpy(&m_buffer[c_put], &sprefix, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_prefix.c_str(), sprefix); - c_put += sprefix; - - memcpy(&m_buffer[c_put], &stext, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_text.c_str(), stext); - c_put += stext; - - memcpy(&m_buffer[c_put], &scolour, sizeof(u32)); - c_put += sizeof(u32); - memcpy(&m_buffer[c_put], data.m_colour.c_str(), scolour); - c_put += scolour; - - m_put = c_put; - CheckBusy(); - } - - LogPacket _pop() - { - u32 c_get = m_get; - - const u32& sprefix = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string prefix((const char*)&m_buffer[c_get], sprefix); - c_get += sprefix; - - const u32& stext = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string text((const char*)&m_buffer[c_get], stext); - c_get += stext; - - const u32& scolour = *(u32*)&m_buffer[c_get]; - c_get += sizeof(u32); - const std::string colour((const char*)&m_buffer[c_get], scolour); - c_get += scolour; - - m_get = c_get; - if (!HasNewPacket()) Flush(); - - return LogPacket(prefix, text, colour); - } -}; - -_LogBuffer LogBuffer; - -LogWriter::LogWriter() -{ - if (!m_logfile.Open(_PRGNAME_ ".log", rFile::write)) - { - rMessageBox("Can't create log file! (" _PRGNAME_ ".log)", rMessageBoxCaptionStr, rICON_ERROR); - } -} - -void LogWriter::WriteToLog(const std::string& prefix, const std::string& value, u8 lvl/*, wxColour bgcolour*/) -{ - std::string new_prefix = prefix; - if (!prefix.empty()) - { - if (NamedThreadBase* thr = GetCurrentNamedThread()) + if (messages.size() > 0) { - new_prefix += " : " + thr->GetThreadName(); - } - } + messages.lockGet(); + size_t size = messages.size(); + std::vector local_messages(size); + messages.popN(&local_messages.front(), size); + messages.unlockGet(); - if (m_logfile.IsOpened() && !new_prefix.empty()) - m_logfile.Write("[" + new_prefix + "]: " + value + "\n"); - - if (!ConLogFrame || Ini.HLELogLvl.GetValue() == 4 || (lvl != 0 && lvl <= Ini.HLELogLvl.GetValue())) - return; - - std::lock_guard lock(g_cs_conlog); - - // TODO: Use ThreadBase instead, track main thread id - if (rThread::IsMain()) - { - while (LogBuffer.IsBusy()) - { - // need extra break condition? - rYieldIfNeeded(); - } - } - else - { - while (LogBuffer.IsBusy()) - { - if (Emu.IsStopped()) + u32 cursor = 0; + u32 removed = 0; + while (cursor < local_messages.size()) { - break; + Log::LogMessage msg = Log::LogMessage::deserialize(local_messages.data() + cursor, &removed); + cursor += removed; + if (removed <= 0) + { + break; + } + wxTextCtrl *llogcon = (msg.mType == Log::TTY) ? m_tty : m_log; + if (llogcon) + { + switch (msg.mServerity) + { + case Log::Notice: + llogcon->SetDefaultStyle(m_color_white); + break; + case Log::Warning: + llogcon->SetDefaultStyle(m_color_yellow); + break; + case Log::Error: + llogcon->SetDefaultStyle(m_color_red); + break; + default: + break; + } + llogcon->AppendText(wxString(msg.mText)); + } + } + if (m_log->GetLastPosition() > GUI_BUFFER_MAX_SIZE) + { + m_log->Remove(0, m_log->GetLastPosition() - (GUI_BUFFER_MAX_SIZE/2)); } - Sleep(1); } + newLog = false; } - //if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush(); + //put message into the log buffer + void log(Log::LogMessage msg) + { + u8 logLevel = Ini.HLELogLvl.GetValue(); + if (msg.mType != Log::TTY && logLevel != 0) + { + if (logLevel > static_cast(msg.mServerity)) + { + return; + } + } - LogBuffer.Push(LogPacket(new_prefix, value, g_log_colors[lvl])); -} - - -void LogWriter::SkipLn() -{ - WriteToLog("", "", 0); -} - -LogFrame* ConLogFrame; + size_t size = msg.size(); + std::vector temp_buffer(size); + msg.serialize(temp_buffer.data()); + messages.pushRange(temp_buffer.begin(), temp_buffer.end()); + if (!newLog.load(std::memory_order_relaxed)) + { + newLog = true; + m_log->GetEventHandler()->QueueEvent(new wxCommandEvent(EVT_LOG_COMMAND)); + } + } +}; BEGIN_EVENT_TABLE(LogFrame, wxPanel) EVT_CLOSE(LogFrame::OnQuit) @@ -178,79 +128,52 @@ END_EVENT_TABLE() LogFrame::LogFrame(wxWindow* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(600, 500)) -, ThreadBase("LogThread") -, m_log(*new wxListView(this)) +, m_tabs(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_TOP | wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS) +, m_log(new wxTextCtrl(&m_tabs, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH2)) +, m_tty(new wxTextCtrl(&m_tabs, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH2)) { - m_log.InsertColumn(0, "Thread"); - m_log.InsertColumn(1, "Log"); - m_log.SetBackgroundColour(wxColour("Black")); + listener.reset(new wxWriter(m_log,m_tty)); + m_tty->SetBackgroundColour(wxColour("Black")); + m_log->SetBackgroundColour(wxColour("Black")); + m_tty->SetFont(wxFont(8, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL)); + m_tabs.AddPage(m_log, "Log"); + m_tabs.AddPage(m_tty, "TTY"); + + Log::LogManager::getInstance().getChannel(Log::GENERAL).addListener(listener); + Log::LogManager::getInstance().getChannel(Log::LOADER).addListener(listener); + Log::LogManager::getInstance().getChannel(Log::MEMORY).addListener(listener); + Log::LogManager::getInstance().getChannel(Log::RSX).addListener(listener); + Log::LogManager::getInstance().getChannel(Log::HLE).addListener(listener); + Log::LogManager::getInstance().getChannel(Log::PPU).addListener(listener); + Log::LogManager::getInstance().getChannel(Log::SPU).addListener(listener); + Log::LogManager::getInstance().getChannel(Log::TTY).addListener(listener); wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); - s_main->Add(&m_log, 1, wxEXPAND); + s_main->Add(&m_tabs, 1, wxEXPAND); SetSizer(s_main); Layout(); Show(); - ThreadBase::Start(); } LogFrame::~LogFrame() { + Log::LogManager::getInstance().getChannel(Log::GENERAL).removeListener(listener); + Log::LogManager::getInstance().getChannel(Log::LOADER).removeListener(listener); + Log::LogManager::getInstance().getChannel(Log::MEMORY).removeListener(listener); + Log::LogManager::getInstance().getChannel(Log::RSX).removeListener(listener); + Log::LogManager::getInstance().getChannel(Log::HLE).removeListener(listener); + Log::LogManager::getInstance().getChannel(Log::PPU).removeListener(listener); + Log::LogManager::getInstance().getChannel(Log::SPU).removeListener(listener); + Log::LogManager::getInstance().getChannel(Log::TTY).removeListener(listener); } bool LogFrame::Close(bool force) { - Stop(false); - ConLogFrame = nullptr; return wxWindowBase::Close(force); } -void LogFrame::Task() -{ - while (!TestDestroy()) - { - if (!LogBuffer.HasNewPacket()) - { - Sleep(1); - continue; - } - else - { - wxThread::Yield(); - } - - const LogPacket item = LogBuffer.Pop(); - - wxListView& m_log = this->m_log; //makes m_log capturable by the lambda - //queue adding the log message to the gui element in the main thread - wxTheApp->GetTopWindow()->GetEventHandler()->CallAfter([item, &m_log]() - { - while (m_log.GetItemCount() > max_item_count) - { - m_log.DeleteItem(0); - wxThread::Yield(); - } - - const int cur_item = m_log.GetItemCount(); - - m_log.InsertItem(cur_item, fmt::FromUTF8(item.m_prefix)); - m_log.SetItem(cur_item, 1, fmt::FromUTF8(item.m_text)); - m_log.SetItemTextColour(cur_item, fmt::FromUTF8(item.m_colour)); - m_log.SetColumnWidth(0, -1); - m_log.SetColumnWidth(1, -1); - }); - -#ifdef _WIN32 - ::SendMessage((HWND)m_log.GetHWND(), WM_VSCROLL, SB_BOTTOM, 0); -#endif - } - - LogBuffer.Flush(); -} - void LogFrame::OnQuit(wxCloseEvent& event) { - Stop(false); - ConLogFrame = nullptr; event.Skip(); } \ No newline at end of file diff --git a/rpcs3/Gui/ConLogFrame.h b/rpcs3/Gui/ConLogFrame.h index 2919a5cbae..df5e4d25ff 100644 --- a/rpcs3/Gui/ConLogFrame.h +++ b/rpcs3/Gui/ConLogFrame.h @@ -1,25 +1,26 @@ #pragma once -#include "Emu/ConLog.h" +#include "Utilities/Log.h" class LogFrame : public wxPanel - , public ThreadBase { - wxListView& m_log; + std::shared_ptr listener; + wxAuiNotebook m_tabs; + wxTextCtrl *m_log; + wxTextCtrl *m_tty; public: LogFrame(wxWindow* parent); + LogFrame(LogFrame &other) = delete; ~LogFrame(); bool Close(bool force = false); private: - virtual void Task(); + virtual void Task(){}; void OnQuit(wxCloseEvent& event); DECLARE_EVENT_TABLE(); -}; - -extern LogFrame* ConLogFrame; \ No newline at end of file +}; \ No newline at end of file diff --git a/rpcs3/Gui/Debugger.cpp b/rpcs3/Gui/Debugger.cpp index 8f85cf4311..904ba7ad45 100644 --- a/rpcs3/Gui/Debugger.cpp +++ b/rpcs3/Gui/Debugger.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" #include -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index 993fa74091..5dca67bbd8 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/lv2/SC_Lwmutex.h" @@ -152,7 +152,7 @@ public: virtual void Task() { - ConLog.Write("Start dump in thread %d!", (int)id); + LOGF_NOTICE(HLE, "Start dump in thread %d!", (int)id); const u32 max_value = prog_dial->GetMaxValue(id); const u32 shdr_count = ElfType64 ? shdr_arr_64->size() : shdr_arr_32->size(); @@ -180,14 +180,14 @@ public: } } - ConLog.Write("Finish dump in thread %d!", (int)id); + LOGF_NOTICE(HLE, "Finish dump in thread %d!", (int)id); *done = true; } void OnExit() { - ConLog.Write("CleanUp dump thread (%d)!", (int)id); + LOGF_NOTICE(HLE, "CleanUp dump thread (%d)!", (int)id); safe_delete(decoder); } }; @@ -223,7 +223,7 @@ struct WaitDumperThread : public ThreadBase while(done[i] == false) Sleep(1); } - ConLog.Write("Saving dump is started!"); + LOGF_NOTICE(HLE, "Saving dump is started!"); const uint length_for_core = prog_dial.GetMaxValue(0); const uint length = length_for_core * cores; prog_dial.Close(); @@ -266,7 +266,7 @@ struct WaitDumperThread : public ThreadBase fd.Write(wxString::Format("End of section header %d\n\n", sh)); } - ConLog.Write("CleanUp dump saving!"); + LOGF_NOTICE(HLE, "CleanUp dump saving!"); for(uint c=0; c name_arr; @@ -338,7 +338,7 @@ void DisAsmFrame::Dump(wxCommandEvent& WXUNUSED(event)) if(l_elf32->shdr_arr.size() <= 0) return; break; - default: ConLog.Error("Corrupted ELF!"); return; + default: LOGF_ERROR(HLE, "Corrupted ELF!"); return; } PPCDisAsm* disasm; diff --git a/rpcs3/Gui/FnIdGenerator.cpp b/rpcs3/Gui/FnIdGenerator.cpp index 927f178eaf..810315f0cd 100644 --- a/rpcs3/Gui/FnIdGenerator.cpp +++ b/rpcs3/Gui/FnIdGenerator.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "FnIdGenerator.h" @@ -82,7 +82,7 @@ void FnIdGenerator::PrintId() m_func_name.push_back(func_name); m_func_id.push_back(result); - ConLog.Write("Function: %s, Id: 0x%08x ", func_name.c_str(), result); + LOGF_NOTICE(HLE, "Function: %s, Id: 0x%08x ", func_name.c_str(), result); UpdateInformation(); } @@ -99,4 +99,4 @@ void FnIdGenerator::UpdateInformation() m_list->SetItem(i, 0, m_func_name[i]); m_list->SetItem(i, 1, wxString::Format("0x%08x", re(m_func_id[i]))); } -} \ No newline at end of file +} diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 0f9732b912..8be1f47ba6 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/FS/vfsDir.h" @@ -39,7 +39,7 @@ public: virtual wxDirTraverseResult OnFile(const wxString& filename) { if (!wxRemoveFile(filename)){ - ConLog.Error("Couldn't delete File: %s", fmt::ToUTF8(filename).c_str()); + LOGF_ERROR(HLE, "Couldn't delete File: %s", fmt::ToUTF8(filename).c_str()); } return wxDIR_CONTINUE; } @@ -103,7 +103,7 @@ void GameViewer::OnColClick(wxListEvent& event) void GameViewer::LoadGames() { vfsDir dir(m_path); - ConLog.Write("path: %s", m_path.c_str()); + LOGF_NOTICE(HLE, "path: %s", m_path.c_str()); if(!dir.IsOpened()) return; m_games.clear(); @@ -207,7 +207,7 @@ void GameViewer::DClick(wxListEvent& event) std::string local_path; if(Emu.GetVFS().GetDevice(path, local_path) && !Emu.BootGame(local_path)) { - ConLog.Error("Boot error: elf not found! [%s]", path.c_str()); + LOGF_ERROR(HLE, "Boot error: elf not found! [%s]", path.c_str()); return; } Emu.Run(); diff --git a/rpcs3/Gui/GameViewer.h b/rpcs3/Gui/GameViewer.h index 99ecd8fe95..8a240243d2 100644 --- a/rpcs3/Gui/GameViewer.h +++ b/rpcs3/Gui/GameViewer.h @@ -134,7 +134,7 @@ public: if(!col) { - ConLog.Error("Columns loaded with error!"); + LOGF_ERROR(HLE, "Columns loaded with error!"); return; } @@ -191,7 +191,7 @@ public: { if(m_columns[c1].pos == m_columns[c2].pos) { - ConLog.Error("Columns loaded with error!"); + LOGF_ERROR(HLE, "Columns loaded with error!"); Init(); return; } @@ -210,7 +210,7 @@ public: if(!ishas) { - ConLog.Error("Columns loaded with error!"); + LOGF_ERROR(HLE, "Columns loaded with error!"); Init(); return; } diff --git a/rpcs3/Gui/InterpreterDisAsm.cpp b/rpcs3/Gui/InterpreterDisAsm.cpp index 75d1016bc7..170fe8a915 100644 --- a/rpcs3/Gui/InterpreterDisAsm.cpp +++ b/rpcs3/Gui/InterpreterDisAsm.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 65f026e024..0da12e6462 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Gui/ConLogFrame.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" @@ -109,10 +109,10 @@ MainFrame::MainFrame() // Panels m_game_viewer = new GameViewer(this); m_debugger_frame = new DebuggerPanel(this); - ConLogFrame = new LogFrame(this); + m_log_frame = new LogFrame(this); AddPane(m_game_viewer, "Game List", wxAUI_DOCK_CENTRE); - AddPane(ConLogFrame, "Log", wxAUI_DOCK_BOTTOM); + AddPane(m_log_frame, "Log", wxAUI_DOCK_BOTTOM); AddPane(m_debugger_frame, "Debugger", wxAUI_DOCK_RIGHT); // Events @@ -192,7 +192,7 @@ void MainFrame::BootGame(wxCommandEvent& WXUNUSED(event)) if(Emu.BootGame(ctrl.GetPath().ToStdString())) { - ConLog.Success("Game: boot done."); + LOG_SUCCESS(HLE, "Game: boot done."); if (Ini.HLEAlwaysStart.GetValue() && Emu.IsReady()) { @@ -201,7 +201,7 @@ void MainFrame::BootGame(wxCommandEvent& WXUNUSED(event)) } else { - ConLog.Error("PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); + LOGF_ERROR(HLE, "PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); } } @@ -227,11 +227,11 @@ void MainFrame::BootGameAndRun(wxCommandEvent& WXUNUSED(event)) if (Emu.BootGame(ctrl.GetPath().ToStdString())) { - ConLog.Success("Game: boot done."); + LOG_SUCCESS(HLE, "Game: boot done."); } else { - ConLog.Error("PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); + LOGF_ERROR(HLE, "PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); } if (Emu.IsReady()) @@ -300,14 +300,14 @@ void MainFrame::BootElf(wxCommandEvent& WXUNUSED(event)) return; } - ConLog.Write("(S)ELF: booting..."); + LOG_NOTICE(HLE, "(S)ELF: booting..."); Emu.Stop(); Emu.SetPath(fmt::ToUTF8(ctrl.GetPath())); Emu.Load(); - ConLog.Success("(S)ELF: boot done."); + LOG_SUCCESS(HLE, "(S)ELF: boot done."); } void MainFrame::Pause(wxCommandEvent& WXUNUSED(event)) diff --git a/rpcs3/Gui/MainFrame.h b/rpcs3/Gui/MainFrame.h index a7b0341de1..932087fe30 100644 --- a/rpcs3/Gui/MainFrame.h +++ b/rpcs3/Gui/MainFrame.h @@ -10,6 +10,7 @@ class MainFrame : public FrameBase { DebuggerPanel* m_debugger_frame; GameViewer* m_game_viewer; + LogFrame * m_log_frame; wxAuiManager m_aui_mgr; bool m_sys_menu_opened; diff --git a/rpcs3/Gui/MemoryViewer.cpp b/rpcs3/Gui/MemoryViewer.cpp index 407f9b7407..fad7023fa6 100644 --- a/rpcs3/Gui/MemoryViewer.cpp +++ b/rpcs3/Gui/MemoryViewer.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "MemoryViewer.h" diff --git a/rpcs3/Gui/PADManager.cpp b/rpcs3/Gui/PADManager.cpp index 925400aa04..d36cc70535 100644 --- a/rpcs3/Gui/PADManager.cpp +++ b/rpcs3/Gui/PADManager.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" @@ -289,7 +289,7 @@ void PADManager::OnKeyDown(wxKeyEvent &keyEvent) case id_pad_rstick_up: Ini.PadHandlerRStickUp.SetValue(keyEvent.GetKeyCode()); break; case 0: break; - default: ConLog.Error("Unknown button ID: %d", m_button_id); break; + default: LOGF_ERROR(HLE, "Unknown button ID: %d", m_button_id); break; } UpdateLabel(); @@ -323,7 +323,7 @@ void PADManager::OnButtonClicked(wxCommandEvent &event) case wxID_OK: Ini.Save(); break; case wxID_CANCEL: break; - default: ConLog.Error("Unknown button ID: %d", event.GetId()); break; + default: LOGF_ERROR(HLE, "Unknown button ID: %d", event.GetId()); break; } } @@ -336,7 +336,7 @@ const wxString PADManager::GetKeyName(const u32 keyCode) switch(keyCode) { - case WXK_NONE: ConLog.Error("Invalid key code"); keyName = "ERROR!"; break; + case WXK_NONE: LOG_ERROR(HLE, "Invalid key code"); keyName = "ERROR!"; break; case WXK_BACK: keyName = "BackSpace"; break; case WXK_TAB: keyName = "Tab"; break; case WXK_RETURN: keyName = "Enter"; break; @@ -509,7 +509,7 @@ void PADManager::UpdateTimerLabel(const u32 id) case id_pad_rstick_right: b_right_rstick->SetLabel(static_cast(m_seconds + 47)); break; case id_pad_rstick_up: b_up_rstick->SetLabel(static_cast(m_seconds + 47)); break; - default: ConLog.Error("Unknown button ID: %d", id); break; + default: LOGF_ERROR(HLE, "Unknown button ID: %d", id); break; } } diff --git a/rpcs3/Gui/Plugins.h b/rpcs3/Gui/Plugins.h index b527a5c139..c6900c2d67 100644 --- a/rpcs3/Gui/Plugins.h +++ b/rpcs3/Gui/Plugins.h @@ -314,7 +314,7 @@ struct PluginsManager for(u32 i=0; i @@ -33,7 +33,7 @@ wxDragResult VHDDListDropTarget::OnData(wxCoord x, wxCoord y, wxDragResult def) { int flags = 0; int dst_indx = m_parent->HitTest(wxPoint(x, y), flags); - ConLog.Write("OnData(%d -> %d)", m_src_indx, dst_indx); + LOGF_NOTICE(HLE, "OnData(%d -> %d)", m_src_indx, dst_indx); return def; } @@ -189,7 +189,7 @@ void VHDDExplorer::OnDropFiles(wxDropFilesEvent& event) for(int i=0; i= entry && entry < phdr_arr[i].p_paddr + phdr_arr[i].p_memsz) { entry += phdr_arr[i].p_vaddr; - ConLog.Warning("virtual entry = 0x%x", entry); + LOGF_WARNING(LOADER, "virtual entry = 0x%x", entry); break; } } @@ -173,7 +173,7 @@ bool ELF32Loader::LoadShdrInfo() if(ehdr.e_shstrndx >= shdr_arr.size()) { - ConLog.Warning("LoadShdr32 error: shstrndx too big!"); + LOG_WARNING(LOADER, "LoadShdr32 error: shstrndx too big!"); return true; } @@ -197,9 +197,9 @@ bool ELF32Loader::LoadShdrInfo() bool ELF32Loader::LoadEhdrData(u64 offset) { #ifdef LOADER_DEBUG - ConLog.SkipLn(); + LOG_NOTICE(LOADER, ""); ehdr.Show(); - ConLog.SkipLn(); + LOG_NOTICE(LOADER, ""); #endif return true; } @@ -226,8 +226,9 @@ bool ELF32Loader::LoadPhdrData(u64 _offset) if(phdr_arr[i].p_vaddr != phdr_arr[i].p_paddr) { - ConLog.Warning - ( + LOGF_WARNING + ( + LOADER, "LoadPhdr32 different load addrs: paddr=0x%8.8x, vaddr=0x%8.8x", phdr_arr[i].p_paddr, phdr_arr[i].p_vaddr ); @@ -255,41 +256,41 @@ bool ELF32Loader::LoadPhdrData(u64 _offset) if(note.type != 1) { - ConLog.Error("ELF32: Bad NOTE type (%d)", note.type); + LOGF_ERROR(LOADER, "ELF32: Bad NOTE type (%d)", note.type); break; } if(note.namesz != sizeof(note.name)) { - ConLog.Error("ELF32: Bad NOTE namesz (%d)", note.namesz); + LOGF_ERROR(LOADER, "ELF32: Bad NOTE namesz (%d)", note.namesz); break; } if(note.descsz != sizeof(note.desc) && note.descsz != 32) { - ConLog.Error("ELF32: Bad NOTE descsz (%d)", note.descsz); + LOGF_ERROR(LOADER, "ELF32: Bad NOTE descsz (%d)", note.descsz); break; } //if(note.desc.flags) //{ - // ConLog.Error("ELF32: Bad NOTE flags (0x%x)", note.desc.flags); + // LOG_ERROR(LOADER, "ELF32: Bad NOTE flags (0x%x)", note.desc.flags); // break; //} if(note.descsz == sizeof(note.desc)) { - ConLog.Warning("name = %s", std::string((const char *)note.name, 8).c_str()); - ConLog.Warning("ls_size = %d", note.desc.ls_size); - ConLog.Warning("stack_size = %d", note.desc.stack_size); + LOGF_WARNING(LOADER, "name = %s", std::string((const char *)note.name, 8).c_str()); + LOGF_WARNING(LOADER, "ls_size = %d", note.desc.ls_size); + LOGF_WARNING(LOADER, "stack_size = %d", note.desc.stack_size); } else { - ConLog.Warning("desc = '%s'", std::string(note.desc_text, 32).c_str()); + LOGF_WARNING(LOADER, "desc = '%s'", std::string(note.desc_text, 32).c_str()); } } #ifdef LOADER_DEBUG - ConLog.SkipLn(); + LOG_NOTICE(LOADER, ""); #endif } @@ -303,13 +304,13 @@ bool ELF32Loader::LoadShdrData(u64 offset) Elf32_Shdr& shdr = shdr_arr[i]; #ifdef LOADER_DEBUG - if(i < shdr_name_arr.size()) ConLog.Write("Name: %s", shdr_name_arr[i].c_str()); + if(i < shdr_name_arr.size()) LOGF_NOTICE(LOADER, "Name: %s", shdr_name_arr[i].c_str()); shdr.Show(); - ConLog.SkipLn(); + LOG_NOTICE(LOADER, ""); #endif if((shdr.sh_type == SHT_RELA) || (shdr.sh_type == SHT_REL)) { - ConLog.Error("ELF32 ERROR: Relocation"); + LOG_ERROR(LOADER, "ELF32 ERROR: Relocation"); continue; } if((shdr.sh_flags & SHF_ALLOC) != SHF_ALLOC) continue; diff --git a/rpcs3/Loader/ELF32.h b/rpcs3/Loader/ELF32.h index c69d467585..3ebe601061 100644 --- a/rpcs3/Loader/ELF32.h +++ b/rpcs3/Loader/ELF32.h @@ -26,25 +26,25 @@ struct Elf32_Ehdr void Show() { #ifdef LOADER_DEBUG - ConLog.Write("Magic: %08x", e_magic); - ConLog.Write("Class: %s", "ELF32"); - ConLog.Write("Data: %s", Ehdr_DataToString(e_data).c_str()); - ConLog.Write("Current Version: %d", e_curver); - ConLog.Write("OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); - ConLog.Write("ABI version: %lld", e_abi_ver); - ConLog.Write("Type: %s", Ehdr_TypeToString(e_type).c_str()); - ConLog.Write("Machine: %s", Ehdr_MachineToString(e_machine).c_str()); - ConLog.Write("Version: %d", e_version); - ConLog.Write("Entry point address: 0x%x", e_entry); - ConLog.Write("Program headers offset: 0x%08x", e_phoff); - ConLog.Write("Section headers offset: 0x%08x", e_shoff); - ConLog.Write("Flags: 0x%x", e_flags); - ConLog.Write("Size of this header: %d", e_ehsize); - ConLog.Write("Size of program headers: %d", e_phentsize); - ConLog.Write("Number of program headers: %d", e_phnum); - ConLog.Write("Size of section headers: %d", e_shentsize); - ConLog.Write("Number of section headers: %d", e_shnum); - ConLog.Write("Section header string table index: %d", e_shstrndx); + LOGF_NOTICE(LOADER, "Magic: %08x", e_magic); + LOGF_NOTICE(LOADER, "Class: %s", "ELF32"); + LOGF_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); + LOGF_NOTICE(LOADER, "Current Version: %d", e_curver); + LOGF_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); + LOGF_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); + LOGF_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); + LOGF_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); + LOGF_NOTICE(LOADER, "Version: %d", e_version); + LOGF_NOTICE(LOADER, "Entry point address: 0x%x", e_entry); + LOGF_NOTICE(LOADER, "Program headers offset: 0x%08x", e_phoff); + LOGF_NOTICE(LOADER, "Section headers offset: 0x%08x", e_shoff); + LOGF_NOTICE(LOADER, "Flags: 0x%x", e_flags); + LOGF_NOTICE(LOADER, "Size of this header: %d", e_ehsize); + LOGF_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); + LOGF_NOTICE(LOADER, "Number of program headers: %d", e_phnum); + LOGF_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); + LOGF_NOTICE(LOADER, "Number of section headers: %d", e_shnum); + LOGF_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); #endif } @@ -216,16 +216,16 @@ struct Elf32_Shdr void Show() { #ifdef LOADER_DEBUG - ConLog.Write("Name offset: %x", sh_name); - ConLog.Write("Type: %d", sh_type); - ConLog.Write("Addr: %x", sh_addr); - ConLog.Write("Offset: %x", sh_offset); - ConLog.Write("Size: %x", sh_size); - ConLog.Write("EntSize: %d", sh_entsize); - ConLog.Write("Flags: %x", sh_flags); - ConLog.Write("Link: %x", sh_link); - ConLog.Write("Info: %d", sh_info); - ConLog.Write("Address align: %x", sh_addralign); + LOGF_NOTICE(LOADER, "Name offset: %x", sh_name); + LOGF_NOTICE(LOADER, "Type: %d", sh_type); + LOGF_NOTICE(LOADER, "Addr: %x", sh_addr); + LOGF_NOTICE(LOADER, "Offset: %x", sh_offset); + LOGF_NOTICE(LOADER, "Size: %x", sh_size); + LOGF_NOTICE(LOADER, "EntSize: %d", sh_entsize); + LOGF_NOTICE(LOADER, "Flags: %x", sh_flags); + LOGF_NOTICE(LOADER, "Link: %x", sh_link); + LOGF_NOTICE(LOADER, "Info: %d", sh_info); + LOGF_NOTICE(LOADER, "Address align: %x", sh_addralign); #endif } }; @@ -268,14 +268,14 @@ struct Elf32_Phdr void Show() { #ifdef LOADER_DEBUG - ConLog.Write("Type: %s", Phdr_TypeToString(p_type).c_str()); - ConLog.Write("Offset: 0x%08x", p_offset); - ConLog.Write("Virtual address: 0x%08x", p_vaddr); - ConLog.Write("Physical address: 0x%08x", p_paddr); - ConLog.Write("File size: 0x%08x", p_filesz); - ConLog.Write("Memory size: 0x%08x", p_memsz); - ConLog.Write("Flags: %s", Phdr_FlagsToString(p_flags).c_str()); - ConLog.Write("Align: 0x%x", p_align); + LOGF_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); + LOGF_NOTICE(LOADER, "Offset: 0x%08x", p_offset); + LOGF_NOTICE(LOADER, "Virtual address: 0x%08x", p_vaddr); + LOGF_NOTICE(LOADER, "Physical address: 0x%08x", p_paddr); + LOGF_NOTICE(LOADER, "File size: 0x%08x", p_filesz); + LOGF_NOTICE(LOADER, "Memory size: 0x%08x", p_memsz); + LOGF_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); + LOGF_NOTICE(LOADER, "Align: 0x%x", p_align); #endif } }; diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 63e9852770..818ad13306 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -104,13 +104,13 @@ bool ELF64Loader::LoadEhdrInfo(s64 offset) if(ehdr.e_phentsize != sizeof(Elf64_Phdr)) { - ConLog.Error("elf64 error: e_phentsize[0x%x] != sizeof(Elf64_Phdr)[0x%x]", ehdr.e_phentsize, sizeof(Elf64_Phdr)); + LOGF_ERROR(LOADER, "elf64 error: e_phentsize[0x%x] != sizeof(Elf64_Phdr)[0x%x]", ehdr.e_phentsize, sizeof(Elf64_Phdr)); return false; } if(ehdr.e_shentsize != sizeof(Elf64_Shdr)) { - ConLog.Error("elf64 error: e_shentsize[0x%x] != sizeof(Elf64_Shdr)[0x%x]", ehdr.e_shentsize, sizeof(Elf64_Shdr)); + LOGF_ERROR(LOADER, "elf64 error: e_shentsize[0x%x] != sizeof(Elf64_Shdr)[0x%x]", ehdr.e_shentsize, sizeof(Elf64_Shdr)); return false; } @@ -123,14 +123,14 @@ bool ELF64Loader::LoadEhdrInfo(s64 offset) default: machine = MACHINE_Unknown; - ConLog.Error("Unknown elf64 type: 0x%x", ehdr.e_machine); + LOGF_ERROR(LOADER, "Unknown elf64 type: 0x%x", ehdr.e_machine); return false; } entry = ehdr.GetEntry(); if(entry == 0) { - ConLog.Error("elf64 error: entry is null!"); + LOG_ERROR(LOADER, "elf64 error: entry is null!"); return false; } @@ -143,7 +143,7 @@ bool ELF64Loader::LoadPhdrInfo(s64 offset) if(ehdr.e_phoff == 0 && ehdr.e_phnum) { - ConLog.Error("LoadPhdr64 error: Program header offset is null!"); + LOG_ERROR(LOADER, "LoadPhdr64 error: Program header offset is null!"); return false; } @@ -164,7 +164,7 @@ bool ELF64Loader::LoadShdrInfo(s64 offset) shdr_name_arr.clear(); if(ehdr.e_shoff == 0 && ehdr.e_shnum) { - ConLog.Warning("LoadShdr64 error: Section header offset is null!"); + LOG_NOTICE(LOADER, "LoadShdr64 error: Section header offset is null!"); return true; } @@ -177,7 +177,7 @@ bool ELF64Loader::LoadShdrInfo(s64 offset) if(ehdr.e_shstrndx >= shdr_arr.size()) { - ConLog.Warning("LoadShdr64 error: shstrndx too big!"); + LOG_WARNING(LOADER, "LoadShdr64 error: shstrndx too big!"); return true; } @@ -201,9 +201,9 @@ bool ELF64Loader::LoadShdrInfo(s64 offset) bool ELF64Loader::LoadEhdrData(u64 offset) { #ifdef LOADER_DEBUG - ConLog.SkipLn(); + LOG_NOTICE(LOADER, ""); ehdr.Show(); - ConLog.SkipLn(); + LOG_NOTICE(LOADER, ""); #endif return true; } @@ -226,8 +226,9 @@ bool ELF64Loader::LoadPhdrData(u64 offset) if(phdr_arr[i].p_vaddr != phdr_arr[i].p_paddr) { - ConLog.Warning - ( + LOGF_WARNING + ( + LOADER, "ElfProgram different load addrs: paddr=0x%8.8x, vaddr=0x%8.8x", phdr_arr[i].p_paddr, phdr_arr[i].p_vaddr ); @@ -236,8 +237,8 @@ bool ELF64Loader::LoadPhdrData(u64 offset) if(!Memory.MainMem.IsInMyRange(offset + phdr_arr[i].p_vaddr, phdr_arr[i].p_memsz)) { #ifdef LOADER_DEBUG - ConLog.Warning("Skipping..."); - ConLog.SkipLn(); + LOG_WARNING(LOADER, "Skipping..."); + LOG_WARNING(LOADER, ""); #endif continue; } @@ -270,12 +271,12 @@ bool ELF64Loader::LoadPhdrData(u64 offset) if(re(proc_param.size) < sizeof(sys_process_param)) { - ConLog.Warning("Bad proc param size! [0x%x : 0x%x]", re(proc_param.size), sizeof(sys_process_param)); + LOGF_WARNING(LOADER, "Bad proc param size! [0x%x : 0x%x]", re(proc_param.size), sizeof(sys_process_param)); } if(re(proc_param.magic) != 0x13bcc5f6) { - ConLog.Error("Bad magic! [0x%x]", Memory.Reverse32(proc_param.magic)); + LOGF_ERROR(LOADER, "Bad magic! [0x%x]", Memory.Reverse32(proc_param.magic)); } else { @@ -287,12 +288,12 @@ bool ELF64Loader::LoadPhdrData(u64 offset) info.ppc_seg = re(proc_param.info.ppc_seg); //info.crash_dump_param_addr = re(proc_param.info.crash_dump_param_addr); #ifdef LOADER_DEBUG - ConLog.Write("*** sdk version: 0x%x", info.sdk_version); - ConLog.Write("*** primary prio: %d", info.primary_prio); - ConLog.Write("*** primary stacksize: 0x%x", info.primary_stacksize); - ConLog.Write("*** malloc pagesize: 0x%x", info.malloc_pagesize); - ConLog.Write("*** ppc seg: 0x%x", info.ppc_seg); - //ConLog.Write("*** crash dump param addr: 0x%x", info.crash_dump_param_addr); + LOGF_NOTICE(LOADER, "*** sdk version: 0x%x", info.sdk_version); + LOGF_NOTICE(LOADER, "*** primary prio: %d", info.primary_prio); + LOGF_NOTICE(LOADER, "*** primary stacksize: 0x%x", info.primary_stacksize); + LOGF_NOTICE(LOADER, "*** malloc pagesize: 0x%x", info.malloc_pagesize); + LOGF_NOTICE(LOADER, "*** ppc seg: 0x%x", info.ppc_seg); + //LOGF_NOTICE(LOADER, "*** crash dump param addr: 0x%x", info.crash_dump_param_addr); #endif } } @@ -314,19 +315,19 @@ bool ELF64Loader::LoadPhdrData(u64 offset) proc_prx_param.ver = re(proc_prx_param.ver); #ifdef LOADER_DEBUG - ConLog.Write("*** size: 0x%x", proc_prx_param.size); - ConLog.Write("*** magic: 0x%x", proc_prx_param.magic); - ConLog.Write("*** version: 0x%x", proc_prx_param.version); - ConLog.Write("*** libentstart: 0x%x", proc_prx_param.libentstart); - ConLog.Write("*** libentend: 0x%x", proc_prx_param.libentend); - ConLog.Write("*** libstubstart: 0x%x", proc_prx_param.libstubstart); - ConLog.Write("*** libstubend: 0x%x", proc_prx_param.libstubend); - ConLog.Write("*** ver: 0x%x", proc_prx_param.ver); + LOGF_NOTICE(LOADER, "*** size: 0x%x", proc_prx_param.size); + LOGF_NOTICE(LOADER, "*** magic: 0x%x", proc_prx_param.magic); + LOGF_NOTICE(LOADER, "*** version: 0x%x", proc_prx_param.version); + LOGF_NOTICE(LOADER, "*** libentstart: 0x%x", proc_prx_param.libentstart); + LOGF_NOTICE(LOADER, "*** libentend: 0x%x", proc_prx_param.libentend); + LOGF_NOTICE(LOADER, "*** libstubstart: 0x%x", proc_prx_param.libstubstart); + LOGF_NOTICE(LOADER, "*** libstubend: 0x%x", proc_prx_param.libstubend); + LOGF_NOTICE(LOADER, "*** ver: 0x%x", proc_prx_param.ver); #endif if(proc_prx_param.magic != 0x1b434cec) { - ConLog.Error("Bad magic! (0x%x)", proc_prx_param.magic); + LOGF_ERROR(LOADER, "Bad magic! (0x%x)", proc_prx_param.magic); } else { @@ -351,19 +352,19 @@ bool ELF64Loader::LoadPhdrData(u64 offset) } else { - ConLog.Warning("Unknown module '%s'", module_name.c_str()); + LOGF_WARNING(LOADER, "Unknown module '%s'", module_name.c_str()); } #ifdef LOADER_DEBUG - ConLog.SkipLn(); - ConLog.Write("*** size: 0x%x", stub.s_size); - ConLog.Write("*** version: 0x%x", stub.s_version); - ConLog.Write("*** unk0: 0x%x", stub.s_unk0); - ConLog.Write("*** unk1: 0x%x", stub.s_unk1); - ConLog.Write("*** imports: %d", stub.s_imports); - ConLog.Write("*** module name: %s [0x%x]", module_name.c_str(), stub.s_modulename); - ConLog.Write("*** nid: 0x%x", stub.s_nid); - ConLog.Write("*** text: 0x%x", stub.s_text); + LOG_NOTICE(LOADER, ""); + LOGF_NOTICE(LOADER, "*** size: 0x%x", stub.s_size); + LOGF_NOTICE(LOADER, "*** version: 0x%x", stub.s_version); + LOGF_NOTICE(LOADER, "*** unk0: 0x%x", stub.s_unk0); + LOGF_NOTICE(LOADER, "*** unk1: 0x%x", stub.s_unk1); + LOGF_NOTICE(LOADER, "*** imports: %d", stub.s_imports); + LOGF_NOTICE(LOADER, "*** module name: %s [0x%x]", module_name.c_str(), stub.s_modulename); + LOGF_NOTICE(LOADER, "*** nid: 0x%x", stub.s_nid); + LOGF_NOTICE(LOADER, "*** text: 0x%x", stub.s_text); #endif static const u32 section = 4 * 3; u64 tbl = Memory.MainMem.AllocAlign(stub.s_imports * 4 * 2); @@ -378,13 +379,13 @@ bool ELF64Loader::LoadPhdrData(u64 offset) { if(!module->Load(nid)) { - ConLog.Warning("Unimplemented function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); + LOGF_WARNING(LOADER, "Unimplemented function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); } } #ifdef LOADER_DEBUG - ConLog.Write("import %d:", i+1); - ConLog.Write("*** nid: 0x%x (0x%x)", nid, stub.s_nid + i*4); - ConLog.Write("*** text: 0x%x (0x%x)", text, stub.s_text + i*4); + LOGF_NOTICE(LOADER, "import %d:", i+1); + LOGF_NOTICE(LOADER, "*** nid: 0x%x (0x%x)", nid, stub.s_nid + i*4); + LOGF_NOTICE(LOADER, "*** text: 0x%x (0x%x)", text, stub.s_text + i*4); #endif Memory.Write32(stub.s_text + i*4, tbl + i*8); @@ -399,14 +400,14 @@ bool ELF64Loader::LoadPhdrData(u64 offset) } } #ifdef LOADER_DEBUG - ConLog.SkipLn(); + LOG_NOTICE(LOADER, " "); #endif } } break; } #ifdef LOADER_DEBUG - ConLog.SkipLn(); + LOGF_NOTICE(LOADER, " "); #endif } @@ -424,13 +425,13 @@ bool ELF64Loader::LoadShdrData(u64 offset) if(i < shdr_name_arr.size()) { #ifdef LOADER_DEBUG - ConLog.Write("Name: %s", shdr_name_arr[i].c_str()); + LOGF_NOTICE(LOADER, "Name: %s", shdr_name_arr[i].c_str()); #endif } #ifdef LOADER_DEBUG shdr.Show(); - ConLog.SkipLn(); + LOGF_NOTICE(LOADER, " "); #endif if(shdr.sh_addr + shdr.sh_size > max_addr) max_addr = shdr.sh_addr + shdr.sh_size; @@ -453,7 +454,7 @@ bool ELF64Loader::LoadShdrData(u64 offset) if((shdr.sh_type == SHT_RELA) || (shdr.sh_type == SHT_REL)) { - ConLog.Error("ELF64 ERROR: Relocation"); + LOG_ERROR(LOADER, "ELF64 ERROR: Relocation"); continue; } diff --git a/rpcs3/Loader/ELF64.h b/rpcs3/Loader/ELF64.h index 4a54a08232..68aa47bbf8 100644 --- a/rpcs3/Loader/ELF64.h +++ b/rpcs3/Loader/ELF64.h @@ -49,25 +49,25 @@ struct Elf64_Ehdr void Show() { #ifdef LOADER_DEBUG - ConLog.Write("Magic: %08x", e_magic); - ConLog.Write("Class: %s", "ELF64"); - ConLog.Write("Data: %s", Ehdr_DataToString(e_data).c_str()); - ConLog.Write("Current Version: %d", e_curver); - ConLog.Write("OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); - ConLog.Write("ABI version: %lld", e_abi_ver); - ConLog.Write("Type: %s", Ehdr_TypeToString(e_type).c_str()); - ConLog.Write("Machine: %s", Ehdr_MachineToString(e_machine).c_str()); - ConLog.Write("Version: %d", e_version); - ConLog.Write("Entry point address: 0x%08llx", e_entry); - ConLog.Write("Program headers offset: 0x%08llx", e_phoff); - ConLog.Write("Section headers offset: 0x%08llx", e_shoff); - ConLog.Write("Flags: 0x%x", e_flags); - ConLog.Write("Size of this header: %d", e_ehsize); - ConLog.Write("Size of program headers: %d", e_phentsize); - ConLog.Write("Number of program headers: %d", e_phnum); - ConLog.Write("Size of section headers: %d", e_shentsize); - ConLog.Write("Number of section headers: %d", e_shnum); - ConLog.Write("Section header string table index: %d", e_shstrndx); + LOGF_NOTICE(LOADER, "Magic: %08x", e_magic); + LOGF_NOTICE(LOADER, "Class: %s", "ELF64"); + LOGF_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); + LOGF_NOTICE(LOADER, "Current Version: %d", e_curver); + LOGF_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); + LOGF_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); + LOGF_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); + LOGF_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); + LOGF_NOTICE(LOADER, "Version: %d", e_version); + LOGF_NOTICE(LOADER, "Entry point address: 0x%08llx", e_entry); + LOGF_NOTICE(LOADER, "Program headers offset: 0x%08llx", e_phoff); + LOGF_NOTICE(LOADER, "Section headers offset: 0x%08llx", e_shoff); + LOGF_NOTICE(LOADER, "Flags: 0x%x", e_flags); + LOGF_NOTICE(LOADER, "Size of this header: %d", e_ehsize); + LOGF_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); + LOGF_NOTICE(LOADER, "Number of program headers: %d", e_phnum); + LOGF_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); + LOGF_NOTICE(LOADER, "Number of section headers: %d", e_shnum); + LOGF_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); #endif } @@ -105,16 +105,16 @@ struct Elf64_Shdr void Show() { #ifdef LOADER_DEBUG - ConLog.Write("Name offset: %x", sh_name); - ConLog.Write("Type: %d", sh_type); - ConLog.Write("Addr: %llx", sh_addr); - ConLog.Write("Offset: %llx", sh_offset); - ConLog.Write("Size: %llx", sh_size); - ConLog.Write("EntSize: %lld", sh_entsize); - ConLog.Write("Flags: %llx", sh_flags); - ConLog.Write("Link: %x", sh_link); - ConLog.Write("Info: %x", sh_info); - ConLog.Write("Address align: %llx", sh_addralign); + LOGF_NOTICE(LOADER, "Name offset: %x", sh_name); + LOGF_NOTICE(LOADER, "Type: %d", sh_type); + LOGF_NOTICE(LOADER, "Addr: %llx", sh_addr); + LOGF_NOTICE(LOADER, "Offset: %llx", sh_offset); + LOGF_NOTICE(LOADER, "Size: %llx", sh_size); + LOGF_NOTICE(LOADER, "EntSize: %lld", sh_entsize); + LOGF_NOTICE(LOADER, "Flags: %llx", sh_flags); + LOGF_NOTICE(LOADER, "Link: %x", sh_link); + LOGF_NOTICE(LOADER, "Info: %x", sh_info); + LOGF_NOTICE(LOADER, "Address align: %llx", sh_addralign); #endif } }; @@ -145,14 +145,14 @@ struct Elf64_Phdr void Show() { #ifdef LOADER_DEBUG - ConLog.Write("Type: %s", Phdr_TypeToString(p_type).c_str()); - ConLog.Write("Offset: 0x%08llx", p_offset); - ConLog.Write("Virtual address: 0x%08llx", p_vaddr); - ConLog.Write("Physical address: 0x%08llx", p_paddr); - ConLog.Write("File size: 0x%08llx", p_filesz); - ConLog.Write("Memory size: 0x%08llx", p_memsz); - ConLog.Write("Flags: %s", Phdr_FlagsToString(p_flags).c_str()); - ConLog.Write("Align: 0x%llx", p_align); + LOGF_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); + LOGF_NOTICE(LOADER, "Offset: 0x%08llx", p_offset); + LOGF_NOTICE(LOADER, "Virtual address: 0x%08llx", p_vaddr); + LOGF_NOTICE(LOADER, "Physical address: 0x%08llx", p_paddr); + LOGF_NOTICE(LOADER, "File size: 0x%08llx", p_filesz); + LOGF_NOTICE(LOADER, "Memory size: 0x%08llx", p_memsz); + LOGF_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); + LOGF_NOTICE(LOADER, "Align: 0x%llx", p_align); #endif } }; diff --git a/rpcs3/Loader/Loader.cpp b/rpcs3/Loader/Loader.cpp index 54c41330b2..4fb4b1cec4 100644 --- a/rpcs3/Loader/Loader.cpp +++ b/rpcs3/Loader/Loader.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Loader.h" #include "ELF.h" #include "SELF.h" @@ -142,7 +142,7 @@ bool Loader::Analyze() if(!m_loader) { - ConLog.Error("Unknown file type"); + LOG_ERROR(LOADER, "Unknown file type"); return false; } @@ -159,7 +159,7 @@ bool Loader::Load() if(!m_loader->LoadData(m_loader->GetMachine() == MACHINE_SPU ? g_spu_offset : 0)) { - ConLog.Error("Broken file"); + LOG_ERROR(LOADER, "Broken file"); return false; } diff --git a/rpcs3/Loader/PKG.cpp b/rpcs3/Loader/PKG.cpp index f634b179a8..3223509a48 100644 --- a/rpcs3/Loader/PKG.cpp +++ b/rpcs3/Loader/PKG.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "PKG.h" #include "../Crypto/unpkg.h" @@ -27,27 +27,27 @@ bool PKGLoader::Install(std::string dest) if (rDirExists(dest+titleID)) { rMessageDialog d_overwrite(NULL, "Another installation was found. Do you want to overwrite it?", "PKG Decrypter / Installer", rYES_NO|rCENTRE); if (d_overwrite.ShowModal() != rID_YES) { - ConLog.Error("PKG Loader: Another installation found in: %s", titleID.c_str()); + LOGF_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); return false; } // TODO: Remove the following two lines and remove the folder dest+titleID - ConLog.Error("PKG Loader: Another installation found in: %s", titleID.c_str()); + LOGF_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); return false; } if (!rMkdir(dest+titleID)) { - ConLog.Error("PKG Loader: Could not make the installation directory: %s", titleID.c_str()); + LOGF_ERROR(LOADER, "PKG Loader: Could not make the installation directory: %s", titleID.c_str()); return false; } // Decrypt and unpack the PKG file. if (Unpack(pkg_f, titleID, dest) < 0) { - ConLog.Error("PKG Loader: Failed to install package!"); + LOG_ERROR(LOADER, "PKG Loader: Failed to install package!"); return false; } else { - ConLog.Write("PKG Loader: Package successfully installed in: /dev_hdd0/game/%s", titleID.c_str()); + LOGF_NOTICE(LOADER, "PKG Loader: Package successfully installed in: /dev_hdd0/game/%s", titleID.c_str()); return true; } } diff --git a/rpcs3/Loader/PSF.cpp b/rpcs3/Loader/PSF.cpp index 6d4890756d..970c29ac88 100644 --- a/rpcs3/Loader/PSF.cpp +++ b/rpcs3/Loader/PSF.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "PSF.h" PSFLoader::PSFLoader(vfsStream& f) : psf_f(f) @@ -43,7 +43,7 @@ bool PSFLoader::LoadHeader() if(!m_header.CheckMagic()) return false; - if(m_show_log) ConLog.Write("PSF version: %x", m_header.psf_version); + if(m_show_log) LOGF_NOTICE(LOADER, "PSF version: %x", m_header.psf_version); m_psfindxs.clear(); m_entries.clear(); diff --git a/rpcs3/Loader/SELF.cpp b/rpcs3/Loader/SELF.cpp index 6a95db6a2b..b614267bb2 100644 --- a/rpcs3/Loader/SELF.cpp +++ b/rpcs3/Loader/SELF.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "SELF.h" #include "ELF64.h" @@ -33,7 +33,7 @@ bool SELFLoader::LoadData(u64 offset) !l.LoadShdrInfo(self_hdr.se_shdroff) || !l.LoadData(self_hdr.se_appinfooff) ) { - ConLog.Error("Broken SELF file."); + LOG_ERROR(LOADER, "Broken SELF file."); return false; } @@ -43,6 +43,6 @@ bool SELFLoader::LoadData(u64 offset) return true; - ConLog.Error("Boot SELF not supported yet!"); + LOG_ERROR(LOADER, "Boot SELF not supported yet!"); return false; } \ No newline at end of file diff --git a/rpcs3/Loader/SELF.h b/rpcs3/Loader/SELF.h index 5a312e4e44..7756b7c011 100644 --- a/rpcs3/Loader/SELF.h +++ b/rpcs3/Loader/SELF.h @@ -24,14 +24,14 @@ struct SceHeader void Show() { - ConLog.Write("Magic: %08x", se_magic); - ConLog.Write("Class: %s", "SELF"); - ConLog.Write("hver: 0x%08x", se_hver); - ConLog.Write("flags: 0x%04x", se_flags); - ConLog.Write("type: 0x%04x", se_type); - ConLog.Write("meta: 0x%08x", se_meta); - ConLog.Write("hsize: 0x%llx", se_hsize); - ConLog.Write("esize: 0x%llx", se_esize); + LOGF_NOTICE(LOADER, "Magic: %08x", se_magic); + LOGF_NOTICE(LOADER, "Class: %s", "SELF"); + LOGF_NOTICE(LOADER, "hver: 0x%08x", se_hver); + LOGF_NOTICE(LOADER, "flags: 0x%04x", se_flags); + LOGF_NOTICE(LOADER, "type: 0x%04x", se_type); + LOGF_NOTICE(LOADER, "meta: 0x%08x", se_meta); + LOGF_NOTICE(LOADER, "hsize: 0x%llx", se_hsize); + LOGF_NOTICE(LOADER, "esize: 0x%llx", se_esize); } bool CheckMagic() const { return se_magic == 0x53434500; } @@ -66,15 +66,15 @@ struct SelfHeader void Show() { - ConLog.Write("header type: 0x%llx", se_htype); - ConLog.Write("app info offset: 0x%llx", se_appinfooff); - ConLog.Write("elf offset: 0x%llx", se_elfoff); - ConLog.Write("program header offset: 0x%llx", se_phdroff); - ConLog.Write("section header offset: 0x%llx", se_shdroff); - ConLog.Write("section info offset: 0x%llx", se_secinfoff); - ConLog.Write("sce version offset: 0x%llx", se_sceveroff); - ConLog.Write("control info offset: 0x%llx", se_controloff); - ConLog.Write("control info size: 0x%llx", se_controlsize); + LOGF_NOTICE(LOADER, "header type: 0x%llx", se_htype); + LOGF_NOTICE(LOADER, "app info offset: 0x%llx", se_appinfooff); + LOGF_NOTICE(LOADER, "elf offset: 0x%llx", se_elfoff); + LOGF_NOTICE(LOADER, "program header offset: 0x%llx", se_phdroff); + LOGF_NOTICE(LOADER, "section header offset: 0x%llx", se_shdroff); + LOGF_NOTICE(LOADER, "section info offset: 0x%llx", se_secinfoff); + LOGF_NOTICE(LOADER, "sce version offset: 0x%llx", se_sceveroff); + LOGF_NOTICE(LOADER, "control info offset: 0x%llx", se_controloff); + LOGF_NOTICE(LOADER, "control info size: 0x%llx", se_controlsize); } }; diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index d15e8f00b4..1bc5c5cbab 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "TROPUSR.h" @@ -177,7 +177,7 @@ u32 TROPUSRLoader::GetTrophiesCount() u32 TROPUSRLoader::GetTrophyUnlockState(u32 id) { if (id >= m_table6.size()) - ConLog.Warning("TROPUSRLoader::GetUnlockState: Invalid id=%d", id); + LOGF_WARNING(LOADER, "TROPUSRLoader::GetUnlockState: Invalid id=%d", id); return m_table6[id].trophy_state; // Let's assume the trophies are stored ordered } @@ -185,7 +185,7 @@ u32 TROPUSRLoader::GetTrophyUnlockState(u32 id) u32 TROPUSRLoader::GetTrophyTimestamp(u32 id) { if (id >= m_table6.size()) - ConLog.Warning("TROPUSRLoader::GetTrophyTimestamp: Invalid id=%d", id); + LOGF_WARNING(LOADER, "TROPUSRLoader::GetTrophyTimestamp: Invalid id=%d", id); // TODO: What timestamp does sceNpTrophyGetTrophyInfo want, timestamp1 or timestamp2? return m_table6[id].timestamp2; // Let's assume the trophies are stored ordered diff --git a/rpcs3/Loader/TRP.cpp b/rpcs3/Loader/TRP.cpp index 7ba04aa82c..1fd2f2167a 100644 --- a/rpcs3/Loader/TRP.cpp +++ b/rpcs3/Loader/TRP.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/FS/vfsFile.h" @@ -51,7 +51,7 @@ bool TRPLoader::LoadHeader(bool show) return false; if (show) - ConLog.Write("TRP version: %x", m_header.trp_version); + LOGF_NOTICE(LOADER, "TRP version: %x", m_header.trp_version); m_entries.clear(); m_entries.resize(m_header.trp_files_count); @@ -62,7 +62,7 @@ bool TRPLoader::LoadHeader(bool show) return false; if (show) - ConLog.Write("TRP entry #%d: %s", m_entries[i].name); + LOGF_NOTICE(LOADER, "TRP entry #%d: %s", m_entries[i].name); } return true; diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index fde02246a6..02e2f292b5 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -27,6 +27,7 @@ + @@ -213,8 +214,10 @@ + + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 398e3f933e..03b8528f49 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -584,6 +584,9 @@ Emu\SysCalls\lv2 + + Utilities + @@ -1063,5 +1066,11 @@ Emu\SysCalls\lv2 + + Header Files + + + Utilities + \ No newline at end of file diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index ac0bec64b9..2997ca698a 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Emu/ConLog.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" @@ -62,8 +62,6 @@ void Rpcs3App::Exit() Emu.Stop(); Ini.Save(); - if(ConLogFrame && !ConLogFrame->IsBeingDeleted()) ConLogFrame->Close(); - wxApp::Exit(); } diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index d243fdc91a..3ccc472ea0 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -163,7 +163,6 @@ - @@ -196,6 +195,7 @@ + @@ -207,8 +207,6 @@ - - diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index a9707872ef..97c4e34c61 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -102,9 +102,6 @@ Emu - - Emu - @@ -191,9 +188,6 @@ Gui - - Emu - Utilities @@ -221,8 +215,8 @@ Gui - - Emu + + Utilities \ No newline at end of file diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 16c34d9301..77a9cac9b3 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -38,7 +38,7 @@ #include "wx/app.h" #include #include - +#include #endif #ifdef MSVC_CRT_MEMLEAK_DETECTION @@ -268,6 +268,8 @@ enum Status Ready, }; +#include "Utilities/StrFmt.h" +#include "Utilities/Log.h" #include "Utilities/BEType.h" #include "Utilities/rFile.h" #include "Utilities/rTime.h" @@ -279,13 +281,10 @@ enum Status #include "Utilities/Array.h" #include "Utilities/Timer.h" #include "Utilities/IdManager.h" -#include "Utilities/StrFmt.h" #include "rpcs3/Ini.h" #include "Gui/FrameBase.h" #include "Gui/ConLogFrame.h" -#include "Emu/ConLog.h" -#include "Emu/DbgConsole.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Callback.h" From 1ad4380fab31d27f96ee34c9b111a3f91c123834 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 27 Jun 2014 06:01:40 +0200 Subject: [PATCH 076/499] rename conlog gui file and set the logbuffer-consumed flag sooner --- rpcs3/Gui/{ConLog.cpp => ConLogFrame.cpp} | 4 ++-- rpcs3/rpcs3.vcxproj | 2 +- rpcs3/rpcs3.vcxproj.filters | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename rpcs3/Gui/{ConLog.cpp => ConLogFrame.cpp} (98%) diff --git a/rpcs3/Gui/ConLog.cpp b/rpcs3/Gui/ConLogFrame.cpp similarity index 98% rename from rpcs3/Gui/ConLog.cpp rename to rpcs3/Gui/ConLogFrame.cpp index e62927bef6..273d673a02 100644 --- a/rpcs3/Gui/ConLog.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -59,6 +59,7 @@ struct wxWriter : Log::LogListener std::vector local_messages(size); messages.popN(&local_messages.front(), size); messages.unlockGet(); + newLog = false; u32 cursor = 0; u32 removed = 0; @@ -95,7 +96,6 @@ struct wxWriter : Log::LogListener m_log->Remove(0, m_log->GetLastPosition() - (GUI_BUFFER_MAX_SIZE/2)); } } - newLog = false; } //put message into the log buffer @@ -114,7 +114,7 @@ struct wxWriter : Log::LogListener std::vector temp_buffer(size); msg.serialize(temp_buffer.data()); messages.pushRange(temp_buffer.begin(), temp_buffer.end()); - if (!newLog.load(std::memory_order_relaxed)) + if (!newLog.load()) { newLog = true; m_log->GetEventHandler()->QueueEvent(new wxCommandEvent(EVT_LOG_COMMAND)); diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 3ccc472ea0..a791fc8435 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -164,7 +164,7 @@ - + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 97c4e34c61..15476df48d 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -24,9 +24,6 @@ Gui - - Gui - Gui @@ -102,6 +99,9 @@ Emu + + Gui + From ae472e9e67a8c0b9e1e6383fe29af9d7c372500e Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 27 Jun 2014 09:22:00 +0200 Subject: [PATCH 077/499] use a more compact method to add and remove listeners t o all channels --- Utilities/Log.cpp | 14 ++++++++++++++ Utilities/Log.h | 2 ++ rpcs3/Gui/ConLogFrame.cpp | 18 ++---------------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/Utilities/Log.cpp b/Utilities/Log.cpp index f4e0cdbdd2..180f77bff3 100644 --- a/Utilities/Log.cpp +++ b/Utilities/Log.cpp @@ -210,6 +210,20 @@ void LogManager::log(LogMessage msg) #endif } +void LogManager::addListener(std::shared_ptr listener) +{ + for (auto& channel : mChannels) + { + channel.addListener(listener); + } +} +void LogManager::removeListener(std::shared_ptr listener) +{ + for (auto& channel : mChannels) + { + channel.removeListener(listener); + } +} LogManager& LogManager::getInstance() { diff --git a/Utilities/Log.h b/Utilities/Log.h index bf98355690..d34e664be9 100644 --- a/Utilities/Log.h +++ b/Utilities/Log.h @@ -113,6 +113,8 @@ namespace Log static LogManager& getInstance(); LogChannel& getChannel(LogType type); void log(LogMessage msg); + void addListener(std::shared_ptr listener); + void removeListener(std::shared_ptr listener); #ifdef BUFFERED_LOGGING void consumeLog(); #endif diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index 273d673a02..3e5a7056a8 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -139,14 +139,7 @@ LogFrame::LogFrame(wxWindow* parent) m_tabs.AddPage(m_log, "Log"); m_tabs.AddPage(m_tty, "TTY"); - Log::LogManager::getInstance().getChannel(Log::GENERAL).addListener(listener); - Log::LogManager::getInstance().getChannel(Log::LOADER).addListener(listener); - Log::LogManager::getInstance().getChannel(Log::MEMORY).addListener(listener); - Log::LogManager::getInstance().getChannel(Log::RSX).addListener(listener); - Log::LogManager::getInstance().getChannel(Log::HLE).addListener(listener); - Log::LogManager::getInstance().getChannel(Log::PPU).addListener(listener); - Log::LogManager::getInstance().getChannel(Log::SPU).addListener(listener); - Log::LogManager::getInstance().getChannel(Log::TTY).addListener(listener); + Log::LogManager::getInstance().addListener(listener); wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); s_main->Add(&m_tabs, 1, wxEXPAND); @@ -158,14 +151,7 @@ LogFrame::LogFrame(wxWindow* parent) LogFrame::~LogFrame() { - Log::LogManager::getInstance().getChannel(Log::GENERAL).removeListener(listener); - Log::LogManager::getInstance().getChannel(Log::LOADER).removeListener(listener); - Log::LogManager::getInstance().getChannel(Log::MEMORY).removeListener(listener); - Log::LogManager::getInstance().getChannel(Log::RSX).removeListener(listener); - Log::LogManager::getInstance().getChannel(Log::HLE).removeListener(listener); - Log::LogManager::getInstance().getChannel(Log::PPU).removeListener(listener); - Log::LogManager::getInstance().getChannel(Log::SPU).removeListener(listener); - Log::LogManager::getInstance().getChannel(Log::TTY).removeListener(listener); + Log::LogManager::getInstance().removeListener(listener); } bool LogFrame::Close(bool force) From 5ef3b80596a2bbf225f30b300998cc4c2cb39a0e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 27 Jun 2014 15:11:56 +0400 Subject: [PATCH 078/499] cellSysutilBgmPlayback fix --- rpcs3/Emu/Audio/sysutil_audio.h | 35 ++++++++++----- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 51 ++++++++++++---------- 2 files changed, 52 insertions(+), 34 deletions(-) diff --git a/rpcs3/Emu/Audio/sysutil_audio.h b/rpcs3/Emu/Audio/sysutil_audio.h index 94ea6dafd0..2fd567461f 100644 --- a/rpcs3/Emu/Audio/sysutil_audio.h +++ b/rpcs3/Emu/Audio/sysutil_audio.h @@ -257,23 +257,38 @@ struct CellAudioInDeviceConfiguration u8 reserved[31]; }; -enum CellBgmPlaybackStatusState +enum CellSysutilBgmPlaybackStatusState { - CELL_BGMPLAYBACK_STATUS_PLAY = 0, - CELL_BGMPLAYBACK_STATUS_STOP = 1 + CELL_SYSUTIL_BGMPLAYBACK_STATUS_PLAY = 0, + CELL_SYSUTIL_BGMPLAYBACK_STATUS_STOP = 1 }; -enum CellBgmPlaybackStatusEnabled +enum CellSysutilBgmPlaybackStatusEnabled { - CELL_BGMPLAYBACK_STATUS_ENABLE = 0, - CELL_BGMPLAYBACK_STATUS_DISABLE = 1 + CELL_SYSUTIL_BGMPLAYBACK_STATUS_ENABLE = 0, + CELL_SYSUTIL_BGMPLAYBACK_STATUS_DISABLE = 1 }; -struct CellBgmPlaybackStatus +struct CellSysutilBgmPlaybackStatus { - u8 playbackState; - u8 enabled; + u8 playerState; + u8 enableState; char contentId[16]; - u8 fadeRatio; + u8 currentFadeRatio; char reserved[13]; }; + +struct CellSysutilBgmPlaybackStatus2 +{ + u8 playerState; + char reserved[7]; +}; + +struct CellSysutilBgmPlaybackExtraParam +{ + be_t systemBgmFadeInTime; + be_t systemBgmFadeOutTime; + be_t gameBgmFadeInTime; + be_t gameBgmFadeOutTime; + char reserved[8]; +}; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 317a927b23..f7e8781448 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -919,22 +919,24 @@ int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_ return CELL_OK; } -bool bgm_playback_enabled = false; +bool bgm_playback_enabled = true; int cellSysutilEnableBgmPlayback() { cellSysutil->Warning("cellSysutilEnableBgmPlayback()"); + // TODO bgm_playback_enabled = true; return CELL_OK; } -int cellSysutilEnableBgmPlaybackEx() +int cellSysutilEnableBgmPlaybackEx(mem_ptr_t param) { - cellSysutil->Warning("cellSysutilEnableBgmPlaybackEx()"); + cellSysutil->Warning("cellSysutilEnableBgmPlaybackEx(param_addr=0x%x)", param.GetAddr()); - bgm_playback_enabled = true; + // TODO + bgm_playback_enabled = true; return CELL_OK; } @@ -943,42 +945,43 @@ int cellSysutilDisableBgmPlayback() { cellSysutil->Warning("cellSysutilDisableBgmPlayback()"); + // TODO bgm_playback_enabled = false; return CELL_OK; } -int cellSysutilDisableBgmPlaybackEx() +int cellSysutilDisableBgmPlaybackEx(mem_ptr_t param) { - cellSysutil->Warning("cellSysutilDisableBgmPlaybackEx()"); - - bgm_playback_enabled = false; - - return CELL_OK; -} - -int cellSysutilGetBgmPlaybackStatus(mem_ptr_t status) -{ - cellSysutil->Warning("cellSysutilGetBgmPlaybackStatus(status=0x%x)", status.GetAddr()); + cellSysutil->Warning("cellSysutilDisableBgmPlaybackEx(param_addr=0x%x)", param.GetAddr()); // TODO - status->playbackState = CELL_BGMPLAYBACK_STATUS_STOP; - status->enabled = bgm_playback_enabled ? CELL_BGMPLAYBACK_STATUS_ENABLE : CELL_BGMPLAYBACK_STATUS_DISABLE; - status->fadeRatio = 0; // volume ratio + bgm_playback_enabled = false; + + return CELL_OK; +} + +int cellSysutilGetBgmPlaybackStatus(mem_ptr_t status) +{ + cellSysutil->Log("cellSysutilGetBgmPlaybackStatus(status_addr=0x%x)", status.GetAddr()); + + // TODO + status->playerState = CELL_SYSUTIL_BGMPLAYBACK_STATUS_STOP; + status->enableState = bgm_playback_enabled ? CELL_SYSUTIL_BGMPLAYBACK_STATUS_ENABLE : CELL_SYSUTIL_BGMPLAYBACK_STATUS_DISABLE; + status->currentFadeRatio = 0; // current volume ratio (0%) memset(status->contentId, 0, sizeof(status->contentId)); + memset(status->reserved, 0, sizeof(status->reserved)); return CELL_OK; } -int cellSysutilGetBgmPlaybackStatus2(mem_ptr_t status2) +int cellSysutilGetBgmPlaybackStatus2(mem_ptr_t status2) { - cellSysutil->Warning("cellSysutilGetBgmPlaybackStatus2(status=0x%x)", status2.GetAddr()); + cellSysutil->Log("cellSysutilGetBgmPlaybackStatus2(status2_addr=0x%x)", status2.GetAddr()); // TODO - status2->playbackState = CELL_BGMPLAYBACK_STATUS_STOP; - status2->enabled = bgm_playback_enabled ? CELL_BGMPLAYBACK_STATUS_ENABLE : CELL_BGMPLAYBACK_STATUS_DISABLE; - status2->fadeRatio = 0; // volume ratio - memset(status2->contentId, 0, sizeof(status2->contentId)); + status2->playerState = CELL_SYSUTIL_BGMPLAYBACK_STATUS_STOP; + memset(status2->reserved, 0, sizeof(status2->reserved)); return CELL_OK; } From 95f1a0e64531e70df05c26798d9be2aca9cc4f7b Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 27 Jun 2014 15:26:46 +0200 Subject: [PATCH 079/499] use only one set of logging macros instead of two and don't use free() as a function name --- Utilities/Log.h | 33 +++-- Utilities/MTRingbuffer.h | 12 +- rpcs3/Crypto/unedat.cpp | 20 +-- rpcs3/Crypto/unself.cpp | 96 +++++++------- rpcs3/Crypto/unself.h | 122 +++++++++--------- rpcs3/Emu/ARMv7/ARMv7Interpreter.h | 2 +- rpcs3/Emu/Audio/AL/OpenALThread.cpp | 6 +- rpcs3/Emu/CPU/CPUThread.cpp | 16 +-- rpcs3/Emu/Cell/MFC.h | 14 +- rpcs3/Emu/Cell/PPUInterpreter.h | 26 ++-- rpcs3/Emu/Cell/PPUThread.cpp | 2 +- rpcs3/Emu/Cell/RawSPUThread.cpp | 92 ++++++------- rpcs3/Emu/Cell/SPUInterpreter.h | 26 ++-- rpcs3/Emu/Cell/SPURecompiler.h | 2 +- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 12 +- rpcs3/Emu/Cell/SPUThread.cpp | 2 +- rpcs3/Emu/Cell/SPUThread.h | 82 ++++++------ rpcs3/Emu/FS/vfsLocalFile.cpp | 4 +- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 12 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 38 +++--- rpcs3/Emu/GS/GL/GLGSRender.h | 6 +- rpcs3/Emu/GS/GL/GLProgram.cpp | 6 +- rpcs3/Emu/GS/GL/GLProgramBuffer.cpp | 40 +++--- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 16 +-- rpcs3/Emu/GS/RSXThread.cpp | 120 ++++++++--------- rpcs3/Emu/HDD/HDD.h | 8 +- rpcs3/Emu/Io/XInput/XInputPadHandler.cpp | 2 +- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 6 +- rpcs3/Emu/Memory/Memory.cpp | 20 +-- rpcs3/Emu/Memory/Memory.h | 12 +- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 64 ++++----- rpcs3/Emu/SysCalls/Modules/cellAdec.h | 6 +- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 20 +-- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 44 +++---- rpcs3/Emu/SysCalls/Modules/cellDmux.h | 38 +++--- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 2 +- .../SysCalls/Modules/cellSysutil_SaveData.cpp | 34 ++--- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 56 ++++---- rpcs3/Emu/SysCalls/Modules/cellVdec.h | 6 +- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 18 +-- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 4 +- rpcs3/Emu/SysCalls/Static.cpp | 18 +-- rpcs3/Emu/SysCalls/SysCalls.cpp | 10 +- rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/SC_Event.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/SC_Mutex.h | 4 +- rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp | 2 +- rpcs3/Emu/System.cpp | 14 +- rpcs3/Gui/DisAsmFrame.cpp | 16 +-- rpcs3/Gui/FnIdGenerator.cpp | 2 +- rpcs3/Gui/GameViewer.cpp | 6 +- rpcs3/Gui/GameViewer.h | 6 +- rpcs3/Gui/MainFrame.cpp | 4 +- rpcs3/Gui/PADManager.cpp | 6 +- rpcs3/Gui/Plugins.h | 2 +- rpcs3/Gui/VHDDManager.cpp | 4 +- rpcs3/Loader/ELF32.cpp | 22 ++-- rpcs3/Loader/ELF32.h | 74 +++++------ rpcs3/Loader/ELF64.cpp | 74 +++++------ rpcs3/Loader/ELF64.h | 74 +++++------ rpcs3/Loader/PKG.cpp | 8 +- rpcs3/Loader/PSF.cpp | 2 +- rpcs3/Loader/SELF.h | 34 ++--- rpcs3/Loader/TROPUSR.cpp | 4 +- rpcs3/Loader/TRP.cpp | 4 +- 74 files changed, 800 insertions(+), 793 deletions(-) diff --git a/Utilities/Log.h b/Utilities/Log.h index d34e664be9..a57cb3f0b5 100644 --- a/Utilities/Log.h +++ b/Utilities/Log.h @@ -11,21 +11,12 @@ //#define BUFFERED_LOGGING 1 -//another msvc bug makes these not work, uncomment these and replace it with the one at the bottom when it's fixed -//#define LOG_MESSAGE(logType, severity, text) Log::LogManager::getInstance().log({logType, severity, text}) - //first parameter is of type Log::LogType and text is of type std::string -#define LOG_MESSAGE(logType, severity, text) do{Log::LogMessage msg{logType, severity, text}; Log::LogManager::getInstance().log(msg);}while(0) -#define LOG_SUCCESS(logType, text) LOG_MESSAGE(logType, Log::Success, text) -#define LOG_NOTICE(logType, text) LOG_MESSAGE(logType, Log::Notice, text) -#define LOG_WARNING(logType, text) LOG_MESSAGE(logType, Log::Warning, text) -#define LOG_ERROR(logType, text) LOG_MESSAGE(logType, Log::Error, text) - -#define LOGF_SUCCESS(logType, fmtstring, ...) LOG_SUCCESS(logType, fmt::Format(fmtstring, ##__VA_ARGS__ )) -#define LOGF_NOTICE(logType, fmtstring, ...) LOG_NOTICE(logType, fmt::Format(fmtstring, ##__VA_ARGS__ )) -#define LOGF_WARNING(logType, fmtstring, ...) LOG_WARNING(logType, fmt::Format(fmtstring, ##__VA_ARGS__ )) -#define LOGF_ERROR(logType, fmtstring, ...) LOG_ERROR(logType, fmt::Format(fmtstring, ##__VA_ARGS__ )) +#define LOG_SUCCESS(logType, text, ...) log_message(logType, Log::Success, text, ##__VA_ARGS__) +#define LOG_NOTICE(logType, text, ...) log_message(logType, Log::Notice, text, ##__VA_ARGS__) +#define LOG_WARNING(logType, text, ...) log_message(logType, Log::Warning, text, ##__VA_ARGS__) +#define LOG_ERROR(logType, text, ...) log_message(logType, Log::Error, text, ##__VA_ARGS__) namespace Log { @@ -139,3 +130,19 @@ static struct { inline operator Log::LogType() { return Log::LogType::HLE; } } H static struct { inline operator Log::LogType() { return Log::LogType::PPU; } } PPU; static struct { inline operator Log::LogType() { return Log::LogType::SPU; } } SPU; static struct { inline operator Log::LogType() { return Log::LogType::TTY; } } TTY; + +inline void log_message(Log::LogType type, Log::LogSeverity sev, std::string text) +{ + //another msvc bug makes this not work, uncomment this and delete everything else in this function when it's fixed + //Log::LogManager::getInstance().log({logType, severity, text}) + + Log::LogMessage msg{type, sev, text}; + Log::LogManager::getInstance().log(msg); +} + +template +inline void log_message(Log::LogType type, Log::LogSeverity sev, std::string text, T arg, Ts... args) +{ + Log::LogMessage msg{type, sev, fmt::Format(text,arg,args...)}; + Log::LogManager::getInstance().log(msg); +} \ No newline at end of file diff --git a/Utilities/MTRingbuffer.h b/Utilities/MTRingbuffer.h index cb01422a0d..8d9a27b29f 100644 --- a/Utilities/MTRingbuffer.h +++ b/Utilities/MTRingbuffer.h @@ -25,8 +25,8 @@ class MTRingbuffer{ public: MTRingbuffer() : mGet(0), mPut(0){} - //blocks until there's something to get, so check "free()" if you want to avoid blocking - //also lock the get mutex around the free() check and the pop if you want to avoid racing + //blocks until there's something to get, so check "spaceLeft()" if you want to avoid blocking + //also lock the get mutex around the spaceLeft() check and the pop if you want to avoid racing T pop() { std::lock_guard lock(mMutGet); @@ -63,7 +63,7 @@ public: //returns the amount of free places, this is the amount of actual free spaces-1 //since mGet==mPut signals an empty buffer we can't actually use the last free //space, so we shouldn't report it as free. - size_t free() + size_t spaceLeft() //apparently free() is a macro definition in msvc in some conditions { if (mGet < mPut) { @@ -81,8 +81,8 @@ public: size_t size() { - //the magic -1 is the same magic 1 that is explained in the free() function - return mBuffer.size() - free() - 1; + //the magic -1 is the same magic 1 that is explained in the spaceLeft() function + return mBuffer.size() - spaceLeft() - 1; } //takes random access iterator to T @@ -94,7 +94,7 @@ public: //if whatever we're trying to store is greater than the entire buffer the following loop will be infinite assert(mBuffer.size() > length); - while (free() < length) + while (spaceLeft() < length) { //if this is reached a lot it's time to increase the buffer size //or implement dynamic re-sizing diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index 6ad5207582..d1ffc77fb2 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -275,8 +275,8 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, if (verbose) { - LOGF_NOTICE(LOADER, "EDAT: Compressed block size: %d\n", pad_length); - LOGF_NOTICE(LOADER, "EDAT: Decompressed block size: %d\n", res); + LOG_NOTICE(LOADER, "EDAT: Compressed block size: %d\n", pad_length); + LOG_NOTICE(LOADER, "EDAT: Decompressed block size: %d\n", res); } edat->file_size -= res; @@ -337,7 +337,7 @@ static bool check_flags(EDAT_SDAT_HEADER *edat, NPD_HEADER *npd) } else if (npd->version > 4) { - LOGF_ERROR(LOADER, "EDAT: Unknown version - %d\n", npd->version); + LOG_ERROR(LOADER, "EDAT: Unknown version - %d\n", npd->version); return false; } @@ -418,7 +418,7 @@ int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, rFil if (!crypto(hash_mode, crypto_mode, (npd->version == 4), data, tmp, block_size, header_key, header_iv, key, hash_result)) { if (verbose) - LOGF_WARNING(LOADER, "EDAT: Metadata hash from block 0x%08x is invalid!\n", metadata_offset + bytes_read); + LOG_WARNING(LOADER, "EDAT: Metadata hash from block 0x%08x is invalid!\n", metadata_offset + bytes_read); } // Adjust sizes. @@ -535,14 +535,14 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi if (verbose) { LOG_NOTICE(LOADER, "NPD HEADER\n"); - LOGF_NOTICE(LOADER, "NPD version: %d\n", NPD->version); - LOGF_NOTICE(LOADER, "NPD license: %d\n", NPD->license); - LOGF_NOTICE(LOADER, "NPD type: %d\n", NPD->type); + LOG_NOTICE(LOADER, "NPD version: %d\n", NPD->version); + LOG_NOTICE(LOADER, "NPD license: %d\n", NPD->license); + LOG_NOTICE(LOADER, "NPD type: %d\n", NPD->type); LOG_NOTICE(LOADER, "\n"); LOG_NOTICE(LOADER, "EDAT HEADER\n"); - LOGF_NOTICE(LOADER, "EDAT flags: 0x%08X\n", EDAT->flags); - LOGF_NOTICE(LOADER, "EDAT block size: 0x%08X\n", EDAT->block_size); - LOGF_NOTICE(LOADER, "EDAT file size: 0x%08X\n", EDAT->file_size); + LOG_NOTICE(LOADER, "EDAT flags: 0x%08X\n", EDAT->flags); + LOG_NOTICE(LOADER, "EDAT block size: 0x%08X\n", EDAT->block_size); + LOG_NOTICE(LOADER, "EDAT file size: 0x%08X\n", EDAT->file_size); LOG_NOTICE(LOADER, "\n"); } diff --git a/rpcs3/Crypto/unself.cpp b/rpcs3/Crypto/unself.cpp index 7f889a8c8b..eef46d2e28 100644 --- a/rpcs3/Crypto/unself.cpp +++ b/rpcs3/Crypto/unself.cpp @@ -17,7 +17,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) // Check SCE magic. if (!sce_hdr.CheckMagic()) { - LOGF_ERROR(LOADER, "SELF: Not a SELF file!"); + LOG_ERROR(LOADER, "SELF: Not a SELF file!"); return false; } @@ -41,7 +41,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) phdr32_arr.clear(); if(elf32_hdr.e_phoff == 0 && elf32_hdr.e_phnum) { - LOGF_ERROR(LOADER, "SELF: ELF program header offset is null!"); + LOG_ERROR(LOADER, "SELF: ELF program header offset is null!"); return false; } self_f.Seek(self_hdr.se_phdroff); @@ -56,7 +56,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) phdr64_arr.clear(); if(elf64_hdr.e_phoff == 0 && elf64_hdr.e_phnum) { - LOGF_ERROR(LOADER, "SELF: ELF program header offset is null!"); + LOG_ERROR(LOADER, "SELF: ELF program header offset is null!"); return false; } self_f.Seek(self_hdr.se_phdroff); @@ -101,7 +101,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) shdr32_arr.clear(); if(elf32_hdr.e_shoff == 0 && elf32_hdr.e_shnum) { - LOGF_WARNING(LOADER, "SELF: ELF section header offset is null!"); + LOG_WARNING(LOADER, "SELF: ELF section header offset is null!"); return true; } self_f.Seek(self_hdr.se_shdroff); @@ -116,7 +116,7 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) shdr64_arr.clear(); if(elf64_hdr.e_shoff == 0 && elf64_hdr.e_shnum) { - LOGF_WARNING(LOADER, "SELF: ELF section header offset is null!"); + LOG_WARNING(LOADER, "SELF: ELF section header offset is null!"); return true; } self_f.Seek(self_hdr.se_shdroff); @@ -132,46 +132,46 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) void SELFDecrypter::ShowHeaders(bool isElf32) { - LOGF_NOTICE(LOADER, "SCE header"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "SCE header"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); sce_hdr.Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); - LOGF_NOTICE(LOADER, "SELF header"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "SELF header"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); self_hdr.Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); - LOGF_NOTICE(LOADER, "APP INFO"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "APP INFO"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); app_info.Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); - LOGF_NOTICE(LOADER, "ELF header"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "ELF header"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); isElf32 ? elf32_hdr.Show() : elf64_hdr.Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); - LOGF_NOTICE(LOADER, "ELF program headers"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "ELF program headers"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); for(unsigned int i = 0; i < ((isElf32) ? phdr32_arr.size() : phdr64_arr.size()); i++) isElf32 ? phdr32_arr[i].Show() : phdr64_arr[i].Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); - LOGF_NOTICE(LOADER, "Section info"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "Section info"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); for(unsigned int i = 0; i < secinfo_arr.size(); i++) secinfo_arr[i].Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); - LOGF_NOTICE(LOADER, "SCE version info"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "SCE version info"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); scev_info.Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); - LOGF_NOTICE(LOADER, "Control info"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "Control info"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); for(unsigned int i = 0; i < ctrlinfo_arr.size(); i++) ctrlinfo_arr[i].Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); - LOGF_NOTICE(LOADER, "ELF section headers"); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "ELF section headers"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); for(unsigned int i = 0; i < ((isElf32) ? shdr32_arr.size() : shdr64_arr.size()); i++) isElf32 ? shdr32_arr[i].Show() : shdr64_arr[i].Show(); - LOGF_NOTICE(LOADER, "----------------------------------------------------"); + LOG_NOTICE(LOADER, "----------------------------------------------------"); } bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) @@ -195,7 +195,7 @@ bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) // If not, the data has no NPDRM layer. if (!ctrl) { - LOGF_WARNING(LOADER, "SELF: No NPDRM control info found!"); + LOG_WARNING(LOADER, "SELF: No NPDRM control info found!"); return true; } @@ -208,7 +208,7 @@ bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) if (ctrl->npdrm.license == 1) // Network license. { - LOGF_ERROR(LOADER, "SELF: Can't decrypt network NPDRM!"); + LOG_ERROR(LOADER, "SELF: Can't decrypt network NPDRM!"); return false; } else if (ctrl->npdrm.license == 2) // Local license. @@ -216,7 +216,7 @@ bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) // Try to find a RAP file to get the key. if (!GetKeyFromRap(ctrl->npdrm.content_id, npdrm_key)) { - LOGF_ERROR(LOADER, "SELF: Can't find RAP file for NPDRM decryption!"); + LOG_ERROR(LOADER, "SELF: Can't find RAP file for NPDRM decryption!"); return false; } } @@ -227,7 +227,7 @@ bool SELFDecrypter::DecryptNPDRM(u8 *metadata, u32 metadata_size) } else { - LOGF_ERROR(LOADER, "SELF: Invalid NPDRM license type!"); + LOG_ERROR(LOADER, "SELF: Invalid NPDRM license type!"); return false; } @@ -290,7 +290,7 @@ bool SELFDecrypter::LoadMetadata() if ((meta_info.key_pad[0] != 0x00) || (meta_info.iv_pad[0] != 0x00)) { - LOGF_ERROR(LOADER, "SELF: Failed to decrypt metadata info!"); + LOG_ERROR(LOADER, "SELF: Failed to decrypt metadata info!"); return false; } @@ -392,7 +392,7 @@ bool SELFDecrypter::MakeElf(const std::string& elf, bool isElf32) rFile e(elf.c_str(), rFile::write); if(!e.IsOpened()) { - LOGF_ERROR(LOADER, "Could not create ELF file! (%s)", elf.c_str()); + LOG_ERROR(LOADER, "Could not create ELF file! (%s)", elf.c_str()); return false; } @@ -510,7 +510,7 @@ bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) // Check if we have a valid RAP file. if (!rFile::Exists(rap_path)) { - LOGF_ERROR(LOADER, "This application requires a valid RAP file for decryption!"); + LOG_ERROR(LOADER, "This application requires a valid RAP file for decryption!"); return false; } @@ -519,11 +519,11 @@ bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) if (!rap_file.IsOpened()) { - LOGF_ERROR(LOADER, "Failed to load RAP file!"); + LOG_ERROR(LOADER, "Failed to load RAP file!"); return false; } - LOGF_NOTICE(LOADER, "Loading RAP file %s", (ci_str + ".rap").c_str()); + LOG_NOTICE(LOADER, "Loading RAP file %s", (ci_str + ".rap").c_str()); rap_file.Read(rap_key, 0x10); rap_file.Close(); @@ -573,7 +573,7 @@ bool CheckDebugSelf(const std::string& self, const std::string& elf) if(!s.IsOpened()) { - LOGF_ERROR(LOADER, "Could not open SELF file! (%s)", self.c_str()); + LOG_ERROR(LOADER, "Could not open SELF file! (%s)", self.c_str()); return false; } @@ -585,7 +585,7 @@ bool CheckDebugSelf(const std::string& self, const std::string& elf) // Check for DEBUG version. if(swap16(key_version) == 0x8000) { - LOGF_WARNING(LOADER, "Debug SELF detected! Removing fake header..."); + LOG_WARNING(LOADER, "Debug SELF detected! Removing fake header..."); // Get the real elf offset. s.Seek(0x10); @@ -600,7 +600,7 @@ bool CheckDebugSelf(const std::string& self, const std::string& elf) rFile e(elf, rFile::write); if(!e.IsOpened()) { - LOGF_ERROR(LOADER, "Could not create ELF file! (%s)", elf.c_str()); + LOG_ERROR(LOADER, "Could not create ELF file! (%s)", elf.c_str()); return false; } @@ -640,28 +640,28 @@ bool DecryptSelf(const std::string& elf, const std::string& self) // Load the SELF file headers. if (!self_dec.LoadHeaders(isElf32)) { - LOGF_ERROR(LOADER, "SELF: Failed to load SELF file headers!"); + LOG_ERROR(LOADER, "SELF: Failed to load SELF file headers!"); return false; } // Load and decrypt the SELF file metadata. if (!self_dec.LoadMetadata()) { - LOGF_ERROR(LOADER, "SELF: Failed to load SELF file metadata!"); + LOG_ERROR(LOADER, "SELF: Failed to load SELF file metadata!"); return false; } // Decrypt the SELF file data. if (!self_dec.DecryptData()) { - LOGF_ERROR(LOADER, "SELF: Failed to decrypt SELF file data!"); + LOG_ERROR(LOADER, "SELF: Failed to decrypt SELF file data!"); return false; } // Make a new ELF file from this SELF. if (!self_dec.MakeElf(elf, isElf32)) { - LOGF_ERROR(LOADER, "SELF: Failed to make ELF file from SELF!"); + LOG_ERROR(LOADER, "SELF: Failed to make ELF file from SELF!"); return false; } } diff --git a/rpcs3/Crypto/unself.h b/rpcs3/Crypto/unself.h index b4e504853e..860d71e826 100644 --- a/rpcs3/Crypto/unself.h +++ b/rpcs3/Crypto/unself.h @@ -25,10 +25,10 @@ struct AppInfo void Show() { - LOGF_NOTICE(LOADER, "AuthID: 0x%llx", authid); - LOGF_NOTICE(LOADER, "VendorID: 0x%08x", vendor_id); - LOGF_NOTICE(LOADER, "SELF type: 0x%08x", self_type); - LOGF_NOTICE(LOADER, "Version: 0x%llx", version); + LOG_NOTICE(LOADER, "AuthID: 0x%llx", authid); + LOG_NOTICE(LOADER, "VendorID: 0x%08x", vendor_id); + LOG_NOTICE(LOADER, "SELF type: 0x%08x", self_type); + LOG_NOTICE(LOADER, "Version: 0x%llx", version); } }; @@ -53,12 +53,12 @@ struct SectionInfo void Show() { - LOGF_NOTICE(LOADER, "Offset: 0x%llx", offset); - LOGF_NOTICE(LOADER, "Size: 0x%llx", size); - LOGF_NOTICE(LOADER, "Compressed: 0x%08x", compressed); - LOGF_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); - LOGF_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); - LOGF_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); + LOG_NOTICE(LOADER, "Offset: 0x%llx", offset); + LOG_NOTICE(LOADER, "Size: 0x%llx", size); + LOG_NOTICE(LOADER, "Compressed: 0x%08x", compressed); + LOG_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); + LOG_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); + LOG_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); } }; @@ -79,10 +79,10 @@ struct SCEVersionInfo void Show() { - LOGF_NOTICE(LOADER, "Sub-header type: 0x%08x", subheader_type); - LOGF_NOTICE(LOADER, "Present: 0x%08x", present); - LOGF_NOTICE(LOADER, "Size: 0x%08x", size); - LOGF_NOTICE(LOADER, "Unknown: 0x%08x", unknown); + LOG_NOTICE(LOADER, "Sub-header type: 0x%08x", subheader_type); + LOG_NOTICE(LOADER, "Present: 0x%08x", present); + LOG_NOTICE(LOADER, "Size: 0x%08x", size); + LOG_NOTICE(LOADER, "Unknown: 0x%08x", unknown); } }; @@ -181,20 +181,20 @@ struct ControlInfo void Show() { - LOGF_NOTICE(LOADER, "Type: 0x%08x", type); - LOGF_NOTICE(LOADER, "Size: 0x%08x", size); - LOGF_NOTICE(LOADER, "Next: 0x%llx", next); + LOG_NOTICE(LOADER, "Type: 0x%08x", type); + LOG_NOTICE(LOADER, "Size: 0x%08x", size); + LOG_NOTICE(LOADER, "Next: 0x%llx", next); if (type == 1) { - LOGF_NOTICE(LOADER, "Control flag 1: 0x%08x", control_flags.ctrl_flag1); - LOGF_NOTICE(LOADER, "Unknown1: 0x%08x", control_flags.unknown1); - LOGF_NOTICE(LOADER, "Unknown2: 0x%08x", control_flags.unknown2); - LOGF_NOTICE(LOADER, "Unknown3: 0x%08x", control_flags.unknown3); - LOGF_NOTICE(LOADER, "Unknown4: 0x%08x", control_flags.unknown4); - LOGF_NOTICE(LOADER, "Unknown5: 0x%08x", control_flags.unknown5); - LOGF_NOTICE(LOADER, "Unknown6: 0x%08x", control_flags.unknown6); - LOGF_NOTICE(LOADER, "Unknown7: 0x%08x", control_flags.unknown7); + LOG_NOTICE(LOADER, "Control flag 1: 0x%08x", control_flags.ctrl_flag1); + LOG_NOTICE(LOADER, "Unknown1: 0x%08x", control_flags.unknown1); + LOG_NOTICE(LOADER, "Unknown2: 0x%08x", control_flags.unknown2); + LOG_NOTICE(LOADER, "Unknown3: 0x%08x", control_flags.unknown3); + LOG_NOTICE(LOADER, "Unknown4: 0x%08x", control_flags.unknown4); + LOG_NOTICE(LOADER, "Unknown5: 0x%08x", control_flags.unknown5); + LOG_NOTICE(LOADER, "Unknown6: 0x%08x", control_flags.unknown6); + LOG_NOTICE(LOADER, "Unknown7: 0x%08x", control_flags.unknown7); } else if (type == 2) { @@ -204,8 +204,8 @@ struct ControlInfo for (int i = 0; i < 20; i++) digest_str += fmt::Format("%02x", file_digest_30.digest[i]); - LOGF_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); - LOGF_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_30.unknown); + LOG_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); + LOG_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_30.unknown); } else if (size == 0x40) { @@ -217,9 +217,9 @@ struct ControlInfo digest_str2 += fmt::Format("%02x", file_digest_40.digest2[i]); } - LOGF_NOTICE(LOADER, "Digest1: %s", digest_str1.c_str()); - LOGF_NOTICE(LOADER, "Digest2: %s", digest_str2.c_str()); - LOGF_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_40.unknown); + LOG_NOTICE(LOADER, "Digest1: %s", digest_str1.c_str()); + LOG_NOTICE(LOADER, "Digest2: %s", digest_str2.c_str()); + LOG_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_40.unknown); } } else if (type == 3) @@ -237,16 +237,16 @@ struct ControlInfo xordigest_str += fmt::Format("%02x", npdrm.xordigest[i]); } - LOGF_NOTICE(LOADER, "Magic: 0x%08x", npdrm.magic); - LOGF_NOTICE(LOADER, "Unknown1: 0x%08x", npdrm.unknown1); - LOGF_NOTICE(LOADER, "License: 0x%08x", npdrm.license); - LOGF_NOTICE(LOADER, "Type: 0x%08x", npdrm.type); - LOGF_NOTICE(LOADER, "ContentID: %s", contentid_str.c_str()); - LOGF_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); - LOGF_NOTICE(LOADER, "Inverse digest: %s", invdigest_str.c_str()); - LOGF_NOTICE(LOADER, "XOR digest: %s", xordigest_str.c_str()); - LOGF_NOTICE(LOADER, "Unknown2: 0x%llx", npdrm.unknown2); - LOGF_NOTICE(LOADER, "Unknown3: 0x%llx", npdrm.unknown3); + LOG_NOTICE(LOADER, "Magic: 0x%08x", npdrm.magic); + LOG_NOTICE(LOADER, "Unknown1: 0x%08x", npdrm.unknown1); + LOG_NOTICE(LOADER, "License: 0x%08x", npdrm.license); + LOG_NOTICE(LOADER, "Type: 0x%08x", npdrm.type); + LOG_NOTICE(LOADER, "ContentID: %s", contentid_str.c_str()); + LOG_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); + LOG_NOTICE(LOADER, "Inverse digest: %s", invdigest_str.c_str()); + LOG_NOTICE(LOADER, "XOR digest: %s", xordigest_str.c_str()); + LOG_NOTICE(LOADER, "Unknown2: 0x%llx", npdrm.unknown2); + LOG_NOTICE(LOADER, "Unknown3: 0x%llx", npdrm.unknown3); } } }; @@ -281,10 +281,10 @@ struct MetadataInfo iv_pad_str += fmt::Format("%02x", iv_pad[i]); } - LOGF_NOTICE(LOADER, "Key: %s", key_str.c_str()); - LOGF_NOTICE(LOADER, "Key pad: %s", key_pad_str.c_str()); - LOGF_NOTICE(LOADER, "IV: %s", iv_str.c_str()); - LOGF_NOTICE(LOADER, "IV pad: %s", iv_pad_str.c_str()); + LOG_NOTICE(LOADER, "Key: %s", key_str.c_str()); + LOG_NOTICE(LOADER, "Key pad: %s", key_pad_str.c_str()); + LOG_NOTICE(LOADER, "IV: %s", iv_str.c_str()); + LOG_NOTICE(LOADER, "IV pad: %s", iv_pad_str.c_str()); } }; @@ -320,13 +320,13 @@ struct MetadataHeader void Show() { - LOGF_NOTICE(LOADER, "Signature input length: 0x%llx", signature_input_length); - LOGF_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); - LOGF_NOTICE(LOADER, "Section count: 0x%08x", section_count); - LOGF_NOTICE(LOADER, "Key count: 0x%08x", key_count); - LOGF_NOTICE(LOADER, "Optional header size: 0x%08x", opt_header_size); - LOGF_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); - LOGF_NOTICE(LOADER, "Unknown3: 0x%08x", unknown3); + LOG_NOTICE(LOADER, "Signature input length: 0x%llx", signature_input_length); + LOG_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); + LOG_NOTICE(LOADER, "Section count: 0x%08x", section_count); + LOG_NOTICE(LOADER, "Key count: 0x%08x", key_count); + LOG_NOTICE(LOADER, "Optional header size: 0x%08x", opt_header_size); + LOG_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); + LOG_NOTICE(LOADER, "Unknown3: 0x%08x", unknown3); } }; @@ -371,16 +371,16 @@ struct MetadataSectionHeader void Show() { - LOGF_NOTICE(LOADER, "Data offset: 0x%llx", data_offset); - LOGF_NOTICE(LOADER, "Data size: 0x%llx", data_size); - LOGF_NOTICE(LOADER, "Type: 0x%08x", type); - LOGF_NOTICE(LOADER, "Program index: 0x%08x", program_idx); - LOGF_NOTICE(LOADER, "Hashed: 0x%08x", hashed); - LOGF_NOTICE(LOADER, "SHA1 index: 0x%08x", sha1_idx); - LOGF_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); - LOGF_NOTICE(LOADER, "Key index: 0x%08x", key_idx); - LOGF_NOTICE(LOADER, "IV index: 0x%08x", iv_idx); - LOGF_NOTICE(LOADER, "Compressed: 0x%08x", compressed); + LOG_NOTICE(LOADER, "Data offset: 0x%llx", data_offset); + LOG_NOTICE(LOADER, "Data size: 0x%llx", data_size); + LOG_NOTICE(LOADER, "Type: 0x%08x", type); + LOG_NOTICE(LOADER, "Program index: 0x%08x", program_idx); + LOG_NOTICE(LOADER, "Hashed: 0x%08x", hashed); + LOG_NOTICE(LOADER, "SHA1 index: 0x%08x", sha1_idx); + LOG_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); + LOG_NOTICE(LOADER, "Key index: 0x%08x", key_idx); + LOG_NOTICE(LOADER, "IV index: 0x%08x", iv_idx); + LOG_NOTICE(LOADER, "Compressed: 0x%08x", compressed); } }; diff --git a/rpcs3/Emu/ARMv7/ARMv7Interpreter.h b/rpcs3/Emu/ARMv7/ARMv7Interpreter.h index 5a820cb512..71aecf535d 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Interpreter.h +++ b/rpcs3/Emu/ARMv7/ARMv7Interpreter.h @@ -316,7 +316,7 @@ protected: void UNK(const u16 code0, const u16 code1) { - LOGF_ERROR(HLE, "Unknown/Illegal opcode! (0x%04x : 0x%04x)", code0, code1); + LOG_ERROR(HLE, "Unknown/Illegal opcode! (0x%04x : 0x%04x)", code0, code1); Emu.Pause(); } }; diff --git a/rpcs3/Emu/Audio/AL/OpenALThread.cpp b/rpcs3/Emu/Audio/AL/OpenALThread.cpp index a7111511be..705df90f71 100644 --- a/rpcs3/Emu/Audio/AL/OpenALThread.cpp +++ b/rpcs3/Emu/Audio/AL/OpenALThread.cpp @@ -18,7 +18,7 @@ void printAlError(ALenum err, const char* situation) { if(err != AL_NO_ERROR) { - LOGF_ERROR(HLE, "%s: OpenAL error 0x%04x", situation, err); + LOG_ERROR(HLE, "%s: OpenAL error 0x%04x", situation, err); Emu.Pause(); } } @@ -27,7 +27,7 @@ void printAlcError(ALCenum err, const char* situation) { if(err != ALC_NO_ERROR) { - LOGF_ERROR(HLE, "%s: OpenALC error 0x%04x", situation, err); + LOG_ERROR(HLE, "%s: OpenALC error 0x%04x", situation, err); Emu.Pause(); } } @@ -137,7 +137,7 @@ void OpenALThread::AddData(const void* src, ALsizei size) int bsize = size < m_buffer_size ? size : m_buffer_size; if (!AddBlock(buffer, bsize, bsrc)) - LOGF_ERROR(HLE, "OpenALThread::AddBlock: invalid block size: %d", bsize); + LOG_ERROR(HLE, "OpenALThread::AddBlock: invalid block size: %d", bsize); alSourceQueueBuffers(m_source, 1, &buffer); checkForAlError("alSourceQueueBuffers"); diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 74934b68eb..b36970e4cf 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -149,7 +149,7 @@ void CPUThread::SetBranch(const u64 pc, bool record_branch) { if(!Memory.IsGoodAddr(m_offset + pc)) { - LOGF_ERROR(PPU, "%s branch error: bad address 0x%llx #pc: 0x%llx", GetFName().c_str(), m_offset + pc, m_offset + PC); + LOG_ERROR(PPU, "%s branch error: bad address 0x%llx #pc: 0x%llx", GetFName().c_str(), m_offset + pc, m_offset + PC); Emu.Pause(); } @@ -282,7 +282,7 @@ void CPUThread::ExecOnce() void CPUThread::Task() { - if (Ini.HLELogging.GetValue()) LOGF_NOTICE(PPU, "%s enter", CPUThread::GetFName().c_str()); + if (Ini.HLELogging.GetValue()) LOG_NOTICE(PPU, "%s enter", CPUThread::GetFName().c_str()); const std::vector& bp = Emu.GetBreakPoints(); @@ -333,18 +333,18 @@ void CPUThread::Task() } catch(const std::string& e) { - LOGF_ERROR(PPU, "Exception: %s", e.c_str()); + LOG_ERROR(PPU, "Exception: %s", e.c_str()); } catch(const char* e) { - LOGF_ERROR(PPU, "Exception: %s", e); + LOG_ERROR(PPU, "Exception: %s", e); } catch(int exitcode) { - LOGF_SUCCESS(PPU, "Exit Code: %d", exitcode); + LOG_SUCCESS(PPU, "Exit Code: %d", exitcode); } - if (Ini.HLELogging.GetValue()) LOGF_NOTICE(PPU, "%s leave", CPUThread::GetFName().c_str()); + if (Ini.HLELogging.GetValue()) LOG_NOTICE(PPU, "%s leave", CPUThread::GetFName().c_str()); } s64 CPUThread::ExecAsCallback(u64 pc, bool wait, u64 a1, u64 a2, u64 a3, u64 a4) // not multithread-safe @@ -353,7 +353,7 @@ s64 CPUThread::ExecAsCallback(u64 pc, bool wait, u64 a1, u64 a2, u64 a3, u64 a4) { if (Emu.IsStopped()) { - LOGF_WARNING(PPU, "ExecAsCallback() aborted"); + LOG_WARNING(PPU, "ExecAsCallback() aborted"); return CELL_ECANCELED; // doesn't mean anything } Sleep(1); @@ -379,7 +379,7 @@ s64 CPUThread::ExecAsCallback(u64 pc, bool wait, u64 a1, u64 a2, u64 a3, u64 a4) { if (Emu.IsStopped()) { - LOGF_WARNING(PPU, "ExecAsCallback(wait=%s) aborted", wait ? "true" : "false"); + LOG_WARNING(PPU, "ExecAsCallback(wait=%s) aborted", wait ? "true" : "false"); return CELL_EABORT; // doesn't mean anything } Sleep(1); diff --git a/rpcs3/Emu/Cell/MFC.h b/rpcs3/Emu/Cell/MFC.h index f3d9d9ebee..f85e4eb9b3 100644 --- a/rpcs3/Emu/Cell/MFC.h +++ b/rpcs3/Emu/Cell/MFC.h @@ -183,7 +183,7 @@ struct DMAC return true; default: - LOGF_ERROR(HLE, "DMAC::ProcessCmd(): Unknown DMA cmd."); + LOG_ERROR(HLE, "DMAC::ProcessCmd(): Unknown DMA cmd."); return true; } } @@ -268,11 +268,11 @@ struct DMAC u16 tag = (u16)size_tag; u16 size = size_tag >> 16; - LOGF_WARNING(HLE, "RawSPU DMA %s:", op == MFC_PUT_CMD ? "PUT" : "GET"); - LOGF_WARNING(HLE, "*** lsa = 0x%x", lsa); - LOGF_WARNING(HLE, "*** ea = 0x%llx", ea); - LOGF_WARNING(HLE, "*** tag = 0x%x", tag); - LOGF_WARNING(HLE, "*** size = 0x%x", size); + LOG_WARNING(HLE, "RawSPU DMA %s:", op == MFC_PUT_CMD ? "PUT" : "GET"); + LOG_WARNING(HLE, "*** lsa = 0x%x", lsa); + LOG_WARNING(HLE, "*** ea = 0x%llx", ea); + LOG_WARNING(HLE, "*** tag = 0x%x", tag); + LOG_WARNING(HLE, "*** size = 0x%x", size); LOG_WARNING(HLE, " "); MFC_CMDStatus.SetValue(dmac.Cmd(cmd, tag, lsa, ea, size)); @@ -280,7 +280,7 @@ struct DMAC break; default: - LOGF_ERROR(HLE, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x)", op, cmd); + LOG_ERROR(HLE, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x)", op, cmd); break; } } diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 84aafcd45f..74a4ec9f61 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -70,16 +70,16 @@ private: if(Ini.HLELogging.GetValue()) { - LOGF_WARNING(PPU, "SysCall[0x%llx ('%s')] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], SysCalls::GetHLEFuncName(CPU.GPR[11]).c_str(), CPU.GPR[3], CPU.PC); + LOG_WARNING(PPU, "SysCall[0x%llx ('%s')] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], SysCalls::GetHLEFuncName(CPU.GPR[11]).c_str(), CPU.GPR[3], CPU.PC); } /*else if ((s64)CPU.GPR[3] < 0) // probably, error code { - LOGF_ERROR(PPU, "SysCall[0x%llx] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); + LOG_ERROR(PPU, "SysCall[0x%llx] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); if(CPU.GPR[11] > 1024) SysCalls::DoFunc(CPU.GPR[11]); }*/ #ifdef HLE_CALL_DEBUG - LOGF_NOTICE(PPU, "SysCall[%lld] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); + LOG_NOTICE(PPU, "SysCall[%lld] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); #endif } @@ -2097,7 +2097,7 @@ private: Emu.GetSFuncManager().StaticExecute(CPU.GPR[11]); if (Ini.HLELogging.GetValue()) { - LOGF_NOTICE(PPU, "'%s' done with code[0x%llx]! #pc: 0x%llx", + LOG_NOTICE(PPU, "'%s' done with code[0x%llx]! #pc: 0x%llx", Emu.GetSFuncManager()[CPU.GPR[11]]->name, CPU.GPR[3], CPU.PC); } break; @@ -3995,20 +3995,20 @@ private: void UNK(const std::string& err, bool pause = true) { - LOGF_ERROR(PPU, err + fmt::Format(" #pc: 0x%llx", CPU.PC)); + LOG_ERROR(PPU, err + fmt::Format(" #pc: 0x%llx", CPU.PC)); if(!pause) return; Emu.Pause(); - for(uint i=0; i<32; ++i) LOGF_NOTICE(PPU, "r%d = 0x%llx", i, CPU.GPR[i]); - for(uint i=0; i<32; ++i) LOGF_NOTICE(PPU, "f%d = %llf", i, CPU.FPR[i]); - for(uint i=0; i<32; ++i) LOGF_NOTICE(PPU, "v%d = 0x%s [%s]", i, CPU.VPR[i].ToString(true).c_str(), CPU.VPR[i].ToString().c_str()); - LOGF_NOTICE(PPU, "CR = 0x%08x", CPU.CR); - LOGF_NOTICE(PPU, "LR = 0x%llx", CPU.LR); - LOGF_NOTICE(PPU, "CTR = 0x%llx", CPU.CTR); - LOGF_NOTICE(PPU, "XER = 0x%llx [CA=%lld | OV=%lld | SO=%lld]", CPU.XER, fmt::by_value(CPU.XER.CA), fmt::by_value(CPU.XER.OV), fmt::by_value(CPU.XER.SO)); - LOGF_NOTICE(PPU, "FPSCR = 0x%x " + for(uint i=0; i<32; ++i) LOG_NOTICE(PPU, "r%d = 0x%llx", i, CPU.GPR[i]); + for(uint i=0; i<32; ++i) LOG_NOTICE(PPU, "f%d = %llf", i, CPU.FPR[i]); + for(uint i=0; i<32; ++i) LOG_NOTICE(PPU, "v%d = 0x%s [%s]", i, CPU.VPR[i].ToString(true).c_str(), CPU.VPR[i].ToString().c_str()); + LOG_NOTICE(PPU, "CR = 0x%08x", CPU.CR); + LOG_NOTICE(PPU, "LR = 0x%llx", CPU.LR); + LOG_NOTICE(PPU, "CTR = 0x%llx", CPU.CTR); + LOG_NOTICE(PPU, "XER = 0x%llx [CA=%lld | OV=%lld | SO=%lld]", CPU.XER, fmt::by_value(CPU.XER.CA), fmt::by_value(CPU.XER.OV), fmt::by_value(CPU.XER.SO)); + LOG_NOTICE(PPU, "FPSCR = 0x%x " "[RN=%d | NI=%d | XE=%d | ZE=%d | UE=%d | OE=%d | VE=%d | " "VXCVI=%d | VXSQRT=%d | VXSOFT=%d | FPRF=%d | " "FI=%d | FR=%d | VXVC=%d | VXIMZ=%d | " diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 4e2396d668..e5b8e8bc47 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -163,7 +163,7 @@ void PPUThread::DoRun() break; default: - LOGF_ERROR(PPU, "Invalid CPU decoder mode: %d", Ini.CPUDecoderMode.GetValue()); + LOG_ERROR(PPU, "Invalid CPU decoder mode: %d", Ini.CPUDecoderMode.GetValue()); Emu.Pause(); } } diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index fe3d115739..2a0097cc3b 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -38,7 +38,7 @@ bool RawSPUThread::Read8(const u64 addr, u8* value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read8(0x%x)", m_index, offset); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read8(0x%x)", m_index, offset); Emu.Pause(); return false; } @@ -51,7 +51,7 @@ bool RawSPUThread::Read16(const u64 addr, u16* value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read16(0x%x)", m_index, offset); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read16(0x%x)", m_index, offset); Emu.Pause(); return false; } @@ -66,39 +66,39 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; switch(offset) { - case MFC_LSA_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_LSA)", m_index); *value = MFC2.LSA.GetValue(); break; - case MFC_EAH_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAH)", m_index); *value = MFC2.EAH.GetValue(); break; - case MFC_EAL_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAL)", m_index); *value = MFC2.EAL.GetValue(); break; - case MFC_Size_Tag_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_Size_Tag)", m_index); *value = MFC2.Size_Tag.GetValue(); break; - case MFC_CMDStatus_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_CMDStatus)", m_index); *value = MFC2.CMDStatus.GetValue(); break; + case MFC_LSA_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_LSA)", m_index); *value = MFC2.LSA.GetValue(); break; + case MFC_EAH_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAH)", m_index); *value = MFC2.EAH.GetValue(); break; + case MFC_EAL_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAL)", m_index); *value = MFC2.EAL.GetValue(); break; + case MFC_Size_Tag_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_Size_Tag)", m_index); *value = MFC2.Size_Tag.GetValue(); break; + case MFC_CMDStatus_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_CMDStatus)", m_index); *value = MFC2.CMDStatus.GetValue(); break; case MFC_QStatus_offs: - LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_QStatus)", m_index); + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_QStatus)", m_index); *value = MFC2.QStatus.GetValue(); break; - case Prxy_QueryType_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryType)", m_index); *value = Prxy.QueryType.GetValue(); break; - case Prxy_QueryMask_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryMask)", m_index); *value = Prxy.QueryMask.GetValue(); break; - case Prxy_TagStatus_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_TagStatus)", m_index); *value = Prxy.TagStatus.GetValue(); break; + case Prxy_QueryType_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryType)", m_index); *value = Prxy.QueryType.GetValue(); break; + case Prxy_QueryMask_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryMask)", m_index); *value = Prxy.QueryMask.GetValue(); break; + case Prxy_TagStatus_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_TagStatus)", m_index); *value = Prxy.TagStatus.GetValue(); break; case SPU_Out_MBox_offs: - //LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Out_MBox)", m_index); + //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Out_MBox)", m_index); SPU.Out_MBox.PopUncond(*value); //if Out_MBox is empty yet, the result will be undefined break; - case SPU_In_MBox_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); while(!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) Sleep(1); break; - case SPU_MBox_Status_offs: //LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_MBox_Status)", m_index); + case SPU_In_MBox_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); while(!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) Sleep(1); break; + case SPU_MBox_Status_offs: //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_MBox_Status)", m_index); //SPU.MBox_Status.SetValue(SPU.Out_MBox.GetCount() ? SPU.MBox_Status.GetValue() | 1 : SPU.MBox_Status.GetValue() & ~1); SPU.MBox_Status.SetValue((SPU.Out_MBox.GetCount() & 0xff) | (SPU.In_MBox.GetFreeCount() << 8)); *value = SPU.MBox_Status.GetValue(); break; - case SPU_RunCntl_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); *value = SPU.RunCntl.GetValue(); break; + case SPU_RunCntl_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); *value = SPU.RunCntl.GetValue(); break; case SPU_Status_offs: - //LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Status)", m_index); + //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Status)", m_index); *value = SPU.Status.GetValue(); break; - case SPU_NPC_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_NPC)", m_index); *value = SPU.NPC.GetValue(); break; - case SPU_RdSigNotify1_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify1)", m_index); *value = SPU.SNR[0].GetValue(); break; - case SPU_RdSigNotify2_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify2)", m_index); *value = SPU.SNR[1].GetValue(); break; + case SPU_NPC_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_NPC)", m_index); *value = SPU.NPC.GetValue(); break; + case SPU_RdSigNotify1_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify1)", m_index); *value = SPU.SNR[0].GetValue(); break; + case SPU_RdSigNotify2_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify2)", m_index); *value = SPU.SNR[1].GetValue(); break; default: - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(0x%x)", m_index, offset); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(0x%x)", m_index, offset); Emu.Pause(); break; } @@ -114,7 +114,7 @@ bool RawSPUThread::Read64(const u64 addr, u64* value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read64(0x%x)", m_index, offset); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read64(0x%x)", m_index, offset); Emu.Pause(); return false; } @@ -127,7 +127,7 @@ bool RawSPUThread::Read128(const u64 addr, u128* value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Read128(0x%x)", m_index, offset); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read128(0x%x)", m_index, offset); Emu.Pause(); return false; } @@ -140,7 +140,7 @@ bool RawSPUThread::Write8(const u64 addr, const u8 value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write8(0x%x, 0x%x)", m_index, offset, value); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write8(0x%x, 0x%x)", m_index, offset, value); Emu.Pause(); return false; } @@ -153,7 +153,7 @@ bool RawSPUThread::Write16(const u64 addr, const u16 value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write16(0x%x, 0x%x)", m_index, offset, value); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write16(0x%x, 0x%x)", m_index, offset, value); Emu.Pause(); return false; } @@ -177,20 +177,20 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) MFC2.CMDStatus.SetValue(value); EnqMfcCmd(MFC2); break; - case MFC_QStatus_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(MFC_QStatus, 0x%x)", m_index, value); MFC2.QStatus.SetValue(value); break; + case MFC_QStatus_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(MFC_QStatus, 0x%x)", m_index, value); MFC2.QStatus.SetValue(value); break; case Prxy_QueryType_offs: { - LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryType, 0x%x)", m_index, value); + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryType, 0x%x)", m_index, value); Prxy.QueryType.SetValue(value); switch(value) { case 2: - LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Prxy Query Immediate.", m_index); + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Prxy Query Immediate.", m_index); break; default: - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Unknown Prxy Query Type. (prxy_query=0x%x)", m_index, value); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Unknown Prxy Query Type. (prxy_query=0x%x)", m_index, value); break; } @@ -198,22 +198,22 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) MFC2.QStatus.SetValue(Prxy.QueryMask.GetValue()); } break; - case Prxy_QueryMask_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryMask, 0x%x)", m_index, value); Prxy.QueryMask.SetValue(value); break; - case Prxy_TagStatus_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_TagStatus, 0x%x)", m_index, value); Prxy.TagStatus.SetValue(value); break; - case SPU_Out_MBox_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); while(!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) Sleep(1); break; + case Prxy_QueryMask_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryMask, 0x%x)", m_index, value); Prxy.QueryMask.SetValue(value); break; + case Prxy_TagStatus_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_TagStatus, 0x%x)", m_index, value); Prxy.TagStatus.SetValue(value); break; + case SPU_Out_MBox_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); while(!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) Sleep(1); break; case SPU_In_MBox_offs: - //LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_In_MBox, 0x%x)", m_index, value); + //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_In_MBox, 0x%x)", m_index, value); SPU.In_MBox.PushUncond(value); //if In_MBox is already full, the last message will be overwritten break; - case SPU_MBox_Status_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); SPU.MBox_Status.SetValue(value); break; - case SPU_RunCntl_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RunCntl, 0x%x)", m_index, value); SPU.RunCntl.SetValue(value); break; - case SPU_Status_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Status, 0x%x)", m_index, value); SPU.Status.SetValue(value); break; - case SPU_NPC_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_NPC, 0x%x)", m_index, value); SPU.NPC.SetValue(value); break; - case SPU_RdSigNotify1_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify1, 0x%x)", m_index, value); SPU.SNR[0].SetValue(value); break; - case SPU_RdSigNotify2_offs: LOGF_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify2, 0x%x)", m_index, value); SPU.SNR[1].SetValue(value); break; + case SPU_MBox_Status_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); SPU.MBox_Status.SetValue(value); break; + case SPU_RunCntl_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RunCntl, 0x%x)", m_index, value); SPU.RunCntl.SetValue(value); break; + case SPU_Status_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Status, 0x%x)", m_index, value); SPU.Status.SetValue(value); break; + case SPU_NPC_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_NPC, 0x%x)", m_index, value); SPU.NPC.SetValue(value); break; + case SPU_RdSigNotify1_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify1, 0x%x)", m_index, value); SPU.SNR[0].SetValue(value); break; + case SPU_RdSigNotify2_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify2, 0x%x)", m_index, value); SPU.SNR[1].SetValue(value); break; default: - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(0x%x, 0x%x)", m_index, offset, value); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(0x%x, 0x%x)", m_index, offset, value); Emu.Pause(); break; } @@ -229,7 +229,7 @@ bool RawSPUThread::Write64(const u64 addr, const u64 value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write64(0x%x, 0x%llx)", m_index, offset, value); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write64(0x%x, 0x%llx)", m_index, offset, value); Emu.Pause(); return false; } @@ -242,7 +242,7 @@ bool RawSPUThread::Write128(const u64 addr, const u128 value) } u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOGF_ERROR(Log::SPU, "RawSPUThread[%d]: Write128(0x%x, 0x%llx_%llx)", m_index, offset, value._u64[1], value._u64[0]); + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write128(0x%x, 0x%llx_%llx)", m_index, offset, value._u64[1], value._u64[0]); Emu.Pause(); return false; } @@ -260,7 +260,7 @@ u32 RawSPUThread::GetIndex() const void RawSPUThread::Task() { - if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "%s enter", PPCThread::GetFName().c_str()); + if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "%s enter", PPCThread::GetFName().c_str()); const std::vector& bp = Emu.GetBreakPoints(); @@ -312,7 +312,7 @@ void RawSPUThread::Task() is_last_paused = false; PC = SPU.NPC.GetValue(); SPU.Status.SetValue(SPU_STATUS_RUNNING); - LOGF_WARNING(Log::SPU, "Starting RawSPU..."); + LOG_WARNING(Log::SPU, "Starting RawSPU..."); } Step(); @@ -336,12 +336,12 @@ void RawSPUThread::Task() } catch(const std::string& e) { - LOGF_ERROR(Log::SPU, "Exception: %s", e.c_str()); + LOG_ERROR(Log::SPU, "Exception: %s", e.c_str()); } catch(const char* e) { - LOGF_ERROR(Log::SPU, "Exception: %s", e); + LOG_ERROR(Log::SPU, "Exception: %s", e); } - if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "%s leave", PPCThread::GetFName().c_str()); + if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "%s leave", PPCThread::GetFName().c_str()); } diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index 2161b4f7f6..32fa60e91c 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -18,9 +18,9 @@ #define MEM_AND_REG_HASH() \ unsigned char mem_h[20]; sha1(&Memory[CPU.dmac.ls_offset], 256*1024, mem_h); \ unsigned char reg_h[20]; sha1((const unsigned char*)CPU.GPR, sizeof(CPU.GPR), reg_h); \ - LOGF_NOTICE(Log::SPU, "Mem hash: 0x%llx, reg hash: 0x%llx", *(u64*)mem_h, *(u64*)reg_h); + LOG_NOTICE(Log::SPU, "Mem hash: 0x%llx, reg hash: 0x%llx", *(u64*)mem_h, *(u64*)reg_h); -#define LOG2_OPCODE(...) //MEM_AND_REG_HASH(); LOGF_NOTICE(Log::SPU, __FUNCTION__ "(): " __VA_ARGS__) +#define LOG2_OPCODE(...) //MEM_AND_REG_HASH(); LOG_NOTICE(Log::SPU, __FUNCTION__ "(): " __VA_ARGS__) #define LOG5_OPCODE(...) /// @@ -339,7 +339,7 @@ private: u32 lsa = (CPU.GPR[ra]._u32[3] + CPU.GPR[rb]._u32[3]) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - LOGF_ERROR(Log::SPU, "STQX: bad lsa (0x%x)", lsa); + LOG_ERROR(Log::SPU, "STQX: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -438,7 +438,7 @@ private: if(!CPU.IsGoodLSA(lsa)) { - LOGF_ERROR(Log::SPU, "LQX: bad lsa (0x%x)", lsa); + LOG_ERROR(Log::SPU, "LQX: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1126,7 +1126,7 @@ private: u32 lsa = (i16 << 2) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - LOGF_ERROR(Log::SPU, "STQA: bad lsa (0x%x)", lsa); + LOG_ERROR(Log::SPU, "STQA: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1177,7 +1177,7 @@ private: u32 lsa = branchTarget(CPU.PC, i16) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - LOGF_ERROR(Log::SPU, "STQR: bad lsa (0x%x)", lsa); + LOG_ERROR(Log::SPU, "STQR: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1195,7 +1195,7 @@ private: u32 lsa = (i16 << 2) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - LOGF_ERROR(Log::SPU, "LQA: bad lsa (0x%x)", lsa); + LOG_ERROR(Log::SPU, "LQA: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1245,7 +1245,7 @@ private: u32 lsa = branchTarget(CPU.PC, i16) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - LOGF_ERROR(Log::SPU, "LQR: bad lsa (0x%x)", lsa); + LOG_ERROR(Log::SPU, "LQR: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1334,11 +1334,11 @@ private: const u32 lsa = (CPU.GPR[ra]._i32[3] + i10) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - LOGF_ERROR(Log::SPU, "STQD: bad lsa (0x%x)", lsa); + LOG_ERROR(Log::SPU, "STQD: bad lsa (0x%x)", lsa); Emu.Pause(); return; } - //LOGF_NOTICE(Log::SPU, "STQD(lsa=0x%x): GPR[%d] (0x%llx%llx)", lsa, rt, CPU.GPR[rt]._u64[1], CPU.GPR[rt]._u64[0]); + //LOG_NOTICE(Log::SPU, "STQD(lsa=0x%x): GPR[%d] (0x%llx%llx)", lsa, rt, CPU.GPR[rt]._u64[1], CPU.GPR[rt]._u64[0]); CPU.WriteLS128(lsa, CPU.GPR[rt]._u128); } void LQD(u32 rt, s32 i10, u32 ra) //i10 is shifted left by 4 while decoding @@ -1346,7 +1346,7 @@ private: const u32 lsa = (CPU.GPR[ra]._i32[3] + i10) & 0x3fff0; if(!CPU.IsGoodLSA(lsa)) { - LOGF_ERROR(Log::SPU, "LQD: bad lsa (0x%x)", lsa); + LOG_ERROR(Log::SPU, "LQD: bad lsa (0x%x)", lsa); Emu.Pause(); return; } @@ -1540,8 +1540,8 @@ private: void UNK(const std::string& err) { - LOGF_ERROR(Log::SPU, err + fmt::Format(" #pc: 0x%x", CPU.PC)); + LOG_ERROR(Log::SPU, err + fmt::Format(" #pc: 0x%x", CPU.PC)); Emu.Pause(); - for(uint i=0; i<128; ++i) LOGF_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); + for(uint i=0; i<128; ++i) LOG_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); } }; diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 382f064b0e..7e4501feec 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -3845,7 +3845,7 @@ private: void UNK(const std::string& err) { - LOGF_ERROR(Log::SPU, err + fmt::Format(" #pc: 0x%x", CPU.PC)); + LOG_ERROR(Log::SPU, err + fmt::Format(" #pc: 0x%x", CPU.PC)); c.mov(cpu_qword(PC), (u32)CPU.PC); do_finalize = true; Emu.Pause(); diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 2d990c5d55..85d106e804 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -164,7 +164,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) if (!pos) { - LOGF_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(): ls_addr = 0"); + LOG_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(): ls_addr = 0"); Emu.Pause(); return 0; } @@ -185,7 +185,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) if (!is_valid) { // TODO - LOGF_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(ls_addr=0x%x): code has changed", pos * sizeof(u32)); + LOG_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(ls_addr=0x%x): code has changed", pos * sizeof(u32)); Emu.Pause(); return 0; } @@ -198,7 +198,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) did_compile = true; if (entry[pos].valid == 0) { - LOGF_ERROR(Log::SPU, "SPURecompilerCore::Compile(ls_addr=0x%x): branch to 0x0 opcode", pos * sizeof(u32)); + LOG_ERROR(Log::SPU, "SPURecompilerCore::Compile(ls_addr=0x%x): branch to 0x0 opcode", pos * sizeof(u32)); Emu.Pause(); return 0; } @@ -206,7 +206,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) if (!entry[pos].pointer) { - LOGF_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(ls_addr=0x%x): compilation failed", pos * sizeof(u32)); + LOG_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(ls_addr=0x%x): compilation failed", pos * sizeof(u32)); Emu.Pause(); return 0; } @@ -223,7 +223,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) //if (pos == 0x19c >> 2) { //Emu.Pause(); - //for (uint i = 0; i < 128; ++i) LOGF_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); + //for (uint i = 0; i < 128; ++i) LOG_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); } } @@ -243,7 +243,7 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) //if (pos == 0x340 >> 2) { //Emu.Pause(); - //for (uint i = 0; i < 128; ++i) LOGF_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); + //for (uint i = 0; i < 128; ++i) LOG_NOTICE(Log::SPU, "r%d = 0x%s", i, CPU.GPR[i].ToString().c_str()); } } diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 9e6acd5827..c8fa04746b 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -86,7 +86,7 @@ void SPUThread::DoRun() break; default: - LOGF_ERROR(Log::SPU, "Invalid SPU decoder mode: %d", Ini.SPUDecoderMode.GetValue()); + LOG_ERROR(Log::SPU, "Invalid SPU decoder mode: %d", Ini.SPUDecoderMode.GetValue()); Emu.Pause(); } } diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index a28f8e906b..dbf9a8ec8f 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -211,7 +211,7 @@ public: return this->low >> 22 & 0x3; default: - LOGF_ERROR(SPU, "Unexpected slice value in FPSCR::checkSliceRounding(): %d", slice); + LOG_ERROR(SPU, "Unexpected slice value in FPSCR::checkSliceRounding(): %d", slice); return 0; } } @@ -599,7 +599,7 @@ public: u32 num = (ea & SYS_SPU_THREAD_BASE_MASK) / SYS_SPU_THREAD_OFFSET; // thread number in group if (num >= group->list.size() || !group->list[num]) { - LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): invalid thread", ea); + LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): invalid thread", ea); return false; } @@ -618,13 +618,13 @@ public: } else { - LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx, size=%d, cmd=0x%x): invalid command", ea, size, cmd); + LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx, size=%d, cmd=0x%x): invalid command", ea, size, cmd); return false; } } else { - LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): group not set", ea); + LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): group not set", ea); return false; } } @@ -664,7 +664,7 @@ public: } else { - LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): PUT* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); + LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): PUT* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); return false; // TODO: page fault (?) } } @@ -677,7 +677,7 @@ public: } else { - LOGF_ERROR(Log::SPU, "DMAC::ProcessCmd(): GET* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); + LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): GET* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); return false; // TODO: page fault (?) } } @@ -725,7 +725,7 @@ public: u32 size = rec->ts; if (size < 16 && size != 1 && size != 2 && size != 4 && size != 8) { - LOGF_ERROR(Log::SPU, "DMA List: invalid transfer size(%d)", size); + LOG_ERROR(Log::SPU, "DMA List: invalid transfer size(%d)", size); return; } @@ -737,7 +737,7 @@ public: } if (Ini.HLELogging.GetValue() || rec->s) - LOGF_NOTICE(Log::SPU, "*** list element(%d/%d): s = 0x%x, ts = 0x%x, low ea = 0x%x (lsa = 0x%x)", + LOG_NOTICE(Log::SPU, "*** list element(%d/%d): s = 0x%x, ts = 0x%x, low ea = 0x%x (lsa = 0x%x)", i, list_size, (u16)rec->s, (u16)rec->ts, (u32)rec->ea, lsa | (addr & 0xf)); lsa += std::max(size, (u32)16); @@ -748,7 +748,7 @@ public: if (StallList[tag].MFCArgs) { - LOGF_ERROR(Log::SPU, "DMA List: existing stalled list found (tag=%d)", tag); + LOG_ERROR(Log::SPU, "DMA List: existing stalled list found (tag=%d)", tag); } StallList[tag].MFCArgs = &MFCArgs; StallList[tag].cmd = cmd; @@ -780,7 +780,7 @@ public: case MFC_PUTR_CMD: // ??? case MFC_GET_CMD: { - if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", + if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", (op & MFC_PUT_CMD ? "PUT" : "GET"), (op & MFC_RESULT_MASK ? "R" : ""), (op & MFC_BARRIER_MASK ? "B" : ""), @@ -795,7 +795,7 @@ public: case MFC_PUTRL_CMD: // ??? case MFC_GETL_CMD: { - if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, list = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", + if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, list = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", (op & MFC_PUT_CMD ? "PUT" : "GET"), (op & MFC_RESULT_MASK ? "RL" : "L"), (op & MFC_BARRIER_MASK ? "B" : ""), @@ -811,7 +811,7 @@ public: case MFC_PUTLLUC_CMD: case MFC_PUTQLLUC_CMD: { - if (Ini.HLELogging.GetValue() || size != 128) LOGF_NOTICE(Log::SPU, "DMA %s: lsa=0x%x, ea = 0x%llx, (tag) = 0x%x, (size) = 0x%x, cmd = 0x%x", + if (Ini.HLELogging.GetValue() || size != 128) LOG_NOTICE(Log::SPU, "DMA %s: lsa=0x%x, ea = 0x%llx, (tag) = 0x%x, (size) = 0x%x, cmd = 0x%x", (op == MFC_GETLLAR_CMD ? "GETLLAR" : op == MFC_PUTLLC_CMD ? "PUTLLC" : op == MFC_PUTLLUC_CMD ? "PUTLLUC" : "PUTQLLUC"), @@ -885,7 +885,7 @@ public: } else // full 64 bit { - LOGF_ERROR(Log::SPU, "MFC_PUTLLC_CMD: TODO: 64bit compare and swap"); + LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: TODO: 64bit compare and swap"); Emu.Pause(); Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); }*/ @@ -894,7 +894,7 @@ public: else { ProcessCmd(MFC_PUT_CMD, tag, lsa, ea, 128); - LOGF_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Reservation Error: impossibru (~ 16x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Reservation Error: impossibru (~ 16x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", changed, mask, op, cmd, lsa, ea, tag, size); Emu.Pause(); Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); @@ -929,7 +929,7 @@ public: break; default: - LOGF_ERROR( Log::SPU, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + LOG_ERROR( Log::SPU, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", op, cmd, lsa, ea, tag, size); break; } @@ -949,7 +949,7 @@ public: return count; case SPU_WrOutIntrMbox: - LOGF_WARNING(Log::SPU, "GetChannelCount(%s) = 0", spu_ch_name[ch]); + LOG_WARNING(Log::SPU, "GetChannelCount(%s) = 0", spu_ch_name[ch]); return 0; case MFC_RdTagStat: @@ -971,7 +971,7 @@ public: return Prxy.AtomicStat.GetCount(); default: - LOGF_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", + LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); break; } @@ -988,7 +988,7 @@ public: case SPU_WrOutIntrMbox: if (!group) // if RawSPU { - if (Ini.HLELogging.GetValue()) LOGF_NOTICE(Log::SPU, "SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); + if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); SPU.Out_IntrMBox.PushUncond(v); m_intrtag[2].stat |= 1; if (CPUThread* t = Emu.GetCPU().GetThread(m_intrtag[2].thread)) @@ -998,7 +998,7 @@ public: Sleep(1); if (Emu.IsStopped()) { - LOGF_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); return; } } @@ -1019,20 +1019,20 @@ public: u32 data; if (!SPU.Out_MBox.Pop(data)) { - LOGF_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); + LOG_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); return; } if (SPU.In_MBox.GetCount()) { - LOGF_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): In_MBox is not empty", v, spup); + LOG_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): In_MBox is not empty", v, spup); SPU.In_MBox.PushUncond(CELL_EBUSY); // ??? return; } if (Ini.HLELogging.GetValue()) { - LOGF_NOTICE(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); + LOG_NOTICE(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); } EventPort& port = SPUPs[spup]; @@ -1042,7 +1042,7 @@ public: if (!port.eq) { // spu_printf fails there - LOGF_WARNING(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); + LOG_WARNING(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); SPU.In_MBox.PushUncond(CELL_ENOTCONN); // TODO: check error passing return; } @@ -1064,25 +1064,25 @@ public: u32 data; if (!SPU.Out_MBox.Pop(data)) { - LOGF_ERROR(Log::SPU, "sys_event_flag_set_bit(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); return; } if (flag > 63) { - LOGF_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x): flag > 63", data, v, flag); + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x): flag > 63", data, v, flag); return; } //if (Ini.HLELogging.GetValue()) { - LOGF_WARNING(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d))", data, v, flag); + LOG_WARNING(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d))", data, v, flag); } EventFlag* ef; if (!Emu.GetIdManager().GetIDData(data, ef)) { - LOGF_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); SPU.In_MBox.PushUncond(CELL_ESRCH); return; } @@ -1110,11 +1110,11 @@ public: u32 data; if (SPU.Out_MBox.Pop(data)) { - LOGF_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x); Out_MBox = 0x%x", v, data); + LOG_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x); Out_MBox = 0x%x", v, data); } else { - LOGF_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x)", v); + LOG_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x)", v); } SPU.In_MBox.PushUncond(CELL_EINVAL); // ??? return; @@ -1166,13 +1166,13 @@ public: { if (v >= 32) { - LOGF_ERROR(Log::SPU, "MFC_WrListStallAck error: invalid tag(%d)", v); + LOG_ERROR(Log::SPU, "MFC_WrListStallAck error: invalid tag(%d)", v); return; } StalledList temp = StallList[v]; if (!temp.MFCArgs) { - LOGF_ERROR(Log::SPU, "MFC_WrListStallAck error: empty tag(%d)", v); + LOG_ERROR(Log::SPU, "MFC_WrListStallAck error: empty tag(%d)", v); return; } StallList[v].MFCArgs = nullptr; @@ -1181,11 +1181,11 @@ public: break; default: - LOGF_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); + LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); break; } - if (Emu.IsStopped()) LOGF_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); } void ReadChannel(SPU_GPR_hdr& r, u32 ch) @@ -1224,11 +1224,11 @@ public: break; default: - LOGF_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); + LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); break; } - if (Emu.IsStopped()) LOGF_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); } void DoStop(u32 code) @@ -1249,14 +1249,14 @@ public: if (SPU.In_MBox.GetCount()) { - LOGF_ERROR(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x): In_MBox is not empty", spuq); + LOG_ERROR(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x): In_MBox is not empty", spuq); SPU.In_MBox.PushUncond(CELL_EBUSY); // ??? return; } if (Ini.HLELogging.GetValue()) { - LOGF_NOTICE(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x)", spuq); + LOG_NOTICE(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x)", spuq); } EventQueue* eq; @@ -1307,7 +1307,7 @@ public: Sleep(1); if (Emu.IsStopped()) { - LOGF_WARNING(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x) aborted", spuq); + LOG_WARNING(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x) aborted", spuq); eq->sq.invalidate(tid); return; } @@ -1322,7 +1322,7 @@ public: else if (Ini.HLELogging.GetValue()) { // the real exit status - LOGF_NOTICE(Log::SPU, "sys_spu_thread_exit (status=0x%x)", SPU.Out_MBox.GetValue()); + LOG_NOTICE(Log::SPU, "sys_spu_thread_exit (status=0x%x)", SPU.Out_MBox.GetValue()); } SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); Stop(); @@ -1330,11 +1330,11 @@ public: default: if (!SPU.Out_MBox.GetCount()) { - LOGF_ERROR(Log::SPU, "Unknown STOP code: 0x%x (no message)", code); + LOG_ERROR(Log::SPU, "Unknown STOP code: 0x%x (no message)", code); } else { - LOGF_ERROR(Log::SPU, "Unknown STOP code: 0x%x (message=0x%x)", code, SPU.Out_MBox.GetValue()); + LOG_ERROR(Log::SPU, "Unknown STOP code: 0x%x (message=0x%x)", code, SPU.Out_MBox.GetValue()); } SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); Stop(); diff --git a/rpcs3/Emu/FS/vfsLocalFile.cpp b/rpcs3/Emu/FS/vfsLocalFile.cpp index 9c40645808..7eceb1e8d6 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.cpp +++ b/rpcs3/Emu/FS/vfsLocalFile.cpp @@ -53,7 +53,7 @@ bool vfsLocalFile::Open(const std::string& path, vfsOpenMode mode) bool vfsLocalFile::Create(const std::string& path) { - LOGF_WARNING(HLE, "vfsLocalFile::Create('%s')", path.c_str()); + LOG_WARNING(HLE, "vfsLocalFile::Create('%s')", path.c_str()); for(uint p=1; p < path.length() && path[p] != '\0' ; p++) { for(; p < path.length() && path[p] != '\0'; p++) @@ -65,7 +65,7 @@ bool vfsLocalFile::Create(const std::string& path) const std::string& dir = path.substr(0, p); if(!rDirExists(dir)) { - LOGF_NOTICE(HLE, "create dir: %s", dir.c_str()); + LOG_NOTICE(HLE, "create dir: %s", dir.c_str()); rMkdir(dir); } } diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 710d2678b6..418ce0375e 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -19,7 +19,7 @@ void GLFragmentDecompilerThread::SetDst(std::string code, bool append_mask) case 7: code = "(" + code + " / 8.0)"; break; default: - LOGF_ERROR(RSX, "Bad scale: %d", fmt::by_value(src1.scale)); + LOG_ERROR(RSX, "Bad scale: %d", fmt::by_value(src1.scale)); Emu.Pause(); break; } @@ -210,7 +210,7 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) } else { - LOGF_ERROR(RSX, "Bad src reg num: %d", fmt::by_value(dst.src_attr_reg_num)); + LOG_ERROR(RSX, "Bad src reg num: %d", fmt::by_value(dst.src_attr_reg_num)); ret += m_parr.AddParam(PARAM_IN, "vec4", "unk"); Emu.Pause(); } @@ -224,7 +224,7 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) break; default: - LOGF_ERROR(RSX, "Bad src type %d", fmt::by_value(src.reg_type)); + LOG_ERROR(RSX, "Bad src type %d", fmt::by_value(src.reg_type)); Emu.Pause(); break; } @@ -416,7 +416,7 @@ void GLFragmentDecompilerThread::Task() //case 0x45: SetDst("return"); break; //RET default: - LOGF_ERROR(RSX, "Unknown fp opcode 0x%x (inst %d)", opcode, m_size / (4 * 4)); + LOG_ERROR(RSX, "Unknown fp opcode 0x%x (inst %d)", opcode, m_size / (4 * 4)); //Emu.Pause(); break; } @@ -515,7 +515,7 @@ void GLShaderProgram::Compile() char* buf = new char[infoLength]; // Buffer to store infoLog glGetShaderInfoLog(m_id, infoLength, &len, buf); // Retrieve the shader info log into our buffer - LOGF_ERROR(RSX, "Failed to compile shader: %s", buf); // Write log to the console + LOG_ERROR(RSX, "Failed to compile shader: %s", buf); // Write log to the console delete[] buf; } @@ -540,7 +540,7 @@ void GLShaderProgram::Delete() { if (Emu.IsStopped()) { - LOGF_WARNING(RSX, "GLShaderProgram::Delete(): glDeleteShader(%d) avoided", m_id); + LOG_WARNING(RSX, "GLShaderProgram::Delete(): glDeleteShader(%d) avoided", m_id); } else { diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 4cb0dcd0a2..9309eae93c 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -9,7 +9,7 @@ #define DUMP_VERTEX_DATA 0 #if CMD_DEBUG - #define CMD_LOG(...) LOGF_NOTICE(RSX, __VA_ARGS__) + #define CMD_LOG(...) LOG_NOTICE(RSX, __VA_ARGS__) #else #define CMD_LOG(...) #endif @@ -27,7 +27,7 @@ void printGlError(GLenum err, const char* situation) { if(err != GL_NO_ERROR) { - LOGF_ERROR(RSX, "%s: opengl error 0x%04x", situation, err); + LOG_ERROR(RSX, "%s: opengl error 0x%04x", situation, err); Emu.Pause(); } } @@ -180,7 +180,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw) break; default: - LOGF_ERROR(HLE, "Bad cv type! %d", m_vertex_data[i].type); + LOG_ERROR(HLE, "Bad cv type! %d", m_vertex_data[i].type); return; } @@ -309,7 +309,7 @@ void GLGSRender::InitFragmentData() { if(!m_cur_shader_prog) { - LOGF_ERROR(RSX, "InitFragmentData: m_cur_shader_prog == NULL"); + LOG_ERROR(RSX, "InitFragmentData: m_cur_shader_prog == NULL"); return; } @@ -337,13 +337,13 @@ bool GLGSRender::LoadProgram() { if(!m_cur_shader_prog) { - LOGF_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL"); + LOG_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL"); return false; } if(!m_cur_vertex_prog) { - LOGF_WARNING(RSX, "LoadProgram: m_cur_vertex_prog == NULL"); + LOG_WARNING(RSX, "LoadProgram: m_cur_vertex_prog == NULL"); return false; } @@ -354,7 +354,7 @@ bool GLGSRender::LoadProgram() if(m_fp_buf_num == -1) { - LOGF_WARNING(RSX, "FP not found in buffer!"); + LOG_WARNING(RSX, "FP not found in buffer!"); m_shader_prog.DecompileAsync(*m_cur_shader_prog); m_shader_prog.Wait(); m_shader_prog.Compile(); @@ -366,7 +366,7 @@ bool GLGSRender::LoadProgram() if(m_vp_buf_num == -1) { - LOGF_WARNING(RSX, "VP not found in buffer!"); + LOG_WARNING(RSX, "VP not found in buffer!"); m_vertex_prog.DecompileAsync(*m_cur_vertex_prog); m_vertex_prog.Wait(); m_vertex_prog.Compile(); @@ -450,7 +450,7 @@ void GLGSRender::WriteDepthBuffer() u32 address = GetAddress(m_surface_offset_z, m_context_dma_z - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOGF_WARNING(RSX, "Bad depth address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); + LOG_WARNING(RSX, "Bad depth address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); return; } @@ -484,7 +484,7 @@ void GLGSRender::WriteColourBufferA() u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOGF_WARNING(RSX, "Bad colour buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); + LOG_WARNING(RSX, "Bad colour buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); return; } @@ -513,7 +513,7 @@ void GLGSRender::WriteColourBufferB() u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOGF_WARNING(RSX, "Bad colour buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); + LOG_WARNING(RSX, "Bad colour buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); return; } @@ -543,7 +543,7 @@ void GLGSRender::WriteColourBufferC() u32 address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOGF_WARNING(RSX, "Bad colour buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); + LOG_WARNING(RSX, "Bad colour buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); return; } @@ -572,7 +572,7 @@ void GLGSRender::WriteColourBufferD() u32 address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOGF_WARNING(RSX, "Bad colour buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); + LOG_WARNING(RSX, "Bad colour buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); return; } @@ -703,14 +703,14 @@ void GLGSRender::ExecCMD() //return; if(!LoadProgram()) { - LOGF_ERROR(RSX, "LoadProgram failed."); + LOG_ERROR(RSX, "LoadProgram failed."); Emu.Pause(); return; } if(!m_fbo.IsCreated() || RSXThread::m_width != last_width || RSXThread::m_height != last_height || last_depth_format != m_surface_depth_format) { - LOGF_WARNING(RSX, "New FBO (%dx%d)", RSXThread::m_width, RSXThread::m_height); + LOG_WARNING(RSX, "New FBO (%dx%d)", RSXThread::m_width, RSXThread::m_height); last_width = RSXThread::m_width; last_height = RSXThread::m_height; last_depth_format = m_surface_depth_format; @@ -753,7 +753,7 @@ void GLGSRender::ExecCMD() break; default: - LOGF_ERROR(RSX, "Bad depth format! (%d)", m_surface_depth_format); + LOG_ERROR(RSX, "Bad depth format! (%d)", m_surface_depth_format); assert(0); break; } @@ -821,7 +821,7 @@ void GLGSRender::ExecCMD() break; default: - LOGF_ERROR(RSX, "Bad surface colour target: %d", m_surface_colour_target); + LOG_ERROR(RSX, "Bad surface colour target: %d", m_surface_colour_target); break; } @@ -1099,7 +1099,7 @@ void GLGSRender::ExecCMD() if(m_indexed_array.m_count && m_draw_array_count) { - LOGF_WARNING(RSX, "m_indexed_array.m_count && draw_array_count"); + LOG_WARNING(RSX, "m_indexed_array.m_count && draw_array_count"); } for(u32 i=0; i 15) - LOGF_ERROR(RSX, "dst index out of range: %u", d3.dst); + LOG_ERROR(RSX, "dst index out of range: %u", d3.dst); ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("dst_reg") + std::to_string(d3.dst), d3.dst == 0 ? "vec4(0.0f, 0.0f, 0.0f, 1.0f)" : "vec4(0.0)"); break; } @@ -83,7 +83,7 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n) } else { - LOGF_ERROR(RSX, "Bad input src num: %d", fmt::by_value(d1.input_src)); + LOG_ERROR(RSX, "Bad input src num: %d", fmt::by_value(d1.input_src)); ret += m_parr.AddParam(PARAM_IN, "vec4", "in_unk", d1.input_src); } break; @@ -93,7 +93,7 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n) break; default: - LOGF_ERROR(RSX, "Bad src%u reg type: %d", n, fmt::by_value(src[n].reg_type)); + LOG_ERROR(RSX, "Bad src%u reg type: %d", n, fmt::by_value(src[n].reg_type)); Emu.Pause(); break; } @@ -510,7 +510,7 @@ void GLVertexDecompilerThread::Task() default: m_body.push_back(fmt::Format("//Unknown vp sca_opcode 0x%x", fmt::by_value(d1.sca_opcode))); - LOGF_ERROR(RSX, "Unknown vp sca_opcode 0x%x", fmt::by_value(d1.sca_opcode)); + LOG_ERROR(RSX, "Unknown vp sca_opcode 0x%x", fmt::by_value(d1.sca_opcode)); Emu.Pause(); break; } @@ -543,7 +543,7 @@ void GLVertexDecompilerThread::Task() default: m_body.push_back(fmt::Format("//Unknown vp opcode 0x%x", fmt::by_value(d1.vec_opcode))); - LOGF_ERROR(RSX, "Unknown vp opcode 0x%x", fmt::by_value(d1.vec_opcode)); + LOG_ERROR(RSX, "Unknown vp opcode 0x%x", fmt::by_value(d1.vec_opcode)); Emu.Pause(); break; } @@ -647,14 +647,14 @@ void GLVertexProgram::Compile() GLsizei len; memset(buf, 0, r+1); glGetShaderInfoLog(id, r, &len, buf); - LOGF_ERROR(RSX, "Failed to compile vertex shader: %s", buf); + LOG_ERROR(RSX, "Failed to compile vertex shader: %s", buf); delete[] buf; } LOG_NOTICE(RSX, shader); Emu.Pause(); } - //else LOGF_WARNING(RSX, "Vertex shader compiled successfully!"); + //else LOG_WARNING(RSX, "Vertex shader compiled successfully!"); } @@ -667,7 +667,7 @@ void GLVertexProgram::Delete() { if (Emu.IsStopped()) { - LOGF_WARNING(RSX, "GLVertexProgram::Delete(): glDeleteShader(%d) avoided", id); + LOG_WARNING(RSX, "GLVertexProgram::Delete(): glDeleteShader(%d) avoided", id); } else { diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index c950dfb2f7..d5f92c29b2 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -20,7 +20,7 @@ u32 GetAddress(u32 offset, u8 location) return realAddr; } - LOGF_ERROR(RSX, "GetAddress(offset=0x%x, location=0x%x)", location); + LOG_ERROR(RSX, "GetAddress(offset=0x%x, location=0x%x)", location); assert(0); return 0; } @@ -97,7 +97,7 @@ u32 RSXVertexData::GetTypeSize() case 7: return 1; } - LOGF_ERROR(RSX, "Bad vertex data type! %d", type); + LOG_ERROR(RSX, "Bad vertex data type! %d", type); return 1; } @@ -115,7 +115,7 @@ u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count) debug += "("; for(u32 i=0; i> 24) + 1; - //LOGF_WARNING(RSX, "NV4097_DRAW_ARRAYS: %d - %d", first, _count); + //LOG_WARNING(RSX, "NV4097_DRAW_ARRAYS: %d - %d", first, _count); LoadVertexData(first, _count); @@ -791,7 +791,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_indexed_array.m_data.resize(m_indexed_array.m_data.size() + 4); index = Memory.Read32(m_indexed_array.m_addr + i * 4); *(u32*)&m_indexed_array.m_data[pos] = index; - //LOGF_WARNING(RSX, "index 4: %d", *(u32*)&m_indexed_array.m_data[pos]); + //LOG_WARNING(RSX, "index 4: %d", *(u32*)&m_indexed_array.m_data[pos]); } break; @@ -800,7 +800,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 int pos = m_indexed_array.m_data.size(); m_indexed_array.m_data.resize(m_indexed_array.m_data.size() + 2); index = Memory.Read16(m_indexed_array.m_addr + i * 2); - //LOGF_WARNING(RSX, "index 2: %d", index); + //LOG_WARNING(RSX, "index 2: %d", index); *(u16*)&m_indexed_array.m_data[pos] = index; } break; @@ -819,7 +819,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { const u32 a0 = ARGS(0); - //LOGF_WARNING(RSX, "NV4097_SET_BEGIN_END: %x", a0); + //LOG_WARNING(RSX, "NV4097_SET_BEGIN_END: %x", a0); m_read_buffer = false; @@ -850,7 +850,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { if(!m_cur_shader_prog) { - LOGF_ERROR(RSX, "NV4097_SET_SHADER_CONTROL: m_cur_shader_prog == NULL"); + LOG_ERROR(RSX, "NV4097_SET_SHADER_CONTROL: m_cur_shader_prog == NULL"); break; } @@ -877,7 +877,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 // Transform case NV4097_SET_TRANSFORM_PROGRAM_LOAD: { - //LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_LOAD: prog = %d", ARGS(0)); + //LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_LOAD: prog = %d", ARGS(0)); m_cur_vertex_prog = &m_vertex_progs[ARGS(0)]; m_cur_vertex_prog->data.clear(); @@ -886,7 +886,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { const u32 start = ARGS(1); if(start) - LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_LOAD: start = %d", start); + LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_LOAD: start = %d", start); } } break; @@ -894,17 +894,17 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_TRANSFORM_PROGRAM_START: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_START: 0x%x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_START: 0x%x", ARGS(0)); } break; case_32(NV4097_SET_TRANSFORM_PROGRAM, 4): { - //LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM[%d](%d)", index, count); + //LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM[%d](%d)", index, count); if(!m_cur_vertex_prog) { - LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM: m_cur_vertex_prog == NULL"); + LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM: m_cur_vertex_prog == NULL"); break; } @@ -916,7 +916,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 if(!m_cur_vertex_prog) { - LOGF_WARNING(RSX, "NV4097_SET_TRANSFORM_TIMEOUT: m_cur_vertex_prog == NULL"); + LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_TIMEOUT: m_cur_vertex_prog == NULL"); break; } @@ -950,28 +950,28 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_INVALIDATE_L2: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_INVALIDATE_L2: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_INVALIDATE_L2: %x", ARGS(0)); } break; case NV4097_INVALIDATE_VERTEX_CACHE_FILE: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_CACHE_FILE: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_CACHE_FILE: %x", ARGS(0)); } break; case NV4097_INVALIDATE_VERTEX_FILE: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_FILE: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_FILE: %x", ARGS(0)); } break; case NV4097_INVALIDATE_ZCULL: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_INVALIDATE_ZCULL: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_INVALIDATE_ZCULL: %x", ARGS(0)); } break; @@ -1235,7 +1235,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV406E_SEMAPHORE_ACQUIRE: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV406E_SEMAPHORE_ACQUIRE: %x", ARGS(0)); + LOG_WARNING(RSX, "NV406E_SEMAPHORE_ACQUIRE: %x", ARGS(0)); } break; @@ -1347,7 +1347,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { if (count != 4) { - LOGF_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_C: Bad count (%d)", count); + LOG_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_C: Bad count (%d)", count); break; } @@ -1361,7 +1361,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_SURFACE_PITCH_D: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_D: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_SURFACE_PITCH_D: %x", ARGS(0)); } break; @@ -1401,7 +1401,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_CONTEXT_DMA_COLOR_D: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_COLOR_D: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_COLOR_D: %x", ARGS(0)); } break; @@ -1443,7 +1443,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ANTI_ALIASING_CONTROL: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_ANTI_ALIASING_CONTROL: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_ANTI_ALIASING_CONTROL: %x", ARGS(0)); } break; @@ -1498,7 +1498,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ZCULL_CONTROL0: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_ZCULL_CONTROL0: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_ZCULL_CONTROL0: %x", ARGS(0)); //m_set_depth_func = true; //m_depth_func = ARGS(0) >> 4; @@ -1508,7 +1508,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ZCULL_CONTROL1: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_ZCULL_CONTROL1: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_ZCULL_CONTROL1: %x", ARGS(0)); //m_set_depth_func = true; //m_depth_func = ARGS(0) >> 4; @@ -1531,12 +1531,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case CELL_GCM_ZCULL_STATS2: case CELL_GCM_ZCULL_STATS3: value = 0; - LOGF_WARNING(RSX, "NV4097_GET_REPORT: Unimplemented type %d", type); + LOG_WARNING(RSX, "NV4097_GET_REPORT: Unimplemented type %d", type); break; default: value = 0; - LOGF_WARNING(RSX, "NV4097_GET_REPORT: Bad type %d", type); + LOG_WARNING(RSX, "NV4097_GET_REPORT: Bad type %d", type); break; } @@ -1586,7 +1586,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_ZMIN_MAX_CONTROL: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_ZMIN_MAX_CONTROL: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_ZMIN_MAX_CONTROL: %x", ARGS(0)); } break; @@ -1594,28 +1594,28 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_WINDOW_OFFSET: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_WINDOW_OFFSET: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_WINDOW_OFFSET: %x", ARGS(0)); } break; case NV4097_SET_WINDOW_CLIP_TYPE: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_TYPE: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_TYPE: %x", ARGS(0)); } break; case NV4097_SET_WINDOW_CLIP_HORIZONTAL: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_HORIZONTAL: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_HORIZONTAL: %x", ARGS(0)); } break; case NV4097_SET_WINDOW_CLIP_VERTICAL: { if (ARGS(0)) - LOGF_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_VERTICAL: %x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_VERTICAL: %x", ARGS(0)); } break; @@ -1638,7 +1638,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } else { - LOGF_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_IN: TODO: srcContext=0x%x, dstContext=0x%x", srcContext, dstContext); + LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_IN: TODO: srcContext=0x%x, dstContext=0x%x", srcContext, dstContext); } } break; @@ -1662,7 +1662,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } else { - LOGF_WARNING(RSX, "NV0039_OFFSET_IN: TODO: offset(in=0x%x, out=0x%x), pitch(in=0x%x, out=0x%x), line(len=0x%x, cnt=0x%x), fmt(in=0x%x, out=0x%x), notify=0x%x", + LOG_WARNING(RSX, "NV0039_OFFSET_IN: TODO: offset(in=0x%x, out=0x%x), pitch(in=0x%x, out=0x%x), line(len=0x%x, cnt=0x%x), fmt(in=0x%x, out=0x%x), notify=0x%x", inOffset, outOffset, inPitch, outPitch, lineLength, lineCount, inFormat, outFormat, notify); } } @@ -1677,7 +1677,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } else { - LOGF_WARNING(RSX, "NV0039_OFFSET_OUT: TODO: offset=0x%x", offset); + LOG_WARNING(RSX, "NV0039_OFFSET_OUT: TODO: offset=0x%x", offset); } } break; @@ -1723,10 +1723,10 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 if(count >= 5) { - LOGF_WARNING(RSX, "NV308A_COLOR: count = %d", count); + LOG_WARNING(RSX, "NV308A_COLOR: count = %d", count); } - //LOGF_WARNING(RSX, "NV308A_COLOR: [%d]: %f, %f, %f, %f", c.id, c.x, c.y, c.z, c.w); + //LOG_WARNING(RSX, "NV308A_COLOR: [%d]: %f, %f, %f, %f", c.id, c.x, c.y, c.z, c.w); m_fragment_constants.push_back(c); } break; @@ -1810,7 +1810,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D) { - LOGF_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0)); + LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0)); } } break; @@ -1866,7 +1866,7 @@ void RSXThread::End() void RSXThread::Task() { u8 inc; - LOGF_NOTICE(RSX, "RSX thread started"); + LOG_NOTICE(RSX, "RSX thread started"); OnInitThread(); @@ -1874,7 +1874,7 @@ void RSXThread::Task() { if (Emu.IsStopped()) { - LOGF_WARNING(RSX, "RSX thread aborted"); + LOG_WARNING(RSX, "RSX thread aborted"); return; } std::lock_guard lock(m_cs_main); @@ -1912,7 +1912,7 @@ void RSXThread::Task() if(cmd & CELL_GCM_METHOD_FLAG_JUMP) { u32 addr = cmd & ~(CELL_GCM_METHOD_FLAG_JUMP | CELL_GCM_METHOD_FLAG_NON_INCREMENT); - //LOGF_WARNING(RSX, "rsx jump(0x%x) #addr=0x%x, cmd=0x%x, get=0x%x, put=0x%x", addr, m_ioAddress + get, cmd, get, put); + //LOG_WARNING(RSX, "rsx jump(0x%x) #addr=0x%x, cmd=0x%x, get=0x%x, put=0x%x", addr, m_ioAddress + get, cmd, get, put); m_ctrl->get = addr; continue; } @@ -1921,22 +1921,22 @@ void RSXThread::Task() m_call_stack.push(get + 4); u32 offs = cmd & ~CELL_GCM_METHOD_FLAG_CALL; u32 addr = Memory.RSXIOMem.GetStartAddr() + offs; - //LOGF_WARNING(RSX, "rsx call(0x%x) #0x%x - 0x%x - 0x%x", offs, addr, cmd, get); + //LOG_WARNING(RSX, "rsx call(0x%x) #0x%x - 0x%x - 0x%x", offs, addr, cmd, get); m_ctrl->get = offs; continue; } if(cmd == CELL_GCM_METHOD_FLAG_RETURN) { - //LOGF_WARNING(RSX, "rsx return!"); + //LOG_WARNING(RSX, "rsx return!"); u32 get = m_call_stack.top(); m_call_stack.pop(); - //LOGF_WARNING(RSX, "rsx return(0x%x)", get); + //LOG_WARNING(RSX, "rsx return(0x%x)", get); m_ctrl->get = get; continue; } if(cmd & CELL_GCM_METHOD_FLAG_NON_INCREMENT) { - //LOGF_WARNING(RSX, "non increment cmd! 0x%x", cmd); + //LOG_WARNING(RSX, "non increment cmd! 0x%x", cmd); inc=0; } @@ -1961,7 +1961,7 @@ void RSXThread::Task() //memset(Memory.GetMemFromAddr(p.m_ioAddress + get), 0, (count + 1) * 4); } - LOGF_NOTICE(RSX, "RSX thread ended"); + LOG_NOTICE(RSX, "RSX thread ended"); OnExitThread(); } diff --git a/rpcs3/Emu/HDD/HDD.h b/rpcs3/Emu/HDD/HDD.h index ab85001815..d68f8dbbfc 100644 --- a/rpcs3/Emu/HDD/HDD.h +++ b/rpcs3/Emu/HDD/HDD.h @@ -486,7 +486,7 @@ public: int OpenDir(const std::string& name) { - LOGF_WARNING(HLE, "OpenDir(%s)", name.c_str()); + LOG_WARNING(HLE, "OpenDir(%s)", name.c_str()); u64 entry_block; if(!SearchEntry(name, entry_block)) return -1; @@ -594,7 +594,7 @@ public: return false; } - LOGF_NOTICE(HLE, "CREATING ENTRY AT 0x%llx", new_block); + LOG_NOTICE(HLE, "CREATING ENTRY AT 0x%llx", new_block); WriteBlock(new_block, g_used_block); { @@ -744,7 +744,7 @@ public: return false; } - LOGF_NOTICE(HLE, "ENTRY FOUND AT 0x%llx", file_block); + LOG_NOTICE(HLE, "ENTRY FOUND AT 0x%llx", file_block); m_file.Open(file_block); return vfsFileBase::Open(path, mode); @@ -774,7 +774,7 @@ public: if(entry.type == vfsHDD_Entry_Dir && name != "." && name != "..") { - LOGF_WARNING(HLE, "Removing sub folder '%s'", name.c_str()); + LOG_WARNING(HLE, "Removing sub folder '%s'", name.c_str()); RemoveBlocksDir(entry.data_block); } else if(entry.type == vfsHDD_Entry_File) diff --git a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp index 923377ed96..36364d4522 100644 --- a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp +++ b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp @@ -113,7 +113,7 @@ void XInputPadHandler::Close() { active = false; if (WaitForSingleObject(thread, THREAD_TIMEOUT) != WAIT_OBJECT_0) - LOGF_ERROR(HLE, "XInput thread could not stop within %d milliseconds", THREAD_TIMEOUT); + LOG_ERROR(HLE, "XInput thread could not stop within %d milliseconds", THREAD_TIMEOUT); thread = nullptr; } diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 2bd8435868..77ff450c96 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -212,10 +212,10 @@ bool DynamicMemoryBlockBase::Free(u64 addr) } } - LOGF_ERROR(MEMORY, "DynamicMemoryBlock::Free(addr=0x%llx): failed", addr); + LOG_ERROR(MEMORY, "DynamicMemoryBlock::Free(addr=0x%llx): failed", addr); for (u32 i = 0; i < m_allocated.size(); i++) { - LOGF_NOTICE(MEMORY, "*** Memory Block: addr = 0x%llx, size = 0x%x", m_allocated[i].addr, m_allocated[i].size); + LOG_NOTICE(MEMORY, "*** Memory Block: addr = 0x%llx, size = 0x%x", m_allocated[i].addr, m_allocated[i].size); } return false; } @@ -233,7 +233,7 @@ u8* DynamicMemoryBlockBase::GetMem(u64 addr) const // lock-free, addr is fix } } - LOGF_ERROR(MEMORY, "GetMem(%llx) from not allocated address.", addr); + LOG_ERROR(MEMORY, "GetMem(%llx) from not allocated address.", addr); assert(0); return nullptr; } diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 02899130d3..9f70616622 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -331,7 +331,7 @@ bool MemoryBlockLE::Write128(const u64 addr, const u128 value) //NullMemoryBlock bool NullMemoryBlock::Read8(const u64 addr, u8* ) { - LOGF_ERROR(MEMORY, "Read8 from null block: [%08llx]", addr); + LOG_ERROR(MEMORY, "Read8 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -339,7 +339,7 @@ bool NullMemoryBlock::Read8(const u64 addr, u8* ) bool NullMemoryBlock::Read16(const u64 addr, u16* ) { - LOGF_ERROR(MEMORY, "Read16 from null block: [%08llx]", addr); + LOG_ERROR(MEMORY, "Read16 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -347,7 +347,7 @@ bool NullMemoryBlock::Read16(const u64 addr, u16* ) bool NullMemoryBlock::Read32(const u64 addr, u32* ) { - LOGF_ERROR(MEMORY, "Read32 from null block: [%08llx]", addr); + LOG_ERROR(MEMORY, "Read32 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -355,7 +355,7 @@ bool NullMemoryBlock::Read32(const u64 addr, u32* ) bool NullMemoryBlock::Read64(const u64 addr, u64* ) { - LOGF_ERROR(MEMORY, "Read64 from null block: [%08llx]", addr); + LOG_ERROR(MEMORY, "Read64 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -363,7 +363,7 @@ bool NullMemoryBlock::Read64(const u64 addr, u64* ) bool NullMemoryBlock::Read128(const u64 addr, u128* ) { - LOGF_ERROR(MEMORY, "Read128 from null block: [%08llx]", addr); + LOG_ERROR(MEMORY, "Read128 from null block: [%08llx]", addr); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -371,7 +371,7 @@ bool NullMemoryBlock::Read128(const u64 addr, u128* ) bool NullMemoryBlock::Write8(const u64 addr, const u8 value) { - LOGF_ERROR(MEMORY, "Write8 to null block: [%08llx]: %x", addr, value); + LOG_ERROR(MEMORY, "Write8 to null block: [%08llx]: %x", addr, value); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -379,7 +379,7 @@ bool NullMemoryBlock::Write8(const u64 addr, const u8 value) bool NullMemoryBlock::Write16(const u64 addr, const u16 value) { - LOGF_ERROR(MEMORY, "Write16 to null block: [%08llx]: %x", addr, value); + LOG_ERROR(MEMORY, "Write16 to null block: [%08llx]: %x", addr, value); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -387,7 +387,7 @@ bool NullMemoryBlock::Write16(const u64 addr, const u16 value) bool NullMemoryBlock::Write32(const u64 addr, const u32 value) { - LOGF_ERROR(MEMORY, "Write32 to null block: [%08llx]: %x", addr, value); + LOG_ERROR(MEMORY, "Write32 to null block: [%08llx]: %x", addr, value); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -395,7 +395,7 @@ bool NullMemoryBlock::Write32(const u64 addr, const u32 value) bool NullMemoryBlock::Write64(const u64 addr, const u64 value) { - LOGF_ERROR(MEMORY, "Write64 to null block: [%08llx]: %llx", addr, value); + LOG_ERROR(MEMORY, "Write64 to null block: [%08llx]: %llx", addr, value); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; @@ -403,7 +403,7 @@ bool NullMemoryBlock::Write64(const u64 addr, const u64 value) bool NullMemoryBlock::Write128(const u64 addr, const u128 value) { - LOGF_ERROR(MEMORY, "Write128 to null block: [%08llx]: %llx_%llx", addr, value.hi, value.lo); + LOG_ERROR(MEMORY, "Write128 to null block: [%08llx]: %llx_%llx", addr, value.hi, value.lo); if (!Ini.CPUIgnoreRWErrors.GetValue()) Emu.Pause(); return false; diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index ee1a5bb32f..377b012253 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -405,7 +405,7 @@ public: if(mem.IsNULL()) { - LOGF_ERROR(MEMORY, "ReadLeft[%d] from null block (0x%llx)", size, addr); + LOG_ERROR(MEMORY, "ReadLeft[%d] from null block (0x%llx)", size, addr); return; } @@ -418,7 +418,7 @@ public: if(mem.IsNULL()) { - LOGF_ERROR(MEMORY, "WriteLeft[%d] to null block (0x%llx)", size, addr); + LOG_ERROR(MEMORY, "WriteLeft[%d] to null block (0x%llx)", size, addr); return; } @@ -431,7 +431,7 @@ public: if(mem.IsNULL()) { - LOGF_ERROR(MEMORY, "ReadRight[%d] from null block (0x%llx)", size, addr); + LOG_ERROR(MEMORY, "ReadRight[%d] from null block (0x%llx)", size, addr); return; } @@ -444,7 +444,7 @@ public: if(mem.IsNULL()) { - LOGF_ERROR(MEMORY, "WriteRight[%d] to null block (0x%llx)", size, addr); + LOG_ERROR(MEMORY, "WriteRight[%d] to null block (0x%llx)", size, addr); return; } @@ -477,7 +477,7 @@ public: { if(!IsGoodAddr(addr, str.length())) { - LOGF_ERROR(MEMORY,"Memory::WriteString error: bad address (0x%llx)", addr); + LOG_ERROR(MEMORY,"Memory::WriteString error: bad address (0x%llx)", addr); return; } @@ -527,7 +527,7 @@ public: } MemoryBlocks.push_back((new MemoryMirror())->SetRange(GetMemFromAddr(src_addr), dst_addr, size)); - LOGF_WARNING(MEMORY, "memory mapped 0x%llx to 0x%llx size=0x%x", src_addr, dst_addr, size); + LOG_WARNING(MEMORY, "memory mapped 0x%llx to 0x%llx size=0x%x", src_addr, dst_addr, size); return true; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 2b7d945837..aa72d95f64 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -53,7 +53,7 @@ next: { if (!Memory.CopyToReal(buf, adec.reader.addr, adec.reader.size)) { - LOGF_ERROR(HLE, "adecRawRead(): data reading failed (reader.size=0x%x)", adec.reader.size); + LOG_ERROR(HLE, "adecRawRead(): data reading failed (reader.size=0x%x)", adec.reader.size); Emu.Pause(); return 0; } @@ -68,11 +68,11 @@ next: adec.reader.addr = adec.task.au.addr; adec.reader.size = adec.task.au.size; - //LOGF_NOTICE(HLE, "Audio AU: size = 0x%x, pts = 0x%llx", adec.task.au.size, adec.task.au.pts); + //LOG_NOTICE(HLE, "Audio AU: size = 0x%x, pts = 0x%llx", adec.task.au.size, adec.task.au.pts); } break; default: - LOGF_ERROR(HLE, "adecRawRead(): sequence error (task %d)", adec.job.Peek().type); + LOG_ERROR(HLE, "adecRawRead(): sequence error (task %d)", adec.job.Peek().type); return -1; } @@ -89,7 +89,7 @@ next: } else if (!Memory.CopyToReal(buf, adec.reader.addr, buf_size)) { - LOGF_ERROR(HLE, "adecRawRead(): data reading failed (buf_size=0x%x)", buf_size); + LOG_ERROR(HLE, "adecRawRead(): data reading failed (buf_size=0x%x)", buf_size); Emu.Pause(); return 0; } @@ -111,7 +111,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) { if (buf_size < (int)adec.reader.rem_size) { - LOGF_ERROR(HLE, "adecRead(): too small buf_size (rem_size = %d, buf_size = %d)", adec.reader.rem_size, buf_size); + LOG_ERROR(HLE, "adecRead(): too small buf_size (rem_size = %d, buf_size = %d)", adec.reader.rem_size, buf_size); Emu.Pause(); return 0; } @@ -131,7 +131,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) if (adecRawRead(opaque, header, 8) < 8) break; if (header[0] != 0x0f || header[1] != 0xd0) { - LOGF_ERROR(HLE, "adecRead(): 0x0FD0 header not found"); + LOG_ERROR(HLE, "adecRead(): 0x0FD0 header not found"); Emu.Pause(); return -1; } @@ -141,7 +141,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) OMAHeader oma(1 /* atrac3p id */, header[2], header[3]); if (buf_size < sizeof(oma) + 8) { - LOGF_ERROR(HLE, "adecRead(): OMAHeader writing failed"); + LOG_ERROR(HLE, "adecRead(): OMAHeader writing failed"); Emu.Pause(); return 0; } @@ -159,7 +159,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) u32 size = (((header[2] & 0x3) << 8) | header[3]) * 8 + 8; // data to be read before next header - //LOGF_NOTICE(HLE, "*** audio block read: size = 0x%x", size); + //LOG_NOTICE(HLE, "*** audio block read: size = 0x%x", size); if (buf_size < (int)size) { @@ -198,7 +198,7 @@ u32 adecOpen(AudioDecoder* data) thread t("Audio Decoder[" + std::to_string(adec_id) + "] Thread", [&]() { - LOGF_NOTICE(HLE, "Audio Decoder thread started"); + LOG_NOTICE(HLE, "Audio Decoder thread started"); AdecTask& task = adec.task; @@ -231,7 +231,7 @@ u32 adecOpen(AudioDecoder* data) case adecStartSeq: { // TODO: reset data - LOGF_WARNING(HLE, "adecStartSeq:"); + LOG_WARNING(HLE, "adecStartSeq:"); adec.reader.addr = 0; adec.reader.size = 0; @@ -247,7 +247,7 @@ u32 adecOpen(AudioDecoder* data) case adecEndSeq: { // TODO: finalize - LOGF_WARNING(HLE, "adecEndSeq:"); + LOG_WARNING(HLE, "adecEndSeq:"); /*Callback cb; cb.SetAddr(adec.cbFunc); @@ -268,7 +268,7 @@ u32 adecOpen(AudioDecoder* data) adec.reader.addr = task.au.addr; adec.reader.size = task.au.size; - //LOGF_NOTICE(HLE, "Audio AU: size = 0x%x, pts = 0x%llx", task.au.size, task.au.pts); + //LOG_NOTICE(HLE, "Audio AU: size = 0x%x, pts = 0x%llx", task.au.size, task.au.pts); if (adec.just_started) { @@ -317,33 +317,33 @@ u32 adecOpen(AudioDecoder* data) err = avformat_open_input(&adec.fmt, NULL, av_find_input_format("oma"), NULL); if (err) { - LOGF_ERROR(HLE, "adecDecodeAu: avformat_open_input() failed"); + LOG_ERROR(HLE, "adecDecodeAu: avformat_open_input() failed"); Emu.Pause(); break; } AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); // ??? if (!codec) { - LOGF_ERROR(HLE, "adecDecodeAu: avcodec_find_decoder() failed"); + LOG_ERROR(HLE, "adecDecodeAu: avcodec_find_decoder() failed"); Emu.Pause(); break; } /*err = avformat_find_stream_info(adec.fmt, NULL); if (err) { - LOGF_ERROR(HLE, "adecDecodeAu: avformat_find_stream_info() failed"); + LOG_ERROR(HLE, "adecDecodeAu: avformat_find_stream_info() failed"); Emu.Pause(); break; } if (!adec.fmt->nb_streams) { - LOGF_ERROR(HLE, "adecDecodeAu: no stream found"); + LOG_ERROR(HLE, "adecDecodeAu: no stream found"); Emu.Pause(); break; }*/ if (!avformat_new_stream(adec.fmt, codec)) { - LOGF_ERROR(HLE, "adecDecodeAu: avformat_new_stream() failed"); + LOG_ERROR(HLE, "adecDecodeAu: avformat_new_stream() failed"); Emu.Pause(); break; } @@ -358,7 +358,7 @@ u32 adecOpen(AudioDecoder* data) } if (err) { - LOGF_ERROR(HLE, "adecDecodeAu: avcodec_open2() failed"); + LOG_ERROR(HLE, "adecDecodeAu: avcodec_open2() failed"); Emu.Pause(); break; } @@ -371,7 +371,7 @@ u32 adecOpen(AudioDecoder* data) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "adecDecodeAu: aborted"); + LOG_WARNING(HLE, "adecDecodeAu: aborted"); return; } @@ -420,7 +420,7 @@ u32 adecOpen(AudioDecoder* data) if (!frame.data) { - LOGF_ERROR(HLE, "adecDecodeAu: av_frame_alloc() failed"); + LOG_ERROR(HLE, "adecDecodeAu: av_frame_alloc() failed"); Emu.Pause(); break; } @@ -433,7 +433,7 @@ u32 adecOpen(AudioDecoder* data) { if (!last_frame && decode < 0) { - LOGF_ERROR(HLE, "adecDecodeAu: AU decoding error(0x%x)", decode); + LOG_ERROR(HLE, "adecDecodeAu: AU decoding error(0x%x)", decode); } if (!got_frame && adec.reader.size == 0) break; } @@ -460,18 +460,18 @@ u32 adecOpen(AudioDecoder* data) if (frame.data->format != AV_SAMPLE_FMT_FLTP) { - LOGF_ERROR(HLE, "adecDecodeaAu: unsupported frame format(%d)", frame.data->format); + LOG_ERROR(HLE, "adecDecodeaAu: unsupported frame format(%d)", frame.data->format); Emu.Pause(); break; } if (frame.data->channels != 2) { - LOGF_ERROR(HLE, "adecDecodeAu: unsupported channel count (%d)", frame.data->channels); + LOG_ERROR(HLE, "adecDecodeAu: unsupported channel count (%d)", frame.data->channels); Emu.Pause(); break; } - //LOGF_NOTICE(HLE, "got audio frame (pts=0x%llx, nb_samples=%d, ch=%d, sample_rate=%d, nbps=%d)", + //LOG_NOTICE(HLE, "got audio frame (pts=0x%llx, nb_samples=%d, ch=%d, sample_rate=%d, nbps=%d)", //frame.pts, frame.data->nb_samples, frame.data->channels, frame.data->sample_rate, //av_get_bytes_per_sample((AVSampleFormat)frame.data->format)); @@ -497,16 +497,16 @@ u32 adecOpen(AudioDecoder* data) case adecClose: { adec.is_finished = true; - LOGF_NOTICE(HLE, "Audio Decoder thread ended"); + LOG_NOTICE(HLE, "Audio Decoder thread ended"); return; } default: - LOGF_ERROR(HLE, "Audio Decoder thread error: unknown task(%d)", task.type); + LOG_ERROR(HLE, "Audio Decoder thread error: unknown task(%d)", task.type); } } adec.is_finished = true; - LOGF_WARNING(HLE, "Audio Decoder thread aborted"); + LOG_WARNING(HLE, "Audio Decoder thread aborted"); }); t.detach(); @@ -518,8 +518,8 @@ bool adecCheckType(AudioCodecType type) { switch (type) { - case CELL_ADEC_TYPE_ATRACX: LOGF_NOTICE(HLE, "*** (?) type: ATRAC3plus"); break; - case CELL_ADEC_TYPE_ATRACX_2CH: LOGF_NOTICE(HLE, "*** type: ATRAC3plus 2ch"); break; + case CELL_ADEC_TYPE_ATRACX: LOG_NOTICE(HLE, "*** (?) type: ATRAC3plus"); break; + case CELL_ADEC_TYPE_ATRACX_2CH: LOG_NOTICE(HLE, "*** type: ATRAC3plus 2ch"); break; case CELL_ADEC_TYPE_ATRACX_6CH: case CELL_ADEC_TYPE_ATRACX_8CH: @@ -609,7 +609,7 @@ int cellAdecClose(u32 handle) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "cellAdecClose(%d) aborted", handle); + LOG_WARNING(HLE, "cellAdecClose(%d) aborted", handle); break; } Sleep(1); @@ -732,7 +732,7 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) if (!swr) { - LOGF_ERROR(HLE, "cellAdecGetPcm(%d): swr_alloc_set_opts() failed", handle); + LOG_ERROR(HLE, "cellAdecGetPcm(%d): swr_alloc_set_opts() failed", handle); Emu.Pause(); free(out); if (af.data) @@ -759,7 +759,7 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) if (!Memory.CopyFromReal(outBuffer_addr, out, af.size)) { - LOGF_ERROR(HLE, "cellAdecGetPcm(%d): data copying failed (addr=0x%x)", handle, outBuffer_addr); + LOG_ERROR(HLE, "cellAdecGetPcm(%d): data copying failed (addr=0x%x)", handle, outBuffer_addr); Emu.Pause(); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.h b/rpcs3/Emu/SysCalls/Modules/cellAdec.h index 9c27cd09bf..88a6e6bf47 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.h @@ -1133,14 +1133,14 @@ public: AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); if (!codec) { - LOGF_ERROR(HLE, "AudioDecoder(): avcodec_find_decoder(ATRAC3P) failed"); + LOG_ERROR(HLE, "AudioDecoder(): avcodec_find_decoder(ATRAC3P) failed"); Emu.Pause(); return; } fmt = avformat_alloc_context(); if (!fmt) { - LOGF_ERROR(HLE, "AudioDecoder(): avformat_alloc_context failed"); + LOG_ERROR(HLE, "AudioDecoder(): avformat_alloc_context failed"); Emu.Pause(); return; } @@ -1148,7 +1148,7 @@ public: fmt->pb = avio_alloc_context(io_buf, 4096, 0, this, adecRead, NULL, NULL); if (!fmt->pb) { - LOGF_ERROR(HLE, "AudioDecoder(): avio_alloc_context failed"); + LOG_ERROR(HLE, "AudioDecoder(): avio_alloc_context failed"); Emu.Pause(); return; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index dab64ff67a..255a6558df 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -50,11 +50,11 @@ int cellAudioInit() if (do_dump && !m_dump.Init()) { - LOGF_ERROR(HLE, "cellAudioInit(): AudioDumper::Init() failed"); + LOG_ERROR(HLE, "cellAudioInit(): AudioDumper::Init() failed"); return; } - LOGF_NOTICE(HLE, "Audio thread started"); + LOG_NOTICE(HLE, "Audio thread started"); if (Ini.AudioDumpToFile.GetValue()) m_dump.WriteHeader(); @@ -146,7 +146,7 @@ int cellAudioInit() { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "Audio thread aborted"); + LOG_WARNING(HLE, "Audio thread aborted"); goto abort; } @@ -426,7 +426,7 @@ int cellAudioInit() { if (m_dump.WriteData(&buf8ch, sizeof(buf8ch)) != sizeof(buf8ch)) // write file data { - LOGF_ERROR(HLE, "cellAudioInit(): AudioDumper::WriteData() failed"); + LOG_ERROR(HLE, "cellAudioInit(): AudioDumper::WriteData() failed"); goto abort; } } @@ -434,21 +434,21 @@ int cellAudioInit() { if (m_dump.WriteData(&buf2ch, sizeof(buf2ch)) != sizeof(buf2ch)) // write file data { - LOGF_ERROR(HLE, "cellAudioInit(): AudioDumper::WriteData() failed"); + LOG_ERROR(HLE, "cellAudioInit(): AudioDumper::WriteData() failed"); goto abort; } } else { - LOGF_ERROR(HLE, "cellAudioInit(): unknown AudioDumper::GetCh() value (%d)", m_dump.GetCh()); + LOG_ERROR(HLE, "cellAudioInit(): unknown AudioDumper::GetCh() value (%d)", m_dump.GetCh()); goto abort; } } - //LOGF_NOTICE(HLE, "Audio perf: start=%d (access=%d, AddData=%d, events=%d, dump=%d)", + //LOG_NOTICE(HLE, "Audio perf: start=%d (access=%d, AddData=%d, events=%d, dump=%d)", //stamp0 - m_config.start_time, stamp1 - stamp0, stamp2 - stamp1, stamp3 - stamp2, get_system_time() - stamp3); } - LOGF_NOTICE(HLE, "Audio thread ended"); + LOG_NOTICE(HLE, "Audio thread ended"); abort: queue.Push(nullptr); queue_float.Push(nullptr); @@ -480,7 +480,7 @@ abort: { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "cellAudioInit() aborted"); + LOG_WARNING(HLE, "cellAudioInit() aborted"); return CELL_OK; } Sleep(1); @@ -505,7 +505,7 @@ int cellAudioQuit() Sleep(1); if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "cellAudioQuit(): aborted"); + LOG_WARNING(HLE, "cellAudioQuit(): aborted"); return CELL_OK; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index b3722229e4..ee799261b7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -47,7 +47,7 @@ u32 dmuxOpen(Demuxer* data) thread t("Demuxer[" + std::to_string(dmux_id) + "] Thread", [&]() { - LOGF_NOTICE(HLE, "Demuxer thread started (mem=0x%x, size=0x%x, cb=0x%x, arg=0x%x)", dmux.memAddr, dmux.memSize, dmux.cbFunc, dmux.cbArg); + LOG_NOTICE(HLE, "Demuxer thread started (mem=0x%x, size=0x%x, cb=0x%x, arg=0x%x)", dmux.memAddr, dmux.memSize, dmux.cbFunc, dmux.cbArg); DemuxerTask task; DemuxerStream stream; @@ -134,7 +134,7 @@ u32 dmuxOpen(Demuxer* data) if (!pes.new_au) // temporarily { - LOGF_ERROR(HLE, "No pts info found"); + LOG_ERROR(HLE, "No pts info found"); } // read additional header: @@ -149,7 +149,7 @@ u32 dmuxOpen(Demuxer* data) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "esATX[%d] was full, waiting aborted", ch); + LOG_WARNING(HLE, "esATX[%d] was full, waiting aborted", ch); return; } Sleep(1); @@ -166,7 +166,7 @@ u32 dmuxOpen(Demuxer* data) es.push(stream, len - pes.size - 3, pes); es.finish(stream); - //LOGF_NOTICE(HLE, "*** AT3+ AU sent (len=0x%x, pts=0x%llx)", len - pes.size - 3, pes.pts); + //LOG_NOTICE(HLE, "*** AT3+ AU sent (len=0x%x, pts=0x%llx)", len - pes.size - 3, pes.pts); mem_ptr_t esMsg(a128(dmux.memAddr) + (cb_add ^= 16)); esMsg->msgType = CELL_DMUX_ES_MSG_TYPE_AU_FOUND; @@ -198,7 +198,7 @@ u32 dmuxOpen(Demuxer* data) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "esAVC[%d] was full, waiting aborted", ch); + LOG_WARNING(HLE, "esAVC[%d] was full, waiting aborted", ch); return; } Sleep(1); @@ -236,7 +236,7 @@ u32 dmuxOpen(Demuxer* data) if (pes.new_au) { - //LOGF_NOTICE(HLE, "*** AVC AU detected (pts=0x%llx, dts=0x%llx)", pes.pts, pes.dts); + //LOG_NOTICE(HLE, "*** AVC AU detected (pts=0x%llx, dts=0x%llx)", pes.pts, pes.dts); } if (es.isfull()) @@ -268,7 +268,7 @@ u32 dmuxOpen(Demuxer* data) case 0x1dc: case 0x1dd: case 0x1de: case 0x1df: { // unknown - LOGF_WARNING(HLE, "Unknown MPEG stream found"); + LOG_WARNING(HLE, "Unknown MPEG stream found"); stream.skip(4); stream.get(len); stream.skip(len); @@ -277,7 +277,7 @@ u32 dmuxOpen(Demuxer* data) case USER_DATA_START_CODE: { - LOGF_ERROR(HLE, "USER_DATA_START_CODE found"); + LOG_ERROR(HLE, "USER_DATA_START_CODE found"); return; } @@ -304,7 +304,7 @@ u32 dmuxOpen(Demuxer* data) { if (task.stream.discontinuity) { - LOGF_WARNING(HLE, "dmuxSetStream (beginning)"); + LOG_WARNING(HLE, "dmuxSetStream (beginning)"); for (u32 i = 0; i < 192; i++) { if (esALL[i]) @@ -318,13 +318,13 @@ u32 dmuxOpen(Demuxer* data) if (updates_count != updates_signaled) { - LOGF_ERROR(HLE, "dmuxSetStream: stream update inconsistency (input=%d, signaled=%d)", updates_count, updates_signaled); + LOG_ERROR(HLE, "dmuxSetStream: stream update inconsistency (input=%d, signaled=%d)", updates_count, updates_signaled); return; } updates_count++; stream = task.stream; - //LOGF_NOTICE(HLE, "*** stream updated(addr=0x%x, size=0x%x, discont=%d, userdata=0x%llx)", + //LOG_NOTICE(HLE, "*** stream updated(addr=0x%x, size=0x%x, discont=%d, userdata=0x%llx)", //stream.addr, stream.size, stream.discontinuity, stream.userdata); dmux.is_running = true; @@ -357,7 +357,7 @@ u32 dmuxOpen(Demuxer* data) case dmuxClose: { dmux.is_finished = true; - LOGF_NOTICE(HLE, "Demuxer thread ended"); + LOG_NOTICE(HLE, "Demuxer thread ended"); return; } @@ -381,7 +381,7 @@ u32 dmuxOpen(Demuxer* data) } else { - LOGF_WARNING(HLE, "dmuxEnableEs: (TODO) unsupported filter (0x%x, 0x%x, 0x%x, 0x%x)", es.fidMajor, es.fidMinor, es.sup1, es.sup2); + LOG_WARNING(HLE, "dmuxEnableEs: (TODO) unsupported filter (0x%x, 0x%x, 0x%x, 0x%x)", es.fidMajor, es.fidMinor, es.sup1, es.sup2); } es.dmux = &dmux; } @@ -392,7 +392,7 @@ u32 dmuxOpen(Demuxer* data) ElementaryStream& es = *task.es.es_ptr; if (es.dmux != &dmux) { - LOGF_WARNING(HLE, "dmuxDisableEs: invalid elementary stream"); + LOG_WARNING(HLE, "dmuxDisableEs: invalid elementary stream"); break; } for (u32 i = 0; i < 192; i++) @@ -450,11 +450,11 @@ u32 dmuxOpen(Demuxer* data) break; default: - LOGF_ERROR(HLE, "Demuxer thread error: unknown task(%d)", task.type); + LOG_ERROR(HLE, "Demuxer thread error: unknown task(%d)", task.type); return; } } - LOGF_WARNING(HLE, "Demuxer thread aborted"); + LOG_WARNING(HLE, "Demuxer thread aborted"); }); t.detach(); @@ -598,7 +598,7 @@ int cellDmuxClose(u32 demuxerHandle) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "cellDmuxClose(%d) aborted", demuxerHandle); + LOG_WARNING(HLE, "cellDmuxClose(%d) aborted", demuxerHandle); return CELL_OK; } @@ -630,7 +630,7 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "cellDmuxSetStream(%d) aborted (waiting)", demuxerHandle); + LOG_WARNING(HLE, "cellDmuxSetStream(%d) aborted (waiting)", demuxerHandle); return CELL_OK; } Sleep(1); @@ -649,12 +649,12 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize u32 addr; if (!dmux->fbSetStream.Pop(addr)) { - LOGF_WARNING(HLE, "cellDmuxSetStream(%d) aborted (fbSetStream.Pop())", demuxerHandle); + LOG_WARNING(HLE, "cellDmuxSetStream(%d) aborted (fbSetStream.Pop())", demuxerHandle); return CELL_OK; } if (addr != info.addr) { - LOGF_ERROR(HLE, "cellDmuxSetStream(%d): wrong stream queued (right=0x%x, queued=0x%x)", demuxerHandle, info.addr, addr); + LOG_ERROR(HLE, "cellDmuxSetStream(%d): wrong stream queued (right=0x%x, queued=0x%x)", demuxerHandle, info.addr, addr); Emu.Pause(); } return CELL_OK; @@ -690,12 +690,12 @@ int cellDmuxResetStreamAndWaitDone(u32 demuxerHandle) u32 addr; if (!dmux->fbSetStream.Pop(addr)) { - LOGF_WARNING(HLE, "cellDmuxResetStreamAndWaitDone(%d) aborted (fbSetStream.Pop())", demuxerHandle); + LOG_WARNING(HLE, "cellDmuxResetStreamAndWaitDone(%d) aborted (fbSetStream.Pop())", demuxerHandle); return CELL_OK; } if (addr != 0) { - LOGF_ERROR(HLE, "cellDmuxResetStreamAndWaitDone(%d): wrong stream queued (0x%x)", demuxerHandle, addr); + LOG_ERROR(HLE, "cellDmuxResetStreamAndWaitDone(%d): wrong stream queued (0x%x)", demuxerHandle, addr); Emu.Pause(); } return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.h b/rpcs3/Emu/SysCalls/Modules/cellDmux.h index 48f4775bab..750de6eaf6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.h +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.h @@ -394,14 +394,14 @@ struct PesHeader new_au = true; if ((v & 0xF0) != 0x30 || (size - empty) < 10) { - LOGF_ERROR(HLE, "PesHeader(): pts not found"); + LOG_ERROR(HLE, "PesHeader(): pts not found"); Emu.Pause(); } pts = stream.get_ts(v); stream.get(v); if ((v & 0xF0) != 0x10) { - LOGF_ERROR(HLE, "PesHeader(): dts not found"); + LOG_ERROR(HLE, "PesHeader(): dts not found"); Emu.Pause(); } dts = stream.get_ts(v); @@ -557,7 +557,7 @@ public: { if (size > GetMaxAU()) { - LOGF_ERROR(HLE, "es::freespace(): last_size too big (size=0x%x, max_au=0x%x)", size, GetMaxAU()); + LOG_ERROR(HLE, "es::freespace(): last_size too big (size=0x%x, max_au=0x%x)", size, GetMaxAU()); Emu.Pause(); return 0; } @@ -587,7 +587,7 @@ public: u32 addr; { std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, ">>> es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); addr = put; /*if (!first) @@ -600,7 +600,7 @@ public: }*/ mem_ptr_t info(put); - //if (fidMajor != 0xbd) LOGF_WARNING(HLE, "es::finish(): (%s) size = 0x%x, info_addr=0x%x, pts = 0x%x", + //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::finish(): (%s) size = 0x%x, info_addr=0x%x, pts = 0x%x", //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), //(u32)info->auSize, put, (u32)info->ptsLower); @@ -611,11 +611,11 @@ public: size = 0; put_count++; - //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, "<<< es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); } if (!entries.Push(addr)) { - LOGF_ERROR(HLE, "es::finish() aborted (no space)"); + LOG_ERROR(HLE, "es::finish() aborted (no space)"); } } @@ -625,7 +625,7 @@ public: if (is_full()) { - LOGF_ERROR(HLE, "es::push(): buffer is full"); + LOG_ERROR(HLE, "es::push(): buffer is full"); Emu.Pause(); return; } @@ -634,7 +634,7 @@ public: size += sz; if (!Memory.Copy(data_addr, stream.addr, sz)) { - LOGF_ERROR(HLE, "es::push(): data copying failed"); + LOG_ERROR(HLE, "es::push(): data copying failed"); Emu.Pause(); return; } @@ -674,22 +674,22 @@ public: bool release() { std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, ">>> es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); if (released >= put_count) { - LOGF_ERROR(HLE, "es::release(): buffer is empty"); + LOG_ERROR(HLE, "es::release(): buffer is empty"); return false; } u32 addr = entries.Peek(); mem_ptr_t info(addr); - //if (fidMajor != 0xbd) LOGF_WARNING(HLE, "es::release(): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", + //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::release(): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), (u32)info->auSize, first, (u32)info->ptsLower); if (released >= peek_count) { - LOGF_ERROR(HLE, "es::release(): buffer has not been seen yet"); + LOG_ERROR(HLE, "es::release(): buffer has not been seen yet"); return false; } @@ -711,30 +711,30 @@ public: released++; if (!entries.Pop(addr)) { - LOGF_ERROR(HLE, "es::release(): entries.Pop() aborted (no entries found)"); + LOG_ERROR(HLE, "es::release(): entries.Pop() aborted (no entries found)"); return false; } - //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, "<<< es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); return true; } bool peek(u32& out_data, bool no_ex, u32& out_spec, bool update_index) { std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, ">>> es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); if (peek_count >= put_count) return false; if (peek_count < released) { - LOGF_ERROR(HLE, "es::peek(): sequence error: peek_count < released (peek_count=%d, released=%d)", peek_count, released); + LOG_ERROR(HLE, "es::peek(): sequence error: peek_count < released (peek_count=%d, released=%d)", peek_count, released); Emu.Pause(); return false; } u32 addr = entries.Peek(peek_count - released); mem_ptr_t info(addr); - //if (fidMajor != 0xbd) LOGF_WARNING(HLE, "es::peek(%sAu(Ex)): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", + //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::peek(%sAu(Ex)): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", //wxString(update_index ? "Get" : "Peek").wx_str(), //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), (u32)info->auSize, peek, (u32)info->ptsLower); @@ -760,7 +760,7 @@ public: peek_count++; } - //if (fidMajor != 0xbd) LOGF_NOTICE(HLE, "<<< es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); return true; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 57e166334c..ab4ec91f5b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -93,7 +93,7 @@ int cellSyncMutexLock(mem_ptr_t mutex) Sleep(1); if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "cellSyncMutexLock(mutex=0x%x) aborted", mutex.GetAddr()); + LOG_WARNING(HLE, "cellSyncMutexLock(mutex=0x%x) aborted", mutex.GetAddr()); break; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index 96936a39ff..2517a23fe5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -230,7 +230,7 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ { funcFile(result.GetAddr(), fileGet.GetAddr(), fileSet.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "modifySaveDataFiles: CellSaveDataFileCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "modifySaveDataFiles: CellSaveDataFileCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } if (result->result == CELL_SAVEDATA_CBRESULT_OK_LAST) { @@ -251,7 +251,7 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ case CELL_SAVEDATA_FILETYPE_CONTENT_SND0: filepath += "SND0.AT3"; break; default: - LOGF_ERROR(HLE, "modifySaveDataFiles: Unknown fileType! Aborting..."); + LOG_ERROR(HLE, "modifySaveDataFiles: Unknown fileType! Aborting..."); return CELL_SAVEDATA_ERROR_PARAM; } @@ -274,11 +274,11 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ break; case CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC: - LOGF_WARNING(HLE, "modifySaveDataFiles: File operation CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC not yet implemented"); + LOG_WARNING(HLE, "modifySaveDataFiles: File operation CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC not yet implemented"); break; default: - LOGF_ERROR(HLE, "modifySaveDataFiles: Unknown fileOperation! Aborting..."); + LOG_ERROR(HLE, "modifySaveDataFiles: Unknown fileOperation! Aborting..."); return CELL_SAVEDATA_ERROR_PARAM; } @@ -339,7 +339,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m funcList(result.GetAddr(), listGet.GetAddr(), listSet.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } if (!listSet->fixedList.IsGood()) @@ -349,7 +349,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m if (listSet->newData.IsGood()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { - LOGF_WARNING(HLE, "cellSaveDataListSave2: No save entries found!"); // TODO: Find a better way to handle this error + LOG_WARNING(HLE, "cellSaveDataListSave2: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -362,7 +362,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -424,7 +424,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m funcList(result.GetAddr(), listGet.GetAddr(), listSet.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } if (!listSet->fixedList.IsGood()) @@ -434,7 +434,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m if (listSet->newData.IsGood()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { - LOGF_WARNING(HLE, "cellSaveDataListLoad2: No save entries found!"); // TODO: Find a better way to handle this error + LOG_WARNING(HLE, "cellSaveDataListLoad2: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -447,7 +447,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -508,7 +508,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, } funcFixed(result.GetAddr(), listGet.GetAddr(), fixedSet.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } setSaveDataFixed(saveEntries, fixedSet.GetAddr()); @@ -519,7 +519,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -580,7 +580,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, } funcFixed(result.GetAddr(), listGet.GetAddr(), fixedSet.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } setSaveDataFixed(saveEntries, fixedSet.GetAddr()); @@ -591,7 +591,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -647,7 +647,7 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataAutoSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataAutoSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) @@ -690,7 +690,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ // The target entry does not exist if (saveEntries.size() == 0) { - LOGF_WARNING(HLE, "cellSaveDataAutoLoad2: Couldn't find save entry (%s)", dirName.c_str()); + LOG_WARNING(HLE, "cellSaveDataAutoLoad2: Couldn't find save entry (%s)", dirName.c_str()); return CELL_OK; // TODO: Can anyone check the actual behaviour of a PS3 when saves are not found? } @@ -700,7 +700,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOGF_ERROR(HLE, "cellSaveDataAutoLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + LOG_ERROR(HLE, "cellSaveDataAutoLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.IsGood()) diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 94bd9c0be6..29b12f10f7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -35,7 +35,7 @@ next: { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "vdecRead(): aborted"); + LOG_WARNING(HLE, "vdecRead(): aborted"); return 0; } Sleep(1); @@ -52,7 +52,7 @@ next: { if (!Memory.CopyToReal(buf, vdec.reader.addr, vdec.reader.size)) { - LOGF_ERROR(HLE, "vdecRead(): data reading failed (reader.size=0x%x)", vdec.reader.size); + LOG_ERROR(HLE, "vdecRead(): data reading failed (reader.size=0x%x)", vdec.reader.size); Emu.Pause(); return 0; } @@ -71,11 +71,11 @@ next: vdec.reader.addr = vdec.task.addr; vdec.reader.size = vdec.task.size; - //LOGF_NOTICE(HLE, "Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", vdec.task.size, vdec.task.pts, vdec.task.dts); + //LOG_NOTICE(HLE, "Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", vdec.task.size, vdec.task.pts, vdec.task.dts); } break; default: - LOGF_ERROR(HLE, "vdecRead(): sequence error (task %d)", vdec.job.Peek().type); + LOG_ERROR(HLE, "vdecRead(): sequence error (task %d)", vdec.job.Peek().type); return 0; } @@ -92,7 +92,7 @@ next: } else if (!Memory.CopyToReal(buf, vdec.reader.addr, buf_size)) { - LOGF_ERROR(HLE, "vdecRead(): data reading failed (buf_size=0x%x)", buf_size); + LOG_ERROR(HLE, "vdecRead(): data reading failed (buf_size=0x%x)", buf_size); Emu.Pause(); return 0; } @@ -136,7 +136,7 @@ u32 vdecOpen(VideoDecoder* data) thread t("Video Decoder[" + std::to_string(vdec_id) + "] Thread", [&]() { - LOGF_NOTICE(HLE, "Video Decoder thread started"); + LOG_NOTICE(HLE, "Video Decoder thread started"); VdecTask& task = vdec.task; @@ -169,7 +169,7 @@ u32 vdecOpen(VideoDecoder* data) case vdecStartSeq: { // TODO: reset data - LOGF_WARNING(HLE, "vdecStartSeq:"); + LOG_WARNING(HLE, "vdecStartSeq:"); vdec.reader.addr = 0; vdec.reader.size = 0; @@ -181,7 +181,7 @@ u32 vdecOpen(VideoDecoder* data) case vdecEndSeq: { // TODO: finalize - LOGF_WARNING(HLE, "vdecEndSeq:"); + LOG_WARNING(HLE, "vdecEndSeq:"); vdec.vdecCb->ExecAsCallback(vdec.cbFunc, false, vdec.id, CELL_VDEC_MSG_TYPE_SEQDONE, CELL_OK, vdec.cbArg); /*Callback cb; @@ -202,13 +202,13 @@ u32 vdecOpen(VideoDecoder* data) if (task.mode != CELL_VDEC_DEC_MODE_NORMAL) { - LOGF_ERROR(HLE, "vdecDecodeAu: unsupported decoding mode(%d)", task.mode); + LOG_ERROR(HLE, "vdecDecodeAu: unsupported decoding mode(%d)", task.mode); break; } vdec.reader.addr = task.addr; vdec.reader.size = task.size; - //LOGF_NOTICE(HLE, "Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", task.size, task.pts, task.dts); + //LOG_NOTICE(HLE, "Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", task.size, task.pts, task.dts); if (vdec.just_started) { @@ -249,33 +249,33 @@ u32 vdecOpen(VideoDecoder* data) err = avformat_open_input(&vdec.fmt, NULL, av_find_input_format("mpeg"), NULL); if (err) { - LOGF_ERROR(HLE, "vdecDecodeAu: avformat_open_input() failed"); + LOG_ERROR(HLE, "vdecDecodeAu: avformat_open_input() failed"); Emu.Pause(); break; } AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); // ??? if (!codec) { - LOGF_ERROR(HLE, "vdecDecodeAu: avcodec_find_decoder() failed"); + LOG_ERROR(HLE, "vdecDecodeAu: avcodec_find_decoder() failed"); Emu.Pause(); break; } /*err = avformat_find_stream_info(vdec.fmt, NULL); if (err) { - LOGF_ERROR(HLE, "vdecDecodeAu: avformat_find_stream_info() failed"); + LOG_ERROR(HLE, "vdecDecodeAu: avformat_find_stream_info() failed"); Emu.Pause(); break; } if (!vdec.fmt->nb_streams) { - LOGF_ERROR(HLE, "vdecDecodeAu: no stream found"); + LOG_ERROR(HLE, "vdecDecodeAu: no stream found"); Emu.Pause(); break; }*/ if (!avformat_new_stream(vdec.fmt, codec)) { - LOGF_ERROR(HLE, "vdecDecodeAu: avformat_new_stream() failed"); + LOG_ERROR(HLE, "vdecDecodeAu: avformat_new_stream() failed"); Emu.Pause(); break; } @@ -290,7 +290,7 @@ u32 vdecOpen(VideoDecoder* data) } if (err) { - LOGF_ERROR(HLE, "vdecDecodeAu: avcodec_open2() failed"); + LOG_ERROR(HLE, "vdecDecodeAu: avcodec_open2() failed"); Emu.Pause(); break; } @@ -305,7 +305,7 @@ u32 vdecOpen(VideoDecoder* data) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "vdecDecodeAu: aborted"); + LOG_WARNING(HLE, "vdecDecodeAu: aborted"); return; } @@ -338,7 +338,7 @@ u32 vdecOpen(VideoDecoder* data) if (!frame.data) { - LOGF_ERROR(HLE, "vdecDecodeAu: av_frame_alloc() failed"); + LOG_ERROR(HLE, "vdecDecodeAu: av_frame_alloc() failed"); Emu.Pause(); break; } @@ -351,7 +351,7 @@ u32 vdecOpen(VideoDecoder* data) { if (!last_frame && decode < 0) { - LOGF_ERROR(HLE, "vdecDecodeAu: AU decoding error(0x%x)", decode); + LOG_ERROR(HLE, "vdecDecodeAu: AU decoding error(0x%x)", decode); } if (!got_picture && vdec.reader.size == 0) break; // video end? } @@ -374,7 +374,7 @@ u32 vdecOpen(VideoDecoder* data) frame.dts = (frame.pts - vdec.first_pts) + vdec.first_dts; frame.userdata = task.userData; - //LOGF_NOTICE(HLE, "got picture (pts=0x%llx, dts=0x%llx)", frame.pts, frame.dts); + //LOG_NOTICE(HLE, "got picture (pts=0x%llx, dts=0x%llx)", frame.pts, frame.dts); vdec.frames.Push(frame); // !!!!!!!! frame.data = nullptr; // to prevent destruction @@ -398,23 +398,23 @@ u32 vdecOpen(VideoDecoder* data) case vdecClose: { vdec.is_finished = true; - LOGF_NOTICE(HLE, "Video Decoder thread ended"); + LOG_NOTICE(HLE, "Video Decoder thread ended"); return; } case vdecSetFrameRate: { - LOGF_ERROR(HLE, "TODO: vdecSetFrameRate(%d)", task.frc); + LOG_ERROR(HLE, "TODO: vdecSetFrameRate(%d)", task.frc); } break; default: - LOGF_ERROR(HLE, "Video Decoder thread error: unknown task(%d)", task.type); + LOG_ERROR(HLE, "Video Decoder thread error: unknown task(%d)", task.type); } } vdec.is_finished = true; - LOGF_WARNING(HLE, "Video Decoder thread aborted"); + LOG_WARNING(HLE, "Video Decoder thread aborted"); }); t.detach(); @@ -502,7 +502,7 @@ int cellVdecClose(u32 handle) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "cellVdecClose(%d) aborted", handle); + LOG_WARNING(HLE, "cellVdecClose(%d) aborted", handle); break; } Sleep(1); @@ -553,7 +553,7 @@ int cellVdecEndSeq(u32 handle) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "cellVdecEndSeq(%d) aborted", handle); + LOG_WARNING(HLE, "cellVdecEndSeq(%d) aborted", handle); return CELL_OK; } Sleep(1); @@ -751,13 +751,13 @@ int cellVdecGetPicItem(u32 handle, mem32_t picItem_ptr) } else { - LOGF_ERROR(HLE, "cellVdecGetPicItem: unsupported time_base.den (%d)", vdec->ctx->time_base.den); + LOG_ERROR(HLE, "cellVdecGetPicItem: unsupported time_base.den (%d)", vdec->ctx->time_base.den); Emu.Pause(); } } else { - LOGF_ERROR(HLE, "cellVdecGetPicItem: unsupported time_base.num (%d)", vdec->ctx->time_base.num); + LOG_ERROR(HLE, "cellVdecGetPicItem: unsupported time_base.num (%d)", vdec->ctx->time_base.num); Emu.Pause(); } avc->fixed_frame_rate_flag = true; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.h b/rpcs3/Emu/SysCalls/Modules/cellVdec.h index 2e7133fdc3..7c9508d049 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.h @@ -741,14 +741,14 @@ public: AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); if (!codec) { - LOGF_ERROR(HLE, "VideoDecoder(): avcodec_find_decoder(H264) failed"); + LOG_ERROR(HLE, "VideoDecoder(): avcodec_find_decoder(H264) failed"); Emu.Pause(); return; } fmt = avformat_alloc_context(); if (!fmt) { - LOGF_ERROR(HLE, "VideoDecoder(): avformat_alloc_context failed"); + LOG_ERROR(HLE, "VideoDecoder(): avformat_alloc_context failed"); Emu.Pause(); return; } @@ -756,7 +756,7 @@ public: fmt->pb = avio_alloc_context(io_buf, 4096, 0, this, vdecRead, NULL, NULL); if (!fmt->pb) { - LOGF_ERROR(HLE, "VideoDecoder(): avio_alloc_context failed"); + LOG_ERROR(HLE, "VideoDecoder(): avio_alloc_context failed"); Emu.Pause(); return; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index 0fbab6924b..8219861713 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -38,7 +38,7 @@ u32 vpostOpen(VpostInstance* data) { u32 id = cellVpost->GetNewId(data); - LOGF_NOTICE(HLE, "*** Vpost instance created (to_rgba=%d): id = %d", data->to_rgba, id); + LOG_NOTICE(HLE, "*** Vpost instance created (to_rgba=%d): id = %d", data->to_rgba, id); return id; } @@ -123,15 +123,15 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_tinWindow; // ignored - if (ctrlParam->inWindow.x) LOGF_WARNING(HLE, "*** inWindow.x = %d", (u32)ctrlParam->inWindow.x); - if (ctrlParam->inWindow.y) LOGF_WARNING(HLE, "*** inWindow.y = %d", (u32)ctrlParam->inWindow.y); - if (ctrlParam->inWindow.width != w) LOGF_WARNING(HLE, "*** inWindow.width = %d", (u32)ctrlParam->inWindow.width); - if (ctrlParam->inWindow.height != h) LOGF_WARNING(HLE, "*** inWindow.height = %d", (u32)ctrlParam->inWindow.height); + if (ctrlParam->inWindow.x) LOG_WARNING(HLE, "*** inWindow.x = %d", (u32)ctrlParam->inWindow.x); + if (ctrlParam->inWindow.y) LOG_WARNING(HLE, "*** inWindow.y = %d", (u32)ctrlParam->inWindow.y); + if (ctrlParam->inWindow.width != w) LOG_WARNING(HLE, "*** inWindow.width = %d", (u32)ctrlParam->inWindow.width); + if (ctrlParam->inWindow.height != h) LOG_WARNING(HLE, "*** inWindow.height = %d", (u32)ctrlParam->inWindow.height); ctrlParam->outWindow; // ignored - if (ctrlParam->outWindow.x) LOGF_WARNING(HLE, "*** outWindow.x = %d", (u32)ctrlParam->outWindow.x); - if (ctrlParam->outWindow.y) LOGF_WARNING(HLE, "*** outWindow.y = %d", (u32)ctrlParam->outWindow.y); - if (ctrlParam->outWindow.width != ow) LOGF_WARNING(HLE, "*** outWindow.width = %d", (u32)ctrlParam->outWindow.width); - if (ctrlParam->outWindow.height != oh) LOGF_WARNING(HLE, "*** outWindow.height = %d", (u32)ctrlParam->outWindow.height); + if (ctrlParam->outWindow.x) LOG_WARNING(HLE, "*** outWindow.x = %d", (u32)ctrlParam->outWindow.x); + if (ctrlParam->outWindow.y) LOG_WARNING(HLE, "*** outWindow.y = %d", (u32)ctrlParam->outWindow.y); + if (ctrlParam->outWindow.width != ow) LOG_WARNING(HLE, "*** outWindow.width = %d", (u32)ctrlParam->outWindow.width); + if (ctrlParam->outWindow.height != oh) LOG_WARNING(HLE, "*** outWindow.height = %d", (u32)ctrlParam->outWindow.height); ctrlParam->execType; // ignored ctrlParam->scalerType; // ignored ctrlParam->ipcType; // ignored diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 5348b0c352..1d35191bd7 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -209,7 +209,7 @@ void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_toffset, buf_addr, (u64)aio->size, error, res, xid, orig_file->GetPath().c_str()); if (func) // start callback thread @@ -223,7 +223,7 @@ fin: Sleep(1); if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "fsAioRead() aborted"); + LOG_WARNING(HLE, "fsAioRead() aborted"); break; } }*/ diff --git a/rpcs3/Emu/SysCalls/Static.cpp b/rpcs3/Emu/SysCalls/Static.cpp index 02c8a679c0..7a0bf9f784 100644 --- a/rpcs3/Emu/SysCalls/Static.cpp +++ b/rpcs3/Emu/SysCalls/Static.cpp @@ -54,14 +54,14 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) k--; if (can_skip) // cannot define this behaviour properly { - LOGF_WARNING(LOADER, "StaticAnalyse(): can_skip = %d (unchanged)", can_skip); + LOG_WARNING(LOADER, "StaticAnalyse(): can_skip = %d (unchanged)", can_skip); } } else { if (can_skip) // cannot define this behaviour properly { - LOGF_WARNING(LOADER, "StaticAnalyse(): can_skip = %d (set to 0)", can_skip); + LOG_WARNING(LOADER, "StaticAnalyse(): can_skip = %d (set to 0)", can_skip); can_skip = 0; } } @@ -85,7 +85,7 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) } if (found) { - LOGF_NOTICE(LOADER, "Function '%s' hooked (addr=0x%x)", m_static_funcs_list[j]->name, i * 4 + base); + LOG_NOTICE(LOADER, "Function '%s' hooked (addr=0x%x)", m_static_funcs_list[j]->name, i * 4 + base); m_static_funcs_list[j]->found++; data[i+0] = re32(0x39600000 | j); // li r11, j data[i+1] = se32(0x44000003); // sc 3 @@ -129,7 +129,7 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) if (count == 0) { res |= GSR_MISSING; - LOGF_ERROR(LOADER, "Function '%s' not found", m_static_funcs_list[j]->name); + LOG_ERROR(LOADER, "Function '%s' not found", m_static_funcs_list[j]->name); } else if (count > 1) { @@ -146,7 +146,7 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) if (m_static_funcs_list[k]->found) { res |= GSR_EXCESS; - LOGF_ERROR(LOADER, "Function '%s' hooked twice", m_static_funcs_list[j]->name); + LOG_ERROR(LOADER, "Function '%s' hooked twice", m_static_funcs_list[j]->name); } } } @@ -154,7 +154,7 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) else { res |= GSR_EXCESS; - LOGF_ERROR(LOADER, "Function '%s' hooked twice", m_static_funcs_list[j]->name); + LOG_ERROR(LOADER, "Function '%s' hooked twice", m_static_funcs_list[j]->name); } } @@ -170,11 +170,11 @@ void StaticFuncManager::StaticAnalyse(void* ptr, u32 size, u32 base) if (res == GSR_SUCCESS) { - LOGF_SUCCESS(LOADER, "Function group [%s] successfully hooked", std::string(name, 9).c_str()); + LOG_SUCCESS(LOADER, "Function group [%s] successfully hooked", std::string(name, 9).c_str()); } else { - LOGF_ERROR(LOADER, "Function group [%s] failed:%s%s", std::string(name, 9).c_str(), + LOG_ERROR(LOADER, "Function group [%s] failed:%s%s", std::string(name, 9).c_str(), (res & GSR_MISSING ? " missing;" : ""), (res & GSR_EXCESS ? " excess;" : "")); } @@ -190,7 +190,7 @@ void StaticFuncManager::StaticExecute(u32 code) } else { - LOGF_ERROR(LOADER, "StaticExecute(%d): unknown function or illegal opcode", code); + LOG_ERROR(LOADER, "StaticExecute(%d): unknown function or illegal opcode", code); } } diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 7a3bb4a787..fadb0b3148 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -553,7 +553,7 @@ void default_syscall() { //tty case 988: - LOGF_WARNING(HLE, "SysCall 988! r3: 0x%llx, r4: 0x%llx, pc: 0x%llx", + LOG_WARNING(HLE, "SysCall 988! r3: 0x%llx, r4: 0x%llx, pc: 0x%llx", CPU.GPR[3], CPU.GPR[4], CPU.PC); RESULT(0); return; @@ -561,16 +561,16 @@ void default_syscall() case 999: dump_enable = !dump_enable; Emu.Pause(); - LOGF_WARNING(HLE, "Dump %s", (dump_enable ? "enabled" : "disabled")); + LOG_WARNING(HLE, "Dump %s", (dump_enable ? "enabled" : "disabled")); return; case 1000: Ini.HLELogging.SetValue(!Ini.HLELogging.GetValue()); - LOGF_WARNING(HLE, "Log %s", (Ini.HLELogging.GetValue() ? "enabled" : "disabled")); + LOG_WARNING(HLE, "Log %s", (Ini.HLELogging.GetValue() ? "enabled" : "disabled")); return; } - LOGF_ERROR(HLE, "Unknown syscall: %d - %08x", code, code); + LOG_ERROR(HLE, "Unknown syscall: %d - %08x", code, code); RESULT(0); return; } @@ -589,7 +589,7 @@ void SysCalls::DoSyscall(u32 code) } - LOGF_ERROR(HLE, "TODO: %s", GetHLEFuncName(code).c_str()); + LOG_ERROR(HLE, "TODO: %s", GetHLEFuncName(code).c_str()); declCPU(); RESULT(0); } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp index dfd7312a2e..1e06dcd5d7 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp @@ -85,7 +85,7 @@ int sys_cond_signal(u32 cond_id) if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_cond_signal(id=%d) aborted", cond_id); + LOG_WARNING(HLE, "sys_cond_signal(id=%d) aborted", cond_id); } } @@ -113,7 +113,7 @@ int sys_cond_signal_all(u32 cond_id) if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_cond_signal_all(id=%d) aborted", cond_id); + LOG_WARNING(HLE, "sys_cond_signal_all(id=%d) aborted", cond_id); break; } } @@ -153,7 +153,7 @@ int sys_cond_signal_to(u32 cond_id, u32 thread_id) if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_cond_signal_to(id=%d, to=%d) aborted", cond_id, thread_id); + LOG_WARNING(HLE, "sys_cond_signal_to(id=%d, to=%d) aborted", cond_id, thread_id); } return CELL_OK; @@ -236,6 +236,6 @@ int sys_cond_wait(u32 cond_id, u64 timeout) } abort: - LOGF_WARNING(HLE, "sys_cond_wait(id=%d) aborted", cond_id); + LOG_WARNING(HLE, "sys_cond_wait(id=%d) aborted", cond_id); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp index fdf409b0d3..f0ceecdc7f 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp @@ -95,7 +95,7 @@ int sys_event_queue_destroy(u32 equeue_id, int mode) Sleep(1); if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_event_queue_destroy(equeue=%d) aborted", equeue_id); + LOG_WARNING(HLE, "sys_event_queue_destroy(equeue=%d) aborted", equeue_id); break; } } @@ -223,7 +223,7 @@ int sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 Sleep(1); if (counter++ > timeout || Emu.IsStopped()) { - if (Emu.IsStopped()) LOGF_WARNING(HLE, "sys_event_queue_receive(equeue=%d) aborted", equeue_id); + if (Emu.IsStopped()) LOG_WARNING(HLE, "sys_event_queue_receive(equeue=%d) aborted", equeue_id); eq->sq.invalidate(tid); return CELL_ETIMEDOUT; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp index 8244fdf672..622e333ece 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp @@ -197,7 +197,7 @@ int sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 } if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_event_flag_wait(id=%d) aborted", eflag_id); + LOG_WARNING(HLE, "sys_event_flag_wait(id=%d) aborted", eflag_id); return CELL_OK; } } @@ -324,7 +324,7 @@ int sys_event_flag_cancel(u32 eflag_id, mem32_t num) if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_event_flag_cancel(id=%d) aborted", eflag_id); + LOG_WARNING(HLE, "sys_event_flag_cancel(id=%d) aborted", eflag_id); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp index 0e16de98d2..6e8a6c4e01 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp @@ -126,7 +126,7 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) } fd = sys_fs->GetNewId(stream, IDFlag_File); - LOGF_WARNING(HLE, "*** cellFsOpen(path=\"%s\"): fd = %d", path.c_str(), fd.GetValue()); + LOG_WARNING(HLE, "*** cellFsOpen(path=\"%s\"): fd = %d", path.c_str(), fd.GetValue()); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp index 5bbb02e92e..170c665068 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp @@ -95,7 +95,7 @@ int sys_lwcond_signal(mem_ptr_t lwcond) if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_lwcond_signal(id=%d) aborted", (u32)lwcond->lwcond_queue); + LOG_WARNING(HLE, "sys_lwcond_signal(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } } @@ -126,7 +126,7 @@ int sys_lwcond_signal_all(mem_ptr_t lwcond) if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_lwcond_signal_all(id=%d) aborted", (u32)lwcond->lwcond_queue); + LOG_WARNING(HLE, "sys_lwcond_signal_all(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } } @@ -165,7 +165,7 @@ int sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id) if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_lwcond_signal_to(id=%d, to=%d) aborted", (u32)lwcond->lwcond_queue, ppu_thread_id); + LOG_WARNING(HLE, "sys_lwcond_signal_to(id=%d, to=%d) aborted", (u32)lwcond->lwcond_queue, ppu_thread_id); return CELL_OK; } } @@ -260,6 +260,6 @@ int sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) } abort: - LOGF_WARNING(HLE, "sys_lwcond_wait(id=%d) aborted", (u32)lwcond->lwcond_queue); + LOG_WARNING(HLE, "sys_lwcond_wait(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp index 8af57345a6..f5ee08bef8 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp @@ -251,7 +251,7 @@ int sys_lwmutex_t::trylock(be_t tid) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "(hack) sys_lwmutex_t::(try)lock aborted (waiting for recursive attribute, attr=0x%x)", (u32)attribute); + LOG_WARNING(HLE, "(hack) sys_lwmutex_t::(try)lock aborted (waiting for recursive attribute, attr=0x%x)", (u32)attribute); return CELL_ESRCH; } Sleep(1); @@ -340,7 +340,7 @@ int sys_lwmutex_t::lock(be_t tid, u64 timeout) case SMR_TIMEOUT: sq->invalidate(tid); return CELL_ETIMEDOUT; case SMR_ABORT: - if (Emu.IsStopped()) LOGF_WARNING(HLE, "sys_lwmutex_t::lock(sq=%d) aborted", (u32)sleep_queue); + if (Emu.IsStopped()) LOG_WARNING(HLE, "sys_lwmutex_t::lock(sq=%d) aborted", (u32)sleep_queue); default: sq->invalidate(tid); return CELL_EINVAL; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h index 0345d1ee97..59efee8ffb 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h +++ b/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h @@ -39,14 +39,14 @@ struct Mutex { if (u32 owner = m_mutex.GetOwner()) { - LOGF_NOTICE(HLE, "Mutex(%d) was owned by thread %d (recursive=%d)", id, owner, recursive); + LOG_NOTICE(HLE, "Mutex(%d) was owned by thread %d (recursive=%d)", id, owner, recursive); } if (!m_queue.m_mutex.try_lock()) return; for (u32 i = 0; i < m_queue.list.size(); i++) { - if (u32 owner = m_queue.list[i]) LOGF_NOTICE(HLE, "Mutex(%d) was waited by thread %d", id, owner); + if (u32 owner = m_queue.list[i]) LOG_NOTICE(HLE, "Mutex(%d) was waited by thread %d", id, owner); } m_queue.m_mutex.unlock(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp index f30705c430..1db72cb2df 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp @@ -32,7 +32,7 @@ void sys_ppu_thread_exit(u64 errorcode) if (thr.owned_mutexes) { - LOGF_ERROR(PPU, "Owned mutexes found (%d)", thr.owned_mutexes); + LOG_ERROR(PPU, "Owned mutexes found (%d)", thr.owned_mutexes); thr.owned_mutexes = 0; } @@ -58,7 +58,7 @@ int sys_ppu_thread_join(u64 thread_id, mem64_t vptr) { if (Emu.IsStopped()) { - LOGF_WARNING(PPU, "sys_ppu_thread_join(%d) aborted", thread_id); + LOG_WARNING(PPU, "sys_ppu_thread_join(%d) aborted", thread_id); return CELL_OK; } Sleep(1); @@ -204,7 +204,7 @@ int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 s new_thread.m_is_interrupt = is_interrupt; new_thread.SetName(threadname); - LOGF_NOTICE(PPU, "*** New PPU Thread [%s] (flags=0x%llx, entry=0x%x): id = %d", new_thread.GetName().c_str(), flags, entry, new_thread.GetId()); + LOG_NOTICE(PPU, "*** New PPU Thread [%s] (flags=0x%llx, entry=0x%x): id = %d", new_thread.GetName().c_str(), flags, entry, new_thread.GetId()); if (!is_interrupt) { diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp index 4db7ed85b5..6ba8d00461 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp @@ -69,7 +69,7 @@ int sys_rwlock_rlock(u32 rw_lock_id, u64 timeout) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_rwlock_rlock(rw_lock_id=%d, ...) aborted", rw_lock_id); + LOG_WARNING(HLE, "sys_rwlock_rlock(rw_lock_id=%d, ...) aborted", rw_lock_id); return CELL_ETIMEDOUT; } Sleep(1); @@ -132,7 +132,7 @@ int sys_rwlock_wlock(u32 rw_lock_id, u64 timeout) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_rwlock_wlock(rw_lock_id=%d, ...) aborted", rw_lock_id); + LOG_WARNING(HLE, "sys_rwlock_wlock(rw_lock_id=%d, ...) aborted", rw_lock_id); return CELL_ETIMEDOUT; } Sleep(1); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp index 9f876ccd42..207c579a80 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp @@ -346,7 +346,7 @@ int sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) } if (Emu.IsStopped()) { - LOGF_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d, ...) aborted", id); + LOG_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d, ...) aborted", id); return CELL_OK; } Sleep(1); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp index 3c7e85032a..66fbe8ad6e 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp @@ -39,7 +39,7 @@ int sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i } sem = sys_sem.GetNewId(new Semaphore(initial_count, max_count, attr->protocol, attr->name_u64)); - LOGF_NOTICE(HLE, "*** semaphore created [%s] (protocol=0x%x): id = %d", + LOG_NOTICE(HLE, "*** semaphore created [%s] (protocol=0x%x): id = %d", std::string(attr->name, 8).c_str(), (u32)attr->protocol, sem.GetValue()); return CELL_OK; @@ -91,7 +91,7 @@ int sys_semaphore_wait(u32 sem_id, u64 timeout) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_semaphore_wait(%d) aborted", sem_id); + LOG_WARNING(HLE, "sys_semaphore_wait(%d) aborted", sem_id); return CELL_OK; } @@ -165,7 +165,7 @@ int sys_semaphore_post(u32 sem_id, int count) { if (Emu.IsStopped()) { - LOGF_WARNING(HLE, "sys_semaphore_post(%d) aborted", sem_id); + LOG_WARNING(HLE, "sys_semaphore_post(%d) aborted", sem_id); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp index ba9b50239f..cf3900b72a 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp @@ -22,8 +22,8 @@ void sys_spinlock_lock(mem_ptr_t lock) be_t tid = GetCurrentPPUThread().GetId(); switch (lock->mutex.lock(tid)) { - case SMR_ABORT: LOGF_WARNING(HLE, "sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); break; - case SMR_DEADLOCK: LOGF_ERROR(HLE, "sys_spinlock_lock(0x%x) reached deadlock", lock.GetAddr()); break; // ??? + case SMR_ABORT: LOG_WARNING(HLE, "sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); break; + case SMR_DEADLOCK: LOG_ERROR(HLE, "sys_spinlock_lock(0x%x) reached deadlock", lock.GetAddr()); break; // ??? default: break; } } @@ -36,8 +36,8 @@ int sys_spinlock_trylock(mem_ptr_t lock) switch (lock->mutex.trylock(tid)) { case SMR_FAILED: return CELL_EBUSY; - case SMR_ABORT: LOGF_WARNING(HLE, "sys_spinlock_trylock(0x%x) aborted", lock.GetAddr()); break; - case SMR_DEADLOCK: LOGF_ERROR(HLE, "sys_spinlock_trylock(0x%x) reached deadlock", lock.GetAddr()); break; + case SMR_ABORT: LOG_WARNING(HLE, "sys_spinlock_trylock(0x%x) aborted", lock.GetAddr()); break; + case SMR_DEADLOCK: LOG_ERROR(HLE, "sys_spinlock_trylock(0x%x) reached deadlock", lock.GetAddr()); break; default: break; } diff --git a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp b/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp index b043c54529..1ca49fac73 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp @@ -7,7 +7,7 @@ int sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) { //we currently do not support reading from the Console - LOGF_WARNING(HLE, "sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); + LOG_WARNING(HLE, "sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); Memory.Write32NN(preadlen_addr, len); Emu.Pause(); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 68bba82a55..6c3d3667f1 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -153,7 +153,7 @@ void Emulator::Load() m_path = elf_path; } - LOGF_NOTICE(LOADER, "Loading '%s'...", m_path.c_str()); + LOG_NOTICE(LOADER, "Loading '%s'...", m_path.c_str()); GetInfo().Reset(); m_vfs.Init(m_path); @@ -161,7 +161,7 @@ void Emulator::Load() LOG_NOTICE(LOADER, "Mount info:"); for(uint i=0; i %s", m_vfs.m_devices[i]->GetPs3Path().c_str(), m_vfs.m_devices[i]->GetLocalPath().c_str()); + LOG_NOTICE(LOADER, "%s -> %s", m_vfs.m_devices[i]->GetPs3Path().c_str(), m_vfs.m_devices[i]->GetLocalPath().c_str()); } LOG_NOTICE(LOADER, " ");//used to be skip_line @@ -174,7 +174,7 @@ void Emulator::Load() if(!f.IsOpened()) { - LOGF_ERROR(LOADER, "Elf not found! (%s - %s)", m_path.c_str(), m_elf_path.c_str()); + LOG_ERROR(LOADER, "Elf not found! (%s - %s)", m_path.c_str(), m_elf_path.c_str()); return; } @@ -247,8 +247,8 @@ void Emulator::Load() switch(l.GetMachine()) { case MACHINE_SPU: - LOGF_NOTICE(LOADER, "offset = 0x%llx", Memory.MainMem.GetStartAddr()); - LOGF_NOTICE(LOADER, "max addr = 0x%x", l.GetMaxAddr()); + LOG_NOTICE(LOADER, "offset = 0x%llx", Memory.MainMem.GetStartAddr()); + LOG_NOTICE(LOADER, "max addr = 0x%x", l.GetMaxAddr()); thread.SetOffset(Memory.MainMem.GetStartAddr()); Memory.MainMem.AllocFixed(Memory.MainMem.GetStartAddr() + l.GetMaxAddr(), 0xFFFFED - l.GetMaxAddr()); thread.SetEntry(l.GetEntry() - Memory.MainMem.GetStartAddr()); @@ -375,7 +375,7 @@ void Emulator::Stop() Sleep(1); if (counter++ > 3000) { - LOGF_ERROR(HLE, "%d threads not stopped (timeout)", (u32)(g_thread_count - uncounted)); + LOG_ERROR(HLE, "%d threads not stopped (timeout)", (u32)(g_thread_count - uncounted)); break; } } @@ -448,7 +448,7 @@ void Emulator::LoadPoints(const std::string& path) if(version != bpdb_version || (sizeof(u16) + break_count * sizeof(u64) + sizeof(u32) + marked_count * sizeof(u64) + sizeof(u32)) != length) { - LOGF_ERROR(LOADER, "'%s' is broken", path.c_str()); + LOG_ERROR(LOADER, "'%s' is broken", path.c_str()); return; } diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index 5dca67bbd8..046faedc72 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -152,7 +152,7 @@ public: virtual void Task() { - LOGF_NOTICE(HLE, "Start dump in thread %d!", (int)id); + LOG_NOTICE(HLE, "Start dump in thread %d!", (int)id); const u32 max_value = prog_dial->GetMaxValue(id); const u32 shdr_count = ElfType64 ? shdr_arr_64->size() : shdr_arr_32->size(); @@ -180,14 +180,14 @@ public: } } - LOGF_NOTICE(HLE, "Finish dump in thread %d!", (int)id); + LOG_NOTICE(HLE, "Finish dump in thread %d!", (int)id); *done = true; } void OnExit() { - LOGF_NOTICE(HLE, "CleanUp dump thread (%d)!", (int)id); + LOG_NOTICE(HLE, "CleanUp dump thread (%d)!", (int)id); safe_delete(decoder); } }; @@ -223,7 +223,7 @@ struct WaitDumperThread : public ThreadBase while(done[i] == false) Sleep(1); } - LOGF_NOTICE(HLE, "Saving dump is started!"); + LOG_NOTICE(HLE, "Saving dump is started!"); const uint length_for_core = prog_dial.GetMaxValue(0); const uint length = length_for_core * cores; prog_dial.Close(); @@ -266,7 +266,7 @@ struct WaitDumperThread : public ThreadBase fd.Write(wxString::Format("End of section header %d\n\n", sh)); } - LOGF_NOTICE(HLE, "CleanUp dump saving!"); + LOG_NOTICE(HLE, "CleanUp dump saving!"); for(uint c=0; c name_arr; @@ -338,7 +338,7 @@ void DisAsmFrame::Dump(wxCommandEvent& WXUNUSED(event)) if(l_elf32->shdr_arr.size() <= 0) return; break; - default: LOGF_ERROR(HLE, "Corrupted ELF!"); return; + default: LOG_ERROR(HLE, "Corrupted ELF!"); return; } PPCDisAsm* disasm; diff --git a/rpcs3/Gui/FnIdGenerator.cpp b/rpcs3/Gui/FnIdGenerator.cpp index 810315f0cd..100e0b8e50 100644 --- a/rpcs3/Gui/FnIdGenerator.cpp +++ b/rpcs3/Gui/FnIdGenerator.cpp @@ -82,7 +82,7 @@ void FnIdGenerator::PrintId() m_func_name.push_back(func_name); m_func_id.push_back(result); - LOGF_NOTICE(HLE, "Function: %s, Id: 0x%08x ", func_name.c_str(), result); + LOG_NOTICE(HLE, "Function: %s, Id: 0x%08x ", func_name.c_str(), result); UpdateInformation(); } diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 8be1f47ba6..034e51e85f 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -39,7 +39,7 @@ public: virtual wxDirTraverseResult OnFile(const wxString& filename) { if (!wxRemoveFile(filename)){ - LOGF_ERROR(HLE, "Couldn't delete File: %s", fmt::ToUTF8(filename).c_str()); + LOG_ERROR(HLE, "Couldn't delete File: %s", fmt::ToUTF8(filename).c_str()); } return wxDIR_CONTINUE; } @@ -103,7 +103,7 @@ void GameViewer::OnColClick(wxListEvent& event) void GameViewer::LoadGames() { vfsDir dir(m_path); - LOGF_NOTICE(HLE, "path: %s", m_path.c_str()); + LOG_NOTICE(HLE, "path: %s", m_path.c_str()); if(!dir.IsOpened()) return; m_games.clear(); @@ -207,7 +207,7 @@ void GameViewer::DClick(wxListEvent& event) std::string local_path; if(Emu.GetVFS().GetDevice(path, local_path) && !Emu.BootGame(local_path)) { - LOGF_ERROR(HLE, "Boot error: elf not found! [%s]", path.c_str()); + LOG_ERROR(HLE, "Boot error: elf not found! [%s]", path.c_str()); return; } Emu.Run(); diff --git a/rpcs3/Gui/GameViewer.h b/rpcs3/Gui/GameViewer.h index 8a240243d2..463f7ee4b0 100644 --- a/rpcs3/Gui/GameViewer.h +++ b/rpcs3/Gui/GameViewer.h @@ -134,7 +134,7 @@ public: if(!col) { - LOGF_ERROR(HLE, "Columns loaded with error!"); + LOG_ERROR(HLE, "Columns loaded with error!"); return; } @@ -191,7 +191,7 @@ public: { if(m_columns[c1].pos == m_columns[c2].pos) { - LOGF_ERROR(HLE, "Columns loaded with error!"); + LOG_ERROR(HLE, "Columns loaded with error!"); Init(); return; } @@ -210,7 +210,7 @@ public: if(!ishas) { - LOGF_ERROR(HLE, "Columns loaded with error!"); + LOG_ERROR(HLE, "Columns loaded with error!"); Init(); return; } diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 0da12e6462..f8fc887785 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -201,7 +201,7 @@ void MainFrame::BootGame(wxCommandEvent& WXUNUSED(event)) } else { - LOGF_ERROR(HLE, "PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); + LOG_ERROR(HLE, "PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); } } @@ -231,7 +231,7 @@ void MainFrame::BootGameAndRun(wxCommandEvent& WXUNUSED(event)) } else { - LOGF_ERROR(HLE, "PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); + LOG_ERROR(HLE, "PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); } if (Emu.IsReady()) diff --git a/rpcs3/Gui/PADManager.cpp b/rpcs3/Gui/PADManager.cpp index d36cc70535..3626f1b8b6 100644 --- a/rpcs3/Gui/PADManager.cpp +++ b/rpcs3/Gui/PADManager.cpp @@ -289,7 +289,7 @@ void PADManager::OnKeyDown(wxKeyEvent &keyEvent) case id_pad_rstick_up: Ini.PadHandlerRStickUp.SetValue(keyEvent.GetKeyCode()); break; case 0: break; - default: LOGF_ERROR(HLE, "Unknown button ID: %d", m_button_id); break; + default: LOG_ERROR(HLE, "Unknown button ID: %d", m_button_id); break; } UpdateLabel(); @@ -323,7 +323,7 @@ void PADManager::OnButtonClicked(wxCommandEvent &event) case wxID_OK: Ini.Save(); break; case wxID_CANCEL: break; - default: LOGF_ERROR(HLE, "Unknown button ID: %d", event.GetId()); break; + default: LOG_ERROR(HLE, "Unknown button ID: %d", event.GetId()); break; } } @@ -509,7 +509,7 @@ void PADManager::UpdateTimerLabel(const u32 id) case id_pad_rstick_right: b_right_rstick->SetLabel(static_cast(m_seconds + 47)); break; case id_pad_rstick_up: b_up_rstick->SetLabel(static_cast(m_seconds + 47)); break; - default: LOGF_ERROR(HLE, "Unknown button ID: %d", id); break; + default: LOG_ERROR(HLE, "Unknown button ID: %d", id); break; } } diff --git a/rpcs3/Gui/Plugins.h b/rpcs3/Gui/Plugins.h index c6900c2d67..d3e10c8728 100644 --- a/rpcs3/Gui/Plugins.h +++ b/rpcs3/Gui/Plugins.h @@ -314,7 +314,7 @@ struct PluginsManager for(u32 i=0; iHitTest(wxPoint(x, y), flags); - LOGF_NOTICE(HLE, "OnData(%d -> %d)", m_src_indx, dst_indx); + LOG_NOTICE(HLE, "OnData(%d -> %d)", m_src_indx, dst_indx); return def; } @@ -189,7 +189,7 @@ void VHDDExplorer::OnDropFiles(wxDropFilesEvent& event) for(int i=0; i= entry && entry < phdr_arr[i].p_paddr + phdr_arr[i].p_memsz) { entry += phdr_arr[i].p_vaddr; - LOGF_WARNING(LOADER, "virtual entry = 0x%x", entry); + LOG_WARNING(LOADER, "virtual entry = 0x%x", entry); break; } } @@ -226,7 +226,7 @@ bool ELF32Loader::LoadPhdrData(u64 _offset) if(phdr_arr[i].p_vaddr != phdr_arr[i].p_paddr) { - LOGF_WARNING + LOG_WARNING ( LOADER, "LoadPhdr32 different load addrs: paddr=0x%8.8x, vaddr=0x%8.8x", @@ -256,19 +256,19 @@ bool ELF32Loader::LoadPhdrData(u64 _offset) if(note.type != 1) { - LOGF_ERROR(LOADER, "ELF32: Bad NOTE type (%d)", note.type); + LOG_ERROR(LOADER, "ELF32: Bad NOTE type (%d)", note.type); break; } if(note.namesz != sizeof(note.name)) { - LOGF_ERROR(LOADER, "ELF32: Bad NOTE namesz (%d)", note.namesz); + LOG_ERROR(LOADER, "ELF32: Bad NOTE namesz (%d)", note.namesz); break; } if(note.descsz != sizeof(note.desc) && note.descsz != 32) { - LOGF_ERROR(LOADER, "ELF32: Bad NOTE descsz (%d)", note.descsz); + LOG_ERROR(LOADER, "ELF32: Bad NOTE descsz (%d)", note.descsz); break; } @@ -280,13 +280,13 @@ bool ELF32Loader::LoadPhdrData(u64 _offset) if(note.descsz == sizeof(note.desc)) { - LOGF_WARNING(LOADER, "name = %s", std::string((const char *)note.name, 8).c_str()); - LOGF_WARNING(LOADER, "ls_size = %d", note.desc.ls_size); - LOGF_WARNING(LOADER, "stack_size = %d", note.desc.stack_size); + LOG_WARNING(LOADER, "name = %s", std::string((const char *)note.name, 8).c_str()); + LOG_WARNING(LOADER, "ls_size = %d", note.desc.ls_size); + LOG_WARNING(LOADER, "stack_size = %d", note.desc.stack_size); } else { - LOGF_WARNING(LOADER, "desc = '%s'", std::string(note.desc_text, 32).c_str()); + LOG_WARNING(LOADER, "desc = '%s'", std::string(note.desc_text, 32).c_str()); } } #ifdef LOADER_DEBUG @@ -304,7 +304,7 @@ bool ELF32Loader::LoadShdrData(u64 offset) Elf32_Shdr& shdr = shdr_arr[i]; #ifdef LOADER_DEBUG - if(i < shdr_name_arr.size()) LOGF_NOTICE(LOADER, "Name: %s", shdr_name_arr[i].c_str()); + if(i < shdr_name_arr.size()) LOG_NOTICE(LOADER, "Name: %s", shdr_name_arr[i].c_str()); shdr.Show(); LOG_NOTICE(LOADER, ""); #endif diff --git a/rpcs3/Loader/ELF32.h b/rpcs3/Loader/ELF32.h index 3ebe601061..50b5c6bd66 100644 --- a/rpcs3/Loader/ELF32.h +++ b/rpcs3/Loader/ELF32.h @@ -26,25 +26,25 @@ struct Elf32_Ehdr void Show() { #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "Magic: %08x", e_magic); - LOGF_NOTICE(LOADER, "Class: %s", "ELF32"); - LOGF_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); - LOGF_NOTICE(LOADER, "Current Version: %d", e_curver); - LOGF_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); - LOGF_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); - LOGF_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); - LOGF_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); - LOGF_NOTICE(LOADER, "Version: %d", e_version); - LOGF_NOTICE(LOADER, "Entry point address: 0x%x", e_entry); - LOGF_NOTICE(LOADER, "Program headers offset: 0x%08x", e_phoff); - LOGF_NOTICE(LOADER, "Section headers offset: 0x%08x", e_shoff); - LOGF_NOTICE(LOADER, "Flags: 0x%x", e_flags); - LOGF_NOTICE(LOADER, "Size of this header: %d", e_ehsize); - LOGF_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); - LOGF_NOTICE(LOADER, "Number of program headers: %d", e_phnum); - LOGF_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); - LOGF_NOTICE(LOADER, "Number of section headers: %d", e_shnum); - LOGF_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); + LOG_NOTICE(LOADER, "Magic: %08x", e_magic); + LOG_NOTICE(LOADER, "Class: %s", "ELF32"); + LOG_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); + LOG_NOTICE(LOADER, "Current Version: %d", e_curver); + LOG_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); + LOG_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); + LOG_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); + LOG_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); + LOG_NOTICE(LOADER, "Version: %d", e_version); + LOG_NOTICE(LOADER, "Entry point address: 0x%x", e_entry); + LOG_NOTICE(LOADER, "Program headers offset: 0x%08x", e_phoff); + LOG_NOTICE(LOADER, "Section headers offset: 0x%08x", e_shoff); + LOG_NOTICE(LOADER, "Flags: 0x%x", e_flags); + LOG_NOTICE(LOADER, "Size of this header: %d", e_ehsize); + LOG_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); + LOG_NOTICE(LOADER, "Number of program headers: %d", e_phnum); + LOG_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); + LOG_NOTICE(LOADER, "Number of section headers: %d", e_shnum); + LOG_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); #endif } @@ -216,16 +216,16 @@ struct Elf32_Shdr void Show() { #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "Name offset: %x", sh_name); - LOGF_NOTICE(LOADER, "Type: %d", sh_type); - LOGF_NOTICE(LOADER, "Addr: %x", sh_addr); - LOGF_NOTICE(LOADER, "Offset: %x", sh_offset); - LOGF_NOTICE(LOADER, "Size: %x", sh_size); - LOGF_NOTICE(LOADER, "EntSize: %d", sh_entsize); - LOGF_NOTICE(LOADER, "Flags: %x", sh_flags); - LOGF_NOTICE(LOADER, "Link: %x", sh_link); - LOGF_NOTICE(LOADER, "Info: %d", sh_info); - LOGF_NOTICE(LOADER, "Address align: %x", sh_addralign); + LOG_NOTICE(LOADER, "Name offset: %x", sh_name); + LOG_NOTICE(LOADER, "Type: %d", sh_type); + LOG_NOTICE(LOADER, "Addr: %x", sh_addr); + LOG_NOTICE(LOADER, "Offset: %x", sh_offset); + LOG_NOTICE(LOADER, "Size: %x", sh_size); + LOG_NOTICE(LOADER, "EntSize: %d", sh_entsize); + LOG_NOTICE(LOADER, "Flags: %x", sh_flags); + LOG_NOTICE(LOADER, "Link: %x", sh_link); + LOG_NOTICE(LOADER, "Info: %d", sh_info); + LOG_NOTICE(LOADER, "Address align: %x", sh_addralign); #endif } }; @@ -268,14 +268,14 @@ struct Elf32_Phdr void Show() { #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); - LOGF_NOTICE(LOADER, "Offset: 0x%08x", p_offset); - LOGF_NOTICE(LOADER, "Virtual address: 0x%08x", p_vaddr); - LOGF_NOTICE(LOADER, "Physical address: 0x%08x", p_paddr); - LOGF_NOTICE(LOADER, "File size: 0x%08x", p_filesz); - LOGF_NOTICE(LOADER, "Memory size: 0x%08x", p_memsz); - LOGF_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); - LOGF_NOTICE(LOADER, "Align: 0x%x", p_align); + LOG_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); + LOG_NOTICE(LOADER, "Offset: 0x%08x", p_offset); + LOG_NOTICE(LOADER, "Virtual address: 0x%08x", p_vaddr); + LOG_NOTICE(LOADER, "Physical address: 0x%08x", p_paddr); + LOG_NOTICE(LOADER, "File size: 0x%08x", p_filesz); + LOG_NOTICE(LOADER, "Memory size: 0x%08x", p_memsz); + LOG_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); + LOG_NOTICE(LOADER, "Align: 0x%x", p_align); #endif } }; diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 818ad13306..857b24759a 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -104,13 +104,13 @@ bool ELF64Loader::LoadEhdrInfo(s64 offset) if(ehdr.e_phentsize != sizeof(Elf64_Phdr)) { - LOGF_ERROR(LOADER, "elf64 error: e_phentsize[0x%x] != sizeof(Elf64_Phdr)[0x%x]", ehdr.e_phentsize, sizeof(Elf64_Phdr)); + LOG_ERROR(LOADER, "elf64 error: e_phentsize[0x%x] != sizeof(Elf64_Phdr)[0x%x]", ehdr.e_phentsize, sizeof(Elf64_Phdr)); return false; } if(ehdr.e_shentsize != sizeof(Elf64_Shdr)) { - LOGF_ERROR(LOADER, "elf64 error: e_shentsize[0x%x] != sizeof(Elf64_Shdr)[0x%x]", ehdr.e_shentsize, sizeof(Elf64_Shdr)); + LOG_ERROR(LOADER, "elf64 error: e_shentsize[0x%x] != sizeof(Elf64_Shdr)[0x%x]", ehdr.e_shentsize, sizeof(Elf64_Shdr)); return false; } @@ -123,7 +123,7 @@ bool ELF64Loader::LoadEhdrInfo(s64 offset) default: machine = MACHINE_Unknown; - LOGF_ERROR(LOADER, "Unknown elf64 type: 0x%x", ehdr.e_machine); + LOG_ERROR(LOADER, "Unknown elf64 type: 0x%x", ehdr.e_machine); return false; } @@ -226,7 +226,7 @@ bool ELF64Loader::LoadPhdrData(u64 offset) if(phdr_arr[i].p_vaddr != phdr_arr[i].p_paddr) { - LOGF_WARNING + LOG_WARNING ( LOADER, "ElfProgram different load addrs: paddr=0x%8.8x, vaddr=0x%8.8x", @@ -271,12 +271,12 @@ bool ELF64Loader::LoadPhdrData(u64 offset) if(re(proc_param.size) < sizeof(sys_process_param)) { - LOGF_WARNING(LOADER, "Bad proc param size! [0x%x : 0x%x]", re(proc_param.size), sizeof(sys_process_param)); + LOG_WARNING(LOADER, "Bad proc param size! [0x%x : 0x%x]", re(proc_param.size), sizeof(sys_process_param)); } if(re(proc_param.magic) != 0x13bcc5f6) { - LOGF_ERROR(LOADER, "Bad magic! [0x%x]", Memory.Reverse32(proc_param.magic)); + LOG_ERROR(LOADER, "Bad magic! [0x%x]", Memory.Reverse32(proc_param.magic)); } else { @@ -288,12 +288,12 @@ bool ELF64Loader::LoadPhdrData(u64 offset) info.ppc_seg = re(proc_param.info.ppc_seg); //info.crash_dump_param_addr = re(proc_param.info.crash_dump_param_addr); #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "*** sdk version: 0x%x", info.sdk_version); - LOGF_NOTICE(LOADER, "*** primary prio: %d", info.primary_prio); - LOGF_NOTICE(LOADER, "*** primary stacksize: 0x%x", info.primary_stacksize); - LOGF_NOTICE(LOADER, "*** malloc pagesize: 0x%x", info.malloc_pagesize); - LOGF_NOTICE(LOADER, "*** ppc seg: 0x%x", info.ppc_seg); - //LOGF_NOTICE(LOADER, "*** crash dump param addr: 0x%x", info.crash_dump_param_addr); + LOG_NOTICE(LOADER, "*** sdk version: 0x%x", info.sdk_version); + LOG_NOTICE(LOADER, "*** primary prio: %d", info.primary_prio); + LOG_NOTICE(LOADER, "*** primary stacksize: 0x%x", info.primary_stacksize); + LOG_NOTICE(LOADER, "*** malloc pagesize: 0x%x", info.malloc_pagesize); + LOG_NOTICE(LOADER, "*** ppc seg: 0x%x", info.ppc_seg); + //LOG_NOTICE(LOADER, "*** crash dump param addr: 0x%x", info.crash_dump_param_addr); #endif } } @@ -315,19 +315,19 @@ bool ELF64Loader::LoadPhdrData(u64 offset) proc_prx_param.ver = re(proc_prx_param.ver); #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "*** size: 0x%x", proc_prx_param.size); - LOGF_NOTICE(LOADER, "*** magic: 0x%x", proc_prx_param.magic); - LOGF_NOTICE(LOADER, "*** version: 0x%x", proc_prx_param.version); - LOGF_NOTICE(LOADER, "*** libentstart: 0x%x", proc_prx_param.libentstart); - LOGF_NOTICE(LOADER, "*** libentend: 0x%x", proc_prx_param.libentend); - LOGF_NOTICE(LOADER, "*** libstubstart: 0x%x", proc_prx_param.libstubstart); - LOGF_NOTICE(LOADER, "*** libstubend: 0x%x", proc_prx_param.libstubend); - LOGF_NOTICE(LOADER, "*** ver: 0x%x", proc_prx_param.ver); + LOG_NOTICE(LOADER, "*** size: 0x%x", proc_prx_param.size); + LOG_NOTICE(LOADER, "*** magic: 0x%x", proc_prx_param.magic); + LOG_NOTICE(LOADER, "*** version: 0x%x", proc_prx_param.version); + LOG_NOTICE(LOADER, "*** libentstart: 0x%x", proc_prx_param.libentstart); + LOG_NOTICE(LOADER, "*** libentend: 0x%x", proc_prx_param.libentend); + LOG_NOTICE(LOADER, "*** libstubstart: 0x%x", proc_prx_param.libstubstart); + LOG_NOTICE(LOADER, "*** libstubend: 0x%x", proc_prx_param.libstubend); + LOG_NOTICE(LOADER, "*** ver: 0x%x", proc_prx_param.ver); #endif if(proc_prx_param.magic != 0x1b434cec) { - LOGF_ERROR(LOADER, "Bad magic! (0x%x)", proc_prx_param.magic); + LOG_ERROR(LOADER, "Bad magic! (0x%x)", proc_prx_param.magic); } else { @@ -352,19 +352,19 @@ bool ELF64Loader::LoadPhdrData(u64 offset) } else { - LOGF_WARNING(LOADER, "Unknown module '%s'", module_name.c_str()); + LOG_WARNING(LOADER, "Unknown module '%s'", module_name.c_str()); } #ifdef LOADER_DEBUG LOG_NOTICE(LOADER, ""); - LOGF_NOTICE(LOADER, "*** size: 0x%x", stub.s_size); - LOGF_NOTICE(LOADER, "*** version: 0x%x", stub.s_version); - LOGF_NOTICE(LOADER, "*** unk0: 0x%x", stub.s_unk0); - LOGF_NOTICE(LOADER, "*** unk1: 0x%x", stub.s_unk1); - LOGF_NOTICE(LOADER, "*** imports: %d", stub.s_imports); - LOGF_NOTICE(LOADER, "*** module name: %s [0x%x]", module_name.c_str(), stub.s_modulename); - LOGF_NOTICE(LOADER, "*** nid: 0x%x", stub.s_nid); - LOGF_NOTICE(LOADER, "*** text: 0x%x", stub.s_text); + LOG_NOTICE(LOADER, "*** size: 0x%x", stub.s_size); + LOG_NOTICE(LOADER, "*** version: 0x%x", stub.s_version); + LOG_NOTICE(LOADER, "*** unk0: 0x%x", stub.s_unk0); + LOG_NOTICE(LOADER, "*** unk1: 0x%x", stub.s_unk1); + LOG_NOTICE(LOADER, "*** imports: %d", stub.s_imports); + LOG_NOTICE(LOADER, "*** module name: %s [0x%x]", module_name.c_str(), stub.s_modulename); + LOG_NOTICE(LOADER, "*** nid: 0x%x", stub.s_nid); + LOG_NOTICE(LOADER, "*** text: 0x%x", stub.s_text); #endif static const u32 section = 4 * 3; u64 tbl = Memory.MainMem.AllocAlign(stub.s_imports * 4 * 2); @@ -379,13 +379,13 @@ bool ELF64Loader::LoadPhdrData(u64 offset) { if(!module->Load(nid)) { - LOGF_WARNING(LOADER, "Unimplemented function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); + LOG_WARNING(LOADER, "Unimplemented function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); } } #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "import %d:", i+1); - LOGF_NOTICE(LOADER, "*** nid: 0x%x (0x%x)", nid, stub.s_nid + i*4); - LOGF_NOTICE(LOADER, "*** text: 0x%x (0x%x)", text, stub.s_text + i*4); + LOG_NOTICE(LOADER, "import %d:", i+1); + LOG_NOTICE(LOADER, "*** nid: 0x%x (0x%x)", nid, stub.s_nid + i*4); + LOG_NOTICE(LOADER, "*** text: 0x%x (0x%x)", text, stub.s_text + i*4); #endif Memory.Write32(stub.s_text + i*4, tbl + i*8); @@ -407,7 +407,7 @@ bool ELF64Loader::LoadPhdrData(u64 offset) break; } #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, " "); + LOG_NOTICE(LOADER, " "); #endif } @@ -425,13 +425,13 @@ bool ELF64Loader::LoadShdrData(u64 offset) if(i < shdr_name_arr.size()) { #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "Name: %s", shdr_name_arr[i].c_str()); + LOG_NOTICE(LOADER, "Name: %s", shdr_name_arr[i].c_str()); #endif } #ifdef LOADER_DEBUG shdr.Show(); - LOGF_NOTICE(LOADER, " "); + LOG_NOTICE(LOADER, " "); #endif if(shdr.sh_addr + shdr.sh_size > max_addr) max_addr = shdr.sh_addr + shdr.sh_size; diff --git a/rpcs3/Loader/ELF64.h b/rpcs3/Loader/ELF64.h index 68aa47bbf8..f6f6792922 100644 --- a/rpcs3/Loader/ELF64.h +++ b/rpcs3/Loader/ELF64.h @@ -49,25 +49,25 @@ struct Elf64_Ehdr void Show() { #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "Magic: %08x", e_magic); - LOGF_NOTICE(LOADER, "Class: %s", "ELF64"); - LOGF_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); - LOGF_NOTICE(LOADER, "Current Version: %d", e_curver); - LOGF_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); - LOGF_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); - LOGF_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); - LOGF_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); - LOGF_NOTICE(LOADER, "Version: %d", e_version); - LOGF_NOTICE(LOADER, "Entry point address: 0x%08llx", e_entry); - LOGF_NOTICE(LOADER, "Program headers offset: 0x%08llx", e_phoff); - LOGF_NOTICE(LOADER, "Section headers offset: 0x%08llx", e_shoff); - LOGF_NOTICE(LOADER, "Flags: 0x%x", e_flags); - LOGF_NOTICE(LOADER, "Size of this header: %d", e_ehsize); - LOGF_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); - LOGF_NOTICE(LOADER, "Number of program headers: %d", e_phnum); - LOGF_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); - LOGF_NOTICE(LOADER, "Number of section headers: %d", e_shnum); - LOGF_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); + LOG_NOTICE(LOADER, "Magic: %08x", e_magic); + LOG_NOTICE(LOADER, "Class: %s", "ELF64"); + LOG_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); + LOG_NOTICE(LOADER, "Current Version: %d", e_curver); + LOG_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); + LOG_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); + LOG_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); + LOG_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); + LOG_NOTICE(LOADER, "Version: %d", e_version); + LOG_NOTICE(LOADER, "Entry point address: 0x%08llx", e_entry); + LOG_NOTICE(LOADER, "Program headers offset: 0x%08llx", e_phoff); + LOG_NOTICE(LOADER, "Section headers offset: 0x%08llx", e_shoff); + LOG_NOTICE(LOADER, "Flags: 0x%x", e_flags); + LOG_NOTICE(LOADER, "Size of this header: %d", e_ehsize); + LOG_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); + LOG_NOTICE(LOADER, "Number of program headers: %d", e_phnum); + LOG_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); + LOG_NOTICE(LOADER, "Number of section headers: %d", e_shnum); + LOG_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); #endif } @@ -105,16 +105,16 @@ struct Elf64_Shdr void Show() { #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "Name offset: %x", sh_name); - LOGF_NOTICE(LOADER, "Type: %d", sh_type); - LOGF_NOTICE(LOADER, "Addr: %llx", sh_addr); - LOGF_NOTICE(LOADER, "Offset: %llx", sh_offset); - LOGF_NOTICE(LOADER, "Size: %llx", sh_size); - LOGF_NOTICE(LOADER, "EntSize: %lld", sh_entsize); - LOGF_NOTICE(LOADER, "Flags: %llx", sh_flags); - LOGF_NOTICE(LOADER, "Link: %x", sh_link); - LOGF_NOTICE(LOADER, "Info: %x", sh_info); - LOGF_NOTICE(LOADER, "Address align: %llx", sh_addralign); + LOG_NOTICE(LOADER, "Name offset: %x", sh_name); + LOG_NOTICE(LOADER, "Type: %d", sh_type); + LOG_NOTICE(LOADER, "Addr: %llx", sh_addr); + LOG_NOTICE(LOADER, "Offset: %llx", sh_offset); + LOG_NOTICE(LOADER, "Size: %llx", sh_size); + LOG_NOTICE(LOADER, "EntSize: %lld", sh_entsize); + LOG_NOTICE(LOADER, "Flags: %llx", sh_flags); + LOG_NOTICE(LOADER, "Link: %x", sh_link); + LOG_NOTICE(LOADER, "Info: %x", sh_info); + LOG_NOTICE(LOADER, "Address align: %llx", sh_addralign); #endif } }; @@ -145,14 +145,14 @@ struct Elf64_Phdr void Show() { #ifdef LOADER_DEBUG - LOGF_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); - LOGF_NOTICE(LOADER, "Offset: 0x%08llx", p_offset); - LOGF_NOTICE(LOADER, "Virtual address: 0x%08llx", p_vaddr); - LOGF_NOTICE(LOADER, "Physical address: 0x%08llx", p_paddr); - LOGF_NOTICE(LOADER, "File size: 0x%08llx", p_filesz); - LOGF_NOTICE(LOADER, "Memory size: 0x%08llx", p_memsz); - LOGF_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); - LOGF_NOTICE(LOADER, "Align: 0x%llx", p_align); + LOG_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); + LOG_NOTICE(LOADER, "Offset: 0x%08llx", p_offset); + LOG_NOTICE(LOADER, "Virtual address: 0x%08llx", p_vaddr); + LOG_NOTICE(LOADER, "Physical address: 0x%08llx", p_paddr); + LOG_NOTICE(LOADER, "File size: 0x%08llx", p_filesz); + LOG_NOTICE(LOADER, "Memory size: 0x%08llx", p_memsz); + LOG_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); + LOG_NOTICE(LOADER, "Align: 0x%llx", p_align); #endif } }; diff --git a/rpcs3/Loader/PKG.cpp b/rpcs3/Loader/PKG.cpp index 3223509a48..7c055c35be 100644 --- a/rpcs3/Loader/PKG.cpp +++ b/rpcs3/Loader/PKG.cpp @@ -27,15 +27,15 @@ bool PKGLoader::Install(std::string dest) if (rDirExists(dest+titleID)) { rMessageDialog d_overwrite(NULL, "Another installation was found. Do you want to overwrite it?", "PKG Decrypter / Installer", rYES_NO|rCENTRE); if (d_overwrite.ShowModal() != rID_YES) { - LOGF_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); + LOG_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); return false; } // TODO: Remove the following two lines and remove the folder dest+titleID - LOGF_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); + LOG_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); return false; } if (!rMkdir(dest+titleID)) { - LOGF_ERROR(LOADER, "PKG Loader: Could not make the installation directory: %s", titleID.c_str()); + LOG_ERROR(LOADER, "PKG Loader: Could not make the installation directory: %s", titleID.c_str()); return false; } @@ -47,7 +47,7 @@ bool PKGLoader::Install(std::string dest) } else { - LOGF_NOTICE(LOADER, "PKG Loader: Package successfully installed in: /dev_hdd0/game/%s", titleID.c_str()); + LOG_NOTICE(LOADER, "PKG Loader: Package successfully installed in: /dev_hdd0/game/%s", titleID.c_str()); return true; } } diff --git a/rpcs3/Loader/PSF.cpp b/rpcs3/Loader/PSF.cpp index 970c29ac88..bdeca14311 100644 --- a/rpcs3/Loader/PSF.cpp +++ b/rpcs3/Loader/PSF.cpp @@ -43,7 +43,7 @@ bool PSFLoader::LoadHeader() if(!m_header.CheckMagic()) return false; - if(m_show_log) LOGF_NOTICE(LOADER, "PSF version: %x", m_header.psf_version); + if(m_show_log) LOG_NOTICE(LOADER, "PSF version: %x", m_header.psf_version); m_psfindxs.clear(); m_entries.clear(); diff --git a/rpcs3/Loader/SELF.h b/rpcs3/Loader/SELF.h index 7756b7c011..6058456026 100644 --- a/rpcs3/Loader/SELF.h +++ b/rpcs3/Loader/SELF.h @@ -24,14 +24,14 @@ struct SceHeader void Show() { - LOGF_NOTICE(LOADER, "Magic: %08x", se_magic); - LOGF_NOTICE(LOADER, "Class: %s", "SELF"); - LOGF_NOTICE(LOADER, "hver: 0x%08x", se_hver); - LOGF_NOTICE(LOADER, "flags: 0x%04x", se_flags); - LOGF_NOTICE(LOADER, "type: 0x%04x", se_type); - LOGF_NOTICE(LOADER, "meta: 0x%08x", se_meta); - LOGF_NOTICE(LOADER, "hsize: 0x%llx", se_hsize); - LOGF_NOTICE(LOADER, "esize: 0x%llx", se_esize); + LOG_NOTICE(LOADER, "Magic: %08x", se_magic); + LOG_NOTICE(LOADER, "Class: %s", "SELF"); + LOG_NOTICE(LOADER, "hver: 0x%08x", se_hver); + LOG_NOTICE(LOADER, "flags: 0x%04x", se_flags); + LOG_NOTICE(LOADER, "type: 0x%04x", se_type); + LOG_NOTICE(LOADER, "meta: 0x%08x", se_meta); + LOG_NOTICE(LOADER, "hsize: 0x%llx", se_hsize); + LOG_NOTICE(LOADER, "esize: 0x%llx", se_esize); } bool CheckMagic() const { return se_magic == 0x53434500; } @@ -66,15 +66,15 @@ struct SelfHeader void Show() { - LOGF_NOTICE(LOADER, "header type: 0x%llx", se_htype); - LOGF_NOTICE(LOADER, "app info offset: 0x%llx", se_appinfooff); - LOGF_NOTICE(LOADER, "elf offset: 0x%llx", se_elfoff); - LOGF_NOTICE(LOADER, "program header offset: 0x%llx", se_phdroff); - LOGF_NOTICE(LOADER, "section header offset: 0x%llx", se_shdroff); - LOGF_NOTICE(LOADER, "section info offset: 0x%llx", se_secinfoff); - LOGF_NOTICE(LOADER, "sce version offset: 0x%llx", se_sceveroff); - LOGF_NOTICE(LOADER, "control info offset: 0x%llx", se_controloff); - LOGF_NOTICE(LOADER, "control info size: 0x%llx", se_controlsize); + LOG_NOTICE(LOADER, "header type: 0x%llx", se_htype); + LOG_NOTICE(LOADER, "app info offset: 0x%llx", se_appinfooff); + LOG_NOTICE(LOADER, "elf offset: 0x%llx", se_elfoff); + LOG_NOTICE(LOADER, "program header offset: 0x%llx", se_phdroff); + LOG_NOTICE(LOADER, "section header offset: 0x%llx", se_shdroff); + LOG_NOTICE(LOADER, "section info offset: 0x%llx", se_secinfoff); + LOG_NOTICE(LOADER, "sce version offset: 0x%llx", se_sceveroff); + LOG_NOTICE(LOADER, "control info offset: 0x%llx", se_controloff); + LOG_NOTICE(LOADER, "control info size: 0x%llx", se_controlsize); } }; diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index 1bc5c5cbab..2420733248 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -177,7 +177,7 @@ u32 TROPUSRLoader::GetTrophiesCount() u32 TROPUSRLoader::GetTrophyUnlockState(u32 id) { if (id >= m_table6.size()) - LOGF_WARNING(LOADER, "TROPUSRLoader::GetUnlockState: Invalid id=%d", id); + LOG_WARNING(LOADER, "TROPUSRLoader::GetUnlockState: Invalid id=%d", id); return m_table6[id].trophy_state; // Let's assume the trophies are stored ordered } @@ -185,7 +185,7 @@ u32 TROPUSRLoader::GetTrophyUnlockState(u32 id) u32 TROPUSRLoader::GetTrophyTimestamp(u32 id) { if (id >= m_table6.size()) - LOGF_WARNING(LOADER, "TROPUSRLoader::GetTrophyTimestamp: Invalid id=%d", id); + LOG_WARNING(LOADER, "TROPUSRLoader::GetTrophyTimestamp: Invalid id=%d", id); // TODO: What timestamp does sceNpTrophyGetTrophyInfo want, timestamp1 or timestamp2? return m_table6[id].timestamp2; // Let's assume the trophies are stored ordered diff --git a/rpcs3/Loader/TRP.cpp b/rpcs3/Loader/TRP.cpp index 1fd2f2167a..87427a4326 100644 --- a/rpcs3/Loader/TRP.cpp +++ b/rpcs3/Loader/TRP.cpp @@ -51,7 +51,7 @@ bool TRPLoader::LoadHeader(bool show) return false; if (show) - LOGF_NOTICE(LOADER, "TRP version: %x", m_header.trp_version); + LOG_NOTICE(LOADER, "TRP version: %x", m_header.trp_version); m_entries.clear(); m_entries.resize(m_header.trp_files_count); @@ -62,7 +62,7 @@ bool TRPLoader::LoadHeader(bool show) return false; if (show) - LOGF_NOTICE(LOADER, "TRP entry #%d: %s", m_entries[i].name); + LOG_NOTICE(LOADER, "TRP entry #%d: %s", m_entries[i].name); } return true; From a1db96d70de2343116957c45e0b8b8d2cd4e0586 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 28 Jun 2014 07:30:12 +0800 Subject: [PATCH 080/499] Fix CELL_GCM_TEXTURE_DEPTH24_D8 and detail trace for GLTexture::Init() --- rpcs3/Emu/GS/GL/GLGSRender.h | 89 +++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index b9041048ac..9f3b3e28f0 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -111,7 +111,7 @@ public: case CELL_GCM_TEXTURE_B8: // One 8-bit fixed-point number { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BLUE, GL_UNSIGNED_BYTE, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_B8)"); static const GLint swizzleMaskB8[] = { GL_BLUE, GL_BLUE, GL_BLUE, GL_BLUE }; glRemap = swizzleMaskB8; @@ -124,16 +124,16 @@ public: // TODO: texture swizzling glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A1R5G5B5)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_A1R5G5B5)"); break; case CELL_GCM_TEXTURE_A4R4G4B4: { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A4R4G4B4)"); // We read it in as R4G4B4A4, so we need to remap each component. static const GLint swizzleMaskA4R4G4B4[] = { GL_BLUE, GL_ALPHA, GL_RED, GL_GREEN }; @@ -144,13 +144,13 @@ public: case CELL_GCM_TEXTURE_R5G6B5: { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G6B5)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex.GetWidth(), tex.GetHeight(), 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R5G6B5)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G6B5)"); } break; @@ -177,7 +177,7 @@ public: } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, is_swizzled ? unswizzledPixels : pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A8R8G8B8)"); break; case CELL_GCM_TEXTURE_COMPRESSED_DXT1: // Compressed 4x4 pixels into 8 bytes @@ -185,7 +185,7 @@ public: u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 8; glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D"); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT1)"); } break; @@ -194,7 +194,7 @@ public: u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D"); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT23)"); } break; @@ -203,14 +203,14 @@ public: u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D"); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT45)"); } break; case CELL_GCM_TEXTURE_G8B8: { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_UNSIGNED_BYTE, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_G8B8)"); static const GLint swizzleMaskG8B8[] = { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; glRemap = swizzleMaskG8B8; @@ -232,42 +232,42 @@ public: } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R6G5B5)"); free(unswizzledPixels); } break; case CELL_GCM_TEXTURE_DEPTH24_D8: // 24-bit unsigned fixed-point number and 8 bits of garbage - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT_24_8, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH24_D8)"); break; case CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT: // 24-bit unsigned float and 8 bits of garbage glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT)"); break; case CELL_GCM_TEXTURE_DEPTH16: // 16-bit unsigned fixed-point number glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH16)"); break; case CELL_GCM_TEXTURE_DEPTH16_FLOAT: // 16-bit unsigned float glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH16_FLOAT)"); break; case CELL_GCM_TEXTURE_X16: // A 16-bit fixed-point number { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_X16)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_UNSIGNED_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_X16)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_X16)"); static const GLint swizzleMaskX16[] = { GL_RED, GL_ONE, GL_RED, GL_ONE }; glRemap = swizzleMaskX16; @@ -277,13 +277,13 @@ public: case CELL_GCM_TEXTURE_Y16_X16: // Two 16-bit fixed-point numbers { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_UNSIGNED_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_Y16_X16)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16)"); static const GLint swizzleMaskX32_Y16_X16[] = { GL_GREEN, GL_RED, GL_GREEN, GL_RED }; glRemap = swizzleMaskX32_Y16_X16; @@ -292,35 +292,35 @@ public: case CELL_GCM_TEXTURE_R5G5B5A1: glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G5B5A1)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R5G5B5A1)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G5B5A1)"); break; case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: // Four fp16 values glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_HALF_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); break; case CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT: // Four fp32 values glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT)"); break; case CELL_GCM_TEXTURE_X32_FLOAT: // One 32-bit floating-point number { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_X32_FLOAT)"); static const GLint swizzleMaskX32_FLOAT[] = { GL_RED, GL_ONE, GL_ONE, GL_ONE }; glRemap = swizzleMaskX32_FLOAT; @@ -330,24 +330,24 @@ public: case CELL_GCM_TEXTURE_D1R5G5B5: { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_D1R5G5B5)"); // TODO: Texture swizzling glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_D1R5G5B5)"); static const GLint swizzleMaskX32_D1R5G5B5[] = { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; glRemap = swizzleMaskX32_D1R5G5B5; glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_D1R5G5B5)"); } break; case CELL_GCM_TEXTURE_D8R8G8B8: // 8 bits of garbage and three unsigned 8-bit fixed-point numbers { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_D8R8G8B8)"); static const GLint swizzleMaskX32_D8R8G8B8[] = { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; glRemap = swizzleMaskX32_D8R8G8B8; @@ -357,13 +357,13 @@ public: case CELL_GCM_TEXTURE_Y16_X16_FLOAT: // Two fp16 values { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_HALF_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); static const GLint swizzleMaskX32_Y16_X16_FLOAT[] = { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; glRemap = swizzleMaskX32_Y16_X16_FLOAT; @@ -389,7 +389,7 @@ public: } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)"); free(unswizzledPixels); } @@ -414,7 +414,7 @@ public: } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)"); free(unswizzledPixels); } @@ -465,15 +465,18 @@ public: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GetGlWrap(tex.GetWrapS())); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GetGlWrap(tex.GetWrapT())); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GetGlWrap(tex.GetWrapR())); + + checkForGlError("GLTexture::Init() -> wrap"); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, gl_tex_zfunc[tex.GetZfunc()]); - checkForGlError("GLTexture::Init() -> parameters1"); + checkForGlError("GLTexture::Init() -> compare"); glTexEnvi(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, tex.GetBias()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, (tex.GetMinLOD() >> 8)); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (tex.GetMaxLOD() >> 8)); - checkForGlError("GLTexture::Init() -> parameters2"); + checkForGlError("GLTexture::Init() -> lod"); static const int gl_tex_filter[] = { From b11e08658919b55a403e2f155ed1672cf20c2abb Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 28 Jun 2014 05:19:44 +0400 Subject: [PATCH 081/499] Small changes --- rpcs3/Emu/GS/GCM.h | 2 + rpcs3/Emu/GS/RSXThread.cpp | 47 +++++ rpcs3/Emu/GS/RSXThread.h | 3 + rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 210 +++++++++++++++++---- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 41 ++-- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 43 ++++- rpcs3/Emu/SysCalls/Modules/cellPngDec.h | 40 ++++ rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 21 ++- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 3 + rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 10 +- rpcs3/Emu/System.cpp | 13 ++ 11 files changed, 371 insertions(+), 62 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 8d57541ff6..11871121cf 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -576,6 +576,8 @@ enum NV3089_IMAGE_IN_FORMAT = 0x0000C404, NV3089_IMAGE_IN_OFFSET = 0x0000C408, NV3089_IMAGE_IN = 0x0000C40C, + + GCM_SET_USER_COMMAND = 0x0000EB00, }; static const std::string GetMethodName(const u32 id) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index d5f92c29b2..a7f2d30286 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1815,6 +1815,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case GCM_SET_USER_COMMAND: + { + const u32 cause = ARGS(0); + m_user_handler.Handle(cause); + m_user_handler.Branch(false); + } + break; + default: { std::string log = GetMethodName(cmd); @@ -1870,6 +1878,40 @@ void RSXThread::Task() OnInitThread(); + volatile bool is_vblank_stopped = false; + + thread vblank("VBlank thread", [&]() + { + const u64 start_time = get_system_time(); + + m_vblank_count = 0; + + while (!TestDestroy()) + { + if (Emu.IsStopped()) + { + LOG_WARNING(RSX, "VBlank thread aborted"); + return; + } + + if (get_system_time() - start_time > m_vblank_count * 1000000 / 60) + { + m_vblank_count++; + if (m_vblank_handler) + { + m_vblank_handler.Handle(1); + m_vblank_handler.Branch(false); + } + continue; + } + + Sleep(1); + } + + is_vblank_stopped = true; + }); + vblank.detach(); + while(!TestDestroy()) { if (Emu.IsStopped()) @@ -1961,6 +2003,11 @@ void RSXThread::Task() //memset(Memory.GetMemFromAddr(p.m_ioAddress + get), 0, (count + 1) * 4); } + while (!is_vblank_stopped) + { + Sleep(1); + } + LOG_NOTICE(RSX, "RSX thread ended"); OnExitThread(); diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index e1068c4c55..05ef3587b8 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -152,6 +152,9 @@ public: SSemaphore m_sem_flush; SSemaphore m_sem_flip; Callback m_flip_handler; + Callback m_user_handler; + u64 m_vblank_count; + Callback m_vblank_handler; public: // Dither diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 02af4d083c..7a1a42d02a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -51,6 +51,8 @@ enum CELL_GAME_GAMETYPE_DISC = 1, CELL_GAME_GAMETYPE_HDD = 2, + + CELL_GAME_GAMETYPE_GAMEDATA = 3, CELL_GAME_SIZEKB_NOTCALC = -1, @@ -117,6 +119,9 @@ struct CellGameContentSize be_t sysSizeKB; }; +std::string contentInfo = ""; +std::string usrdir = ""; + int cellGameBootCheck(mem32_t type, mem32_t attributes, mem_ptr_t size, mem_list_ptr_t dirName) { cellGame->Warning("cellGameBootCheck(type_addr=0x%x, attributes_addr=0x%x, size_addr=0x%x, dirName_addr=0x%x)", @@ -124,61 +129,197 @@ int cellGameBootCheck(mem32_t type, mem32_t attributes, mem_ptr_tWarning("cellGameBootCheck returns CELL_GAME_ERROR_PARAM. As a result size->hddFreeSizeKB may be 0."); + cellGame->Error("cellGameBootCheck(): CELL_GAME_ERROR_PARAM"); return CELL_GAME_ERROR_PARAM; } - // TODO: Only works for HDD games - type = CELL_GAME_GAMETYPE_HDD; - attributes = 0; - size->hddFreeSizeKB = 40000000; //40 GB, TODO: Use the free space of the computer's HDD where RPCS3 is being run. - size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; - size->sysSizeKB = 0; + // TODO: Use the free space of the computer's HDD where RPCS3 is being run. + size->hddFreeSizeKB = 40000000; // 40 GB + + // TODO: Calculate data size for HG and DG games, if necessary. + size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; + size->sysSizeKB = 0; - // TODO: Locate the PARAM.SFO. The following path may be wrong. vfsFile f("/app_home/PARAM.SFO"); + if (!f.IsOpened()) + { + cellGame->Error("cellGameBootCheck(): CELL_GAME_ERROR_ACCESS_ERROR (cannot open PARAM.SFO)"); + return CELL_GAME_ERROR_ACCESS_ERROR; + } + PSFLoader psf(f); - if(!psf.Load(false)) + if (!psf.Load(false)) + { + cellGame->Error("cellGameBootCheck(): CELL_GAME_ERROR_ACCESS_ERROR (cannot read PARAM.SFO)"); + return CELL_GAME_ERROR_ACCESS_ERROR; + } + + std::string category = psf.GetString("CATEGORY"); + if (category.substr(0, 2) == "DG") + { + type = CELL_GAME_GAMETYPE_DISC; + attributes = 0; // TODO + Memory.WriteString(dirName.GetAddr(), ""); // ??? + contentInfo = "/dev_bdvd/PS3_GAME"; + usrdir = "/dev_bdvd/PS3_GAME/USRDIR"; + } + else if (category.substr(0, 2) == "HG") + { + std::string titleId = psf.GetString("TITLE_ID"); + type = CELL_GAME_GAMETYPE_HDD; + attributes = 0; // TODO + Memory.WriteString(dirName.GetAddr(), titleId); + contentInfo = "/dev_hdd0/game/" + titleId; + usrdir = "/dev_hdd0/game/" + titleId + "/USRDIR"; + } + else if (category.substr(0, 2) == "GD") + { + std::string titleId = psf.GetString("TITLE_ID"); + type = CELL_GAME_GAMETYPE_DISC; + attributes = CELL_GAME_ATTRIBUTE_PATCH; // TODO + Memory.WriteString(dirName.GetAddr(), titleId); // ??? + contentInfo = "/dev_bdvd/PS3_GAME"; + usrdir = "/dev_bdvd/PS3_GAME/USRDIR"; + } + else + { + cellGame->Error("cellGameBootCheck(): CELL_GAME_ERROR_FAILURE (unknown CATEGORY)"); return CELL_GAME_ERROR_FAILURE; + } + + return CELL_GAME_RET_OK; +} + +int cellGamePatchCheck(mem_ptr_t size, u32 reserved_addr) +{ + cellGame->Warning("cellGamePatchCheck(size_addr=0x%x, reserved_addr=0x%x)", size.GetAddr(), reserved_addr); + + if (!size.IsGood() || reserved_addr != 0) + { + cellGame->Error("cellGamePatchCheck(): CELL_GAME_ERROR_PARAM"); + return CELL_GAME_ERROR_PARAM; + } + + // TODO: Use the free space of the computer's HDD where RPCS3 is being run. + size->hddFreeSizeKB = 40000000; // 40 GB + + // TODO: Calculate data size for patch data, if necessary. + size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; + size->sysSizeKB = 0; + + vfsFile f("/app_home/PARAM.SFO"); + if (!f.IsOpened()) + { + cellGame->Error("cellGamePatchCheck(): CELL_GAME_ERROR_ACCESS_ERROR (cannot open PARAM.SFO)"); + return CELL_GAME_ERROR_ACCESS_ERROR; + } + + PSFLoader psf(f); + if (!psf.Load(false)) + { + cellGame->Error("cellGamePatchCheck(): CELL_GAME_ERROR_ACCESS_ERROR (cannot read PARAM.SFO)"); + return CELL_GAME_ERROR_ACCESS_ERROR; + } + + std::string category = psf.GetString("CATEGORY"); + if (category.substr(0, 2) != "GD") + { + cellGame->Error("cellGamePatchCheck(): CELL_GAME_ERROR_NOTPATCH"); + return CELL_GAME_ERROR_NOTPATCH; + } + std::string titleId = psf.GetString("TITLE_ID"); - - Memory.WriteString(dirName.GetAddr(), titleId); - return CELL_OK; + contentInfo = "/dev_hdd0/game/" + titleId; + usrdir = "/dev_hdd0/game/" + titleId + "/USRDIR"; + + return CELL_GAME_RET_OK; } -int cellGamePatchCheck() +int cellGameDataCheck(u32 type, const mem_list_ptr_t dirName, mem_ptr_t size) { - UNIMPLEMENTED_FUNC(cellGame); - return CELL_OK; + cellGame->Warning("cellGameDataCheck(type=0x%x, dirName_addr=0x%x, size_addr=0x%x)", type, dirName.GetAddr(), size.GetAddr()); + + if ((type - 1) >= 3 || !size.IsGood() || !dirName.IsGood()) + { + cellGame->Error("cellGameDataCheck(): CELL_GAME_ERROR_PARAM"); + return CELL_GAME_ERROR_PARAM; + } + + // TODO: Use the free space of the computer's HDD where RPCS3 is being run. + size->hddFreeSizeKB = 40000000; //40 GB + + // TODO: Calculate data size for game data, if necessary. + size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; + size->sysSizeKB = 0; + + if (type == CELL_GAME_GAMETYPE_DISC) + { + // TODO: not sure what should be checked there + + if (!Emu.GetVFS().ExistsDir("/dev_bdvd/PS3_GAME")) + { + cellGame->Warning("cellGameDataCheck(): /dev_bdvd/PS3_GAME not found"); + return CELL_GAME_RET_NONE; + } + contentInfo = "/dev_bdvd/PS3_GAME"; + usrdir = "/dev_bdvd/PS3_GAME/USRDIR"; + } + else + { + std::string dir = "/dev_hdd0/game/" + std::string(dirName.GetString()); + + if (!Emu.GetVFS().ExistsDir(dir)) + { + cellGame->Warning("cellGameDataCheck(): '%s' directory not found", dir.c_str()); + return CELL_GAME_RET_NONE; + } + contentInfo = dir; + usrdir = dir + "/USRDIR"; + } + + return CELL_GAME_RET_OK; } -int cellGameDataCheck() -{ - UNIMPLEMENTED_FUNC(cellGame); - return CELL_OK; -} - -int cellGameContentPermit(mem_list_ptr_t contentInfoPath, mem_list_ptr_t usrdirPath) +int cellGameContentPermit(mem_list_ptr_t contentInfoPath, mem_list_ptr_t usrdirPath) { cellGame->Warning("cellGameContentPermit(contentInfoPath_addr=0x%x, usrdirPath_addr=0x%x)", contentInfoPath.GetAddr(), usrdirPath.GetAddr()); if (!contentInfoPath.IsGood() || !usrdirPath.IsGood()) + { + cellGame->Error("cellGameContentPermit(): CELL_GAME_ERROR_PARAM"); return CELL_GAME_ERROR_PARAM; - - // TODO: Locate the PARAM.SFO. The following path may be wrong. - vfsFile f("/app_home/PARAM.SFO"); - PSFLoader psf(f); - if(!psf.Load(false)) - return CELL_GAME_ERROR_FAILURE; - std::string titleId = psf.GetString("TITLE_ID"); + } - // TODO: Only works for HDD games - Memory.WriteString(contentInfoPath.GetAddr(), "/dev_hdd0/game/"+titleId); - Memory.WriteString(usrdirPath.GetAddr(), "/dev_hdd0/game/"+titleId+"/USRDIR"); + if (contentInfo == "" && usrdir == "") + { + cellGame->Error("cellGameContentPermit(): CELL_GAME_ERROR_FAILURE (calling order is invalid)"); + return CELL_GAME_ERROR_FAILURE; + } + + // TODO: make it better + Memory.WriteString(contentInfoPath.GetAddr(), contentInfo); + Memory.WriteString(usrdirPath.GetAddr(), usrdir); + + contentInfo = ""; + usrdir = ""; + + return CELL_GAME_RET_OK; +} + +int cellGameDataCheckCreate2(u32 version, u32 dirName_addr, u32 errDialog, u32 funcStat_addr, u32 container) +{ + cellGame->Error("cellGameDataCheckCreate2(version=0x%x, dirName_addr=0x%x, errDialog=0x%x, funcStat_addr=0x%x, container=%d)", + version, dirName_addr, errDialog, funcStat_addr, container); return CELL_OK; } +int cellGameDataCheckCreate(u32 version, u32 dirName_addr, u32 errDialog, u32 funcStat_addr, u32 container) +{ + // probably identical + return cellGameDataCheckCreate2(version, dirName_addr, errDialog, funcStat_addr, container); +} + int cellGameCreateGameData() { UNIMPLEMENTED_FUNC(cellGame); @@ -198,6 +339,7 @@ int cellGameGetParamInt(u32 id, mem32_t value) if(!value.IsGood()) return CELL_GAME_ERROR_PARAM; + // TODO: Access through cellGame***Check functions // TODO: Locate the PARAM.SFO. The following path may be wrong. vfsFile f("/app_home/PARAM.SFO"); PSFLoader psf(f); @@ -224,6 +366,7 @@ int cellGameGetParamString(u32 id, u32 buf_addr, u32 bufsize) if(!Memory.IsGoodAddr(buf_addr)) return CELL_GAME_ERROR_PARAM; + // TODO: Access through cellGame***Check functions // TODO: Locate the PARAM.SFO. The following path may be wrong. vfsFile f("/app_home/PARAM.SFO"); PSFLoader psf(f); @@ -342,6 +485,9 @@ void cellGame_init() cellGame->AddFunc(0x42a2e133, cellGameCreateGameData); cellGame->AddFunc(0xb367c6e3, cellGameDeleteGameData); + cellGame->AddFunc(0xe7951dee, cellGameDataCheckCreate); + cellGame->AddFunc(0xc9645c41, cellGameDataCheckCreate2); + cellGame->AddFunc(0xb7a45caf, cellGameGetParamInt); //cellGame->AddFunc(, cellGameSetParamInt); cellGame->AddFunc(0x3a5d726a, cellGameGetParamString); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 2133bac53f..6d22b47da8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -421,18 +421,16 @@ int cellGcmSetFlip(mem_ptr_t ctxt, u32 id) return res < 0 ? CELL_GCM_ERROR_FAILURE : CELL_OK; } -int cellGcmSetFlipHandler(u32 handler_addr) +void cellGcmSetFlipHandler(u32 handler_addr) { cellGcmSys->Warning("cellGcmSetFlipHandler(handler_addr=%d)", handler_addr); if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) { - cellGcmSys->Error("cellGcmSetFlipHandler : CELL_EFAULT"); - return CELL_EFAULT; + cellGcmSys->Error("cellGcmSetFlipHandler(handler_addr=%d): invalid address", handler_addr); } Emu.GetGSManager().GetRender().m_flip_handler.SetAddr(handler_addr); - return CELL_OK; } int cellGcmSetFlipMode(u32 mode) @@ -567,16 +565,28 @@ int cellGcmSetTileInfo(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u return CELL_OK; } -u32 cellGcmSetUserHandler(u32 handler) +void cellGcmSetUserHandler(u32 handler_addr) { - cellGcmSys->Warning("cellGcmSetUserHandler(handler=0x%x)", handler); - return handler; + cellGcmSys->Warning("cellGcmSetUserHandler(handler_addr=0x%x)", handler_addr); + + if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) + { + cellGcmSys->Error("cellGcmSetUserHandler(handler_addr=%d): invalid address", handler_addr); + } + + Emu.GetGSManager().GetRender().m_user_handler.SetAddr(handler_addr); } -int cellGcmSetVBlankHandler() +void cellGcmSetVBlankHandler(u32 handler_addr) { - UNIMPLEMENTED_FUNC(cellGcmSys); - return CELL_OK; + cellGcmSys->Warning("cellGcmSetVBlankHandler(handler_addr=0x%x)", handler_addr); + + if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) + { + cellGcmSys->Error("cellGcmSetVBlankHandler(handler_addr=%d): invalid address", handler_addr); + } + + Emu.GetGSManager().GetRender().m_vblank_handler.SetAddr(handler_addr); } int cellGcmSetWaitFlip(mem_ptr_t ctxt) @@ -699,7 +709,7 @@ int cellGcmGetDisplayBufferByFlipIndex() return CELL_OK; } -int cellGcmgetLastFlipTime() +int cellGcmGetLastFlipTime() { UNIMPLEMENTED_FUNC(cellGcmSys); return CELL_OK; @@ -711,10 +721,11 @@ int cellGcmGetLastSecondVTime() return CELL_OK; } -int cellGcmGetVBlankCount() +u64 cellGcmGetVBlankCount() { - UNIMPLEMENTED_FUNC(cellGcmSys); - return CELL_OK; + cellGcmSys->Log("cellGcmGetVBlankCount()"); + + return Emu.GetGSManager().GetRender().m_vblank_count; } int cellGcmInitSystemMode() @@ -1156,7 +1167,7 @@ void cellGcmSys_init() cellGcmSys->AddFunc(0xe315a0b2, cellGcmGetConfiguration); cellGcmSys->AddFunc(0x371674cf, cellGcmGetDisplayBufferByFlipIndex); cellGcmSys->AddFunc(0x72a577ce, cellGcmGetFlipStatus); - cellGcmSys->AddFunc(0x63387071, cellGcmgetLastFlipTime); + cellGcmSys->AddFunc(0x63387071, cellGcmGetLastFlipTime); cellGcmSys->AddFunc(0x23ae55a3, cellGcmGetLastSecondVTime); cellGcmSys->AddFunc(0x055bd74d, cellGcmGetTiledPitchSize); cellGcmSys->AddFunc(0x723bbc7e, cellGcmGetVBlankCount); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 4ffcc7d04f..ebdce664a4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -93,6 +93,16 @@ int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s return CELL_OK; } +int cellPngDecExtOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t src, u32 openInfo, mem_ptr_t cbCtrlStrm, mem_ptr_t opnParam) +{ + cellPngDec->Warning("cellPngDecExtOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x, cbCtrlStrm_addr=0x%x, opnParam=0x%x)", + mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo, cbCtrlStrm.GetAddr(), opnParam.GetAddr()); + + cellPngDec->Warning("*** cbCtrlStrm->cbCtrlStrmFunc_addr=0x%x", (u32)cbCtrlStrm->cbCtrlStrmFunc_addr); + + return cellPngDecOpen(mainHandle, subHandle, src, openInfo); +} + int cellPngDecClose(u32 mainHandle, u32 subHandle) { cellPngDec->Warning("cellPngDecClose(mainHandle=0x%x,subHandle=0x%x)", mainHandle, subHandle); @@ -112,7 +122,7 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tWarning("cellPngDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%llx)", mainHandle, subHandle, info.GetAddr()); + cellPngDec->Warning("cellPngDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%x)", mainHandle, subHandle, info.GetAddr()); CellPngDecSubHandle* subHandle_data; if(!cellPngDec->CheckId(subHandle, subHandle_data)) return CELL_PNGDEC_ERROR_FATAL; @@ -167,6 +177,14 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t info, mem_ptr_t extInfo) +{ + cellPngDec->Warning("cellPngDecExtReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%x, extInfo_addr=0x%x)", + mainHandle, subHandle, info.GetAddr(), extInfo.GetAddr()); + + return cellPngDecReadHeader(mainHandle, subHandle, info); +} + int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const mem_ptr_t dataCtrlParam, mem_ptr_t dataOutInfo) { if (!data.IsGood() || !dataCtrlParam.IsGood() || !dataOutInfo.IsGood()) @@ -292,6 +310,17 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m return CELL_OK; } +int cellPngDecExtDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const mem_ptr_t dataCtrlParam, + mem_ptr_t dataOutInfo, mem_ptr_t cbCtrlDisp, mem_ptr_t dispParam) +{ + cellPngDec->Warning("cellPngDecExtDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x, cbCtrlDisp_addr=0x%x, dispParam=0x%x", + mainHandle, subHandle, data.GetAddr(), dataCtrlParam.GetAddr(), dataOutInfo.GetAddr(), cbCtrlDisp.GetAddr(), dispParam.GetAddr()); + + cellPngDec->Warning("*** cbCtrlDisp->cbCtrlDispFunc_addr=0x%x", (u32)scbCtrlDisp->cbCtrlDispFunc_addr); + + return cellPngDecDecodeData(mainHandle, subHandle, data, dataCtrlParam, dataOutInfo); +} + int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_t inParam, mem_ptr_t outParam) { if (!inParam.IsGood() || !outParam.IsGood()) @@ -333,6 +362,15 @@ int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_t inParam, mem_ptr_t outParam, + mem_ptr_t extInParam, mem_ptr_t extOutParam) +{ + cellPngDec->Warning("cellPngDecExtSetParameter(mainHandle=0x%x, subHandle=0x%x, inParam_addr=0x%x, outParam_addr=0x%x, extInParam=0x%x, extOutParam=0x%x", + mainHandle, subHandle, inParam.GetAddr(), outParam.GetAddr(), extInParam.GetAddr(), extOutParam.GetAddr()); + + return cellPngDecSetParameter(mainHandle, subHandle, inParam, outParam); +} + void cellPngDec_init() { cellPngDec->AddFunc(0x157d30c5, cellPngDecCreate); @@ -343,11 +381,12 @@ void cellPngDec_init() cellPngDec->AddFunc(0x2310f155, cellPngDecDecodeData); cellPngDec->AddFunc(0xe97c9bd4, cellPngDecSetParameter); - /*cellPngDec->AddFunc(0x48436b2d, cellPngDecExtCreate); cellPngDec->AddFunc(0x0c515302, cellPngDecExtOpen); cellPngDec->AddFunc(0x8b33f863, cellPngDecExtReadHeader); cellPngDec->AddFunc(0x726fc1d0, cellPngDecExtDecodeData); cellPngDec->AddFunc(0x9e9d7d42, cellPngDecExtSetParameter); + + /*cellPngDec->AddFunc(0x48436b2d, cellPngDecExtCreate); cellPngDec->AddFunc(0x7585a275, cellPngDecGetbKGD); cellPngDec->AddFunc(0x7a062d26, cellPngDecGetcHRM); cellPngDec->AddFunc(0xb153629c, cellPngDecGetgAMA); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.h b/rpcs3/Emu/SysCalls/Modules/cellPngDec.h index 9d48c68b01..9db3ac8bcb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.h @@ -124,3 +124,43 @@ struct CellPngDecMainHandle be_t threadInParam; be_t threadOutParam; }; + +struct CellPngDecCbCtrlStrm +{ + be_t cbCtrlStrmFunc_addr; + be_t cbCtrlStrmArg; +}; + +struct CellPngDecCbCtrlDisp +{ + be_t cbCtrlDispFunc_addr; + be_t cbCtrlDispArg; +}; + +struct CellPngDecDispParam +{ + be_t nextOutputImage_addr; +}; + +struct CellPngDecExtInfo +{ + be_t reserved; +}; + +struct CellPngDecExtInParam +{ + be_t bufferMode; // CellPngDecBufferMode + be_t outputCounts; + be_t spuMode; // CellPngDecSpuMode +}; + +struct CellPngDecExtOutParam +{ + be_t outputWidthByte; + be_t outputHeight; +}; + +struct CellPngDecOpnParam +{ + be_t selectChunk; +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index ea9047f1b3..05381883e0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -80,7 +80,7 @@ CCellRescInternal* s_rescInternalInstance = nullptr; // Extern Functions extern int cellGcmSetFlipMode(u32 mode); -extern int cellGcmSetFlipHandler(u32 handler_addr); +extern void cellGcmSetFlipHandler(u32 handler_addr); extern int32_t cellGcmAddressToOffset(u64 address, mem32_t offset); extern int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height); extern int cellGcmSetPrepareFlip(mem_ptr_t ctx, u32 id); @@ -857,19 +857,16 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t return CELL_OK; } -int cellRescSetFlipHandler(u32 handler_addr) +void cellRescSetFlipHandler(u32 handler_addr) { cellResc->Warning("cellRescSetFlipHandler(handler_addr=0x%x)", handler_addr); if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) { - cellResc->Error("cellRescSetFlipHandler : CELL_EFAULT"); - return CELL_EFAULT; + cellResc->Error("cellRescSetFlipHandler(handler_addr=%d): invalid address", handler_addr); } Emu.GetGSManager().GetRender().m_flip_handler.SetAddr(handler_addr); - - return CELL_OK; } void cellRescResetFlipStatus() @@ -904,10 +901,16 @@ int cellRescSetRegisterCount() return CELL_OK; } -int cellRescSetVBlankHandler() +void cellRescSetVBlankHandler(u32 handler_addr) { - UNIMPLEMENTED_FUNC(cellResc); - return CELL_OK; + cellResc->Warning("cellRescSetVBlankHandler(handler_addr=0x%x)", handler_addr); + + if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) + { + cellResc->Error("cellRescSetVBlankHandler(handler_addr=%d): invalid address", handler_addr); + } + + Emu.GetGSManager().GetRender().m_vblank_handler.SetAddr(handler_addr); } int cellRescCreateInterlaceTable() diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 250e919a76..1cc47aeb07 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -382,6 +382,9 @@ int cellSysutilUnregisterCallback(int slot) int cellMsgDialogOpen2(u32 type, char* msgString, mem_func_ptr_t callback, mem_ptr_t userData, u32 extParam) { + cellSysutil->Warning("cellMsgDialogOpen2(type=0x%x, msgString_addr=0x%x, callback_addr=0x%x, userData=0x%x, extParam=0x%x)", + type, (u32)msgString, callback.GetAddr(), userData.GetAddr(), extParam); + long style = 0; if(type & CELL_MSGDIALOG_DIALOG_TYPE_NORMAL) diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 1d35191bd7..63de40521f 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -114,16 +114,16 @@ int sdata_unpack(const std::string& packed_file, const std::string& unpacked_fil int cellFsSdataOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) { const std::string& path = Memory.ReadString(path_addr); - sys_fs->Warning("cellFsSdataOpen(path=\"%s\", flags=0x%x, fd_addr=0x%x, arg_addr=0x%x, size=0x%llx)", + sys_fs->Warning("cellFsSdataOpen(path=\"%s\", flags=0x%x, fd_addr=0x%x, arg_addr=0x%x, size=0x%llx) -> cellFsOpen()", path.c_str(), flags, fd.GetAddr(), arg.GetAddr(), size); - if (!fd.IsGood() || (!arg.IsGood() && size)) + /*if (!fd.IsGood() || (!arg.IsGood() && size)) return CELL_EFAULT; if (flags != CELL_O_RDONLY) return CELL_EINVAL; - std::string suffix = path.substr(path.length() - 5, 4); + std::string suffix = path.substr(path.length() - 5, 5); if (suffix != ".sdat" && suffix != ".SDAT") return CELL_ENOTSDATA; @@ -135,7 +135,9 @@ int cellFsSdataOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) fd = sys_fs->GetNewId(Emu.GetVFS().OpenFile(unpacked_path, vfsRead), flags); - return CELL_OK; + return CELL_OK;*/ + + return cellFsOpen(path_addr, flags, fd, arg, size); } std::atomic g_FsAioReadID( 0 ); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 6c3d3667f1..857b172e86 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -11,6 +11,7 @@ #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/PPUInstrTable.h" #include "Emu/FS/vfsFile.h" +#include "Emu/FS/vfsDeviceLocalFile.h" #include "Emu/CPU/CPUThreadManager.h" //gui dependency @@ -163,6 +164,18 @@ void Emulator::Load() { LOG_NOTICE(LOADER, "%s -> %s", m_vfs.m_devices[i]->GetPs3Path().c_str(), m_vfs.m_devices[i]->GetLocalPath().c_str()); } + // bdvd inserting imitation + vfsFile f1("/app_home/dev_bdvd.path"); + if (f1.IsOpened()) + { + std::string bdvd; + bdvd.resize(f1.GetSize()); + f1.Read(&bdvd[0], bdvd.size()); + + // load desired /dev_bdvd/ real directory and remount + Emu.GetVFS().Mount("/dev_bdvd/", bdvd, new vfsDeviceLocalFile()); + LOG_NOTICE(LOADER, "/dev_bdvd/ remounted into %s", bdvd.c_str()); + } LOG_NOTICE(LOADER, " ");//used to be skip_line if(m_elf_path.empty()) From 382af8437c831f734260be34cd4ef5bb84ba5ed5 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 28 Jun 2014 17:19:23 +0800 Subject: [PATCH 082/499] Fix texture MAG filter and add max anisotropy --- rpcs3/Emu/GS/GCM.h | 40 +++++++++++++++++++++--- rpcs3/Emu/GS/GL/GLGSRender.h | 60 +++++++++++++++++++++++++++--------- 2 files changed, 82 insertions(+), 18 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 8d57541ff6..25997ac12e 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -25,7 +25,7 @@ enum { CELL_GCM_VERTEX_S1 = 1, CELL_GCM_VERTEX_F = 2, - CELL_GCM_VERTEX_S = 3, + CELL_GCM_VERTEX_SF = 3, CELL_GCM_VERTEX_UB = 4, CELL_GCM_VERTEX_S32K = 5, CELL_GCM_VERTEX_CMP = 6, @@ -89,6 +89,26 @@ enum // Normalization Flag CELL_GCM_TEXTURE_NR = 0x00, CELL_GCM_TEXTURE_UN = 0x40, + + // Max Anisotropy + CELL_GCM_TEXTURE_MAX_ANISO_1 = 0, + CELL_GCM_TEXTURE_MAX_ANISO_2 = 1, + CELL_GCM_TEXTURE_MAX_ANISO_4 = 2, + CELL_GCM_TEXTURE_MAX_ANISO_6 = 3, + CELL_GCM_TEXTURE_MAX_ANISO_8 = 4, + CELL_GCM_TEXTURE_MAX_ANISO_10 = 5, + CELL_GCM_TEXTURE_MAX_ANISO_12 = 6, + CELL_GCM_TEXTURE_MAX_ANISO_16 = 7, + + // Wrap + CELL_GCM_TEXTURE_WRAP = 1, + CELL_GCM_TEXTURE_MIRROR = 2, + CELL_GCM_TEXTURE_CLAMP_TO_EDGE = 3, + CELL_GCM_TEXTURE_BORDER = 4, + CELL_GCM_TEXTURE_CLAMP = 5, + CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP_TO_EDGE = 6, + CELL_GCM_TEXTURE_MIRROR_ONCE_BORDER = 7, + CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP = 8, }; // GCM Surface @@ -107,7 +127,7 @@ enum CELL_GCM_SURFACE_Z24S8 = 2, // Surface Antialias - CELL_GCM_SURFACE_CENTER_1 = 2, + CELL_GCM_SURFACE_CENTER_1 = 0, CELL_GCM_SURFACE_DIAGONAL_CENTERED_2 = 3, CELL_GCM_SURFACE_SQUARE_CENTERED_4 = 4, CELL_GCM_SURFACE_SQUARE_ROTATED_4 = 5, @@ -117,8 +137,20 @@ enum CELL_GCM_SURFACE_SWIZZLE = 2, // Surface format - CELL_GCM_SURFACE_A8R8G8B8 = 8, - CELL_GCM_SURFACE_F_W16Z16Y16X16 = 11, + CELL_GCM_SURFACE_X1R5G5B5_Z1R5G5B5 = 1, + CELL_GCM_SURFACE_X1R5G5B5_O1R5G5B5 = 2, + CELL_GCM_SURFACE_R5G6B5 = 3, + CELL_GCM_SURFACE_X8R8G8B8_Z8R8G8B8 = 4, + CELL_GCM_SURFACE_X8R8G8B8_O8R8G8B8 = 5, + CELL_GCM_SURFACE_A8R8G8B8 = 8, + CELL_GCM_SURFACE_B8 = 9, + CELL_GCM_SURFACE_G8B8 = 10, + CELL_GCM_SURFACE_F_W16Z16Y16X16 = 11, + CELL_GCM_SURFACE_F_W32Z32Y32X32 = 12, + CELL_GCM_SURFACE_F_X32 = 13, + CELL_GCM_SURFACE_X8B8G8R8_Z8B8G8R8 = 14, + CELL_GCM_SURFACE_X8B8G8R8_O8B8G8R8 = 15, + CELL_GCM_SURFACE_A8B8G8R8 = 16, }; diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index 9f3b3e28f0..b3bca78d01 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -47,20 +47,38 @@ public: { switch(wrap) { - case 1: return GL_REPEAT; - case 2: return GL_MIRRORED_REPEAT; - case 3: return GL_CLAMP_TO_EDGE; - case 4: return GL_CLAMP_TO_BORDER; - case 5: return GL_CLAMP_TO_EDGE; - case 6: return GL_MIRROR_CLAMP_TO_EDGE_EXT; - case 7: return GL_MIRROR_CLAMP_TO_BORDER_EXT; - case 8: return GL_MIRROR_CLAMP_EXT; + case CELL_GCM_TEXTURE_WRAP: return GL_REPEAT; + case CELL_GCM_TEXTURE_MIRROR: return GL_MIRRORED_REPEAT; + case CELL_GCM_TEXTURE_CLAMP_TO_EDGE: return GL_CLAMP_TO_EDGE; + case CELL_GCM_TEXTURE_BORDER: return GL_CLAMP_TO_BORDER; + case CELL_GCM_TEXTURE_CLAMP: return GL_CLAMP_TO_EDGE; + case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP_TO_EDGE: return GL_MIRROR_CLAMP_TO_EDGE_EXT; + case CELL_GCM_TEXTURE_MIRROR_ONCE_BORDER: return GL_MIRROR_CLAMP_TO_BORDER_EXT; + case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP: return GL_MIRROR_CLAMP_EXT; } LOG_ERROR(RSX, "Texture wrap error: bad wrap (%d).", wrap); return GL_REPEAT; } + float GetMaxAniso(int aniso) + { + switch (aniso) + { + case CELL_GCM_TEXTURE_MAX_ANISO_1: return 1.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_2: return 2.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_4: return 4.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_6: return 6.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_8: return 8.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_10: return 10.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_12: return 12.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_16: return 16.0f; + } + + LOG_ERROR(RSX, "Texture anisotropy error: bad max aniso (%d).", aniso); + return 1.0f; + } + inline static u8 Convert4To8(u8 v) { // Swizzle bits: 00001234 -> 12341234 @@ -478,22 +496,36 @@ public: checkForGlError("GLTexture::Init() -> lod"); - static const int gl_tex_filter[] = + static const int gl_tex_min_filter[] = { - GL_NEAREST, + GL_NEAREST, // unused GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_LINEAR, - GL_NEAREST, + GL_NEAREST, // CELL_GCM_TEXTURE_CONVOLUTION_MIN }; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_tex_filter[tex.GetMinFilter()]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_tex_filter[tex.GetMagFilter()]); + static const int gl_tex_mag_filter[] = { + GL_NEAREST, // unused + GL_NEAREST, + GL_LINEAR, + GL_NEAREST, // unused + GL_LINEAR // CELL_GCM_TEXTURE_CONVOLUTION_MAG + }; - checkForGlError("GLTexture::Init() -> filters"); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_tex_min_filter[tex.GetMinFilter()]); + + checkForGlError("GLTexture::Init() -> min filters"); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_tex_mag_filter[tex.GetMagFilter()]); + + checkForGlError("GLTexture::Init() -> mag filters"); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, GetMaxAniso(tex.GetMaxAniso())); + + checkForGlError("GLTexture::Init() -> max anisotropy"); //Unbind(); From fb8ced95b01cbf2a74f2d31606134d115abc805d Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 27 Jun 2014 22:57:58 +0800 Subject: [PATCH 083/499] Remove obsolete option "Hide Debug Console" and move skipPamf to HLE section --- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 2 +- rpcs3/Gui/MainFrame.cpp | 16 ++++++---------- rpcs3/Ini.h | 14 +++++--------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 53cc3f5c62..4d172a8171 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -176,7 +176,7 @@ int cellPamfVerify(mem_ptr_t pAddr, u64 fileSize) int cellPamfReaderInitialize(mem_ptr_t pSelf, mem_ptr_t pAddr, u64 fileSize, u32 attribute) { // Skip PAMF initialization - if (Ini.SkipPamf.GetValue()) + if (Ini.HLESkipPamf.GetValue()) return -1; cellPamf->Warning("cellPamfReaderInitialize(pSelf=0x%x, pAddr=0x%x, fileSize=%d, attribute=0x%x)", diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 0da12e6462..d6018821b3 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -420,7 +420,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_gs_log_prog = new wxCheckBox(p_graphics, wxID_ANY, "Log vertex/fragment programs"); wxCheckBox* chbox_gs_dump_depth = new wxCheckBox(p_graphics, wxID_ANY, "Write Depth Buffer"); wxCheckBox* chbox_gs_dump_color = new wxCheckBox(p_graphics, wxID_ANY, "Write Color Buffers"); - wxCheckBox* chbox_skip_pamf = new wxCheckBox(p_graphics, wxID_ANY, "Skip Pamf"); wxCheckBox* chbox_gs_downscale = new wxCheckBox(p_graphics, wxID_ANY, "480p Downscale"); wxCheckBox* chbox_gs_vsync = new wxCheckBox(p_graphics, wxID_ANY, "VSync"); wxCheckBox* chbox_audio_dump = new wxCheckBox(p_audio, wxID_ANY, "Dump to file"); @@ -428,9 +427,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_hle_logging = new wxCheckBox(p_hle, wxID_ANY, "Log all SysCalls"); wxCheckBox* chbox_hle_hook_stfunc = new wxCheckBox(p_hle, wxID_ANY, "Hook static functions"); wxCheckBox* chbox_hle_savetty = new wxCheckBox(p_hle, wxID_ANY, "Save TTY output to file"); - wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes"); - wxCheckBox* chbox_hle_hide_debug_console = new wxCheckBox(p_hle, wxID_ANY, "Hide Debug Console"); - wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot"); + wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes"); + wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot"); + wxCheckBox* chbox_hle_skip_pamf = new wxCheckBox(p_hle, wxID_ANY, "Skip Pamf"); //cbox_cpu_decoder->Append("DisAsm"); cbox_cpu_decoder->Append("Interpreter & DisAsm"); @@ -500,7 +499,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_gs_log_prog ->SetValue(Ini.GSLogPrograms.GetValue()); chbox_gs_dump_depth ->SetValue(Ini.GSDumpDepthBuffer.GetValue()); chbox_gs_dump_color ->SetValue(Ini.GSDumpColorBuffers.GetValue()); - chbox_skip_pamf ->SetValue(Ini.SkipPamf.GetValue()); chbox_gs_downscale ->SetValue(Ini.GSDownscale.GetValue()); chbox_gs_vsync ->SetValue(Ini.GSVSyncEnable.GetValue()); chbox_audio_dump ->SetValue(Ini.AudioDumpToFile.GetValue()); @@ -509,8 +507,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_hle_hook_stfunc ->SetValue(Ini.HLEHookStFunc.GetValue()); chbox_hle_savetty ->SetValue(Ini.HLESaveTTY.GetValue()); chbox_hle_exitonstop ->SetValue(Ini.HLEExitOnStop.GetValue()); - chbox_hle_hide_debug_console->SetValue(Ini.HLEHideDebugConsole.GetValue()); chbox_hle_always_start ->SetValue(Ini.HLEAlwaysStart.GetValue()); + chbox_hle_skip_pamf ->SetValue(Ini.HLESkipPamf.GetValue()); cbox_cpu_decoder ->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() - 1 : 0); cbox_spu_decoder ->SetSelection(Ini.SPUDecoderMode.GetValue() ? Ini.SPUDecoderMode.GetValue() - 1 : 0); @@ -561,7 +559,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_graphics->Add(chbox_gs_log_prog, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_dump_depth, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_dump_color, wxSizerFlags().Border(wxALL, 5).Expand()); - s_subpanel_graphics->Add(chbox_skip_pamf, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_vsync, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_downscale, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -581,8 +578,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_hle->Add(chbox_hle_hook_stfunc, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_savetty, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_exitonstop, wxSizerFlags().Border(wxALL, 5).Expand()); - s_subpanel_hle->Add(chbox_hle_hide_debug_console, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_always_start, wxSizerFlags().Border(wxALL, 5).Expand()); + s_subpanel_hle->Add(chbox_hle_skip_pamf, wxSizerFlags().Border(wxALL, 5).Expand()); // System s_subpanel_system->Add(s_round_sys_lang, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -616,7 +613,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.GSLogPrograms.SetValue(chbox_gs_log_prog->GetValue()); Ini.GSDumpDepthBuffer.SetValue(chbox_gs_dump_depth->GetValue()); Ini.GSDumpColorBuffers.SetValue(chbox_gs_dump_color->GetValue()); - Ini.SkipPamf.SetValue(chbox_skip_pamf->GetValue()); Ini.PadHandlerMode.SetValue(cbox_pad_handler->GetSelection()); Ini.KeyboardHandlerMode.SetValue(cbox_keyboard_handler->GetSelection()); Ini.MouseHandlerMode.SetValue(cbox_mouse_handler->GetSelection()); @@ -629,8 +625,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.HLEExitOnStop.SetValue(chbox_hle_exitonstop->GetValue()); Ini.HLELogLvl.SetValue(cbox_hle_loglvl->GetSelection()); Ini.SysLanguage.SetValue(cbox_sys_lang->GetSelection()); - Ini.HLEHideDebugConsole.SetValue(chbox_hle_hide_debug_console->GetValue()); Ini.HLEAlwaysStart.SetValue(chbox_hle_always_start->GetValue()); + Ini.HLESkipPamf.SetValue(chbox_hle_skip_pamf->GetValue()); Ini.Save(); } diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index a0c17b6dc3..1408e4a443 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -115,7 +115,6 @@ public: IniEntry GSLogPrograms; IniEntry GSDumpColorBuffers; IniEntry GSDumpDepthBuffer; - IniEntry SkipPamf; IniEntry GSDownscale; // Audio @@ -157,9 +156,9 @@ public: IniEntry HLEHookStFunc; IniEntry HLESaveTTY; IniEntry HLEExitOnStop; - IniEntry HLELogLvl; - IniEntry HLEHideDebugConsole; + IniEntry HLELogLvl; IniEntry HLEAlwaysStart; + IniEntry HLESkipPamf; // Language IniEntry SysLanguage; @@ -184,7 +183,6 @@ public: GSLogPrograms.Init("GS_LogPrograms", path); GSDumpColorBuffers.Init("GS_DumpColorBuffers", path); GSDumpDepthBuffer.Init("GS_DumpDepthBuffer", path); - SkipPamf.Init("GS_SkipPamf", path); GSDownscale.Init("GS_Downscale", path); // Audio @@ -227,8 +225,8 @@ public: HLESaveTTY.Init("HLE_HLESaveTTY", path); HLEExitOnStop.Init("HLE_HLEExitOnStop", path); HLELogLvl.Init("HLE_HLELogLvl", path); - HLEHideDebugConsole.Init("HLE_HLEHideDebugConsole", path); HLEAlwaysStart.Init("HLE_HLEAlwaysStart", path); + HLESkipPamf.Init("HLE_HLESkipPamf", path); // Language SysLanguage.Init("Sytem_SysLanguage", path); @@ -249,7 +247,6 @@ public: GSLogPrograms.Load(false); GSDumpColorBuffers.Load(false); GSDumpDepthBuffer.Load(false); - SkipPamf.Load(false); GSDownscale.Load(false); // Audio @@ -292,8 +289,8 @@ public: HLESaveTTY.Load(false); HLEExitOnStop.Load(false); HLELogLvl.Load(3); - HLEHideDebugConsole.Load(false); HLEAlwaysStart.Load(false); + HLESkipPamf.Load(false); // Language SysLanguage.Load(1); @@ -315,7 +312,6 @@ public: GSLogPrograms.Save(); GSDumpColorBuffers.Save(); GSDumpDepthBuffer.Save(); - SkipPamf.Save(); GSDownscale.Save(); // Audio @@ -358,8 +354,8 @@ public: HLESaveTTY.Save(); HLEExitOnStop.Save(); HLELogLvl.Save(); - HLEHideDebugConsole.Save(); HLEAlwaysStart.Save(); + HLESkipPamf.Save(); // Language SysLanguage.Save(); From 8987350b5b4f96b12856fe53f26f59bd5cf0cc1c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 29 Jun 2014 07:21:57 +0400 Subject: [PATCH 084/499] Small changes 2 --- Utilities/SQueue.h | 47 ++++++++++++----------- rpcs3/Emu/GS/GL/GLGSRender.cpp | 10 +++-- rpcs3/Emu/GS/RSXThread.cpp | 2 + rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 27 ++++++++----- rpcs3/Emu/SysCalls/Modules/cellAdec.h | 2 + rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 19 +++++++-- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 7 ++-- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 13 +++++-- rpcs3/Emu/SysCalls/Modules/cellPngDec.h | 13 ++++++- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 7 ++-- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 32 ++++++++------- rpcs3/Emu/SysCalls/Modules/cellVdec.h | 2 + 13 files changed, 118 insertions(+), 65 deletions(-) diff --git a/Utilities/SQueue.h b/Utilities/SQueue.h index 4e3b317a9d..52b68979f0 100644 --- a/Utilities/SQueue.h +++ b/Utilities/SQueue.h @@ -4,8 +4,6 @@ template class SQueue { std::mutex m_mutex; - NamedThreadBase* push_waiter; - NamedThreadBase* pop_waiter; u32 m_pos; u32 m_count; T m_data[SQSize]; @@ -14,8 +12,6 @@ public: SQueue() : m_pos(0) , m_count(0) - , push_waiter(nullptr) - , pop_waiter(nullptr) { } @@ -26,9 +22,6 @@ public: bool Push(const T& data) { - NamedThreadBase* t = GetCurrentNamedThread(); - push_waiter = t; - while (true) { if (m_count >= SQSize) @@ -46,11 +39,9 @@ public: std::lock_guard lock(m_mutex); if (m_count >= SQSize) continue; - if (pop_waiter && !m_count) pop_waiter->Notify(); m_data[(m_pos + m_count++) % SQSize] = data; - push_waiter = nullptr; return true; } } @@ -58,9 +49,6 @@ public: bool Pop(T& data) { - NamedThreadBase* t = GetCurrentNamedThread(); - pop_waiter = t; - while (true) { if (!m_count) @@ -78,43 +66,44 @@ public: std::lock_guard lock(m_mutex); if (!m_count) continue; - if (push_waiter && m_count >= SQSize) push_waiter->Notify(); data = m_data[m_pos]; m_pos = (m_pos + 1) % SQSize; m_count--; - pop_waiter = nullptr; return true; } } } - volatile u32 GetCount() // may be thread unsafe + u32 GetCount() + { + std::lock_guard lock(m_mutex); + return m_count; + } + + u32 GetCountUnsafe() { return m_count; } - volatile bool IsEmpty() // may be thread unsafe + bool IsEmpty() { + std::lock_guard lock(m_mutex); return !m_count; } void Clear() { std::lock_guard lock(m_mutex); - if (push_waiter && m_count >= SQSize) push_waiter->Notify(); m_count = 0; } T& Peek(u32 pos = 0) { - NamedThreadBase* t = GetCurrentNamedThread(); - pop_waiter = t; - while (true) { - if (!m_count) + if (m_count <= pos) { if (Emu.IsStopped()) { @@ -127,13 +116,25 @@ public: { std::lock_guard lock(m_mutex); - if (m_count) + if (m_count > pos) { - pop_waiter = nullptr; break; } } } return m_data[(m_pos + pos) % SQSize]; } + + T& PeekIfExist(T& def, u32 pos = 0) + { + std::lock_guard lock(m_mutex); + if (m_count <= pos) + { + return def; + } + else + { + return m_data[(m_pos + pos) % SQSize]; + } + } }; diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 9309eae93c..c7f6f80404 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -355,8 +355,9 @@ bool GLGSRender::LoadProgram() if(m_fp_buf_num == -1) { LOG_WARNING(RSX, "FP not found in buffer!"); - m_shader_prog.DecompileAsync(*m_cur_shader_prog); - m_shader_prog.Wait(); + //m_shader_prog.DecompileAsync(*m_cur_shader_prog); + //m_shader_prog.Wait(); + m_shader_prog.Decompile(*m_cur_shader_prog); m_shader_prog.Compile(); checkForGlError("m_shader_prog.Compile"); @@ -367,8 +368,9 @@ bool GLGSRender::LoadProgram() if(m_vp_buf_num == -1) { LOG_WARNING(RSX, "VP not found in buffer!"); - m_vertex_prog.DecompileAsync(*m_cur_vertex_prog); - m_vertex_prog.Wait(); + //m_vertex_prog.DecompileAsync(*m_cur_vertex_prog); + //m_vertex_prog.Wait(); + m_vertex_prog.Decompile(*m_cur_vertex_prog); m_vertex_prog.Compile(); checkForGlError("m_vertex_prog.Compile"); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index a7f2d30286..614bdafe85 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -197,6 +197,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 //if(cmd == 0xfeadffff) { Flip(); + m_last_flip_time = get_system_time(); m_gcm_current_buffer = ARGS(0); m_read_buffer = true; @@ -1878,6 +1879,7 @@ void RSXThread::Task() OnInitThread(); + m_last_flip_time = get_system_time(); volatile bool is_vblank_stopped = false; thread vblank("VBlank thread", [&]() diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index aa72d95f64..fec90b45d1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -32,7 +32,7 @@ int adecRawRead(void* opaque, u8* buf, int buf_size) next: if (adec.reader.size < (u32)buf_size /*&& !adec.just_started*/) { - while (adec.job.IsEmpty()) + while (!adec.job.GetCountUnsafe()) { if (Emu.IsStopped()) { @@ -45,6 +45,7 @@ next: switch (adec.job.Peek().type) { case adecEndSeq: + case adecClose: { buf_size = adec.reader.size; } @@ -209,7 +210,7 @@ u32 adecOpen(AudioDecoder* data) break; } - if (adec.job.IsEmpty() && adec.is_running) + if (!adec.job.GetCountUnsafe() && adec.is_running) { Sleep(1); continue; @@ -255,10 +256,8 @@ u32 adecOpen(AudioDecoder* data) cb.Branch(true); // ???*/ adec.adecCb->ExecAsCallback(adec.cbFunc, true, adec.id, CELL_ADEC_MSG_TYPE_SEQDONE, CELL_OK, adec.cbArg); - avcodec_close(adec.ctx); - avformat_close_input(&adec.fmt); - adec.is_running = false; + adec.just_finished = true; } break; @@ -312,7 +311,14 @@ u32 adecOpen(AudioDecoder* data) dump.Close(); }*/ - if (adec.just_started) // deferred initialization + if (adec.just_started && adec.just_finished) + { + avcodec_flush_buffers(adec.ctx); + adec.reader.init = true; + adec.just_finished = false; + adec.just_started = false; + } + else if (adec.just_started) // deferred initialization { err = avformat_open_input(&adec.fmt, NULL, av_find_input_format("oma"), NULL); if (err) @@ -353,7 +359,7 @@ u32 adecOpen(AudioDecoder* data) av_dict_set(&opts, "refcounted_frames", "1", 0); { std::lock_guard lock(g_mutex_avcodec_open2); - // not multithread-safe + // not multithread-safe (???) err = avcodec_open2(adec.ctx, codec, &opts); } if (err) @@ -605,7 +611,7 @@ int cellAdecClose(u32 handle) adec->job.Push(AdecTask(adecClose)); - while (!adec->is_finished || !adec->frames.IsEmpty()) + while (!adec->is_finished) { if (Emu.IsStopped()) { @@ -789,13 +795,14 @@ int cellAdecGetPcmItem(u32 handle, mem32_t pcmItem_ptr) return CELL_ADEC_ERROR_FATAL; } - AdecFrame& af = adec->frames.Peek(); - if (adec->frames.IsEmpty()) { + Sleep(1); // hack return CELL_ADEC_ERROR_EMPTY; } + AdecFrame& af = adec->frames.Peek(); + AVFrame* frame = af.data; mem_ptr_t pcm(adec->memAddr + adec->memBias); diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.h b/rpcs3/Emu/SysCalls/Modules/cellAdec.h index 88a6e6bf47..65ce820f13 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.h @@ -1076,6 +1076,7 @@ public: volatile bool is_running; volatile bool is_finished; bool just_started; + bool just_finished; AVCodecContext* ctx; AVFormatContext* fmt; @@ -1127,6 +1128,7 @@ public: , is_running(false) , is_finished(false) , just_started(false) + , just_finished(false) , ctx(nullptr) , fmt(nullptr) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index ee799261b7..377ebf22dc 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -71,7 +71,7 @@ u32 dmuxOpen(Demuxer* data) break; } - if (dmux.job.IsEmpty() && dmux.is_running) + if (!dmux.job.GetCountUnsafe() && dmux.is_running) { // default task (demuxing) (if there is no other work) be_t code; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 7a1a42d02a..9a7471f63d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -119,6 +119,15 @@ struct CellGameContentSize be_t sysSizeKB; }; +struct CellGameSetInitParams +{ + char title[CELL_GAME_SYSP_TITLE_SIZE]; + char titleId[CELL_GAME_SYSP_TITLEID_SIZE]; + char reserved0[2]; + char version[CELL_GAME_SYSP_VERSION_SIZE]; + char reserved1[66]; +}; + std::string contentInfo = ""; std::string usrdir = ""; @@ -293,7 +302,7 @@ int cellGameContentPermit(mem_list_ptr_t contentInfoPath, mem_list_ptr_t if (contentInfo == "" && usrdir == "") { - cellGame->Error("cellGameContentPermit(): CELL_GAME_ERROR_FAILURE (calling order is invalid)"); + cellGame->Warning("cellGameContentPermit(): CELL_GAME_ERROR_FAILURE (no permission given)"); return CELL_GAME_ERROR_FAILURE; } @@ -320,9 +329,13 @@ int cellGameDataCheckCreate(u32 version, u32 dirName_addr, u32 errDialog, u32 fu return cellGameDataCheckCreate2(version, dirName_addr, errDialog, funcStat_addr, container); } -int cellGameCreateGameData() +int cellGameCreateGameData(mem_ptr_t init, mem_list_ptr_t tmp_contentInfoPath, mem_list_ptr_t tmp_usrdirPath) { - UNIMPLEMENTED_FUNC(cellGame); + cellGame->Error("cellGameCreateGameData(init_addr=0x%x, tmp_contentInfoPath_addr=0x%x, tmp_usrdirPath_addr=0x%x)", + init.GetAddr(), tmp_contentInfoPath.GetAddr(), tmp_usrdirPath.GetAddr()); + + // TODO: create temporary game directory, set initial PARAM.SFO parameters + // cellGameContentPermit should then move files in non-temporary location and return their non-temporary displacement return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 6d22b47da8..f91232d0c4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -709,10 +709,11 @@ int cellGcmGetDisplayBufferByFlipIndex() return CELL_OK; } -int cellGcmGetLastFlipTime() +u64 cellGcmGetLastFlipTime() { - UNIMPLEMENTED_FUNC(cellGcmSys); - return CELL_OK; + cellGcmSys->Log("cellGcmGetLastFlipTime()"); + + return Emu.GetGSManager().GetRender().m_last_flip_time; } int cellGcmGetLastSecondVTime() diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index ebdce664a4..5f61fb8aa1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -98,9 +98,16 @@ int cellPngDecExtOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_tWarning("cellPngDecExtOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x, cbCtrlStrm_addr=0x%x, opnParam=0x%x)", mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo, cbCtrlStrm.GetAddr(), opnParam.GetAddr()); - cellPngDec->Warning("*** cbCtrlStrm->cbCtrlStrmFunc_addr=0x%x", (u32)cbCtrlStrm->cbCtrlStrmFunc_addr); + cellPngDec->Warning("*** cbCtrlStrm->cbCtrlStrmFunc_addr=0x%x", cbCtrlStrm->cbCtrlStrmFunc.GetAddr()); - return cellPngDecOpen(mainHandle, subHandle, src, openInfo); + MemoryAllocator streamInfo; + MemoryAllocator streamParam; + + int res = cellPngDecOpen(mainHandle, subHandle, src, openInfo); + + if (!res) cbCtrlStrm->cbCtrlStrmFunc(streamInfo.GetAddr(), streamParam.GetAddr(), cbCtrlStrm->cbCtrlStrmArg); + + return res; } int cellPngDecClose(u32 mainHandle, u32 subHandle) @@ -316,7 +323,7 @@ int cellPngDecExtDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, cons cellPngDec->Warning("cellPngDecExtDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x, cbCtrlDisp_addr=0x%x, dispParam=0x%x", mainHandle, subHandle, data.GetAddr(), dataCtrlParam.GetAddr(), dataOutInfo.GetAddr(), cbCtrlDisp.GetAddr(), dispParam.GetAddr()); - cellPngDec->Warning("*** cbCtrlDisp->cbCtrlDispFunc_addr=0x%x", (u32)scbCtrlDisp->cbCtrlDispFunc_addr); + if (cbCtrlDisp.GetAddr()) cellPngDec->Warning("*** cbCtrlDisp->cbCtrlDispFunc_addr=0x%x", (u32)cbCtrlDisp->cbCtrlDispFunc_addr); return cellPngDecDecodeData(mainHandle, subHandle, data, dataCtrlParam, dataOutInfo); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.h b/rpcs3/Emu/SysCalls/Modules/cellPngDec.h index 9db3ac8bcb..b93f82ba8e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.h @@ -125,9 +125,20 @@ struct CellPngDecMainHandle be_t threadOutParam; }; +struct CellPngDecStrmInfo +{ + be_t decodedStrmSize; +}; + +struct CellPngDecStrmParam +{ + be_t strmPtr; + be_t strmSize; +}; + struct CellPngDecCbCtrlStrm { - be_t cbCtrlStrmFunc_addr; + mem_func_beptr_t strmInfo, mem_ptr_t strmParam, u32 cbCtrlStrmArg)> cbCtrlStrmFunc; be_t cbCtrlStrmArg; }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 05381883e0..c8a84b13ad 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -889,10 +889,11 @@ int cellRescGetRegisterCount() return CELL_OK; } -int cellRescGetLastFlipTime() +u64 cellRescGetLastFlipTime() { - UNIMPLEMENTED_FUNC(cellResc); - return CELL_OK; + cellResc->Log("cellRescGetLastFlipTime()"); + + return Emu.GetGSManager().GetRender().m_last_flip_time; } int cellRescSetRegisterCount() diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 29b12f10f7..c1551e842e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -31,7 +31,7 @@ int vdecRead(void* opaque, u8* buf, int buf_size) next: if (vdec.reader.size < (u32)buf_size /*&& !vdec.just_started*/) { - while (vdec.job.IsEmpty()) + while (!vdec.job.GetCountUnsafe()) { if (Emu.IsStopped()) { @@ -44,6 +44,7 @@ next: switch (vdec.job.Peek().type) { case vdecEndSeq: + case vdecClose: { buf_size = vdec.reader.size; } @@ -147,7 +148,7 @@ u32 vdecOpen(VideoDecoder* data) break; } - if (vdec.job.IsEmpty() && vdec.is_running) + if (!vdec.job.GetCountUnsafe() && vdec.is_running) { Sleep(1); continue; @@ -189,10 +190,8 @@ u32 vdecOpen(VideoDecoder* data) cb.Handle(vdec.id, CELL_VDEC_MSG_TYPE_SEQDONE, CELL_OK, vdec.cbArg); cb.Branch(true); // ???*/ - avcodec_close(vdec.ctx); - avformat_close_input(&vdec.fmt); - vdec.is_running = false; + vdec.just_finished = true; } break; @@ -244,7 +243,13 @@ u32 vdecOpen(VideoDecoder* data) } au(0); - if (vdec.just_started) // deferred initialization + if (vdec.just_started && vdec.just_finished) + { + avcodec_flush_buffers(vdec.ctx); + vdec.just_started = false; + vdec.just_finished = false; + } + else if (vdec.just_started) // deferred initialization { err = avformat_open_input(&vdec.fmt, NULL, av_find_input_format("mpeg"), NULL); if (err) @@ -285,7 +290,7 @@ u32 vdecOpen(VideoDecoder* data) av_dict_set(&opts, "refcounted_frames", "1", 0); { std::lock_guard lock(g_mutex_avcodec_open2); - // not multithread-safe + // not multithread-safe (???) err = avcodec_open2(vdec.ctx, codec, &opts); } if (err) @@ -294,8 +299,6 @@ u32 vdecOpen(VideoDecoder* data) Emu.Pause(); break; } - //vdec.ctx->flags |= CODEC_FLAG_TRUNCATED; - //vdec.ctx->flags2 |= CODEC_FLAG2_CHUNKS; vdec.just_started = false; } @@ -303,8 +306,9 @@ u32 vdecOpen(VideoDecoder* data) while (true) { - if (Emu.IsStopped()) + if (Emu.IsStopped() || vdec.job.PeekIfExist(VdecTask()).type == vdecClose) { + vdec.is_finished = true; LOG_WARNING(HLE, "vdecDecodeAu: aborted"); return; } @@ -498,7 +502,7 @@ int cellVdecClose(u32 handle) vdec->job.Push(VdecTask(vdecClose)); - while (!vdec->is_finished || !vdec->frames.IsEmpty()) + while (!vdec->is_finished) { if (Emu.IsStopped()) { @@ -674,14 +678,14 @@ int cellVdecGetPicItem(u32 handle, mem32_t picItem_ptr) return CELL_VDEC_ERROR_FATAL; } - VdecFrame& vf = vdec->frames.Peek(); - if (vdec->frames.IsEmpty()) { - Sleep(1); + Sleep(1); // hack return CELL_VDEC_ERROR_EMPTY; } + VdecFrame& vf = vdec->frames.Peek(); + AVFrame& frame = *vf.data; mem_ptr_t info(vdec->memAddr + vdec->memBias); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.h b/rpcs3/Emu/SysCalls/Modules/cellVdec.h index 7c9508d049..4731d50e3d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.h @@ -697,6 +697,7 @@ public: volatile bool is_running; volatile bool is_finished; bool just_started; + bool just_finished; AVCodecContext* ctx; AVFormatContext* fmt; @@ -735,6 +736,7 @@ public: , is_finished(false) , is_running(false) , just_started(false) + , just_finished(false) , ctx(nullptr) , vdecCb(nullptr) { From 26c77fbaa0cebc41bcbbc9d981aba4120982e52c Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 29 Jun 2014 06:07:46 +0800 Subject: [PATCH 085/499] cellResc : InitMembers , InitSurfaces and few stuffs for InitRSXContext --- rpcs3/Emu/GS/GCM.h | 12 ++ rpcs3/Emu/GS/RSXThread.cpp | 14 +++ rpcs3/Emu/GS/RSXThread.h | 27 ++++- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 143 ++++++++++++++++++++++-- 4 files changed, 181 insertions(+), 15 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 25997ac12e..68e6f1096f 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -50,6 +50,18 @@ enum CELL_GCM_LOCATION_MAIN = 1, }; +enum +{ + CELL_GCM_FREQUENCY_MODULO = 1, + CELL_GCM_FREQUENCY_DIVIDE = 0, +}; + +enum +{ + CELL_GCM_FLAT = 0x1D00, + CELL_GCM_SMOOTH = 0x1D01, +}; + // GCM Texture enum { diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index d5f92c29b2..e0b53c4d20 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -558,6 +558,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV4097_SET_DEPTH_BOUNDS_MAX: + { + m_set_depth_bounds = true; + const u32 a0 = ARGS(0); + m_depth_bounds_max = (float&)a0; + } + break; + // Viewport case NV4097_SET_VIEWPORT_VERTICAL: { @@ -1619,6 +1627,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV4097_SET_FREQUENCY_DIVIDER_OPERATION: + { + m_set_frequency_divider_operation = ARGS(0); + } + break; + case 0x000002c8: case 0x000002d0: case 0x000002d8: diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index e1068c4c55..fd016f5c3c 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -404,6 +404,9 @@ public: bool m_set_front_face; u32 m_front_face; + // Frequency divider + u32 m_set_frequency_divider_operation; + u8 m_begin_end; bool m_read_buffer; @@ -486,19 +489,27 @@ protected: void Reset() { + m_set_dither = false; m_set_color_mask = false; m_set_clip = false; - m_set_depth_func = false; - m_set_depth_bounds = false; m_set_depth_test = false; + m_set_depth_func = false; + m_set_depth_mask = false; + m_set_depth_bounds_test = false; + m_set_depth_bounds = false; m_set_viewport_horizontal = false; m_set_viewport_vertical = false; m_set_scissor_horizontal = false; m_set_scissor_vertical = false; m_set_front_polygon_mode = false; m_set_back_polygon_mode = false; + m_set_blend = false; m_set_blend_sfactor = false; m_set_blend_dfactor = false; + m_set_blend_equation = false; + m_set_blend_color = false; + m_set_stencil_test = false; + m_set_two_sided_stencil_test_enable = false; m_set_stencil_mask = false; m_set_stencil_func = false; m_set_stencil_func_ref = false; @@ -513,12 +524,11 @@ protected: m_set_back_stencil_fail = false; m_set_back_stencil_zfail = false; m_set_back_stencil_zpass = false; - m_set_blend_equation = false; - m_set_depth_mask = false; + m_set_point_sprite_control = false; m_set_point_size = false; m_set_line_width = false; + m_set_line_smooth = false; m_set_shade_mode = false; - m_set_blend_color = false; m_set_semaphore_offset = false; m_set_fog_mode = false; m_set_fog_params = false; @@ -531,16 +541,21 @@ protected: m_set_context_dma_z = false; m_set_cull_face = false; m_set_front_face = false; + m_set_alpha_test = false; m_set_alpha_func = false; m_set_alpha_ref = false; + m_set_poly_smooth = false; m_set_poly_offset_fill = false; m_set_poly_offset_line = false; m_set_poly_offset_point = false; m_set_poly_offset_mode = false; m_set_restart_index = false; - m_set_point_sprite_control = false; m_set_specular = false; m_set_line_stipple = false; + m_set_logic_op = false; + m_set_surface_format = false; + m_set_surface_clip_horizontal = false; + m_set_surface_clip_vertical = false; m_clear_surface_mask = 0; m_begin_end = 0; diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index ea9047f1b3..4d3db77a92 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -60,10 +60,12 @@ struct CCellRescInternal CellRescDsts m_rescDsts[4], *m_pRescDsts; u32 m_colorBuffersEA_addr, m_vertexArrayEA_addr, m_fragmentUcodeEA_addr; + u32 m_bufIdFront; s32 m_dstWidth, m_dstHeight, m_dstPitch; u16 m_srcWidthInterlace, m_srcHeightInterlace; u32 m_dstBufInterval, m_dstOffsets[MAX_DST_BUFFER_NUM]; s32 m_nVertex; + u32 m_bufIdFrontPrevDrop, m_bufIdPalMidPrev, m_bufIdPalMidNow; float m_ratioAdjX, m_ratioAdjY; bool m_bInitialized, m_bNewlyAdjustRatio; @@ -94,6 +96,7 @@ inline bool IsPalDrop() { return (IsPal() && s_rescInternalInstance->m_in inline bool IsPalInterpolate() { return (IsPal() && ((s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE) || (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE_30_DROP) || (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE_DROP_FLEXIBLE))); } +inline bool IsNotPalInterpolate() { return !IsPalInterpolate(); } inline int GetNumColorBuffers(){ return IsPalInterpolate() ? 6 : (IsPalDrop() ? 3 : 2); } inline bool IsInterlace() { return s_rescInternalInstance->m_initConfig.interlaceMode == CELL_RESC_INTERLACE_FILTER; } inline bool IsTextureNR() { return !IsInterlace(); } @@ -360,9 +363,81 @@ bool CheckInitConfig(mem_ptr_t initConfig) void InitMembers() { + s_rescInternalInstance->m_dstMode = (CellRescBufferMode)0; + //s_rescInternalInstance->m_interlaceElement = CELL_RESC_ELEMENT_FLOAT; + s_rescInternalInstance->m_colorBuffersEA_addr = NULL; + s_rescInternalInstance->m_vertexArrayEA_addr = NULL; + s_rescInternalInstance->m_fragmentUcodeEA_addr = NULL; + //s_rescInternalInstance->m_interlaceTableEA = NULL; + s_rescInternalInstance->m_bufIdFront = 0; + s_rescInternalInstance->m_dstWidth = 0; + s_rescInternalInstance->m_dstHeight = 0; + s_rescInternalInstance->m_dstPitch = 0; + s_rescInternalInstance->m_srcWidthInterlace = 0; + s_rescInternalInstance->m_srcHeightInterlace = 0; + s_rescInternalInstance->m_dstBufInterval = 0; + s_rescInternalInstance->m_nVertex = 0; + s_rescInternalInstance->m_ratioAdjX = 1.f; + s_rescInternalInstance->m_ratioAdjY = 1.f; + //s_rescInternalInstance->m_interlaceTableLength = 32; + s_rescInternalInstance->m_bInitialized = false; + s_rescInternalInstance->m_bNewlyAdjustRatio = false; + + //E PAL related variables + //s_rescInternalInstance->m_intrThread50 = 0; + //s_rescInternalInstance->m_lastDummyFlip = 0; + //s_rescInternalInstance->m_lastVsync60 = 0; + //s_rescInternalInstance->m_lastVsync50 = 0; + s_rescInternalInstance->m_bufIdFrontPrevDrop = 2; + s_rescInternalInstance->m_bufIdPalMidPrev = 4; + s_rescInternalInstance->m_bufIdPalMidNow = 5; + //s_rescInternalInstance->m_cgpTvalue = 0; + //s_rescInternalInstance->m_isDummyFlipped = true; + s_rescInternalInstance->m_flexRatio = 0.f; // interpolate + //s_rescInternalInstance->m_commandIdxCaF = 1; + //s_rescInternalInstance->m_rcvdCmdIdx = 0; + + //s_rescInternalInstance->m_lastV60.idx = 0; + //s_rescInternalInstance->m_lastV60.time = Util::GetSystemTime(); + //s_rescInternalInstance->m_lastV50.idx = 0; + //s_rescInternalInstance->m_lastV50.time = Util::GetSystemTime(); + + //s_rescInternalInstance->m_feedback.interval60 = 1; + + for (int i = 0; im_rescSrc[i].format = 0; + s_rescInternalInstance->m_rescSrc[i].pitch = 0; + s_rescInternalInstance->m_rescSrc[i].width = 0; + s_rescInternalInstance->m_rescSrc[i].height = 0; + s_rescInternalInstance->m_rescSrc[i].offset = 0; + } + + for (int i = 0; im_dstOffsets[i] = 0; + } + + /* + for (int i = 0; im_cgParamIndex[i] = 0xFF; + } + { + s_rescInternalInstance->m_rescDsts[0].format = CELL_RESC_SURFACE_A8R8G8B8; + s_rescInternalInstance->m_rescDsts[0].pitch = GcmSysTypePrefix::cellGcmGetTiledPitchSize(720 * 4); + s_rescInternalInstance->m_rescDsts[0].heightAlign = 8; + s_rescInternalInstance->m_rescDsts[1].format = CELL_RESC_SURFACE_A8R8G8B8; + s_rescInternalInstance->m_rescDsts[1].pitch = GcmSysTypePrefix::cellGcmGetTiledPitchSize(720 * 4); + s_rescInternalInstance->m_rescDsts[1].heightAlign = 8; + s_rescInternalInstance->m_rescDsts[2].format = CELL_RESC_SURFACE_A8R8G8B8; + s_rescInternalInstance->m_rescDsts[2].pitch = GcmSysTypePrefix::cellGcmGetTiledPitchSize(1280 * 4); + s_rescInternalInstance->m_rescDsts[2].heightAlign = 8; + s_rescInternalInstance->m_rescDsts[3].format = CELL_RESC_SURFACE_A8R8G8B8; + s_rescInternalInstance->m_rescDsts[3].pitch = GcmSysTypePrefix::cellGcmGetTiledPitchSize(1920 * 4); + s_rescInternalInstance->m_rescDsts[3].heightAlign = 8; + } + */ } -void InitContext(mem_ptr_t& cntxt) +void InitRSXContext(mem_ptr_t& cntxt) { //TODO: use cntxt GSLockCurrent lock(GS_LOCK_WAIT_FLUSH); @@ -376,14 +451,13 @@ void InitContext(mem_ptr_t& cntxt) r.m_set_cull_face = false; r.m_set_depth_bounds_test = false; r.m_set_depth_test = false; - //GcmCmdTypePrefix::cellGcmSetPolygonOffsetFillEnable(con, CELL_GCM_FALSE); + r.m_set_poly_offset_fill = false; r.m_set_stencil_test = false; r.m_set_two_sided_stencil_test_enable = false; - //GcmCmdTypePrefix::cellGcmSetPointSpriteControl(con, CELL_GCM_FALSE, 0, 0); + r.m_set_point_sprite_control = false; r.m_set_dither = true; - r.m_set_shade_mode = true; r.m_shade_mode = 0x1D01; - //GcmCmdTypePrefix::cellGcmSetFrequencyDividerOperation(con, 0); - r.m_set_specular = false; + r.m_set_shade_mode = true; r.m_shade_mode = CELL_GCM_SMOOTH; + r.m_set_frequency_divider_operation = CELL_GCM_FREQUENCY_DIVIDE; r.m_set_viewport_horizontal = r.m_set_viewport_vertical = true; r.m_viewport_x = 0; @@ -409,7 +483,7 @@ void InitContext(mem_ptr_t& cntxt) } } -void InitVertex(mem_ptr_t& cntxt) +void InitVertexArrayContext(mem_ptr_t& cntxt) { GSLockCurrent lock(GS_LOCK_WAIT_FLUSH); GSRender& r = Emu.GetGSManager().GetRender(); @@ -417,6 +491,51 @@ void InitVertex(mem_ptr_t& cntxt) //TODO } +void InitSurfaces(mem_ptr_t& cntxt) +{ + bool isMrt; + u32 dstOffset0, dstOffset1; + + if (IsNotPalInterpolate()) { + isMrt = false; + dstOffset0 = s_rescInternalInstance->m_dstOffsets[s_rescInternalInstance->m_bufIdFront]; + dstOffset1 = 0; + } + else { + isMrt = true; + dstOffset0 = s_rescInternalInstance->m_dstOffsets[s_rescInternalInstance->m_bufIdFront]; + dstOffset1 = s_rescInternalInstance->m_dstOffsets[s_rescInternalInstance->m_bufIdPalMidNow]; + } + + GSLockCurrent lock(GS_LOCK_WAIT_FLUSH); + GSRender& r = Emu.GetGSManager().GetRender(); + + r.m_surface_type = CELL_GCM_SURFACE_PITCH; + r.m_surface_antialias = CELL_GCM_SURFACE_CENTER_1; + r.m_surface_color_format = (u8)s_rescInternalInstance->m_pRescDsts->format; + r.m_surface_colour_target = (!isMrt) ? CELL_GCM_SURFACE_TARGET_0 : CELL_GCM_SURFACE_TARGET_MRT1; + //surface.colorLocation[0] = CELL_GCM_LOCATION_LOCAL; + r.m_surface_offset_a = dstOffset0; + r.m_surface_pitch_a = s_rescInternalInstance->m_dstPitch; + //surface.colorLocation[1] = CELL_GCM_LOCATION_LOCAL; + r.m_surface_offset_b = (!isMrt) ? 0 : dstOffset1; + r.m_surface_pitch_b = (!isMrt) ? 64 : s_rescInternalInstance->m_dstPitch; + //surface.colorLocation[2] = CELL_GCM_LOCATION_LOCAL; + r.m_surface_offset_c = 0; + r.m_surface_pitch_c = 64; + //surface.colorLocation[3] = CELL_GCM_LOCATION_LOCAL; + r.m_surface_offset_d = 0; + r.m_surface_pitch_d = 64; + r.m_surface_depth_format = CELL_GCM_SURFACE_Z24S8; + //surface.depthLocation = CELL_GCM_LOCATION_LOCAL; + r.m_surface_offset_z = 0; + r.m_surface_pitch_z = 64; + r.m_surface_width = s_rescInternalInstance->m_dstWidth; + r.m_surface_height = s_rescInternalInstance->m_dstHeight; + //surface.x = 0; + //surface.y = 0; +} + // Module Functions int cellRescInit(mem_ptr_t initConfig) { @@ -789,8 +908,14 @@ int cellRescSetConvertAndFlip(mem_ptr_t cntxt, s32 idx) if(!IsTextureNR()) BuildupVertexBufferUN(idx); - InitContext(cntxt); - InitVertex(cntxt); + // Init GPU internal status + InitRSXContext(cntxt); + + // Init vertex array pointers + InitVertexArrayContext(cntxt); + + // Init destination surfaces + InitSurfaces(cntxt); //TODO: ? From cf98ddf979a810cf12f82ca2329b063fc45b9f66 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 30 Jun 2014 01:08:56 +0400 Subject: [PATCH 086/499] Small fixes --- rpcs3/Emu/GS/RSXThread.h | 1 + rpcs3/Emu/SysCalls/Modules/cellAdec.h | 1 + rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 34 +++++++++++-------------- rpcs3/Emu/SysCalls/Modules/cellVdec.h | 1 + rpcs3/Gui/ConLogFrame.cpp | 2 +- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 05ef3587b8..db4f9c3563 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -151,6 +151,7 @@ public: std::mutex m_cs_main; SSemaphore m_sem_flush; SSemaphore m_sem_flip; + u64 m_last_flip_time; Callback m_flip_handler; Callback m_user_handler; u64 m_vblank_count; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.h b/rpcs3/Emu/SysCalls/Modules/cellAdec.h index 65ce820f13..108844f22c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.h @@ -1158,6 +1158,7 @@ public: ~AudioDecoder() { + // TODO: check finalization if (ctx) { for (u32 i = frames.GetCount() - 1; ~i; i--) diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 377ebf22dc..3bde3766ac 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -145,22 +145,20 @@ u32 dmuxOpen(Demuxer* data) if (esATX[ch]) { ElementaryStream& es = *esATX[ch]; - while (es.isfull()) - { - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "esATX[%d] was full, waiting aborted", ch); - return; - } - Sleep(1); - } - - if (es.hasunseen()) // hack, probably useless + if (es.isfull()) { stream = backup; + Sleep(1); continue; } + /*if (es.hasunseen()) // hack, probably useless + { + stream = backup; + Sleep(1); + continue; + }*/ + stream.skip(4); len -= 4; @@ -194,14 +192,10 @@ u32 dmuxOpen(Demuxer* data) if (esAVC[ch]) { ElementaryStream& es = *esAVC[ch]; - while (es.isfull()) + if (es.isfull()) { - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "esAVC[%d] was full, waiting aborted", ch); - return; - } Sleep(1); + continue; } DemuxerStream backup = stream; @@ -217,11 +211,12 @@ u32 dmuxOpen(Demuxer* data) if (pes.new_au && es.hasdata()) // new AU detected { - if (es.hasunseen()) // hack, probably useless + /*if (es.hasunseen()) // hack, probably useless { stream = backup; + Sleep(1); continue; - } + }*/ es.finish(stream); // callback mem_ptr_t esMsg(a128(dmux.memAddr) + (cb_add ^= 16)); @@ -242,6 +237,7 @@ u32 dmuxOpen(Demuxer* data) if (es.isfull()) { stream = backup; + Sleep(1); continue; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.h b/rpcs3/Emu/SysCalls/Modules/cellVdec.h index 4731d50e3d..7f323c94b7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.h @@ -766,6 +766,7 @@ public: ~VideoDecoder() { + // TODO: check finalization if (ctx) { for (u32 i = frames.GetCount() - 1; ~i; i--) diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index 3e5a7056a8..be7f4fc6ef 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -88,7 +88,7 @@ struct wxWriter : Log::LogListener default: break; } - llogcon->AppendText(wxString(msg.mText)); + llogcon->AppendText(fmt::FromUTF8(msg.mText)); } } if (m_log->GetLastPosition() > GUI_BUFFER_MAX_SIZE) From 347f6f20b70e5880813c5d7e29b0f201c2198066 Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 30 Jun 2014 05:32:38 +0800 Subject: [PATCH 087/499] Implement cellRescCreateInterlaceTable() --- rpcs3/Emu/GS/GCM.h | 6 + rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 178 ++++++++++++++++++++---- 2 files changed, 157 insertions(+), 27 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 68e6f1096f..2d2c543914 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -56,6 +56,12 @@ enum CELL_GCM_FREQUENCY_DIVIDE = 0, }; +enum +{ + CELL_RESC_ELEMENT_HALF = 0, + CELL_RESC_ELEMENT_FLOAT = 1, +}; + enum { CELL_GCM_FLAT = 0x1D00, diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 4d3db77a92..135e43ff3d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -39,8 +39,8 @@ enum static const float PICTURE_SIZE = (1.0f), UV_DELTA_PS = (1.f / 8.f), - UV_DELTA_LB = (1.f / 6.f); - + UV_DELTA_LB = (1.f / 6.f), + XY_DELTA_LB = (1.f / 8.f); struct RescVertex_t { @@ -51,6 +51,7 @@ struct RescVertex_t // Defines #define roundup(x,a) (((x)+(a)-1)&(~((a)-1))) +#define SEVIRITY 80.f struct CCellRescInternal { @@ -58,14 +59,17 @@ struct CCellRescInternal CellRescSrc m_rescSrc[SRC_BUFFER_NUM]; u32 m_dstMode; CellRescDsts m_rescDsts[4], *m_pRescDsts; + CellRescTableElement m_interlaceElement; - u32 m_colorBuffersEA_addr, m_vertexArrayEA_addr, m_fragmentUcodeEA_addr; + u32 m_colorBuffersEA, m_vertexArrayEA, m_fragmentUcodeEA; u32 m_bufIdFront; s32 m_dstWidth, m_dstHeight, m_dstPitch; u16 m_srcWidthInterlace, m_srcHeightInterlace; u32 m_dstBufInterval, m_dstOffsets[MAX_DST_BUFFER_NUM]; s32 m_nVertex; u32 m_bufIdFrontPrevDrop, m_bufIdPalMidPrev, m_bufIdPalMidNow; + u32 m_interlaceTableEA; + int m_interlaceTableLength; float m_ratioAdjX, m_ratioAdjY; bool m_bInitialized, m_bNewlyAdjustRatio; @@ -121,7 +125,7 @@ void BuildupVertexBufferNR() float U_PS0 = UV_CENTER - U_PS; float U_PS1 = UV_CENTER + U_PS; - mem_ptr_t vv(s_rescInternalInstance->m_vertexArrayEA_addr); + mem_ptr_t vv(s_rescInternalInstance->m_vertexArrayEA); if(s_rescInternalInstance->m_dstMode == CELL_RESC_720x480 || s_rescInternalInstance->m_dstMode == CELL_RESC_720x576){ switch((u32)s_rescInternalInstance->m_initConfig.ratioMode){ @@ -197,7 +201,7 @@ void BuildupVertexBufferUN(s32 srcIdx) float U2_FS1 = s_rescInternalInstance->m_dstWidth; float V2_FS1 = s_rescInternalInstance->m_dstHeight; - mem_ptr_t vv(s_rescInternalInstance->m_vertexArrayEA_addr); + mem_ptr_t vv(s_rescInternalInstance->m_vertexArrayEA); if(s_rescInternalInstance->m_dstMode == CELL_RESC_720x480 || s_rescInternalInstance->m_dstMode == CELL_RESC_720x576){ switch((u32)s_rescInternalInstance->m_initConfig.ratioMode){ @@ -364,11 +368,11 @@ bool CheckInitConfig(mem_ptr_t initConfig) void InitMembers() { s_rescInternalInstance->m_dstMode = (CellRescBufferMode)0; - //s_rescInternalInstance->m_interlaceElement = CELL_RESC_ELEMENT_FLOAT; - s_rescInternalInstance->m_colorBuffersEA_addr = NULL; - s_rescInternalInstance->m_vertexArrayEA_addr = NULL; - s_rescInternalInstance->m_fragmentUcodeEA_addr = NULL; - //s_rescInternalInstance->m_interlaceTableEA = NULL; + s_rescInternalInstance->m_interlaceElement = CELL_RESC_ELEMENT_FLOAT; + s_rescInternalInstance->m_colorBuffersEA = NULL; + s_rescInternalInstance->m_vertexArrayEA = NULL; + s_rescInternalInstance->m_fragmentUcodeEA = NULL; + s_rescInternalInstance->m_interlaceTableEA = NULL; s_rescInternalInstance->m_bufIdFront = 0; s_rescInternalInstance->m_dstWidth = 0; s_rescInternalInstance->m_dstHeight = 0; @@ -379,7 +383,7 @@ void InitMembers() s_rescInternalInstance->m_nVertex = 0; s_rescInternalInstance->m_ratioAdjX = 1.f; s_rescInternalInstance->m_ratioAdjY = 1.f; - //s_rescInternalInstance->m_interlaceTableLength = 32; + s_rescInternalInstance->m_interlaceTableLength = 32; s_rescInternalInstance->m_bInitialized = false; s_rescInternalInstance->m_bNewlyAdjustRatio = false; @@ -437,7 +441,7 @@ void InitMembers() */ } -void InitRSXContext(mem_ptr_t& cntxt) +void SetupRsxRenderingStates(mem_ptr_t& cntxt) { //TODO: use cntxt GSLockCurrent lock(GS_LOCK_WAIT_FLUSH); @@ -483,7 +487,7 @@ void InitRSXContext(mem_ptr_t& cntxt) } } -void InitVertexArrayContext(mem_ptr_t& cntxt) +void SetupVertexArrays(mem_ptr_t& cntxt) { GSLockCurrent lock(GS_LOCK_WAIT_FLUSH); GSRender& r = Emu.GetGSManager().GetRender(); @@ -491,7 +495,7 @@ void InitVertexArrayContext(mem_ptr_t& cntxt) //TODO } -void InitSurfaces(mem_ptr_t& cntxt) +void SetupSurfaces(mem_ptr_t& cntxt) { bool isMrt; u32 dstOffset0, dstOffset1; @@ -735,7 +739,7 @@ int cellRescAdjustAspectRatio(float horizontal, float vertical) s_rescInternalInstance->m_ratioAdjX = horizontal; s_rescInternalInstance->m_ratioAdjY = vertical; - if(s_rescInternalInstance->m_vertexArrayEA_addr) + if(s_rescInternalInstance->m_vertexArrayEA) { if(IsTextureNR()) BuildupVertexBufferNR(); @@ -908,14 +912,14 @@ int cellRescSetConvertAndFlip(mem_ptr_t cntxt, s32 idx) if(!IsTextureNR()) BuildupVertexBufferUN(idx); - // Init GPU internal status - InitRSXContext(cntxt); + // Setup GPU internal status + SetupRsxRenderingStates(cntxt); - // Init vertex array pointers - InitVertexArrayContext(cntxt); + // Setup vertex array pointers + SetupVertexArrays(cntxt); - // Init destination surfaces - InitSurfaces(cntxt); + // Setup surface + SetupSurfaces(cntxt); //TODO: ? @@ -956,12 +960,12 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t return CELL_RESC_ERROR_BAD_ARGUMENT; } - s_rescInternalInstance->m_colorBuffersEA_addr = colorBuffers.GetAddr(); - s_rescInternalInstance->m_vertexArrayEA_addr = vertexArray.GetAddr(); - s_rescInternalInstance->m_fragmentUcodeEA_addr = fragmentShader.GetAddr(); + s_rescInternalInstance->m_colorBuffersEA = colorBuffers.GetAddr(); + s_rescInternalInstance->m_vertexArrayEA = vertexArray.GetAddr(); + s_rescInternalInstance->m_fragmentUcodeEA = fragmentShader.GetAddr(); MemoryAllocator> dstOffset; - cellGcmAddressToOffset(s_rescInternalInstance->m_colorBuffersEA_addr, dstOffset.GetAddr()); + cellGcmAddressToOffset(s_rescInternalInstance->m_colorBuffersEA, dstOffset.GetAddr()); for(int i=0; i> 23) - 127 + 15; + if (e < 0) + { + return 0; + } + else if (e > 31) + { + e = 31; + } + u32 s = bits & 0x80000000; + u32 m = bits & 0x007fffff; + + return ((s >> 16) & 0x8000) | ((e << 10) & 0x7c00) | ((m >> 13) & 0x03ff); +} + +static void blackman(float window[]) +{ + const float x0 = ((1.f * 2.f*M_PI) / 5.f) - M_PI; + const float x1 = ((2.f * 2.f*M_PI) / 5.f) - M_PI; + const float x2 = ((3.f * 2.f*M_PI) / 5.f) - M_PI; + const float x3 = ((4.f * 2.f*M_PI) / 5.f) - M_PI; + + const float a0 = 0.42f + (0.50f * cosf(x0)) + (0.08f * cosf(2.f*x0)); + const float a1 = 0.42f + (0.50f * cosf(x1)) + (0.08f * cosf(2.f*x1)); + const float a2 = 0.42f + (0.50f * cosf(x2)) + (0.08f * cosf(2.f*x2)); + const float a3 = 0.42f + (0.50f * cosf(x3)) + (0.08f * cosf(2.f*x3)); + + window[0] = ((100.f - SEVIRITY) / 100.f + SEVIRITY / 100.f*a0); + window[1] = ((100.f - SEVIRITY) / 100.f + SEVIRITY / 100.f*a1); + window[2] = ((100.f - SEVIRITY) / 100.f + SEVIRITY / 100.f*a2); + window[3] = ((100.f - SEVIRITY) / 100.f + SEVIRITY / 100.f*a3); +} + +int CreateInterlaceTable(mem32_t ea, float srcH, float dstH, CellRescTableElement depth, int length) +{ + float phi[4], transient[4], *buf32 = (float*)ea.GetAddr(); + float y_fraction; + float bandwidth = 0.5f / (srcH / dstH); + float phi_b = 2.f * M_PI * bandwidth; + float window[4]; + u16 *buf16 = (u16*)ea.GetAddr(); + + blackman(window); + + for (int i = 0; i 1E-10) ? (sinf(phi[0]) / phi[0] * window[0]) : window[0]; + transient[1] = (fabsf(phi[1]) > 1E-10) ? (sinf(phi[1]) / phi[1] * window[1]) : window[1]; + transient[2] = (fabsf(phi[2]) > 1E-10) ? (sinf(phi[2]) / phi[2] * window[2]) : window[2]; + transient[3] = (fabsf(phi[3]) > 1E-10) ? (sinf(phi[3]) / phi[3] * window[3]) : window[3]; + + float total4 = transient[0] + transient[1] + transient[2] + transient[3]; + + if (depth == CELL_RESC_ELEMENT_HALF) + { + buf16[0] = FloatToHalf(transient[0] / total4); + buf16[1] = FloatToHalf(transient[1] / total4); + buf16[2] = FloatToHalf(transient[2] / total4); + buf16[3] = FloatToHalf(transient[3] / total4); + buf16 += 4; + } + else { + buf32[0] = transient[0] / total4; + buf32[1] = transient[1] / total4; + buf32[2] = transient[2] / total4; + buf32[3] = transient[3] / total4; + buf32 += 4; + } + } return CELL_OK; } +int cellRescCreateInterlaceTable(mem32_t ea, float srcH, CellRescTableElement depth, int length) +{ + cellResc->Warning("cellRescCreateInterlaceTable(ea=0x%x, depth = %i, length = %i)", ea.GetAddr(), depth, length); + + if (!s_rescInternalInstance->m_bInitialized) + { + cellResc->Error("cellRescCreateInterlaceTable : CELL_RESC_ERROR_NOT_INITIALIZED"); + return CELL_RESC_ERROR_NOT_INITIALIZED; + } + + if ((!ea.IsGood()) || (srcH <= 0.f) || (!(depth == CELL_RESC_ELEMENT_HALF || depth == CELL_RESC_ELEMENT_FLOAT)) || (length <= 0)) + { + cellResc->Error("cellRescCreateInterlaceTable : CELL_RESC_ERROR_NOT_INITIALIZED"); + return CELL_RESC_ERROR_BAD_ARGUMENT; + } + + if (s_rescInternalInstance->m_dstHeight == 0) + { + cellResc->Error("cellRescCreateInterlaceTable : CELL_RESC_ERROR_BAD_COMBINATION"); + return CELL_RESC_ERROR_BAD_COMBINATION; + } + + float ratioModeCoefficient = (s_rescInternalInstance->m_initConfig.ratioMode != CELL_RESC_LETTERBOX) ? 1.f : (1.f - 2.f * XY_DELTA_LB); + float dstH = s_rescInternalInstance->m_dstHeight * ratioModeCoefficient * s_rescInternalInstance->m_ratioAdjY; + + if (int retValue = CreateInterlaceTable(ea, srcH, dstH, depth, length) == CELL_OK) + { + s_rescInternalInstance->m_interlaceTableEA = ea; + s_rescInternalInstance->m_interlaceElement = depth; + s_rescInternalInstance->m_interlaceTableLength = length; + return CELL_OK; + } + else + { + return retValue; + } +} + void cellResc_init() { From 0f1606fbd399d0ef6ffbaca47e289393fdb62d89 Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 30 Jun 2014 10:38:24 +0800 Subject: [PATCH 088/499] Build fix --- rpcs3/Emu/GS/GCM.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 2d2c543914..dfa2c16dac 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -56,7 +56,7 @@ enum CELL_GCM_FREQUENCY_DIVIDE = 0, }; -enum +enum CellRescTableElement { CELL_RESC_ELEMENT_HALF = 0, CELL_RESC_ELEMENT_FLOAT = 1, From 06868cb694f47dbfe00bff97f7b5ab85c0076a3e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 1 Jul 2014 02:53:29 +0400 Subject: [PATCH 089/499] cellGameDataCheckCreate2 implemented --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 235 ++++++++++----------- rpcs3/Emu/SysCalls/Modules/cellGame.h | 202 ++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 10 + rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 + 5 files changed, 325 insertions(+), 126 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellGame.h diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 9a7471f63d..43aec8a1f0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -10,124 +10,12 @@ #include "Loader/PSF.h" +#include "cellGame.h" + //void cellGame_init(); //Module cellGame(0x003e, cellGame_init); extern Module *cellGame = nullptr; -// Return Codes -enum -{ - CELL_GAME_RET_OK = 0, - CELL_GAME_RET_CANCEL = 1, - CELL_GAME_RET_NONE = 2, - CELL_GAME_ERROR_NOTFOUND = 0x8002cb04, - CELL_GAME_ERROR_BROKEN = 0x8002cb05, - CELL_GAME_ERROR_INTERNAL = 0x8002cb06, - CELL_GAME_ERROR_PARAM = 0x8002cb07, - CELL_GAME_ERROR_NOAPP = 0x8002cb08, - CELL_GAME_ERROR_ACCESS_ERROR = 0x8002cb09, - CELL_GAME_ERROR_NOSPACE = 0x8002cb20, - CELL_GAME_ERROR_NOTSUPPORTED = 0x8002cb21, - CELL_GAME_ERROR_FAILURE = 0x8002cb22, - CELL_GAME_ERROR_BUSY = 0x8002cb23, - CELL_GAME_ERROR_IN_SHUTDOWN = 0x8002cb24, - CELL_GAME_ERROR_INVALID_ID = 0x8002cb25, - CELL_GAME_ERROR_EXIST = 0x8002cb26, - CELL_GAME_ERROR_NOTPATCH = 0x8002cb27, - CELL_GAME_ERROR_INVALID_THEME_FILE = 0x8002cb28, - CELL_GAME_ERROR_BOOTPATH = 0x8002cb50, -}; - -// Definitions -enum -{ - CELL_GAME_PATH_MAX = 128, - CELL_GAME_DIRNAME_SIZE = 32, - CELL_GAME_THEMEFILENAME_SIZE = 48, - CELL_GAME_SYSP_TITLE_SIZE = 128, - CELL_GAME_SYSP_TITLEID_SIZE = 10, - CELL_GAME_SYSP_VERSION_SIZE = 6, - CELL_GAME_SYSP_APP_VER_SIZE = 6, - - CELL_GAME_GAMETYPE_DISC = 1, - CELL_GAME_GAMETYPE_HDD = 2, - - CELL_GAME_GAMETYPE_GAMEDATA = 3, - - CELL_GAME_SIZEKB_NOTCALC = -1, - - CELL_GAME_ATTRIBUTE_PATCH = 0x1, - CELL_GAME_ATTRIBUTE_APP_HOME = 0x2, - CELL_GAME_ATTRIBUTE_DEBUG = 0x4, - CELL_GAME_ATTRIBUTE_XMBBUY = 0x8, - CELL_GAME_ATTRIBUTE_COMMERCE2_BROWSER = 0x10, - CELL_GAME_ATTRIBUTE_INVITE_MESSAGE = 0x20, - CELL_GAME_ATTRIBUTE_CUSTOM_DATA_MESSAGE = 0x40, - CELL_GAME_ATTRIBUTE_WEB_BROWSER = 0x100, -}; - -//Parameter IDs of PARAM.SFO -enum -{ - //Integers - CELL_GAME_PARAMID_PARENTAL_LEVEL = 102, - CELL_GAME_PARAMID_RESOLUTION = 103, - CELL_GAME_PARAMID_SOUND_FORMAT = 104, - - //Strings - CELL_GAME_PARAMID_TITLE = 0, - CELL_GAME_PARAMID_TITLE_DEFAULT = 1, - CELL_GAME_PARAMID_TITLE_JAPANESE = 2, - CELL_GAME_PARAMID_TITLE_ENGLISH = 3, - CELL_GAME_PARAMID_TITLE_FRENCH = 4, - CELL_GAME_PARAMID_TITLE_SPANISH = 5, - CELL_GAME_PARAMID_TITLE_GERMAN = 6, - CELL_GAME_PARAMID_TITLE_ITALIAN = 7, - CELL_GAME_PARAMID_TITLE_DUTCH = 8, - CELL_GAME_PARAMID_TITLE_PORTUGUESE = 9, - CELL_GAME_PARAMID_TITLE_RUSSIAN = 10, - CELL_GAME_PARAMID_TITLE_KOREAN = 11, - CELL_GAME_PARAMID_TITLE_CHINESE_T = 12, - CELL_GAME_PARAMID_TITLE_CHINESE_S = 13, - CELL_GAME_PARAMID_TITLE_FINNISH = 14, - CELL_GAME_PARAMID_TITLE_SWEDISH = 15, - CELL_GAME_PARAMID_TITLE_DANISH = 16, - CELL_GAME_PARAMID_TITLE_NORWEGIAN = 17, - CELL_GAME_PARAMID_TITLE_POLISH = 18, - CELL_GAME_PARAMID_TITLE_PORTUGUESE_BRAZIL = 19, - CELL_GAME_PARAMID_TITLE_ENGLISH_UK = 20, - CELL_GAME_PARAMID_TITLE_ID = 100, - CELL_GAME_PARAMID_VERSION = 101, - CELL_GAME_PARAMID_APP_VER = 106, -}; - -//Error dialog types -enum -{ - CELL_GAME_ERRDIALOG_BROKEN_GAMEDATA = 0, - CELL_GAME_ERRDIALOG_BROKEN_HDDGAME = 1, - CELL_GAME_ERRDIALOG_NOSPACE = 2, - CELL_GAME_ERRDIALOG_BROKEN_EXIT_GAMEDATA = 100, - CELL_GAME_ERRDIALOG_BROKEN_EXIT_HDDGAME = 101, - CELL_GAME_ERRDIALOG_NOSPACE_EXIT = 102, -}; - -struct CellGameContentSize -{ - be_t hddFreeSizeKB; - be_t sizeKB; - be_t sysSizeKB; -}; - -struct CellGameSetInitParams -{ - char title[CELL_GAME_SYSP_TITLE_SIZE]; - char titleId[CELL_GAME_SYSP_TITLEID_SIZE]; - char reserved0[2]; - char version[CELL_GAME_SYSP_VERSION_SIZE]; - char reserved1[66]; -}; - std::string contentInfo = ""; std::string usrdir = ""; @@ -316,17 +204,117 @@ int cellGameContentPermit(mem_list_ptr_t contentInfoPath, mem_list_ptr_t return CELL_GAME_RET_OK; } -int cellGameDataCheckCreate2(u32 version, u32 dirName_addr, u32 errDialog, u32 funcStat_addr, u32 container) +int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 errDialog, + mem_func_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set)> funcStat, u32 container) { - cellGame->Error("cellGameDataCheckCreate2(version=0x%x, dirName_addr=0x%x, errDialog=0x%x, funcStat_addr=0x%x, container=%d)", - version, dirName_addr, errDialog, funcStat_addr, container); - return CELL_OK; + cellGame->Warning("cellGameDataCheckCreate2(version=0x%x, dirName_addr=0x%x, errDialog=0x%x, funcStat_addr=0x%x, container=%d)", + version, dirName.GetAddr(), errDialog, funcStat.GetAddr(), container); + + if (version != CELL_GAMEDATA_VERSION_CURRENT || !dirName.IsGood() || errDialog > 1 || !funcStat.IsGood()) + { + cellGame->Error("cellGameDataCheckCreate2(): CELL_GAMEDATA_ERROR_PARAM"); + return CELL_GAMEDATA_ERROR_PARAM; + } + + // TODO: output errors (errDialog) + + const std::string dir = "/dev_hdd0/game/" + std::string(dirName.GetString()); + + if (!Emu.GetVFS().ExistsDir(dir)) + { + cellGame->Error("cellGameDataCheckCreate2(): TODO: creating directory '%s'", dir.c_str()); + // TODO: create data + return CELL_GAMEDATA_RET_OK; + } + + vfsFile f(dir + "/PARAM.SFO"); + if (!f.IsOpened()) + { + cellGame->Error("cellGameDataCheckCreate2(): CELL_GAMEDATA_ERROR_BROKEN (cannot open PARAM.SFO)"); + return CELL_GAMEDATA_ERROR_BROKEN; + } + + PSFLoader psf(f); + if (!psf.Load(false)) + { + cellGame->Error("cellGameDataCheckCreate2(): CELL_GAMEDATA_ERROR_BROKEN (cannot read PARAM.SFO)"); + return CELL_GAMEDATA_ERROR_BROKEN; + } + + // TODO: use memory container + MemoryAllocator cbResult; + MemoryAllocator cbGet; + MemoryAllocator cbSet; + + memset(cbGet.GetPtr(), 0, sizeof(CellGameDataStatGet)); + + // TODO: Use the free space of the computer's HDD where RPCS3 is being run. + cbGet->hddFreeSizeKB = 40000000; //40 GB + + cbGet->isNewData = CELL_GAMEDATA_ISNEWDATA_NO; + strncpy_s(cbGet->contentInfoPath, dir.c_str(), _TRUNCATE); + strncpy_s(cbGet->gameDataPath, (dir + "/USRDIR").c_str(), _TRUNCATE); + + // TODO: set correct time + cbGet->st_atime = 0; + cbGet->st_ctime = 0; + cbGet->st_mtime = 0; + + // TODO: calculate data size, if necessary + cbGet->sizeKB = CELL_GAMEDATA_SIZEKB_NOTCALC; + cbGet->sysSizeKB = 0; + + cbGet->getParam.attribute = CELL_GAMEDATA_ATTR_NORMAL; + cbGet->getParam.parentalLevel = psf.GetInteger("PARENTAL_LEVEL"); + strncpy_s(cbGet->getParam.dataVersion, psf.GetString("APP_VER").c_str(), _TRUNCATE); + strncpy_s(cbGet->getParam.titleId, psf.GetString("TITLE_ID").c_str(), _TRUNCATE); + strncpy_s(cbGet->getParam.title, psf.GetString("TITLE").c_str(), _TRUNCATE); + // TODO: write lang titles + + funcStat(cbResult.GetAddr(), cbGet.GetAddr(), cbSet.GetAddr()); + + if (cbSet->setParam.GetAddr()) + { + // TODO: write PARAM.SFO from cbSet + cellGame->Error("cellGameDataCheckCreate2(): TODO: writing PARAM.SFO parameters (addr=0x%x)", cbSet->setParam.GetAddr()); + } + + switch (cbResult->result.ToBE()) + { + case se32(CELL_GAMEDATA_CBRESULT_OK_CANCEL): + // TODO: do not process game data + cellGame->Warning("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_OK_CANCEL"); + + case se32(CELL_GAMEDATA_CBRESULT_OK): + return CELL_GAMEDATA_RET_OK; + + case se32(CELL_GAMEDATA_CBRESULT_ERR_NOSPACE): // TODO: process errors, error message and needSizeKB result + cellGame->Error("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_ERR_NOSPACE"); + return CELL_GAMEDATA_ERROR_CBRESULT; + + case se32(CELL_GAMEDATA_CBRESULT_ERR_BROKEN): + cellGame->Error("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_ERR_BROKEN"); + return CELL_GAMEDATA_ERROR_CBRESULT; + + case se32(CELL_GAMEDATA_CBRESULT_ERR_NODATA): + cellGame->Error("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_ERR_NODATA"); + return CELL_GAMEDATA_ERROR_CBRESULT; + + case se32(CELL_GAMEDATA_CBRESULT_ERR_INVALID): + cellGame->Error("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_ERR_INVALID"); + return CELL_GAMEDATA_ERROR_CBRESULT; + + default: + cellGame->Error("cellGameDataCheckCreate2(): callback returned unknown error (code=0x%x)"); + return CELL_GAMEDATA_ERROR_CBRESULT; + } } -int cellGameDataCheckCreate(u32 version, u32 dirName_addr, u32 errDialog, u32 funcStat_addr, u32 container) +int cellGameDataCheckCreate(u32 version, const mem_list_ptr_t dirName, u32 errDialog, + mem_func_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set)> funcStat, u32 container) { - // probably identical - return cellGameDataCheckCreate2(version, dirName_addr, errDialog, funcStat_addr, container); + // TODO: almost identical, the only difference is that this function will always calculate the size of game data + return cellGameDataCheckCreate2(version, dirName, errDialog, funcStat, container); } int cellGameCreateGameData(mem_ptr_t init, mem_list_ptr_t tmp_contentInfoPath, mem_list_ptr_t tmp_usrdirPath) @@ -353,7 +341,6 @@ int cellGameGetParamInt(u32 id, mem32_t value) return CELL_GAME_ERROR_PARAM; // TODO: Access through cellGame***Check functions - // TODO: Locate the PARAM.SFO. The following path may be wrong. vfsFile f("/app_home/PARAM.SFO"); PSFLoader psf(f); if(!psf.Load(false)) @@ -380,7 +367,6 @@ int cellGameGetParamString(u32 id, u32 buf_addr, u32 bufsize) return CELL_GAME_ERROR_PARAM; // TODO: Access through cellGame***Check functions - // TODO: Locate the PARAM.SFO. The following path may be wrong. vfsFile f("/app_home/PARAM.SFO"); PSFLoader psf(f); if(!psf.Load(false)) @@ -498,9 +484,6 @@ void cellGame_init() cellGame->AddFunc(0x42a2e133, cellGameCreateGameData); cellGame->AddFunc(0xb367c6e3, cellGameDeleteGameData); - cellGame->AddFunc(0xe7951dee, cellGameDataCheckCreate); - cellGame->AddFunc(0xc9645c41, cellGameDataCheckCreate2); - cellGame->AddFunc(0xb7a45caf, cellGameGetParamInt); //cellGame->AddFunc(, cellGameSetParamInt); cellGame->AddFunc(0x3a5d726a, cellGameGetParamString); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.h b/rpcs3/Emu/SysCalls/Modules/cellGame.h new file mode 100644 index 0000000000..06d214215a --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.h @@ -0,0 +1,202 @@ +#pragma once + +// Return Codes +enum +{ + CELL_GAME_RET_OK = 0, + CELL_GAME_RET_CANCEL = 1, + CELL_GAME_RET_NONE = 2, + CELL_GAME_ERROR_NOTFOUND = 0x8002cb04, + CELL_GAME_ERROR_BROKEN = 0x8002cb05, + CELL_GAME_ERROR_INTERNAL = 0x8002cb06, + CELL_GAME_ERROR_PARAM = 0x8002cb07, + CELL_GAME_ERROR_NOAPP = 0x8002cb08, + CELL_GAME_ERROR_ACCESS_ERROR = 0x8002cb09, + CELL_GAME_ERROR_NOSPACE = 0x8002cb20, + CELL_GAME_ERROR_NOTSUPPORTED = 0x8002cb21, + CELL_GAME_ERROR_FAILURE = 0x8002cb22, + CELL_GAME_ERROR_BUSY = 0x8002cb23, + CELL_GAME_ERROR_IN_SHUTDOWN = 0x8002cb24, + CELL_GAME_ERROR_INVALID_ID = 0x8002cb25, + CELL_GAME_ERROR_EXIST = 0x8002cb26, + CELL_GAME_ERROR_NOTPATCH = 0x8002cb27, + CELL_GAME_ERROR_INVALID_THEME_FILE = 0x8002cb28, + CELL_GAME_ERROR_BOOTPATH = 0x8002cb50, +}; + +// Definitions +enum +{ + CELL_GAME_PATH_MAX = 128, + CELL_GAME_DIRNAME_SIZE = 32, + CELL_GAME_THEMEFILENAME_SIZE = 48, + CELL_GAME_SYSP_LANGUAGE_NUM = 20, + CELL_GAME_SYSP_TITLE_SIZE = 128, + CELL_GAME_SYSP_TITLEID_SIZE = 10, + CELL_GAME_SYSP_VERSION_SIZE = 6, + CELL_GAME_SYSP_APP_VER_SIZE = 6, + + CELL_GAME_GAMETYPE_DISC = 1, + CELL_GAME_GAMETYPE_HDD = 2, + + CELL_GAME_GAMETYPE_GAMEDATA = 3, + + CELL_GAME_SIZEKB_NOTCALC = -1, + + CELL_GAME_ATTRIBUTE_PATCH = 0x1, + CELL_GAME_ATTRIBUTE_APP_HOME = 0x2, + CELL_GAME_ATTRIBUTE_DEBUG = 0x4, + CELL_GAME_ATTRIBUTE_XMBBUY = 0x8, + CELL_GAME_ATTRIBUTE_COMMERCE2_BROWSER = 0x10, + CELL_GAME_ATTRIBUTE_INVITE_MESSAGE = 0x20, + CELL_GAME_ATTRIBUTE_CUSTOM_DATA_MESSAGE = 0x40, + CELL_GAME_ATTRIBUTE_WEB_BROWSER = 0x100, +}; + +//Parameter IDs of PARAM.SFO +enum +{ + //Integers + CELL_GAME_PARAMID_PARENTAL_LEVEL = 102, + CELL_GAME_PARAMID_RESOLUTION = 103, + CELL_GAME_PARAMID_SOUND_FORMAT = 104, + + //Strings + CELL_GAME_PARAMID_TITLE = 0, + CELL_GAME_PARAMID_TITLE_DEFAULT = 1, + CELL_GAME_PARAMID_TITLE_JAPANESE = 2, + CELL_GAME_PARAMID_TITLE_ENGLISH = 3, + CELL_GAME_PARAMID_TITLE_FRENCH = 4, + CELL_GAME_PARAMID_TITLE_SPANISH = 5, + CELL_GAME_PARAMID_TITLE_GERMAN = 6, + CELL_GAME_PARAMID_TITLE_ITALIAN = 7, + CELL_GAME_PARAMID_TITLE_DUTCH = 8, + CELL_GAME_PARAMID_TITLE_PORTUGUESE = 9, + CELL_GAME_PARAMID_TITLE_RUSSIAN = 10, + CELL_GAME_PARAMID_TITLE_KOREAN = 11, + CELL_GAME_PARAMID_TITLE_CHINESE_T = 12, + CELL_GAME_PARAMID_TITLE_CHINESE_S = 13, + CELL_GAME_PARAMID_TITLE_FINNISH = 14, + CELL_GAME_PARAMID_TITLE_SWEDISH = 15, + CELL_GAME_PARAMID_TITLE_DANISH = 16, + CELL_GAME_PARAMID_TITLE_NORWEGIAN = 17, + CELL_GAME_PARAMID_TITLE_POLISH = 18, + CELL_GAME_PARAMID_TITLE_PORTUGUESE_BRAZIL = 19, + CELL_GAME_PARAMID_TITLE_ENGLISH_UK = 20, + CELL_GAME_PARAMID_TITLE_ID = 100, + CELL_GAME_PARAMID_VERSION = 101, + CELL_GAME_PARAMID_APP_VER = 106, +}; + +//Error dialog types +enum +{ + CELL_GAME_ERRDIALOG_BROKEN_GAMEDATA = 0, + CELL_GAME_ERRDIALOG_BROKEN_HDDGAME = 1, + CELL_GAME_ERRDIALOG_NOSPACE = 2, + CELL_GAME_ERRDIALOG_BROKEN_EXIT_GAMEDATA = 100, + CELL_GAME_ERRDIALOG_BROKEN_EXIT_HDDGAME = 101, + CELL_GAME_ERRDIALOG_NOSPACE_EXIT = 102, +}; + +struct CellGameContentSize +{ + be_t hddFreeSizeKB; + be_t sizeKB; + be_t sysSizeKB; +}; + +struct CellGameSetInitParams +{ + char title[CELL_GAME_SYSP_TITLE_SIZE]; + char titleId[CELL_GAME_SYSP_TITLEID_SIZE]; + char reserved0[2]; + char version[CELL_GAME_SYSP_VERSION_SIZE]; + char reserved1[66]; +}; + +struct CellGameDataCBResult +{ + be_t result; + be_t errNeedSizeKB; + be_t invalidMsg_addr; + be_t reserved; +}; + +enum // old consts +{ + CELL_GAMEDATA_CBRESULT_OK_CANCEL = 1, + CELL_GAMEDATA_CBRESULT_OK = 0, + CELL_GAMEDATA_CBRESULT_ERR_NOSPACE = -1, + CELL_GAMEDATA_CBRESULT_ERR_BROKEN = -3, + CELL_GAMEDATA_CBRESULT_ERR_NODATA = -4, + CELL_GAMEDATA_CBRESULT_ERR_INVALID = -5, + + CELL_GAMEDATA_RET_OK = 0, + CELL_GAMEDATA_RET_CANCEL = 1, + + CELL_GAMEDATA_ERROR_CBRESULT = 0x8002b601, + CELL_GAMEDATA_ERROR_ACCESS_ERROR = 0x8002b602, + CELL_GAMEDATA_ERROR_INTERNAL = 0x8002b603, + + CELL_GAMEDATA_ERROR_PARAM = 0x8002b604, + CELL_GAMEDATA_ERROR_NOSPACE = 0x8002b605, + CELL_GAMEDATA_ERROR_BROKEN = 0x8002b606, + + CELL_GAMEDATA_ERROR_FAILURE = 0x8002b607, + + CELL_GAMEDATA_ATTR_NORMAL = 0, + CELL_GAMEDATA_VERSION_CURRENT = 0, + + CELL_GAMEDATA_INVALIDMSG_MAX = 256, + CELL_GAMEDATA_PATH_MAX = 1055, + CELL_GAMEDATA_DIRNAME_SIZE = 32, + + CELL_GAMEDATA_SIZEKB_NOTCALC = -1, + + CELL_GAMEDATA_SYSP_LANGUAGE_NUM = 20, + CELL_GAMEDATA_SYSP_TITLE_SIZE = 128, + CELL_GAMEDATA_SYSP_TITLEID_SIZE = 10, + CELL_GAMEDATA_SYSP_VERSION_SIZE = 6, + + CELL_GAMEDATA_ISNEWDATA_NO = 0, + CELL_GAMEDATA_ISNEWDATA_YES = 1, + + CELL_GAMEDATA_ERRDIALOG_NONE = 0, + CELL_GAMEDATA_ERRDIALOG_ALWAYS = 1, +}; + +struct CellGameDataSystemFileParam +{ + char title[CELL_GAMEDATA_SYSP_TITLE_SIZE]; + char titleLang[CELL_GAMEDATA_SYSP_LANGUAGE_NUM][CELL_GAMEDATA_SYSP_TITLE_SIZE]; + char titleId[CELL_GAMEDATA_SYSP_TITLEID_SIZE]; + char reserved0[2]; + char dataVersion[CELL_GAMEDATA_SYSP_VERSION_SIZE]; + char reserved1[2]; + be_t parentalLevel; + be_t attribute; + char reserved2[256]; +}; + +struct CellGameDataStatGet +{ + be_t hddFreeSizeKB; + be_t isNewData; + char contentInfoPath[CELL_GAMEDATA_PATH_MAX]; + char gameDataPath[CELL_GAMEDATA_PATH_MAX]; + char reserved0[2]; + be_t st_atime; + be_t st_mtime; + be_t st_ctime; + CellGameDataSystemFileParam getParam; + be_t sizeKB; + be_t sysSizeKB; + char reserved1[68]; +}; + +struct CellGameDataStatSet +{ + mem_beptr_t setParam; + be_t reserved; +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 1cc47aeb07..0ae10874d6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -10,6 +10,7 @@ #include "cellSysutil.h" #include "cellSysutil_SaveData.h" +#include "cellGame.h" #include "Loader/PSF.h" @@ -997,6 +998,12 @@ int cellWebBrowserEstimate2(mem8_ptr_t _config, mem32_ptr_t memSize) return CELL_OK; } +extern int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 errDialog, + mem_func_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set)> funcStat, u32 container); + +extern int cellGameDataCheckCreate(u32 version, const mem_list_ptr_t dirName, u32 errDialog, + mem_func_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set)> funcStat, u32 container); + void cellSysutil_init() { cellSysutil->AddFunc(0x40e895d3, cellSysutilGetSystemParamInt); @@ -1074,4 +1081,7 @@ void cellSysutil_init() //cellSysutil->AddFunc(0xe7fa820b, cellSaveDataEnableOverlay); cellSysutil->AddFunc(0x6d087930, cellWebBrowserEstimate2); + + cellSysutil->AddFunc(0xe7951dee, cellGameDataCheckCreate); + cellSysutil->AddFunc(0xc9645c41, cellGameDataCheckCreate2); } diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 02e2f292b5..fb34b8f476 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -339,6 +339,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 03b8528f49..cc85fc9f6c 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1072,5 +1072,8 @@ Utilities + + Emu\SysCalls\Modules + \ No newline at end of file From 8d1d227dac1311c42e614574204a0ab1de815717 Mon Sep 17 00:00:00 2001 From: raven02 Date: Tue, 1 Jul 2014 07:57:49 +0800 Subject: [PATCH 090/499] Cross-check and validate all NV0406E/4097/3089/3062/308A functions with gcm_method.h --- rpcs3/Emu/GS/RSXThread.cpp | 703 +++++++++++++++++++++++++++++++------ 1 file changed, 592 insertions(+), 111 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index e0b53c4d20..cc93503b06 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -193,6 +193,60 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 switch(cmd) { + // NV406E + case NV406E_SET_REFERENCE: + { + m_ctrl->ref = ARGS(0); + } + break; + + case NV406E_SET_CONTEXT_DMA_SEMAPHORE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV406E_SET_CONTEXT_DMA_SEMAPHORE: %x", ARGS(0)); + } + break; + + case NV4097_SET_SEMAPHORE_OFFSET: + case NV406E_SEMAPHORE_OFFSET: + { + m_set_semaphore_offset = true; + m_semaphore_offset = ARGS(0); + } + break; + + case NV406E_SEMAPHORE_ACQUIRE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV406E_SEMAPHORE_ACQUIRE: %x", ARGS(0)); + } + break; + + case NV406E_SEMAPHORE_RELEASE: + case NV4097_TEXTURE_READ_SEMAPHORE_RELEASE: + { + if(m_set_semaphore_offset) + { + m_set_semaphore_offset = false; + Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + m_semaphore_offset, ARGS(0)); + } + } + break; + + case NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE: + { + if(m_set_semaphore_offset) + { + m_set_semaphore_offset = false; + u32 value = ARGS(0); + value = (value & 0xff00ff00) | ((value & 0xff) << 16) | ((value >> 16) & 0xff); + + Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + m_semaphore_offset, value); + } + } + break; + + // NV4097 case NV4097_SET_FLIP: //if(cmd == 0xfeadffff) { @@ -214,16 +268,31 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_NO_OPERATION: { - LOG_WARNING(RSX, "NV4097_NO_OPERATION"); + // Nothing to do here } break; - case NV406E_SET_REFERENCE: + case NV4097_NOTIFY: { - m_ctrl->ref = ARGS(0); + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_NOTIFY: %x", ARGS(0)); } break; - + + case NV4097_WAIT_FOR_IDLE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_WAIT_FOR_IDLE: %x", ARGS(0)); + } + break; + + case NV4097_PM_TRIGGER: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_PM_TRIGGER: %x", ARGS(0)); + } + break; + // Texture case_16(NV4097_SET_TEXTURE_FORMAT, 0x20) : { @@ -431,10 +500,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_set_alpha_func = true; m_alpha_func = ARGS(0); - if (count >= 2) + if (count == 2) { m_set_alpha_ref = true; - const u32 a1 = ARGS(1); m_alpha_ref = (float&)a1; } @@ -480,6 +548,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { if (ARGS(0)) LOG_WARNING(RSX, "NV4097_SET_BLEND_ENABLE_MRT: %x", ARGS(0)); + + // TODO: + // (cmd)[1] = CELL_GCM_ENDIAN_SWAP(((mrt1) << 1) | ((mrt2) << 2) | ((mrt3) << 3)); } break; @@ -489,7 +560,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_blend_sfactor_rgb = ARGS(0) & 0xffff; m_blend_sfactor_alpha = ARGS(0) >> 16; - if (count >= 2) + if (count == 2) { m_set_blend_dfactor = true; m_blend_dfactor_rgb = ARGS(1) & 0xffff; @@ -550,7 +621,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_set_depth_bounds = true; const u32 a0 = ARGS(0); m_depth_bounds_min = (float&)a0; - if (count > 1) + + if (count == 2) { const u32 a1 = ARGS(1); m_depth_bounds_max = (float&)a1; @@ -567,21 +639,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 break; // Viewport - case NV4097_SET_VIEWPORT_VERTICAL: - { - m_set_viewport_vertical = true; - m_viewport_y = ARGS(0) & 0xffff; - m_viewport_h = ARGS(0) >> 16; - } - break; - case NV4097_SET_VIEWPORT_HORIZONTAL: { m_set_viewport_horizontal = true; m_viewport_x = ARGS(0) & 0xffff; m_viewport_w = ARGS(0) >> 16; - if(count == 2) + if (count == 2) { m_set_viewport_vertical = true; m_viewport_y = ARGS(1) & 0xffff; @@ -592,6 +656,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV4097_SET_VIEWPORT_VERTICAL: + { + m_set_viewport_vertical = true; + m_viewport_y = ARGS(0) & 0xffff; + m_viewport_h = ARGS(0) >> 16; + } + break; + case NV4097_SET_VIEWPORT_SCALE: case NV4097_SET_VIEWPORT_OFFSET: { @@ -641,7 +713,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - // Polygon + // Polygon mode/offset case NV4097_SET_FRONT_POLYGON_MODE: { m_set_front_polygon_mode = true; @@ -681,6 +753,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 const u32 a0 = ARGS(0); m_poly_offset_scale_factor = (float&)a0; + + if (count == 2) + { + const u32 a1 = ARGS(1); + m_poly_offset_bias = (float&)a1; + } } break; @@ -739,6 +817,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV4097_CLEAR_REPORT_VALUE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_CLEAR_REPORT_VALUE: %x", ARGS(0)); + } + break; + case NV4097_SET_CLEAR_RECT_HORIZONTAL: { if (ARGS(0)) @@ -766,7 +851,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 LoadVertexData(first, _count); - if(first < m_draw_array_first) m_draw_array_first = first; + if (first < m_draw_array_first) + { + m_draw_array_first = first; + } + m_draw_array_count += _count; } } @@ -890,19 +979,24 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_cur_vertex_prog = &m_vertex_progs[ARGS(0)]; m_cur_vertex_prog->data.clear(); - if(count == 2) + if (count == 2) { const u32 start = ARGS(1); - if(start) + if (start) + { LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_LOAD: start = %d", start); + } } } break; case NV4097_SET_TRANSFORM_PROGRAM_START: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_START: 0x%x", ARGS(0)); + const u32 start = ARGS(0); + if (start) + { + LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_PROGRAM_START: start = %d", start); + } } break; @@ -922,6 +1016,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_TRANSFORM_TIMEOUT: + // TODO: + // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((count) | ((registerCount) << 16)); \ + if(!m_cur_vertex_prog) { LOG_WARNING(RSX, "NV4097_SET_TRANSFORM_TIMEOUT: m_cur_vertex_prog == NULL"); @@ -964,15 +1061,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_INVALIDATE_VERTEX_CACHE_FILE: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_CACHE_FILE: %x", ARGS(0)); + // Nothing to do here } break; case NV4097_INVALIDATE_VERTEX_FILE: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_INVALIDATE_VERTEX_FILE: %x", ARGS(0)); + // Nothing to do here } break; @@ -1010,6 +1105,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE: + { + m_set_two_sided_stencil_test_enable = ARGS(0) ? true : false; + } + break; + case NV4097_SET_STENCIL_MASK: { m_set_stencil_mask = true; @@ -1021,6 +1122,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_set_stencil_func = true; m_stencil_func = ARGS(0); + if(count >= 2) { m_set_stencil_func_ref = true; @@ -1053,6 +1155,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_set_stencil_fail = true; m_stencil_fail = ARGS(0); + if(count >= 2) { m_set_stencil_zfail = true; @@ -1067,12 +1170,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - case NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE: - { - m_set_two_sided_stencil_test_enable = ARGS(0) ? true : false; - } - break; - case NV4097_SET_BACK_STENCIL_MASK: { m_set_back_stencil_mask = true; @@ -1084,6 +1181,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_set_back_stencil_func = true; m_back_stencil_func = ARGS(0); + if(count >= 2) { m_set_back_stencil_func_ref = true; @@ -1116,6 +1214,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { m_set_stencil_fail = true; m_stencil_fail = ARGS(0); + if(count >= 2) { m_set_back_stencil_zfail = true; @@ -1173,6 +1272,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_POINT_SPRITE_CONTROL: { m_set_point_sprite_control = ARGS(0) ? true : false; + + // TODO: + //(cmd)[1] = CELL_GCM_ENDIAN_SWAP((enable) | ((rmode) << 1) | (texcoordMask)); } break; @@ -1184,14 +1286,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 break; // Scissor - case NV4097_SET_SCISSOR_VERTICAL: - { - m_set_scissor_vertical = true; - m_scissor_y = ARGS(0) & 0xffff; - m_scissor_h = ARGS(0) >> 16; - } - break; - case NV4097_SET_SCISSOR_HORIZONTAL: { m_set_scissor_horizontal = true; @@ -1207,47 +1301,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - // Semaphore - case NV4097_SET_SEMAPHORE_OFFSET: - case NV406E_SEMAPHORE_OFFSET: + case NV4097_SET_SCISSOR_VERTICAL: { - m_set_semaphore_offset = true; - m_semaphore_offset = ARGS(0); + m_set_scissor_vertical = true; + m_scissor_y = ARGS(0) & 0xffff; + m_scissor_h = ARGS(0) >> 16; } break; - case NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE: - { - if(m_set_semaphore_offset) - { - m_set_semaphore_offset = false; - u32 value = ARGS(0); - value = (value & 0xff00ff00) | ((value & 0xff) << 16) | ((value >> 16) & 0xff); - - Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + m_semaphore_offset, value); - } - } - break; - - case NV406E_SEMAPHORE_RELEASE: - case NV4097_TEXTURE_READ_SEMAPHORE_RELEASE: - { - if(m_set_semaphore_offset) - { - m_set_semaphore_offset = false; - Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + m_semaphore_offset, ARGS(0)); - } - } - break; - - case NV406E_SEMAPHORE_ACQUIRE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV406E_SEMAPHORE_ACQUIRE: %x", ARGS(0)); - } - break; - - // Depth/ Color buffer usage case NV4097_SET_SURFACE_FORMAT: { @@ -1420,12 +1481,17 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - case NV4097_SET_SURFACE_CLIP_VERTICAL: + case NV4097_SET_CONTEXT_DMA_SEMAPHORE: { - const u32 a0 = ARGS(0); - m_set_surface_clip_vertical = true; - m_surface_clip_y = a0; - m_surface_clip_h = a0 >> 16; + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_SEMAPHORE: %x", ARGS(0)); + } + break; + + case NV4097_SET_CONTEXT_DMA_NOTIFIES: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); } break; @@ -1437,7 +1503,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_surface_clip_x = a0; m_surface_clip_w = a0 >> 16; - if(count >= 2) + if(count == 2) { const u32 a1 = ARGS(1); m_set_surface_clip_vertical = true; @@ -1447,15 +1513,27 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - // Antialiasing + case NV4097_SET_SURFACE_CLIP_VERTICAL: + { + const u32 a0 = ARGS(0); + m_set_surface_clip_vertical = true; + m_surface_clip_y = a0; + m_surface_clip_h = a0 >> 16; + } + break; + + // Anti aliasing case NV4097_SET_ANTI_ALIASING_CONTROL: { + // TODO: + // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((enable) | ((alphaToCoverage) << 4) | ((alphaToOne) << 8) | ((sampleMask) << 16)); \ + if (ARGS(0)) LOG_WARNING(RSX, "NV4097_SET_ANTI_ALIASING_CONTROL: %x", ARGS(0)); } break; - // Line/Polygon Smoothing + // Line/Polygon smoothing case NV4097_SET_LINE_SMOOTH_ENABLE: { m_set_line_smooth = ARGS(0) ? true : false; @@ -1477,7 +1555,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - // Line/Polygon Stipple + // Line/Polygon stipple case NV4097_SET_LINE_STIPPLE: { m_set_line_stipple = ARGS(0) ? true : false; @@ -1493,6 +1571,20 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV4097_SET_POLYGON_STIPPLE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_SET_POLYGON_STIPPLE: %x", ARGS(0)); + } + break; + + case NV4097_SET_POLYGON_STIPPLE_PATTERN: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_SET_POLYGON_STIPPLE_PATTERN: %x", ARGS(0)); + } + break; + // Zcull case NV4097_SET_ZCULL_EN: { @@ -1523,6 +1615,20 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV4097_SET_ZCULL_STATS_ENABLE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_SET_ZCULL_STATS_ENABLE: %x", ARGS(0)); + } + break; + + case NV4097_ZCULL_SYNC: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_ZCULL_SYNC: %x", ARGS(0)); + } + break; + // Reporting case NV4097_GET_REPORT: { @@ -1573,6 +1679,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 break; // Fog + case NV4097_SET_FOG_MODE: + { + m_set_fog_mode = true; + m_fog_mode = ARGS(0); + } + break; + case NV4097_SET_FOG_PARAMS: { m_set_fog_params = true; @@ -1583,18 +1696,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - case NV4097_SET_FOG_MODE: - { - m_set_fog_mode = true; - m_fog_mode = ARGS(0); - } - break; - // Zmin_max case NV4097_SET_ZMIN_MAX_CONTROL: { if (ARGS(0)) LOG_WARNING(RSX, "NV4097_SET_ZMIN_MAX_CONTROL: %x", ARGS(0)); + + // TODO: + // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((cullNearFarEnable) | ((zclampEnable) << 4) | ((cullIgnoreW)<<8)); } break; @@ -1633,6 +1742,23 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV4097_SET_RENDER_ENABLE: + { + // TODO: + // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((offset) | ((mode) << 24)); \ + + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_SET_RENDER_ENABLE: %x", ARGS(0)); + } + break; + + case NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: %x", ARGS(0)); + } + break; + case 0x000002c8: case 0x000002d0: case 0x000002d8: @@ -1642,6 +1768,21 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case 0x000002f8: break; + // NV0039 + case NV0039_SET_OBJECT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_SET_OBJECT: %x", ARGS(0)); + } + break; + + case NV0039_SET_CONTEXT_DMA_NOTIFIES: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); + } + break; + case NV0039_SET_CONTEXT_DMA_BUFFER_IN: // [E : RSXThread]: TODO: unknown/illegal method [0x00002184](0xfeed0000, 0xfeed0000) { const u32 srcContext = ARGS(0); @@ -1657,6 +1798,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV0039_SET_CONTEXT_DMA_BUFFER_OUT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_OUT: %x", ARGS(0)); + } + break; + case NV0039_OFFSET_IN: // [E : RSXThread]: TODO: unknown/illegal method [0x0000230c](0x0, 0xb00400, 0x0, 0x0, 0x384000, 0x1, 0x101, 0x0) { const u32 inOffset = ARGS(0); @@ -1696,12 +1844,247 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV0039_PITCH_IN: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_PITCH_IN: %x", ARGS(0)); + } + break; + + case NV0039_PITCH_OUT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_PITCH_OUT: %x", ARGS(0)); + } + break; + + case NV0039_LINE_LENGTH_IN: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_LINE_LENGTH_IN: %x", ARGS(0)); + } + break; + + case NV0039_LINE_COUNT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_LINE_COUNT: %x", ARGS(0)); + } + break; + + case NV0039_FORMAT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_FORMAT: %x", ARGS(0)); + } + break; + + case NV0039_BUFFER_NOTIFY: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV0039_BUFFER_NOTIFY: %x", ARGS(0)); + } + break; + + // NV3062 + case NV3062_SET_OBJECT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3062_SET_OBJECT: %x", ARGS(0)); + } + break; + + case NV3062_SET_CONTEXT_DMA_NOTIFIES: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3062_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); + } + break; + + case NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: %x", ARGS(0)); + } + break; + + case NV3062_SET_CONTEXT_DMA_IMAGE_DESTIN: + { + m_context_dma_img_dst = ARGS(0); + } + break; + + case NV3062_SET_COLOR_FORMAT: + { + m_color_format = ARGS(0); + m_color_format_src_pitch = ARGS(1); + m_color_format_dst_pitch = ARGS(1) >> 16; + } + break; + + case NV3062_SET_PITCH: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3062_SET_PITCH: %x", ARGS(0)); + } + break; + + case NV3062_SET_OFFSET_SOURCE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3062_SET_OFFSET_SOURCE: %x", ARGS(0)); + } + break; + case NV3062_SET_OFFSET_DESTIN: { m_dst_offset = ARGS(0); } break; + // NV309E + case NV309E_SET_OBJECT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV309E_SET_OBJECT: %x", ARGS(0)); + } + break; + + case NV309E_SET_CONTEXT_DMA_NOTIFIES: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV309E_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); + } + break; + + case NV309E_SET_CONTEXT_DMA_IMAGE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV309E_SET_CONTEXT_DMA_IMAGE: %x", ARGS(0)); + } + break; + + case NV309E_SET_FORMAT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV309E_SET_FORMAT: %x", ARGS(0)); + } + break; + + case NV309E_SET_OFFSET: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV309E_SET_OFFSET: %x", ARGS(0)); + } + break; + + // NV308A + case NV308A_SET_OBJECT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_OBJECT: %x", ARGS(0)); + } + break; + + case NV308A_SET_CONTEXT_DMA_NOTIFIES: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); + } + break; + + case NV308A_SET_CONTEXT_COLOR_KEY: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_CONTEXT_COLOR_KEY: %x", ARGS(0)); + } + break; + + case NV308A_SET_CONTEXT_CLIP_RECTANGLE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_CONTEXT_CLIP_RECTANGLE: %x", ARGS(0)); + } + break; + + case NV308A_SET_CONTEXT_PATTERN: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_CONTEXT_PATTERN: %x", ARGS(0)); + } + break; + + case NV308A_SET_CONTEXT_ROP: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_CONTEXT_ROP: %x", ARGS(0)); + } + break; + + case NV308A_SET_CONTEXT_BETA1: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_CONTEXT_BETA1: %x", ARGS(0)); + } + break; + + case NV308A_SET_CONTEXT_BETA4: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_CONTEXT_BETA4: %x", ARGS(0)); + } + break; + + case NV308A_SET_CONTEXT_SURFACE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: %x", ARGS(0)); + } + break; + + case NV308A_SET_COLOR_CONVERSION: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_COLOR_CONVERSION: %x", ARGS(0)); + } + break; + + case NV308A_SET_OPERATION: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_OPERATION: %x", ARGS(0)); + } + break; + + case NV308A_SET_COLOR_FORMAT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SET_COLOR_FORMAT: %x", ARGS(0)); + } + break; + + case NV308A_POINT: + { + const u32 a0 = ARGS(0); + m_point_x = a0 & 0xffff; + m_point_y = a0 >> 16; + } + break; + + case NV308A_SIZE_OUT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SIZE_OUT: %x", ARGS(0)); + } + break; + + case NV308A_SIZE_IN: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV308A_SIZE_IN: %x", ARGS(0)); + } + break; + case NV308A_COLOR: { RSXTransformConstant c; @@ -1745,19 +2128,61 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - case NV308A_POINT: + // NV3089 + case NV3089_SET_OBJECT: { - const u32 a0 = ARGS(0); - m_point_x = a0 & 0xffff; - m_point_y = a0 >> 16; + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_OBJECT: %x", ARGS(0)); } break; - case NV3062_SET_COLOR_FORMAT: + case NV3089_SET_CONTEXT_DMA_NOTIFIES: { - m_color_format = ARGS(0); - m_color_format_src_pitch = ARGS(1); - m_color_format_dst_pitch = ARGS(1) >> 16; + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); + } + break; + + case NV3089_SET_CONTEXT_DMA_IMAGE: + { + m_context_dma_img_src = ARGS(0); + } + break; + + case NV3089_SET_CONTEXT_PATTERN: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_CONTEXT_PATTERN: %x", ARGS(0)); + } + break; + + case NV3089_SET_CONTEXT_ROP: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_CONTEXT_ROP: %x", ARGS(0)); + } + break; + + case NV3089_SET_CONTEXT_BETA1: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_CONTEXT_BETA1: %x", ARGS(0)); + } + break; + + case NV3089_SET_CONTEXT_BETA4: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_CONTEXT_BETA4: %x", ARGS(0)); + } + break; + + case NV3089_SET_CONTEXT_SURFACE: + { + if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D) + { + LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0)); + } } break; @@ -1779,6 +2204,62 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + case NV3089_SET_COLOR_FORMAT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_COLOR_FORMAT: %x", ARGS(0)); + } + break; + + case NV3089_SET_OPERATION: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_SET_OPERATION: %x", ARGS(0)); + } + break; + + case NV3089_CLIP_POINT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_CLIP_POINT: %x", ARGS(0)); + } + break; + + case NV3089_CLIP_SIZE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_CLIP_SIZE: %x", ARGS(0)); + } + break; + + case NV3089_IMAGE_OUT_POINT: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_IMAGE_OUT_POINT: %x", ARGS(0)); + } + break; + + case NV3089_IMAGE_OUT_SIZE: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_IMAGE_OUT_SIZE: %x", ARGS(0)); + } + break; + + case NV3089_DS_DX: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_DS_DX: %x", ARGS(0)); + } + break; + + case NV3089_DT_DY: + { + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_DT_DY: %x", ARGS(0)); + } + break; + case NV3089_IMAGE_IN_SIZE: { u16 width = ARGS(0); @@ -1808,24 +2289,24 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - case NV3089_SET_CONTEXT_DMA_IMAGE: + case NV3089_IMAGE_IN_FORMAT: { - m_context_dma_img_src = ARGS(0); + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_IMAGE_IN_FORMAT: %x", ARGS(0)); } break; - case NV3062_SET_CONTEXT_DMA_IMAGE_DESTIN: + case NV3089_IMAGE_IN_OFFSET: { - m_context_dma_img_dst = ARGS(0); + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_IMAGE_IN_OFFSET: %x", ARGS(0)); } break; - case NV3089_SET_CONTEXT_SURFACE: + case NV3089_IMAGE_IN: { - if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D) - { - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: Unsupported surface (0x%x)", ARGS(0)); - } + if (ARGS(0)) + LOG_WARNING(RSX, "NV3089_IMAGE_IN: %x", ARGS(0)); } break; From a7bac1f084e4336ed227849b4a863aad603cb62e Mon Sep 17 00:00:00 2001 From: raven02 Date: Tue, 1 Jul 2014 02:27:45 +0800 Subject: [PATCH 091/499] cellResc : few more stuff init and cleanup --- rpcs3/Emu/GS/GCM.h | 37 ++- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 359 +++++++++++++++--------- 2 files changed, 251 insertions(+), 145 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index dfa2c16dac..8a30680a88 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -225,19 +225,16 @@ struct CellGcmSurface { u8 type; u8 antialias; - - u8 color_format; - u8 color_target; - u8 color_location[4]; - u32 color_offset[4]; - u32 color_pitch[4]; - - u8 depth_format; - u8 depth_location; - u16 pad; - u32 depth_offset; - u32 depth_pitch; - + u8 colorFormat; + u8 colorTarget; + u8 colorLocation[4]; + u32 colorOffset[4]; + u32 colorPitch[4]; + u8 depthFormat; + u8 depthLocation; + u8 _padding[2]; + u32 depthOffset; + u32 depthPitch; u16 width; u16 height; u16 x; @@ -335,14 +332,14 @@ struct GcmTileInfo enum { -// NV406E + // NV40_CHANNEL_DMA (NV406E) NV406E_SET_REFERENCE = 0x00000050, NV406E_SET_CONTEXT_DMA_SEMAPHORE = 0x00000060, NV406E_SEMAPHORE_OFFSET = 0x00000064, NV406E_SEMAPHORE_ACQUIRE = 0x00000068, NV406E_SEMAPHORE_RELEASE = 0x0000006c, -// NV4097 + // NV40_CURIE_PRIMITIVE (NV4097) NV4097_SET_OBJECT = 0x00000000, NV4097_NO_OPERATION = 0x00000100, NV4097_NOTIFY = 0x00000104, @@ -555,7 +552,7 @@ enum NV4097_SET_TRANSFORM_BRANCH_BITS = 0x00001ff8, NV4097_SET_FLIP = 0x0003fead, -// NV0039 + // NV03_MEMORY_TO_MEMORY_FORMAT (NV0039) NV0039_SET_OBJECT = 0x00002000, NV0039_SET_CONTEXT_DMA_NOTIFIES = 0x00002180, NV0039_SET_CONTEXT_DMA_BUFFER_IN = 0x00002184, @@ -569,7 +566,7 @@ enum NV0039_FORMAT = 0x00002324, NV0039_BUFFER_NOTIFY = 0x00002328, -// NV3062 + // NV30_CONTEXT_SURFACES_2D (NV3062) NV3062_SET_OBJECT = 0x00006000, NV3062_SET_CONTEXT_DMA_NOTIFIES = 0x00006180, NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE = 0x00006184, @@ -579,14 +576,14 @@ enum NV3062_SET_OFFSET_SOURCE = 0x00006308, NV3062_SET_OFFSET_DESTIN = 0x0000630C, -// NV309E + // NV30_CONTEXT_SURFACE_SWIZZLED (NV309E) NV309E_SET_OBJECT = 0x00008000, NV309E_SET_CONTEXT_DMA_NOTIFIES = 0x00008180, NV309E_SET_CONTEXT_DMA_IMAGE = 0x00008184, NV309E_SET_FORMAT = 0x00008300, NV309E_SET_OFFSET = 0x00008304, -// NV308A + // NV30_IMAGE_FROM_CPU (NV308A) NV308A_SET_OBJECT = 0x0000A000, NV308A_SET_CONTEXT_DMA_NOTIFIES = 0x0000A180, NV308A_SET_CONTEXT_COLOR_KEY = 0x0000A184, @@ -604,7 +601,7 @@ enum NV308A_SIZE_IN = 0x0000A30C, NV308A_COLOR = 0x0000A400, -// NV3089 + // NV30_SCALED_IMAGE_FROM_MEMORY (NV3089) NV3089_SET_OBJECT = 0x0000C000, NV3089_SET_CONTEXT_DMA_NOTIFIES = 0x0000C180, NV3089_SET_CONTEXT_DMA_IMAGE = 0x0000C184, diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 135e43ff3d..dc69a23dfa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -34,6 +34,7 @@ enum SRC_BUFFER_NUM = 8, MAX_DST_BUFFER_NUM = 6, + RESC_PARAM_NUM }; static const float @@ -70,10 +71,11 @@ struct CCellRescInternal u32 m_bufIdFrontPrevDrop, m_bufIdPalMidPrev, m_bufIdPalMidNow; u32 m_interlaceTableEA; int m_interlaceTableLength; - float m_ratioAdjX, m_ratioAdjY; + float m_ratioAdjX, m_ratioAdjY, m_flexRatio; bool m_bInitialized, m_bNewlyAdjustRatio; - - float m_flexRatio; + bool m_isDummyFlipped; + u8 m_cgParamIndex[RESC_PARAM_NUM]; + u64 m_commandIdxCaF, m_rcvdCmdIdx; CCellRescInternal() : m_bInitialized(false) @@ -87,10 +89,16 @@ CCellRescInternal* s_rescInternalInstance = nullptr; // Extern Functions extern int cellGcmSetFlipMode(u32 mode); extern int cellGcmSetFlipHandler(u32 handler_addr); -extern int32_t cellGcmAddressToOffset(u64 address, mem32_t offset); +extern s32 cellGcmAddressToOffset(u64 address, mem32_t offset); extern int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height); extern int cellGcmSetPrepareFlip(mem_ptr_t ctx, u32 id); extern int cellGcmSetSecondVFrequency(u32 freq); +extern u32 cellGcmGetLabelAddress(u8 index); +extern u32 cellGcmSetVBlankHandler(u32 handler); +extern u32 cellGcmSetSecondVHandler(u32 handler); +extern u32 cellGcmGetTiledPitchSize(u32 size); + +// Local Functions int cellRescGetNumColorBuffers(u32 dstMode, u32 palTemporalMode, u32 reserved); // Help Functions @@ -127,13 +135,20 @@ void BuildupVertexBufferNR() mem_ptr_t vv(s_rescInternalInstance->m_vertexArrayEA); - if(s_rescInternalInstance->m_dstMode == CELL_RESC_720x480 || s_rescInternalInstance->m_dstMode == CELL_RESC_720x576){ - switch((u32)s_rescInternalInstance->m_initConfig.ratioMode){ - case CELL_RESC_LETTERBOX: goto NR_LETTERBOX; - case CELL_RESC_PANSCAN: goto NR_PANSCAN; - default: goto NR_FULLSCREEN; + if (s_rescInternalInstance->m_dstMode == CELL_RESC_720x480 || s_rescInternalInstance->m_dstMode == CELL_RESC_720x576) + { + switch((u32)s_rescInternalInstance->m_initConfig.ratioMode) + { + case CELL_RESC_LETTERBOX: + goto NR_LETTERBOX; + case CELL_RESC_PANSCAN: + goto NR_PANSCAN; + default: + goto NR_FULLSCREEN; } - } else { + } + else + { goto NR_FULLSCREEN; } @@ -164,19 +179,26 @@ NR_PANSCAN: void BuildupVertexBufferUN(s32 srcIdx) { - if(s_rescInternalInstance->m_bNewlyAdjustRatio){ + if (s_rescInternalInstance->m_bNewlyAdjustRatio) + { s_rescInternalInstance->m_srcWidthInterlace = s_rescInternalInstance->m_rescSrc[srcIdx].width; s_rescInternalInstance->m_srcHeightInterlace = s_rescInternalInstance->m_rescSrc[srcIdx].height; s_rescInternalInstance->m_bNewlyAdjustRatio = false; - } else { - if(s_rescInternalInstance->m_srcWidthInterlace == s_rescInternalInstance->m_rescSrc[srcIdx].width - && s_rescInternalInstance->m_srcHeightInterlace == s_rescInternalInstance->m_rescSrc[srcIdx].height){ + } + else + { + if (s_rescInternalInstance->m_srcWidthInterlace == s_rescInternalInstance->m_rescSrc[srcIdx].width + && s_rescInternalInstance->m_srcHeightInterlace == s_rescInternalInstance->m_rescSrc[srcIdx].height) + { return; - } else { + } + else + { s_rescInternalInstance->m_srcWidthInterlace = s_rescInternalInstance->m_rescSrc[srcIdx].width; s_rescInternalInstance->m_srcHeightInterlace = s_rescInternalInstance->m_rescSrc[srcIdx].height; } } + const float PX_FS = PICTURE_SIZE; const float PY_FS = PICTURE_SIZE; @@ -203,13 +225,20 @@ void BuildupVertexBufferUN(s32 srcIdx) mem_ptr_t vv(s_rescInternalInstance->m_vertexArrayEA); - if(s_rescInternalInstance->m_dstMode == CELL_RESC_720x480 || s_rescInternalInstance->m_dstMode == CELL_RESC_720x576){ - switch((u32)s_rescInternalInstance->m_initConfig.ratioMode){ - case CELL_RESC_LETTERBOX: goto UN_LETTERBOX; - case CELL_RESC_PANSCAN: goto UN_PANSCAN; - default: goto UN_FULLSCREEN; + if (s_rescInternalInstance->m_dstMode == CELL_RESC_720x480 || s_rescInternalInstance->m_dstMode == CELL_RESC_720x576) + { + switch((u32)s_rescInternalInstance->m_initConfig.ratioMode) + { + case CELL_RESC_LETTERBOX: + goto UN_LETTERBOX; + case CELL_RESC_PANSCAN: + goto UN_PANSCAN; + default: + goto UN_FULLSCREEN; } - } else { + } + else + { goto UN_FULLSCREEN; } @@ -242,9 +271,12 @@ inline int InternalVersion(mem_ptr_t conf) { switch ((u32)conf->size) { - case 20: return 1; - case 24: return 2; - case 28: return 3; + case 20: + return 1; + case 24: + return 2; + case 28: + return 3; default: return -1; } } @@ -252,10 +284,14 @@ inline int InternalVersion(mem_ptr_t conf) inline int InternalVersion() { switch ((u32)s_rescInternalInstance->m_initConfig.size) { - case 20: return 1; - case 24: return 2; - case 28: return 3; - default: return -1; + case 20: + return 1; + case 24: + return 2; + case 28: + return 3; + default: + return -1; } } @@ -263,18 +299,25 @@ u8 RescBufferMode2SysutilResolutionId(u32 bufferMode) { switch (bufferMode) { - case CELL_RESC_720x576: return CELL_VIDEO_OUT_RESOLUTION_576; - case CELL_RESC_1280x720: return CELL_VIDEO_OUT_RESOLUTION_720; - case CELL_RESC_1920x1080: return CELL_VIDEO_OUT_RESOLUTION_1080; - default: return CELL_VIDEO_OUT_RESOLUTION_480; + case CELL_RESC_720x576: + return CELL_VIDEO_OUT_RESOLUTION_576; + case CELL_RESC_1280x720: + return CELL_VIDEO_OUT_RESOLUTION_720; + case CELL_RESC_1920x1080: + return CELL_VIDEO_OUT_RESOLUTION_1080; + default: + return CELL_VIDEO_OUT_RESOLUTION_480; } } u8 RescDstFormat2SysutilFormat(u32 dstFormat) { - switch (dstFormat) { - case CELL_RESC_SURFACE_F_W16Z16Y16X16: return CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_R16G16B16X16_FLOAT; - default: return CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_X8R8G8B8; + switch (dstFormat) + { + case CELL_RESC_SURFACE_F_W16Z16Y16X16: + return CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_R16G16B16X16_FLOAT; + default: + return CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_X8R8G8B8; } } @@ -282,19 +325,32 @@ u8 GcmSurfaceFormat2GcmTextureFormat(u8 surfaceFormat, u8 surfaceType) { u8 result = 0; - switch (surfaceFormat){ - case CELL_GCM_SURFACE_A8R8G8B8: result = CELL_GCM_TEXTURE_A8R8G8B8; break; - case CELL_GCM_SURFACE_F_W16Z16Y16X16: result = CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT; break; - default: return 0xFF; //Error + switch (surfaceFormat) + { + case CELL_GCM_SURFACE_A8R8G8B8: + result = CELL_GCM_TEXTURE_A8R8G8B8; + break; + case CELL_GCM_SURFACE_F_W16Z16Y16X16: + result = CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT; + break; + default: + return 0xFF; //Error } - switch (surfaceType){ - case CELL_GCM_SURFACE_PITCH: result |= CELL_GCM_TEXTURE_LN; break; - case CELL_GCM_SURFACE_SWIZZLE: result |= CELL_GCM_TEXTURE_SZ; break; - default: return 0xFF; //Error + switch (surfaceType) + { + case CELL_GCM_SURFACE_PITCH: + result |= CELL_GCM_TEXTURE_LN; + break; + case CELL_GCM_SURFACE_SWIZZLE: + result |= CELL_GCM_TEXTURE_SZ; + break; + default: + return 0xFF; //Error } result |= CELL_GCM_TEXTURE_NR; + return result; } @@ -302,22 +358,38 @@ int GetRescDestsIndex(u32 dstMode) { switch(dstMode) { - case CELL_RESC_720x480: return 0; - case CELL_RESC_720x576: return 1; - case CELL_RESC_1280x720: return 2; - case CELL_RESC_1920x1080: return 3; - default: return -1; + case CELL_RESC_720x480: + return 0; + case CELL_RESC_720x576: + return 1; + case CELL_RESC_1280x720: + return 2; + case CELL_RESC_1920x1080: + return 3; + default: + return -1; } } void GetScreenSize(u32 mode, s32 *width, s32 *height) { - switch (mode){ - case CELL_RESC_720x480: *width = 720; *height = 480; break; - case CELL_RESC_720x576: *width = 720; *height = 576; break; - case CELL_RESC_1280x720: *width = 1280; *height = 720; break; - case CELL_RESC_1920x1080: *width = 1920; *height = 1080; break; - default: *width = *height = 0; break; + switch (mode) + { + case CELL_RESC_720x480: + *width = 720; *height = 480; + break; + case CELL_RESC_720x576: + *width = 720; *height = 576; + break; + case CELL_RESC_1280x720: + *width = 1280; *height = 720; + break; + case CELL_RESC_1920x1080: + *width = 1920; *height = 1080; + break; + default: + *width = *height = 0; + break; } } @@ -331,35 +403,43 @@ int CalculateSurfaceByteSize(u32 mode, CellRescDsts *dsts) int CalculateMaxColorBuffersSize() { s32 oneBufSize, bufNum, totalBufSize, maxBufSize; - maxBufSize = 0; - for(u32 bufMode = CELL_RESC_720x480; bufMode <= CELL_RESC_1920x1080; bufMode <<= 1){ - if(s_rescInternalInstance->m_initConfig.supportModes & bufMode) { + + for (u32 bufMode = CELL_RESC_720x480; bufMode <= CELL_RESC_1920x1080; bufMode <<= 1) + { + if (s_rescInternalInstance->m_initConfig.supportModes & bufMode) + { oneBufSize = CalculateSurfaceByteSize(bufMode, &(s_rescInternalInstance->m_rescDsts[GetRescDestsIndex(bufMode)])); bufNum = cellRescGetNumColorBuffers(bufMode, s_rescInternalInstance->m_initConfig.palTemporalMode, 0); totalBufSize = oneBufSize * bufNum; maxBufSize = (maxBufSize > totalBufSize) ? maxBufSize : totalBufSize; } } + return maxBufSize; } bool CheckInitConfig(mem_ptr_t initConfig) { - if( (initConfig->resourcePolicy & ~((u32)0x3)) || - (initConfig->supportModes & 0xF) == 0 || - (initConfig->ratioMode > 2) || - (initConfig->palTemporalMode > 5) ) + if ((initConfig->resourcePolicy & ~((u32)0x3)) || (initConfig->supportModes & 0xF) == 0 || (initConfig->ratioMode > 2) || (initConfig->palTemporalMode > 5)) + { return false; - - if( InternalVersion() >= 2 ){ - if(InternalVersion() == 2 && initConfig->interlaceMode > 1) - return false; } - if( InternalVersion() >= 3 ){ - if(initConfig->interlaceMode > 4) return false; - if(initConfig->flipMode > 1) return false; + if ( InternalVersion() >= 2 ) + { + if (InternalVersion() == 2 && initConfig->interlaceMode > 1) + { + return false; + } + } + + if ( InternalVersion() >= 3 ) + { + if ((initConfig->interlaceMode > 4) || (initConfig->flipMode > 1)) + { + return false; + } } return true; @@ -396,10 +476,10 @@ void InitMembers() s_rescInternalInstance->m_bufIdPalMidPrev = 4; s_rescInternalInstance->m_bufIdPalMidNow = 5; //s_rescInternalInstance->m_cgpTvalue = 0; - //s_rescInternalInstance->m_isDummyFlipped = true; + s_rescInternalInstance->m_isDummyFlipped = true; s_rescInternalInstance->m_flexRatio = 0.f; // interpolate - //s_rescInternalInstance->m_commandIdxCaF = 1; - //s_rescInternalInstance->m_rcvdCmdIdx = 0; + s_rescInternalInstance->m_commandIdxCaF = 1; + s_rescInternalInstance->m_rcvdCmdIdx = 0; //s_rescInternalInstance->m_lastV60.idx = 0; //s_rescInternalInstance->m_lastV60.time = Util::GetSystemTime(); @@ -420,25 +500,23 @@ void InitMembers() s_rescInternalInstance->m_dstOffsets[i] = 0; } - /* for (int i = 0; im_cgParamIndex[i] = 0xFF; } { s_rescInternalInstance->m_rescDsts[0].format = CELL_RESC_SURFACE_A8R8G8B8; - s_rescInternalInstance->m_rescDsts[0].pitch = GcmSysTypePrefix::cellGcmGetTiledPitchSize(720 * 4); + s_rescInternalInstance->m_rescDsts[0].pitch = cellGcmGetTiledPitchSize(720 * 4); s_rescInternalInstance->m_rescDsts[0].heightAlign = 8; s_rescInternalInstance->m_rescDsts[1].format = CELL_RESC_SURFACE_A8R8G8B8; - s_rescInternalInstance->m_rescDsts[1].pitch = GcmSysTypePrefix::cellGcmGetTiledPitchSize(720 * 4); + s_rescInternalInstance->m_rescDsts[1].pitch = cellGcmGetTiledPitchSize(720 * 4); s_rescInternalInstance->m_rescDsts[1].heightAlign = 8; s_rescInternalInstance->m_rescDsts[2].format = CELL_RESC_SURFACE_A8R8G8B8; - s_rescInternalInstance->m_rescDsts[2].pitch = GcmSysTypePrefix::cellGcmGetTiledPitchSize(1280 * 4); + s_rescInternalInstance->m_rescDsts[2].pitch = cellGcmGetTiledPitchSize(1280 * 4); s_rescInternalInstance->m_rescDsts[2].heightAlign = 8; s_rescInternalInstance->m_rescDsts[3].format = CELL_RESC_SURFACE_A8R8G8B8; - s_rescInternalInstance->m_rescDsts[3].pitch = GcmSysTypePrefix::cellGcmGetTiledPitchSize(1920 * 4); + s_rescInternalInstance->m_rescDsts[3].pitch = cellGcmGetTiledPitchSize(1920 * 4); s_rescInternalInstance->m_rescDsts[3].heightAlign = 8; } - */ } void SetupRsxRenderingStates(mem_ptr_t& cntxt) @@ -481,7 +559,8 @@ void SetupRsxRenderingStates(mem_ptr_t& cntxt) r.m_surface_depth_format = 2; r.m_surface_colour_target = 1; - if (IsPalInterpolate()) { + if (IsPalInterpolate()) + { //MRT //GcmCmdTypePrefix::cellGcmSetColorMaskMrt(con, CELL_GCM_COLOR_MASK_MRT1_A | CELL_GCM_COLOR_MASK_MRT1_R | CELL_GCM_COLOR_MASK_MRT1_G | CELL_GCM_COLOR_MASK_MRT1_B); } @@ -500,12 +579,14 @@ void SetupSurfaces(mem_ptr_t& cntxt) bool isMrt; u32 dstOffset0, dstOffset1; - if (IsNotPalInterpolate()) { + if (IsNotPalInterpolate()) + { isMrt = false; dstOffset0 = s_rescInternalInstance->m_dstOffsets[s_rescInternalInstance->m_bufIdFront]; dstOffset1 = 0; } - else { + else + { isMrt = true; dstOffset0 = s_rescInternalInstance->m_dstOffsets[s_rescInternalInstance->m_bufIdFront]; dstOffset1 = s_rescInternalInstance->m_dstOffsets[s_rescInternalInstance->m_bufIdPalMidNow]; @@ -536,8 +617,8 @@ void SetupSurfaces(mem_ptr_t& cntxt) r.m_surface_pitch_z = 64; r.m_surface_width = s_rescInternalInstance->m_dstWidth; r.m_surface_height = s_rescInternalInstance->m_dstHeight; - //surface.x = 0; - //surface.y = 0; + r.m_surface_clip_x = 0; + r.m_surface_clip_y = 0; } // Module Functions @@ -550,6 +631,7 @@ int cellRescInit(mem_ptr_t initConfig) cellResc->Error("cellRescInit : CELL_RESC_ERROR_REINITIALIZED"); return CELL_RESC_ERROR_REINITIALIZED; } + if (!initConfig.IsGood() || InternalVersion(initConfig.GetAddr()) == -1 || !CheckInitConfig(initConfig)) { cellResc->Error("cellRescInit : CELL_RESC_ERROR_BAD_ARGUMENT"); @@ -567,7 +649,7 @@ void cellRescExit() { cellResc->Warning("cellRescExit()"); - if(!s_rescInternalInstance->m_bInitialized) + if (!s_rescInternalInstance->m_bInitialized) { cellResc->Error("cellRescExit()"); return; @@ -590,10 +672,18 @@ int cellRescVideoOutResolutionId2RescBufferMode(u32 resolutionId, mem32_t buffer switch (resolutionId) { - case CELL_VIDEO_OUT_RESOLUTION_1080: bufferMode = CELL_RESC_1920x1080; break; - case CELL_VIDEO_OUT_RESOLUTION_720: bufferMode = CELL_RESC_1280x720; break; - case CELL_VIDEO_OUT_RESOLUTION_480: bufferMode = CELL_RESC_720x480; break; - case CELL_VIDEO_OUT_RESOLUTION_576: bufferMode = CELL_RESC_720x576; break; + case CELL_VIDEO_OUT_RESOLUTION_1080: + bufferMode = CELL_RESC_1920x1080; + break; + case CELL_VIDEO_OUT_RESOLUTION_720: + bufferMode = CELL_RESC_1280x720; + break; + case CELL_VIDEO_OUT_RESOLUTION_480: + bufferMode = CELL_RESC_720x480; + break; + case CELL_VIDEO_OUT_RESOLUTION_576: + bufferMode = CELL_RESC_720x576; + break; default: cellResc->Error("cellRescVideoOutResolutionId2RescBufferMod : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; @@ -618,8 +708,7 @@ int cellRescSetDsts(u32 dstsMode, mem_ptr_t dsts) return CELL_RESC_ERROR_BAD_ARGUMENT; } - if ((dstsMode != CELL_RESC_720x480) && (dstsMode != CELL_RESC_720x576) && - (dstsMode != CELL_RESC_1280x720) && (dstsMode != CELL_RESC_1920x1080)) + if ((dstsMode != CELL_RESC_720x480) && (dstsMode != CELL_RESC_720x576) && (dstsMode != CELL_RESC_1280x720) && (dstsMode != CELL_RESC_1920x1080)) { cellResc->Error("cellRescSetDsts : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; @@ -661,7 +750,7 @@ int cellRescSetDisplayMode(u32 displayMode) return CELL_RESC_ERROR_BAD_COMBINATION; } - if(IsPal60Hsync() && s_rescInternalInstance->m_initConfig.flipMode==CELL_RESC_DISPLAY_VSYNC) + if (IsPal60Hsync() && s_rescInternalInstance->m_initConfig.flipMode==CELL_RESC_DISPLAY_VSYNC) { cellResc->Error("cellRescSetDisplayMode : CELL_RESC_ERROR_BAD_COMBINATIONT"); return CELL_RESC_ERROR_BAD_COMBINATION; @@ -695,8 +784,8 @@ int cellRescSetDisplayMode(u32 displayMode) //if (ret) return ret; //InitLabels(); cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ); - //cellGcmSetVBlankHandler(CCellRescInternal::IntrHandler50); - //cellGcmSetSecondVHandler(CCellRescInternal::IntrHandler60); + //cellGcmSetVBlankHandler(IntrHandler50); + //cellGcmSetSecondVHandler(IntrHandler60); cellGcmSetFlipHandler(0); } else if (IsPalDrop()) @@ -704,7 +793,7 @@ int cellRescSetDisplayMode(u32 displayMode) //InitLabels(); cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ); //cellGcmSetVBlankHandler(NULL); - //cellGcmSetSecondVHandler(CCellRescInternal::IntrHandler60Drop); + //cellGcmSetSecondVHandler(IntrHandler60Drop); cellGcmSetFlipHandler(0); } else if (IsPal60Hsync()) @@ -715,8 +804,8 @@ int cellRescSetDisplayMode(u32 displayMode) //if(s_applicationVBlankHandler) SetVBlankHandler(s_applicationVBlankHandler); //if(s_applicationFlipHandler) SetFlipHandler(s_applicationFlipHandler); - cellGcmSetFlipMode((s_rescInternalInstance->m_initConfig.flipMode == CELL_RESC_DISPLAY_VSYNC) - ? CELL_GCM_DISPLAY_VSYNC : CELL_GCM_DISPLAY_HSYNC); + cellGcmSetFlipMode((s_rescInternalInstance->m_initConfig.flipMode == CELL_RESC_DISPLAY_VSYNC) ? CELL_GCM_DISPLAY_VSYNC : CELL_GCM_DISPLAY_HSYNC); + return CELL_OK; } @@ -724,13 +813,13 @@ int cellRescAdjustAspectRatio(float horizontal, float vertical) { cellResc->Warning("cellRescAdjustAspectRatio(horizontal=%f, vertical=%f)", horizontal, vertical); - if(!s_rescInternalInstance->m_bInitialized) + if (!s_rescInternalInstance->m_bInitialized) { cellResc->Error("cellRescAdjustAspectRatio : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } - if((horizontal < 0.5f || 2.f < horizontal) || (vertical < 0.5f || 2.f < vertical)) + if ((horizontal < 0.5f || 2.f < horizontal) || (vertical < 0.5f || 2.f < vertical)) { cellResc->Error("cellRescAdjustAspectRatio : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; @@ -739,12 +828,16 @@ int cellRescAdjustAspectRatio(float horizontal, float vertical) s_rescInternalInstance->m_ratioAdjX = horizontal; s_rescInternalInstance->m_ratioAdjY = vertical; - if(s_rescInternalInstance->m_vertexArrayEA) + if (s_rescInternalInstance->m_vertexArrayEA) { - if(IsTextureNR()) + if (IsTextureNR()) + { BuildupVertexBufferNR(); + } else + { s_rescInternalInstance->m_bNewlyAdjustRatio = true; + } } return CELL_OK; @@ -754,13 +847,13 @@ int cellRescSetPalInterpolateDropFlexRatio(float ratio) { cellResc->Warning("cellRescSetPalInterpolateDropFlexRatio(ratio=%f)", ratio); - if(!s_rescInternalInstance->m_bInitialized) + if (!s_rescInternalInstance->m_bInitialized) { cellResc->Error("cellRescSetPalInterpolateDropFlexRatio : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_NOT_INITIALIZED; } - if(ratio < 0.f || 1.f < ratio) + if (ratio < 0.f || 1.f < ratio) { cellResc->Error("cellRescSetPalInterpolateDropFlexRatio : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; @@ -796,9 +889,20 @@ int cellRescGetBufferSize(mem32_t colorBuffers, mem32_t vertexArray, mem32_t fra fragmentUcodeSize = 0x300; } - if(colorBuffers.IsGood()) colorBuffers = colorBuffersSize; - if(vertexArray.IsGood()) vertexArray = vertexArraySize; - if(fragmentShader.IsGood()) fragmentShader = fragmentUcodeSize; + if (colorBuffers.IsGood()) + { + colorBuffers = colorBuffersSize; + } + + if (vertexArray.IsGood()) + { + vertexArray = vertexArraySize; + } + + if (fragmentShader.IsGood()) + { + fragmentShader = fragmentUcodeSize; + } return CELL_OK; } @@ -828,28 +932,35 @@ int cellRescGcmSurface2RescSrc(mem_ptr_t gcmSurface, mem_ptr_tLog("cellRescGcmSurface2RescSrc(gcmSurface_addr=0x%x, rescSrc_addr=0x%x)", gcmSurface.GetAddr(), rescSrc.GetAddr()); - if(!gcmSurface.IsGood() || !rescSrc.IsGood()) + if (!gcmSurface.IsGood() || !rescSrc.IsGood()) { cellResc->Error("cellRescGcmSurface2RescSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; } - u8 textureFormat = GcmSurfaceFormat2GcmTextureFormat(gcmSurface->color_format, gcmSurface->type); - + u8 textureFormat = GcmSurfaceFormat2GcmTextureFormat(gcmSurface->colorFormat, gcmSurface->type); s32 xW = 1, xH = 1; + switch(gcmSurface->antialias) { - case CELL_GCM_SURFACE_SQUARE_ROTATED_4: xW=xH=2; break; - case CELL_GCM_SURFACE_SQUARE_CENTERED_4: xW=xH=2; break; - case CELL_GCM_SURFACE_DIAGONAL_CENTERED_2: xW=2; break; - default: break; + case CELL_GCM_SURFACE_SQUARE_ROTATED_4: + xW=xH=2; + break; + case CELL_GCM_SURFACE_SQUARE_CENTERED_4: + xW=xH=2; + break; + case CELL_GCM_SURFACE_DIAGONAL_CENTERED_2: + xW=2; + break; + default: + break; } rescSrc->format = textureFormat; - rescSrc->pitch = re(gcmSurface->color_pitch[0]); + rescSrc->pitch = re(gcmSurface->colorPitch[0]); rescSrc->width = re(gcmSurface->width) * xW; rescSrc->height = re(gcmSurface->height) * xH; - rescSrc->offset = re(gcmSurface->color_offset[0]); + rescSrc->offset = re(gcmSurface->colorOffset[0]); return CELL_OK; } @@ -876,14 +987,11 @@ int cellRescSetSrc(s32 idx, mem_ptr_t src) return CELL_RESC_ERROR_BAD_ARGUMENT; } - cellResc->Log(" *** format=0x%x", src->format.ToLE()); cellResc->Log(" *** pitch=%d", src->pitch.ToLE()); cellResc->Log(" *** width=%d", src->width.ToLE()); cellResc->Log(" *** height=%d", src->height.ToLE()); cellResc->Log(" *** offset=0x%x", src->offset.ToLE()); - //Emu.GetGSManager().GetRender().SetData(src.offset, 800, 600); - //Emu.GetGSManager().GetRender().Draw(); s_rescInternalInstance->m_rescSrc[idx] = *src; @@ -909,8 +1017,10 @@ int cellRescSetConvertAndFlip(mem_ptr_t cntxt, s32 idx) } - if(!IsTextureNR()) + if (!IsTextureNR()) + { BuildupVertexBufferUN(idx); + } // Setup GPU internal status SetupRsxRenderingStates(cntxt); @@ -952,9 +1062,7 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t return CELL_RESC_ERROR_BAD_ARGUMENT; } - if(colorBuffers.GetAddr() % COLOR_BUFFER_ALIGNMENT || - vertexArray.GetAddr() % VERTEX_BUFFER_ALIGNMENT || - fragmentShader.GetAddr() % FRAGMENT_SHADER_ALIGNMENT) + if(colorBuffers.GetAddr() % COLOR_BUFFER_ALIGNMENT || vertexArray.GetAddr() % VERTEX_BUFFER_ALIGNMENT || fragmentShader.GetAddr() % FRAGMENT_SHADER_ALIGNMENT) { cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; @@ -967,19 +1075,21 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t MemoryAllocator> dstOffset; cellGcmAddressToOffset(s_rescInternalInstance->m_colorBuffersEA, dstOffset.GetAddr()); - for(int i=0; im_dstOffsets[i] = dstOffset->ToLE() + i * s_rescInternalInstance->m_dstBufInterval; } - for(int i=0; im_dstOffsets[i], s_rescInternalInstance->m_dstPitch, s_rescInternalInstance->m_dstWidth, s_rescInternalInstance->m_dstHeight); if (ret) return ret; } - if(IsTextureNR()) + if (IsTextureNR()) + { BuildupVertexBufferNR(); + } //TODO: ? @@ -1048,7 +1158,7 @@ u16 FloatToHalf(float val) { return 0; } - int32_t e = ((bits & 0x7f800000) >> 23) - 127 + 15; + s32 e = ((bits & 0x7f800000) >> 23) - 127 + 15; if (e < 0) { return 0; @@ -1199,6 +1309,5 @@ void cellResc_load() void cellResc_unload() { - // s_rescInternalInstance->m_bInitialized = false; delete s_rescInternalInstance; } From 2d1409c7063be5c5e7fad0564b04dbae71687b49 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 1 Jul 2014 16:21:55 +0400 Subject: [PATCH 092/499] FileExists() fixed --- rpcs3/Emu/FS/vfsLocalFile.cpp | 5 +++++ rpcs3/Emu/FS/vfsLocalFile.h | 1 + rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 6 ++++++ rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp | 8 +++++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/FS/vfsLocalFile.cpp b/rpcs3/Emu/FS/vfsLocalFile.cpp index 7eceb1e8d6..7a6e71c09c 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.cpp +++ b/rpcs3/Emu/FS/vfsLocalFile.cpp @@ -115,3 +115,8 @@ bool vfsLocalFile::IsOpened() const { return m_file.IsOpened() && vfsFileBase::IsOpened(); } + +bool vfsLocalFile::Exists(const std::string& path) +{ + return rFileExists(path); +} \ No newline at end of file diff --git a/rpcs3/Emu/FS/vfsLocalFile.h b/rpcs3/Emu/FS/vfsLocalFile.h index a7aac7b1ea..c61dd495e7 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.h +++ b/rpcs3/Emu/FS/vfsLocalFile.h @@ -12,6 +12,7 @@ public: virtual bool Open(const std::string& path, vfsOpenMode mode = vfsRead) override; virtual bool Create(const std::string& path) override; virtual bool Close() override; + virtual bool Exists(const std::string& path) override; virtual u64 GetSize() override; diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index aaff7e08b1..20dc321c69 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -30,6 +30,12 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) sceNp->Warning("sceNpDrmIsAvailable(k_licensee_addr=0x%x, drm_path_addr=0x%x)", k_licensee_addr, drm_path_addr); std::string drm_path = Memory.ReadString(drm_path_addr); + if (!Emu.GetVFS().ExistsFile(drm_path)) + { + sceNp->Warning("sceNpDrmIsAvailable(): '%s' not found", drm_path.c_str()); + return CELL_ENOENT; + } + std::string k_licensee_str; u8 k_licensee[0x10]; for(int i = 0; i < 0x10; i++) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp index 6e8a6c4e01..15fe4a6d86 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp @@ -116,6 +116,12 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) return CELL_EINVAL; } + if (!Emu.GetVFS().ExistsFile(ppath)) + { + sys_fs->Error("\"%s\" not found! flags: 0x%08x", ppath.c_str(), flags); + return CELL_ENOENT; + } + vfsFileBase* stream = Emu.GetVFS().OpenFile(ppath, o_mode); if(!stream || !stream->IsOpened()) @@ -126,7 +132,7 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) } fd = sys_fs->GetNewId(stream, IDFlag_File); - LOG_WARNING(HLE, "*** cellFsOpen(path=\"%s\"): fd = %d", path.c_str(), fd.GetValue()); + LOG_WARNING(HLE, "\"%s\" opened: fd = %d", path.c_str(), fd.GetValue()); return CELL_OK; } From 2eeab1feb00defc95ff8152a3a35e0c3b88e587d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 1 Jul 2014 19:34:25 +0400 Subject: [PATCH 093/499] Compilation fix --- Utilities/GNU.h | 8 ++++++++ rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 24 ++++++++++++------------ rpcs3/Emu/SysCalls/Modules/cellGame.h | 6 +++--- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/Utilities/GNU.h b/Utilities/GNU.h index a3a2ba48e5..a79dfbf3d0 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -6,6 +6,14 @@ #define thread_local __thread #endif +template +void strcpy_trunc(char (&dst)[size], const std::string& src) +{ + const size_t count = (src.size() >= size) ? size - 1 /* truncation */ : src.size(); + memcpy(dst, src.c_str(), count); + dst[count] = 0; +} + #if defined(__GNUG__) #include #include diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 43aec8a1f0..d247780327 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -24,7 +24,7 @@ int cellGameBootCheck(mem32_t type, mem32_t attributes, mem_ptr_tWarning("cellGameBootCheck(type_addr=0x%x, attributes_addr=0x%x, size_addr=0x%x, dirName_addr=0x%x)", type.GetAddr(), attributes.GetAddr(), size.GetAddr(), dirName.GetAddr()); - if (!type.IsGood() || !attributes.IsGood() || !size.IsGood() || !dirName.IsGood()) + if (!type.IsGood() || !attributes.IsGood() || !size.IsGood() || (dirName.GetAddr() && !dirName.IsGood())) { cellGame->Error("cellGameBootCheck(): CELL_GAME_ERROR_PARAM"); return CELL_GAME_ERROR_PARAM; @@ -56,7 +56,7 @@ int cellGameBootCheck(mem32_t type, mem32_t attributes, mem_ptr_t dirName, u32 cbGet->hddFreeSizeKB = 40000000; //40 GB cbGet->isNewData = CELL_GAMEDATA_ISNEWDATA_NO; - strncpy_s(cbGet->contentInfoPath, dir.c_str(), _TRUNCATE); - strncpy_s(cbGet->gameDataPath, (dir + "/USRDIR").c_str(), _TRUNCATE); + strcpy_trunc(cbGet->contentInfoPath, dir); + strcpy_trunc(cbGet->gameDataPath, dir + "/USRDIR"); // TODO: set correct time - cbGet->st_atime = 0; - cbGet->st_ctime = 0; - cbGet->st_mtime = 0; + cbGet->st_atime_ = 0; + cbGet->st_ctime_ = 0; + cbGet->st_mtime_ = 0; // TODO: calculate data size, if necessary cbGet->sizeKB = CELL_GAMEDATA_SIZEKB_NOTCALC; @@ -266,9 +266,9 @@ int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 cbGet->getParam.attribute = CELL_GAMEDATA_ATTR_NORMAL; cbGet->getParam.parentalLevel = psf.GetInteger("PARENTAL_LEVEL"); - strncpy_s(cbGet->getParam.dataVersion, psf.GetString("APP_VER").c_str(), _TRUNCATE); - strncpy_s(cbGet->getParam.titleId, psf.GetString("TITLE_ID").c_str(), _TRUNCATE); - strncpy_s(cbGet->getParam.title, psf.GetString("TITLE").c_str(), _TRUNCATE); + strcpy_trunc(cbGet->getParam.dataVersion, psf.GetString("APP_VER")); + strcpy_trunc(cbGet->getParam.titleId, psf.GetString("TITLE_ID")); + strcpy_trunc(cbGet->getParam.title, psf.GetString("TITLE")); // TODO: write lang titles funcStat(cbResult.GetAddr(), cbGet.GetAddr(), cbSet.GetAddr()); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.h b/rpcs3/Emu/SysCalls/Modules/cellGame.h index 06d214215a..12a0165eba 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.h +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.h @@ -186,9 +186,9 @@ struct CellGameDataStatGet char contentInfoPath[CELL_GAMEDATA_PATH_MAX]; char gameDataPath[CELL_GAMEDATA_PATH_MAX]; char reserved0[2]; - be_t st_atime; - be_t st_mtime; - be_t st_ctime; + be_t st_atime_; + be_t st_mtime_; + be_t st_ctime_; CellGameDataSystemFileParam getParam; be_t sizeKB; be_t sysSizeKB; From 5f6a2365503506269d15c7b777a97eec37b68339 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 1 Jul 2014 20:04:58 +0400 Subject: [PATCH 094/499] Compilation fix 2 --- Utilities/SQueue.h | 6 ++++-- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellVdec.h | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Utilities/SQueue.h b/Utilities/SQueue.h index 52b68979f0..9aa7e58356 100644 --- a/Utilities/SQueue.h +++ b/Utilities/SQueue.h @@ -125,12 +125,14 @@ public: return m_data[(m_pos + pos) % SQSize]; } - T& PeekIfExist(T& def, u32 pos = 0) + T& PeekIfExist(u32 pos = 0) { + static T def_value; + std::lock_guard lock(m_mutex); if (m_count <= pos) { - return def; + return def_value; } else { diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index c1551e842e..d76d846c4d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -306,7 +306,7 @@ u32 vdecOpen(VideoDecoder* data) while (true) { - if (Emu.IsStopped() || vdec.job.PeekIfExist(VdecTask()).type == vdecClose) + if (Emu.IsStopped() || vdec.job.PeekIfExist().type == vdecClose) { vdec.is_finished = true; LOG_WARNING(HLE, "vdecDecodeAu: aborted"); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.h b/rpcs3/Emu/SysCalls/Modules/cellVdec.h index 7f323c94b7..5b6a5633d2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.h @@ -647,6 +647,7 @@ struct CellVdecMpeg2Info enum VdecJobType : u32 { + vdecInvalid, vdecStartSeq, vdecEndSeq, vdecDecodeAu, @@ -675,6 +676,7 @@ struct VdecTask } VdecTask() + : type(vdecInvalid) { } }; From 7aefdd3e1fe686a645690382b88740641fb7bbcc Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 2 Jul 2014 00:01:26 +0800 Subject: [PATCH 095/499] Implement Polygon Stipple --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 9 ++++++++- rpcs3/Emu/GS/RSXThread.cpp | 9 +++++---- rpcs3/Emu/GS/RSXThread.h | 13 ++++++++++++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 9309eae93c..97344c35d4 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -892,7 +892,8 @@ void GLGSRender::ExecCMD() Enable(m_set_poly_offset_point, GL_POLYGON_OFFSET_POINT); Enable(m_set_restart_index, GL_PRIMITIVE_RESTART); Enable(m_set_line_stipple, GL_LINE_STIPPLE); - + Enable(m_set_polygon_stipple, GL_POLYGON_STIPPLE); + if(m_set_clip_plane) { Enable(m_clip_plane_0, GL_CLIP_PLANE0); @@ -1041,6 +1042,12 @@ void GLGSRender::ExecCMD() checkForGlError("glLineStipple"); } + if (m_set_polygon_stipple) + { + glPolygonStipple((const GLubyte*)m_polygon_stipple_pattern); + checkForGlError("glPolygonStipple"); + } + if(m_set_blend_equation) { glBlendEquationSeparate(m_blend_equation_rgb, m_blend_equation_alpha); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index cc93503b06..287b754d9a 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1573,15 +1573,16 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_POLYGON_STIPPLE: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_POLYGON_STIPPLE: %x", ARGS(0)); + m_set_polygon_stipple = ARGS(0) ? true : false; } break; case NV4097_SET_POLYGON_STIPPLE_PATTERN: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_POLYGON_STIPPLE_PATTERN: %x", ARGS(0)); + for (size_t i = 0; i < 32; i++) + { + m_polygon_stipple_pattern[i] = ARGS(i); + } } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index fd016f5c3c..5bb3058df1 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -210,7 +210,7 @@ public: u16 m_scissor_w; u16 m_scissor_h; - // Polygon + // Polygon mode/offset bool m_set_poly_smooth; bool m_set_poly_offset_fill; bool m_set_poly_offset_line; @@ -222,9 +222,13 @@ public: bool m_set_poly_offset_mode; float m_poly_offset_scale_factor; float m_poly_offset_bias; + + // Line/Polygon stipple bool m_set_line_stipple; u16 m_line_stipple_pattern; u16 m_line_stipple_factor; + bool m_set_polygon_stipple; + u32 m_polygon_stipple_pattern[32]; // Logic Ops bool m_set_logic_op; @@ -450,6 +454,7 @@ protected: m_set_poly_offset_point = false; m_set_restart_index = false; m_set_line_stipple = false; + m_set_polygon_stipple = false; m_clear_color_r = 0; m_clear_color_g = 0; @@ -475,6 +480,11 @@ protected: m_line_width = 1.0; m_line_stipple_pattern = 0xffff; m_line_stipple_factor = 1; + for (size_t i = 0; i < 32; i++) + { + // TODO: Check if the polygon stipple pattern is really "all ones" + m_polygon_stipple_pattern[i] = 0xFFFFFFFF; + } // Construct Textures for(int i=0; i<16; i++) @@ -552,6 +562,7 @@ protected: m_set_restart_index = false; m_set_specular = false; m_set_line_stipple = false; + m_set_polygon_stipple = false; m_set_logic_op = false; m_set_surface_format = false; m_set_surface_clip_horizontal = false; From 8736a14599e6fc702141b42e4fdd837fc4afd866 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 1 Jul 2014 21:39:03 +0400 Subject: [PATCH 096/499] Compilation fix 3 --- rpcs3/Emu/SysCalls/Modules/cellGame.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.h b/rpcs3/Emu/SysCalls/Modules/cellGame.h index 12a0165eba..963a8cfc62 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.h +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.h @@ -127,10 +127,10 @@ enum // old consts { CELL_GAMEDATA_CBRESULT_OK_CANCEL = 1, CELL_GAMEDATA_CBRESULT_OK = 0, - CELL_GAMEDATA_CBRESULT_ERR_NOSPACE = -1, - CELL_GAMEDATA_CBRESULT_ERR_BROKEN = -3, - CELL_GAMEDATA_CBRESULT_ERR_NODATA = -4, - CELL_GAMEDATA_CBRESULT_ERR_INVALID = -5, + CELL_GAMEDATA_CBRESULT_ERR_NOSPACE = 0xffffffff, + CELL_GAMEDATA_CBRESULT_ERR_BROKEN = 0xfffffffd, + CELL_GAMEDATA_CBRESULT_ERR_NODATA = 0xfffffffc, + CELL_GAMEDATA_CBRESULT_ERR_INVALID = 0xfffffffb, CELL_GAMEDATA_RET_OK = 0, CELL_GAMEDATA_RET_CANCEL = 1, From 7f5f67163b36c2b59c6d5f7d8dac25a8e4570f97 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 1 Jul 2014 21:50:57 +0400 Subject: [PATCH 097/499] Compilation fix 4 --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 14 +++++++------- rpcs3/Emu/SysCalls/Modules/cellGame.h | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index d247780327..62ed6f9fc2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -279,28 +279,28 @@ int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 cellGame->Error("cellGameDataCheckCreate2(): TODO: writing PARAM.SFO parameters (addr=0x%x)", cbSet->setParam.GetAddr()); } - switch (cbResult->result.ToBE()) + switch (cbResult->result) { - case se32(CELL_GAMEDATA_CBRESULT_OK_CANCEL): + case CELL_GAMEDATA_CBRESULT_OK_CANCEL: // TODO: do not process game data cellGame->Warning("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_OK_CANCEL"); - case se32(CELL_GAMEDATA_CBRESULT_OK): + case CELL_GAMEDATA_CBRESULT_OK: return CELL_GAMEDATA_RET_OK; - case se32(CELL_GAMEDATA_CBRESULT_ERR_NOSPACE): // TODO: process errors, error message and needSizeKB result + case CELL_GAMEDATA_CBRESULT_ERR_NOSPACE: // TODO: process errors, error message and needSizeKB result cellGame->Error("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_ERR_NOSPACE"); return CELL_GAMEDATA_ERROR_CBRESULT; - case se32(CELL_GAMEDATA_CBRESULT_ERR_BROKEN): + case CELL_GAMEDATA_CBRESULT_ERR_BROKEN: cellGame->Error("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_ERR_BROKEN"); return CELL_GAMEDATA_ERROR_CBRESULT; - case se32(CELL_GAMEDATA_CBRESULT_ERR_NODATA): + case CELL_GAMEDATA_CBRESULT_ERR_NODATA: cellGame->Error("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_ERR_NODATA"); return CELL_GAMEDATA_ERROR_CBRESULT; - case se32(CELL_GAMEDATA_CBRESULT_ERR_INVALID): + case CELL_GAMEDATA_CBRESULT_ERR_INVALID: cellGame->Error("cellGameDataCheckCreate2(): callback returned CELL_GAMEDATA_CBRESULT_ERR_INVALID"); return CELL_GAMEDATA_ERROR_CBRESULT; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.h b/rpcs3/Emu/SysCalls/Modules/cellGame.h index 963a8cfc62..12a0165eba 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.h +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.h @@ -127,10 +127,10 @@ enum // old consts { CELL_GAMEDATA_CBRESULT_OK_CANCEL = 1, CELL_GAMEDATA_CBRESULT_OK = 0, - CELL_GAMEDATA_CBRESULT_ERR_NOSPACE = 0xffffffff, - CELL_GAMEDATA_CBRESULT_ERR_BROKEN = 0xfffffffd, - CELL_GAMEDATA_CBRESULT_ERR_NODATA = 0xfffffffc, - CELL_GAMEDATA_CBRESULT_ERR_INVALID = 0xfffffffb, + CELL_GAMEDATA_CBRESULT_ERR_NOSPACE = -1, + CELL_GAMEDATA_CBRESULT_ERR_BROKEN = -3, + CELL_GAMEDATA_CBRESULT_ERR_NODATA = -4, + CELL_GAMEDATA_CBRESULT_ERR_INVALID = -5, CELL_GAMEDATA_RET_OK = 0, CELL_GAMEDATA_RET_CANCEL = 1, From fdc84796357ddaab5030198a39828486e9f2f99c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 1 Jul 2014 22:06:15 +0400 Subject: [PATCH 098/499] Compilation fix 5 --- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 0ae10874d6..b8bf9ec0a2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -381,10 +381,10 @@ int cellSysutilUnregisterCallback(int slot) return CELL_OK; } -int cellMsgDialogOpen2(u32 type, char* msgString, mem_func_ptr_t callback, mem_ptr_t userData, u32 extParam) +int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_t callback, mem_ptr_t userData, u32 extParam) { cellSysutil->Warning("cellMsgDialogOpen2(type=0x%x, msgString_addr=0x%x, callback_addr=0x%x, userData=0x%x, extParam=0x%x)", - type, (u32)msgString, callback.GetAddr(), userData.GetAddr(), extParam); + type, msgString.GetAddr(), callback.GetAddr(), userData.GetAddr(), extParam); long style = 0; @@ -406,7 +406,7 @@ int cellMsgDialogOpen2(u32 type, char* msgString, mem_func_ptr_t Date: Tue, 1 Jul 2014 22:42:05 +0400 Subject: [PATCH 099/499] Compilation fix 6 --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 62ed6f9fc2..1d0dfef4e9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -279,7 +279,7 @@ int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 cellGame->Error("cellGameDataCheckCreate2(): TODO: writing PARAM.SFO parameters (addr=0x%x)", cbSet->setParam.GetAddr()); } - switch (cbResult->result) + switch ((s32)cbResult->result) { case CELL_GAMEDATA_CBRESULT_OK_CANCEL: // TODO: do not process game data From 1eb66198c0b3a1d005ecf88dc7368708cd708b3a Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 2 Jul 2014 04:29:16 +0800 Subject: [PATCH 100/499] Indentation fix --- rpcs3/Emu/GS/GCM.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 8d60241d93..cff6b5a3d1 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -550,7 +550,7 @@ enum NV4097_SET_VERTEX_ATTRIB_INPUT_MASK = 0x00001ff0, NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK = 0x00001ff4, NV4097_SET_TRANSFORM_BRANCH_BITS = 0x00001ff8, - NV4097_SET_FLIP = 0x0003fead, + NV4097_SET_FLIP = 0x0003fead, // NV03_MEMORY_TO_MEMORY_FORMAT (NV0039) NV0039_SET_OBJECT = 0x00002000, From 3019122685848878fe91d3eafd7691a7b6ad82ef Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 2 Jul 2014 04:42:53 +0800 Subject: [PATCH 101/499] Obsolete skipPamf option --- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 4 ---- rpcs3/Gui/MainFrame.cpp | 4 ---- rpcs3/Ini.h | 4 ---- 3 files changed, 12 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 4d172a8171..c1b3b3d21e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -175,10 +175,6 @@ int cellPamfVerify(mem_ptr_t pAddr, u64 fileSize) int cellPamfReaderInitialize(mem_ptr_t pSelf, mem_ptr_t pAddr, u64 fileSize, u32 attribute) { - // Skip PAMF initialization - if (Ini.HLESkipPamf.GetValue()) - return -1; - cellPamf->Warning("cellPamfReaderInitialize(pSelf=0x%x, pAddr=0x%x, fileSize=%d, attribute=0x%x)", pSelf.GetAddr(), pAddr.GetAddr(), fileSize, attribute); diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 0b5f601013..cc7e6bbea6 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -429,7 +429,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_hle_savetty = new wxCheckBox(p_hle, wxID_ANY, "Save TTY output to file"); wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes"); wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot"); - wxCheckBox* chbox_hle_skip_pamf = new wxCheckBox(p_hle, wxID_ANY, "Skip Pamf"); //cbox_cpu_decoder->Append("DisAsm"); cbox_cpu_decoder->Append("Interpreter & DisAsm"); @@ -508,7 +507,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_hle_savetty ->SetValue(Ini.HLESaveTTY.GetValue()); chbox_hle_exitonstop ->SetValue(Ini.HLEExitOnStop.GetValue()); chbox_hle_always_start ->SetValue(Ini.HLEAlwaysStart.GetValue()); - chbox_hle_skip_pamf ->SetValue(Ini.HLESkipPamf.GetValue()); cbox_cpu_decoder ->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() - 1 : 0); cbox_spu_decoder ->SetSelection(Ini.SPUDecoderMode.GetValue() ? Ini.SPUDecoderMode.GetValue() - 1 : 0); @@ -579,7 +577,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_hle->Add(chbox_hle_savetty, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_exitonstop, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_always_start, wxSizerFlags().Border(wxALL, 5).Expand()); - s_subpanel_hle->Add(chbox_hle_skip_pamf, wxSizerFlags().Border(wxALL, 5).Expand()); // System s_subpanel_system->Add(s_round_sys_lang, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -626,7 +623,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.HLELogLvl.SetValue(cbox_hle_loglvl->GetSelection()); Ini.SysLanguage.SetValue(cbox_sys_lang->GetSelection()); Ini.HLEAlwaysStart.SetValue(chbox_hle_always_start->GetValue()); - Ini.HLESkipPamf.SetValue(chbox_hle_skip_pamf->GetValue()); Ini.Save(); } diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index 1408e4a443..b0598984cf 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -158,7 +158,6 @@ public: IniEntry HLEExitOnStop; IniEntry HLELogLvl; IniEntry HLEAlwaysStart; - IniEntry HLESkipPamf; // Language IniEntry SysLanguage; @@ -226,7 +225,6 @@ public: HLEExitOnStop.Init("HLE_HLEExitOnStop", path); HLELogLvl.Init("HLE_HLELogLvl", path); HLEAlwaysStart.Init("HLE_HLEAlwaysStart", path); - HLESkipPamf.Init("HLE_HLESkipPamf", path); // Language SysLanguage.Init("Sytem_SysLanguage", path); @@ -290,7 +288,6 @@ public: HLEExitOnStop.Load(false); HLELogLvl.Load(3); HLEAlwaysStart.Load(false); - HLESkipPamf.Load(false); // Language SysLanguage.Load(1); @@ -355,7 +352,6 @@ public: HLEExitOnStop.Save(); HLELogLvl.Save(); HLEAlwaysStart.Save(); - HLESkipPamf.Save(); // Language SysLanguage.Save(); From 82a28d3365950549b3858c8d1b20aca5d9f4b93a Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 2 Jul 2014 16:30:56 +0800 Subject: [PATCH 102/499] RSX : check packed before memcpy when writing color/depth buffers --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 47 ++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 17aed8412a..de13f8285e 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -461,8 +461,11 @@ void GLGSRender::WriteDepthBuffer() glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); checkForGlError("WriteDepthBuffer(): glReadPixels(GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + if (packed) + { + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); glBindTexture(GL_TEXTURE_2D, g_depth_tex); @@ -480,9 +483,6 @@ void GLGSRender::WriteColourBufferA() return; } - // Reset the flag - m_set_context_dma_color_a = false; - u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { @@ -497,8 +497,11 @@ void GLGSRender::WriteColourBufferA() glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColourBufferA(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + if (packed) + { + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } @@ -509,9 +512,6 @@ void GLGSRender::WriteColourBufferB() return; } - // Reset the flag - m_set_context_dma_color_b = false; - u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { @@ -526,8 +526,11 @@ void GLGSRender::WriteColourBufferB() glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColourBufferB(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + if (packed) + { + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } @@ -539,9 +542,6 @@ void GLGSRender::WriteColourBufferC() return; } - // Reset the flag - m_set_context_dma_color_c = false; - u32 address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { @@ -556,8 +556,11 @@ void GLGSRender::WriteColourBufferC() glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColourBufferC(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + if (packed) + { + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } @@ -568,9 +571,6 @@ void GLGSRender::WriteColourBufferD() return; } - // Reset the flag - m_set_context_dma_color_d = false; - u32 address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { @@ -585,8 +585,11 @@ void GLGSRender::WriteColourBufferD() glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColourBufferD(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + if (packed) + { + memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } From b7be0dc6338fd4cc2d9785116d3838269c22e3f1 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 3 Jul 2014 00:41:06 +0800 Subject: [PATCH 103/499] Obsolete option "480p downscale" and make it auto rescale whenever approriate --- rpcs3/Emu/GS/RSXThread.cpp | 59 +++++++++++++++++++++++++++----------- rpcs3/Gui/MainFrame.cpp | 4 --- rpcs3/Ini.h | 4 --- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 1a99f22f8e..4a47ead68b 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1332,34 +1332,61 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(m_gcm_buffers_addr); - m_buffer_width = re(buffers[m_gcm_current_buffer].width); - m_buffer_height = re(buffers[m_gcm_current_buffer].height); - - m_width = m_buffer_width; - m_height = m_buffer_height; + m_width = m_buffer_width = re(buffers[m_gcm_current_buffer].width); + m_height = m_buffer_height = re(buffers[m_gcm_current_buffer].height); - if (Ini.GSDownscale.GetValue() && Ini.GSResolution.GetValue() == 4) + // Rescale native 1080p to fit 720p/480p window size + if (m_buffer_width == 1920 && m_buffer_height == 1080) { - if (m_width == 1280 && m_height == 720) + switch (Ini.GSResolution.GetValue()) + { + case 2: // 1280x720 window size + m_width_scale = m_height_scale = 1.33f; + m_width = 1280; + m_height = 720; + break; + case 4: // 720x480 window size + m_width_scale = 0.75f; + m_height_scale = 0.88f; + m_width = 720; + m_height = 480; + break; + } + } + + // Rescale native 720p to fit 480p window size + if (m_buffer_width == 1280 && m_buffer_height == 720) + { + if (Ini.GSResolution.GetValue() == 4) // 720x480 window size { - // Set scale ratio for 720p m_width_scale = 1.125f; m_height_scale = 1.33f; - - // Downscale 720p to 480p m_width = 720; m_height = 480; } + } - if (m_width == 1920 && m_height == 1080) + // Rescale native 960x540 to fit 1080p/720p/480p window size + if (m_buffer_width == 960 && m_buffer_height == 540) + { + switch (Ini.GSResolution.GetValue()) { - // Set scale ratio for 1080p - m_width_scale = 0.75f; - m_height_scale = 0.88f; - - // Downscale 1080p to 480p + case 1:// 1920x1080 window size + m_width_scale = m_height_scale = 4.0f; + m_width = 1980; + m_height = 1080; + break; + case 2: // 1280x720 window size + m_width_scale = m_height_scale = 2.66f; + m_width = 1280; + m_height = 720; + break; + case 4: // 720x480 window size + m_width_scale = 1.5f; + m_height_scale = 1.77f; m_width = 720; m_height = 480; + break; } } } diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index cc7e6bbea6..648c61838e 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -420,7 +420,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_gs_log_prog = new wxCheckBox(p_graphics, wxID_ANY, "Log vertex/fragment programs"); wxCheckBox* chbox_gs_dump_depth = new wxCheckBox(p_graphics, wxID_ANY, "Write Depth Buffer"); wxCheckBox* chbox_gs_dump_color = new wxCheckBox(p_graphics, wxID_ANY, "Write Color Buffers"); - wxCheckBox* chbox_gs_downscale = new wxCheckBox(p_graphics, wxID_ANY, "480p Downscale"); wxCheckBox* chbox_gs_vsync = new wxCheckBox(p_graphics, wxID_ANY, "VSync"); wxCheckBox* chbox_audio_dump = new wxCheckBox(p_audio, wxID_ANY, "Dump to file"); wxCheckBox* chbox_audio_conv = new wxCheckBox(p_audio, wxID_ANY, "Convert to 16 bit"); @@ -498,7 +497,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_gs_log_prog ->SetValue(Ini.GSLogPrograms.GetValue()); chbox_gs_dump_depth ->SetValue(Ini.GSDumpDepthBuffer.GetValue()); chbox_gs_dump_color ->SetValue(Ini.GSDumpColorBuffers.GetValue()); - chbox_gs_downscale ->SetValue(Ini.GSDownscale.GetValue()); chbox_gs_vsync ->SetValue(Ini.GSVSyncEnable.GetValue()); chbox_audio_dump ->SetValue(Ini.AudioDumpToFile.GetValue()); chbox_audio_conv ->SetValue(Ini.AudioConvertToU16.GetValue()); @@ -558,7 +556,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_graphics->Add(chbox_gs_dump_depth, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_dump_color, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_vsync, wxSizerFlags().Border(wxALL, 5).Expand()); - s_subpanel_graphics->Add(chbox_gs_downscale, wxSizerFlags().Border(wxALL, 5).Expand()); // Input - Output s_subpanel_io->Add(s_round_io_pad_handler, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -606,7 +603,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.GSResolution.SetValue(ResolutionNumToId(cbox_gs_resolution->GetSelection() + 1)); Ini.GSAspectRatio.SetValue(cbox_gs_aspect->GetSelection() + 1); Ini.GSVSyncEnable.SetValue(chbox_gs_vsync->GetValue()); - Ini.GSDownscale.SetValue(chbox_gs_downscale->GetValue()); Ini.GSLogPrograms.SetValue(chbox_gs_log_prog->GetValue()); Ini.GSDumpDepthBuffer.SetValue(chbox_gs_dump_depth->GetValue()); Ini.GSDumpColorBuffers.SetValue(chbox_gs_dump_color->GetValue()); diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index b0598984cf..9af5e69b33 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -115,7 +115,6 @@ public: IniEntry GSLogPrograms; IniEntry GSDumpColorBuffers; IniEntry GSDumpDepthBuffer; - IniEntry GSDownscale; // Audio IniEntry AudioOutMode; @@ -182,7 +181,6 @@ public: GSLogPrograms.Init("GS_LogPrograms", path); GSDumpColorBuffers.Init("GS_DumpColorBuffers", path); GSDumpDepthBuffer.Init("GS_DumpDepthBuffer", path); - GSDownscale.Init("GS_Downscale", path); // Audio AudioOutMode.Init("Audio_AudioOutMode", path); @@ -245,7 +243,6 @@ public: GSLogPrograms.Load(false); GSDumpColorBuffers.Load(false); GSDumpDepthBuffer.Load(false); - GSDownscale.Load(false); // Audio AudioOutMode.Load(1); @@ -309,7 +306,6 @@ public: GSLogPrograms.Save(); GSDumpColorBuffers.Save(); GSDumpDepthBuffer.Save(); - GSDownscale.Save(); // Audio AudioOutMode.Save(); From 8b9a454e2f8095873f8a6b8289f04ce2846ecb54 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 3 Jul 2014 13:29:54 +0800 Subject: [PATCH 104/499] Sanity check m_alpha_func --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index de13f8285e..a5d9e75731 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -1083,7 +1083,7 @@ void GLGSRender::ExecCMD() checkForGlError("glFrontFace"); } - if(m_set_alpha_func && m_set_alpha_ref) + if(m_set_alpha_func && m_set_alpha_ref && m_alpha_func) { glAlphaFunc(m_alpha_func, m_alpha_ref); checkForGlError("glAlphaFunc"); From 4d57af9ed2458032866544c0304ad62b9ac47583 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 4 Jul 2014 03:10:30 +0800 Subject: [PATCH 105/499] cellResc : SetVBlankHandler() & SetFlipHandler() --- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 86 ++++++++++++++++++++++--- 1 file changed, 77 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index e50e98abab..e4968db259 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -76,6 +76,8 @@ struct CCellRescInternal bool m_isDummyFlipped; u8 m_cgParamIndex[RESC_PARAM_NUM]; u64 m_commandIdxCaF, m_rcvdCmdIdx; + u32 s_applicationFlipHandler; + u32 s_applicationVBlankHandler; CCellRescInternal() : m_bInitialized(false) @@ -89,13 +91,12 @@ CCellRescInternal* s_rescInternalInstance = nullptr; // Extern Functions extern int cellGcmSetFlipMode(u32 mode); extern void cellGcmSetFlipHandler(u32 handler_addr); +extern void cellGcmSetVBlankHandler(u32 handler_addr); extern int cellGcmAddressToOffset(u64 address, mem32_t offset); extern int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height); extern int cellGcmSetPrepareFlip(mem_ptr_t ctx, u32 id); extern int cellGcmSetSecondVFrequency(u32 freq); extern u32 cellGcmGetLabelAddress(u8 index); -extern void cellGcmSetVBlankHandler(u32 handler); -extern u32 cellGcmSetSecondVHandler(u32 handler); extern u32 cellGcmGetTiledPitchSize(u32 size); // Local Functions @@ -109,6 +110,10 @@ inline bool IsPalInterpolate() { return (IsPal() && ((s_rescInternalInstance->m_ || (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE_30_DROP) || (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE_DROP_FLEXIBLE))); } inline bool IsNotPalInterpolate() { return !IsPalInterpolate(); } +inline bool IsPalTemporal() { return (IsPal() && s_rescInternalInstance->m_initConfig.palTemporalMode != CELL_RESC_PAL_50); } +inline bool IsNotPalTemporal() { return !IsPalTemporal(); } +inline bool IsNotPal() { return !IsPal(); } +inline bool IsGcmFlip() { return (IsNotPal() || (IsPal() && (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_50 || s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_FOR_HSYNC)));} inline int GetNumColorBuffers(){ return IsPalInterpolate() ? 6 : (IsPalDrop() ? 3 : 2); } inline bool IsInterlace() { return s_rescInternalInstance->m_initConfig.interlaceMode == CELL_RESC_INTERLACE_FILTER; } inline bool IsTextureNR() { return !IsInterlace(); } @@ -467,6 +472,9 @@ void InitMembers() s_rescInternalInstance->m_bInitialized = false; s_rescInternalInstance->m_bNewlyAdjustRatio = false; + s_rescInternalInstance->s_applicationVBlankHandler = 0; + s_rescInternalInstance->s_applicationFlipHandler = 0; + //E PAL related variables //s_rescInternalInstance->m_intrThread50 = 0; //s_rescInternalInstance->m_lastDummyFlip = 0; @@ -655,7 +663,21 @@ void cellRescExit() return; } - // TODO: ? + if (IsPalTemporal()){ + cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_DISABLE); + cellGcmSetVBlankHandler(NULL); + //GcmSysTypePrefix::cellGcmSetSecondVHandler(NULL); + + /* + if (IsPalInterpolate()){ + int ret = ExitSystemResource(); + if (ret != CELL_OK) + { + cellResc->Error("failed to clean up system resources.. continue. 0x%x\n", ret); + } + } + */ + } s_rescInternalInstance->m_bInitialized = false; } @@ -719,6 +741,52 @@ int cellRescSetDsts(u32 dstsMode, mem_ptr_t dsts) return CELL_OK; } +void SetVBlankHandler(u32 handler) +{ + if (!s_rescInternalInstance->m_bInitialized || s_rescInternalInstance->m_dstMode == 0) + { + // If this function is called before SetDisplayMode, handler should be stored and set it properly later in SetDisplayMode. + s_rescInternalInstance->s_applicationVBlankHandler = handler; + return; + } + + if (IsNotPalTemporal()) + { + cellGcmSetVBlankHandler(handler); + s_rescInternalInstance->s_applicationVBlankHandler = NULL; + } + else if (IsPal60Hsync()) + { + //cellGcmSetSecondVHandler(handler); + s_rescInternalInstance->s_applicationVBlankHandler = NULL; + } + else + { + s_rescInternalInstance->s_applicationVBlankHandler = handler; + } +} + + +void SetFlipHandler(u32 handler) +{ + if (!s_rescInternalInstance->m_bInitialized || s_rescInternalInstance->m_dstMode == 0) + { + // If this function is called before SetDisplayMode, handler should be stored and set it properly later in SetDisplayMode. + s_rescInternalInstance->s_applicationFlipHandler = handler; + return; + } + + if (IsGcmFlip()) + { + cellGcmSetFlipHandler(handler); + s_rescInternalInstance->s_applicationFlipHandler = NULL; + } + else + { + s_rescInternalInstance->s_applicationFlipHandler = handler; + } +} + int cellRescSetDisplayMode(u32 displayMode) { cellResc->Warning("cellRescSetDisplayMode(displayMode=%d)", displayMode); @@ -786,24 +854,24 @@ int cellRescSetDisplayMode(u32 displayMode) cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ); //cellGcmSetVBlankHandler(IntrHandler50); //cellGcmSetSecondVHandler(IntrHandler60); - cellGcmSetFlipHandler(0); + cellGcmSetFlipHandler(NULL); } else if (IsPalDrop()) { //InitLabels(); cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ); - //cellGcmSetVBlankHandler(NULL); + cellGcmSetVBlankHandler(NULL); //cellGcmSetSecondVHandler(IntrHandler60Drop); - cellGcmSetFlipHandler(0); + cellGcmSetFlipHandler(NULL); } else if (IsPal60Hsync()) { cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ); - //cellGcmSetVBlankHandler(NULL); + cellGcmSetVBlankHandler(NULL); } - //if(s_applicationVBlankHandler) SetVBlankHandler(s_applicationVBlankHandler); - //if(s_applicationFlipHandler) SetFlipHandler(s_applicationFlipHandler); + if (s_rescInternalInstance->s_applicationVBlankHandler) SetVBlankHandler(s_rescInternalInstance->s_applicationVBlankHandler); + if (s_rescInternalInstance->s_applicationFlipHandler) SetFlipHandler(s_rescInternalInstance->s_applicationFlipHandler); cellGcmSetFlipMode((s_rescInternalInstance->m_initConfig.flipMode == CELL_RESC_DISPLAY_VSYNC) ? CELL_GCM_DISPLAY_VSYNC : CELL_GCM_DISPLAY_HSYNC); return CELL_OK; From feb241439eb731211b7e196b4c555c57ed49e66f Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 4 Jul 2014 06:19:23 +0800 Subject: [PATCH 106/499] Few changes and comment --- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index e4968db259..5b0713d74f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -113,7 +113,8 @@ inline bool IsNotPalInterpolate() { return !IsPalInterpolate(); } inline bool IsPalTemporal() { return (IsPal() && s_rescInternalInstance->m_initConfig.palTemporalMode != CELL_RESC_PAL_50); } inline bool IsNotPalTemporal() { return !IsPalTemporal(); } inline bool IsNotPal() { return !IsPal(); } -inline bool IsGcmFlip() { return (IsNotPal() || (IsPal() && (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_50 || s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_FOR_HSYNC)));} +inline bool IsGcmFlip() { return (IsNotPal() || (IsPal() && (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_50 + || s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_FOR_HSYNC)));} inline int GetNumColorBuffers(){ return IsPalInterpolate() ? 6 : (IsPalDrop() ? 3 : 2); } inline bool IsInterlace() { return s_rescInternalInstance->m_initConfig.interlaceMode == CELL_RESC_INTERLACE_FILTER; } inline bool IsTextureNR() { return !IsInterlace(); } @@ -663,20 +664,21 @@ void cellRescExit() return; } - if (IsPalTemporal()){ + if (IsPalTemporal()) + { cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_DISABLE); cellGcmSetVBlankHandler(NULL); //GcmSysTypePrefix::cellGcmSetSecondVHandler(NULL); - /* - if (IsPalInterpolate()){ - int ret = ExitSystemResource(); - if (ret != CELL_OK) - { - cellResc->Error("failed to clean up system resources.. continue. 0x%x\n", ret); - } + if (IsPalInterpolate()) + { + // TODO: ExitSystemResource() + //int ret = ExitSystemResource(); + //if (ret != CELL_OK) + //{ + // cellResc->Error("failed to clean up system resources.. continue. 0x%x\n", ret); + //} } - */ } s_rescInternalInstance->m_bInitialized = false; From abbbaa222bc4dd6447bfb9575a9f12e2a584d1ce Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 4 Jul 2014 02:52:43 +0400 Subject: [PATCH 107/499] cellMsgDialog functions improved Callback can return result now --- rpcs3/Emu/Memory/Memory.h | 20 +- rpcs3/Emu/SysCalls/Callback.cpp | 12 +- rpcs3/Emu/SysCalls/Callback.h | 2 +- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 445 +++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h | 91 ++++ rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 161 +------ rpcs3/Emu/SysCalls/Modules/cellSysutil.h | 35 +- rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 + 9 files changed, 579 insertions(+), 195 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp create mode 100644 rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 377b012253..3a51f61b15 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -962,20 +962,20 @@ template class mem_func_beptr_t : public mem_func template class mem_func_ptr_t : public mem_base_t { - __forceinline void call_func(bool is_async) + __forceinline RT call_func(bool is_async) const { Callback cb; cb.SetAddr(this->m_addr); - cb.Branch(!is_async); + return (RT)cb.Branch(!is_async); } public: - __forceinline void operator()() + __forceinline RT operator()() const { - call_func(false); + return call_func(false); } - __forceinline void async() + __forceinline void async() const { call_func(true); } @@ -984,21 +984,21 @@ public: template class mem_func_ptr_t : public mem_base_t { - __forceinline void call_func(bool is_async, T... args) + __forceinline RT call_func(bool is_async, T... args) const { Callback cb; cb.SetAddr(this->m_addr); cb.Handle(_func_arg::get_value(args)...); - cb.Branch(!is_async); + return (RT)cb.Branch(!is_async); } public: - __forceinline void operator()(T... args) + __forceinline RT operator()(T... args) const { - call_func(false, args...); + return call_func(false, args...); } - __forceinline void async(T... args) + __forceinline void async(T... args) const { call_func(true, args...); } diff --git a/rpcs3/Emu/SysCalls/Callback.cpp b/rpcs3/Emu/SysCalls/Callback.cpp index 0c7785fac4..02fb9dc9cf 100644 --- a/rpcs3/Emu/SysCalls/Callback.cpp +++ b/rpcs3/Emu/SysCalls/Callback.cpp @@ -52,7 +52,7 @@ void Callback::Handle(u64 _a1, u64 _a2, u64 _a3, u64 _a4) m_has_data = true; } -void Callback::Branch(bool wait) +u64 Callback::Branch(bool wait) { m_has_data = false; @@ -67,7 +67,7 @@ again: if (Emu.IsStopped()) { LOG_WARNING(HLE, "Callback::Branch() aborted"); - return; + return 0; } Sleep(1); } @@ -81,7 +81,7 @@ again: if (Emu.IsStopped()) { LOG_WARNING(HLE, "Callback::Branch() aborted"); - return; + return 0; } thr.Stop(); @@ -102,7 +102,7 @@ again: if (!wait) { - return; + return 0; } while (thr.IsAlive()) @@ -110,10 +110,12 @@ again: if (Emu.IsStopped()) { LOG_WARNING(HLE, "Callback::Branch(true) aborted (end)"); - return; + return 0; } Sleep(1); } + + return thr.GetExitStatus(); } void Callback::SetName(const std::string& name) diff --git a/rpcs3/Emu/SysCalls/Callback.h b/rpcs3/Emu/SysCalls/Callback.h index 093fc13379..ce9023b1b0 100644 --- a/rpcs3/Emu/SysCalls/Callback.h +++ b/rpcs3/Emu/SysCalls/Callback.h @@ -24,7 +24,7 @@ public: Callback(u32 slot = 0, u64 addr = 0); void Handle(u64 a1 = 0, u64 a2 = 0, u64 a3 = 0, u64 a4 = 0); - void Branch(bool wait); + u64 Branch(bool wait); void SetName(const std::string& name); operator bool() const; diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp new file mode 100644 index 0000000000..e339a6143e --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -0,0 +1,445 @@ +#include "stdafx.h" +#include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/Modules.h" + +#include "cellSysutil.h" +#include "cellMsgDialog.h" + +extern Module *cellSysutil; + +enum MsgDialogState +{ + msgDialogNone, + msgDialogOpen, + msgDialogClose, + msgDialogAbort, +}; + +std::atomic g_msg_dialog_state(msgDialogNone); +wxDialog* g_msg_dialog = nullptr; +wxGauge* m_gauge1 = nullptr; +wxGauge* m_gauge2 = nullptr; +wxStaticText* m_text1 = nullptr; +wxStaticText* m_text2 = nullptr; +u64 m_wait_until; + +int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_t callback, u32 userData, u32 extParam) +{ + cellSysutil->Warning("cellMsgDialogOpen2(type=0x%x, msgString_addr=0x%x, callback_addr=0x%x, userData=0x%x, extParam=0x%x)", + type, msgString.GetAddr(), callback.GetAddr(), userData, extParam); + + if (!msgString.IsGood() || !callback.IsGood()) + { + return CELL_EFAULT; + } + + //type |= CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE; + //type |= CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO; + + MsgDialogState old = msgDialogNone; + if (!g_msg_dialog_state.compare_exchange_strong(old, msgDialogOpen)) + { + return CELL_SYSUTIL_ERROR_BUSY; + } + + thread t("MsgDialog thread", [=]() + { + switch (type & CELL_MSGDIALOG_TYPE_SE_TYPE) + { + case CELL_MSGDIALOG_TYPE_SE_TYPE_NORMAL: LOG_WARNING(Log::HLE, "%s", msgString.GetString()); break; + case CELL_MSGDIALOG_TYPE_SE_TYPE_ERROR: LOG_ERROR(Log::HLE, "%s", msgString.GetString()); break; + } + + switch (type & CELL_MSGDIALOG_TYPE_SE_MUTE) // TODO + { + case CELL_MSGDIALOG_TYPE_SE_MUTE_OFF: break; + case CELL_MSGDIALOG_TYPE_SE_MUTE_ON: break; + } + + switch (type & CELL_MSGDIALOG_TYPE_BG) // TODO + { + case CELL_MSGDIALOG_TYPE_BG_INVISIBLE: break; + case CELL_MSGDIALOG_TYPE_BG_VISIBLE: break; + } + + switch (type & CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR) // TODO + { + case CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_NO: break; + default: break; + } + + u64 status = CELL_MSGDIALOG_BUTTON_NONE; + + volatile bool m_signal = false; + wxGetApp().CallAfter([&]() + { + wxWindow* parent = nullptr; // TODO: align it better + + m_gauge1 = nullptr; + m_gauge2 = nullptr; + m_text1 = nullptr; + m_text2 = nullptr; + wxButton* m_button_ok = nullptr; + wxButton* m_button_yes = nullptr; + wxButton* m_button_no = nullptr; + + g_msg_dialog = new wxDialog(parent, wxID_ANY, type & CELL_MSGDIALOG_TYPE_SE_TYPE ? "" : "Error", wxDefaultPosition, wxDefaultSize); + + g_msg_dialog->SetExtraStyle(g_msg_dialog->GetExtraStyle() | wxWS_EX_TRANSIENT); + + wxSizer* sizer1 = new wxBoxSizer(wxVERTICAL); + + wxStaticText* m_text = new wxStaticText(g_msg_dialog, wxID_ANY, wxString(msgString.GetString(), wxConvUTF8)); + sizer1->Add(m_text, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); + + switch (type & CELL_MSGDIALOG_TYPE_PROGRESSBAR) + { + case CELL_MSGDIALOG_TYPE_PROGRESSBAR_DOUBLE: + m_gauge2 = new wxGauge(g_msg_dialog, wxID_ANY, 100, wxDefaultPosition, wxSize(300, -1), wxGA_HORIZONTAL | wxGA_SMOOTH); + m_text2 = new wxStaticText(g_msg_dialog, wxID_ANY, ""); + m_text2->SetAutoLayout(true); + + case CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE: + m_gauge1 = new wxGauge(g_msg_dialog, wxID_ANY, 100, wxDefaultPosition, wxSize(300, -1), wxGA_HORIZONTAL | wxGA_SMOOTH); + m_text1 = new wxStaticText(g_msg_dialog, wxID_ANY, ""); + m_text1->SetAutoLayout(true); + + case CELL_MSGDIALOG_TYPE_PROGRESSBAR_NONE: + break; + } + + if (m_gauge1) + { + sizer1->Add(m_text1, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 8); + sizer1->Add(m_gauge1, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, 16); + m_gauge1->SetValue(0); + } + if (m_gauge2) + { + sizer1->Add(m_text2, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 8); + sizer1->Add(m_gauge2, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, 16); + m_gauge2->SetValue(0); + } + + wxBoxSizer* buttons = new wxBoxSizer(wxHORIZONTAL); + + switch (type & CELL_MSGDIALOG_TYPE_BUTTON_TYPE) + { + case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_NONE: + break; + + case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO: + m_button_yes = new wxButton(g_msg_dialog, wxID_YES); + buttons->Add(m_button_yes, 0, wxALIGN_CENTER_HORIZONTAL | wxRIGHT, 8); + m_button_no = new wxButton(g_msg_dialog, wxID_NO); + buttons->Add(m_button_no, 0, wxALIGN_CENTER_HORIZONTAL, 16); + + sizer1->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); + break; + + case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_OK: + m_button_ok = new wxButton(g_msg_dialog, wxID_OK); + buttons->Add(m_button_ok, 0, wxALIGN_CENTER_HORIZONTAL, 16); + + sizer1->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); + break; + } + + sizer1->AddSpacer(16); + + g_msg_dialog->SetSizerAndFit(sizer1); + g_msg_dialog->Centre(wxBOTH); + g_msg_dialog->Show(); + g_msg_dialog->Enable(); + + g_msg_dialog->Bind(wxEVT_BUTTON, [&](wxCommandEvent& event) + { + status = (event.GetId() == wxID_NO) ? CELL_MSGDIALOG_BUTTON_NO : CELL_MSGDIALOG_BUTTON_YES /* OK */; + g_msg_dialog->Hide(); + m_wait_until = get_system_time(); + g_msg_dialog_state = msgDialogClose; + }); + + + g_msg_dialog->Bind(wxEVT_CLOSE_WINDOW, [&](wxCloseEvent& event) + { + if (type & CELL_MSGDIALOG_TYPE_DISABLE_CANCEL) + { + } + else + { + status = CELL_MSGDIALOG_BUTTON_ESCAPE; + g_msg_dialog->Hide(); + m_wait_until = get_system_time(); + g_msg_dialog_state = msgDialogClose; + } + }); + + m_signal = true; + }); + + while (!m_signal) + { + Sleep(1); + } + + while (g_msg_dialog_state == msgDialogOpen || get_system_time() < m_wait_until) + { + if (Emu.IsStopped()) + { + g_msg_dialog_state = msgDialogAbort; + break; + } + Sleep(1); + } + + if (callback && (g_msg_dialog_state != msgDialogAbort)) + callback.async(status, userData); + + wxGetApp().CallAfter([&]() + { + delete g_msg_dialog; + g_msg_dialog = nullptr; + }); + + g_msg_dialog_state = msgDialogNone; + }); + t.detach(); + + return CELL_OK; +} + +int cellMsgDialogOpenErrorCode(u32 errorCode, mem_func_ptr_t callback, mem_ptr_t userData, u32 extParam) +{ + cellSysutil->Warning("cellMsgDialogOpenErrorCode(errorCode=0x%x, callback_addr=0x%x, userData=%d, extParam=%d)", + errorCode, callback.GetAddr(), userData, extParam); + + std::string errorMessage; + switch (errorCode) + { + // Generic errors + case 0x80010001: errorMessage = "The resource is temporarily unavailable."; break; + case 0x80010002: errorMessage = "Invalid argument or flag."; break; + case 0x80010003: errorMessage = "The feature is not yet implemented."; break; + case 0x80010004: errorMessage = "Memory allocation failed."; break; + case 0x80010005: errorMessage = "The resource with the specified identifier does not exist."; break; + case 0x80010006: errorMessage = "The file does not exist."; break; + case 0x80010007: errorMessage = "The file is in unrecognized format / The file is not a valid ELF file."; break; + case 0x80010008: errorMessage = "Resource deadlock is avoided."; break; + case 0x80010009: errorMessage = "Operation not permitted."; break; + case 0x8001000A: errorMessage = "The device or resource is bus."; break; + case 0x8001000B: errorMessage = "The operation is timed ou."; break; + case 0x8001000C: errorMessage = "The operation is aborte."; break; + case 0x8001000D: errorMessage = "Invalid memory access."; break; + case 0x8001000F: errorMessage = "State of the target thread is invalid."; break; + case 0x80010010: errorMessage = "Alignment is invalid."; break; + case 0x80010011: errorMessage = "Shortage of the kernel resources."; break; + case 0x80010012: errorMessage = "The file is a directory."; break; + case 0x80010013: errorMessage = "Operation canceled."; break; + case 0x80010014: errorMessage = "Entry already exists."; break; + case 0x80010015: errorMessage = "Port is already connected."; break; + case 0x80010016: errorMessage = "Port is not connected."; break; + case 0x80010017: errorMessage = "Failure in authorizing SELF. Program authentication fail."; break; + case 0x80010018: errorMessage = "The file is not MSELF."; break; + case 0x80010019: errorMessage = "System version error."; break; + case 0x8001001A: errorMessage = "Fatal system error occurred while authorizing SELF. SELF auth failure."; break; + case 0x8001001B: errorMessage = "Math domain violation."; break; + case 0x8001001C: errorMessage = "Math range violation."; break; + case 0x8001001D: errorMessage = "Illegal multi-byte sequence in input."; break; + case 0x8001001E: errorMessage = "File position error."; break; + case 0x8001001F: errorMessage = "Syscall was interrupted."; break; + case 0x80010020: errorMessage = "File too large."; break; + case 0x80010021: errorMessage = "Too many links."; break; + case 0x80010022: errorMessage = "File table overflow."; break; + case 0x80010023: errorMessage = "No space left on device."; break; + case 0x80010024: errorMessage = "Not a TTY."; break; + case 0x80010025: errorMessage = "Broken pipe."; break; + case 0x80010026: errorMessage = "Read-only filesystem."; break; + case 0x80010027: errorMessage = "Illegal seek."; break; + case 0x80010028: errorMessage = "Arg list too long."; break; + case 0x80010029: errorMessage = "Access violation."; break; + case 0x8001002A: errorMessage = "Invalid file descriptor."; break; + case 0x8001002B: errorMessage = "Filesystem mounting failed."; break; + case 0x8001002C: errorMessage = "Too many files open."; break; + case 0x8001002D: errorMessage = "No device."; break; + case 0x8001002E: errorMessage = "Not a directory."; break; + case 0x8001002F: errorMessage = "No such device or IO."; break; + case 0x80010030: errorMessage = "Cross-device link error."; break; + case 0x80010031: errorMessage = "Bad Message."; break; + case 0x80010032: errorMessage = "In progress."; break; + case 0x80010033: errorMessage = "Message size error."; break; + case 0x80010034: errorMessage = "Name too long."; break; + case 0x80010035: errorMessage = "No lock."; break; + case 0x80010036: errorMessage = "Not empty."; break; + case 0x80010037: errorMessage = "Not supported."; break; + case 0x80010038: errorMessage = "File-system specific error."; break; + case 0x80010039: errorMessage = "Overflow occured."; break; + case 0x8001003A: errorMessage = "Filesystem not mounted."; break; + case 0x8001003B: errorMessage = "Not SData."; break; + case 0x8001003C: errorMessage = "Incorrect version in sys_load_param."; break; + case 0x8001003D: errorMessage = "Pointer is null."; break; + case 0x8001003E: errorMessage = "Pointer is null."; break; + default: errorMessage = "An error has occurred."; break; + } + + char errorCodeHex[9]; + sprintf(errorCodeHex, "%08x", errorCode); + errorMessage.append("\n("); + errorMessage.append(errorCodeHex); + errorMessage.append(")\n"); + + u64 status; + int res = rMessageBox(errorMessage, rGetApp().GetAppName(), rICON_ERROR | rOK); + switch (res) + { + case rOK: status = CELL_MSGDIALOG_BUTTON_OK; break; + default: + if (res) + { + status = CELL_MSGDIALOG_BUTTON_INVALID; + break; + } + + status = CELL_MSGDIALOG_BUTTON_NONE; + break; + } + + if (callback) + callback(status, userData); + + return CELL_OK; +} + +int cellMsgDialogClose(float delay) +{ + cellSysutil->Warning("cellMsgDialogClose(delay=%f)", delay); + + MsgDialogState old = msgDialogOpen; + if (!g_msg_dialog_state.compare_exchange_strong(old, msgDialogClose)) + { + if (old == msgDialogNone) + { + return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; + } + else + { + return CELL_SYSUTIL_ERROR_BUSY; + } + } + + if (delay < 0.0f) delay = 0.0f; + m_wait_until = get_system_time() + (u64)(delay * 1000); + return CELL_OK; +} + +int cellMsgDialogAbort() +{ + cellSysutil->Warning("cellMsgDialogAbort()"); + + MsgDialogState old = msgDialogOpen; + if (!g_msg_dialog_state.compare_exchange_strong(old, msgDialogAbort)) + { + if (old == msgDialogNone) + { + return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; + } + else + { + return CELL_SYSUTIL_ERROR_BUSY; + } + } + + m_wait_until = get_system_time(); + return CELL_OK; +} + +int cellMsgDialogProgressBarSetMsg(u32 progressBarIndex, mem_list_ptr_t msgString) +{ + if (!msgString.IsGood()) + { + cellSysutil->Error("cellMsgDialogProgressBarSetMsg(progressBarIndex=%d, msgString_addr=0x%x): CELL_EFAULT", + progressBarIndex, msgString.GetAddr()); + return CELL_EFAULT; + } + + cellSysutil->Warning("cellMsgDialogProgressBarSetMsg(progressBarIndex=%d, msgString_addr=0x%x): '%s'", + progressBarIndex, msgString.GetAddr(), msgString.GetString()); + + if (g_msg_dialog_state != msgDialogOpen) + { + return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; + } + + if (progressBarIndex >= (u32)(bool)m_gauge1 + (u32)(bool)m_gauge2) + { + return CELL_MSGDIALOG_ERROR_PARAM; + } + + std::string text(msgString.GetString()); + + wxGetApp().CallAfter([text, progressBarIndex]() + { + if (g_msg_dialog && !Emu.IsStopped()) + { + if (progressBarIndex == 0 && m_text1) m_text1->SetLabelText(fmt::FromUTF8(text)); + if (progressBarIndex == 1 && m_text2) m_text2->SetLabelText(fmt::FromUTF8(text)); + g_msg_dialog->Layout(); + g_msg_dialog->Fit(); + } + }); + return CELL_OK; +} + +int cellMsgDialogProgressBarReset(u32 progressBarIndex) +{ + cellSysutil->Warning("cellMsgDialogProgressBarReset(progressBarIndex=%d)", progressBarIndex); + + if (g_msg_dialog_state != msgDialogOpen) + { + return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; + } + + if (progressBarIndex >= (u32)(bool)m_gauge1 + (u32)(bool)m_gauge2) + { + return CELL_MSGDIALOG_ERROR_PARAM; + } + + wxGetApp().CallAfter([=]() + { + if (g_msg_dialog) + { + if (progressBarIndex == 0 && m_gauge1) m_gauge1->SetValue(0); + if (progressBarIndex == 1 && m_gauge2) m_gauge2->SetValue(0); + } + }); + return CELL_OK; +} + +int cellMsgDialogProgressBarInc(u32 progressBarIndex, u32 delta) +{ + cellSysutil->Warning("cellMsgDialogProgressBarInc(progressBarIndex=%d, delta=%d)", progressBarIndex, delta); + + if (g_msg_dialog_state != msgDialogOpen) + { + return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; + } + + if (progressBarIndex >= (u32)(bool)m_gauge1 + (u32)(bool)m_gauge2) + { + return CELL_MSGDIALOG_ERROR_PARAM; + } + + wxGetApp().CallAfter([=]() + { + if (g_msg_dialog) + { + if (progressBarIndex == 0 && m_gauge1) m_gauge1->SetValue(m_gauge1->GetValue() + delta); + if (progressBarIndex == 1 && m_gauge2) m_gauge2->SetValue(m_gauge2->GetValue() + delta); + } + }); + return CELL_OK; +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h new file mode 100644 index 0000000000..33b8ab667c --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h @@ -0,0 +1,91 @@ +#pragma once + +enum +{ + CELL_MSGDIALOG_ERROR_PARAM = 0x8002b301, + CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED = 0x8002b302, +}; + +enum CellMsgDialogType +{ + CELL_MSGDIALOG_DIALOG_TYPE_ERROR = 0x00000000, + CELL_MSGDIALOG_DIALOG_TYPE_NORMAL = 0x00000001, + CELL_MSGDIALOG_BUTTON_TYPE_NONE = 0x00000000, + CELL_MSGDIALOG_BUTTON_TYPE_YESNO = 0x00000010, + CELL_MSGDIALOG_DEFAULT_CURSOR_YES = 0x00000000, + CELL_MSGDIALOG_DEFAULT_CURSOR_NO = 0x00000100, +}; + +enum +{ + CELL_MSGDIALOG_TYPE_SE_TYPE = 1 << 0, + CELL_MSGDIALOG_TYPE_SE_TYPE_ERROR = 0 << 0, + CELL_MSGDIALOG_TYPE_SE_TYPE_NORMAL = 1 << 0, +}; + +enum +{ + CELL_MSGDIALOG_TYPE_SE_MUTE = 1 << 1, + CELL_MSGDIALOG_TYPE_SE_MUTE_OFF = 0 << 1, + CELL_MSGDIALOG_TYPE_SE_MUTE_ON = 1 << 1, +}; + +enum +{ + CELL_MSGDIALOG_TYPE_BG = 1 << 2, + CELL_MSGDIALOG_TYPE_BG_VISIBLE = 0 << 2, + CELL_MSGDIALOG_TYPE_BG_INVISIBLE = 1 << 2, +}; + +enum +{ + CELL_MSGDIALOG_TYPE_BUTTON_TYPE = 3 << 4, + CELL_MSGDIALOG_TYPE_BUTTON_TYPE_NONE = 0 << 4, + CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO = 1 << 4, + CELL_MSGDIALOG_TYPE_BUTTON_TYPE_OK = 2 << 4, +}; + +enum +{ + CELL_MSGDIALOG_TYPE_DISABLE_CANCEL = 1 << 7, + CELL_MSGDIALOG_TYPE_DISABLE_CANCEL_OFF = 0 << 7, + CELL_MSGDIALOG_TYPE_DISABLE_CANCEL_ON = 1 << 7, +}; + +enum +{ + CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR = 1 << 8, + CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_NONE = 0 << 8, + CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_YES = 0 << 8, + CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_NO = 1 << 8, + CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_OK = 0 << 8, +}; + +enum +{ + CELL_MSGDIALOG_TYPE_PROGRESSBAR = 3 << 12, + CELL_MSGDIALOG_TYPE_PROGRESSBAR_NONE = 0 << 12, + CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE = 1 << 12, + CELL_MSGDIALOG_TYPE_PROGRESSBAR_DOUBLE = 2 << 12, +}; + +enum +{ + CELL_MSGDIALOG_BUTTON_NONE = -1, + CELL_MSGDIALOG_BUTTON_INVALID = 0, + CELL_MSGDIALOG_BUTTON_OK = 1, + CELL_MSGDIALOG_BUTTON_YES = 1, + CELL_MSGDIALOG_BUTTON_NO = 2, + CELL_MSGDIALOG_BUTTON_ESCAPE = 3, +}; + +typedef void(*CellMsgDialogCallback)(int buttonType, u32 userData); + +int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_t callback, u32 userData, u32 extParam); +int cellMsgDialogOpenErrorCode(u32 errorCode, mem_func_ptr_t callback, mem_ptr_t userData, u32 extParam); + +int cellMsgDialogProgressBarSetMsg(u32 progressBarIndex, mem_list_ptr_t msgString); +int cellMsgDialogProgressBarReset(u32 progressBarIndex); +int cellMsgDialogProgressBarInc(u32 progressBarIndex, u32 delta); +int cellMsgDialogClose(float delay); +int cellMsgDialogAbort(); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index b8bf9ec0a2..304f2fd22a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -10,11 +10,11 @@ #include "cellSysutil.h" #include "cellSysutil_SaveData.h" +#include "cellMsgDialog.h" #include "cellGame.h" #include "Loader/PSF.h" -typedef void (*CellMsgDialogCallback)(int buttonType, mem_ptr_t userData); typedef void (*CellHddGameStatCallback)(mem_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set); @@ -381,160 +381,6 @@ int cellSysutilUnregisterCallback(int slot) return CELL_OK; } -int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_t callback, mem_ptr_t userData, u32 extParam) -{ - cellSysutil->Warning("cellMsgDialogOpen2(type=0x%x, msgString_addr=0x%x, callback_addr=0x%x, userData=0x%x, extParam=0x%x)", - type, msgString.GetAddr(), callback.GetAddr(), userData.GetAddr(), extParam); - - long style = 0; - - if(type & CELL_MSGDIALOG_DIALOG_TYPE_NORMAL) - { - style |= rICON_EXCLAMATION; - } - else - { - style |= rICON_ERROR; - } - - if(type & CELL_MSGDIALOG_BUTTON_TYPE_YESNO) - { - style |= rYES_NO; - } - else - { - style |= rOK; - } - - int res = rMessageBox(std::string(msgString.GetString()), rGetApp().GetAppName(), style); - - u64 status; - - switch(res) - { - case rOK: status = CELL_MSGDIALOG_BUTTON_OK; break; - case rYES: status = CELL_MSGDIALOG_BUTTON_YES; break; - case rNO: status = CELL_MSGDIALOG_BUTTON_NO; break; - - default: - if(res) - { - status = CELL_MSGDIALOG_BUTTON_INVALID; - break; - } - - status = CELL_MSGDIALOG_BUTTON_NONE; - break; - } - - if(callback) - callback(status, userData); - - return CELL_OK; -} - -int cellMsgDialogOpenErrorCode(u32 errorCode, mem_func_ptr_t callback, mem_ptr_t userData, u32 extParam) -{ - cellSysutil->Warning("cellMsgDialogOpenErrorCode(errorCode=0x%x, callback_addr=0x%x, userData=%d, extParam=%d)", - errorCode, callback.GetAddr(), userData, extParam); - - std::string errorMessage; - switch(errorCode) - { - // Generic errors - case 0x80010001: errorMessage = "The resource is temporarily unavailable."; break; - case 0x80010002: errorMessage = "Invalid argument or flag."; break; - case 0x80010003: errorMessage = "The feature is not yet implemented."; break; - case 0x80010004: errorMessage = "Memory allocation failed."; break; - case 0x80010005: errorMessage = "The resource with the specified identifier does not exist."; break; - case 0x80010006: errorMessage = "The file does not exist."; break; - case 0x80010007: errorMessage = "The file is in unrecognized format / The file is not a valid ELF file."; break; - case 0x80010008: errorMessage = "Resource deadlock is avoided."; break; - case 0x80010009: errorMessage = "Operation not permitted."; break; - case 0x8001000A: errorMessage = "The device or resource is bus."; break; - case 0x8001000B: errorMessage = "The operation is timed ou."; break; - case 0x8001000C: errorMessage = "The operation is aborte."; break; - case 0x8001000D: errorMessage = "Invalid memory access."; break; - case 0x8001000F: errorMessage = "State of the target thread is invalid."; break; - case 0x80010010: errorMessage = "Alignment is invalid."; break; - case 0x80010011: errorMessage = "Shortage of the kernel resources."; break; - case 0x80010012: errorMessage = "The file is a directory."; break; - case 0x80010013: errorMessage = "Operation canceled."; break; - case 0x80010014: errorMessage = "Entry already exists."; break; - case 0x80010015: errorMessage = "Port is already connected."; break; - case 0x80010016: errorMessage = "Port is not connected."; break; - case 0x80010017: errorMessage = "Failure in authorizing SELF. Program authentication fail."; break; - case 0x80010018: errorMessage = "The file is not MSELF."; break; - case 0x80010019: errorMessage = "System version error."; break; - case 0x8001001A: errorMessage = "Fatal system error occurred while authorizing SELF. SELF auth failure."; break; - case 0x8001001B: errorMessage = "Math domain violation."; break; - case 0x8001001C: errorMessage = "Math range violation."; break; - case 0x8001001D: errorMessage = "Illegal multi-byte sequence in input."; break; - case 0x8001001E: errorMessage = "File position error."; break; - case 0x8001001F: errorMessage = "Syscall was interrupted."; break; - case 0x80010020: errorMessage = "File too large."; break; - case 0x80010021: errorMessage = "Too many links."; break; - case 0x80010022: errorMessage = "File table overflow."; break; - case 0x80010023: errorMessage = "No space left on device."; break; - case 0x80010024: errorMessage = "Not a TTY."; break; - case 0x80010025: errorMessage = "Broken pipe."; break; - case 0x80010026: errorMessage = "Read-only filesystem."; break; - case 0x80010027: errorMessage = "Illegal seek."; break; - case 0x80010028: errorMessage = "Arg list too long."; break; - case 0x80010029: errorMessage = "Access violation."; break; - case 0x8001002A: errorMessage = "Invalid file descriptor."; break; - case 0x8001002B: errorMessage = "Filesystem mounting failed."; break; - case 0x8001002C: errorMessage = "Too many files open."; break; - case 0x8001002D: errorMessage = "No device."; break; - case 0x8001002E: errorMessage = "Not a directory."; break; - case 0x8001002F: errorMessage = "No such device or IO."; break; - case 0x80010030: errorMessage = "Cross-device link error."; break; - case 0x80010031: errorMessage = "Bad Message."; break; - case 0x80010032: errorMessage = "In progress."; break; - case 0x80010033: errorMessage = "Message size error."; break; - case 0x80010034: errorMessage = "Name too long."; break; - case 0x80010035: errorMessage = "No lock."; break; - case 0x80010036: errorMessage = "Not empty."; break; - case 0x80010037: errorMessage = "Not supported."; break; - case 0x80010038: errorMessage = "File-system specific error."; break; - case 0x80010039: errorMessage = "Overflow occured."; break; - case 0x8001003A: errorMessage = "Filesystem not mounted."; break; - case 0x8001003B: errorMessage = "Not SData."; break; - case 0x8001003C: errorMessage = "Incorrect version in sys_load_param."; break; - case 0x8001003D: errorMessage = "Pointer is null."; break; - case 0x8001003E: errorMessage = "Pointer is null."; break; - default: errorMessage = "An error has occurred."; break; - } - - char errorCodeHex [9]; - sprintf(errorCodeHex, "%08x", errorCode); - errorMessage.append("\n("); - errorMessage.append(errorCodeHex); - errorMessage.append(")\n"); - - u64 status; - int res = rMessageBox(errorMessage, rGetApp().GetAppName(), rICON_ERROR | rOK); - switch(res) - { - case rOK: status = CELL_MSGDIALOG_BUTTON_OK; break; - default: - if(res) - { - status = CELL_MSGDIALOG_BUTTON_INVALID; - break; - } - - status = CELL_MSGDIALOG_BUTTON_NONE; - break; - } - - if(callback) - callback(status, userData); - - return CELL_OK; -} - - int cellAudioOutGetSoundAvailability(u32 audioOut, u32 type, u32 fs, u32 option) { cellSysutil->Warning("cellAudioOutGetSoundAvailability(audioOut=%d, type=%d, fs=0x%x, option=%d)", @@ -1023,6 +869,11 @@ void cellSysutil_init() cellSysutil->AddFunc(0x7603d3db, cellMsgDialogOpen2); cellSysutil->AddFunc(0x3e22cb4b, cellMsgDialogOpenErrorCode); + cellSysutil->AddFunc(0x9d6af72a, cellMsgDialogProgressBarSetMsg); + cellSysutil->AddFunc(0x7bc2c8a8, cellMsgDialogProgressBarReset); + cellSysutil->AddFunc(0x94862702, cellMsgDialogProgressBarInc); + cellSysutil->AddFunc(0x20543730, cellMsgDialogClose); + cellSysutil->AddFunc(0x62b0f803, cellMsgDialogAbort); cellSysutil->AddFunc(0xf4e3caa0, cellAudioOutGetState); cellSysutil->AddFunc(0x4692ab35, cellAudioOutConfigure); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.h b/rpcs3/Emu/SysCalls/Modules/cellSysutil.h index 134c496cf4..c701590692 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.h @@ -1,5 +1,16 @@ #pragma once +enum +{ + CELL_SYSUTIL_ERROR_TYPE = 0x8002b101, + CELL_SYSUTIL_ERROR_VALUE = 0x8002b102, + CELL_SYSUTIL_ERROR_SIZE = 0x8002b103, + CELL_SYSUTIL_ERROR_NUM = 0x8002b104, + CELL_SYSUTIL_ERROR_BUSY = 0x8002b105, + CELL_SYSUTIL_ERROR_STATUS = 0x8002b106, + CELL_SYSUTIL_ERROR_MEMORY = 0x8002b107, +}; + // Parameter IDs enum { @@ -103,17 +114,6 @@ enum CELL_SYSUTIL_PAD_RUMBLE_ON = 1, }; - -enum -{ - CELL_MSGDIALOG_BUTTON_NONE = -1, - CELL_MSGDIALOG_BUTTON_INVALID = 0, - CELL_MSGDIALOG_BUTTON_OK = 1, - CELL_MSGDIALOG_BUTTON_YES = 1, - CELL_MSGDIALOG_BUTTON_NO = 2, - CELL_MSGDIALOG_BUTTON_ESCAPE = 3, -}; - enum { CELL_SYSCACHE_RET_OK_CLEARED = 0, @@ -129,19 +129,6 @@ enum CELL_SYSCACHE_ERROR_NOTMOUNTED = 0x8002bc04, // We don't really need to simulate the mounting, so this is probably useless }; -enum CellMsgDialogType -{ - CELL_MSGDIALOG_DIALOG_TYPE_ERROR = 0x00000000, - CELL_MSGDIALOG_DIALOG_TYPE_NORMAL = 0x00000001, - - CELL_MSGDIALOG_BUTTON_TYPE_NONE = 0x00000000, - CELL_MSGDIALOG_BUTTON_TYPE_YESNO = 0x00000010, - - CELL_MSGDIALOG_DEFAULT_CURSOR_YES = 0x00000000, - CELL_MSGDIALOG_DEFAULT_CURSOR_NO = 0x00000100, -}; - - // cellSysutil: cellHddGame enum { diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index fb34b8f476..0e7ffa8e21 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -144,6 +144,7 @@ + @@ -342,6 +343,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index cc85fc9f6c..377aeab4d4 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -587,6 +587,9 @@ Utilities + + Emu\SysCalls\Modules + @@ -1075,5 +1078,8 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + \ No newline at end of file From 69c9d95f10952ccec7b707a029fd2dc930575104 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 4 Jul 2014 10:29:31 +0200 Subject: [PATCH 108/499] add files to allow for packaging on teamcity --- bin/soft_oal.dll | Bin 0 -> 417320 bytes package.bat | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 bin/soft_oal.dll create mode 100644 package.bat diff --git a/bin/soft_oal.dll b/bin/soft_oal.dll new file mode 100644 index 0000000000000000000000000000000000000000..b47ff952b78bf43db6b7d507b4d7a9b9f1d2d810 GIT binary patch literal 417320 zcmeFa33wF6)&@M2Odvq86A6n75@pb^N))a{MP|qZCpu^p1XL6hji{(76XI^dB$##> zjMw$L;(Fb8*;JTGAPZ{%1tM1oi`vbwqpa%u@2RTZCIfo)`~K&9p8t>Nr_MQb z>eQ*~t`S#P*^+HGn*;x1F`I23uJq?(zsLV6MezyU7o1@Gtj&tk=GlEKP8&7pmZ@1& z?!NQpyRW}JYvT2H+;OKr>xP@M?k>I~>y|sRJeQ5ky8X@@Z|dK^eOsphU6^mP-8duN zHs`szLR(gfZB~1mZIA7YtaeFBoo%V0?037(b}A}o;$J#FG~qV-W%o&(Zo5sgrPz?5 zzs3}st(DET?$p+-T{c@5%jVD0Ed!!o^c>(GDIql=#pdfkx#BPEuuVQiOW-;s#ikIm zj`cSo#g?6*Oc|JB^B(89{{EZp@#DF0YqXh2q_(3S=D#dk;e`G-Uhlu2GPCF(>d^HB zTupy2+k|lcyLrV%za7Fv`7~Vnx2WgpKZVz0ZA4pbT>%E zgzB6ASiKvjPNghX4^m0=S4#BV#NjcXgZHe>-zR`~3$Mpy0@*M<*wvz5xPRUiqX^en z`YA*`QimifewWP^?(d(>=<`xN$coi-#MdMK-8A{mi8d~4$ehWdReZex!_FE=fPj*I zN(H>M_#b{y)cok>0?Ltob%*k+L^A+2)mNymCaTeKpDE zt=Q<5Q!?AZZpkSfaq)M^348093GoINXI)bxb$8k3k^X5(kIm*Db>*1R3~0p~ue@S} zytw$mV9L|G9kz5;;`3exm)_dg*RB_OYsEBICN-*V7+y)LMN#%P`cYb&LDCeRD20_=2zt%mjCbpF2 z6z{mn8+7y>fNI|0*i??U+oc?w|2%JQjZ~futRSGt31SXJPmsE!J*+@NflkOCBBWcU zAY@a{#$ZaUO$wSNm3KhBV9H*k(Ae^=z!gl{D#}t(Rl{WN^fz;iOohT zo|-Sv9GhwNnOeuJVz{0*P#X)TaNp9eOe{2^~p=*j*s?DwiOQ#rd+s_^vZvo@&ou#AS*f0 zxx-3of!!w829736xZSmu%P&_kd4FJ&N70A~U-j9=v z#KvD^F(R$vCXi87r6cTtN?O7#FU~oje2khEVYih3v+Ab0O#WIGW&cM>46{^mJvC^V zRBq+SlN9MF-F}225bC9_lM+@e&!=;;E3Jd9=!3Y<*bg&CXaFs z@X9{tV4v)9W-I+(PqHbM|4y>`f=GIUC;>HhkwtGYO4EBa5zvS@B`=c-yE?clP z^)!eal1oA*Z=lBE&5imWMi+oocJE}sioac8pKY`Gs&;&r1j1oHfd_->LUCDS@qk z6Q~9HUH%t?od|vD4u&3m)Bi)TG7a^W6@Bb2VUKkOIo1)ua%UAGnOI#Aa)b+V!^K_I zyC779Uj>11sxKGT=4z7l`CW>4sTWcOjsFWAAe&nH+FW$43=}O$Mh+SI$0;WUp&6~O zsS?IJ=YYIQDV?Izd$Kp=9V{PF-lrzWO^}F7da72r^j0X;9`QUI5BT!~q+Wh!mb_A4 zFJ6w%y%+zm%SmhdZf%?bK66o0^ob@Nl%6iI;@%0VO}(FJ*kx47_!v3V!YQ z7k!x{;LxF?x_+{;D?4x`NnYt6sXTP2&VkW_>UX0o%YO>sGn$nGAmOBDUvr&$J}9Lk z(lDjJr6>zU``uD{I$A|l8#(WBTcgWMjGo!@DtR4Do$~7)It6|qgIRjdlA!Gqpth;btL! zd9PsJS`+h3^3(YT-6Q^ed3zlH_9?2$iE)zN4b>@{Zbk?W-3^pQRk|oA#ublb6xpDL zrOn_A>Osv+3_gdK$Ma9)7uT;-4eBlzthz){XXuyushJZSi$J}`q?MMUFcopt`o+Q> z6MtauvlnE6;Q7=Kl%7YJ|KRU~A^EN&Fa>ft?#^X*g{io`fZtNCo8NXJ6i^51$)@pn zzzA|fV6(sR$+c4X(^M85tlP`66)~wih|E9?1L==I9?XaPhWiy5^j!y**uC=ZdCjOG zRnXMeb)YUusyLP3Ii!k#xRWC}Ya(j$TaNwSH>8Tw0pl&yIghS@(-T)1Wirp;4=i+D zh1T8SxALA&4xvF(@Jd@wtYS^^{bjptFtbG2j5LB$aX_lL1*TGvwSbc~ODAipPSzMA zYjsW-WF4pmUGMta*0n|>Acs1~f$AiGn<7dhl@!=wm&&gJ)Y{fIbtJCLo+-DHq=jwNjH$u+v*fa_0pO zJT8@g166@~DB zfS(gwaT%Inp@os5&O$w5FUn%JQbK(KvH~%OR8ICc5Njh6TV<8QK41r;*hi%XC^4YzS|0Hatk>t45<$r=wL> z>I&X$aN;Rcs8XW;Hfq>VroM+Cga6W;R^HHqc6bu@%6!|rO&~~ZhHt0ISDM=?pd_I< zsYr$p>yp&vC^eoBqS!%x2rG4{^H56M6FR*E@OW2S&F{cHSmysqrx$}@(&;a8tx81i zwJ6Z&ji={IDr?b(LCEF(D6k#W*E!T@s8y5|*pAksnGYbNHlO;-gZ580sS}a3K9LLE zv^;St^*!T>6e_PW`I{Iq^5wXc6 zpFk|xU!;%0xgU_ykn55~L#=z9dM0d==nwf7+x&&zP>7sLkGw@0$Ke&oVSjJ0ybtp~ z;&|E2#9J`OrW9?CtE?;>C4&H=+;NR6iQ2 z581O(S-k-{p32$VP^wj8y;!G~dF(CxA=CJN3k@^Gf*SwzV$gbe3(N8w9V``6P=WRL{Gd%A;wL~0Xs|K+M=Z2}aYi}kFpXAV5p%=2`NJ%COkJQE zO+zehXim5`K+Uw*1!y3kzoM$T@?_=#BH;~$9o`|fESs%Ztqa&rqY7Y3z@guzin}7# zzY+0(zKn5?c3C11Z;0*=YEMd&4G|Ti)46-Dfh&|aIj|QJ$ zhEZM}JCRf+9pGqM=95*qTKVK%%!3a2Pw>e{Fx!89AN4^O=uyQe;U4F{)_t9OyeePE zgi}sr+Ja9I#sYbR4-YNEP=jDgWiUXQFhO!_>WrS;AEk;xptB$tnvG|S5!D^6cmWx5 zwY$$#q~Y$|uOFHW%7=!!+HyBYGq)fw{-FsAQf3pMRK*60)dIlf(uBi`#;84!u^<%> zvXBFwuEM?I-^(4Bj|=1q%5cjs5@zaNE_Yyuy&!b$;7daOe>>d4&frY}$X51jvco4~ zgpCNYr+gEa2CD4^xd$(i9rbRR6&0^&L7`d;P1NU2SG@x=KSPd3{!u;5b(AJ48bfQm z6W4kpTawj6P_Fr-Ik6lJUn_zIu8M|-#v1n78_XXJ#(M3Cz*&qkV^h6#E@~}}@m#u? zU~<7LFL$G;0-tJoY6yZB*QNsdz zX)IQDn0_VS(t}OXqSf>7f0z_Ah(S#>!E0cp{iqR3$kkPU8WVOpwN zt`9_#-H~R;+9RGe;lLKDP2<5vG8nqOkn0aN0-;+DyUUtO(Trkg9%0LkNFyQ#H%N=> z%MKHc1q{)pKy)N#d-$ZH$Pq_Q*d5q&B~Z3$^yGwTO5}kmH6pMym*#my3IL;uS6UR7 z7CP)9Z!#l=(Ls+OUa0j?#`m%v^`Ic1Y}J#_F6dw$xy~JO#iUtJBHxGEHD!83enc=r zPvqv^@J*IXcd(vV+!u@$Z1a( z;pcMHXrrJ)KU*n5L;CU9u1Te_@Tc02(m%bvUb;deF6p^IX2^@xzC%HfkaEul>6 z_qIBZGn16Sy^vw~Dh7_Z7ZF|FiEF%eM7c&eyLczAr(64Kubk=hhMp{^MtMVy3I|;g zvq`0D* z4@bRd3tip1VvXco8#$8fPR0s9&T9U54BTE_mgEPEYW4 z_Ncl5m~?sNg)&dcZG`$nnv><~$dT^ugGU339k<)N+Z$IOYO}}tY`*m2xC&S{$0P30 z$kzE48{JaDTK5;k6EMjBtReR%3i)#hJdIeED{|tx7g7T!1@}RliXT5gxT!_Ovk?W{0bb-xh$FTo^ zGhNdcUV;&GmXoRUIA=Oo{Kn~w#n-V*&(2_YPJ>VG>a6kxyE^l8)U*M%#=OU0>{%*di` z9l8hN2t)Jg+>t}c`SuN5D(QOQ-(1LI%GT!X=cjq zdDQy@N63^kx(`&_q1LigJ_O99CcqA&6{)Rgp1@jC@ehhDYfM$;z=0vx3 z=PFa*!+;d6^5ia=wl_MD*~>qqw>J%7#N(WpFErT(+q^9)j=_fx9gAR%!QBOe1-;T- zpD(LOCjKTJgTJ4Gzt3|1F8Z(d`zPr29+O_3!94_nIe$65Wf5DcAeuP*LqZO}OB{ZT zahUNp`iXTt;t%=V&&=<>Y-~-y@`{6hlI0ELLfNH79#2-JIbBYs6$)ax(o&@b%cuPu z4IBQ|{}8?395@!eI?J7$JDhu@9p{!*{coQdqn zAcOCSu?`xTMF#zt{7>QSIa$i)&|q5#cmmtfPq!^-426l%FQrA$|NT<$$bRXnT7+?R zscdd3l^4+wrssY$?PqQeqwoFw_U%La#&u`yTf)4)mR-8%FHBy4r+xd-zI|xlKHfg8 z8r2m4h4zX0uNVO~fXNsE3glH-tb^F|<>mgfxa9hVb9R!C<&ON2M5A~%St+a~Vi-8& zv+q)__!&c2?v9d7$cn%ivT~2FktaK|;0icNL=`cFMuOv<*&cY8P7HG%d5;_89HizM zpq#QFU@BWOEETt>{{P%j~B^QPIhVyd{M1E-Hu`eOvhl=4{)M5~)`CP?LfA1WVJ@ZHl zGclvwl8V{WlOA&YNoTyddy0SX+V}gQG823u5RCZ^b76e)VR(O8kiQ$#tXOP>eRqED z&n0g`iKwj>C8BtT#Xm3G5yubmSpGNp@gP{v{2}n;C-4Jq;I<@B=*}3qMVucoe}5}K z=71l8>e3cG@#QMTn|=0ZVxC~Rl<{OTv~Yy|Cr|D#C9fyq$?^F?{r7*9AH@mvBOe<= z{I(=bKhCi7V{T?L>4rn-MiS|U`iHu4Bf62$jrS7qL7(4S?OB|D{BQH){y)QyzAgFT zE~|#`6VH{cf5??f_v&1EGZ9x>*h9e&M6SFt><9YGOy{%cXa9>zB9%{v70^3QtYyc! zEadNJD}ZIe`~ZW)nO6QR8kLu1VT}(8qa^G&h_=h@#N z{Hgr!_|wnIpSi@JmI_2%+VV$SI$?Jlmu4r_B2zr@`1S_+^uKC<@6*-jIQEy;z6W6o zHN~K82z+HG50~a{t-Mv#czW+|dn3nO$ID7Mdh95np{|SC< z+VL0p@&B&9spkC&q94@n#AF){*f2WzIWaL{BTS2_wkw(Z3D}#7nlEx`D6LPlJHp}V zhy&LkMv9ntn|cJqie#)&R%0r?%>NHKI0&d-V#oCw`CAO{ok@(Ij6H_`K&F}Yz7W z&)G))Aymy>m9rD^ux!)(AL}q@p;gKgKgME}jy_&g%-vO@z}JC!at9XMJ-I&>H|X(W z+UHg%Wiw*3K@7BnXtemr`Jn>f3>P3U0h}vx!a&(gi;qfk(pp!hVMdH-d2I;-c&mK& zWp1QAxpl=~^NnJ|=Y*yfRA*`HmRY$X?93PeiLL@ZY+@Bd(K z(x^s9@<#c30D(b<{Bpha4!wfYB?>KxNHpk85VkdA0{bpSO9Og z0$!$e5`bx!jfr3lu!X;K0Z%7*gat16Yi2~fx)57bh!Jye6>upSGZ&*JX(;Z8e29Au z&wdX!Wxk3GgMLC?d~$T8)?bv3TTLvQHi-5^IzF6F(QoYJENPbdACew<30uNYa8-D} z)VH4a`lk7zl4VvhUr;*>G9^JK1yp)~3|xoMRdlF*MBXW!-kqG`jNhQ|I-S1r&8Vii z_7Q!%8GS`W;3oWn!d9RVMOTIQ2?`zN$4ZR;XC?Jfz zlx~6fs%%AY3UaYi%7y2kpRMzyg<}wiuS>=l6fTM=sqWHW?ZpcKr5>|P4rMii5}il1 z)gLuz>w0Y3N{NL;-&eSr>FZDQv9T?kLB*OO$kTPMX|tJ3|AU;wIhP3%=QQdh&IOLnc0_GJw%)(3<#(WeskA?5KCR!VXF=ci-4fh!`(>R^PQqM?BAf%* z^-HGf0DykZ0T?R-;xJ*hg;=AhU?ZgOde#rZl+sA ziEsdJe%Uju!}=xx8lwsTj_EkO4wqh>xA!FSe!!0^?+p61Nkr(dg01k z&KELPN8w>$H$aVB4r8lHB-+ItQPMq?r+6y!>~MW5^O*05WetCKEIo=98h2@oymc8N z&5aR-Jrafc6Tw>EJ}mh0wY&^Z?h0u}3EJn8SE*y^n!94!b{fys`;j{Ke3+;{cKcKQ zu>Id1ul-_iavX1egVFwK*8X&NWP2)W|H!!Z_ZIEf7JS%{0X|f_kitwlo8KZ*8Qg z3^+^&2M*Igz@ajP+@dnj53PQ_e3^nS-kw(W0l)@`CZ2R+;&4;{WcZi54E$%ppQ^37QsIEZ)#_2FB# z6LF5IViFD_s_}Hh9r=+zy{AomG)z z!fyD}IV8{Glhw9BN%Wc|D9zYC6ka)oyP5^ieE4wvBPE-1*5KM$vK~vHHE`A&ncSoG zL`5_6b2YsIwvfQakodb2eCSF5Tk8!q*~O%~lB>x&^##BnSWg}wR!_}ek`@uXc->RY zKv$?237|uDpm3_%yCE)8aNKvy#l1!_(%t$YO>C;t__OrF1pN6BndF`Y7=MU8%{gm` zJ9u~Lsv1nT1b3EFi>l$~lBQteRLDoGGo{2G&KhGsAtI%DX7(TofnFrovqpUoKnPf| z6LZ3Zu%J=@JdSE$(nXcn$<{hqfU9bM-)`a7*Ink2Zx+|gI5-(q_Yk+=p| zD>RZnZ*R5^4_lG29u?SL8VB?zGti}K1%PQo34$Z}@*zH&{HbB&t^W`uCFWVqAc9Bh zrc7FeXPvHJ~9mJFp7K3oc~7s0QKp)HyNZ7HhVn+E2z(2Gqu?(c9wE_ zse0E7^a8|1%~`#AC5Csyl^dakk4rG8ZY+HpAW5`i+QXF^x?*sEq(@A@w3HG z2>l^!&M}$rOG90sB2{MeX|{ae0kE?>jSsNqi_*L>c-YdbnR4DgbyL1neFGo~^otDi z&CHbVJ&M=7F^gY}L89-C1@Kle-ZOg|JCE7ZK4j0&AbV=E=l$@i0yfp8vXC*h0>PZF zK=s5ny@t%G@$jB#gox;3B4Tn2A{YgeOcYQ=)oRf#*w16w6B%qk?7bni zB4hqOl!1&nT@7Qt2r12&7eqEEaU<1H{T$y!kuzrqWs_#SjI?gQA7=KunXI?;$ORC* zX2GM&32P5vCG&*(-NrL)WFx!b&KF9nfLl$Lu44w3upy(9`X0W7Qe{T>6f$&k_%NBn z%?w!+I3Q()rK`g_N;Y16giSa`{~(@`X}P5 znO9CP*GD4Of2wY8f|&smti9&$__f+y!0MckFcUn(evy5JUtNlgTox)}zu>G0yS-Fh zf~^%q1bc|x7*>+_cqClK73#BqM$D>WP?@Vp zx>yDaO)g_Xd$SntulUa}?2Xuch8<`b4&CfvJ=W|&)~NjjrZX5OZg%d2dz`bAI^PtA z&}@E$Klj`~!~P6PWPh+XjC4Ix1hp@M-h&GGaMj!#U4^F;n3aW{#xnr7%O``%(pe>cO8h&1{wY2MX#%*P(YiiWjMm0s~>1 zj;m?Zp@{>*7juWjyCMH>LjE*+FijlLf6QWEuAVDEp2djg6NkVr#93qFAncEspKSgR zKif4`#`)W;H2z&DZ6pMR9)X%%8p2*R!djb zNTaLCw&+^B&TG=z`RdoZxYjPmH6I~Ibog#r`^mH01`c)m4Pq86KJDk@9s$VPiS&*i zQ32bEQ%>EP_h%vhf57LBcB(wVQ+cVqaySf1ZL%+S9lo;!k>gorVKC~>qsf|Ej>r*d z#*1)=+@+W}HpnZGqi_f3To5G`u48Z?5w#JMWgGUrV^yAM+*^<&dUAil=yc-~K@kdZ z?M#oTh;a2c<6kM2--F81Ttbf*y3!Fpww1C7*AaX1VmSg|7I8s5$S2HSU{6PWh+8uW zxD5}_@NXpmga$z0_e48;DpPB*@>1yqf-o8k9p6F1pVJ|yfnH$1P=dIdTVCyssOhY& zD?D-o!V4VVB_@0?V~|LMZx!Gj58r!n`1lANhqX>%UG$en(*f9rK+5?n0&W_McHosn zgJg1onS3@3U=%a?oX%uTt!L6X!7LqU$2+JRWV&HU1`4rMj^H^VnFd08nh9-j3$$i? zIP}kB&(N_ml>p*ZX2dHA@msY2LbHFc<7P9=TDzz}Ywa0A8=={xjmK#3W2kIsqlUGC z6tO`xm(9n|23DMikG_P&oS)Jp;tp+ne=-y>C+bOh}s1_@l?huz%8h4 zQUJG%$;$6ovxF>az!iBf;_!HocbBe=iaTS{oPKwK2(i-3m_UuMV)$cy34d4CdJTVL zV*KA@l8M?JKf>Ma$dOc6>2LPpdP2Qgpk@MjMb*`y<1ahotdgbuw*n%!P8-NNeSf6%?2i z(X9U$_tEr`;a|=1o7u17NB=t+l@0ui?aK*sgTTzjqc;>o_=k6xh0hqit2aZ)3}Po? z4+{-@xE#e8VA_!fR)ZG=Hg|z7f;uo{jq+01!li%NDm{n29mJd@6N#f+lKAwQ28mfl zJfbDBx1u79w=mtF(4#b7lSPDrER)Kw!_#0M z5hNlNOg)z1Iofv*HsZNxEs^s(HVJ71=M{n+8Z(XdGJ1|=>-0p=M-T<0B7zLG-KrUV zk%cGlNjkE=sqV-QuC}LFUTnuppgL8b0){lV9mF~jnKjt+7Ab;#XQaJHFOWyJ5m0xV zj4q&8Qb$w%=*C+ zVQjzp%RQm=>%TEou37 zJ8;-*~v7`ENY@!1sUS;qGhx#>3T(f8*ieRe$5*?3I7x z;f>4x#>2Cg#bS9OhaQmOLGDO%k{0KdKCJUdV#O7U=m{2G)lc5Xhb+lya5pF-P!qdW_BU)ET ziw!IqM*cC4vtI%L8Pe?xK=dmj?sM7!0hdoVNZR<$?a^qxzaQHk&2-L&eXo4d`6@0& zc#oorC;usuAMxZTxD?N~TBzsLLBLOR^b>T@^sEfy295YwHH_oW_|uKC&4b-vh>EXa zCRnWEEp4-u{EAXr8F(JUm;;Z51`XzqXIFadm8QX30x%eMY2ip_*MYf#8+Q0(ud(f8 z4emCpnQ3ouhaNY;0;c>8xJXl}w}|*D=-8ThUA#>jU)m)SS8T$9hzQY~_B}#0U1>pp-aiLZ z(mKIrv!z`G01=^Cr!DQSP@lqc^n3_c%_-iz)$A9U{jvM9SX& zX(bI0c-I}1$BR)JOi!@FyMzKH#-n?pHAF&N6A9PFks#uMy-oOAt_B=RH(~!3+)Nx` zJH~225C)ifidZ(}{o_xs7mmQw)QEgsjQ}l$+6DhOyfcjcrp0G1OMF$PO^Oo6bHxb@X~tUr;@jLd(g&JVoq(FZ188Tc7(W$sUtNq6q<681i$eV6{ehnh(+#9p`mdc(n)!YZx8 z@>qUoJOzK-_xO$m=rskHWnLC?UZc^+=8IRKWV2lyO2a2=F@NoMc!S0Nszvyf!d;sG z#pkblrs$>l>q&T8nnT}M!2H#dZ?o(&Jk0#BCFFl8!v8WXHZiLYXkQH+-ScES=wlS&N{%#V(b5WxW`KD` zV0nCa_eSf8?-B9vpQ!73s*kt=N?P^V9zG_ z-Avf;io;$?>dNHxZD+&Z=t=kyaxv}aigP&LM(xBy{$irRvZhu|EO-{PJrWXip!fd6 zI}lxs4m1ZTYX|DAKHCX>q{^^7(u`8%@csh}4wJz5C*j&yvO()Suq{!x9@9f0&1s;q zq$dz)V@WrTEJV$xu_Om+y+1M4!Fcj8aK(=&HzALYCxoAkCwzOKZ0Sp2&`ZU0+`n52a{lGHV2e+)xS4F&UfTwbjHUVSy zay}l`=d0MciaD3N6n1j4Hc#aNza_-U_Kc8tmrb*mmjSW=RALFXAu>RweHIu}44-+0 zTJv{eA)RVCUmgMwLv6HfqLC9`19F@?Ir>E0L=<*F7(~^n{Q-}fc?N^4&)ke17W(@7 zjg5fa)7W1@Z|Gr`Z`swg)w<5USY5T6gRjF?o5h`iaUsEi*1-(Jq_!~Wmi<&qQ4^*- z!Tha0p-I2kg#4v%5+WaJLf&G3E>_K0#MZQ-ERB(nXiL{I_UG0jmZe$rZ@~aq<&JbU zEcycBVpfvwLv#-0;xqUTcDb4r>dGYq0th@Bc@Qzf%H|SDi!dA-T*B62gn$_T` zZuc?#Wb6my4&ifslUHA)wLz#`OC5&txxX9h7US3hxcU5j1Tx0h0EP`3 zSFsIX`X&v0@5eBIi`BDq90Z%Nc0-N^@-702c$MZ28?Kdgg1<`r2{B)KdK0dOTu8Nf z`!Pm23D~KEKK8zZDFzWIk7otADgh3?wf#)kcHKE*6DL02X~ZsG9@lA*WAs=_f1&4va5+N3Zz)8AGs63*^P^uv?-o zM?{-gvlv%x2bgl}Ry0mw|7*piF*`tqagjlrNF`PW8JuD&0cV{H!`8pqasSYYpR zJe7E0_%eQASU@D@m`JKvrIB?1YAZ?1-)Pg$AgC7+WOn!y67zN2V>$i!{%D-j&zApR zTgvT2k+vm?eY#HcpP{&NT~v+vle2P{kPYsIX3Jusx{Dup+wjoo@n)c-Va z3}54_jd)okZ}u*c)_q~|F~uZ*jpORCw@=^ydMy1lqCJb%I|Z_vaivX&)KNYqNoqS0 z^(N`?IX)xa2{evCi+)1!PJIjFa<#R<6RS5Gb#$fHC^3ZLb0&Iw&eHK2`-2lUsM#F8 zs!?A80+P?uCPe>ifrz&OufPBwjgJW-^S7nMBw>Z>5s)u1L4H<;ta%>deHXv+JqF?L zCqw~%&#gGC5d=svk=m)hx!HLJq4CSP5I4>zPIU#V+ZvbDamILTtj>pV>pHnuJ zQN~}hcw!mZIq{JI^J^BY!*9Y-vEmhc_J&1{MlU+=QnpAF#u|f)*RO%bQOUu_RjJLNaN!W zJBf3m|4@9Z_*C`IRG@@^rd$JBjKG#OqYwpTG@`~g7dFC4#5WfzVbsjuT;R(cr!X>T z#zW(7dmyB-QFGITJ?drXH}o&zP;1e@26gcgE`l#{HHGW6FJ0*Ha#+01x-nnJ4wBoH^)Fk z+4sc^KGdk!0SZAIZ6JUY2aUnNE%vkxxeWIj*V#7-h9Scge-`?*9n&7BPwgxyr5Vdm zK!d`&`Zq@Y!?fvl=$ZK&BYZpA3QSxRiCaJ4phbJp(rm=_n} zD&{rqKWShCfSAw3k1wz_+}@kE<{O)MH=Bpc#i}I0w`Q%-`o!USYoFjK$Yhc|*53z7 z*efjdzE=I9n#=1=Ts8Xl0X!}CnWr!R(Dk9k_?WOAP0V--bA(=u+QiIo3r6%05Ry>T*vvGfW8*vQ$iBs#wRzRSMm9A zI~Zs&Kc+LB*?widEfrgcvA(XJxtY2n3St~HcS14M4f{ujqzP2oZ;4tZ>HRawFYx$7)vDIgqg$= z2fkiYF&cq>oELjOioD6}3wz=tE$#3wr0PUA^>>rvNENZ&C}~Tu^#1Cz|0v*X{h7gw zE+YI|=KH(w#0F$(_RHkoNEMf>C|!WkMDTvu$>2TD;OSnTRB?nrRxpr|2T+N9W>Ur8 zC`xXNuYW5cxiV4xD(r$&&u8_cq7m=^gsf~?BRx;2UKTN8z z8?$xwR)S^HPgD67RDN+>xd!@Gunze8Snx4^cCp~YH`xX0r3ePAN58c8wb2B2=$TEOrw@viHkWdAo^!IcwCzNH3s4L#+b$`Q0zL<6o{?c7XCq0eLef*$nc0 zq`*hC-jtk#5rEgrMMve&4keSy{&e|UzV8y)F&0P5NORtEZUBCK#RZ>hxovI|7CpZ9 z$T;Z)AB|rcO~b3^2*;!a4t4gQeg4VCSRrw^@UJX5$&ve>GmIxa!6~Wpl4j!r<2d4Q z@mR|@TZ&K+Rq4YpR1+)KZk*uDwbW8wXCohj9bt4GFniALe@Z{DgLBTlBzSr-d3ozw7x}sVZj?clDrbj!Yi$>s7pYjukZH)7Gp*m;f z!QWyr`Ot!gn_EA0aJzgca;SUcNJ=mIsu7V|9&+FnxsGRp7VJbFCVl8wpxzEB%zrVR zpAp!R#m^Xj_7^a<0%wfl^geOMxHnij8&pa&&$dJBF2zyfzR-jz`cdO2>h=k{7}yEp z7X>@u^ufJ!(zeWxESJi+0YcD4y3-_%;Z_y;6aqhkFUwG4wbgEIevFL|!A=Baq<(0& z|N5ZU>yFS6NzitCh=pAC_;h6w0DMPG0p@IWR%;nyc0 zWaldSAHs(Xrx@c8V+udpxS)*nA)HewmA`>Ua8~6&<$~LAZer*Xuaf*eK3*7>m-w#@ zUc$IL499lngy$m;YQs6c#F;&%Nj7;qHKXV}`qH8QL>yv-V-e>;{WSWyEZLdb+R;hs zV8lDL^594>J52Gga`$99Oi^A^{8%uL_IsGlQoINZihj=Yb3w{%&ddGy7D6- z)u+SUqiflG{(w=H(sb4(`&L_Ehd211lODx;Ci2=5@?zL;Q>Z6{?vb}M z@DFkDutV6|f?`>TDBa6(x+Td29hWD_%)of8{(yo<8w=#>=qZMNz?s2I^l9$EQKwY? z5TVBypx zvX3g0V_OK477?M=}nj-HcMI7|d!2 zwCOnh6lhCAp#07c(Qur!7cB)kfGBoRUCwcZb|oAQ7N8oq_b%V;logM zWJ@bgC@o3et~A5%MguB_f*y4=V8UNvwu9P|Ol@%^Qv=6%fOa!B2qtU*l;;E#I(bt~ z#}67Z9IAtM01q~vZB9~MzyKMKCyff?%gUh?CvG9*v?`Sju|`=3UPb~OEXt;+s%(E*j{Kv$tu?;*)Zc;sf$MKD597x~~_y^C}~7r}gpoJpg9d{645^$%a@p@Gy# z@P+!|SO@t~$}Sw;>j_?(68-P6vUMQ(+q+u-13pSW zUj^cG8g$yFMiMk3{f=a}xjvHBpuG0le{bR%z{J^q9?Mm9BMiYbreI>dH~EASvOq0eV|DcDQ!iE>}?Gv*j7_hS5DDvEJ*IdMg^@q7q*Zj#Vo*!Y)F3oJVx~J;!7Db zm?pKEHdY^3j^+Ro8^NqyXDhr(*vnvEI(kjpUP^AAH0u*03`#O)BKltPZ1$kC005$2 zY5s>VbU&s#hn1giz_cbW6Z50s$Syd%mV|H^ZapmF;df~KYPcwvS?S@rjoBr>Q{SpY z!s)C>QF;-4`ZB!z?8#N6^827r1aS)>>Qv_gshW=x-JYLAIp-wmW-uT4#yqf3JELG? zgEzTdzPy=cD^UNe5%M0T>0OSX3<%V{%p#{;2`Yk)%IM1fLOu~pmNfZ{X(6Aj{K#(R z9iE9&O+J@u^2s;L$E&yWngNOBled-0hd48d9rs=i;ozKOO)Nd|T(q`IlgG9Rnmjzg zOSOADPKw6MT%55k_56`U3mm47u|EYxW0HEm<&OZyB zzY3fu|Apy`^w>>ElFn2~k6n#hh+qkGg{ECGVq(~roQ%`HH4)IM^rPS5B6taKRhoh6 z{+KS`k%VPG9}g{>T7z-w&9_KgRnb?g*m>ZD{K6 z%dPgGgkftxJK`JOqVmgTNMr+gCk|cD*%;lSh*u?r6@>mm15g48Xt z9#x}ddVkXUa{&2j5xTmZmmR#wLEmG~>#O`W4hEnQxf-!t{KkA+@Mka_UdA6EhAE8$ z^(OvsZ}$$^6Vij;#28Q6Z|#UN;{;=xlvr9d_Ob={DfmgZNKvxphsXYJ6M5w+cQYKQ3vDYB)WW6;Cs?O`p>WW_EbiBNn^137fJ>IPA-zw6-T4gy|YMM{M?Lq`iC!PDMyQtI992$c^ZVpK02vFEU zPsKLT)Thm~({xqz>*%>E-U$3Op3>atMf(1<_~3ZZl`gm9bn=SlqhipNiY(-7ihKq# zd4CKRc0tgTeb}7lS~OVx>lHRw(gE+SqMro|Gg$?ihoHi%s4$jSK|kvtRhr@ds9 znP_Q%Z`q$RV5?B>KW2ZLeFgxS8d%lD(%ggw;tHpt(A=LU#+8qxhqcBg(8m>_M@g&X zb?8!o!);2WdC)YQcWv|Ak0m2AH%2*KZw_{wnmQSeoO#GpF@K2-A-}UBf_xTY*Kiy0UGoY7Cc`PqUto^>ew-apibf;iiWLOXb-1@w{y?JgOrv}<&IZCn z;F!<%jVm|BFSCR0dvbQ>9H3ov^74xC!{gOPP(VR$sp46F=a4Gi!5ziXmH#e|j)*Q^ z&P-RnxE0QOuHSjjL(>W{)J*Z(6)%F6-a1z*0K*=&qfq`+sD-$*vf>$=9?F->@1lV= zWD34ZLCEat)Osp4dlO?DUJFXef5II2a$dvE**$V zPmN1Yj7yJBKW>uz+V~Pt zGg+~Vwx*Sl=cl!w(v_xkbfFbLfgygLi<@MB4+8IRuk&`{X@Df9%M7B_7he>z*96OE z0v_E_`*iqH-!SDxKWG6zr9fUYjmyg?uU2mbOp`o9DZO693{(zZJTVhT)-}eO31q2G zGE(j-yfp%!+pi^IpQ!krxby?2bo_ZKI)Arj#mS$i!GIL-L(q$|Y}VoWLRuA0L5 ziSjq7d@+^3Cd%hhxnC=16qxywBEQl?p6&r$Bt=yq%k419htjEW z>9n|XdR#g)F5M+A-8C+q6_<9#rL*JGeNAb#9kIq}AKKsEYJZ+P)!cq*p?e_j8`Nho zHHx!8#6PQkU2S1!llE z;QFSk;Qnq*o~WNs^?#!Jmk3~ZA35WyR84<+Qh6Pf_Yvg_s60(8PoeUEQ+Yd4{v4I3 zYvsS;J2!VfLgfc>N1b8%G@*Z)HNgKJF z7^uU~54MSZVb#x0*8X|q6f-=yM3=wx2mN!hN&mqv_oTSAxqndkjdA4@;?m>d(qrS& z@%=Bpf5!LU`2KxC9K3jY5N|IA$JLLwFY)##-aeV_7v$I3Y7ZVg+05@hVGlZ4?ZL&C z=V1?igA0rC(LCNv$EO+Y_LC~VjytjkHyj) zK$Q2U@=03xl~m5`NgrM=1*RpnuqUsbq}h{SzD50?2;NcL5i!i3+^E6JAb53D-cI0S z_GE%q{y9DWZz}&nJkRXOIIX;a${(Tf8eVSLld;qniz!#PCl70NG<(AO>*cJ@P+=qP z)aq#V#M=K^UCo{h)#_U8iJjHa>`7;>j%H6R_GxDm(WlvypD0B(QL`r(P#YRp9nGH9 zXmvDuLcXMK?_OkerwZHigjV+kVSAX3y`I&%Ow^gE)wxjA8El3(h}G>O>Yl6BJyFz! zUGLv5gVl+_Y>^x~Xmxh63_dpK^!2hirQN(>SCPf-z~!Gd?@PFXmwr^ zbsRc$QFyCQmg$O`Z4ICzV#@QOe41|OXbkltX~A%t>$6vvAdj`d;x z85zBFoV}DW+(&nCif~)VZV^7r7(OaGl=|zR0pKzKcnknuZ!l=W?G3snaQ=8>&8GIW zuwP3tdp4I_#-I05_($UppPxZ2N&XytCgI0}!u~A5>-Bf{BRy)3Pg{_^$U=kvMf$`1 znK!7sJ(Wl4Mg0CXQ%&O^z))qH(lGl#?KRJzfR^w-fDJx}k{;@S-(>$OIu*Mx^T!jt zo77P-1w;?V*QAoR9$BVI4d#pbNLz!dnBUU)`mSkwHS6Cpue{Em0Tj?bp?VKuPtEZ} zCZ*?*v@#(0^gI$)1_?er55k&7!eTk8LR~B()7BS`qfmfDy2OE#Dhc4DqOa)l%S8JX zmF3V-v0rg0JjcLMs9h{o2^vQSg;HWnzN?QSLX z#SuQ=;QQOmdlj#)HS3$cU-7kz7!=xmHZE9+;1NO%o0Oe1czmN7>Ee+TYAL>!_7E1| z@>jMhj=##-swk`1LnROo<>8V|1l#|5ReY?(|BQ9BVkJ`;YUDppMEJ2AU_cd2?TcIA zid%2i_9x!7%n-pnV7X;~BI2kp9ejVHRK6WeFDR=cVL(3@5GVNl#J9&9`x86i5x9B_ zcToT+NZhMS#t(QH;8IL^f{Nt8Y|6yiDNnt{Q)77QBc96Tsd+qg3QvW3>bIQ?N86u$d0XeX?rhg z#Cis{CRR5v5w+Y8`L7xT_!8`gEQ=7Um8JPik=d5W#;TmS{gC>4AlAFEhg}(`VZrV$ z+UaL3l?ZV6b8u{f*HE}+Wxv@=(M8X6%S~=s@nRpQ9EnvCX1-yHFW~)BO)T?(#T%va zO2G95yWMgF{7Om>M%ujqKUhU?e?D@d5FT8xZL(^_#Bb?+qk_oRl;Oc~T~gTtw1d`@ zyD>jBELQwI7W}b@@$)zbP6udCxn$xfdur(g8Mfjjfun7t@(-YP(qjhzJ8;wveU-{z zz{7!~2#nfs15A(NB`f*Vy5Un+EMGpvE6-r0hf)H_t{d(bnX{=qp_J>Oe09U`L1HLs z3T@40H6IX}LTNLp=8RHg;zfl;s5}ohfRM)2cSe|}u44*2L#S^fPm%iS_R`G6k0Jme z6a<4$De4iEnF=XSoWK%Vxf(!aw72Z24fSwfAsYL@iP%*-g?201r5U}6F|?kTauW8= z$fp`Dr}rz6noZC{DI0l8wDl{V5{-PBr$p1rcq+`Fo5)k5Y56=wO;dZpM(OPn>nYg( z)*eL-=yt$)^WIpjcKAR$iNyi_5wnF@W}>KWc&f;p&2gQ{B#_p2{c9JZrXcl1Rx`cr z`ib6A_y(5QW%GTbC^O7qJ^^9W4ez>QxsQ}WG~*6dGi%s{AI`5E z?)>1QSB7Hy|JdAt7t{^!+c51Rqz2$=2xSIq=}`1|G>6W!qvo_|%up1xXw0qqC^N1x z6~9nsTw`pk=3v1K(U?DX6AIDP@ceTU;$G;#;_B({O95w zp1K+25z!yCU`9E+`%fM?`z&t3)UB*eCCm4EkUyK}9|fn7dW)y7MJ=R0;;F~*Y9dmC zQ>%F@%*%T4lpyO$o?=AZ3wIs}x8Qw5BBcuT1>J02l%h@GC{y%o?-+XI%>=(G<#ikgv>5>H)1_*iN8R3y#_$oVxs?Y&1N6*3Y%RA zuZkAmh84)F8$*TsEi=-y2{Btg{i*6qkfypgCS$Un8?DLka~Xp8YG zQpLxo0a7o#(TaTn>!s{{N*99`w?@l8jh6ETE&q_RzjupcL@{6xyQ-vYK;aY(pf&eJ zU&2PQJlZRB-FP$p*V+L8$|{W?gd3btUcf*j_~2=Qd(nlQ59guzj1_c>X{?F~$HWIO zp%vr1-gMpGiuK1Hz;9+=2lkLnr-w^MNi*oVN~1@Y%UOb+i_3mzgXrm2`7k{-(e=?6 zSgIzZa=sy-=aH!sX_8MMmB~k=CthFtG?s9ExwHjc&kRYZFJZ{Y+~h2vwkpf-Wblj; z3f4r|m;J3R^l0+h0ief}mn7(jlNakECcZqo;7`bFD)5_$pU56Exbc*%FBd_xe0kl&8Eyy%0)ayeFmvsJS9v_JDw6Y zZYN%T#&cm_a}`f9{)JLL<|(2+C#?Asmi1+Z&$7f^q<)9$e2MuLeg{u#F7E!u67yIe zEir%QoDDG2tOxL0fLHfe%dLyeLEV$T>0Vu&OoFEHlo0C`JSD_Bkf(%LJMmPQLq62Zpa`*k%Tpv) zUuaMoD9kzFowy5*qVJZSG^UQQ|KgLk3$i6B8m1|M-|s5^HZbHXOo!kbc12qXP#@bD z9wBeMBM&IkU8s_gH;L|0B_nS#-Q5^;AtxhmKxN)QbP;oe z0rLFjd*a(eSAuWxI{prd3>}}zQ$pf*@RSgBAx{YzpUqQYl1?Zklc$7K4}8a9lE|bP zcc9Z^;`j+(F^0x|L~k00I{wTq?dQ_PLalmrf4qmI_kV!C7xN#czww$o8wD*iciE2# zH1|iii*f{qUEVmJIf18c&XGYU2r1Q?q` z?9#pvml23*{N5KEry6LVmiEWumD#03rk)M6;Ki=vb;T#-g!f1vPo2OGZB49WqoANr|714Iimk#Mj(2F~K;h1gY z^7vq^N^WsIAu^d~0ych?lfLGYcTHIR;)Z}bbvPt3aN^_P* zgEeGBTa;Ji#b<;V<`hi)Tt44N_=081q_Y;VU%Zxa*cKDs_)n6 z@H+v8h{b-a-nbrTULLCe-EJYbJly<_W+I;Uk^h^ z{zQEJ-W=uyo8s%8S>sCaI7K$&?Cp^c%>IHNU(XxBpinsTs-U-!!n0L(a;FYP%T_#^ z1=lCA;QHjh5?oIjMy8*C2VkapBhz^o+Q;MTV_1Csm6q}KCoLXfv_g-spAEzJm*eXx zpBW;ccegC@^>dM7#MhUi^@y*BaY27rK+F*D|GPBpyi1FqXB@!`jtBhhc?5kb?+=OM=gNE3v~s|}e0F4^2%evgv4ee2;K^WK zp*3<&?`y|@PvAAgC8GLrnerqhkNZ7=>9E$qepR3wZ92;^!;m zb$E|b>1trPS({gHN9==v8p=UQ3 zd7swzOjF+%QG<`8BUKtQW9p@l{Tc||G=lLyEqGKt)g-Ue1 ziQhscI$q3gp%NX>;+1_M9DwUw@{BL3G!T`WD36}N;>jeqD0W=W#6mO<3I87jVIw#3Ta#7VN4El zp=v0Mi-&d#={D6 za!Xt=?31@)M@6m(hmn1-LoGnJ@&qEC(PcV6wD`)*4|P7|w!r;iAI=Bpmnj|wF_`#p zKG2%liz0?n>A@nav`K*n4?Cb9=+WX$A~LC@8Tc*nFV^<61pdVFufhRlIzEN>0r)NB zU&z;pFvkZ2hyz0&8a?s);m4>X^urSWVst&zJE4A{HyQ2i!Rh()@h^N^%0!PQpB?Y( zbhMO@B) zR`O?mrye$dfZ!iCCSO-4WrHRt(^%tu4{1!8RWpjDY<$-~!{^LW3b)(IpTw<{y&=l| zZBw);J6Kka_E_R)H>fnB;PJDk`5oeCVBz11pLNOQ@iW5q&=iWDg>e`6qJ|j2`xY5K zmQ+srvMnBwRDLV6S_aLoLoV~5E#48EP-vZxzn{V8dtN4Cd6|^GS7}Eh6a|{`g6SI| ztL$jobgUQmDm&`1;dAzvX&$n&2J3aqyrJ9EyQE&c-n;O1C{6!C=i<{>cXtBU{m#C4 zRqj>}V@orSgrS>bni}pU#c9K{|sk{jbG-?-E?mfnSNHH}Rt);5jJ6i*4M#tJ8>^D%OB@*!DpvgW_U z(1jy#a0J>WDHDRRKrn{A-|nqgg8;EqUJjm@9p-}F2f;pkdD&qSH~*Fzd#g4|_LKTY z9c{{!%JHT*(%2ONj^SB^9BuydbXB15yYejogRdE{zWfSRVf`r;fYG0d--SWKQR;Z% zc)U6VZhTX+p##NNH07ChALcdXnKmC54{XXazf07!DKFjhY^SEYOe5)c>FZ%)|3L=} zWhtOcn{Qu(9+y7SVIpiU%`bwF%|;7_n3zB>qKe6)0G){BIz?MEC}NsU z(bf!#n5I*-HG?9i=@etlaP`&1ei7^5B=!}Mic*2mhjUq~C?KQ9I0S!z$Crw<;u`xvXu2BbqSaug@57_fusQz=fsQrDEP6j-jpDy6-#fLBWhzxk!UM2=1 zK0&(y=?5cJ@1-2qv*ZmERzaT&>cl@)qv;aBYr1ivrcwVyp7J70ENf?tzmu*s_i)6@ z6yU4^U>5*u{TEo1z&MW+eC<7qcJfBQFJU8&P2c~7 zy^hNNL)*K+M_F7C|4GO~RN@nmC|)R0qYa3bsMJJ>X2~XOBq$03R#YrVsiLK_3n&O# zb~j=BuowlcRjYWdTD5owR7^lv@PdF>E-K#I=W*2{SOmP}{hpcU*-L``{r>;=^YYQ` zGq*Em&YU@O=FFLyms2GIGt_D4IYNhaH2_WwwW|r`>{PQufN|-~X7Y7+i~fvHV*!yc zjIycAk!E!sdlaeC9~tRlX-}n}?xySfthFN4opRP~vks%SWJ^oxcDWL6{`0Fd+zmKy zc~Y1=cV4nk_Q?_XbL7zZncmP3Y8LSFA<`l+E7gh@l;@1*!pknd)H}|8sV^nVATb~!W*VFU%km9`EH z)p?-k0})Lx@YeRX(Q?0uGft+>z0esszxT)Fich&^U>kBzam89c$D&KLP!#_y20>t? zBM`~&463`7qlV}U12400x~r2sd`PD}tE>^=(-1$mpdmhlD?U}LG120okY1Iy`a3F z;=yX&ol?2xFNJ4E|8o{-?^;hGVx6I0D>p8jkfOG^p=R;G){ zL{%*1I>@)5;paiA%8kf&)j9u_pP32Cl;Y`svC)?vnZncW+~LqWB?MNJC%N^&{0#Nr z;Q1xIO_e#bM`(R^KH~m*70PTTx|O;FQo$Y7U>2>K>adAU%gG$+Pt@2kf8K z*}0w}m&m7v_%QglhWkvmDlJ)o7y}#seEWtn!qr?WC< zNKBp4jH!%S>@-QQAhwm?f#t2cS8ICCn5c!rGIn8errDu=d3j_ouKOUgFP9?My`#pb zx`iNPe1!IulemnmIn$mE?JJg?e-G_DoZsnhh3pc3!~42TUsv9myiMq-)u$P~L;DUQ zY1-1zzHa;m9_AijSsb;5>_Sx}clxbF$!)SByBmsDc%Nr_n3(g3;ly!jzeHCh@Kn_` zo$*ucwWg1D= zaGshiX0`uVflvDt9@U-OuliZFzbka){cT!rG$#}d6lc61+UJp_ z;VWrgm=0YOA1yVSajv1)R4?79do6GWz4^ADZ#0+9n4HN6%R~0@s)6}NlemhI`=NAu zWa6Dxrm1K|r2WRcdHfC8LSLw2G>KaXeJvZ!iuhUlCjDtddg&~pwS?@06@%m%P2vwl z!9m12<1=InUnr;_>%`t9X7bPfNI&6|$-+O1O7PF^ns%+kZ`536M3)ekTs4XQ7JXv6 zKTSWOcQ*Zk)04NS=^>+Z2K1J3blp_NH(Bjf^cv{WOZexyU#Dm_<0Sjs4(*X%4)%8F z20ofzrR0LQ8D9>uW_)885tr(!86Vp@D(ui}#wL3w1WV0FSP3?;Eo3fip*_Q+>y1b< zR~(1>$!;x|$gN8jDS2rY4M%&9eoHQ;+p(vbG@BX;R`sNXfm58oVG=mDUic6&?(G(6 z3HriMw3kLn5uI%-kCOBWKaiI*y@;2cJb&bCmw|I4Rv-{DSI#FN9!Q|W^@QcyhMPwY zXH)htU*&CR6?j-)QZ&7bFZUx~E=lzT;@(cN;QJa8Z|nz!m=W;+z<921c%(H@AKS}y zn7g?%GxnZ*aN&H&E(PQ8zC(@X(a?!qn`7^1e`rFl`RWn_w?7+V@2DGf-Eetp<@bK0 zZm+j;dxKH4Be~4Hv?TPszC4v}?;LaZF>-f%nRVI=*zmV-1JS{J82?x+SGSiL|JWPj ziPe9+y~}U(Pw;qEj~w}0C0{6#X=-Jp*Bkv``I&U1|L}rcTveq3sf2tu=!MRPFAq!lO#7V;d=ym06>2%V|T$p6vIA_R2to2~qMnIDwLHMEd5_V@>-Y zBgvZ2@fakEt6wEbCJrNVkcX(|bxcu2i8SQBD54~=Q340)%rYMsQE|n}KG3CfmfKpW zL@f*bT~TVyo-lckrR&CIcfVP{roIvV1egcncq7uA6y1K_A8f4>&Nm`mRQC81;PSp; zT6LPN$mKUxilb1`XP!mevOvb61?T~YxW&>==2K}U@B%}PrZzwkl=;SpEM^v$bfftO z-8@;e;a;Jspyr~;1>~WCOh!iZcm)uB2lJ{IPY>~t_{O>hEal4O6G-JLDPL)cAZyEU zBQ5_af1;FcUZZQ5L89*?Amun!XAZqYK&AvE`XbrTi@YV}t%iO9NPGosDXsJiGRmB5 zL{5_iG<~I^dQ{X#L9yvi{O#03fUG;+0SJN;tVjiwouh8BLsOz1vKqf>6^a%qiZYn6 zfU>Ix1~Qc!5xF{)fXHPd{I=8$Jx$NS1M?I~@@ST$VcS-8J5yEO5-@YYIPwbsq6;x; zXkv?WHNv-P&@#maAGhZda^(g2Wg6r?SbB>61EZOneuR9YjRiw3_9eRLL5j7%7Odv2 z<1ab7OH}hE2q*j3WOCMnS?328FGoR>e)h?u6R`Iqbpccc!3(m5~f?Veqsr53|!e2TJ@ zB&YOcq1U+V4D}t#d%0mQ6Mnyr>0B_E znSM~m^oiN&Hr7X}wjeutGtrzki*6R7Xhe3xaXzz2=5kXVMe&&nW%}lj*`f6ZwbtSn zb%vNEPAy-bG}7&nsJ?zPkCi!oRTHX<{E|Pnl{Xyy=7j~m%JsqRyaO`x`dv(SaPGyP zAzZJ(1k?XqH5J-3sh7bc+OrY;g@fub*{F(thBKb)W3SqMDdP4Qu6Y;Ti5?IyUaEcy zC-TGDJZl2#guVTH@my>5hIi!pH(3n_wK^kgY^&N$M_sWu<4BRA&+GMWH5lpXjx)!c zv)C}>3j^C%#wrL$^Jb6jJg z=9cg$3~aObs{Y7lG|*?j#*xqatk2(d+Zs-`Lnx*Yc4rI4KfiDWT5q8?A7Qshd z_pmqKD6hkDlyAmewn!L<9zbhQ&>Vjm%Bu-OUBRTf%BsXu0WJ7eI*7~J`8%R7-KZMQ+9Lq%S$_ccP z^CBHQj^LygGbCVjjOhCsrH61P5WbQ1l9K9z7S=!z;*sT|QKbVFa+^SosLip_1@>F2 z&4QoOH)ipn6^B2O(5ZjvSHHQag{rH{AZOq(Gc1FdL3&WwQX@0?oebRzouPZKSaLU#qV%!-(jTtw`J)cV%F>87lE)d{s^*+X{97mwSax6eJF!#&f6D>;wt%%a zlVef~<7f}lB+jEobBjZ18mHQuquOgkA10@Nf^M{ZCjmti?=qpJwGH7btqBwF5QZP_ z6CG2)FP2&m{~c**d8PHQfW}{h)3iU)D#g5!I5`PuDK?e%nx6hAYW+?&1|9ja#d>ga zTEFYq-&($&riqoqDk8X|^LS`#q_KJh+@RM2T#~Pr0s$0LwO!Bs7`o1uRWJSL$ls{Q16%HwAx3Ge z;RLfJ0g;$UUrFvO$??V=T5uZ8a^H=;MCSdJKB7nag2igIAHol#{aAjiAJw#Tw=j(*hLNTiFaeZ-JR?q<4^9dXsG&Ee~#ZqiNzYzvh&yR??SM22vhGkx=-W&cRH}+@IQR-uz=PCM3 zC@o|?)s+VgCN%XHpn`BFL-j+~o!;=|fw|V^!)a`)MDSf^IdgHBr3%32K*7%NqXoz2 z1$hQ{x!+WcPNT4m=Wjij$+hw!$7XgIEal!YJV=c}5rxB^5w@hxDvaNIT zRrAF0_hWPZM#@-!u94Pc&$44p)vgA!xlwAGu&O?u-&$YU8a&ET^|gLlA8svZs6=0r zsiVHKckpZbGrpW{gf?sTn{;t2F$hM7c(TKh>hF&J|LVQ2_pFPcDcx8vUMrJDjPYKV zvEY2ZaM@oeZ8stx)2j`1=n84~@*?7_Um#3X?{i!8VPsBJ_sYq6rY2F{Tm6uQqaD>{ zQa({VK>rNXKh^rjr+@tV=XCv3p??PJpJOx>q~YATiRw}bt*suOlL%{yfI-|8vO4~k ziR$jU92iRN1v)fVm%Au;ZS`pWACsG?9;Z{r>z|1_!zkd4$lC~WdK!<-qn1XJdjKm| zGdWQ+dmvwaF&y!4=gSFoluOkUeoVztV^}B4*NdsRb*Zn{Q(y0=zP6{ntkl<+&KIuD zQxoA<8VLP!)`oXVd?G9cKKW-7Z>%wI zAj9_r4r_?*C)7^_LTbFEZ=rYZ3(N@WG)g?D;H+ly1ZRi9gLb`iO%+7ew%4O zb^pgV)+etMjHMX$EeZbY{U2Q0@ut-pb-4>Kg}A?nM`ga^5)0Y_&xwDswQz2xE3?QK z$6i&z8)tHJvo$*n<4gtP3+oYqA@X2N;0oD|o&pVO*?p3$SW8kf&S~H$R6B_(WCvf} z4!)ZAKTy+L|7F|y;7g?7Ix${Xi=56%?!K)(brF&Kfs#V)} zS>M5DL~%eV@JH#fS%}p|oFT(~e(f9&jh$1LYV0iPk@}|H*s-yVV6OE$b#cp9InvZe zw{L?ORf>GClsL%eHzVqEE7#7olTW95@K_)xA4qN3_LShQuD>n(#yWAW)jf^9&*8U9 zjlJ;OZ>86!FvG0@d*Qc%DZE#&S9rr|Y)W5#sr~e98FWl2I-Ih{$L#vpH~Jz0>+&zM z%gm)r3f=1fn0!2i?gR<`9KVg8m!i4LZ(-(tm*2SL`sev=KgUqB`EBny-32>mb?kx+ zetU~do%t<}Qvxb?2Y$og!4#>btZWq`kw8ssk`@?zcp^I*`n{MyELG@n>zfTk3_hiQSm+-xv z@O>RFb-3Tfci#^wd{g`rRYcF^pD^$;k)5XNckxN%o54Q@ieYA%b10KS_*6kK%|FLW zFoS;vX3DF>(^$LwQ{!TdyfQoS5BXhrwSr^$+5EF?t>&Ml*K7VsZ%JkF&muB)=ASCO z@`Qibyg^zmE|q$?J%V6qtgGzk#PS%zu1q>#VBDG|k2;R$!HEA3{qcLz^HTGN=AZv? zK)n6!eqNWz`@X8|(41HQ{$B`rh# zL>199`KP8s{io^rJL8+dKfl_UjdS~q4F1{m3J9k8=Tix0@K4r!_b$TP!P@1YE-u#a z&wrIaD6Ogn2NL$S;3~O6|zFdZ5x5tdraZL5INh=vVHmzVpTUArCzd z#F!9nE3$^5ZmO0;I3x15N)_65c1Xf(U=EqB3{^&i^Pig74d%l_{NYjFx&DC2dNT;T zJpm(mc)dx7h!LWQ_~GU?EbqPwejyJDmv1Y_;5)mt!WNk$^Jlbud2jiQ?BcKWMgixP zW3>ehv4QT34ge!KxrpPU!vTLT%fq^Xxx;yUQ(k8KfnwBZMBb&i7a#1(x&kB0IS~S* zkEtAe3|p2eP*+mPliN|bUqZ^2;t$1IH@ETwW8qAdq1RoU1r^8E-=hQxp(?Dt-zgHw zsw+BD#U6k_;}ubr9I)Eg_3lm5K|^=_T)c#O6IfJO;ura|N65FNXLrYFDX( z{@A>AECUkr+|`PD{!hqJEM!zer$hHUt;?r2tF=`SU@P`=Oe3uU&rVsViyeTovZd0D z=(gZT3gxu^m|9PSDQtf&3*XpU`x}-XdVK0}Yqkh0C8}qOts5Q>9%6&H;t!suG>1ri z!EeQO<&WKf!3UPjefV~1=mBxIo2bWy56A1y$rTKy2nGi%q`Ofy^u3qKIYi;QOb|=P zdFZoBa89oWN*Iay%u-PN+ugOi^>^g58dj?VR{C8H+XomsPbQP#^|hgj7k%g)%k*gm@4i!bHh&vdFfqeXTLT0?2v@-LE<3C z^BMh{yM)Fd%l_iL$2&hsdiebZF<+j@mPne-~LQX7%S<+GH}z>(?2zbwqv)`*(jSIeGOwYY86 zOvPs3>R%z?#Yhm|3o%Dd4ZP)8ZRMspTYQzRv)@;~Wxm**(gVKOqWSzJ!V9Dl{-q`c?3&3nUUQ~wDGZzH zHT}nc&NrcU@p%cHVhy_;KbL*n9Cn<1wDD%|PTuqU?i=mH+(IFZzkL=IwEB<_gX15H-BG-Yls*4FBYIx0^of3%1y`Ws(*5Z-y9l|v@!S>taFE}; z1oCeSS{eQ+f!{U6n{p17wc0`~&N=1l8zyY3j}OVku3F&F-I;LO+lr-aUGSUwwoeW| zHy$}W=U`-Bi%wLgAfZWXftb*~U^lWp)S8oz&UBvu&5AFG?{41Mv6(0(f~kwicM1eWk2u!CFlHdB?V zXk|j}ImvfIy+tF?66zHh{U!V(|JH^y0wEWHWVpp_md1zo=FIV9p={*ae^xoyY0}>f z@%jSc*+c8YZ3Xpb{c*1mxr}HpD`hW4wi_n2@_BCT^tPA+;-YRu#h=iDmUK}Sf*a93 zq-b=db)67$L8SR7*S@R&m-H$D zn0J|QawmE{$X3+8_#ufcyz)9VxZUGbL)86)zc1pf#As=|Q^a%b?@w&y$2 zYyDOKm0roigt;_3$smC&fs+-}Ss!5|_M)-PMx)v4T_&k88^l!Xcm+FkLc_N@^PGJH z<4&(%x-3!Tw`#!4o*)A?t!#8=zh@4>Z|k%8?V=RNmBrqukG*Z}|AQidIuJWmMDLI6 zEL_A#U}U@&*7?*QpHnnEJ|&W$JcRQ~YJVs-K7UMR(ocl#ozH<{wvpOy{yqKS&gTnh zQ0DNwTV}}E`zI->Ub$w@HM!fO+vc3fwp^oRoWL$=o4@UoF4o6CC<|+#Z*1#Hw}}+w z=2FQLQxGcOnRA+yocjhE%@RpraSN40h2hk!rRBwMp2e|h6 zlq{JhxX31E?H_(5K#|U)HIzG|lE<%{H>QnZ3P|*ALrzxx*{}sJO zT@6!`uKZ`_9S`!(qq|$I6Q5!GIe$qT)B|C`9!|wdq*Wg8F;cDcbo~DOEofjYuBN--r7Af1IWkJIp5om2}C^| zo^G$1%R+hnaz&zMc@zUi^NGi^JdRO_mMsoYr9 z)CdHvAT@NNH7-iB2`Tz^db@c>K*Dm=GgmfE9Cr@-i#4vb25zvIQU*sA#N*>KdM?0~ z0iUFMJAqHFOYV7!ZcqYCdkrx=i((`W7t>DC>oL>w1?vy74a|c~DeL-`QZjD|m7YbV z3Mq|=d~#uyV0F6s=Cl#Ws)!2f7lP(Nl*pu~>b=Q~^7-E3wEPQMx25(oPyrnxyYy8= zHHS{|R(kV|a9_&7`Q=}Ui_{<)Am#-)=1FK6A=%Jj>p7~np6e%Ez`4CuhajEu{mlao zcM>1h`_i;Aay~^Q7ek>soi%qC=<9QMGCqcMPo&0zT}@*knfN#vk$dS=0^;Wsn8}B7 zON%a-EDn=~_@3{*D2u=LW$qVJN<29N*YlygIHEUD#9l=nHNR;8g8kE!f5G4R!M~u5 zA8Yjokak=~Rfnsp#$;8s5HKz(@`l%Z@93=bYgM|EBO-tN@$;uzuYN9MM2M_0BJu`~ z-+Y07M?kn81J66`EUJeQSx>4HA-bCp5e2+66XpX&7NSQjb!34p{y|_@mAerFoW!c; zmsPTH94M*kB0on~<;zdcDv$geQq`3oBl;^)iq(xUo*Ox(yfuOVd=w}d9dxH?KAE^C zl(18K%u3S9mt9CMMPE(@C`U6_{=*{)wa%aoEG=AB--z^JI3((3i#M1uh*_)tBeI~( zHG{cJ>7C(PF}fuD%_~~~(Gb7#bPbU5Xcr$_Uwj0)hWE0D{E5*!ytlrH-0DS$)L7F4 zWV24(!I_&ImB9!b(e0uE#EUPOEEu`cP8p53XdZh}^2E&XgZ*cQT9Rkjf4;Ly1>0yl z_MbUIp!l!~HNLFvp8{L;wi;(f^f6e%Uas<}NkwOSR%dha+$MQ$l{~S3Lld>9ubZ2^ zvwnh?k<`kd+mSDeP4OQPH-hep?oUxNYrjC>{{i!BcTssFiT&9wNc}5`R8l`up{AP6 z5QZpyCgL55YM#hnqVzO+I)x-4ToOTsNkGm-1gE5?p?e;8ST8x#?QeldmomT7KSom_ ze~Hp(5SB2t8m@n-K7Vj2QKakh2Zj!4PpsXDI@SxO=TW4A$j|$_X2{PIq-K$yXcHKP z)92{{rc5Nwav3fGF_IYbo+E%XEy`t`eAQG$&AeA=eYRJYFLM&oLb9omTxvd2h1D!1 z(~&+XP&btU4aymFkr8>4h)!b_sXPiftL7v3Jj17u*Jyf^3cymIXBeTP9u-n&y;^m2 z_A66HWI2^M`ekY^I_xnh;><-tk+i>?(g(z!QELK^iaf03j~cH;Yh`0K^d_LsBTUzQ zuLY=hx2EPBA;dwPMQxL5X|Q(GgK&ebk+_iB*OC<=N=b;61F^+u{zAjjy28n1NWMT8 zeO_UXFv+|M-BtR$g52+w{7b4nvK~hl2Bz|%{4t|4zqx&R_qEcOdnv-aB4DjSn^7=N z6_go;*|2cuHBODgoPs#TXA~SnLDe5FzOP9BdB1Qnb7CPQbAienfpyYcy;$X!6H-#! zpWNC$P!T=6_)KR25YIe^Kiv98sq#-a<%hWC|LT&oOy=|gq$>ZIHqN-Uc;*@}3Uc5Pc~GSc+vfS=s&*%80x zIxY*p2Z{UN;8&f-FZ1a&`w}(Wed+%B_G;LY_F{$njs{Eg`867I-p zDS><6Lyo|;XR7KoziIt);qR4xIgB6l%PaV?CcK4yIhdT;PXrp#GgU2rS_1W)h2?>V zf-DD|p&$>KIzwTwy%VNL>nj=lX4?Pfa=?l{vN~|K+M4;os@tqDw$4a}*m^w+Rg zguj6DUFw@!rMM+z>{8+ux)IMhz^mh$0it;xo=cFMlRTh+Bg3a|+uABQ$nHD%N z$YCj5xNYm2?~vv%rkn<@1z^S={N)n7J4=6Y{PELQ)X7DLob27t|GTZTFH5y%kZR3- z>*}peR3b2wzWd>2z5AYaz}o+SZp5xJG9AgqV(wjXj^}hQaa4C5$$ITkEs&;?>o47&YJDM_Zptoe#-*K_@xYc; zGse-3L8=+Kf#XwsahlVNlTyt<^{Ku@9%V5!(gQLP7G$}t&HC~`V3bJXlS1{=`$>4B zlfTdQaVgYXf1iU~)H3`79(?Hl{sE2D1-rNg9=mZgupDcTtB;Vbnq*C&{>;oH$(-pQ zP$T$d_$Qqv;d`C?KSpHp2kar-QIf{p<&NR+r^tFGWc~U@%^m$xWZizB=8m^7Iv{sw z|3ju!%^xWWXEK3i3u_+cg5)zP`i23Ve9*nGM7WrIqe@3uH(ZjUu#4s2-b-QW153Zc zGPCo4?O=I|U3L#Og0&u`T}_s&vH&3~iohD9`4h4c z%o73MBu}&u5Mzrm?>uG`j7F!ZZ@IdQ4+&AqvQQA`TIbijos|$He z&j-8Zl4b3%k>bIzQi-#e(GAur`O~_&S|yi5_5jn1Bk@}$Ao_XmQCrT(xbr=+V)EoZ z_SC_e8S^vz1M1BlY*Ntv%2h^ljDo{CjliCyag&^_V8_{*KTXBf7je+TxM`A#U2n|4 zln);!x(d}`u8SHd3#QX)xpNTbLYzPCw?x;=IN>4w9QH#*X5c655u;fylVH5tNh#qT z8JVpEdaWSJy8SvadQQFYw`xxP?g}-h780_I*O^nFC0km)b@Z3(&eY}1f37^MeA|i2 zkY^r-Tql3Ijm)f>B5LUciVyVmx}$HTc+XevV$1Y|X@X^x?^j+DR?7Z%KRS8=>*+Q%5|QaOX~ z{eL=MrBAYOoWvha6j_rG%|6glCZK8ljx~591$!GejS&IsGLm}}m;Tl7vBWl5(?+J~ zJS_ARB0DE=JbP-)ZS@om3#t1xbtU!@Dnp|phN?Dg4@=e8 z<-gVU?q4$NTi4LBK3vr@>-(F^@ZalObYZG}XSwZj1VUT+9&4hm(HaLRb@@M16$OI} zccxBB{xdDlo%eEeD*UVNFNA!jYw$+oHCi3|DX$fjBf=(gszN_?QK2T4BI-xrVwbWa z?aHiw-A;35n@Jd~&3b>BgTuhfR)Z>qxex89Tz-Sxaa~j$Scyu&`qlI1xV)Sj-cTIsVZ1(&)fc-kX&MkIibZ6t#B!*=e*i z`SWvSK$Wd^FIv`Dl0sj~3!IA3_p1HNKz(X}1qREXV5T>`MO0p;x*+x;ayr5~MlRZgcLG=F~gQ`J>aE?EaJ1lxDW(2wKyr zF%bZDYR~hkJ;_%=UZ>NZ-Kss$XS65zXewQ`CwWIIOnbOUbysq}(;k-}A3!YA4jyfm zN*#Wj%eTvqfh%Dx>6+nLU1MExTZ$J&KbFq%*LUK_J`O)}O*;ID{dH$j-@j*0ot%74 zBB!cIj(fps>hoD8@8PfH-_uOhqU8Z{QQoc}q;I>s@i*4zNN#6F8YeaZ)B;Boy>M%$ zXn5SuZpyNB=3gO?l;UnJ%E}idpQ=B!Pxx|fZ>#19w#(!?R~gFb@$KH1b^~J|xpmUd z;a8ik^0I9Fj?SvLQ1I)W&Rm|tZ};NNc6>gxBYyHeiyY>0Fm(Cje~I6NNMMJ49q^l# zRqr*_Yt2k&PUAN+D_?CV{8ob>>zDtZ_<7P*cIe-2i!$l*MjiOQk4$zNlkVTAv+_Mi zzU=7Ed_~qpVx8C2%I^0R_G_s z5*6{KMD$}gWTYSEa;p~a1%j#)@7r2rJngNeqmt3;gEo59hF1_}Azj@Vr~nZc%qumTybmoRSwA@~&*B zHHVqTq3kGb%AZT2pSf56m#O9OnYYL_9%8qGm!WUJR*{>z|Wd|6J;y&XutTcvm2!{hjOo zWp@2D|4aRj{_~pE#jSd6;A$qfjY#4ed}PmwFZ$_M=(GECr=K2Q^n>%s>j<(tj{2>5 z0Umm$MTUvobBz45AF6Tn(b#2^@noNZpUB4~JD1Trxf;o(KhyeHYP~nm`Xgdqb;jC2 zkvVoY$n+BH^SPADRPg;`xv&<$K;{mfR%6*K7R{vjvWfl)%AL$_u52Wt{3~y4yFY$R z!e9AOfNPGsnJp3>+Als_M&x$B{btQxe>hnXequhMTr&D&-GXleN2lK1LUj38{`lb4 z{>txzJ(6eZ`4NA(0)hG~9H(PnG`Cn}L&>%p@S~O_^R^|#)SHbv`C;(2^Y~EZN5M@U zaUZXnRYm6;KduZ~aaDs)vnxe`%z30^P4nmRN99LFgh8w9(U+HnN6A%x`KtpZJ z@-?g50cz27R;ku(0fu${CYVYCn)|%eGKX3^QOd5#ppWv0$K8AFb&ntptjFJE+Pp`% z%sCUT-vMz~9oj##FxuKB$7)$AmMxG}ez^%xBay;C)*rad&L8v4BrN>O1q~_twJL8G zUMl4WO16Y&IN$Ow;W@|o(uLG~kmm35ZGN8VjTas)MQf?rEIf=)4igOXDg?NCsc()P zN$T_c%UyD&bN<7#hmY9S+Soc@bAAiN3hn^FdLqeYT>*?(Uv9ig=0w2Jt?db}B+>u;iLgjJ`Iq3Ng8t`E)QpfXNd$)c zlXqbGO4N*(L71qSB0pAtx|AD3MC>ZK){#1*H5E~yB8u-lPYj?n#h4Gy=FXPjC6$%=~GDe>+~?` z;aOAiXIyI5j7!u^mL`xokW>T@$ERX76aA*94+79r^CBdQg$p1w(eks?Z#>y&0MWr6 z;i^x!=jP}EA6ipjI2*uQnJ%$2z7pipeB9JV@D7ny+b)_$P=5~%)uulhr) zTci(i+pHO?ggF&1%#{+s4dJSJfaDIXGO)7#6%=%679G}=(&g*DFG~MeXJ3!_VEf^M zZgOJlV`~G0ff{DKBkWy#l**d$OeCnXpF?&Rjz=Y0Kg`q+KGno2Bi5R^Ax%glvcn^E zDJ~&JChg)!cgip~qDzTi>q#yL_FB*TFYqIv2a|P(WQ`Yk1y+NDVXcB+e7a6Lksmt9 zx|URO_9r;s^Q25HKfIyp=E$lL)6Xr`3|#4-$R{En;wPJoe|lqp^ak_I3i;s9nTA-P zl=n3$&9PIj@m$xzC(rklo@7LRq}bpA99rZTCxA#Rzv|5I4!Ul5?91W(zHOMm<5R=p z`RkQWUU;^rfa*q)&*b^3;juT9rD^%foY64hdos6YX68z{v&G%M zw_sEGO7OMeu^l|(DN!dA#SmTIIJ@+ulkqO2TPmrphdV}hb z{lnse+f{PIgx9DCME{i!Q&r_S6`mz9VhIWdH#AI`tyatg^!cB}VAV+Vs%K{)?EPkOzb)`_{Dh_R8~q`j4;#4sp=cT(<$(bl4vM`eZ^gyd0^J{;S&$QaHO)VY=+Iw!!-$@Z zRI_E*F4f;MhWt?ML`a3$yOfbHR;X*p(?D1HZSjug#KDWMd{tyFCpU%mUZ{|s=?Cf6 zOF{ad6swPq#@}{Ssh?3%ms=lu*Zv9+u04b{E@wow7vITWS2jFJtEqfPKv#}XfggCv zk5{(8d`B_G=lm%BP>nx0+s~o+YU`9&b8%*sAsCqMujG_P9I_*m;dJ@n;qHDvatOX5 zwmUGod{44?QVTZth6x+E&CWB-Jf^#xa;y?P_=EL`fyy<(9rf~@_kM}mMHEA4gMY$W znmTGDBCc(Rr+$JjzhG^CUaoULC#0>9-w0_Z&|fre9Nb`iH%onwmd?CWAV*t8x>N_s zkt{5z;>Cl=CX>abH_F+z&?_>p=nXgTrQXZD>H8mD5|wBYy);co6yVGb;F8bLo~reb z1`hi!gTrLZ|%U(+KZQxTX^{vNn~ySLe&%+;C&{y z!94j6QhC2t<|EkEA0yrR1x^jhlVc5M&(wI4kyvd!cPhRb?i=&|_{iMgzp5L58W8vu z56uVq<700`#);gEeeLh}VLkgP@#5nJ6?xVE9YOcc)WQLIa{A+!<_2T-Pv6noaePM* zVXyhf8ZZ7rRJ(ZLRfMc(Q7G+a$is3w*B%O&kRc%XVEQF%Rj(TnB}ikQfp0+TZ}5bY z8Ed2@a+8B_RtEcwBU-V~Zn)NGtn_@!2)8Am(VZ!;a*b2pyH0(-gSl)8(2#n!GS!z6dB%X)ip<#H1qn}g zsa<+k-WC>-G6SHIY7{B&(Q3<;gsiLn4urSJLlxU4 zS+YvSK_lULWD|p5s#q%IlN32T>la<8zf{IL$lrKoPOyjzQfC|z^V~>&J3`)Y)y;fD zn;8V$+QYi`V|DFyQu~*W0$hBv9r>SOFY&WJ_r~6#%ZEOt^uLXGF!^F@Yh$ll4?Y4n zg{!U+F>FNSde_?MXU4*>gvq$@>>z};5&aaz%iA;7R`)zC$*pQ_g-C&$JPknb$FI&_ zTM1E}wG~c+?ZrbsmrTQ^I_n>VTh@Z8Ku5GvO6U0Q33M&B{Bl=WTwmaeU0o4gcW6w< z$32^`m4(A9?^&k?Zjf6I>cgwLd&A%N45G_W=Ov#}XKV`#hkjtK?0g81s&AyH-)F(< zcg6W?`t2E+FPXH=KHEW6b4{Kw9C7jDkq}zqmVqFbkNEc577U`t@345UOMI~jgITia zR&PN}b4x`&7pul7ramHC7E`ye8sT-Dk&5MO zWC(9ZP=d)y+Dw1`ty-;_^zz~h>68vlVlt~xRJe#^2$~AV{|%ZFUA{iH%K9}IDcN#` zZ+dxkyhMF0QJy7q`+BRVL~N9XX4(hL!t+4VUIR2Ozc}A%7M@9*^(1j{N1!{@m9yZD zPzw(C^pM8tDE!MtXK*OXrsA{2Su6Git-ALg0O>A3!d0hJ2F6?$!RVVr zmVdS4S7CRtf9ON1O2v@ps}+UkXi7H3CuB3E!bC6jF~hYNKlceJ{XbgopNX`}V()%B zq7@`Gd-o>7)$5M&%A}UPwolYJ3;t@f4rK-4*ZS?%O0}qEk~xE3Mdx1nJIdnEI^a1a zN9x-?&l?u+eoFg$GAV^A!?A1(nLl+6Zu6PNLs)8XJ+Kjtk>Xb03MbLmT{Y~Xz}^OF zfc>q4JqiEF143UzPdL!K3G~9xUKi**i*i2D_1F#X=pNqNJ#d{{*NwWaJFZggxWx1< zrHo8oWdh8sxmX8%q7Ot_y?BY2EMA_4kzeJrh;^0Q;U4EFJQw{Y+iq zUv!0oeCDueZ$dMSwDDYO2XIIJ~#WsN2Zk8Y$TalifO2Wgc9;teSi)a!OR@!By&G=&C)Q z9f(e>EQ7fsy|qht#}9l0X&lA>JXrP0j^B%&bK1Dt=$?*7o*Q+Jl`6;8<7>H(s)L#5 z3Z3IFa)_D7XpVwKLtNRfsN$h>R25YuXV`zRp?0$UNDsXVam=cc$Iy4U3`*o6;w7iO&eZ_lzGHz3b5LJU#-1m!@=vbe>P11|N6%L9pPQ)QUjuyWI)VEiRY$s}T6vK85po0MTwT>LT~(e`)lI6Bd-r8Ldc3-= z{dIqsq^woLFbsmdX*{!ec zC663hNy!Tb-b9_(qw~HfdD|rK$K;jSQB4D9Yb`^GD{&O29UC5IN~@%d6(K*H6>*7Jw}Q?$J-_GJCfhC3 ziIRVOPIEtDM^E|s_KmVnSY}VAtlK`e3o3w9D{vYWoWgp(DSV1sIN>?T`Lr(6InK~I zj!EY@(#6xj^(bUQ<& zn6o9#4ZXSdDEi3#JH;M2k}TKKCDxX|LX%P)FKKm^L`-H84u3rYO=$CpM5#6>Jjc7A z)K>t4kjr5)55<){(EBd~*)Nw}oDqTZr=2`pMA^6G7XKydYLRL2!f)9fvTi~y=>@;u zEyI64yuXVPIfTsF@u~erQ3ghcx-vozxzb&SYyr!7;RC?a+R=W7eS2|tx|Qg=7`Unz zV;Vx5Hj5PYm&tXeFE8KqB@zHu?ToRVBGI!!C(G~Uhwzh7jVB5Iq*mt z#%aJ9>R&Z|mZ_0L2A7@T58FsDi+D@p^raW;=P?Hx?6ad5@UXOOAy9KzO&_ ze0n<89!Ivz`AEwv(%CN|`UIkbJ9e+$t#*V{ z^et~qljdNuJ%$J}^XCgS8m0ZqSXH^$9ya|jjqNhAItKEWcAHk};Sd?0`s{+$O( zJ}_-N*9X!l8UM9E1BU9!fZy(-Bode%s4qLyM&qE{C;h7kOMU-0kUWOPE)?g{1tU=<3i>uE!%#-oLa>1EB zMA@_d!)>xi3cen$`s_uqST&D?(&1SJ?BXf27g!mQsl>I9z;jHmgHSzwk+~Rh;}goG zOseEYRF3kT8m_ttpt;kJ1%*#fRb(5lQ5b%TCYzw}<*mp@etkaLjYY@${th67mjFit zIX4Alg$8o822zj#@KZ`9+;TQ~PtrorCl2;|hNH zdK#m^zC_8a@#5;=g5Me+e#750gF7e&6^h5DP;8{IoaoqM{hAuxQzdBU(e^nPbA>B! zqm=In@9jDR-^k)m;Zrkz9_+Ru9?xMpCX;`gR*c@-@$js`vm9Ul1zSMmcr4T|=Adfh zp0&v(4#u2eDWX1Je2^wXAtKthqM*!%ylH*L^;gpLJv)v3==2!i0;uSonT%X_P_&O2 zQMq&4C?{g2u3!rfe$lqrF6(xx$>@rDfTs1s!6(S%n;UTPbSXQ5LdZ7Ggk7i9L(&>cD=!9I}!{NMuu!{BlmNatq6Ozwt)HjgPfU(+G z!26pOCqSmT(jINEcRYzy6BWw#by9IlCV$xX2Z}rqxXfDS^TZ&iLkZ8q~S#I z!)*+1^!G{r%C~|CCnxwTUkjY%kG;xeBucE~?DM52^eq&yuHldJh%C88>mUBmD#;hV zz92XFp5F|qLa{u{C*TU{ry<lWM6DS>3pj2#UiB( z_=T3UaQankPWEdtdxZAOt!ja)(EcvyOTn(OHlLZlFg}9WI1hW(ZE_7H=b!d>BUf-^ zY?aUKew$+!b_)kr$5s)GdtK$G*n6>ejJkdOeiRprYO2kyz9Ak_=s@9v`YV%a|4}H+ zFRDnfxhb2npZ}xcpe5Y$jj#oQ|WFMyM*wqtbvnI!eO);Mqqc>Ea{~>Bnxay2&nXG;0 z1gJaB=QFSN8%^wCGRsuGc@lT2n4ws& zKDMoA%Gz+ebq5wCeM#n@osU9C8InJKR%2X6ifceKK{&PGW*vFRKpS0 zYI!=LOaS@?RzXf>WV(3YLe#6=y2h|KAQG^#)l;vZNRsBu| zYmOw4nT->3yq`NXyX<&dJZ`LRZb3|Yd#ob~*#n*VPciFbLiVo0i%@N%c{L50r3e>o zb=eS7R`6&8%Ja*h!h2}RI<t{U~U zs7^Z| zer@axbyY9(i@NgLh*lq@i%uA44ruaKe(p7fe(CM^rMd>+onx6Y!XM8vB4d~dd|Ux9 z44^pXVK!lvV=#1tJB-L6a)e*av)fTw%waxnZhT7Y zl6a2uASla|@F(BLR33Af-&^@c;25_=L7<1^IY#CA&dD>f!dv+^d6X@BPg|bOGe`1# z{9{bTs&`5oAiL0WBZe1QpLA()HU#)=bv{!|&mHKyd1A^3Q~75^=P-W5Rh#kUV-I%$ zcsIlg8_SgXb~6Kt&KN4&&GEt=$I%%lnTjQ)I8xV$TtWd?U%cl5Bz@I0sw3BR!Cbzxf-oYIayu=_U9q4mTg!s<- zUGWoZAZm`X0-FwHWlVk%W+;x#^n@w@Xe)enG^**}<3N?wq%yplck zP5D>Wdx!vYOz-ICIlMYNwCFr@R7nAYlLPg<>lkqwWN8~imV@evmyj1eZ-q@3{u-|-IHiX1mokI^!!?(I^HzEbF`_Ir()9=7U zX=~0VS8s7&?S_UEQmhLGjp$Ru=uc(ZwXVNUaA@_*8=JqEc{ko9txa?l0hLg1uFG0_ zc@9nYhj-A8bp_TjZlR_|av70<5%9#pf${@z`GKtRQ>1^e#Yw2Q{y9eflu-KRgtt_O$~4FU5<)-1PRW}TMp>H? zIfx2&%e7SVD(FvoWp94)Q$D!57B`xF4mp`kODL7_&XmFl?`-)oM~u@K|4YChKd&fJ zH(ovyb&Bs3sYe*B>k*F*2=Y~!BgR{kBr5KC8CS7H-DEiqzP4@(pHl@%uI+wU0SYLT z>t;@R=E#0oMK|#>UOcEn?I2Tgpyqv3H4T%;^crifwnjbyR~a zg^lPBkPUP!@W8)9SM(>*kE5*!sP~S?X)by(VO#ES3-9md&TK|xAv_SS%B2YYNHG*W zaQlq>RCA-o?FDeNt`Nko5z)|>a_=B)56A=}IUQCL1)>S7rf zCRhdzc6k}rb%j~P-Kp-c;65CVYN!aoya!ZU7KC=}BxbPlu_5elGWRak!v@w-T}yYl!~#DuH% z{#|v_EQS3OYU1sbvObNF{4Y)Y)OxH$tJU^n zczy|&{Q~6!za!xR`#aHmK45DR?M~3zEIX9(;=cnEye2X?F-3&|4Xz3cOJ11J6Rhd^ z_E8+w?%fNB{xnDFerv71YFDawvIcRi22q^}qACN#lLF#QK%g0vP}dP;q~@NgSn=@y zspSa6AyPsKIMXv%N{pa{t51XP^+zkM`x!r7<0#O}@@bz@r&Vrenc(WcGp`D<)zv=N z7n@e$i_P-Ilx~b~nIA8%iLt9E$7-h7n}l2$6K07!*|yKM#bJ$Kfj@6yn%KGm2m)?zFoj%8ytO|VK|RSQjQiQ8cm#c-R*f__%UZ3^l6KO3KV@Hq;(06sPU1)s~a z@Y%v>Rp%745bDwap+)O65fb&k%sPiW>fm>BovSZro&RC4SYCiw#!Xejqo38wwf<|M zHhcZx`H5&-x86zJxShv6(~i&M+y}k|gO;VgjN-|bL6JuSI#kAkyA>P~Ny-qPjUkfSVGPP}PF9exTdrvkixJnruLhXmC???Gg z9e{s?lF9YXep9Gj-ToFS7F<|w8#l>%Db${W<`BrA)H3Hqt-mC1*S~I6SVtPkNKVzd zn?|Wts1;ZIYW1Bf5MDKI`dWoFP8Xk?%Dr+@OQ>Dp5cw9|bbEfI>g)nGMpSM#4*%HQSa=nYiLR2BnTJJ4Y&2`0 z-$`U$L4m~9RFrT2Zrb2PU6HgeQKvMhSY7u-U2o|UIwVn7BAphiJI3VY@VYXQF0r~& z^x{O_Kp{=6Zh(C`6+&W?0{uhnN&rQcE3z@CfzaI4fSgw}DYu(~vQ z!Q1LvDx714{w*95Zs(B+xo=rnhnyW`K^)RqNJC9ua3lPFDh&MKA!ZFPUD~UO)b>D` zs^q;d8FhUOyo7?|rXmfww2nlVmOM&Qo3; zh(3|q>i#6GTWSQ!>VM9Kq5X2RIQ8yE;RtLE?eD5;oT+Ne=R0_7@|Dp3d|h`$GCfP~ zYx$V{7=?BG!vu}!WC)Y|GxJQ`Q!5!4g!UInRnhZFuqJ*k!@Jdp$ohga@fc(r93Pbw znI|-kIPX3mRw$k-IcaD=m7#D2vC__0Z$(0yg^MH@_cR}Yo)KM-;9X}`*EzD&vyen1 zx>J}*;RqD<-l*vbkYbBpoipC4u7W7Y{6>zhZpCMUPhpL~r@BjYb-g4Q_w>%FZd0vW z-4P@jQF(hJRb8*u0>$&=JgS?lszVRqpLL0VhY->4h@I489kNwrd`2>kCdxWfGVsb{ z+*1S@)mgT)i5E)Dm87_5EQ*fZUjb$Pzg?A&NO^gZ!a9lw`xTYyqrSgyAy`TmX#RHg z2Qesb{*;2K%zeuDG*463trEbyyCSYUZ1&vI$Z7YrsrU~1h4_;xgH39`^2mEL_A5^i zdc}+P9Hq3uL4=ryORVWPbl9(C2>^@EQC)l?< zi9O7v(pzf#(o_y)6bZgz%>f2`mPe$=n}~w3!hjP5ygNOn{Ts%Jf!*29oGJU6XUTr% zMN9O4X1lYWnR#Bz6F6M8X^3vq6@;)ts{PD+u4ie`F8i6i0Kk5x>|L5Qz4cCF4sm)r za&m74p{IthvWKRMY{*>-1VOp@Nw8&C&zdqvAXIAzD_Q?&2(=o*#v>J7XJ&R&634&v3yq2J?K&#Q8m+S~Axu^& zA^#HLyYxqn_4&svs(2YP5nkd%tyso~5tY2vdlGp@bg}-*H==j)728za+GcmbHixTE z@XS4{@`5LXKgkUmdit-pk0huf z@_`X}G5HZofStV*eVp&CcAJ$bET%V66=0S-DR=Z?j+9t^kI=$P<|AUUm&J z`~|KdiF{iQQFPK@OOV}WVdO>;5pP+0r-MKx_K!s1N;xCGQx@pOzacfq#=7&~V#eH# z{Y&SRA!rS)ibOdj-wBm)`$85leyyv14U*XWqU90$I06 zoDx9nt09c_e4ws8R35>fya@R}bm_gpx`nWC&!bXjwAGJ7euT^mM9rWhT^^zqd2bi2 z?M5k)!DkuE&g6DyzH{I+W5!+!6k0cm?Lq@T!z_II2K@i}V}>#dALf(k4=SqlgH=kb z7$g-#Cn%K?rA`a1;{<;@1wU|+Ric3h&KD{)7uE|%mY5!^nFM^039CyFt>@*Gr^ce# zEIgTbxb`WDL=^r;D%+`>xVnW6$!A=e?XjMCfjU2-3$pj0!&Qs#fJtcL^gh~eCVH4+ zl_%6sVMBM8a=SEqHLmRcVE9n`8LI!x!bh%$5+!N0dea1}NUS4n4?6U;k}HJheWp+# zXsXfg#nMIsKBJ$$N}P`crAu_o;!-UeHmIkc z%|}(VIeIb%)DZ*yW>X8<_@0z+-Z+Kd%etGxE1)Nz=N0ki6rb_jd82|o?K@Z$`B}%2 z#!+e&D3Z}HtVsTP>euz)(=E3UzD&*{$+ zIGm3pv5elugh|Rnk!!1sz@1G+6!w`H_Tm7g%%a7+=0M@N=d71h{?FF3V)!K2Z`5Kw zY3fbh-NxnHY3y?kD`H%{OKGBSBqVq7KPg1o%EwgNrCX?FRg~UoDp3V5-aW?~ABt5- z-Nex=nol-mo?g%-vlujamH%I(jXk;xoCQrUs^}gK`Qz0_PUXhnCSwfNQuZ5qVcBko z=ij<({jAmZQ;EK4N2rf9JFd1|3vJ~JnH+VH$G2o$ze%sV!I}X#$%%d z1Ajc);uU=YGzWsFgk@JC)>NTGvXw-rnvk(jJoFU)^)cQB|E7F1PWJxTMs=Bh8R_Z> z`QRaP-;3Xj>iq@mr9QKWUAlUxE^kJ3$BAqe<0dqItTekvY%;&#I=1q?xlht?&!rWd z#rSuw>T+x25FDG!)){3xjk1Kb3O!#gCK*q;re0DmK9)-*PJh8D+d$DA>s~Sl2_vOb zNM$o*ENUGiBoM#`m7jc{mU~x-Go<21BYKcX@9;~OP|S#YkIXZRzmnM}?&%7*z%(z@ z4cSa!?;)EY`V8}-# z4=VqJ{COOvZ~sI*#m|rmr{d@WFnYT_6b|_z88z0gxmryDBL}$%8&Ahdgq#Co~jT~;rkH~fn zp0P)$`4pE{bFoL#D_=Dtck|o8W5<>}z)@TI=G>R<2cVEt>wTFtc;@6QXiBnqPxL2( zICn23I&`DDD@bP(mNg>WMkSdCgQ=}{WEBWWBlg#Tu)R!Fx`ZtEi5(%aC#7OVQ6u&S zi7igW%2*>dUt(qdHr?YDAX1BQ>kqZ;7Ww0Mk3SWziS1!4&l|omrwcD8QnY@;E8axY zc*dIi<8z|(3FjZ|k4L(WhujDO{w1oVF4(!18|qdEzmPr0`tX_pE)U5er9Qm2ptkad z;C+5GEcdI3q3PmM2B%x52#`9L2F<<6cxU8y0C~t@8@t% zvp3O^wdy)Lmu5nJBRUwUW>lC*ZmwF36~&PWGiBnA?lCWzoQRZ;0JiM(QFg>YRdxyCm=-rgjy;_}*UKB37j#$9ULjfK zyIp-0T`ZG&4;ACg{1@=*Oi}#+{&)rAU8S-xqbjjts!hd6>Dct=xD*25E$mE@1*PBW zk4ULVA3C|{`fA`^>?3hpX+R>b@XO!&)8((XLjGRB#Ti9c93!89EaCI_rBbAqLV+;@ z;G&CrtB}Kd7mqWZyWk?@x$8%(SecLKFD`wKAL7SI_VI+DCtM%DRi;0G>}Hw#B&4Rh zn`QDNq$j_d_2l;*`Tg<7N=s;1L;S_kf$H~x(j0!#|I}1o_=LE=qCd;yq~_wo^o+Qf z8Ic>#>djmAjJP>)nRzfe>R42!d7lBcHiD}39bCqdghoZFanT%3-0nkCa%GIPa0nzH z%f-t*d{Gso`4`J<+9SVNQsrH;9{G`EUnRd2WRid0#Q!1gUEr%KuD<^SPB38NK50p% z6(3_g)__P!AF!m7njY&VBurLX$RQ*E`aR_m4G zwVDLTK|~FB1FsP;-G_KVQAE7(|Ndt7$%VG>^SuAh=lQ((z}b7xtXZ>W&6+hcYi8Dj zmIcqGYKVCwHx?zdh#6Don9n&oi&ZK9Bq*PnvN% z|2I(%Q?A-gly?&$>lH%5YtS!GE<^-pv^!(loGVZGvf)eN7!spij5=v2_u9wwvxAgR zQKA?^<iirw;e zbdkhCV=ayin_E-ub^@nWXCTbQsZMfvm}+T0roeFbnW!`NtvyxFdC&55?sLwv$$1JN z`{B=rILUAG4mUQp?B$pHf9keCP1CInoH+wUZR9!XO_^^QVGNq|D9>h&L~OJ3TXWegr)nI_4X5=aP#b;(j1f=1Nf>N$ zTED@I7$R2mmb_*I?o6H5i^SGahWNAL0xC`%U{B)8)u8@I9%S?H;|29CL<$4c#zbf>d}Ks)VlbJ8xl4_g1&0Z*A{(Ie?SqqCSqa{O)g5R z-9bdnize8BIknrfAvN<&>J>J%0jfc*Qo=?Bfj(irx`MAd^Yx6r$n5q=qYYmZF#zPZ zE65KFyDd~rkIC7j3366QjqR-3`T^Bc8th4nvu3*a+HSsTt;SHgIpnY+VuQ)$B^$pU zdWvoj8eI(o3$?NE^ab{%7Wqc~NM{i$bz~bpj50-cY9-iqbF2Z7c35GVC}vn7pc{pO zw6B6U3*MJ*Ma1xz_$~i5K4J963d<~~W(QfVh#1D0B(U%1pgcibo3e9inZl5X{UC*5 zkSPFlu*7tawGUg4M4g(aRJUlPY%!(xYIcG_#a4z!G)OK@YQlPBveeTA4vMi1I4H1D z)PV?%26^U-A_Vj~HEa4PHqv3TgkrnBSX9|94~A7Hwe9SCk@e?}NDA^85Z{&~4*k<8 zBO)eKxMFDxL~DiRGI18I4X)Wr>wki>SXtxa=}awFmp=Or=B|*GObgAh$P(|Y{CJos z2p{??c6&~UqfMhk|A-^oRS{sloY<7Nz&bO2Qpx|0o&x#jO(v86J}KFg~Omji9> zj4l4O)DRRdev+4kheJ$w!b7~m9ML#?8|dqvqenY8J0fD@#C^Au;lZDz2PYXtJH-jF zy;)o_cchV9(HOo-4rbr!~y@5SRx$GF0z zf?&GF@M-z{oLNIobx-OCHKS%#+oik}QbS0fWMCvQJL)5_rKF!+z>=jzfUZw0b~Qe1 z#-;2UAZkBf8kOeMe}lAN@2yV_U#v{oI?MJaK6$Q)TuTB8>Uoso+!ba}?yMZmJa|Cf zs|}nXQp0veW26v4=W0;dE2n=K3m%T#2nYl{B!MNQ_93w>H3j396)}z|w1fy^&`azm zhK?Hr%N>Qy_nQ|Lv^F$I$Ojqv58*r6tQicSMWI7z8KHRjrUuAnptaZ;`<&Bim3;VS zGqX&a$7GntO>_e+g`LuZZmP&FB;1ZB!nJN4I|HA{ecimJg|w zi=9%9e`@2VYfx`edu;%Z@~pDMwHl>lv`yssk;Qs2yHY-H=m%SrM&2ErdCp8msAqKo zaNdW`*%}DFWf^+z>j(~G%vx*kfeH2n!}%(R^By*{HY}vrOCKbl*IxQVxElAYy)=Nz zT1+hlZ-q6}rt)suW8Ar{;-M+{Qyhqn4h}7U;9%>ib2^eLDIWcpGq&An?IMfz*A8<% z*@&2MR7z6vZoL7qJD$yHcR`M9r~4G}wIG0%oV-5~fK6)pjXbbyvY$-GQ%!1A0C_`w znCXF6c;|)2dba6znkMBn-HP?>wcKi_s*Myfp|UE#Idb_^O%>jYT!E~eLee9 zJ}UWyt0SsxZU-`l2&l#4C?RItmK}a$6Go4lCe=G2Pi6zt zL%PVnWfYwp<@tx%La_-~`#Y33Ge#c73nf5F6rCTLZo13a8(_&cHe}(d65Snh&e@Ik zN_8@w{-MWZyCmo#fpujG*O!YuE6ls{E}*P1ojI|6 z$r_8W{31z;${LGGv&N#*tg#3*-4@0gi#WKJkE9JS6U!c}K293iX?>kvxDfPLnG2{! z=pm#c1lgIxSu^50Xtcd*2!CraW*}bSo*$XEJLzWAcHjKV!EHBlGGOwT)GQNZAjC+( ztBeQCW+25_;ooF!aP3KKM9pe^`s*|@o(nzM_F7~biwOu?Xmbq+On_;r4EG;W8&aj! z@yxW_xl-}Jml$o3X{Jmx^}Hka28bCyw(E>SZxIP)L z{Oe9n%KsBHJd~jGUsK%;Jkj)~S5S_NGfQA}-}sR|?RbG}<4k0#z%0@9F3?=f0!=!^ zNRsuLUBSVCp$*%l?`}E@`qj&w!;7=5oQjWH3oE%j8CY3oo6g6Xfhxz?s-2I9Kz{1> z2GA_Y(d~WVth}GH;Ud4UukKwBjt0j2pbHkWuMUi-=V{n#zZ$k@8bD#?r+5QsM#*#yt8M~dadw)I`ZuRyM>)AYIL^ViX_(PV2{r@b**A$I{0vRLwtZnkz&D;}p zWLw3jvk~Nf!x%u~;vX9%SlCy>`$X~6BhI2 zB&%SxU>to!zcFXZS`#FXtb5gCy4yL2$_jsbccB&(QY#LT;n)A*ryO4UbSN&ny=6L( zz!ql?h*x_z*gYXQyek8-cj*#(DV+!&#}Fqz*KBX%d|D%U;`=e3D1T2k968=q3d!DZ zbQi6&+B<7sb@My<&9|v1%mpy+9^}tuwCVfx%ilsRa#`u@PU6K8ebTQjR(4LHzcQUDIU&O4WW@!ivEql}E z34Rh48LUq76Hvsxr4rr*E5v+Fb6<i{;p zR}TNDh;_AhOSi>8&w+^wrpaLN;mLAqu0}x0F*t|7ij!9;u5AYF5ib zQM!_btBu?3W5^@w&5GkEX_s*!wSS1S>`($3X>U0k0cE-4uv@Y5D$SS9*%@X@1uYv%fJ zLf2%ykZ{|h!97`?({oqU{V=v{?)mcFoNS}>j(fkzR};Qsgnk!|L{&b|e;JKs9uA*T zqBjJ%rpuaV(Y?IRYIDYREj$iA++h{~&b9WK;^WzXN1tp~5%+_!_5)hLW}!YKqTi{d zAeYHU(`Yjtyh5ubwQW?K&4Vsa)*A8{`*gnyih~R`!@+C@!mE|J+Wn~DzY8gy-wt)S zZ}HMagjs_yAn~e*~Fb()K3fRtzW{|bd=ttAXx-NoxS32~enZ7a-QO}xX z4_oT%kUt5UcDZJW+9{%5(9br8(BD)HqoxZmCWjB<{{hkjJTI=-$Mt%~B>hfJ=y#SZ&{tp?uGuQ12_aWh3UG6JYD~fjz6tlR zQ7}Dqrj=FTW<3@h*-cNa*9w&2-%`>=bZWw57JLkQ9&=_DUrKVqnK_3qDB$G@r?dy2 z*2#B%(FKcneUHSoZ}2s1zTOPce>adY+pLg<&kHMtx-B|S%TZ?W=m}-a(5;3=j_}Wh zD_CnKHO$j%KiA79IQLPp$^CVG?_@u~Ho$70Vxj6K6H#==MZ&Vplo{+(7wD}+K&k;u zkCY1{`8@**Z0$v&y5>#(cLV*WMwpUm(}28meMYWh)euLS@uz>%y;@~|ak97i25I5u z{Ris5JaI5H z<#cKHoRS*;S5<^_XIFe~M?809j5TaC9SQnVIduJ18^dSQ>H0$w?3e!U?pQJNmNu~S zlI_=-w{+W(Y`@O@N9AGOqA|mOd5b^w9y9zo^3mbuMuZcd;#sEEi(_kf<5~Py`>eQ| zCqvdOYj7J)F4da<))gD}>@@7@2-wrho3O;osY9A-wm37fb6L}kQ-d|QuEUwh6q40B z8m4Bn=d^vm5?J3o3=Hf0HrY6jBqC?P_AIlfE-x6oXtlN`#2Gy}EwfpSiaK|8#;?t+ zru*}M!p>?+aOCT31;pNY!XBQsY`^49W!qt&70>bLRY4@g4c5&bbLfuPLdk(#LYjr$1f1``G1&|*?DopRM8+cL z6JREDd;9 zD!%Cx-J;v@mUrc~d?`M?RN=!31v0%t>NKlx+xnu&2#S}Of^NO7dDym$G@M3fzX?9JO{z5<%}A$jp*b4QzE9hyUoRe{>byp zp|!vYovK(tB%26(?Fpwi>qeej<$hKz=fJ5GeoD0S$m8aa@*9nx9#em3^2Pews^`8G z&+XCX{Fd2T>8QlcjSqkq{7ycdbtinARF#dNf8R-7Lm7BGran=be5ZaYuNC!CE`j?B z5Ns&?`YJZnjESH*4A7AR8X+^X0G%Xz0CPC`{DiWve^ww)%khJ?lJQp#ysCPRgf)1d z=uE(ZRNf(lW|#j6#F}!?)Gq%5#=jXIwPT-ue84EjS(mqpWJxUY-(x;D>0BpyDo@r? zeonAGHJ!IA*;ap;vu=>lZ5_Fj&TV*C2^jTo6>Mkd5Z(F8UCMB6%yAI!Xx|iDcMFdM zh4I(y6%OMSH)Rc9$?PZ2s~E&Lsn|2wx|0Bo)cB`y!ft!Q%e&zU*?2>haj$^$f0H&! zJfJ5-eDpvUOHv#rDSVKxc*&(>V0MJ}fwDxY~V5 zS53C>50!U0tdT+2wl#Q6-<9YOCZ}2$^&Y6|CnlCt1vstX?6y>>Vz8%hE^v;ANef8CE|`^|Uc} z(lHIYVyPdo8TGRR^*^Rh!0`l-AmO5-7hV= zu@>Eb@-;2@HUB7Kyd1zjd$)u#xrI!aP{>~wi+IY>G_U7@jL%(xk-!qT(R((_xmLA}1fQi%WSN{G=#4an>epi<}MavCNz zypkQ5gZ;=kfgUQPjT3qW$#Q|>n&};Jn!}MV@{0kl%m48()yMjI)CZnKs&S5AovzAP z(}N;rQJr z1N%6zIQ!E!QU8isLuCEQQEyt9ob%nyI=4Yo)SZT_?ZVR`l6%y{{>Gs|ax1XNiMxX{ z!{L=tA(y*^DcH$h=V~DIXEy)a4uR0Q%KUVqV_x3#Kavaq{#^_HDgc02 zTJR+TA20Buh%S34bC@co;?GlcUtH!lwElkkrOkP!2S-4bP6_1rH?t2I!mkklE}lE` zenK*T2;_6pKu1Ofr}OFv5^(hXuc-8K#;~Rfs`R*P$RB3;mea5)o{~Fj8%I$3<^8Et7 z$`^$fan|vSeE*BH6~~#^_xwG)Cd%KeAHw?Ph@M+$G+V2n`z1l7^V)gWUpnv6;LWhn zT#6$H=e_6O4jLbD3=G@)lXx|mCT}LUfWn*52nx)PR}X<jA*|^;8zJ019JD3F9UX!uz9 z34bGnvrKcu=89W{XJHp2us_eVljBveRN-$qY?W}&kCaT~$Yf{|2M%sG{^2hpEx-?0 z;4jRh@M3_0>!ZS?l-e)#H=RUVJIl(4?h_&LA4uiPQ!>OlziD&UwLxns_g9$qmT=bt z(PsVcN?nVO-U`KhmHfxV!~0TO`%B-P8v!wb!oVC0n2ASZ)cQ z8u#0)1>TK%tV#e|b^YqWWskUu9nW z9@{MX=#~6E5GMow9wMZEWANuWqtWP*ia#^*gS+%p@eC6qz=!mjy=~y_R&rDAv z4euJk<@ngghKv36hj($Q7ahl$rRme$E%L@X-J3DSyKp=^UyR>fV?Xq2OQP<3QTN?x z?#5}UHIbYW)0IR=Js%y_Ic?ONlT#rlnwm7K+TB#`Za#W9^Us3j7$2z+4iIHa51)b` zKKuZf-9k0mmNqC@T}hO`(C`XIpu>)4;UHXaHT)8MWnDGg4d5l5Iq^JGNu26>6=Q47 ziX(HnzmS#BOs9BWm4stQe;lRv#t0jVokUr*3I`4u@_B|`O~z!01YeNMY)#d75LfFq z8knMjhnyC<)QIIi;a)g?fQFKPtERV&L~yKkx-)8tmV`&eaCxf(y+XjDB7AWr+)nS5 ziKaLUw1a?r%x91I8?A#rB1NK>b}&HI!fXBMBe6S{fzk2ihssoSjXZN*Tl6OGcFtb$P}qwOZoG>Rr$D1vLGMFOR&eZUloQ{h_J zF5lmfa?gwyM;N^%*KtKj*c7SbvbKsMTzDy4Ly?EO3CeX zvwf_+k@Rn^-7|{}pJUN+8@!aSmLcqse;e=qE^&j5Phuo<6_wdH*cSeUC z`|2mtQ~i(Qof|kKT{(a)z?i z_;h;Q`>~PBYK3ic{iy3pB6cGT+MSU%fpC8uoK2)on}heR4gnyb!r_k~Jhu~%>K_nF zv)1N=aOmMUF0a{IlFPO4hlc$6`1^lH@PGM9IN8X6TqPk4`m8`8iAE0 zE@+CoalR*)G~56Il{n?JBveAe910nbU|zker}u^EwSIWnHuPmWq|RRrI=B3}MeoCq z!m@o*L9?G^Z7A;q-h=(zJNN0#r?$ohTf}X@5Yj*!nL2pb8OxKV)5x^bT|KyqJO;uj zl8EJEm7NQP8}0;p!k=;H0%(2T8ooxjZu4S@HmyV2#t!vpIScwm*VbPY?8y9-+6=}| zlKM1r&kcL2wN&v5AZP0TCSOsP($4P8ZXkgE690?i(LRTfnr45k(NAXnJYanF<0?=b zJia=Mz<)Zv8ZdrodixfND}Mx%5N(~5@?+qiG)L0S44~46tTyMt2w7u%7w~ek-2kF3 zn2i=@t#MwU^B0ff9e|p`oUtN;bqy=-BSU3-s>R93O{(Cscf4pk;Z;{AxZ=dSdlfJ- zM$w6wYd7L2yz8$84CotqxE&0^2A@dchg-w z)L$@AMTjPJeIzc~^PFDw9HldWq}ycE-EY&i@eumLCrJ_W?v)~8bEO!hL=qfjwwouJ zDJ_|8GO=}$8bxghFyyTQ12A2N=$pi9Vc2d{-lb5WZ?qV;2eB$OX}W{h4{faEECGM! z5Y-k$seoi14-$%eVy6eOZ`jzHAmMbP=9sASnb~#$8 zJjjST68(*QDkD>6H%Hd$li)UwL_D$q+Xv|@NWMwRgW@wz9aGC{;RU5ip0PyKRqBK3#S`D(tk?eX@%qoLji#dBY+ z&V7lFL|dqI>bz+3INt0r=ItUv5k=o0kJ{D@dUo1hPj^l}oWvtD1|^I-89>hj$7Y>K zWFH+^POC8sw3_JFSe+7~YmIOspg>IXvQH>;cVlpvsH>ZybesC)7h|JXB(w5)bO*8+ zJ6ebQ!o#o8Z^1GKl*;z#-He#4bhaDzNnAg!N4?OI*R7ZJp|+h{rYU;dluibpCU^Jo z&62}otaEJ&Fn0+**EbTz^J+8bqo9#yK|W(4ZR@a750Ix?6*op2APFVtHt`V2!tRtB z_XfjF{7W|8N=U1pw>@Ks44IPel){C`t-WDozge;Mo}Wo z#0?~@u19b$2LK}l(4Q#M@8W+uoFV-fMfcLgDO(#HGDOu!-9546uis5Y!Ns|YkJkRc zqDX{~@9P8}r{mRCoN3-?M)G-|Y~C3=CA^#M;b@M$j%;G0CAM-#C&y$^`?QkJY{?OO zM;QF!<{Rzvrm)(D0Sn`ZKoBLw1R)6@)#DGF-rMjjB?d@aE|ua~w>c;}ma{corV-8)V()P~_o^M`zqOnOBX zCar<+v60fAe!p5P#bizss=a=n!CAw5xS3$$3^%Va z&~-W)aW$q;QtEtt*kgrTSZpr6G%Yt+>LT;OBE1DPf)Z|?XtC&Ap2ze<;W}$=u~0K( zl2~8fK?F=9&~1dWy0;DU>o%~P@O4r8F3H~JrD%*Hc?F1$iA5Il@x~TEeA^^tA+*gj z#08*!Q^|D#y6z2&Q)mpUgc#`+3szZt^y}Bv7ws`>dD|` zv7TL>buWP*#icW$W^3sS!avf`yIS~@MhRr&Gl`yop*Mo8S3Jn_w(;Zwl=N5a%cR^Qgf-9b zpB>1v+7wLH)Tsj44T}_S;m2&3G&F1ka069(Q>npI%U;={R<=dgE+Ms7DrItm(g~A)jdS^X3~7 z4L2`0&)P!>yE>_NN>*TML<2t(cAEs+1unl4MFPwwno3bjpkDeyDUS_R!Fpk}Iavs% z7Ermh*H;GlH`?cI7wO5CV0nJ<7U%=UvH`WWd5Qg~S&s>l^vyN})kE(RX|@#^5V?iA zu`+;tg$iOXxL9d;CI%e68!M1P3X<`YZa0Tk-Fr1C(;kURr{!!`9=)|@_=PVbGo)jW zF^B%7A~3H<-48H{bE%hBCc>+)SGJt_zXAQAfECw|0GHGH6u~%1J1ybvC~IqeZ7^Gt zym)H4dUMS+M0g0^7#p_^lm~~&6Synf?u;#*4mxMq4It^8e`=3%V12JP`)7Z_WKoAE z!%!x7c}Dx{(4_PrI>DZN`~d-a zDSRh*IlUJTJ00>qo=B*{swQwMv)w zV?FStm?OJDe-OjyP30!zBqT$B;UaswnVfnwe0{Bkt}gdnf9g zlkR6#G(C$(-mSqfCS34MLqNZbcc8jW&o@@Z*d?0)ta&-hb?L^s$aH?qfFdhjfIJ~q z3z5OdH9?RRR9_1?EuyiX&EtIfK6P@;ARf9_Fw4HduMkT8F?usvUNM$IMCii`)aPMN zM57a`wA=1Xf}?ay7YP=2Kk|1YLHBi|(=@#_?W%?r~~u_Q*)oId+#qFlX9sHuSgc>RCNl_*Nm&g*#j|8+2f z{9&_>IGaN=Nc?QBap`S?C4aX}h7;(BpuT2nrK8P{>^BRdh3CH|4s~qGvj>lkoXIzG z@66oloVDILyCc(pbwusrj2hKGS%haHw&C+6w&9=E>GwP}95j;on1y8Hc}?=bJO*i~ zleU4x$NEddX17)2gFqSw$$t|0+#sEm8v+QCNvXW^WkQD&& z;3M)xiNeMh6E%`wlNGP+eAO0zl})e8lR;TgtA;lAP#J>?VwrsD2vwaS$c}-+d55b2 zQY0Wdqf);=i;>A0aefvh^nJl}{Z5^U?9x-e=v;Xl#KF`ztDMsJ5uaC;;hVf~fFtQU%bsX;8Qz!@(*?(N3o-d^X*%Sovd zog>+yYbKVPrle6<@eiosr0k;t@GlTdvAz^n-yUzg6q%%_ZA zRJ;b}wJ-RkN1ODj2S&{hun7V^8-lI?XT(0h(tiz_W*0z{}>p zBglX2!8xug$;rvQ$tuLE#)?r9vA*TY4EanCPmiDG9xAFj@4lT@aw_M?-KgnX+WcRj z_7S9m`uiWTgF_NB$9Qa2zmIgBuj0`msQG2pFm;f(1hi^=4@j$dXU7e9&LA-6O-V%m zrchS7sy4Zs+|v^zXt#F(3tMOP$Fc-q)14C6vkmN1re|*WIJ=%BTxSgTH;PK)+l?!g z*?HwE30Y4t&%hNzxbTD56nx$$&fC7W=whY4B0sYOPV}xHNw#*vZCbAFH?{;i;>?}@ zOqoFs%52t0R+(J`dKhBH>m6Nr>Jw+a;GEU&oV`BtEw;HLMz8g-gwQRa*_7Ez#_HoI z@}1ekZbS-~h*bKee8W#(Nw7OJpVe)DIAMHk%Dl*zOg9$v^H;N=nLEh9ShEa{H~J#p zB_aTSvNseOGn0t$A0kM2k3%}7&j+60*BC(dRXpfiGW@}G>^6qX_YHLnNxN9Sg z0AaOM)?!$d``qzO&nWEpySJNfVUnqkG`B0Lbt~Hr4GSj=YM-7)+&x4opcwsPG51!}Q-QbvU&@SPUgqxv$2KSrQo|im)Uc z4GU|HJ+)SBo?%{R41j7rZ4;PrQO}$|WcYGv40mq4hp+^$lqzEDyJASS88D(p-l9V-} zhg8~$FrgcoewU+6oEqN4P1iyOO488alzwPX-3J;|GuB>u-97^&dufp&P+3ST2&pte zlQp7-uQEnfw7^y4Y~dtIF?CNL^x{=o=?0~pPT2%fLuQ+VXN}3om{+grXI^y!^Qy(K z!iqv+k^&K?IRU0RF!{nX(PCm|TI+sh$>+VuVwwss@1w8FNIdFH_X%s>l_Y3@2))?i zv8@_m338H3Qcm-A+&){x05p8}q`vYl*kjNOwQQ|se8d81-J2HuM@q93^sftjBwLUh z1N2!-tKnb(8osr%4}HB1Lw#Au+PXt<>`1D6$!1}!x$H)&c|lo>%w{2-2(Sua)){-V z(8i_T$=n*t-5pqD6P{Iyj0(a9txW9H_Q^^EtlHPe>S>mIjN$bag|Nz1C+lfHyQ@4t z77cHufiVKAl$e^4wA!ua zH%m)3Dv=c1OQ15Dk|X1?+GmdLI%Z}h7As$4x@N@{EMsH2WEQUo%o$hlvVriLuj*%p z40Sct`TC_51FqmA6I^71i=qY2vP*O}WU%e-W3K7RW7rNCLlZr;CbRVP3Gs{&_^60z z^DZ{LcI5Wi_e_Jn9xL0K+jDakPQhokG?B>bX$u1@Fk{z^QA`FY#rVV1`0P|n( zc+l)`zHty+HntthaGr5$Qd26H_P^JyjfJJ)=0HSciJrm!M7!yy<0ZvUwBh6Q2=@LA z#d#7bDs9a8AVzx?ui*S=x-xDfrrXC%`>3&x#d?5eM7lBo&Fr;FSI#kE>B{+frYjfN zN42+-*-cj_8FL*&E!EZdBK=zo@y-IK6aY7R(HX6cbN3P0t1{mDuPnz4Y4b zn;Ew$48XgBKsK_3(@Xs<$kKhiZ|Xw~Fhz@EHECE;wrv$f?zX`yecwbY*nQs3J!A?@ zH^#H6(~Z-E*L0(1{rXEc&hLHGtloxc=5F6KWw&oK+S@mYjeT3*`&JXY!NEDbfig^3 zz{S098Yk;7?ykC)*SHRMm_71#|6ob#l3e#G_XFq7t!9!HpUW=(j!J*ZF-B%}e(v%HB`^t93OmW`A17mjNy1g#oMn~bS|IT*ep8#d`+^vb+o&L_F zb8~wBkX;YxU!DtXdD5mlnFGbEP8kddVeirc@67yBo#kId-L54kJ9l4n&*K;WJk9zZPRwaGgr1UC5@CV9U5e$?F;9R=lIcJ5>jd}mvH z?qiAE*ObE;QN3oB*>4zkH?gxj|3KJnKTy0UIyh%lpT4&8R>@kz10#$)KJPz3!$vVm z$jamHxVXDmJI5lE${tH&{E&!olcZ*AI;gY;Q|W^_IbqK4T?S^8ZgQA)2O|QN+RKS- zaVhkrVC~76{pRByBoW&s9|zwU;e)#Hf#N1gFCPWCQ#*~%p9`IN3+s(TIpaW~J`nzl z<0zo{lRTSkj3s7MH#1kdWqvt;!7mOE$i|C?PUvFVS~2b|Tv;EIj)r2)cA8Jhb6P(q zcP$?j7HrGSNe{+=Yd-Vx_*8gtQZK~Ecxrz(?-h$p*yuAu*c95a4`KkH-Qj<02Wc@A z{m{e~O%4;w9=N(qT4v}lVD$ByK46zh{s+$J(?XypOhO&-OXE1)l{)MQ4r>z7hsNc|F8nJnNJZ znE*E0z`h0FXF;ry!sd8i#$NPs7d4)B5@y)ZKq|fD)dw%dm+FO_j^LTmc^|vpWuTuT zy@7r*cqx8DFF@;=*<`lUC6%24D||Ey|40`8ZvniXnQIS*zcUMeM;87s0lc0A?!Ptk z+>nL;Z5IAN1NaKTPwa=kyr{mwEz0~=Rv78KJv!~!Z@;XUYXW-r&z8>!)gS842xXd0 zihqQUh6bFMob}*1N{#ND$StM04VAj9wBb~KLk(vSxTCaw*ua}chYq-ibTF5cY7tYI z$~&VIbME=3Fx9W?gW5GnSnK~h;Cj)X>rHX`+B?lzj!yi5;W3a;@TG=ObfH4F3kxz> zds!txKj6m*{){-`7nkz2f#BNdlIu+dO^uSXJ-tSYNf*zN?1xRP5qPqzL4e0cNL5|K z$K$+2=kU@&BQUmkgx?zHouXk#`6-&iRx^6mSFO3U=oD59ITP1^GdAx*e``+Ta1Qsc z6;d^i_YBMG`vcG8EN`&ZR6h#T@<4egYg;A>>6H)ZT9;d?I#B01-v!x$?g8=?^ryP| zX|w50UsR4QM%xzRrBe61w)!?{-{NP$ z&<{D7Iq1N%_iHFb5ZDRb!J>PP;^Emxm)7zDN$zVF)JlESBLNDDy3Ot-vYI9)8gE_?c-+Ua``qK|I z?bp?Ki|9^m8Vh!B*}7+HqS{i(-AbMapc>4nem zmF@Zc;p)MWrqZ6a0r&%Xm|wQH3^$YR6VC5B9T1C*V>9e{m4m`hx*vKQo!?jJamkl@ zW7FCA=86f>!1dP6(BE``<&DOLUyYhnF}IC`1UE)`TlNSjbZIQd-F}ZWomsZGx#E)u zY3bCy1-UqoIEKf<dgyA%9jaHe^~d?SrUuqg#} zH|-?5LA~@+n);Q^6|VAgT18azo9rDayl1mP{veO$&*e}5M&7=}fQ$E_Tl)_()`esRFS=mnTcxEX_65~YOG%F^or&B1_auGr5MK{QSW zW+pH-z|?UA1~3}MP3QDQWE^#SiKTL*c@)O}IsOh4*?YnEW~7vdWfRq9L+5Ojsxs2Q|kivs87ye~fv_2FuTXUwT7*b=W_dP;YX` z=6GhPVJ}&Ve>mF6@(;}T=Mm;F0Sv#Qc9NOpnc7{eI@#GXN1$yh~B_i**BkL z@~HWwulqZhdiiG#mu$QrPb1@+%i5ZlY-&RF#r@NjfJV>ioq?6ImnojQ5Jc=zU#}iD zXLV0gd4@kmcWwmh*^9RCiRFF&1Skx`qX99(MObyO_3YwJE{o{70# zI4BIAa?<#sMbAac+ue>|e&b(5m5(pF7v6H5T>!jeb8+s0cCJCFGX4z8 zVmmo0qG(-|u5lFwt3PjQDnbU`mtQWh(SY5bcO&h=a4CSymbZHD6IG-9YIh5Al&eXt zcHal*gicKjFQHTM7kpWhV0jQZBy$Noez1}nh(4?)0sH(NU!rEn_SbRukeGWxfj~3g z1+IGTGcx7%yl_zeQi59vce7eZ;ZMIxcNB+0cgKO^1>=KWyPtez$3ssu13geY1qg1r zc873beX4LAiFKm0!ynR*6$9I2uQZg<9wk%m^OCA(Y24mV@>||0v(69{EK<09%n|# zA`t^bV!~@93It>`X?N-tr=_hR;#N;*=`VRn$C8x{UrtV4a-jJOe35+&bhc8oC{_5| z^_;ge1M;%A>eS-UwA7q@HUPEve4T52E*W!5I=03jsA5tDP4dGLE9X+1J509W&>=Ce zE>!P~-Eiqs6d0(5QI%?V$Qk?0!V__e9dlXd(dNhSlG`hJW3g@aF6=gh)IH0S@4EMx zNop&$?y;PCdnGq2E&R2xj8T;=T*fL=z|@Ue1X;31c%BVN(Y`3qP&swlF9%xCz^<8V zDxGELpi8sz1O>^pH$t`-Te|>)ou!<6B7;rNQa0-La>{E`yC`GE@|2b^mN5vk;{)$b zTSYTsqL9l{<$I7E*BiG1=}`IIN=OMpw=H_wUb8v&t%cuKw&r9HSuPyKE-i-F(8{hd zU3kWxE(G$c9kL|pv=`f~pq)x{#=alJ{f*Q5rifJW!o_>r1;+X}On5kXBN2RoBz#e_ z(iUIm&UI&KxVY26*1=V?hg>_{z?%8c*j5@zO3B+7p3=N)5YVev-)I6hFD!FPF`I%6 zc?w^&T4?tR-J)J}v!4PbvE~3uVl{*!=Jtxanh7%vSU6$m=_c`RCH@YfX1|TrX=lGh z@P>daie<>sNq?1UwJDV|cC*uZDwLA=gj|EN=3UE!B?hwy+$GH2ZH93wH6=79MF;$E>i?+b{%B9M}Hya6J zPn5Ilx70S(DGjxG;bqWF=XbzuzZ7D^t4&*V+k0NCVu^0A(UjR{$DWIxFJo__*HBJY zCDQN%^(lu9MnjH^x}h?F|1))#8Tfo05MMUrO;C4KCN<4b;;|b$iR-`%bO!=#$+_B>(!4aHUsDOgPRDP z)7lOgt4`%zm%LbIm~w0Z;XQ*v-iLXLx8l02j%2Q?Wh!;X(Q-E7B$6sFLRFMZiZPdL z%sdCZaN-m%X5v)qdG}z80`3DGbc!V(4q(N4(pgrl1zDCAj$wtzt~Id1H+IUF`1d>@ zP;QGY$-G1a48W~Cl=l?HNuS#D&&M3weNIc!Y(mXUN5;S7k7$D@J%XPe%>mhuibKjB4V zaZD@Sgja-$iA>^JlG@SUkBT8C;O7cxo=Jetz6g>z_*WiQkI0U#^itLAi_T+@rkAQC z{PnOQyiMm#f9a(&ZP>}_r8O3gw>tAyU721g<*7x2v~goWM!c00roZ&kF}#s2Z{v7V zaC)hhS2dTh>!V7mgVEhQn-}Nfx5XnqOJ{E9s9~Sgv{2scq(Lko5gT-H@@0^2brq)M!-!fKRn@RK5*b= z`=1B3pu>Wd|MUmK5aU@HWC6MNYw5{tC5B5%AYD82V3w{;j;=H?}8fE@yF)qhNByU?U1I zgVo&L(r{dsNog~bA)G~DahZR-iC3z*RRi|gGg6ZPW~X1#*&HMip^XjOvsH#@J@G)V zXbB-BGb&pM|L?@(|5hwBa^KpIjCljefK34z_HCe)no=7nwd5-EHy-~=n{5*>I@Lj& z;0^g#n;^C_6IGU}1qXVHvh|rLe@iBVcXORb4vU%^Wlmmk1hjNc$<29ys-arn+Ve*z z`H>oAs$wuvggkI4F$#Xg27gR9reGydaD*42Unlqh*#H707^4-u{UGQQA&}q=f-dZX zKFS6^co6hC5}{PZ9|b+E4|=i`b`bQJZ19hSyC2=3TDs3U z2zs9lo+9Xel)Pqx%MXHXv%$v(!C6XfB^VRgASM-92jHltnKb1ZY+oT@Q5wpC3H25C ziOJ{FIh>V2k^dFIMGQzOnY+A>|! z=r(D%=`?0~GzLWSEK?Nvj??lDQvmc&j5E69rOhh+@gS*cdBa)xeIm_9B-;tZy}C%e zDs^TqjufQ}tIFA1@XFXM%pVAE#J`a zdR6)Q`q9kf1rhxW)6F0z z`Fs#o{*05nlRmKLwX(gL>*@2TjW-y{P#gEJGqv$PUtGH7KZesVa~q6T{N2N3dv}sY zkP!F_3}Eqc3*Qbrs=GvKexo!W(Gi=4tISE@@23i?l@FkFb^|q%D(=72Vf876Lm&AF zRUpp(pF2w6PR@K?Hpjj`ch%YfWLR}5#n?xN4I4w4{%pS~iM0Kuf^ENPd(cS)^pSRA z>bSP7zEW?lKHL&1eWgF!hZBYlvwiquyv-q&w3V4l*{|P^+_Hh>S~5hgMI{BQkAnvg z3?)v^l!B`4Kqe3U_=rlExfL;eM6_mZ(3|@G%y0Cjl4Lx+sqC31-g=EAyd1P&{}ysY zVmcvBBlG1XVf3?`P<$z;Z2)08{u{SyJdp4zysr}(d~wc$VY!f7RKiQS7Hh8f{V=U?EK^H>9gFT&6Xrr!Ap9`PcV=9*-bu=Ip@>GFcua}j zulhF2gV=M4YTlRcB*%ip%bNj473K)3b+)%`{am3Z+0dkxqO>5W98d*SR&^{gkHS~) zVFTk;ucHIBauRUA(A^G)1Nx7JiGwoR4U)X;0Eg)B*u=kA;+abP0MXe}#5^lktU9~< z$?%6j35Q*H^pluU+z&>*z${>DNA7yFPQ%)xVNqF|ameQ7T`|;@D7lno(2w?MHv5Ov zzF3e`_Rr!@F!TL^V2%Y_ZNb6%`2i)T$R(`u_lWynoSY%NriZ`deJmyXKSw6!czHn!|x4x8NzZx#Q{ng#3 zKGqu{D*O^(Rc=PA-T&Kbc!#grH?Mi$;zh$M_ij9dP6PpndB+|DE;_*a6G^|!rf;_C zx823oC6-tvX*^3CmB6|03EoQ-=FbPIvkuCd{k%!PSah+>Mmzi;ehPo&j(a)P&|J}R z2;5`!{L^>j({#dz<}qcQ)A|Qcc>nf*E2vFc4^E319lR8&m#k z+bF@gkq;|4LpLHeSJ^nk1~Ew5kEpvLO0tD~^_PkHNWr3<`r?>(!uQEaU&sUpj4!5w zqNyqSCQ;qdy&I_RUC6R`!UUice8}M;dyS@X?@5v>rR;Ug%(j+py*EtOaL@;_%X8A6)4|1_U5@`yY4o&5zl%Kvm_Y-roO z@~(OAkVRD0k$2H?1L*7>I_4}IP3Xxx>1St~bkxP4%-^kPI7ckKxJ zRpMK!_+?W&g=79=Td7#BRtiVVXfEo0BI^D1FH;r0MQEu2O*D1+0r!hUDsm!pF3?yx zF&Ixl5Q|%2LZZ%np$L0^%4c#seA)8|4ijbd#Ac%WK4T7N9Z{n?oOQ4hx|fH(Wyp4x zuOzZ}?WBxR5EcW!YcGMk&G9?+Mx8zqgiQC>@|Iao)q4}JBM0=Eiuhv+MG^O#k``9q zPJ{gPB{aazz4kPKjAbT_Ty~)8EygY2Y3J8S*1UA^ zR^zNwJuI;2TGrv4q9BL!s!#g&d?X&c&jiQ+lU{8G)18)2K0cxeD$bZt z-CAUBXV$lFc+R}&;Nj7EQFmr^5Z^O%XjN^wxd@Tm^uC;VUfN^AwYd@ir=^48IiGLrE&V57F zGBYl^{a=c)HVXv0Xe{}v4xRg+r3z1^3OD=j?dh$;H}u+Dg&O|RKR?BQp03$Renuvc zbG;?{cuUUDZ-wYFBKl>~VE4Z@=LnEfx2 zK9f(hVaXkm45)YRdk6LG-1%(4jZ@0@GP?g(uRc&-HKtk&SElg_SH5An5*^xE{_eb( zJAT$B&qs6Lj!Bze@(3cjKrJmF(gyIPR>%$&vVJ`Aia%kTZPYfqS)R5W`46g+q311s z>gC8(3Un|>Dz^t5`I8Vo_<hJVJ{TtMtTN-oc z7}WCv)HOXfiNLQ~0+TuMv>!>0sevU2poqwdle(*dM_9deG2BJe? z2vAiP$^|MK3`EBRYzHRJvY&D~KQo&j@D|tw!u zQiMWV0yE!|i2&m3D5b_rlI!<-iaT)feak5HRvTvkjz1c5g zDCmFSfi)zyKtW33BuGiPPa3ZU9K!8*E*CQ8wE#B;XF*d(SFUsR9=rvx)EPK4D18!t z22d-%D1PD=@pRpcAtv3k9TM0K4)yjE4(c#aK=t}Rzb7c7XFy{uQ;VTYB|_k z2vLVSksZ#Je?r8a7BwAWW{1pO&f&S*aqzY?HuH-M3B6P{wg2Ep3!=67v@@RnAf#ra zzxR(yI6H5pr6TW2^E?kDVYqO%vW6ce=70p?Z838wVvlpKN+2$o%V3gfW;qSNF}VQ3 z(yQ{sZ6CZJ+y3*`h9uxUw-7ACpwa?}sLVVh(yX^0WRJNPlmphI*tP_Nsm#kLNloFK zi?8%DEg zkGYxP^|6@yiG4NF!*N=91Q<>5jv$zWur`Q1p0w{A*=N6lhx+`Lsrys`_ADsq3aiNr3vjk=A9mLmQ6#R7_HZT zJ=&aMwzB=y)Xc~8HDqH1Sjq58eRW%YoFlQj{>zmqBd_A*e6j#3)Vx~HV&eJS_pbTW z=_OU}F1M3iVH|RMpZ{C={|Wzh@c%VNFu3Qrb1VPfpPZUB4iU-S?L0c^GUw4y6xOB* z9HejFpW^)x`#ymE3LhMVXPKg~P!JZ>13t;vJ`$ofMyF3nEy>HtqCKTIi-BnS@mSI` z08LEx_BM>~?ang!?aDmENThFn?LqBVRjplTvRldj$&EZY1!Eml^0Fe*W9yu$bR0Je*OChw=k;cvMj$6)a+Wu{unlO_ z_>Q%in@mKL2{@hUp7vUL1DVhJJ-`zZ_qbe23oyzS= zYM*MGF}l;r*eHKWYP@NL377UbW|*NX=I-=Ar^D2tJd=yd05lP)N8~2Fe<@1Yss#L@ zs1rs7j0{ap4KEnQy*2^zQJZ49J1JG2zP-Wn5ItRP#N)=7S~M3GQk!=NsCXugb4OZM zr$6Fm+b5k*jHc}D=1DuHf0tHbiHPJ*>(fjGU~#v1xHm*Q##Tq9{_*5QHKZAhqJ+&B zA?0YZVUaK94c0B~bifG%}zT2>CHxt1O8<;cyMa(9_~&F!7@sPIN?>+dJyPO4Pfpe;zs}@kEAs2 z{uI-n9=rZxbJNj9?$i)l%AMBrv;o*Q`en(8Jh{~#+XVZpYy>Ed23}CuX5lT>;>d3DR3XR|d%K z=#N2K23zoBQ}?tcSlLMU3II^=+o~S@F#-HnwR52c5$u5CgBP*&G)S*|f@Q>fK8gZf zS9A8NJwM*`g_MNTqWgx4WhlugVv_vf(JC&|&Qqh;aFK8$aEN|Zui+x0&4y(4T4`3V zl?HmPX@hj*0L!WNlR@J}>efm)0N=p#P9lx6}e zNNuJIpQDIrWxHIxyFp{$D2pt&DU9L zH3LZhjLq1pxS%p`2*xvydr#Qqe#A-nT)n+6yMA1rU;k%rm>fq`!ybS38>m0tu4($k zM4cgK_lI{Fo5NZbL2OSG`{jcD?B0?0K8LVl>p3~@T{_OFOn1T!g!w;yT{3^#2>%E6 zrNpnXFQxt&dePbHJ$_8DEql3<+3f1?J&(az<^e|-&y)fjSJsxhE$VJNH8t`o>`QDa zf`xWJ4q_E9Xwn9?*j1_pMoD2w72`6-EZW7X;P7cko4Jxo0*=ITMwygF1&y-*M9bGN zy05zZ^+EVu2^W0zUn2`At{R93KP?3#zQ3OJ`W_uIjLGVPGq}Cy)r>XdKPir`k8Oj}!bg5OsGmRKD);fK-1aHXBO|{C!J`>d$ejvq zGcDmAi(c77_9O*S{W+YUFz_lu=zkA@duxw5pCYh|-n>pHuWSyFjy&gI=Ag9daFBQ| zaqK@|JZSuZ(HYlYjr^KhQ=j#&TElylw{nFdj4LWPXSt zo8~es(V~9!#>RM?li3l0yMP#X(0{1Cc8b+qTE!*jaws7YS@Qpp_AY=?7T4c@mSiCU z@d-*4Td1iGHBqTVrIJc&RyMfN1f!tF7F(*8QtQv6ZUFDVZh*(fRaC@FZ?s-od()~_ zK&uG>0(j$6m53L>OP?ib5tUojeLvrsXEzDzukZi;)0&-UE@#f1IdkUBnVB<^=-05s zZzLhl8$2gE|C+LMmGdFKrN}a`&m{jRm}1E~Q+FYKlJW=6K~BxAOC?*TAx2bU9nr!? z_<@M*wMVlAf=S{$ZZvy&26Gh`Nt_3*B#VXCEz85$5Nq3WU@Sjri&vW%=Zxhl#f1&G zHFk86)VAe7g@soP+dUP#?K?TP`$>~hwb~iC3B(#ho2mjDTX$&Fi-Fjfc=MCc zD|7?H9U?(MS=WLKZfzw-B=oNvjngtTN6y{N;p<7Vi9)OSrJh+|*C&?Sy42i}@Q0G-o20pe zo9yQ-K6CcAh&S$<>hfX@wotxpz|3eBI689@YJ$b5UP>#)IQzeH`XvqQ)cvHv>(_ud zJh;}271w#i(W*7hoP0_|E7ml4*B6q5q_D&bv- zNY(#bGUJcv-;*)cpCrFpEmtyIODK6(pT&L;%y0wz9?m8aWgV!T%{(;d@ z8?VE@!yqE7eexmVGD|HqUF1AAsqEaY`mDV1V#h?i#^R_~Qyx(lwb04Q&2gtkzaLw` z*soge%=sy4G4HHG-fVV~@`s~4AGH#tP=`C`?wdC0enKJ-3eq&heePkCy>bH`*}_4)yN7&}aUs;86APjE#VrjHEEN1!s-Z zCxL~|4C#1howrC#Li^MA(X$#~AUMt=kw=E1pn=?i51<^8^NnsJ}wzlzm*{5q|j0He>q zy^_#sm;}3q&|B&6p$+PIlSFFNwL^G5!&X!8wAoLZ`TZbdGOg3B;w)^fvLeNqdlY<^ zgg8g=D?wvs9f~!kU!xPmZ&rBEGoX=pNmD;)n0cjQi!j)nPD1{wwCg+L+C*yX+l(l? z2uQ`iZD&KOz*YZPJzXat>#LSGe^9w5y^j&fOq9dFq7BkY|FG@Y{efvoXgTaVEschq z3HnGQ@KoxNpjr)fbSe7qe*MY#39?JHnXawaLZ4P{NUw*HvZG!KTlz9%)Ci~;2tp(M zBtWO7$I(Bc&?f4l$|d?CzSg~I7D44f8Cdj7n<_F!LW}Yc(#h6{d((Wr$$29`%|}K$ z=CZM7{zX>J-Jt*nN%rv5YdM5QrfgNqow3*gBCh%BdXZ@LGbor!I_A#eYcRbFSXHBc z1XY#(1z1pAsC6Z1s+d}AqaAP4@);WQ?j9qLVNhk*oc)NO5F){Al#ujnR;~i&bz}#NC*kWx5WOdT+Jl+R!T~_%G?sx9(@N zi8`9)Yy5|1E-A zbaHNl<*KY&HRCa3q}O^Wd&{GjQyMI9dYQ|qkdSmLco2ZUNHqRlf*6(!Zx-}J3a#Tu z%kAVqn2&ZtE36I0qki`z>_`MkeiZ~p+!+Lh-xdUlZVCd!Tmoi1bMMJe4DD;SEFK#n zK&imgd}2N0`?Nx?*o&Lw!|*)JvNA)=EaXa%R`AT<0gXenn~QQpa`~;PO^&Py@56ei zUs-3h?kE0PeQPl+0ySapD3{}Q8LM$KuNboFI-4f+zLphWsVzH^BkC2Dx#_m_U^rvM zaX;*nMujP_6C+Eww$chXQG}1=n59|tlOS8e{e+`)ePn8u8rj}w>`s|X=H|J zO+_-Ihf;fYTy7qxNA2Cuk=O%{v1V`D^(H z0t_xAgBXx$hR^}zl0#G+mW#y)ndFFQB&#NNzXIo`52dNGD50^MU*6(VjpqN{b_+;@ zNMnxRO_$;k-}(WY9#A$K@}o4cRC#Ft!5Wd~)KoOg%`=>FFCanMyP=}&%TF3A%j+z= z7jGI1Uva@Ltl&7hUmN;YV%y2JA$FYx72M`-Z`(dNVvMwSU;>TA){{x5`hlLC&cCE= zo{X3EF-DYLx9bz4Q(RBpn|8AE%{Vlsf=|^H3j4y%014OR;Akb>x$4$ z)YHzqAFz~Zdv9>tzX!998jO-UG@CTH3h5hgL@lopxzE)hQa*GV*7Ud{s2xdN=mI|pwc6dZRT2FJ;3#AN!-RmPf9vo_ogr1Lt zBt=Bo=t)=#_-+0lX-}dM9cWu=#$<894QvJ+JyB8wsS)KNJBbP4#u8%j^9J5#a~C8y zv_S`Jh=X&0FbtwmJ&6D4V*Y3}52DqxS2R&qFD=JSvyet~u@W6@3`T?1O+%fVi_p*1 zn5;-fRm`BUnBx)M>&2e)1)V-kTTxRhxiQ;nM7?)e@#(1o!h=pp9pgayl0(0ToiugA zY7XuwJ<5TzANtKAe^G_X!f#Y4qW&D(-3rqORKl?-W`kLJ(T zJRW5tS9A-@3x-Gh9NKc!+SK<@gXti>PlrM2`P^JC)u;GN=JIE!DKYvCoNedwXXErf z7fw2xpQ!bIt;xLBo3uXsjs4+FoA z9<1o>oOD!M>hz3_A1FA~F=?%)NOZQu*6X?8y;{)e`IXrsW|ChML2BB9c8C)p#fyl#!Q3cfJqxGx}j+fYABG&{iaqKt8OgYqt0Pr_cwiBQdXKe z?Ni-n*UoLdbMCIh*3Wd&zH&2`FNT^f4G&>v7^$pvt{wpxand<#+LC<|Ex9Q4BB@R6 zn2Y?B;VY)RiIsf_PNu(Q!B(PTnIxl3BB7np(8mH%Q%|BgLOoq@1I~{i7#@9k)1DpK z^>yxA%+L{Jqe#jOH*k?AV93YKKd2rJO)@=2o7*CGHW%lyhq66V@r3|}E~<6+)rLB< zxs59jvw6r<#b!^ic%VrC487D84ShhLad2CGHd1|t8MKUb3a;osaMAv@N<_Csu%Xi$ z4R0QW9K6msWP{W4556ncKpQq9s-`T6=)A%5@u`WgPK&0ZMR|!f4(68kk09K~BS@>( z0te|f5KeC5rdLIO{>z)O##1F=aEvghQQPb5SR`o@ibX0|l@%A<90_frt7&&rEf@?c zxS81G&60>FPOM=+Q5l?@SYzff*^42Zxoi2*?8B^fmqu39o2{Xf)}y(#uiUL)8p#^aTt@2UYv_;SPt!f(&369`JfPf--%}>M_^o`WbY59ZJu%M#m zfo17!Aj@*9>m7KF=?c7Gq4%@ByvMng(7A2I;6=w>W9 z=e|{20h$Hk*3wAmB_me=8_ms6F_>R0>~=;$YH%&P9FRSlV!~eouhxcG=^;s??wX_N zxU4|1pF`|t!AiO^|ZiDg5~XR-NYXz?%(T3%usa*KmqA3aR#Q8C z#kvNwX=pn8vX_)aBdNMRwV~(CAa1X%ct&!`bOXZ~>BJBoye?XmW~z5qEg#RYf#8hq ziayQHnvrtQ23~%34n8~2`ZzA%xL@p98gEPs>}Xha9l|sNC2P_rVxSa@mSzPivSy@s zMAR19W9cK%-WFv2>B+=A8I+qiz0L-jcO`1gkFvU2B=!AIq5H5au&^_fXTul8H;%G8 zTBkGb2Ea;BJA^z|Z=sJ)L>M9&2Nj&iDNAP3RjsUb*4ZuJp8m7k)>Fist(?#(FPKxc ziM8wvXyLFWTzUBx_MWE?N1?NsLWVWxNToyW8TPz^zk>>HXx^+GRcUEU^+ zIYyNuRANR4DK)`w%>23$+|Gxuu~`~}C|=bF*C~qk>I^aG(h`5p1%-$pp{0 z!Kt>H=okC9uh(G;G-ul$@2Uv4zgvF|IUA&E28-WTg7Avh4nAnK{S!N0t9AYbgSX{!_exxeG2h*Wc9rePksI`*uU!kIV>r6$pwju!K`Cq3J&We2x zTPEX}>pbCeZLrixm;Vn{YriO{T6;!b(Ku>G(5T`Gw&G{Un-+do760KLQ}O!qa}_^t zgFPz_>=XFsMQ_PVPk@yq4=gD}1+|)A?!8Bf`DGo72=z`W<+mrC06^DGuy_=eGBQ|_ z&Ro$k`-Q>xB>{Zvj}+C63oLR`70Wc1ViBHS21&I-h~+K_DwXR`99;pPxi>i31n`IQ zeH!M4GL7Xb`A1?aH^{vO#!{0btGe)O22Ersl`{&^Zj^2=GFEQJ-TWD^BVTZ3;jX%F z43DkYVR;byv)!=Vc7;c(9E(+U(g0%NSuj+bdD&PZGbMRjgqPYNL z|L@iK1(`mKt}EnB1J15Hxe}OR*IDD~6CWza`X1`vWv-Nh*yi^yQvAQN0Q4 zDC48=jDt;%OiAGzeQ+0_SP{d3#B~ccWWwhfREnnZ!_|J{vL4JPfSLal0Cq9gBt^sh z_lJhi?TPB?wg&t=-&i)87-!z_{_3ZaMRZW*8l8NY9La1@Z$FDMh=gVmunn2qVx*!+ zF$+fQxJnhx!`x6hK3Yx)zuMGf3#7!tQ_)nEQaOS@W#x|ZB8g1Nff;ct|Efb|mhBgT(S*9t= z%yPBI@K>rRR15@nyJWw=auMhoeQvaq{Nq4`$qf3!$x&k^6S3(}T?RAwrr7x~h~g?l z`0JF~69#A8_$WpHV%`}bPVF@o!5ZEXyunTHa0@1b`yL0I&&R{gY)=}Wlsq&dtcglJX!WIpWcMg z4ekdbwAz4uStv*wrNwP~@~3c&5jma59;Tv~S8gC;2@!@Gqa`VhgYV4lh+=hG>;Mh> zEK!mi?dc{8+;KdE!bvWpJrD&|;6{r^(p21&Jnq=hM(uEtbEqMhmX8`>g9T2@g9H;# zmaU-Lr+z)M zvU@x02TY>T;E>gk-5>GNj61f*nI~rO!k@KT(yk-#`gF(G8V;r9xu=gwZ|B$0OE&z8^??x4 z0)^lX5+e!rN39TvBtGFZ$-!8>d(B8k;88R;BYk`pvkands#PE~mkGy@(Y<($O;X7S z4Hg+5K3!h!#|TZ0MFrc-+{`00oM2S27~cc)+e{gRE^SsJW}KiJP3qVY;hyOeP;455 z-dJD?1Y$|j+8tZ$$9L(-5N)et+2J-Lj2aArMmC?gSJG$}&D8s8ruk|!qbm8VfCb{u zOuQ#iRj!!_e!iK`eEcx6u6ojlHLc>)_aQPH&uLkj)x@=?{CH=|SU5L7B9 zcqEIFuvpFEA16o5LAyFkjUCnwYVl{slr0!THfR1vLK@b&lM)mb2kD=Po?|rV>&!o0 z^3Z1BL^3fgE-@;)nEWsdvlx2BzM98EzTWo?^0I8Wl!flaJdqkm`mRFhXH`3$&#cT!@YqQfcKk4Rr=i3)9uU~)9|7=O7NdX$RbiN|YQOycEJ{MCuYtfMt?6KLQz!#$j(;YAp(hcsi_v-(k_qn44abDKSwr9YCiTffaJG$<}Rs@1_I z`y%=&YT(O1kXbxkr~+AiFj0LaI~bwq_#X?$Y=Jelz}sWs0$1l-V*X1^pKzkgAx4Aw z+6I=JRlr#w1&NH*b8B}o|9R+kM??OG% z-y61_c||?RX5RHMdpA`eN!mwi$xRNyG;lK`KbQudhiepM8aN*==$;0iB~KtvhPkRh z2fY8T6Pi}^gV{dYjQ=2mAXoEA=xeMs{LQz6okvbPf0A*w&G&rMr3PaVpe11 zqCm^fC@DuP^L3~;%YEsydwx7XYtbJAAI`srD-C^}Irq_N)qKu!T5bm6>@3?iJIgwB zOuCsAlfNf^&it>UhNXv5O*enqnLOWVIfbtO-)8Rg*Hs&xU+ANVm$}t`s#0ozAjKU$SP4Uu>K5`sDXbmT;B2vMkoZ)4YDjHO7k8n&C#F5R~l7Fd)h6ywT5bE6dT<; zr)0ao2O~V`EH~NM>wb#C2~Kxc8JteCIQ{)Zi_=iy^h+9kv#Z+eVIn&#`_xE*u7?;6-^2Nx8DNbAHu4EkU``u1Ti=?4<<`LYKBKmp4(#1-}-YheD zGR#*9Q!OeK0)9h&hGykWd^BqN zIxV`c6v*Smo|93kL7`gW!fC0pcv4_i`aB!fA}0&7APe$%fgBQm?B}$+O9uslz(J{V zT6CWUe8N2n_sbSmj`Zf8CWG-+&wP}vAt%1L^plriOsn6gkVlORXM*+ zE9nx+h4lS|f%_AieYDN~Fxh2*I83=8#kvu6V0xx4DY=%u#Fl)*mi){xP0>tB`rB@z z*ggbursR%i`{Ws3o3bF?2!aq$)K9 zv%P;gQWF{tJl^)w6)7-KW%1iO#*Tz{c%k`7Py}3J1(&3Qcf#1MVT%Vt%Ec zF?oa{6)#5J?M8LJ@;GnA?;l|d;yERJp7``-nG|Tc4h&(=u zU9(*Mug)#?ijKOI26A1{tXwlC6JSoz84yd=qn$Q@s7%45IsHFNg?hs4^M&wUxuX}n zeBf209O?x(LHrLS*}cxZvBvhGAorqAPxzrPgnw0U`1h>t4PUO+{}=dne*!);JG#pX zY!!HI+K(!OO)X=yRH>#G+R)#&;Y8|yKN%U-$rajS(1>KxG-TD+06t1ZF8{`RpqYKc zQ0ACx&F5U%`Sg$WkL_S z!!qqM&p%ow@R^ND35?b5xYEoCYU?ERI!m#T#Viz*AHiNW#266e;w7Ghb}Z z8h}b!?2LrQqp4S3?!|l~m*qizujmiAL&K6+;A;?Sxj~qLsu>7IG0BvCjfN3dj<>v0 z0SKb|DOzttjx&_^5C5HvaYco=NUlQ%$WnPp!D30rHE}IM7b7AV&w~+*NXPd_Xgqg< zT)BTH*dmOyXINw9q1oT%yq740;pX5Oeq!9xZjf|WL?a}zJ2#t>Ud@T>2Arl9tT zOKos6!4hsb5Nr2|4S@px4OteeT+1|L~=5RVWK8f-xNzx`B98fB3 zv)DLE}$Cj1bY<6tPdJ*(wp_DA@E!H z>Zq}HFTYAz(38m0smJ5engoP)wd89_(l3P;1>p=_~=CSfInjmnNelCW!XWb zdqpwQnK#TBDw<$Eo_pG$cuG)`9_2w*WW0vYVMIc}hmRHIO0G6^EV}e)FgUh_`S;#l z@>={mvc+u9mKtp6OZ_&-x;Z0LGDX!{ekhHPA;ru+%j}SO;1;2`dAWvv^8|Hssm6Cd z^b?9{_A$>L`QnTi-JHc7e9E(nJ!@60EL=t>W7)_ zH(oeKg_WCuaodyyOqP;r`Qf99jCtmKPuTx9b|9J6h7BWj#^&@-G!2@6+4FJSQj9U+ zLA1_&uFn0Z%;;t$I>|I>{zLMe*Pg9Iai|$L)Z`={vd@S;|CBRmP4y=WXm%!!?l@{I zK^&tDpkmIf4XOH1{D_!$h>)-GpZk>&t8Z}*xavR6_jl_PW`h?W$eEIh;d|OQBvIWD z5yD>PouD8JjOKlG(!5~{r~qEQlAqKSA-tof2G?-uF5mA5bh-!TOb!0NsW9e-&rZjGPild*_+n0CmpH>V*>9=JDgvoBKh` z7=qS33SC3q3vAELu2h9Zm+1?UQ0lkNVX%HjqO!Za|F87_2tjXJmcwN^&GM>$d2^2b zvk86~{TqJyU+KRcZnX5D_lN!I{}^fBu#r>%{SV`(H~r`R;tS}%^Cn>o{X0+ZLH~CZ z`+q_Ie%bc+qW|;tUqt_H2uDWx?2-B@`aoZX{x!2dPygUNn^7o@1{=d-J1BD&JE$}J zGE}9nmdyJ-)Y{ODLeOcV(ubUso$u)G+ii8n9c!xlRUnx+&eBW}L;SAk;GM9K!<#pmy(?p0UDUtg?awmqUi|<2b%e-T$cenl4c>Ld z-lc;j{-W7+4bsY)|B_@Ik(C=ldn)|hdhC0#3Mps3X3Ivh*K0miOjB0cD5hL7F@;L; z8=_@eO-ri*Ivb$)a(o-WF|F#x4`GK)>#s&m(E68wxoodZ$m0g;8%DPJT()|b+YhaN zy~)HK1|dV{dUMVlT+B|CK(XwjGFwH+&j$ue$CfqjIfEVd6=qu2H8bwh4Bgs%kW}FQ zRd7|CnS!HI1j3IazhS>VhGUCTeEF-cW1`t0dp*+&YPMxJ+=}=&f{$6ZakO9Ok+S}^ z>;X+(U&52tkLO}Eoy zOJ=pZf&vu_pQ>(_xjJ(isAlj zmNs>OZR`p^Rj?SOb}&$81*;Zo@2%UoC6d@u!A1_NfkgGr-(nekDxbX5H@NHlg_tH7 zdo4$rvG-1ek;QlM#jd}9>eVRSJs~bRFt6V%RKvdlgt6_kXpurohxkukrlHorP^%q6 zoD`z&-Ny!~W_J{OMt9H#<#f{qb^oUenUt6y(8+7iKZm8~$z3fwP)8U=Vb~hJW8O&` z8|i0w>Q}SmrF&Rv!-2CZeVm(0??1_4aj)t}~d=N69GO{RB z&X<(LA6$hjI)U6dZgN^)gItD*d-D_=G#PVamYXI8;hOYc$nT9>xR?>VD?W>=Lbj?~ zZB_pmZmat6N~-z+RpH)_0TVyt@*4cxVQ+R?)_@{Bb%NQsdNTN6Xyv6J3_ecQ$M1p< zV}sV)VWvz!Qs!r~X{YIGKDza#VE)XWU&n9Zn)pd9A`upO{`KNHSssJcWOi}s@ml<> z1>`VOYb?{l-=>{xzXZNL-;PxE|1P!=H;*0J`+U1OZ;gi!GR3^5b}D^NV{0<|59p{hW^Xh9cs!;%vFsQ#MKG_r?HaTfIP>LQWLL{4Kq+Xx3NPCl$p|R9^f`tx z2S`3c@xJ^mXg;K))*J~kuO`u=xO%s1CTSdNmhS{YeVybw8{&k>UkG{Old;mEmh;wY zxU9_Z@2?DR6;1sHljLt_Xg|0inw8bRri?T1d75Emb$rq6y;e^DiWHd5$ZyR~VsFl4 zRBra4<0)XT!N}+f{Kb5j*0pWPR~E#b)VU^pR-2zRmCF){a@CFC{pSgQ2)*G!c@>3da;y zpizPP6u!YchtHAaeDZrj-fX;gTFE^U)J99bPZp9jh5^ipkUK!aY#XLd#dcECUurWN zMKR*%r{38$vK?bD1G;r%$n9ljGJLW!C7eH|E>%-(&$i59S+rbuh1$D{df3xii)-Ef zwV}=!cc0wL3+vqF&6vPpcxf#{Ah}wN`2RBm&=LZoa!6D|Q4>ddbr|N4Ur?>RQ#Q*G zYnH#+2iYY7Q){-F)7yK=m!O}WBuhvg8)&%@5f}6zk53pD$wwBOme*`G z+81Ypqz8~@*wS!*Z+?XP%wjd*#DtawY_HFvp7dp^pw{fTF4gc+Wm0m|%R~^>Eb;pn zL!GF^`cnN-g4y(6XcMGLE!7{BpyHCzz}4tnsy|9FV*LUVa!jj04cWhxds%wrxK}im zfz=$R&GE|of6@YVN4gn`VBg7dW%>b;q}xAjPyIQVtXb7DJi2#-dq+#T?kQSrZW+Ge zC-EoTs^awSt{@5!&dOQpML!}lVbF1Iri$QUoRqQnFND9gP-vL?XFxBUaTtKi(k*MM3t7oGE?%$ zKZCtd%u3^z83mie^V_kv2m#rIe-y(q67%?f6ZXk`SUG~~A&5BHZ@>_5a&aqWuYcee zwFmKoW1>KdV?xyy!1<9$ENE)-jIFvyoV9`jrl$twHI$mqOi5VCF>r>{0+PZ(t{EUKG-nGyxy6ZX`vL@cbD&;zYSyfAq#IqVq z6}j(Ao%)$_adJT3D_PRr%gTc#9S{BTO;rPJRl{smtA|>p=d)=jJ*Sc*C*OMd1Hpzi zUv$cCn`ZglKO}C4!DNzqC@b$Ij-gH zTmIWGvKmjj9sZL9RMcHbSF#DqrmRLz4IrEcKjpwiy*Hv5qGs*Gcy_0iE%ygCs{hFz ztle2cOofUp+I6G8CbXI-EOviT^)kzFXYL$|@bFXfFjZ%`DPp+IAUheL^KS)N0qow+ zeUXLxlf>r5=dlG)1DoogN|K3QG@cJt>CP*^X1epDuUZ=4{d2m~V43_L`EZo?O(10P zm#=*xuzRFAbMb!Tn(O$2pV2>xUV(k`*Bvk8z;YUq!sIfJ(fuA&&?u4JEp*2n*m{!K}xE z09^jo?2hBi61t{mz(HC2&ak6y*F^51Rb|~9&}Q>@VR`S! z$=PW}9GEp+nmZD#KspwR@SEdHA^OKarH%qy$G;D=bquGDuDg++iR!z^9Gb4HS_3UQ zou-?L>M7`d`aibe>huMRsR|{bUX&0Q<>b2|xJWV;UL~tJ=3BX;yJyrX>JNG%eT{}w z?*5|e^#)t^^ki5Cjl~w@vn(3b0mfH=Ng7Mk7wtzQYVWxUk(JwjV#nr+ePC{OlREb* zWOk3fs}mJ=_bA^6wR?0YXFP~4CHNY$f?zqp3v6&C!4t7z5Q{byezMC1YY2YbW{447 zWHU4p{Kbac{?lR`oJ{O}HkjLg(k)wK|3N;jp@sh7OMojW9e(9X9rV8!TGMSCNsF=2 zD^Wj~Rw(kN3#8{7o*Av_yF&uYUdNW*P`N7z!A8IP7c?$O5+MmU7zu|6zLrnCRZ-(nmfze>_1yC$R=YH* zf*L$(A;6*U^Pgp^hK(m-#;Z)<)?656VX`;W{BN(ML|`pF_f7vi+MlQA#6&N8uB4D( zL!8zz;Yaw=zmD+IAe1RN{rAQq!h4lPO>C-iu7o7DBxDwnNQOK z@yy_LF|WUW!E{ zik=&6B&02p{&Xr6LdgtD(E10+{Ho3T9h-Tv&FsHKwyqnr!M2}%FtY&UM;!}N7+1v13!ySP)=<|^OjX7+{zCPpMnUVv9u~)RSnO)Z9n26Zna>MWPsVY5d6~Y#$NN)H0I_* z)nq)8G`MNI!Sz3A@hw=@hsUWQeq6o#PWO&dAv=1d!H(WE|39-e?3;rfy}#tftHAm1 zRPvyyTkw${_^hr3)O2odhD!;gzi)|tXtrv*zY|pd{&6fWu2IL$ULn%;n%Io|*pI$b z4Sk=E=ji)qf?r7A_E}l_{)p=v(02|wyXkukU;fkNG4!3nSB}0F6_cDn9n)Xy!3OE?1Y<}uY2uhm^}W{^CjXnV07LjyVo&)i-_cfzj`l-WVYn^ zWB>FI@9C9Z=gpE)ZT7xa>^$*4AGR-p8!|hbw#K1sp8)R)@}qPvQ#x>S`Ty}H`NszN zl}`R%{A2cJ%*xR&n9O+te8`zWQpp>S@39-RDnFDd`Sf?T*7*mkQKuKOKe1R`0U8@%)J}p4aI^IM!r}bFyJ_I7L)II)ZXv{)K9wPYGKk5!@$}VLyB|ijv zvTQLKD9u{-QJ~cAzeCi+X+^fb_M=w}RV#KG(wh@!oEkue66XA7HE}w>`R$lDqJnVc z=InVp?`)QS8{&f+ctaL>vejQs&FBl?G{*#1@+?PJ^DEg^BR95t;ZTzosd_EG)f*SJ zcQz9`cjk?c%}$#;n%Y*HNz5`m^<$U9A6+Bdx|hO#jJbamL&;>+;%5oa(PG3RpHn(o z_L$iE)O|{xeVwuUu>ix1c`BO6W8J2hf8lB@jpMO2wrnSxe*&M*c}3!w&g3)VRAoYA>zv^RA7yCjkKBYrqZMFHIKzTz63(3#75S%fy=AvRO; z54emq6+5g+v%^}V6{pVrKR{Vl=e!NTeg*k{DF#f539MG~R+Bh`eGQxbE1SMWrEJXU z;$PV5PgfJw%?RnsQ2xxNl^KJVs z8BKipfB551K>ucak$wZZFx7l(5Y@4NVSb8ER-@SJ!k}xk)@lxG|FZqvNB?@8PU`O(o0I5$klvcJb z?Mse2_g&m^*Qc%>TJOH_VeC&)x4FFD^}BHRwa#RaKBdz*EQi7rvbk#M$fgKuqw+e| zgr#+uOJqSQm9xBH-MUs`EGwGLhi&{d^25pq&+w4ewWEz=u}Eg47N4W(=q+Tnx$5zq z?iDqwRA#+d6!L6qTR$!6M@DcO7D?>m>cx4QQ&Y7=dY)mc)BWY}&$zWK12HGq=HH#A zeR2FuMD67N;oBRy$v^ZcC8mK>CSey7()_`YD>o zm$s;$_#wS~mYBdBekfR0ZpIfbx~FY}NEWo#9L}5=mNZQKr=S`CZE63&D`CJgjjWtJ zIy+}!V_)4`{SsFf)8#Cy!S?h*O%4*%$n8LmXG%U(%aG4V^i0VucY&@qeA%yv3&is( z2Hby_(1X87LiZBT+d-far{xhFf_a`Ggcs4u z*0yv$-uZYr?@x?$BKaWWVG1R-a8?Xa1|wWI)V;L4&fTSF#Emhi&ON6z%hES(Ay3SG z1)i-$Cc(2Y&%^~8Ov;fqg{LhHFGrXPBhcANUPs}m>o2oYs2y#w)TF+prV(#AErM>* zUui?2FHz~PH`wpOHG1q%@&3WB+eAmfuH}8=2Taj7&&~HqYzxKnSM_6e`<(KKdudZ$ z{yB`;RU^|?@VU`H%?P7Mb2kpGUy7W3q;PsKawE&HInahe$=6Bh+T2~epgv$L$EFX`*SJzXulsuBp<~lyfn%~q628rU z5-}DeQ5NQL%9O)b`doeB1L;iMDx5jG)|)Shixc9gTQ|Dad3?U+MHmbx26el4IuAx_ zIwCa^nTgi?HouR~HRQXIG4V2mLh{!d21cLqp)lzeD@ii-I0XRv7KTJpK_#qkRShKWLRBdgsPW*dWJJO!AqS}=dM zU{>`9%t*i>!Z3Yx%M)@AvN`A2oWE4gz9y$pX*(ij+emnC5Ag02ud_|P+$)+ym0C+4 z3Q%CZNokP(wuRLwSj*7SsC5ryXFdd+_NTfY4D_Rph}l^67q$jFM`>LW>Fyu$n;T48 z6v@6$er@D*Js*_+g7ZTtr+-}t8dl%z)&hSk`O#Yo{Oc9;Z1?1EB~>r~Z#~YBjYjvI z^b_iJTZ}2?zpz|GJbiP&Sd~Y^y zUQ)0aP(4PH**_r3B*fqDq0}8NG`nvO#1WC!3t8$Z@n(JMuUquv4S(qlRzMFC&dnFb zna7llxyl#9t4E*1S`%CLBwCB7xO2sal^bSXYbc5e_Yii#I{bF?Qu6J~D_fa7gEWo+ z;C!1B;sEDyQ&4){+30n1t@6D&1VEncXTKM@j9Kr_+LszUJm&S2E`Z zz;5hMG28y^^aq=nvSkE~$VX*02$bffPbRvj@}%?DMhhBO7;k0*fAGg*119iujt~Lm zzb$652HJcIhyiG2%$zKbSTS!j-kmmK^ zzb5aenB2{DY3G%g`+~vcd2fO@5W?eMw-HbQDbDs6I&{L z*lwj;f0mqWB3Mf7BOjQcEbB9On4m1{@4+}^kY#Xoo^FGI2fzjPepIP9>WK@CO{f%`+aCyG6EgEh&ffOOrPdyVC1^hB{yltqqnZg~ zpuC(P{p$!%3qqLhz5=KQJ|*7*qur(5K#nKH{{i0=|3@L&UwZYvYcWn(x}=ro|D&G%*LG51_aI))V!wk*%{8=Q z`wc+0p;uj3;ay!w0!n`B+)wPrxOjyO;fgnrEMZ3=s;rjTD&i6k68XwN% z&-w3Y(iqQT5cOc9_?AO|%Ky!lX9?opZ-Yw@Q6+bE z$KRwN_r1WD(%!&7_}2)7RJfKHi|^5d5*gMHVg!4F-l<*f56v~GV!sCU2^wT5GQu=y zfdBE&3{zBk;XkqD(dC)u>8`zJnmxN<$5Y2Rqi_8!l)fC?WX~Mn-$`NSLADUJ63X*^ zuEq5#Od%ZzT53)OeMjYT`ZY;9#Isa?(ub3jDOqzPmnjPUi-F4g_w$gM9xtL5^v>0M z=>%&_W9}YoZ~U_QUiK6}F6;cM7aRQiEkEVAm#tUT&&f1pZuSF-B)QH({mrr&EH z&90dz5ON+wo9J-I4WUP_m>RTTTygwp$c0Ku<6iN-Q(;)MDi6GlV(k1*kG6P4IDFFi zlrHdmE@PhV?q|>~x`{92?)8rGDED&r+J)np@x}h3s;gt15q(_P{9DiSMLpjy!&9d5 zuWSU5qz?MfXz%B-Zgb|96kTwP|-%<$L}Ng1ktNhByjd)W*C_45gWM zoC6(k4p{MZjHQ=17S+gUITpsBg}WgqIh>HrOO)c8?~Kt$lQFg|=f*kbj(J<1`%)cN zw)(1%r;GR&ucOjnSo`CMC@lJA^31Ad3e)AZngP;Gpr zJ*)~tD*n=9ektF;=qI(9dQi`&WcA?M>Kd~dMpOTDhUMj8c3;mzV-3uwktjTW;B!iD5 zG4pHvpFhhjMxq*nDCvtj;U4IV&s){8l-LPOAAz>lWP_85J>Leu+~2c3FP-hI9;6n9vTmU>!;f%LcNb)a&k24n4}Omde!mj@ zo)Y{X7yM?+Wxu!2w{Z6D_q#Uu{!UOX3pZOXo4g-G09Z1>d&@`Lgiu4!*w=q+byHX7RW+_|BH!7UaJ? zh`&7e?r(mx`fO(S4e+AqpZ&eue0QgxwcqzqLH>h+-#)?b&bby&_Pf7{7k`XI*rWD$ z{*;;S5{WYjzgVU^0!>5pGek375$yC$>yI#gf6VHkdZG#O>cbokD4+p zF_|;{BTb=tiPi8Gf^rBE1~w5FD$UVki#_@DIO6hVs;?<@%}mFuo<`D#6Y%J#O@w(7@KAk!9$(U*9wap<_&osXxtI0OVV0MyL zILY+_bKz!I^AiO=Rqz@Sd7PsU$12+ELa#NrKQ6|3p(68q_dx9F%&-FklXz&IVKp3K zvhoQZEC6yQnJF1Ehaf$19=l7?#GZoYBQoJnCP;zwwa90gmRQl0-FZlF{~^nk1&KX1 z@lLE1&yp{)q=x!5nWNdmx^*G=@QK+dUXSxWuXg6B?;d3&OCcox`5s8_MR6Z+wwVfw zzDooTE%@X3#6%Fy%VT>+OFs8)7;~~W?0iaN4eB3r-vyD#r1RT5!nMSSGyObK=uXb> zn57OoXHWy4YURn3Ej#=R98y!Go-r!Zuoe7tgug;j{fkws2yU*0^NG?5tpaU+PrvIH z@pr&=RoIkorG#eMmc371zSlGlg~cx?Z1tU}m#>?iKle^AV3j`A zn^4G@a9U6-8CdND;dUo+tSFPJ{?TclX6l{V-pHvp*^wC-o!qX3e=@y zTI$Suj!cPt7^=U`Cxl$I8@hGWu2y0H0Ig93_hm!W>H~lav{>rw6?Ux$I4_i+uhHh# zav#^`zkIV7mOsoGVw;I!1)>#$G4QciLwn33~7aJ<#hyxjFbVqdAf zGLhIfONlyf1EPvP|jnF1ll>C?;^2XAMV+*~;LjNMEHmRcfi1wQZ zXJwY;FLe6*Jdw+c#$m`s&X+49)yRmgDU7)#x9bzWdecbf9{PNCJr{n2;pw(B360e7o(bu_2Zti81T* zns;_Rg8$4jj8&-bhsM6%5q^hn(W)z{HssbrH5{M+xv*Sv-0$8Pao5p=vb&J6s`mJy zvE3VE?y&QfBe9=<8O|xJyhiKwi*#h+DuV9HOvxPmc4SH(=2wTzM!KsqB`+$UyDfIS z9>ZEfd-w;$%I&ereX+`&v9B+WRlO2F+`PQ94!XU@Ml*BfJNoIaHn!y1^Gi2O`6uL9 zc6@+s*Lo{|vchMYY%r;!p|lo%F2cbZ){nl$P6StNGIQ=v6s^sEj#u0xhDg5< z;cDsuC0HxG0c_GUp`&3*qu+R;>Ra;iT4$V6o#N;6pBb}7G+s&6A0zdt+iliSMAYQ{bJVUxTW zS5z~OXT`6p4ine>PY@VDwEw{OECTjMlqRr?O+scJYu%P=_VHWer*UAPGK(prk?J?+ z$_TQ`eA^_bOq$g*Pd28%DjHM|Q}NZ+H}Zp%TcxzZIXV1{@ytdTez7z;1n|7c!kyhd zlu$SO8)=A6ZKQV~wv2XRvF|!hS<@0`HrC+xqK#ca?3dVE*pKfE=I%=R9jT2h7%odn zDc!#01I=x_5VabY{sE9nEgYOBt}Msd`!$G$G#QtUBxikUxaLCxA9f$rFt|m`pRl%zVxMMbXrwnxa=ATl?tIV&)&{rz9yXO?T zOF58@&EyV?0UXl&bWBv?o^1yEFZz#ki&W7RP(c6SP>e6w7jUV-tjfvz?^oTNP=u9KFs+8e6t~*C_=|=+i-~%b&8q@N4`HXI?@m z7=GPg`L!j>uY1qUg1y6nb&^vk9q??|J!VwIe`!X9)51bIlm0P(?0CpB@S_2c_{HFb z6-5BVIhl24n+sp2W{)r6-!%dMex@n&Wb#^8Gjr<2K$7<~E`((K5%5&{Yq<<&eASU5 z-9Hy+_;Zxvb^$H-UR0_m0vmFUkpszy#z}n8)$!vwz_)mYqN>-EvViwEUS#W4uh29f zh}X9G0nCbsoewn2eV^lJo10&ykKPs(+>yZ-mdrmq-yHhP%hregRnl+7R z1ka`G(@g&Okw$uSgiqvCgGAKkd@lZ{Z2BT!`?dJCOcjkLCR1{d5L|2Q`(3wX)td!8 zZ8*EC;d}9ZQXis#x$w*}vC#V2RgJamIBr++l|u&f;jm;jod@4SZO-G7!D#5AA-q}D z7vtv%8T?GGu0zFdNY$?{uOr9dvxK@A8yF#>YTb;&d|dHVt-X8zD}eI)s@2VJRknWE zp4~rkpZDt~s1zv0MseV#1)z|bT zM_p#M`mb$Un6(#vEw0Hg?>f-7C(&LW<6!%dR%2x`BLUc#s-XEcyBaq;ciHtU!Zy2a zAbMMSld&|NDU_aNj8WkbP>cu{Hu5UgLVIjYI+F-J%?Cx3YCa7@e@qpXsO$nV7*~@A z$1V(?tkS8HPpUuVoaw|qeT}op^7bC}Z6(Q{Wa~Qv5)_#d;k88bG>-H5De8efkl?Jo zF!YGbTHf%EwQYq2gV(d7EH0OP-BojBDSKs%`~zc|XGHo~)w^O2#Wmmucv;cC2zC$~k z59m64f!eryuy>kPcm0?Rsd#A1=Ied$;(@Wy$1!HNtW*l*_j|qKvhOK|CpJhd3}H^15k9ARB;kA$9@|_- zxWI(ZY92y3?5S#V}!teOW{D97u^mmj8+)%r>tkQWzrgV#7QV$<&;w`-7~d43tVOAQMUO!GS>JHodHPhX-;v@-Q1D)b)bCce2)uACFhby zpv;`KQ;3(^>PTPbKhTJ>b3oAFZ?yKRX@ROJrFhq`EdMwy7eM?sTDvyc?>AbNqpxzT zQkOuV(XwsfUq^okmHV5 z=O>+)l%d0|U?6Yk#La8xn%BP4)mP)^wa)I+h751CP8pt8JEb}=96$KANo9pooP+Ai z3U~5wIOT`5lkA);88yVp^9fvXUJPZNibu^mIY8qCGJoyEM<6x&H5&||yKSAV+2C@3 zhfl#%dakc)=ubSrmeM z)~Z__Zw@6)Xzo%%0ZRzcG342m9u9Ei)#qTwNAyIr`EdO3eHCWt$3T<*Ax!tY1#)jA z+$rA;*J)X0+7y5F^Dx(>wSA`XknOcK|E;Iu-&QYW`%Ng@&Z3V@e_e=$N&TcQa&G8= zA)FQ+=J=w%J=LuIUh$6&%6zVGd$!_kfT(8*XyE5s!iiY}LN|H}NGC^kj2akX+f(J8`uU z2aVLxxcQp0$%Zif)!1C_&6ku-6AG`dQ3k((L=!cstO-C|jrbfshM-CL8`hBQF-&}o zu~^Es)PHlIZC|!+FVbEi`=4!w33sGdhyV-z_fGt^0b)B*1X8D(M%-R!S*;mpR%)bI z8hGlNnfvt&Ozk8m5!s^~lN0z(-wV8+k!WaaqY_Emli40Cnru*J%*@ew7}5V6Vw^d% z_!13lzwC65S!aqp1e^PDXhCy#q+g>6-BpNBo#Yzg(i>FG0_8zDAglpYgR>XXoED8f zGwdHV@{VqdBZrVho%@0s`A*O71>0%49x&Udo4iz)j z5Hs};WTqY1*}7?Ur~mp^X6iMaA2P)bH1jH^2j&|C^h@)9VQw>j_JB`K_0*!8zC3@q zKktii6#~>Bv*Q*j^lhtG+8UfYMs9d;`jOkH<{C}gh(@)EE z66kLR{_p9VZunmZ0PuId9_R-UKdT)G=pO@Q(s+c-EKqqh-oG$_LCGa5SpXD^D?{*g z+gKqPpmq^Zx<_4lkzn=WzuSQK#r)S~SgRa_%X0%i)O;3LtPxjS-LTU+YHfEOLO4z# zcZ@Md*P1fBR)m@>Xc(tXRSGSH5R*h7qZATW41L|y-u$<&-QYbkpqGC&lQ6(W2Aw=f z1#_7fETGl=+i~*E%Rerkbn}LjUkh)C*qe{)eEW?povpvV{KQS$nBTX)I&3r1Z)}Va>#^F>cV>MSj-T9#0QxUF z@~deGVR&8S=ne7#?S;n+sQ>-m38r)SliM$8)F>b6R9s{FUsKNxcOx|HxT>uAh{Qg| z_BjmB1nK6B>%+$6fMo4aey{E2*O zHa#ZdenjC_m6=H5tq>0m`d5v`dO||#6wY$3Vqe#}DNJU1qh#KzA=Sj}+_W6c9%lFf z;iCwjS9FC*n-u&uDZZU}e$OlV329(qew}%t0NRf%v<_0%&-elG!{^$3ZPUM=_%zcj zeLnow=8$z7PF<@+jDTOb7^38rBs(qtrgz;P>-~7~A41f(EB?`XpWju@J2G6i+)8ST zA!PiUhLHU!IqDut#t#AFsNWKTU3YX9D*g(-L=dN(9*}?<3A;81mU5X`KV(QH_Ov=T z>Le7cG%akQRQfPjZ};o};BO|q*d!K*qa+wBv1&+PO{|qaz84WzmfKZtJ{ggP4i}KX=^876MUupd$(;I%JwY=6_GG#+;nc91($&UU2>F$s2<*n$ZO0?YNdl&Giit~T`Y)Bvp;06d96=e~qL{LFciCmJC?1o+4Tu6d|#fF$Hk~StW*#K&U z)lJlGScsLj)?&p=t!?>Qs+KQW)C829q5-skS_QAWL=^EtfF%3>yfg3YEeUG-e4pR* z-{+Y<=QA^B=AC!mdFP$WnM3ut2N5Id^S8aF_ZXt}R-X@1BEkBEK89NVvj(O)haYS| z&;niiEql~`3r&w{zi_?I>qRuZH#?=tmTWKGd9Bynlwxj*(cK+^y34mis398eEwPxG zTw11$(Md+_?B@WSgXfmYwyqmTr?>gdJf zd}$WuMGKSc-q=R!ZhU*EQyBVzuYGSKT2n63(7u-CJL-L1tJU)_Yz?ADhmZe4jLdW^P=;KRP(Wu?S8$27|oulDmjt*s~Htff1f>`f`g$6ISY zQ~DNPbj1Yrug6Pr#5(Um%ees@-mah6@9ToU?*1$ZAFmWd8XNCK@=e*X=ClLGRivNs z5lpOqPPe4KZ%#X5TuJi-*piId(mLI{1RuRTim84qKds(}=kV^-kR~}}g4I)uj7T?m zzH04`+k{Xw)$jHl!h80k&Cg=ZT7IOao(Ln`0?)M|PGie2kv~<+O$$U8)!lL#DMLF$B~q81=R>VufhIZ0>WX~))9_lF~$37brKAQj)3 zYRXE+!o`Ee7tQVz_py;_Tb%jeP+dH}fS#heKQX)@xa>Kozf4c~OyGeaPY-MrBIh41 z(?9W!ui+vNLni*~kvGeWj4z(|e~Zy+10;^#V36w|xv5k`kR4RI|15YngIfLNg_K(+ zXckXXiq!~H>qBT>^zxVe{*?Bl=Ivs06xJ2cd|Q_c5nGPh1G_v)yuS5y)cXly|AP01 zkkrolfPY4>KNK;p4f<~|tkSd$_8=qc_?$w}K$i?b9&E;i(nlh(TQ zm@T!{=CyrhZS}{Xk={1~H8k*fVo~ZIec$3vsD|Kv05s2WzWotb@P~GxSEZr4P$6zhntmSXu}t7*3cpHbhCEMMBHF&zSXm4 z%!9bK<8an>;))O6X($Q$WoEi-kt@6TK)R#9E zB!NO~_dvtiWn4vPZ@@dvxY~m|oA){ccFs)t4qG&?@g{#uDS4A?GQG}3tO2bQ`6J5& z(!RSXHIYU!p0oy9WikZ-SiM``>h3VEcrBB6{o$IK?KLO1@%!D_;ntOo4tnVAGz0bG`x0Hvz9^kHw}y5_`=%?9x}6`H)Po*0tf zGHep8Tb6_MnhQw@Y(NNvV4?5BvBaO1V~Eqff1D3rSsOGLeF%QWajN>qsp=o6s(+lS z{&8IW_`nR(ReLeznE|4`xL1lQju)?qa(R)s<{v29DA)&%O1k~y(8%nbe{(%Z`^Wgw zKyw-t%eDkMZRUM^q64qHeoRL%c=qU6J_7G8#)h+zIbM3gCl9fS7y5CJ{H_ma^TuDm z$9*c-*f0Saw%NFP7%uKpHe(}p1i&O4{z4n<2(PSSpLYx?1awL=?9s3=Yk=dFi#YgX zdmzMb5_qntekdJkXC9TZDKj4B1CyyCc<_ctgJ3sa1eu4=EH|X1z)jBynM9YZyD7qM>l(KXtR4> z6H7w0L5D>ikIpu@PhGxzy8BeximPqz))+b?5&Ll{y|fi$Grc4JO_Zp-vb`gIigdEQ z3(jk!eDUmxeb(`q)X|?GDb|-x$FCTu-*uXR#hCjVHHF1y&ub@eTHw37(R|Rq8%%0O zd(1LSpNI9gvovk`GK^JmwPBAT_a90)p<%4v3+&(jZ5Std=VG&E zT-KX3*4T^TX>1$D(XGK)?k?ksfo_bvt~9RtO&rAbfagf+DMOpPLo==#1@6$0#poOb z%TOkZfy;OJ@H!{9CzKFg5N|vNy%mf(32)yt2(yr;xi^DI--HXn3N(vN0R1)#KVms4 zC4Ar1JicPgLMT0oipISB68hXIcAlJl5m+X@Ntc-oUqYHG3Hrber^4M#ws*n+kqkDo z!~Sg1(_S^MzH1OQ2H6ia6~yXkZ=-8jX7sK@@lyA@11M=7=1`S-#H&+d&Vwy0OLXhwo~rh>lK zRSmU>LM%RRF(zRHM@tfsNrPfP>IN)+Zj1|nKI-1^Q>ZAgoG^~HF;6;#H0q5Fn?Nn5 zGmH%>(6y+uD-XRcKGjT0XA~SVfW$tCJCi_1F~0BSsv|RyDv1usou?aGVcC;#Ho&Vc zF%9oG7+2RopHQ{0haZW-23%?Oz?V7#EO42tnG=YzPST=nP}8V5t3=`fJ%P;e@6 zKPkFt4YI6L(4MYrdreH;Y)9z^zb@_<#I45_Q!j5|;%A5Pp8kTvG#xeqcV@iNL8oAg z%2`2jhs;Nd%uo8x$JLHk@u=G(6KWt`slKtT-FM+I0!3r0#mLXI-CBxGG2kWDdvE}_ z=Q4`KJr5r84<)=t@KZjwO+4q`5*jokYEK8G$O$YdZ+Ock>GYxCuadeqxfctnA;oQT|O9DVv+hP zcpy98XS4VmG?Zn@=rXq&SJ6jraUfL^-ltS&AEH*i#RCwJRrEyxQj{y*&@j}0;cKm! zph0A+yDC^&XvMS==9F?|Z2T+g8$wqPmT7_A##J97`f(i-j1UOAc5s^`m9C3PQ}H<& z_h}^EAI-$LDh18iefn(U>Jg%a#qHcd%6MPXpk`Eh3mzkb=B0rk+qk)96O0A)JuN|< zjJc_)I}Ms)hr8oSVglrZUP(^RPofSlR-&69GN&| zN3|fL(yhLSzoflU*d&4%AF-?W8Eor^!2w&Fdd`U`s`;863>GiKIT|m(i?eOPYO}XuaKLk=v(9mv7K_OIqe9vAsQw~@m`Aw>67uxKfntw zD?ZKUk7Ld9#_H_{sD3@WLixig^*fMfYey``0LE3XK?cC*!5yd&oKAvn8~YR2jCqB! zar=@yduZCt=%QCdj-}sqm?rqpjZtu`KN+(_#$Y8`yekt75G`nzP)EJuS@$6$rx#31 zq#{#9BAguT1Mg;$KrlsP!>t`+W>;3&Bp3oo*t4iTWpHAAJ9sQewwG=>o(X|Kj!8QL zTlRF+eTa&e@%@wWGz>jsqaB5Wk%qDfdq2E>0R%K1Pc%I$Gpv;op^`3Ef+mYhS1MQ^rekWUkSqQTr2|xMIG6g z5L5HV!)$EIpbxz?egk{Y47E3p1{w|TLNjo$K=Loz15Q<(Al~kIQFgl=W z-%Js5(07&aVS7aOq-od28@;d5$?Zss3`T6`b06v_UJbtovgz)?r-_=)Dsa3xz$8Cf)uH#Q^fD4+^x9ErC=BkkgD77#ygmdH!qh2%Ue8 zUWmFQOX|1&TcK`v4yo056ErA#^&kzB&FJ>mA{pOv5M%1=*V7eDJ3yWJUh!8T zX&w)R*$rX*GdAcbCK=5mjjPTQA}*7#G?n9Zb&NtsAsk0pqBB}JX=nQoGE2-&HzDj} zV`CgW>odW~?-;q_6HI9?zsOp;2Qy=cWN9+rAFmrX@6h-8(so!pK*rT?pBh@W)ts*f zUJ(Z_j+ZHkM>tj0+4)=1KAVxpHsd{~p#O=Y$}MC$E!ZY={usX0LWvf0f}BY3ucYDD z_6*noK?%;st#9j3q?A*|$<-|XA$-69;;>NFXX>ly>wk)-Mod%8NnI}(#_aRo0HR2G zTYb;KPVhGXf@LSr8T+#^W6_L~Bz?_Y^J(syO_U{f;nWBCz6psPqWTsiCCn92z2HK% z=6@LJ;*oi{hq%dVVtINTUR*xk7h@?{wtrbDF{9xBGrCo&Z`G6#-Vf?RahoBZWvVx} zqc=7Y2a-IMbmLX8{{|27i1c{-kue!T1qn#uh zCY4K-#UBHeXlzJ44lW+>w7L&R4ity)ZXw%bCn;N6!k6|5-iF0tf`mr$HwHz~TvPlKiMCm|mAvRH8N zXVhdd#w12jZv}Z1g77&aiQeNA$Th@%M(xYADTcl>D0VmrxZr7`xL8wX35#y?t!+WE4GD=wyA>D9cN%g^> zJp6QOh7v(DsaVx-ahsqPt{OeADS#MBC-`6fJP?5WMT-(2vvK@!dm!K~8Vutk-urWd zarK=bh9`6p>C%lJ~E!M_!)(S52Mn-B4@`&6Z|@hY?>Fy>F2A+Bge zZOG4eD>@J|rO%@npkXe}nN#n|{b5Y}Xt9yNP*!eqe_61xKXJ{*`tVfP}8?=NFDpngS3;Bqp%nS8KEmx54Bwv{TkIsnB-$3MYNLpA*OPo@k>18#@Fi` z-bQ+1MAE6)NOdpfT%e|ntF53xrQM{bJcTFhNJLb9J01<}cCHNU-~^}wajc>L62wps z!O;E-I!r$;hGG2T_rl7<60~t;EU;5kS`^9l#%5X! z2mH103(MR;13fG|e*2_?rMo?{girc7AA)OS(s(C{4F)6o(j57<7mUQEqFQ?5av ze;)jOHHVODeljY7h*ctpw}wjhVga%_#k1?gJ6MR5>yQb7R&bpnhH=-Qgmj1tFF~1m zj`)8E;m3Y}ZngZ6>4fm5|K4^7bVo)}=Mgr=6^+L0ETvz;ymw~cWun>*hGX}}rNa~8 zr|4-!c+&+rGw~|hKHv%jiJR9zqi^F2U}W4N_|YJmj*FnfCcJ}=VWe{&rEF-$ON{IA z{-@kFAl_YcAu1g;<($|Q_x43Ng|5R;cP?I)oR2)js4TFrDQ>e2aDG7%pOjDIjEhI% zEyn8)M4dO{p5dXOu=nZk+V~D8X9vh>La-#~ej*3otf61}g0rhynp6PhbJ2(@8f&(R#BEPiOBR#SIVyfr0NjrV_)3V9wgcUdtV|XKd-=-9& z;RqJF{trk(1MlLemJ9Dmb(q7UN5*>Q z#e1p;$=Bz{`C=iuG%YtynWh=&EfCX9CuwixRFQE7GLBBXDQ;V~%){ns@$9svVub`R z^PTEvHSDt9b&5LlrEaS?8SnTFUyGRS4N?5Uk&}2G*_q|OEk0qzr6}r?)JjTmRtLV< zbq-2OXKi{$zzqbw#7ln>jkGa;A<;b;OtU>HI2}q~y`R=}YceF??wyZy+&68d2dLH1 z`wFv~lAG-KKDW*Aj@`3wmM6IhV}5IEyUCpP#)=Q=y}KdPmJYfz#ag;8u+6jJ-W1PL z3eA*LitXJHm%ZfHJoFbKpD+UohzM{oXyr`En< zQlNdkdf!mUkLNWxSs5TUpso@<^HNybi}G#_l`m@l%Q$;!3HHa-fX3Hsp8b}zZ|*eW zq+1-7nN#|y&GV+c^w^}GS>7pArqvEIKGNFnx_IA1G84Ji*;@K9t9Kc82UIkt;HYJ5 z+LyIB_=Y4wqt$zR+N(>C*}cC=$??ujxz@Yj@svDo+5cjZ|HIl`$$v}Jc{UpMiC2|r z>xUm~H{%=SO;=d4i#W&lx2-vbV>yN$IUd+#*afsD*4FAbS<_xydeH1aL)nfk0&gwd z)cD=W+J=d25k8y&J<#_#IR^OK^K^zS*1ub?#br{(6W?4E5nx8C`=n7%zJ z+8eStlv>)r^L2w8O>i=OK;Izk{__}~;q-y=}C?dvfx_6}eF4~$*$7UzRa z$#?ta$|}G?jB?+}Bv=?B5fj;e%GyC zwsm>Dp(W6owsl2^Zvk=uQ{>j7#_w?8Q_Ax5P_V4+v3Cin3AC8gwyii8cmorl8%9`5 z=O*K`$Ph5+Z&R?AMEhxerf)VOss+ofsc%`DFt4cZ`w*v+S`yx|c!pS-Qb_W!q8h93 zYqzIuTl${+)fmW^#dEIF@^8E^iW%>Dkay@V-_t}5X)!btby%g|ltc;Wo*|S5C2+Kz zCi@zQJdA#>O>WYY&8a);#^-tmc}eTpu|MWoZ&70WwO)Gy-sz*m{{5KlNHnJ<)SYEZ z+fma_Z(FZS@+&+r={szB^O12S*hXGBb1>Oc z4P}v)Lj1F%ZP`lENje{Z+L;SQQvX|g7(~ja-gKVc6i-cz3S~__XieRN^BZ+f0+kM@ zHkv%I;VTLDwEaupLRoY0^%2kZC0B@ND1Psex8d006Z@f}uSNVelRO+#oS6;}ShYtpeeESdB#l=XaA6Qre5Sw->qM#VzcCb}f6=QIS|Pe&$TlgdAt zf1-awG4*6!OvhQhw}JshcO}`pH^k?7Zvfk`>(q@ew!*H_Q(N2}iO?D=Y~pYSvu771 zEwy#u5jkN@dpzxF@7LnvDp?(vZ}M7)<0}c+;+D{2O+fp{3z`@uiq|w>NfFx-LH}NQ zqJL9iM~-Koj_+)^j|_CC>zl??z2K`9kjWN(-(gQ1KCq$RwUcJL_xbdMR$J>~lP&G* zCH?iLpLXtRr|>=d4kaA0C+ukdHFCu;=UBSj)!G)`-%0tHD4HjR+9axUm>Cubu~Xl7 z7A$Ka7G7kJ(@{w^!u;38DIF{5-w3Ku+q-lsa+211BpD0ld!TKxF0=VH#NF2}ta7p& zpEu#p0@6}<>a@|XHQ}JgidF}7M8{4ovnPMVxjV5{0n5MEN$#=T~*4HV|5hypoZ)V*tl>_#K>ob$q!$lRQ| z%X7ARROoN?WPTS~g=&8=uG;%y6OD0WB34cscHS3X_tn>7?!uBsgu=yi(a0;O+5cKo@b*$U!dQp^oL6GWeiVY6)qT-(Eb!G z^c=w=*e6n6#LEmB=*6vGY*)p*`@UCb`~ol?16(ObnC8QwML43>_Y}gKvXjSWCCd;R z6;3se$EHbIYaIvE+H7dSn&p*PA8b98OiIJhh7~@s2OHn7K^(LbC#{qH>==^89)2fY z$(7spw_-vIrwVxX>f%wK2}Ag(Cn41BuWj=t_7lg{TShJ!DT6 z;sZaV|E;CAWKSDb6Vh7k-r2GB#^uv+I>Un)h}*sSv31k0^Tyt9#ra{h%rL&`TI^YD zp(6{7wzQVo^R4)ni`Yr|l_(BQkbIDyYTva8=S%!_YgW^O`{PB3?s*rTn!fKNJ?&lR zdOGA(*ekT#`nE6mHzIte>;PmG2766#&Ipm(MCOW(JpwqyU$X~{gZ zdjx96?1^{Iqin6I9pv9$z?*HiXQd!@v2Tv|i`vrK#j3M!$$O%`%gRx8vvuj0))Q}I z1Nj9Ql2GL!eNGdn$7dxwpB6?nte^J#WPMT3KwHo4Uh`e3@-4OFnrtc9%)HY%u>BmY z*9cn>+G$Iyy9EllZRr>2nm6w>?0^hW{}iT5#9JKU`lKl{ISr}PkvIRkv%eLmY~z5* zoOs`Tn4M_469HRkS1XR!gS#F*uxDAaxoJ_dtrUkF+TAIle0tL)y(xzJUg9B6&hx>& z-|9=U7}{IENWvC#!!a|K?kt`Zykw6_nbspoXlz>+>7EQc))E`^wPUX5?@bn%B8O<; z7JHXHtz}7?rRiKs9G|z@r?<8vy}f47UZj>3d=6R24CaaSkUkzp+Aek~{F%&?IahJMi;qK~C<#&mq<?G}<7&DM0bapSd+gPIuH^V&#Dkf_Uk zFpNF_f>xk@;o1OgSNjsDW+fpF*K{LhQSQOB#*H}|t-@c}pYG3|ianDB*o*K_DrWm& zXz*)_F2pMQKQR_JZY;V$YuH%N4U zJ9QTp??F}$rq4DGG&UT-y`FkdZ#|4{bM`S4TqpDKdK8M`I$4c_qKQwQgV?r?ZF4ZR zcLV2m&YHBBrWza91JNuTeQM0o7@!Z?4Kg+!1+&FU>q97$SZTcjH-R0CnsI^}<<>N1 zjOT0jrz5e4+ud#OeBk~7se3y1bl_u!tyn2P<#W@{hj(oriw3bbu6hV%f(_cd9Wzbn zn*ykuw0$eS^1PGw!SZ2PLU_RhLOgp?zuI>y(^KS1Awpv9m0^!FTS1COq(mPnG@TiPz14$^Jx+s%y@$V;Bl;xMuWFucfq+UYVF=@4aSWH zIMs6SH$!lU8a5>uHzp6E?S*w$w_ii;Uq8`;ygTFuN8M=ImCYNQG0evBJww{NAw1licPzSBQOSUj3;UR?m&!9^PJH5&2tAR!JLO!13)zrH&_+8XYq}+$q zKwlvRKOPD$MKHibBr3DzMbdYU&kAQVi-{~A2I_8pSz z1bUVOTQ zQ6H5$qTO?HzR#eSU$_aOTorVltGQ_{rwA>UhZNh_HwL_w(Aak)9c*qJgs(NBSigYX z?%D1+;_(aifG@CKPGb7by)#B{jQy?WxY2SF5mUeRwIHemVjC;AV$ml#Cx}D$v9{a~ z<8AT$c)Z*JLP(L)J1Kb3R=Ok^QBA%fJJGk{24xbW{50s8R-Ig*;{Ir)a|-6zHzW%! zm->#FV_!Z>Fqvqag^UAWV|bf+0D|zsC}idTJqkxll9Vr$m$A`>ApdQkh&BgEUx+iE zo8>Qs@1(u{BVZ6TfyfR*laA^@zX7!{7324>jg4C{t)l;P4we1Wz@Sgvmp0EHe-)A!GVE^v z?XY`2(T$MC{4Ya(H2(@@A-?F?umN}az;yR#Sjl(-&-ovL2bbI51P_)W+7m+s)VF8z z0@eT&LGy1zbZElHHxTANZCL(+w~*?`SB_N+s;`ao40S8*uQK0Y1-{^?Nj0#{35xWl z*fGys6xe}HnT=zSn&%x+=bnQ?Y9KTEXtXD+6P&yE#9sH7i~JfQ$rY&&Kp)vOQTEI{ z*NmO`Rv^qDSyRS_Z-JU(Xnl!l&a(wcyARP;AWSdVtxX2(J!-alZ;!Pb&8PJ3vpNw8 zTFPq3@hrX@$kJ3kwdI8GMBn=~hKpds+8$Wa^~z1NDD zYm5z#A|<=`f<(}xd-l#khlQPmc&{x1+(Qz^dofe4nbW>7u9`?bCkL#^wWXb`wY><9 zs$u>{PP3)%#x@=?Th{tXjGp?rxe0SDp2KF(0kkW>Iibzsc?a_Yc=yIrfO#)^t#kiU zeC-N@I=s7OythS^Cm&nY4v51$i8gw>j*iiS{%rhCoZ#woAb;bkD?td}05iJ#;Rc(r z7B%ZlVj9jPmN|3M-l+XT&STQ(!j`tJ_A9+XNYjh`pUi0vjx_*#~pb zU&QK7{h=>E-von(X8(f+sEf(p=0Iy;8}>V{n2U^BKaAC})n8B8i+Mz_m1y=qjf&Q{ z>!M!7+?MBCdhDbvzHqI&WTxL@)OnSz&4orq4q89Z3>oO&J~+{EmdnEGh{ zwd}7b8F5D3yt-Yu??-9ir&#X={ zLxzeoy0_qom$>r&X+m*R->~DgyH8_Mzcx3`i}hf_{GELtqGzH4ib_kuR17MOUgqnl zd6zhU_dQ6Y{a*K}R2vS6U9*MW)A=QmBEk6+t{9qU8epV?r5H|Spod5`HmpJb8Llt& zLromr5bIxqL}*?h!wxB*>bn==c1Q${rH7xNjywvL+t_#wS{0Ywc#rtP6P14)d~-b8 z^zHpok(#JJ|8%4aN*b1c17hO$CR_N`h6FL|ZspVEJRwB5pq7J&$!5?S&Hj@p!nGc$Wm@>4+B{ zA!#$V5n;1W%{P}u{pZ_IaRr&=Sp2^oO9Imj+ z|1l1~iNg!{n#fn>uga;gN`ELn{}9Jl=^htY%{St^F(z4#8ovGot3aY$eEm6JAL8p4 zzV7Yg`XT$D$LS4ato(n)_!7R#^c6ig4P_pdwtpQ<>ozS;eANkWCAlDXaeHGgIG47MRH|2Ig2+OwEn7bhNN&{-(?c;gkDIoxUe zmpE`Tr+KY>M@KhVo95Hx_-!fpyEVz@MccxrNz6}A#CqmJELe?4ROF2LMHq(oWC!k@ zFq&wdxmnB)V!j1OeISEz$N;1*!wft2i{pDfap&V%oD0#6lV1aeknODB<3xjd#dr$n z;6pg4gERoq3+y9ICpa@cN%;B@o{y*f*&#fN@KwOne+R}M!MYY*ACvrsKm9GP z%KtyTW~?s#MfkJVD(sTJKVwWfkA99Qyo52jZt=T=F-A?|_e;iP=hJTuW123e-~U9# z-^5s>ad$7_hdJE9;WAd=|BCLuVtik?{*dI)x|*8=pG;19U05fteWm+<<$o>HWAe)U z+g8bI%j*9(^vq^@nxByQPy8d(#n=BUKJ=CDTvcC1OwSy7&ERWa&;4KdFHrn>TGCZejQ`i3W?`3ZeAwwEsQnBD;QTVmEo&Z z_?;53RnOlh@n0FQ%agc;@kB2FzZkm~%kWPbAG%rMZy6^s9`FZQUKf}De8w7=?{dZq zGv)L7jPn;sT*Y{UL*fR;rpXd}88-rAho6<3m#= z-p@FL@yCo8a{6B}K6aIi-_6*>IN=dl{`@Ot_;AK;yBEs-gz>~TB)(GNHzm$i&oiFG z*!8XqFJZj!J&7w-`1=yy!Fb{!iSK1x&3FytHpY)Cd|1Zcz}WSn#4U{1eI#)k<3k@y z`~lq%*63dW{260cO@e~|b$j3+)K@uQ5_F<#F&W1S4&$an+eR>r1BW%%nV z{$mm!RQPd;KVz&tA@R42TNuYYCi&I;qzq4Doc||@FJzoFP4eS16`yg23ZE{+^HezF zV#cn$GQA4M+8&AP)$?yjd@ti_#`iNm_O=XP%h>fViJxSw?U(rPDxC34jFS$?@Yfly zV|7We%OyPe@{EdqLyu`7OOMbO&me|O6;)@cW%lOb1iN`Rm-YW5BjE^x+W9)iG zhG#QQdR5{g#_JfDFrK(ghF2*(N@5S==46SVWSn%i#4j<{MoRoPW0OhZqm1)8e(V#n zyh-QC@DYrg8DGUXBSnVKX57a37mTaVmErfO_`j9-A;!mkC-KvalYTGptBg0SmH0iz z3%Na=Vr-frrQd@JK5)^Bdc zZI{dN2UL81Sc{i<2jdNl-(%dIAj7}UzAIw;OT{~;(r1rTjMX@<-;MhcRBk*dSgX(6nDOmah|N+Fu#>S^4{rwnUz&MuiWsKt(r!(%)IG?eWEYtrPV*}$l z#xaZ=824kmmT@fOKQoSF{4(SIjNf1^bHn+Vj1B9g&liki7{~mX%g1;a<5D@_LYQBIkFQ@nFVB8K1@YBx57v_`gX0nHXQlcogG_j4xuG#dtL1LdIhlmoOg7 zxQ6i+j8`)L3FF^0p2YZB#uqc*!gw6x*BPfWKFD|?V?X0qZa91m<9NoEj1w5U87DGc$9N#)9gGJtKFV0>moCOizr?SX^eKHdjIq*p7cfrd z@{D6Vobfe`&t{y*Sfed8_!ToYFs^2tB;NPaw0jv3W&9}P7>@re<9>{{F&@J4KVUqJ z@oC0%Rt^1(|0Bz1U_6#_EXTiwaUA1(6^=uD=(kXXGrpB^f5vw+PGtN5Uo8G}j;FQH%#Lp2RqwaVFyg#)XWNx%`Wx@Li0D zbNGW%_*urIID7}=(Tv|`EDp2;Kfhr-mctYOCh5P3@kqvJGrpSfIgDpB4$2o}C0~_{ zm3%E{tmJ7GVNbW5w@*8)SKvyj;Lo z$;(8>N?y#2mAqWfSjkH{Vw8! z_2-OL|K7=1_3wlJF3YR>_YsU$|DMWN_3!D7RsWvDSoQB^j8*?$%~U z#umm&jPn=|VSEGQp^R^4tnsgwv9e#>jFtWJ0ONk^?b7h}T)8UHQD zF^oT8+>dcP<5 z9~t*!yoqrv<9&?d82cFaXB_t&)9aG-B{P;t(?+Xs_P8<%TNtbLvbidp(_6$?rB|oI z+2bA+&hZ~&tk&E9%vi0j?NITXWddI@HZVTxA6y7u7-!+VR_@LPttNa!+rrj*` zb27$uTk%`TcmU%+F{W)H^xMK%(R+w7y}3fa0ONrYY9lsEdT~sU_+>E07H{z@W{geS z;#bd@PTHW~1B{a-)c(qt%?WJ>V^)WFwOi)L=7KixeQBpHjPvNkuY@s9 zdlA2S#>$>w#aQwCF~*ADe`l=ty@j#j_kPBT-(NCT{7&2?=~evx31h`?ow4HgLdJ^U zF2;)Ae_*Wmy^*mh&nt{odER2I%JVT}Ri1AdtMbG?FX>h3nHa0|G8wD%Zj6f0Y!17) z(y6fv2X{W*U)hDTbh-llr*sAWIk_uvGu(M_+pp*fEQLEcsVmR`7ns-;xC`zIxX&){ z3fK_;WNKI7akv}d-nyhK;D#GFzAJELN>|{eb3g;!^JjMj7QrP<>k4Ee{KLUrfi-aH zaK{IA1x#>n4aApeaLvVa2g+fGJBf0wg}eGJ&^@dx@DNuBV$+KKDb)YbtB@wJr!}&z{{(<0@HB+C9WP^&%*VdtGWU)aE&PYPvG9bGZPT^ zpt&n>n*}_~=n4$M{WDozff`&tLOCW3?+UC=2F*zOKDb82pN_Z#)4Kvs;nnY4xKHqj z+dJWs;GUk|70}_HMY&CIFJdEH5!_YlDYWoInx3Z&lD6)?j&;2PjQDhau7fD=l) z0?D|Bw;wSsLFYjBtQeEvo@`k$9>G1?rDCj$dtsB3BEtP3_=_>NfduXgc>Cl*m?kPTv zcj%tt)7X*jDL##RXe>eTY0N|S6raXBbWibVY)SVNpT<2j)}Z(_=AnCvPvafBr}#AX zqC2gT`2K9o#QoZe(Y_@g{ZR>EaM z$pOXbOAb`sQ=Go)Ue!0n>8rlO`4e4t(e+K?^o#DNmHpCicf&mmzie35@T-R3G(6Ps zhla-*o^1F_!_y7VG;C~mq2Z;5)`qPOuQqIN*xB$}!|sMR8}>BpYk0e1f5X9scN_lQ z@Imb1*bieriv2kDlh{vVKa2In`eTp8w#R-Rdo=co*e_#`y>iU_)hl0_kH2!<{Pine zo40`-CW0?mO31M31$1vUgW1zG|-0&Rfsony&uN z`rGR3>Tj*TrM|r0QD0JjWBvU4IrX#abLwsNmU_K@X8rW~YwD-gUsXS){)+mE^_SI8 zsK2CsT>Ve#$JAd`Z|c0T^McM1o#%I+*LiMdO6NJ9XLk3VYgQgGKJaGEJ&56?!Hz!O_*c?ASe)E6@14ayZum9Tq3;K`f|6bhMxCL<| z;@*p08@nKOMC^P0*7mFDXYV(m-=Kb<$Gjf1K4xW1MT|XWLd>9;&ke5|)*DtDoQ5(( zk-==3Vi;pcHpCjf(LUDR(q7S?)1J`QXbsvjty){GE!5^|`I=SB(57k=wQ-tBOMwQb z_U$_2YIpfue%BYSFI}Izj=DZ{edIdiI_&z?^_lBq*C!d@wtSoMP0KeKCt6NqeAn__ z##b$0WgKfcmhpAV*BQrKj%$C>p4J}Ip448@Uecb?Hfq1rR%v%@_h=7kf6#uV{YHCR z+pq1>_G$mtKF|(o?`p5&C8SnutF~KvQ`@P%_Eh(#?)$nQ?Dlncbnoas&^@kuYIl5h zO84UKW!={9dEHN;*6u?M`cPXtP;=t~Qv>mVl)&P^GQ4IpFR<>^p;M+)3s0>(edx65 z^up8YIu3Q1Iu>@UJ9+4&>Eyzb`CZjrNnI1W+PaQ)HFs_3%I~a3wM^`6>pa%k+_|CC zHQbf#I>&XkYlth!HOw{Cb%ASyYozN!*SW3~*ZHpVS`sr7TLxwfY>Cf^Z%N2VXgMq6 ztQKR2v1L%kpq9ZIgSG3m0_|to4O+IAspV?dYD=^lZMk;4wn)24tJHq3jn`7O%e70< z35?P%hN_;XrD^H-K;2|*l6JLrnju7wRWy zTt#Ci8XwV^lg0o!_qjF zR5+Uj=(BNV3)~2}k#HBmjfG2vyADeze~u zOM*iEE8O)c=ukA6LvUMB*cVaQHWW61!rD>L7r-n#3OWD<{Q|nXKMGoeg1&dYru`9L zXxKOk-53hGYaG5OJ^`=nPr^ACSK*A1X`1$oj&Yn-)0XEUpShZrwh&{aa!tF*iS$>X zFlYFo3L<_ej_A9o9{{PM{=y?fhl3s8^D`J?@axCF*r;FJ_x$?*m%jo3kAGBpD!M9m zbaB70c>gW=Ft?^s1-Y~g&7?tdh`9jQ%UU;myjT5>!JmG|UZ($+zy}$c)}2ZB;@47~ zLB9B)tR5R+rwA}rRyj?J zs_H7s5M}OM(v#soN=iPIFP;exqx)HwTuXs1E805@Q=PlgPkj97%o!8P#C^f0m(ma4 zUL@{!ziywAx$qNcsnGB7(T}FjOPj)Sr2Jho<(<6N{Bn7^ma*2NX}62aNzdf#X0yed zWwG1UGm+P49=;rDNLs3fy04-8JCZM(x%>6kXRzGQl>VXT-oN#+^s1r#BIrZh@1><6 zFE1yQO3%Cdm%kgN<+>f`FfU%8srWL}cP?m&%=i4k_oYAid-IQ`B~vf5o{64tzSth7 zvboZ!j&7ZiDClaQba8rg9hI(_o$;U4k==H^Eq7Mm)YQe?F7hOKQFR3FrK>vH99J+i zng`E3yqehl%`eo$_acu*ISZ*tod=$Gdr{JxJbM1fvl$<@z9N*G_hocf7qN6Alr zma+BQr^J2C=Efd;sV}+vKdK|Eo;yn~I1@1;zEE2t-t2zeq>pU;g}BF)>Cy7C_LX)2 z5iMDILB6HPVkUu^tIzL2RJg7~+X3HQ=@0$xcR{_|{Z_|}XkC}SZN$v~M0We4K@s)R zBQJ>Z6Hio|CS9l6QQ(<7W=89}`1No7NBxn|FIjm71vYbD?^PA5Bg6ZdLSA>jJ|W}Q z8P|&Yz^FTCe$!PHA*XH6?(9)--zU4&H==4RJ!?jBg|4zrh%Y-HoF?)ozI-=s0kG1R%)?bPwqJL31Yb_{|6qoU8=mNy`66x1g6m+w*z@|7-wg&QkrSz~d%}pQnX=Bbv{B8PKmp(JIH(JaEb7sx5n8PbJ;$HSgvQ48*qF!#D z(O++D|GT*N=nH$;{3F`4GtS%}xzeL)p-j!T8*VsLGa|k`^t*FK9bN4iCGt<)@6l05 z;=bmWXZ5fd(zkW?(Kou%Qy1jHcK<^Uz7Q?>h4Ztlc|~U!t+}YZ3R;|F=8F6q+rNVS zvRK?#B%JI)%aPa-XW~l+@wYd=Wa))Pc1v+#4mzgZO>h_bxzeECB{}(S+*+YusC+b* zjJDyr9f2PG(Fb{hiDuH3LH)A3;Zcj`8W{;H9KJm{ zgLIvuCE8}7G3<(;Z;oh3KZ2GViy1?KUKvAU)=I&bbF9sRmIbS01T7;Q+h>vtMf1h* z{;nQ;DcE!&%h31o#jY33>SLJXN^fkR9i-)pc5P;3`zS#R$4c$oBlvO*$3=HzGQ=>@&%ybxcMypZiuu<2() zc8Ld4AEU8^4|r-Hskg{e?x#_(xFJ1!?I+*%2+sE1l+n6fM-I6)nVBb>8LXqeXz5GYQ9n(538!WM;}e6lkUU50y58FKS(jeXL%;MzOJB-P+6)WJF((w9a?@POKMbRU54KmKr9`cQVg*U?=;zQ{U?oC~5l%J-fVLEn$5 zqrQ}#;tT0I#h2Avjt2Siz%_TxpfQrtEp(;6`~1uQ-9y*?P}%KE*^#~b^sG@4@?t%F zYNnE1;z6|RlFa~nJc7PG7rpy~+fiT2j%aCYA0qky;tk1*v>Dc*{*CFR>!ckX;tY*1 zqh*M6+~M2TMCiJ{WVbJ6NAg1R8{zGU`Xj}c-ueKNq3AaK_A)<@nL>IunigA@C11De zS$&&!Vyq_kLUV`IhM%6*ih9{9#!Xo+q|JD1EPyY2_l(wDZA;|P*lsw1L>6g#qoU{Fshz_{kEkQ!3+nO*($bf< zbEPj>ohfJ`o)B-6pZ=TR%YxNgW?r!KlNskNH%xJf!DY9y<4vpj{V9OHXx2v?%>TGD)-?zP&61^&w~>eIMP9h*!~LHPji+DgAI- zdQo>oi_*J_7HZRq7HZ?sb~e$1{xU*d&W*huW%|Ppr==HlM}4Cjt0`Kxe!C3z%a)lm zE}^=M9;*@WqG|E|wi4;A{t>kFRCmhWr92faiTfYOpfMxKOK){Vx^CmwT@kvD_IFin+tyY3W6?^rVGkl=`Ia#%&gJ52SmEmbB-r z5pw!p@}(Ee(vy~?+cyeY9{OFXSQA#X#Eic;f)?r*qUlroP}ei?<&1M=cwWdZ@rCNB zU{g2R&+9^NC@gwSnCzV1=3iv#LTy^>y^ea(EIs+MZ0%!$FS}n~KsJLI^HY69ujdh8 z#`eD}f>(+k>Usvg^rBgM(sF!5l8{}}H#DD0bKkw$Qsf7n6QN%e4eEL(TFx{_M&mN7 z8{!LHX-qPC^0T6j$mYD|v(phgpt_81=ZXe(Jp(PhXt|zzQEi&$;Hf|Ai!Ws7{3mU? zFdvie#g?4>qWQ3>X!2XppspcZM>0vW@cHZ=VxD35>nqb~p5cbFX+oE(C&-S79>Xer zsH@;h)IKsvOCgp(3$4Q9RS5>Kp>ZSC579znHR1{N1w>zTe?)Pj$FO7j8^~sl=o=@` zIt0C27-rWIU&Jy=;apoz4%Qy?^YX$sxY7FJWFaq<2elircQtJt?9BVcJXLg?rg+iz zF0GGZ9SXAMpfOIb>qn9=Le=$23+Xh)6YyA!k7y2)Xd%8tj~i+160Pex3QJ*I3`)P? zhBabcH@c3f8YC^V=I7+6cw$=Zx z;XURVdatAGId*#=q6=Dx9^%Vy1I;st|C;txhTMB-C;dBvY=+J7SGKq zxUSHeN4xAJe{$|n@`dy+)d`JZiC4-++YG(wV#H#0wob`_=XUBo}o648zhzHwp($-Am6;>)5%S0Kav!F}Y+7i=ffuh)Cs@DXZ9 zWJ^(>gz+@eZ0S>8XwD;Ah7=9z+M9kc=jB+6i}G@U#1ShZezX_oS|Km9yT zkR$ntwhubCn6Pdixi3=jLtR64Bx#{GE%;K1{Ww@DpJVTBr&4GhQ_+(A^u;=rk!YcD zqns-Zm4W1WQv8Gnc_A92=P|?iBJ>OKg{<8oYp?r*Fn1yBH`2S*2arxpT`)|S?fLZ? zWUEBa1(9EL9VvdOYcyY|B%+Q)*BB~Sg=9Bsf1QiuDtbLY){Us|U?0#YEoO@)KTFS@ zpBJt0TsA@mF7OSI6ul%j=byx@j1kv`FkpNrbte??1HfyHv2Of2%BY|LlHxQJ+> zItu3t$u9U4QAaOeZ9jTm>POYl^?mJFCA)65pk+h9&!$s<1i8(i`B9>g?1*E3x+j7! zL?5-Ys514Cm+1Z|2lFq*Rtt8ZN7s!?$pu@xTGSEQbR-L;cU52A+dg>Gbmq#! zNqcV8hT~Yn{dDHX$#+KZg<_Zs#0w?GS$R1*7VMtIMho%|`^h$KD!n#C*}K-m=LPLu zlGB|_UW%ZH^iZ^|Cus?_>1bL+-^jG&+lsI^zvnJ8vUk-w3F$DRht>mVKNs11gu@6I zw}l{e}Qcv_lA<}ko-#fOhY~GnMw1f(PLPm z`G?pHyQ@ujckqtj7&ej?F>;I0y5Y2to+ElBEg6vMJ&@m?dro@e74b##FEkD~GcEQx z^X5bfG1&~1AL&Fwu?|l^4&S&nW`f(1Jf%pAzFw(k`E7L&>S!H zZaVF2j;4j$(SJir(VW~|OZZfWtX%wu#`dJ!X$(Sp{YV$9{Zb1*$&YB$B)idT6SO`} z`d0BrjRSVu&kxEjy&q6qScHzTC_-j~q<|JRo~AsA7Mic4K7i(fsNSOOI?_44%^iN< zcv{jjC$qPAY$QD)n?cb+^72IW!-5v_i>8J2OHW#~9%~cP{gI$02P4Lw6Lrj*(72Ig zk{t9u-Vu9N^iw1oQFB2q;$8H*AGN*j8#fAC?6%ATJ+du_*O8i+qWYk*Bh8V~eo<=I z)Q+P1WI;=GfBA!H5u4#@n`(%H&|Qcx)JId9sh?KzLh{`C=UXFWm*Pb4-6EL{pJ&+k zb!6X2{gL2{o(Y|T_Z%biilT<>7dhua?V0kSI$FKu*Fs*1zUXm0@h@t;kHlQmj!16` z{d?)Cp7x7*PGQmfUiULgTI4#cT;n5JNLHyG(K;;IygY`Dc*m1u7qmq9opUfZqD_l_ z`oMMByX~VxZQ82m_pVn$d_kT<@5+9L`kx0NFQZ|TKP>FL=y4g*d?sB-{k76BO7Bt~ ziJ4vT-b7!_3C-`ScM560l$zhAI*XRm-t4;Q`Q2!FQ6+!#MB&VH4!(i?wU8(1Hn^9i z?JVX1Xb-bkqrq$aI>sOL9-q*kWHTae2FhlJu0Y>%3VZDTne8Z9Cf`EG8)(Ir>}*RG zX8HAb1(xeA1({lpAoh2ZF0KlH0JC=5EmdW86(!E9ny`QZjN*!O^2~GW!tg6|l$Dp3 zI2~p5zMIMouY}vO@M4M?Qw4L2vkNS<=U8&H=5uhb5zRK;o;PbwXf}-2QQgkm5ycAj#AKTs;;T3cGNg;yT&we+1QCwmf>A|izWPB ze3BLV(KQCH(BUkss;en=ELsw}FAu-JYRVFAmWovtc8^#=|8j~&Ka8K+XKz{+RlX#F z9lLkyn)V#p56J`lOu+It>9R>C-CmfNU1Y-Tm6uIY0esD?c2w$iQ&!b2x71aZJ8#qS z>YS#kMW!6bEmbwQVUJ$rl9Gz@G85v}lsL<)DuX`PmsHd_g2+-?cS{iDmfYgda;r?1 zni_}$XHi(S26%|#brbQ*?72vb8%2ZxiTH`3Gb#k} zBtsx?v+R&_J7kO)L^#`Kw`faCoLY8}9#nj#siNv;(;`r)&T62_A6u(UFyXJTuDZIa zhVr3IiGpk3ov4+S*OuH=;kdN4y6#fPGEj$-YPGcvtR`W6?4p0wMmEL+r{SW4AjL|CkH5U_g+w9HN&&lZbnq zj8S8%t|+;USf8jx1(cRlJL_s3@Rt>A#(Kvbdr>iKF%VNySK+*rwH#G6SWruH+Cy?C zaMq=ZODZcJ6}8%&%GzMPD^JOHSzVVpZ>x4h#0vA55kdPc5H<13tER?fx>)*MY$~sX z)Z!Qrp)Mz&h@wf?kOQBh%tLkbt8T@y=Xkc1p&LsJZf5Xi2m zLS>GFZmO(WT4|!{M+dQR2hMMWtA=yIHN$1V<-_GvRaR+*PDhQSN}F9*QdUz^y|}6p z4H|0NR9J_mh*MuAC@*tpSB3jt9S(w-D$#&)s#c0r9yGJ46p1;dPKAQG^imO}%pr7b zZ&8G@99x}gGCL|9PKq%Wtg1t8){Lu7MH10r7E#f?hh>*npqL`;5)G{kYOze|M;HV6 z<&@XfQYIx%sQa7hoQ_)2v@2MZvmhh}<4M`>Jr1RZ({RwPafl9y|JYhm)cg;@2dXpG zRhL0ynMkHh%f>>i#4jYDbN~-Max>1~fdH0Q);b*}Dq5Hvi+CbY5tG_gSloOl$q*q# z24&tC35#o-i!^INQ8wZwYMF&sWST@<1MeAfrvkVXGI1$rBI$v>QD`xtl@eQOO*c`a zURv&4Y=T;LmP2_^mp&!D$hD?%W9v|jO3{^8RXWiPi9Qk=PKs^0nBcXU(Px#)C|NQ> z&w7_;j;LGE(L*fsx@F}Rv`EI6bc(K-u{TFn}VLfekfPw~@*S{$x^)B9U^IbD4I_EwBzss>`)9 zm=b7iOUo;7xkan2LtnkLWC?m&WlVq*#igLMvaVXwtI=1K*~`%ZM*YbCQ#K&kfw5tZ zqJp>58Y#9_mKHb`kze>P6mE8i@a!6g!z}C<5e?zYgWeMe3lB>`RbJ30Q)XR+*%oQh zg=HE>pn6cH7-=r{H1$AFu_bp-j->!5K9n;Ij(J6N zRDLtHtDKTwIGBxDQs&7wzox3xQCrIaV z57}x9z-~uPwlL3v*1d>@U>R5_GiFbV=+Z!!S=#)#1N*q2E2#h%f-J#(W>ppG5#mTB ze}IG)!6D|VI&_o__@RhrB#?%ONJ~B;y;Vi_T93#nvKrwLUW=sK9F^!#ke0fi91bw7 z4TY44-A@h&7|IH|R1%Z|a#B#F7=}fnVVIH%gCglL%&Aw(9*BfM*eZ??w$;je1j!pB zK;DVG*^{W0x0EA?hi+9VI5why2#&=i;vg=rL`*$Lj6fnq8IX^`ODKO5?+_|*pf|$Q zfTAhC1OtFDh)08A+%ROK^1)!3crJ)$*E#AO(vl;d$tUJiVki*qJU>ph9$nFxt4VzLAl+}eLuvU z=;fg>$u6wBiCO~p3Q{N|dkXfeyD8Ee4DT(rYG=K7MP>&EV{^nXrk1m0>mkxpw(v5J zBGKeXShj>iK}cluphxhDpil52`2^-FBeRJ1pvlbWY(jB@$xiOYFZd|gYuOm%TQs^W zD!?Q#-Q?)k<`opvd=tz`>0`@{^3jWm3T&BkiY$f2g|-{yb7YW){KbQ6lE`ei9xo^t z7v@{CY}qy}&r?3VdQu`X04WEfhwMw0V(;-NS=hgpTq3oG zdkB#7$8oG;OA)7sc7i5=qfwC!?bOH;^wM6!y#J4~w}7i+3H!%qcJ~ww1}X+BDvDw^ zii#qbD0U$Rc6WR2?z+ac+k3Cw-QC@-2uPpU-I?eA?17`8_kG{rfBoP&GdnXo@ys(% ze4n$Sp*S|}M_#n%G<#rFMsFQ0X=ItTQe=Y=oUG8u2HNySWsv^w87x`a z(@rw~Q7m&_HLA8hK#Nh<_O%_!P*)2g(Gr@Q8s`*~_ML`nhpEV@2%P5D&BEzUoic$|HG!qEEK zx>fW4@zM4|8Aa@j@_*{$uZ?BS9IkIG`_zTwM4&fNdk(@y+h@)kVxJ>3<_v%1Ga@46 zYX)IOMxlSPb@rTymd%lkX4c5$I2waUgT8QCh?bFx)x*`RLA zti99H*{Wz6*=pG5wJAEU+h!T|&&>Z^->6^9XD)<2`|WM8TG48b0}0*t&6*>1WS&pWiva(im2n9bYI&!j9bYx|% z=nx)$R&?ZKsp!bcTG759jzMQGf+K0C3rE7fnvR5{?~b&iOOCYTNse?@nFSAx|Bz&& zvI#6d%Vf{aBCz}{k~K4%5EGTjrLy*-;*Ukk){URpS%u!Hdf^D?L+0xc2(|B-LOTi{ zc&0V`$(gf0C8|jSE!^bCvoeqFUvu$z|0Sz+GslS$fkLU{7|D7rWRc4pvQt#Ex=k}r zA-lK4Zt2##>X6YK;@6Li=6HD9e~&~f^_xhBKz8kysPWcMO$LQ8?WbEaPVsDd0?u*- zisUV`h&GO#tfG}euF-HfcC3S@qo6p8!XO@|h-byeWuB_P7e&s3rR@TxD+C`v{hN5%U^1o$ft&u5uI3%jf zWHUtWYLCiHBEZOw`qLhs@%4u+nKhju(`16794%%h9W7=iGm!+?;BVNeEO{C{>Syv7 zP?SSYbhPlp-=X#K|0fWwiWr-hXr~YnlIOKkMz^+HZi1{2$X`&#vDfqLp12 z`Z<(LP#mf*|4}K+&5WuUc)1__teahC|F5OOiFc?&zsy6H8+JQD7Ap83ME;+>&RDsy z&?ezcGxU$l3C%)kj-0G?mUY^3QL-d6D9lkO8!2VW%tA+*`B@j+LB0QR>&G%?-pjg% zzf{Y5E2CP*{AAYrA1B@M)c@9(GVlI2bD4zUAYzSrnza1U+l;%&Ju^=tdpZ=^wic#m zUr?<=Bu3=cwKMSSJmn|X(2D+YFD$%an8pR8LQp>oweRL%O0>m@DoyLrD*xn0_Sr&P z>o0hKjBWJe{|w7xhDR|XdT8_j#PR%Zm$paIf2)a~zM0=Mga=3JH?Hrvk*Oj%lA5C9 z`2Neu;>d0qlA+5*{>aco`)rA*-^yet^NvEp>~O;<^g!F41W^cj?b%mZ?c5QQhpAnWzky*0A5QM|6uq97?n!zg-jprx1nLvqw}0K;>tR9(@oFHayCK z@p05ZNB5w?QFd(L&$5~Q)G&D(<|`BR;P4G+S&#u51}W=>?^^u444J@GsvH@o0bl*^lg;gpBwl zQ+qcqW}zS*!F%V>_;3$k^ z)$0B%=g@~71u{OhInG{AQv!Z(&+!i8pY1tR>g??~-aY)YoI{JwUe58(;h*IkigWgI z+L~qWUxr?oy%eUfoHqAA+jA&{*-L8U&0a1;56oWb=eu@)w&yS^WG|_WH+y>yJ3{ty z+IX{y1}3^{uRQ%%J|nD^RC7-sG5ZDhEHTL<~xHe2@GbWFt{JbK*N?ft{3jt z&S;o3{0!FcW>x2xIIGL}tb-qzAD($X+ukEQVWb+q@yYW>vSNviepM`ir-zt#VBJpa{B*7{4FW?7kRGUucNm&%|uot;HBk#=oprSNU#Y@SaO0wAapR*W0GuB7)xreyWGx zD`{~h_=)>vvOSIoU!pllE0pD`gZD75D&zf{S@P{)yW8PjzJsHOB6Qo1uCIYG_a43) zfIkybZjU6%EH^58=s<){)zCr$hDQ6^C4=Y~1bO;)L%>468jdR3iy-YUh0Mrzge7RN zkj%LL>$&#FBizy+ae=`c8F)%Wqh&OLh|`QF2lgD5ty!(b|7veQbbk$Ripb4D8R&Iw zP>wGCFa5|YtpQXAVYErKFNTe>w7SFKN77 zqfd?Q8)CW+rnNu&h4C`D;`Y~!W(cAPC?42rcyEM7kMMQKr2fTXe24YyuA#brQcy;H zjNhw)zl~WFe>XV@-|1D0_Z$^8`1Y)z_p!@^w79mf&-MfjxWt1xJ_xFXG5NLXYSBDR zkPhr}zxGbMCK&H`v-ZHv+V28xs8joEd;EPJ+%FN@p0rm(UeEa^){Eo41d24HZz-o20z5nFED=b&%thU$ZH7cdWY1Yx^G-KZJdlFRG;PQo8mx4XQ z!@A|D^)Tc9+lh7FR7@TakbWh&bIp@gLk>O8$e%Smqu%HRb@G&{-%2T*_pJRn#POcr ztaJ2}mb5Y$%hkV6Hx2Zz(XMY6oH`1$8inH;+auR}{n6o7lK7U<;)%)-UrcHB>-QX< z5%D%4dbBUbCWY7cjTtepyB3^ck9`~M>yNA{Pz!?_?Vy)72$w|cb$ESk?*~>I=J>-% zCM^=oo?E^OW;_1F8x0Xv-#vP;w&ApYKM>m4@%LH))KG+JWuoAJBD|dlZngf{KRmpL z*~8_=4CpqfzZPoOvQlB?lE1M-Bq&QI&C|ekwPaId&DuaW?~Z zpOGR>e=tHs>LRLlsBgcX7%KQz&Pe z960XifxQrOuibVO)rw%>`)8o$aY7Lwr;VxZ(4knk=K$=bHnG~-ioE8(_!sWCvv_oB zXD!hp8lr}40UyIivCS+ueI-2AbG!)v*6x3*%n=i}gTa*RHJbRrWTt_>mgEeTGKjXJ%1* zlnutL;ql?9maQH}GmNyyQerp*2Ib&kKN3ecaCo-r_`FPP{Q!F?CQgTTIo7S`$mTII zI4-Sn#KA^v-UT7EJk%QwzDwsQCZzoIXPx zy~am5%A+|Xddx7bO{5{m#36nhCl@2}Fq#vEg&4bBRx8vVF8=w{wze zT7;yXQc&=)$I4^|;@PP!?Z9Q zjTY@+n)VqO5!SL?xy;YaJU6i#|aqyimF&r>I%rLaJ_ETjtFVp*}KLm2;$W$j0##rSjD^{}8g%7{cyGR%dGmw3Jgf&B41z$P&xJ2JUw0WJIk$ymtk9a>(wlY2ajoe1O0d3e~rL}qyf8MYcyu}f0xDd=5|Hf1(cA0M`1>E`H2-#ne(*O_)?u4oz#$iLS7^TwWC)bMmk1C-#C@f!Xj8EWCkl{Sv2Ko;bCmb;(z8fpQ>upRKxX zB6-c5S(jU{!9r36T7VI9BE{}wAGs$Vr=DiLculy4^VbI&6kJ=(#U<7`M)V+0gfYt5 zv`^M+VkD`^Y)WCn0mKEkZ_z1Rv?dCyn7jl!XaJJyFBBM=u_x4gh z9wSa;JpB)gw{V!wXHA)(df7IEk0XEZcl_I+T6K#20`<~z;l zfUB!C6+*>jY6;5)+dFax1b&iTV8zsq%$JlRIU$yP!CBwTn{zYk&4D+9ao|qIL*u+| z1&5iUohRe|%_sI&M_SyKt~3a$@+-`X_hQ}o5K@?ULMtALW0=epb`R^{gmIeFK&c}IVVUY>4NgE-UYfVSR)3k$VRj*jbvMa(0+;uZ~4_*k$!3em6d*v&?1aEl>ILr$o7l=pt zyAIA|I!wxW+54@2zOj)g(}GfSUQd3^FNp<72)Oa0yfaLJ74Q`{!6$wcOi0IO-VCWX z2&v~J+=KuaoU>h?n}+75C*lyHkz`~0Z4o>|JPq&p5mu2ef$q=|?!y*Pcs!JVrBDw> z@&h<3Pv`@up%L83`DdQ~hW*CwVyMtT;;fTR$4BD+TfxKG8}=AV5e|9Cc6iOV!F^sI zykIxdUL^8`&M+T}!{uCF`ED6z8ZQVd=?)w}wO&w{h*QW19)|0;8P{2X3TPM$g(U2M zBS^-1y~JCNCd3&E}y@av4H8mFo!M@J=7-V=E@#1n#8dvwIW*t4Tu-%N4k?L|m26yfnYYC&E=g;Tm^WhXSpOoHiUVT^00nt{82bo%%rjLyCpx>J7QP8q4P+ zoxFm_Fc<5L=83re@7aFd7oH>c>`Ycc{(}4bwws1HB?*_Hgjmn^D3!|r!YzK7%}{En zk=z}6k#eL3H051k9`1ui{05tZ^S>FAA&kt2yoJUUo9EQirLI&RW>eAHAuT5xMII?< zSc3WisdpQD35!TSHh{I|G02rJLp9{zfkjxc`Nk`*JEba6k zNUbGI6F-?_Z3|T=l8;_d3-HgR8C+wB;R+kYi?G^Qe=;A%qo5(F3Dp7~1$fhM#-^k? zDQ4Jfu9p%Z4l$InthX5Cb?}&$P#>#*k#KNjuizxR%}<$PDFNatoV}beMXxtxV=twJg+UePBJi zt}J8&d2OhQoKfaOO06xE$EmW@VfHs%m0V;cuD-3AsVuEQ{zy$uTPc(mF7bzaA>WQ? z$y2pC$`wVFl`KEbo`JL=9pFxh`vK>i{&X1wm-#TMv^*~1fH}-~okWsQ>#gKtJYA?n zV)4{`$xgsxbrNgHS1Xg)5#9!xk`Sb;XT`dd5>4-23JW`U2ceWKr7km<(^sOS)ZS|8 z^nSMO^dd=zcBB{2!N;l_SZS!ijO+}a|1P8~u8Xb6!Q#7&-fpYJxxB3qsccU(n-ioz zg`>(X^`WhZwH=%w$N75L!T0lN>>^9z-khm#`3l?@(WE+TC?XcM>dSjw6YHyw#b~}h z{eIdQ;UCe94d<7X?q+|ONqb;_qmUbn!@B4Bbl#D9kg;R|d`FJZq+qVXlTCL$g2mHn zchQ+eTdrHupe_yMEy2bfSpQUkcoRKzWbN_P{F@)<-Fa?a3ywe+;LsbE`!p>m8=JV@ z6mLU0@lQ3cwVTIIA1N+++qH#q;Dic@Ex4=3{jsiWfEdwm) zZqOA@K?-u0l5oZ&!0Vb6Z}=uk;w0%XQ1%ZwD>fuo@TBs?lj{oXLiuqG)I@rl4ptZi zH}O<#3)5jHOokkg?9nqvJN;#25vj2_RWkFp${{EuisT|nj8))0N`F1@|I^S6xy@Q! z@q_RUSML*^#9{CkG=Pqt8*?bShQ?1~JMoaD@H0s06W4 z8oB;yh=DQSgy)$Dwp|BQ&ybw+b*&8-g_S}d=@l0g3RlHlWGQ@MMR-Z_FWF7*5C+8{ z9o!%U&rgDqS1O)HYoR6F;5BpP%x%*RGz=CzgtcNcD{t$~KB6qU7X0v>&x?kp)}#mN zOO8M-(i_KI9d_{?unK(1d=iSMTA5r;@-)}m3_XRHw1?PSjj}vfBq<+V$vdzLyaTb2 zQDhq#PliDx=>+Rw0=z=m?KPf05(y)ZAu!LTd>?ctjjaW}FhTTJMx?)#)1}v>6AMv$ zvg@#t!6fdBlBa=GL9_2E@GA7w_lY>eG+O9Idy6TSzf+1T z^Yn$tSLJW{tlAf)#981*x{zi3GCW4Eb(vS?&bSU9IQqTh27L3a<#$DzXv!%}Cws*- zbH$W2`K9y-ZmVr&MPd8~%p`BI{6Ib$`t#4c4>$32z5oJANiqvpX=dSR#oy~2Ikgc! z^TML92zkS2$Uz1oMYS$6w?ve& zrORCL6YD}v=Gm#k*jSjQY~i)pZIl(qut(%HX@gWd6?*U&{5kuVEk+q83K$F`3t^St z$`VTrd)&53BT?GfoHin@F*(LgSmyKUT!j`qNx@&Eq6z#le+RyJ>Ka&aHWhpKi9bZy zsw7PDe_!ID6y&i|TFgGetCU6QWAIy!RDYJj_fQ`aqpX81bPbQ@u4Dmn&^78l^*CxF z-S`=_C0dx6(0u7wbyev8ue0 znp?fY3-bV+&xYhZUs>^wz;xR~r!w?AZ((4``BM^%_oZ=3!!4)OlHvwoqYcy!f;;R} zBS{yOA0pK-WfyX>5_}EJAm=%)24y#zN16h7ZSukNHhFu}22%x7pQJ+Rh2=rQI5En0 zR=GwM?yjyxog$tOQkTi|@I;)9`eXj$>epwRwQ-b_gY*uI)l6I5YGj5mAhb7BEgr{RKBpG$eTmp1WGjBYmTYB zTHS02vRoqfoJ{GtzwRM%o_V>i4Ei1>WEntAM92TkX;hXwFKE%%QP`Job zA(U6Ep0Dzs^r~^YB?(>||1c+h>ctv*oFW4I^exSN*!W3c$^&&5KdN?uKy?7|X0_#s z>=lba&Rmw5U{96G6%XkynEKgXK$@I=VW@ zrGrpzx(v~Zjvr@fwn@yFp9C`rCdHs-`R8RD>-)O3Ws&N8>2F)TZ2VzMnUY+$*sxuorR3lV|`!ABzBBdcQKnUn6d3n?pBsPWiu{B7g z=@G{2qSYqyF6nL39?+9?6F-eTxXd0Y_1QE+_;}?De}&rTI8q*_m3UEntZsy-MQEw6 z5<=C1X=hWP=mK;b4}O)C#7=Ad9q(PuUz42YBBbK??oxZ!cVIo$OqC8;^7^y zQn*s#wZ=|4|Dh*rl5~eHw*;g&gubFDuS+kpooV~kM#5p7t&8d;YY?R2&K^W|KsQ?ui$@qoRivPTkirR{ z%UWX#FL-;DZyMn#ecO9@-q-rdE{Am0sZ71t9$S8SC`v|C;4L``m*pw^tYCv0d?-qc z4|x(>z?SoWkq_<#^p%i*plxA*|$s>ysDwzd`JiC{7tx_NcanN#1vskUwobr%-1Qp#QR4C;sBbO$|;Qlpih zLs=vqC5C&b@#aPw0Lr3#6+ebreNM6;{%{}U*;n7uv`T6#gb6aUDy8^Sg69`~MiuDA zOM*9+YK(GAeS#blPyCChKfmICp;Y07a#2^;R5zk8Zu};06W$94cw1JKbQWA`E|dov zl8>nWtwLEY9<2by$r-e{6@nLNz3_qkpd&71HOzJy;d)1Upr0ywh+oAW~OBcld>3^wEcEyxyVLRJ$q$`DKWF0=u*K^}JAWu04y4)j%| z%F2C|Q#LCh`IH3-Oed1X<2uJdS_aq|qrd~9Z{0$XR9-aWx@TpIs9;r+oqGfj@AL^dq z*-%$qKVCQ>v=IyP)ySQVQhT8}af2}EPdM2@=8)^8B5Ev;aQ&vE1tJnH0)xp5QkUd_ zBc7dd4%FS$w-KTQqj+DPX9cCPR9GklZLoidWF0++^5bE04~`%mK1Er!1@uRWIvi(m zB(BiqoPXv{m-ZThg(X5U@lR!>`IFp9cc1QK0jvQZMds2i#Eo{NC;^cZxDsEGl5W8O z;!NCeg|32M-k`ig#goQlx>_hAzOYSAn=9YZ7o?GDIdv=h4yiCJ9KYjPYqlRe}#pN`Mp zg*)I0ZwHle4Z4zx*#EwTU3^{1V^d*aAN3c%q@PM2rHnFqlQ?<2T%H{PFO)IM;QWo} zHk6-dAjkWIcfq~T41b_5k$eKRsN~m+EHbU6Z^)lw$F!o!5y}yLKJrf4W{XnmLjZY? zT8S;krg7YAwQ34yTTS z)#`PdkpyEoRc)<)qSdG?c;Jp7g7%y4c=jITuUHSrOE!?raHC}1lA|S?$9SowQkE}E zc1ceY3dn}^F{CXFp(9u?`2cdFE~ra+lN7d%cTy{}^L#Ywl?t8#dT1Z`+`leeo+C)= ztVHt>i95}A3`J~h5_g~mI71AEwzhAipYVk};hjicHkniPo=Tw=Yr{49|1d97iIv)+ zT=zO8UQ_0fT;F?}?>Q&SP2#Gt>%=S-qwB5rK^7*mr|dnsqXzOGN&&Ss%)#_|7E0M(QIHOsPHGmcrrK6q^qjt(zxYv{d0e#R6zQc}cdZ&3SVrpE4Jo zv&n2Y(&c&HyG8u{UC=ww-|0r&nPfN5KcpUC1I_o?S^au(OZqsqffU1ME8+Br zx{tR~n#r{wmEB}-;5@0o>o)9Cp>}LNmlethQpt5p+`Ytmo)=8FzAR4tAb--`ljfzn zDHFxEJVD+|W7JB}Tj^^Hhbw4>-35I}EUVtQYNcFXe4Xl8^N63_FU4Jp_w_90-aB?` z^6T{X(i%fz`chjT!H<8Fj!&{I!}rZhEEi+AkI?7be~GSeei; zwwJp#NAvi(iDi->i6KtwEZ;2uQX2#LAU!1ahob6M+bZ0_&3Q81hQiFFd6}y1W3BqS zY5vkqj}nRXKG$%)nR|TFjPH38J_#F~H_I!`+eueGPPUMq@>i&#R+C?Gr?XHr6$j3-p-rBO4~Z}POd{jRbRO( zo?a^dfUW3Rw9mi0QD9;l>5>zN(-x=>(PSr6{jKt7!`SPiSu*R_O=V!g;N+XCj!TUjq*i|=75El&(kuvV{% zI{L(8sLd+3*4MIb`DjZyr?PYTKVG@WO2vaFnGdEsN)B=HlNMPRwEx~NIlrL*Qg0368c$JT zk`4<~ z)a&FWAIIvdN7SomNn9&mM4!M7_(-nvQ>FhX9w^vy4W&nIp<+MwD)n>XEJM7ZpzROn zZ7r1)DSQ+{ln!9vSJ_sag{%AD2JF$~uyxKl7j$INz^BAxx`PfxFLE_M6HCHV}-jKKaIkW>O-(3Zp8=L3e zNCw(0k~c4B)1|ud&(cRGicfe_N-eds^cg*82h-|5iu2auQr=s*0xQyAsJo?8um-IL656{KvolP<6Z9?Gutvge zlpiU^MH_ z%Ay~29{-Bg|44ET+UE$$*%Powe7g2uxq#oggXnAq4Se>M*^+2GD z(3{l@q7bB)69%C5YyscL6VQXiQ3CI8s_XL7u-VvFcS2}GC%_2ajbBCSf4g``oI{dW zYm}a+pq;oR+R+Z9{nH11P{;Udeh_U~PG}h~W1vob3~q+KQbDmIYDxyOmUO0_gf$`; zpOO|R!<~i3BoE4OA!ti{iXQu>kQaPWlJh|{!69g+pKc7%57t$XmWeII{z5(am>w1s zVXmkO0b~|Fry=Qy_QPk;2JKCVr@~oSh|;td%ExmdjeF_V=u@RpIv-sRsh<=fjT6@h zRfS+-I2t1R5VTw3vmc<;_Zr8sflRf_aQo1An1psw6VA&TshZ)q?!5l3-c^@dYA-$$ zjtiBA2{fM6p|xp8e9C&1`1V0Zv|}D8@5ln|a}Ts#1fm7Q#;Zb@uBS;d<~LY%RdoJR zL!lJ)qY-oq${drag*-vz!6Z=8+80PrpCkLp-)N0V6VMU{+~u`((mLT=}69@#d`_rJZbO;`AXKH zJ+=?$PKVq+>aJq_`r>q98?U9jRfD8w;!*TE8_6efpYB9|TsL}(oW=FKik8!%7q;tau4&1Y#V7t&jVnM`GI{5u&aB$Dpb8Fl#ixP~&? zEIHavA7R)v{JxR~CGgl!o(O{+H#d$($`C-~!Tav*`kd+iQfVU@mX-(3K{!K4{ zH;u#{R2F?Jw;&n!Vgl4ey(}T0SDxjhnQ0yk5(f#yIyrT++|KlXoRx#s6qW>C=r%m5 z=FzL1p}n{ao*MPx1w6w!8BO|=(-7dh!{-8}C6+j(}w(ls1G>q&50qMxgz83fc}1piTNU$&Y8qZm8m4u|!AKz)2=S&{zsj zK9Mw2DXRl`sm`*^QQAUZQbCx7dRGPB7Bsta3%(IONt01CoJv&052X4ZFZmEurzZ5O zI!H`QzLhMhi_ufFi9eGksM8rDk;E5>KJw=$paAaoWcC+#f-igx+TTx;gK)iM%YY!E zuxlw{tK5S|CcjNN&Fia8lmfIjTf`=--Pkg*4N2mak)B5IVAzH@jAVYAmBN|bk7sbV zfE@v6h5PQq#7(v)@Gx<4+6=nSy36W;7#huY8lsF5C(#Xj1lkd%@TG`8aYE~DTQ(0@ z{~@lwRCZCRDs)Enbro*on6B%H$2($QLUk z80W850;SP^@qwSKSgd3xzTLaOxXgM(?Hu3HI@+l~sxe`M_>l(a!dYcYu=r7+>>f-c z3)M}0loHAc!%X#09!NaNS?*EerGJ`rN8Ue$TDIwIOzc#dxrd>7f1t2gSf&3Aqs_DF zNpX_en{(1!9mPAyozyhgsm^81(SQ1urPi5VnkO~!?jh{39i<1p>a9z2G&Ya;Pzt!v z+2~J==@K0-eN+xH8$E#ziE{E&#f8MHBiJ(-Nec5eVeQM;`!X@dC*r3Bn^t_jkoqC_ zN@e!Dl}bBdg7J>PQqOZgU4AxH-HG)_^89jdc`>QaUaFf=svE=;S~M9K zxEA^7ni`z%B5D4nqeUb~oX&|XDUhwv7iZh$X~JdY1^1NyvQ;9@SxZ)vxYG?RZ(F|# z#h+jCnr-V%RQJIj8YEBjS*Ne?Dk!ZW=cX;vzND3ki@q^CWXmUZRpvuOIm}vwG(msB zSCl_mvpt=wR#^17s^_h=n^J`w^WT^I-a7v*mm{z8rIfecHSIABPfD^m=|rqQS&Wwf zPTBmeGTJ@1vy0FjHOdE3!z+J&INI$%${+f+xu$=p^KC`G0y+A<@kxwI)tl-#KS(NS z30w+7PYN)y{LUY9K8 zaeN~PYU}6=LF3+dIKTh4R(~gl{B_=|M{YHIol`4(S6@FDN8||MH&Pa{Zltc|Iell- z2^ZuY)&xWkv*5fTRvn zzCD>NSINDX&Nf#^zeS2%ot(Fg5ckS0EzNjgw4*=Z%g9*1uic8EsFbIs{NHbj1)RGl zO?)_BYLh<)^A$!st(w{{_afn6>o`Q5T~}I?F17+?a6-d_wiJWhS{U?LynGlZKB`CfdEZJ%qAWR^?u6g63mhuzkt!UTDAdJjler;u9o z8M(--N9?E)#Ey83PB=~v8ak#&@6$-AoM0=F%OgF}TFh9>GWt!^QtqLZID_>7$Wymsu0GTQfG3N&#mWE!P}zuF2%~q$H?5Y zc`5G_PI+#VqS6wDH=lAP-gX^CW0+2A$-mkv+g7r6;xIME8i4P}nMr!19F$NyvdkH4 zrMwFJZcQgTYwP4m-!FK!(|t{SBAkeS8h6t4N^nu{A|gpusJvD^B@SnWt#il-@(pa{ z41ZNEU&-Ri(tMZrPRj#flj4^W9rurW11FahXYo<$sMz<0v0`Og5qgbRVH4RYWi$F6 z&e?KOS27Kz(mdRyg5u{3AABzJ3+5wIK1fZ;6~|1$>gO^s>21+&{X<;#TWDn8*C_ z45+6*=M!O$(wA;VDR2$S$Icb^`3{DBMb?-nr0miakxR#gCx++UuU}@J;I`PhE@7f! zG;uPYP_9~+veN9lZ2;t9OV#{B9}szM`Vm%@D(~A(3@JEW^-h{Xj>~^19ZGBL8DgBP zHZUc~ro=xMLf#0-kW_SWwcf&qzl+zK>mB?%2`5Ek&zd(|1l}|rzN!?FY%1hEd znk%~WHCWYjeRp+i@@h>+RsMk%%4;r=6x$t`#{0`w^kJuPXT*i36{wbPuyI_TD&&A= z2HB;6#lT50ZlHdH~Iv^zhJ7T+{E3{se@V&bn^W9~#O@HUUx`=lv2 z*B~L69F8`_Lh@CsQJ+&9&rXP2I8QIcWcaQwLtE!~dJY~cOZZeowpL-Q&^r7OC^?n0 zX72T-PG0?`4oVr6)!HcUZPUdC!aa6Js0p(y0_#kSNb3fA9%ZjF>UY+Jr7B0*Symo- z$T|r28lCf<(dK?tx~aAmj*zj4dn=3*a}PdQK*W;O$ScytD8rN`PGmStS5L7r+>;Gt zb6F4cq8@|09+FqIG0<&+I+%_?ybMRXWp%V% zNr++dMPL3av;zmY=k>T_aCJE^rIXTPCG=GPrQG0KNijqd2a=YGFI*Rn(5mDyuZH@= zU|t6id|lW97LRzyA-J}uUHsj>3{j>Vx=pBcc~aD@mBw&Vh^3o_hNPj|4L%G0bQYpz z){;&ng`Y#|rz0YXuHfl)7SRYTOz|%B4GWEn^^b(f!U#GGed0r4g0NdyO?wdxB<1~t zt@J76CkN1<;f;Qn>xd;eik^rPa2C->Ee*tFxnZtut`1Ol`$!kilJqmVLmy#Ft&zr; zLq2TDA1&S8$YShoPL$hnp**&L-{3~509Ey2rq23yy2AQ(x;xT$v7xXRTeyjSkHt9O zuA~}`L~n{GaU%ujM0x{t$u(#xJ;?7PmM{!z!D*eMf33S<7-cZ&b4UZlXz^cqiL}AF z>WSm+NfeawPLmF_G?nrDbg~>R@PqkY?u8aWPXIpFu+lV9zs*p|kfQrX98ax8Pn)3j zm77dN4~HIcBIT$gG!mAeF4qRJFVE2Lq96hz7G>e%h)y4>UtzjxC~OQgY}MTtyl5J^ zLE6#bR77pzU-bIiBN0>-RtxuWJU(cJpM%IhFYre^Y+gX_#}68|IW^Zu8n)<4N<+m2 zQi=Rci4Z`W(w?Zlb-~_$BhTnkL^8}mZ!2d*`BdHxJ(<36lAE!$RR)vO1YNMc0P29< z5Cboh3)DlnM4wQK>vab8gf+y69;B^>YeIdL7l(6^KS#~e4ZTpI$OE<-3pvM0U!{-Y zL)70T`W8;n3gTS`Vjh{Cfb<}p&KASY7xFr9{oTOP|jtV z+a+m-E>##TbQEr~ManD^E17Y%cOwF868%bs(Yl7N-anwHRBT`^IeGUrh zfcv;N(r_$T$tc>G49e$}?-tpqUm>K>Kx#=Fnl@3A4K-LCE2m6kW9V3tKswQl=&74V z-=oj;B4R#g!vwo6rV*~vw}Nd7OoMm&uV}OQhvZ9no7!6+Z#b)7W5;X)>w`V6N*|I9 zydob(7vk7A@|kQh_FTgyU!xIZVv)eYPViV?j!q#%$i2kPsec*@8@8)2n7gf>dIopQ zRHS@gz5&q%7Sz1%^D^u!--EXMMx+bvO1k--E7p*7*LR@v_-n|MxGMF#f#~n3uUL@H zh&JDPq`8oX=y_2#9IZ#k5Px5sRYF|YDChtq(ZhVVs7tAEsh92{{fKC#W{K-lWA!#E z0MYZ?ZA=N`FJYt*Nrtnt>Lm0(ZbnpgA;wud^hjUkE$JMxph%n2#K}Xyk2X}-r~?vb zrMA$07XA1Mb(?LD`c|C^p$A;MNr_8`y5k2ID_PCQc|5DLXrLVZoFfmd} z4OYh{np0DS$CE#_=u86|F$!ctIwzaP=^v*<0gkMv)VKc>|Wa z4RWhQO^UC2DzQs?CsLR_BVnwwtpgur8_1uEKIm`z&gSy`q&(`TZP`dwM*me8NTxC5 zYKdnhgIphb)fL*vrPZ-XcP(b#$Gi)9g}ZewnQ2?6u9Au)X0IvY+5O09o~-B*!{p9V zc_)a#6Y*B*y8bC9TkcfaLf)>jqyvh`?|i?F+Uaw%n;2y4p-$9YL5*`T_TUa`z@?OW z+=Zp6Um2p%=}K^^;98=xZmkcHg|?e~OR@p=`2C-Asqe(V^fFgLkjRb<9IQ0@hp4K_DNYJmIZ`=g?nSV*M;PP!Ga= zr3x3td@OI&)9P0r_H;I2e21%NwGW-08~ToazVuxxIj*RN+QQ$KuZSc*uDJ2hf-5Xk z+F1SNz3OSwN}bIMN@vxgF{gu)?=07Uw_Xv?dVGERmvhUaAKwUXFYqeX1ztlHMBQniWL+&jOQ{M0amX79^Y^>0Sz2o(S z@5=0cP2r8tMDOL9N5$>MK2A(-XGP|>=_ zoS!|UcU6o+Ky?1}!3)DqJ+!e!Uj_&P?l)eImXDNPMu&c=o4)^R0mC+zCDsya65%arQ2KTzX|v5gcvD2r%y`Bd6^c_wnQOR!HEudeA@ws~wqB8h)h zQHl2|^zz`BZzY#{TPh`kP{dX+?Sxt!JwjVigN#%U zb?ntN$nu7sdbz?{#4YcK8t;;ezV!CRy)fr_=j0dWU$DAk=j<$AuD_NP76%dLBdi7e7|_Wd7;2lX*=d0)NuKIb>k{Lt0#g}nL4 zt*7E+sUs{f8{|Kw9o8+>jpRxTKpW~*{)v1cU(^k43WtQtRXq$Js>H<@&L`}CF~Mt# z|9$HQxBT(+#bl>4oSE-KC39oj0DUu?7YP@>q`gKg>@ns}(W z7Ag8%-{?9gceTlSS6&YNalX8NgU_WGTD^*`{N67%hpALr;@g@j4~libcnEH7f zovPnx9pH5;sX_cxQ-ty{?Y4X?{VTt#>`)dWGBCkfT;Pa7-9QI$*BW1nPEq^%O;1^# zNDap<^}qJ`ZYhwW*I7?_Y)yNbP|dVheUx58(Odd*57k>X3I6IkB}_QZPViNNjaR7o zPtk|*`->eG>U{ePwy3taa!Kn7mg3iw54u)T$C>N7786Iwg~(jn8Fty+Iqf97q4c-a z0mgHa%0eWcT)tgVH}ihq&U9#eIJv4sB<@Id@jgkvnVUL4Rz8~lHLVsJtN*}ETUE}j z{mnJ_Fr|cC5#}M5Wd-dFi%O36wJD7Xq|wBrJM@h*DyeU3q*q7bl`WU)s(RXzrcV(j zsdeDIyo`O4U2Xj^F7%|llj|`WsWjRF7ZoX9z>}`cXA(TqlfQbth32UsKFirrzgXEz zYcMc>H^-YkNJ;W|@jSe@trSWKXV|~I4Lg9Iy8$c=F?}B}F7!NW&-_8pOXp6=bzIu! z6=Jx@I?@}gu&uduhap}(q__$@?PhcwQBcHwY z<|wLP<8jci5}fIEURilzOOYSkjapbjp4KSa8{R>LL_EY zj7pvAzR`1mp^tlMLnqQeI0tRi19E^EB78xg`yupyHl%}vEg0!Y$WoMI7piM`UG$~b z$JoNpds`xwOf%@*67?6zHQ^$ej`-%ObT(~)vTrpZ7A=ov3V?V9ME|eTuZ$xSl!B)N%T^w1;}}-O6inN7zAj3OVRx)`GmEIWSJ( zCG1A@R~PgeE3lHU<x(mWAl-2!FV-l$goery6 zD)}rt#Ym?XB$yVUwV^k6LEih7H$?0}dtQx48#g-5mm&-u^^J8O3|k}_dGj9lM)T1S zM0YiVN>KTdgtZtg% zhSr*X&=0K*0kpKx1GTaf=zUB@tWOg}YyORx#=X2ApNTOvE~w#I_;iEbdAI(mai~$% z`RP{+5qvqnkDeI=O+ioe389S0Q1>bU!!YtA0&ZguCh=vw8hVh9^ZHN?dKqG!78sbJ zilLEik5ovkiN0zp&i5sxWio~MBBJply)Rs&TQKIM1^V9pKaS2iJc?xP;$7W6o{2jV zNJ2<(cXtT3xVyVA?(S}jUfkUmcXxto1VTJxEmifM{r96LYyGRiN}S{cwT~V z2R%mmXBDpfN@Tl`T}1u6#oWy{UOp|QNNc3~5(~SUM~+QblYiE=JP% z5|ddfT;C~hJ_YhE>=QiXE%_O9maVDWQ&Q!*a)D?U{$Zn~-i9^!1sjMc?hrG@H2ia; zSQtTvuk1WB%n#rk$c1*2icWDIUcvg=>#1~Ea>`Hfc^?)?hl+*eY%+o*3NJ`;X%ERJ z-^88d4k;$K!}Hz&_gp7D4TGR#<=|RzTY^s*et$7JNq!-gp_jBfVh8yJdY*p^TS*ad z8)+z-#b_~597>vzWr7`djW1U3`f!qVf-ky;cNxDs(qqYA?jVmBCGEa?TbeFcg3Dnx zoWz^NT4W13OD2#dWP=z;&Y+&HivMR35~x4msP4&M`$h*Ck=$A%_mS@r>IqQ`;6oS> zee)rd!@tQS5+O#Bo;aJ4qAr{#F;G+<2&?b}d+-!(XI}#*22~QX|7?H{ITC03A^I3KLUxBVA@2>za$#vUw>Z~m z{miq(q55gM2#&#FLT#)cHIN5yCfr31t~C#2-e^hmo%Tc61((S#^a)h&7*8b`6TUwep<7WnQ-Y4X(M-`XL}tQ;y=jYZ{)|29U6dN)|MRPpzst< z;*U+c4aN8+Man%uzT4`vDq2N7RqIYp(}zfKwuEPR2(sEkam7mF^DB|WjfWby3U7#8 zMXJS(6v9lijc2Lgxt)DO-00Po#%X0Vn|_2eMOJ8{_}{%g6Hj0rq>zWu_beLg2Ze$? z6^`7JMG_M}NV5&|OiZ8PDxaModfBVd(pr*wMteuf(RM6JOoHOKm7iggQGY(xy5hRE zWGA7(h{8yICHh$LM9U0$n5iF4ag@s5Ds1&SN~_^5_FH`hKYtW!Al7ByP;CU@iBRY%YjCb$y*`WSS7k*i3j!uMuYJW4R_>cede`nk7<9ncZaBJ$PwMdnux>L4yqtG zJ&JW?6Se2m!pv|{m4}Bnil2=BQ#{63v<@%?(O!@EwXrI2~qN_T6;=}=k?`fURISOU6W3uQk@)Pr0A^n#Hzu`yM zM~{;XRW7qU(g|1V1>LN#W-aMTEsAXdl^}(g;HL56rxMr1$9UxjUNed`J+GQ0TKtPu z*ES2^T)o^Q$ZOAA7^+=n3$@SscfJmumTLS_>2*b0ns$YqHC)l# z6&!aqHx5w3+)t%=Po7gDr<`r+b}?BqN-?aoeghiFE>yxBw3;*v4)}LiKUY`qjo&8R zkIXi_Qc|5a-CL~@u0^@448B^JYc2P8Y^Li-d98`8uqoPcT=&CTY1U19t+y9m!$;kS z9k154*uS2((R)mDTo2rP)IZ(<&Xd1h%14EDj&5vU!6YqLJgQuhq4cOvvG3TYrJ|bt zsRa^bMUe^`Qg3C+j4c1~hqke9xAI1v=vT z_tALmD{rr_(5?s-z!>nMMVr+qU-GBTKgH*7^?{bH4D$c3wg3EqZZ$n|jnHY{R<((A zPMINXBloopbQpc66%{V%qqLGj9(W7}eQ}$+Rkpl8X_@bz1b5w4&uafLp~A-SL{Ko}X4pRF%EbLb6}$O-oaY?%_-H2wg^&p*yRnUG7q~TJIP6Qf>bQ@?Y$pD=yGi zZt~8{F~p3dmR>hERQDB*DZgd(y|huZ9%brpcoDzq`;oqzge=pkK4+`%d02?_@x5Yx z&te^KLg$-Lyb8uM3KC>^H^6wd4K^kv8~2z;!%dT{?5 z&fBkr3tpG3&)B%!wuNt4lb}oD-tIR^PRwsg~8;OtzSNM6yjBtEySDO zq_y}Db(CubRQyog#wVkTu~W_c`$nz3m-FFq+-B>gmigVj{22S`=V6)isD;e)Ztmz@ zFk9H@{*GF!1sEiU)cekDJddTS4S8__512A%YSB8sFO8L}>s`HSyAyw$DZTvtO=rbpA!+boSFvL$NMO)8Ve1DERVBr7%!Ix9Ciz_l%NtpIr`?CMh4hMmk7( zp>iqy*FVIk$E!o>zX1c>P4eT#ua0RdMT&O0zFhlQuumw%O==M66H{n2(r;> zF7XKeqNns2*#36?z&UBdz)Kv|z71&HSf$e#Mk_>1*R&Ml?#D zWjAL>Ib2~!km&EBzRDfqX{~?Ftxf9dwcNvzmGFg6b2Vx}pYDB|3{2hPJCoJ?H90pi zqf;sm&xu=}I>Yoo_n+*lVGX3=PC;*(Kgd;B*K_6zE7@jO6|#)hLqf9^KTHR8yD*Y(`*Zo3hN!JKX z;48DT^PT(FdiV2F_yMh7>SoWmoZjCS*^89^kakUPFILFT30P$7?p&nxcWrf?=XG)` zxc0FOr9Jr3&y!T7K)C z!(Mgs-pFSHKI`?=9JOY_12WukE_SlfN{0U3Wf9UFEU#!g2ZPtq*$IKCj z(v$Kp?Xr?8l+uQ)YuO6riQ0;lrz5JiiP)U6r1%MQX6i{jP#Bzh&vPKi?2_DlZFkk9 z+DG$Mp3QENHmpE8taVdgBH1-d8_Fwa@3i%F4oxdFrI2^t;8@-AJTp{3%o`Of@(lJb zq?B|ww>b4BT60q_C{>AM151*Q=*!h`p)>Y?flj%zn*arHnNQtn4O4HDu z_Fv9&dJ*Dq_3o^Wo9Lm^12TyAlzx&~e7@k}ci@72Our#Z-j2fi zj2`fObf|v@k^l!+d?kCXZieR3T3MoOH$7xMmBI2a@-MYY3FLq<8XdK@qzjK`f-sNG zpaIYbD)C-?4BO>5)UOE%_W9^l5QB_wd^9?FDYKhVbV&!+l=cFUa5uT%e+L3=j za^wh$U~70;B$8*N8r|%D$R|Q-VV~l)lelCIlKHgP3!(C$)6`H3)*JSH7b zD;+=<@&f9h6F75Q=sI?cU1Jug2zKjHyU{q&a>JG?9pWoV4)*SY#2p}byc73I`-Cy% z7@3c1uQUA1A9)2<2<(C8s6Aa^&>d!**?IGL`)`BC6zLT&LlGeZK}kC#EtG}`2FVT% z)NY{|+yt5M8$Un~@G<=#*g-2$53GQK^ay#n3g&39?#9>V2+MB#(lqGYwc zAJ=aI-$WLRUSukg)8)7s$%SNiHfn(a_k`_(4xqB;=5%XyL%4adIl$0dW>RmVF#j91 zYz+24W5vHnFSyk1vFU6Nyf&XuyZ?>8ds%3JpP32O$2E4?c*x>ytZbQP?QhsFZI{QR zLVhg06w$2}SBVRu)SuvU!0NlpXYd}(jpR@tXh`4S08EDh@s+(d-Sc{5_A#$EbuqM* zzvGyL$sLebzLHMx7Ysn^wH16ji=aIm0gcQLn%hO_A1_!E{0m>%P4>=|?e)jp%~ahK zZmep!D4V6BWFSZ&J%wL10vUy+aEZ-^Ya<;bnf9zARI7_PYZ}z+noy9gvgxMMwmrrv z#@oi0#@+CNv^T61WpN9LAFGjdzQZrUCtilP#{K#ks!I>3Pya$g%3?!!1yr?pEY`f= z_QTM{kSTwWTbTUJH4RQN9(u(h5lSzPyA7Vb`_N0K;(Yn?)%avd?qP2kf&U=`eUuI6 zj<)vlcDb10ymV07WteEJW@sT-l@5x-rC0FDUIF*-8uAMd;TthPL9#)!%7F&@9iOcP zCyd#gWo;{Wl7}14%SELbNNx~=(KuW#F3pm9%9lw13uhwKuXo6REI{S^pY9^ye|tfH zyNBoCw3%BUi1E;Grpn!=Lh$6B5c|qIrGxSqBoYcFNt^+%=Luvk*Pw#`3I#Nq+4%wF zV1Ge}$z$g&2Ct8zBoBtqZG|`siGdWUoY)Lq|2@(@gG(MLZ9^Kl3b(N*v=68~W8fNk z$QGe{Zb1_GJ4?2X_4->JZ7`aS%JHNtdX4=J{$g#gy~dC?aOC%vJop=>#FOx#cB3Du z8w7wZ@cpDf6BvX1NVt8p&q#5h+{XB?Jd1SFI`Eo?Kyr&UL*`Z?1IboWQaUQRp~96x z?`R`CO^Y!ZUaSrL7$`=ixy{Gyr<3u9N2VI`623-xEUYqihD&@c^2*c2IQW2k#Q|`T zEEavl8N?+FE%<8as zp|Kc=8rh5Nh1x;k09Ydw0W)bd`6GC6982(CG_u2?)x(zxoy?DIBZL*s`ku*_m(st= zD!5-p3C+bMx)d(Svg|O_ZX2>2&Dl+?gCW9I5{q2QQdDqV!dpceNnP^|uX_Aq{v*#V zTOBdL6T;uqxk4ZDw%(Lqg(t2J{5m&TC1E{%#;Sm(_YC^zPb75v3ttPFiuj7}jaBSm zeB`!N(!9En^R8bk23K&4xKn?`jtV{SDJSg(g3Nllf~~`vascn6W?<{s`Ra(j&1by3njz6~0vw(T zU`aiSoL79gxq@u>dQFez6!nz$a*!*I@A^`#ts|#`pr`5{C?`MkA@E&? zfTCfbLTa9AB7W>C5(7TnnHW`{b!I^>mQk1$yFRG2;)yOeq7SHN+ z^|QPrs;73WGdwy>@2|Il_HJS-vJ^Ms7sTe6SA|$?gXpB(p`O0R1h{tW>?(W@$Aw{Z z9QV^}Xj72e&C@sN!AQ=I(m|PJ92)F;wt(I%@iFG1_%7mv-JsC?81|32rr;ZyBz|(W z#Zwvs-$)ZJRml<()m=~$254>2LplTk&^y)$>7#}E>#_%8t7sRZ`}&V_{3=*)_$K`R zJz0#hw0F7DVU_f?Vw84M*}{iX z1=Z|%>E*LhMDUFgnddpy4sFFsX^=JjcD+Jqd(6&-;TbNL!?6YFKv zDfA>dC9h%bSHJsm(8r6O3jt>KOFgdd@)R|E(HA@G3ANmRc>ufCI&weSnJyt`*&ls1 zxH6;aH7;fSQ7`yeTw}+Lti<3orqJXT`L_cH$mg^)<(gYFywPSlGk9xvN%vq@4p%as z-qLpxGap6EAxAd2`PR}4-k_W;foH-v)EF&k2}o5j6G^pczj1S|1V*V6p-l*`R*0r(PCs1^+>X%AdcIW==0!%P>2u zb%^5I>-FrEYt~=Bi!1?-!g-Mv*N{*oqpTUPja+o~w<^P;4R?&+RAV%PkKo^-ZM zbwLL*)8bN1eVyJ#Sf+2Cbhv_YVzeI#nZTxIt_?X?qSVVLFJGEWezJ8ci_RM-tW*3w zJH!Kdb<}pOxN;mUmSwb$*h+5>M_aa9dWu}xbaHus6cD68O#c>Azv9(b?Vpd7sn0F* zJLzJsf#v91UGZXr{LNYnt>gJGxtvFKLfi_nYl!%k$q3+n1=+Ecd`-a(1^kRoihlFX*7HKr$5?|k~4-&UV| z<;cgdpsuyTJ~w*t)#I@jvGg}jF8HWb<&rBzAkLb4j(Xj_45{Dc?2WJ;b^ROKP8~Wm zu+E=zMSRBiwDWv==j}76c9XP!UVh0h>Q!K!YH~QM(v$SHYohSNc~YCIwsDVR7ojD8 z;!Jz4P%ujS{GHbD&E){Ed~eki_TFOHUb|?X=hc(!P>b2V(eT9Ma*a_|Dos5`+MQighrzAaTMJ{$)tAG3TV+2QY&c@hQIt>DGlo|eO*zSxv!`>b z^_yvyTG4ddbH{VT5aQhK`JZymWz{Iv(N%A%k5DysNsa1XzqLELq@kU>Pb>cUYU{{0+zvMQDzgAtGuz=tH+}@OMWu4 z5Tv)>-)p~~Tl#54<4=~{jl90+wa4ru4puGoujV{R$>ckr}-QlC_?)%ONwFjt@sp@)lryks^Q(fiV>q3<*wZE46 zQ|nJ}wPa*tC}g6YP?7?U5X>Znlr}zxBaYp4!duePuB|{i8mc&jMH8!6NsdYQFgH$x3Bt^deeEe zJi*U0GAc*O^*NUs-r6I3SOJru*^4u^=DOHN0?C%C#*8hah#SXo7#IO(io`&`;Elo7G&aQz|UP* zdV~~kANYemB9T)=FH~xC@I6QEgvRE-ewD-Cbfoh&FKn*to{fF{T6KcH670Vu`h&-y zAAXPxC$+@{B+0Ej6?EbZI+&V^*@OGJJu$B>Z8OU;5MkZh`6JW69wb4Gi?o`0HSr|h zO@oo;{sSLDE$q81Bbk1gmxYI80O-c8V%7!@R-94c*1EY3k&)3n^>}mBWzb_j7~1OH z^b$ysIOsj3mnXuLvR-J2)N~`#N_b9Z!aebomW%Qa7^J-q?`kdL7{c0`q^WV-*cgl86IBAuPFT!5@|EKr?W?-J9b!O z43SX$CdWjJCN|3(mB3I>~Dny zzD;fGX)8Dy--A;OKLg#s21^f-6{n&}Tp{csB}ij(QYcP*;KnHdH%}WlDkj5M+}&q~ zy#?X+j@IKWl8gg^*2KR_5%8Dnk|oi@>%l|O7Yd9(29R(tdmqEu@|Pr)uN#MrcqS z=?JgWwnyR%uSClg-i_1}|79bD(cpIvMj4+hWs+u+1xmt1BrQh6@%{((mmd;b^O54H z3ir<{y5IWRT2?-2dt_RKe8wgCX9f#T<-wvsdSMtN%_g_VNj@G`zX9B}IB+BGg8FqA zedt2}sW9+mU$sz6fUH<+S_Vq}#c(N?M2iuI>(XMWx%`au0d-&p_R4EI?LW z;m|}z;l7;=<*qf3Vjgpv-rB~RLai>_0Mi#~q%7f>ONa~58^1^j;7{Cv8Y>Ky?nTu5 zh2Y;g%JxFL+QORR`mJTp*=uv0_fN}NTbON|v6~@Wt_-#6EU8Qy^CRexCZT>A#bfb3 zc~F}|pdyTUTnSjTu+o*|Dk)R(S`Tcqa5`Z(ae z+QCLbt6BEn>9%F{Fry-5>;#K=kPo!F)tw`9HlG-mId~pGJeJ@f5${K1(%+*t$sdWX+HwUxPxMN=|{q z?+-swO=FxfRys)D;BP#JQ}8z1glB#c`gX^0CEr4Sw8KSq*b?AX1mwH|!#4RJP^)cH z4LMdQ5PFG)rSb+JID>9VBgrx17Re;gebUZ;_L!ST<_Ti6$B_D>6UXrj z>SYr=*9QXcg>IKJ4MDc?LX>+gNiz{TNUul6^GM+h{6AmVM&S*r^;*cC<>Kk9C{#yI zsR$_t`qL$_D0&9(32!RTHNLd9hwV3w@Bktt@QDTgej2Bi_pgjg!0%vCsJ?LlNsyk3lab`ob+)hhT~a6NM^pyI!J; zS!MPNu6ZN8jQj9ZbU+7pk#Hp389ha+YARy?s6Whi8!lLux+~~I#M?;tR3u<+(7E{a z{n<=tK+nOm+X@$J9(wWjz!RE|t9dvgF{YV>?7e-K)*`=^v8Z*K>!kKT+z!%FMd;?8 zs1Jufisgdlkw<4j&sYjIxCr#H|Cm0n*@npLu_fe77G^K3X63~hH(NWn)~adPHFRcc zpmDWExA_^5Vgq#<^v}^06HGw<^ydEPKN#U8?G|My>NZTWPOyJcrTkvg`etge29`Z6;u!eZgRisg(tXjgWHc8IQ0w5_?9?T4){9hrZWbho z4fcwD&^OV^TD8&(3m2FD^f}TowqKnhB&ml~ zRY}+4xu(scN$~J)*KO>V7FoVYY-FA*a#@jn*_#W@VJ{2jr4XMmQ?>jot%=kKZb(sR zqCVj<+Bmh1Qb;Ssj$*dOcC20RLGzfekEwDr?)0B`;Vp}{&bd-hChBgk>FW-kWZSa* zbM9m$m`jRC<*7Hp(N0nRc($rR^p>`t9>udil~&`6^is7h7QLF*B{U@ddu|UWkIBnA z{9%yyJ|DNk;`jh!(O@Y-xTVFh23kwCt%oUA+FolyH*l3!r$_iH{c*!7aq&NHhD63K z$=$B(Dz@c!t#`Y;M)+xNN1mN!3fBye_#J?dFHqjnZ`LOyNuye4C0MKE z9-=PLlC*kk73oJ;tGD?IR=@kg_}C}oLq zqLc#Vsh3hg&2bx4r}jVSliP@yCa8mj|FPZuh80V`yFR3B)Zy%b#8dY1pY&&+Ou_yp z<)*Wt_LtjYKW}L1-o)xE3lv$|uYhu?N3daJqi%%H{4kXUk0>5+vvbJwh?7~%nRkW$ zd6yo08;kh2^89f1&>K7M+0K|uZj~KUIx4%A=1LZlSWbFh7^Rm|cavTE;$bICmcD*8 z_)d8BOs;&c^ud+dX3TVas5(RQe{_ZX?cG#+=eeg{&zoUtZ@z?D^@WzCw{ve)pMfi_ z=%aDvHz_%|e=3iRESqxsUEq@tpY)g6$<+@Ehac}|4=x7u2wtCp1WdKN#t+YmX;V#e#Oc~z*Q@;1 zhE1ZMG>DZ|=ZGC$d(ORpQ`#_+D%X`BL@FlIp}$tz*_;z_ogY8D(8&kDV^wn|@$F7dp6v#Jk!doo~*-`1bY zzl3-Ta=JEJ{>S*h<0Ewdd$F6gQZ40ftodnq)FoU~`}Xpw z?fj4*P~W?K+MbVdqHWPVKds1%5u>FH!RRjRcqJ`V*NIy#Q`AP{F*?ojS?Q&Ha9Py? zHIoVAI<=s?TKo5xQo*OJ_0sQu^a=P8v;1dLb`n_14!%q)vNkNHTd_t&AO)R@s(J{b+fx$<#6NvP<$$v@Gq zYNWLQ1g3SMklav^hE!Cn(Yv+g;JSEsJX&vX+UL+QroCzQ??1HonDeeuY30QJraDTb zd{B9)brp8G`^e?wFYK$H4vuFDenFe+Q9VPIt>{Ea?atI)|L0AJzri~r<6E(Uc7=Uu z+0@r0-Q3Dk!_-uXQJ;%Rj)T0o+?DL06Uha=99*c=JnuXMT>U8H4cd0ARWYYi*h(@# z>)?-@e?~-pm&T=plU4SKV_tE|WtHA2J)SSKZI% zf_z{pm}o#{kdT50Vg<1VeTZofomdo^sLn^ye;Da12e4M|-dc)U!ri{jp`b5c zS2Vn>N4<(iTE15PDRF^mLRNQ76zd0i{1~woodS+@9hM+W)UQdJ7$f$Q-qV_DL%ojn z+uft_nP4R)wDwxE>um$!iC8_an^4$tHK(n4rm3iNGp{YTq}TLBVnp3Jk-DUh;y&S; z7{LnESa9fHdD_+<6>%U-Dba_W`0gXb(f)c#;?xgnUY2NKy0RIHO&pt}wuI+?Co(+$ zQRRl>{EY<*Z#pW`*8E(>a^Vjhmc&!6WLks}0^ZkplBYX0*>XzQtW04ag#oOy)(SJI znt~XUEZheTIDxc8eg2HcW5!NuiTk1FwI#9t@+Fx@maI1A6~yZL4SlQmhpevE4y+JWDR>?1zQJ*T_W)*wHw)#uQB<9M=H z+e+udr8)#|;|T2f%L!|VQJes7dktd2gtK+ROrc9*SIA?&Ei6@DnEy-vq)WmUGL{9g zHF7iYD|SeI;PN(84^(?A-14o(o)}8siu5B+Bm(Awp!y&(KBOe?AH37h&oKy!${@am zR08+0wDeHabU%7oNayWn6X7O^2&Kp>aXIJ-Iq>L+@v~!Ohg5Q6d&`pdXuY}SdH7p~|ge&0Nzh;S{;{(70^S^CK z^ccWXea=6UOUQLE6Pt*cv^v|3)WI&+0L;R>#3VK##l`j_0bl(Nyczw$V0sud(0{2= z*EiiT420ht^dRQr z8}9Q{%(E9YE~HOUXZ97Ui}QpXjFRdifqoPsc9BH!s<<4EmMh?K6ahhU9_F?sv-tmV zTy%~1e(x;twC%C+JYNB))HbkU>XQxJ8=qJ~Ld2EuVI)ESxebQNQ)rm4xwnAVJHG<$ zA&Bj!Eo_Uu+8PRMO^xS-Pvi_gLDq};xYw<6O?j+11Nocj$j|LT%~KWZ%s9~KcY!J* z^J%E8@-U0(y0xdhxq+IG8Ow?ej0&})-YqK~5SPmq`2xw}n}q&wKQ%=L%7luq61bNw z;M-XNHKG^XFvY?DxMw?Nyk@CyY9-DVhl$tZhlU^-3~td%tYGBLBaO%~RQ%UaF_l4P z+m5|^GV0&EV2=z0m9M#_toJsPY!Z!Nz?fzl{E>HTi0)!FA&l(AT`~?yp1JT^>|+mT zRj^M3p+nU{K5Q>~*MsmIQZ3QmW=j=Yd&^&@d8Twx1y!yAyvggq2Q-r9c*Z!qOJ%U% zJxmv{6-ex)pz5xIin1g0h-z$x&E$XE+vdH)^joSYQp_Yfh5B+R95buK#I5|c9g>;FEyNIGkAB%}iouF}f zVeaV&sI~K02$YkeU@%@l?Vkva&KY*dJ0mpBYm+QW4uh|0J@HUCrY?G;n*(+O*yoMhN(bjkO`PU0uIE%+Om(tb&h zI+Hc{wFanEH`r*F&8BlyZ!8RY;s~fvqoJae<&VspY(FHIY%y(@gGmR>zFI9m6H}xn zhC`ru_9Z8fT1vyw&P3{M5QwXPVVdj_+zrXdV(eh=*>TGn`*Qh&{Lt7EyxXQEQ|bqO zBSv(K8OU*cf_mGAjKl=Yr}*YrJ{h^M3mjq$SiImc!#~#9I@3GKFwo#I9Y;^CF}a8o zS0iCM=|i6434TRhVFoUeY-FK;X&T&#UmOhu)r|lC9v-^WY@IFE_obnNp};f<+VNxZ zQ?3L?ObR+4Cxkd;Aftsxm}_Q+o|!Jx#r@C{t~80Sf)eNj1#TTX;FaaKz)0nh=6d2X zt&v#55Q#T+B38=&Q2Z~!brmEuLdW71Nf29tmogUl&(=7P=a7SBP=MBWw+I|)>?cn$ z7Z9UXAYMejV*=j_;>~Fj&8{nL;0CDn^u#R*m8DP;K#kt^c@p=0f z58Y<`Ap2Tga;9V%2FaDw=M0JnxdPfuB`9}Q(K{&y1ttcX%QjH>AAqK0!L-%K=tNiL z%>uK-{J^hmZ#hQ4DxXd7rAwYsthLmU%*K2{H}3G?$UZQ*O#|STT93&QZ9xO=4`1UP z@QLp7>%ngd^)&1?F10+;-YHWo@zP0mb4IX+v;njD5|T?7K>9Di!&nMdtFchQu#ZEY zZ64;IOu}k>E%b5ZEQ8tf#j;GTsW@3{KB!hh!k0#$Hu#&%S=)O)d7|yfVvMsYdn7&=LgC#S4&wH5WO!e)#&jVR z*vt3@MfnFLz}){O{Gg&b3vDk_${1+=W*z9Zc>KM&c+~NO-onfTow=d2bf;(Zy21>8 zL6^WRNWter@H{-G_h~mAM?IDwF*L5Usi*P1t&69vYlD5ARM8nl>%(=oj75P~HGp=} zZ({;5m@8PBhNBCx0oN^?9-`jR(39AS$jErO6%4w~s7`jw_ZlhRb)L|NlFdRl=uVIM z4yuEGXcr#pNqAorz&+I-)At78_l$)KQIs8sj)~8)j5D3Il~kV;#ChdN7hK=<4#;+u zhhwyb&=tG1b8Il?CIzy5x}S{$^KUjwr=dt=)Q1P?Nz9!%Z_7d34O@Rtu%oxvK_Ys- z(|opHh=j)88rpA``hi{&rqgC{e|(24Y716^2zpk}f|u_WeHm9TcE0(bPgU>Eu9NvU zyl1fjw=a2$IZ0`_!>jP+q?!6i|C?Mxuc#Ch4>&eiBntwM{1mjbJ9JvH8-*tsW`xZ0 zRdY`|!u_Xt{&vqcw1m>t0KRcwc1modg=xDZX&HzqV};gQ4frK#+n3=g%z(Ks2wlcfCe}dc_%m-gNhR)N+ zgPvYRe}Q>T_w`)(qkHKVx=x#}_tqO=Lh;g?Hxo-{oc7rg=XRuf?1e7>{Qbx3U&wUO zb>7uk&ZBp=zvyVbQ?G^UX*+d7%`1W9-k|1bGxcEBTQA(eohYWwv1i59b-iPy3k804 z{%Pm8*&OCx;`Ectu+Lf-Z54k4<#ibu$+-}w>zJ&kfuhq$|A{HFrlto=R{ZYm6&59c0#=zmyHC3J@j%^&7gY{xV`v|8$KZ=P>MA>_ zmC^zfho`xYx#Z+=$9Lr$zP)OG7gjfWvd_1KlCK`7P7eSJ)m>3ZWQEkj!Zy!v%~!ul zs#*N>6a1;rS^cavQ?|NW>5ceQGO6psit%qo8~22j&zSGsru4O!wNh*PFEs4*SkxQ( zZqI%a;fdCdt1h9L*HvvADmLS7=!3NNUKh%_UZtj1 z@*O2zQiIfFD1P6_9d{8-rJBND+MCf@^om>`a}aD=O-F%Rm^Kxj_D-l0@%o@?eqgnf z6lhFSlWxqC%Z|~K- zhJUh4HU^gXvB*%d!l_SB(+^wTz$>~?BK%a~xF1#ZXB94`TuXautiyVfo$4nj1n=a%&L3>LzQMD~w7}vk zE@s){O7}3&CTEoUms(%H(79!UXFs>H7{5j-7UzJn1zF8fR~yRd2Z&pDIjrgmLtCd6 zUcXGYTW)8$YS^t`5ML>M-D6y}-1Rl44)3z9zLe^1yl)xzvzudWLKWw!wANB{^^cfG z16)g$@`eo8Wq4VmJjcZrhT>+0RTgx8h6EB$OiB@3^eW)CF7g4^dn%mapa6NZwd{7vt zpWN_oMycHGobE3OUp%tGfsO8J}2)_STR*}vuih99IGOVhr(&wFfos(V?- zbM-d<4iCwq-#+F$oBM2*F68C8&gw@jRn;`DuUd@_6bC4?(CJRqYHOX0hfH8C&cVkx+-b%~#@xRuoO9Gy%y|S(tDtUR_ z|6?=UhxAdTC;X2oaNFER8o|j6oBWJfQ2#qezjZe|x_O|PSl3%bMo7wBrF?(vUvldw)J_SpDrj#|0+~=ZhrT#J>6SX(d&z_HSeC_u;)4AJ$@`e_{v|p-;%Yc`p1i4X|hs6 z4)O%mphJyEHIUZ!SX4?{o66n=E8jn06=*xTv)IlNN4>q%-1po+;aho0$EpeF1ZE4- z(l1gBGqsuuciB*J4tmU-yIaOYu1OzOp@DPumji;Pc!`Ci4X!a-ar;TNfoCof?gyw@ zt52qYc|VfW6gR<9uA@$Mf<|%#Qyn@rSsQWfcX*jlHSGHUeqQ^-E+AbvLCdgqq)U}3 zeoLswZ0de=bgzM5zlU@MB_>qN!Co=}yOKpbyXv6Am-L0f1Dpx20ZM>UVEn-QxV}rx z%$L;9dJpZkaG5PqMv>R>0aV0HyOH7?nKP%ZvthI(<^%LDmlw_G=)e(bf#b1yM!hff z6#94+G0D_izo6gOz6mAp{gX&XR)hT{YYDOi(j|1~gP^M1=RHVVi3d@`c|hPreYS(@ z<+KXoT%oS|R`fN_rM2NSZYk(=u$Bta`B(NYIY&x^#`>An!9?=v)D9lRueh}l7U{gd zNbT-fG(oG3$!Wc{?c!v-E#Q`=TX+JisP_^Mvq(6QQptC?P~LH0@);elY+gbf9JMWc zrs<8(zcfpIucxRf;u&GFHdqWd3`eitNfjKcH+5pCIR);UAE2Q=1sn4aNEi#@aDPTD zp#wuF*)G}L%tdSIPt{9OFj=X+COhO*yd4uUx$!-Zrla87=)x1oD{>89tW9EVvAnQ? zO%yVP-hoepYk3u5@Jv5+bH-^_%iS;y-(jn5OU8`eeQY&I&8M)}TOkyc9ApqLPYq-+SZSD=ha83m z3JE24={qLz_Co(R6%2@HKBB*B`Dp1xD#5+bjm{L8lKw1-yca*h=d}xyFIS*{9xRGt zgovp^!VTy`3xs3nT$@25Im!EY5B2@W^1<>N^E&47NcLR3MV7NT@)Q-=VqpybKw`yd z@S?0GiXdT*-Apo;%VyLj{P%_m4z=<%?G-pDSjQ`2xuy%}FiZRxAzPQF*bnyjEH( zabY|3y24N!SE1)!6I7goLKCosy-<_KAk(pgeX>2YYvxRIgjfiC(_zF9#Fg*FZ1^ni zgHqd`&*v4P18fB8c@gg<8~_1zHs)`hN&aPjmL~n zFbQM_+)~R3W+kJG>_B4fI%Wlb;me@BT!iNE4$~iB!H=^5z5TC(cb>hIbq*XW z@o-GpptPo9=FE3Y|CBND5X@4rZ#tuLZNzu7WypV(hME$Jiu6DA;0yA9e}#v9Zx8X5cjoeIARM4yO{WY=k8w0-vW3`e0D2yXH2mi}{cHetn$Xz=# z&L_PIlN-th;I5I$9ljJkkA6_vPNV)^hzwjQT(idT%OoK8B*F#d0DtH|ACl4bIl$-> zWIjz6Va?!DChpn};7=dHDiI@8hQ^o+w@^j?6URRRskdVA65WOW>H%ueZ}|LLtK0vm zt-ay2cFou2^zu#JT-0kH4vC)pgQ{wijcSU zj^9a38@aq;sRWm%{7E`MhKUF8v<$>V!;Ab5uHHDDt0`Eqe}MR15%+#AejnGaIsPrC zI9XcwhFT=Ub;Ck&x{xi6lD-MC;$o>TGFzv~|Hxa+$XJGJcN5CncxXR6;VU_aG}|*a z5otd7J1tFp&6W)LhM}tXf(!CO=?cFhw3j4lkoZdMhShQ|JTp;z2lqg=Ylo>_Z^8DN zi}Sf28ro>+N5y<&E#b!I#_J$Q1sax1$Jt+)IjfU-WEy_KMzC~$9yGQV`wG)px1eQXgx!PbI5wVX2X!cx`w~w z7D^+@S^^4sZy^YEC_E+X0vqr3DBy34%P`xxg3o8m3>o5Pn!!cU0gbu`iNL#NER>sA zkbIg5bI4LM78GSCbm_PF_ml7h)U|gG^0BTl95jvtQO;_-C_d5id8GJ6IL_|~LrHtC zQI&Ot{xcKvE@nZ8S`HOy7}k&gT!l64rgxu^0?U1w8mIAtG|9M7>;X2&PcYA}!28q& zgxF}fezLLBY-9U)DEc3XWHr?MBYZ!e4G&x4J2GsKrIOsxl#h(kC*w=>}1=Rvas!h6$)YF?;4dcvy3BXPoyxTF7C3AT2i)gQ~F#(8p=o9wAIz z${(R-%f|Oif#Yrnl5S)16r6{vuM?)|R1^Lq0%hXfJQesma-n&c^v&c${n;UN0sp4j zNPV$6Z^Cx-+rk3q6)&MRa@rI#!zS~5jNlhYq5S`g^GY2Fzds;LNjB=nqQL7=4z-C zZ&?4wQk07%NqmfNT!SfjGx;E_GvV+ay~H%oW$3tUAP{IIm=Des!~_!Hd6os8X(qhHhxl?D1s~KKbU48N z#HyG`pXj^jKXg(2;9>=acUFIEJLhgy@=8UAf6M=|_tpVbW#9YoKIhyEmo5_(u7QGz zqS%U{VxXef9Z1QDfQ0C%BX&D>cXxM;U1N85Au4_IoW1w^T+q?a%zQt;?;C%wzvXpdD9H^^emPd0}VW?7qpA|-cwRtdeV~yB* zB@{L}ef8;;WxBV7;yUzmL#3PR_3X38smOU4El*W;3ftvhl*`Hxc^w@me1-p{v^byl z68=COdno%;(aXhIpIS-Y9;VxFp`~7YnQI>E8j{5g=WXMJi(rnvE&9t7<=*rl7>k#o zCADSigfwJ*%4XFO2{=^AzzS-6-ThU|7ff;05DDlT;8v@}*F9D$53});Im5yD zc@(aH4Xg%j<=<5&%yrBO%4r%Vmj#P(b+Iw&B?L$Xup;XffBB#stb7TqTK8dQv~Z~0 zCAlrF=&<|KIisU(1FT`%o7Jkj=6Lfwxe2=@KbCv2Dae|bNh+%Dz!P^`=_|LAH_HoK zENig%;{+y^ovCD#Y7R?2EH@X}%n|k&u9!}W2h6SIY357pSLKr2l^O(l@gwP|o{gEN zQHhejn0@4VZM!%4{Y@IVT(ZBcwW@4?<83*bX@eGGnu^S`iDskBO(kK4UM%aBN}C+jv!{jUuhuEH~RC>3St9B%zkGgrUWG1boJT{(W% zdYvhp#p~b8`SJy1-R#5X0V{tG)}AD34r^drpspgPDO2QLCST=xZ>h=XCqdR#)!Ks7 zj_&p)KdfU~tM|sG{Gu+(`~fTEiY6cAxlKYXsLS$I9yHDRf%QP;g4sin8-m_EU{gQm0B`jNs#-c~6moih8XI-oaJ zTaTA&$hXZq*f80tM_RKn88f67ipy6gYai!opTp@sp|P%kReSwdgQ6T{EAEW8aMxGO?|$8@Qk%Vx6QuGD| z$aTYX%txA-?NrPx@LS?Gr7>@%@e}Kqi^D6>zSH{P7J0!|qm1DneiwgtI+S&rs)Vt+ zs&|WqXGS!6)@It*;uyx4-f- zj%9Nr5n;DaKhVB|(Y@dbEyE|6W!S&po6`he%sEC2f2c|-Q7qRw3uD7;#V2%G^NwbF z+kN`qUo}=X+ePY%^JBn4MA}U=xWlHt`IXwxYUw7FbgUMKkWfJ ztlit7waR|`XS(?>9E{wyrfCPprlZPOyYa?$23zHYvdTQk*i^WqG#6g-e9Y(GO72o) z({a5-m=&Od8cNxoK za%bAuXR#Y!tV#ZKQ+P3pod-TK6KIlmqmcaWiW##%kUv-{LdgKIYvaAp4KAJ-fSFqNwHF7ZyKF40dG@-3HNj;mW;X%-uDq}v-s_iT9 z*ZRm3W3#SgSJ3ZPZrgja5&8A4zsECx}>^~5zIS3L*s^gZPe zSe2`jyjI1$$`>z)VVu-a zy$cL9n~|wQO}YyYf}WNiYS6pS$vu@@T`6uFXRYIYy8S9&%_d_Fx>}CKO#6jtwy+SZ zjqS)KxJdd#1+Om{^sRu!{YA)Xpeip49bEFWmg=KPB_OL$E9Z?Jt@f$hjg$n*!R!q0 zWKKl>L?4<8E|N&rN$P^=j&URokwO7nU-P=>0`)3~Zuy?F8)jJ>$sVB7Y9gQJ1yf(* zpnQPGtGS$osF2;XJeW6&@orLpU}57uq`1M$-@Ecf&%-uTZC-%o`-*Z-sSBncZ&Rx3 zsA`>DhMZL%B5Gwc@(+cxN3;o6{`(OjVFD&)5Ra!fur_el7V`+T-DdONtfDUvPji}- zK~(5#@R3ecG(gVGWaD^G`kJp~H`oL)nWT}*;#k-ceuE7!3cX3+vfgE0*=)59Raz(= z!3i>rH^j(n27}2P1uF>5I@j_pY#rZ(>$r!k!{x!}Iug+gYryDn2P^Y!rG}LH#WvG+ z2A!n5;L#+6pJ#Qz1C%D^(|F_;9K?pf&UYSszfbsdAnLCQ%fzQ*B3XjDY#n5^_bL9h zxSbubJIanJWs#|+1?FmdX%8V?nhgAUXGA)^M6A~v77q(VBjl#JE_@bq1ms--j^zR7 z=Hpx^7JFc8vMEavX*lT$_TO~G+e{@>!LHREmWLCZ!t>sqtiqb3I@C?K?IvAN-y4Ysgu}@Ex)!(<7jhgi z2RF%F;tm^VORWE%vg7vcoHyCs)U+V;*g|BzJ%kLQ^)OGat$vSL@Oz+#!iBT^J(wb_ zV67|#-qmB^;dqWrs5)RMuCm(pC7iq3EwLtK6-GxYwd1RaBz_WeRF8$NuvdRVe>NRf zh~8Miw&JJBAjFXMA$G_<^9MZ8k!-#FP3J({idLbp>J5|Dsw#?6;!GgiR!T|2U95TC z;6F41XJ7{ekUOw2>4-l_1ODt3Rv-p&83#C|x?a%iS2ZFtrFYh8>JFATHDJak0BcYM z+tow{rY>B;y14ifw%od#Do=ISYOz%|><``Ho8Q5` zFw=g3x0lO)MFyc7K!HSJ)%yzU8I|F+Zx8F070NkQ&c46v0=vW3mK-|otTK@E`2s%y zlv57^JOOw%BFPv$w|2ZYY%cM@4Gn<}s2bMcePKaa0l!`YC+CvC+oVfVR9;pd>Mmj@ zewOdYn_fqHBR_Vw&>h^zpTJst6JG1Ju$|Y$-s{nq=fU=LnN0zH>uV{s#zh#fN&)*% z6G@G=RXgxCwF75XsBlNf#dH6NwdNDpD%Jq6vl#IwyJ0~O0D@{M>^CLtXO_@9G!jb- z%cKakN!5jT@&jP~H6q_|J{aEa;91-S5}_|_iI_RSisOQoP>00u&$#+Uthnt{xAl$( zRhvjv(OvaMRYRx_pLKVj#V|SwW084j2i`+n(iYEb2!9R4g$#sK0a|)TUKQ3MqfHOD zs}6nD{e&3dnq*KNCM{VrVKdI#h#W)S*{;G9au?Zm&*05Xg*|Kz-d`!y-U`6pePuOy ztZiSnat;UJ6*7_p$yt4msMsPf-$Wt<)(S9J)fN^BGe}dCj=t_5Y{3QmHFEO!kWRp4 zEnrVrf4e%x#@kOvz(0#3uFBui*Z3Xt=~9X{7hf~^n)`^8$|AD5FXte^Lh z+GHhK&s?m7D%ejh-p$^qnl0`ijih1fD6)&jVVvCncFj!ihE3p4$#tO)Sq#gICv3#^ zP|vF(7ghkcXhxx5@^+|RvWERgm0s)s3*rg27xAal$rWJ)d4VXirpQna)=nW1>*g3B zVU{50!gAO_Gy*Jqu(VBK3mqGj&a>Mkjg(4*eazV^mtR9~eH9oWUogGjM#}?xFme#j zgth1hYGrX!0c)7j;5ixu{Gu1{>%6SYV!Qp~Tj>Qd1tnVr^J&Uw@bldVyY~v%%T~cg zH4wI+Td?LwAY=D4WC6NHo{+|ahT21~|X!;$7c| z4WuS;YI=Sd*uA0jJ^TiJVKt6JR%kW(3>-`t-&rg}JHhrc@mH;3cf>x{_mz`!Cvle$ z3*?Lq7%HbA&gU@r(3kQZV48d^{_6J$K zl%!OY-q?&moP@jDS-PuaC`*VnpQBh|Ts(xH?>cS3dmmt|D2s)6}5H=$U$`c%N$M}2F9QFu`C)A5i zEi2ZDcf3kBNVTzE{-il%dTIP!<)u2MG*$daHk*f)XB0d+6Oiw56k5hIM5A3KZTJPH zG2&43Sv75P&3^Ww{Edpp1>}-OZ=7ecQ?*v9k?V0RYE2sWFXz&iN^3-OzCjBzBLDXT zWFPMg7MP)|9Pd;qv*tdHnYo`7(?ykOGIGH1+s#h#%oNllQ zmO>=>1h6^z0*ybGR_5!g_}2_kueRB*sg>s?RI~4^J8IM;@={B0m?iLEFOEu^@N1!P~l|WThZeu+UwZ zBrjLOfOWA22T_DDQ>+Z;@3-j1eg%h{8y!Ut_?4;AQrYDyIM{u$6E%+7+?qx!&1K=1 zISg|l8`uvLlr>7e>;)TEcY-sKrpO!G7nY@a$UyOcmaad$=5*a6m&eZ4vj+38_9b%H z8<%OGk+r5jl|jOE(-W*AJJM_NL;4k?bw}{J)yDZ>BOmk&pl7$RDNQ13_X1btBe%MF zqm`C+cXOW^?`TSpa;6aFm=I$8h&B3M+Ew8S!CUVJzsg&oA?ouTU=WiKm;180RUN0y zcXq!QJFfp~KA}m-Gnkqq{wvyKi+mWX;G@1LJ2PuKSqVmFgTo|4d?cnLcT9h-LoDBQ zR;SI5dj9Vl+U$3`ZGL9{Q$09eEr(l|VhQHTre4BC!*%lng(FgKx?+t?+?TnNSXssC zRrDiUVW<7fZnb~Z(CT#)>k%$9XqfU*+*PnhUSL&^B3F-LBROZ7YW4;0sTI447`D}@ zgHy;T^(nLmjW8Fi0>}86&gUA{eKF1|)8P){TWbqlb?(X~^;qSid|bbs*EHJ7c3_#5 zc#d+Ie2a|TaDmI<{{Eo^+eT0q?2ar~}iOM}G(7c5$ z*6pSf&3<_Phv-w_ZvH^OD~oopqEz8was<{jqPRmS+owX{yO+0Bx$LY`Or;|Afj%oQ zE-+0KXu(rugS;F^@MJpj1_+q3BuH{beETqNuMps;xinh5+~;E8+_zb(K;sx$RFCAh z3$80u$ZpeSl}|xy<(k~o93zjV^~D{CNyRcu+DVrJQF&E9k4yq%#0skVy?vV<&WKj0 zlq0Nz6ymg9op#P?H`7 zdipGTCM@c{KX9P#lX_fcR&FE^tZVa6V!pjk?q|O-Z-vo~^fiAmpOJ6ycXDZ=4f`ni z098E&E9|DQ4fqH*~)V@TZfJ z_BRR|nK(Fi9w_6CTX{<%7GAriszVk&II@jamqsWLlv(6i`-*jRs$F)+-)wu|g&f!P zH@1?_81G5-9X{qBHRYJA$N`F%xi%tkd+^C*3s(G3ge2m~`iKd1DkW@q>$A0!t#;Z> zeP21VhuqNS5U)bd8tgS0n!vmW#mkffv;5c1wM2!5;0V@o{+bM+L=SaRddzg4<=BPvX_q)Pa%iW1Mul> z5>u7c^fy+#WsdhFKG$K|hftjg@6%nXEf?s@+n!fz@@A0`*$J4@UyUBpCO%O~Cy9vT zxrz^e20rbscL z9adt&BN55UNgBbOpA(KLhp7j@+k{kaXY)ePKAN6)*zT&mJ(yR&>8+|teZ(yEvg5^MZ~@v2mEpTRN!`KXw-^22YiTgN&EY(?(({VPoFc3jf7+d! zBCb>KLbiujhDaq}x`hl|=|G@Y5Nn{tHU#2fJ-h~30}unND7Z?O$R`rO=Xj)+ALJrh zJ7z7*pGn@SR*N3wk||vAko=huvzDE#1S0A5yt`1I8~}@FYhH{bA`-raxE-r-7k;MH zB99@iDb}8Oy9@g9hN?fryTlW5!h@0Z;XLx?V1xkn+a8vOd&ofZ0<&(!ZSc*Q(TyNo zv5J3DOkc*)ZKh^xLA1`qL{%lJnBcF>r(0nMXd%2O9Z~0204K3bYy|#RJFGiG*a$Rfwd%6ILJ>R z8%G9Eul?YKFW@gR3(w%Yo%)yD>+ET5YZOcs$wnzgnj{p5cWVJwKnnd^m46Z~<};Pa0H;MIVx8WqCm64oTL`PA^O8Z>2HQYyu@(4V?Zp82 z;Kmc=*(3`P_feAfWUKic%&kSNVH;zG-qdMWiT4hk>Zzvda*|kGHAcE5s>O1|NqC3I zlK`PCVzxG8|2pu7Z(##4Yh3~SeJfZGoWZTRfK+!ZRid>+rmBV940hY|s^aRo(h;nd zBwU@XkVE>AnedmkAsW>6saShBViwn#ry)-0Ab$-W1b;`lcvt&zswjGsrK_y04oWwL zuE=YC5}r3(Ap=o2&Ed7Z1fTORL@fQu4rAQ0AotfJQsgXh7;JJ3DzVNkS|##_?_Oo2q4cr;rsprqy2Mm0*!K- z=>FQFo7e|9_4Z<-sz8_mgb>4=zXbT{FJQIx80-DV(p%(p7J!>+ja9IYy`fjwZ4xKU z;U^sP-G?~ogdU0y9WBmLbp^}L8sue9fz6-*>&{={Z4DtQ(m6!%T?7^*0`s;fz$Lwe zU7#JjyOSN>xG!=!EOwAbD09UAYAdk^PeO*BSKy8K0>+HVm}A6nE6F4VU}D@*Gsc_yNdv4mi6yXNT!Ks^yV+=mn{+L(GzFPCceT+L}JYXclSnyNJMY|tpzePnDlg;RB3(jP~J%AWjv>9V^>m8 z$+gha@1gftG*K|>YS{sP7RVo8V8JloKPt;A>*&17(g0LD6GH) z*fREsrXe@nI^GVo;yIg%9`OTh?K3sN*KL^b+9#L1u8wsa{Y(?``YRnJJ-uu$iIJ~9 z&i{~^P!AS>FRB==CcH!r>Dl14zK0CXW9a4@`2j;66Xgn@FK4?s^>l1zNYCq_G>`_d zI_A5iGx1U!(BH0rwR#blyMI$!ksjhW{uLu?9lnW7rXT!Q1WdL`=TpD$1d*K#T=N4~;RcN45vF_`lPNtv+l?%fH|)KtkFGrBU;*H_}jDC9%@75kx#0)a0qtrF=&||X#W;ff({vU z+@@ek&IbEQb`JUG+$F3Y@Sptcv^>{DCIzF401orU;tWB?xfg}-DfDE*P zdWc1+LPFRD@?6R4@u0Q;>$>_Gz{1}_9Fts7UMt)gmpKa3^Q!u$H26B9*BW> z;j8HkDU19Dwn9lVjqU~x=^@P^TUg$};-QzHl*%4&6s09VQ8m`ZX9{c-4H2{9dujuo zvi|&6AyV99lF2A#8jysqcpCVLJjJ2#=QQWtqsn(&@i^&=A@92Cs^+em=v1FHiYEzMN7YUbrHU({1=7pUtM z^v&39oolC>usC}Pvm{23*z;=OaA6FteNQz`wiBwRdg5cE}kX*Y7eCUtALnj&3UFf~e0g4ei-9``ZTij96#-2i6hHL0CiMJa080uu&ER| zi&fBE_^rAN6d6di(1hq0VGF(nXXf1OW^U}_ubH8D$Vu04qX`ZU#w=XnYVh$w0YjUL9_0|wgX1u3tj+fzM`9_}G1_y`zP9i6N^rSrsw0!=yB&BJ9yk=`5uytg*+11+c#TDQ+cg zg}H2g=-xV=MUlP#vuoB$x5Lg3w6yVT)_zjPuB$FjIE*Zr4}}0_5F*xpLsWkltPZ1v z^00l^kji09)$k52%lipd_sOW68*+Czm34f=91MGM+6h-QzWULU7kXGG2(+bWN46@< z*n4D6{Ve1GcX(Qw#FI%Eez4i18aIXRrkQtp@H1`&>gwRN-Jx5`=4!U;M*&eeng$5H z*(2ciz+z5)5&3Nbf@=>}F;#egG?e$O`?SU;`&mlly;eF~2Y=f=Vzzvw;DUToMNQLG zC&>-vS8*j9MO=k#jM61!vC^I?@E)}WUfM~z!!K3aSvA^eC!h0tYQX@Tmzr+iix_X% zCfAp=%2w%j(w4Rn-QX!q6RH3;ypCiji&-pD@dt>p9U*?@Wh&jTywG{B`2O9%f>&0= zy196Z%`hF3Cm=WbUU4;fL!HGjVDsN4LstC1t9kDySfS#x?7UUjQ$C$r&1a`B7 zpobr`Pw~!Wt(|1)Nq(ehr5GdClZFZNSy@=TMgcqi7;Fvokwrs`EV`+PN_QY9u>T5p zWj(kPW`xs;SS+B-1BZ%|tebDXBJP*QVExh^qx)x!y(7gxkO{OG?ji?B`AP6S8?XjM zJ}ltx?(!^Qh~P{Nt_R$A+q;Q34147^QY%#wqTmnmDSR&2DlZDnV6_=fiU|&2Pg#Q5 z*erMt)L@C&36E?k%#42{9b6Z?U$Yw{^f$d#9!tg4iOAw`26L^}LKd%rHdX~uzy)Nx z&2gg_Y*%RHJIH&XIbF%gI1QN%bMO&_nCt zyRHu0K!2=NmXSH|4t61T=|!4`exxig(kEQDy6?6-CQOl|=@hA=dYLpwi~-Z@E7(Re zNj7Exzrll~71W5vwjsU94j}|~=M}(YKHyu>lihcjP$s~Bws1n8Nso!0R1T5}{B&uE zOow*`>#z5S5l@%R!lZEnBI!|n)x(EAo zF(Cy$o73?6y@8*+3wlcMx5E}egqra0&Y?hJz;`;7=ztBiaZU43IiBIn{6sN{`Ks>7 z)?wIt;6~J$Tn|1D)F!QT=sXvpvT+eP(w}ZIo2$ zraBt$bOdH9QOt@AfKM<2zPc9hnjHm~<0>*lN@Ivi;e%K&tSS3rc0J7XVfo9>ZP|2V z8`)nq-fE_Bn)?Htc7`^@^V14VU@cS$Re)N&k6C|NX&*30Tft&rWl1#>6-EQ7fRxN*xM>R>bG*mj6{=nud7S>PUB!DYH!0V54OQH{`|=dwTD z22@^LY^R)B@X}mgJy$U6>(JJMDnDpg0 zfqL5o)Upd{!pE>LbS&&P*MNmsLF-{PE3n8i@9THe+U0hA|It+4?wmsdW~XaS1H~M< zIc+6WavUGT3IbmLzV$6nt_}F_2Dr)fy}$V(B1R_PZhT#hUNirpxLrR<gEC`2e=taAXc|hOCXa!=KCrJngH{Ev<_fTd!_5MtpvWFM7Vi060* zJN9QF3zA3`d8B{cHuGHeed+xs%DBZX!|rz-%_*;3mR2g~O+#Sw7)KYgjbH*9NVBN} zvR?#n58(lu1Qh)X?kR*T_Zt;&XV&ch-0S^7(=JyJyGsQJv-QdX@s-luBqK`W02N^Y ziWUYaiOBm@oF3sTh1LxAGsM98B0q*r@b&hUc|>Mv#$nmYJDM=8{&;r&3Q9)ybQ*3$YhtT1=w;A^{SFjkT*ESCM1HXPo zey}k1$n*xQuBAXpTqWm)Q}T3RUR^MIIzrNcWse~v$tU#gIo)b^JpE>^zv zj&_>!>X&!zGWuE%b$nuVH(SoAf!q>}tWKDIL*|s;$hb9Ccp#;Mn*8GWz=H}!bSeQy8mL?Hav}NG+c{rp@hutr4z1w;_P&1&!4YED=VQyQ@ z)vG(qHE`iK5@)vN``9&s%469ZQ#`O7Td?kI1qPl3SQ++`4?~K#NqxKjz4g`7wrxv| zBh~Wz7OXR+vAvFc^)6y-=4y6;&7-$?fL^D>yb=BQX0XBbgZ-ul3l>eh=isy!qdq2o z{BWt3ZDi@y!jt?cy^rZQTklv?cbdepKg=x%WhX>?WNlk+ehAOS9sU^>y62cfq=>Ki znSs%PHeb>{pS#pR~sY~h0ko7GF>d7Q<1MAf=0_H zfq^jq`!xX!z$q+AOyq|{2l=O(cNO%zaY*PVbe>2`RSI9}Rtz$F9>|~OF(!0a9 zs4|Qn5cjrLX@)FE!PvhX3#Pw{Wr-`{#D$HAB~}GLQj%{kua?wFzMI=!v(4r=toGkVeuNtW&lBc2&0%rSjytCw#mfYXkwMm6}yq%@|yf-R`YG@ zvyrkTGU*6!Al;K2f`zz03q#+(0qe$M@VWmk8%zj}Q*h4xA&xYNwdS9;4qp58L5=(q7nsdpgXfp)VW=RN4uQ#r=Taxz65{ z5wtZV0o*U%s(9;iqKR&Yb*U5lbN=wMEEY0hqd!CXfKjU_f5Ap0Ywvtup?0J7d%z3O zfDCn4JR_xivm}>MIa;?7hp>tK16Fuv;CUE}yKRA4LI{w6*SP~f4S(lJSiS0#J$yZ~ z4R!~v?P=-lp1UMw7L|Ug{Z`J%NO^|86l#*0!b)V`iottJK_u2O@`W$qscaiOQT2&H z(t!h6j+_LrV3t;E-${AkC|RaTwz?|ZqVb#x_xLqDv2KX^>;^x@G9V6zB3kJMZ0G0s zMx3<|5KfrS!47(;^fB!$@;E^bs0^Kd39|j%>SMfvC$uukixD z%y+Q8UgXEnbB_Xx&Jh;k{-FFuDbPEBDh{*)=8QClB#r#$UJO5|*DHRV%O^xgP(RKW*c$?3v1*qHBOjlUCb!Vx{5 zKVm4sqs*4_8srn(N)`$kKvSWmuykVA-mD~W?~i0=~-$@Y&3R)iw()xd5x*F^Hil!{2&|HGA{?Y=tkh3$WhK zLJVbChUzB0q)2Qfn5&;CpW&%_hfE0dfF+v+ubdH_WQ%!btWs=SLFiwpToj> zVLMQxT14;W@`u6=*0bLJ#*2)>Uta;qx7X^8$)}(hy`;%jW}EYr`XmhasUh?_zrt$L zH9$OW5<0`5brEYQ6FrJ}_DEvg=w?6%UEi#mK*Aoi8g6=>KSO!18L!+m&r{wZ%Ce7K zmG%bStrk{fUOWwU-wN=~wZdpR2D55^;ZER$raXI0P6)qb7i;y!7@yxvQ8Z7G;r*Sg zM~y2hH>B0j_leX7tBn|Ve1d>O>I3Y-VMGa!7TUG`H6ZNM@A)J7d)rubFXP_4QA$-C zFS!LcHmVX|pui5m%l`+mH?7Uahw&wiy1j4U{aj-{ z$wF*9h?n&dxr5n3n@uJ`NHBSkKNMf3CCjFvq_PstpVNb41n+>>c~m*d*3l!Z9SQ86 zTyOiM(umH9u=N#Y=#X)q_qI7;x*&cw_y_~(4mp#}0&h`@vKIb>;;N1SVx4Etlu4{A zUCJ7gY5hF>uRTCquDO=oCbF^MaNb+8Ok-zeQk20PUP)x&rDc_sgHi)N#Fc%C?}aC^{Cu91Q)MwKuZ->~V%U*k-s-TfytGcaZ90oO zc!MOspOwWz)VV+s?n7SQI()Sf1}n>o9#g7Sd+E&T=S+4UDNW70qI-nc`#8GXI#~BX zm=E6QZdgmY3rDez%V*Wq=izsY;~8=@ehRSxk4WiGO?*zh@2ccwt#|fQH_9KbA0b(b zB6qfaUhrDDhB@Oa{ySYs>ftS}XNy(K*bVe1Tu$Vv@K|3X{%tyYxBTKKkH}i(wBG7@ z!E=L+*jwn#uc^!EKj2AkHzyNkc&_ZgR(gj%mAo*5I>3`~ho7THtWaw<-t2uU=YqV^ z*h-Tiq!|VpJ;V}HCq7x_Ypw~uLuVx!C^bhi0RESuY>23^_dsAS#wgPSJY4g6x7ypP zBx_R|`%9ZmLon;#AkO56q*a*lF9E9G8Xo)dKyvP6W_lO%fz$jsX@}gOQ{g4; z#a*lQsJz~M!qmic%BqnnORi~-0f)g<-bKn)o^wgqz)Hi?v>yHUSNN|yFdtaL4KB_C3@$@{E=9Rz2!E-P>g@kz##O*jQ<%J@s9yZ zUY`sEo;(XPa3E7FJgvB&)igQE&gzeb9_%oYi7woicBYYv=5+jZon7w zmu&isE#u?B8*u<*@NmQ*Z055(GAfiKS;l%aSCyoC1a9TNY?`Ph<3$~xPHGEt!4@zd zUU+aqVEu1F%`d~OZ5zDv28=Jq$ykrziZ}QnV{5h@88-s>I=KY10%yEhtcc!;!FRqC zh~wYDW?%M_024z4$J;!~_Ps|wglWL5IOwTFYH)*g}C zYk^@-gAK_A%!!LIvy9@={190E-tuWeHb2NxwNm9L%+64i%(mXILOufXVA@p7L#)bn zUKLn^eu&q9hZT1=y~7l&{*D3{ajI|@o(V+9O?IP#*83NFM;9ct(u`CY=n_*3og&Ug z)QW`%!Gzcmfz%hQ$ve6OtGZcu3-giJ@enHs+msg8kxyO|s*aS;7yKfsY_?0~>2u>H z+7bN1D!z`nBl7%;Ejg(&s}8USR+2xJBs%P#@fHiLIUt>i%P9Pm<1MD)cbUJ8ItQkl&CKtms9%k(+Yv~m_7dcvkm1wpBtgr78mA?^r_jZ6?@;x&5 z%mco=Eo#7nfK~NgeCet0DRs8K$R`>X=#TRm*0aq6X)hWrc=1OvVPh~)eTmVu4$fbN z@59~C#ahUd`jOT`<6yBq|G3yVPQ0pq#{!McU>vWYd17kGFsnf8eJ582O8*7VQ1)Xq z)d&+=w9alffrOkF2vwge0Y%dH`l2qQxczp}Kh;_h9 z^EK67Q$?veFC|YwrVAUAhHM9Z+)*OPit5Kb6+3nb89`(|v%RL8>$^XBfAcJ>Hq=UA z#;`*gqrR!UP!aQX@fDjckD^v|ASp))xHpzdlW@=Re5e9mSaACVkqyDOeM)Bzr4FXo z)(v?#eTbpC)Lr#}PEtphZlM17%V*eC8UV!Q7GykqEG~xS_X*DgMr1Kf$7*6tJ!kLC zEc7hmJh1J}GSxT5iEip`v=g$;%UCtpP4-2G+;;gZ!LpjB5G-N}5_QMO6c(enaWVd!UUmBj}G`!$8t7o*UBw*ebY=bZqnAg%k%U2;?fZRJv+XDsY#@)$v zV5nw*&$T%Jty+1XWx5mkJ*f4&#Q{nMQwH;6gVyr$hF@6OjrpuG`^=;&HDc=D+Z9OzSga_saMv32-RH#`ynZ0N&bVU^0Fysph z1=@cpU5hB1ZdkVkz@}r*65tQ&;dk7}C(qkFK;7N?47WG8GewdaDhE0M2%Y0XaYWM) z;LpCoj&>gJaW#5XBmV_)Kfi+CAq^Ok8Fh+R>yVQv8&y{7h0M$BZ4MJFsdvcPz-f64 zU)dzQ_vy%#U6vw_5T3Wbz`}&`%V<-xXf7<|vl~YG27aBZ92Q52qY!!c#GEb7QCBh_ zg5_Gl_|{Qri23hCwBIVQ--m+tbvRg6f1wlDO7K^1Aj6u*`=(@m0iyF3S;d;medGZ3 zI`v+Yy-8HE*2mB3-umwxJjHC8iDU)0qH?L~*6A>X}MKEfHSxfph^U3O&G%Vg8>3n?V!76D&z9*>o@$JOwKLA+fi2 zaCCHZu(z|dwY7up-+r~Wwz7Pzt^e8vo46IT zeB9iy;rHz{)>dk@TBTB{k(&MIjosXe6)#@G@+n^YKX<{Au>)9eEFbLnxBZG?uac!K zpOVoPd$Am+OxbcC<#3??cAUb)SPt}Gj`RQedhkyE zzj{9ZZ{E@WlX~%gqw@VPYV-fl5`MInr%qRbN*=!5fROY+ls_!52gbj#-(FLpcSZ85b3)4QmmqjlduAQE}Rcgw*(yMp~~(TjJfa zr4P3Kv0X^ZmMyi>aS7om|F-#$?V=NshGLtP@R&wgzY$)3bw=3YI2{wC;=_^>5~Gq* zMs`U_NQ%-%hsWadMcXup!$#gcdiapmQ7PTS<5K_S=hg`++Q_Kku@O<)3SP+-s^j0d zz9vAy-l(t33 z(4Wp*_(Xne7l9p9qO>8Qp}~b`YZ;$9G%6_^*Nj6Xr-a8xME$h$KTaH%kdSCgEEoIz zQoK^}0Dc@lCJH~rj?fl8r=Jd0cpX2Uz|JsF*qt> z$hV_vlT#BD6O!;MEpOo8w~vmEkJN^L-x3w!UoYs#^+b(GiHc8-9TXS!{rxBZ8JQSmsRD(cAJ5^Z_Ys~N8JnPuh>MM~)V}|?^Fr`6-kmDC6+AWxo~)A%C?K?+)GCxA*yHL$z%8dBeYRTNeM}XTUi?Xe;()CTa64)3IFLh-|sLfDmgJBJ~`_9 zA-v*n`$Y}3ux0=ADt}zzw-#OaGV$Cjdy+1A%$EM5N9ce~-9oxrI*6`?U4|At*7u7m zyuzY?zTHpfZXA;Sodr`m%jOc;rv}TGa2`hbG6M8$?XLrFX&p zg@538JjDS;z1x8J@S#y8I02`MN+F@)L!w&#)$#~79~4z|+sOnE{o6i-gvUjEKV)!} zrD^@`{6GC(c#OaOOuUluzqX=RWMS7;bS2;V+1A}cg8!qlO-`}YwtsZrmI0%vG5q7V z)I_}2f9cZ+X=$ku+V5?^@Q-GyCfoG>{+9vPI#r_VYL22eznYKY!bz z=;{7*^KU==w3p>M{`dE1c_NmU@y{3e-}n3eii_&u&+p%IPRl2_u!1xjj#?OwA*oAI zT`2nP$M2YFB!0W@A3qgpMf(?y-v7Em(eIYl{jWcNJHO>&eEa=-qx^QBqW#0Z-T(Ji z{^KHwelKj}-#7a4BeWmq|JR>?I{)|Izh6Mno`qcy8vVEHuyh;$ar__cJuQ5AR7kw# zPXB7tmZ7C^{#R5BS{9Ci-y3yN|M_F2|7l)W)FSb+6H^9T<_2i6Ken^XGyl24kKez| z82)44_~X|fv!TCcsFn-Ioc14AUU;89V&g+Y|L5073V;8fAAiyBmi@m!-v4-d|NNtK zNGljYnsskUqKBqviDeY~);7|TFz-aaHW>5KC=7mH$=@C>iN*w&Snh(P4Z^^i8W&mE zmn9Uw3jC(6;+0&bXoqk8z|ioxxP*vr@5%OWC%_P9Iif9=7KHS`VSlc5meULeitfyA$|MO|C_|3f;fTIC(!EK7vDtDcFy2a0RX< z{`Gv8>(jQf+++_tpQxn5-GBP0aDU5_`1jp^+OkLu#UoDhO{-T&n}iAyJG5x9!7$ON zXr9q5G7?vlto2I7bj~tnXk&+Bo#2~{u_iVlo@lk*W0O)+!{a)oMkS5>_Jl1{V#~aH z(8v^wGg#DM#Qk=Z?-!ueejiB^lcQ226VQL-4TW2dsZC5uNJ)rDh|>;_N=mkT;T4H4 zz3B7b_8Sz70nM^b`DyzamJu}k`&kLBPsuu?FflTNdB%u8pjT- z%y=Zq9F(;vVJOZhmhUYaCdbDA$M*5j#4_s|Ny6jF17F6G!u-FM12q``d-*@@^S}Mw za@_yzwi~`}djQw`(+&NrYH9Oo6m$o`kQ2ndA%i!H3yK>`agQ#yEA6M;`&VILpr2n;Lq4ItIN zzZc1==ZfSn#zL7su|{D%z2zEFC?`H#TqvWiU$;o@fHeqjBP3&ZoB9^HZh`wy$e{Nt z{MJFv@i>3t0c4%Zx*_&0NcyY#BhNK!LDoE))T7Su7UXh=n4xF3w;%y?2fpk1x<$~; zgColAE*>0~{pP_t_jbYa?uT04%t;T%aSJ~urafA`@6L)Q{+qYluc!}c7_hk@m^y8& zy>ju)o0?;Nyjmpei1fC){Js15zS|G^?ffO<)dvqAncqrh3j8E>Y!F(zoS&&p+W6j0 zP9=|h-m!S9<^7dL8S`V$LakZz7QroBk?=tgkx|jauU2jUI(6&SZ_x1jX3dgfUwiZ(VGtGfhkvSskJtn&t0eo3^9P4OvMPZlUzzM9uf3Tg?tQ-(%j~*cu(Y`fe!ul6FYf#@ueTCG3@@9sT@qjnH*Db?BDM z0wlq_;vvt_{O#{ow_i=3mVV1+#XAjY>gSnk{kPv;{`R-?-~P7!+utKT)eH4{d&A|_ z84aoSS}HY=U90MM=8nsr@kQsi``h*ofBW11Z-2Mnd9?W6d#+Er<+59Y<9l5%aVN6-)?$n5cHG?R#jHd1N`5%Eu5(Yn zsM{`w)}uF09c6m5Ygt&s?)ZCc(ck~4`Nz-C^8eTW7f-;Mkaj5Km5PKxE_NkE1APr7 z=zB;h=per%9Z|e3+dy_l@q<1PG90B2^hC&EC=H;eLry|z0(}moQwj8*(48UMql7^Z zgH)F!q_5?B$SEjsmhB+}F_?^i9t3$FWh(Srkg@2%7C=vge1oz9dJbd*3_N=*+e0!B zLXJSU3_@;NSl*#)AvdEug1!f`MtMTsLHC0kh(YQLbc=k5LSC!LE6CtVnAJiLgS?JX z4Eim|Mpf`kpa(%##h~T~-4F5}N*m~}AZJv=aiPzFtWzELV%Z)t4`mK?%RsmZWefB@ zkb`Pq_5?i~28`Yp(3wef7Bzk_! zi!|0DB+;^cU5wTB@C>0lL)NHI$QtN=kX;+#SwSBNIkX`mx1c9Nj%kF!4|+P}i^g~+ zZ*hFc`T@9i=s}R}THxNHhe19M#<48hKqj=p{X$QKjA~8D3X2XI*M^V-79FzLY(lO< z4}<(X2iFZf2QqCQ>fSq?7xL76%q5_ow#Wr|j?lG`fs1j!(1Re~FU5JG=Ri6y$2p)| zEjr{^lo8N#ASudd=vbW*2b6T^ z&XDC$CPLRj`l3vQ?gtrwG81|bWGKoU=wXokP!>QR2ss;N3G_LT^H5emUjw-lWexN_ zkS9?#KtByxemm+mbU(=YD0`p>L589nfF1_f59J8-fsm_EPC#D+xenzt^gWPd2i^;G ziv+zUxeVPIat6vZ=yMURl0}ypHk? z`Yp)kC>hXSL0;X3KEd)m>2QmZ28+s0; z4y8JDghY`z6hG*RkZCA&pr=D#M`-~47UX@DCeU9&Ev8nU(6x}aPN0ri zwuh{K67>qYALOI6s6WtOK_;9--GH75nT@gmdJg26^LW3|(;=NM;N3xYhFpzu5BeHN z--~$W(ET7!q7* zq8(Xu$QCGlp@%_6pbUhb2ss8N5_&r1ER?~}=RmGRiG#idawke6^#6;!Zvl_1s`lTL zSJMaW6bgj*00n}Sb|`5Zp}?d~+62;eNK!}(mzg$6o7glNle7dx7&e0dgGtHBb<80{om9;seC##(-jIFkFOc2fYe7Ab1K_^^MIgt(fBpyf zLNfSGFQV^54uXIEkLcr&!{AT91iv81!594r`2*Pte$C71n~?qB9e-wwy@ECcZySb> zkb~fxUP1pN8T_HYpnpM*g2(@g{so!1|8>LxGVzjsAP$hd;5{RV1LO$!+V^pMha3Q( z`2ogi$Zqf$?z+`NCO*aCU^hT^f^6;&ZYbY!I>=d|I}H z9f0fve*`o{`ryqu4mJ!q0KRyFgN;D;f`16g{R`SO*TMFH@*qdR@1E#j`H(~4mrTOL z1CTx7zc|9dN+HL*JCkn!?7I|;Of^ubR( z+QD`}c7rbi?Sya2)OSP4(5UE2cLG1gLz2@{9aHk*$+PLJop9K3BCuk7jgu=V6KDhhwK4A@_Yx2L3V-P0g6Ko zfxiQK6*4Puu&Y2Lkp1A7&VvuH!e8*?=EE<@F7Q`Cd5{y}-&){cGa-k;FD`VjS&%*8 zFMtXm$H8y>q=OYh4uYS20sMvR0-tc9gIx{T34SN29&!kL;z9>&BOLrrP>^u&V=qFR zLUw_F>SFi~IRJjgCCEwA0sjdo3ONS;9_RpM=0WZi!FR}B@GpVlki+0xLBo(E;NJ$l z3ONe?D^LP*9Q+N?TafY5Pj(e(1hOCei^XX7*I*a?{uPK1;a#?3NeA~0&fRZLk@!1twwG`4uJm*R1Y}@e$!RR2hst54itnO2d}#Z`9S*M zw}9@290K1C>VzBtFZ3b*A$!1o3<^VzfxiOU0XYF)>_-eCd%>>(4M6sTH-RFM1K_Qo zy^w?8%hsarlRo(L8uT5=E^t363Yqu=paYPj;JfS4k03|D7q3J7A$!4d)+6SSo#4L( zy$?AKzPTRb!|SjGerkh*IU&2j9|7e-j)Jeb*1=qm1K|Gv6+&k1hzF<`atQoCuS33( z4F2{Fh$rcM*1@j732}!U1pg5z2ssAs3?j!M6Tbs=FXRyTgEu2?kfY#RZ$W$@N5Fq| zE8+k-4(_@QeGM}4>p)LJ4uZ!)L!<*H#?l z{sL$OavVJO5!gz=U+@x8E@UtGZ6GJ)5cqyj9^@GK$|(GV><3>5nguxk{s;&&0I?|e z*+0U#1KABe53~@n2mI?G59Ba-{85bOkcnTt9|YMCKIbPm20?a%uLE^J4uHQ43PHvM z6f6hS3E2t0`2cboauEEOCy41O!7ibH}A@IjQ z><#z`e*LqE1LPq15r0B1L3V;4`?`bO3fTqzNCGj390foA4dejf;Fp5-L-vB-4SEuC z2)z35$N|WH@TqTN%z^9#KNBXfg&@bkp9O^>$HCtK?SRbQbFfLE0mx49<3SO~ zF7TT`dm#tGkNPLZ5W>M*K~EA6zW-mS6XY29><`d(klo;wpjRRL!M_hmK#qbx3wj@N z9Q=e25!*LWCipd=T*!X#Eg&c4FnAm^12XYVjtu6490czH6+n)F{}Hqhasqq^@A;IH zKKNHNGgvj`F!&>rGgvL;DEQtP8LWe3@XKeSEXaQFI4BC4_+@8iuqPpV!E-*5!Cr#w z1b=!?2FrR2I^dsmXRt!ZLGU3^G2!4ZfxM6t;9om0gH=HegWozggIx_d1pdOp4CW_& z@DWfuWOfn!0NnuD1HKD%E940HWtU{IyC8ePKV6c+_CXGUuUeA9o`UQL&s>_ph9Nt_ z=d8$J3CM2n1>Ouc${N&3s*olx`;HQG}A-longJzKqcoE1A*$Z9+!erDe0Dc!} zA>r2L4A-JLClT(N!5N z2-yW526aFte(uT))(P1SejaEGWDj@+C=A&TeiLX1kt#d!M_J;gB%6F;Ckc( zWDoeh&mbQN2Y(LK2{{g4egonF*$e)5FoO+1W}nMoSAh0G_Je;Ov>$Q^{G>aO+mK!0 z+d$7lj)32BC-R4Mz>oX_@{)AGe})(TobRBX;DdL=H^@=&fiGpSnUEvklfMjqAv?i0 z+>3mG900!s-K9U+In=j=qk zfb0hUC1@7ufY*1S9U%w6zX$R_j)Jf4MjH?g{#8&l$m+ zGI;ht1`Cl6@!e=g$iz?DgIGg$fu9Q62iXnY0E$BPemjG`3pxN97lUjDC`S6=OF%=U z1O8o59C8%=$Dmgs$H1QgB_PMaUjn@aIRSq8chK&T{owt3k@N4Oy}<8(80`)@4E|ft zEXZ+i&mhJJ$i%M(c_912&-pI$9I_kyobO=_BpLjH?;|FVqu>MkkOPn-;NBmieIXP7 z0jPs?z%O|Oc@EhF{(DdlJH-Vmq90czMy#zS|{yykc$n3`%?2Dig$RY5u{b<+sP*3nmkP~tQ{2|Z`$Wid; ze}Y&+j)VUTG!rs=EQ5UpGz)SN{JtjkGVwi6W1VpD>z+ZrK@NiVKZ_Vbj)1=idKGd4eDib2E7AdvzKys+X76OM zAA$1m-GLZ*#t3|e>;$g>6+-rd&wn=qU#H7L4k13Ea>!xu()SPt$X@Wxpjya5@O%CV z-$@7jr|)BIgd78Z_+JBa=l52fqUJ zBxFDMRT-HqMl$$unVIY*$S&|zptlGI{}E^eatwTVRwjENvKM@Hb|%Zh`=x&Htsp1l z2>3`&CYu47O@N(gnJgc24E&~}GMNW*5d80;YRH~rGTG-qS3?egZvoXp4ujuyY$m=R zf^z;pTpZaL*XCj(t4TR*(%c+(wm&P7>CK30>sh#$aWmdMf)5HM?>8ZfO_-bM&hR?| zjwv~8N%vpqw(E3qEZZ^wZl;zI!X9OHxtdDma)ngI#$!^6#>MNHge4Lic zrd3RKPx4O;ITt0PsL%9?n31rP zO>$54=LRNtbD~+XjQIZ`e%xesTzxs}^fkRs2is=&{dL{%gW}zz=>H$YPj|A@J0`G` z+H+W5eKvAry6*cdC!5u=lAYdO#ZIWNgwC$?bc~qaukSk=ZrGg$yHjEJ2-rPU-9&$*fRTZ-?al1%+MfPJYS(|L-_Td*$sn|v-}_I$i9XE#e@2JPFz&uvJ)hs((}#@kl%ctmBiB%R;L>&ZEvte?C+c|DbH z2g{YQ${%fPr~Tyf%H(>;@lV#3&-LUo#==weWqBVtj+AdA_o!}i8%)n-(~-YZke^oD z8eo(TNmZau_IZ;UG^{8w!BTmDVZBF zIa-g2TwhrpZLCYSohqje<_jGI!oS++4%0@k<2_wVqYp-jJ?9XD38iM{s?w_dnP*? z{XXS&gE7`-V|+&6d4L~#>nJqGQ1 zG}?6r+Vv>3D`w-apN@8&r~CQeZP$xuz}9rwqU%Qa`t1zemhegL3&IDvt&;N~d0j3? z9LuPj3XGMfPGP6^_uNc80+r7kZfqCzr!pRu&eMdiw7xSJq38uWV<|G&ToqdnVfUBwU*xjcfBG9H%k+2o9UBsnXbUl-};fIGiH) zCT8ONI?Fu2K4v022JPiUdrd}r)Lzev}i`9wZy}K1KIO*2}GMvli4^3e113ByygZS!6PZm45 zGn3^Zw~j<^9f91Mh_6`~`lBANQ;bEz#tBp4(^B~KCB06$IZQsgaNs_%HC9o51&MqT zc_47&0uy|+<6&|csq#L#T5a%M4 z*Yf!??c0KS$Zbv-)s612I_^|sm3hwAcoyVq#3o}9xbJC1UQ zp0DjIpHCX`N^$Q_)Je80%f^0p>$zj#U(j)CL($f9dy+g_Zj5$}Pc;^eb$plWo+=jz z+m;mjR2bD)9@A3AN!~8oO&%MQx5@27y7KyHu@JEo^&n0;C}J(RY)kAzoNzIIrSkWP z3E4+HFfo&7Th#cEVze@o`^cp1>`A}Q$uxSY7q&#*4i<;x{-3-q{1kN%zQ{38)=6HM zV=-F!qFm#+lFhOnMg7U97$;7{x-*+Oaa_p7*S(B!Uet*=ZBNA)aa`txjU1NsV$!y4 zSf4Qo=ZrY_!1d^)d!#-;0sklAp1Tp#2WULx>#}bL%NdFZ<;l`xaJ)MT$GanOyqk{W z9q#M5Ps6ccDvk|j>-|_RpJF6pE9a5GMvE=gYf*~(-^u#PeSqxA?MyaLRN*B-|xg>&{ZvyHa84>D1{E1LyR%Vt9}vyJyP={-$)uhQjW z#(Q&-Fywpj`0M@5cps16y`y*Q=sh|QZQBaE2+uUmfKCYbcdHBzg}ixStvCDS7c854~GN@4(Qz zFZ7NKy&FT%?9+4j^t?VjgCBemW#Ijj*dL(#M|v+1cJU618~f9{9Q4iyy{|#3Mv5ww#_Lr{~J)nQeM@oSxC9XSV6Ne0qMI zo&%?6#Oe8QdOn<<-KXcr=^1r;)}Nl;rswwQJpp=#J&5%%jKpQ}tK(~Ru0_p~R8?+Df80c4^XF)H4 z{swv%l$D>&P6nL=Dg>2)DnN~(J3w1O`#?VhJp=j^=uOb1v$NT;pff;oK^{;!XccH3 zs15Wv(A}VKf_gy@f%b!b1^PYcFQB(UnV-mJ(?O?#&I5TsUXTye3<`qo0fj-kL63rd z1Nsx_?;v(gHai030u_K3ftG{Tfj$ko8}v0$7wG$-$3VXVy#V?v=p9hjEF9NCCxPaI zia_O{D?#<3&7j*r_khBn2SNKmPl5gb`Wqu?Z{}U!|PHCS&fBBQST#H0H$YB}ZcRk{Ou2{VM7ZEA05Y*^EBT?wY!#Eg86&6rUrHM}`B-Y^PG z>gJ4A=TnJXByCeHrm2p^3ZL4oa>bG=8{4#&bds@Dsso5+jP-`rHJG%HN@~EIT$tiy zS#xb&Bds?FFsEV5k~KA$1khf;f+m$RW*2HSt&mq-A_q*7yyB7pHgO|nMQ9f;(NQrTHvHiu0X@_qyOW-TEn@j83Qj|vZ7-frDg;YCHJyY*wG$1xDYHn_< z!{keb9$(?*@%-Y3`5G_LTvHQ=N;9TpRQ52^$J(UqF6vO+yvb}nqlIpsdxT-IKIMxM+U5B6CJHvsPy6oL|fPAPjPZm(SODabj(L zL9)J9K<(ya6{SScv}TD)@eO+EfVAR-OOR#4rCWE0^VszzNQ#NOVZN_xk#uP>dXg0JVnod9ztzk5twL;#B6$*kSQ=5quS;=sX znhMkBsbeH>08wMUN`-QfiV>m}M-%X_+0;q{ptMF6;H#LSP+74zVS2tz(#UJ-SJYjL z$*iqC%vF0Ing!I_NGtZHl}(>cRiNsUl|804+d(65Owe}K&KSPMP8SXs<^y$gwJX*E zF)CiOm`}Tk`LFo=zNoQ4>A-AG?zk+i==bz%djq@8h@8J9% z&bM&h!}$Z8@8kS2&SRWE%eiRJm-+g8oKL#M^y7HWXL0V~TwfNS!ttsmDD-DApd!0}+xfpk)xazbFVC8FC`Pn@?oz`*JYExsK83TBI zMlx2?ekHyDK&X7;&+a6o()jR36=rHLYQ@!S9Z7h>8(XRxYBpdt{H8W~3Dy1@O>$VK zWtQRM1X0Dk3vnr2mRVkhiRF`3S$QUX4}r%FHC-XEqmF}_#MT6n< z=Gej~n_t;vT)5)xQ(RAQ8+VgzM%{}K712z}Yztx5#}G=|Yw(2yOeoK<`g^k~8|&%< z>^oVN*EY1()K@i&_I)_3s;*^YLlZu}B9epc%c^Q@Eu!xTV0Jr_DV^94NkZ_=`%RC~ z8cdpNKg$}`G^SePuAuxj6pIYIwIcqcK zfMY&<^J_gm0_9srer~eY&5tSIez|YW#@6*dqd@i;^I^8YB0Nqu|E%H2ZPpx^<14TJhZ5 z{>*jj>)LAAV+LbV9#f+YpcU2WqzNzjy_ufjh8ZEs;+4>W@yZ8Xl)Iwsi|WVvQY6g zjdeB6gipfS`t#guN)`_&J1T2q-9{raGYlz!tUrdNjm`MhMIK3LCj76Qg~}K~n43lO zeXnW6bSha0WlcR|aj_v$d>50%qp*Zze8-EiGLo9e%rcS!Yg;z3Dw5ioQO-(J+SJGz zvNnrw;9s7_&E`m5#y{nT(v@#s(U%n#H&?A`-LR}~;}Qzer?I}WiBiG*dK_c7Igspu zD=^9V8r%z^#$)V3N2PJ=Z%Iq@#>M58WyNeit1Lx_s>CP8u;Y^EM%=ORA}x#9@ie~T z=0)B57P|d|Pm$E(YYZ0=%0G8i#3pBW@i`!~A6p>1pV6l+pl6JhTa1r~lr>>M;x`q) z!4c!w#J`}4B_|yol1n6GJ|3bQ~q+)rA_E@{v3#umUnSYkh43>K;SV7G z=Ov!YfKFv;Nx2ADE!G9CtSqSzitWG;2VGgVeAzOy8N{XL{|)Z+dG2rU(@Iarnnl%=wgDbKUJV`Tr(gKCWvT5pZQPOe4ft*co<(-COQ*Vg>4?yZGeBU=ZzMze*Jh&AY97TWs6Vw)nQ;ZT{``+XLI%w+DB0>Ye_b^*aMQ+jjQ>mKTkcMo?bx<|TMPi~L1C$GoVli%a+DeUp|l=gUgs(buB z^*w=}_MTu*M^C7yvnSls(-Y|#?1}aq=!x|V^~8IIdlEe(J*+pk*V&ub>*~$#b@vwb zdU{KHy}i}F{@(iDKyQ0*u(zW()Z5t`?(OM~^bYn$dk^%+dWU-By~DkU-jQC`m)qy; z%jOOy8eP5ujy)W3;(HH9L>_A%`+NE${e%6{ z{saB7{-OSO|8Rezf25xc40~jdcZ$WKM)vb9|#U~41@+c z2f_nA1CfEjf#|@2f!M&%Kzv|$ATcm9z;@;Ca_-98<=U0M%e|{`muFY$F7K}DUH)D5 zy8^q~cLjHK>yCb`!yJNfKyA!+F9_Jp{9`_#49`7Fip1_{qp3t7~ zp2(i)p4guFp2QyJ#+*-%(Q`T)j)mjlM3`-LZgnBMJzKq7{aXWDgIhye!^rgL*4Wng z*2Gq}&AH9B&ArWojQ4K~YzuA+Z3}OUY>OiM|i^cJ6-549`qDH zdPxvHB#hn>MbC(%S1|Ml7kYySJ;9G&5JV3MBm1Ms{5Z0nA>&=hb`LV$k1P)&!^6n# zC^9>atY*k)7qZ!dO!gy-gUH}8vNwv%jU#IrGS-D`^&nII$kHG(G>q(wA~WO2N`{Pd zAsao&L_e}HhztxP`=ZFaII@l*<6Ou#4>HYDGAoX(V#p{LvdM!?@*|6a z$e=K?CyLC8BWoBk#)WM0AXEIvk{~i9jO>UaGvde!hKz6_8$8GaKe8aWJH+$AxhD@9 zkk8w{9qrD%*?6W8bGl;;D-1*Mo9ir`i;*plkdK!X5ts#xhJQSiZ2bE7o9B0PjWzw} zL_nAY62GRtuJJMQzbOKEbX~MRjhL82+HC)OIG?k5P0O6Nje$AzS$TXob52bQzSMSZ zd*OWF`~v#!=DE1dxc=Jn=gwJQQ*&;?>;<#u&bhX^WrMWZ*svDc=HRXozGpwD;rzn+ zb84GGAXqDt4?*>lgIeI9cJ2PTo9GvHyagSIVp z8Fgijv}<7d%N;b?+}Sn%KCiY?YdLc8QQQ`mkvjpmL)YWWdHC7XL^smvYVo1EHf+hZ zw-`Xigw}erUy@o@wy`nG)HdY_NhM9750bWB7pP+yS*ATz!I5jN^IB!qnomP!WM$#@ zBpy7>aNd5iT+z>J?%aM_hZB~j5XE#t&wry&v!_C*)26|jJ%ki(GiHzk`V?))- zRVQ_Y(>Q?ywhjtt}dxq;VY@GDp_9ayRxjR)K|2;m}S`8 zS1zwuQC{w=tg0w4S#c`Hha%NAFatyu0WEn8ky$+B#f;uR|wm6z~h zi;G#dy@{$=SyZ}&<=EJ=6<1WV3HG|TsG_Q@sN7dkvK01<%F9`(x%DkCR7A>YgKGqECbJCRvZAU|cC-!i2pRA(Hf&p_;8wC@^-ZN^=B7M* z6F2XL<>PFWrvahI+o;e*TCx*tSSS;Gq75UpN|u&X_==Yp4QfXBBzwD@E5#*VWOK># z#jDuKwnin=VHB-XRIQcEi^}m`&XQuZB-(6+x2kMeQ8{ysrd3(BqN2o7J5^Ql7A?LE zC2?=dmRByfG*44C&EzqneY(1(YL&O7yri-c?FvhkY^J)IYU%bZTIKUruc%;W*c;8> z?psz?iRMLLH9OInwgOtYe8tk0G-4oMjGSd>*_%teW!mO^dvj%J*^;XB*x5EhU2e&e zijop9`-F{B+g12hE=Sie+wGi`+ZL}_j*p#IVkD_#vuuqeD^^zcE?v3I>nkr?R#wH% zwKr8RE-fiuSzf|s+Za`0Q5Bn`B4x|*@z%x6ZKGbaY(+`c$_iLJPlYQ>S5#E_maJTE z3~Owzy%po6uh4yd;Q}8ji)hk#cfP&Z*s)}}uNn$SH&$S8D!O7tS+VbmlEr92AF6^; ziOsV&i|)pIW7)Emaeap`CT~Su#LvDQ1 z-m-i}6`I6bR8~=hF`8YVZZRuLU5#C6Z=u+77nXP_1ZXcrU|~uPYx70+<|S0ZVl*WV zGCuPF!Y;Nqqo?_bmafF7)UCslX|8N_iO(DuSX4Ts(Nn8e7NPIaKv;qdrzBofvK*u0 zVjMW|hlgEI(G}I_%`LS0-lNhcjLemlD;E2Zr@pEcG)UlBQ&P@;oI(eF%PRXNm2wQp z>?fE5**HS4!GCnp5xU>;m^efiRiG;_M$7P{Ghg@8(S#qFWvFlwKO7ribrFuE=26&K zUsQQzk(VEH4Zx^HHl6$M^BnVJ!l8&P6Oh zoTj)eL_SNwNsG^C>|+$}%Jkv?-3?96*EaclESLUw_66EnSmrtZiIbU$%W!tN5i|*J zh~mYw$v&UaBg)HgIP;ZdPslwZ_bB{BhPjL#kR}u2%)trgOg4G)#aLx5a~j05qj36mG&^ewzTldL{U%So zVDg2ScLNQd&oXmQJOasL;n{@e9s`_|XxE7jN7+$?PCAv99W`e%qETRO&MrIZk|`O8 z)W^$57J+ZTQU;!mK&w0cIrRvd696fU96p>^M$)ApzRD=B{m2fRm?5q>Gw*abPCIS= zD)*+#)~|P8RDRlNcwO4zco|CgECPQ2jTM|do32;oOVsqQ;gYWl@!euv^3JZOnA(?! zxaYEdZR5H0x?d}{nYUozc z&4uiws?Y4Tt*u-I?|+jHib+~#x7!8LaW9i5vq@TJ)7!z^7?oh^;Lw+}dtnp( zZN7U*uYB`rVM-4?rO4YWMSZBm0gzwl5WpS=1r+4RK!OT_$ud}oBWAX|3WQEL?EJxG z8qBL8CjfCykaaLo2n#95G9Vr_fn5$JuV66+xfw_Rjb-b614u$adZ-*aabqH%zY7GD z2S`W^hzo(Xb%udN6yzNs?&-45bU5tCDUi9B-tKq6hUh!6h~==gJI{H_bTjAURJ^i? zoF^SL5c2RP{C-l^X|ekS^=vce6%{6O>^{IE$IJ)T?3|}P<{%nz9*tBvPdXP;#BgS5 z*dl-}2ja!BMKL6lu~noqRo2-6B&O(m28ajeoOU^wSdax3pd1j66?! z703ua!H4%6Wn?nCNMM1CoK8rgjL>8wagbeSdgafhcv=F4DG2_q#JoWAURPnwqaf?B zmI#`*kT_U20}0+NBewvF-XbGk1me0?M!pWjkLuYq>;e)1*~quC7EzFWSPLo0<5=_D zA(#9dki?xb@;4yP&&x;-#_z~oGIA0S{}*NCLLgBEDFNcXTh^iDKv+Sp0^$kDI(0xI z3K9U~!oit(iW$St&|de*NCzQbmXZ5_U}_X;uN^?53i53rAq;JH$&Uc>epN<(4#eLn zBQF36D#+h~gcamNAW;RGhTMr;h&W!DV=E)3Ana>0vI2-xL9PMfQjjJfZUy-)5RZa<0f<*YwgB-fNFR`pf_xW9SV0~K z5>b$+fkYMLB_M8`l-Yj03B;oybo%L45GN47f}9K_tRUwCi73d0K-d=9)}=t43bG1F zNI@EagcSr+svGmL*>&y!5><4*N;yaLjQj$Vr53m38I-aVrQNsR9a80VJp(>wqM-$>m%R#I;>U?grvkknKSH zU9!#~kVv8;J8k8Tkf~ zu!8gfaX%#M3<8NN$d7?|aIs?7`6(dYK^gfI5Estg?PFyE2&NC?h&37;qYaII-KR75 z6jbcxaF53A7>do&c+g>6F(ok?M^RyOG#*9+eNRynqp=@ju;G^@ehI@|Wbz`;-roXf zjmGp!k~$c(%*hx5e!wH9)y6DwDs*B(hlz-pdr`!2XiIvYD7}d3=EXHW9S_Wi&5)fm zWDzk;dCw!32OKNXBBFt59qnj{IZC96;M01{{lkMtV>anLBInp8K)efH9C$0v@BQ)~rD;vR?#GI^8gSSjLDY{iGP)kVZ7YQ<+J6q4%0kMEupBBKz5q(#JV zt`tM_RYoa**vEys1b8%3)tQQ=_6!Og!wwzaLkdF2_ppM{@jap-bbOC02p!*J3PQ*C zxPmN4dnFX)Dr(cH*{0N^aMu@zM?tQoR#uQ(f%p~V9v}e)`4*6%f(!sjD9HDK;D14B z9D9QHdQ?W90pi>*BQF98D9Eco5judvd&H*Pb)fuKmxCtI_4Q8 zK7YjAugl19fy5Fr5(naZLq=W$5>=3Y67qLhXW~>u<4qYk9*7&KGIk!$0^}CeDFoto$vTUHI8T+4 zoOc6tZZUW+0kh_3*&yaQSktXIkQ%1G}Nhk>Yw-d(9>3077 z5D3k~ZX-Vf5?7FCfCMqmx~=mkATG?@ZX<61@n6m(W_UqYnJxvH1mtoHS<`q0CLU~V z@mL7$b^>(1pdhn=1Qp~WAT0{A0?2j+Sq9kYhiIu10zCs2&Nq}Mtw zy8teU>(eOO-)x$stV6=@Nz6BT|rE|#{MqG+9Rcw?T27nRo}wG3&_ zLo~u78l$w%Qs~e(73`?40utwld6cOG!f-K6IwtaIAX%_(x9N>Q{9K2!9LGu8OVPn6 zY}gmClH2QHAVGwJ_ApC+9Eb;NcFDg6;t$Gu{Rv2@K(5bQKwR+9E(cTQGY=5EoM}M9 zO39}H>AhMmc`gu_QfCkCb%`9Gl|cMA$$R;Mc$6Bp0%42fz3u?wRFEw|N|pNbQ8|hZ zKK#QxpOI}n4kWH1PXh_wAnUvYWKhw02Z*aoj@aZG=wC{FP69HdAm;-KDtlc5B(CUG z0ZAxG3y@(2`8<#j1sMSHsnv3w9|01$RIcGKfy5N#Ss+}OBmO+yol zbA+-1d3rQTUM{!AaX>-}avqR~f-C~!!8b+hesLv`n1ZaQa+LbC07)o1w*m2b<#N6b z#IGRV0TNJ--#udzFm*5lB=)-U1T3PR^DI z$3jOzrURjQoXAVl)0u?eOE7lC3V?)h)nShk^sEG{mvt(DxG;d*IzAvFMQ0P0ql{y> z1Mw&$$^EofgIsbC5KN9I)#pJV0i~QLfK({R3qXn$vIthx8l1ONSNznSpNl> z$5YhXab*c(511i9!_p$oCD6oX{y5?%F}76I;a4{v=o`l-M^xEvl*6xXhOKjnJY9#M zODwd`CGLgJPTJjC#JL1M;9~X*$Bx;?;~kcUeWte_dy8|4O)1VLu0b@|wLH%7FV(Uc zI?>O`ZF&okk)VuxiORWIMz#WRDtqk#;!%)&K!OVLQy?w{c?JkmkiSwnH_Ey3J`nF$ zWMsneXyqLO5$E%!r>Lc4AtJV0aaOc){AAI}xWG(W#GP9TyV=S~3Ro3qjC8q)0SC4s znv!V2Xpl$D5pytn7f4>jIe!c=PNh&zinB`o#KJ9BE7Rot#*5BMTc3bvSaoJ=jgO2V z&cX}B>>1Dr-pcF4YSyhcrlQ2>jZIGtokHjY`bAU;Dxo+J$Vdec|1KF>1LVtA$+TA+ zkmzn%=XM}*1^EgP=N?&S2N17<>;)21ke>jFS%_$N&rT|bVt6#Jpzfn8Sc_=)gw^iW zCQH!U-9=5JETT=rq8H!|V?_ZgA~zydZr}tjX%X#C`D32hp81~9BEUBq)w!>#=yWweA z_)bZbVp#~C_ycl$mICqbm62*7?gwS07D#|2b_`8h6vI_$eq1g~%i)e;sTD)7WW^Lk z4EG)^hWuaGi0Iu8y7EyM5$7MsaW-b~#f+rVpZU#*278FdXOuYK1|6r+G0fZtBseHX zwF`*rdouDc5I0BcIGeU8&i5kDNnSw7=!hW& zIgOAX%H_C$#1!NbAi*bOopK<~-^xfe5Z4PPVz;2_1-0NQXEJ=VPG0n$f<{hS#Hen! zpdJn}Vn1)S;PXkP*eysS5?RS~RN)sFcG4n_4lWTN#}v(&XhC{j#v0WtFujS=evH*2 z8qqk9hE|GcbTdWl4x7|3$HvIC`44$S->49ZpJ%h%Gfr>W{p#vg@_ zo9mEojQs*g*g`~n%yP*0XQ88>H6HHxj9BqORgxAFpM6$*W0TRId7Be$v7;cCkGgojI89IL4Z!vY$5nbp!4IS?oI!$i@XdhaGsbHXpYWS}l+a2sYj-DfqW_dfl1?E0JH@yvVrZ5_F`R+gU#hrv zC^7Vm<7}`N|8JQ`;bO%Ot%w+g5N9)nbWN0W6c%s&h>_oMgXX!!C8%^23Vw5^j4 z!Q65`qOtle5e))=2&6_qo&?gWAioE)K|x*va-)LaL*L9lBSSjA9}OhV5pz5~9fF&|9#CKH`6x4 zCDG$@5iv6wq?2@g!FycTC(bTXv<@G&qH4r^$QD+#Xo(3d1Pex_~@y{2CXbZDG6z9_?Y0r4@yGDnrE!wTN zXgBI8|A@AjWwk|$>kDyr&T0#nT!bNu?EQ68TeP;y&%xm-9z?^rfJbALwzv#B?n^|( zsQ6VtJRX6F7@Fl!45uQ7lu7n-xbrz-#gIl4brCTPS}`0wpJP@GN6+U!TQS6Ek&I6P zt4EPKM8j2NMk7@}rP_U#VkmTs>VAb{s2~GCyb7`(NI*fJ0}|qhnc=SiaV-*UK}9>@ zuG>OH>zFm9)|rlWrm?_Y4tMM1<0hFo+T`0txFlL=X6K5a< z{Sin2f8E>nQr@J!6rG$i(59ub&U7Gq6`h$t0%fvJ0T92Uvy>2V%r)w>8c0w<8iBMc z$c;d%7351mLQ2UyfOIR!!$AC3%k|k0B%tU#L*-l}>--srOVN1`2=fUY^Tugev32HP zcroovj6aqRL1zGoD9D9CoPJRb>0C}a3bGD}Td{r}knmb_FSB3V38Y?$#+QKv6l4dG z5~ZAnfw*era()UVs^~lq#9t@tyapt0>4+X@W*uetUtEkWRE~Y=^|%5Ghq8!s(H&Ng z>ruATis*3xtH8!&zwMb-V=? zukFGppTkO9P(FtgM2oWFX{ym1zCc2C>f^=?__gV)edXtQ7 z0`gmHFVRoUT%~?`H4Z})l#D%;erjcJs{gY288urcu5Mn!QCM9>UoOYfjoH{_&R&(I z!=Lh+iT;jm2%RVKd%mJ1`sv+PKgA~tHg43qX$PVa`5bQx#cR7b>R%&D}^?K-_q^$41_#y(~oJyxH!QKZ7_bJY+XGq(jMh zt4$raC6lyR#}v`y9CNiS6FKk3GpyOzKhxpVb$HGvtej6kbD?5Q8I5>}9Uq?S~}$X>)0!% zAdXqE^-XgxGwY@SaeYfhP66V!5Rr9e^j2&+RnZgK>k+;?YBXz>UxufskKT8zxh$+Yv)K)FyJzNt z5!@SuBea)^%ugwHtIo|bjG|D%*Vk8a2*NWq|Hy#p7Hs`X%6 z*7G&%BPdq29?`6~Xx2N@vQGCQ67}Sc`lpE$dmD^@wJj<|XyxE$exj^&!nV&8@2XK3lWila}=vnss^?Sg}>mp;>on)+1?I zcWKs#HS1x``lXun!L+P1&3cb!-LF}HOv}1xTGpp%)}xyBcFp?xn)L%|S$AsI4`|kd zn)OLq=DrYonLKabLprRLqMWrt`y5&e;y(|1WBqQP2I% z^QgJ>ub0t+4qV)z2gwUR*V50d`-&UQOt}i(W~S!hb}56~slHjd|K-uW;4I z&mr?gE03db zZ`G{3(z5Q+tcNt~rCQ`4(;}armi0o-dQh`os9C>Hv+hpI`ukeD=W5oYTI3tG$QPz% zJzw+PuUXI2d@t5~_oQV#OS7J*S&wPHZ_#`&P0RXQTI5H>2r0&&f{12)xn|v)mi11} zcMpyiN*^p3(IUTkilxKHy6Uv7pQu?c)gn&^CZ#^}Y0g}ZaO?iGtiP&7epriqSc|+{ zi+p`r)@kk@#jklIn(ufGQPr8hUpvYK(z1T5W<5`9_n2m#rgc#x-=3EB4$Zntvp%F* zpQ>38re(cYv)-vi-m6)ELCd<1w5;c9)?J$QAua3rw5$uIWu4}tQnRjJv+mM-U#&Rcs98^FzQ3sX9!|@8y=FbGS?|<*|4*&Q^`vDzs9ASvIe$R2{-0SdB@+sAaT{Ji=67iQJ(`wvnm0`;dESuL?jgZ(RCK=5Si(~^tDNg=GP%z zzrUp2DGj0_l<}vaFgXwB->ls!9TC}bNY;ln>-4n`)w)Ns9@4C{t^AJAAz6=W*4s7f zZq0h5ZJlS`6$i;W(c|oLM30kf@gCSu2%G>gY-DN&f-p&RA=t{hJ*MnGV>$! ztDsc0*XX@zUP!d^=sF8t6}jQSp)G0A{5qtpi;0r0ajag{M<4|*;e|lvS7=#x-9aKR zvd%6?WSwM-XPxUK%sTHlvd*rv$U3RcJnQItT4Rm#AE93b`J%l>&!~9;(aNLiEO<)f zhVkJ9HSI*!S$-W-*6kA|i;SA*74;EFL9XyZAoFM0S;w;_Uu4T6S>LN!_h{Bf@TUPl z``L{7lQiq@w5&%o>xG*2gl7FcOf$pl!+kGI%ld$3-K|+4)~vs*S@)!6eNeMrs##}R zyC1JbzBDcCQO$a_X5Fb-_t@5Xf2XhIjn?1ASZBvjjCE3+c?)`l7aze9mY$X~^5-B& zSi8<*tdr`@eW&jNj^?`<6Fx$}3i3pIjXsXe^NUsP&P`m^~95w^z9fk6PnhvwYIHkk)k2|av7eEQXlOE) z5$~TK)GyvTxp=zRtWR5GYwM;!^0S{8qIJyrxKhT4EMH13Xtj>d*Iw&eW6sHp3tJou z4CH#~V9i8muT|J9YVD=_z8yN$D)u6-Sm{f+^aN$f?{16lfLm>vqP_Tx0Yg@sQhTY3 zXww_4Hk}Cts=d9;UR+T%v%0*v5Rl=Q(NokE<~obr2h&05MX9(E0l)I`OPORZyqwh@ zK(;M=J4sxpi1r>;2exLeUcI^)I;JhPzD7BuQ&d#sIhc;&dvQ@IbVjvh>a4cfJ=I9U z^DxiK!y1|nsjgjm3R&bvY#jZ6>Li|BEO7F9KK zsYLN~G0ie;j-nJ_brC%-Z1p(ml}RH2kH$hP8iCfjO|{MEw$wE?ORuxv22T^*(^OA8 zljVD%4;o4ty5p_ zML3`$Er$|St7PL0L@ETLc-A^9o?tiTLrc=(W8H`q`2tme%HeMc3|f(&36wI@Uc~Wh zxfS{KH8mSCOMKD+o4=woS$9(rE=gnnSMj0mFz+Q2&7mgQHFk_w`InJ4Q z_0FTk*|bG*-iMNs>dcRomaSCdvzSL(lqu>en>YHY#(8?1HE6zR~lU>^%;hXull8{{k|6 zgdDL~fzTC0+{ zEk{@lJIWJLt+k>`BY?VysODKwC7q-mCuSqrDBjmYc#{?}l6=mJJWe+@BKp!uB7FDm zrf87wNrhll_nq2WU4-v6gQe-ax}DZUeZC^sr>(vv`32o$(K=>*Tq)~AWi5bCSlA+f zl>j-QAeBI(hF{|Cvj7mQhQ?mE0P*Y*nLyBXAaM)P<8v0;^mJoi@gw3B8b@we)*W84 zyTwIrbXd9JwzdgDaV) zY}F@FhvU7RhDODHMy+GiXY@0x7oZanI>uhFkze1ITQFk|azjB*0TNe`1wfqm7=k?- zUkW6sAgh5y6y#bU>^t&a_X7zj$ajFyzmw)@qsRHDI0Z^Qwu~pvR>`T(@c9|Ypp`$> zMug-akw1-A{u#8Qkc zT!mRW)-ldRXhbs48RZHbN{?gsH*nMuiAT(d1~Jb!QjBc;ob4qmV$|EzI*DiuS<%p+ z$ENx}PWgic2MG8zj9=Z}Z@A7>Lr1?-0L=ctb*33QTk)%gR%D&uh&t{;ff&@ z`Wml~5g7-KNct%7KG#9lKz&Lz9TCI7Sut#ESc_BNxpqQXxe>PfLNQ6p;q;5zi(1KS zuLv&VQ@0njlG$E2C)LJWrT9=(%=ow$9ha?f!+w`j zYVpSVEg`OztG@`+65cT)@Kn=J}5pT1Sh5q>@RFROL*3>Wv7?Q+DuWyu!5 zw;cHhT9ErSms-d0;vn~y?K+El%Tk@W?~_r;SofAcLca=JqP+xX!T!;M9OH!VrViOU5#1jhNm>q@@BG*uvyRytC*^1w^a=3l38i((6e{8IF58A%Bt!bL8IFG3|fH3C5 zXM~KaQ8kqfAH@i1>U=c5Up)@r>5GG7`Tj-AcYG_Mty%HiL~yrf9KM@6Fa%C{cF}X4&V1#zSp%U|IrV`=+lvd_+CS24Or|eyPES%BrNVRTGzs6ITW7@ zaXmnN!(R09&}DDrlDKnw(EB9(tTNCf?lz|=ho4#9V8w9sv&!H&V)%p=!*!T+xJAhy z6T$J~k+H{2Q|I9M6A@8OHTH_<9K0UYSVhP!vBUke_+)a z*C|Q!7W;gJVT>9_olPC8^Gb|S>OIZF7H8fEJFPq%{aR+n!Saxgbs=l4OA%+@rc?2! zoO$(!)A^*UKOjc?Bz`=0o0>WlpTA)r1YKGVTYR`*tXYiVPRWWXiaP@lD~4)aNK1@k zk%PsM$LAC)KE|0|ZBvVVH1zpQEWUsA_^iWZ+2!@e$MG=dmPD%G|_|pj1 zUa7t*c?hHW;K8E7qw2JxO7l!6-P_?;(DY5{vCfv~*b&p7_`n$>%Erj{lhGq4t`tn2 zgJ)FizkAf zbK&%lh`oq=O&%-jf;h3EKY{H<+-s_~Bj3=JB3s%Kjp)l`XN##r@wwPG!llC&AD%6r zwd%aFp;da)P8jY$o!OsxCa9-$LWSJ}9Y5ln1H{ahZvhD^$N-R-D96}y5QuY_muw(U zP&pjQVC!1y>KYqb+pH@EL+2UN5$DDR@<%FJj4cN88W7Jbavr`5B&;A4aE0Uji>xyp zNKipe1QPzM&u#*+4pP2t@QIvvnw2uE0NrE;48>dbZFJR&7T8ifjlup)TS`osSv8%`4U(RRL?F zH_^Y_=5c2)P&^DJEuuF?#hBnIP%8sn(VOnJGP5;hYF>+I_(e3dQcR{SVYUVh6KVbO|$D7t9KibS*hVQWt$M)USA>a2P$VqYLR{@7>1n`W*clS7a zzYKq}n`eXdwK#uGeo2eH3EzX6nK&jK{GW7FhkS2AqWqh3UR*P_h-*fim?bS@grqOo zn`44n7g87fV&TE!!}~JJBHyVswd}Q?Z?Q&f@$AY1KW==|k<@ycWgdNKe9zN-e;p4s zsn+w-vL4rb@6mksYrY?;S$CynJ)rqc-+WOcAJlyRl-BO~X<5(GtS2ya8twp{x zE$da9@APdQ)%Q}(_tP}ry=hrbXucoNd=F~AFVuXmPRn|S<~x0VNA*3T`QD@X?oZ45 z4Vv}1X1!Ch-l18qPs{oNE%NPJC;(IOvC%eqUmp08PtYrgN*eD6uidZT7Ns#$N>eD`a< zN7Az1saem{az3V6k7?Ei)3Q#F5-2$~Z&(}a!dm3(wa7=)vi_7d(uOqarJD6&ZKOSr zmi3rsy+gC^(X0(!d?PR;tun(rfNS+CWsM>Om8n)Pzc zcb1*b_4|pMb(dy+NNe{2&G+22tUER9xtjH;W<8`?ccx|id9A;Pwf<^WB}6^<2&Rh}P~A zt=+HJtQV$by%)O;`0e4naC-jkN~8JcycX8nNXd#C1mXphz9TQuLj zX;~lE`um{P?g7pBGd16<)3W}OW<8==uh*=ftXcP`WqrS9J)l|7*R1zwXIAxTS$|8j z9@DIMXx2+L-ven`-=bxmOFO$5(z5PZE$iCTvi`p2dtCFqQ}f-g`5sKmdb{TPkk;cu zn(sGizIUW${c6p6ShHTOS-(KD9!kslOwGDmvp%dvexDZk&a|w1H0$-6b(iM*+nV)o zTGp#I>z$f)uV#Ig9eMt5=_>1Av(eu>w#N&_l~7HbKhS$i0|TG;K)bkS3z8~*XZvQ&!f4#OyB8OUAU(U!Xh^gGHbNu z*CG8Ic&|3r6>4K$0vTY`(E2~_Qtc=+D582u)^I=rVGNXxoYv+mZc4)2w?m>m!==w>9fSX<0AO ztkbMoil+r`E%LW(k&mZkyn)-Vd@7)9&f<^zJ-5(>=C#3A(=1eS7BabocG_?ViU*NLCo(M zoT@r?>eQ*axA$_~AA)6b$NlCVaer5i`?ERj7joPyIqtXah&$bWbVhmddXD?W9QVg_ z+`X6IN#vxJ|Ud?W}j1+gT5| z1W4)IS&Qa&7SUjmr2h0h;p65e*c>E+E1&w)?Yi`e7q??K^_^SoeNBHZH>MYIvuP%` zOL`_}NiN?J_qS?aRLe6tm)ob@%5ndk-6biFdIjWBZ-n*wVaNHjq3)jpE#a^+{eSF1 zOdk%Z2VVlO`%lR1r;&u{_*;NxUjI~M`}^P5NC-rqE(y&JX>TI;{RH_i5dGWSf_xl^ zjvfed1&IFLB|$z1o8^?`b)jxu~2FNv~34*+V zXdL8iKyKnAcDA0k1KC5Zme(2(y)H{V5fD$=A3@#+&Sc+h>lg><>8GU z%>Xm%^Q}MU1F~l)46*uIWSEqYgVeK=}OYxT5(x(CGV7QtID{7yj%lc!3aHWfz3s zE(dVQj0I7@dJ=tTdV`SrfowUv-V6kzk*awf2$rT4avq4=hdm%i)cU3Rx#4*;C?);u za#694MhJ2 z4QqJ4yAQRq6zn4Tvj26EnM#S=g%25VdKOF;IVKKw9{3kHdjq#M*jZ;@rzE&W~4=$)p>^JhR7 zowh#*M892ycj%g}L9zw?aoYYLpwY1=spp$OXuPb1FPXK!^dU5_2J)O^k=_jCz}QS` zdlATa2YC$0C8vJ|K#rTyp;8xt+;VFE4ItXz5bhrbqT?HPdBFxgt&Wm=M#HI|KL*W3 zQ%|jx6iDl@m|i8CXF;=w|5_XM91!{f2L9&>ude_ZaawWrPeV6es%d;5UnTT?sxD<| ze+)D(@@616jBmqw*n-T?SUe0G{mWUx{Vb5K+hahEI`aHFkRwLN9;?=aRtR2>Px2&a zjyY}rB#??z&oe;IJNomtKyI3rQhUAx1XQV&`ddJrcS?Pa5MxP*{^;9bGo5+*dLVYy zBbsR-^Xkn_Y5OXWifI?o{49{0W=sj$0`fJ-X1*85oYT@@1+r!8LGQ5jJK^;FZ-a*Z ztmXebAO}u8e+1-NQx8%91(3^*Jbwd3M>C`qUk0Loi%pPk1JS?sE{OLKYIbJ#j{xzU zalaqPRfqdqfw&&^!$58s?Zx+v@s4`alU>PiPk7ZqbIqye-Bh!~>-|7(8k%Y=47=1^ zr#C(d8n_!=tJM4nAQz1$G?OqSukwU5EB};e9A1A9aPSse|F}+1&EF?h=dOTxp1GhZ15^0+NT^xDQf{1iAKG{E2Yi?dCur_mw&nj z5;~10b%CbOp#wr|o|U$y2SAP*D*+4Hskgh{1!taKrJ9Y75s%LU*>dXn5)fB6z6C^|`QGL6 z7r;>RqG?4h6r(WW@bZ4f^PV#OOuX&|GINmjcJ2pq&fz`695~4HKyEp@`W+zG z9G$;=4l+A5M}ZtQZO8lg0X7O)9Vp(S<@pKFkhGL@3_%1qWSRxS(3DscoUGL#{a3e!hrVl zBc@cd-inhDUXvrwJW5?Kyr||gK&($fNCU`ar+)@Ot~vUA0mwf%tLMjn=(woZji-Q| zFeAu2aoEf`aImxcuc?$H&%Xk>X0*q>5bQ(g8ebPi1Lj!2b$wX zTd3yW0pdBxXMkKa^$^WJ0lDe4^gpQ{hvo$!duDXNy-pDi`m@~cEn?hF|ImJ!wsD@( z7D~JUG$gg1gAV~&1ZL}50dn0Luk%3e28}J%0dnBb{34JePS1Z3$j$rHJ^wV2V@5)f z$Lq}fJo%_xFnR><+lcjyXNH0-C2xOIgF~C0lyf=cGM0P&n& zodL4v)LaH~*`aw1$OT8kdqB=RZGS(I1E*I%0;J;T#vcG_kfcVQzXEd1(WvV{ju?5G zyFL6$Ao(rnRp#G7bB#;scKsKSIa3PNdq1=wj4ZF$0;xEqUJv9YAhS9@OEd@R^?eyg z*J*nL2>sbo10Xj{k71{|fREL9PdW9x7c_IPPPhGIK+daQA`o4D3P{E127RI|g0-7- zWd1a04h%1nuDhLB?PI5>i}}Xp?L<#B_j{fd;y65-DK&pF9SK}l=>!+o6eYi56Cq~ zo*!L=goXwKh@UG!Jx(j`1I?nLA?|Mia`|QHRy+jc%8@iu19H(RbsoqiN5T$}u4xyo zm0LaNn8W=E(2O|sTmo{2%G1%vvQcr>AmZ2e;{~XA1XOuq=T&l%91aJYAXTyQkuJwRwRx4QAm zKpdDe{kTah~12sZ|se$Wd#n_;4p_zZNcpM#B! zUbv%Etq31CRfU?ppdEVn^(4Q}p9qmqaCxO%!!b;^7sD;-_k;RY*g$%|)mp}{I3ieF zrC&LQZ=Xlx$5zXQg0}+WG#~Cn^>Cd&yB9K$daR)KFi8|0Iwaorg4TT4!r@9`uotzW zptoOYHu3vi)m98W4O-=7NCxmBX!8(w2l(l*Kcqx-c+TO4h|TconmgRGBDPLwdl{c! ziGo)2L?|s9E**(5OtKv=Z~KCoc7{+U-WvKZNW#L>(A-j|9yh|}!BVj6wdvnt+@_z- zN@~FdcBztGpxhvrIUiEl@^WF~6i-QdDgxP!dkqhXYCr7y30g>riE;%rHL=!X<;xqG z)QDj)H9DdhOpVN#g4MwWm94HW)GQXXyR9&BvB5^wfnkG$wF_&>7UCW*2UX>FX~Tw7 z7nv|AJ8mCgy);TjN#)zeNSQ>*P*yNii;;&bGAU(aQ`On59q$zM2kvy-UQfc_LL2&n zA8+l1D{ZLFVgNW9Jf$2H(l!RpwCENl)D) zhR|SXE*ebNXfPQwoow=$nUtF;1FAC}SyKA1Et&Wd%97bcIWg{uJkW$yPc-A@k*2$P zQf9ysgI9{)q?Cm)rN|$Wgq^dJPQ0Z!XsoeDRQOjt)j0A8VSRsLeWh3{udew1$+79l z>2b({MwjSn6dsA8dPH0Ha7`z{;>Pu0jpTgtI}42lc|EE?XV5+qv<9Kq>ZWuso!Cid zp>I=p5hYUHo=&B+noffHP1Y0~58%tvY9wr;oX9ii1@pJ-x#+|P-l@vP3 zH9|z4)~kk2Q&p*Kt~!-Q?F;0=VHA^7`xs#COxSfx0p(6Q8>y*@R4yv3#)DoxTy5eg z6PpbKGEeUhlj+ z4HvrI*1n8@hbbjA*lWUb)+N@$-Kc{xanmMQ?Z;i4Nhy<62?hx^!MY$PZK@UQr}B`p z0_2BydUDieLsv5zFg-GEDmFbWjWI(ZNj)%L zBc;-|(LAXXYAt~Pq@eRr!ka|ehL<|@*Z>LzIu*y*b9N*l^G=?5PRb+ZTeul23#|$e zYZR9fD#1n6vnr!fRRl;onz8aMUMO)ovIzR-5Rp z4)qH93O}}150|k&Zc#eKzCmIi+L2e`k2F}@8g#a4W%T%Ii7x8$Q=!)j_N%nDwn=#` z?SXnF+-1B(zm}TOkExmI36Db5DGHeS>L9^^X#+biehCkVl1C%!9Csu8OJiR*OKhzd zbPG#G-81#2IPPu)_3c$uC(#~d9qN8P?lhxK#Hj1kv32x8FlhC8C{CdS*z3Zclq7B$ z@n=S6NxdaFB^7$QFi{tSZhz1V735VgaY-7T&P>e7i7BvRF_iOxs#O)X0kTURo1U5( z%SprjMjcvP+oCgZ-CL*zSaHzn;U2XHPq*TYprunFNwKJ7XVXFhPL9otj7@p{{Vsp- zo|0Hyn!H_0C^a#WlVN<+!(eTMxZ)=LmT<>`!HXfRLZI{M=(&UV9iCP5QzHOSb&{E;`4CTGFX+pvL3w2R?3SRuFzD1Nmo4AWZA9H{Etn}dti&R& zmP44PmN4RD*08!=nslpBz=F2v7Sk(KicGCygt#jo!~w=@6}O$Ap(}N<_x>TuGC8A^ zMGKWGa)`Phx|JD^8JH{;htbt!DeyZqXl{CtU5c5JNme;@nW`eOJu;8TBF+kQ-KYq2 zBWI46gY8g}D6_1EQl$O8oZwT_`wj}bGg_q}>^lLPgM+s^6fao7Zi)xhBL3eE0;Nk|W1;TC;! z1_ou(U@67fa6iaFNFh-1bP^LFom|hP#Y1#il6Qzzx)If38yhn2>e$Gj%2}~wSpuab zmO!1uln~|8h3Q$9qeq960IX;pJ*(pI=Megb6X*~dRM%_(RlP}Tu?(Qh9F zY{O5&zTe`Pu{gQuCMh?89S=Q|n@aNSI?1W`;w15#@X%p)@RlrJ3CB}io?t#Ok04HE z9pe&0*aRaS>SVXiuAca@IssAOK$A;U$BhvofIJ3+N>}&W8_;BDNTw!6C#F3_S6ao& zI-HZt+?<*inVF%beyvvNMKL-t|1aSYuZLooz(!f(0hNX&PT$1#OvbiK{o}+E4&ZPm(Elk zDLv|o9{UTu2)5jO5BHkq)R_ioiEf13#)6(g_>VoKUI6QQu52CQpsOfS}oLWOI9f^ z>wIQ{LG1MBaqb&$R>L0oUpSuUU%Gf8n-2@nqMeJ*KfR7Npa;t(rM1$^ z`m%p&z3S6LX{}IOT|1nzwQbcXlM-C^e6)Lx>q*7R`l_`9Dcm>7zwN*2W`Ceo0 zbZkDrHHFS*D?E)W5#%WjXsT6kU`1gHXV#BRkBm-cp>Y_3cCZ=MmxJDR*c%zi5{%7^ zIs~Ixg7MKYb_xnl;IN%^>tqD`cXE`$#a_RO5F^e!VTzW*UN>wI#IatEZZ5|=5Hy8l zL>`A{r*<4f#7+V|aAA5V_t?}oWItVaqKLWF$6=LhuXj`!Po))Km4aZwe&WIEibF$| ziH|c8GwAM*kNHK5bYsjR7eXke>mv2RMpS2rJR+XjKFNrREWpoI*dPaGvTC)IB2+0R zrDyyqG{-owZN|35@2Vh!#S!em#e`va+#Ler=mASto}BKmTNo|@-qlu|X^Tugvqfav z>|$LC3&^n~mar6SKG)1h$yi1d#xkvB%oU9wvA)coDU5`iN=e6Qk&JC}p&OA(%Es3t zKV5C6=mv_Tgwx}*V-p^hTC7H7JpB%Z@iHVc(}<=w8j2*BJ2UBNuFJ_L`8`>ZS-7+- zgSHMGNxN_@Y0!3}2k>$w)+7YH?{mxK_n&CM_*9nP%q~%C~P{af?<+N&$zZCDPaSd{_YE}s~Iv4Sq@3drsu8VT>9vDj$w zRV8pjsP81&kN$T{1LC-kE9faPk41(aHK%lj8{7 zSz6sNJ=RXeQG|CVnFgtJRF7L zqG^3`J9lDiY}PaUbTc%PHYH4SyFs5A#qlRoxnpi5FtzIku^cS8>VXu3p68N0W;$U< zh4Z+ZJ$ZXzd<-MHi@v~x`t$-Qxua7$x92Xw6pqJ5BkT>6?ZnewKe_YzS)Bh&w~da^ z2(!BD7_b2Dl1Y&0Kt|yvMsXahBt}o$^*_sNA`@xDUJ&=m&?i2ZHtR2^QtL0LyKF$) z@c4H1O9Ob7eZRwB{AkeT$tJlbA342nQ?eR-_0wlp46$gu-$hqJZQAdJUAmeXa-7lk z`9%&NZ`a`*?qnCOIynMYcCU&Z7l&2-ZWxWvO!+-{j8Qv8@m7pz52V-)68WjZsnO{f za)}$Uzsct)K8Zqh-6C`vmv|(uT&<-$%1Kxs(7u^#fjb#*M|9a4m+Br!W!@e~F}iZs zrmd*2+qRiBVZd?Lc%+6J5Ar?_&~0RUt6MY704#Hn}mZ#{2-6} zgTxhIMDr0*r0>~=Wo(OZqDOAe0?zs?C8al+`?2C zlfuxBjF0Hs_&?a4{meywxx$Z|_#DJxWy73+!r|p@za2N|Ovw2Od!(Zdf;pt${`^=0 zX-se@P5TpE-%nIFqJ90ivFSCVoiN#m5b?!aO8?Hehshbpm!cwPMCcQD()^c1}%p@hOs=054Bv>-ybP@V`^kKK58 z(j>bhlPAX}W)P$I{Z_ISH8mApyHfOxsM%DH8)LfWhN&6dP}igso)mt3lBAw-$+o_w zo@pyfeWj8?XCGav%cS}DdoV0ds2uz}v3i2$;5TbkLVmqgCB#+$YT$UCO@?YYn|IWP zO{)49AU+#LmuZ)S{uT~|&~hn@@x^5rx)V$v35myy6nH);q{)P*8TgBQv;RjJ;fw^A3&W*}fnz zEyPL~E`lj7q1>hFYYwTN6zZ+WHDYxKufQ%983xlb;puS?mn&uwrg0# z3v^*Iq$kg=Wvzaa3}PSm8F2KBr4;T>!bU%l!BaxR03jxiIgX8_G@9Or?5N>Go(~7D zhub$e$xixFJ>fx5a3RKzn^aSMo7U_$7EhmjsdA^vC(5WS-te1r&OjC`O-~+R4}K!4 zPdj)#?)k}JBjM)wP!hURB&tQG8y}>zok&WF2o}QQMOZc*Q{e(CJ2pyodGA=M53arO zog75ZQB9Po#t+)bCf09mwV;-{(bwL%S*mO?F58io(pA27MfdMHs_x0P85QXuX)sRwBAbxIX3>Z7QnMUa!%|aR z+n>0Fw}a|ky(a4UfJr8@r%peJ2^38&zmi=hPfuk~gXuLS)o4pfI|>*KL#s?uR^>6h zP(~kiQl%)^Jrnfs5=*~GpJ-6L(9%B6b80Y~uvh(1)$gGKJ`Wr4C(zPD=al(`0R#J zld~Fq!GS#n)T(C&EMnJAB-6!9X2uJ|uPVv`)z$fN=-pA?I(Yp|*&NW?$*KgxSqzo}w|cdg3s9F*sGWMf z1+Ty=l$fWw;iJtntc9r7u)Z8J4D)iZW)^bQHIUR<8WlWr=1D`S?s5m^%&J0u0G6YW z%&uw%8`A+BRonv5Mz(H@tgoU-8{uZ8r;QcGF1^)7pnQ20FRIY059hwWrIjkTmWqTZ zLN(Y;yzh)K>yr97nKXu7qU->d_Q(OI?nZstk#{^%x>zlg?5$PswhLXr#l2;=)^OK{ zUJ9V_pcJEvTDX?ktHsOMd`5J8)UwX4`M0|lkvFY!94&k>59k{cP~2$K=&EEX&%v4d zO*rHkvq#;bzdNNwv_4AU+;H66UTWVbwi&m`Odx?YA#GFOKA2r$dW|f1V4c)$ zIA;?FZ$skG5@L2k$y9rKzhN~?ZzkB1X^qV_gv#she4@m#T?%;!YX6T3VwAHD+e<+f z6KoM3%J|j-O8b@H58Qoqrjh#buMH1SE*(R(5Y)#Wmfci7q{htyeb@*O z;LzJ;sj`S?sG}7Mo$x(FzT1`Y9<(Rv*+z+6(2)Y$+2I?*A@f-oLo5*d8BJ)k37<%C zBch;sYCABj4sLSlAX#0EgBl^I6!!ckZT5@@4i@yup_G!T5Sj|-k<+lXo%FX6{{~gY zvEXo=v{t^*Y3G7iS=zU|%BMmJs4KmClNL!mbd-czI0VIkhC^dItO)XbY)zQ$AE{D* zen_T-o${`VVQ1>-m{8Nvt&&W>-6xki<;Ml2die&vkVA6ga#u4^7e$TL7l%!7X6!me zEs^rP9Lf5j_D#-$D^;Y{B<+Lcxw|HWIOuPZr+fHz5wQHeOxR~am;$DQ2ZB%&>7upr z)WwlIJU}ghkGw(B7a*ll`9f$$rL0-RNM&P?5JS1v+B*9v&OvvIx67Mwh^q79sa{IN s#N~yt7Y{`o+LIwTohNj!Ii_Zp-fNiY#ahhYUFJ=0df8FCN_V65e|}O@l>h($ literal 0 HcmV?d00001 diff --git a/package.bat b/package.bat new file mode 100644 index 0000000000..4aed279e8e --- /dev/null +++ b/package.bat @@ -0,0 +1,22 @@ +mkdir build +mkdir build\rpcs3 +copy bin\rpcs3-*.exe build\rpcs3 +copy bin\soft-oal.dll build\rpcs3 +copy bin\make_fself.cmd build\rpcs3 + +mkdir build\rpcs3\dev_hdd1 +xcopy /e bin\dev_hdd1 build\rpcs3\dev_hdd1 + +mkdir build\rpcs3\dev_hdd0 +xcopy /e bin\dev_hdd0 build\rpcs3\dev_hdd0 + +mkdir build\rpcs3\dev_flash +xcopy /e bin\dev_flash build\rpcs3\dev_flash + +mkdir build\rpcs3\dev_usb000 +xcopy /e bin\dev_usb000 build\rpcs3\dev_usb000 + +for /f "delims=" %%%%a in ('git describe') do @set gitrev=%%%%a + +cd build +7z a -mx9 ..\rpcs3-%%gitrev%%-windows-x86_64.7z rpcs3 \ No newline at end of file From ba29a19e8278f049ed9c9c7b7fa9d37af57a4733 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 4 Jul 2014 12:15:43 +0200 Subject: [PATCH 109/499] make script runnable locally --- package.bat | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.bat b/package.bat index 4aed279e8e..0378b1ee2a 100644 --- a/package.bat +++ b/package.bat @@ -16,7 +16,8 @@ xcopy /e bin\dev_flash build\rpcs3\dev_flash mkdir build\rpcs3\dev_usb000 xcopy /e bin\dev_usb000 build\rpcs3\dev_usb000 -for /f "delims=" %%%%a in ('git describe') do @set gitrev=%%%%a +for /f "delims=" %%a in ('git describe') do @set gitrev=%%a cd build -7z a -mx9 ..\rpcs3-%%gitrev%%-windows-x86_64.7z rpcs3 \ No newline at end of file +7z a -mx9 ..\rpcs3-%gitrev%-windows-x86_64.7z rpcs3 +cd .. \ No newline at end of file From 061fe50835aea22acbf764a60b1cd160fc28171a Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 4 Jul 2014 13:13:47 +0200 Subject: [PATCH 110/499] don't prompt for xcopy don't ask whether to override files when copying them for packaging --- package.bat | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.bat b/package.bat index 0378b1ee2a..8d6fe2cbe6 100644 --- a/package.bat +++ b/package.bat @@ -5,19 +5,19 @@ copy bin\soft-oal.dll build\rpcs3 copy bin\make_fself.cmd build\rpcs3 mkdir build\rpcs3\dev_hdd1 -xcopy /e bin\dev_hdd1 build\rpcs3\dev_hdd1 +xcopy /Y /e bin\dev_hdd1 build\rpcs3\dev_hdd1 mkdir build\rpcs3\dev_hdd0 -xcopy /e bin\dev_hdd0 build\rpcs3\dev_hdd0 +xcopy /Y /e bin\dev_hdd0 build\rpcs3\dev_hdd0 mkdir build\rpcs3\dev_flash -xcopy /e bin\dev_flash build\rpcs3\dev_flash +xcopy /Y /e bin\dev_flash build\rpcs3\dev_flash mkdir build\rpcs3\dev_usb000 -xcopy /e bin\dev_usb000 build\rpcs3\dev_usb000 +xcopy /Y /e bin\dev_usb000 build\rpcs3\dev_usb000 for /f "delims=" %%a in ('git describe') do @set gitrev=%%a cd build 7z a -mx9 ..\rpcs3-%gitrev%-windows-x86_64.7z rpcs3 -cd .. \ No newline at end of file +cd .. From 6a6fbea5ee16a2116b7b24f52da116ea424e3e56 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 5 Jul 2014 04:01:49 +0800 Subject: [PATCH 111/499] RSX : comment out code for NV4097_SET_SCULL_CONTROL and add LOG_WARNING --- rpcs3/Emu/GS/RSXThread.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 4a47ead68b..8115eaf03f 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1232,12 +1232,17 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_SCULL_CONTROL: { + if (ARGS(0)) + LOG_WARNING(RSX, "NV4097_SET_SCULL_CONTROL: %x", ARGS(0)); + + /* This is stencil culling , nothing to do with stencil masking on regular color or depth buffer const u32 a0 = ARGS(0); m_set_stencil_func = m_set_stencil_func_ref = m_set_stencil_func_mask = true; m_stencil_func = a0 & 0xffff; m_stencil_func_ref = (a0 >> 16) & 0xff; m_stencil_func_mask = (a0 >> 24) & 0xff; + */ } break; From 1fc3654ca424e8eab9b345e07596f609be75e229 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 5 Jul 2014 04:07:15 +0800 Subject: [PATCH 112/499] Comment style change --- rpcs3/Emu/GS/RSXThread.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 8115eaf03f..8901fab043 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1235,14 +1235,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 if (ARGS(0)) LOG_WARNING(RSX, "NV4097_SET_SCULL_CONTROL: %x", ARGS(0)); - /* This is stencil culling , nothing to do with stencil masking on regular color or depth buffer - const u32 a0 = ARGS(0); - m_set_stencil_func = m_set_stencil_func_ref = m_set_stencil_func_mask = true; + //This is stencil culling , nothing to do with stencil masking on regular color or depth buffer + //const u32 a0 = ARGS(0); + //m_set_stencil_func = m_set_stencil_func_ref = m_set_stencil_func_mask = true; - m_stencil_func = a0 & 0xffff; - m_stencil_func_ref = (a0 >> 16) & 0xff; - m_stencil_func_mask = (a0 >> 24) & 0xff; - */ + //m_stencil_func = a0 & 0xffff; + //m_stencil_func_ref = (a0 >> 16) & 0xff; + //m_stencil_func_mask = (a0 >> 24) & 0xff; } break; From 9ede2d675384a66904edac00c0ce389c7da083b1 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 6 Jul 2014 00:02:59 +0800 Subject: [PATCH 113/499] RSX blending MRT and cellResc 512MB io address space changes --- rpcs3/Emu/GS/GCM.h | 5 +++++ rpcs3/Emu/GS/GL/GLGSRender.cpp | 2 +- rpcs3/Emu/GS/RSXThread.cpp | 8 +++----- rpcs3/Emu/GS/RSXThread.h | 9 +++++++++ rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 20 +++++++++++++++++--- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 2 +- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index cff6b5a3d1..1b444ae079 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -68,6 +68,11 @@ enum CELL_GCM_SMOOTH = 0x1D01, }; +enum +{ + CELL_GCM_SYSTEM_MODE_IOMAP_512MB = 1, +}; + // GCM Texture enum { diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index a5d9e75731..8022d6864e 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -883,7 +883,7 @@ void GLGSRender::ExecCMD() Enable(m_set_depth_test, GL_DEPTH_TEST); Enable(m_set_alpha_test, GL_ALPHA_TEST); Enable(m_set_depth_bounds_test, GL_DEPTH_BOUNDS_TEST_EXT); - Enable(m_set_blend, GL_BLEND); + Enable(m_set_blend || m_set_blend_mrt1 || m_set_blend_mrt2 || m_set_blend_mrt3, GL_BLEND); Enable(m_set_logic_op, GL_LOGIC_OP); Enable(m_set_cull_face, GL_CULL_FACE); Enable(m_set_dither, GL_DITHER); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 8901fab043..d028acf755 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -547,11 +547,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 case NV4097_SET_BLEND_ENABLE_MRT: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_BLEND_ENABLE_MRT: %x", ARGS(0)); - - // TODO: - // (cmd)[1] = CELL_GCM_ENDIAN_SWAP(((mrt1) << 1) | ((mrt2) << 2) | ((mrt3) << 3)); + m_set_blend_mrt1 = ARGS(0) & 0x02 ? true : false; + m_set_blend_mrt2 = ARGS(0) & 0x04 ? true : false; + m_set_blend_mrt3 = ARGS(0) & 0x08 ? true : false; } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 6fb367dc4f..10c8ef83bb 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -269,6 +269,9 @@ public: u8 m_blend_color_g; u8 m_blend_color_b; u8 m_blend_color_a; + bool m_set_blend_mrt1; + bool m_set_blend_mrt2; + bool m_set_blend_mrt3; // Stencil Test bool m_set_stencil_test; @@ -440,6 +443,9 @@ protected: m_set_alpha_test = false; m_set_depth_bounds_test = false; m_set_blend = false; + m_set_blend_mrt1 = false; + m_set_blend_mrt2 = false; + m_set_blend_mrt3 = false; m_set_logic_op = false; m_set_cull_face = false; m_set_dither = false; @@ -518,6 +524,9 @@ protected: m_set_front_polygon_mode = false; m_set_back_polygon_mode = false; m_set_blend = false; + m_set_blend_mrt1 = false; + m_set_blend_mrt2 = false; + m_set_blend_mrt3 = false; m_set_blend_sfactor = false; m_set_blend_dfactor = false; m_set_blend_equation = false; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index f91232d0c4..72f81606ae 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -16,6 +16,7 @@ extern Module *cellGcmSys = nullptr; u32 local_size = 0; u32 local_addr = 0; +u32 system_mode = 0; enum { @@ -311,7 +312,17 @@ int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) cellGcmSys->Warning("*** local memory(addr=0x%x, size=0x%x)", local_addr, local_size); InitOffsetTable(); - Memory.MemoryBlocks.push_back(Memory.RSXIOMem.SetRange(0x50000000, 0x10000000/*256MB*/));//TODO: implement allocateAdressSpace in memoryBase + if (system_mode == CELL_GCM_SYSTEM_MODE_IOMAP_512MB) + { + cellGcmSys->Warning("cellGcmInit(): 512MB io address space used"); + Memory.MemoryBlocks.push_back(Memory.RSXIOMem.SetRange(0x50000000, 0x20000000/*512MB*/));//TODO: implement allocateAdressSpace in memoryBase + } + else + { + cellGcmSys->Warning("cellGcmInit(): 256MB io address space used"); + Memory.MemoryBlocks.push_back(Memory.RSXIOMem.SetRange(0x50000000, 0x10000000/*256MB*/));//TODO: implement allocateAdressSpace in memoryBase + } + if(cellGcmMapEaIoAddress(ioAddress, 0, ioSize) != CELL_OK) { Memory.MemoryBlocks.pop_back(); @@ -729,9 +740,12 @@ u64 cellGcmGetVBlankCount() return Emu.GetGSManager().GetRender().m_vblank_count; } -int cellGcmInitSystemMode() +int cellGcmInitSystemMode(u64 mode) { - UNIMPLEMENTED_FUNC(cellGcmSys); + cellGcmSys->Log("cellGcmInitSystemMode(mode=0x%x)", mode); + + system_mode = mode; + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 5b0713d74f..66edaf3dfa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -537,7 +537,7 @@ void SetupRsxRenderingStates(mem_ptr_t& cntxt) r.m_set_depth_mask = true; r.m_depth_mask = 0; r.m_set_alpha_test = false; r.m_set_blend = false; - //GcmCmdTypePrefix::cellGcmSetBlendEnableMrt(con, CELL_GCM_FALSE, CELL_GCM_FALSE, CELL_GCM_FALSE); + r.m_set_blend_mrt1 = r.m_set_blend_mrt2 = r.m_set_blend_mrt3 = false; r.m_set_logic_op = false; r.m_set_cull_face = false; r.m_set_depth_bounds_test = false; From d16953d3924de984e4aaf15878ef8d99a8ac9f86 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 5 Jul 2014 23:23:34 +0400 Subject: [PATCH 114/499] SPU Decrementer --- rpcs3/Emu/Cell/SPUThread.h | 138 +++++++++++++++++++++++-------------- 1 file changed, 85 insertions(+), 53 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index dbf9a8ec8f..9249311629 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -325,6 +325,9 @@ public: EventManager SPUQs; // SPU Queue Mapping SpuGroupInfo* group; // associated SPU Thread Group (null for raw spu) + u64 m_dec_start; // timestamp of writing decrementer value + u32 m_dec_value; // written decrementer value + struct IntrTag { u32 enabled; // 1 == true @@ -937,46 +940,24 @@ public: u32 GetChannelCount(u32 ch) { - u32 count; switch(ch) { - case SPU_WrOutMbox: - return SPU.Out_MBox.GetFreeCount(); - - case SPU_RdInMbox: - count = SPU.In_MBox.GetCount(); - //ConLog.Warning("GetChannelCount(%s) -> %d", spu_ch_name[ch], count); - return count; - - case SPU_WrOutIntrMbox: - LOG_WARNING(Log::SPU, "GetChannelCount(%s) = 0", spu_ch_name[ch]); - return 0; - - case MFC_RdTagStat: - return Prxy.TagStatus.GetCount(); - - case MFC_RdListStallStat: - return StallStat.GetCount(); - - case MFC_WrTagUpdate: - return Prxy.TagStatus.GetCount(); // hack - - case SPU_RdSigNotify1: - return SPU.SNR[0].GetCount(); - - case SPU_RdSigNotify2: - return SPU.SNR[1].GetCount(); - - case MFC_RdAtomicStat: - return Prxy.AtomicStat.GetCount(); + case SPU_WrOutMbox: return SPU.Out_MBox.GetFreeCount(); + case SPU_RdInMbox: return SPU.In_MBox.GetCount(); + case MFC_RdTagStat: return Prxy.TagStatus.GetCount(); + case MFC_RdListStallStat: return StallStat.GetCount(); + case MFC_WrTagUpdate: return Prxy.TagStatus.GetCount(); // hack + case SPU_RdSigNotify1: return SPU.SNR[0].GetCount(); + case SPU_RdSigNotify2: return SPU.SNR[1].GetCount(); + case MFC_RdAtomicStat: return Prxy.AtomicStat.GetCount(); default: + { LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); - break; + return 0; + } } - - return 0; } void WriteChannel(u32 ch, const SPU_GPR_hdr& r) @@ -986,6 +967,7 @@ public: switch(ch) { case SPU_WrOutIntrMbox: + { if (!group) // if RawSPU { if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); @@ -1010,7 +992,7 @@ public: else { u8 code = v >> 24; - if (code < 64) + if (code < 64) { /* ===== sys_spu_thread_send_event ===== */ @@ -1120,47 +1102,67 @@ public: return; } } - break; + break; + } case SPU_WrOutMbox: + { //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); while (!SPU.Out_MBox.Push(v) && !Emu.IsStopped()) Sleep(1); - break; + break; + } case MFC_WrTagMask: + { //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); Prxy.QueryMask.SetValue(v); - break; + break; + } case MFC_WrTagUpdate: + { //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); Prxy.TagStatus.PushUncond(Prxy.QueryMask.GetValue()); - break; + break; + } case MFC_LSA: + { MFC1.LSA.SetValue(v); - break; + break; + } case MFC_EAH: + { MFC1.EAH.SetValue(v); - break; + break; + } case MFC_EAL: + { MFC1.EAL.SetValue(v); - break; + break; + } case MFC_Size: + { MFC1.Size_Tag.SetValue((MFC1.Size_Tag.GetValue() & 0xffff) | (v << 16)); - break; + break; + } case MFC_TagID: + { MFC1.Size_Tag.SetValue((MFC1.Size_Tag.GetValue() & ~0xffff) | (v & 0xffff)); - break; + break; + } + case MFC_Cmd: + { MFC1.CMDStatus.SetValue(v); EnqMfcCmd(MFC1); - break; + break; + } case MFC_WrListStallAck: { @@ -1177,12 +1179,21 @@ public: } StallList[v].MFCArgs = nullptr; ListCmd(temp.lsa, temp.ea, temp.tag, temp.size, temp.cmd, *temp.MFCArgs); + break; + } + + case SPU_WrDec: + { + m_dec_start = get_system_time(); + m_dec_value = v; + break; } - break; default: + { LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); - break; + break; + } } if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); @@ -1196,36 +1207,57 @@ public: switch(ch) { case SPU_RdInMbox: + { while (!SPU.In_MBox.Pop(v) && !Emu.IsStopped()) Sleep(1); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); - break; + break; + } case MFC_RdTagStat: + { while (!Prxy.TagStatus.Pop(v) && !Emu.IsStopped()) Sleep(1); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); - break; + break; + } case SPU_RdSigNotify1: + { while (!SPU.SNR[0].Pop(v) && !Emu.IsStopped()) Sleep(1); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); - break; + break; + } case SPU_RdSigNotify2: + { while (!SPU.SNR[1].Pop(v) && !Emu.IsStopped()) Sleep(1); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); - break; + break; + } case MFC_RdAtomicStat: + { while (!Prxy.AtomicStat.Pop(v) && !Emu.IsStopped()) Sleep(1); - break; + break; + } case MFC_RdListStallStat: + { while (!StallStat.Pop(v) && !Emu.IsStopped()) Sleep(1); - break; + break; + } + + case SPU_RdDec: + { + // decrementer freq is probably 80 MHz + v = m_dec_value - (u32)(get_system_time() - m_dec_start) * 80; + break; + } default: + { LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); - break; + break; + } } if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); From 60f3ed3543b5854b9a062c35140ea50a552fbb90 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 5 Jul 2014 23:24:14 +0400 Subject: [PATCH 115/499] SSPlayer funcs in libmixer --- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 426 +++++++++++++++++++----- rpcs3/Emu/SysCalls/Modules/libmixer.h | 22 +- 2 files changed, 360 insertions(+), 88 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 18618ff190..dc588d5d7e 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -21,8 +21,13 @@ std::mutex mixer_mutex; float mixdata[8*256]; u64 mixcount = 0; +std::vector ssp; + int cellAANAddData(u32 aan_handle, u32 aan_port, u32 offset, u32 addr, u32 samples) { + libmixer->Log("cellAANAddData(handle=%d, port=%d, offset=0x%x, addr=0x%x, samples=%d)", + aan_handle, aan_port, offset, addr, samples); + u32 type = aan_port >> 16; u32 port = aan_port & 0xffff; @@ -40,17 +45,11 @@ int cellAANAddData(u32 aan_handle, u32 aan_port, u32 offset, u32 addr, u32 sampl type = 0; break; } - if (aan_handle == 0x11111111 && samples == 256 && type && offset == 0) + if (aan_handle != 0x11111111 || samples != 256 || !type || offset != 0) { - libmixer->Log("cellAANAddData(handle=0x%x, port=0x%x, offset=0x%x, addr=0x%x, samples=0x%x)", + libmixer->Error("cellAANAddData(handle=%d, port=%d, offset=0x%x, addr=0x%x, samples=%d): invalid parameters", aan_handle, aan_port, offset, addr, samples); - } - else - { - libmixer->Error("cellAANAddData(handle=0x%x, port=0x%x, offset=0x%x, addr=0x%x, samples=0x%x)", - aan_handle, aan_port, offset, addr, samples); - Emu.Pause(); - return CELL_OK; + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; } std::lock_guard lock(mixer_mutex); @@ -109,74 +108,386 @@ int cellAANAddData(u32 aan_handle, u32 aan_port, u32 offset, u32 addr, u32 sampl int cellAANConnect(u32 receive, u32 receivePortNo, u32 source, u32 sourcePortNo) { - libmixer->Error("cellAANConnect(receive=0x%x, receivePortNo=0x%x, source=0x%x, sourcePortNo=0x%x)", + libmixer->Warning("cellAANConnect(receive=%d, receivePortNo=%d, source=%d, sourcePortNo=%d)", receive, receivePortNo, source, sourcePortNo); + + std::lock_guard lock(mixer_mutex); + + if (source >= ssp.size() || !ssp[source].m_created) + { + libmixer->Error("cellAANConnect(): invalid source (%d)", source); + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; + } + + ssp[source].m_connected = true; + return CELL_OK; } int cellAANDisconnect(u32 receive, u32 receivePortNo, u32 source, u32 sourcePortNo) { - libmixer->Error("cellAANDisconnect(receive=0x%x, receivePortNo=0x%x, source=0x%x, sourcePortNo=0x%x)", + libmixer->Warning("cellAANDisconnect(receive=%d, receivePortNo=%d, source=%d, sourcePortNo=%d)", receive, receivePortNo, source, sourcePortNo); + + std::lock_guard lock(mixer_mutex); + + if (source >= ssp.size() || !ssp[source].m_created) + { + libmixer->Error("cellAANDisconnect(): invalid source (%d)", source); + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; + } + + ssp[source].m_connected = false; + return CELL_OK; } int cellSSPlayerCreate(mem32_t handle, mem_ptr_t config) { - libmixer->Error("cellSSPlayerCreate(handle_addr=0x%x, config_addr=0x%x)", + libmixer->Warning("cellSSPlayerCreate(handle_addr=0x%x, config_addr=0x%x)", handle.GetAddr(), config.GetAddr()); + + if (!config.IsGood()) + { + return CELL_EFAULT; + } + + if (config->outputMode != 0 || config->channels - 1 >= 2) + { + libmixer->Error("cellSSPlayerCreate(config.outputMode=%d, config.channels=%d): invalid parameters", + (u32)config->outputMode, (u32)config->channels); + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; + } + + std::lock_guard lock(mixer_mutex); + + SSPlayer p; + p.m_created = true; + p.m_connected = false; + p.m_active = false; + p.m_channels = config->channels; + + ssp.push_back(p); + handle = ssp.size() - 1; return CELL_OK; } int cellSSPlayerRemove(u32 handle) { - libmixer->Error("cellSSPlayerRemove(handle=%d)", handle); + libmixer->Warning("cellSSPlayerRemove(handle=%d)", handle); + + std::lock_guard lock(mixer_mutex); + + if (handle >= ssp.size() || !ssp[handle].m_created) + { + libmixer->Error("cellSSPlayerRemove(): SSPlayer not found (%d)", handle); + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; + } + + ssp[handle].m_active = false; + ssp[handle].m_created = false; + ssp[handle].m_connected = false; + return CELL_OK; } int cellSSPlayerSetWave(u32 handle, mem_ptr_t waveInfo, mem_ptr_t commonInfo) { - libmixer->Error("cellSSPlayerSetWave(handle=%d, waveInfo_addr=0x%x, commonInfo_addr=0x%x)", + libmixer->Warning("cellSSPlayerSetWave(handle=%d, waveInfo_addr=0x%x, commonInfo_addr=0x%x)", handle, waveInfo.GetAddr(), commonInfo.GetAddr()); + + if (!waveInfo.IsGood() || (commonInfo.GetAddr() && !commonInfo.IsGood())) + { + return CELL_EFAULT; + } + + std::lock_guard lock(mixer_mutex); + + if (handle >= ssp.size() || !ssp[handle].m_created) + { + libmixer->Error("cellSSPlayerSetWave(): SSPlayer not found (%d)", handle); + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; + } + + // TODO: check parameters + + ssp[handle].m_addr = waveInfo->addr; + ssp[handle].m_samples = waveInfo->samples; + ssp[handle].m_loop_start = waveInfo->loopStartOffset - 1; + ssp[handle].m_loop_mode = commonInfo.GetAddr() ? commonInfo->loopMode : CELL_SSPLAYER_ONESHOT; + ssp[handle].m_position = waveInfo->startOffset - 1; + return CELL_OK; } int cellSSPlayerPlay(u32 handle, mem_ptr_t info) { - libmixer->Error("cellSSPlayerPlay(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); + libmixer->Warning("cellSSPlayerPlay(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); + + if (!info.IsGood()) + { + return CELL_EFAULT; + } + + std::lock_guard lock(mixer_mutex); + + if (handle >= ssp.size() || !ssp[handle].m_created) + { + libmixer->Error("cellSSPlayerPlay(): SSPlayer not found (%d)", handle); + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; + } + + // TODO: check parameters + + ssp[handle].m_active = true; + ssp[handle].m_level = info->level; + ssp[handle].m_speed = info->speed; + ssp[handle].m_x = info->position.x; + ssp[handle].m_y = info->position.y; + ssp[handle].m_z = info->position.z; + return CELL_OK; } int cellSSPlayerStop(u32 handle, u32 mode) { - libmixer->Error("cellSSPlayerStop(handle=%d, mode=0x%x)", handle, mode); + libmixer->Warning("cellSSPlayerStop(handle=%d, mode=0x%x)", handle, mode); + + std::lock_guard lock(mixer_mutex); + + if (handle >= ssp.size() || !ssp[handle].m_created) + { + libmixer->Error("cellSSPlayerStop(): SSPlayer not found (%d)", handle); + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; + } + + // TODO: transition to stop state + + ssp[handle].m_active = false; + return CELL_OK; } int cellSSPlayerSetParam(u32 handle, mem_ptr_t info) { - libmixer->Error("cellSSPlayerSetParam(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); + libmixer->Warning("cellSSPlayerSetParam(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); + + if (!info.IsGood()) + { + return CELL_EFAULT; + } + + std::lock_guard lock(mixer_mutex); + + if (handle >= ssp.size() || !ssp[handle].m_created) + { + libmixer->Error("cellSSPlayerSetParam(): SSPlayer not found (%d)", handle); + return CELL_LIBMIXER_ERROR_INVALID_PARAMATER; + } + + // TODO: check parameters + + ssp[handle].m_level = info->level; + ssp[handle].m_speed = info->speed; + ssp[handle].m_x = info->position.x; + ssp[handle].m_y = info->position.y; + ssp[handle].m_z = info->position.z; + return CELL_OK; } -s32 cellSSPlayerGetState(u32 handle) +int cellSSPlayerGetState(u32 handle) { - libmixer->Error("cellSSPlayerGetState(handle=%d) -> OFF", handle); + libmixer->Warning("cellSSPlayerGetState(handle=%d)", handle); + + std::lock_guard lock(mixer_mutex); + + if (handle >= ssp.size() || !ssp[handle].m_created) + { + libmixer->Warning("cellSSPlayerGetState(): SSPlayer not found (%d)", handle); + return CELL_SSPLAYER_STATE_ERROR; + } + + if (ssp[handle].m_active) + { + return CELL_SSPLAYER_STATE_ON; + } + return CELL_SSPLAYER_STATE_OFF; } int cellSurMixerCreate(const mem_ptr_t config) { libmixer->Warning("cellSurMixerCreate(config_addr=0x%x)", config.GetAddr()); + surMixer = *config; + + AudioPortConfig& port = m_config.m_ports[SUR_PORT]; + + if (port.m_is_audio_port_opened) + { + return CELL_LIBMIXER_ERROR_FULL; + } + + port.channel = 8; + port.block = 16; + port.attr = 0; + port.level = 1.0f; + + libmixer->Warning("*** audio port opened(default)"); + + port.m_is_audio_port_opened = true; + port.tag = 0; + m_config.m_port_in_use++; + libmixer->Warning("*** surMixer created (ch1=%d, ch2=%d, ch6=%d, ch8=%d)", (u32)surMixer.chStrips1, (u32)surMixer.chStrips2, (u32)surMixer.chStrips6, (u32)surMixer.chStrips8); + + thread t("Surmixer Thread", []() + { + AudioPortConfig& port = m_config.m_ports[SUR_PORT]; + + CPUThread* mixerCb = &Emu.GetCPU().AddThread(CPU_THREAD_PPU); + + mixerCb->SetName("Surmixer Callback"); + + mixcount = 0; + + while (port.m_is_audio_port_opened) + { + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "Surmixer aborted"); + break; + } + + if (mixcount > (port.tag + 15)) // preemptive buffer filling (probably hack) + { + Sleep(1); + continue; + } + + if (port.m_is_audio_port_started) + { + u64 stamp0 = get_system_time(); + + memset(mixdata, 0, sizeof(mixdata)); + if (surMixerCb) mixerCb->ExecAsCallback(surMixerCb, true, surMixerCbArg, mixcount, 256); + + u64 stamp1 = get_system_time(); + + { + std::lock_guard lock(mixer_mutex); + + for (auto& p : ssp) if (p.m_active && p.m_created) + { + float left = 0.0f; + float right = 0.0f; + float speed = fabs(p.m_speed); + float fpos = 0.0f; + for (int i = 0; i < 256; i++) if (p.m_active) + { + u32 pos = p.m_position; + int pos_inc = 0; + if (p.m_speed > 0.0f) // select direction + { + pos_inc = 1; + } + else if (p.m_speed < 0.0f) + { + pos_inc = -1; + } + int shift = i - (int)fpos; // change playback speed (simple and rough) + if (shift > 0) + { + // slow playback + pos_inc = 0; // duplicate one sample at this time + fpos += 1.0f; + fpos += speed; + } + else if (shift < 0) + { + // fast playback + i--; // mix two sample into one at this time + fpos -= 1.0f; + } + else + { + fpos += speed; + } + p.m_position += (u32)pos_inc; + if (p.m_channels == 1) // get mono data + { + mem16_t v(p.m_addr + pos * sizeof(u16)); + left = right = (float)(s16)re16(v.GetValue()) / 0x8000 * p.m_level; + } + else if (p.m_channels == 2) // get stereo data + { + mem16_t v1(p.m_addr + (pos * 2 + 0) * sizeof(u16)); + mem16_t v2(p.m_addr + (pos * 2 + 1) * sizeof(u16)); + left = (float)(s16)re16(v1.GetValue()) / 0x8000 * p.m_level; + right = (float)(s16)re16(v2.GetValue()) / 0x8000 * p.m_level; + } + if (p.m_connected) // mix + { + // TODO: m_x, m_y, m_z ignored + mixdata[i * 8 + 0] += left; + mixdata[i * 8 + 1] += right; + } + if ((p.m_position == p.m_samples && p.m_speed > 0.0f) || + (p.m_position == ~0 && p.m_speed < 0.0f)) // loop or stop + { + if (p.m_loop_mode == CELL_SSPLAYER_LOOP_ON) + { + p.m_position = p.m_loop_start; + } + else if (p.m_loop_mode == CELL_SSPLAYER_ONESHOT_CONT) + { + p.m_position -= (u32)pos_inc; // restore position + } + else // oneshot + { + p.m_active = false; + p.m_position = p.m_loop_start; // TODO: check value + } + } + } + } + } + + u64 stamp2 = get_system_time(); + + auto buf = (be_t*)&Memory[m_config.m_buffer + (128 * 1024 * SUR_PORT) + (mixcount % port.block) * port.channel * 256 * sizeof(float)]; + + for (u32 i = 0; i < (sizeof(mixdata) / sizeof(float)); i++) + { + // reverse byte order + buf[i] = mixdata[i]; + } + + u64 stamp3 = get_system_time(); + + //ConLog.Write("Libmixer perf: start=%lld (cb=%lld, ssp=%lld, finalize=%lld)", stamp0 - m_config.start_time, stamp1 - stamp0, stamp2 - stamp1, stamp3 - stamp2); + } + + mixcount++; + } + + { + std::lock_guard lock(mixer_mutex); + ssp.clear(); + } + + Emu.GetCPU().RemoveThread(mixerCb->GetId()); + }); + t.detach(); + return CELL_OK; } int cellSurMixerGetAANHandle(mem32_t handle) { - libmixer->Warning("cellSurMixerGetAANHandle(handle_addr=0x%x) -> 0x11111111", handle.GetAddr()); + libmixer->Warning("cellSurMixerGetAANHandle(handle_addr=0x%x) -> %d", handle.GetAddr(), 0x11111111); handle = 0x11111111; return CELL_OK; } @@ -212,72 +523,9 @@ int cellSurMixerStart() if (port.m_is_audio_port_opened) { - return CELL_LIBMIXER_ERROR_FULL; + port.m_is_audio_port_started = true; } - port.channel = 8; - port.block = 16; - port.attr = 0; - port.level = 1.0f; - - libmixer->Warning("*** audio port opened(default)"); - - port.m_is_audio_port_opened = true; - port.tag = 0; - m_config.m_port_in_use++; - port.m_is_audio_port_started = true; - - thread t("Surmixer Thread", []() - { - AudioPortConfig& port = m_config.m_ports[SUR_PORT]; - - CPUThread* mixerCb = &Emu.GetCPU().AddThread(CPU_THREAD_PPU); - - mixerCb->SetName("Surmixer Callback"); - - mixcount = 0; - - while (port.m_is_audio_port_started) - { - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "Surmixer aborted"); - return; - } - - if (mixcount > (port.tag + 15)) // preemptive buffer filling (probably hack) - { - Sleep(1); - continue; - } - - u64 stamp0 = get_system_time(); - - memset(mixdata, 0, sizeof(mixdata)); - mixerCb->ExecAsCallback(surMixerCb, true, surMixerCbArg, mixcount, 256); - - u64 stamp1 = get_system_time(); - - auto buf = (be_t*)&Memory[m_config.m_buffer + (128 * 1024 * SUR_PORT) + (mixcount % port.block) * port.channel * 256 * sizeof(float)]; - - for (u32 i = 0; i < (sizeof(mixdata) / sizeof(float)); i++) - { - // reverse byte order - buf[i] = mixdata[i]; - } - - u64 stamp2 = get_system_time(); - - //ConLog.Write("Libmixer perf: start=%d (cb=%d, finalize=%d)", - //stamp0 - m_config.start_time, stamp1-stamp0, stamp2-stamp1); - - mixcount++; - } - - Emu.GetCPU().RemoveThread(mixerCb->GetId()); - }); - t.detach(); - return CELL_OK; } @@ -336,7 +584,15 @@ int cellSurMixerChStripSetParameter(u32 type, u32 index, mem_ptr_tError("cellSurMixerPause(type=%d)", type); + libmixer->Warning("cellSurMixerPause(type=%d)", type); + + AudioPortConfig& port = m_config.m_ports[SUR_PORT]; + + if (port.m_is_audio_port_opened) + { + port.m_is_audio_port_started = false; + } + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.h b/rpcs3/Emu/SysCalls/Modules/libmixer.h index 649dcda2f7..c5cac3baf2 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.h +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.h @@ -119,7 +119,7 @@ struct CellSSPlayerConfig struct CellSSPlayerWaveParam { - void *addr; + be_t addr; be_t format; be_t samples; be_t loopStartOffset; @@ -158,10 +158,26 @@ struct CellSurMixerConfig struct CellSurMixerChStripParam { be_t param; - void *attribute; + be_t attribute_addr; be_t dBSwitch; be_t floatVal; be_t intVal; }; -CellSSPlayerWaveParam current_SSPlayerWaveParam; \ No newline at end of file +struct SSPlayer +{ + bool m_created; // SSPlayerCreate/Remove + bool m_connected; // AANConnect/Disconnect + bool m_active; // SSPlayerPlay/Stop + u32 m_channels; // 1 or 2 + u32 m_addr; + u32 m_samples; + u32 m_loop_start; + u32 m_loop_mode; + u32 m_position; + float m_level; + float m_speed; + float m_x; + float m_y; + float m_z; +}; \ No newline at end of file From 08d61163eae615172ff89b077893daefb41d3d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Wed, 25 Jun 2014 00:38:34 +0200 Subject: [PATCH 116/499] Removed external functions from SysCalls.h * Replace `int` with `s32` as return type for syscalls. * Renamed `SC_Something.*` files with the proper lv2 name `sys_something.*`. * Moving away from the lv2, those functions and folders that doesn't correspond to lv2 functions. E.g. module functions from sys_io, sysPrxForUser, cellGcmSys. * Splitted some files (memory -> memory+mmapper) and merged other ones (event+event_flag ->event, spu+spu_thread -> spu), according to common sense, PSDevWiki docs, and checking firmware files. * Removed external functions from `SysCalls.h`. NOTE: What should we do about: cellGcmCallback? It's not a lv2 syscall but it appears on the sc_table and it is actually called in games. Is this some kind of hack? --- rpcs3/Emu/Cell/RawSPUThread.cpp | 4 +- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 4 +- rpcs3/Emu/Cell/SPUThread.cpp | 4 +- rpcs3/Emu/Cell/SPUThread.h | 2 +- rpcs3/Emu/GS/RSXThread.cpp | 2 +- .../SysCalls/{lv2 => Modules}/SC_Keyboard.cpp | 0 .../SysCalls/{lv2 => Modules}/SC_Mouse.cpp | 0 .../Emu/SysCalls/{lv2 => Modules}/SC_Pad.cpp | 0 rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 25 + rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.h | 3 + rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 46 +- rpcs3/Emu/SysCalls/Modules/sys_io.cpp | 40 + rpcs3/Emu/SysCalls/SysCalls.cpp | 2 +- rpcs3/Emu/SysCalls/SysCalls.h | 347 +------- rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h | 1 - rpcs3/Emu/SysCalls/lv2/SC_Lwcond.h | 27 - rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.h | 82 -- rpcs3/Emu/SysCalls/lv2/SC_Spinlock.h | 6 - rpcs3/Emu/SysCalls/lv2/SC_Time.h | 4 - rpcs3/Emu/SysCalls/lv2/SC_Timer.h | 23 - rpcs3/Emu/SysCalls/lv2/SC_sys_spu.cpp | 23 - .../lv2/{SC_FileSystem.cpp => lv2Fs.cpp} | 68 +- .../SysCalls/lv2/{SC_FileSystem.h => lv2Fs.h} | 34 + .../lv2/{SC_Condition.cpp => sys_cond.cpp} | 14 +- .../lv2/{SC_Condition.h => sys_cond.h} | 12 +- rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 751 ++++++++++++++++++ .../lv2/{SC_Event_flag.h => sys_event.h} | 23 + .../{SC_Interrupt.cpp => sys_interrupt.cpp} | 8 +- rpcs3/Emu/SysCalls/lv2/sys_interrupt.h | 7 + .../lv2/{SC_Lwcond.cpp => sys_lwcond.cpp} | 16 +- rpcs3/Emu/SysCalls/lv2/sys_lwcond.h | 35 + .../lv2/{SC_Lwmutex.cpp => sys_lwmutex.cpp} | 12 +- .../lv2/{SC_Lwmutex.h => sys_lwmutex.h} | 7 + rpcs3/Emu/SysCalls/lv2/sys_memory.cpp | 169 ++++ .../lv2/{SC_Memory.h => sys_memory.h} | 130 ++- rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp | 263 ++++++ rpcs3/Emu/SysCalls/lv2/sys_mmapper.h | 35 + .../lv2/{SC_Mutex.cpp => sys_mutex.cpp} | 12 +- .../SysCalls/lv2/{SC_Mutex.h => sys_mutex.h} | 8 + .../{SC_PPU_Thread.cpp => sys_ppu_thread.cpp} | 33 +- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h | 28 + .../lv2/{SC_Process.cpp => sys_process.cpp} | 26 +- .../lv2/{SC_Process.h => sys_process.h} | 24 +- .../SysCalls/lv2/{SC_PRX.cpp => sys_prx.cpp} | 2 +- .../Emu/SysCalls/lv2/{SC_PRX.h => sys_prx.h} | 0 .../SysCalls/lv2/{SC_RSX.cpp => sys_rsx.cpp} | 25 +- rpcs3/Emu/SysCalls/lv2/sys_rsx.h | 15 + .../lv2/{SC_Rwlock.cpp => sys_rwlock.cpp} | 18 +- .../lv2/{SC_Rwlock.h => sys_rwlock.h} | 10 + .../{SC_Semaphore.cpp => sys_semaphore.cpp} | 14 +- .../lv2/{SC_Semaphore.h => sys_semaphore.h} | 10 +- .../lv2/{SC_Spinlock.cpp => sys_spinlock.cpp} | 4 +- rpcs3/Emu/SysCalls/lv2/sys_spinlock.h | 12 + .../lv2/{SC_SPU_Thread.cpp => sys_spu.cpp} | 99 ++- rpcs3/Emu/SysCalls/lv2/sys_spu.h | 121 +++ .../lv2/{SC_Time.cpp => sys_time.cpp} | 6 +- rpcs3/Emu/SysCalls/lv2/sys_time.h | 11 + .../lv2/{SC_Timer.cpp => sys_timer.cpp} | 20 +- rpcs3/Emu/SysCalls/lv2/sys_timer.h | 33 + .../lv2/{SC_Trace.cpp => sys_trace.cpp} | 20 +- rpcs3/Emu/SysCalls/lv2/sys_trace.h | 13 + .../SysCalls/lv2/{SC_TTY.cpp => sys_tty.cpp} | 4 +- rpcs3/Emu/SysCalls/lv2/sys_tty.h | 4 + .../SysCalls/lv2/{SC_VM.cpp => sys_vm.cpp} | 28 +- rpcs3/Emu/SysCalls/lv2/sys_vm.h | 31 + rpcs3/Emu/event.h | 2 +- rpcs3/Gui/DisAsmFrame.cpp | 4 +- rpcs3/Gui/InterpreterDisAsm.cpp | 4 +- rpcs3/emucore.vcxproj | 90 ++- rpcs3/emucore.vcxproj.filters | 246 +++--- 73 files changed, 2243 insertions(+), 968 deletions(-) rename rpcs3/Emu/SysCalls/{lv2 => Modules}/SC_Keyboard.cpp (100%) rename rpcs3/Emu/SysCalls/{lv2 => Modules}/SC_Mouse.cpp (100%) rename rpcs3/Emu/SysCalls/{lv2 => Modules}/SC_Pad.cpp (100%) delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Lwcond.h delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.h delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Spinlock.h delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Time.h delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Timer.h delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_sys_spu.cpp rename rpcs3/Emu/SysCalls/lv2/{SC_FileSystem.cpp => lv2Fs.cpp} (90%) rename rpcs3/Emu/SysCalls/lv2/{SC_FileSystem.h => lv2Fs.h} (53%) rename rpcs3/Emu/SysCalls/lv2/{SC_Condition.cpp => sys_cond.cpp} (94%) rename rpcs3/Emu/SysCalls/lv2/{SC_Condition.h => sys_cond.h} (54%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_event.cpp rename rpcs3/Emu/SysCalls/lv2/{SC_Event_flag.h => sys_event.h} (50%) rename rpcs3/Emu/SysCalls/lv2/{SC_Interrupt.cpp => sys_interrupt.cpp} (91%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_interrupt.h rename rpcs3/Emu/SysCalls/lv2/{SC_Lwcond.cpp => sys_lwcond.cpp} (93%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_lwcond.h rename rpcs3/Emu/SysCalls/lv2/{SC_Lwmutex.cpp => sys_lwmutex.cpp} (95%) rename rpcs3/Emu/SysCalls/lv2/{SC_Lwmutex.h => sys_lwmutex.h} (81%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_memory.cpp rename rpcs3/Emu/SysCalls/lv2/{SC_Memory.h => sys_memory.h} (55%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_mmapper.h rename rpcs3/Emu/SysCalls/lv2/{SC_Mutex.cpp => sys_mutex.cpp} (95%) rename rpcs3/Emu/SysCalls/lv2/{SC_Mutex.h => sys_mutex.h} (80%) rename rpcs3/Emu/SysCalls/lv2/{SC_PPU_Thread.cpp => sys_ppu_thread.cpp} (87%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h rename rpcs3/Emu/SysCalls/lv2/{SC_Process.cpp => sys_process.cpp} (93%) rename rpcs3/Emu/SysCalls/lv2/{SC_Process.h => sys_process.h} (78%) rename rpcs3/Emu/SysCalls/lv2/{SC_PRX.cpp => sys_prx.cpp} (99%) rename rpcs3/Emu/SysCalls/lv2/{SC_PRX.h => sys_prx.h} (100%) rename rpcs3/Emu/SysCalls/lv2/{SC_RSX.cpp => sys_rsx.cpp} (74%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_rsx.h rename rpcs3/Emu/SysCalls/lv2/{SC_Rwlock.cpp => sys_rwlock.cpp} (91%) rename rpcs3/Emu/SysCalls/lv2/{SC_Rwlock.h => sys_rwlock.h} (86%) rename rpcs3/Emu/SysCalls/lv2/{SC_Semaphore.cpp => sys_semaphore.cpp} (92%) rename rpcs3/Emu/SysCalls/lv2/{SC_Semaphore.h => sys_semaphore.h} (60%) rename rpcs3/Emu/SysCalls/lv2/{SC_Spinlock.cpp => sys_spinlock.cpp} (94%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_spinlock.h rename rpcs3/Emu/SysCalls/lv2/{SC_SPU_Thread.cpp => sys_spu.cpp} (86%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_spu.h rename rpcs3/Emu/SysCalls/lv2/{SC_Time.cpp => sys_time.cpp} (92%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_time.h rename rpcs3/Emu/SysCalls/lv2/{SC_Timer.cpp => sys_timer.cpp} (86%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_timer.h rename rpcs3/Emu/SysCalls/lv2/{SC_Trace.cpp => sys_trace.cpp} (80%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_trace.h rename rpcs3/Emu/SysCalls/lv2/{SC_TTY.cpp => sys_tty.cpp} (85%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_tty.h rename rpcs3/Emu/SysCalls/lv2/{SC_VM.cpp => sys_vm.cpp} (92%) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_vm.h diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 2a0097cc3b..9d70b81801 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -2,8 +2,8 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/lv2/SC_Lwmutex.h" -#include "Emu/SysCalls/lv2/SC_Event_flag.h" +#include "Emu/SysCalls/lv2/sys_lwmutex.h" +#include "Emu/SysCalls/lv2/sys_event.h" #include "Emu/Cell/RawSPUThread.h" diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 85d106e804..d38911b110 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -2,8 +2,8 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/lv2/SC_Lwmutex.h" -#include "Emu/SysCalls/lv2/SC_Event_flag.h" +#include "Emu/SysCalls/lv2/sys_lwmutex.h" +#include "Emu/SysCalls/lv2/sys_event.h" #include "SPUInstrTable.h" #include "SPUDisAsm.h" diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index c8fa04746b..57095be048 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -2,8 +2,8 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/lv2/SC_Lwmutex.h" -#include "Emu/SysCalls/lv2/SC_Event_flag.h" +#include "Emu/SysCalls/lv2/sys_lwmutex.h" +#include "Emu/SysCalls/lv2/sys_event.h" #include "Emu/Cell/SPUThread.h" diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 9249311629..0ef23c72ec 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -1,7 +1,7 @@ #pragma once #include "PPCThread.h" #include "Emu/event.h" -#include "Emu/SysCalls/lv2/SC_SPU_Thread.h" +#include "Emu/SysCalls/lv2/sys_spu.h" #include "MFC.h" #include "Emu/SysCalls/ErrorCodes.h" #include diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index d028acf755..a20fa52c21 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -3,7 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "RSXThread.h" -#include "Emu/SysCalls/lv2/SC_Time.h" +#include "Emu/SysCalls/lv2/sys_time.h" #define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count) : Memory.Read32(Memory.RSXIOMem.GetStartAddr() + m_ctrl->get + (4*(x+1)))) diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp similarity index 100% rename from rpcs3/Emu/SysCalls/lv2/SC_Keyboard.cpp rename to rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp similarity index 100% rename from rpcs3/Emu/SysCalls/lv2/SC_Mouse.cpp rename to rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp similarity index 100% rename from rpcs3/Emu/SysCalls/lv2/SC_Pad.cpp rename to rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 72f81606ae..0b28f4d773 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -1149,6 +1149,31 @@ int cellGcmSetTile(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u8 co //---------------------------------------------------------------------------- +// TODO: This function was originally located in lv2/SC_GCM and appears in RPCS3 as a lv2 syscall with id 1023, +// which according to lv2 dumps isn't the case. So, is this a proper place for this function? + +int cellGcmCallback(u32 context_addr, u32 count) +{ + GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); + + CellGcmContextData& ctx = (CellGcmContextData&)Memory[context_addr]; + CellGcmControl& ctrl = (CellGcmControl&)Memory[gcm_info.control_addr]; + + const s32 res = ctx.current - ctx.begin - ctrl.put; + + if(res > 0) Memory.Copy(ctx.begin, ctx.current - res, res); + + ctx.current = ctx.begin + res; + + //InterlockedExchange64((volatile long long*)((u8*)&ctrl + offsetof(CellGcmControl, put)), (u64)(u32)re(res)); + ctrl.put = res; + ctrl.get = 0; + + return CELL_OK; +} + +//---------------------------------------------------------------------------- + void cellGcmSys_init() { // Data Retrieval diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 66edaf3dfa..fdd633f28d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -5,6 +5,7 @@ #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" +#include "cellSysutil.h" #include "cellResc.h" //void cellResc_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 304f2fd22a..9f70053a04 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -199,7 +199,7 @@ int cellVideoOutGetResolution(u32 resolutionId, mem_ptr_tWarning("cellVideoOutConfigure(videoOut=%d, config_addr=0x%x, option_addr=0x%x, waitForEvent=0x%x)", videoOut, config_addr, option_addr, waitForEvent); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.h b/rpcs3/Emu/SysCalls/Modules/cellSysutil.h index c701590692..5a82805bd8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.h @@ -213,3 +213,6 @@ struct CellHddGameCBResult be_t invalidMsg_addr; // char* be_t reserved_addr; // void* }; + +// SysCalls +s32 cellVideoOutConfigure(u32 videoOut, u32 config_addr, u32 option_addr, u32 waitForEvent); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 3f4c4f82c4..48db1ef644 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -13,7 +13,7 @@ #include "Loader/TRP.h" #include "Loader/TROPUSR.h" -#include "Emu/SysCalls/lv2/SC_Time.h" +#include "Emu/SysCalls/lv2/sys_time.h" #include #include diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index e1d4532319..2908525db2 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -7,7 +7,7 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsStreamMemory.h" -#include "Emu/SysCalls/lv2/SC_SPU_Thread.h" +#include "Emu/SysCalls/lv2/sys_spu.h" #include "Loader/ELF.h" #include "Emu/Cell/RawSPUThread.h" @@ -15,6 +15,49 @@ //Module sysPrxForUser("sysPrxForUser", sysPrxForUser_init); Module *sysPrxForUser = nullptr; +struct HeapInfo +{ + u32 heap_addr; + u32 align; + u32 size; + + HeapInfo(u32 _heap_addr, u32 _align, u32 _size) + : heap_addr(_heap_addr) + , align(_align) + , size(_size) + { + } +}; + +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)); + sysPrxForUser->Warning("*** sys_heap created: id = %d", heap_id); + return heap_id; +} + +int sys_heap_malloc(const u32 heap_id, const u32 size) +{ + sysPrxForUser->Warning("sys_heap_malloc(heap_id=%d, size=0x%x)", heap_id, size); + + HeapInfo* heap; + if(!sysPrxForUser->CheckId(heap_id, heap)) return CELL_ESRCH; + + return Memory.Alloc(size, 1); +} + +int _sys_heap_memalign(u32 heap_id, u32 align, u32 size) +{ + sysPrxForUser->Warning("_sys_heap_memalign(heap_id=%d, align=0x%x, size=0x%x)", heap_id, align, size); + + HeapInfo* heap; + if(!sysPrxForUser->CheckId(heap_id, heap)) return CELL_ESRCH; + + return Memory.Alloc(size, align); +} + void sys_initialize_tls() { sysPrxForUser->Log("sys_initialize_tls()"); @@ -204,5 +247,4 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0x67f9fedb, sys_game_process_exitspawn2); sysPrxForUser->AddFunc(0xfc52a7a9, sys_game_process_exitspawn); - } diff --git a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp index e2343a02bf..60cd11c39b 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp @@ -10,6 +10,46 @@ //Module sys_io(0x0017, sys_io_init); Module *sys_io = nullptr; +//cellPad +extern int cellPadInit(u32 max_connect); +extern int cellPadEnd(); +extern int cellPadClearBuf(u32 port_no); +extern int cellPadGetData(u32 port_no, u32 data_addr); +extern int cellPadGetDataExtra(u32 port_no, u32 device_type_addr, u32 data_addr); +extern int cellPadSetActDirect(u32 port_no, u32 param_addr); +extern int cellPadGetInfo(u32 info_addr); +extern int cellPadGetInfo2(u32 info_addr); +extern int cellPadSetPortSetting(u32 port_no, u32 port_setting); +extern int cellPadInfoPressMode(u32 port_no); +extern int cellPadInfoSensorMode(u32 port_no); +extern int cellPadSetPressMode(u32 port_no, u32 mode); +extern int cellPadSetSensorMode(u32 port_no, u32 mode); +extern int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr); + +//cellKb +extern int cellKbInit(u32 max_connect); +extern int cellKbEnd(); +extern int cellKbClearBuf(u32 port_no); +extern u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode); +extern int cellKbGetInfo(mem_class_t info); +extern int cellKbRead(u32 port_no, mem_class_t data); +extern int cellKbSetCodeType(u32 port_no, u32 type); +extern int cellKbSetLEDStatus(u32 port_no, u8 led); +extern int cellKbSetReadMode(u32 port_no, u32 rmode); +extern int cellKbGetConfiguration(u32 port_no, mem_class_t config); + +//cellMouse +extern int cellMouseInit(u32 max_connect); +extern int cellMouseClearBuf(u32 port_no); +extern int cellMouseEnd(); +extern int cellMouseGetInfo(mem_class_t info); +extern int cellMouseInfoTabletMode(u32 port_no, mem_class_t info); +extern int cellMouseGetData(u32 port_no, mem_class_t data); +extern int cellMouseGetDataList(u32 port_no, mem_class_t data); +extern int cellMouseSetTabletMode(u32 port_no, u32 mode); +extern int cellMouseGetTabletDataList(u32 port_no, mem_class_t data); +extern int cellMouseGetRawData(u32 port_no, mem_class_t data); + void sys_io_init() { sys_io->AddFunc(0x1cf98800, cellPadInit); diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index fadb0b3148..814df0ba97 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -523,7 +523,7 @@ static func_caller* sc_table[kSyscallTableLength] = null_func, null_func, null_func, null_func, null_func, //1009 null_func, null_func, null_func, null_func, null_func, //1014 null_func, null_func, null_func, null_func, null_func, //1019 - null_func, null_func, null_func, bind_func(cellGcmCallback), //1024 + null_func, null_func, null_func, bind_func(cellGcmCallback), //1023 }; /** HACK: Used to delete func_caller objects that get allocated and stored in sc_table (above). diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index d470b5a720..2454724db8 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -1,20 +1,31 @@ #pragma once #include "ErrorCodes.h" -#include "lv2/SC_Process.h" -#include "lv2/SC_PRX.h" -#include "lv2/SC_FileSystem.h" -#include "lv2/SC_Memory.h" -#include "lv2/SC_Timer.h" -#include "lv2/SC_Rwlock.h" -#include "lv2/SC_SPU_Thread.h" -#include "lv2/SC_Lwmutex.h" -#include "lv2/SC_Lwcond.h" -#include "lv2/SC_Event_flag.h" -#include "lv2/SC_Condition.h" -#include "lv2/SC_Spinlock.h" -#include "lv2/SC_Semaphore.h" -#include "Emu/event.h" #include "Static.h" + +#include "lv2/lv2Fs.h" +#include "lv2/sys_cond.h" +#include "lv2/sys_event.h" +#include "lv2/sys_interrupt.h" +#include "lv2/sys_lwcond.h" +#include "lv2/sys_lwmutex.h" +#include "lv2/sys_memory.h" +#include "lv2/sys_mmapper.h" +#include "lv2/sys_ppu_thread.h" +#include "lv2/sys_process.h" +#include "lv2/sys_prx.h" +#include "lv2/sys_rsx.h" +#include "lv2/sys_rwlock.h" +#include "lv2/sys_semaphore.h" +#include "lv2/sys_spinlock.h" +#include "lv2/sys_spu.h" +#include "lv2/sys_time.h" +#include "lv2/sys_timer.h" +#include "lv2/sys_trace.h" +#include "lv2/sys_tty.h" +#include "lv2/sys_vm.h" + +#include "Emu/event.h" + //#define SYSCALLS_DEBUG #define declCPU PPUThread& CPU = GetCurrentPPUThread @@ -123,313 +134,9 @@ public: } }; -//sys_event -extern int sys_event_queue_create(mem32_t equeue_id, mem_ptr_t attr, u64 event_queue_key, int size); -extern int sys_event_queue_destroy(u32 equeue_id, int mode); -extern int sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 timeout); -extern int sys_event_queue_tryreceive(u32 equeue_id, mem_ptr_t event_array, int size, mem32_t number); -extern int sys_event_queue_drain(u32 event_queue_id); -extern int sys_event_port_create(mem32_t eport_id, int port_type, u64 name); -extern int sys_event_port_destroy(u32 eport_id); -extern int sys_event_port_connect_local(u32 event_port_id, u32 event_queue_id); -extern int sys_event_port_disconnect(u32 eport_id); -extern int sys_event_port_send(u32 event_port_id, u64 data1, u64 data2, u64 data3); - -//sys_event_flag -extern int sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init); -extern int sys_event_flag_destroy(u32 eflag_id); -extern int sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 timeout); -extern int sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result); -extern int sys_event_flag_set(u32 eflag_id, u64 bitptn); -extern int sys_event_flag_clear(u32 eflag_id, u64 bitptn); -extern int sys_event_flag_cancel(u32 eflag_id, mem32_t num); -extern int sys_event_flag_get(u32 eflag_id, mem64_t flags); - -//sys_semaphore -extern int sys_semaphore_create(mem32_t sem, mem_ptr_t attr, int initial_count, int max_count); -extern int sys_semaphore_destroy(u32 sem_id); -extern int sys_semaphore_wait(u32 sem_id, u64 timeout); -extern int sys_semaphore_trywait(u32 sem_id); -extern int sys_semaphore_post(u32 sem_id, int count); -extern int sys_semaphore_get_value(u32 sem_id, mem32_t count); - -//sys_lwcond -extern int sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t lwmutex, mem_ptr_t attr); -extern int sys_lwcond_destroy(mem_ptr_t lwcond); -extern int sys_lwcond_signal(mem_ptr_t lwcond); -extern int sys_lwcond_signal_all(mem_ptr_t lwcond); -extern int sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id); -extern int sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout); - -//sys_lwmutex -extern int sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_t attr); -extern int sys_lwmutex_destroy(mem_ptr_t lwmutex); -extern int sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout); -extern int sys_lwmutex_trylock(mem_ptr_t lwmutex); -extern int sys_lwmutex_unlock(mem_ptr_t lwmutex); - -//sys_cond -extern int sys_cond_create(mem32_t cond_id, u32 mutex_id, mem_ptr_t attr); -extern int sys_cond_destroy(u32 cond_id); -extern int sys_cond_wait(u32 cond_id, u64 timeout); -extern int sys_cond_signal(u32 cond_id); -extern int sys_cond_signal_all(u32 cond_id); -extern int sys_cond_signal_to(u32 cond_id, u32 thread_id); - -//sys_mutex -extern int sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr); -extern int sys_mutex_destroy(u32 mutex_id); -extern int sys_mutex_lock(u32 mutex_id, u64 timeout); -extern int sys_mutex_trylock(u32 mutex_id); -extern int sys_mutex_unlock(u32 mutex_id); - -//sys_rwlock -extern int sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr); -extern int sys_rwlock_destroy(u32 rw_lock_id); -extern int sys_rwlock_rlock(u32 rw_lock_id, u64 timeout); -extern int sys_rwlock_tryrlock(u32 rw_lock_id); -extern int sys_rwlock_runlock(u32 rw_lock_id); -extern int sys_rwlock_wlock(u32 rw_lock_id, u64 timeout); -extern int sys_rwlock_trywlock(u32 rw_lock_id); -extern int sys_rwlock_wunlock(u32 rw_lock_id); - -//sys_spinlock -extern void sys_spinlock_initialize(mem_ptr_t lock); -extern void sys_spinlock_lock(mem_ptr_t lock); -extern int sys_spinlock_trylock(mem_ptr_t lock); -extern void sys_spinlock_unlock(mem_ptr_t lock); - -//ppu_thread -extern void sys_ppu_thread_exit(u64 errorcode); -extern int sys_ppu_thread_yield(); -extern int sys_ppu_thread_join(u64 thread_id, mem64_t vptr); -extern int sys_ppu_thread_detach(u64 thread_id); -extern void sys_ppu_thread_get_join_state(u32 isjoinable_addr); -extern int sys_ppu_thread_set_priority(u64 thread_id, int prio); -extern int sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr); -extern int sys_ppu_thread_get_stack_information(u32 info_addr); -extern int sys_ppu_thread_stop(u64 thread_id); -extern int sys_ppu_thread_restart(u64 thread_id); -extern int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr); -extern void sys_ppu_thread_once(u32 once_ctrl_addr, u32 entry); -extern int sys_ppu_thread_get_id(const u32 id_addr); - -//memory -extern int sys_memory_allocate(u32 size, u32 flags, u32 alloc_addr_addr); -extern int sys_memory_allocate_from_container(u32 size, u32 cid, u32 flags, u32 alloc_addr_addr); -extern int sys_memory_free(u32 start_addr); -extern int sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr); -extern int sys_memory_get_user_memory_size(mem_ptr_t mem_info); -extern int sys_memory_container_create(mem32_t cid, u32 yield_size); -extern int sys_memory_container_destroy(u32 cid); -extern int sys_memory_container_get_size(mem_ptr_t mem_info, u32 cid); -extern int sys_mmapper_allocate_address(u32 size, u64 flags, u32 alignment, u32 alloc_addr); -extern int sys_mmapper_allocate_fixed_address(); -extern int sys_mmapper_allocate_memory(u32 size, u64 flags, mem32_t mem_id); -extern int sys_mmapper_allocate_memory_from_container(u32 size, u32 cid, u64 flags, mem32_t mem_id); -extern int sys_mmapper_change_address_access_right(u32 start_addr, u64 flags); -extern int sys_mmapper_free_address(u32 start_addr); -extern int sys_mmapper_free_memory(u32 mem_id); -extern int sys_mmapper_map_memory(u32 start_addr, u32 mem_id, u64 flags); -extern int sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, u32 alloc_addr); -extern int sys_mmapper_unmap_memory(u32 start_addr, u32 mem_id_addr); -extern int sys_mmapper_enable_page_fault_notification(u32 start_addr, u32 q_id); - -//vm -extern int sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 addr); -extern int sys_vm_unmap(u32 addr); -extern int sys_vm_append_memory(u32 addr, u32 size); -extern int sys_vm_return_memory(u32 addr, u32 size); -extern int sys_vm_lock(u32 addr, u32 size); -extern int sys_vm_unlock(u32 addr, u32 size); -extern int sys_vm_touch(u32 addr, u32 size); -extern int sys_vm_flush(u32 addr, u32 size); -extern int sys_vm_invalidate(u32 addr, u32 size); -extern int sys_vm_store(u32 addr, u32 size); -extern int sys_vm_sync(u32 addr, u32 size); -extern int sys_vm_test(u32 addr, u32 size, u32 result_addr); -extern int sys_vm_get_statistics(u32 addr, u32 stat_addr); - -//cellFs -extern int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size); -extern int cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread); -extern int cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite); -extern int cellFsClose(u32 fd); -extern int cellFsOpendir(u32 path_addr, mem32_t fd); -extern int cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread); -extern int cellFsClosedir(u32 fd); -extern int cellFsStat(u32 path_addr, mem_ptr_t sb); -extern int cellFsFstat(u32 fd, mem_ptr_t sb); -extern int cellFsMkdir(u32 path_addr, u32 mode); -extern int cellFsRename(u32 from_addr, u32 to_addr); -extern int cellFsRmdir(u32 path_addr); -extern int cellFsUnlink(u32 path_addr); -extern int cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos); -extern int cellFsFtruncate(u32 fd, u64 size); -extern int cellFsTruncate(u32 path_addr, u64 size); -extern int cellFsFGetBlockSize(u32 fd, mem64_t sector_size, mem64_t block_size); -extern int cellFsGetBlockSize(u32 path_addr, mem64_t sector_size, mem64_t block_size); -extern int cellFsGetFreeSize(u32 path_addr, mem32_t block_size, mem64_t block_count); -extern int cellFsGetDirectoryEntries(u32 fd, mem_ptr_t entries, u32 entries_size, mem32_t data_count); -extern int cellFsStReadInit(u32 fd, mem_ptr_t ringbuf); -extern int cellFsStReadFinish(u32 fd); -extern int cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf); -extern int cellFsStReadGetStatus(u32 fd, mem64_t status); -extern int cellFsStReadGetRegid(u32 fd, mem64_t regid); -extern int cellFsStReadStart(u32 fd, u64 offset, u64 size); -extern int cellFsStReadStop(u32 fd); -extern int cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize); -extern int cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size); -extern int cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size); -extern int cellFsStReadWait(u32 fd, u64 size); -extern int cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_t func); - -//cellVideo -extern int cellVideoOutGetState(u32 videoOut, u32 deviceIndex, u32 state_addr); -extern int cellVideoOutGetResolution(u32 resolutionId, mem_ptr_t resolution); -extern int cellVideoOutConfigure(u32 videoOut, u32 config_addr, u32 option_addr, u32 waitForEvent); -extern int cellVideoOutGetConfiguration(u32 videoOut, u32 config_addr, u32 option_addr); -extern int cellVideoOutGetNumberOfDevice(u32 videoOut); -extern int cellVideoOutGetResolutionAvailability(u32 videoOut, u32 resolutionId, u32 aspect, u32 option); - -//cellPad -extern int cellPadInit(u32 max_connect); -extern int cellPadEnd(); -extern int cellPadClearBuf(u32 port_no); -extern int cellPadGetData(u32 port_no, u32 data_addr); -extern int cellPadGetDataExtra(u32 port_no, u32 device_type_addr, u32 data_addr); -extern int cellPadSetActDirect(u32 port_no, u32 param_addr); -extern int cellPadGetInfo(u32 info_addr); -extern int cellPadGetInfo2(u32 info_addr); -extern int cellPadSetPortSetting(u32 port_no, u32 port_setting); -extern int cellPadInfoPressMode(u32 port_no); -extern int cellPadInfoSensorMode(u32 port_no); -extern int cellPadSetPressMode(u32 port_no, u32 mode); -extern int cellPadSetSensorMode(u32 port_no, u32 mode); -extern int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr); - -//cellKb -extern int cellKbInit(u32 max_connect); -extern int cellKbEnd(); -extern int cellKbClearBuf(u32 port_no); -extern u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode); -extern int cellKbGetInfo(mem_class_t info); -extern int cellKbRead(u32 port_no, mem_class_t data); -extern int cellKbSetCodeType(u32 port_no, u32 type); -extern int cellKbSetLEDStatus(u32 port_no, u8 led); -extern int cellKbSetReadMode(u32 port_no, u32 rmode); -extern int cellKbGetConfiguration(u32 port_no, mem_class_t config); - -//cellMouse -extern int cellMouseInit(u32 max_connect); -extern int cellMouseClearBuf(u32 port_no); -extern int cellMouseEnd(); -extern int cellMouseGetInfo(mem_class_t info); -extern int cellMouseInfoTabletMode(u32 port_no, mem_class_t info); -extern int cellMouseGetData(u32 port_no, mem_class_t data); -extern int cellMouseGetDataList(u32 port_no, mem_class_t data); -extern int cellMouseSetTabletMode(u32 port_no, u32 mode); -extern int cellMouseGetTabletDataList(u32 port_no, mem_class_t data); -extern int cellMouseGetRawData(u32 port_no, mem_class_t data); - -//cellGcm +//cellGcm (used as lv2 syscall #1023) extern int cellGcmCallback(u32 context_addr, u32 count); -//sys_tty -extern int sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr); -extern int sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr); - -//sys_heap -extern int sys_heap_create_heap(const u32 heap_addr, const u32 start_addr, const u32 size); -extern int sys_heap_malloc(const u32 heap_addr, const u32 size); -extern int _sys_heap_memalign(u32 heap_id, u32 align, u32 size); - -//sys_spu -extern int sys_spu_image_open(mem_ptr_t img, u32 path_addr); -extern int sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t img, mem_ptr_t attr, mem_ptr_t arg); -extern int sys_spu_thread_set_argument(u32 id, mem_ptr_t arg); -extern int sys_spu_thread_group_destroy(u32 id); -extern int sys_spu_thread_group_start(u32 id); -extern int sys_spu_thread_group_suspend(u32 id); -extern int sys_spu_thread_group_resume(u32 id); -extern int sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t attr); -extern int sys_spu_thread_create(mem32_t thread_id, mem32_t entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr); -extern int sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status); -extern int sys_spu_thread_group_connect_event(u32 id, u32 eq, u32 et); -extern int sys_spu_thread_group_disconnect_event(u32 id, u32 et); -extern int sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq, u64 req, u32 spup_addr); -extern int sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup); -extern int sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu); -extern int sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type); -extern int sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type); -extern int sys_spu_thread_write_spu_mb(u32 id, u32 value); -extern int sys_spu_thread_set_spu_cfg(u32 id, u64 value); -extern int sys_spu_thread_get_spu_cfg(u32 id, mem64_t value); -extern int sys_spu_thread_write_snr(u32 id, u32 number, u32 value); -extern int sys_spu_thread_connect_event(u32 id, u32 eq, u32 et, u8 spup); -extern int sys_spu_thread_disconnect_event(u32 id, u32 event_type, u8 spup); -extern int sys_spu_thread_bind_queue(u32 id, u32 spuq, u32 spuq_num); -extern int sys_spu_thread_unbind_queue(u32 id, u32 spuq_num); -extern int sys_spu_thread_get_exit_status(u32 id, mem32_t status); -extern int sys_raw_spu_create(mem32_t id, u32 attr_addr); -extern int sys_raw_spu_destroy(u32 id); -extern int sys_raw_spu_create_interrupt_tag(u32 id, u32 class_id, u32 hwthread, mem32_t intrtag); -extern int sys_raw_spu_set_int_mask(u32 id, u32 class_id, u64 mask); -extern int sys_raw_spu_get_int_mask(u32 id, u32 class_id, mem64_t mask); -extern int sys_raw_spu_set_int_stat(u32 id, u32 class_id, u64 stat); -extern int sys_raw_spu_get_int_stat(u32 id, u32 class_id, mem64_t stat); -extern int sys_raw_spu_read_puint_mb(u32 id, mem32_t value); -extern int sys_raw_spu_set_spu_cfg(u32 id, u32 value); -extern int sys_raw_spu_get_spu_cfg(u32 id, mem32_t value); - -//sys_interrupt -extern int sys_interrupt_tag_destroy(u32 intrtag); -extern int sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 arg); -extern int sys_interrupt_thread_disestablish(u32 ih); -extern void sys_interrupt_thread_eoi(); - -//sys_time -extern int sys_time_get_timezone(mem32_t timezone, mem32_t summertime); -extern int sys_time_get_current_time(u32 sec_addr, u32 nsec_addr); -extern s64 sys_time_get_system_time(); -extern u64 sys_time_get_timebase_frequency(); - -//sys_timer -extern int sys_timer_create(mem32_t timer_id); -extern int sys_timer_destroy(u32 timer_id); -extern int sys_timer_get_information(u32 timer_id, mem_ptr_t info); -extern int sys_timer_start(u32 timer_id, s64 basetime, u64 period); -extern int sys_timer_stop(u32 timer_id); -extern int sys_timer_connect_event_queue(u32 timer_id, u32 queue_id, u64 name, u64 data1, u64 data2); -extern int sys_timer_disconnect_event_queue(u32 timer_id); -extern int sys_timer_sleep(u32 sleep_time); -extern int sys_timer_usleep(u64 sleep_time); - -//sys_trace -extern int sys_trace_create(); -extern int sys_trace_start(); -extern int sys_trace_stop(); -extern int sys_trace_update_top_index(); -extern int sys_trace_destroy(); -extern int sys_trace_drain(); -extern int sys_trace_attach_process(); -extern int sys_trace_allocate_buffer(); -extern int sys_trace_free_buffer(); -extern int sys_trace_create2(); - -//sys_rsx -extern int sys_rsx_device_open(); -extern int sys_rsx_device_close(); -extern int sys_rsx_memory_allocate(); -extern int sys_rsx_memory_free(); -extern int sys_rsx_context_allocate(); -extern int sys_rsx_context_free(); -extern int sys_rsx_context_iomap(); -extern int sys_rsx_context_iounmap(); -extern int sys_rsx_context_attribute(s32 context_id, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6); -extern int sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 a3); -extern int sys_rsx_device_unmap(); -extern int sys_rsx_attribute(); #define UNIMPLEMENTED_FUNC(module) module->Error("Unimplemented function: %s", __FUNCTION__) @@ -481,5 +188,3 @@ public: #define REG_SUB_EMPTY(module, group, name,...) \ static const u64 name ## _table[] = {0}; \ module->AddFuncSub(group, name ## _table, #name, name) - -extern u64 get_system_time(); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h b/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h deleted file mode 100644 index 7b9637ef9c..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.h +++ /dev/null @@ -1 +0,0 @@ -#pragma once \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.h b/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.h deleted file mode 100644 index 16e92548e6..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -struct sys_lwcond_attribute_t -{ - union - { - char name[8]; - u64 name_u64; - }; -}; - -struct sys_lwcond_t -{ - be_t lwmutex; - be_t lwcond_queue; -}; - -struct Lwcond -{ - SMutex signal; - SleepQueue m_queue; - - Lwcond(u64 name) - : m_queue(name) - { - } -}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.h b/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.h deleted file mode 100644 index 12f07ef1d7..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.h +++ /dev/null @@ -1,82 +0,0 @@ -#pragma once - -u32 LoadSpuImage(vfsStream& stream, u32& spu_ep); - -enum -{ - SYS_SPU_THREAD_GROUP_JOIN_GROUP_EXIT = 0x0001, - SYS_SPU_THREAD_GROUP_JOIN_ALL_THREADS_EXIT = 0x0002, - SYS_SPU_THREAD_GROUP_JOIN_TERMINATED = 0x0004 -}; - -enum -{ - SYS_SPU_SEGMENT_TYPE_COPY = 0x0001, - SYS_SPU_SEGMENT_TYPE_FILL = 0x0002, - SYS_SPU_SEGMENT_TYPE_INFO = 0x0004, -}; - -struct sys_spu_thread_group_attribute -{ - be_t name_len; - be_t name_addr; - be_t type; - /* struct {} option; */ - be_t ct; // memory container id -}; - -struct sys_spu_thread_attribute -{ - be_t name_addr; - be_t name_len; - be_t option; -}; - -struct sys_spu_thread_argument -{ - be_t arg1; - be_t arg2; - be_t arg3; - be_t arg4; -}; - -struct sys_spu_image -{ - be_t type; - be_t entry_point; - be_t segs_addr; //temporarily used as offset of LS image after elf loading - be_t nsegs; -}; - -struct sys_spu_segment -{ - be_t type; - be_t ls_start; - be_t size; - be_t src; -}; - -struct SpuGroupInfo -{ - std::vector list; - std::atomic lock; - std::string m_name; - int m_prio; - int m_type; - int m_ct; - - SpuGroupInfo(const std::string& name, u32 num, int prio, int type, u32 ct) - : m_name(name) - , m_prio(prio) - , m_type(type) - , m_ct(ct) - , lock(0) - { - num = 256; - list.resize(num); - for (u32 i = 0; i < num; i++) - { - list[i] = 0; - } - } -}; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.h b/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.h deleted file mode 100644 index 0ff4af4029..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -struct spinlock -{ - SMutexBE mutex; -}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Time.h b/rpcs3/Emu/SysCalls/lv2/SC_Time.h deleted file mode 100644 index 4d5b326e74..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Time.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -u64 get_time(); -u64 get_system_time(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Timer.h b/rpcs3/Emu/SysCalls/lv2/SC_Timer.h deleted file mode 100644 index f8749970fe..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Timer.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -enum -{ - SYS_TIMER_STATE_STOP = 0x00U, - SYS_TIMER_STATE_RUN = 0x01U, -}; - -struct sys_timer_information_t -{ - s64 next_expiration_time; //system_time_t - u64 period; //usecond_t - u32 timer_state; - u32 pad; -}; - -struct timer -{ - rTimer tmr; - sys_timer_information_t timer_information_t; -}; - -#pragma pack() \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/SC_sys_spu.cpp deleted file mode 100644 index 0565f8bbd8..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_sys_spu.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#if 0 -#include "stdafx.h" -#include "Emu/SysCalls/SysCalls.h" - -static SysCallBase sc_spu("sys_spu"); - -u32 _max_usable_spu = 0; -u32 _max_raw_spu = 0; - -int sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu) -{ - sc_spu.Log("sys_spu_initialize(max_usable_spu=%d, max_raw_spu=%d)", max_usable_spu, max_raw_spu); - _max_usable_spu = max_usable_spu; - _max_raw_spu = max_raw_spu; - return CELL_OK; -} - -int sys_raw_spu_create(u32 id_addr, u32 attr_addr) -{ - Memory.Write32(id_addr, Emu.GetIdManager().GetNewID("raw_spu")); - return CELL_OK; -} -#endif diff --git a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp similarity index 90% rename from rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp rename to rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 15fe4a6d86..adebe91563 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -8,7 +8,7 @@ #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" -#include "SC_FileSystem.h" +#include "lv2Fs.h" #include "Emu/SysCalls/SysCalls.h" extern Module *sys_fs; @@ -52,7 +52,7 @@ struct FsRingBufferConfig } m_fs_config; -int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) +s32 cellFsOpen(u32 path_addr, s32 flags, mem32_t fd, mem32_t arg, u64 size) { const std::string& path = Memory.ReadString(path_addr); sys_fs->Log("cellFsOpen(path=\"%s\", flags=0x%x, fd_addr=0x%x, arg_addr=0x%x, size=0x%llx)", @@ -137,7 +137,7 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) return CELL_OK; } -int cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread) +s32 cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread) { sys_fs->Log("cellFsRead(fd=%d, buf_addr=0x%x, nbytes=0x%llx, nread_addr=0x%x)", fd, buf_addr, nbytes, nread.GetAddr()); @@ -185,7 +185,7 @@ fin: return CELL_OK; } -int cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite) +s32 cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite) { sys_fs->Log("cellFsWrite(fd=%d, buf_addr=0x%x, nbytes=0x%llx, nwrite_addr=0x%x)", fd, buf_addr, nbytes, nwrite.GetAddr()); @@ -206,7 +206,7 @@ int cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite) return CELL_OK; } -int cellFsClose(u32 fd) +s32 cellFsClose(u32 fd) { sys_fs->Warning("cellFsClose(fd=%d)", fd); @@ -216,7 +216,7 @@ int cellFsClose(u32 fd) return CELL_OK; } -int cellFsOpendir(u32 path_addr, mem32_t fd) +s32 cellFsOpendir(u32 path_addr, mem32_t fd) { const std::string& path = Memory.ReadString(path_addr); sys_fs->Warning("cellFsOpendir(path=\"%s\", fd_addr=0x%x)", path.c_str(), fd.GetAddr()); @@ -235,7 +235,7 @@ int cellFsOpendir(u32 path_addr, mem32_t fd) return CELL_OK; } -int cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread) +s32 cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread) { sys_fs->Log("cellFsReaddir(fd=%d, dir_addr=0x%x, nread_addr=0x%x)", fd, dir.GetAddr(), nread.GetAddr()); @@ -261,7 +261,7 @@ int cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread) return CELL_OK; } -int cellFsClosedir(u32 fd) +s32 cellFsClosedir(u32 fd) { sys_fs->Log("cellFsClosedir(fd=%d)", fd); @@ -271,7 +271,7 @@ int cellFsClosedir(u32 fd) return CELL_OK; } -int cellFsStat(const u32 path_addr, mem_ptr_t sb) +s32 cellFsStat(const u32 path_addr, mem_ptr_t sb) { const std::string& path = Memory.ReadString(path_addr); sys_fs->Log("cellFsStat(path=\"%s\", sb_addr: 0x%x)", path.c_str(), sb.GetAddr()); @@ -311,7 +311,7 @@ int cellFsStat(const u32 path_addr, mem_ptr_t sb) return CELL_ENOENT; } -int cellFsFstat(u32 fd, mem_ptr_t sb) +s32 cellFsFstat(u32 fd, mem_ptr_t sb) { sys_fs->Log("cellFsFstat(fd=%d, sb_addr: 0x%x)", fd, sb.GetAddr()); @@ -336,7 +336,7 @@ int cellFsFstat(u32 fd, mem_ptr_t sb) return CELL_OK; } -int cellFsMkdir(u32 path_addr, u32 mode) +s32 cellFsMkdir(u32 path_addr, u32 mode) { const std::string& ps3_path = Memory.ReadString(path_addr); sys_fs->Log("cellFsMkdir(path=\"%s\", mode=0x%x)", ps3_path.c_str(), mode); @@ -355,7 +355,7 @@ int cellFsMkdir(u32 path_addr, u32 mode) return CELL_OK; } -int cellFsRename(u32 from_addr, u32 to_addr) +s32 cellFsRename(u32 from_addr, u32 to_addr) { const std::string& ps3_from = Memory.ReadString(from_addr); const std::string& ps3_to = Memory.ReadString(to_addr); @@ -385,7 +385,7 @@ int cellFsRename(u32 from_addr, u32 to_addr) return CELL_ENOENT; } -int cellFsRmdir(u32 path_addr) +s32 cellFsRmdir(u32 path_addr) { const std::string& ps3_path = Memory.ReadString(path_addr); sys_fs->Log("cellFsRmdir(path=\"%s\")", ps3_path.c_str()); @@ -400,7 +400,7 @@ int cellFsRmdir(u32 path_addr) return CELL_OK; } -int cellFsUnlink(u32 path_addr) +s32 cellFsUnlink(u32 path_addr) { const std::string& ps3_path = Memory.ReadString(path_addr); sys_fs->Warning("cellFsUnlink(path=\"%s\")", ps3_path.c_str()); @@ -420,7 +420,7 @@ int cellFsUnlink(u32 path_addr) return CELL_OK; } -int cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos) +s32 cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos) { vfsSeekMode seek_mode; sys_fs->Log("cellFsLseek(fd=%d, offset=0x%llx, whence=0x%x, pos_addr=0x%x)", fd, offset, whence, pos.GetAddr()); @@ -441,7 +441,7 @@ int cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos) return CELL_OK; } -int cellFsFtruncate(u32 fd, u64 size) +s32 cellFsFtruncate(u32 fd, u64 size) { sys_fs->Log("cellFsFtruncate(fd=%d, size=%lld)", fd, size); u32 attr; @@ -467,7 +467,7 @@ int cellFsFtruncate(u32 fd, u64 size) return CELL_OK; } -int cellFsTruncate(u32 path_addr, u64 size) +s32 cellFsTruncate(u32 path_addr, u64 size) { const std::string& path = Memory.ReadString(path_addr); sys_fs->Log("cellFsTruncate(path=\"%s\", size=%lld)", path.c_str(), size); @@ -498,7 +498,7 @@ int cellFsTruncate(u32 path_addr, u64 size) return CELL_OK; } -int cellFsFGetBlockSize(u32 fd, mem64_t sector_size, mem64_t block_size) +s32 cellFsFGetBlockSize(u32 fd, mem64_t sector_size, mem64_t block_size) { sys_fs->Log("cellFsFGetBlockSize(fd=%d, sector_size_addr: 0x%x, block_size_addr: 0x%x)", fd, sector_size.GetAddr(), block_size.GetAddr()); @@ -511,7 +511,7 @@ int cellFsFGetBlockSize(u32 fd, mem64_t sector_size, mem64_t block_size) return CELL_OK; } -int cellFsGetBlockSize(u32 path_addr, mem64_t sector_size, mem64_t block_size) +s32 cellFsGetBlockSize(u32 path_addr, mem64_t sector_size, mem64_t block_size) { sys_fs->Log("cellFsGetBlockSize(file: %s, sector_size_addr: 0x%x, block_size_addr: 0x%x)", Memory.ReadString(path_addr).c_str(), sector_size.GetAddr(), block_size.GetAddr()); @@ -521,7 +521,7 @@ int cellFsGetBlockSize(u32 path_addr, mem64_t sector_size, mem64_t block_size) return CELL_OK; } -int cellFsGetFreeSize(u32 path_addr, mem32_t block_size, mem64_t block_count) +s32 cellFsGetFreeSize(u32 path_addr, mem32_t block_size, mem64_t block_count) { const std::string& ps3_path = Memory.ReadString(path_addr); sys_fs->Warning("cellFsGetFreeSize(path=\"%s\", block_size_addr=0x%x, block_count_addr=0x%x)", @@ -540,7 +540,7 @@ int cellFsGetFreeSize(u32 path_addr, mem32_t block_size, mem64_t block_count) return CELL_OK; } -int cellFsGetDirectoryEntries(u32 fd, mem_ptr_t entries, u32 entries_size, mem32_t data_count) +s32 cellFsGetDirectoryEntries(u32 fd, mem_ptr_t entries, u32 entries_size, mem32_t data_count) { sys_fs->Log("cellFsGetDirectoryEntries(fd=%d, entries_addr=0x%x, entries_size = 0x%x, data_count_addr=0x%x)", fd, entries.GetAddr(), entries_size, data_count.GetAddr()); @@ -578,7 +578,7 @@ int cellFsGetDirectoryEntries(u32 fd, mem_ptr_t entries, u return CELL_OK; } -int cellFsStReadInit(u32 fd, mem_ptr_t ringbuf) +s32 cellFsStReadInit(u32 fd, mem_ptr_t ringbuf) { sys_fs->Warning("cellFsStReadInit(fd=%d, ringbuf_addr=0x%x)", fd, ringbuf.GetAddr()); @@ -608,7 +608,7 @@ int cellFsStReadInit(u32 fd, mem_ptr_t ringbuf) return CELL_OK; } -int cellFsStReadFinish(u32 fd) +s32 cellFsStReadFinish(u32 fd) { sys_fs->Warning("cellFsStReadFinish(fd=%d)", fd); @@ -621,7 +621,7 @@ int cellFsStReadFinish(u32 fd) return CELL_OK; } -int cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf) +s32 cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf) { sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, ringbuf_addr=0x%x)", fd, ringbuf.GetAddr()); @@ -643,7 +643,7 @@ int cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf) return CELL_OK; } -int cellFsStReadGetStatus(u32 fd, mem64_t status) +s32 cellFsStReadGetStatus(u32 fd, mem64_t status) { sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, status_addr=0x%x)", fd, status.GetAddr()); @@ -655,7 +655,7 @@ int cellFsStReadGetStatus(u32 fd, mem64_t status) return CELL_OK; } -int cellFsStReadGetRegid(u32 fd, mem64_t regid) +s32 cellFsStReadGetRegid(u32 fd, mem64_t regid) { sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, regid_addr=0x%x)", fd, regid.GetAddr()); @@ -667,7 +667,7 @@ int cellFsStReadGetRegid(u32 fd, mem64_t regid) return CELL_OK; } -int cellFsStReadStart(u32 fd, u64 offset, u64 size) +s32 cellFsStReadStart(u32 fd, u64 offset, u64 size) { sys_fs->Warning("TODO: cellFsStReadStart(fd=%d, offset=0x%llx, size=0x%llx)", fd, offset, size); @@ -680,7 +680,7 @@ int cellFsStReadStart(u32 fd, u64 offset, u64 size) return CELL_OK; } -int cellFsStReadStop(u32 fd) +s32 cellFsStReadStop(u32 fd) { sys_fs->Warning("cellFsStReadStop(fd=%d)", fd); @@ -692,7 +692,7 @@ int cellFsStReadStop(u32 fd) return CELL_OK; } -int cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) +s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) { sys_fs->Warning("TODO: cellFsStRead(fd=%d, buf_addr=0x%x, size=0x%llx, rsize_addr = 0x%x)", fd, buf_addr, size, rsize.GetAddr()); @@ -707,7 +707,7 @@ int cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) return CELL_OK; } -int cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size) +s32 cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size) { sys_fs->Warning("TODO: cellFsStReadGetCurrentAddr(fd=%d, addr_addr=0x%x, size_addr = 0x%x)", fd, addr_addr.GetAddr(), size.GetAddr()); @@ -719,7 +719,7 @@ int cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size) return CELL_OK; } -int cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) +s32 cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) { sys_fs->Warning("TODO: cellFsStReadPutCurrentAddr(fd=%d, addr_addr=0x%x, size = 0x%llx)", fd, addr_addr, size); @@ -731,7 +731,7 @@ int cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) return CELL_OK; } -int cellFsStReadWait(u32 fd, u64 size) +s32 cellFsStReadWait(u32 fd, u64 size) { sys_fs->Warning("TODO: cellFsStReadWait(fd=%d, size = 0x%llx)", fd, size); @@ -741,7 +741,7 @@ int cellFsStReadWait(u32 fd, u64 size) return CELL_OK; } -int cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_t func) +s32 cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_t func) { sys_fs->Warning("TODO: cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.GetAddr()); @@ -752,4 +752,4 @@ int cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_tCheckId(fd, file)) return CELL_ESRCH; return CELL_OK; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.h b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h similarity index 53% rename from rpcs3/Emu/SysCalls/lv2/SC_FileSystem.h rename to rpcs3/Emu/SysCalls/lv2/lv2Fs.h index d705b37d6f..1ab23595b3 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.h +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h @@ -122,3 +122,37 @@ struct CellFsRingBuffer be_t transfer_rate; be_t copy; }; + +// SysCalls +s32 cellFsOpen(u32 path_addr, s32 flags, mem32_t fd, mem32_t arg, u64 size); +s32 cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread); +s32 cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite); +s32 cellFsClose(u32 fd); +s32 cellFsOpendir(u32 path_addr, mem32_t fd); +s32 cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread); +s32 cellFsClosedir(u32 fd); +s32 cellFsStat(u32 path_addr, mem_ptr_t sb); +s32 cellFsFstat(u32 fd, mem_ptr_t sb); +s32 cellFsMkdir(u32 path_addr, u32 mode); +s32 cellFsRename(u32 from_addr, u32 to_addr); +s32 cellFsRmdir(u32 path_addr); +s32 cellFsUnlink(u32 path_addr); +s32 cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos); +s32 cellFsFtruncate(u32 fd, u64 size); +s32 cellFsTruncate(u32 path_addr, u64 size); +s32 cellFsFGetBlockSize(u32 fd, mem64_t sector_size, mem64_t block_size); +s32 cellFsGetBlockSize(u32 path_addr, mem64_t sector_size, mem64_t block_size); +s32 cellFsGetFreeSize(u32 path_addr, mem32_t block_size, mem64_t block_count); +s32 cellFsGetDirectoryEntries(u32 fd, mem_ptr_t entries, u32 entries_size, mem32_t data_count); +s32 cellFsStReadInit(u32 fd, mem_ptr_t ringbuf); +s32 cellFsStReadFinish(u32 fd); +s32 cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf); +s32 cellFsStReadGetStatus(u32 fd, mem64_t status); +s32 cellFsStReadGetRegid(u32 fd, mem64_t regid); +s32 cellFsStReadStart(u32 fd, u64 offset, u64 size); +s32 cellFsStReadStop(u32 fd); +s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize); +s32 cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size); +s32 cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size); +s32 cellFsStReadWait(u32 fd, u64 size); +s32 cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_t func); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp similarity index 94% rename from rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_cond.cpp index 1e06dcd5d7..de61193d45 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Condition.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp @@ -5,11 +5,11 @@ #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/lv2/SC_Condition.h" +#include "sys_cond.h" SysCallBase sys_cond("sys_cond"); -int sys_cond_create(mem32_t cond_id, u32 mutex_id, mem_ptr_t attr) +s32 sys_cond_create(mem32_t cond_id, u32 mutex_id, mem_ptr_t attr) { sys_cond.Log("sys_cond_create(cond_id_addr=0x%x, mutex_id=%d, attr_addr=0x%x)", cond_id.GetAddr(), mutex_id, attr.GetAddr()); @@ -45,7 +45,7 @@ int sys_cond_create(mem32_t cond_id, u32 mutex_id, mem_ptr_t return CELL_OK; } -int sys_cond_destroy(u32 cond_id) +s32 sys_cond_destroy(u32 cond_id) { sys_cond.Warning("sys_cond_destroy(cond_id=%d)", cond_id); @@ -65,7 +65,7 @@ int sys_cond_destroy(u32 cond_id) return CELL_OK; } -int sys_cond_signal(u32 cond_id) +s32 sys_cond_signal(u32 cond_id) { sys_cond.Log("sys_cond_signal(cond_id=%d)", cond_id); @@ -92,7 +92,7 @@ int sys_cond_signal(u32 cond_id) return CELL_OK; } -int sys_cond_signal_all(u32 cond_id) +s32 sys_cond_signal_all(u32 cond_id) { sys_cond.Log("sys_cond_signal_all(cond_id=%d)", cond_id); @@ -122,7 +122,7 @@ int sys_cond_signal_all(u32 cond_id) return CELL_OK; } -int sys_cond_signal_to(u32 cond_id, u32 thread_id) +s32 sys_cond_signal_to(u32 cond_id, u32 thread_id) { sys_cond.Log("sys_cond_signal_to(cond_id=%d, thread_id=%d)", cond_id, thread_id); @@ -159,7 +159,7 @@ int sys_cond_signal_to(u32 cond_id, u32 thread_id) return CELL_OK; } -int sys_cond_wait(u32 cond_id, u64 timeout) +s32 sys_cond_wait(u32 cond_id, u64 timeout) { sys_cond.Log("sys_cond_wait(cond_id=%d, timeout=%lld)", cond_id, timeout); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Condition.h b/rpcs3/Emu/SysCalls/lv2/sys_cond.h similarity index 54% rename from rpcs3/Emu/SysCalls/lv2/SC_Condition.h rename to rpcs3/Emu/SysCalls/lv2/sys_cond.h index d4b64c12cd..c934f4fd9f 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Condition.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_cond.h @@ -1,5 +1,5 @@ #pragma once -#include "SC_Mutex.h" +#include "sys_mutex.h" struct sys_cond_attribute { @@ -28,4 +28,12 @@ struct Cond , signaler(0) { } -}; \ No newline at end of file +}; + +// SysCalls +s32 sys_cond_create(mem32_t cond_id, u32 mutex_id, mem_ptr_t attr); +s32 sys_cond_destroy(u32 cond_id); +s32 sys_cond_wait(u32 cond_id, u64 timeout); +s32 sys_cond_signal(u32 cond_id); +s32 sys_cond_signal_all(u32 cond_id); +s32 sys_cond_signal_to(u32 cond_id, u32 thread_id); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp new file mode 100644 index 0000000000..f49afa78dd --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -0,0 +1,751 @@ +#include "stdafx.h" +#include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" + +#include "Emu/SysCalls/SysCalls.h" +#include "Emu/Cell/SPUThread.h" +#include "Emu/event.h" + +#include "sys_lwmutex.h" +#include "sys_event.h" + +SysCallBase sys_event("sys_event"); + +s32 sys_event_queue_create(mem32_t equeue_id, mem_ptr_t attr, u64 event_queue_key, int size) +{ + sys_event.Warning("sys_event_queue_create(equeue_id_addr=0x%x, attr_addr=0x%x, event_queue_key=0x%llx, size=%d)", + equeue_id.GetAddr(), attr.GetAddr(), event_queue_key, size); + + if(size <= 0 || size > 127) + { + return CELL_EINVAL; + } + + if(!equeue_id.IsGood() || !attr.IsGood()) + { + return CELL_EFAULT; + } + + switch (attr->protocol.ToBE()) + { + case se32(SYS_SYNC_PRIORITY): break; + case se32(SYS_SYNC_RETRY): sys_event.Error("Invalid SYS_SYNC_RETRY protocol attr"); return CELL_EINVAL; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_event.Error("Invalid SYS_SYNC_PRIORITY_INHERIT protocol attr"); return CELL_EINVAL; + case se32(SYS_SYNC_FIFO): break; + default: sys_event.Error("Unknown 0x%x protocol attr", (u32)attr->protocol); return CELL_EINVAL; + } + + switch (attr->type.ToBE()) + { + case se32(SYS_PPU_QUEUE): break; + case se32(SYS_SPU_QUEUE): break; + default: sys_event.Error("Unknown 0x%x type attr", (u32)attr->type); return CELL_EINVAL; + } + + if (event_queue_key && Emu.GetEventManager().CheckKey(event_queue_key)) + { + return CELL_EEXIST; + } + + EventQueue* eq = new EventQueue((u32)attr->protocol, (int)attr->type, attr->name_u64, event_queue_key, size); + + if (event_queue_key && !Emu.GetEventManager().RegisterKey(eq, event_queue_key)) + { + delete eq; + return CELL_EAGAIN; + } + + equeue_id = sys_event.GetNewId(eq); + sys_event.Warning("*** event_queue created [%s] (protocol=0x%x, type=0x%x): id = %d", + std::string(attr->name, 8).c_str(), (u32)attr->protocol, (int)attr->type, equeue_id.GetValue()); + + return CELL_OK; +} + +s32 sys_event_queue_destroy(u32 equeue_id, int mode) +{ + sys_event.Error("sys_event_queue_destroy(equeue_id=%d, mode=0x%x)", equeue_id, mode); + + EventQueue* eq; + if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) + { + return CELL_ESRCH; + } + + if (mode && mode != SYS_EVENT_QUEUE_DESTROY_FORCE) + { + return CELL_EINVAL; + } + + u32 tid = GetCurrentPPUThread().GetId(); + + eq->sq.m_mutex.lock(); + eq->owner.lock(tid); + // check if some threads are waiting for an event + if (!mode && eq->sq.list.size()) + { + eq->owner.unlock(tid); + eq->sq.m_mutex.unlock(); + return CELL_EBUSY; + } + eq->owner.unlock(tid, ~0); + eq->sq.m_mutex.unlock(); + while (eq->sq.list.size()) + { + Sleep(1); + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "sys_event_queue_destroy(equeue=%d) aborted", equeue_id); + break; + } + } + + Emu.GetEventManager().UnregisterKey(eq->key); + eq->ports.clear(); + Emu.GetIdManager().RemoveID(equeue_id); + + return CELL_OK; +} + +s32 sys_event_queue_tryreceive(u32 equeue_id, mem_ptr_t event_array, int size, mem32_t number) +{ + sys_event.Error("sys_event_queue_tryreceive(equeue_id=%d, event_array_addr=0x%x, size=%d, number_addr=0x%x)", + equeue_id, event_array.GetAddr(), size, number.GetAddr()); + + if (size < 0 || !number.IsGood()) + { + return CELL_EFAULT; + } + + if (size && !Memory.IsGoodAddr(event_array.GetAddr(), sizeof(sys_event_data) * size)) + { + return CELL_EFAULT; + } + + EventQueue* eq; + if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) + { + return CELL_ESRCH; + } + + if (eq->type != SYS_PPU_QUEUE) + { + return CELL_EINVAL; + } + + if (size == 0) + { + number = 0; + return CELL_OK; + } + + u32 tid = GetCurrentPPUThread().GetId(); + + eq->sq.m_mutex.lock(); + eq->owner.lock(tid); + if (eq->sq.list.size()) + { + number = 0; + eq->owner.unlock(tid); + eq->sq.m_mutex.unlock(); + return CELL_OK; + } + number = eq->events.pop_all((sys_event_data*)(Memory + event_array.GetAddr()), size); + eq->owner.unlock(tid); + eq->sq.m_mutex.unlock(); + return CELL_OK; +} + +s32 sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 timeout) +{ + sys_event.Log("sys_event_queue_receive(equeue_id=%d, event_addr=0x%x, timeout=%lld)", + equeue_id, event.GetAddr(), timeout); + + if (!event.IsGood()) + { + return CELL_EFAULT; + } + + EventQueue* eq; + if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) + { + return CELL_ESRCH; + } + + if (eq->type != SYS_PPU_QUEUE) + { + return CELL_EINVAL; + } + + u32 tid = GetCurrentPPUThread().GetId(); + + eq->sq.push(tid); // add thread to sleep queue + + timeout = timeout ? (timeout / 1000) : ~0; + u64 counter = 0; + while (true) + { + switch (eq->owner.trylock(tid)) + { + case SMR_OK: + if (!eq->events.count()) + { + eq->owner.unlock(tid); + break; + } + else + { + u32 next = (eq->protocol == SYS_SYNC_FIFO) ? eq->sq.pop() : eq->sq.pop_prio(); + if (next != tid) + { + eq->owner.unlock(tid, next); + break; + } + } + case SMR_SIGNAL: + { + eq->events.pop(*event); + eq->owner.unlock(tid); + sys_event.Log(" *** event received: source=0x%llx, d1=0x%llx, d2=0x%llx, d3=0x%llx", + (u64)event->source, (u64)event->data1, (u64)event->data2, (u64)event->data3); + /* passing event data in registers */ + PPUThread& t = GetCurrentPPUThread(); + t.GPR[4] = event->source; + t.GPR[5] = event->data1; + t.GPR[6] = event->data2; + t.GPR[7] = event->data3; + return CELL_OK; + } + case SMR_FAILED: break; + default: eq->sq.invalidate(tid); return CELL_ECANCELED; + } + + Sleep(1); + if (counter++ > timeout || Emu.IsStopped()) + { + if (Emu.IsStopped()) LOG_WARNING(HLE, "sys_event_queue_receive(equeue=%d) aborted", equeue_id); + eq->sq.invalidate(tid); + return CELL_ETIMEDOUT; + } + } +} + +s32 sys_event_queue_drain(u32 equeue_id) +{ + sys_event.Log("sys_event_queue_drain(equeue_id=%d)", equeue_id); + + EventQueue* eq; + if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) + { + return CELL_ESRCH; + } + + eq->events.clear(); + + return CELL_OK; +} + +s32 sys_event_port_create(mem32_t eport_id, int port_type, u64 name) +{ + sys_event.Warning("sys_event_port_create(eport_id_addr=0x%x, port_type=0x%x, name=0x%llx)", + eport_id.GetAddr(), port_type, name); + + if (!eport_id.IsGood()) + { + return CELL_EFAULT; + } + + if (port_type != SYS_EVENT_PORT_LOCAL) + { + sys_event.Error("sys_event_port_create: invalid port_type(0x%x)", port_type); + return CELL_EINVAL; + } + + EventPort* eport = new EventPort(); + u32 id = sys_event.GetNewId(eport); + eport->name = name ? name : ((u64)sys_process_getpid() << 32) | (u64)id; + eport_id = id; + sys_event.Warning("*** sys_event_port created: id = %d", id); + + return CELL_OK; +} + +s32 sys_event_port_destroy(u32 eport_id) +{ + sys_event.Warning("sys_event_port_destroy(eport_id=%d)", eport_id); + + EventPort* eport; + if (!Emu.GetIdManager().GetIDData(eport_id, eport)) + { + return CELL_ESRCH; + } + + if (!eport->m_mutex.try_lock()) + { + return CELL_EISCONN; + } + + if (eport->eq) + { + eport->m_mutex.unlock(); + return CELL_EISCONN; + } + + eport->m_mutex.unlock(); + Emu.GetIdManager().RemoveID(eport_id); + return CELL_OK; +} + +s32 sys_event_port_connect_local(u32 eport_id, u32 equeue_id) +{ + sys_event.Warning("sys_event_port_connect_local(eport_id=%d, equeue_id=%d)", eport_id, equeue_id); + + EventPort* eport; + if (!Emu.GetIdManager().GetIDData(eport_id, eport)) + { + return CELL_ESRCH; + } + + if (!eport->m_mutex.try_lock()) + { + return CELL_EISCONN; + } + + if (eport->eq) + { + eport->m_mutex.unlock(); + return CELL_EISCONN; + } + + EventQueue* equeue; + if (!Emu.GetIdManager().GetIDData(equeue_id, equeue)) + { + sys_event.Error("sys_event_port_connect_local: event_queue(%d) not found!", equeue_id); + eport->m_mutex.unlock(); + return CELL_ESRCH; + } + else + { + equeue->ports.add(eport); + } + + eport->eq = equeue; + eport->m_mutex.unlock(); + return CELL_OK; +} + +s32 sys_event_port_disconnect(u32 eport_id) +{ + sys_event.Warning("sys_event_port_disconnect(eport_id=%d)", eport_id); + + EventPort* eport; + if (!Emu.GetIdManager().GetIDData(eport_id, eport)) + { + return CELL_ESRCH; + } + + if (!eport->eq) + { + return CELL_ENOTCONN; + } + + if (!eport->m_mutex.try_lock()) + { + return CELL_EBUSY; + } + + eport->eq->ports.remove(eport); + eport->eq = nullptr; + eport->m_mutex.unlock(); + return CELL_OK; +} + +s32 sys_event_port_send(u32 eport_id, u64 data1, u64 data2, u64 data3) +{ + sys_event.Log("sys_event_port_send(eport_id=%d, data1=0x%llx, data2=0x%llx, data3=0x%llx)", + eport_id, data1, data2, data3); + + EventPort* eport; + if (!Emu.GetIdManager().GetIDData(eport_id, eport)) + { + return CELL_ESRCH; + } + + std::lock_guard lock(eport->m_mutex); + + EventQueue* eq = eport->eq; + if (!eq) + { + return CELL_ENOTCONN; + } + + if (!eq->events.push(eport->name, data1, data2, data3)) + { + return CELL_EBUSY; + } + + return CELL_OK; +} + +// sys_event_flag +s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init) +{ + sys_event.Warning("sys_event_flag_create(eflag_id_addr=0x%x, attr_addr=0x%x, init=0x%llx)", + eflag_id.GetAddr(), attr.GetAddr(), init); + + if(!eflag_id.IsGood() || !attr.IsGood()) + { + return CELL_EFAULT; + } + + switch (attr->protocol.ToBE()) + { + case se32(SYS_SYNC_PRIORITY): break; + case se32(SYS_SYNC_RETRY): sys_event.Warning("TODO: SYS_SYNC_RETRY attr"); break; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_event.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT attr"); break; + case se32(SYS_SYNC_FIFO): break; + default: return CELL_EINVAL; + } + + if (attr->pshared.ToBE() != se32(0x200)) + { + return CELL_EINVAL; + } + + switch (attr->type.ToBE()) + { + case se32(SYS_SYNC_WAITER_SINGLE): break; + case se32(SYS_SYNC_WAITER_MULTIPLE): break; + default: return CELL_EINVAL; + } + + eflag_id = sys_event.GetNewId(new EventFlag(init, (u32)attr->protocol, (int)attr->type)); + + sys_event.Warning("*** event_flag created [%s] (protocol=0x%x, type=0x%x): id = %d", + std::string(attr->name, 8).c_str(), (u32)attr->protocol, (int)attr->type, eflag_id.GetValue()); + + return CELL_OK; +} + +s32 sys_event_flag_destroy(u32 eflag_id) +{ + sys_event.Warning("sys_event_flag_destroy(eflag_id=%d)", eflag_id); + + EventFlag* ef; + if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; + + if (ef->waiters.size()) // ??? + { + return CELL_EBUSY; + } + + Emu.GetIdManager().RemoveID(eflag_id); + + return CELL_OK; +} + +s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 timeout) +{ + sys_event.Log("sys_event_flag_wait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x, timeout=%lld)", + eflag_id, bitptn, mode, result.GetAddr(), timeout); + + if (result.IsGood()) result = 0; + + switch (mode & 0xf) + { + case SYS_EVENT_FLAG_WAIT_AND: break; + case SYS_EVENT_FLAG_WAIT_OR: break; + default: return CELL_EINVAL; + } + + switch (mode & ~0xf) + { + case 0: break; // ??? + case SYS_EVENT_FLAG_WAIT_CLEAR: break; + case SYS_EVENT_FLAG_WAIT_CLEAR_ALL: break; + default: return CELL_EINVAL; + } + + EventFlag* ef; + if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; + + u32 tid = GetCurrentPPUThread().GetId(); + + { + SMutexLocker lock(ef->m_mutex); + if (ef->m_type == SYS_SYNC_WAITER_SINGLE && ef->waiters.size() > 0) + { + return CELL_EPERM; + } + EventFlagWaiter rec; + rec.bitptn = bitptn; + rec.mode = mode; + rec.tid = tid; + ef->waiters.push_back(rec); + + if (ef->check() == tid) + { + u64 flags = ef->flags; + + ef->waiters.erase(ef->waiters.end() - 1); + + if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) + { + ef->flags &= ~bitptn; + } + else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) + { + ef->flags = 0; + } + + if (result.IsGood()) + { + result = flags; + return CELL_OK; + } + + if (!result.GetAddr()) + { + return CELL_OK; + } + return CELL_EFAULT; + } + } + + u32 counter = 0; + const u32 max_counter = timeout ? (timeout / 1000) : ~0; + + while (true) + { + if (ef->signal.unlock(tid, tid) == SMR_OK) + { + SMutexLocker lock(ef->m_mutex); + + u64 flags = ef->flags; + + for (u32 i = 0; i < ef->waiters.size(); i++) + { + if (ef->waiters[i].tid == tid) + { + ef->waiters.erase(ef->waiters.begin() +i); + + if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) + { + ef->flags &= ~bitptn; + } + else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) + { + ef->flags = 0; + } + + if (u32 target = ef->check()) + { + // if signal, leave both mutexes locked... + ef->signal.unlock(tid, target); + ef->m_mutex.unlock(tid, target); + } + else + { + ef->signal.unlock(tid); + } + + if (result.IsGood()) + { + result = flags; + return CELL_OK; + } + + if (!result.GetAddr()) + { + return CELL_OK; + } + return CELL_EFAULT; + } + } + + ef->signal.unlock(tid); + return CELL_ECANCELED; + } + + Sleep(1); + + if (counter++ > max_counter) + { + SMutexLocker lock(ef->m_mutex); + + for (u32 i = 0; i < ef->waiters.size(); i++) + { + if (ef->waiters[i].tid == tid) + { + ef->waiters.erase(ef->waiters.begin() + i); + break; + } + } + + return CELL_ETIMEDOUT; + } + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "sys_event_flag_wait(id=%d) aborted", eflag_id); + return CELL_OK; + } + } +} + +s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result) +{ + sys_event.Log("sys_event_flag_trywait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x)", + eflag_id, bitptn, mode, result.GetAddr()); + + if (result.IsGood()) result = 0; + + switch (mode & 0xf) + { + case SYS_EVENT_FLAG_WAIT_AND: break; + case SYS_EVENT_FLAG_WAIT_OR: break; + default: return CELL_EINVAL; + } + + switch (mode & ~0xf) + { + case 0: break; // ??? + case SYS_EVENT_FLAG_WAIT_CLEAR: break; + case SYS_EVENT_FLAG_WAIT_CLEAR_ALL: break; + default: return CELL_EINVAL; + } + + EventFlag* ef; + if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; + + SMutexLocker lock(ef->m_mutex); + + u64 flags = ef->flags; + + if (((mode & SYS_EVENT_FLAG_WAIT_AND) && (flags & bitptn) == bitptn) || + ((mode & SYS_EVENT_FLAG_WAIT_OR) && (flags & bitptn))) + { + if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) + { + ef->flags &= ~bitptn; + } + else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) + { + ef->flags = 0; + } + + if (result.IsGood()) + { + result = flags; + return CELL_OK; + } + + if (!result.GetAddr()) + { + return CELL_OK; + } + return CELL_EFAULT; + } + + return CELL_EBUSY; +} + +s32 sys_event_flag_set(u32 eflag_id, u64 bitptn) +{ + sys_event.Log("sys_event_flag_set(eflag_id=%d, bitptn=0x%llx)", eflag_id, bitptn); + + EventFlag* ef; + if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; + + u32 tid = GetCurrentPPUThread().GetId(); + + ef->m_mutex.lock(tid); + ef->flags |= bitptn; + if (u32 target = ef->check()) + { + // if signal, leave both mutexes locked... + ef->signal.lock(target); + ef->m_mutex.unlock(tid, target); + } + else + { + ef->m_mutex.unlock(tid); + } + + return CELL_OK; +} + +s32 sys_event_flag_clear(u32 eflag_id, u64 bitptn) +{ + sys_event.Log("sys_event_flag_clear(eflag_id=%d, bitptn=0x%llx)", eflag_id, bitptn); + + EventFlag* ef; + if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; + + SMutexLocker lock(ef->m_mutex); + ef->flags &= bitptn; + + return CELL_OK; +} + +s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num) +{ + sys_event.Log("sys_event_flag_cancel(eflag_id=%d, num_addr=0x%x)", eflag_id, num.GetAddr()); + + EventFlag* ef; + if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; + + std::vector tids; + + { + SMutexLocker lock(ef->m_mutex); + tids.resize(ef->waiters.size()); + for (u32 i = 0; i < ef->waiters.size(); i++) + { + tids[i] = ef->waiters[i].tid; + } + ef->waiters.clear(); + } + + for (u32 i = 0; i < tids.size(); i++) + { + ef->signal.lock(tids[i]); + } + + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "sys_event_flag_cancel(id=%d) aborted", eflag_id); + return CELL_OK; + } + + if (num.IsGood()) + { + num = tids.size(); + return CELL_OK; + } + + if (!num.GetAddr()) + { + return CELL_OK; + } + return CELL_EFAULT; +} + +s32 sys_event_flag_get(u32 eflag_id, mem64_t flags) +{ + sys_event.Log("sys_event_flag_get(eflag_id=%d, flags_addr=0x%x)", eflag_id, flags.GetAddr()); + + EventFlag* ef; + if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; + + if (!flags.IsGood()) + { + return CELL_EFAULT; + } + + SMutexLocker lock(ef->m_mutex); + flags = ef->flags; + + return CELL_OK; +} diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.h b/rpcs3/Emu/SysCalls/lv2/sys_event.h similarity index 50% rename from rpcs3/Emu/SysCalls/lv2/SC_Event_flag.h rename to rpcs3/Emu/SysCalls/lv2/sys_event.h index 4cc1539d8d..000775900f 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.h @@ -1,4 +1,5 @@ #pragma once +#include "Emu/event.h" enum { @@ -73,3 +74,25 @@ struct EventFlag return target; } }; + +// SysCalls +s32 sys_event_queue_create(mem32_t equeue_id, mem_ptr_t attr, u64 event_queue_key, int size); +s32 sys_event_queue_destroy(u32 equeue_id, int mode); +s32 sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 timeout); +s32 sys_event_queue_tryreceive(u32 equeue_id, mem_ptr_t event_array, int size, mem32_t number); +s32 sys_event_queue_drain(u32 event_queue_id); + +s32 sys_event_port_create(mem32_t eport_id, int port_type, u64 name); +s32 sys_event_port_destroy(u32 eport_id); +s32 sys_event_port_connect_local(u32 event_port_id, u32 event_queue_id); +s32 sys_event_port_disconnect(u32 eport_id); +s32 sys_event_port_send(u32 event_port_id, u64 data1, u64 data2, u64 data3); + +s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init); +s32 sys_event_flag_destroy(u32 eflag_id); +s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 timeout); +s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result); +s32 sys_event_flag_set(u32 eflag_id, u64 bitptn); +s32 sys_event_flag_clear(u32 eflag_id, u64 bitptn); +s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num); +s32 sys_event_flag_get(u32 eflag_id, mem64_t flags); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp similarity index 91% rename from rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp index 0914d8e39c..ba0c995a91 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp @@ -7,11 +7,11 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" -#include "SC_Interrupt.h" +#include "sys_interrupt.h" static SysCallBase sc_int("sys_interrupt"); -int sys_interrupt_tag_destroy(u32 intrtag) +s32 sys_interrupt_tag_destroy(u32 intrtag) { sc_int.Warning("sys_interrupt_tag_destroy(intrtag=%d)", intrtag); @@ -38,7 +38,7 @@ int sys_interrupt_tag_destroy(u32 intrtag) return CELL_OK; } -int sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 arg) +s32 sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 arg) { sc_int.Warning("sys_interrupt_thread_establish(ih_addr=0x%x, intrtag=%d, intrthread=%lld, arg=0x%llx)", ih.GetAddr(), intrtag, intrthread, arg); @@ -82,7 +82,7 @@ int sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 return CELL_OK; } -int sys_interrupt_thread_disestablish(u32 ih) +s32 sys_interrupt_thread_disestablish(u32 ih) { sc_int.Error("sys_interrupt_thread_disestablish(ih=%d)", ih); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.h b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.h new file mode 100644 index 0000000000..2254b7e607 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.h @@ -0,0 +1,7 @@ +#pragma once + +// SysCalls +s32 sys_interrupt_tag_destroy(u32 intrtag); +s32 sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 arg); +s32 sys_interrupt_thread_disestablish(u32 ih); +void sys_interrupt_thread_eoi(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp similarity index 93% rename from rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index 170c665068..b4778707da 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -4,12 +4,12 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -#include "SC_Lwmutex.h" -#include "SC_Lwcond.h" +#include "sys_lwmutex.h" +#include "sys_lwcond.h" SysCallBase sys_lwcond("sys_lwcond"); -int sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t lwmutex, mem_ptr_t attr) +s32 sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t lwmutex, mem_ptr_t attr) { sys_lwcond.Log("sys_lwcond_create(lwcond_addr=0x%x, lwmutex_addr=0x%x, attr_addr=0x%x)", lwcond.GetAddr(), lwmutex.GetAddr(), attr.GetAddr()); @@ -46,7 +46,7 @@ int sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t l return CELL_OK; } -int sys_lwcond_destroy(mem_ptr_t lwcond) +s32 sys_lwcond_destroy(mem_ptr_t lwcond) { sys_lwcond.Warning("sys_lwcond_destroy(lwcond_addr=0x%x)", lwcond.GetAddr()); @@ -72,7 +72,7 @@ int sys_lwcond_destroy(mem_ptr_t lwcond) return CELL_OK; } -int sys_lwcond_signal(mem_ptr_t lwcond) +s32 sys_lwcond_signal(mem_ptr_t lwcond) { sys_lwcond.Log("sys_lwcond_signal(lwcond_addr=0x%x)", lwcond.GetAddr()); @@ -103,7 +103,7 @@ int sys_lwcond_signal(mem_ptr_t lwcond) return CELL_OK; } -int sys_lwcond_signal_all(mem_ptr_t lwcond) +s32 sys_lwcond_signal_all(mem_ptr_t lwcond) { sys_lwcond.Log("sys_lwcond_signal_all(lwcond_addr=0x%x)", lwcond.GetAddr()); @@ -134,7 +134,7 @@ int sys_lwcond_signal_all(mem_ptr_t lwcond) return CELL_OK; } -int sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id) +s32 sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id) { sys_lwcond.Log("sys_lwcond_signal_to(lwcond_addr=0x%x, ppu_thread_id=%d)", lwcond.GetAddr(), ppu_thread_id); @@ -173,7 +173,7 @@ int sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id) return CELL_OK; } -int sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) +s32 sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) { sys_lwcond.Log("sys_lwcond_wait(lwcond_addr=0x%x, timeout=%lld)", lwcond.GetAddr(), timeout); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.h b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.h new file mode 100644 index 0000000000..5d5584395a --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.h @@ -0,0 +1,35 @@ +#pragma once + +struct sys_lwcond_attribute_t +{ + union + { + char name[8]; + u64 name_u64; + }; +}; + +struct sys_lwcond_t +{ + be_t lwmutex; + be_t lwcond_queue; +}; + +struct Lwcond +{ + SMutex signal; + SleepQueue m_queue; + + Lwcond(u64 name) + : m_queue(name) + { + } +}; + +// SysCalls +s32 sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t lwmutex, mem_ptr_t attr); +s32 sys_lwcond_destroy(mem_ptr_t lwcond); +s32 sys_lwcond_signal(mem_ptr_t lwcond); +s32 sys_lwcond_signal_all(mem_ptr_t lwcond); +s32 sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id); +s32 sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp similarity index 95% rename from rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index f5ee08bef8..e33893ce81 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -4,11 +4,11 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/lv2/SC_Lwmutex.h" +#include "sys_lwmutex.h" SysCallBase sc_lwmutex("sys_lwmutex"); -int sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_t attr) +s32 sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_t attr) { sc_lwmutex.Log("sys_lwmutex_create(lwmutex_addr=0x%x, lwmutex_attr_addr=0x%x)", lwmutex.GetAddr(), attr.GetAddr()); @@ -48,7 +48,7 @@ int sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_t lwmutex) +s32 sys_lwmutex_destroy(mem_ptr_t lwmutex) { sc_lwmutex.Warning("sys_lwmutex_destroy(lwmutex_addr=0x%x)", lwmutex.GetAddr()); @@ -69,7 +69,7 @@ int sys_lwmutex_destroy(mem_ptr_t lwmutex) } } -int sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout) +s32 sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout) { sc_lwmutex.Log("sys_lwmutex_lock(lwmutex_addr=0x%x, timeout=%lld)", lwmutex.GetAddr(), timeout); @@ -81,7 +81,7 @@ int sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout) return lwmutex->lock(GetCurrentPPUThread().GetId(), timeout ? ((timeout < 1000) ? 1 : (timeout / 1000)) : 0); } -int sys_lwmutex_trylock(mem_ptr_t lwmutex) +s32 sys_lwmutex_trylock(mem_ptr_t lwmutex) { sc_lwmutex.Log("sys_lwmutex_trylock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); @@ -90,7 +90,7 @@ int sys_lwmutex_trylock(mem_ptr_t lwmutex) return lwmutex->trylock(GetCurrentPPUThread().GetId()); } -int sys_lwmutex_unlock(mem_ptr_t lwmutex) +s32 sys_lwmutex_unlock(mem_ptr_t lwmutex) { sc_lwmutex.Log("sys_lwmutex_unlock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.h b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.h similarity index 81% rename from rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.h rename to rpcs3/Emu/SysCalls/lv2/sys_lwmutex.h index ed24e07047..ab02592b9f 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Lwmutex.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.h @@ -78,3 +78,10 @@ struct sys_lwmutex_t int unlock(be_t tid); int lock(be_t tid, u64 timeout); }; + +// SysCalls +s32 sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_t attr); +s32 sys_lwmutex_destroy(mem_ptr_t lwmutex); +s32 sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout); +s32 sys_lwmutex_trylock(mem_ptr_t lwmutex); +s32 sys_lwmutex_unlock(mem_ptr_t lwmutex); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp new file mode 100644 index 0000000000..480f0c5d7d --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp @@ -0,0 +1,169 @@ +#include "stdafx.h" +#include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/SysCalls.h" +#include "sys_memory.h" +#include + +SysCallBase sc_mem("memory"); + +s32 sys_memory_allocate(u32 size, u32 flags, u32 alloc_addr_addr) +{ + sc_mem.Log("sys_memory_allocate(size=0x%x, flags=0x%x)", size, flags); + + // Check page size. + u32 addr; + switch(flags) + { + case SYS_MEMORY_PAGE_SIZE_1M: + if(size & 0xfffff) return CELL_EALIGN; + addr = Memory.Alloc(size, 0x100000); + break; + + case SYS_MEMORY_PAGE_SIZE_64K: + if(size & 0xffff) return CELL_EALIGN; + addr = Memory.Alloc(size, 0x10000); + break; + + default: return CELL_EINVAL; + } + + if(!addr) + return CELL_ENOMEM; + + // Write back the start address of the allocated area. + sc_mem.Log("Memory allocated! [addr: 0x%x, size: 0x%x]", addr, size); + Memory.Write32(alloc_addr_addr, addr); + + return CELL_OK; +} + +s32 sys_memory_allocate_from_container(u32 size, u32 cid, u32 flags, u32 alloc_addr_addr) +{ + sc_mem.Log("sys_memory_allocate_from_container(size=0x%x, cid=0x%x, flags=0x%x)", size, cid, flags); + + // Check if this container ID is valid. + MemoryContainerInfo* ct; + if(!sc_mem.CheckId(cid, ct)) + return CELL_ESRCH; + + // Check page size. + switch(flags) + { + case SYS_MEMORY_PAGE_SIZE_1M: + if(size & 0xfffff) return CELL_EALIGN; + ct->addr = Memory.Alloc(size, 0x100000); + break; + + case SYS_MEMORY_PAGE_SIZE_64K: + if(size & 0xffff) return CELL_EALIGN; + ct->addr = Memory.Alloc(size, 0x10000); + break; + + default: return CELL_EINVAL; + } + + // Store the address and size in the container. + if(!ct->addr) + return CELL_ENOMEM; + ct->size = size; + + // Write back the start address of the allocated area. + sc_mem.Log("Memory allocated! [addr: 0x%x, size: 0x%x]", ct->addr, ct->size); + Memory.Write32(alloc_addr_addr, ct->addr); + + return CELL_OK; +} + +s32 sys_memory_free(u32 start_addr) +{ + sc_mem.Log("sys_memory_free(start_addr=0x%x)", start_addr); + + // Release the allocated memory. + if(!Memory.Free(start_addr)) + return CELL_EFAULT; + + return CELL_OK; +} + +s32 sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr) +{ + sc_mem.Warning("sys_memory_get_page_attribute(addr=0x%x, attr_addr=0x%x)", addr, attr.GetAddr()); + + if (!attr.IsGood()) + return CELL_EFAULT; + + // TODO: Implement per thread page attribute setting. + attr->attribute = 0; + attr->page_size = 0; + attr->access_right = 0; + attr->pad = 0; + + return CELL_OK; +} + +s32 sys_memory_get_user_memory_size(mem_ptr_t mem_info) +{ + sc_mem.Warning("sys_memory_get_user_memory_size(mem_info_addr=0x%x)", mem_info.GetAddr()); + + // Fetch the user memory available. + mem_info->total_user_memory = Memory.GetUserMemTotalSize(); + mem_info->available_user_memory = Memory.GetUserMemAvailSize(); + return CELL_OK; +} + +s32 sys_memory_container_create(mem32_t cid, u32 yield_size) +{ + sc_mem.Warning("sys_memory_container_create(cid_addr=0x%x, yield_size=0x%x)", cid.GetAddr(), yield_size); + + if (!cid.IsGood()) + return CELL_EFAULT; + + yield_size &= ~0xfffff; //round down to 1 MB granularity + u64 addr = Memory.Alloc(yield_size, 0x100000); //1 MB alignment + + if(!addr) + return CELL_ENOMEM; + + // Wrap the allocated memory in a memory container. + MemoryContainerInfo *ct = new MemoryContainerInfo(addr, yield_size); + cid = sc_mem.GetNewId(ct); + procObjects.mem_objects.insert(cid); + + sc_mem.Warning("*** memory_container created(addr=0x%llx): id = %d", addr, cid.GetValue()); + + return CELL_OK; +} + +s32 sys_memory_container_destroy(u32 cid) +{ + sc_mem.Warning("sys_memory_container_destroy(cid=%d)", cid); + + // Check if this container ID is valid. + MemoryContainerInfo* ct; + if(!sc_mem.CheckId(cid, ct)) + return CELL_ESRCH; + + // Release the allocated memory and remove the ID. + Memory.Free(ct->addr); + Emu.GetIdManager().RemoveID(cid); + + return CELL_OK; +} + +s32 sys_memory_container_get_size(mem_ptr_t mem_info, u32 cid) +{ + sc_mem.Warning("sys_memory_container_get_size(mem_info_addr=0x%x, cid=%d)", mem_info.GetAddr(), cid); + + // Check if this container ID is valid. + MemoryContainerInfo* ct; + if(!sc_mem.CheckId(cid, ct)) + return CELL_ESRCH; + + // HACK: Return all memory. + sys_memory_info_t info; + mem_info->total_user_memory = ct->size; + mem_info->available_user_memory = ct->size; + return CELL_OK; +} diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Memory.h b/rpcs3/Emu/SysCalls/lv2/sys_memory.h similarity index 55% rename from rpcs3/Emu/SysCalls/lv2/SC_Memory.h rename to rpcs3/Emu/SysCalls/lv2/sys_memory.h index e8d37d3905..3cd28d32cb 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Memory.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.h @@ -1,77 +1,53 @@ -#pragma once - -#define SYS_MEMORY_CONTAINER_ID_INVALID 0xFFFFFFFF -#define SYS_MEMORY_ACCESS_RIGHT_NONE 0x00000000000000F0ULL -#define SYS_MEMORY_ACCESS_RIGHT_PPU_THREAD 0x0000000000000008ULL -#define SYS_MEMORY_ACCESS_RIGHT_HANDLER 0x0000000000000004ULL -#define SYS_MEMORY_ACCESS_RIGHT_SPU_THREAD 0x0000000000000002ULL -#define SYS_MEMORY_ACCESS_RIGHT_SPU_RAW 0x0000000000000001ULL -#define SYS_MEMORY_ATTR_READ_ONLY 0x0000000000080000ULL -#define SYS_MEMORY_ATTR_READ_WRITE 0x0000000000040000ULL -#define SYS_MMAPPER_FIXED_ADDR 0xB0000000 -#define SYS_MMAPPER_FIXED_SIZE 0x10000000 -#define SYS_VM_TEST_INVALID 0x0000ULL -#define SYS_VM_TEST_UNUSED 0x0001ULL -#define SYS_VM_TEST_ALLOCATED 0x0002ULL -#define SYS_VM_TEST_STORED 0x0004ULL - -enum -{ - SYS_MEMORY_PAGE_SIZE_1M = 0x400, - SYS_MEMORY_PAGE_SIZE_64K = 0x200, -}; - -struct sys_memory_info_t -{ - be_t total_user_memory; - be_t available_user_memory; -}; - - -struct sys_page_attr_t -{ - u64 attribute; - u64 access_right; - u32 page_size; - u32 pad; -}; - -struct MemoryContainerInfo -{ - u64 addr; - u32 size; - - MemoryContainerInfo(u64 addr, u32 size) - : addr(addr) - , size(size) - { - } -}; - -struct mmapper_info -{ - u64 addr; - u32 size; - u32 flags; - - mmapper_info(u64 _addr, u32 _size, u32 _flags) - : addr(_addr) - , size(_size) - , flags(_flags) - { - } - - mmapper_info() - { - } -}; - -struct sys_vm_statistics { - u64 vm_crash_ppu; - u64 vm_crash_spu; - u64 vm_read; - u64 vm_write; - u32 physical_mem_size; - u32 physical_mem_used; - u64 timestamp; -}; \ No newline at end of file +#pragma once + +#define SYS_MEMORY_CONTAINER_ID_INVALID 0xFFFFFFFF +#define SYS_MEMORY_ACCESS_RIGHT_NONE 0x00000000000000F0ULL +#define SYS_MEMORY_ACCESS_RIGHT_PPU_THREAD 0x0000000000000008ULL +#define SYS_MEMORY_ACCESS_RIGHT_HANDLER 0x0000000000000004ULL +#define SYS_MEMORY_ACCESS_RIGHT_SPU_THREAD 0x0000000000000002ULL +#define SYS_MEMORY_ACCESS_RIGHT_SPU_RAW 0x0000000000000001ULL +#define SYS_MEMORY_ATTR_READ_ONLY 0x0000000000080000ULL +#define SYS_MEMORY_ATTR_READ_WRITE 0x0000000000040000ULL + +enum +{ + SYS_MEMORY_PAGE_SIZE_1M = 0x400, + SYS_MEMORY_PAGE_SIZE_64K = 0x200, +}; + +struct sys_memory_info_t +{ + be_t total_user_memory; + be_t available_user_memory; +}; + + +struct sys_page_attr_t +{ + u64 attribute; + u64 access_right; + u32 page_size; + u32 pad; +}; + +struct MemoryContainerInfo +{ + u64 addr; + u32 size; + + MemoryContainerInfo(u64 addr, u32 size) + : addr(addr) + , size(size) + { + } +}; + +// SysCalls +s32 sys_memory_allocate(u32 size, u32 flags, u32 alloc_addr_addr); +s32 sys_memory_allocate_from_container(u32 size, u32 cid, u32 flags, u32 alloc_addr_addr); +s32 sys_memory_free(u32 start_addr); +s32 sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr); +s32 sys_memory_get_user_memory_size(mem_ptr_t mem_info); +s32 sys_memory_container_create(mem32_t cid, u32 yield_size); +s32 sys_memory_container_destroy(u32 cid); +s32 sys_memory_container_get_size(mem_ptr_t mem_info, u32 cid); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp new file mode 100644 index 0000000000..edd1226fc7 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp @@ -0,0 +1,263 @@ +#include "stdafx.h" +#include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/SysCalls.h" +#include "sys_mmapper.h" +#include + +SysCallBase sys_mmapper("sys_mmapper"); +std::map mmapper_info_map; + +s32 sys_mmapper_allocate_address(u32 size, u64 flags, u32 alignment, u32 alloc_addr) +{ + sys_mmapper.Warning("sys_mmapper_allocate_address(size=0x%x, flags=0x%llx, alignment=0x%x, alloc_addr=0x%x)", + size, flags, alignment, alloc_addr); + + if(!Memory.IsGoodAddr(alloc_addr)) + return CELL_EFAULT; + + // Check for valid alignment. + if(alignment > 0x80000000) + return CELL_EALIGN; + + // Check page size. + u32 addr; + switch(flags & (SYS_MEMORY_PAGE_SIZE_1M | SYS_MEMORY_PAGE_SIZE_64K)) + { + default: + case SYS_MEMORY_PAGE_SIZE_1M: + if(Memory.AlignAddr(size, alignment) & 0xfffff) + return CELL_EALIGN; + addr = Memory.Alloc(size, 0x100000); + break; + + case SYS_MEMORY_PAGE_SIZE_64K: + if(Memory.AlignAddr(size, alignment) & 0xffff) + return CELL_EALIGN; + addr = Memory.Alloc(size, 0x10000); + break; + } + + // Write back the start address of the allocated area. + Memory.Write32(alloc_addr, addr); + + return CELL_OK; +} + +s32 sys_mmapper_allocate_fixed_address() +{ + sys_mmapper.Warning("sys_mmapper_allocate_fixed_address"); + + // Allocate a fixed size from user memory. + if (!Memory.Alloc(SYS_MMAPPER_FIXED_SIZE, 0x100000)) + return CELL_EEXIST; + + return CELL_OK; +} + +s32 sys_mmapper_allocate_memory(u32 size, u64 flags, mem32_t mem_id) +{ + sys_mmapper.Warning("sys_mmapper_allocate_memory(size=0x%x, flags=0x%llx, mem_id_addr=0x%x)", size, flags, mem_id.GetAddr()); + + if(!mem_id.IsGood()) + return CELL_EFAULT; + + // Check page granularity. + u32 addr; + switch(flags & (SYS_MEMORY_PAGE_SIZE_1M | SYS_MEMORY_PAGE_SIZE_64K)) + { + case SYS_MEMORY_PAGE_SIZE_1M: + if(size & 0xfffff) + return CELL_EALIGN; + addr = Memory.Alloc(size, 0x100000); + break; + + case SYS_MEMORY_PAGE_SIZE_64K: + if(size & 0xffff) + return CELL_EALIGN; + addr = Memory.Alloc(size, 0x10000); + break; + + default: + return CELL_EINVAL; + } + + if(!addr) + return CELL_ENOMEM; + + // Generate a new mem ID. + mem_id = sys_mmapper.GetNewId(new mmapper_info(addr, size, flags)); + + return CELL_OK; +} + +s32 sys_mmapper_allocate_memory_from_container(u32 size, u32 cid, u64 flags, mem32_t mem_id) +{ + sys_mmapper.Warning("sys_mmapper_allocate_memory_from_container(size=0x%x, cid=%d, flags=0x%llx, mem_id_addr=0x%x)", + size, cid, flags, mem_id.GetAddr()); + + if(!mem_id.IsGood()) + return CELL_EFAULT; + + // Check if this container ID is valid. + MemoryContainerInfo* ct; + if(!sys_mmapper.CheckId(cid, ct)) + return CELL_ESRCH; + + // Check page granularity. + switch(flags & (SYS_MEMORY_PAGE_SIZE_1M | SYS_MEMORY_PAGE_SIZE_64K)) + { + case SYS_MEMORY_PAGE_SIZE_1M: + if(size & 0xfffff) + return CELL_EALIGN; + ct->addr = Memory.Alloc(size, 0x100000); + break; + + case SYS_MEMORY_PAGE_SIZE_64K: + if(size & 0xffff) + return CELL_EALIGN; + ct->addr = Memory.Alloc(size, 0x10000); + break; + + default: + return CELL_EINVAL; + } + + if(!ct->addr) + return CELL_ENOMEM; + ct->size = size; + + // Generate a new mem ID. + mem_id = sys_mmapper.GetNewId(new mmapper_info(ct->addr, ct->size, flags)); + + return CELL_OK; +} + +s32 sys_mmapper_change_address_access_right(u32 start_addr, u64 flags) +{ + sys_mmapper.Warning("sys_mmapper_change_address_access_right(start_addr=0x%x, flags=0x%llx)", start_addr, flags); + + if (!Memory.IsGoodAddr(start_addr)) + return CELL_EINVAL; + + // TODO + + return CELL_OK; +} + +s32 sys_mmapper_free_address(u32 start_addr) +{ + sys_mmapper.Warning("sys_mmapper_free_address(start_addr=0x%x)", start_addr); + + if(!Memory.IsGoodAddr(start_addr)) + return CELL_EINVAL; + + // Free the address. + Memory.Free(start_addr); + return CELL_OK; +} + +s32 sys_mmapper_free_memory(u32 mem_id) +{ + sys_mmapper.Warning("sys_mmapper_free_memory(mem_id=0x%x)", mem_id); + + // Check if this mem ID is valid. + mmapper_info* info; + if(!sys_mmapper.CheckId(mem_id, info)) + return CELL_ESRCH; + + // Release the allocated memory and remove the ID. + Memory.Free(info->addr); + Emu.GetIdManager().RemoveID(mem_id); + + return CELL_OK; +} + +s32 sys_mmapper_map_memory(u32 start_addr, u32 mem_id, u64 flags) +{ + sys_mmapper.Warning("sys_mmapper_map_memory(start_addr=0x%x, mem_id=0x%x, flags=0x%llx)", start_addr, mem_id, flags); + + // Check if this mem ID is valid. + mmapper_info* info; + if(!sys_mmapper.CheckId(mem_id, info)) + return CELL_ESRCH; + + // Map the memory into the process address. + if(!Memory.Map(start_addr, info->addr, info->size)) + sys_mmapper.Error("sys_mmapper_map_memory failed!"); + + // Keep track of mapped addresses. + mmapper_info_map[mem_id] = start_addr; + + return CELL_OK; +} + +s32 sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, u32 alloc_addr) +{ + sys_mmapper.Warning("sys_mmapper_search_and_map(start_addr=0x%x, mem_id=0x%x, flags=0x%llx, alloc_addr=0x%x)", + start_addr, mem_id, flags, alloc_addr); + + if(!Memory.IsGoodAddr(alloc_addr)) + return CELL_EFAULT; + + // Check if this mem ID is valid. + mmapper_info* info; + if(!sys_mmapper.CheckId(mem_id, info)) + return CELL_ESRCH; + + // Search for a mappable address. + u32 addr; + bool found; + for (int i = 0; i < SYS_MMAPPER_FIXED_SIZE; i += 0x100000) + { + addr = start_addr + i; + found = Memory.Map(addr, info->addr, info->size); + if(found) + { + sys_mmapper.Warning("Found and mapped address 0x%x", addr); + break; + } + } + + // Check if the address is valid. + if (!Memory.IsGoodAddr(addr) || !found) + return CELL_ENOMEM; + + // Write back the start address of the allocated area. + Memory.Write32(alloc_addr, addr); + + // Keep track of mapped addresses. + mmapper_info_map[mem_id] = addr; + + return CELL_OK; +} + +s32 sys_mmapper_unmap_memory(u32 start_addr, u32 mem_id_addr) +{ + sys_mmapper.Warning("sys_mmapper_unmap_memory(start_addr=0x%x, mem_id_addr=0x%x)", start_addr, mem_id_addr); + + if (!Memory.IsGoodAddr(start_addr)) + return CELL_EINVAL; + + if (!Memory.IsGoodAddr(mem_id_addr)) + return CELL_EFAULT; + + // Write back the mem ID of the unmapped area. + u32 mem_id = mmapper_info_map.find(start_addr)->first; + Memory.Write32(mem_id_addr, mem_id); + + return CELL_OK; +} + +s32 sys_mmapper_enable_page_fault_notification(u32 start_addr, u32 q_id) +{ + sys_mmapper.Warning("sys_mmapper_enable_page_fault_notification(start_addr=0x%x, q_id=0x%x)", start_addr, q_id); + + if (!Memory.IsGoodAddr(start_addr)) + return CELL_EINVAL; + + // TODO + + return CELL_OK; +} diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.h b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.h new file mode 100644 index 0000000000..6a7a71d0e0 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.h @@ -0,0 +1,35 @@ +#pragma once + +#define SYS_MMAPPER_FIXED_ADDR 0xB0000000 +#define SYS_MMAPPER_FIXED_SIZE 0x10000000 + +struct mmapper_info +{ + u64 addr; + u32 size; + u32 flags; + + mmapper_info(u64 _addr, u32 _size, u32 _flags) + : addr(_addr) + , size(_size) + , flags(_flags) + { + } + + mmapper_info() + { + } +}; + +// SysCalls +s32 sys_mmapper_allocate_address(u32 size, u64 flags, u32 alignment, u32 alloc_addr); +s32 sys_mmapper_allocate_fixed_address(); +s32 sys_mmapper_allocate_memory(u32 size, u64 flags, mem32_t mem_id); +s32 sys_mmapper_allocate_memory_from_container(u32 size, u32 cid, u64 flags, mem32_t mem_id); +s32 sys_mmapper_change_address_access_right(u32 start_addr, u64 flags); +s32 sys_mmapper_free_address(u32 start_addr); +s32 sys_mmapper_free_memory(u32 mem_id); +s32 sys_mmapper_map_memory(u32 start_addr, u32 mem_id, u64 flags); +s32 sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, u32 alloc_addr); +s32 sys_mmapper_unmap_memory(u32 start_addr, u32 mem_id_addr); +s32 sys_mmapper_enable_page_fault_notification(u32 start_addr, u32 q_id); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp similarity index 95% rename from rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index 635f3cbaa0..524dea7ef6 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -4,12 +4,12 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -#include "SC_Mutex.h" #include "Utilities/SMutex.h" +#include "sys_mutex.h" SysCallBase sys_mtx("sys_mutex"); -int sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) +s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) { sys_mtx.Log("sys_mutex_create(mutex_id_addr=0x%x, attr_addr=0x%x)", mutex_id.GetAddr(), attr.GetAddr()); @@ -58,7 +58,7 @@ int sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) return CELL_OK; } -int sys_mutex_destroy(u32 mutex_id) +s32 sys_mutex_destroy(u32 mutex_id) { sys_mtx.Warning("sys_mutex_destroy(mutex_id=%d)", mutex_id); @@ -91,7 +91,7 @@ int sys_mutex_destroy(u32 mutex_id) return CELL_OK; } -int sys_mutex_lock(u32 mutex_id, u64 timeout) +s32 sys_mutex_lock(u32 mutex_id, u64 timeout) { sys_mtx.Log("sys_mutex_lock(mutex_id=%d, timeout=%lld)", mutex_id, timeout); @@ -160,7 +160,7 @@ abort: return CELL_ESRCH; } -int sys_mutex_trylock(u32 mutex_id) +s32 sys_mutex_trylock(u32 mutex_id) { sys_mtx.Log("sys_mutex_trylock(mutex_id=%d)", mutex_id); @@ -207,7 +207,7 @@ int sys_mutex_trylock(u32 mutex_id) return CELL_EBUSY; } -int sys_mutex_unlock(u32 mutex_id) +s32 sys_mutex_unlock(u32 mutex_id) { sys_mtx.Log("sys_mutex_unlock(mutex_id=%d)", mutex_id); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h b/rpcs3/Emu/SysCalls/lv2/sys_mutex.h similarity index 80% rename from rpcs3/Emu/SysCalls/lv2/SC_Mutex.h rename to rpcs3/Emu/SysCalls/lv2/sys_mutex.h index 59efee8ffb..fb91773145 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Mutex.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.h @@ -1,4 +1,5 @@ #pragma once +#include "sys_lwmutex.h" struct sys_mutex_attribute { @@ -52,3 +53,10 @@ struct Mutex m_queue.m_mutex.unlock(); } }; + +// SysCalls +s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr); +s32 sys_mutex_destroy(u32 mutex_id); +s32 sys_mutex_lock(u32 mutex_id, u64 timeout); +s32 sys_mutex_trylock(u32 mutex_id); +s32 sys_mutex_unlock(u32 mutex_id); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp similarity index 87% rename from rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index 1db72cb2df..4761e13cd2 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -6,23 +6,12 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" +#include "sys_ppu_thread.h" extern Module *sysPrxForUser; static const u32 PPU_THREAD_ID_INVALID = 0xFFFFFFFFU; -enum -{ - SYS_PPU_THREAD_ONCE_INIT, - SYS_PPU_THREAD_DONE_INIT, -}; - -enum ppu_thread_flags : u64 -{ - SYS_PPU_THREAD_CREATE_JOINABLE = 0x1, - SYS_PPU_THREAD_CREATE_INTERRUPT = 0x2, -}; - void sys_ppu_thread_exit(u64 errorcode) { sysPrxForUser->Log("sys_ppu_thread_exit(0x%llx)", errorcode); @@ -40,14 +29,14 @@ void sys_ppu_thread_exit(u64 errorcode) thr.Stop(); } -int sys_ppu_thread_yield() +s32 sys_ppu_thread_yield() { sysPrxForUser->Log("sys_ppu_thread_yield()"); Sleep(1); return CELL_OK; } -int sys_ppu_thread_join(u64 thread_id, mem64_t vptr) +s32 sys_ppu_thread_join(u64 thread_id, mem64_t vptr) { sysPrxForUser->Warning("sys_ppu_thread_join(thread_id=%lld, vptr_addr=0x%x)", thread_id, vptr.GetAddr()); @@ -68,7 +57,7 @@ int sys_ppu_thread_join(u64 thread_id, mem64_t vptr) return CELL_OK; } -int sys_ppu_thread_detach(u64 thread_id) +s32 sys_ppu_thread_detach(u64 thread_id) { sysPrxForUser->Error("sys_ppu_thread_detach(thread_id=%lld)", thread_id); @@ -88,7 +77,7 @@ void sys_ppu_thread_get_join_state(u32 isjoinable_addr) Memory.Write32(isjoinable_addr, GetCurrentPPUThread().IsJoinable()); } -int sys_ppu_thread_set_priority(u64 thread_id, int prio) +s32 sys_ppu_thread_set_priority(u64 thread_id, s32 prio) { sysPrxForUser->Log("sys_ppu_thread_set_priority(thread_id=%lld, prio=%d)", thread_id, prio); @@ -100,7 +89,7 @@ int sys_ppu_thread_set_priority(u64 thread_id, int prio) return CELL_OK; } -int sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr) +s32 sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr) { sysPrxForUser->Log("sys_ppu_thread_get_priority(thread_id=%lld, prio_addr=0x%x)", thread_id, prio_addr); @@ -113,7 +102,7 @@ int sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr) return CELL_OK; } -int sys_ppu_thread_get_stack_information(u32 info_addr) +s32 sys_ppu_thread_get_stack_information(u32 info_addr) { sysPrxForUser->Log("sys_ppu_thread_get_stack_information(info_addr=0x%x)", info_addr); @@ -127,7 +116,7 @@ int sys_ppu_thread_get_stack_information(u32 info_addr) return CELL_OK; } -int sys_ppu_thread_stop(u64 thread_id) +s32 sys_ppu_thread_stop(u64 thread_id) { sysPrxForUser->Warning("sys_ppu_thread_stop(thread_id=%lld)", thread_id); @@ -139,7 +128,7 @@ int sys_ppu_thread_stop(u64 thread_id) return CELL_OK; } -int sys_ppu_thread_restart(u64 thread_id) +s32 sys_ppu_thread_restart(u64 thread_id) { sysPrxForUser->Warning("sys_ppu_thread_restart(thread_id=%lld)", thread_id); @@ -152,7 +141,7 @@ int sys_ppu_thread_restart(u64 thread_id) return CELL_OK; } -int sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr) +s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 stacksize, u64 flags, u32 threadname_addr) { std::string threadname = ""; if (Memory.IsGoodAddr(threadname_addr)) @@ -232,7 +221,7 @@ void sys_ppu_thread_once(u32 once_ctrl_addr, u32 entry) } } -int sys_ppu_thread_get_id(const u32 id_addr) +s32 sys_ppu_thread_get_id(const u32 id_addr) { sysPrxForUser->Log("sys_ppu_thread_get_id(id_addr=0x%x)", id_addr); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h new file mode 100644 index 0000000000..5256a9a5dc --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h @@ -0,0 +1,28 @@ +#pragma once + +enum +{ + SYS_PPU_THREAD_ONCE_INIT, + SYS_PPU_THREAD_DONE_INIT, +}; + +enum ppu_thread_flags : u64 +{ + SYS_PPU_THREAD_CREATE_JOINABLE = 0x1, + SYS_PPU_THREAD_CREATE_INTERRUPT = 0x2, +}; + +// SysCalls +void sys_ppu_thread_exit(u64 errorcode); +s32 sys_ppu_thread_yield(); +s32 sys_ppu_thread_join(u64 thread_id, mem64_t vptr); +s32 sys_ppu_thread_detach(u64 thread_id); +void sys_ppu_thread_get_join_state(u32 isjoinable_addr); +s32 sys_ppu_thread_set_priority(u64 thread_id, s32 prio); +s32 sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr); +s32 sys_ppu_thread_get_stack_information(u32 info_addr); +s32 sys_ppu_thread_stop(u64 thread_id); +s32 sys_ppu_thread_restart(u64 thread_id); +s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 stacksize, u64 flags, u32 threadname_addr); +void sys_ppu_thread_once(u32 once_ctrl_addr, u32 entry); +s32 sys_ppu_thread_get_id(const u32 id_addr); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp similarity index 93% rename from rpcs3/Emu/SysCalls/lv2/SC_Process.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_process.cpp index 007bd5b8f8..da26b14349 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -3,24 +3,24 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "SC_Process.h" +#include "sys_process.h" SysCallBase sc_p("Process"); sysProcessObjects_t procObjects; -int sys_process_getpid() +s32 sys_process_getpid() { return 1; } -int sys_process_getppid() +s32 sys_process_getppid() { sc_p.Warning("TODO: sys_process_getppid() returns 0"); return 0; } -int sys_process_exit(s32 errorcode) +s32 sys_process_exit(s32 errorcode) { sc_p.Warning("sys_process_exit(%d)", errorcode); Emu.Pause(); // Emu.Stop() does crash @@ -130,7 +130,7 @@ void sys_game_process_exitspawn2( return; } -int sys_process_get_number_of_object(u32 object, mem32_t nump) +s32 sys_process_get_number_of_object(u32 object, mem32_t nump) { sc_p.Warning("sys_process_get_number_of_object(object=%d, nump_addr=0x%x)", object, nump.GetAddr()); @@ -165,7 +165,7 @@ int sys_process_get_number_of_object(u32 object, mem32_t nump) return CELL_OK; } -int sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_size) +s32 sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_size) { sc_p.Warning("TODO: sys_process_get_id(object=%d, buffer_addr=0x%x, size=%d, set_size_addr=0x%x)", object, buffer.GetAddr(), size, set_size.GetAddr()); @@ -208,7 +208,7 @@ int sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_siz return CELL_OK; } -int sys_process_get_paramsfo(mem8_ptr_t buffer) +s32 sys_process_get_paramsfo(mem8_ptr_t buffer) { sc_p.Warning("TODO: sys_process_get_paramsfo(buffer_addr=0x%x) returns CELL_ENOENT", buffer.GetAddr()); return CELL_ENOENT; @@ -227,7 +227,7 @@ int sys_process_get_paramsfo(mem8_ptr_t buffer) return CELL_OK;*/ } -int sys_process_get_sdk_version(u32 pid, mem32_t version) +s32 sys_process_get_sdk_version(u32 pid, mem32_t version) { sc_p.Warning("sys_process_get_sdk_version(pid=%d, version_addr=0x%x)", pid, version.GetAddr()); @@ -238,34 +238,34 @@ int sys_process_get_sdk_version(u32 pid, mem32_t version) return CELL_OK; } -int sys_process_kill(u32 pid) +s32 sys_process_kill(u32 pid) { sc_p.Error("TODO: sys_process_kill(pid=%d)", pid); return CELL_OK; } -int sys_process_wait_for_child(u32 pid, mem32_t status, u64 unk) +s32 sys_process_wait_for_child(u32 pid, mem32_t status, u64 unk) { sc_p.Error("TODO: sys_process_wait_for_child(pid=%d, status_addr=0x%x, unk=0x%llx", pid, status.GetAddr(), unk); return CELL_OK; } -int sys_process_wait_for_child2(u64 unk1, u64 unk2, u64 unk3, u64 unk4, u64 unk5, u64 unk6) +s32 sys_process_wait_for_child2(u64 unk1, u64 unk2, u64 unk3, u64 unk4, u64 unk5, u64 unk6) { sc_p.Error("TODO: sys_process_wait_for_child2(unk1=0x%llx, unk2=0x%llx, unk3=0x%llx, unk4=0x%llx, unk5=0x%llx, unk6=0x%llx)", unk1, unk2, unk3, unk4, unk5, unk6); return CELL_OK; } -int sys_process_get_status(u64 unk) +s32 sys_process_get_status(u64 unk) { sc_p.Error("TODO: sys_process_get_status(unk=0x%llx)", unk); //Memory.Write32(CPU.GPR[4], GetPPUThreadStatus(CPU)); return CELL_OK; } -int sys_process_detach_child(u64 unk) +s32 sys_process_detach_child(u64 unk) { sc_p.Error("TODO: sys_process_detach_child(unk=0x%llx)", unk); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Process.h b/rpcs3/Emu/SysCalls/lv2/sys_process.h similarity index 78% rename from rpcs3/Emu/SysCalls/lv2/SC_Process.h rename to rpcs3/Emu/SysCalls/lv2/sys_process.h index 86803fc8d4..3ec275818b 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Process.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.h @@ -52,18 +52,18 @@ struct sysProcessObjects_t extern sysProcessObjects_t procObjects; // SysCalls -int sys_process_getpid(); -int sys_process_getppid(); -int sys_process_get_number_of_object(u32 object, mem32_t nump); -int sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_size); -int sys_process_get_paramsfo(mem8_ptr_t buffer); -int sys_process_get_sdk_version(u32 pid, mem32_t version); -int sys_process_get_status(u64 unk); -int sys_process_exit(s32 errorcode); -int sys_process_kill(u32 pid); -int sys_process_wait_for_child(u32 pid, mem32_t status, u64 unk); -int sys_process_wait_for_child2(u64 unk1, u64 unk2, u64 unk3, u64 unk4, u64 unk5, u64 unk6); -int sys_process_detach_child(u64 unk); +s32 sys_process_getpid(); +s32 sys_process_getppid(); +s32 sys_process_get_number_of_object(u32 object, mem32_t nump); +s32 sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_size); +s32 sys_process_get_paramsfo(mem8_ptr_t buffer); +s32 sys_process_get_sdk_version(u32 pid, mem32_t version); +s32 sys_process_get_status(u64 unk); +s32 sys_process_exit(s32 errorcode); +s32 sys_process_kill(u32 pid); +s32 sys_process_wait_for_child(u32 pid, mem32_t status, u64 unk); +s32 sys_process_wait_for_child2(u64 unk1, u64 unk2, u64 unk3, u64 unk4, u64 unk5, u64 unk6); +s32 sys_process_detach_child(u64 unk); void sys_game_process_exitspawn(u32 path_addr, u32 argv_addr, u32 envp_addr, u32 data_addr, u32 data_size, u32 prio, u64 flags); void sys_game_process_exitspawn2(u32 path_addr, u32 argv_addr, u32 envp_addr, diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp similarity index 99% rename from rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index 40075871ad..bea1e06449 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_PRX.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -3,7 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "SC_PRX.h" +#include "sys_prx.h" SysCallBase sys_prx("sys_prx"); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_PRX.h b/rpcs3/Emu/SysCalls/lv2/sys_prx.h similarity index 100% rename from rpcs3/Emu/SysCalls/lv2/SC_PRX.h rename to rpcs3/Emu/SysCalls/lv2/sys_prx.h diff --git a/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp similarity index 74% rename from rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp index d36e96f846..7f19dfd9ad 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_RSX.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp @@ -3,76 +3,77 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "sys_rsx.h" SysCallBase sys_rsx("sys_rsx"); -int sys_rsx_device_open() +s32 sys_rsx_device_open() { sys_rsx.Error("TODO: sys_rsx_device_open()"); return CELL_OK; } -int sys_rsx_device_close() +s32 sys_rsx_device_close() { sys_rsx.Error("TODO: sys_rsx_device_close()"); return CELL_OK; } -int sys_rsx_memory_allocate() +s32 sys_rsx_memory_allocate() { sys_rsx.Error("TODO: sys_rsx_memory_allocate()"); return CELL_OK; } -int sys_rsx_memory_free() +s32 sys_rsx_memory_free() { sys_rsx.Error("TODO: sys_rsx_memory_free()"); return CELL_OK; } -int sys_rsx_context_allocate() +s32 sys_rsx_context_allocate() { sys_rsx.Error("TODO: sys_rsx_context_allocate()"); return CELL_OK; } -int sys_rsx_context_free() +s32 sys_rsx_context_free() { sys_rsx.Error("TODO: sys_rsx_context_free()"); return CELL_OK; } -int sys_rsx_context_iomap() +s32 sys_rsx_context_iomap() { sys_rsx.Error("TODO: sys_rsx_context_iomap()"); return CELL_OK; } -int sys_rsx_context_iounmap() +s32 sys_rsx_context_iounmap() { sys_rsx.Error("TODO: sys_rsx_context_iounmap()"); return CELL_OK; } -int sys_rsx_context_attribute(s32 context_id, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6) +s32 sys_rsx_context_attribute(s32 context_id, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6) { sys_rsx.Error("TODO: sys_rsx_context_attribute(context_id=%d, a2=%llu, a3=%llu, a4=%llu, a5=%llu, a6=%llu)", context_id, a2, a3, a4, a5, a6); return CELL_OK; } -int sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 a3) +s32 sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 a3) { sys_rsx.Error("TODO: sys_rsx_device_map(a1_addr=0x%x, a2_addr=0x%x, a3=%d)", a1.GetAddr(), a2.GetAddr(), a3); return CELL_OK; } -int sys_rsx_device_unmap() +s32 sys_rsx_device_unmap() { sys_rsx.Error("TODO: sys_rsx_device_unmap()"); return CELL_OK; } -int sys_rsx_attribute() +s32 sys_rsx_attribute() { sys_rsx.Error("TODO: sys_rsx_attribute()"); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rsx.h b/rpcs3/Emu/SysCalls/lv2/sys_rsx.h new file mode 100644 index 0000000000..f51043315a --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_rsx.h @@ -0,0 +1,15 @@ +#pragma once + +// SysCalls +s32 sys_rsx_device_open(); +s32 sys_rsx_device_close(); +s32 sys_rsx_memory_allocate(); +s32 sys_rsx_memory_free(); +s32 sys_rsx_context_allocate(); +s32 sys_rsx_context_free(); +s32 sys_rsx_context_iomap(); +s32 sys_rsx_context_iounmap(); +s32 sys_rsx_context_attribute(s32 context_id, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6); +s32 sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 a3); +s32 sys_rsx_device_unmap(); +s32 sys_rsx_attribute(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp similarity index 91% rename from rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 6ba8d00461..3db2e9c6e7 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -3,12 +3,12 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "SC_Rwlock.h" +#include "sys_rwlock.h" #include "Emu/SysCalls/SysCalls.h" SysCallBase sys_rwlock("sys_rwlock"); -int sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr) +s32 sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr) { sys_rwlock.Warning("sys_rwlock_create(rw_lock_id_addr=0x%x, attr_addr=0x%x)", rw_lock_id.GetAddr(), attr.GetAddr()); @@ -37,7 +37,7 @@ int sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr return CELL_OK; } -int sys_rwlock_destroy(u32 rw_lock_id) +s32 sys_rwlock_destroy(u32 rw_lock_id) { sys_rwlock.Warning("sys_rwlock_destroy(rw_lock_id=%d)", rw_lock_id); @@ -53,7 +53,7 @@ int sys_rwlock_destroy(u32 rw_lock_id) return CELL_OK; } -int sys_rwlock_rlock(u32 rw_lock_id, u64 timeout) +s32 sys_rwlock_rlock(u32 rw_lock_id, u64 timeout) { sys_rwlock.Log("sys_rwlock_rlock(rw_lock_id=%d, timeout=%lld)", rw_lock_id, timeout); @@ -90,7 +90,7 @@ int sys_rwlock_rlock(u32 rw_lock_id, u64 timeout) } while (true); } -int sys_rwlock_tryrlock(u32 rw_lock_id) +s32 sys_rwlock_tryrlock(u32 rw_lock_id) { sys_rwlock.Log("sys_rwlock_tryrlock(rw_lock_id=%d)", rw_lock_id); @@ -102,7 +102,7 @@ int sys_rwlock_tryrlock(u32 rw_lock_id) return CELL_OK; } -int sys_rwlock_runlock(u32 rw_lock_id) +s32 sys_rwlock_runlock(u32 rw_lock_id) { sys_rwlock.Log("sys_rwlock_runlock(rw_lock_id=%d)", rw_lock_id); @@ -114,7 +114,7 @@ int sys_rwlock_runlock(u32 rw_lock_id) return CELL_OK; } -int sys_rwlock_wlock(u32 rw_lock_id, u64 timeout) +s32 sys_rwlock_wlock(u32 rw_lock_id, u64 timeout) { sys_rwlock.Log("sys_rwlock_wlock(rw_lock_id=%d, timeout=%lld)", rw_lock_id, timeout); @@ -153,7 +153,7 @@ int sys_rwlock_wlock(u32 rw_lock_id, u64 timeout) } while (true); } -int sys_rwlock_trywlock(u32 rw_lock_id) +s32 sys_rwlock_trywlock(u32 rw_lock_id) { sys_rwlock.Log("sys_rwlock_trywlock(rw_lock_id=%d)", rw_lock_id); @@ -168,7 +168,7 @@ int sys_rwlock_trywlock(u32 rw_lock_id) return CELL_OK; } -int sys_rwlock_wunlock(u32 rw_lock_id) +s32 sys_rwlock_wunlock(u32 rw_lock_id) { sys_rwlock.Log("sys_rwlock_wunlock(rw_lock_id=%d)", rw_lock_id); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.h b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.h similarity index 86% rename from rpcs3/Emu/SysCalls/lv2/SC_Rwlock.h rename to rpcs3/Emu/SysCalls/lv2/sys_rwlock.h index c80baa9606..4097ff4cd5 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Rwlock.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.h @@ -150,3 +150,13 @@ struct RWLock return false; } }; + +// SysCalls +s32 sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr); +s32 sys_rwlock_destroy(u32 rw_lock_id); +s32 sys_rwlock_rlock(u32 rw_lock_id, u64 timeout); +s32 sys_rwlock_tryrlock(u32 rw_lock_id); +s32 sys_rwlock_runlock(u32 rw_lock_id); +s32 sys_rwlock_wlock(u32 rw_lock_id, u64 timeout); +s32 sys_rwlock_trywlock(u32 rw_lock_id); +s32 sys_rwlock_wunlock(u32 rw_lock_id); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp similarity index 92% rename from rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index 66fbe8ad6e..66be62ee2c 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -3,11 +3,11 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "SC_Semaphore.h" +#include "sys_semaphore.h" SysCallBase sys_sem("sys_semaphore"); -int sys_semaphore_create(mem32_t sem, mem_ptr_t attr, int initial_count, int max_count) +s32 sys_semaphore_create(mem32_t sem, mem_ptr_t attr, int initial_count, int max_count) { sys_sem.Warning("sys_semaphore_create(sem_addr=0x%x, attr_addr=0x%x, initial_count=%d, max_count=%d)", sem.GetAddr(), attr.GetAddr(), initial_count, max_count); @@ -45,7 +45,7 @@ int sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i return CELL_OK; } -int sys_semaphore_destroy(u32 sem_id) +s32 sys_semaphore_destroy(u32 sem_id) { sys_sem.Warning("sys_semaphore_destroy(sem_id=%d)", sem_id); @@ -64,7 +64,7 @@ int sys_semaphore_destroy(u32 sem_id) return CELL_OK; } -int sys_semaphore_wait(u32 sem_id, u64 timeout) +s32 sys_semaphore_wait(u32 sem_id, u64 timeout) { sys_sem.Log("sys_semaphore_wait(sem_id=%d, timeout=%lld)", sem_id, timeout); @@ -118,7 +118,7 @@ int sys_semaphore_wait(u32 sem_id, u64 timeout) } } -int sys_semaphore_trywait(u32 sem_id) +s32 sys_semaphore_trywait(u32 sem_id) { sys_sem.Log("sys_semaphore_trywait(sem_id=%d)", sem_id); @@ -141,7 +141,7 @@ int sys_semaphore_trywait(u32 sem_id) } } -int sys_semaphore_post(u32 sem_id, int count) +s32 sys_semaphore_post(u32 sem_id, int count) { sys_sem.Log("sys_semaphore_post(sem_id=%d, count=%d)", sem_id, count); @@ -193,7 +193,7 @@ int sys_semaphore_post(u32 sem_id, int count) return CELL_OK; } -int sys_semaphore_get_value(u32 sem_id, mem32_t count) +s32 sys_semaphore_get_value(u32 sem_id, mem32_t count) { sys_sem.Log("sys_semaphore_get_value(sem_id=%d, count_addr=0x%x)", sem_id, count.GetAddr()); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.h b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.h similarity index 60% rename from rpcs3/Emu/SysCalls/lv2/SC_Semaphore.h rename to rpcs3/Emu/SysCalls/lv2/sys_semaphore.h index 4531041312..653f46502a 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Semaphore.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.h @@ -33,4 +33,12 @@ struct Semaphore , name(name) { } -}; \ No newline at end of file +}; + +// SysCalls +s32 sys_semaphore_create(mem32_t sem, mem_ptr_t attr, int initial_count, int max_count); +s32 sys_semaphore_destroy(u32 sem_id); +s32 sys_semaphore_wait(u32 sem_id, u64 timeout); +s32 sys_semaphore_trywait(u32 sem_id); +s32 sys_semaphore_post(u32 sem_id, int count); +s32 sys_semaphore_get_value(u32 sem_id, mem32_t count); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp similarity index 94% rename from rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp index cf3900b72a..23a618ad48 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp @@ -4,7 +4,7 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/lv2/SC_Spinlock.h" +#include "sys_spinlock.h" SysCallBase sys_spinlock("sys_spinlock"); @@ -28,7 +28,7 @@ void sys_spinlock_lock(mem_ptr_t lock) } } -int sys_spinlock_trylock(mem_ptr_t lock) +s32 sys_spinlock_trylock(mem_ptr_t lock) { sys_spinlock.Log("sys_spinlock_trylock(lock_addr=0x%x)", lock.GetAddr()); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h new file mode 100644 index 0000000000..ed81750400 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h @@ -0,0 +1,12 @@ +#pragma once + +struct spinlock +{ + SMutexBE mutex; +}; + +// SysCalls +void sys_spinlock_initialize(mem_ptr_t lock); +void sys_spinlock_lock(mem_ptr_t lock); +s32 sys_spinlock_trylock(mem_ptr_t lock); +void sys_spinlock_unlock(mem_ptr_t lock); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp similarity index 86% rename from rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 207c579a80..e5492be6f5 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_SPU_Thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -4,7 +4,7 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/FS/vfsFile.h" -#include "SC_SPU_Thread.h" +#include "sys_spu.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Loader/ELF.h" @@ -42,8 +42,25 @@ u32 LoadSpuImage(vfsStream& stream) return LoadSpuImage(stream, g_last_spu_offset); }*/ +/*u32 _max_usable_spu = 0; +u32 _max_raw_spu = 0; + +s32 sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu) +{ + sc_spu.Log("sys_spu_initialize(max_usable_spu=%d, max_raw_spu=%d)", max_usable_spu, max_raw_spu); + _max_usable_spu = max_usable_spu; + _max_raw_spu = max_raw_spu; + return CELL_OK; +} + +s32 sys_raw_spu_create(u32 id_addr, u32 attr_addr) +{ + Memory.Write32(id_addr, Emu.GetIdManager().GetNewID("raw_spu")); + return CELL_OK; +}*/ + //156 -int sys_spu_image_open(mem_ptr_t img, u32 path_addr) +s32 sys_spu_image_open(mem_ptr_t img, u32 path_addr) { const std::string path = Memory.ReadString(path_addr).c_str(); sc_spu.Warning("sys_spu_image_open(img_addr=0x%x, path_addr=0x%x [%s])", img.GetAddr(), path_addr, path.c_str()); @@ -72,7 +89,7 @@ int sys_spu_image_open(mem_ptr_t img, u32 path_addr) } //172 -int sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t img, mem_ptr_t attr, mem_ptr_t arg) +s32 sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t img, mem_ptr_t attr, mem_ptr_t arg) { sc_spu.Warning("sys_spu_thread_initialize(thread_addr=0x%x, group=0x%x, spu_num=%d, img_addr=0x%x, attr_addr=0x%x, arg_addr=0x%x)", thread.GetAddr(), group, spu_num, img.GetAddr(), attr.GetAddr(), arg.GetAddr()); @@ -143,7 +160,7 @@ int sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t< } //166 -int sys_spu_thread_set_argument(u32 id, mem_ptr_t arg) +s32 sys_spu_thread_set_argument(u32 id, mem_ptr_t arg) { sc_spu.Warning("sys_spu_thread_set_argument(id=%d, arg_addr=0x%x)", id, arg.GetAddr()); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -167,7 +184,7 @@ int sys_spu_thread_set_argument(u32 id, mem_ptr_t arg) } //165 -int sys_spu_thread_get_exit_status(u32 id, mem32_t status) +s32 sys_spu_thread_get_exit_status(u32 id, mem32_t status) { sc_spu.Warning("sys_spu_thread_get_exit_status(id=%d, status_addr=0x%x)", id, status.GetAddr()); @@ -194,7 +211,7 @@ int sys_spu_thread_get_exit_status(u32 id, mem32_t status) } //171 -int sys_spu_thread_group_destroy(u32 id) +s32 sys_spu_thread_group_destroy(u32 id) { sc_spu.Warning("sys_spu_thread_group_destroy(id=%d)", id); @@ -221,7 +238,7 @@ int sys_spu_thread_group_destroy(u32 id) } //173 -int sys_spu_thread_group_start(u32 id) +s32 sys_spu_thread_group_start(u32 id) { sc_spu.Warning("sys_spu_thread_group_start(id=%d)", id); @@ -246,7 +263,7 @@ int sys_spu_thread_group_start(u32 id) } //174 -int sys_spu_thread_group_suspend(u32 id) +s32 sys_spu_thread_group_suspend(u32 id) { sc_spu.Log("sys_spu_thread_group_suspend(id=%d)", id); @@ -270,7 +287,7 @@ int sys_spu_thread_group_suspend(u32 id) } //175 -int sys_spu_thread_group_resume(u32 id) +s32 sys_spu_thread_group_resume(u32 id) { sc_spu.Log("sys_spu_thread_group_resume(id=%d)", id); @@ -294,7 +311,7 @@ int sys_spu_thread_group_resume(u32 id) } //170 -int sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t attr) +s32 sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t attr) { sc_spu.Warning("sys_spu_thread_group_create(id_addr=0x%x, num=%d, prio=%d, attr_addr=0x%x)", id.GetAddr(), num, prio, attr.GetAddr()); @@ -318,7 +335,7 @@ int sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t name_len; + be_t name_addr; + be_t type; + /* struct {} option; */ + be_t ct; // memory container id +}; + +struct sys_spu_thread_attribute +{ + be_t name_addr; + be_t name_len; + be_t option; +}; + +struct sys_spu_thread_argument +{ + be_t arg1; + be_t arg2; + be_t arg3; + be_t arg4; +}; + +struct sys_spu_image +{ + be_t type; + be_t entry_point; + be_t segs_addr; //temporarily used as offset of LS image after elf loading + be_t nsegs; +}; + +struct sys_spu_segment +{ + be_t type; + be_t ls_start; + be_t size; + be_t src; +}; + +struct SpuGroupInfo +{ + std::vector list; + std::atomic lock; + std::string m_name; + int m_prio; + int m_type; + int m_ct; + + SpuGroupInfo(const std::string& name, u32 num, int prio, int type, u32 ct) + : m_name(name) + , m_prio(prio) + , m_type(type) + , m_ct(ct) + , lock(0) + { + num = 256; + list.resize(num); + for (u32 i = 0; i < num; i++) + { + list[i] = 0; + } + } +}; + +// SysCalls +s32 sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu); +s32 sys_spu_image_open(mem_ptr_t img, u32 path_addr); +s32 sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t img, mem_ptr_t attr, mem_ptr_t arg); +s32 sys_spu_thread_set_argument(u32 id, mem_ptr_t arg); +s32 sys_spu_thread_group_destroy(u32 id); +s32 sys_spu_thread_group_start(u32 id); +s32 sys_spu_thread_group_suspend(u32 id); +s32 sys_spu_thread_group_resume(u32 id); +s32 sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t attr); +s32 sys_spu_thread_create(mem32_t thread_id, mem32_t entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr); +s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status); +s32 sys_spu_thread_group_connect_event(u32 id, u32 eq, u32 et); +s32 sys_spu_thread_group_disconnect_event(u32 id, u32 et); +s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq, u64 req, u32 spup_addr); +s32 sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup); +s32 sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type); +s32 sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type); +s32 sys_spu_thread_write_spu_mb(u32 id, u32 value); +s32 sys_spu_thread_set_spu_cfg(u32 id, u64 value); +s32 sys_spu_thread_get_spu_cfg(u32 id, mem64_t value); +s32 sys_spu_thread_write_snr(u32 id, u32 number, u32 value); +s32 sys_spu_thread_connect_event(u32 id, u32 eq, u32 et, u8 spup); +s32 sys_spu_thread_disconnect_event(u32 id, u32 event_type, u8 spup); +s32 sys_spu_thread_bind_queue(u32 id, u32 spuq, u32 spuq_num); +s32 sys_spu_thread_unbind_queue(u32 id, u32 spuq_num); +s32 sys_spu_thread_get_exit_status(u32 id, mem32_t status); + +s32 sys_raw_spu_create(mem32_t id, u32 attr_addr); +s32 sys_raw_spu_destroy(u32 id); +s32 sys_raw_spu_create_interrupt_tag(u32 id, u32 class_id, u32 hwthread, mem32_t intrtag); +s32 sys_raw_spu_set_int_mask(u32 id, u32 class_id, u64 mask); +s32 sys_raw_spu_get_int_mask(u32 id, u32 class_id, mem64_t mask); +s32 sys_raw_spu_set_int_stat(u32 id, u32 class_id, u64 stat); +s32 sys_raw_spu_get_int_stat(u32 id, u32 class_id, mem64_t stat); +s32 sys_raw_spu_read_puint_mb(u32 id, mem32_t value); +s32 sys_raw_spu_set_spu_cfg(u32 id, u32 value); +s32 sys_raw_spu_get_spu_cfg(u32 id, mem32_t value); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp similarity index 92% rename from rpcs3/Emu/SysCalls/lv2/SC_Time.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_time.cpp index 5b14c233b3..0a5ded0ce9 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Time.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp @@ -10,7 +10,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "SC_Time.h" +#include "sys_time.h" SysCallBase sys_time("sys_time"); @@ -45,7 +45,7 @@ u64 get_system_time() // Functions -int sys_time_get_timezone(mem32_t timezone, mem32_t summertime) +s32 sys_time_get_timezone(mem32_t timezone, mem32_t summertime) { int ret; ret = cellSysutilGetSystemParamInt(0x0116, timezone); //0x0116 = CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE @@ -55,7 +55,7 @@ int sys_time_get_timezone(mem32_t timezone, mem32_t summertime) return CELL_OK; } -int sys_time_get_current_time(u32 sec_addr, u32 nsec_addr) +s32 sys_time_get_current_time(u32 sec_addr, u32 nsec_addr) { sys_time.Log("sys_time_get_current_time(sec_addr=0x%x, nsec_addr=0x%x)", sec_addr, nsec_addr); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_time.h b/rpcs3/Emu/SysCalls/lv2/sys_time.h new file mode 100644 index 0000000000..921504cb42 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_time.h @@ -0,0 +1,11 @@ +#pragma once + +// Auxiliary functions +u64 get_time(); +u64 get_system_time(); + +// SysCalls +s32 sys_time_get_timezone(mem32_t timezone, mem32_t summertime); +s32 sys_time_get_current_time(u32 sec_addr, u32 nsec_addr); +s64 sys_time_get_system_time(); +u64 sys_time_get_timebase_frequency(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp similarity index 86% rename from rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 3a212ad74d..e7fbc7f63b 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -2,13 +2,13 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "SC_Timer.h" +#include "sys_timer.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/event.h" SysCallBase sys_timer("sys_timer"); -int sys_timer_create(mem32_t timer_id) +s32 sys_timer_create(mem32_t timer_id) { sys_timer.Warning("sys_timer_create(timer_id_addr=0x%x)", timer_id.GetAddr()); @@ -18,7 +18,7 @@ int sys_timer_create(mem32_t timer_id) return CELL_OK; } -int sys_timer_destroy(u32 timer_id) +s32 sys_timer_destroy(u32 timer_id) { sys_timer.Warning("TODO: sys_timer_destroy(timer_id=%d)", timer_id); @@ -28,7 +28,7 @@ int sys_timer_destroy(u32 timer_id) return CELL_OK; } -int sys_timer_get_information(u32 timer_id, mem_ptr_t info) +s32 sys_timer_get_information(u32 timer_id, mem_ptr_t info) { sys_timer.Warning("sys_timer_get_information(timer_id=%d, info_addr=0x%x)", timer_id, info.GetAddr()); @@ -39,7 +39,7 @@ int sys_timer_get_information(u32 timer_id, mem_ptr_t i return CELL_OK; } -int sys_timer_start(u32 timer_id, s64 base_time, u64 period) +s32 sys_timer_start(u32 timer_id, s64 base_time, u64 period) { sys_timer.Warning("sys_timer_start_periodic_absolute(timer_id=%d, basetime=%lld, period=%llu)", timer_id, base_time, period); @@ -58,7 +58,7 @@ int sys_timer_start(u32 timer_id, s64 base_time, u64 period) return CELL_OK; } -int sys_timer_stop(u32 timer_id) +s32 sys_timer_stop(u32 timer_id) { sys_timer.Warning("TODO: sys_timer_stop()"); @@ -70,7 +70,7 @@ int sys_timer_stop(u32 timer_id) return CELL_OK; } -int sys_timer_connect_event_queue(u32 timer_id, u32 queue_id, u64 name, u64 data1, u64 data2) +s32 sys_timer_connect_event_queue(u32 timer_id, u32 queue_id, u64 name, u64 data1, u64 data2) { sys_timer.Warning("sys_timer_connect_event_queue(timer_id=%d, queue_id=%d, name=%llu, data1=%llu, data2=%llu)", timer_id, queue_id, name, data1, data2); @@ -85,7 +85,7 @@ int sys_timer_connect_event_queue(u32 timer_id, u32 queue_id, u64 name, u64 data return CELL_OK; } -int sys_timer_disconnect_event_queue(u32 timer_id) +s32 sys_timer_disconnect_event_queue(u32 timer_id) { sys_timer.Warning("TODO: sys_timer_disconnect_event_queue(timer_id=%d)", timer_id); @@ -97,14 +97,14 @@ int sys_timer_disconnect_event_queue(u32 timer_id) return CELL_OK; } -int sys_timer_sleep(u32 sleep_time) +s32 sys_timer_sleep(u32 sleep_time) { sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); rSleep(sleep_time); return CELL_OK; } -int sys_timer_usleep(u64 sleep_time) +s32 sys_timer_usleep(u64 sleep_time) { sys_timer.Log("sys_timer_usleep(sleep_time=%lld)", sleep_time); if (sleep_time > 0xFFFFFFFFFFFF) sleep_time = 0xFFFFFFFFFFFF; //2^48-1 diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.h b/rpcs3/Emu/SysCalls/lv2/sys_timer.h new file mode 100644 index 0000000000..16739e9542 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.h @@ -0,0 +1,33 @@ +#pragma once + +enum +{ + SYS_TIMER_STATE_STOP = 0x00U, + SYS_TIMER_STATE_RUN = 0x01U, +}; + +struct sys_timer_information_t +{ + s64 next_expiration_time; //system_time_t + u64 period; //usecond_t + u32 timer_state; + u32 pad; +}; + +struct timer +{ + rTimer tmr; + sys_timer_information_t timer_information_t; +}; + +#pragma pack() + +s32 sys_timer_create(mem32_t timer_id); +s32 sys_timer_destroy(u32 timer_id); +s32 sys_timer_get_information(u32 timer_id, mem_ptr_t info); +s32 sys_timer_start(u32 timer_id, s64 basetime, u64 period); +s32 sys_timer_stop(u32 timer_id); +s32 sys_timer_connect_event_queue(u32 timer_id, u32 queue_id, u64 name, u64 data1, u64 data2); +s32 sys_timer_disconnect_event_queue(u32 timer_id); +s32 sys_timer_sleep(u32 sleep_time); +s32 sys_timer_usleep(u64 sleep_time); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp b/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp similarity index 80% rename from rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_trace.cpp index 190e3b1d7d..776d34f779 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_Trace.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp @@ -6,61 +6,61 @@ SysCallBase sys_trace("sys_trace"); -int sys_trace_create() +s32 sys_trace_create() { sys_trace.Warning("Unimplemented function: sys_trace_create()"); return CELL_OK; } -int sys_trace_start() +s32 sys_trace_start() { sys_trace.Warning("Unimplemented function: sys_trace_start()"); return CELL_OK; } -int sys_trace_stop() +s32 sys_trace_stop() { sys_trace.Warning("Unimplemented function: sys_trace_stop()"); return CELL_OK; } -int sys_trace_update_top_index() +s32 sys_trace_update_top_index() { sys_trace.Warning("Unimplemented function: sys_trace_update_top_index()"); return CELL_OK; } -int sys_trace_destroy() +s32 sys_trace_destroy() { sys_trace.Warning("Unimplemented function: sys_trace_destroy()"); return CELL_OK; } -int sys_trace_drain() +s32 sys_trace_drain() { sys_trace.Warning("Unimplemented function: sys_trace_drain()"); return CELL_OK; } -int sys_trace_attach_process() +s32 sys_trace_attach_process() { sys_trace.Warning("Unimplemented function: sys_trace_attach_process()"); return CELL_OK; } -int sys_trace_allocate_buffer() +s32 sys_trace_allocate_buffer() { sys_trace.Warning("Unimplemented function: sys_trace_allocate_buffer()"); return CELL_OK; } -int sys_trace_free_buffer() +s32 sys_trace_free_buffer() { sys_trace.Warning("Unimplemented function: sys_trace_free_buffer()"); return CELL_OK; } -int sys_trace_create2() +s32 sys_trace_create2() { sys_trace.Warning("Unimplemented function: sys_trace_create2()"); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_trace.h b/rpcs3/Emu/SysCalls/lv2/sys_trace.h new file mode 100644 index 0000000000..5b253893c3 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_trace.h @@ -0,0 +1,13 @@ +#pragma once + +// SysCalls +s32 sys_trace_create(); +s32 sys_trace_start(); +s32 sys_trace_stop(); +s32 sys_trace_update_top_index(); +s32 sys_trace_destroy(); +s32 sys_trace_drain(); +s32 sys_trace_attach_process(); +s32 sys_trace_allocate_buffer(); +s32 sys_trace_free_buffer(); +s32 sys_trace_create2(); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp similarity index 85% rename from rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_tty.cpp index 1ca49fac73..0ecf0f3b5a 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp @@ -4,7 +4,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -int sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) +s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) { //we currently do not support reading from the Console LOG_WARNING(HLE, "sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); @@ -14,7 +14,7 @@ int sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) return CELL_OK; } -int sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) +s32 sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) { if(ch > 15 || (s32)len <= 0) return CELL_EINVAL; if(!Memory.IsGoodAddr(buf_addr)) return CELL_EFAULT; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_tty.h b/rpcs3/Emu/SysCalls/lv2/sys_tty.h new file mode 100644 index 0000000000..b65e72ea90 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_tty.h @@ -0,0 +1,4 @@ +#pragma once + +s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr); +s32 sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp b/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp similarity index 92% rename from rpcs3/Emu/SysCalls/lv2/SC_VM.cpp rename to rpcs3/Emu/SysCalls/lv2/sys_vm.cpp index d7c9f58d40..6495255fad 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_VM.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp @@ -3,12 +3,12 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "SC_Memory.h" +#include "sys_memory.h" SysCallBase sc_vm("vm"); MemoryContainerInfo* current_ct; -int sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 addr) +s32 sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 addr) { sc_vm.Warning("sys_vm_memory_map(vsize=0x%x,psize=0x%x,cidr=0x%x,flags=0x%llx,policy=0x%llx,addr=0x%x)", vsize, psize, cid, flag, policy, addr); @@ -68,7 +68,7 @@ int sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 a return CELL_OK; } -int sys_vm_unmap(u32 addr) +s32 sys_vm_unmap(u32 addr) { sc_vm.Warning("sys_vm_unmap(addr=0x%x)", addr); @@ -78,7 +78,7 @@ int sys_vm_unmap(u32 addr) return CELL_OK; } -int sys_vm_append_memory(u32 addr, u32 size) +s32 sys_vm_append_memory(u32 addr, u32 size) { sc_vm.Warning("sys_vm_append_memory(addr=0x%x,size=0x%x)", addr, size); @@ -100,7 +100,7 @@ int sys_vm_append_memory(u32 addr, u32 size) return CELL_OK; } -int sys_vm_return_memory(u32 addr, u32 size) +s32 sys_vm_return_memory(u32 addr, u32 size) { sc_vm.Warning("sys_vm_return_memory(addr=0x%x,size=0x%x)", addr, size); @@ -122,7 +122,7 @@ int sys_vm_return_memory(u32 addr, u32 size) return CELL_OK; } -int sys_vm_lock(u32 addr, u32 size) +s32 sys_vm_lock(u32 addr, u32 size) { sc_vm.Warning("sys_vm_lock(addr=0x%x,size=0x%x)", addr, size); @@ -144,7 +144,7 @@ int sys_vm_lock(u32 addr, u32 size) return CELL_OK; } -int sys_vm_unlock(u32 addr, u32 size) +s32 sys_vm_unlock(u32 addr, u32 size) { sc_vm.Warning("sys_vm_unlock(addr=0x%x,size=0x%x)", addr, size); @@ -159,7 +159,7 @@ int sys_vm_unlock(u32 addr, u32 size) return CELL_OK; } -int sys_vm_touch(u32 addr, u32 size) +s32 sys_vm_touch(u32 addr, u32 size) { sc_vm.Warning("Unimplemented function: sys_vm_touch(addr=0x%x,size=0x%x)", addr, size); @@ -176,7 +176,7 @@ int sys_vm_touch(u32 addr, u32 size) return CELL_OK; } -int sys_vm_flush(u32 addr, u32 size) +s32 sys_vm_flush(u32 addr, u32 size) { sc_vm.Warning("Unimplemented function: sys_vm_flush(addr=0x%x,size=0x%x)", addr, size); @@ -193,7 +193,7 @@ int sys_vm_flush(u32 addr, u32 size) return CELL_OK; } -int sys_vm_invalidate(u32 addr, u32 size) +s32 sys_vm_invalidate(u32 addr, u32 size) { sc_vm.Warning("Unimplemented function: sys_vm_invalidate(addr=0x%x,size=0x%x)", addr, size); @@ -210,7 +210,7 @@ int sys_vm_invalidate(u32 addr, u32 size) return CELL_OK; } -int sys_vm_store(u32 addr, u32 size) +s32 sys_vm_store(u32 addr, u32 size) { sc_vm.Warning("Unimplemented function: sys_vm_store(addr=0x%x,size=0x%x)", addr, size); @@ -227,7 +227,7 @@ int sys_vm_store(u32 addr, u32 size) return CELL_OK; } -int sys_vm_sync(u32 addr, u32 size) +s32 sys_vm_sync(u32 addr, u32 size) { sc_vm.Warning("Unimplemented function: sys_vm_sync(addr=0x%x,size=0x%x)", addr, size); @@ -243,7 +243,7 @@ int sys_vm_sync(u32 addr, u32 size) return CELL_OK; } -int sys_vm_test(u32 addr, u32 size, u32 result_addr) +s32 sys_vm_test(u32 addr, u32 size, u32 result_addr) { sc_vm.Warning("Unimplemented function: sys_vm_test(addr=0x%x,size=0x%x,result_addr=0x%x)", addr, size, result_addr); @@ -262,7 +262,7 @@ int sys_vm_test(u32 addr, u32 size, u32 result_addr) return CELL_OK; } -int sys_vm_get_statistics(u32 addr, u32 stat_addr) +s32 sys_vm_get_statistics(u32 addr, u32 stat_addr) { sc_vm.Warning("Unimplemented function: sys_vm_get_statistics(addr=0x%x,stat_addr=0x%x)", addr, stat_addr); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_vm.h b/rpcs3/Emu/SysCalls/lv2/sys_vm.h new file mode 100644 index 0000000000..c4e7d74f36 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_vm.h @@ -0,0 +1,31 @@ +#pragma pack + +#define SYS_VM_TEST_INVALID 0x0000ULL +#define SYS_VM_TEST_UNUSED 0x0001ULL +#define SYS_VM_TEST_ALLOCATED 0x0002ULL +#define SYS_VM_TEST_STORED 0x0004ULL + +struct sys_vm_statistics { + u64 vm_crash_ppu; + u64 vm_crash_spu; + u64 vm_read; + u64 vm_write; + u32 physical_mem_size; + u32 physical_mem_used; + u64 timestamp; +}; + +// SysCalls +s32 sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 addr); +s32 sys_vm_unmap(u32 addr); +s32 sys_vm_append_memory(u32 addr, u32 size); +s32 sys_vm_return_memory(u32 addr, u32 size); +s32 sys_vm_lock(u32 addr, u32 size); +s32 sys_vm_unlock(u32 addr, u32 size); +s32 sys_vm_touch(u32 addr, u32 size); +s32 sys_vm_flush(u32 addr, u32 size); +s32 sys_vm_invalidate(u32 addr, u32 size); +s32 sys_vm_store(u32 addr, u32 size); +s32 sys_vm_sync(u32 addr, u32 size); +s32 sys_vm_test(u32 addr, u32 size, u32 result_addr); +s32 sys_vm_get_statistics(u32 addr, u32 stat_addr); diff --git a/rpcs3/Emu/event.h b/rpcs3/Emu/event.h index cb0e0a77c1..235b924daf 100644 --- a/rpcs3/Emu/event.h +++ b/rpcs3/Emu/event.h @@ -1,5 +1,5 @@ #pragma once -#include "Emu/SysCalls/lv2/SC_Lwmutex.h" +#include "Emu/SysCalls/lv2/sys_lwmutex.h" #define FIX_SPUQ(x) ((u64)x | 0x5350555100000000ULL) // arbitrary code to prevent "special" zero value in key argument diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index 046faedc72..edc42b0741 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -2,8 +2,8 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/lv2/SC_Lwmutex.h" -#include "Emu/SysCalls/lv2/SC_Event_flag.h" +#include "Emu/SysCalls/lv2/sys_lwmutex.h" +#include "Emu/SysCalls/lv2/sys_event.h" #include "DisAsmFrame.h" #include "Emu/FS/vfsLocalFile.h" #include "Emu/Cell/PPCThread.h" diff --git a/rpcs3/Gui/InterpreterDisAsm.cpp b/rpcs3/Gui/InterpreterDisAsm.cpp index 170fe8a915..ee1ffdb535 100644 --- a/rpcs3/Gui/InterpreterDisAsm.cpp +++ b/rpcs3/Gui/InterpreterDisAsm.cpp @@ -3,8 +3,8 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" -#include "Emu/SysCalls/lv2/SC_Lwmutex.h" -#include "Emu/SysCalls/lv2/SC_Event_flag.h" +#include "Emu/SysCalls/lv2/sys_lwmutex.h" +#include "Emu/SysCalls/lv2/sys_event.h" #include "InterpreterDisAsm.h" #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUDisAsm.h" diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 0e7ffa8e21..15ffbd0baa 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -92,33 +92,28 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -184,6 +179,9 @@ + + + @@ -318,22 +316,28 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 377aeab4d4..d791a5101e 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -128,81 +128,6 @@ Emu\SysCalls - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - Emu\SysCalls\Modules @@ -578,10 +503,79 @@ Utilities - + Emu\SysCalls\lv2 - + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + Emu\SysCalls\lv2 @@ -637,42 +631,6 @@ Emu\SysCalls - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - - - Emu\SysCalls\lv2 - Emu\SysCalls\Modules @@ -1057,16 +1015,70 @@ Utilities - + Emu\SysCalls\lv2 - + Emu\SysCalls\lv2 - + Emu\SysCalls\lv2 - + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + + Emu\SysCalls\lv2 + + Emu\SysCalls\lv2 From 0002cc0af3daaf36316dbaba1ea50cb730b5d4d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sun, 6 Jul 2014 01:30:28 +0200 Subject: [PATCH 117/499] Removed old / unnecessary code * Removed Plugins.h file as I assume setting up a plugin hell is a bad idea (does anyone disagree?). * Removed FnIdGenerator, and moved FnIdGenerator::GenerateFnId to getFunctionId in Modules.cpp * Disabled RSX Debugger and Memory Viewer when the emulator is stopped. * ELF64Loader::LoadPhdrData refactored. --- rpcs3/Emu/SysCalls/Modules.cpp | 11 +- rpcs3/Emu/SysCalls/Modules.h | 13 +- rpcs3/Emu/SysCalls/SysCalls.h | 2 - rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp | 1 - rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp | 1 - rpcs3/Emu/SysCalls/lv2/sys_memory.cpp | 1 - rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp | 1 - rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_trace.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_tty.cpp | 1 + rpcs3/Emu/System.cpp | 1 - rpcs3/Gui/FnIdGenerator.cpp | 102 ------- rpcs3/Gui/FnIdGenerator.h | 23 -- rpcs3/Gui/MainFrame.cpp | 32 +- rpcs3/Gui/Plugins.h | 362 ----------------------- rpcs3/Loader/ELF64.cpp | 237 +++++++-------- rpcs3/Loader/Loader.h | 64 ++-- rpcs3/emucore.vcxproj | 4 +- rpcs3/rpcs3.vcxproj | 2 - rpcs3/rpcs3.vcxproj.filters | 6 - 23 files changed, 175 insertions(+), 696 deletions(-) delete mode 100644 rpcs3/Gui/FnIdGenerator.cpp delete mode 100644 rpcs3/Gui/FnIdGenerator.h delete mode 100644 rpcs3/Gui/Plugins.h diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 20a5669c5d..ecbdb085de 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -5,12 +5,20 @@ #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" +#include "Crypto/sha1.h" #include #include "Emu/System.h" #include "ModuleManager.h" +u32 getFunctionId(const std::string& name) +{ + const char* suffix = "\x67\x59\x65\x99\x04\x25\x04\x90\x56\x64\x27\x49\x94\x89\x74\x1A"; // Symbol name suffix + std::string input = name + suffix; + unsigned char output[20]; - + sha1((unsigned char*)input.c_str(), input.length(), output); // Compute SHA-1 hash + return (u32&)output[0]; +} Module::Module(u16 id, const char* name) : m_is_loaded(false) @@ -217,4 +225,3 @@ bool Module::CheckID(u32 id, ID*& _id) const { return Emu.GetIdManager().CheckID(id) && (_id = &Emu.GetIdManager().GetID(id))->m_name == GetName(); } - diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index a558246faf..ee55d8de93 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -2,7 +2,6 @@ #define declCPU PPUThread& CPU = GetCurrentPPUThread - //TODO struct ModuleFunc { @@ -120,16 +119,24 @@ public: } template __forceinline void AddFunc(u32 id, T func); - + template __forceinline void AddFunc(const std::string& name, T func); template __forceinline void AddFuncSub(const char group[8], const u64 ops[], const char* name, T func); }; +u32 getFunctionId(const std::string& name); + template __forceinline void Module::AddFunc(u32 id, T func) { m_funcs_list.emplace_back(new ModuleFunc(id, bind_func(func))); } +template +__forceinline void Module::AddFunc(const std::string& name, T func) +{ + AddFunc(getFunctionId(name), func); +} + template __forceinline void Module::AddFuncSub(const char group[8], const u64 ops[], const char* name, T func) { @@ -144,7 +151,6 @@ __forceinline void Module::AddFuncSub(const char group[8], const u64 ops[], cons sf->found = 0; // TODO: check for self-inclusions, use CRC - for (u32 i = 0; ops[i]; i++) { SFuncOp op; @@ -157,4 +163,3 @@ __forceinline void Module::AddFuncSub(const char group[8], const u64 ops[], cons } Emu.GetSFuncManager().push_back(sf); } - diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 2454724db8..759078de8d 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -179,8 +179,6 @@ public: static std::string GetHLEFuncName(const u32 fid); }; -//extern SysCalls SysCallsManager; - #define REG_SUB(module, group, name, ...) \ static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ module->AddFuncSub(group, name ## _table, #name, name) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index b4778707da..7bc6377c62 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -22,7 +22,6 @@ s32 sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t l u32 id = sys_lwcond.GetNewId(new Lwcond(attr->name_u64)); lwcond->lwmutex = lwmutex.GetAddr(); lwcond->lwcond_queue = id; - procObjects.lwcond_objects.insert(id); if (lwmutex.IsGood()) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index e33893ce81..1708e2770a 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -40,7 +40,6 @@ s32 sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_tname_u64)); lwmutex->sleep_queue = sq_id; - procObjects.lwmutex_objects.insert(sq_id); sc_lwmutex.Warning("*** lwmutex created [%s] (attribute=0x%x): sq_id = %d", std::string(attr->name, 8).c_str(), (u32) lwmutex->attribute, sq_id); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp index 480f0c5d7d..9815223f86 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp @@ -129,7 +129,6 @@ s32 sys_memory_container_create(mem32_t cid, u32 yield_size) // Wrap the allocated memory in a memory container. MemoryContainerInfo *ct = new MemoryContainerInfo(addr, yield_size); cid = sc_mem.GetNewId(ct); - procObjects.mem_objects.insert(cid); sc_mem.Warning("*** memory_container created(addr=0x%llx): id = %d", addr, cid.GetValue()); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp index edd1226fc7..1660ce5b3d 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp @@ -3,6 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "sys_memory.h" #include "sys_mmapper.h" #include diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index 524dea7ef6..ab5b870efc 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -44,7 +44,6 @@ s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) u32 tid = GetCurrentPPUThread().GetId(); Mutex* mutex = new Mutex((u32)attr->protocol, is_recursive, attr->name_u64); u32 id = sys_mtx.GetNewId(mutex); - procObjects.mutex_objects.insert(id); mutex->m_mutex.lock(tid); mutex->id = id; mutex_id = id; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 3db2e9c6e7..2ad0524cee 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -3,8 +3,8 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "sys_rwlock.h" #include "Emu/SysCalls/SysCalls.h" +#include "sys_rwlock.h" SysCallBase sys_rwlock("sys_rwlock"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index 66be62ee2c..08f3c73915 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -4,6 +4,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" #include "sys_semaphore.h" +#include "sys_time.h" SysCallBase sys_sem("sys_semaphore"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index e7fbc7f63b..cb94b404e6 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -2,9 +2,9 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "sys_timer.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/event.h" +#include "sys_timer.h" SysCallBase sys_timer("sys_timer"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp b/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp index 776d34f779..6df868f1aa 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp @@ -3,6 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "sys_trace.h" SysCallBase sys_trace("sys_trace"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp index 0ecf0f3b5a..de64701a6d 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp @@ -3,6 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "sys_tty.h" s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) { diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 857b172e86..54254c4f62 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -407,7 +407,6 @@ void Emulator::Stop() GetAudioManager().Close(); GetEventManager().Clear(); GetCPU().Close(); - //SysCallsManager.Close(); GetIdManager().Clear(); GetPadManager().Close(); GetKeyboardManager().Close(); diff --git a/rpcs3/Gui/FnIdGenerator.cpp b/rpcs3/Gui/FnIdGenerator.cpp deleted file mode 100644 index 100e0b8e50..0000000000 --- a/rpcs3/Gui/FnIdGenerator.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "FnIdGenerator.h" - -FnIdGenerator::FnIdGenerator(wxWindow* parent) - : wxDialog(parent, wxID_ANY, "FunctionID Generator") - , m_list(nullptr) -{ - wxBoxSizer* s_panel = new wxBoxSizer(wxHORIZONTAL); - wxBoxSizer* s_subpanel = new wxBoxSizer(wxVERTICAL); - wxBoxSizer* s_subpanel2 = new wxBoxSizer(wxHORIZONTAL); - - m_list = new wxListView(this, wxID_ANY, wxDefaultPosition, wxSize(300, 450)); - m_list->InsertColumn(0, "Function Name", 0, 200); - m_list->InsertColumn(1, "Function ID", 0, 100); - - wxButton *b_input_name = new wxButton(this, wxID_ANY, "Input Function Name", wxDefaultPosition, wxSize(140, -1)); - b_input_name->Bind(wxEVT_BUTTON, &FnIdGenerator::OnInput, this); - - wxButton *b_clear = new wxButton(this, wxID_ANY, "Clear List", wxDefaultPosition, wxSize(140, -1)); - b_clear->Bind(wxEVT_BUTTON, &FnIdGenerator::OnClear, this); - - s_subpanel2->Add(b_input_name); - s_subpanel2->AddSpacer(10); - s_subpanel2->Add(b_clear); - - s_subpanel->AddSpacer(5); - s_subpanel->Add(m_list); - s_subpanel->AddSpacer(5); - s_subpanel->Add(s_subpanel2); - - s_panel->AddSpacer(5); - s_panel->Add(s_subpanel); - s_panel->AddSpacer(5); - - SetSizerAndFit(s_panel); -} - -FnIdGenerator::~FnIdGenerator() -{ - delete m_list; - m_list = nullptr; -} - -void FnIdGenerator::OnInput(wxCommandEvent &event) -{ - PrintId(); - event.Skip(); -} - -void FnIdGenerator::OnClear(wxCommandEvent &event) -{ - m_list->DeleteAllItems(); - m_func_name.clear(); - m_func_id.clear(); - event.Skip(); -} - -u32 FnIdGenerator::GenerateFnId(const std::string& func_name) -{ - static const char* suffix = "\x67\x59\x65\x99\x04\x25\x04\x90\x56\x64\x27\x49\x94\x89\x74\x1A"; //symbol name suffix - std::string input = func_name + suffix; - unsigned char output[20]; - - sha1((unsigned char*)input.c_str(), input.length(), output); //compute SHA-1 hash - - return (be_t&) output[0]; -} - -void FnIdGenerator::PrintId() -{ - TextInputDialog dial(0, "", "Please input function name"); - if (dial.ShowModal() == wxID_OK) - { - const std::string& func_name = dial.GetResult(); - - if (func_name.length() == 0) - return; - - const be_t result = GenerateFnId(func_name); - m_func_name.push_back(func_name); - m_func_id.push_back(result); - - LOG_NOTICE(HLE, "Function: %s, Id: 0x%08x ", func_name.c_str(), result); - UpdateInformation(); - } - - return; -} - -void FnIdGenerator::UpdateInformation() -{ - m_list->DeleteAllItems(); - - for(u32 i = 0; i < m_func_name.size(); i++) - { - m_list->InsertItem(m_func_name.size(), wxEmptyString); - m_list->SetItem(i, 0, m_func_name[i]); - m_list->SetItem(i, 1, wxString::Format("0x%08x", re(m_func_id[i]))); - } -} diff --git a/rpcs3/Gui/FnIdGenerator.h b/rpcs3/Gui/FnIdGenerator.h deleted file mode 100644 index c2fd448510..0000000000 --- a/rpcs3/Gui/FnIdGenerator.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "TextInputDialog.h" -#include "../Crypto/aes.h" -#include "../Crypto/sha1.h" - -class FnIdGenerator : public wxDialog -{ -private: - std::vector m_func_name; - std::vector m_func_id; - wxListView* m_list; - -public: - FnIdGenerator(wxWindow* parent); - ~FnIdGenerator(); - - void OnInput(wxCommandEvent &event); - void OnClear(wxCommandEvent &event); - u32 GenerateFnId(const std::string& func_name); - void UpdateInformation(); - void PrintId(); -}; \ No newline at end of file diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 648c61838e..20c6a55274 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -9,7 +9,6 @@ #include "MemoryViewer.h" #include "RSXDebugger.h" #include "PADManager.h" -#include "FnIdGenerator.h" #include "git-version.h" #include "Ini.h" @@ -96,9 +95,8 @@ MainFrame::MainFrame() wxMenu* menu_tools = new wxMenu(); menubar->Append(menu_tools, "Tools"); menu_tools->Append(id_tools_compiler, "ELF Compiler"); - menu_tools->Append(id_tools_memory_viewer, "Memory Viewer"); - menu_tools->Append(id_tools_rsx_debugger, "RSX Debugger"); - menu_tools->Append(id_tools_fnid_generator, "FunctionID Generator"); + menu_tools->Append(id_tools_memory_viewer, "Memory Viewer")->Enable(false); + menu_tools->Append(id_tools_rsx_debugger, "RSX Debugger")->Enable(false); wxMenu* menu_help = new wxMenu(); menubar->Append(menu_help, "Help"); @@ -134,7 +132,6 @@ MainFrame::MainFrame() Bind(wxEVT_MENU, &MainFrame::OpenELFCompiler, this, id_tools_compiler); Bind(wxEVT_MENU, &MainFrame::OpenMemoryViewer, this, id_tools_memory_viewer); Bind(wxEVT_MENU, &MainFrame::OpenRSXDebugger, this, id_tools_rsx_debugger); - Bind(wxEVT_MENU, &MainFrame::OpenFnIdGenerator, this, id_tools_fnid_generator); Bind(wxEVT_MENU, &MainFrame::AboutDialogHandler, this, id_help_about); @@ -656,11 +653,6 @@ void MainFrame::OpenRSXDebugger(wxCommandEvent& WXUNUSED(event)) (new RSXDebugger(this)) -> Show(); } -void MainFrame::OpenFnIdGenerator(wxCommandEvent& WXUNUSED(event)) -{ - FnIdGenerator(this).ShowModal(); -} - void MainFrame::AboutDialogHandler(wxCommandEvent& WXUNUSED(event)) { @@ -729,21 +721,31 @@ void MainFrame::UpdateUI(wxCommandEvent& event) is_ready = Emu.IsReady(); } + // Update menu items based on the state of the emulator wxMenuBar& menubar( *GetMenuBar() ); + + // Emulation wxMenuItem& pause = *menubar.FindItem( id_sys_pause ); wxMenuItem& stop = *menubar.FindItem( id_sys_stop ); - wxMenuItem& send_exit = *menubar.FindItem( id_sys_send_exit ); - wxMenuItem& send_open_menu = *menubar.FindItem( id_sys_send_open_menu ); - pause.SetItemLabel(is_running ? "Pause\tCtrl + P" : is_ready ? "Start\tCtrl + C" : "Resume\tCtrl + C"); + pause.SetItemLabel(is_running ? "Pause\tCtrl + P" : is_ready ? "Start\tCtrl + E" : "Resume\tCtrl + E"); pause.Enable(!is_stopped); stop.Enable(!is_stopped); - //send_exit.Enable(false); - bool enable_commands = !is_stopped && Emu.GetCallbackManager().m_exit_callback.m_callbacks.size(); + // PS3 Commands + wxMenuItem& send_exit = *menubar.FindItem( id_sys_send_exit ); + wxMenuItem& send_open_menu = *menubar.FindItem( id_sys_send_open_menu ); + bool enable_commands = !is_stopped && Emu.GetCallbackManager().m_exit_callback.m_callbacks.size(); send_open_menu.SetItemLabel(wxString::Format("Send %s system menu cmd", (m_sys_menu_opened ? "close" : "open"))); send_open_menu.Enable(enable_commands); send_exit.Enable(enable_commands); + // Tools + wxMenuItem& memory_viewer = *menubar.FindItem( id_tools_memory_viewer ); + wxMenuItem& rsx_debugger = *menubar.FindItem( id_tools_rsx_debugger); + memory_viewer.Enable(!is_stopped); + rsx_debugger.Enable(!is_stopped); + + //m_aui_mgr.Update(); //wxCommandEvent refit( wxEVT_COMMAND_MENU_SELECTED, id_update_dbg ); diff --git a/rpcs3/Gui/Plugins.h b/rpcs3/Gui/Plugins.h deleted file mode 100644 index d3e10c8728..0000000000 --- a/rpcs3/Gui/Plugins.h +++ /dev/null @@ -1,362 +0,0 @@ -#pragma once - -#define LOAD_SYMBOL(x) if(m_dll.HasSymbol(#x)) x = (_##x)m_dll.GetSymbol(#x) -struct Ps3EmuPlugin -{ - enum PS3EMULIB_TYPE - { - LIB_PAD = (1 << 0), - LIB_KB = (1 << 1), - LIB_MOUSE = (1 << 2), - LIB_FS = (1 << 3), - }; - - typedef u32 (*_Ps3EmuLibGetType)(); - typedef u32 (*_Ps3EmuLibGetVersion)(); - typedef const char* (*_Ps3EmuLibGetName)(); - typedef const char* (*_Ps3EmuLibGetFullName)(); - typedef void (*_Ps3EmuLibSetSettingsPath)(const char* path); - typedef void (*_Ps3EmuLibSetLogPath)(const char* path); - typedef const char* (*_Ps3EmuLibGetSettingsName)(); - typedef const char* (*_Ps3EmuLibGetLogName)(); - typedef void (*_Ps3EmuLibConfigure)(PS3EMULIB_TYPE type); - typedef void (*_Ps3EmuLibAbout)(); - typedef u32 (*_Ps3EmuLibTest)(PS3EMULIB_TYPE type); - - _Ps3EmuLibGetType Ps3EmuLibGetType; - _Ps3EmuLibGetVersion Ps3EmuLibGetVersion; - _Ps3EmuLibGetName Ps3EmuLibGetName; - _Ps3EmuLibGetFullName Ps3EmuLibGetFullName; - _Ps3EmuLibSetSettingsPath Ps3EmuLibSetSettingsPath; - _Ps3EmuLibSetLogPath Ps3EmuLibSetLogPath; - _Ps3EmuLibGetSettingsName Ps3EmuLibGetSettingsName; - _Ps3EmuLibGetLogName Ps3EmuLibGetLogName; - _Ps3EmuLibConfigure Ps3EmuLibConfigure; - _Ps3EmuLibAbout Ps3EmuLibAbout; - _Ps3EmuLibTest Ps3EmuLibTest; - - wxDynamicLibrary m_dll; - - Ps3EmuPlugin() - { - Reset(); - } - - Ps3EmuPlugin(const wxString& path) - { - Load(path); - } - - virtual ~Ps3EmuPlugin() throw() - { - Unload(); - } - - wxString FormatVersion() - { - if(!Ps3EmuLibGetVersion) return wxEmptyString; - - const u32 v = Ps3EmuLibGetVersion(); - - const u8 v0 = v >> 24; - const u8 v1 = v >> 16; - const u8 v2 = v >> 8; - const u8 v3 = v; - - if(!v2 && !v3) return wxString::Format("%d.%d", v0, v1); - if(!v3) return wxString::Format("%d.%d.%d", v0, v1, v2); - - return wxString::Format("%d.%d.%d.%d", v0, v1, v2, v3); - } - - void Load(const wxString& path) - { - if(m_dll.Load(path)) - { - Init(); - } - else - { - Reset(); - } - } - - void Unload() - { - Reset(); - - if(m_dll.IsLoaded()) m_dll.Unload(); - } - - virtual bool Test() - { - return - m_dll.IsLoaded() && - Ps3EmuLibGetType && - Ps3EmuLibGetVersion && - Ps3EmuLibGetName && - Ps3EmuLibGetFullName && - Ps3EmuLibSetSettingsPath && - Ps3EmuLibSetLogPath && - Ps3EmuLibGetSettingsName && - Ps3EmuLibGetLogName && - Ps3EmuLibConfigure && - Ps3EmuLibAbout && - Ps3EmuLibTest; - } - -protected: - virtual void Init() - { - LOAD_SYMBOL(Ps3EmuLibGetType); - LOAD_SYMBOL(Ps3EmuLibGetVersion); - LOAD_SYMBOL(Ps3EmuLibGetName); - LOAD_SYMBOL(Ps3EmuLibGetFullName); - LOAD_SYMBOL(Ps3EmuLibSetSettingsPath); - LOAD_SYMBOL(Ps3EmuLibSetLogPath); - LOAD_SYMBOL(Ps3EmuLibGetSettingsName); - LOAD_SYMBOL(Ps3EmuLibGetLogName); - LOAD_SYMBOL(Ps3EmuLibConfigure); - LOAD_SYMBOL(Ps3EmuLibAbout); - LOAD_SYMBOL(Ps3EmuLibTest); - } - - virtual void Reset() - { - Ps3EmuLibGetType = nullptr; - Ps3EmuLibGetVersion = nullptr; - Ps3EmuLibGetName = nullptr; - Ps3EmuLibGetFullName = nullptr; - Ps3EmuLibSetSettingsPath = nullptr; - Ps3EmuLibSetLogPath = nullptr; - Ps3EmuLibGetSettingsName = nullptr; - Ps3EmuLibGetLogName = nullptr; - Ps3EmuLibConfigure = nullptr; - Ps3EmuLibAbout = nullptr; - Ps3EmuLibTest = nullptr; - } -}; - -struct Ps3EmuPluginPAD : public Ps3EmuPlugin -{ - typedef int (*_PadInit)(u32 max_connect); - typedef int (*_PadEnd)(); - typedef int (*_PadClearBuf)(u32 port_no); - typedef int (*_PadGetData)(u32 port_no, void* data); - typedef int (*_PadGetDataExtra)(u32 port_no, u32* device_type, void* data); - typedef int (*_PadSetActDirect)(u32 port_no, void* param); - typedef int (*_PadGetInfo)(void* info); - typedef int (*_PadGetInfo2)(void* info); - typedef int (*_PadSetPortSetting)(u32 port_no, u32 port_setting); - typedef int (*_PadLddRegisterController)(); - typedef int (*_PadLddUnregisterController)(int handle); - typedef int (*_PadLddDataInsert)(int handle, void* data); - typedef int (*_PadLddGetPortNo)(int handle); - typedef int (*_PadPeriphGetInfo)(void* info); - typedef int (*_PadPeriphGetData)(u32 port_no, void* data); - typedef int (*_PadInfoPressMode)(u32 port_no); - typedef int (*_PadSetPressMode)(u32 port_no, u8 mode); - typedef int (*_PadInfoSensorMode)(u32 port_no); - typedef int (*_PadSetSensorMode)(u32 port_no, u8 mode); - typedef int (*_PadGetRawData)(u32 port_no, void* data); - typedef int (*_PadDbgLddRegisterController)(u32 device_capability); - typedef int (*_PadDbgLddSetDataInsertMode)(int handle, u8 mode); - typedef int (*_PadDbgPeriphRegisterDevice)(u16 vid, u16 pid, u32 pclass_type, u32 pclass_profile, void* mapping); - typedef int (*_PadDbgGetData)(u32 port_no, void* data); - - _PadInit PadInit; - _PadEnd PadEnd; - _PadClearBuf PadClearBuf; - _PadGetData PadGetData; - _PadGetDataExtra PadGetDataExtra; - _PadSetActDirect PadSetActDirect; - _PadGetInfo PadGetInfo; - _PadGetInfo2 PadGetInfo2; - _PadSetPortSetting PadSetPortSetting; - _PadLddRegisterController PadLddRegisterController; - _PadLddUnregisterController PadLddUnregisterController; - _PadLddDataInsert PadLddDataInsert; - _PadLddGetPortNo PadLddGetPortNo; - _PadPeriphGetInfo PadPeriphGetInfo; - _PadPeriphGetData PadPeriphGetData; - _PadInfoPressMode PadInfoPressMode; - _PadSetPressMode PadSetPressMode; - _PadInfoSensorMode PadInfoSensorMode; - _PadSetSensorMode PadSetSensorMode; - _PadGetRawData PadGetRawData; - _PadDbgLddRegisterController PadDbgLddRegisterController; - _PadDbgLddSetDataInsertMode PadDbgLddSetDataInsertMode; - _PadDbgPeriphRegisterDevice PadDbgPeriphRegisterDevice; - _PadDbgGetData PadDbgGetData; - - Ps3EmuPluginPAD() - { - Reset(); - } - - Ps3EmuPluginPAD(const wxString& path) - { - Load(path); - } - - virtual bool Test() - { - return Ps3EmuPlugin::Test() && - PadInit && - PadEnd && - PadClearBuf && - PadGetData && - PadGetDataExtra && - PadSetActDirect && - PadGetInfo && - PadGetInfo2 && - PadSetPortSetting && - PadLddRegisterController && - PadLddUnregisterController && - PadLddDataInsert && - PadLddGetPortNo && - PadPeriphGetInfo && - PadPeriphGetData && - PadInfoPressMode && - PadSetPressMode && - PadInfoSensorMode && - PadSetSensorMode && - PadGetRawData && - PadDbgLddRegisterController && - PadDbgLddSetDataInsertMode && - PadDbgPeriphRegisterDevice && - PadDbgGetData; - } - -protected: - virtual void Init() - { - LOAD_SYMBOL(PadInit); - LOAD_SYMBOL(PadEnd); - LOAD_SYMBOL(PadClearBuf); - LOAD_SYMBOL(PadGetData); - LOAD_SYMBOL(PadGetDataExtra); - LOAD_SYMBOL(PadSetActDirect); - LOAD_SYMBOL(PadGetInfo); - LOAD_SYMBOL(PadGetInfo2); - LOAD_SYMBOL(PadSetPortSetting); - LOAD_SYMBOL(PadLddRegisterController); - LOAD_SYMBOL(PadLddUnregisterController); - LOAD_SYMBOL(PadLddDataInsert); - LOAD_SYMBOL(PadLddGetPortNo); - LOAD_SYMBOL(PadPeriphGetInfo); - LOAD_SYMBOL(PadPeriphGetData); - LOAD_SYMBOL(PadInfoPressMode); - LOAD_SYMBOL(PadSetPressMode); - LOAD_SYMBOL(PadInfoSensorMode); - LOAD_SYMBOL(PadSetSensorMode); - LOAD_SYMBOL(PadGetRawData); - LOAD_SYMBOL(PadDbgLddRegisterController); - LOAD_SYMBOL(PadDbgLddSetDataInsertMode); - LOAD_SYMBOL(PadDbgPeriphRegisterDevice); - LOAD_SYMBOL(PadDbgGetData); - - Ps3EmuPlugin::Init(); - } - - virtual void Reset() - { - PadInit = nullptr; - PadEnd = nullptr; - PadClearBuf = nullptr; - PadGetData = nullptr; - PadGetDataExtra = nullptr; - PadSetActDirect = nullptr; - PadGetInfo = nullptr; - PadGetInfo2 = nullptr; - PadSetPortSetting = nullptr; - PadLddRegisterController = nullptr; - PadLddUnregisterController = nullptr; - PadLddDataInsert = nullptr; - PadLddGetPortNo = nullptr; - PadPeriphGetInfo = nullptr; - PadPeriphGetData = nullptr; - PadInfoPressMode = nullptr; - PadSetPressMode = nullptr; - PadInfoSensorMode = nullptr; - PadSetSensorMode = nullptr; - PadGetRawData = nullptr; - PadDbgLddRegisterController = nullptr; - PadDbgLddSetDataInsertMode = nullptr; - PadDbgPeriphRegisterDevice = nullptr; - PadDbgGetData = nullptr; - - Ps3EmuPlugin::Reset(); - } -}; - -struct PluginsManager -{ - struct PluginInfo - { - wxString path; - wxString name; - u32 type; - }; - - std::vector m_plugins; - std::vector m_pad_plugins; - - void Load(const wxString& path) - { - if(!wxDirExists(path)) return; - - m_plugins.clear(); - wxDir dir(path); - - wxArrayString res; - wxDir::GetAllFiles(path, &res, "*.dll", wxDIR_FILES); - - for(u32 i=0; iAdd(new wxStaticText(parent, wxID_ANY, name), wxSizerFlags().Border(wxRIGHT, 5).Center().Left()); - s_panel->Add(cb = new wxComboBox(parent, wxID_ANY), wxSizerFlags().Center().Right()); - - return s_panel; - } - - void Dialog() - { - wxDialog dial(nullptr, wxID_ANY, "Select plugins...", wxDefaultPosition); - - wxBoxSizer& s_panel(*new wxBoxSizer(wxVERTICAL)); - - wxComboBox* cbox_pad_plugins; - s_panel.Add(GetNewComboBox(&dial, "Pad", cbox_pad_plugins), wxSizerFlags().Border(wxALL, 5).Expand()); - - for(u32 i=0; iAppend(m_plugins[i].name + " (" + wxFileName(m_plugins[i].path).GetName() + ")"); - } - } - - if(cbox_pad_plugins->GetCount()) cbox_pad_plugins->Select(0); - - dial.SetSizerAndFit(&s_panel); - dial.ShowModal(); - } -}; diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 857b24759a..1736ecf163 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -210,31 +210,27 @@ bool ELF64Loader::LoadEhdrData(u64 offset) bool ELF64Loader::LoadPhdrData(u64 offset) { - for(u32 i=0; i max_addr) + if (phdr.p_vaddr + phdr.p_memsz > max_addr) { - max_addr = phdr_arr[i].p_vaddr + phdr_arr[i].p_memsz; + max_addr = phdr.p_vaddr + phdr.p_memsz; } - if(phdr_arr[i].p_vaddr != phdr_arr[i].p_paddr) + if (phdr.p_vaddr != phdr.p_paddr) { - LOG_WARNING - ( - LOADER, - "ElfProgram different load addrs: paddr=0x%8.8x, vaddr=0x%8.8x", - phdr_arr[i].p_paddr, phdr_arr[i].p_vaddr - ); + LOG_WARNING(LOADER, "ElfProgram different load addrs: paddr=0x%8.8x, vaddr=0x%8.8x", + phdr.p_paddr, phdr.p_vaddr); } - if(!Memory.MainMem.IsInMyRange(offset + phdr_arr[i].p_vaddr, phdr_arr[i].p_memsz)) + if(!Memory.MainMem.IsInMyRange(offset + phdr.p_vaddr, phdr.p_memsz)) { #ifdef LOADER_DEBUG LOG_WARNING(LOADER, "Skipping..."); @@ -243,57 +239,48 @@ bool ELF64Loader::LoadPhdrData(u64 offset) continue; } - switch(phdr_arr[i].p_type) + switch(phdr.p_type) { case 0x00000001: //LOAD - if(phdr_arr[i].p_memsz) + if(phdr.p_memsz) { - Memory.MainMem.AllocFixed(offset + phdr_arr[i].p_vaddr, phdr_arr[i].p_memsz); + Memory.MainMem.AllocFixed(offset + phdr.p_vaddr, phdr.p_memsz); - if(phdr_arr[i].p_filesz) + if(phdr.p_filesz) { - elf64_f.Seek(phdr_arr[i].p_offset); - elf64_f.Read(&Memory[offset + phdr_arr[i].p_vaddr], phdr_arr[i].p_filesz); - Emu.GetSFuncManager().StaticAnalyse(&Memory[offset + phdr_arr[i].p_vaddr], phdr_arr[i].p_filesz, phdr_arr[i].p_vaddr); + elf64_f.Seek(phdr.p_offset); + elf64_f.Read(&Memory[offset + phdr.p_vaddr], phdr.p_filesz); + Emu.GetSFuncManager().StaticAnalyse(&Memory[offset + phdr.p_vaddr], phdr.p_filesz, phdr.p_vaddr); } } break; case 0x00000007: //TLS - Emu.SetTLSData(offset + phdr_arr[i].p_vaddr, phdr_arr[i].p_filesz, phdr_arr[i].p_memsz); + Emu.SetTLSData(offset + phdr.p_vaddr, phdr.p_filesz, phdr.p_memsz); break; case 0x60000001: //LOOS+1 { - if(!phdr_arr[i].p_filesz) break; + if(!phdr.p_filesz) + break; - const sys_process_param& proc_param = *(sys_process_param*)&Memory[offset + phdr_arr[i].p_vaddr]; + const sys_process_param& proc_param = *(sys_process_param*)&Memory[offset + phdr.p_vaddr]; - if(re(proc_param.size) < sizeof(sys_process_param)) - { - LOG_WARNING(LOADER, "Bad proc param size! [0x%x : 0x%x]", re(proc_param.size), sizeof(sys_process_param)); + if (proc_param.size < sizeof(sys_process_param)) { + LOG_WARNING(LOADER, "Bad proc param size! [0x%x : 0x%x]", proc_param.size, sizeof(sys_process_param)); } - - if(re(proc_param.magic) != 0x13bcc5f6) - { - LOG_ERROR(LOADER, "Bad magic! [0x%x]", Memory.Reverse32(proc_param.magic)); + if (proc_param.magic != 0x13bcc5f6) { + LOG_ERROR(LOADER, "Bad magic! [0x%x]", proc_param.magic); } - else - { - sys_process_param_info& info = Emu.GetInfo().GetProcParam(); - info.sdk_version = re(proc_param.info.sdk_version); - info.primary_prio = re(proc_param.info.primary_prio); - info.primary_stacksize = re(proc_param.info.primary_stacksize); - info.malloc_pagesize = re(proc_param.info.malloc_pagesize); - info.ppc_seg = re(proc_param.info.ppc_seg); - //info.crash_dump_param_addr = re(proc_param.info.crash_dump_param_addr); + else { #ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "*** sdk version: 0x%x", info.sdk_version); - LOG_NOTICE(LOADER, "*** primary prio: %d", info.primary_prio); - LOG_NOTICE(LOADER, "*** primary stacksize: 0x%x", info.primary_stacksize); - LOG_NOTICE(LOADER, "*** malloc pagesize: 0x%x", info.malloc_pagesize); - LOG_NOTICE(LOADER, "*** ppc seg: 0x%x", info.ppc_seg); - //LOG_NOTICE(LOADER, "*** crash dump param addr: 0x%x", info.crash_dump_param_addr); + sys_process_param_info& info = Emu.GetInfo().GetProcParam(); + LOG_NOTICE(LOADER, "*** sdk version: 0x%x", info.sdk_version.ToLE()); + LOG_NOTICE(LOADER, "*** primary prio: %d", info.primary_prio.ToLE()); + LOG_NOTICE(LOADER, "*** primary stacksize: 0x%x", info.primary_stacksize.ToLE()); + LOG_NOTICE(LOADER, "*** malloc pagesize: 0x%x", info.malloc_pagesize.ToLE()); + LOG_NOTICE(LOADER, "*** ppc seg: 0x%x", info.ppc_seg.ToLE()); + //LOG_NOTICE(LOADER, "*** crash dump param addr: 0x%x", info.crash_dump_param_addr.ToLE()); #endif } } @@ -301,113 +288,89 @@ bool ELF64Loader::LoadPhdrData(u64 offset) case 0x60000002: //LOOS+2 { - if(!phdr_arr[i].p_filesz) break; + if(!phdr.p_filesz) + break; - sys_proc_prx_param proc_prx_param = *(sys_proc_prx_param*)&Memory[offset + phdr_arr[i].p_vaddr]; + sys_proc_prx_param proc_prx_param = *(sys_proc_prx_param*)&Memory[offset + phdr.p_vaddr]; - proc_prx_param.size = re(proc_prx_param.size); - proc_prx_param.magic = re(proc_prx_param.magic); - proc_prx_param.version = re(proc_prx_param.version); - proc_prx_param.libentstart = re(proc_prx_param.libentstart); - proc_prx_param.libentend = re(proc_prx_param.libentend); - proc_prx_param.libstubstart = re(proc_prx_param.libstubstart); - proc_prx_param.libstubend = re(proc_prx_param.libstubend); - proc_prx_param.ver = re(proc_prx_param.ver); #ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "*** size: 0x%x", proc_prx_param.size); - LOG_NOTICE(LOADER, "*** magic: 0x%x", proc_prx_param.magic); - LOG_NOTICE(LOADER, "*** version: 0x%x", proc_prx_param.version); - LOG_NOTICE(LOADER, "*** libentstart: 0x%x", proc_prx_param.libentstart); - LOG_NOTICE(LOADER, "*** libentend: 0x%x", proc_prx_param.libentend); - LOG_NOTICE(LOADER, "*** libstubstart: 0x%x", proc_prx_param.libstubstart); - LOG_NOTICE(LOADER, "*** libstubend: 0x%x", proc_prx_param.libstubend); - LOG_NOTICE(LOADER, "*** ver: 0x%x", proc_prx_param.ver); + LOG_NOTICE(LOADER, "*** size: 0x%x", proc_prx_param.size.ToLE()); + LOG_NOTICE(LOADER, "*** magic: 0x%x", proc_prx_param.magic.ToLE()); + LOG_NOTICE(LOADER, "*** version: 0x%x", proc_prx_param.version.ToLE()); + LOG_NOTICE(LOADER, "*** libentstart: 0x%x", proc_prx_param.libentstart.ToLE()); + LOG_NOTICE(LOADER, "*** libentend: 0x%x", proc_prx_param.libentend.ToLE()); + LOG_NOTICE(LOADER, "*** libstubstart: 0x%x", proc_prx_param.libstubstart.ToLE()); + LOG_NOTICE(LOADER, "*** libstubend: 0x%x", proc_prx_param.libstubend.ToLE()); + LOG_NOTICE(LOADER, "*** ver: 0x%x", proc_prx_param.ver.ToLE()); #endif - if(proc_prx_param.magic != 0x1b434cec) - { - LOG_ERROR(LOADER, "Bad magic! (0x%x)", proc_prx_param.magic); + if (proc_prx_param.magic != 0x1b434cec) { + LOG_ERROR(LOADER, "Bad magic! (0x%x)", proc_prx_param.magic.ToLE()); + break; } - else + + for(u32 s=proc_prx_param.libstubstart; sSetLoaded(); - } - else - { - LOG_WARNING(LOADER, "Unknown module '%s'", module_name.c_str()); - } - -#ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, ""); - LOG_NOTICE(LOADER, "*** size: 0x%x", stub.s_size); - LOG_NOTICE(LOADER, "*** version: 0x%x", stub.s_version); - LOG_NOTICE(LOADER, "*** unk0: 0x%x", stub.s_unk0); - LOG_NOTICE(LOADER, "*** unk1: 0x%x", stub.s_unk1); - LOG_NOTICE(LOADER, "*** imports: %d", stub.s_imports); - LOG_NOTICE(LOADER, "*** module name: %s [0x%x]", module_name.c_str(), stub.s_modulename); - LOG_NOTICE(LOADER, "*** nid: 0x%x", stub.s_nid); - LOG_NOTICE(LOADER, "*** text: 0x%x", stub.s_text); -#endif - static const u32 section = 4 * 3; - u64 tbl = Memory.MainMem.AllocAlign(stub.s_imports * 4 * 2); - u64 dst = Memory.MainMem.AllocAlign(stub.s_imports * section); - - for(u32 i=0; iLoad(nid)) - { - LOG_WARNING(LOADER, "Unimplemented function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); - } - } -#ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "import %d:", i+1); - LOG_NOTICE(LOADER, "*** nid: 0x%x (0x%x)", nid, stub.s_nid + i*4); - LOG_NOTICE(LOADER, "*** text: 0x%x (0x%x)", text, stub.s_text + i*4); -#endif - Memory.Write32(stub.s_text + i*4, tbl + i*8); - - mem32_ptr_t out_tbl(tbl + i*8); - out_tbl += dst + i*section; - out_tbl += Emu.GetModuleManager().GetFuncNumById(nid); - - mem32_ptr_t out_dst(dst + i*section); - out_dst += OR(11, 2, 2, 0); - out_dst += SC(2); - out_dst += BCLR(0x10 | 0x04, 0, 0, 0); - } + const std::string& module_name = Memory.ReadString(stub.s_modulename); + Module* module = Emu.GetModuleManager().GetModuleByName(module_name); + if (module) { + //module->SetLoaded(); } + else { + LOG_WARNING(LOADER, "Unknown module '%s'", module_name.c_str()); + } + #ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, " "); + LOG_NOTICE(LOADER, ""); + LOG_NOTICE(LOADER, "*** size: 0x%x", stub.s_size); + LOG_NOTICE(LOADER, "*** version: 0x%x", stub.s_version.ToLE()); + LOG_NOTICE(LOADER, "*** unk0: 0x%x", stub.s_unk0); + LOG_NOTICE(LOADER, "*** unk1: 0x%x", stub.s_unk1.ToLE()); + LOG_NOTICE(LOADER, "*** imports: %d", stub.s_imports.ToLE()); + LOG_NOTICE(LOADER, "*** module name: %s [0x%x]", module_name.c_str(), stub.s_modulename.ToLE()); + LOG_NOTICE(LOADER, "*** nid: 0x%016llx [0x%x]", Memory.Read64(stub.s_nid), stub.s_nid.ToLE()); + LOG_NOTICE(LOADER, "*** text: 0x%x", stub.s_text.ToLE()); #endif + static const u32 section = 4 * 3; + u64 tbl = Memory.MainMem.AllocAlign(stub.s_imports * 4 * 2); + u64 dst = Memory.MainMem.AllocAlign(stub.s_imports * section); + + for(u32 i=0; iLoad(nid)) { + LOG_WARNING(LOADER, "Unimplemented function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); + } +#ifdef LOADER_DEBUG + LOG_NOTICE(LOADER, "import %d:", i+1); + LOG_NOTICE(LOADER, "*** nid: 0x%x (0x%x)", nid, stub.s_nid + i*4); + LOG_NOTICE(LOADER, "*** text: 0x%x (0x%x)", text, stub.s_text + i*4); +#endif + Memory.Write32(stub.s_text + i*4, tbl + i*8); + + mem32_ptr_t out_tbl(tbl + i*8); + out_tbl += dst + i*section; + out_tbl += Emu.GetModuleManager().GetFuncNumById(nid); + + mem32_ptr_t out_dst(dst + i*section); + out_dst += OR(11, 2, 2, 0); + out_dst += SC(2); + out_dst += BCLR(0x10 | 0x04, 0, 0, 0); + } } +#ifdef LOADER_DEBUG + LOG_NOTICE(LOADER, ""); +#endif } break; } #ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, " "); + LOG_NOTICE(LOADER, ""); #endif } @@ -461,7 +424,7 @@ bool ELF64Loader::LoadShdrData(u64 offset) switch(shdr.sh_type) { case SHT_NOBITS: - //ConLog.Warning("SHT_NOBITS: addr=0x%llx, size=0x%llx", offset + addr, size); + //LOG_WARNING(LOADER, "SHT_NOBITS: addr=0x%llx, size=0x%llx", offset + addr, size); //memset(&Memory[offset + addr], 0, size); break; diff --git a/rpcs3/Loader/Loader.h b/rpcs3/Loader/Loader.h index 9112eddc41..96134a3e34 100644 --- a/rpcs3/Loader/Loader.h +++ b/rpcs3/Loader/Loader.h @@ -125,53 +125,53 @@ const std::string Phdr_TypeToString(const u32 type); struct sys_process_param_info { - u32 sdk_version; - s32 primary_prio; - u32 primary_stacksize; - u32 malloc_pagesize; - u32 ppc_seg; - //u32 crash_dump_param_addr; + be_t sdk_version; + be_t primary_prio; + be_t primary_stacksize; + be_t malloc_pagesize; + be_t ppc_seg; + //be_t crash_dump_param_addr; }; struct sys_process_param { - u32 size; - u32 magic; - u32 version; + be_t size; + be_t magic; + be_t version; sys_process_param_info info; }; struct sys_proc_prx_param { - u32 size; - u32 magic; - u32 version; - u32 pad0; - u32 libentstart; - u32 libentend; - u32 libstubstart; - u32 libstubend; - u16 ver; - u16 pad1; - u32 pad2; + be_t size; + be_t magic; + be_t version; + be_t pad0; + be_t libentstart; + be_t libentend; + be_t libstubstart; + be_t libstubend; + be_t ver; + be_t pad1; + be_t pad2; }; struct Elf64_StubHeader { u8 s_size; // = 0x2c u8 s_unk0; - u16 s_version; // = 0x1 - u16 s_unk1; // = 0x9 // flags? - u16 s_imports; - u32 s_unk2; // = 0x0 - u32 s_unk3; // = 0x0 - u32 s_modulename; - u32 s_nid; - u32 s_text; - u32 s_unk4; // = 0x0 - u32 s_unk5; // = 0x0 - u32 s_unk6; // = 0x0 - u32 s_unk7; // = 0x0 + be_t s_version; // = 0x1 + be_t s_unk1; // = 0x9 // flags? + be_t s_imports; + be_t s_unk2; // = 0x0 + be_t s_unk3; // = 0x0 + be_t s_modulename; + be_t s_nid; + be_t s_text; + be_t s_unk4; // = 0x0 + be_t s_unk5; // = 0x0 + be_t s_unk6; // = 0x0 + be_t s_unk7; // = 0x0 }; class LoaderBase diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 15ffbd0baa..20178ef443 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -92,9 +92,9 @@ + - @@ -316,9 +316,9 @@ + - diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index a791fc8435..a7d200071c 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -175,7 +175,6 @@ - @@ -224,7 +223,6 @@ - diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 15476df48d..950a606fba 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -60,9 +60,6 @@ Gui - - Gui - Gui @@ -158,9 +155,6 @@ Gui - - Gui - Gui From 230ba0d360403929f89dec429ef640fe0b202cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sun, 6 Jul 2014 18:05:52 +0200 Subject: [PATCH 118/499] Fixed conflicts and minor changes (2) --- rpcs3/Emu/Cell/RawSPUThread.h | 2 +- rpcs3/Emu/Cell/SPUThread.h | 2 +- rpcs3/Emu/Event.cpp | 2 +- rpcs3/Emu/{event.h => Event.h} | 0 rpcs3/Emu/SysCalls/SysCalls.h | 2 +- rpcs3/Emu/SysCalls/lv2/SC_Event.cpp | 388 --------------------- rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp | 370 -------------------- rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp | 32 -- rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp | 50 --- rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp | 423 ----------------------- rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_event.h | 2 +- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_tty.cpp | 13 +- rpcs3/Emu/SysCalls/lv2/sys_tty.h | 23 ++ 15 files changed, 35 insertions(+), 1278 deletions(-) rename rpcs3/Emu/{event.h => Event.h} (100%) delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Event.cpp delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp delete mode 100644 rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp diff --git a/rpcs3/Emu/Cell/RawSPUThread.h b/rpcs3/Emu/Cell/RawSPUThread.h index 78a3bb297d..ccccad25a6 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.h +++ b/rpcs3/Emu/Cell/RawSPUThread.h @@ -1,6 +1,6 @@ #pragma once #include "SPUThread.h" -#include "Emu/event.h" +#include "Emu/Event.h" __forceinline static u32 GetRawSPURegAddrByNum(int num, int offset) { diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 0ef23c72ec..b71263c1b1 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -1,6 +1,6 @@ #pragma once #include "PPCThread.h" -#include "Emu/event.h" +#include "Emu/Event.h" #include "Emu/SysCalls/lv2/sys_spu.h" #include "MFC.h" #include "Emu/SysCalls/ErrorCodes.h" diff --git a/rpcs3/Emu/Event.cpp b/rpcs3/Emu/Event.cpp index d36bc08bc6..d5065e2a98 100644 --- a/rpcs3/Emu/Event.cpp +++ b/rpcs3/Emu/Event.cpp @@ -2,7 +2,7 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "event.h" +#include "Event.h" void EventManager::Init() { diff --git a/rpcs3/Emu/event.h b/rpcs3/Emu/Event.h similarity index 100% rename from rpcs3/Emu/event.h rename to rpcs3/Emu/Event.h diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 759078de8d..95a6267464 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -24,7 +24,7 @@ #include "lv2/sys_tty.h" #include "lv2/sys_vm.h" -#include "Emu/event.h" +#include "Emu/Event.h" //#define SYSCALLS_DEBUG diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp deleted file mode 100644 index f0ceecdc7f..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event.cpp +++ /dev/null @@ -1,388 +0,0 @@ -#include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" - -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/Cell/SPUThread.h" -#include "Emu/event.h" - -SysCallBase sys_event("sys_event"); - -//128 -int sys_event_queue_create(mem32_t equeue_id, mem_ptr_t attr, u64 event_queue_key, int size) -{ - sys_event.Warning("sys_event_queue_create(equeue_id_addr=0x%x, attr_addr=0x%x, event_queue_key=0x%llx, size=%d)", - equeue_id.GetAddr(), attr.GetAddr(), event_queue_key, size); - - if(size <= 0 || size > 127) - { - return CELL_EINVAL; - } - - if(!equeue_id.IsGood() || !attr.IsGood()) - { - return CELL_EFAULT; - } - - switch (attr->protocol.ToBE()) - { - case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_RETRY): sys_event.Error("Invalid SYS_SYNC_RETRY protocol attr"); return CELL_EINVAL; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_event.Error("Invalid SYS_SYNC_PRIORITY_INHERIT protocol attr"); return CELL_EINVAL; - case se32(SYS_SYNC_FIFO): break; - default: sys_event.Error("Unknown 0x%x protocol attr", (u32)attr->protocol); return CELL_EINVAL; - } - - switch (attr->type.ToBE()) - { - case se32(SYS_PPU_QUEUE): break; - case se32(SYS_SPU_QUEUE): break; - default: sys_event.Error("Unknown 0x%x type attr", (u32)attr->type); return CELL_EINVAL; - } - - if (event_queue_key && Emu.GetEventManager().CheckKey(event_queue_key)) - { - return CELL_EEXIST; - } - - EventQueue* eq = new EventQueue((u32)attr->protocol, (int)attr->type, attr->name_u64, event_queue_key, size); - - if (event_queue_key && !Emu.GetEventManager().RegisterKey(eq, event_queue_key)) - { - delete eq; - return CELL_EAGAIN; - } - - equeue_id = sys_event.GetNewId(eq); - sys_event.Warning("*** event_queue created [%s] (protocol=0x%x, type=0x%x): id = %d", - std::string(attr->name, 8).c_str(), (u32)attr->protocol, (int)attr->type, equeue_id.GetValue()); - - return CELL_OK; -} - -int sys_event_queue_destroy(u32 equeue_id, int mode) -{ - sys_event.Error("sys_event_queue_destroy(equeue_id=%d, mode=0x%x)", equeue_id, mode); - - EventQueue* eq; - if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) - { - return CELL_ESRCH; - } - - if (mode && mode != SYS_EVENT_QUEUE_DESTROY_FORCE) - { - return CELL_EINVAL; - } - - u32 tid = GetCurrentPPUThread().GetId(); - - eq->sq.m_mutex.lock(); - eq->owner.lock(tid); - // check if some threads are waiting for an event - if (!mode && eq->sq.list.size()) - { - eq->owner.unlock(tid); - eq->sq.m_mutex.unlock(); - return CELL_EBUSY; - } - eq->owner.unlock(tid, ~0); - eq->sq.m_mutex.unlock(); - while (eq->sq.list.size()) - { - Sleep(1); - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "sys_event_queue_destroy(equeue=%d) aborted", equeue_id); - break; - } - } - - Emu.GetEventManager().UnregisterKey(eq->key); - eq->ports.clear(); - Emu.GetIdManager().RemoveID(equeue_id); - - return CELL_OK; -} - -int sys_event_queue_tryreceive(u32 equeue_id, mem_ptr_t event_array, int size, mem32_t number) -{ - sys_event.Error("sys_event_queue_tryreceive(equeue_id=%d, event_array_addr=0x%x, size=%d, number_addr=0x%x)", - equeue_id, event_array.GetAddr(), size, number.GetAddr()); - - if (size < 0 || !number.IsGood()) - { - return CELL_EFAULT; - } - - if (size && !Memory.IsGoodAddr(event_array.GetAddr(), sizeof(sys_event_data) * size)) - { - return CELL_EFAULT; - } - - EventQueue* eq; - if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) - { - return CELL_ESRCH; - } - - if (eq->type != SYS_PPU_QUEUE) - { - return CELL_EINVAL; - } - - if (size == 0) - { - number = 0; - return CELL_OK; - } - - u32 tid = GetCurrentPPUThread().GetId(); - - eq->sq.m_mutex.lock(); - eq->owner.lock(tid); - if (eq->sq.list.size()) - { - number = 0; - eq->owner.unlock(tid); - eq->sq.m_mutex.unlock(); - return CELL_OK; - } - number = eq->events.pop_all((sys_event_data*)(Memory + event_array.GetAddr()), size); - eq->owner.unlock(tid); - eq->sq.m_mutex.unlock(); - return CELL_OK; -} - -int sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 timeout) -{ - sys_event.Log("sys_event_queue_receive(equeue_id=%d, event_addr=0x%x, timeout=%lld)", - equeue_id, event.GetAddr(), timeout); - - if (!event.IsGood()) - { - return CELL_EFAULT; - } - - EventQueue* eq; - if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) - { - return CELL_ESRCH; - } - - if (eq->type != SYS_PPU_QUEUE) - { - return CELL_EINVAL; - } - - u32 tid = GetCurrentPPUThread().GetId(); - - eq->sq.push(tid); // add thread to sleep queue - - timeout = timeout ? (timeout / 1000) : ~0; - u64 counter = 0; - while (true) - { - switch (eq->owner.trylock(tid)) - { - case SMR_OK: - if (!eq->events.count()) - { - eq->owner.unlock(tid); - break; - } - else - { - u32 next = (eq->protocol == SYS_SYNC_FIFO) ? eq->sq.pop() : eq->sq.pop_prio(); - if (next != tid) - { - eq->owner.unlock(tid, next); - break; - } - } - case SMR_SIGNAL: - { - eq->events.pop(*event); - eq->owner.unlock(tid); - sys_event.Log(" *** event received: source=0x%llx, d1=0x%llx, d2=0x%llx, d3=0x%llx", - (u64)event->source, (u64)event->data1, (u64)event->data2, (u64)event->data3); - /* passing event data in registers */ - PPUThread& t = GetCurrentPPUThread(); - t.GPR[4] = event->source; - t.GPR[5] = event->data1; - t.GPR[6] = event->data2; - t.GPR[7] = event->data3; - return CELL_OK; - } - case SMR_FAILED: break; - default: eq->sq.invalidate(tid); return CELL_ECANCELED; - } - - Sleep(1); - if (counter++ > timeout || Emu.IsStopped()) - { - if (Emu.IsStopped()) LOG_WARNING(HLE, "sys_event_queue_receive(equeue=%d) aborted", equeue_id); - eq->sq.invalidate(tid); - return CELL_ETIMEDOUT; - } - } -} - -int sys_event_queue_drain(u32 equeue_id) -{ - sys_event.Log("sys_event_queue_drain(equeue_id=%d)", equeue_id); - - EventQueue* eq; - if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) - { - return CELL_ESRCH; - } - - eq->events.clear(); - - return CELL_OK; -} - -int sys_event_port_create(mem32_t eport_id, int port_type, u64 name) -{ - sys_event.Warning("sys_event_port_create(eport_id_addr=0x%x, port_type=0x%x, name=0x%llx)", - eport_id.GetAddr(), port_type, name); - - if (!eport_id.IsGood()) - { - return CELL_EFAULT; - } - - if (port_type != SYS_EVENT_PORT_LOCAL) - { - sys_event.Error("sys_event_port_create: invalid port_type(0x%x)", port_type); - return CELL_EINVAL; - } - - EventPort* eport = new EventPort(); - u32 id = sys_event.GetNewId(eport); - eport->name = name ? name : ((u64)sys_process_getpid() << 32) | (u64)id; - eport_id = id; - sys_event.Warning("*** sys_event_port created: id = %d", id); - - return CELL_OK; -} - -int sys_event_port_destroy(u32 eport_id) -{ - sys_event.Warning("sys_event_port_destroy(eport_id=%d)", eport_id); - - EventPort* eport; - if (!Emu.GetIdManager().GetIDData(eport_id, eport)) - { - return CELL_ESRCH; - } - - if (!eport->m_mutex.try_lock()) - { - return CELL_EISCONN; - } - - if (eport->eq) - { - eport->m_mutex.unlock(); - return CELL_EISCONN; - } - - eport->m_mutex.unlock(); - Emu.GetIdManager().RemoveID(eport_id); - return CELL_OK; -} - -int sys_event_port_connect_local(u32 eport_id, u32 equeue_id) -{ - sys_event.Warning("sys_event_port_connect_local(eport_id=%d, equeue_id=%d)", eport_id, equeue_id); - - EventPort* eport; - if (!Emu.GetIdManager().GetIDData(eport_id, eport)) - { - return CELL_ESRCH; - } - - if (!eport->m_mutex.try_lock()) - { - return CELL_EISCONN; - } - - if (eport->eq) - { - eport->m_mutex.unlock(); - return CELL_EISCONN; - } - - EventQueue* equeue; - if (!Emu.GetIdManager().GetIDData(equeue_id, equeue)) - { - sys_event.Error("sys_event_port_connect_local: event_queue(%d) not found!", equeue_id); - eport->m_mutex.unlock(); - return CELL_ESRCH; - } - else - { - equeue->ports.add(eport); - } - - eport->eq = equeue; - eport->m_mutex.unlock(); - return CELL_OK; -} - -int sys_event_port_disconnect(u32 eport_id) -{ - sys_event.Warning("sys_event_port_disconnect(eport_id=%d)", eport_id); - - EventPort* eport; - if (!Emu.GetIdManager().GetIDData(eport_id, eport)) - { - return CELL_ESRCH; - } - - if (!eport->eq) - { - return CELL_ENOTCONN; - } - - if (!eport->m_mutex.try_lock()) - { - return CELL_EBUSY; - } - - eport->eq->ports.remove(eport); - eport->eq = nullptr; - eport->m_mutex.unlock(); - return CELL_OK; -} - -int sys_event_port_send(u32 eport_id, u64 data1, u64 data2, u64 data3) -{ - sys_event.Log("sys_event_port_send(eport_id=%d, data1=0x%llx, data2=0x%llx, data3=0x%llx)", - eport_id, data1, data2, data3); - - EventPort* eport; - if (!Emu.GetIdManager().GetIDData(eport_id, eport)) - { - return CELL_ESRCH; - } - - std::lock_guard lock(eport->m_mutex); - - EventQueue* eq = eport->eq; - if (!eq) - { - return CELL_ENOTCONN; - } - - if (!eq->events.push(eport->name, data1, data2, data3)) - { - return CELL_EBUSY; - } - - return CELL_OK; -} diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp deleted file mode 100644 index 743c37beb9..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Event_flag.cpp +++ /dev/null @@ -1,370 +0,0 @@ -#include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" - -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/lv2/SC_Event_flag.h" - -SysCallBase sys_event_flag("sys_event_flag"); - -int sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init) -{ - sys_event_flag.Warning("sys_event_flag_create(eflag_id_addr=0x%x, attr_addr=0x%x, init=0x%llx)", - eflag_id.GetAddr(), attr.GetAddr(), init); - - if(!eflag_id.IsGood() || !attr.IsGood()) - { - return CELL_EFAULT; - } - - switch (attr->protocol.ToBE()) - { - case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_RETRY): sys_event_flag.Warning("TODO: SYS_SYNC_RETRY attr"); break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_event_flag.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT attr"); break; - case se32(SYS_SYNC_FIFO): break; - default: return CELL_EINVAL; - } - - if (attr->pshared.ToBE() != se32(0x200)) - { - return CELL_EINVAL; - } - - switch (attr->type.ToBE()) - { - case se32(SYS_SYNC_WAITER_SINGLE): break; - case se32(SYS_SYNC_WAITER_MULTIPLE): break; - default: return CELL_EINVAL; - } - - eflag_id = sys_event_flag.GetNewId(new EventFlag(init, (u32)attr->protocol, (int)attr->type)); - - sys_event_flag.Warning("*** event_flag created [%s] (protocol=0x%x, type=0x%x): id = %d", - std::string(attr->name, 8).c_str(), (u32)attr->protocol, (int)attr->type, eflag_id.GetValue()); - - return CELL_OK; -} - -int sys_event_flag_destroy(u32 eflag_id) -{ - sys_event_flag.Warning("sys_event_flag_destroy(eflag_id=%d)", eflag_id); - - EventFlag* ef; - if(!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; - - if (ef->waiters.size()) // ??? - { - return CELL_EBUSY; - } - - Emu.GetIdManager().RemoveID(eflag_id); - - return CELL_OK; -} - -int sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 timeout) -{ - sys_event_flag.Log("sys_event_flag_wait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x, timeout=%lld)", - eflag_id, bitptn, mode, result.GetAddr(), timeout); - - if (result.IsGood()) result = 0; - - switch (mode & 0xf) - { - case SYS_EVENT_FLAG_WAIT_AND: break; - case SYS_EVENT_FLAG_WAIT_OR: break; - default: return CELL_EINVAL; - } - - switch (mode & ~0xf) - { - case 0: break; // ??? - case SYS_EVENT_FLAG_WAIT_CLEAR: break; - case SYS_EVENT_FLAG_WAIT_CLEAR_ALL: break; - default: return CELL_EINVAL; - } - - EventFlag* ef; - if(!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; - - u32 tid = GetCurrentPPUThread().GetId(); - - { - SMutexLocker lock(ef->m_mutex); - if (ef->m_type == SYS_SYNC_WAITER_SINGLE && ef->waiters.size() > 0) - { - return CELL_EPERM; - } - EventFlagWaiter rec; - rec.bitptn = bitptn; - rec.mode = mode; - rec.tid = tid; - ef->waiters.push_back(rec); - - if (ef->check() == tid) - { - u64 flags = ef->flags; - - ef->waiters.erase(ef->waiters.end() - 1); - - if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) - { - ef->flags &= ~bitptn; - } - else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) - { - ef->flags = 0; - } - - if (result.IsGood()) - { - result = flags; - return CELL_OK; - } - - if (!result.GetAddr()) - { - return CELL_OK; - } - return CELL_EFAULT; - } - } - - u32 counter = 0; - const u32 max_counter = timeout ? (timeout / 1000) : ~0; - - while (true) - { - if (ef->signal.unlock(tid, tid) == SMR_OK) - { - SMutexLocker lock(ef->m_mutex); - - u64 flags = ef->flags; - - for (u32 i = 0; i < ef->waiters.size(); i++) - { - if (ef->waiters[i].tid == tid) - { - ef->waiters.erase(ef->waiters.begin() +i); - - if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) - { - ef->flags &= ~bitptn; - } - else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) - { - ef->flags = 0; - } - - if (u32 target = ef->check()) - { - // if signal, leave both mutexes locked... - ef->signal.unlock(tid, target); - ef->m_mutex.unlock(tid, target); - } - else - { - ef->signal.unlock(tid); - } - - if (result.IsGood()) - { - result = flags; - return CELL_OK; - } - - if (!result.GetAddr()) - { - return CELL_OK; - } - return CELL_EFAULT; - } - } - - ef->signal.unlock(tid); - return CELL_ECANCELED; - } - - Sleep(1); - - if (counter++ > max_counter) - { - SMutexLocker lock(ef->m_mutex); - - for (u32 i = 0; i < ef->waiters.size(); i++) - { - if (ef->waiters[i].tid == tid) - { - ef->waiters.erase(ef->waiters.begin() + i); - break; - } - } - - return CELL_ETIMEDOUT; - } - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "sys_event_flag_wait(id=%d) aborted", eflag_id); - return CELL_OK; - } - } -} - -int sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result) -{ - sys_event_flag.Log("sys_event_flag_trywait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x)", - eflag_id, bitptn, mode, result.GetAddr()); - - if (result.IsGood()) result = 0; - - switch (mode & 0xf) - { - case SYS_EVENT_FLAG_WAIT_AND: break; - case SYS_EVENT_FLAG_WAIT_OR: break; - default: return CELL_EINVAL; - } - - switch (mode & ~0xf) - { - case 0: break; // ??? - case SYS_EVENT_FLAG_WAIT_CLEAR: break; - case SYS_EVENT_FLAG_WAIT_CLEAR_ALL: break; - default: return CELL_EINVAL; - } - - EventFlag* ef; - if(!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; - - SMutexLocker lock(ef->m_mutex); - - u64 flags = ef->flags; - - if (((mode & SYS_EVENT_FLAG_WAIT_AND) && (flags & bitptn) == bitptn) || - ((mode & SYS_EVENT_FLAG_WAIT_OR) && (flags & bitptn))) - { - if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) - { - ef->flags &= ~bitptn; - } - else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) - { - ef->flags = 0; - } - - if (result.IsGood()) - { - result = flags; - return CELL_OK; - } - - if (!result.GetAddr()) - { - return CELL_OK; - } - return CELL_EFAULT; - } - - return CELL_EBUSY; -} - -int sys_event_flag_set(u32 eflag_id, u64 bitptn) -{ - sys_event_flag.Log("sys_event_flag_set(eflag_id=%d, bitptn=0x%llx)", eflag_id, bitptn); - - EventFlag* ef; - if(!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; - - u32 tid = GetCurrentPPUThread().GetId(); - - ef->m_mutex.lock(tid); - ef->flags |= bitptn; - if (u32 target = ef->check()) - { - // if signal, leave both mutexes locked... - ef->signal.lock(target); - ef->m_mutex.unlock(tid, target); - } - else - { - ef->m_mutex.unlock(tid); - } - - return CELL_OK; -} - -int sys_event_flag_clear(u32 eflag_id, u64 bitptn) -{ - sys_event_flag.Log("sys_event_flag_clear(eflag_id=%d, bitptn=0x%llx)", eflag_id, bitptn); - - EventFlag* ef; - if(!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; - - SMutexLocker lock(ef->m_mutex); - ef->flags &= bitptn; - - return CELL_OK; -} - -int sys_event_flag_cancel(u32 eflag_id, mem32_t num) -{ - sys_event_flag.Log("sys_event_flag_cancel(eflag_id=%d, num_addr=0x%x)", eflag_id, num.GetAddr()); - - EventFlag* ef; - if(!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; - - std::vector tids; - - { - SMutexLocker lock(ef->m_mutex); - tids.resize(ef->waiters.size()); - for (u32 i = 0; i < ef->waiters.size(); i++) - { - tids[i] = ef->waiters[i].tid; - } - ef->waiters.clear(); - } - - for (u32 i = 0; i < tids.size(); i++) - { - ef->signal.lock(tids[i]); - } - - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "sys_event_flag_cancel(id=%d) aborted", eflag_id); - return CELL_OK; - } - - if (num.IsGood()) - { - num = tids.size(); - return CELL_OK; - } - - if (!num.GetAddr()) - { - return CELL_OK; - } - return CELL_EFAULT; -} - -int sys_event_flag_get(u32 eflag_id, mem64_t flags) -{ - sys_event_flag.Log("sys_event_flag_get(eflag_id=%d, flags_addr=0x%x)", eflag_id, flags.GetAddr()); - - EventFlag* ef; - if(!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; - - if (!flags.IsGood()) - { - return CELL_EFAULT; - } - - SMutexLocker lock(ef->m_mutex); - flags = ef->flags; - - return CELL_OK; -} diff --git a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp b/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp deleted file mode 100644 index d0f80fcc90..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_GCM.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" -#include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/GS/GCM.h" - -extern Module cellGcmSys; -extern gcmInfo gcm_info; - -int cellGcmCallback(u32 context_addr, u32 count) -{ - GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); - - CellGcmContextData& ctx = (CellGcmContextData&)Memory[context_addr]; - CellGcmControl& ctrl = (CellGcmControl&)Memory[gcm_info.control_addr]; - - const s32 res = ctx.current - ctx.begin - ctrl.put; - - if(res > 0) Memory.Copy(ctx.begin, ctx.current - res, res); - - ctx.current = ctx.begin + res; - - //InterlockedExchange64((volatile long long*)((u8*)&ctrl + offsetof(CellGcmControl, put)), (u64)(u32)re(res)); - ctrl.put = res; - ctrl.get = 0; - - return CELL_OK; -} diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp deleted file mode 100644 index ca0d633251..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Heap.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/SysCalls/SysCalls.h" - -SysCallBase sc_heap("sys_heap"); - -struct HeapInfo -{ - u32 heap_addr; - u32 align; - u32 size; - - HeapInfo(u32 _heap_addr, u32 _align, u32 _size) - : heap_addr(_heap_addr) - , align(_align) - , size(_size) - { - } -}; - -int sys_heap_create_heap(const u32 heap_addr, const u32 align, const u32 size) -{ - sc_heap.Warning("sys_heap_create_heap(heap_addr=0x%x, align=0x%x, size=0x%x)", heap_addr, align, size); - - u32 heap_id = sc_heap.GetNewId(new HeapInfo(heap_addr, align, size)); - sc_heap.Warning("*** sys_heap created: id = %d", heap_id); - return heap_id; -} - -int sys_heap_malloc(const u32 heap_id, const u32 size) -{ - sc_heap.Warning("sys_heap_malloc(heap_id=%d, size=0x%x)", heap_id, size); - - HeapInfo* heap; - if(!sc_heap.CheckId(heap_id, heap)) return CELL_ESRCH; - - return Memory.Alloc(size, 1); -} - -int _sys_heap_memalign(u32 heap_id, u32 align, u32 size) -{ - sc_heap.Warning("_sys_heap_memalign(heap_id=%d, align=0x%x, size=0x%x)", heap_id, align, size); - - HeapInfo* heap; - if(!sc_heap.CheckId(heap_id, heap)) return CELL_ESRCH; - - return Memory.Alloc(size, align); -} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp b/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp deleted file mode 100644 index b82ab31570..0000000000 --- a/rpcs3/Emu/SysCalls/lv2/SC_Memory.cpp +++ /dev/null @@ -1,423 +0,0 @@ -#include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/SysCalls/SysCalls.h" -#include "SC_Memory.h" -#include - -SysCallBase sc_mem("memory"); -std::map mmapper_info_map; - -int sys_memory_allocate(u32 size, u32 flags, u32 alloc_addr_addr) -{ - sc_mem.Log("sys_memory_allocate(size=0x%x, flags=0x%x)", size, flags); - - // Check page size. - u32 addr; - switch(flags) - { - case SYS_MEMORY_PAGE_SIZE_1M: - if(size & 0xfffff) return CELL_EALIGN; - addr = Memory.Alloc(size, 0x100000); - break; - - case SYS_MEMORY_PAGE_SIZE_64K: - if(size & 0xffff) return CELL_EALIGN; - addr = Memory.Alloc(size, 0x10000); - break; - - default: return CELL_EINVAL; - } - - if(!addr) - return CELL_ENOMEM; - - // Write back the start address of the allocated area. - sc_mem.Log("Memory allocated! [addr: 0x%x, size: 0x%x]", addr, size); - Memory.Write32(alloc_addr_addr, addr); - - return CELL_OK; -} - -int sys_memory_allocate_from_container(u32 size, u32 cid, u32 flags, u32 alloc_addr_addr) -{ - sc_mem.Log("sys_memory_allocate_from_container(size=0x%x, cid=0x%x, flags=0x%x)", size, cid, flags); - - // Check if this container ID is valid. - MemoryContainerInfo* ct; - if(!sc_mem.CheckId(cid, ct)) - return CELL_ESRCH; - - // Check page size. - switch(flags) - { - case SYS_MEMORY_PAGE_SIZE_1M: - if(size & 0xfffff) return CELL_EALIGN; - ct->addr = Memory.Alloc(size, 0x100000); - break; - - case SYS_MEMORY_PAGE_SIZE_64K: - if(size & 0xffff) return CELL_EALIGN; - ct->addr = Memory.Alloc(size, 0x10000); - break; - - default: return CELL_EINVAL; - } - - // Store the address and size in the container. - if(!ct->addr) - return CELL_ENOMEM; - ct->size = size; - - // Write back the start address of the allocated area. - sc_mem.Log("Memory allocated! [addr: 0x%x, size: 0x%x]", ct->addr, ct->size); - Memory.Write32(alloc_addr_addr, ct->addr); - - return CELL_OK; -} - -int sys_memory_free(u32 start_addr) -{ - sc_mem.Log("sys_memory_free(start_addr=0x%x)", start_addr); - - // Release the allocated memory. - if(!Memory.Free(start_addr)) - return CELL_EFAULT; - - return CELL_OK; -} - -int sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr) -{ - sc_mem.Warning("sys_memory_get_page_attribute(addr=0x%x, attr_addr=0x%x)", addr, attr.GetAddr()); - - if (!attr.IsGood()) - return CELL_EFAULT; - - // TODO: Implement per thread page attribute setting. - attr->attribute = 0; - attr->page_size = 0; - attr->access_right = 0; - attr->pad = 0; - - return CELL_OK; -} - -int sys_memory_get_user_memory_size(mem_ptr_t mem_info) -{ - sc_mem.Warning("sys_memory_get_user_memory_size(mem_info_addr=0x%x)", mem_info.GetAddr()); - - // Fetch the user memory available. - mem_info->total_user_memory = Memory.GetUserMemTotalSize(); - mem_info->available_user_memory = Memory.GetUserMemAvailSize(); - return CELL_OK; -} - -int sys_memory_container_create(mem32_t cid, u32 yield_size) -{ - sc_mem.Warning("sys_memory_container_create(cid_addr=0x%x, yield_size=0x%x)", cid.GetAddr(), yield_size); - - if (!cid.IsGood()) - return CELL_EFAULT; - - yield_size &= ~0xfffff; //round down to 1 MB granularity - u64 addr = Memory.Alloc(yield_size, 0x100000); //1 MB alignment - - if(!addr) - return CELL_ENOMEM; - - // Wrap the allocated memory in a memory container. - MemoryContainerInfo *ct = new MemoryContainerInfo(addr, yield_size); - cid = sc_mem.GetNewId(ct); - procObjects.mem_objects.insert(cid); - - sc_mem.Warning("*** memory_container created(addr=0x%llx): id = %d", addr, cid.GetValue()); - - return CELL_OK; -} - -int sys_memory_container_destroy(u32 cid) -{ - sc_mem.Warning("sys_memory_container_destroy(cid=%d)", cid); - - // Check if this container ID is valid. - MemoryContainerInfo* ct; - if(!sc_mem.CheckId(cid, ct)) - return CELL_ESRCH; - - // Release the allocated memory and remove the ID. - Memory.Free(ct->addr); - Emu.GetIdManager().RemoveID(cid); - - return CELL_OK; -} - -int sys_memory_container_get_size(mem_ptr_t mem_info, u32 cid) -{ - sc_mem.Warning("sys_memory_container_get_size(mem_info_addr=0x%x, cid=%d)", mem_info.GetAddr(), cid); - - // Check if this container ID is valid. - MemoryContainerInfo* ct; - if(!sc_mem.CheckId(cid, ct)) - return CELL_ESRCH; - - // HACK: Return all memory. - sys_memory_info_t info; - mem_info->total_user_memory = ct->size; - mem_info->available_user_memory = ct->size; - return CELL_OK; -} - -int sys_mmapper_allocate_address(u32 size, u64 flags, u32 alignment, u32 alloc_addr) -{ - sc_mem.Warning("sys_mmapper_allocate_address(size=0x%x, flags=0x%llx, alignment=0x%x, alloc_addr=0x%x)", - size, flags, alignment, alloc_addr); - - if(!Memory.IsGoodAddr(alloc_addr)) - return CELL_EFAULT; - - // Check for valid alignment. - if(alignment > 0x80000000) - return CELL_EALIGN; - - // Check page size. - u32 addr; - switch(flags & (SYS_MEMORY_PAGE_SIZE_1M | SYS_MEMORY_PAGE_SIZE_64K)) - { - default: - case SYS_MEMORY_PAGE_SIZE_1M: - if(Memory.AlignAddr(size, alignment) & 0xfffff) - return CELL_EALIGN; - addr = Memory.Alloc(size, 0x100000); - break; - - case SYS_MEMORY_PAGE_SIZE_64K: - if(Memory.AlignAddr(size, alignment) & 0xffff) - return CELL_EALIGN; - addr = Memory.Alloc(size, 0x10000); - break; - } - - // Write back the start address of the allocated area. - Memory.Write32(alloc_addr, addr); - - return CELL_OK; -} - -int sys_mmapper_allocate_fixed_address() -{ - sc_mem.Warning("sys_mmapper_allocate_fixed_address"); - - // Allocate a fixed size from user memory. - if (!Memory.Alloc(SYS_MMAPPER_FIXED_SIZE, 0x100000)) - return CELL_EEXIST; - - return CELL_OK; -} - -int sys_mmapper_allocate_memory(u32 size, u64 flags, mem32_t mem_id) -{ - sc_mem.Warning("sys_mmapper_allocate_memory(size=0x%x, flags=0x%llx, mem_id_addr=0x%x)", size, flags, mem_id.GetAddr()); - - if(!mem_id.IsGood()) - return CELL_EFAULT; - - // Check page granularity. - u32 addr; - switch(flags & (SYS_MEMORY_PAGE_SIZE_1M | SYS_MEMORY_PAGE_SIZE_64K)) - { - case SYS_MEMORY_PAGE_SIZE_1M: - if(size & 0xfffff) - return CELL_EALIGN; - addr = Memory.Alloc(size, 0x100000); - break; - - case SYS_MEMORY_PAGE_SIZE_64K: - if(size & 0xffff) - return CELL_EALIGN; - addr = Memory.Alloc(size, 0x10000); - break; - - default: - return CELL_EINVAL; - } - - if(!addr) - return CELL_ENOMEM; - - // Generate a new mem ID. - mem_id = sc_mem.GetNewId(new mmapper_info(addr, size, flags)); - - return CELL_OK; -} - -int sys_mmapper_allocate_memory_from_container(u32 size, u32 cid, u64 flags, mem32_t mem_id) -{ - sc_mem.Warning("sys_mmapper_allocate_memory_from_container(size=0x%x, cid=%d, flags=0x%llx, mem_id_addr=0x%x)", - size, cid, flags, mem_id.GetAddr()); - - if(!mem_id.IsGood()) - return CELL_EFAULT; - - // Check if this container ID is valid. - MemoryContainerInfo* ct; - if(!sc_mem.CheckId(cid, ct)) - return CELL_ESRCH; - - // Check page granularity. - switch(flags & (SYS_MEMORY_PAGE_SIZE_1M | SYS_MEMORY_PAGE_SIZE_64K)) - { - case SYS_MEMORY_PAGE_SIZE_1M: - if(size & 0xfffff) - return CELL_EALIGN; - ct->addr = Memory.Alloc(size, 0x100000); - break; - - case SYS_MEMORY_PAGE_SIZE_64K: - if(size & 0xffff) - return CELL_EALIGN; - ct->addr = Memory.Alloc(size, 0x10000); - break; - - default: - return CELL_EINVAL; - } - - if(!ct->addr) - return CELL_ENOMEM; - ct->size = size; - - // Generate a new mem ID. - mem_id = sc_mem.GetNewId(new mmapper_info(ct->addr, ct->size, flags)); - - return CELL_OK; -} - -int sys_mmapper_change_address_access_right(u32 start_addr, u64 flags) -{ - sc_mem.Warning("sys_mmapper_change_address_access_right(start_addr=0x%x, flags=0x%llx)", start_addr, flags); - - if (!Memory.IsGoodAddr(start_addr)) - return CELL_EINVAL; - - // TODO - - return CELL_OK; -} - -int sys_mmapper_free_address(u32 start_addr) -{ - sc_mem.Warning("sys_mmapper_free_address(start_addr=0x%x)", start_addr); - - if(!Memory.IsGoodAddr(start_addr)) - return CELL_EINVAL; - - // Free the address. - Memory.Free(start_addr); - return CELL_OK; -} - -int sys_mmapper_free_memory(u32 mem_id) -{ - sc_mem.Warning("sys_mmapper_free_memory(mem_id=0x%x)", mem_id); - - // Check if this mem ID is valid. - mmapper_info* info; - if(!sc_mem.CheckId(mem_id, info)) - return CELL_ESRCH; - - // Release the allocated memory and remove the ID. - Memory.Free(info->addr); - Emu.GetIdManager().RemoveID(mem_id); - - return CELL_OK; -} - -int sys_mmapper_map_memory(u32 start_addr, u32 mem_id, u64 flags) -{ - sc_mem.Warning("sys_mmapper_map_memory(start_addr=0x%x, mem_id=0x%x, flags=0x%llx)", start_addr, mem_id, flags); - - // Check if this mem ID is valid. - mmapper_info* info; - if(!sc_mem.CheckId(mem_id, info)) - return CELL_ESRCH; - - // Map the memory into the process address. - if(!Memory.Map(start_addr, info->addr, info->size)) - sc_mem.Error("sys_mmapper_map_memory failed!"); - - // Keep track of mapped addresses. - mmapper_info_map[mem_id] = start_addr; - - return CELL_OK; -} - -int sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, u32 alloc_addr) -{ - sc_mem.Warning("sys_mmapper_search_and_map(start_addr=0x%x, mem_id=0x%x, flags=0x%llx, alloc_addr=0x%x)", - start_addr, mem_id, flags, alloc_addr); - - if(!Memory.IsGoodAddr(alloc_addr)) - return CELL_EFAULT; - - // Check if this mem ID is valid. - mmapper_info* info; - if(!sc_mem.CheckId(mem_id, info)) - return CELL_ESRCH; - - // Search for a mappable address. - u32 addr; - bool found; - for (int i = 0; i < SYS_MMAPPER_FIXED_SIZE; i += 0x100000) - { - addr = start_addr + i; - found = Memory.Map(addr, info->addr, info->size); - if(found) - { - sc_mem.Warning("Found and mapped address 0x%x", addr); - break; - } - } - - // Check if the address is valid. - if (!Memory.IsGoodAddr(addr) || !found) - return CELL_ENOMEM; - - // Write back the start address of the allocated area. - Memory.Write32(alloc_addr, addr); - - // Keep track of mapped addresses. - mmapper_info_map[mem_id] = addr; - - return CELL_OK; -} - -int sys_mmapper_unmap_memory(u32 start_addr, u32 mem_id_addr) -{ - sc_mem.Warning("sys_mmapper_unmap_memory(start_addr=0x%x, mem_id_addr=0x%x)", start_addr, mem_id_addr); - - if (!Memory.IsGoodAddr(start_addr)) - return CELL_EINVAL; - - if (!Memory.IsGoodAddr(mem_id_addr)) - return CELL_EFAULT; - - // Write back the mem ID of the unmapped area. - u32 mem_id = mmapper_info_map.find(start_addr)->first; - Memory.Write32(mem_id_addr, mem_id); - - return CELL_OK; -} - -int sys_mmapper_enable_page_fault_notification(u32 start_addr, u32 q_id) -{ - sc_mem.Warning("sys_mmapper_enable_page_fault_notification(start_addr=0x%x, q_id=0x%x)", start_addr, q_id); - - if (!Memory.IsGoodAddr(start_addr)) - return CELL_EINVAL; - - // TODO - - return CELL_OK; -} diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index f49afa78dd..3ecaa3295d 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -6,7 +6,7 @@ #include "Emu/SysCalls/SysCalls.h" #include "Emu/Cell/SPUThread.h" -#include "Emu/event.h" +#include "Emu/Event.h" #include "sys_lwmutex.h" #include "sys_event.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.h b/rpcs3/Emu/SysCalls/lv2/sys_event.h index 000775900f..e823c7832b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.h @@ -1,5 +1,5 @@ #pragma once -#include "Emu/event.h" +#include "Emu/Event.h" enum { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index cb94b404e6..276c5a6474 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -3,7 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/event.h" +#include "Emu/Event.h" #include "sys_timer.h" SysCallBase sys_timer("sys_timer"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp index de64701a6d..630f00a959 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp @@ -7,7 +7,7 @@ s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) { - //we currently do not support reading from the Console + // We currently do not support reading from the Console LOG_WARNING(HLE, "sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); Memory.Write32NN(preadlen_addr, len); Emu.Pause(); @@ -20,15 +20,12 @@ s32 sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) if(ch > 15 || (s32)len <= 0) return CELL_EINVAL; if(!Memory.IsGoodAddr(buf_addr)) return CELL_EFAULT; - //ch 0 seems to be stdout and ch 1 stderr - if (ch == 1) - { - LOG_ERROR(TTY, Memory.ReadString(buf_addr, len)); - } - else - { + if (ch == SYS_TTYP_PPU_STDOUT || ch == SYS_TTYP_SPU_STDOUT || (ch >= SYS_TTYP_USER1 && ch <= SYS_TTYP_USER13)) { LOG_NOTICE(TTY, Memory.ReadString(buf_addr, len)); } + if (ch == SYS_TTYP_PPU_STDERR) { + LOG_ERROR(TTY, Memory.ReadString(buf_addr, len)); + } if(!Memory.IsGoodAddr(pwritelen_addr)) return CELL_EFAULT; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_tty.h b/rpcs3/Emu/SysCalls/lv2/sys_tty.h index b65e72ea90..47a6e8a930 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_tty.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_tty.h @@ -1,4 +1,27 @@ #pragma once +// TTY channels +enum +{ + SYS_TTYP_PPU_STDIN = 0, + SYS_TTYP_PPU_STDOUT = 0, + SYS_TTYP_PPU_STDERR = 1, + SYS_TTYP_SPU_STDOUT = 2, + SYS_TTYP_USER1 = 3, + SYS_TTYP_USER2 = 4, + SYS_TTYP_USER3 = 5, + SYS_TTYP_USER4 = 6, + SYS_TTYP_USER5 = 7, + SYS_TTYP_USER6 = 8, + SYS_TTYP_USER7 = 9, + SYS_TTYP_USER8 = 10, + SYS_TTYP_USER9 = 11, + SYS_TTYP_USER10 = 12, + SYS_TTYP_USER11 = 13, + SYS_TTYP_USER12 = 14, + SYS_TTYP_USER13 = 15, +}; + +// SysCalls s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr); s32 sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr); From ad83fb325cf56e996392094e085c4f446af42b88 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sun, 6 Jul 2014 19:40:51 +0200 Subject: [PATCH 119/499] fix compile error on the Debug - Memleak config --- rpcs3.sln | 1 + rpcs3/rpcs3.vcxproj | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3.sln b/rpcs3.sln index b01864e15a..24c63c95cf 100644 --- a/rpcs3.sln +++ b/rpcs3.sln @@ -286,6 +286,7 @@ Global {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|x64.ActiveCfg = Release|x64 {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|x64.Build.0 = Release|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug - MemLeak|x64.ActiveCfg = Debug|x64 + {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug - MemLeak|x64.Build.0 = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug|x64.ActiveCfg = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug|x64.Build.0 = Debug|x64 {AC40FF01-426E-4838-A317-66354CEFAE88}.Release|x64.ActiveCfg = Release|x64 diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index a791fc8435..3704dc87f2 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -62,7 +62,7 @@ .\;..\wxWidgets\include;..\SDL-1.3.0-5538\include;..\SDL_image-1.2.10;..\pthreads-2.8.0;..\;..\ffmpeg\WindowsInclude;..\ffmpeg\Windows\x86_64\Include;.\OpenAL\include;$(IncludePath) $(SolutionDir)bin\ - ..\libs\$(Configuration)\;$(LibraryPath) + ..\libs\Debug\;$(LibraryPath) $(ProjectName)-$(PlatformShortName)-dbg From d751e350c686c8aaa78cfd89f4f128e54b09cfca Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 7 Jul 2014 02:26:05 +0800 Subject: [PATCH 120/499] cellPamf : add error log for CELL_PAMF_ERROR_INVALID_ARG --- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 155 +++++++++++++++++------- 1 file changed, 111 insertions(+), 44 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index c1b3b3d21e..ccda72ca4a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -92,8 +92,7 @@ u8 pamfGetStreamType(mem_ptr_t pSelf, u8 stream) case 0x80: return CELL_PAMF_STREAM_TYPE_PAMF_LPCM; case 0xdd: return CELL_PAMF_STREAM_TYPE_USER_DATA; default: - cellPamf->Error("pamfGetStreamType: (TODO) unsupported stream type found(0x%x)", - pAddr->stream_headers[stream].type); + cellPamf->Error("*** TODO: pamfGetStreamType: unsupported stream type found(0x%x)", pAddr->stream_headers[stream].type); return 0; } } @@ -103,23 +102,43 @@ u8 pamfGetStreamChannel(mem_ptr_t pSelf, u8 stream) //TODO: get stream channel correctly const mem_ptr_t pAddr(pSelf->pAddr); - if ((pAddr->stream_headers[stream].type == 0x1b) && - (pAddr->stream_headers[stream].stream_id >= 0xe0) && - (pAddr->stream_headers[stream].stream_id <= 0xef)) + switch (pAddr->stream_headers[stream].type) { - return pAddr->stream_headers[stream].stream_id - 0xe0; + case 0x1b: + if ((pAddr->stream_headers[stream].stream_id >= 0xe0) && (pAddr->stream_headers[stream].stream_id <= 0xef)) + { + return pAddr->stream_headers[stream].stream_id - 0xe0; + } + else + { + cellPamf->Error("pamfGetStreamChannel: stream type %x got invalid stream id=%x", pAddr->stream_headers[stream].type, pAddr->stream_headers[stream].stream_id); + return 0; + } + case 0xdc: + cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS"); + return 0; + case 0x80: + cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_PAMF_LPCM"); + return 0; + case 0xdd: + cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_USER_DATA"); + return 0; + default: + cellPamf->Error("*** TODO: pamfGetStreamType: unsupported stream type found(0x%x)", pAddr->stream_headers[stream].type); + return 0; } - cellPamf->Error("TODO: pamfGetStreamChannel (-> 0)"); - return 0; + } int cellPamfGetHeaderSize(mem_ptr_t pAddr, u64 fileSize, mem64_t pSize) { - cellPamf->Warning("cellPamfGetHeaderSize(pAddr=0x%x, fileSize=%d, pSize_addr=0x%x)", - pAddr.GetAddr(), fileSize, pSize.GetAddr()); + cellPamf->Warning("cellPamfGetHeaderSize(pAddr=0x%x, fileSize=%d, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, pSize.GetAddr()); if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pSize.IsGood()) + { + cellPamf->Error("cellPamfGetHeaderSize: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } //if ((u32)pAddr->magic != 0x464d4150) //return CELL_PAMF_ERROR_UNKNOWN_TYPE; @@ -131,11 +150,13 @@ int cellPamfGetHeaderSize(mem_ptr_t pAddr, u64 fileSize, mem64_t pSi int cellPamfGetHeaderSize2(mem_ptr_t pAddr, u64 fileSize, u32 attribute, mem64_t pSize) { - cellPamf->Warning("cellPamfGetHeaderSize2(pAddr=0x%x, fileSize=%d, attribute=0x%x, pSize_addr=0x%x)", - pAddr.GetAddr(), fileSize, attribute, pSize.GetAddr()); + cellPamf->Warning("cellPamfGetHeaderSize2(pAddr=0x%x, fileSize=%d, attribute=0x%x, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, attribute, pSize.GetAddr()); if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pSize.IsGood()) + { + cellPamf->Error("cellPamfGetHeaderSize2: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } //if ((u32)pAddr->magic != 0x464d4150) //return CELL_PAMF_ERROR_UNKNOWN_TYPE; @@ -147,11 +168,13 @@ int cellPamfGetHeaderSize2(mem_ptr_t pAddr, u64 fileSize, u32 attrib int cellPamfGetStreamOffsetAndSize(mem_ptr_t pAddr, u64 fileSize, mem64_t pOffset, mem64_t pSize) { - cellPamf->Warning("cellPamfGetStreamOffsetAndSize(pAddr=0x%x, fileSize=%d, pOffset_addr=0x%x, pSize_addr=0x%x)", - pAddr.GetAddr(), fileSize, pOffset.GetAddr(), pSize.GetAddr()); + cellPamf->Warning("cellPamfGetStreamOffsetAndSize(pAddr=0x%x, fileSize=%d, pOffset_addr=0x%x, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, pOffset.GetAddr(), pSize.GetAddr()); if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pOffset.IsGood() || !pSize.IsGood()) + { + cellPamf->Error("cellPamfGetStreamOffsetAndSize: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } //if ((u32)pAddr->magic != 0x464d4150) //return CELL_PAMF_ERROR_UNKNOWN_TYPE; @@ -168,19 +191,25 @@ int cellPamfVerify(mem_ptr_t pAddr, u64 fileSize) cellPamf->Warning("cellPamfVerify(pAddr=0x%x, fileSize=%d)", pAddr.GetAddr(), fileSize); if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048)) + { + cellPamf->Error("cellPamfVerify: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } return CELL_OK; } int cellPamfReaderInitialize(mem_ptr_t pSelf, mem_ptr_t pAddr, u64 fileSize, u32 attribute) { - cellPamf->Warning("cellPamfReaderInitialize(pSelf=0x%x, pAddr=0x%x, fileSize=%d, attribute=0x%x)", - pSelf.GetAddr(), pAddr.GetAddr(), fileSize, attribute); + cellPamf->Warning("cellPamfReaderInitialize(pSelf=0x%x, pAddr=0x%x, fileSize=%d, attribute=0x%x)", pSelf.GetAddr(), pAddr.GetAddr(), fileSize, attribute); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pAddr.GetAddr(), 2048)) + { + cellPamf->Error("cellPamfReaderInitialize: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } + if (fileSize) { pSelf->fileSize = fileSize; @@ -202,11 +231,13 @@ int cellPamfReaderInitialize(mem_ptr_t pSelf, mem_ptr_t pSelf, mem_ptr_t pTimeStamp) { - cellPamf->Warning("cellPamfReaderGetPresentationStartTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", - pSelf.GetAddr(), pTimeStamp.GetAddr()); + cellPamf->Warning("cellPamfReaderGetPresentationStartTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderGetPresentationStartTime: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); const u32 upper = (u16)pAddr->start_pts_high; @@ -217,11 +248,13 @@ int cellPamfReaderGetPresentationStartTime(mem_ptr_t pSelf, mem_ int cellPamfReaderGetPresentationEndTime(mem_ptr_t pSelf, mem_ptr_t pTimeStamp) { - cellPamf->Warning("cellPamfReaderGetPresentationEndTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", - pSelf.GetAddr(), pTimeStamp.GetAddr()); + cellPamf->Warning("cellPamfReaderGetPresentationEndTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderGetPresentationEndTime: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); const u32 upper = (u16)pAddr->end_pts_high; @@ -235,7 +268,10 @@ int cellPamfReaderGetMuxRateBound(mem_ptr_t pSelf) cellPamf->Warning("cellPamfReaderGetMuxRateBound(pSelf=0x%x)", pSelf.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderGetMuxRateBound: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); return pAddr->mux_rate_max; @@ -246,7 +282,10 @@ int cellPamfReaderGetNumberOfStreams(mem_ptr_t pSelf) cellPamf->Warning("cellPamfReaderGetNumberOfStreams(pSelf=0x%x)", pSelf.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderGetNumberOfStreams: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); return pAddr->stream_count; @@ -254,11 +293,13 @@ int cellPamfReaderGetNumberOfStreams(mem_ptr_t pSelf) int cellPamfReaderGetNumberOfSpecificStreams(mem_ptr_t pSelf, u8 streamType) { - cellPamf->Warning("cellPamfReaderGetNumberOfSpecificStreams(pSelf=0x%x, streamType=%d)", - pSelf.GetAddr(), streamType); + cellPamf->Warning("cellPamfReaderGetNumberOfSpecificStreams(pSelf=0x%x, streamType=%d)", pSelf.GetAddr(), streamType); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderGetNumberOfSpecificStreams: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); @@ -281,8 +322,7 @@ int cellPamfReaderGetNumberOfSpecificStreams(mem_ptr_t pSelf, u8 case CELL_PAMF_STREAM_TYPE_VIDEO: return counts[CELL_PAMF_STREAM_TYPE_AVC] + counts[CELL_PAMF_STREAM_TYPE_M2V]; case CELL_PAMF_STREAM_TYPE_AUDIO: - return counts[CELL_PAMF_STREAM_TYPE_ATRAC3PLUS] + - counts[CELL_PAMF_STREAM_TYPE_PAMF_LPCM] + counts[CELL_PAMF_STREAM_TYPE_AC3]; + return counts[CELL_PAMF_STREAM_TYPE_ATRAC3PLUS] + counts[CELL_PAMF_STREAM_TYPE_PAMF_LPCM] + counts[CELL_PAMF_STREAM_TYPE_AC3]; default: return 0; } @@ -290,11 +330,13 @@ int cellPamfReaderGetNumberOfSpecificStreams(mem_ptr_t pSelf, u8 int cellPamfReaderSetStreamWithIndex(mem_ptr_t pSelf, u8 streamIndex) { - cellPamf->Warning("cellPamfReaderSetStreamWithIndex(pSelf=0x%x, streamIndex=%d)", - pSelf.GetAddr(), streamIndex); + cellPamf->Warning("cellPamfReaderSetStreamWithIndex(pSelf=0x%x, streamIndex=%d)", pSelf.GetAddr(), streamIndex); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderSetStreamWithIndex: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); @@ -305,17 +347,20 @@ int cellPamfReaderSetStreamWithIndex(mem_ptr_t pSelf, u8 streamI } else { + cellPamf->Error("cellPamfReaderSetStreamWithIndex: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; } } int cellPamfReaderSetStreamWithTypeAndChannel(mem_ptr_t pSelf, u8 streamType, u8 ch) { - cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndChannel(pSelf=0x%x, streamType=%d, ch=%d)", - pSelf.GetAddr(), streamType, ch); + cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndChannel(pSelf=0x%x, streamType=%d, ch=%d)", pSelf.GetAddr(), streamType, ch); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderSetStreamWithTypeAndChannel: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); @@ -343,11 +388,13 @@ int cellPamfReaderSetStreamWithTypeAndChannel(mem_ptr_t pSelf, u int cellPamfReaderSetStreamWithTypeAndIndex(mem_ptr_t pSelf, u8 streamType, u8 streamIndex) { - cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndIndex(pSelf=0x%x, streamType=%d, streamIndex=%d)", - pSelf.GetAddr(), streamType, streamIndex); + cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndIndex(pSelf=0x%x, streamType=%d, streamIndex=%d)", pSelf.GetAddr(), streamType, streamIndex); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderSetStreamWithTypeAndIndex: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); @@ -394,11 +441,13 @@ int cellPamfReaderSetStreamWithTypeAndIndex(mem_ptr_t pSelf, u8 int cellPamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pEsFilterId) { - cellPamf->Warning("cellPamfStreamTypeToEsFilterId(type=%d, ch=%d, pEsFilterId_addr=0x%x)", - type, ch, pEsFilterId.GetAddr()); + cellPamf->Warning("cellPamfStreamTypeToEsFilterId(type=%d, ch=%d, pEsFilterId_addr=0x%x)", type, ch, pEsFilterId.GetAddr()); if (!pEsFilterId.IsGood()) + { + cellPamf->Error("cellPamfStreamTypeToEsFilterId: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } return pamfStreamTypeToEsFilterId(type, ch, pEsFilterId); } @@ -408,18 +457,23 @@ int cellPamfReaderGetStreamIndex(mem_ptr_t pSelf) cellPamf->Log("cellPamfReaderGetStreamIndex(pSelf=0x%x)", pSelf.GetAddr()); if (!pSelf.IsGood()) + { + cellPamf->Error("cellPamfReaderGetStreamIndex: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } return pSelf->stream; } int cellPamfReaderGetStreamTypeAndChannel(mem_ptr_t pSelf, mem8_t pType, mem8_t pCh) { - cellPamf->Warning("cellPamfReaderGetStreamTypeAndChannel(pSelf=0x%x (stream=%d), pType_addr=0x%x, pCh_addr=0x%x", - pSelf.GetAddr(), pSelf->stream, pType.GetAddr(), pCh.GetAddr()); + cellPamf->Warning("cellPamfReaderGetStreamTypeAndChannel(pSelf=0x%x (stream=%d), pType_addr=0x%x, pCh_addr=0x%x", pSelf.GetAddr(), pSelf->stream, pType.GetAddr(), pCh.GetAddr()); if (!pSelf.IsGood() || !pCh.IsGood()) + { + cellPamf->Error("cellPamfReaderGetStreamTypeAndChannel: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } pType = pamfGetStreamType(pSelf, pSelf->stream); pCh = pamfGetStreamChannel(pSelf, pSelf->stream); @@ -428,11 +482,13 @@ int cellPamfReaderGetStreamTypeAndChannel(mem_ptr_t pSelf, mem8_ int cellPamfReaderGetEsFilterId(mem_ptr_t pSelf, mem_ptr_t pEsFilterId) { - cellPamf->Warning("cellPamfReaderGetEsFilterId(pSelf=0x%x (stream=%d), pEsFilterId_addr=0x%x)", - pSelf.GetAddr(), pSelf->stream, pEsFilterId.GetAddr()); + cellPamf->Warning("cellPamfReaderGetEsFilterId(pSelf=0x%x (stream=%d), pEsFilterId_addr=0x%x)", pSelf.GetAddr(), pSelf->stream, pEsFilterId.GetAddr()); if (!pSelf.IsGood() || !pEsFilterId.IsGood()) + { + cellPamf->Error("cellPamfReaderGetEsFilterId: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } return pamfStreamTypeToEsFilterId(pamfGetStreamType(pSelf, pSelf->stream), pamfGetStreamChannel(pSelf, pSelf->stream), pEsFilterId); @@ -440,11 +496,13 @@ int cellPamfReaderGetEsFilterId(mem_ptr_t pSelf, mem_ptr_t pSelf, u32 pInfo_addr, u32 size) { - cellPamf->Warning("cellPamfReaderGetStreamInfo(pSelf=0x%x (stream=%d), pInfo_addr=0x%x, size=%d)", - pSelf.GetAddr(), pSelf->stream, pInfo_addr, size); + cellPamf->Warning("cellPamfReaderGetStreamInfo(pSelf=0x%x, stream=%d, pInfo_addr=0x%x, size=%d)", pSelf.GetAddr(), pSelf->stream, pInfo_addr, size); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderGetStreamInfo: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); @@ -551,11 +609,13 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, int cellPamfReaderGetNumberOfEp(mem_ptr_t pSelf) { - cellPamf->Warning("cellPamfReaderGetNumberOfEp(pSelf=0x%x (stream=%d))", - pSelf.GetAddr(), pSelf->stream); + cellPamf->Warning("cellPamfReaderGetNumberOfEp(pSelf=0x%x, stream=%d)", pSelf.GetAddr(), pSelf->stream); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderGetNumberOfEp: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); return pAddr->stream_headers[pSelf->stream].ep_num; @@ -563,11 +623,13 @@ int cellPamfReaderGetNumberOfEp(mem_ptr_t pSelf) int cellPamfReaderGetEpIteratorWithIndex(mem_ptr_t pSelf, u32 epIndex, mem_ptr_t pIt) { - cellPamf->Error("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x (stream=%d), epIndex=%d, pIt_addr=0x%x)", - pSelf.GetAddr(), pSelf->stream, epIndex, pIt.GetAddr()); + cellPamf->Error("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x, stream=%d, epIndex=%d, pIt_addr=0x%x)", pSelf.GetAddr(), pSelf->stream, epIndex, pIt.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) + { + cellPamf->Error("cellPamfReaderGetEpIteratorWithIndex: CELL_PAMF_ERROR_INVALID_ARG"); return CELL_PAMF_ERROR_INVALID_ARG; + } const mem_ptr_t pAddr(pSelf->pAddr); //TODO: @@ -576,25 +638,30 @@ int cellPamfReaderGetEpIteratorWithIndex(mem_ptr_t pSelf, u32 ep int cellPamfReaderGetEpIteratorWithTimeStamp(mem_ptr_t pSelf, mem_ptr_t pTimeStamp, mem_ptr_t pIt) { - cellPamf->Error("cellPamfReaderGetEpIteratorWithTimeStamp(pSelf=0x%x, pTimeStamp_addr=0x%x, pIt_addr=0x%x)", - pSelf.GetAddr(), pTimeStamp.GetAddr(), pIt.GetAddr()); + cellPamf->Error("cellPamfReaderGetEpIteratorWithTimeStamp(pSelf=0x%x, pTimeStamp_addr=0x%x, pIt_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr(), pIt.GetAddr()); const mem_ptr_t pAddr(pSelf->pAddr); + //TODO: + return CELL_OK; } int cellPamfEpIteratorGetEp(mem_ptr_t pIt, mem_ptr_t pEp) { cellPamf->Error("cellPamfEpIteratorGetEp(pIt_addr=0x%x, pEp_addr=0x%x)", pIt.GetAddr(), pEp.GetAddr()); + //TODO: + return CELL_OK; } int cellPamfEpIteratorMove(mem_ptr_t pIt, s32 steps, mem_ptr_t pEp) { cellPamf->Error("cellPamfEpIteratorMove(pIt_addr=0x%x, steps=%d, pEp_addr=0x%x)", pIt.GetAddr(), steps, pEp.GetAddr()); + //TODO: + return CELL_OK; } From 19db12e090021bc75d44a3453e399b3dba973c71 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 7 Jul 2014 03:36:07 +0400 Subject: [PATCH 121/499] Memory allocation changes --- Utilities/BEType.h | 1 + rpcs3/Emu/GS/RSXThread.cpp | 12 ++++--- rpcs3/Emu/Memory/Memory.cpp | 30 +++++++++++----- rpcs3/Emu/Memory/Memory.h | 66 ++++++++++++++++++++++++++++------ rpcs3/Emu/Memory/MemoryBlock.h | 20 ++++++++--- 5 files changed, 102 insertions(+), 27 deletions(-) diff --git a/Utilities/BEType.h b/Utilities/BEType.h index cecb4cd3a6..65fe524f89 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -11,6 +11,7 @@ using std::max; #define re64(val) MemoryBase::Reverse64(val) #define re32(val) MemoryBase::Reverse32(val) #define re16(val) MemoryBase::Reverse16(val) +#define re128(val) MemoryBase::Reverse128(val) template struct se_t; template struct se_t { static __forceinline void func(T& dst, const T src) { (u8&)dst = (u8&)src; } }; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index a20fa52c21..403ae4b0f4 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -5,7 +5,8 @@ #include "RSXThread.h" #include "Emu/SysCalls/lv2/sys_time.h" -#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count) : Memory.Read32(Memory.RSXIOMem.GetStartAddr() + m_ctrl->get + (4*(x+1)))) +//#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count) : Memory.Read32(Memory.RSXIOMem.GetStartAddr() + m_ctrl->get + (4*(x+1)))) +#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count) : Memory.Read32(Memory.RSXIOMem.RealAddr(Memory.RSXIOMem.GetStartAddr() + m_ctrl->get + (4*(x+1))))) u32 methodRegisters[0xffff]; @@ -2474,7 +2475,9 @@ void RSXThread::Task() } //ConLog.Write("addr = 0x%x", m_ioAddress + get); - const u32 cmd = Memory.Read32(Memory.RSXIOMem.GetStartAddr() + get); + u64 realAddr; + Memory.RSXIOMem.getRealAddr(Memory.RSXIOMem.GetStartAddr() + get, realAddr); + const u32 cmd = Memory.Read32(realAddr); const u32 count = (cmd >> 18) & 0x7ff; //if(cmd == 0) continue; @@ -2489,7 +2492,6 @@ void RSXThread::Task() { m_call_stack.push(get + 4); u32 offs = cmd & ~CELL_GCM_METHOD_FLAG_CALL; - u32 addr = Memory.RSXIOMem.GetStartAddr() + offs; //LOG_WARNING(RSX, "rsx call(0x%x) #0x%x - 0x%x - 0x%x", offs, addr, cmd, get); m_ctrl->get = offs; continue; @@ -2499,6 +2501,7 @@ void RSXThread::Task() //LOG_WARNING(RSX, "rsx return!"); u32 get = m_call_stack.top(); m_call_stack.pop(); + u32 addr = Memory.RSXIOMem.GetStartAddr() + offs; //LOG_WARNING(RSX, "rsx return(0x%x)", get); m_ctrl->get = get; continue; @@ -2523,7 +2526,8 @@ void RSXThread::Task() methodRegisters[(cmd & 0xffff) + (i*4*inc)] = ARGS(i); } - mem32_ptr_t args(Memory.RSXIOMem.GetStartAddr() + get + 4); + Memory.RSXIOMem.getRealAddr(Memory.RSXIOMem.GetStartAddr() + get + 4, realAddr); + mem32_ptr_t args((u32)realAddr); DoCmd(cmd, cmd & 0x3ffff, args, count); m_ctrl->get = get + (count + 1) * 4; diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 9f70616622..293a4f6234 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -31,14 +31,17 @@ void MemoryBlock::InitMemory() { if(!range_size) return; - if(mem) safe_free(mem); - mem = (u8*)malloc(range_size); + //if(mem) safe_free(mem); + if (mem) VirtualFree(mem, range_size, MEM_DECOMMIT); + //mem = (u8*)malloc(range_size); + mem = (u8*)VirtualAlloc((void*)((u64)Memory.GetBaseAddr() + range_start), range_size, MEM_COMMIT, PAGE_READWRITE); memset(mem, 0, range_size); } void MemoryBlock::Delete() { - if(mem) safe_free(mem); + //if(mem) safe_free(mem); + if (mem) VirtualFree(mem, range_size, MEM_DECOMMIT); Init(); } @@ -412,27 +415,38 @@ bool NullMemoryBlock::Write128(const u64 addr, const u128 value) //MemoryBase void MemoryBase::Write8(u64 addr, const u8 data) { - GetMemByAddr(addr).Write8(addr, data); + //GetMemByAddr(addr).Write8(addr, data); + *(u8*)((u64)GetBaseAddr() + addr) = data; } void MemoryBase::Write16(u64 addr, const u16 data) { - GetMemByAddr(addr).Write16(addr, data); + //GetMemByAddr(addr).Write16(addr, data); + *(u16*)((u64)GetBaseAddr() + addr) = re16(data); } void MemoryBase::Write32(u64 addr, const u32 data) { - GetMemByAddr(addr).Write32(addr, data); + if (addr < 0xE0000000 || (addr % 0x100000) < 0x40000) + { + *(u32*)((u64)GetBaseAddr() + addr) = re32(data); + } + else + { + GetMemByAddr(addr).Write32(addr, data); + } } void MemoryBase::Write64(u64 addr, const u64 data) { - GetMemByAddr(addr).Write64(addr, data); + //GetMemByAddr(addr).Write64(addr, data); + *(u64*)((u64)GetBaseAddr() + addr) = re64(data); } void MemoryBase::Write128(u64 addr, const u128 data) { - GetMemByAddr(addr).Write128(addr, data); + //GetMemByAddr(addr).Write128(addr, data); + *(u128*)((u64)GetBaseAddr() + addr) = re128(data); } bool MemoryBase::Write8NN(u64 addr, const u8 data) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 3a51f61b15..13808fdffb 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -15,6 +15,7 @@ enum MemoryType class MemoryBase { NullMemoryBlock NullMem; + void* m_base_addr; public: std::vector MemoryBlocks; @@ -57,6 +58,11 @@ public: Close(); } + void* GetBaseAddr() const + { + return m_base_addr; + } + static __forceinline u16 Reverse16(const u16 val) { return _byteswap_ushort(val); @@ -91,6 +97,14 @@ public: */ } + static __forceinline u128 Reverse128(const u128 val) + { + u128 ret; + ret.lo = re64(val.hi); + ret.hi = re64(val.lo); + return ret; + } + template static __forceinline u64 ReverseData(u64 val); template static __forceinline T Reverse(T val) @@ -117,28 +131,40 @@ public: bool Read8ByAddr(const u64 addr, u8 *value) { - for (auto block : MemoryBlocks) + *value = *(u8*)((u64)GetBaseAddr() + addr); + return true; + + /*for (auto block : MemoryBlocks) { if (block->Read8(addr, value)) return true; } - return NullMem.Read8(addr, value); + return NullMem.Read8(addr, value);*/ } bool Read16ByAddr(const u64 addr, u16 *value) { - for (auto block : MemoryBlocks) + *value = re16(*(u16*)((u64)GetBaseAddr() + addr)); + return true; + + /*for (auto block : MemoryBlocks) { if (block->Read16(addr, value)) return true; } - return NullMem.Read16(addr, value); + return NullMem.Read16(addr, value);*/ } bool Read32ByAddr(const u64 addr, u32 *value) { + if (addr < 0xE0000000 || (addr % 0x100000) < 0x40000) + { + *value = re32(*(u32*)((u64)GetBaseAddr() + addr)); + return true; + } + for (auto block : MemoryBlocks) { if (block->Read32(addr, value)) @@ -150,29 +176,36 @@ public: bool Read64ByAddr(const u64 addr, u64 *value) { - for (auto block : MemoryBlocks) + *value = re64(*(u64*)((u64)GetBaseAddr() + addr)); + return true; + + /*for (auto block : MemoryBlocks) { if (block->Read64(addr, value)) return true; } - return NullMem.Read64(addr, value); + return NullMem.Read64(addr, value);*/ } bool Read128ByAddr(const u64 addr, u128 *value) { - for (auto block : MemoryBlocks) + *value = re128(*(u128*)((u64)GetBaseAddr() + addr)); + return true; + + /*for (auto block : MemoryBlocks) { if (block->Read128(addr, value)) return true; } - return NullMem.Read128(addr, value); + return NullMem.Read128(addr, value);*/ } u8* GetMemFromAddr(const u64 addr) { - return GetMemByAddr(addr).GetMemFromAddr(addr); + //return GetMemByAddr(addr).GetMemFromAddr(addr); + return (u8*)GetBaseAddr() + addr; } void* VirtualToRealAddr(const u64 vaddr) @@ -211,7 +244,15 @@ public: if(m_inited) return; m_inited = true; - LOG_NOTICE(MEMORY, "Initing memory..."); + m_base_addr = VirtualAlloc(0, 0x100000000, MEM_RESERVE, PAGE_NOACCESS); + if (!m_base_addr) + { + LOG_ERROR(MEMORY, "Initing memory: VirtualAlloc() failed"); + } + else + { + LOG_NOTICE(MEMORY, "Initing memory: m_base_addr = 0x%llx", (u64)m_base_addr); + } switch(type) { @@ -279,6 +320,11 @@ public: } MemoryBlocks.clear(); + + if (!VirtualFree(m_base_addr, 0, MEM_RELEASE)) + { + LOG_ERROR(MEMORY, "VirtualFree(0x%llx) failed", (u64)m_base_addr); + } } void Write8(const u64 addr, const u8 data); diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index e9a6e7c1d1..2e8173b3b0 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -22,13 +22,14 @@ struct MemBlockInfo : public MemInfo { void *mem; - MemBlockInfo(u64 _addr, u32 _size) + MemBlockInfo(u64 _addr, u32 _size, void* base_addr) : MemInfo(_addr, PAGE_4K(_size)) - , mem(_aligned_malloc(PAGE_4K(_size), 128)) + //, mem(_aligned_malloc(PAGE_4K(_size), 128)) + , mem(VirtualAlloc((void*)((u64)base_addr + _addr), PAGE_4K(_size), MEM_COMMIT, PAGE_READWRITE)) { if(!mem) { - LOG_ERROR(MEMORY, "Not enough free memory."); + LOG_ERROR(MEMORY, "Out of memory or VirtualAlloc() failed (_addr=0x%llx, _size=0x%llx)", _addr, _size); assert(0); } memset(mem, 0, size); @@ -43,7 +44,8 @@ struct MemBlockInfo : public MemInfo MemBlockInfo& operator =(MemBlockInfo &&other){ this->addr = other.addr; this->size = other.size; - if (this->mem) _aligned_free(mem); + //if (this->mem) _aligned_free(mem); + if (this->mem) VirtualFree(this->mem, this->size, MEM_DECOMMIT); this->mem = other.mem; other.mem = nullptr; return *this; @@ -51,7 +53,8 @@ struct MemBlockInfo : public MemInfo ~MemBlockInfo() { - if(mem) _aligned_free(mem); + //if(mem) _aligned_free(mem); + if (mem) VirtualFree(mem, size, MEM_DECOMMIT); mem = nullptr; } }; @@ -285,6 +288,13 @@ public: // return true for success bool getRealAddr(u64 addr, u64& result); + u64 RealAddr(u64 addr) + { + u64 realAddr = 0; + getRealAddr(addr, realAddr); + return realAddr; + } + // return the mapped address given a real address, if not mapped return 0 u64 getMappedAddress(u64 realAddress); }; From 8a305b19af40e7d4dceafa1976e341959a8044be Mon Sep 17 00:00:00 2001 From: SiPlus Date: Mon, 7 Jul 2014 10:53:47 +0400 Subject: [PATCH 122/499] Change vec2(float, 0.0).xxxx to vec4(float) in VS --- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index fc9a3289b9..cc6f14312e 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -522,10 +522,10 @@ void GLVertexDecompilerThread::Task() case 0x02: SetDSTVec("($0 * $1)"); break; //MUL case 0x03: SetDSTVec("($0 + $2)"); break; //ADD case 0x04: SetDSTVec("($0 * $1 + $2)"); break; //MAD - case 0x05: SetDSTVec("vec2(dot($0.xyz, $1.xyz), 0.0).xxxx"); break; //DP3 - case 0x06: SetDSTVec("vec2(dot(vec4($0.xyz, 1.0), $1), 0.0).xxxx"); break; //DPH - case 0x07: SetDSTVec("vec2(dot($0, $1), 0.0).xxxx"); break; //DP4 - case 0x08: SetDSTVec("vec2(distance($0, $1), 0.0).xxxx"); break; //DST + case 0x05: SetDSTVec("vec4(dot($0.xyz, $1.xyz))"); break; //DP3 + case 0x06: SetDSTVec("vec4(dot(vec4($0.xyz, 1.0), $1))"); break; //DPH + case 0x07: SetDSTVec("vec4(dot($0, $1))"); break; //DP4 + case 0x08: SetDSTVec("vec4(distance($0, $1))"); break; //DST case 0x09: SetDSTVec("min($0, $1)"); break; //MIN case 0x0a: SetDSTVec("max($0, $1)"); break; //MAX case 0x0b: SetDSTVec("vec4(lessThan($0, $1))"); break; //SLT From bf8e6dbc8ea524a286d91fb0cccc81e7e49c90bd Mon Sep 17 00:00:00 2001 From: SiPlus Date: Mon, 7 Jul 2014 10:57:03 +0400 Subject: [PATCH 123/499] Change vec2(float, 0.0).xxxx to vec4(float) in FS --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 418ce0375e..2b33a7fdf0 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -326,9 +326,9 @@ void GLFragmentDecompilerThread::Task() case 0x02: SetDst("($0 * $1)"); break; //MUL case 0x03: SetDst("($0 + $1)"); break; //ADD case 0x04: SetDst("($0 * $1 + $2)"); break; //MAD - case 0x05: SetDst("vec2(dot($0.xyz, $1.xyz), 0).xxxx"); break; // DP3 - case 0x06: SetDst("vec2(dot($0, $1), 0).xxxx"); break; // DP4 - case 0x07: SetDst("vec2(distance($0, $1), 0).xxxx"); break; // DST + case 0x05: SetDst("vec4(dot($0.xyz, $1.xyz))"); break; // DP3 + case 0x06: SetDst("vec4(dot($0, $1))"); break; // DP4 + case 0x07: SetDst("vec4(distance($0, $1))"); break; // DST case 0x08: SetDst("min($0, $1)"); break; // MIN case 0x09: SetDst("max($0, $1)"); break; // MAX case 0x0a: SetDst("vec4(lessThan($0, $1))"); break; // SLT @@ -379,7 +379,7 @@ void GLFragmentDecompilerThread::Task() //case 0x35: break; // BEMLUM case 0x36: SetDst("($0 - 2.0 * $1 * dot($0, $1))"); break; // RFL (reflection vector) //case 0x37: break; // TIMESWTEX - case 0x38: SetDst("vec2(dot($0.xy, $1.xy)).xxxx"); break; // DP2 + case 0x38: SetDst("vec4(dot($0.xy, $1.xy))"); break; // DP2 case 0x39: SetDst("normalize($0.xyz)"); break; // NRM case 0x3a: SetDst("($0 / $1)"); break; // DIV case 0x3b: SetDst("($0 / sqrt($1))"); break; // DIVSQ From 38e41e0ea81503acd82e33d6ebc86263f943e4f7 Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 7 Jul 2014 18:59:32 +0800 Subject: [PATCH 124/499] RSX : add rescale support for native 960x1080 & 1024x768 --- rpcs3/Emu/GS/RSXThread.cpp | 54 +++++++++++++++++++++++++++++++++++- rpcs3/Emu/GS/sysutil_video.h | 29 +++++++------------ 2 files changed, 63 insertions(+), 20 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index a20fa52c21..0143dcfe9d 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1373,7 +1373,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 { switch (Ini.GSResolution.GetValue()) { - case 1:// 1920x1080 window size + case 1: // 1920x1080 window size m_width_scale = m_height_scale = 4.0f; m_width = 1980; m_height = 1080; @@ -1391,6 +1391,58 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 break; } } + + // Rescale native 960x1080 to fit 1080p/720p/480p window size + if (m_buffer_width == 960 && m_buffer_height == 1080) + { + switch (Ini.GSResolution.GetValue()) + { + case 1: // 1920x1080 window size + m_width_scale = 4.0f; + m_height_scale = 2.0f; + m_width = 1980; + m_height = 1080; + break; + case 2: // 1280x720 window size + m_width_scale = 2.66f; + m_height_scale = 1.33f; + m_width = 1280; + m_height = 720; + break; + case 4: // 720x480 window size + m_width_scale = 1.5f; + m_height_scale = 0.88f; + m_width = 720; + m_height = 480; + break; + } + } + + // Rescale native 1024x768 to fit 1080p/720p/480p window size + if (m_buffer_width == 1024 && m_buffer_height == 768) + { + switch (Ini.GSResolution.GetValue()) + { + case 1: // 1920x1080 window size + m_width_scale = 3.75f; + m_height_scale = 2.81f; + m_width = 1980; + m_height = 1080; + break; + case 2: // 1280x720 window size + m_width_scale = 2.5f; + m_height_scale = 1.87f; + m_width = 1280; + m_height = 720; + break; + case 4: // 720x480 window size + m_width_scale = 1.4f; + m_height_scale = 1.25f; + m_width = 720; + m_height = 480; + break; + } + } } break; diff --git a/rpcs3/Emu/GS/sysutil_video.h b/rpcs3/Emu/GS/sysutil_video.h index 800196e60c..5be7d76c36 100644 --- a/rpcs3/Emu/GS/sysutil_video.h +++ b/rpcs3/Emu/GS/sysutil_video.h @@ -231,9 +231,6 @@ static const CellVideoOutResolution ResolutionTable[] = {1600, 1080}, //10 - 5 {1440, 1080}, //11 - 6 {1280, 1080}, //12 - 7 - {960, 1080}, //13 - 8 - {960, 540}, //14 - 9 (Terraria [BLES01938]) - {1024,768}, //15 - 10 (Eskiss Homebrew) }; inline static u32 ResolutionIdToNum(u32 id) @@ -253,30 +250,24 @@ inline static u32 ResolutionIdToNum(u32 id) 5, //10 6, //11 7, //12 - 8, //13 - 9, //14 - 10, //15 }; - return id <= 15 ? res[id] : 0; + return id <= 12 ? res[id] : 0; } inline static u32 ResolutionNumToId(u32 num) { static const u32 res[] = { - 0, - 1, - 2, - 4, - 5, - 10, - 11, - 12, - 13, - 14, - 15, + 0, //0 + 1, //1 + 2, //2 + 4, //3 + 5, //4 + 10, //5 + 11, //6 + 12, //7 }; - return num <= 10 ? res[num] : 0; + return num <= 7 ? res[num] : 0; } From d1fff053c265a328726fb866fce0218bc231eaaa Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 7 Jul 2014 21:22:36 +0400 Subject: [PATCH 125/499] Some cleanup --- Utilities/Thread.cpp | 17 +- rpcs3/Emu/CPU/CPUThread.cpp | 102 +++--- rpcs3/Emu/Cell/PPCDecoder.cpp | 5 +- rpcs3/Emu/Cell/RawSPUThread.cpp | 224 ++----------- rpcs3/Emu/Cell/RawSPUThread.h | 8 - rpcs3/Emu/Cell/SPUThread.cpp | 3 +- rpcs3/Emu/Cell/SPUThread.h | 9 - rpcs3/Emu/GS/RSXThread.cpp | 2 +- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 108 ++----- rpcs3/Emu/Memory/Memory.cpp | 146 +-------- rpcs3/Emu/Memory/Memory.h | 348 ++++++--------------- rpcs3/Emu/Memory/MemoryBlock.h | 4 - rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 5 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 5 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 57 +--- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 47 +-- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 14 +- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 9 - rpcs3/emucore.vcxproj | 4 + rpcs3/emucore.vcxproj.filters | 3 + rpcs3/rpcs3.vcxproj | 4 +- 23 files changed, 278 insertions(+), 850 deletions(-) diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index c11a48183f..38912a139a 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -52,7 +52,22 @@ void ThreadBase::Start() g_tls_this_thread = this; g_thread_count++; - Task(); + try + { + Task(); + } + catch (const std::string& e) + { + LOG_ERROR(GENERAL, "Exception: %s", e.c_str()); + } + catch (const char* e) + { + LOG_ERROR(GENERAL, "Exception: %s", e); + } + catch (int exitcode) + { + LOG_SUCCESS(GENERAL, "Exit Code: %d", exitcode); + } m_alive = false; g_thread_count--; diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index b36970e4cf..cc21ba3c11 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -280,68 +280,72 @@ void CPUThread::ExecOnce() SendDbgCommand(DID_PAUSED_THREAD, this); } +void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) +{ + const u64 addr = (u64)Memory.GetBaseAddr() - (u64)pExp->ExceptionRecord->ExceptionAddress; + if (addr < 0x100000000 && u == EXCEPTION_ACCESS_VIOLATION) + { + // TODO: allow recovering from a page fault + //GetCurrentPPUThread().Stop(); + Emu.Pause(); + throw fmt::Format("Access violation: addr = 0x%x", (u32)addr); + } + else + { + // some fatal error (should crash) + return; + } +} + void CPUThread::Task() { if (Ini.HLELogging.GetValue()) LOG_NOTICE(PPU, "%s enter", CPUThread::GetFName().c_str()); const std::vector& bp = Emu.GetBreakPoints(); - try + for (uint i = 0; iDecodeMemory(PC + m_offset)); + + if (status == CPUThread_Step) + { + m_is_step = false; + break; + } + + for (uint i = 0; i < bp.size(); ++i) + { + if (bp[i] == PC) { Emu.Pause(); break; } } - - while(true) - { - int status = ThreadStatus(); - - if(status == CPUThread_Stopped || status == CPUThread_Break) - { - break; - } - - if(status == CPUThread_Sleeping) - { - Sleep(1); - continue; - } - - Step(); - NextPc(m_dec->DecodeMemory(PC + m_offset)); - - if(status == CPUThread_Step) - { - m_is_step = false; - break; - } - - for(uint i=0; iGetStartAddr() == GetStartAddr()) - { - Memory.MemoryBlocks.erase(Memory.MemoryBlocks.begin() + i); - break; - } - } - - //Close(); -} - -bool RawSPUThread::Read8(const u64 addr, u8* value) -{ - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Read8(addr, value); - } - - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read8(0x%x)", m_index, offset); - Emu.Pause(); - return false; -} - -bool RawSPUThread::Read16(const u64 addr, u16* value) -{ - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Read16(addr, value); - } - - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read16(0x%x)", m_index, offset); - Emu.Pause(); - return false; + Memory.CloseRawSPU(this, m_index); } bool RawSPUThread::Read32(const u64 addr, u32* value) @@ -88,7 +53,7 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) SPU.MBox_Status.SetValue((SPU.Out_MBox.GetCount() & 0xff) | (SPU.In_MBox.GetFreeCount() << 8)); *value = SPU.MBox_Status.GetValue(); break; - case SPU_RunCntl_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); *value = SPU.RunCntl.GetValue(); break; + case SPU_RunCntl_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); *value = (u32)IsRunning(); break; case SPU_Status_offs: //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Status)", m_index); *value = SPU.Status.GetValue(); @@ -106,58 +71,6 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) return true; } -bool RawSPUThread::Read64(const u64 addr, u64* value) -{ - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Read64(addr, value); - } - - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read64(0x%x)", m_index, offset); - Emu.Pause(); - return false; -} - -bool RawSPUThread::Read128(const u64 addr, u128* value) -{ - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Read128(addr, value); - } - - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read128(0x%x)", m_index, offset); - Emu.Pause(); - return false; -} - -bool RawSPUThread::Write8(const u64 addr, const u8 value) -{ - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Write8(addr, value); - } - - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write8(0x%x, 0x%x)", m_index, offset, value); - Emu.Pause(); - return false; -} - -bool RawSPUThread::Write16(const u64 addr, const u16 value) -{ - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Write16(addr, value); - } - - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write16(0x%x, 0x%x)", m_index, offset, value); - Emu.Pause(); - return false; -} - bool RawSPUThread::Write32(const u64 addr, const u32 value) { if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) @@ -206,7 +119,25 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) SPU.In_MBox.PushUncond(value); //if In_MBox is already full, the last message will be overwritten break; case SPU_MBox_Status_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); SPU.MBox_Status.SetValue(value); break; - case SPU_RunCntl_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RunCntl, 0x%x)", m_index, value); SPU.RunCntl.SetValue(value); break; + case SPU_RunCntl_offs: + { + if (value == SPU_RUNCNTL_RUNNABLE) + { + SPU.Status.SetValue(SPU_STATUS_RUNNING); + Exec(); + } + else if (value == SPU_RUNCNTL_STOP) + { + SPU.Status.SetValue(SPU_STATUS_STOPPED); + Stop(); + } + else + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RunCtrl, 0x%x): unknown value", m_index, value); + Emu.Pause(); + } + break; + } case SPU_Status_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Status, 0x%x)", m_index, value); SPU.Status.SetValue(value); break; case SPU_NPC_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_NPC, 0x%x)", m_index, value); SPU.NPC.SetValue(value); break; case SPU_RdSigNotify1_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify1, 0x%x)", m_index, value); SPU.SNR[0].SetValue(value); break; @@ -221,32 +152,6 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) return true; } -bool RawSPUThread::Write64(const u64 addr, const u64 value) -{ - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Write64(addr, value); - } - - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write64(0x%x, 0x%llx)", m_index, offset, value); - Emu.Pause(); - return false; -} - -bool RawSPUThread::Write128(const u64 addr, const u128 value) -{ - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Write128(addr, value); - } - - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write128(0x%x, 0x%llx_%llx)", m_index, offset, value._u64[1], value._u64[0]); - Emu.Pause(); - return false; -} - void RawSPUThread::InitRegs() { dmac.ls_offset = m_offset = GetStartAddr() + RAW_SPU_LS_OFFSET; @@ -260,88 +165,9 @@ u32 RawSPUThread::GetIndex() const void RawSPUThread::Task() { - if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "%s enter", PPCThread::GetFName().c_str()); + PC = SPU.NPC.GetValue(); - const std::vector& bp = Emu.GetBreakPoints(); + CPUThread::Task(); - try - { - for(uint i=0; iDecodeMemory(PC + m_offset)); - - if(status == CPUThread_Step) - { - m_is_step = false; - continue; - } - - for(uint i=0; i Out_IntrMBox; Channel<4> In_MBox; Channel<1> MBox_Status; - Channel<1> RunCntl; Channel<1> Status; Channel<1> NPC; Channel<1> SNR[2]; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 403ae4b0f4..023f641b5e 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -2492,6 +2492,7 @@ void RSXThread::Task() { m_call_stack.push(get + 4); u32 offs = cmd & ~CELL_GCM_METHOD_FLAG_CALL; + u32 addr = Memory.RSXIOMem.GetStartAddr() + offs; //LOG_WARNING(RSX, "rsx call(0x%x) #0x%x - 0x%x - 0x%x", offs, addr, cmd, get); m_ctrl->get = offs; continue; @@ -2501,7 +2502,6 @@ void RSXThread::Task() //LOG_WARNING(RSX, "rsx return!"); u32 get = m_call_stack.top(); m_call_stack.pop(); - u32 addr = Memory.RSXIOMem.GetStartAddr() + offs; //LOG_WARNING(RSX, "rsx return(0x%x)", get); m_ctrl->get = get; continue; diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 77ff450c96..0d86262059 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -41,7 +41,7 @@ bool DynamicMemoryBlockBase::IsMyAddress(const u64 addr) const u32 index = MemoryBlock::FixAddr(addr) >> 12; - return m_pages[index] && !m_locked[index]; + return m_pages[index] != nullptr; } template @@ -54,9 +54,7 @@ MemoryBlock* DynamicMemoryBlockBase::SetRange(const u64 start, const u32 siz const u32 page_count = m_max_size >> 12; m_pages.resize(page_count); - m_locked.resize(page_count); memset(m_pages.data(), 0, sizeof(u8*) * page_count); - memset(m_locked.data(), 0, sizeof(u8*) * page_count); return this; } @@ -70,7 +68,6 @@ void DynamicMemoryBlockBase::Delete() m_max_size = 0; m_pages.clear(); - m_locked.clear(); MemoryBlock::Delete(); } @@ -108,8 +105,7 @@ bool DynamicMemoryBlockBase::AllocFixed(u64 addr, u32 size) template void DynamicMemoryBlockBase::AppendMem(u64 addr, u32 size) /* private */ { - //u8* pointer = (u8*)m_allocated[m_allocated.Move(new MemBlockInfo(addr, size))].mem; - m_allocated.emplace_back(addr, size); + m_allocated.emplace_back(addr, size, Memory.GetBaseAddr()); u8* pointer = (u8*) m_allocated.back().mem; const u32 first = MemoryBlock::FixAddr(addr) >> 12; @@ -119,7 +115,6 @@ void DynamicMemoryBlockBase::AppendMem(u64 addr, u32 size) /* private */ for (u32 i = first; i <= last; i++) { m_pages[i] = pointer; - m_locked[i] = nullptr; pointer += 4096; } } @@ -195,16 +190,15 @@ bool DynamicMemoryBlockBase::Free(u64 addr) const u32 last = first + ((m_allocated[num].size - 1) >> 12); // check if locked: - for (u32 i = first; i <= last; i++) - { - if (!m_pages[i] || m_locked[i]) return false; - } + //for (u32 i = first; i <= last; i++) + //{ + // if (!m_pages[i]) return false; + //} // clear pointers: for (u32 i = first; i <= last; i++) { m_pages[i] = nullptr; - m_locked[i] = nullptr; } m_allocated.erase(m_allocated.begin() + num); @@ -217,6 +211,7 @@ bool DynamicMemoryBlockBase::Free(u64 addr) { LOG_NOTICE(MEMORY, "*** Memory Block: addr = 0x%llx, size = 0x%x", m_allocated[i].addr, m_allocated[i].size); } + assert(0); return false; } @@ -233,97 +228,34 @@ u8* DynamicMemoryBlockBase::GetMem(u64 addr) const // lock-free, addr is fix } } - LOG_ERROR(MEMORY, "GetMem(%llx) from not allocated address.", addr); + LOG_ERROR(MEMORY, "GetMem(0x%llx) from not allocated address.", addr); assert(0); return nullptr; } template -bool DynamicMemoryBlockBase::IsLocked(u64 addr) // lock-free +bool DynamicMemoryBlockBase::IsLocked(u64 addr) { - if (IsInMyRange(addr)) - { - const u32 index = MemoryBlock::FixAddr(addr) >> 12; - - if (index < m_locked.size()) - { - if (m_locked[index]) return true; - } - } - + // TODO + LOG_ERROR(MEMORY, "IsLocked(0x%llx) not implemented", addr); + assert(0); return false; } template bool DynamicMemoryBlockBase::Lock(u64 addr, u32 size) { - size = PAGE_4K(size); // align size - - addr &= ~4095; // align start address - - if (!IsInMyRange(addr, size)) - { - assert(0); - return false; - } - - if (IsMyAddress(addr) || IsMyAddress(addr + size - 1)) - { - return false; - } - - const u32 first = MemoryBlock::FixAddr(addr) >> 12; - - const u32 last = first + ((size - 1) >> 12); - - for (u32 i = first; i <= last; i++) - { - if (u8* pointer = m_pages[i]) - { - m_locked[i] = pointer; - m_pages[i] = nullptr; - } - else // already locked or empty - { - } - } - - return true; + // TODO + LOG_ERROR(MEMORY, "Lock(0x%llx, 0x%x) not implemented", addr, size); + assert(0); + return false; } template bool DynamicMemoryBlockBase::Unlock(u64 addr, u32 size) { - size = PAGE_4K(size); // align size - - addr &= ~4095; // align start address - - if (!IsInMyRange(addr, size)) - { - assert(0); - return false; - } - - if (IsMyAddress(addr) || IsMyAddress(addr + size - 1)) - { - return false; - } - - const u32 first = MemoryBlock::FixAddr(addr) >> 12; - - const u32 last = first + ((size - 1) >> 12); - - for (u32 i = first; i <= last; i++) - { - if (u8* pointer = m_locked[i]) - { - m_pages[i] = pointer; - m_locked[i] = nullptr; - } - else // already unlocked or empty - { - } - } - - return true; + // TODO + LOG_ERROR(MEMORY, "Unlock(0x%llx, 0x%x) not implemented", addr, size); + assert(0); + return false; } diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 293a4f6234..5395bd1089 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -31,16 +31,13 @@ void MemoryBlock::InitMemory() { if(!range_size) return; - //if(mem) safe_free(mem); if (mem) VirtualFree(mem, range_size, MEM_DECOMMIT); - //mem = (u8*)malloc(range_size); mem = (u8*)VirtualAlloc((void*)((u64)Memory.GetBaseAddr() + range_start), range_size, MEM_COMMIT, PAGE_READWRITE); memset(mem, 0, range_size); } void MemoryBlock::Delete() { - //if(mem) safe_free(mem); if (mem) VirtualFree(mem, range_size, MEM_DECOMMIT); Init(); } @@ -54,7 +51,6 @@ bool MemoryBlock::GetMemFromAddr(void* dst, const u64 addr, const u32 size) { if(!IsMyAddress(addr) || FixAddr(addr) + size > GetSize()) return false; - // mem cpy(dst, GetMem(FixAddr(addr)), size); return Memory.CopyToReal(dst, (u32)addr, size); } @@ -62,7 +58,6 @@ bool MemoryBlock::SetMemFromAddr(void* src, const u64 addr, const u32 size) { if(!IsMyAddress(addr) || FixAddr(addr) + size > GetSize()) return false; - // mem cpy(GetMem(FixAddr(addr)), src, size); return Memory.CopyFromReal((u32)addr, src, size); } @@ -121,7 +116,6 @@ bool MemoryBlock::Read8(const u64 addr, u8* value) return false; } - //*value = std::atomic_load((volatile std::atomic*)GetMem(FixAddr(addr))); *value = FastRead(FixAddr(addr)); return true; } @@ -134,7 +128,6 @@ bool MemoryBlock::Read16(const u64 addr, u16* value) return false; } - //se_t::func(*value, std::atomic_load((volatile std::atomic*)GetMem(FixAddr(addr)))); *value = FastRead(FixAddr(addr)); return true; } @@ -147,7 +140,6 @@ bool MemoryBlock::Read32(const u64 addr, u32* value) return false; } - //se_t::func(*value, std::atomic_load((volatile std::atomic*)GetMem(FixAddr(addr)))); *value = FastRead(FixAddr(addr)); return true; } @@ -160,7 +152,6 @@ bool MemoryBlock::Read64(const u64 addr, u64* value) return false; } - //se_t::func(*value, std::atomic_load((volatile std::atomic*)GetMem(FixAddr(addr)))); *value = FastRead(FixAddr(addr)); return true; } @@ -173,9 +164,6 @@ bool MemoryBlock::Read128(const u64 addr, u128* value) return false; } - //u64 f_addr = FixAddr(addr); - //se_t::func(value->lo, std::atomic_load((volatile std::atomic*)GetMem(f_addr))); - //se_t::func(value->hi, std::atomic_load((volatile std::atomic*)GetMem(f_addr + 8))); *value = FastRead(FixAddr(addr)); return true; } @@ -199,7 +187,6 @@ bool MemoryBlock::Write8(const u64 addr, const u8 value) { if(!IsMyAddress(addr) || IsLocked(addr)) return false; - //std::atomic_store((std::atomic*)GetMem(FixAddr(addr)), value); FastWrite(FixAddr(addr), value); return true; } @@ -208,9 +195,6 @@ bool MemoryBlock::Write16(const u64 addr, const u16 value) { if(!IsMyAddress(addr) || IsLocked(addr)) return false; - //u16 re_value; - //se_t::func(re_value, value); - //std::atomic_store((std::atomic*)GetMem(FixAddr(addr)), re_value); FastWrite(FixAddr(addr), value); return true; } @@ -219,9 +203,6 @@ bool MemoryBlock::Write32(const u64 addr, const u32 value) { if(!IsMyAddress(addr) || IsLocked(addr)) return false; - //u32 re_value; - //se_t::func(re_value, value); - //std::atomic_store((std::atomic*)GetMem(FixAddr(addr)), re_value); FastWrite(FixAddr(addr), value); return true; } @@ -230,9 +211,6 @@ bool MemoryBlock::Write64(const u64 addr, const u64 value) { if(!IsMyAddress(addr) || IsLocked(addr)) return false; - //u64 re_value; - //se_t::func(re_value, value); - //std::atomic_store((std::atomic*)GetMem(FixAddr(addr)), re_value); FastWrite(FixAddr(addr), value); return true; } @@ -241,12 +219,6 @@ bool MemoryBlock::Write128(const u64 addr, const u128 value) { if(!IsMyAddress(addr) || IsLocked(addr)) return false; - //u64 f_addr = FixAddr(addr); - //u64 re_value; - //se_t::func(re_value, value.lo); - //std::atomic_store((std::atomic*)GetMem(f_addr), re_value); - //se_t::func(re_value, value.hi); - //std::atomic_store((std::atomic*)GetMem(f_addr + 8), re_value); FastWrite(FixAddr(addr), value); return true; } @@ -331,121 +303,36 @@ bool MemoryBlockLE::Write128(const u64 addr, const u128 value) return true; } -//NullMemoryBlock -bool NullMemoryBlock::Read8(const u64 addr, u8* ) -{ - LOG_ERROR(MEMORY, "Read8 from null block: [%08llx]", addr); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Read16(const u64 addr, u16* ) -{ - LOG_ERROR(MEMORY, "Read16 from null block: [%08llx]", addr); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Read32(const u64 addr, u32* ) -{ - LOG_ERROR(MEMORY, "Read32 from null block: [%08llx]", addr); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Read64(const u64 addr, u64* ) -{ - LOG_ERROR(MEMORY, "Read64 from null block: [%08llx]", addr); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Read128(const u64 addr, u128* ) -{ - LOG_ERROR(MEMORY, "Read128 from null block: [%08llx]", addr); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Write8(const u64 addr, const u8 value) -{ - LOG_ERROR(MEMORY, "Write8 to null block: [%08llx]: %x", addr, value); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Write16(const u64 addr, const u16 value) -{ - LOG_ERROR(MEMORY, "Write16 to null block: [%08llx]: %x", addr, value); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Write32(const u64 addr, const u32 value) -{ - LOG_ERROR(MEMORY, "Write32 to null block: [%08llx]: %x", addr, value); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Write64(const u64 addr, const u64 value) -{ - LOG_ERROR(MEMORY, "Write64 to null block: [%08llx]: %llx", addr, value); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - -bool NullMemoryBlock::Write128(const u64 addr, const u128 value) -{ - LOG_ERROR(MEMORY, "Write128 to null block: [%08llx]: %llx_%llx", addr, value.hi, value.lo); - if (!Ini.CPUIgnoreRWErrors.GetValue()) - Emu.Pause(); - return false; -} - //MemoryBase void MemoryBase::Write8(u64 addr, const u8 data) { - //GetMemByAddr(addr).Write8(addr, data); *(u8*)((u64)GetBaseAddr() + addr) = data; } void MemoryBase::Write16(u64 addr, const u16 data) { - //GetMemByAddr(addr).Write16(addr, data); *(u16*)((u64)GetBaseAddr() + addr) = re16(data); } void MemoryBase::Write32(u64 addr, const u32 data) { - if (addr < 0xE0000000 || (addr % 0x100000) < 0x40000) + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) { *(u32*)((u64)GetBaseAddr() + addr) = re32(data); } else { - GetMemByAddr(addr).Write32(addr, data); + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data); } } void MemoryBase::Write64(u64 addr, const u64 data) { - //GetMemByAddr(addr).Write64(addr, data); *(u64*)((u64)GetBaseAddr() + addr) = re64(data); } void MemoryBase::Write128(u64 addr, const u128 data) { - //GetMemByAddr(addr).Write128(addr, data); *(u128*)((u64)GetBaseAddr() + addr) = re128(data); } @@ -486,37 +373,36 @@ bool MemoryBase::Write128NN(u64 addr, const u128 data) u8 MemoryBase::Read8(u64 addr) { - u8 res; - Read8ByAddr(addr, &res); - return res; + return *(u8*)((u64)GetBaseAddr() + addr); } u16 MemoryBase::Read16(u64 addr) { - u16 res; - Read16ByAddr(addr, &res); - return res; + return re16(*(u16*)((u64)GetBaseAddr() + addr)); } u32 MemoryBase::Read32(u64 addr) { - u32 res; - Read32ByAddr(addr, &res); - return res; + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + { + return re32(*(u32*)((u64)GetBaseAddr() + addr)); + } + else + { + u32 res; + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res); + return res; + } } u64 MemoryBase::Read64(u64 addr) { - u64 res; - Read64ByAddr(addr, &res); - return res; + return re64(*(u64*)((u64)GetBaseAddr() + addr)); } u128 MemoryBase::Read128(u64 addr) { - u128 res; - Read128ByAddr(addr, &res); - return res; + return re128(*(u128*)((u64)GetBaseAddr() + addr)); } template<> __forceinline u64 MemoryBase::ReverseData<1>(u64 val) { return val; } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 13808fdffb..fb4db9349d 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -12,13 +12,21 @@ enum MemoryType Memory_PSP, }; +enum : u64 +{ + RAW_SPU_OFFSET = 0x0000000000100000, + RAW_SPU_BASE_ADDR = 0x00000000E0000000, + RAW_SPU_LS_OFFSET = 0x0000000000000000, + RAW_SPU_PROB_OFFSET = 0x0000000000040000, +}; + class MemoryBase { - NullMemoryBlock NullMem; void* m_base_addr; + std::vector MemoryBlocks; + std::mutex m_mutex; public: - std::vector MemoryBlocks; MemoryBlock* UserMemory; DynamicMemoryBlock MainMem; @@ -27,8 +35,7 @@ public: DynamicMemoryBlock MmaperMem; DynamicMemoryBlock RSXFBMem; DynamicMemoryBlock StackMem; - MemoryBlock SpuRawMem; - MemoryBlock SpuThrMem; + MemoryBlock* RawSPUMem[32]; VirtualMemoryBlock RSXIOMem; struct @@ -66,42 +73,23 @@ public: static __forceinline u16 Reverse16(const u16 val) { return _byteswap_ushort(val); - //return ((val >> 8) & 0xff) | ((val << 8) & 0xff00); } static __forceinline u32 Reverse32(const u32 val) { return _byteswap_ulong(val); - /* - return - ((val >> 24) & 0x000000ff) | - ((val >> 8) & 0x0000ff00) | - ((val << 8) & 0x00ff0000) | - ((val << 24) & 0xff000000); - */ } static __forceinline u64 Reverse64(const u64 val) { return _byteswap_uint64(val); - /* - return - ((val >> 56) & 0x00000000000000ff) | - ((val >> 40) & 0x000000000000ff00) | - ((val >> 24) & 0x0000000000ff0000) | - ((val >> 8) & 0x00000000ff000000) | - ((val << 8) & 0x000000ff00000000) | - ((val << 24) & 0x0000ff0000000000) | - ((val << 40) & 0x00ff000000000000) | - ((val << 56) & 0xff00000000000000); - */ } static __forceinline u128 Reverse128(const u128 val) { u128 ret; - ret.lo = re64(val.hi); - ret.hi = re64(val.lo); + ret.lo = _byteswap_uint64(val.hi); + ret.hi = _byteswap_uint64(val.lo); return ret; } @@ -112,99 +100,8 @@ public: return (T)ReverseData(val); }; - MemoryBlock& GetMemByNum(const u8 num) - { - if(num >= MemoryBlocks.size()) return NullMem; - return *MemoryBlocks[num]; - } - - MemoryBlock& GetMemByAddr(const u64 addr) - { - for (auto block : MemoryBlocks) - { - if (block->IsMyAddress(addr)) - return *block; - } - - return NullMem; - } - - bool Read8ByAddr(const u64 addr, u8 *value) - { - *value = *(u8*)((u64)GetBaseAddr() + addr); - return true; - - /*for (auto block : MemoryBlocks) - { - if (block->Read8(addr, value)) - return true; - } - - return NullMem.Read8(addr, value);*/ - } - - bool Read16ByAddr(const u64 addr, u16 *value) - { - *value = re16(*(u16*)((u64)GetBaseAddr() + addr)); - return true; - - /*for (auto block : MemoryBlocks) - { - if (block->Read16(addr, value)) - return true; - } - - return NullMem.Read16(addr, value);*/ - } - - bool Read32ByAddr(const u64 addr, u32 *value) - { - if (addr < 0xE0000000 || (addr % 0x100000) < 0x40000) - { - *value = re32(*(u32*)((u64)GetBaseAddr() + addr)); - return true; - } - - for (auto block : MemoryBlocks) - { - if (block->Read32(addr, value)) - return true; - } - - return NullMem.Read32(addr, value); - } - - bool Read64ByAddr(const u64 addr, u64 *value) - { - *value = re64(*(u64*)((u64)GetBaseAddr() + addr)); - return true; - - /*for (auto block : MemoryBlocks) - { - if (block->Read64(addr, value)) - return true; - } - - return NullMem.Read64(addr, value);*/ - } - - bool Read128ByAddr(const u64 addr, u128 *value) - { - *value = re128(*(u128*)((u64)GetBaseAddr() + addr)); - return true; - - /*for (auto block : MemoryBlocks) - { - if (block->Read128(addr, value)) - return true; - } - - return NullMem.Read128(addr, value);*/ - } - u8* GetMemFromAddr(const u64 addr) { - //return GetMemByAddr(addr).GetMemFromAddr(addr); return (u8*)GetBaseAddr() + addr; } @@ -215,36 +112,49 @@ public: u64 RealToVirtualAddr(const void* addr) { - const u64 raddr = (u64)addr; - for (auto block : MemoryBlocks) + const u64 res = (u64)addr - (u64)GetBaseAddr(); + + if (res < 0x100000000) { - MemoryBlock& b = *block; - const u64 baddr = (u64)b.GetMem(); - - if(raddr >= baddr && raddr < baddr + b.GetSize()) - { - return b.GetStartAddr() + (raddr - baddr); - } + return res; + } + else + { + return 0; } - - return 0; } - bool InitSpuRawMem(const u32 max_spu_raw) + void InitRawSPU(MemoryBlock* raw_spu, const u32 num) { - //if(SpuRawMem.GetSize()) return false; + std::lock_guard lock(m_mutex); - MemoryBlocks.push_back(SpuRawMem.SetRange(0xe0000000, 0x100000 * max_spu_raw)); + MemoryBlocks.push_back(raw_spu); + if (num < 32) RawSPUMem[num] = raw_spu; + } - return true; + void CloseRawSPU(MemoryBlock* raw_spu, const u32 num) + { + std::lock_guard lock(m_mutex); + + for (int i = 0; i < MemoryBlocks.size(); ++i) + { + if (MemoryBlocks[i] == raw_spu) + { + MemoryBlocks.erase(MemoryBlocks.begin() + i); + break; + } + } + if (num < 32) RawSPUMem[num] = nullptr; } void Init(MemoryType type) { + std::lock_guard lock(m_mutex); + if(m_inited) return; m_inited = true; - m_base_addr = VirtualAlloc(0, 0x100000000, MEM_RESERVE, PAGE_NOACCESS); + m_base_addr = VirtualAlloc(nullptr, 0x100000000, MEM_RESERVE, PAGE_NOACCESS); if (!m_base_addr) { LOG_ERROR(MEMORY, "Initing memory: VirtualAlloc() failed"); @@ -254,6 +164,11 @@ public: LOG_NOTICE(MEMORY, "Initing memory: m_base_addr = 0x%llx", (u64)m_base_addr); } + for (u32 i = 0; i < 32; i++) + { + RawSPUMem[i] = nullptr; + } + switch(type) { case Memory_PS3: @@ -263,8 +178,6 @@ public: MemoryBlocks.push_back(MmaperMem.SetRange(0xB0000000, 0x10000000)); MemoryBlocks.push_back(RSXFBMem.SetRange(0xC0000000, 0x10000000)); MemoryBlocks.push_back(StackMem.SetRange(0xD0000000, 0x10000000)); - //MemoryBlocks.push_back(SpuRawMem.SetRange(0xE0000000, 0x10000000)); - //MemoryBlocks.push_back(SpuThrMem.SetRange(0xF0000000, 0x10000000)); break; case Memory_PSV: @@ -286,34 +199,68 @@ public: bool IsGoodAddr(const u64 addr) { - for (auto block : MemoryBlocks) + //std::lock_guard lock(m_mutex); + + __try { - if (block->IsMyAddress(addr)) - return true; + volatile const u8 test = *GetMemFromAddr(addr); + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + return false; } - return false; + return true; + + //for (auto block : MemoryBlocks) + //{ + // if (block->IsMyAddress(addr)) + // return true; + //} + + //return false; } bool IsGoodAddr(const u64 addr, const u32 size) { - const u64 end = addr + size - 1; - for (auto block : MemoryBlocks) + //std::lock_guard lock(m_mutex); + + __try { - if (block->IsMyAddress(addr) && block->IsMyAddress(end)) - return true; + volatile const u8 test1 = *GetMemFromAddr(addr); + volatile const u8 test2 = *GetMemFromAddr(addr + size - 1); + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + return false; } - return false; + return true; + + //const u64 end = addr + size - 1; + //for (auto block : MemoryBlocks) + //{ + // if (block->IsMyAddress(addr) && block->IsMyAddress(end)) + // return true; + //} + + //return false; } void Close() { + std::lock_guard lock(m_mutex); + if(!m_inited) return; m_inited = false; LOG_NOTICE(MEMORY, "Closing memory..."); + for (u32 i = 0; i < 32; i++) + { + RawSPUMem[i] = nullptr; + } + for (auto block : MemoryBlocks) { block->Delete(); @@ -345,78 +292,25 @@ public: u64 Read64(const u64 addr); u128 Read128(const u64 addr); - bool CopyToReal(void* real, u32 from, u32 count) // (4K pages) copy from virtual to real memory + bool CopyToReal(void* real, u32 from, u32 count) { if (!count) return true; - u8* to = (u8*)real; - - if (u32 frag = from & 4095) - { - if (!IsGoodAddr(from)) return false; - u32 num = 4096 - frag; - if (count < num) num = count; - memcpy(to, GetMemFromAddr(from), num); - to += num; - from += num; - count -= num; - } - - for (u32 page = count / 4096; page > 0; page--) - { - if (!IsGoodAddr(from)) return false; - memcpy(to, GetMemFromAddr(from), 4096); - to += 4096; - from += 4096; - count -= 4096; - } - - if (count) - { - if (!IsGoodAddr(from)) return false; - memcpy(to, GetMemFromAddr(from), count); - } + memcpy(real, GetMemFromAddr(from), count); return true; } - bool CopyFromReal(u32 to, const void* real, u32 count) // (4K pages) copy from real to virtual memory + bool CopyFromReal(u32 to, const void* real, u32 count) { if (!count) return true; - const u8* from = (const u8*)real; - - if (u32 frag = to & 4095) - { - if (!IsGoodAddr(to)) return false; - u32 num = 4096 - frag; - if (count < num) num = count; - memcpy(GetMemFromAddr(to), from, num); - to += num; - from += num; - count -= num; - } - - for (u32 page = count / 4096; page > 0; page--) - { - if (!IsGoodAddr(to)) return false; - memcpy(GetMemFromAddr(to), from, 4096); - to += 4096; - from += 4096; - count -= 4096; - } - - if (count) - { - if (!IsGoodAddr(to)) return false; - memcpy(GetMemFromAddr(to), from, count); - } + memcpy(GetMemFromAddr(to), real, count); return true; - } - bool Copy(u32 to, u32 from, u32 count) // (4K pages) copy from virtual to virtual memory through real + bool Copy(u32 to, u32 from, u32 count) { if (u8* buf = (u8*)malloc(count)) { @@ -447,54 +341,22 @@ public: void ReadLeft(u8* dst, const u64 addr, const u32 size) { - MemoryBlock& mem = GetMemByAddr(addr); - - if(mem.IsNULL()) - { - LOG_ERROR(MEMORY, "ReadLeft[%d] from null block (0x%llx)", size, addr); - return; - } - - for(u32 i=0; i void WriteData(const u64 addr, const T* data) @@ -521,12 +383,6 @@ public: void WriteString(const u64 addr, const std::string& str) { - if(!IsGoodAddr(addr, str.length())) - { - LOG_ERROR(MEMORY,"Memory::WriteString error: bad address (0x%llx)", addr); - return; - } - strcpy((char*)GetMemFromAddr(addr), str.c_str()); } @@ -567,6 +423,8 @@ public: bool Map(const u64 dst_addr, const u64 src_addr, const u32 size) { + std::lock_guard lock(m_mutex); + if(IsGoodAddr(dst_addr) || !IsGoodAddr(src_addr)) { return false; @@ -579,6 +437,8 @@ public: bool Unmap(const u64 addr) { + std::lock_guard lock(m_mutex); + bool result = false; for(uint i=0; iaddr = other.addr; this->size = other.size; - //if (this->mem) _aligned_free(mem); if (this->mem) VirtualFree(this->mem, this->size, MEM_DECOMMIT); this->mem = other.mem; other.mem = nullptr; @@ -53,7 +51,6 @@ struct MemBlockInfo : public MemInfo ~MemBlockInfo() { - //if(mem) _aligned_free(mem); if (mem) VirtualFree(mem, size, MEM_DECOMMIT); mem = nullptr; } @@ -207,7 +204,6 @@ class DynamicMemoryBlockBase : public PT mutable std::mutex m_lock; std::vector m_allocated; // allocation info std::vector m_pages; // real addresses of every 4096 byte pages (array size should be fixed) - std::vector m_locked; // locked pages should be moved here u32 m_max_size; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 0b28f4d773..b1b74b4c76 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -315,17 +315,16 @@ int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) if (system_mode == CELL_GCM_SYSTEM_MODE_IOMAP_512MB) { cellGcmSys->Warning("cellGcmInit(): 512MB io address space used"); - Memory.MemoryBlocks.push_back(Memory.RSXIOMem.SetRange(0x50000000, 0x20000000/*512MB*/));//TODO: implement allocateAdressSpace in memoryBase + Memory.RSXIOMem.SetRange(0x50000000, 0x20000000 /*512MB*/); } else { cellGcmSys->Warning("cellGcmInit(): 256MB io address space used"); - Memory.MemoryBlocks.push_back(Memory.RSXIOMem.SetRange(0x50000000, 0x10000000/*256MB*/));//TODO: implement allocateAdressSpace in memoryBase + Memory.RSXIOMem.SetRange(0x50000000, 0x10000000 /*256MB*/); } if(cellGcmMapEaIoAddress(ioAddress, 0, ioSize) != CELL_OK) { - Memory.MemoryBlocks.pop_back(); cellGcmSys->Error("cellGcmInit : CELL_GCM_ERROR_FAILURE"); return CELL_GCM_ERROR_FAILURE; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index fdd633f28d..e56b525835 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -1135,7 +1135,7 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t if(colorBuffers.GetAddr() % COLOR_BUFFER_ALIGNMENT || vertexArray.GetAddr() % VERTEX_BUFFER_ALIGNMENT || fragmentShader.GetAddr() % FRAGMENT_SHADER_ALIGNMENT) { - cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); + cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT (alignment)"); return CELL_RESC_ERROR_BAD_ARGUMENT; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 9f70053a04..e657106523 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -335,9 +335,6 @@ int cellVideoOutGetResolutionAvailability(u32 videoOut, u32 resolutionId, u32 as return CELL_VIDEO_OUT_ERROR_UNSUPPORTED_VIDEO_OUT; } -extern std::atomic g_FsAioReadID; -extern std::atomic g_FsAioReadCur; - int cellSysutilCheckCallback() { cellSysutil->Log("cellSysutilCheckCallback()"); @@ -346,7 +343,7 @@ int cellSysutilCheckCallback() CPUThread& thr = Emu.GetCallbackThread(); - while (thr.IsAlive() || (g_FsAioReadCur < g_FsAioReadID)) + while (thr.IsAlive()) { Sleep(1); if (Emu.IsStopped()) diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index dc588d5d7e..09d75fcaa1 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -361,7 +361,7 @@ int cellSurMixerCreate(const mem_ptr_t config) break; } - if (mixcount > (port.tag + 15)) // preemptive buffer filling (probably hack) + if (mixcount > (port.tag + 14)) // preemptive buffer filling (probably hack) { Sleep(1); continue; diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 63de40521f..9b08ead4d7 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -162,74 +162,35 @@ void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_tsize; u32 buf_addr = aio->buf_addr; - u32 res = 0; u32 error = CELL_OK; vfsStream& file = *(vfsStream*)orig_file; const u64 old_pos = file.Tell(); file.Seek((u64)aio->offset); - u32 count = nbytes; - if (nbytes != (u64)count) + // TODO: use code from cellFsRead or something + + u64 res = 0; + if (nbytes != (u32)nbytes) { error = CELL_ENOMEM; - goto fin; } - - if (!Memory.IsGoodAddr(buf_addr)) + else { - error = CELL_EFAULT; - goto fin; + res = nbytes ? file.Read(Memory.GetMemFromAddr(buf_addr), nbytes) : 0; } - if (count) if (u32 frag = buf_addr & 4095) // memory page fragment - { - u32 req = std::min(count, 4096 - frag); - u32 read = file.Read(Memory + buf_addr, req); - buf_addr += req; - res += read; - count -= req; - if (read < req) goto fin; - } - - for (u32 pages = count / 4096; pages > 0; pages--) // full pages - { - if (!Memory.IsGoodAddr(buf_addr)) goto fin; // ??? (probably EFAULT) - u32 read = file.Read(Memory + buf_addr, 4096); - buf_addr += 4096; - res += read; - count -= 4096; - if (read < 4096) goto fin; - } - - if (count) // last fragment - { - if (!Memory.IsGoodAddr(buf_addr)) goto fin; - res += file.Read(Memory + buf_addr, count); - } - -fin: file.Seek(old_pos); - LOG_WARNING(HLE, "*** fsAioRead(fd=%d, offset=0x%llx, buf_addr=0x%x, size=0x%x, error=0x%x, res=0x%x, xid=0x%x [%s])", - fd, (u64)aio->offset, buf_addr, (u64)aio->size, error, res, xid, orig_file->GetPath().c_str()); + if (Ini.HLELogging.GetValue()) + LOG_NOTICE(HLE, "*** fsAioRead(fd=%d, offset=0x%llx, buf_addr=0x%x, size=0x%x, error=0x%x, res=0x%x, xid=0x%x [%s])", + fd, (u64)aio->offset, buf_addr, (u64)aio->size, error, res, xid, orig_file->GetPath().c_str()); if (func) // start callback thread { func.async(aio, error, xid, res); } - /*CPUThread& thr = Emu.GetCallbackThread(); - while (thr.IsAlive()) - { - Sleep(1); - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "fsAioRead() aborted"); - break; - } - }*/ - g_FsAioReadCur++; } diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index adebe91563..8546d26345 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -146,39 +146,11 @@ s32 cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread) if (nread.GetAddr() && !nread.IsGood()) return CELL_EFAULT; - u32 res = 0; - u32 count = nbytes; - if (nbytes != (u64)count) return CELL_ENOMEM; + if (nbytes != (u32)nbytes) return CELL_ENOMEM; - if (!Memory.IsGoodAddr(buf_addr)) return CELL_EFAULT; + // TODO: checks - if (count) if (u32 frag = buf_addr & 4095) // memory page fragment - { - u32 req = std::min(count, 4096 - frag); - u32 read = file->Read(Memory + buf_addr, req); - buf_addr += req; - res += read; - count -= req; - if (read < req) goto fin; - } - - for (u32 pages = count / 4096; pages > 0; pages--) // full pages - { - if (!Memory.IsGoodAddr(buf_addr)) goto fin; // ??? (probably EFAULT) - u32 read = file->Read(Memory + buf_addr, 4096); - buf_addr += 4096; - res += read; - count -= 4096; - if (read < 4096) goto fin; - } - - if (count) // last fragment - { - if (!Memory.IsGoodAddr(buf_addr)) goto fin; - res += file->Read(Memory + buf_addr, count); - } - -fin: + const u64 res = nbytes ? file->Read(Memory.GetMemFromAddr(buf_addr), nbytes) : 0; if (nread.GetAddr()) nread = res; // write value if not NULL @@ -192,16 +164,15 @@ s32 cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if(Memory.IsGoodAddr(buf_addr) && !Memory.IsGoodAddr(buf_addr, nbytes)) - { - MemoryBlock& block = Memory.GetMemByAddr(buf_addr); - nbytes = block.GetSize() - (buf_addr - block.GetStartAddr()); - } + if (nwrite.GetAddr() && !nwrite.IsGood()) return CELL_EFAULT; + + if (nbytes != (u32)nbytes) return CELL_ENOMEM; + + // TODO: checks const u64 res = nbytes ? file->Write(Memory.GetMemFromAddr(buf_addr), nbytes) : 0; - if(nwrite.IsGood()) - nwrite = res; + if (nwrite.GetAddr()) nwrite = res; // write value if not NULL return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp index da26b14349..a5bd6933d7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -23,14 +23,16 @@ s32 sys_process_getppid() s32 sys_process_exit(s32 errorcode) { sc_p.Warning("sys_process_exit(%d)", errorcode); - Emu.Pause(); // Emu.Stop() does crash + Emu.Pause(); LOG_SUCCESS(HLE, "Process finished"); - - if (Ini.HLEExitOnStop.GetValue()) + wxGetApp().CallAfter([]() { - Ini.HLEExitOnStop.SetValue(false); - // TODO: Find a way of calling Emu.Stop() and/or exiting RPCS3 (that is, TheApp->Exit()) without crashes - } + Emu.Stop(); + if (Ini.HLEExitOnStop.GetValue()) + { + wxGetApp().Exit(); + } + }); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index e5492be6f5..1ce34a3c6b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -391,14 +391,6 @@ s32 sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu) return CELL_EINVAL; } - //if(!Memory.InitSpuRawMem(max_raw_spu)) - //{ - // return CELL_ENOMEM; - //} - - //Ini.HLELogging.SetValue(true); - //dump_enable = true; - return CELL_OK; } @@ -773,7 +765,6 @@ s32 sys_raw_spu_create(mem32_t id, u32 attr_addr) CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_RAW_SPU); id = ((RawSPUThread&)new_thread).GetIndex(); new_thread.Run(); - new_thread.Exec(); return CELL_OK; } diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 20178ef443..0e9b70487d 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -312,6 +312,7 @@ + @@ -505,6 +506,7 @@ Use _UNICODE;UNICODE;%(PreprocessorDefinitions) stdafx.h + Async true @@ -518,6 +520,7 @@ Use _UNICODE;UNICODE;MSVC_CRT_MEMLEAK_DETECTION;%(PreprocessorDefinitions) stdafx.h + Async true @@ -548,6 +551,7 @@ false Use stdafx.h + Async true diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index d791a5101e..aa9b035f34 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1093,5 +1093,8 @@ Emu\SysCalls\Modules + + Emu\Memory + \ No newline at end of file diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index ab655be438..1f8f08d77d 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -81,6 +81,7 @@ ProgramDatabase Use ..\wxWidgets\include\msvc + Async true @@ -104,6 +105,7 @@ Use ..\wxWidgets\include\msvc _UNICODE;UNICODE;MSVC_CRT_MEMLEAK_DETECTION;%(PreprocessorDefinitions) + Async true @@ -131,7 +133,7 @@ false Use Speed - Sync + Async false true From 50b42f85932a454e8a0b0f2b5459472378a2df95 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 8 Jul 2014 18:26:49 +0400 Subject: [PATCH 126/499] ifdefs and linux (posix) version (not tested) --- rpcs3/Emu/CPU/CPUThread.cpp | 8 ++ rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 2 +- rpcs3/Emu/Memory/Memory.cpp | 67 ++++++++++++-- rpcs3/Emu/Memory/Memory.h | 104 +++++++++++----------- rpcs3/Emu/Memory/MemoryBlock.h | 20 ++--- 5 files changed, 131 insertions(+), 70 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index cc21ba3c11..c19d8f48e2 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -280,6 +280,7 @@ void CPUThread::ExecOnce() SendDbgCommand(DID_PAUSED_THREAD, this); } +#ifdef _WIN32 void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) { const u64 addr = (u64)Memory.GetBaseAddr() - (u64)pExp->ExceptionRecord->ExceptionAddress; @@ -296,6 +297,9 @@ void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) return; } } +#else +// TODO: linux version +#endif void CPUThread::Task() { @@ -312,7 +316,11 @@ void CPUThread::Task() } } +#ifdef _WIN32 _set_se_translator(_se_translator); +#else + // TODO: linux version +#endif while (true) { diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 0d86262059..77e50c8869 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -105,7 +105,7 @@ bool DynamicMemoryBlockBase::AllocFixed(u64 addr, u32 size) template void DynamicMemoryBlockBase::AppendMem(u64 addr, u32 size) /* private */ { - m_allocated.emplace_back(addr, size, Memory.GetBaseAddr()); + m_allocated.emplace_back(addr, size); u8* pointer = (u8*) m_allocated.back().mem; const u32 first = MemoryBlock::FixAddr(addr) >> 12; diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 5395bd1089..cd78fee7ad 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -8,8 +8,53 @@ MemoryBase Memory; +MemBlockInfo::MemBlockInfo(u64 _addr, u32 _size) + : MemInfo(_addr, PAGE_4K(_size)) +{ + void* real_addr = (void*)((u64)Memory.GetBaseAddr() + _addr); +#ifdef _WIN32 + mem = VirtualAlloc(real_addr, size, MEM_COMMIT, PAGE_READWRITE); +#else + if (::mprotect(real_addr, size, PROT_READ | PROT_WRITE)) + { + mem = nullptr; + } + else + { + mem = real_addr; + } +#endif + if (mem != real_addr) + { + LOG_ERROR(MEMORY, "Memory allocation failed (addr=0x%llx, size=0x%llx)", addr, size); + Emu.Pause(); + } + else + { + Memory.RegisterPages(_addr, PAGE_4K(_size)); + memset(mem, 0, size); + } +} + +void MemBlockInfo::Free() +{ + if (mem) + { + Memory.UnregisterPages(addr, size); +#ifdef _WIN32 + if (!VirtualFree(mem, size, MEM_DECOMMIT)) +#else + if (::mprotect(mem, size, PROT_NONE)) +#endif + { + LOG_ERROR(MEMORY, "Memory deallocation failed (addr=0x%llx, size=0x%llx)", addr, size); + Emu.Pause(); + } + } +} + //MemoryBlock -MemoryBlock::MemoryBlock() +MemoryBlock::MemoryBlock() : mem_inf(nullptr) { Init(); } @@ -29,16 +74,26 @@ void MemoryBlock::Init() void MemoryBlock::InitMemory() { - if(!range_size) return; + if (!range_size) return; - if (mem) VirtualFree(mem, range_size, MEM_DECOMMIT); - mem = (u8*)VirtualAlloc((void*)((u64)Memory.GetBaseAddr() + range_start), range_size, MEM_COMMIT, PAGE_READWRITE); - memset(mem, 0, range_size); + Free(); + mem_inf = new MemBlockInfo(range_start, range_size); + mem = (u8*)mem_inf->mem; +} + +void MemoryBlock::Free() +{ + if (mem_inf) + { + delete mem_inf; + mem_inf = nullptr; + } + mem = nullptr; } void MemoryBlock::Delete() { - if (mem) VirtualFree(mem, range_size, MEM_DECOMMIT); + Free(); Init(); } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index fb4db9349d..9f682a0c5f 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -24,6 +24,7 @@ class MemoryBase { void* m_base_addr; std::vector MemoryBlocks; + u32 m_pages[0x100000000 / 4096]; // information about every page std::mutex m_mutex; public: @@ -35,7 +36,7 @@ public: DynamicMemoryBlock MmaperMem; DynamicMemoryBlock RSXFBMem; DynamicMemoryBlock StackMem; - MemoryBlock* RawSPUMem[32]; + MemoryBlock* RawSPUMem[(0x100000000 - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]; VirtualMemoryBlock RSXIOMem; struct @@ -70,6 +71,24 @@ public: return m_base_addr; } + void RegisterPages(u64 addr, u32 size) + { + for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) + { + if (i >= sizeof(m_pages) / sizeof(m_pages[0])) break; + m_pages[i] = 1; // TODO: define page parameters + } + } + + void UnregisterPages(u64 addr, u32 size) + { + for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) + { + if (i >= sizeof(m_pages) / sizeof(m_pages[0])) break; + m_pages[i] = 0; // TODO: define page parameters + } + } + static __forceinline u16 Reverse16(const u16 val) { return _byteswap_ushort(val); @@ -129,7 +148,7 @@ public: std::lock_guard lock(m_mutex); MemoryBlocks.push_back(raw_spu); - if (num < 32) RawSPUMem[num] = raw_spu; + if (num < sizeof(RawSPUMem) / sizeof(RawSPUMem[0])) RawSPUMem[num] = raw_spu; } void CloseRawSPU(MemoryBlock* raw_spu, const u32 num) @@ -144,7 +163,7 @@ public: break; } } - if (num < 32) RawSPUMem[num] = nullptr; + if (num < sizeof(RawSPUMem) / sizeof(RawSPUMem[0])) RawSPUMem[num] = nullptr; } void Init(MemoryType type) @@ -154,21 +173,26 @@ public: if(m_inited) return; m_inited = true; + memset(m_pages, 0, sizeof(m_pages)); + memset(RawSPUMem, 0, sizeof(RawSPUMem)); + +#ifdef _WIN32 m_base_addr = VirtualAlloc(nullptr, 0x100000000, MEM_RESERVE, PAGE_NOACCESS); if (!m_base_addr) +#else + m_base_addr = ::mmap(nullptr, 0x100000000, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); + if (m_base_addr == (void*)-1) +#endif { - LOG_ERROR(MEMORY, "Initing memory: VirtualAlloc() failed"); + m_base_addr = nullptr; + LOG_ERROR(MEMORY, "Initing memory failed"); + assert(0); } else { LOG_NOTICE(MEMORY, "Initing memory: m_base_addr = 0x%llx", (u64)m_base_addr); } - for (u32 i = 0; i < 32; i++) - { - RawSPUMem[i] = nullptr; - } - switch(type) { case Memory_PS3: @@ -199,52 +223,30 @@ public: bool IsGoodAddr(const u64 addr) { - //std::lock_guard lock(m_mutex); - - __try - { - volatile const u8 test = *GetMemFromAddr(addr); - } - __except (EXCEPTION_EXECUTE_HANDLER) + if (addr >= 0x100000000 || !m_pages[addr / 4096]) // TODO: define page parameters { return false; } - - return true; - - //for (auto block : MemoryBlocks) - //{ - // if (block->IsMyAddress(addr)) - // return true; - //} - - //return false; + else + { + return true; + } } bool IsGoodAddr(const u64 addr, const u32 size) { - //std::lock_guard lock(m_mutex); - - __try - { - volatile const u8 test1 = *GetMemFromAddr(addr); - volatile const u8 test2 = *GetMemFromAddr(addr + size - 1); - } - __except (EXCEPTION_EXECUTE_HANDLER) + if (addr + size > 0x100000000) { return false; } - - return true; - - //const u64 end = addr + size - 1; - //for (auto block : MemoryBlocks) - //{ - // if (block->IsMyAddress(addr) && block->IsMyAddress(end)) - // return true; - //} - - //return false; + else + { + for (u32 i = addr / 4096; i <= (addr + size - 1) / 4096; i++) + { + if (!m_pages[i]) return false; // TODO: define page parameters + } + return true; + } } void Close() @@ -256,11 +258,6 @@ public: LOG_NOTICE(MEMORY, "Closing memory..."); - for (u32 i = 0; i < 32; i++) - { - RawSPUMem[i] = nullptr; - } - for (auto block : MemoryBlocks) { block->Delete(); @@ -268,10 +265,17 @@ public: MemoryBlocks.clear(); +#ifdef _WIN32 if (!VirtualFree(m_base_addr, 0, MEM_RELEASE)) { LOG_ERROR(MEMORY, "VirtualFree(0x%llx) failed", (u64)m_base_addr); } +#else + if (::munmap(m_base_addr, 0x100000000)) + { + LOG_ERROR(MEMORY, "::munmap(0x%llx) failed", (u64)m_base_addr); + } +#endif } void Write8(const u64 addr, const u8 data); diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index 4917846e0c..d58f5d7f17 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -22,17 +22,9 @@ struct MemBlockInfo : public MemInfo { void *mem; - MemBlockInfo(u64 _addr, u32 _size, void* base_addr) - : MemInfo(_addr, PAGE_4K(_size)) - , mem(VirtualAlloc((void*)((u64)base_addr + _addr), PAGE_4K(_size), MEM_COMMIT, PAGE_READWRITE)) - { - if(!mem) - { - LOG_ERROR(MEMORY, "Out of memory or VirtualAlloc() failed (_addr=0x%llx, _size=0x%llx)", _addr, _size); - assert(0); - } - memset(mem, 0, size); - } + MemBlockInfo(u64 _addr, u32 _size); + + void Free(); MemBlockInfo(MemBlockInfo &other) = delete; MemBlockInfo(MemBlockInfo &&other) : MemInfo(other.addr,other.size) ,mem(other.mem) @@ -43,7 +35,7 @@ struct MemBlockInfo : public MemInfo MemBlockInfo& operator =(MemBlockInfo &&other){ this->addr = other.addr; this->size = other.size; - if (this->mem) VirtualFree(this->mem, this->size, MEM_DECOMMIT); + this->Free(); this->mem = other.mem; other.mem = nullptr; return *this; @@ -51,7 +43,7 @@ struct MemBlockInfo : public MemInfo ~MemBlockInfo() { - if (mem) VirtualFree(mem, size, MEM_DECOMMIT); + Free(); mem = nullptr; } }; @@ -85,7 +77,9 @@ public: virtual ~MemoryBlock(); private: + MemBlockInfo* mem_inf; void Init(); + void Free(); void InitMemory(); public: From 52112006d40dca7b82121b11175d04f7a581e268 Mon Sep 17 00:00:00 2001 From: raven02 Date: Tue, 8 Jul 2014 23:18:29 +0800 Subject: [PATCH 127/499] RSX: simplify recale native resolution --- rpcs3/Emu/GS/RSXThread.cpp | 139 +++++++++-------------------------- rpcs3/Emu/GS/RSXThread.h | 3 +- rpcs3/Emu/GS/sysutil_video.h | 7 +- 3 files changed, 40 insertions(+), 109 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 0143dcfe9d..6fcc246e36 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -9,6 +9,37 @@ u32 methodRegisters[0xffff]; +void RSXThread::nativeRescale(float width, float height) +{ + switch (Ini.GSResolution.GetValue()) + { + case 1: // 1920x1080 window size + m_width_scale = 1920 / width * 2.0f; + m_height_scale = 1080 / height * 2.0f; + m_width = 1920; + m_height = 1080; + break; + case 2: // 1280x720 window size + m_width_scale = 1280 / width * 2.0f; + m_height_scale = 720 / height * 2.0f; + m_width = 1280; + m_height = 720; + break; + case 4: // 720x480 window size + m_width_scale = 720 / width * 2.0f; + m_height_scale = 480 / height * 2.0f; + m_width = 720; + m_height = 480; + break; + case 5: // 720x576 window size + m_width_scale = 720 / width * 2.0f; + m_height_scale = 576 / height * 2.0f; + m_width = 720; + m_height = 576; + break; + } +} + u32 GetAddress(u32 offset, u8 location) { switch(location) @@ -1337,112 +1368,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_width = m_buffer_width = re(buffers[m_gcm_current_buffer].width); m_height = m_buffer_height = re(buffers[m_gcm_current_buffer].height); - // Rescale native 1080p to fit 720p/480p window size - if (m_buffer_width == 1920 && m_buffer_height == 1080) - { - switch (Ini.GSResolution.GetValue()) - { - case 2: // 1280x720 window size - m_width_scale = m_height_scale = 1.33f; - m_width = 1280; - m_height = 720; - break; - case 4: // 720x480 window size - m_width_scale = 0.75f; - m_height_scale = 0.88f; - m_width = 720; - m_height = 480; - break; - } - } - - // Rescale native 720p to fit 480p window size - if (m_buffer_width == 1280 && m_buffer_height == 720) - { - if (Ini.GSResolution.GetValue() == 4) // 720x480 window size - { - m_width_scale = 1.125f; - m_height_scale = 1.33f; - m_width = 720; - m_height = 480; - } - } - - // Rescale native 960x540 to fit 1080p/720p/480p window size - if (m_buffer_width == 960 && m_buffer_height == 540) - { - switch (Ini.GSResolution.GetValue()) - { - case 1: // 1920x1080 window size - m_width_scale = m_height_scale = 4.0f; - m_width = 1980; - m_height = 1080; - break; - case 2: // 1280x720 window size - m_width_scale = m_height_scale = 2.66f; - m_width = 1280; - m_height = 720; - break; - case 4: // 720x480 window size - m_width_scale = 1.5f; - m_height_scale = 1.77f; - m_width = 720; - m_height = 480; - break; - } - } - - // Rescale native 960x1080 to fit 1080p/720p/480p window size - if (m_buffer_width == 960 && m_buffer_height == 1080) - { - switch (Ini.GSResolution.GetValue()) - { - case 1: // 1920x1080 window size - m_width_scale = 4.0f; - m_height_scale = 2.0f; - m_width = 1980; - m_height = 1080; - break; - case 2: // 1280x720 window size - m_width_scale = 2.66f; - m_height_scale = 1.33f; - m_width = 1280; - m_height = 720; - break; - case 4: // 720x480 window size - m_width_scale = 1.5f; - m_height_scale = 0.88f; - m_width = 720; - m_height = 480; - break; - } - } - - // Rescale native 1024x768 to fit 1080p/720p/480p window size - if (m_buffer_width == 1024 && m_buffer_height == 768) - { - switch (Ini.GSResolution.GetValue()) - { - case 1: // 1920x1080 window size - m_width_scale = 3.75f; - m_height_scale = 2.81f; - m_width = 1980; - m_height = 1080; - break; - case 2: // 1280x720 window size - m_width_scale = 2.5f; - m_height_scale = 1.87f; - m_width = 1280; - m_height = 720; - break; - case 4: // 720x480 window size - m_width_scale = 1.4f; - m_height_scale = 1.25f; - m_width = 720; - m_height = 480; - break; - } - } + // Rescale native resolution to fit 1080p/720p/480p/576p window size + nativeRescale((float)m_buffer_width, (float)m_buffer_height); } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 10c8ef83bb..3dd6abbf58 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -595,7 +595,8 @@ protected: u32 OutOfArgsCount(const uint x, const u32 cmd, const u32 count); void DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u32 count); - + void nativeRescale(float width, float height); + virtual void OnInit() = 0; virtual void OnInitThread() = 0; virtual void OnExitThread() = 0; diff --git a/rpcs3/Emu/GS/sysutil_video.h b/rpcs3/Emu/GS/sysutil_video.h index 5be7d76c36..b0d03c6323 100644 --- a/rpcs3/Emu/GS/sysutil_video.h +++ b/rpcs3/Emu/GS/sysutil_video.h @@ -231,6 +231,7 @@ static const CellVideoOutResolution ResolutionTable[] = {1600, 1080}, //10 - 5 {1440, 1080}, //11 - 6 {1280, 1080}, //12 - 7 + {960, 1080}, //13 - 8 }; inline static u32 ResolutionIdToNum(u32 id) @@ -250,9 +251,10 @@ inline static u32 ResolutionIdToNum(u32 id) 5, //10 6, //11 7, //12 + 8, //13 }; - return id <= 12 ? res[id] : 0; + return id <= 13 ? res[id] : 0; } inline static u32 ResolutionNumToId(u32 num) @@ -267,7 +269,8 @@ inline static u32 ResolutionNumToId(u32 num) 10, //5 11, //6 12, //7 + 13, //8 }; - return num <= 7 ? res[num] : 0; + return num <= 8 ? res[num] : 0; } From ba3838f54c834f3d7b79970d8a16afda2a6c5649 Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 9 Jul 2014 01:58:01 +1000 Subject: [PATCH 128/499] Qt: Update to Qt 5.2 code base. Makes the code much simpler! --- rpcs3/rpcs3qt/glviewer.cpp | 112 +++++++++++++------------------------ rpcs3/rpcs3qt/glviewer.h | 32 +++++++---- rpcs3/rpcs3qt/main.cpp | 2 +- rpcs3/rpcs3qt/qml/main.qml | 29 +++++----- 4 files changed, 77 insertions(+), 98 deletions(-) diff --git a/rpcs3/rpcs3qt/glviewer.cpp b/rpcs3/rpcs3qt/glviewer.cpp index 22128e5c72..f05546ef04 100644 --- a/rpcs3/rpcs3qt/glviewer.cpp +++ b/rpcs3/rpcs3qt/glviewer.cpp @@ -1,88 +1,56 @@ #include "glviewer.h" #include #include -#include #include -GLViewer::GLViewer(QQuickItem* parent) - : QQuickItem(parent), - m_timerID(0), - m_fbo(0) -{ - this->setFlag(QQuickItem::ItemHasContents); -} +// This class hooks beforeRendering and allows us to draw a scene and reset GL state. +// In future, we will likely want to manually control the update rate. -GLViewer::~GLViewer() -{ - this->cleanup(); -} +void GLRenderer::paint() { + // Do GL here + glViewport(0, 0, m_viewportSize.width(), m_viewportSize.height()); -void GLViewer::timerEvent(QTimerEvent* evt) -{ - if (evt && evt->timerId() == m_timerID) - this->update(); -} - -QSGNode* GLViewer::updatePaintNode(QSGNode* node, UpdatePaintNodeData* data) -{ - QSGSimpleTextureNode* textureNode = static_cast(node); - if (!textureNode) - textureNode = new QSGSimpleTextureNode(); - // Push Qt state. - glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS); - glPushAttrib(GL_ALL_ATTRIB_BITS); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - - glShadeModel(GL_FLAT); - glDisable(GL_CULL_FACE); - glDisable(GL_LIGHTING); - glDisable(GL_STENCIL_TEST); glDisable(GL_DEPTH_TEST); + + // Draw blue to the window to show that we work + glClearColor(0.2, 0, 0.8, 1); + glClear(GL_COLOR_BUFFER_BIT); + glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + // Put the GL state back to how it was in case it makes SceneGraph angry + ((QQuickWindow*)sender())->resetOpenGLState(); +} - delete m_fbo; - m_fbo = 0; - int width = this->width(); - int height = this->height(); - if (width && height) { - m_fbo = new QOpenGLFramebufferObject(width, height); - textureNode->setTexture(this->window()->createTextureFromId(m_fbo->texture(), m_fbo->size())); +GLViewer::GLViewer() + : m_renderer(0) +{ + connect(this, SIGNAL(windowChanged(QQuickWindow*)), this, SLOT(handleWindowChanged(QQuickWindow*))); +} + +void GLViewer::handleWindowChanged(QQuickWindow *win) +{ + if (win) { + connect(win, SIGNAL(beforeSynchronizing()), this, SLOT(sync()), Qt::DirectConnection); + connect(win, SIGNAL(sceneGraphInvalidated()), this, SLOT(cleanup()), Qt::DirectConnection); + // We will take over from here + win->setClearBeforeRendering(false); } - else - { - textureNode->setTexture(this->window()->createTextureFromId(0, QSize(0,0))); +} + +void GLViewer::sync() +{ + if (!m_renderer) { + m_renderer = new GLRenderer(); + connect(window(), SIGNAL(beforeRendering()), m_renderer, SLOT(paint()), Qt::DirectConnection); } - textureNode->setRect(this->boundingRect()); - - if (m_fbo) { - m_fbo->bind(); - } - // Restore (pop) Qt state. - glMatrixMode(GL_TEXTURE); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glPopAttrib(); - glPopClientAttrib(); - - if (!m_timerID) - m_timerID = this->startTimer(16); - - return textureNode; + m_renderer->setViewportSize(window()->size() * window()->devicePixelRatio()); } void GLViewer::cleanup() { - this->killTimer(m_timerID); - m_timerID = 0; - delete m_fbo; - m_fbo = nullptr; + if (m_renderer) { + delete m_renderer; + m_renderer = 0; + } } + diff --git a/rpcs3/rpcs3qt/glviewer.h b/rpcs3/rpcs3qt/glviewer.h index 7ff0009158..177e8607f3 100644 --- a/rpcs3/rpcs3qt/glviewer.h +++ b/rpcs3/rpcs3qt/glviewer.h @@ -1,23 +1,35 @@ #pragma once #include -#include + +class GLRenderer : public QObject { + Q_OBJECT +public: + GLRenderer() { } + + void setViewportSize(const QSize &size) { m_viewportSize = size; } + +public slots: + void paint(); + +private: + QSize m_viewportSize; +}; class GLViewer : public QQuickItem { - Q_OBJECT + Q_OBJECT public: - GLViewer(QQuickItem* parent = 0); - virtual ~GLViewer(); + GLViewer(); + ~GLViewer() { cleanup(); } -protected: - QSGNode* updatePaintNode(QSGNode* old, UpdatePaintNodeData* data); - void timerEvent(QTimerEvent* evt); +public slots: + void sync(); + void cleanup(); private slots: - void cleanup(); + void handleWindowChanged(QQuickWindow *win); private: - int m_timerID; - QOpenGLFramebufferObject* m_fbo; + GLRenderer *m_renderer; }; diff --git a/rpcs3/rpcs3qt/main.cpp b/rpcs3/rpcs3qt/main.cpp index 0aef5b2ab2..5bc3c32cc9 100644 --- a/rpcs3/rpcs3qt/main.cpp +++ b/rpcs3/rpcs3qt/main.cpp @@ -1,4 +1,4 @@ -// Qt5.1+ frontend implementation for rpcs3. Known to work on Windows, Linux, Mac +// Qt5.2+ frontend implementation for rpcs3. Known to work on Windows, Linux, Mac // by Sacha Refshauge #include #include diff --git a/rpcs3/rpcs3qt/qml/main.qml b/rpcs3/rpcs3qt/qml/main.qml index d115717bde..0231af1a73 100644 --- a/rpcs3/rpcs3qt/qml/main.qml +++ b/rpcs3/rpcs3qt/qml/main.qml @@ -1,6 +1,6 @@ -import QtQuick 2.1 -import QtQuick.Controls 1.0 -import QtQuick.Window 2.0 +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Window 2.1 import GLViewer 1.0 ApplicationWindow { @@ -44,19 +44,18 @@ ApplicationWindow { MenuItem { text: qsTr("&About...") } } } - GLViewer { - anchors.fill: parent - Rectangle { - color: Qt.rgba(0, 0.5, 0.35); - height: Math.round(parent.height / 2) - width: height - radius: width + GLViewer {} + Rectangle { + color: Qt.rgba(0, 0.5, 0.35); + height: Math.round(parent.height / 2) + width: height + radius: width + anchors.centerIn: parent + Text { anchors.centerIn: parent - Text { - anchors.centerIn: parent - font.pixelSize: parent.height / 2 - text: "Qt" - } + font.pixelSize: parent.height / 2 + text: "Qt" } } + } From 2ba5ada9f81203666297beedc1e85274daa98db3 Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 9 Jul 2014 02:26:31 +1000 Subject: [PATCH 129/499] Qt: Update to match rest of emu. --- rpcs3/rpcs3qt/qml/main.qml | 10 ++++++---- rpcs3/rpcs3qt/rpcs3qt.pro | 2 +- rpcs3/stdafx.h | 6 ++++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/rpcs3/rpcs3qt/qml/main.qml b/rpcs3/rpcs3qt/qml/main.qml index 0231af1a73..e6307bc49b 100644 --- a/rpcs3/rpcs3qt/qml/main.qml +++ b/rpcs3/rpcs3qt/qml/main.qml @@ -6,16 +6,16 @@ import GLViewer 1.0 ApplicationWindow { visible: true title: qsTr("RPCS3 Qt") - width: 500 - height: 500 + width: Screen.desktopAvailableWidth / 2 + height: Screen.desktopAvailableHeight / 2 menuBar: MenuBar { Menu { title: qsTr("&Boot") MenuItem { text: qsTr("&Boot Game...") } + MenuItem { text: qsTr("&Boot Game and Start...") } MenuItem { text: qsTr("&Install PKG") } MenuSeparator {} - MenuItem { text: qsTr("Boot &ELF") } - MenuItem { text: qsTr("Boot &SELF") } + MenuItem { text: qsTr("Boot &(S)ELF") } MenuSeparator {} MenuItem { text: qsTr("E\&xit"); onTriggered: Qt.quit() } } @@ -30,6 +30,7 @@ ApplicationWindow { Menu { title: qsTr("&Config") MenuItem { text: qsTr("&Settings") } + MenuItem { text: qsTr("&PAD Settings") } MenuSeparator {} MenuItem { text: qsTr("Virtual &File System Manager") } MenuItem { text: qsTr("Virtual &HDD Manager") } @@ -38,6 +39,7 @@ ApplicationWindow { title: qsTr("&Tools") MenuItem { text: qsTr("&ELF Compiler") } MenuItem { text: qsTr("&Memory Viewer") } + MenuItem { text: qsTr("&RSX Debugger") } } Menu { title: qsTr("&Help") diff --git a/rpcs3/rpcs3qt/rpcs3qt.pro b/rpcs3/rpcs3qt/rpcs3qt.pro index 977c740315..6bdf680161 100644 --- a/rpcs3/rpcs3qt/rpcs3qt.pro +++ b/rpcs3/rpcs3qt/rpcs3qt.pro @@ -1,4 +1,4 @@ -# Qt5.1+ project for rpcs3. Works on Windows, Linux and Mac OSX +# Qt5.2+ project for rpcs3. Works on Windows, Linux and Mac OSX QT += gui opengl quick CONFIG += c++11 diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 77a9cac9b3..4fbb2d8d3e 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -50,6 +50,10 @@ #endif // _DEBUG #endif // MSVC_CRT_MEMLEAK_DETECTION +// This header should be frontend-agnostic, so don't assume wx includes everything +#include +#include +#include #include typedef unsigned int uint; @@ -302,7 +306,9 @@ enum Status #include "Emu/FS/vfsStreamMemory.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" +#ifndef QT_UI #include "rpcs3.h" +#endif #define _PRGNAME_ "RPCS3" #define _PRGVER_ "0.0.0.4" From 34590bc88469f5dc040b8fef5609a2932436a8bd Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 8 Jul 2014 21:08:56 +0400 Subject: [PATCH 130/499] Small fix --- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 1 + rpcs3/Emu/Memory/Memory.h | 1 + 2 files changed, 2 insertions(+) diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 77e50c8869..fb45886bbf 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -87,6 +87,7 @@ bool DynamicMemoryBlockBase::AllocFixed(u64 addr, u32 size) if (IsMyAddress(addr) || IsMyAddress(addr + size - 1)) { + assert(0); return false; } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 9f682a0c5f..bd06a5e56d 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -187,6 +187,7 @@ public: m_base_addr = nullptr; LOG_ERROR(MEMORY, "Initing memory failed"); assert(0); + return; } else { From 6e77f80d5f57511c110a433f24473e4d04b50d57 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 8 Jul 2014 21:18:12 +0400 Subject: [PATCH 131/499] Small fix 2 --- rpcs3/Emu/Memory/Memory.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index bd06a5e56d..4eea68c630 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -1,4 +1,9 @@ #pragma once + +#ifndef _WIN32 +#include +#endif + #include "Emu/SysCalls/Callback.h" #include "MemoryBlock.h" #include From 0299ab7660f8bc22d1019a3b3627b28c2d4f78fb Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 9 Jul 2014 06:33:57 +1000 Subject: [PATCH 132/499] wxRemoval: Ini.cpp --- rpcs3/Ini.cpp | 120 ++++++++++++++------------------------------------ 1 file changed, 33 insertions(+), 87 deletions(-) diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index 6dbfa06ec4..cf85609394 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -5,6 +5,7 @@ #include #include +#include #define DEF_CONFIG_NAME "./rpcs3.ini" @@ -27,28 +28,18 @@ void saveIniFile() } std::pair rDefaultSize = { -1, -1 }; +std::pair rDefaultPosition = { -1, -1 }; Inis Ini; -static bool StringToBool(const wxString& str) +static bool StringToBool(const std::string& str) { - if ( - !str.CmpNoCase("enable") || - !str.CmpNoCase("e") || - !str.CmpNoCase("1") || - !str.CmpNoCase("true") || - !str.CmpNoCase("t")) - { - return true; - } - - return false; + return std::regex_match(str.begin(), str.end(), + std::regex("1|e|t|enable|true", std::regex_constants::icase)); } -static wxString BoolToString(const bool b) +static inline std::string BoolToString(const bool b) { - if (b) return "true"; - - return "false"; + return b ? "true" : "false"; } //takes a string of format "[number]x[number]" and returns a pair of ints @@ -56,37 +47,21 @@ static wxString BoolToString(const bool b) static std::pair StringToSize(const std::string& str) { std::pair ret; + std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x"), -1), last; + std::vector vec(first, last); + if (vec.size() < 2) + return rDefaultSize; - std::string s[2] = { "", "" }; - - for (uint i = 0, a = 0; i= 2) return rDefaultSize; - continue; - } - - s[a] += str.substr(i, 1); + try { + ret.first = std::stoi(vec.at(0)); + ret.second = std::stoi(vec.at(1)); } - - if (s[0].empty() || s[1].empty()) - { + catch (const std::invalid_argument& e) { return rDefaultSize; } - try{ - ret.first = std::stoi(s[0]); - ret.first = std::stoi(s[1]); - } - catch (const std::invalid_argument &e) - { - return rDefaultSize; - } if (ret.first < 0 || ret.second < 0) - { return rDefaultSize; - } return ret; } @@ -96,35 +71,19 @@ static std::string SizeToString(const std::pair& size) return fmt::Format("%dx%d", size.first, size.second); } -static wxPoint StringToPosition(const wxString& str) +static std::pair StringToPosition(const std::string& str) { - wxPoint ret; + std::pair ret; + std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x"), -1), last; + std::vector vec(first, last); + if (vec.size() < 2) + return rDefaultPosition; - wxString s[2] = { wxEmptyString, wxEmptyString }; + ret.first = std::strtol(vec.at(0).c_str(), nullptr, 10); + ret.second = std::strtol(vec.at(1).c_str(), nullptr, 10); - for (uint i = 0, a = 0; i= 2) return wxDefaultPosition; - continue; - } - - s[a] += str(i, 1); - } - - if (s[0].IsEmpty() || s[1].IsEmpty()) - { - return wxDefaultPosition; - } - - s[0].ToLong((long*)&ret.x); - s[1].ToLong((long*)&ret.y); - - if (ret.x <= 0 || ret.y <= 0) - { - return wxDefaultPosition; - } + if (ret.first <= 0 || ret.second <= 0) + return rDefaultPosition; return ret; } @@ -133,29 +92,16 @@ static WindowInfo StringToWindowInfo(const std::string& str) { WindowInfo ret = WindowInfo(rDefaultSize, rDefaultSize); - std::string s[4] = { "", "", "", "" }; - - for (uint i = 0, a = 0; i= 4) return WindowInfo::GetDefault(); - continue; - } - - s[a] += str.substr(i, 1); - } - - if (s[0].empty() || s[1].empty() || s[2].empty() || s[3].empty()) - { + std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x|:"), -1), last; + std::vector vec(first, last); + if (vec.size() < 4) return WindowInfo::GetDefault(); - } try{ - ret.size.first = std::stoi(s[0]); - ret.size.second = std::stoi(s[1]); - ret.position.first = std::stoi(s[2]); - ret.position.second = std::stoi(s[3]); + ret.size.first = std::stoi(vec.at(0)); + ret.size.second = std::stoi(vec.at(1)); + ret.position.first = std::stoi(vec.at(2)); + ret.position.second = std::stoi(vec.at(3)); } catch (const std::invalid_argument &e) { @@ -246,4 +192,4 @@ WindowInfo Ini::Load(const std::string& section, const std::string& key, const W { return StringToWindowInfo(m_Config->GetValue(section.c_str(), key.c_str(), WindowInfoToString(def_value).c_str())); saveIniFile(); -} \ No newline at end of file +} From 123c4ba1a8bd83230a047eb8941ac78ab7276184 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 9 Jul 2014 03:04:36 +0400 Subject: [PATCH 133/499] Some bugs fixed --- Utilities/Log.cpp | 2 +- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 4 ++++ rpcs3/Emu/Memory/Memory.h | 18 ++++++++++++++---- rpcs3/Emu/Memory/MemoryBlock.h | 12 +++++++++--- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 6 +++++- rpcs3/Emu/System.cpp | 5 ++++- rpcs3/Loader/ELF32.cpp | 2 +- 7 files changed, 38 insertions(+), 11 deletions(-) diff --git a/Utilities/Log.cpp b/Utilities/Log.cpp index 180f77bff3..7f6b68fcb4 100644 --- a/Utilities/Log.cpp +++ b/Utilities/Log.cpp @@ -194,7 +194,7 @@ void LogManager::log(LogMessage msg) } if (NamedThreadBase* thr = GetCurrentNamedThread()) { - prefix += thr->GetThreadName(); + prefix += "{" + thr->GetThreadName() + "} "; } msg.mText.insert(0, prefix); msg.mText.append(1,'\n'); diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index fb45886bbf..6bc225daca 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -161,6 +161,8 @@ u64 DynamicMemoryBlockBase::AllocAlign(u32 size, u32 align) addr = (addr + (align - 1)) & ~(align - 1); } + //LOG_NOTICE(MEMORY, "AllocAlign(size=0x%x) -> 0x%llx", size, addr); + AppendMem(addr, size); return addr; @@ -202,6 +204,8 @@ bool DynamicMemoryBlockBase::Free(u64 addr) m_pages[i] = nullptr; } + //LOG_NOTICE(MEMORY, "Free(0x%llx)", addr); + m_allocated.erase(m_allocated.begin() + num); return true; } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 4eea68c630..c363528f3f 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -78,18 +78,32 @@ public: void RegisterPages(u64 addr, u32 size) { + std::lock_guard lock(m_mutex); + + //LOG_NOTICE(MEMORY, "RegisterPages(addr=0x%llx, size=0x%x)", addr, size); for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) { if (i >= sizeof(m_pages) / sizeof(m_pages[0])) break; + if (m_pages[i]) + { + LOG_ERROR(MEMORY, "Page already registered (page=0x%x)", i * 4096); + } m_pages[i] = 1; // TODO: define page parameters } } void UnregisterPages(u64 addr, u32 size) { + std::lock_guard lock(m_mutex); + + //LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size); for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) { if (i >= sizeof(m_pages) / sizeof(m_pages[0])) break; + if (!m_pages[i]) + { + LOG_ERROR(MEMORY, "Page not registered (page=0x%x)", i * 4096); + } m_pages[i] = 0; // TODO: define page parameters } } @@ -173,8 +187,6 @@ public: void Init(MemoryType type) { - std::lock_guard lock(m_mutex); - if(m_inited) return; m_inited = true; @@ -257,8 +269,6 @@ public: void Close() { - std::lock_guard lock(m_mutex); - if(!m_inited) return; m_inited = false; diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index d58f5d7f17..caac4efc56 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -27,15 +27,21 @@ struct MemBlockInfo : public MemInfo void Free(); MemBlockInfo(MemBlockInfo &other) = delete; - MemBlockInfo(MemBlockInfo &&other) : MemInfo(other.addr,other.size) ,mem(other.mem) + + MemBlockInfo(MemBlockInfo &&other) + : MemInfo(other.addr,other.size) + , mem(other.mem) { other.mem = nullptr; } + MemBlockInfo& operator =(MemBlockInfo &other) = delete; - MemBlockInfo& operator =(MemBlockInfo &&other){ + + MemBlockInfo& operator =(MemBlockInfo &&other) + { + this->Free(); this->addr = other.addr; this->size = other.size; - this->Free(); this->mem = other.mem; other.mem = nullptr; return *this; diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 8546d26345..ed40ca711e 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -144,7 +144,11 @@ s32 cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if (nread.GetAddr() && !nread.IsGood()) return CELL_EFAULT; + if (nread.GetAddr() && !nread.IsGood()) + { + sys_fs->Error("cellFsRead(): bad nread_addr(0x%x)", nread.GetAddr()); + return CELL_EFAULT; + } if (nbytes != (u32)nbytes) return CELL_ENOMEM; diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 54254c4f62..b44a4000a4 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -201,6 +201,10 @@ void Emulator::Load() switch(l.GetMachine()) { case MACHINE_SPU: + Memory.Init(Memory_PS3); + Memory.MainMem.AllocFixed(Memory.MainMem.GetStartAddr(), 0x40000); + break; + case MACHINE_PPC64: Memory.Init(Memory_PS3); break; @@ -263,7 +267,6 @@ void Emulator::Load() LOG_NOTICE(LOADER, "offset = 0x%llx", Memory.MainMem.GetStartAddr()); LOG_NOTICE(LOADER, "max addr = 0x%x", l.GetMaxAddr()); thread.SetOffset(Memory.MainMem.GetStartAddr()); - Memory.MainMem.AllocFixed(Memory.MainMem.GetStartAddr() + l.GetMaxAddr(), 0xFFFFED - l.GetMaxAddr()); thread.SetEntry(l.GetEntry() - Memory.MainMem.GetStartAddr()); break; diff --git a/rpcs3/Loader/ELF32.cpp b/rpcs3/Loader/ELF32.cpp index 5765974566..4e736e34e2 100644 --- a/rpcs3/Loader/ELF32.cpp +++ b/rpcs3/Loader/ELF32.cpp @@ -236,7 +236,7 @@ bool ELF32Loader::LoadPhdrData(u64 _offset) switch(machine) { - case MACHINE_SPU: Memory.MainMem.AllocFixed(phdr_arr[i].p_vaddr + offset, phdr_arr[i].p_memsz); break; + case MACHINE_SPU: break; case MACHINE_MIPS: Memory.PSPMemory.RAM.AllocFixed(phdr_arr[i].p_vaddr + offset, phdr_arr[i].p_memsz); break; case MACHINE_ARM: Memory.PSVMemory.RAM.AllocFixed(phdr_arr[i].p_vaddr + offset, phdr_arr[i].p_memsz); break; From dd382b2afc941f0bdc9f2c1239f19c52a7d4bdb5 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Fri, 4 Jul 2014 10:29:31 +0200 Subject: [PATCH 134/499] add files to allow for packaging on teamcity add initial appveyor script add submodule update before build add msbuild cmd remove msbuild cmd make script runnable locally add solution without wxwdigets add initial appveyor script add submodule update before build add msbuild cmd remove msbuild cmd add packaging step to appveyor add ftp upload test use msbuild explicitly doesn't seem to work otherwise temporarily remove deploy script temporarily remove build script remove non-essential stuff add back some stuff set artifact path update artifact stuff try to add back deploy add build step again, *sigh* add some more build settings add build sript style build again download wxwidgets instead of building remove quite flag for debugging add cert igonre to download dont redundantly add folder use a seperate solution without wxwidgets dependencies only use the rpcs3 7z as artifact to avoid re-packaging wxwidgets, also comment out deployment, since I don't have acccess to the main account to add secure strings Conflicts: package.bat --- appveyor.yml | 56 ++++++++++++++++++++++++++++++++++++++++++++++ package.bat | 8 +++---- rpcs3_buildbot.sln | 54 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 appveyor.yml create mode 100644 rpcs3_buildbot.sln diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000000..9ebfa5fbe6 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,56 @@ + + +# version format +version: 0.1.{build} + +branches: + only: + - appveyorbuild + # blacklist + #except: + # - gh-pages + +#---------------------------------# +# environment configuration # +#---------------------------------# + +# clone directory +clone_folder: c:\projects\rpcs3 + +platform: + - x64 + +configuration: + - Release + +install: + - cmd: cinst wget -x86 + - cmd: cinst 7zip.commandline -x86 + - cmd: git submodule update --init --recursive .\ffmpeg .\asmjit + - cmd: wget -q --no-check-certificate https://googledrive.com/host/0B3tDmChwjRbRTTdhaTFOeGN1eEU/wxWidgets.7z -O c:\projects\rpcs3\wxwidgets.7z + - cmd: 7z x C:\projects\rpcs3\wxwidgets.7z -oc:\projects\rpcs3\wxWidgets + +build: + +build_script: + - msbuild /m /p:Configuration=Release rpcs3_buildbot.sln + +after_build: + - cmd: package.bat + +artifacts: + - path: .\rpcs3*.7z + +deploy: OFF +# - provider: FTP +# server: +# secure: kZT7rsbEPGQ0fC2GFRBGfL2vPwUgih2JkwjbSuw00T8= +# username: +# secure: YJzwsi4wfSezFLqaB9uiww== +# password: +# secure: EQ3xa2LoRgelAdE57+qakQ== +# folder: .\rpcs3\ +# enable_ssl: false + +test: OFF + diff --git a/package.bat b/package.bat index 8d6fe2cbe6..1bff43a141 100644 --- a/package.bat +++ b/package.bat @@ -5,16 +5,16 @@ copy bin\soft-oal.dll build\rpcs3 copy bin\make_fself.cmd build\rpcs3 mkdir build\rpcs3\dev_hdd1 -xcopy /Y /e bin\dev_hdd1 build\rpcs3\dev_hdd1 +xcopy /e bin\dev_hdd1 build\rpcs3\dev_hdd1 mkdir build\rpcs3\dev_hdd0 -xcopy /Y /e bin\dev_hdd0 build\rpcs3\dev_hdd0 +xcopy /e bin\dev_hdd0 build\rpcs3\dev_hdd0 mkdir build\rpcs3\dev_flash -xcopy /Y /e bin\dev_flash build\rpcs3\dev_flash +xcopy /e bin\dev_flash build\rpcs3\dev_flash mkdir build\rpcs3\dev_usb000 -xcopy /Y /e bin\dev_usb000 build\rpcs3\dev_usb000 +xcopy /e bin\dev_usb000 build\rpcs3\dev_usb000 for /f "delims=" %%a in ('git describe') do @set gitrev=%%a diff --git a/rpcs3_buildbot.sln b/rpcs3_buildbot.sln new file mode 100644 index 0000000000..2945457917 --- /dev/null +++ b/rpcs3_buildbot.sln @@ -0,0 +1,54 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2013 for Windows Desktop +VisualStudioVersion = 12.0.30501.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rpcs3", "rpcs3\rpcs3.vcxproj", "{70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}" + ProjectSection(ProjectDependencies) = postProject + {AC40FF01-426E-4838-A317-66354CEFAE88} = {AC40FF01-426E-4838-A317-66354CEFAE88} + {C4A10229-4712-4BD2-B63E-50D93C67A038} = {C4A10229-4712-4BD2-B63E-50D93C67A038} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "stblib", "stblib", "{9D839DFB-76E6-4F10-8EED-BA2AC7CC3FB6}" + ProjectSection(SolutionItems) = preProject + stblib\stb_image.c = stblib\stb_image.c + stblib\stb_image.h = stblib\stb_image.h + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asmjit", "asmjitsrc\asmjit.vcxproj", "{AC40FF01-426E-4838-A317-66354CEFAE88}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "asmjit", "asmjit", "{E2A982F2-4B1A-48B1-8D77-A17A589C58D7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "emucore", "rpcs3\emucore.vcxproj", "{C4A10229-4712-4BD2-B63E-50D93C67A038}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug - MemLeak|x64 = Debug - MemLeak|x64 + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Debug - MemLeak|x64.ActiveCfg = Debug - MemLeak|x64 + {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Debug - MemLeak|x64.Build.0 = Debug - MemLeak|x64 + {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Debug|x64.ActiveCfg = Debug|x64 + {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Debug|x64.Build.0 = Debug|x64 + {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Release|x64.ActiveCfg = Release|x64 + {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Release|x64.Build.0 = Release|x64 + {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug - MemLeak|x64.ActiveCfg = Debug|x64 + {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug|x64.ActiveCfg = Debug|x64 + {AC40FF01-426E-4838-A317-66354CEFAE88}.Debug|x64.Build.0 = Debug|x64 + {AC40FF01-426E-4838-A317-66354CEFAE88}.Release|x64.ActiveCfg = Release|x64 + {AC40FF01-426E-4838-A317-66354CEFAE88}.Release|x64.Build.0 = Release|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Debug - MemLeak|x64.ActiveCfg = Debug - MemLeak|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Debug - MemLeak|x64.Build.0 = Debug - MemLeak|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Debug|x64.ActiveCfg = Debug|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Debug|x64.Build.0 = Debug|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Release|x64.ActiveCfg = Release|x64 + {C4A10229-4712-4BD2-B63E-50D93C67A038}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {AC40FF01-426E-4838-A317-66354CEFAE88} = {E2A982F2-4B1A-48B1-8D77-A17A589C58D7} + EndGlobalSection +EndGlobal From 10d9c3e4126fb270232845d9087abf601c133199 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Wed, 9 Jul 2014 17:27:20 +0200 Subject: [PATCH 135/499] add back /Y flag on xcopy to make sure no stdin input is requuired --- package.bat | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.bat b/package.bat index 1bff43a141..8d6fe2cbe6 100644 --- a/package.bat +++ b/package.bat @@ -5,16 +5,16 @@ copy bin\soft-oal.dll build\rpcs3 copy bin\make_fself.cmd build\rpcs3 mkdir build\rpcs3\dev_hdd1 -xcopy /e bin\dev_hdd1 build\rpcs3\dev_hdd1 +xcopy /Y /e bin\dev_hdd1 build\rpcs3\dev_hdd1 mkdir build\rpcs3\dev_hdd0 -xcopy /e bin\dev_hdd0 build\rpcs3\dev_hdd0 +xcopy /Y /e bin\dev_hdd0 build\rpcs3\dev_hdd0 mkdir build\rpcs3\dev_flash -xcopy /e bin\dev_flash build\rpcs3\dev_flash +xcopy /Y /e bin\dev_flash build\rpcs3\dev_flash mkdir build\rpcs3\dev_usb000 -xcopy /e bin\dev_usb000 build\rpcs3\dev_usb000 +xcopy /Y /e bin\dev_usb000 build\rpcs3\dev_usb000 for /f "delims=" %%a in ('git describe') do @set gitrev=%%a From 711f9eadc5c15d40243a8f83fc7aaf4ef5407f12 Mon Sep 17 00:00:00 2001 From: Sacha Date: Thu, 10 Jul 2014 05:16:17 +1000 Subject: [PATCH 136/499] Revert some changes until GCC 4.9 is available. --- .travis.yml | 7 +++++-- rpcs3/Ini.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index bdf0fec902..4866b49c1d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,9 @@ branches: only: - master +git: + submodules: false + before_install: - echo "yes" | sudo apt-key adv --fetch-keys http://repos.codelite.org/CodeLite.asc - echo "yes" | sudo apt-add-repository 'deb http://repos.codelite.org/wx3.0/ubuntu/ precise universe' @@ -25,11 +28,11 @@ before_install: sudo ./cmake-2.8.12.1-Linux-i386.sh --skip-license --prefix=/usr; before_script: - - git submodule update --init --recursive + - git submodule update --init asmjit ffmpeg - mkdir build - cd build - cmake .. script: - - make + - make -j 4 diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index cf85609394..ac0086f543 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -47,14 +47,33 @@ static inline std::string BoolToString(const bool b) static std::pair StringToSize(const std::string& str) { std::pair ret; + +#if 1 + std::string s[2] = { "", "" }; + + for (uint i = 0, a = 0; i= 2) return rDefaultSize; + continue; + } + + s[a] += str.substr(i, 1); + } + + if (s[0].empty() || s[1].empty()) +#else + // Requires GCC 4.9 or new stdlib for Clang std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x"), -1), last; - std::vector vec(first, last); + std::vector s(first, last); if (vec.size() < 2) +#endif return rDefaultSize; try { - ret.first = std::stoi(vec.at(0)); - ret.second = std::stoi(vec.at(1)); + ret.first = std::stoi(s[0]); + ret.second = std::stoi(s[1]); } catch (const std::invalid_argument& e) { return rDefaultSize; @@ -71,7 +90,8 @@ static std::string SizeToString(const std::pair& size) return fmt::Format("%dx%d", size.first, size.second); } -static std::pair StringToPosition(const std::string& str) +// Unused? +/*static std::pair StringToPosition(const std::string& str) { std::pair ret; std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x"), -1), last; @@ -86,22 +106,40 @@ static std::pair StringToPosition(const std::string& str) return rDefaultPosition; return ret; -} +}*/ static WindowInfo StringToWindowInfo(const std::string& str) { WindowInfo ret = WindowInfo(rDefaultSize, rDefaultSize); +#if 1 + std::string s[4] = { "", "", "", "" }; + + for (uint i = 0, a = 0; i= 4) return WindowInfo::GetDefault(); + continue; + } + + s[a] += str.substr(i, 1); + } + + if (s[0].empty() || s[1].empty() || s[2].empty() || s[3].empty()) +#else + // Requires GCC 4.9 or new stdlib for Clang std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x|:"), -1), last; - std::vector vec(first, last); + std::vector s(first, last); if (vec.size() < 4) +#endif return WindowInfo::GetDefault(); try{ - ret.size.first = std::stoi(vec.at(0)); - ret.size.second = std::stoi(vec.at(1)); - ret.position.first = std::stoi(vec.at(2)); - ret.position.second = std::stoi(vec.at(3)); + ret.size.first = std::stoi(s[0]); + ret.size.second = std::stoi(s[1]); + ret.position.first = std::stoi(s[2]); + ret.position.second = std::stoi(s[3]); } catch (const std::invalid_argument &e) { From bb0695e76c388ed55d368a70e3d5b0389ff75552 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 10 Jul 2014 00:02:21 +0400 Subject: [PATCH 137/499] Using recursive mutex --- rpcs3/Emu/Memory/Memory.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index c363528f3f..8a9376df3c 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -30,7 +30,7 @@ class MemoryBase void* m_base_addr; std::vector MemoryBlocks; u32 m_pages[0x100000000 / 4096]; // information about every page - std::mutex m_mutex; + std::recursive_mutex m_mutex; public: MemoryBlock* UserMemory; @@ -78,7 +78,7 @@ public: void RegisterPages(u64 addr, u32 size) { - std::lock_guard lock(m_mutex); + std::lock_guard lock(m_mutex); //LOG_NOTICE(MEMORY, "RegisterPages(addr=0x%llx, size=0x%x)", addr, size); for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) @@ -94,7 +94,7 @@ public: void UnregisterPages(u64 addr, u32 size) { - std::lock_guard lock(m_mutex); + std::lock_guard lock(m_mutex); //LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size); for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) @@ -164,7 +164,7 @@ public: void InitRawSPU(MemoryBlock* raw_spu, const u32 num) { - std::lock_guard lock(m_mutex); + std::lock_guard lock(m_mutex); MemoryBlocks.push_back(raw_spu); if (num < sizeof(RawSPUMem) / sizeof(RawSPUMem[0])) RawSPUMem[num] = raw_spu; @@ -172,7 +172,7 @@ public: void CloseRawSPU(MemoryBlock* raw_spu, const u32 num) { - std::lock_guard lock(m_mutex); + std::lock_guard lock(m_mutex); for (int i = 0; i < MemoryBlocks.size(); ++i) { @@ -187,6 +187,8 @@ public: void Init(MemoryType type) { + std::lock_guard lock(m_mutex); + if(m_inited) return; m_inited = true; @@ -269,6 +271,8 @@ public: void Close() { + std::lock_guard lock(m_mutex); + if(!m_inited) return; m_inited = false; @@ -443,7 +447,7 @@ public: bool Map(const u64 dst_addr, const u64 src_addr, const u32 size) { - std::lock_guard lock(m_mutex); + std::lock_guard lock(m_mutex); if(IsGoodAddr(dst_addr) || !IsGoodAddr(src_addr)) { @@ -457,7 +461,7 @@ public: bool Unmap(const u64 addr) { - std::lock_guard lock(m_mutex); + std::lock_guard lock(m_mutex); bool result = false; for(uint i=0; i Date: Thu, 10 Jul 2014 06:49:24 +1000 Subject: [PATCH 138/499] Use an alternative to sregex. --- rpcs3/Ini.cpp | 118 ++++++++++++-------------------------------------- 1 file changed, 27 insertions(+), 91 deletions(-) diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index ac0086f543..008be9c59d 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -27,8 +27,6 @@ void saveIniFile() getIniFile()->SaveFile(DEF_CONFIG_NAME); } -std::pair rDefaultSize = { -1, -1 }; -std::pair rDefaultPosition = { -1, -1 }; Inis Ini; static bool StringToBool(const std::string& str) @@ -46,43 +44,23 @@ static inline std::string BoolToString(const bool b) //example input would be "123x456" and the returned value would be {123,456} static std::pair StringToSize(const std::string& str) { - std::pair ret; - -#if 1 - std::string s[2] = { "", "" }; - - for (uint i = 0, a = 0; i= 2) return rDefaultSize; - continue; + std::size_t start = 0, found; + std::vector vec; + for (int i = 0; i < 2 && (found = str.find_first_of('x', start)); i++) { + try { + vec.push_back(std::stoi(str.substr(start, found == std::string::npos ? found : found - start))); } - - s[a] += str.substr(i, 1); + catch (const std::invalid_argument& e) { + return std::make_pair(-1, -1); + } + if (found == std::string::npos) + break; + start = found + 1; } + if (vec.size() < 2 || vec[0] < 0 || vec[1] < 0) + return std::make_pair(-1, -1); - if (s[0].empty() || s[1].empty()) -#else - // Requires GCC 4.9 or new stdlib for Clang - std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x"), -1), last; - std::vector s(first, last); - if (vec.size() < 2) -#endif - return rDefaultSize; - - try { - ret.first = std::stoi(s[0]); - ret.second = std::stoi(s[1]); - } - catch (const std::invalid_argument& e) { - return rDefaultSize; - } - - if (ret.first < 0 || ret.second < 0) - return rDefaultSize; - - return ret; + return std::make_pair(vec[0], vec[1]); } static std::string SizeToString(const std::pair& size) @@ -90,67 +68,25 @@ static std::string SizeToString(const std::pair& size) return fmt::Format("%dx%d", size.first, size.second); } -// Unused? -/*static std::pair StringToPosition(const std::string& str) -{ - std::pair ret; - std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x"), -1), last; - std::vector vec(first, last); - if (vec.size() < 2) - return rDefaultPosition; - - ret.first = std::strtol(vec.at(0).c_str(), nullptr, 10); - ret.second = std::strtol(vec.at(1).c_str(), nullptr, 10); - - if (ret.first <= 0 || ret.second <= 0) - return rDefaultPosition; - - return ret; -}*/ - static WindowInfo StringToWindowInfo(const std::string& str) { - WindowInfo ret = WindowInfo(rDefaultSize, rDefaultSize); - -#if 1 - std::string s[4] = { "", "", "", "" }; - - for (uint i = 0, a = 0; i= 4) return WindowInfo::GetDefault(); - continue; + std::size_t start = 0, found; + std::vector vec; + for (int i = 0; i < 4 && (found = str.find_first_of("x:", start)); i++) { + try { + vec.push_back(std::stoi(str.substr(start, found == std::string::npos ? found : found - start))); } - - s[a] += str.substr(i, 1); + catch (const std::invalid_argument& e) { + return WindowInfo::GetDefault(); + } + if (found == std::string::npos) + break; + start = found + 1; } - - if (s[0].empty() || s[1].empty() || s[2].empty() || s[3].empty()) -#else - // Requires GCC 4.9 or new stdlib for Clang - std::sregex_token_iterator first(str.begin(), str.end(), std::regex("x|:"), -1), last; - std::vector s(first, last); - if (vec.size() < 4) -#endif + if (vec.size() < 4 || vec[0] <= 0 || vec[1] <= 0 || vec[2] < 0 || vec[3] < 0) return WindowInfo::GetDefault(); - try{ - ret.size.first = std::stoi(s[0]); - ret.size.second = std::stoi(s[1]); - ret.position.first = std::stoi(s[2]); - ret.position.second = std::stoi(s[3]); - } - catch (const std::invalid_argument &e) - { - return WindowInfo::GetDefault(); - } - if (ret.size.first <= 0 || ret.size.second <= 0) - { - return WindowInfo::GetDefault(); - } - - return ret; + return WindowInfo(std::make_pair(vec[0], vec[1]), std::make_pair(vec[2], vec[3])); } static std::string WindowInfoToString(const WindowInfo& wind) From 96fb8b968fb8c065c4e9a96bfe7a439e009d1421 Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 9 Jul 2014 23:46:58 +0800 Subject: [PATCH 139/499] Fix crash in Battle fantasia/Crystal defenders --- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index fdd633f28d..20c8e98c70 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -1266,14 +1266,15 @@ static void blackman(float window[]) window[3] = ((100.f - SEVIRITY) / 100.f + SEVIRITY / 100.f*a3); } -int CreateInterlaceTable(mem32_t ea, float srcH, float dstH, CellRescTableElement depth, int length) +int CreateInterlaceTable(u32 ea_addr, float srcH, float dstH, CellRescTableElement depth, int length) { - float phi[4], transient[4], *buf32 = (float*)ea.GetAddr(); + float phi[4], transient[4]; float y_fraction; float bandwidth = 0.5f / (srcH / dstH); float phi_b = 2.f * M_PI * bandwidth; float window[4]; - u16 *buf16 = (u16*)ea.GetAddr(); + mem16_ptr_t buf16(ea_addr); + mem32_ptr_t buf32(ea_addr); blackman(window); @@ -1312,9 +1313,9 @@ int CreateInterlaceTable(mem32_t ea, float srcH, float dstH, CellRescTableElemen return CELL_OK; } -int cellRescCreateInterlaceTable(mem32_t ea, float srcH, CellRescTableElement depth, int length) +int cellRescCreateInterlaceTable(u32 ea_addr, float srcH, CellRescTableElement depth, int length) { - cellResc->Warning("cellRescCreateInterlaceTable(ea=0x%x, depth = %i, length = %i)", ea.GetAddr(), depth, length); + cellResc->Warning("cellRescCreateInterlaceTable(ea_addr=0x%x, depth = %i, length = %i)", ea_addr, depth, length); if (!s_rescInternalInstance->m_bInitialized) { @@ -1322,7 +1323,7 @@ int cellRescCreateInterlaceTable(mem32_t ea, float srcH, CellRescTableElement de return CELL_RESC_ERROR_NOT_INITIALIZED; } - if ((!ea.IsGood()) || (srcH <= 0.f) || (!(depth == CELL_RESC_ELEMENT_HALF || depth == CELL_RESC_ELEMENT_FLOAT)) || (length <= 0)) + if ((ea_addr == NULL) || (srcH <= 0.f) || (!(depth == CELL_RESC_ELEMENT_HALF || depth == CELL_RESC_ELEMENT_FLOAT)) || (length <= 0)) { cellResc->Error("cellRescCreateInterlaceTable : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_BAD_ARGUMENT; @@ -1337,9 +1338,9 @@ int cellRescCreateInterlaceTable(mem32_t ea, float srcH, CellRescTableElement de float ratioModeCoefficient = (s_rescInternalInstance->m_initConfig.ratioMode != CELL_RESC_LETTERBOX) ? 1.f : (1.f - 2.f * XY_DELTA_LB); float dstH = s_rescInternalInstance->m_dstHeight * ratioModeCoefficient * s_rescInternalInstance->m_ratioAdjY; - if (int retValue = CreateInterlaceTable(ea, srcH, dstH, depth, length) == CELL_OK) + if (int retValue = CreateInterlaceTable(ea_addr, srcH, dstH, depth, length) == CELL_OK) { - s_rescInternalInstance->m_interlaceTableEA = ea; + s_rescInternalInstance->m_interlaceTableEA = ea_addr; s_rescInternalInstance->m_interlaceElement = depth; s_rescInternalInstance->m_interlaceTableLength = length; return CELL_OK; From 22b9afdb601422719d2021d7df85b7a606eaa625 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 10 Jul 2014 04:13:04 +0400 Subject: [PATCH 140/499] Some cleanup 2 --- rpcs3/Emu/CPU/CPUThreadManager.cpp | 20 +-- rpcs3/Emu/Cell/RawSPUThread.cpp | 259 ++++++++++++++++++++++++----- rpcs3/Emu/Cell/SPUThread.h | 27 +-- rpcs3/Emu/GS/RSXThread.cpp | 22 +-- rpcs3/Emu/GS/RSXThread.h | 16 +- 5 files changed, 262 insertions(+), 82 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index e2e3ad886d..245e01875f 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -110,22 +110,14 @@ CPUThread* CPUThreadManager::GetThread(u32 id) RawSPUThread* CPUThreadManager::GetRawSPUThread(u32 num) { - std::lock_guard lock(m_mtx_thread); - - for (u32 i = 0; i < m_threads.size(); i++) + if (num < sizeof(Memory.RawSPUMem) / sizeof(Memory.RawSPUMem[0])) { - if (m_threads[i]->GetType() == CPU_THREAD_RAW_SPU) - { - RawSPUThread* t = (RawSPUThread*)m_threads[i]; - - if (t->GetIndex() == num) - { - return t; - } - } + return (RawSPUThread*)Memory.RawSPUMem[num]; + } + else + { + return nullptr; } - - return nullptr; } void CPUThreadManager::NotifyThread(const u32 id) diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 1521e35cea..2b0ab6c68e 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -28,44 +28,136 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) return MemoryBlock::Read32(addr, value); } - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; + const u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; + switch(offset) { - case MFC_LSA_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_LSA)", m_index); *value = MFC2.LSA.GetValue(); break; - case MFC_EAH_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAH)", m_index); *value = MFC2.EAH.GetValue(); break; - case MFC_EAL_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAL)", m_index); *value = MFC2.EAL.GetValue(); break; - case MFC_Size_Tag_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_Size_Tag)", m_index); *value = MFC2.Size_Tag.GetValue(); break; - case MFC_CMDStatus_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_CMDStatus)", m_index); *value = MFC2.CMDStatus.GetValue(); break; + case MFC_LSA_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_LSA)", m_index); + *value = MFC2.LSA.GetValue(); + break; + } + + case MFC_EAH_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAH)", m_index); + *value = MFC2.EAH.GetValue(); + break; + } + + case MFC_EAL_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAL)", m_index); + *value = MFC2.EAL.GetValue(); + break; + } + + case MFC_Size_Tag_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_Size_Tag)", m_index); + *value = MFC2.Size_Tag.GetValue(); + break; + } + + case MFC_CMDStatus_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_CMDStatus)", m_index); + *value = MFC2.CMDStatus.GetValue(); + break; + } + case MFC_QStatus_offs: + { LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_QStatus)", m_index); - *value = MFC2.QStatus.GetValue(); - break; - case Prxy_QueryType_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryType)", m_index); *value = Prxy.QueryType.GetValue(); break; - case Prxy_QueryMask_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryMask)", m_index); *value = Prxy.QueryMask.GetValue(); break; - case Prxy_TagStatus_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_TagStatus)", m_index); *value = Prxy.TagStatus.GetValue(); break; + *value = MFC2.QStatus.GetValue(); + break; + } + + case Prxy_QueryType_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryType)", m_index); + *value = Prxy.QueryType.GetValue(); + break; + } + + case Prxy_QueryMask_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryMask)", m_index); + *value = Prxy.QueryMask.GetValue(); + break; + } + + case Prxy_TagStatus_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_TagStatus)", m_index); + *value = Prxy.TagStatus.GetValue(); + break; + } + case SPU_Out_MBox_offs: - //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Out_MBox)", m_index); - SPU.Out_MBox.PopUncond(*value); //if Out_MBox is empty yet, the result will be undefined - break; - case SPU_In_MBox_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); while(!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) Sleep(1); break; - case SPU_MBox_Status_offs: //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_MBox_Status)", m_index); + { + // if Out_MBox is empty, the result is undefined + SPU.Out_MBox.PopUncond(*value); + break; + } + + case SPU_In_MBox_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); + while (!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) Sleep(1); + break; + } + + case SPU_MBox_Status_offs: + { + //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_MBox_Status)", m_index); //SPU.MBox_Status.SetValue(SPU.Out_MBox.GetCount() ? SPU.MBox_Status.GetValue() | 1 : SPU.MBox_Status.GetValue() & ~1); SPU.MBox_Status.SetValue((SPU.Out_MBox.GetCount() & 0xff) | (SPU.In_MBox.GetFreeCount() << 8)); *value = SPU.MBox_Status.GetValue(); break; - case SPU_RunCntl_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); *value = (u32)IsRunning(); break; + } + + case SPU_RunCntl_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); + *value = (u32)IsRunning(); + break; + } + case SPU_Status_offs: - //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_Status)", m_index); + { *value = SPU.Status.GetValue(); break; - case SPU_NPC_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_NPC)", m_index); *value = SPU.NPC.GetValue(); break; - case SPU_RdSigNotify1_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify1)", m_index); *value = SPU.SNR[0].GetValue(); break; - case SPU_RdSigNotify2_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify2)", m_index); *value = SPU.SNR[1].GetValue(); break; + } + + case SPU_NPC_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_NPC)", m_index); + *value = SPU.NPC.GetValue(); + break; + } + + case SPU_RdSigNotify1_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify1)", m_index); + *value = SPU.SNR[0].GetValue(); + break; + } + + case SPU_RdSigNotify2_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify2)", m_index); + *value = SPU.SNR[1].GetValue(); + break; + } default: + { LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(0x%x)", m_index, offset); Emu.Pause(); - break; + return false; + } } return true; @@ -78,19 +170,48 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) return MemoryBlock::Write32(addr, value); } - u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; + const u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; switch(offset) { - case MFC_LSA_offs: MFC2.LSA.SetValue(value); break; - case MFC_EAH_offs: MFC2.EAH.SetValue(value); break; - case MFC_EAL_offs: MFC2.EAL.SetValue(value); break; - case MFC_Size_Tag_offs: MFC2.Size_Tag.SetValue(value); break; + case MFC_LSA_offs: + { + MFC2.LSA.SetValue(value); + break; + } + + case MFC_EAH_offs: + { + MFC2.EAH.SetValue(value); + break; + } + + case MFC_EAL_offs: + { + MFC2.EAL.SetValue(value); + break; + } + + case MFC_Size_Tag_offs: + { + MFC2.Size_Tag.SetValue(value); + break; + } + case MFC_CMDStatus_offs: + { MFC2.CMDStatus.SetValue(value); EnqMfcCmd(MFC2); - break; - case MFC_QStatus_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(MFC_QStatus, 0x%x)", m_index, value); MFC2.QStatus.SetValue(value); break; + break; + } + + case MFC_QStatus_offs: + { + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(MFC_QStatus, 0x%x)", m_index, value); + //MFC2.QStatus.SetValue(value); + break; + } + case Prxy_QueryType_offs: { LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryType, 0x%x)", m_index, value); @@ -109,16 +230,44 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) Prxy.QueryType.SetValue(0); MFC2.QStatus.SetValue(Prxy.QueryMask.GetValue()); + break; } - break; - case Prxy_QueryMask_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryMask, 0x%x)", m_index, value); Prxy.QueryMask.SetValue(value); break; - case Prxy_TagStatus_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_TagStatus, 0x%x)", m_index, value); Prxy.TagStatus.SetValue(value); break; - case SPU_Out_MBox_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); while(!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) Sleep(1); break; + + case Prxy_QueryMask_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryMask, 0x%x)", m_index, value); + Prxy.QueryMask.SetValue(value); + break; + } + + case Prxy_TagStatus_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_TagStatus, 0x%x)", m_index, value); + Prxy.TagStatus.SetValue(value); + break; + } + + case SPU_Out_MBox_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); + while (!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) Sleep(1); + break; + } + case SPU_In_MBox_offs: - //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_In_MBox, 0x%x)", m_index, value); - SPU.In_MBox.PushUncond(value); //if In_MBox is already full, the last message will be overwritten - break; - case SPU_MBox_Status_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); SPU.MBox_Status.SetValue(value); break; + { + // if In_MBox is already full, the last message is overwritten + SPU.In_MBox.PushUncond(value); + break; + } + + case SPU_MBox_Status_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); + SPU.MBox_Status.SetValue(value); + break; + } + case SPU_RunCntl_offs: { if (value == SPU_RUNCNTL_RUNNABLE) @@ -138,15 +287,41 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) } break; } - case SPU_Status_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Status, 0x%x)", m_index, value); SPU.Status.SetValue(value); break; - case SPU_NPC_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_NPC, 0x%x)", m_index, value); SPU.NPC.SetValue(value); break; - case SPU_RdSigNotify1_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify1, 0x%x)", m_index, value); SPU.SNR[0].SetValue(value); break; - case SPU_RdSigNotify2_offs: LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify2, 0x%x)", m_index, value); SPU.SNR[1].SetValue(value); break; + + case SPU_Status_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Status, 0x%x)", m_index, value); + SPU.Status.SetValue(value); + break; + } + + case SPU_NPC_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_NPC, 0x%x)", m_index, value); + SPU.NPC.SetValue(value); + break; + } + + case SPU_RdSigNotify1_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify1, 0x%x)", m_index, value); + SPU.SNR[0].SetValue(value); + break; + } + + case SPU_RdSigNotify2_offs: + { + LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify2, 0x%x)", m_index, value); + SPU.SNR[1].SetValue(value); + break; + } default: + { LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(0x%x, 0x%x)", m_index, offset, value); Emu.Pause(); - break; + break; + } } return true; diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 28e07cc603..cd98ac713e 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -581,19 +581,26 @@ public: DMAC dmac; +#define LOG_DMAC(type, text) type(Log::SPU, "DMAC::ProcessCmd(cmd=0x%x, tag=0x%x, lsa=0x%x, ea=0x%llx, size=0x%x): " text, cmd, tag, lsa, ea, size) + bool ProcessCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) { if (cmd & (MFC_BARRIER_MASK | MFC_FENCE_MASK)) _mm_mfence(); if (ea >= SYS_SPU_THREAD_BASE_LOW) { - if (group) + if (ea >= 0x100000000) + { + LOG_DMAC(LOG_ERROR, "Invalid external address"); + return false; + } + else if (group) { // SPU Thread Group MMIO (LS and SNR) u32 num = (ea & SYS_SPU_THREAD_BASE_MASK) / SYS_SPU_THREAD_OFFSET; // thread number in group if (num >= group->list.size() || !group->list[num]) { - LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): invalid thread", ea); + LOG_DMAC(LOG_ERROR, "Invalid thread (SPU Thread Group MMIO)"); return false; } @@ -612,13 +619,13 @@ public: } else { - LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx, size=%d, cmd=0x%x): invalid command", ea, size, cmd); + LOG_DMAC(LOG_ERROR, "Invalid register (SPU Thread Group MMIO)"); return false; } } else { - LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): SPU Thread Group MMIO Access (ea=0x%llx): group not set", ea); + LOG_DMAC(LOG_ERROR, "Thread group not set (SPU Thread Group MMIO)"); return false; } } @@ -640,14 +647,12 @@ public: default: { - LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): Unknown DMA cmd."); + LOG_DMAC(LOG_ERROR, "Unknown DMA command"); return false; } } } - //Sleep(1); // hack - switch (cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK | MFC_RESULT_MASK)) { case MFC_PUT_CMD: @@ -658,7 +663,7 @@ public: } else { - LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): PUT* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); + LOG_DMAC(LOG_ERROR, "PUT* cmd failed"); return false; // TODO: page fault (?) } } @@ -671,19 +676,21 @@ public: } else { - LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): GET* cmd failed (ea=0x%llx, lsa=0x%x, size=%d)", ea, lsa, size); + LOG_DMAC(LOG_ERROR, "GET* cmd failed"); return false; // TODO: page fault (?) } } default: { - LOG_ERROR(Log::SPU, "DMAC::ProcessCmd(): Unknown DMA cmd."); + LOG_DMAC(LOG_ERROR, "Unknown DMA command"); return false; // ??? } } } +#undef LOG_CMD + u32 dmacCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) { /*if(proxy_pos >= MFC_PPU_MAX_QUEUE_SPACE) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index f1053be27e..3590fe4a72 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -5,8 +5,7 @@ #include "RSXThread.h" #include "Emu/SysCalls/lv2/sys_time.h" -//#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count) : Memory.Read32(Memory.RSXIOMem.GetStartAddr() + m_ctrl->get + (4*(x+1)))) -#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count) : Memory.Read32(Memory.RSXIOMem.RealAddr(Memory.RSXIOMem.GetStartAddr() + m_ctrl->get + (4*(x+1))))) +#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count, args) : args[x]) u32 methodRegisters[0xffff]; @@ -46,10 +45,7 @@ u32 GetAddress(u32 offset, u8 location) switch(location) { case CELL_GCM_LOCATION_LOCAL: return Memory.RSXFBMem.GetStartAddr() + offset; - case CELL_GCM_LOCATION_MAIN: - u64 realAddr; - Memory.RSXIOMem.getRealAddr(Memory.RSXIOMem.GetStartAddr() + offset, realAddr); // TODO: Error Check? - return realAddr; + case CELL_GCM_LOCATION_MAIN: return Memory.RSXIOMem.RealAddr(Memory.RSXIOMem.GetStartAddr() + offset); // TODO: Error Check? } LOG_ERROR(RSX, "GetAddress(offset=0x%x, location=0x%x)", location); @@ -141,7 +137,7 @@ u32 RSXVertexData::GetTypeSize() #define CMD_LOG(...) #endif -u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count) +u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count, mem32_ptr_t args) { std::string debug = GetMethodName(cmd); debug += "("; @@ -207,7 +203,7 @@ u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count) index = (cmd - a) / m; \ case a \ -void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u32 count) +void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 count) { #if CMD_DEBUG std::string debug = GetMethodName(cmd); @@ -2454,9 +2450,7 @@ void RSXThread::Task() } //ConLog.Write("addr = 0x%x", m_ioAddress + get); - u64 realAddr; - Memory.RSXIOMem.getRealAddr(Memory.RSXIOMem.GetStartAddr() + get, realAddr); - const u32 cmd = Memory.Read32(realAddr); + const u32 cmd = ReadIO32(get); const u32 count = (cmd >> 18) & 0x7ff; //if(cmd == 0) continue; @@ -2471,7 +2465,7 @@ void RSXThread::Task() { m_call_stack.push(get + 4); u32 offs = cmd & ~CELL_GCM_METHOD_FLAG_CALL; - u32 addr = Memory.RSXIOMem.GetStartAddr() + offs; + //u32 addr = Memory.RSXIOMem.GetStartAddr() + offs; //LOG_WARNING(RSX, "rsx call(0x%x) #0x%x - 0x%x - 0x%x", offs, addr, cmd, get); m_ctrl->get = offs; continue; @@ -2500,13 +2494,13 @@ void RSXThread::Task() continue; } + mem32_ptr_t args((u32)Memory.RSXIOMem.RealAddr(Memory.RSXIOMem.GetStartAddr() + get + 4)); + for(u32 i=0; iget = get + (count + 1) * 4; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 3dd6abbf58..e776af2214 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -593,8 +593,8 @@ protected: void Begin(u32 draw_mode); void End(); - u32 OutOfArgsCount(const uint x, const u32 cmd, const u32 count); - void DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u32 count); + u32 OutOfArgsCount(const uint x, const u32 cmd, const u32 count, mem32_ptr_t args); + void DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 count); void nativeRescale(float width, float height); virtual void OnInit() = 0; @@ -634,4 +634,16 @@ public: OnInit(); ThreadBase::Start(); } + + u32 ReadIO32(u32 addr) + { + u32 value; + Memory.RSXIOMem.Read32(Memory.RSXIOMem.GetStartAddr() + addr, &value); + return value; + } + + void WriteIO32(u32 addr, u32 value) + { + Memory.RSXIOMem.Write32(Memory.RSXIOMem.GetStartAddr() + addr, value); + } }; From ab7a45aedea989ccebce69f2da4683aa47fd965a Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 11 Jul 2014 00:16:19 +1000 Subject: [PATCH 141/499] stdafx: move out some uncommon includes --- rpcs3/Emu/GS/GSManager.h | 3 +- rpcs3/Emu/GS/RSXThread.h | 1 + rpcs3/Emu/Memory/Memory.h | 4 +- rpcs3/Emu/Memory/MemoryBlock.h | 187 +++++++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules.h | 2 + rpcs3/Emu/SysCalls/SC_FUNC.h | 2 + rpcs3/Emu/SysCalls/SysCalls.h | 5 + rpcs3/Emu/SysCalls/lv2/sys_event.h | 2 +- rpcs3/Gui/FrameBase.h | 1 + rpcs3/Gui/MainFrame.cpp | 1 - rpcs3/Gui/MainFrame.h | 1 + rpcs3/stdafx.h | 199 ----------------------------- 12 files changed, 205 insertions(+), 203 deletions(-) diff --git a/rpcs3/Emu/GS/GSManager.h b/rpcs3/Emu/GS/GSManager.h index bb00909f73..08f424a9a9 100644 --- a/rpcs3/Emu/GS/GSManager.h +++ b/rpcs3/Emu/GS/GSManager.h @@ -1,6 +1,7 @@ #pragma once #include "sysutil_video.h" #include "GSRender.h" +#include "rpcs3/Ini.h" struct GSInfo { @@ -58,4 +59,4 @@ public: u8 GetState(); u8 GetColorSpace(); -}; \ No newline at end of file +}; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 3dd6abbf58..2246cb416a 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -4,6 +4,7 @@ #include "RSXVertexProgram.h" #include "RSXFragmentProgram.h" #include "Emu/SysCalls/Callback.h" +#include "Emu/Memory/Memory.h" #include #include // For tracking a list of used gcm commands diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 3a51f61b15..74f5a2d880 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -1,10 +1,12 @@ #pragma once -#include "Emu/SysCalls/Callback.h" #include "MemoryBlock.h" #include using std::nullptr_t; +#define safe_delete(x) do {delete (x);(x)=nullptr;} while(0) +#define safe_free(x) do {free(x);(x)=nullptr;} while(0) + enum MemoryType { Memory_PS3, diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index e9a6e7c1d1..9d0284045c 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -2,6 +2,193 @@ #define PAGE_4K(x) (x + 4095) & ~(4095) +union u128 +{ + struct + { + u64 hi; + u64 lo; + }; + + u64 _u64[2]; + u32 _u32[4]; + u16 _u16[8]; + u8 _u8[16]; + + operator u64() const { return _u64[0]; } + operator u32() const { return _u32[0]; } + operator u16() const { return _u16[0]; } + operator u8() const { return _u8[0]; } + + operator bool() const { return _u64[0] != 0 || _u64[1] != 0; } + + static u128 From128( u64 hi, u64 lo ) + { + u128 ret = {hi, lo}; + return ret; + } + + static u128 From64( u64 src ) + { + u128 ret = {0, src}; + return ret; + } + + static u128 From32( u32 src ) + { + u128 ret; + ret._u32[0] = src; + ret._u32[1] = 0; + ret._u32[2] = 0; + ret._u32[3] = 0; + return ret; + } + + static u128 FromBit ( u32 bit ) + { + u128 ret; + if (bit < 64) + { + ret.hi = 0; + ret.lo = (u64)1 << bit; + } + else if (bit < 128) + { + ret.hi = (u64)1 << (bit - 64); + ret.lo = 0; + } + else + { + ret.hi = 0; + ret.lo = 0; + } + return ret; + } + + bool operator == ( const u128& right ) const + { + return (lo == right.lo) && (hi == right.hi); + } + + bool operator != ( const u128& right ) const + { + return (lo != right.lo) || (hi != right.hi); + } + + u128 operator | ( const u128& right ) const + { + return From128(hi | right.hi, lo | right.lo); + } + + u128 operator & ( const u128& right ) const + { + return From128(hi & right.hi, lo & right.lo); + } + + u128 operator ^ ( const u128& right ) const + { + return From128(hi ^ right.hi, lo ^ right.lo); + } + + u128 operator ~ () const + { + return From128(~hi, ~lo); + } +}; + +union s128 +{ + struct + { + s64 hi; + s64 lo; + }; + + u64 _i64[2]; + u32 _i32[4]; + u16 _i16[8]; + u8 _i8[16]; + + operator s64() const { return _i64[0]; } + operator s32() const { return _i32[0]; } + operator s16() const { return _i16[0]; } + operator s8() const { return _i8[0]; } + + operator bool() const { return _i64[0] != 0 || _i64[1] != 0; } + + static s128 From64( s64 src ) + { + s128 ret = {src, 0}; + return ret; + } + + static s128 From32( s32 src ) + { + s128 ret; + ret._i32[0] = src; + ret._i32[1] = 0; + ret.hi = 0; + return ret; + } + + bool operator == ( const s128& right ) const + { + return (lo == right.lo) && (hi == right.hi); + } + + bool operator != ( const s128& right ) const + { + return (lo != right.lo) || (hi != right.hi); + } +}; + +#include +#include + +//TODO: SSE style +/* +struct u128 +{ + __m128 m_val; + + u128 GetValue128() + { + u128 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } + + u64 GetValue64() + { + u64 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } + + u32 GetValue32() + { + u32 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } + + u16 GetValue16() + { + u16 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } + + u8 GetValue8() + { + u8 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } +}; +*/ + + struct MemInfo { u64 addr; diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index ee55d8de93..e0374db2bf 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -1,5 +1,7 @@ #pragma once +#include "Emu/Memory/Memory.h" + #define declCPU PPUThread& CPU = GetCurrentPPUThread //TODO diff --git a/rpcs3/Emu/SysCalls/SC_FUNC.h b/rpcs3/Emu/SysCalls/SC_FUNC.h index c03ed9ec76..a30d52505c 100644 --- a/rpcs3/Emu/SysCalls/SC_FUNC.h +++ b/rpcs3/Emu/SysCalls/SC_FUNC.h @@ -1,5 +1,7 @@ #pragma once +#include "Emu/Memory/Memory.h" + #define RESULT(x) SC_ARGS_1 = (x) class func_caller diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 95a6267464..ff34ff8d2f 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -2,6 +2,9 @@ #include "ErrorCodes.h" #include "Static.h" +#include "Emu/Memory/Memory.h" + +// Most of the headers below rely on Memory.h #include "lv2/lv2Fs.h" #include "lv2/sys_cond.h" #include "lv2/sys_event.h" @@ -26,6 +29,8 @@ #include "Emu/Event.h" +#include "rpcs3/Ini.h" + //#define SYSCALLS_DEBUG #define declCPU PPUThread& CPU = GetCurrentPPUThread diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.h b/rpcs3/Emu/SysCalls/lv2/sys_event.h index e823c7832b..09866991e7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.h @@ -95,4 +95,4 @@ s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result); s32 sys_event_flag_set(u32 eflag_id, u64 bitptn); s32 sys_event_flag_clear(u32 eflag_id, u64 bitptn); s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num); -s32 sys_event_flag_get(u32 eflag_id, mem64_t flags); \ No newline at end of file +s32 sys_event_flag_get(u32 eflag_id, mem64_t flags); diff --git a/rpcs3/Gui/FrameBase.h b/rpcs3/Gui/FrameBase.h index 8c054d848b..7ae79c4435 100644 --- a/rpcs3/Gui/FrameBase.h +++ b/rpcs3/Gui/FrameBase.h @@ -1,4 +1,5 @@ #pragma once +#include "rpcs3/Ini.h" class FrameBase : public wxFrame { diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 20c6a55274..d0bb8d6daf 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Gui/ConLogFrame.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" diff --git a/rpcs3/Gui/MainFrame.h b/rpcs3/Gui/MainFrame.h index 932087fe30..9a11d02f13 100644 --- a/rpcs3/Gui/MainFrame.h +++ b/rpcs3/Gui/MainFrame.h @@ -1,6 +1,7 @@ #pragma once #include "Gui/Debugger.h" +#include "Gui/ConLogFrame.h" #include diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 4fbb2d8d3e..618f526901 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -68,202 +68,6 @@ typedef int16_t s16; typedef int32_t s32; typedef int64_t s64; -union u128 -{ - struct - { - u64 hi; - u64 lo; - }; - - u64 _u64[2]; - u32 _u32[4]; - u16 _u16[8]; - u8 _u8[16]; - - operator u64() const { return _u64[0]; } - operator u32() const { return _u32[0]; } - operator u16() const { return _u16[0]; } - operator u8() const { return _u8[0]; } - - operator bool() const { return _u64[0] != 0 || _u64[1] != 0; } - - static u128 From128( u64 hi, u64 lo ) - { - u128 ret = {hi, lo}; - return ret; - } - - static u128 From64( u64 src ) - { - u128 ret = {0, src}; - return ret; - } - - static u128 From32( u32 src ) - { - u128 ret; - ret._u32[0] = src; - ret._u32[1] = 0; - ret._u32[2] = 0; - ret._u32[3] = 0; - return ret; - } - - static u128 FromBit ( u32 bit ) - { - u128 ret; - if (bit < 64) - { - ret.hi = 0; - ret.lo = (u64)1 << bit; - } - else if (bit < 128) - { - ret.hi = (u64)1 << (bit - 64); - ret.lo = 0; - } - else - { - ret.hi = 0; - ret.lo = 0; - } - return ret; - } - - bool operator == ( const u128& right ) const - { - return (lo == right.lo) && (hi == right.hi); - } - - bool operator != ( const u128& right ) const - { - return (lo != right.lo) || (hi != right.hi); - } - - u128 operator | ( const u128& right ) const - { - return From128(hi | right.hi, lo | right.lo); - } - - u128 operator & ( const u128& right ) const - { - return From128(hi & right.hi, lo & right.lo); - } - - u128 operator ^ ( const u128& right ) const - { - return From128(hi ^ right.hi, lo ^ right.lo); - } - - u128 operator ~ () const - { - return From128(~hi, ~lo); - } -}; - -union s128 -{ - struct - { - s64 hi; - s64 lo; - }; - - u64 _i64[2]; - u32 _i32[4]; - u16 _i16[8]; - u8 _i8[16]; - - operator s64() const { return _i64[0]; } - operator s32() const { return _i32[0]; } - operator s16() const { return _i16[0]; } - operator s8() const { return _i8[0]; } - - operator bool() const { return _i64[0] != 0 || _i64[1] != 0; } - - static s128 From64( s64 src ) - { - s128 ret = {src, 0}; - return ret; - } - - static s128 From32( s32 src ) - { - s128 ret; - ret._i32[0] = src; - ret._i32[1] = 0; - ret.hi = 0; - return ret; - } - - bool operator == ( const s128& right ) const - { - return (lo == right.lo) && (hi == right.hi); - } - - bool operator != ( const s128& right ) const - { - return (lo != right.lo) || (hi != right.hi); - } -}; - -#include -#include - -//TODO: SSE style -/* -struct u128 -{ - __m128 m_val; - - u128 GetValue128() - { - u128 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } - - u64 GetValue64() - { - u64 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } - - u32 GetValue32() - { - u32 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } - - u16 GetValue16() - { - u16 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } - - u8 GetValue8() - { - u8 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } -}; -*/ - -template -static void safe_realloc(T* ptr, uint new_size) -{ - if(new_size == 0) return; - ptr = (T*)((ptr == NULL) ? malloc(new_size * sizeof(T)) : realloc(ptr, new_size * sizeof(T))); -} - -#define safe_delete(x) do {delete (x);(x)=nullptr;} while(0) -#define safe_free(x) do {free(x);(x)=nullptr;} while(0) - enum Status { Running, @@ -286,10 +90,7 @@ enum Status #include "Utilities/Timer.h" #include "Utilities/IdManager.h" -#include "rpcs3/Ini.h" #include "Gui/FrameBase.h" -#include "Gui/ConLogFrame.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Callback.h" #include "Emu/DbgCommand.h" From 0dfbb5de73bbe8c89d264619051997b526a65243 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 10 Jul 2014 18:29:38 +0400 Subject: [PATCH 142/499] Compilation fix --- rpcs3/Emu/GS/RSXThread.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 3590fe4a72..473b9e0464 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -5,7 +5,7 @@ #include "RSXThread.h" #include "Emu/SysCalls/lv2/sys_time.h" -#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count, args) : args[x]) +#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count, args) : args[x].ToLE()) u32 methodRegisters[0xffff]; From 6b148d1d4c532374e4d7de8d5f1f53d4ff445241 Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 11 Jul 2014 02:46:10 +1000 Subject: [PATCH 143/499] CMake: Improve to support build type. Default to release. --- CMakeLists.txt | 9 +++++++++ rpcs3/CMakeLists.txt | 29 +++++++++++++++-------------- rpcs3/Emu/Audio/AL/OpenALThread.cpp | 2 -- rpcs3/Emu/Memory/Memory.cpp | 2 -- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bfb3c82402..3abe8d579a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,5 +2,14 @@ cmake_minimum_required(VERSION 2.8) set(ASMJIT_STATIC TRUE) +if (NOT CMAKE_BUILD_TYPE) + message(STATUS "No build type selected, default to Release") + set(CMAKE_BUILD_TYPE "Release") +endif() + +if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) + message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." ) +endif() + add_subdirectory( asmjit ) add_subdirectory( rpcs3 ) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index ae72e0f56b..be1a49418e 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -7,22 +7,28 @@ project(rpcs3) if (CMAKE_COMPILER_IS_GNUCXX) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7.0) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + message(FATAL_ERROR "GCC ${CMAKE_CXX_COMPILER_VERSION} is too old.") endif() - add_definitions(-DwxGUI) #add_definitions(-D__WXGTK__) #add_definitions(-Wfatal-errors) add_definitions(-w) # TODO: remove me - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions") add_definitions(-fpermissive) # TODO: remove me - add_definitions(-g) # Debugging!! - add_definitions(-msse2) elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + # TODO: stdlib? +endif() + +if (NOT MSVC) add_definitions(-DwxGUI) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fexceptions") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -D_DEBUG") + set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -Os -D_NDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O1 -D_NDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O1 -g -D_NDEBUG") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -D_DEBUG") + set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -Os -D_NDEBUG") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O1 -D_NDEBUG") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O1 -g -D_NDEBUG") + add_definitions(-msse2) endif() If( NOT RPCS3_SRC_DIR) @@ -48,11 +54,6 @@ find_package(OpenAL REQUIRED) include("${wxWidgets_USE_FILE}") -if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) - message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." ) -endif() - - if(APPLE) set(PLATFORM_ARCH "macosx/x86_64") elseif(WIN32) diff --git a/rpcs3/Emu/Audio/AL/OpenALThread.cpp b/rpcs3/Emu/Audio/AL/OpenALThread.cpp index 705df90f71..9ed92f04e3 100644 --- a/rpcs3/Emu/Audio/AL/OpenALThread.cpp +++ b/rpcs3/Emu/Audio/AL/OpenALThread.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "rpcs3/Ini.h" #include "OpenALThread.h" diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 9f70616622..719e8a7579 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -3,8 +3,6 @@ #include "Utilities/Log.h" #include "Memory.h" -#include "MemoryBlock.h" -#include "Emu/System.h" MemoryBase Memory; From a8480f66e00b2ea6db404fdf635d5ebe48b3a28e Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 11 Jul 2014 00:49:25 +0800 Subject: [PATCH 144/499] RSX : set bunch of default values using opengl one --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 3 --- rpcs3/Emu/GS/RSXThread.cpp | 7 ++++--- rpcs3/Emu/GS/RSXThread.h | 26 ++++++++++++++++++++------ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 8022d6864e..7b6a747d7f 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -1016,21 +1016,18 @@ void GLGSRender::ExecCMD() if(m_set_depth_func) { - //ConLog.Warning("glDepthFunc(0x%x)", m_depth_func); glDepthFunc(m_depth_func); checkForGlError("glDepthFunc"); } if(m_set_depth_bounds) { - //ConLog.Warning("glDepthBounds(%f, %f)", m_depth_bounds_min, m_depth_bounds_max); glDepthBoundsEXT(m_depth_bounds_min, m_depth_bounds_max); checkForGlError("glDepthBounds"); } if(m_set_clip) { - //ConLog.Warning("glDepthRangef(%f, %f)", m_clip_min, m_clip_max); glDepthRangef(m_clip_min, m_clip_max); checkForGlError("glDepthRangef"); } diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 6fcc246e36..9d530d9ac0 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1287,7 +1287,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - // Point + // Point size case NV4097_SET_POINT_SIZE: { m_set_point_size = true; @@ -1296,10 +1296,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; + // Point sprite case NV4097_SET_POINT_PARAMS_ENABLE: { if (ARGS(0)) - LOG_ERROR(RSX, "NV4097_SET_POINT_PARAMS_ENABLE"); + LOG_ERROR(RSX, "NV4097_SET_POINT_PARAMS_ENABLE: %x", ARGS(0)); } break; @@ -1343,7 +1344,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 } break; - // Depth/ Color buffer usage + // Depth/Color buffer usage case NV4097_SET_SURFACE_FORMAT: { const u32 a0 = ARGS(0); diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 3dd6abbf58..7980801484 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -466,24 +466,39 @@ protected: m_set_line_stipple = false; m_set_polygon_stipple = false; + // Default value + // TODO: Check against the default value on PS3 m_clear_color_r = 0; m_clear_color_g = 0; m_clear_color_b = 0; m_clear_color_a = 0; m_clear_z = 0xffffff; m_clear_s = 0; - m_poly_offset_scale_factor = 0.0; m_poly_offset_bias = 0.0; - m_depth_bounds_min = 0.0; m_depth_bounds_max = 1.0; m_restart_index = 0xffffffff; - m_front_polygon_mode = 0x1b02; // GL_FILL m_back_polygon_mode = 0x1b02; // GL_FILL - m_front_face = 0x0901; - + m_front_face = 0x0901; // GL_CCW + m_cull_face = 0x0405; // GL_BACK + m_alpha_func = 0x0207; // GL_ALWAYS + m_alpha_ref = 0; + m_logic_op = 0x1503; // GL_COPY + m_shade_mode = 0x1D01; // GL_SMOOTH + m_depth_mask = 1; + m_depth_func = 0x0201; // GL_LESS + m_depth_bounds_min = 0.0; + m_depth_bounds_max = 1.0; + m_clip_min = 0.0; + m_clip_max = 1.0; + m_blend_equation_rgb = 0x8006; // GL_FUNC_ADD + m_blend_equation_alpha = 0x8006; // GL_FUNC_ADD + m_blend_sfactor_rgb = 1; // GL_ONE + m_blend_dfactor_rgb = 0; // GL_ZERO + m_blend_sfactor_alpha = 1; // GL_ONE + m_blend_dfactor_alpha = 0; // GL_ZERO m_point_x = 0; m_point_y = 0; m_point_size = 1.0; @@ -492,7 +507,6 @@ protected: m_line_stipple_factor = 1; for (size_t i = 0; i < 32; i++) { - // TODO: Check if the polygon stipple pattern is really "all ones" m_polygon_stipple_pattern[i] = 0xFFFFFFFF; } From 8cacbe3567eedd1b2c023d89f3c37ba67e9f957d Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 11 Jul 2014 02:41:48 +0800 Subject: [PATCH 145/499] Remove m_alpha_func sanity check --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 7b6a747d7f..d1acf2f40d 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -1080,7 +1080,7 @@ void GLGSRender::ExecCMD() checkForGlError("glFrontFace"); } - if(m_set_alpha_func && m_set_alpha_ref && m_alpha_func) + if(m_set_alpha_func && m_set_alpha_ref) { glAlphaFunc(m_alpha_func, m_alpha_ref); checkForGlError("glAlphaFunc"); From f256153a2b3e44b08fc83a5191e1383fd916462f Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 11 Jul 2014 05:07:46 +1000 Subject: [PATCH 146/499] Warnings: Fix several warnings. --- rpcs3/CMakeLists.txt | 7 +++--- rpcs3/Emu/Cell/SPUThread.h | 2 +- rpcs3/Emu/GS/GL/GLBuffers.cpp | 4 +-- rpcs3/Emu/GS/GL/GLBuffers.h | 2 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 5 ++-- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 5 ++-- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 26 ++++++++++---------- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 2 +- 18 files changed, 41 insertions(+), 40 deletions(-) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index be1a49418e..956b612d2b 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -9,10 +9,9 @@ if (CMAKE_COMPILER_IS_GNUCXX) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7.0) message(FATAL_ERROR "GCC ${CMAKE_CXX_COMPILER_VERSION} is too old.") endif() - #add_definitions(-D__WXGTK__) - #add_definitions(-Wfatal-errors) - add_definitions(-w) # TODO: remove me - add_definitions(-fpermissive) # TODO: remove me + # Warnings + add_definitions(-Wno-attributes -Wno-enum-compare) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof") elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # TODO: stdlib? endif() diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index b71263c1b1..11c8109b7b 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -318,7 +318,7 @@ class SPUThread : public PPCThread public: SPU_GPR_hdr GPR[128]; //General-Purpose Register SPU_SPR_hdr SPR[128]; //Special-Purpose Registers - FPSCR FPSCR; +// FPSCR fpscr; //Unused SPU_SNRConfig_hdr cfg; //Signal Notification Registers Configuration (OR-mode enabled: 0x1 for SNR1, 0x2 for SNR2) EventPort SPUPs[64]; // SPU Thread Event Ports diff --git a/rpcs3/Emu/GS/GL/GLBuffers.cpp b/rpcs3/Emu/GS/GL/GLBuffers.cpp index 41ddddf619..9dd2d35f76 100644 --- a/rpcs3/Emu/GS/GL/GLBuffers.cpp +++ b/rpcs3/Emu/GS/GL/GLBuffers.cpp @@ -67,11 +67,11 @@ void GLBufferObject::SetData(const void* data, u32 size, u32 usage) SetData(m_type, data, size, usage); } -void GLBufferObject::SetAttribPointer(int location, int size, int type, int pointer, int stride, bool normalized) +void GLBufferObject::SetAttribPointer(int location, int size, int type, GLvoid* pointer, int stride, bool normalized) { if(location < 0) return; - glVertexAttribPointer(location, size, type, normalized ? GL_TRUE : GL_FALSE, stride, (const GLvoid*)pointer); + glVertexAttribPointer(location, size, type, normalized ? GL_TRUE : GL_FALSE, stride, pointer); glEnableVertexAttribArray(location); } diff --git a/rpcs3/Emu/GS/GL/GLBuffers.h b/rpcs3/Emu/GS/GL/GLBuffers.h index dfd58a8595..659365d29b 100644 --- a/rpcs3/Emu/GS/GL/GLBuffers.h +++ b/rpcs3/Emu/GS/GL/GLBuffers.h @@ -21,7 +21,7 @@ public: void UnBind(); void SetData(u32 type, const void* data, u32 size, u32 usage = GL_DYNAMIC_DRAW); void SetData(const void* data, u32 size, u32 usage = GL_DYNAMIC_DRAW); - void SetAttribPointer(int location, int size, int type, int pointer, int stride, bool normalized = false); + void SetAttribPointer(int location, int size, int type, GLvoid* pointer, int stride, bool normalized = false); bool IsCreated() const; }; diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index d1acf2f40d..e7a86654e0 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -54,7 +54,7 @@ GLGSRender::GLGSRender() GLGSRender::~GLGSRender() { m_frame->Close(); - delete m_context; +// delete m_context; // This won't do anything (deleting void* instead of wglContext*) } void GLGSRender::Enable(bool enable, const u32 cap) @@ -249,7 +249,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw) glEnableVertexAttribArray(i); checkForGlError("glEnableVertexAttribArray"); - glVertexAttribPointer(i, m_vertex_data[i].size, gltype, normalized, 0, (void*)offset_list[i]); + glVertexAttribPointer(i, m_vertex_data[i].size, gltype, normalized, 0, reinterpret_cast(offset_list[i])); checkForGlError("glVertexAttribPointer"); } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index fec90b45d1..560850d32a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -21,7 +21,7 @@ extern "C" //void cellAdec_init(); //Module cellAdec(0x0006, cellAdec_init); -extern Module *cellAdec=nullptr; +Module *cellAdec = nullptr; int adecRawRead(void* opaque, u8* buf, int buf_size) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp index f0b2ac8206..664d55024a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp @@ -7,7 +7,7 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" -extern Module *cellAtrac = nullptr; +Module *cellAtrac = nullptr; #include "cellAtrac.h" @@ -240,4 +240,4 @@ void cellAtrac_init() cellAtrac->AddFunc(0x7772eb2b, cellAtracResetPlayPosition); cellAtrac->AddFunc(0xb5c11938, cellAtracGetInternalErrorInfo); -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 255a6558df..8fd2e0b9ac 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -13,7 +13,7 @@ //void cellAudio_init(); //Module cellAudio(0x0011, cellAudio_init); -extern Module *cellAudio = nullptr; +Module *cellAudio = nullptr; static std::mutex audioMutex; diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp index 92361c370f..19d3c204cd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp @@ -12,7 +12,7 @@ //void cellFontFT_load(); //void cellFontFT_unload(); //Module cellFontFT(0x001a, cellFontFT_init, cellFontFT_load, cellFontFT_unload); -extern Module *cellFontFT = nullptr; +Module *cellFontFT = nullptr; struct CellFontLibraryConfigFT { @@ -85,4 +85,4 @@ void cellFontFT_load() void cellFontFT_unload() { delete s_fontFtInternalInstance; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 1d0dfef4e9..d693772ff2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -14,7 +14,7 @@ //void cellGame_init(); //Module cellGame(0x003e, cellGame_init); -extern Module *cellGame = nullptr; +Module *cellGame = nullptr; std::string contentInfo = ""; std::string usrdir = ""; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 0b28f4d773..6c04be8944 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -12,7 +12,7 @@ //void cellGcmSys_load(); //void cellGcmSys_unload(); //Module cellGcmSys(0x0010, cellGcmSys_init, cellGcmSys_load, cellGcmSys_unload); -extern Module *cellGcmSys = nullptr; +Module *cellGcmSys = nullptr; u32 local_size = 0; u32 local_addr = 0; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index 1aeb261a14..e0ccafb456 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -13,7 +13,7 @@ //void cellGifDec_init(); //Module cellGifDec(0xf010, cellGifDec_init); -extern Module *cellGifDec = nullptr; +Module *cellGifDec = nullptr; int cellGifDecCreate(u32 mainHandle, u32 threadInParam, u32 threadOutParam) { @@ -174,7 +174,8 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m //Decode GIF file. (TODO: Is there any faster alternative? Can we do it without external libraries?) int width, height, actual_components; std::shared_ptr image(stbi_load_from_memory(gif, fileSize, &width, &height, &actual_components, 4)); - if (!image) return CELL_GIFDEC_ERROR_STREAM_FORMAT; + if (!image) + return CELL_GIFDEC_ERROR_STREAM_FORMAT; uint image_size = width * height * 4; diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index dc7a4b53a6..922321f9c9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -10,7 +10,7 @@ //void cellJpgDec_init(); //Module cellJpgDec(0x000f, cellJpgDec_init); -extern Module *cellJpgDec = nullptr; +Module *cellJpgDec = nullptr; int cellJpgDecCreate(u32 mainHandle, u32 threadInParam, u32 threadOutParam) { @@ -155,7 +155,8 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int width, height, actual_components; std::shared_ptr image(stbi_load_from_memory(jpg, fileSize, &width, &height, &actual_components, 4)); - if (!image) return CELL_JPGDEC_ERROR_STREAM_FORMAT; + if (!image) + return CELL_JPGDEC_ERROR_STREAM_FORMAT; uint image_size = width * height; switch((u32)current_outParam.outputColorSpace) diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 5f61fb8aa1..5dda7675d1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -11,7 +11,7 @@ //void cellPngDec_init(); //Module cellPngDec(0x0018, cellPngDec_init); -extern Module *cellPngDec = nullptr; +Module *cellPngDec = nullptr; static std::map cellPngDecMap; diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 20c8e98c70..58fb993a11 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -456,10 +456,10 @@ void InitMembers() { s_rescInternalInstance->m_dstMode = (CellRescBufferMode)0; s_rescInternalInstance->m_interlaceElement = CELL_RESC_ELEMENT_FLOAT; - s_rescInternalInstance->m_colorBuffersEA = NULL; - s_rescInternalInstance->m_vertexArrayEA = NULL; - s_rescInternalInstance->m_fragmentUcodeEA = NULL; - s_rescInternalInstance->m_interlaceTableEA = NULL; + s_rescInternalInstance->m_colorBuffersEA = 0; + s_rescInternalInstance->m_vertexArrayEA = 0; + s_rescInternalInstance->m_fragmentUcodeEA = 0; + s_rescInternalInstance->m_interlaceTableEA = 0; s_rescInternalInstance->m_bufIdFront = 0; s_rescInternalInstance->m_dstWidth = 0; s_rescInternalInstance->m_dstHeight = 0; @@ -668,7 +668,7 @@ void cellRescExit() if (IsPalTemporal()) { cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_DISABLE); - cellGcmSetVBlankHandler(NULL); + cellGcmSetVBlankHandler(0); //GcmSysTypePrefix::cellGcmSetSecondVHandler(NULL); if (IsPalInterpolate()) @@ -756,12 +756,12 @@ void SetVBlankHandler(u32 handler) if (IsNotPalTemporal()) { cellGcmSetVBlankHandler(handler); - s_rescInternalInstance->s_applicationVBlankHandler = NULL; + s_rescInternalInstance->s_applicationVBlankHandler = 0; } else if (IsPal60Hsync()) { //cellGcmSetSecondVHandler(handler); - s_rescInternalInstance->s_applicationVBlankHandler = NULL; + s_rescInternalInstance->s_applicationVBlankHandler = 0; } else { @@ -782,7 +782,7 @@ void SetFlipHandler(u32 handler) if (IsGcmFlip()) { cellGcmSetFlipHandler(handler); - s_rescInternalInstance->s_applicationFlipHandler = NULL; + s_rescInternalInstance->s_applicationFlipHandler = 0; } else { @@ -857,20 +857,20 @@ int cellRescSetDisplayMode(u32 displayMode) cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ); //cellGcmSetVBlankHandler(IntrHandler50); //cellGcmSetSecondVHandler(IntrHandler60); - cellGcmSetFlipHandler(NULL); + cellGcmSetFlipHandler(0); } else if (IsPalDrop()) { //InitLabels(); cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ); - cellGcmSetVBlankHandler(NULL); + cellGcmSetVBlankHandler(0); //cellGcmSetSecondVHandler(IntrHandler60Drop); - cellGcmSetFlipHandler(NULL); + cellGcmSetFlipHandler(0); } else if (IsPal60Hsync()) { cellGcmSetSecondVFrequency(CELL_GCM_DISPLAY_FREQUENCY_59_94HZ); - cellGcmSetVBlankHandler(NULL); + cellGcmSetVBlankHandler(0); } if (s_rescInternalInstance->s_applicationVBlankHandler) SetVBlankHandler(s_rescInternalInstance->s_applicationVBlankHandler); @@ -1323,7 +1323,7 @@ int cellRescCreateInterlaceTable(u32 ea_addr, float srcH, CellRescTableElement d return CELL_RESC_ERROR_NOT_INITIALIZED; } - if ((ea_addr == NULL) || (srcH <= 0.f) || (!(depth == CELL_RESC_ELEMENT_HALF || depth == CELL_RESC_ELEMENT_FLOAT)) || (length <= 0)) + if ((ea_addr == 0) || (srcH <= 0.f) || (!(depth == CELL_RESC_ELEMENT_HALF || depth == CELL_RESC_ELEMENT_FLOAT)) || (length <= 0)) { cellResc->Error("cellRescCreateInterlaceTable : CELL_RESC_ERROR_NOT_INITIALIZED"); return CELL_RESC_ERROR_BAD_ARGUMENT; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 9f70053a04..f31c4297be 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -20,7 +20,7 @@ typedef void (*CellHddGameStatCallback)(mem_ptr_t cbResult, //void cellSysutil_init(); //Module cellSysutil(0x0015, cellSysutil_init); -Module *cellSysutil; +Module *cellSysutil = nullptr; int cellSysutilGetSystemParamInt(int id, mem32_t value) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp index 834871b5d5..e18d269089 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp @@ -8,7 +8,7 @@ //void cellSysutilAp_init(); //Module cellSysutilAp(0x0039, cellSysutilAp_init); -extern Module *cellSysutilAp = nullptr; +Module *cellSysutilAp = nullptr; // Return Codes enum @@ -46,4 +46,4 @@ void cellSysutilAp_init() cellSysutilAp->AddFunc(0x9e67e0dd, cellSysutilApGetRequiredMemSize); cellSysutilAp->AddFunc(0x3343824c, cellSysutilApOn); cellSysutilAp->AddFunc(0x90c2bb19, cellSysutilApOff); -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index a148c957b5..7143cca15f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -10,7 +10,7 @@ //void cellUserInfo_init(); //Module cellUserInfo(0x0032, cellUserInfo_init); -extern Module *cellUserInfo = nullptr; +Module *cellUserInfo = nullptr; int cellUserInfoGetStat(u32 id, mem_ptr_t stat) { From 3737993bb220cfe78eb2da94984cf63e110a3ddf Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 11 Jul 2014 05:45:07 +1000 Subject: [PATCH 147/499] Use a standard config dir on non-Windows. Fixes #192 Also remove WindowInfo::GetDefault which was redundant. --- Utilities/Log.cpp | 5 +++-- Utilities/rPlatform.cpp | 27 ++++++++++++++++++++++++++- Utilities/rPlatform.h | 1 + rpcs3/Ini.cpp | 9 +++++---- rpcs3/Ini.h | 6 ------ 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/Utilities/Log.cpp b/Utilities/Log.cpp index 180f77bff3..341fcbe88a 100644 --- a/Utilities/Log.cpp +++ b/Utilities/Log.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rPlatform.h" #include "Log.h" #include #include @@ -98,7 +99,7 @@ struct FileListener : LogListener bool mPrependChannelName; FileListener(const std::string& name = _PRGNAME_, bool prependChannel = true) - : mFile(name + ".log", rFile::write), + : mFile(std::string(rPlatform::getConfigDir() + name + ".log").c_str(), rFile::write), mPrependChannelName(prependChannel) { if (!mFile.IsOpened()) @@ -236,4 +237,4 @@ LogManager& LogManager::getInstance() LogChannel &LogManager::getChannel(LogType type) { return mChannels[static_cast(type)]; -} \ No newline at end of file +} diff --git a/Utilities/rPlatform.cpp b/Utilities/rPlatform.cpp index 60144f5001..d6729c718b 100644 --- a/Utilities/rPlatform.cpp +++ b/Utilities/rPlatform.cpp @@ -15,6 +15,10 @@ #include "Emu/Io/XInput/XInputPadHandler.h" #endif +#ifndef _WIN32 +#include +#endif + rCanvas::rCanvas(void *parent) { @@ -135,6 +139,27 @@ int rPlatform::getMouseHandlerCount() return 2; } +std::string rPlatform::getConfigDir() +{ + static std::string dir = "."; + if (dir == ".") { +#ifdef _WIN32 + dir = ""; + //mkdir(dir.c_str()); +#else + if (getenv("XDG_CONFIG_HOME") != NULL) + dir = getenv("XDG_CONFIG_HOME"); + else if (getenv("HOME") != NULL) + dir = getenv("HOME") + std::string("/.config"); + else // Just in case + dir = "./config"; + dir = dir + "/rpcs3/"; + mkdir(dir.c_str()); +#endif + } + return dir; +} + MouseHandlerBase *rPlatform::getMouseHandler(int i) { @@ -179,4 +204,4 @@ PadHandlerBase *rPlatform::getPadHandler(int i) default: return new NullPadHandler(); } -} \ No newline at end of file +} diff --git a/Utilities/rPlatform.h b/Utilities/rPlatform.h index 8d8edfca98..c5b1beab3f 100644 --- a/Utilities/rPlatform.h +++ b/Utilities/rPlatform.h @@ -46,6 +46,7 @@ struct rPlatform static MouseHandlerBase *getMouseHandler(int i); static int getPadHandlerCount(); static PadHandlerBase *getPadHandler(int i); + static std::string getConfigDir(); }; /********************************************************************** diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index 008be9c59d..1f8c728349 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -2,6 +2,7 @@ #include "Ini.h" #include "Utilities/StrFmt.h" +#include "Utilities/rPlatform.h" #include #include @@ -16,7 +17,7 @@ CSimpleIniCaseA *getIniFile() if (inited == false) { ini.SetUnicode(true); - ini.LoadFile(DEF_CONFIG_NAME); + ini.LoadFile(std::string(rPlatform::getConfigDir() + DEF_CONFIG_NAME).c_str()); inited = true; } return &ini; @@ -24,7 +25,7 @@ CSimpleIniCaseA *getIniFile() void saveIniFile() { - getIniFile()->SaveFile(DEF_CONFIG_NAME); + getIniFile()->SaveFile(std::string(rPlatform::getConfigDir() + DEF_CONFIG_NAME).c_str()); } Inis Ini; @@ -77,14 +78,14 @@ static WindowInfo StringToWindowInfo(const std::string& str) vec.push_back(std::stoi(str.substr(start, found == std::string::npos ? found : found - start))); } catch (const std::invalid_argument& e) { - return WindowInfo::GetDefault(); + return WindowInfo(); } if (found == std::string::npos) break; start = found + 1; } if (vec.size() < 4 || vec[0] <= 0 || vec[1] <= 0 || vec[2] < 0 || vec[3] < 0) - return WindowInfo::GetDefault(); + return WindowInfo(); return WindowInfo(std::make_pair(vec[0], vec[1]), std::make_pair(vec[2], vec[3])); } diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index 9af5e69b33..a64fdda666 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -18,12 +18,6 @@ struct WindowInfo , position(_position) { } - - //TODO: remove - static WindowInfo GetDefault() - { - return WindowInfo({ -1, -1 }, { -1, -1 }); - } }; class Ini From 8793d7581100d4efe1d5aae66e7467a81652d5ba Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 11 Jul 2014 06:54:12 +1000 Subject: [PATCH 148/499] Stdafx: More cleanup --- Utilities/SMutex.h | 3 +- rpcs3/Emu/DbgCommand.cpp | 3 +- rpcs3/Emu/GS/GCM.h | 6 ++-- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 2 +- rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h | 3 +- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 3 +- rpcs3/Emu/System.h | 9 ++++++ rpcs3/Gui/CompilerELF.h | 1 + rpcs3/Gui/GSFrame.cpp | 3 +- rpcs3/Gui/MainFrame.h | 1 + rpcs3/stdafx.h | 30 +++---------------- 11 files changed, 28 insertions(+), 36 deletions(-) diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index 9ca53ce0e9..a769fe5469 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -1,5 +1,6 @@ #pragma once #include "BEType.h" +#include "Emu/System.h" extern void SM_Sleep(); extern size_t SM_GetCurrentThreadId(); @@ -123,7 +124,7 @@ public: default: return res; } - if (wait) wait(); + if (wait != nullptr) wait(); if (timeout && counter++ > timeout) { diff --git a/rpcs3/Emu/DbgCommand.cpp b/rpcs3/Emu/DbgCommand.cpp index 211195e1cf..adc4b58bfe 100644 --- a/rpcs3/Emu/DbgCommand.cpp +++ b/rpcs3/Emu/DbgCommand.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" +#include "rpcs3.h" void SendDbgCommand(DbgCommand id, CPUThread* thr ) { wxGetApp().SendDbgCommand(id, thr); -} \ No newline at end of file +} diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 1b444ae079..5c766ebf46 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -1330,10 +1330,8 @@ static const std::string GetMethodName(const u32 id) { NV4097_SET_TRANSFORM_BRANCH_BITS, "SetTransformBranchBits" } , }; - for (u32 i = 0; i < SARRSIZEOF(METHOD_NAME_LIST); ++i) - { - if(METHOD_NAME_LIST[i].id == id) return "cellGcm" + METHOD_NAME_LIST[i].name; - } + for(auto& s: METHOD_NAME_LIST) + if(s.id == id) return "cellGcm" + s.name; return fmt::Format("unknown/illegal method [0x%08x]", id); } diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index cc6f14312e..82f08dc5b7 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -77,7 +77,7 @@ std::string GLVertexDecompilerThread::GetSRC(const u32 n) ret += m_parr.AddParam(PARAM_NONE, "vec4", "tmp" + std::to_string(src[n].tmp_src)); break; case 2: //input - if (d1.input_src < SARRSIZEOF(reg_table)) + if (d1.input_src < (sizeof(reg_table)/sizeof(reg_table[0]))) { ret += m_parr.AddParam(PARAM_IN, "vec4", reg_table[d1.input_src], d1.input_src); } diff --git a/rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h b/rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h index 3ecb827d4b..92012237f3 100644 --- a/rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h +++ b/rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h @@ -3,6 +3,7 @@ #include #include #include "Emu/Io/KeyboardHandler.h" +#include "rpcs3.h" class WindowsKeyboardHandler final : public wxWindow @@ -171,4 +172,4 @@ public: m_keyboards[0].m_buttons.emplace_back('\\', CELL_KEYC_BACKSLASH_106); //m_keyboards[0].m_buttons.emplace_back(, CELL_KEYC_YEN_106); } -}; \ No newline at end of file +}; diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index e339a6143e..7fcc039748 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -5,6 +5,7 @@ #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" +#include "rpcs3.h" #include "cellSysutil.h" #include "cellMsgDialog.h" @@ -442,4 +443,4 @@ int cellMsgDialogProgressBarInc(u32 progressBarIndex, u32 delta) } }); return CELL_OK; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 8f99e5b284..d64cc2e592 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -8,9 +8,18 @@ #include "Emu/GS/GSManager.h" #include "Emu/Audio/AudioManager.h" #include "Emu/FS/VFS.h" +#include "Emu/DbgCommand.h" #include "Loader/Loader.h" #include "SysCalls/Callback.h" +enum Status +{ + Running, + Paused, + Stopped, + Ready, +}; + class EventManager; class ModuleManager; class StaticFuncManager; diff --git a/rpcs3/Gui/CompilerELF.h b/rpcs3/Gui/CompilerELF.h index 6e1c4df161..6608f4d8c3 100644 --- a/rpcs3/Gui/CompilerELF.h +++ b/rpcs3/Gui/CompilerELF.h @@ -4,6 +4,7 @@ #include "Loader/ELF64.h" #include #include +#include "Gui/MainFrame.h" class CompilerELF : public FrameBase { diff --git a/rpcs3/Gui/GSFrame.cpp b/rpcs3/Gui/GSFrame.cpp index b180c0c54d..0a3f53f92f 100644 --- a/rpcs3/Gui/GSFrame.cpp +++ b/rpcs3/Gui/GSFrame.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "GSFrame.h" +#include "rpcs3.h" BEGIN_EVENT_TABLE(GSFrame, wxFrame) EVT_PAINT(GSFrame::OnPaint) @@ -79,4 +80,4 @@ m_size.SetHeight(height); //wxFrame::SetSize(width, height); OnSize(wxSizeEvent()); } -*/ \ No newline at end of file +*/ diff --git a/rpcs3/Gui/MainFrame.h b/rpcs3/Gui/MainFrame.h index 9a11d02f13..975230eef7 100644 --- a/rpcs3/Gui/MainFrame.h +++ b/rpcs3/Gui/MainFrame.h @@ -2,6 +2,7 @@ #include "Gui/Debugger.h" #include "Gui/ConLogFrame.h" +#include "Gui/FrameBase.h" #include diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 618f526901..302c56290f 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -6,9 +6,6 @@ #include #endif -/* size of statically declared array */ -#define SARRSIZEOF(array) (sizeof(array)/sizeof(array[0])) - #define NOMINMAX #ifndef QT_UI #include @@ -41,14 +38,10 @@ #include #endif -#ifdef MSVC_CRT_MEMLEAK_DETECTION - #ifdef _DEBUG - #ifndef DBG_NEW - #define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ ) - #define new DBG_NEW - #endif - #endif // _DEBUG -#endif // MSVC_CRT_MEMLEAK_DETECTION +#if defined(MSVC_CRT_MEMLEAK_DETECTION) && defined(_DEBUG) && !defined(DBG_NEW) + #define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ ) + #define new DBG_NEW +#endif // This header should be frontend-agnostic, so don't assume wx includes everything #include @@ -68,14 +61,6 @@ typedef int16_t s16; typedef int32_t s32; typedef int64_t s64; -enum Status -{ - Running, - Paused, - Stopped, - Ready, -}; - #include "Utilities/StrFmt.h" #include "Utilities/Log.h" #include "Utilities/BEType.h" @@ -90,15 +75,11 @@ enum Status #include "Utilities/Timer.h" #include "Utilities/IdManager.h" -#include "Gui/FrameBase.h" -#include "Emu/System.h" #include "Emu/SysCalls/Callback.h" -#include "Emu/DbgCommand.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" - #include "Emu/FS/vfsDirBase.h" #include "Emu/FS/vfsFileBase.h" #include "Emu/FS/vfsLocalDir.h" @@ -107,9 +88,6 @@ enum Status #include "Emu/FS/vfsStreamMemory.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" -#ifndef QT_UI -#include "rpcs3.h" -#endif #define _PRGNAME_ "RPCS3" #define _PRGVER_ "0.0.0.4" From 51bb9dced4198fee60b783598e90533fac9baeb2 Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 11 Jul 2014 07:13:45 +1000 Subject: [PATCH 149/499] Optimise travis a bit more. Use Cmake 3.0. Also drop rPlatform from stdafx. --- .travis.yml | 9 ++++----- rpcs3/Emu/GS/GL/GLGSRender.h | 1 + rpcs3/Emu/Io/Keyboard.cpp | 2 +- rpcs3/Emu/Io/Mouse.cpp | 2 +- rpcs3/Ini.cpp | 1 - rpcs3/Ini.h | 3 ++- rpcs3/stdafx.h | 1 - 7 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4866b49c1d..f34b33dfcf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,13 +19,12 @@ before_install: - sudo apt-get install libwxgtk3.0-dev libopenal-dev freeglut3-dev libglew-dev - sudo apt-get install aria2 -qq - download_extract() { aria2c -x 16 $1 -o $2 && tar -xf $2; } + - if [ "$CXX" = "g++" ]; then sudo apt-get install -qq g++-4.8; export CXX="g++-4.8" CC="gcc-4.8"; else sudo apt-get install libstdc++-4.8-dev; fi # Travis uses CMake 2.8.7. We require 2.8.8. Grab latest - - sudo apt-get install -qq g++-4.8 - - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8" CC="gcc-4.8"; fi - sudo apt-get install lib32stdc++6 -qq && - aria2c -x 16 http://www.cmake.org/files/v2.8/cmake-2.8.12.1-Linux-i386.sh && - chmod a+x cmake-2.8.12.1-Linux-i386.sh && - sudo ./cmake-2.8.12.1-Linux-i386.sh --skip-license --prefix=/usr; + aria2c -x 16 http://www.cmake.org/files/v3.0/cmake-3.0.0-Linux-i386.sh && + chmod a+x cmake-3.0.0-Linux-i386.sh && + sudo ./cmake-3.0.0-Linux-i386.sh --skip-license --prefix=/usr; before_script: - git submodule update --init asmjit ffmpeg diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index b3bca78d01..c2ad1a82b0 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -1,6 +1,7 @@ #pragma once #include "Emu/GS/GSRender.h" #include "Emu/GS/RSXThread.h" +#include "Utilities/rPlatform.h" #include "GLBuffers.h" #include "GLProgramBuffer.h" diff --git a/rpcs3/Emu/Io/Keyboard.cpp b/rpcs3/Emu/Io/Keyboard.cpp index b6c1f2e963..03b0a72a50 100644 --- a/rpcs3/Emu/Io/Keyboard.cpp +++ b/rpcs3/Emu/Io/Keyboard.cpp @@ -38,4 +38,4 @@ void KeyboardManager::Close() m_keyboard_handler = nullptr; m_inited = false; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/Io/Mouse.cpp b/rpcs3/Emu/Io/Mouse.cpp index e938745249..3c9d569125 100644 --- a/rpcs3/Emu/Io/Mouse.cpp +++ b/rpcs3/Emu/Io/Mouse.cpp @@ -38,4 +38,4 @@ void MouseManager::Close() m_mouse_handler = nullptr; m_inited = false; -} \ No newline at end of file +} diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index 1f8c728349..ad54b0dca8 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -2,7 +2,6 @@ #include "Ini.h" #include "Utilities/StrFmt.h" -#include "Utilities/rPlatform.h" #include #include diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index a64fdda666..8abdfec5ea 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -1,7 +1,8 @@ #pragma once #include -#include "../Utilities/simpleini/SimpleIni.h" +#include "Utilities/rPlatform.h" +#include "Utilities/simpleini/SimpleIni.h" //TODO: make thread safe/remove static singleton CSimpleIniCaseA *getIniFile(); diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 302c56290f..c61296bf72 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -69,7 +69,6 @@ typedef int64_t s64; #include "Utilities/rXml.h" #include "Utilities/rConcurrency.h" #include "Utilities/rMsgBox.h" -#include "Utilities/rPlatform.h" #include "Utilities/Thread.h" #include "Utilities/Array.h" #include "Utilities/Timer.h" From cb9c1030a9d3986f349bb84d12f2b4afdb0260ee Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 11 Jul 2014 10:01:23 +0400 Subject: [PATCH 150/499] Warning fix --- Utilities/SMutex.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index 9ca53ce0e9..fb29087c6b 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -123,7 +123,7 @@ public: default: return res; } - if (wait) wait(); + if (wait != nullptr) wait(); if (timeout && counter++ > timeout) { From 125359e30e9c445e167075b99dfdf968c2cc4c4b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 11 Jul 2014 13:18:23 +0400 Subject: [PATCH 151/499] Some fixes --- rpcs3/Emu/Cell/SPUThread.h | 2 +- rpcs3/Emu/FS/vfsStreamMemory.cpp | 26 +++++++----- rpcs3/Emu/Memory/Memory.cpp | 4 +- rpcs3/Emu/Memory/Memory.h | 42 +++++--------------- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 25 +----------- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 14 ++++++- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 6 ++- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 6 ++- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 30 +++++++++++--- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 9 +++-- rpcs3/Emu/SysCalls/lv2/lv2Fs.h | 4 +- rpcs3/Emu/SysCalls/lv2/sys_rwlock.h | 2 - rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 10 +++-- rpcs3/Emu/SysCalls/lv2/sys_timer.h | 2 - rpcs3/Emu/SysCalls/lv2/sys_vm.h | 2 +- 15 files changed, 94 insertions(+), 90 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 3df6c315a1..cd98ac713e 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -310,7 +310,7 @@ class SPUThread : public PPCThread public: SPU_GPR_hdr GPR[128]; //General-Purpose Register SPU_SPR_hdr SPR[128]; //Special-Purpose Registers -// FPSCR fpscr; //Unused + FPSCR FPSCR; SPU_SNRConfig_hdr cfg; //Signal Notification Registers Configuration (OR-mode enabled: 0x1 for SNR1, 0x2 for SNR2) EventPort SPUPs[64]; // SPU Thread Event Ports diff --git a/rpcs3/Emu/FS/vfsStreamMemory.cpp b/rpcs3/Emu/FS/vfsStreamMemory.cpp index 7f140bf35b..1608f5c1da 100644 --- a/rpcs3/Emu/FS/vfsStreamMemory.cpp +++ b/rpcs3/Emu/FS/vfsStreamMemory.cpp @@ -32,11 +32,14 @@ u64 vfsStreamMemory::Write(const void* src, u64 size) size = GetSize() - Tell(); } - if(!size || !Memory.IsGoodAddr(m_addr + Tell(), size)) return 0; - - Memory.CopyFromReal(m_addr + Tell(), (void*)src, size); - - return vfsStream::Write(src, size); + if (!Memory.CopyFromReal(m_addr + Tell(), (void*)src, size)) + { + return 0; + } + else + { + return vfsStream::Write(src, size); + } } u64 vfsStreamMemory::Read(void* dst, u64 size) @@ -46,9 +49,12 @@ u64 vfsStreamMemory::Read(void* dst, u64 size) size = GetSize() - Tell(); } - if(!size || !Memory.IsGoodAddr(m_addr + Tell(), size)) return 0; - - Memory.CopyToReal(dst, m_addr + Tell(), size); - - return vfsStream::Read(dst, size); + if (!Memory.CopyToReal(dst, m_addr + Tell(), size)) + { + return 0; + } + else + { + return vfsStream::Read(dst, size); + } } diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 6352cd735b..f6e39be85f 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -104,14 +104,14 @@ bool MemoryBlock::GetMemFromAddr(void* dst, const u64 addr, const u32 size) { if(!IsMyAddress(addr) || FixAddr(addr) + size > GetSize()) return false; - return Memory.CopyToReal(dst, (u32)addr, size); + return Memory.CopyToReal(dst, addr, size); } bool MemoryBlock::SetMemFromAddr(void* src, const u64 addr, const u32 size) { if(!IsMyAddress(addr) || FixAddr(addr) + size > GetSize()) return false; - return Memory.CopyFromReal((u32)addr, src, size); + return Memory.CopyFromReal(addr, src, size); } bool MemoryBlock::GetMemFFromAddr(void* dst, const u64 addr) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index ddadd97a5c..b0fee3bac6 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -318,51 +318,31 @@ public: u64 Read64(const u64 addr); u128 Read128(const u64 addr); - bool CopyToReal(void* real, u32 from, u32 count) + bool CopyToReal(void* real, u64 from, u32 count) { - if (!count) return true; + if (!IsGoodAddr(from, count)) return false; memcpy(real, GetMemFromAddr(from), count); return true; } - bool CopyFromReal(u32 to, const void* real, u32 count) + bool CopyFromReal(u64 to, const void* real, u32 count) { - if (!count) return true; + if (!IsGoodAddr(to, count)) return false; memcpy(GetMemFromAddr(to), real, count); return true; } - bool Copy(u32 to, u32 from, u32 count) + bool Copy(u64 to, u64 from, u32 count) { - if (u8* buf = (u8*)malloc(count)) - { - if (CopyToReal(buf, from, count)) - { - if (CopyFromReal(to, buf, count)) - { - free(buf); - return true; - } - else - { - free(buf); - return false; - } - } - else - { - free(buf); - return false; - } - } - else - { - return false; - } + if (!IsGoodAddr(to, count) || !IsGoodAddr(from, count)) return false; + + memmove(GetMemFromAddr(to), GetMemFromAddr(from), count); + + return true; } void ReadLeft(u8* dst, const u64 addr, const u32 size) @@ -797,7 +777,7 @@ public: u32 AppendRawBytes(const u8 *bytes, size_t count) { - Memory.CopyFromReal(this->m_addr, bytes, count); + memmove(Memory + this->m_addr, bytes, count); this->m_addr += count; return this->m_addr; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 560850d32a..60b52a6c2c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -724,33 +724,11 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) if (!af.data) // fake: empty data { - /*u8* buf = (u8*)malloc(4096); - memset(buf, 0, 4096); - Memory.CopyFromReal(outBuffer_addr, buf, 4096); - free(buf);*/ return result; } + // copy data - SwrContext* swr = nullptr; - - /*swr = swr_alloc_set_opts(NULL, AV_CH_LAYOUT_STEREO, AV_SAMPLE_FMT_FLT, 48000, - frame->channel_layout, (AVSampleFormat)frame->format, frame->sample_rate, 0, NULL); - - if (!swr) - { - LOG_ERROR(HLE, "cellAdecGetPcm(%d): swr_alloc_set_opts() failed", handle); - Emu.Pause(); - free(out); - if (af.data) - { - av_frame_unref(af.data); - av_frame_free(&af.data); - } - return result; - }*/ u8* out = (u8*)malloc(af.size); - // something is wrong - //swr_convert(swr, &out, frame->nb_samples, (const u8**)frame->extended_data, frame->nb_samples); // reverse byte order, extract data: float* in_f[2]; @@ -770,7 +748,6 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) } free(out); - if (swr) swr_free(&swr); if (af.data) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 6ebe0c0228..297d6e00cf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -494,7 +494,12 @@ int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) const s32 res = ctxt->current - ctxt->begin - ctrl.put; - if(res > 0) Memory.Copy(ctxt->begin, ctxt->current - res, res); + if (res > 0 && !Memory.Copy(ctxt->begin, ctxt->current - res, res)) + { + cellGcmSys->Error("cellGcmSetPrepareFlip(): Memory.Copy(0x%x, 0x%x, 0x%x) failed", (u32)ctxt->begin, (u32)ctxt->current - res, res); + Emu.Pause(); + return CELL_EFAULT; + } ctxt->current = ctxt->begin + res; //InterlockedExchange64((volatile long long*)((u8*)&ctrl + offsetof(CellGcmControl, put)), (u64)(u32)re(res)); @@ -1160,7 +1165,12 @@ int cellGcmCallback(u32 context_addr, u32 count) const s32 res = ctx.current - ctx.begin - ctrl.put; - if(res > 0) Memory.Copy(ctx.begin, ctx.current - res, res); + if (res > 0 && !Memory.Copy(ctx.begin, ctx.current - res, res)) + { + cellGcmSys->Error("cellGcmCallback(): Memory.Copy(0x%x, 0x%x, 0x%x) failed", (u32)ctx.begin, (u32)ctx.current - res, res); + Emu.Pause(); + return CELL_EFAULT; + } ctx.current = ctx.begin + res; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index e0ccafb456..866d6d48dc 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -182,7 +182,11 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m switch((u32)current_outParam.outputColorSpace) { case CELL_GIFDEC_RGBA: - Memory.CopyFromReal(data.GetAddr(), image.get(), image_size); + if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) + { + cellGifDec->Error("cellGifDecDecodeData() failed (dataa_addr=0x%x)", data.GetAddr()); + return CELL_EFAULT; + } break; case CELL_GIFDEC_ARGB: diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index 922321f9c9..c24fcc5f8e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -164,7 +164,11 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m case CELL_JPG_RGBA: case CELL_JPG_RGB: image_size *= current_outParam.outputColorSpace == CELL_JPG_RGBA ? 4 : 3; - Memory.CopyFromReal(data.GetAddr(), image.get(), image_size); + if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) + { + cellJpgDec->Error("cellJpgDecDecodeData() failed (data_addr=0x%x)", data.GetAddr()); + return CELL_EFAULT; + } break; case CELL_JPG_ARGB: diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 5dda7675d1..1ab78ff7a0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -148,7 +148,11 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tsrc.srcSelect.ToBE()) { case se32(CELL_PNGDEC_BUFFER): - Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize()); + if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) + { + cellPngDec->Error("cellPngDecReadHeader() failed ()"); + return CELL_EFAULT; + } break; case se32(CELL_PNGDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); @@ -213,7 +217,11 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m switch(subHandle_data->src.srcSelect.ToLE()) { case CELL_PNGDEC_BUFFER: - Memory.Copy(png.GetAddr(), subHandle_data->src.streamPtr.ToLE(), png.GetSize()); + if (!Memory.Copy(png.GetAddr(), subHandle_data->src.streamPtr.ToLE(), png.GetSize())) + { + cellPngDec->Error("cellPngDecDecodeData() failed (I)"); + return CELL_EFAULT; + } break; case CELL_PNGDEC_FILE: cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); @@ -249,12 +257,20 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m { const int dstOffset = i * bytesPerLine; const int srcOffset = width * nComponents * (flip ? height - i - 1 : i); - Memory.CopyFromReal(data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize); + if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize)) + { + cellPngDec->Error("cellPngDecDecodeData() failed (II)"); + return CELL_EFAULT; + } } } else { - Memory.CopyFromReal(data.GetAddr(), image.get(), image_size); + if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) + { + cellPngDec->Error("cellPngDecDecodeData() failed (III)"); + return CELL_EFAULT; + } } } break; @@ -279,7 +295,11 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m output[j + 2] = image.get()[srcOffset + j + 1]; output[j + 3] = image.get()[srcOffset + j + 2]; } - Memory.CopyFromReal(data.GetAddr() + dstOffset, output, linesize); + if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, output, linesize)) + { + cellPngDec->Error("cellPngDecDecodeData() failed (IV)"); + return CELL_EFAULT; + } } free(output); } diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 2908525db2..6721a233c3 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -168,9 +168,12 @@ int sys_raw_spu_image_load(int id, mem_ptr_t img) { sysPrxForUser->Warning("sys_raw_spu_image_load(id=0x%x, img_addr=0x%x)", id, img.GetAddr()); - Memory.Copy(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id, (u32)img->segs_addr, 256 * 1024); - Memory.Write32(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id + RAW_SPU_PROB_OFFSET + SPU_NPC_offs, - (u32)img->entry_point); + if (!Memory.Copy(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id, (u32)img->segs_addr, 256 * 1024)) + { + sysPrxForUser->Error("sys_raw_spu_image_load() failed"); + return CELL_EFAULT; + } + Memory.Write32(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id + RAW_SPU_PROB_OFFSET + SPU_NPC_offs, (u32)img->entry_point); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h index 1ab23595b3..c2a4faf33f 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h @@ -71,7 +71,7 @@ enum cellFsStStatus }; -#pragma pack(4) +#pragma pack(push, 4) struct CellFsStat { @@ -98,7 +98,7 @@ struct CellFsDirent char d_name[CELL_MAX_FS_FILE_NAME_LENGTH + 1]; }; -#pragma pack() +#pragma pack(pop) struct CellFsAio { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.h b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.h index 4097ff4cd5..0ca4a41dff 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.h @@ -14,8 +14,6 @@ struct sys_rwlock_attribute_t }; }; -#pragma pack() - struct RWLock { std::mutex m_lock; // internal lock diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 1ce34a3c6b..39f39ee591 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -136,10 +136,14 @@ s32 sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t< u64 a3 = arg->arg3; u64 a4 = arg->arg4; - CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_SPU); //copy SPU image: - u32 spu_offset = Memory.MainMem.AllocAlign(256 * 1024); - Memory.CopyToReal(Memory + spu_offset, (u32)img->segs_addr, 256 * 1024); + auto spu_offset = Memory.MainMem.AllocAlign(256 * 1024); + if (!Memory.Copy(spu_offset, (u32)img->segs_addr, 256 * 1024)) + { + return CELL_EFAULT; + } + + CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_SPU); //initialize from new place: new_thread.SetOffset(spu_offset); new_thread.SetEntry(spu_ep); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.h b/rpcs3/Emu/SysCalls/lv2/sys_timer.h index 16739e9542..def0f16c36 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.h @@ -20,8 +20,6 @@ struct timer sys_timer_information_t timer_information_t; }; -#pragma pack() - s32 sys_timer_create(mem32_t timer_id); s32 sys_timer_destroy(u32 timer_id); s32 sys_timer_get_information(u32 timer_id, mem_ptr_t info); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_vm.h b/rpcs3/Emu/SysCalls/lv2/sys_vm.h index c4e7d74f36..04f3688b94 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_vm.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_vm.h @@ -1,4 +1,4 @@ -#pragma pack +#pragma once #define SYS_VM_TEST_INVALID 0x0000ULL #define SYS_VM_TEST_UNUSED 0x0001ULL From ad524798fa49017a55b7c65d623742c87db0a145 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 11 Jul 2014 13:39:51 +0400 Subject: [PATCH 152/499] Compilation fix --- rpcs3/Emu/Cell/SPUThread.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index cd98ac713e..b0e70f8da2 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -310,7 +310,7 @@ class SPUThread : public PPCThread public: SPU_GPR_hdr GPR[128]; //General-Purpose Register SPU_SPR_hdr SPR[128]; //Special-Purpose Registers - FPSCR FPSCR; + //FPSCR FPSCR; SPU_SNRConfig_hdr cfg; //Signal Notification Registers Configuration (OR-mode enabled: 0x1 for SNR1, 0x2 for SNR2) EventPort SPUPs[64]; // SPU Thread Event Ports From 2fe52451e1deef66a56bbd05d55b9c329cf94c7a Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 11 Jul 2014 15:32:34 +0400 Subject: [PATCH 153/499] Exceptions fixed --- rpcs3/Emu/CPU/CPUThread.cpp | 2 +- rpcs3/Emu/Memory/Memory.cpp | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index c19d8f48e2..df917d11aa 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -283,7 +283,7 @@ void CPUThread::ExecOnce() #ifdef _WIN32 void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) { - const u64 addr = (u64)Memory.GetBaseAddr() - (u64)pExp->ExceptionRecord->ExceptionAddress; + const u64 addr = (u64)pExp->ExceptionRecord->ExceptionInformation[1] - (u64)Memory.GetBaseAddr(); if (addr < 0x100000000 && u == EXCEPTION_ACCESS_VIOLATION) { // TODO: allow recovering from a page fault diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index f6e39be85f..dc6b77e0ef 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -359,19 +359,19 @@ bool MemoryBlockLE::Write128(const u64 addr, const u128 value) //MemoryBase void MemoryBase::Write8(u64 addr, const u8 data) { - *(u8*)((u64)GetBaseAddr() + addr) = data; + *(u8*)((u64)GetBaseAddr() + (u32)addr) = data; } void MemoryBase::Write16(u64 addr, const u16 data) { - *(u16*)((u64)GetBaseAddr() + addr) = re16(data); + *(u16*)((u64)GetBaseAddr() + (u32)addr) = re16(data); } void MemoryBase::Write32(u64 addr, const u32 data) { - if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || addr >= 0x100000000 || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) { - *(u32*)((u64)GetBaseAddr() + addr) = re32(data); + *(u32*)((u64)GetBaseAddr() + (u32)addr) = re32(data); } else { @@ -381,12 +381,12 @@ void MemoryBase::Write32(u64 addr, const u32 data) void MemoryBase::Write64(u64 addr, const u64 data) { - *(u64*)((u64)GetBaseAddr() + addr) = re64(data); + *(u64*)((u64)GetBaseAddr() + (u32)addr) = re64(data); } void MemoryBase::Write128(u64 addr, const u128 data) { - *(u128*)((u64)GetBaseAddr() + addr) = re128(data); + *(u128*)((u64)GetBaseAddr() + (u32)addr) = re128(data); } bool MemoryBase::Write8NN(u64 addr, const u8 data) @@ -426,19 +426,19 @@ bool MemoryBase::Write128NN(u64 addr, const u128 data) u8 MemoryBase::Read8(u64 addr) { - return *(u8*)((u64)GetBaseAddr() + addr); + return *(u8*)((u64)GetBaseAddr() + (u32)addr); } u16 MemoryBase::Read16(u64 addr) { - return re16(*(u16*)((u64)GetBaseAddr() + addr)); + return re16(*(u16*)((u64)GetBaseAddr() + (u32)addr)); } u32 MemoryBase::Read32(u64 addr) { - if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || addr >= 0x100000000 || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) { - return re32(*(u32*)((u64)GetBaseAddr() + addr)); + return re32(*(u32*)((u64)GetBaseAddr() + (u32)addr)); } else { @@ -450,12 +450,12 @@ u32 MemoryBase::Read32(u64 addr) u64 MemoryBase::Read64(u64 addr) { - return re64(*(u64*)((u64)GetBaseAddr() + addr)); + return re64(*(u64*)((u64)GetBaseAddr() + (u32)addr)); } u128 MemoryBase::Read128(u64 addr) { - return re128(*(u128*)((u64)GetBaseAddr() + addr)); + return re128(*(u128*)((u64)GetBaseAddr() + (u32)addr)); } template<> __forceinline u64 MemoryBase::ReverseData<1>(u64 val) { return val; } From 2203cb1dcf37ec6d692333195fa3d5247449b871 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 11 Jul 2014 16:22:56 +0400 Subject: [PATCH 154/499] F|_|C|< the speed, we need some checks --- rpcs3/Emu/Memory/Memory.cpp | 117 +++++++++++++++++++++++++++++++----- 1 file changed, 101 insertions(+), 16 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index dc6b77e0ef..8faf5b3fe9 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -359,34 +359,74 @@ bool MemoryBlockLE::Write128(const u64 addr, const u128 value) //MemoryBase void MemoryBase::Write8(u64 addr, const u8 data) { - *(u8*)((u64)GetBaseAddr() + (u32)addr) = data; + if ((u32)addr == addr) + { + *(u8*)((u64)GetBaseAddr() + addr) = data; + } + else + { + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + } } void MemoryBase::Write16(u64 addr, const u16 data) { - *(u16*)((u64)GetBaseAddr() + (u32)addr) = re16(data); + if ((u32)addr == addr) + { + *(u16*)((u64)GetBaseAddr() + addr) = re16(data); + } + else + { + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + } } void MemoryBase::Write32(u64 addr, const u32 data) { - if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || addr >= 0x100000000 || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + if ((u32)addr == addr) { - *(u32*)((u64)GetBaseAddr() + (u32)addr) = re32(data); + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + { + *(u32*)((u64)GetBaseAddr() + addr) = re32(data); + } + else + { + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data); + } } else { - RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data); + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); } } void MemoryBase::Write64(u64 addr, const u64 data) { - *(u64*)((u64)GetBaseAddr() + (u32)addr) = re64(data); + if ((u32)addr == addr) + { + *(u64*)((u64)GetBaseAddr() + addr) = re64(data); + } + else + { + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + } } void MemoryBase::Write128(u64 addr, const u128 data) { - *(u128*)((u64)GetBaseAddr() + (u32)addr) = re128(data); + if ((u32)addr == addr) + { + *(u128*)((u64)GetBaseAddr() + addr) = re128(data); + } + else + { + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + } } bool MemoryBase::Write8NN(u64 addr, const u8 data) @@ -426,36 +466,81 @@ bool MemoryBase::Write128NN(u64 addr, const u128 data) u8 MemoryBase::Read8(u64 addr) { - return *(u8*)((u64)GetBaseAddr() + (u32)addr); + if ((u32)addr == addr) + { + return *(u8*)((u64)GetBaseAddr() + addr); + } + else + { + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + return 0; + } } u16 MemoryBase::Read16(u64 addr) { - return re16(*(u16*)((u64)GetBaseAddr() + (u32)addr)); + if ((u32)addr == addr) + { + return re16(*(u16*)((u64)GetBaseAddr() + addr)); + } + else + { + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + return 0; + } } u32 MemoryBase::Read32(u64 addr) { - if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || addr >= 0x100000000 || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + if ((u32)addr == addr) { - return re32(*(u32*)((u64)GetBaseAddr() + (u32)addr)); + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + { + return re32(*(u32*)((u64)GetBaseAddr() + addr)); + } + else + { + u32 res; + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res); + return res; + } } else { - u32 res; - RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res); - return res; + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + return 0; } } u64 MemoryBase::Read64(u64 addr) { - return re64(*(u64*)((u64)GetBaseAddr() + (u32)addr)); + if ((u32)addr == addr) + { + return re64(*(u64*)((u64)GetBaseAddr() + addr)); + } + else + { + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + return 0; + } } u128 MemoryBase::Read128(u64 addr) { - return re128(*(u128*)((u64)GetBaseAddr() + (u32)addr)); + if ((u32)addr == addr) + { + return re128(*(u128*)((u64)GetBaseAddr() + addr)); + } + else + { + LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + Emu.Pause(); + return u128::From128(0, 0); + } } template<> __forceinline u64 MemoryBase::ReverseData<1>(u64 val) { return val; } From c16daed87da994ab056a0bbb022c9f9dbf32411e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 11 Jul 2014 16:50:50 +0400 Subject: [PATCH 155/499] Compilation fix --- rpcs3/Emu/Memory/Memory.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 8faf5b3fe9..dc21cc5b7b 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -365,7 +365,7 @@ void MemoryBase::Write8(u64 addr, const u8 data) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); } } @@ -378,7 +378,7 @@ void MemoryBase::Write16(u64 addr, const u16 data) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); } } @@ -398,7 +398,7 @@ void MemoryBase::Write32(u64 addr, const u32 data) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); } } @@ -411,7 +411,7 @@ void MemoryBase::Write64(u64 addr, const u64 data) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); } } @@ -424,7 +424,7 @@ void MemoryBase::Write128(u64 addr, const u128 data) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); } } @@ -472,7 +472,7 @@ u8 MemoryBase::Read8(u64 addr) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); return 0; } @@ -486,7 +486,7 @@ u16 MemoryBase::Read16(u64 addr) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); return 0; } @@ -509,7 +509,7 @@ u32 MemoryBase::Read32(u64 addr) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); return 0; } @@ -523,7 +523,7 @@ u64 MemoryBase::Read64(u64 addr) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); return 0; } @@ -537,7 +537,7 @@ u128 MemoryBase::Read128(u64 addr) } else { - LOG_ERROR(MEMORY, __FUNCTION__ "(): invalid address (0x%llx)", addr); + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); Emu.Pause(); return u128::From128(0, 0); } From 14050c7302faecf90bfcbd4d42b496313cce67ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Fri, 11 Jul 2014 18:18:12 +0200 Subject: [PATCH 156/499] Removed: "Ignore R/W memory errors" option Very small commit to take care of one thing missing in #409. Reasons for that change: AlexAltea: it's fatal error that shouldn't be ignored AlexAltea: the second reason, ps3 can handle page faults by itself --- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 4 ++-- rpcs3/Gui/MainFrame.cpp | 4 ---- rpcs3/Ini.h | 4 ---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 4618e9f94b..60cd6fde8b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -1135,8 +1135,8 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t if(colorBuffers.GetAddr() % COLOR_BUFFER_ALIGNMENT || vertexArray.GetAddr() % VERTEX_BUFFER_ALIGNMENT || fragmentShader.GetAddr() % FRAGMENT_SHADER_ALIGNMENT) { - cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT (alignment)"); - return CELL_RESC_ERROR_BAD_ARGUMENT; + cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ALIGNMENT"); + return CELL_RESC_ERROR_BAD_ALIGNMENT; } s_rescInternalInstance->m_colorBuffersEA = colorBuffers.GetAddr(); diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index d0bb8d6daf..6938bc2f89 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -412,7 +412,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxComboBox* cbox_hle_loglvl = new wxComboBox(p_hle, wxID_ANY); wxComboBox* cbox_sys_lang = new wxComboBox(p_system, wxID_ANY); - wxCheckBox* chbox_cpu_ignore_rwerrors = new wxCheckBox(p_cpu, wxID_ANY, "Ignore Read/Write errors"); wxCheckBox* chbox_gs_log_prog = new wxCheckBox(p_graphics, wxID_ANY, "Log vertex/fragment programs"); wxCheckBox* chbox_gs_dump_depth = new wxCheckBox(p_graphics, wxID_ANY, "Write Depth Buffer"); wxCheckBox* chbox_gs_dump_color = new wxCheckBox(p_graphics, wxID_ANY, "Write Color Buffers"); @@ -489,7 +488,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) // Get values from .ini - chbox_cpu_ignore_rwerrors->SetValue(Ini.CPUIgnoreRWErrors.GetValue()); chbox_gs_log_prog ->SetValue(Ini.GSLogPrograms.GetValue()); chbox_gs_dump_depth ->SetValue(Ini.GSDumpDepthBuffer.GetValue()); chbox_gs_dump_color ->SetValue(Ini.GSDumpColorBuffers.GetValue()); @@ -541,7 +539,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) // Core s_subpanel_cpu->Add(s_round_cpu_decoder, wxSizerFlags().Border(wxALL, 5).Expand()); - s_round_cpu_decoder->Add(chbox_cpu_ignore_rwerrors, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_cpu->Add(s_round_spu_decoder, wxSizerFlags().Border(wxALL, 5).Expand()); // Graphics @@ -593,7 +590,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) if(diag.ShowModal() == wxID_OK) { Ini.CPUDecoderMode.SetValue(cbox_cpu_decoder->GetSelection() + 1); - Ini.CPUIgnoreRWErrors.SetValue(chbox_cpu_ignore_rwerrors->GetValue()); Ini.SPUDecoderMode.SetValue(cbox_spu_decoder->GetSelection() + 1); Ini.GSRenderMode.SetValue(cbox_gs_render->GetSelection()); Ini.GSResolution.SetValue(ResolutionNumToId(cbox_gs_resolution->GetSelection() + 1)); diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index 8abdfec5ea..523f107c98 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -100,7 +100,6 @@ public: // Core IniEntry CPUDecoderMode; IniEntry SPUDecoderMode; - IniEntry CPUIgnoreRWErrors; // Graphics IniEntry GSRenderMode; @@ -165,7 +164,6 @@ public: // Core CPUDecoderMode.Init("CPU_DecoderMode", path); - CPUIgnoreRWErrors.Init("CPU_IgnoreRWErrors", path); SPUDecoderMode.Init("CPU_SPUDecoderMode", path); // Graphics @@ -227,7 +225,6 @@ public: { // Core CPUDecoderMode.Load(2); - CPUIgnoreRWErrors.Load(true); SPUDecoderMode.Load(1); // Graphics @@ -290,7 +287,6 @@ public: { // CPU/SPU CPUDecoderMode.Save(); - CPUIgnoreRWErrors.Save(); SPUDecoderMode.Save(); // Graphics From 6e06fdf638e5828ab0fd38082531839737d4a5fe Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 11 Jul 2014 21:59:13 +1000 Subject: [PATCH 157/499] Stdafx: Major header cleanup --- Utilities/Array.h | 88 ---------------------- Utilities/SSemaphore.cpp | 3 +- Utilities/Thread.cpp | 1 + Utilities/Thread.h | 8 +- Utilities/rConcurrency.cpp | 41 ---------- Utilities/rConcurrency.h | 22 ------ Utilities/rXml.cpp | 1 + Utilities/simpleini/ConvertUTF.h | 2 + rpcs3/CMakeLists.txt | 2 - rpcs3/Crypto/aes.h | 4 +- rpcs3/Crypto/lz.h | 1 + rpcs3/Crypto/sha1.h | 3 +- rpcs3/Emu/Audio/AL/OpenALThread.cpp | 1 + rpcs3/Emu/Cell/PPUThread.h | 6 +- rpcs3/Emu/Cell/SPURSManager.h | 2 + rpcs3/Emu/Cell/SPUThread.h | 2 + rpcs3/Emu/FS/VFS.cpp | 1 + rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 2 +- rpcs3/Emu/Memory/Memory.cpp | 2 + rpcs3/Emu/Memory/Memory.h | 1 + rpcs3/Emu/SysCalls/Modules.h | 4 +- rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 2 +- rpcs3/Emu/SysCalls/SC_FUNC.h | 2 + rpcs3/Emu/SysCalls/lv2/sys_prx.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 14 ++-- rpcs3/Emu/SysCalls/lv2/sys_timer.h | 1 - rpcs3/Emu/System.h | 1 + rpcs3/Gui/AboutDialog.h | 2 + rpcs3/Gui/GSFrame.cpp | 1 + rpcs3/Gui/InstructionEditor.h | 2 + rpcs3/Gui/RegisterEditor.h | 2 + rpcs3/Gui/VHDDManager.cpp | 1 + rpcs3/Loader/TROPUSR.cpp | 1 + rpcs3/emucore.vcxproj | 4 +- rpcs3/emucore.vcxproj.filters | 8 +- rpcs3/rpcs3.cpp | 2 + rpcs3/rpcs3.h | 2 + rpcs3/rpcs3.vcxproj | 5 +- rpcs3/rpcs3.vcxproj.filters | 11 +-- rpcs3/stdafx.h | 25 +----- 41 files changed, 68 insertions(+), 217 deletions(-) delete mode 100644 Utilities/Array.h delete mode 100644 Utilities/rConcurrency.cpp delete mode 100644 Utilities/rConcurrency.h diff --git a/Utilities/Array.h b/Utilities/Array.h deleted file mode 100644 index 0855fdbdc7..0000000000 --- a/Utilities/Array.h +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once - -template class SizedStack -{ - T m_ptr[size]; - uint m_count; - -public: - SizedStack() - { - Clear(); - } - - ~SizedStack() - { - Clear(); - } - - void Clear() - { - m_count = 0; - } - - bool Pop(T& dst) - { - if(!m_count) - return false; - - dst = m_ptr[--m_count]; - return true; - } - - bool Push(const T& src) - { - if(m_count + 1 > size) - return false; - - m_ptr[m_count++] = src; - return true; - } - - size_t GetFreeCount() const - { - return size - m_count; - } - - size_t GetCount() const - { - return m_count; - } - - size_t GetMaxCount() const - { - return size; - } -}; - -template struct ScopedPtr -{ -private: - T* m_ptr; - -public: - ScopedPtr() : m_ptr(nullptr) - { - } - - ScopedPtr(T* ptr) : m_ptr(ptr) - { - } - - ~ScopedPtr() - { - Swap(nullptr); - } - - operator T*() { return m_ptr; } - operator const T*() const { return m_ptr; } - - T* operator ->() { return m_ptr; } - const T* operator ->() const { return m_ptr; } - - void Swap(T* ptr) - { - delete m_ptr; - m_ptr = ptr; - } -}; diff --git a/Utilities/SSemaphore.cpp b/Utilities/SSemaphore.cpp index 47e9c76079..37c3cc6faa 100644 --- a/Utilities/SSemaphore.cpp +++ b/Utilities/SSemaphore.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/SSemaphore.h" +#include "Emu/System.h" void SSemaphore::wait() { @@ -84,4 +85,4 @@ bool SSemaphore::post_and_wait() wait(); return true; -} \ No newline at end of file +} diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index 38912a139a..a98d8c6b63 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" #include "Thread.h" diff --git a/Utilities/Thread.h b/Utilities/Thread.h index 4485227e2d..1f27f2a683 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -1,5 +1,4 @@ #pragma once -#include "Array.h" #include #include #include @@ -8,6 +7,13 @@ #include #include +static std::thread::id main_thread; + +struct rThread +{ + static bool IsMain() { std::this_thread::get_id() == main_thread; } +}; + class ThreadExec; class NamedThreadBase diff --git a/Utilities/rConcurrency.cpp b/Utilities/rConcurrency.cpp deleted file mode 100644 index c36f70e486..0000000000 --- a/Utilities/rConcurrency.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "stdafx.h" - -rTimer::rTimer() -{ - handle = reinterpret_cast(new wxTimer()); -} - -rTimer::~rTimer() -{ - delete reinterpret_cast(handle); -} - -void rTimer::Start() -{ - reinterpret_cast(handle)->Start(); -} - -void rTimer::Stop() -{ - reinterpret_cast(handle)->Stop(); -} - -void rSleep(u32 time) -{ - wxSleep(time); -} - -void rMicroSleep(u64 time) -{ - wxMicroSleep(time); -} - -bool rThread::IsMain() -{ - return wxThread::IsMain(); -} - -void rYieldIfNeeded() -{ - wxYieldIfNeeded(); -} \ No newline at end of file diff --git a/Utilities/rConcurrency.h b/Utilities/rConcurrency.h deleted file mode 100644 index 8504daef1b..0000000000 --- a/Utilities/rConcurrency.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -struct rTimer -{ - rTimer(); - rTimer(const rTimer& other) = delete; - ~rTimer(); - void Start(); - void Stop(); -private: - void *handle; -}; - -void rSleep(u32 time); -void rMicroSleep(u64 time); - -struct rThread -{ - static bool IsMain(); -}; - -void rYieldIfNeeded(); \ No newline at end of file diff --git a/Utilities/rXml.cpp b/Utilities/rXml.cpp index 62da3d4c0c..0a8fabf51c 100644 --- a/Utilities/rXml.cpp +++ b/Utilities/rXml.cpp @@ -2,6 +2,7 @@ #include +#include "Utilities/rXml.h" #include rXmlNode::rXmlNode() diff --git a/Utilities/simpleini/ConvertUTF.h b/Utilities/simpleini/ConvertUTF.h index 14d7b70dca..4c8ab6086b 100644 --- a/Utilities/simpleini/ConvertUTF.h +++ b/Utilities/simpleini/ConvertUTF.h @@ -1,3 +1,5 @@ +#pragma once + /* * Copyright 2001-2004 Unicode, Inc. * diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 956b612d2b..5e713720d4 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -66,8 +66,6 @@ ${wxWidgets_INCLUDE_DIRS} ${OPENAL_INCLUDE_DIR} "${RPCS3_SRC_DIR}/../ffmpeg/${PLATFORM_ARCH}/include" "${RPCS3_SRC_DIR}" -"${RPCS3_SRC_DIR}/Emu" -"${RPCS3_SRC_DIR}/Gui" "${RPCS3_SRC_DIR}/Loader" "${RPCS3_SRC_DIR}/Crypto" "${RPCS3_SRC_DIR}/.." diff --git a/rpcs3/Crypto/aes.h b/rpcs3/Crypto/aes.h index 7a9c20a567..6d85edc369 100644 --- a/rpcs3/Crypto/aes.h +++ b/rpcs3/Crypto/aes.h @@ -1,3 +1,5 @@ +#pragma once + /** * \file aes.h * @@ -174,4 +176,4 @@ void aes_cmac(aes_context *ctx, int length, unsigned char *input, unsigned char #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/rpcs3/Crypto/lz.h b/rpcs3/Crypto/lz.h index 78cce623b6..c27192624c 100644 --- a/rpcs3/Crypto/lz.h +++ b/rpcs3/Crypto/lz.h @@ -1,3 +1,4 @@ +#pragma once #include int decode_range(unsigned int *range, unsigned int *code, unsigned char **src); diff --git a/rpcs3/Crypto/sha1.h b/rpcs3/Crypto/sha1.h index 9272d94746..84d4bd80d2 100644 --- a/rpcs3/Crypto/sha1.h +++ b/rpcs3/Crypto/sha1.h @@ -1,3 +1,4 @@ +#pragma once /** * \file sha1.h * @@ -158,4 +159,4 @@ void sha1_hmac( const unsigned char *key, size_t keylen, #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/rpcs3/Emu/Audio/AL/OpenALThread.cpp b/rpcs3/Emu/Audio/AL/OpenALThread.cpp index 9ed92f04e3..5d24514d46 100644 --- a/rpcs3/Emu/Audio/AL/OpenALThread.cpp +++ b/rpcs3/Emu/Audio/AL/OpenALThread.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Emu/System.h" #include "rpcs3/Ini.h" #include "OpenALThread.h" diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 57b65474aa..6a183fb0dc 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -1,7 +1,5 @@ -#ifndef PPUTHREAD_H -#define PPUTHREAD_H +#pragma once #include "Emu/Cell/PPCThread.h" -#include "Emu/SysCalls/SysCalls.h" #include enum @@ -861,4 +859,4 @@ protected: }; PPUThread& GetCurrentPPUThread(); -#endif //PPUTHREAD_H + diff --git a/rpcs3/Emu/Cell/SPURSManager.h b/rpcs3/Emu/Cell/SPURSManager.h index 9ad7ec0a4b..ff7a2b7ff5 100644 --- a/rpcs3/Emu/Cell/SPURSManager.h +++ b/rpcs3/Emu/Cell/SPURSManager.h @@ -1,5 +1,7 @@ #pragma once +#include "Emu/Memory/Memory.h" + // SPURS defines. enum SPURSKernelInterfaces { diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index b0e70f8da2..b082d2c7c7 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -2,6 +2,8 @@ #include "PPCThread.h" #include "Emu/Event.h" #include "Emu/SysCalls/lv2/sys_spu.h" +#include "Emu/SysCalls/lv2/sys_event.h" +#include "Emu/SysCalls/lv2/sys_time.h" #include "MFC.h" #include "Emu/SysCalls/ErrorCodes.h" #include diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index 83da350d73..3c79002e13 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -4,6 +4,7 @@ #include "VFS.h" #include "Emu/HDD/HDD.h" #include "vfsDeviceLocalFile.h" +#include "Ini.h" int sort_devices(const void* _a, const void* _b) { diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 6bc225daca..10ada356ad 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -1,4 +1,4 @@ - +#pragma once //DynamicMemoryBlockBase template DynamicMemoryBlockBase::DynamicMemoryBlockBase() diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index dc21cc5b7b..7cc75f4db2 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -3,6 +3,8 @@ #include "Utilities/Log.h" #include "Memory.h" +#include "Emu/System.h" +#include "Ini.h" MemoryBase Memory; diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index b0fee3bac6..7d781a7a18 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -5,6 +5,7 @@ #endif #include "MemoryBlock.h" +#include "Emu/SysCalls/Callback.h" #include using std::nullptr_t; diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index e0374db2bf..31947f14c0 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -1,8 +1,6 @@ #pragma once -#include "Emu/Memory/Memory.h" - -#define declCPU PPUThread& CPU = GetCurrentPPUThread +#include "Emu/SysCalls/SC_FUNC.h" //TODO struct ModuleFunc diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 48db1ef644..dc326289a0 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -1,12 +1,12 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rXml.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/FS/vfsDir.h" -#include "wx/xml/xml.h" #include "sceNp.h" #include "sceNpTrophy.h" diff --git a/rpcs3/Emu/SysCalls/SC_FUNC.h b/rpcs3/Emu/SysCalls/SC_FUNC.h index a30d52505c..6b9fde794a 100644 --- a/rpcs3/Emu/SysCalls/SC_FUNC.h +++ b/rpcs3/Emu/SysCalls/SC_FUNC.h @@ -1,6 +1,8 @@ #pragma once #include "Emu/Memory/Memory.h" +#include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SysCalls.h" #define RESULT(x) SC_ARGS_1 = (x) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index bea1e06449..fccdee285f 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -3,6 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/FS/vfsFile.h" #include "sys_prx.h" SysCallBase sys_prx("sys_prx"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index 08f3c73915..161f0945c0 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -3,6 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/Cell/PPUThread.h" #include "sys_semaphore.h" #include "sys_time.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 276c5a6474..7ff925b368 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -54,7 +54,12 @@ s32 sys_timer_start(u32 timer_id, s64 base_time, u64 period) timer_data->timer_information_t.period = period; timer_data->timer_information_t.timer_state = SYS_TIMER_STATE_RUN; //TODO: ? - timer_data->tmr.Start(); + std::function task(std::bind(sys_timer_stop, timer_id)); + std::thread([period, task]() { + std::this_thread::sleep_for(std::chrono::milliseconds(period)); + task(); + }).detach(); + return CELL_OK; } @@ -66,7 +71,6 @@ s32 sys_timer_stop(u32 timer_id) if(!sys_timer.CheckId(timer_id, timer_data)) return CELL_ESRCH; timer_data->timer_information_t.timer_state = SYS_TIMER_STATE_STOP; - timer_data->tmr.Stop(); return CELL_OK; } @@ -100,7 +104,7 @@ s32 sys_timer_disconnect_event_queue(u32 timer_id) s32 sys_timer_sleep(u32 sleep_time) { sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); - rSleep(sleep_time); + std::this_thread::sleep_for(std::chrono::seconds(sleep_time)); return CELL_OK; } @@ -108,6 +112,6 @@ s32 sys_timer_usleep(u64 sleep_time) { sys_timer.Log("sys_timer_usleep(sleep_time=%lld)", sleep_time); if (sleep_time > 0xFFFFFFFFFFFF) sleep_time = 0xFFFFFFFFFFFF; //2^48-1 - rMicroSleep(sleep_time); //TODO: If (sleep_time >= 2^32) shit may happen + std::this_thread::sleep_for(std::chrono::microseconds(sleep_time)); return CELL_OK; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.h b/rpcs3/Emu/SysCalls/lv2/sys_timer.h index def0f16c36..4332f75667 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.h @@ -16,7 +16,6 @@ struct sys_timer_information_t struct timer { - rTimer tmr; sys_timer_information_t timer_information_t; }; diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index d64cc2e592..cc85ecabe8 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -9,6 +9,7 @@ #include "Emu/Audio/AudioManager.h" #include "Emu/FS/VFS.h" #include "Emu/DbgCommand.h" +#include "Emu/SysCalls/Static.h" #include "Loader/Loader.h" #include "SysCalls/Callback.h" diff --git a/rpcs3/Gui/AboutDialog.h b/rpcs3/Gui/AboutDialog.h index 975a99278d..bee94e9b1a 100644 --- a/rpcs3/Gui/AboutDialog.h +++ b/rpcs3/Gui/AboutDialog.h @@ -1,3 +1,5 @@ +#pragma once + class AboutDialog : public wxDialog { diff --git a/rpcs3/Gui/GSFrame.cpp b/rpcs3/Gui/GSFrame.cpp index 0a3f53f92f..d1361c9832 100644 --- a/rpcs3/Gui/GSFrame.cpp +++ b/rpcs3/Gui/GSFrame.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "GSFrame.h" +#include "Emu/System.h" #include "rpcs3.h" BEGIN_EVENT_TABLE(GSFrame, wxFrame) diff --git a/rpcs3/Gui/InstructionEditor.h b/rpcs3/Gui/InstructionEditor.h index 4da800cbe6..6bf208ed58 100644 --- a/rpcs3/Gui/InstructionEditor.h +++ b/rpcs3/Gui/InstructionEditor.h @@ -1,3 +1,5 @@ +#pragma once + class InstructionEditorDialog : public wxDialog { diff --git a/rpcs3/Gui/RegisterEditor.h b/rpcs3/Gui/RegisterEditor.h index 9fac56a567..74d5229ca5 100644 --- a/rpcs3/Gui/RegisterEditor.h +++ b/rpcs3/Gui/RegisterEditor.h @@ -1,3 +1,5 @@ +#pragma once + class RegisterEditorDialog : public wxDialog { u64 pc; diff --git a/rpcs3/Gui/VHDDManager.cpp b/rpcs3/Gui/VHDDManager.cpp index 23c5e9974e..5bf185f04d 100644 --- a/rpcs3/Gui/VHDDManager.cpp +++ b/rpcs3/Gui/VHDDManager.cpp @@ -2,6 +2,7 @@ #include "Utilities/Log.h" #include "VHDDManager.h" #include "TextInputDialog.h" +#include "Ini.h" #include VHDDListDropTarget::VHDDListDropTarget(wxListView* parent) : m_parent(parent) diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index 2420733248..118bf182ae 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rXml.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "TROPUSR.h" diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 0e9b70487d..058d68e32b 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -210,11 +210,9 @@ - - @@ -562,4 +560,4 @@ - \ No newline at end of file + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index aa9b035f34..36357d7e1a 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -940,9 +940,6 @@ Header Files - - Utilities - Utilities @@ -979,9 +976,6 @@ Utilities\SimpleIni - - Utilities - Emu @@ -1097,4 +1091,4 @@ Emu\Memory - \ No newline at end of file + diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index 2997ca698a..4ea8af5587 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -26,6 +26,8 @@ bool Rpcs3App::OnInit() SetAppName(_PRGNAME_); wxInitAllImageHandlers(); + main_thread = std::this_thread::get_id(); + Ini.Load(); m_MainFrame = new MainFrame(); diff --git a/rpcs3/rpcs3.h b/rpcs3/rpcs3.h index f99984ddb7..6ee25f0455 100644 --- a/rpcs3/rpcs3.h +++ b/rpcs3/rpcs3.h @@ -1,5 +1,7 @@ #pragma once #include "Gui/MainFrame.h" +#include "Emu/DbgCommand.h" +#include "Utilities/Thread.h" class CPUThread; diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 1f8f08d77d..b3befe689e 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -155,7 +155,6 @@ - @@ -192,12 +191,10 @@ - - @@ -232,4 +229,4 @@ - \ No newline at end of file + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 950a606fba..f1a38b6bb4 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -69,9 +69,6 @@ Utilities - - Utilities - Utilities @@ -104,9 +101,6 @@ - - Utilities - Utilities @@ -182,9 +176,6 @@ Gui - - Utilities - Utilities @@ -213,4 +204,4 @@ Utilities - \ No newline at end of file + diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index c61296bf72..8aaceab5d0 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -26,13 +26,13 @@ #include #include #include -#include "wx/gauge.h" +#include #include -#include "wx/scrolbar.h" -#include "wx/frame.h" +#include +#include #include #include -#include "wx/app.h" +#include #include #include #include @@ -66,27 +66,10 @@ typedef int64_t s64; #include "Utilities/BEType.h" #include "Utilities/rFile.h" #include "Utilities/rTime.h" -#include "Utilities/rXml.h" -#include "Utilities/rConcurrency.h" #include "Utilities/rMsgBox.h" #include "Utilities/Thread.h" -#include "Utilities/Array.h" #include "Utilities/Timer.h" #include "Utilities/IdManager.h" -#include "Emu/SysCalls/Callback.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" -#include "Emu/SysCalls/Modules.h" - -#include "Emu/FS/vfsDirBase.h" -#include "Emu/FS/vfsFileBase.h" -#include "Emu/FS/vfsLocalDir.h" -#include "Emu/FS/vfsLocalFile.h" -#include "Emu/FS/vfsStream.h" -#include "Emu/FS/vfsStreamMemory.h" -#include "Emu/FS/vfsFile.h" -#include "Emu/FS/vfsDir.h" - #define _PRGNAME_ "RPCS3" #define _PRGVER_ "0.0.0.4" From c09b0f511ea9dc4b075e76ccc28365b9c7c6deeb Mon Sep 17 00:00:00 2001 From: Sacha Date: Sat, 12 Jul 2014 03:06:59 +1000 Subject: [PATCH 158/499] More header changes. --- Utilities/Log.cpp | 2 +- Utilities/rFile.cpp | 49 +++++++++++++----- Utilities/rFile.h | 8 ++- Utilities/rMsgBox.cpp | 25 +-------- Utilities/rMsgBox.h | 53 ++++++++------------ rpcs3/Emu/FS/vfsLocalDir.cpp | 2 +- rpcs3/Emu/GS/GCM.h | 6 ++- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 8 ++- rpcs3/Gui/CompilerELF.cpp | 2 +- rpcs3/Gui/GameViewer.cpp | 5 +- rpcs3/rpcs3.h | 1 + rpcs3/stdafx.h | 6 --- 13 files changed, 79 insertions(+), 90 deletions(-) diff --git a/Utilities/Log.cpp b/Utilities/Log.cpp index 8361dcbf9d..4613e39e8a 100644 --- a/Utilities/Log.cpp +++ b/Utilities/Log.cpp @@ -104,7 +104,7 @@ struct FileListener : LogListener { if (!mFile.IsOpened()) { - rMessageBox("Can't create log file! (" + name + ".log)", rMessageBoxCaptionStr, rICON_ERROR); + rMessageBox("Can't create log file! (" + name + ".log)", "Error", rICON_ERROR); } } diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 40cd2e0c49..0973fae502 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -1,6 +1,19 @@ #include "stdafx.h" +#include -const int rPATH_MKDIR_FULL = wxPATH_MKDIR_FULL; +#ifdef _WIN32 +// Maybe in StrFmt? +std::wstring ConvertUTF8ToWString(const std::string &source) { + int len = (int)source.size(); + int size = (int)MultiByteToWideChar(CP_UTF8, 0, source.c_str(), len, NULL, 0); + std::wstring str; + str.resize(size); + if (size > 0) { + MultiByteToWideChar(CP_UTF8, 0, source.c_str(), len, &str[0], size); + } + return str; +} +#endif wxFile::OpenMode convertOpenMode(rFile::OpenMode open) { @@ -140,7 +153,13 @@ bool rFile::Open(const std::string &filename, rFile::OpenMode mode, int access) bool rFile::Exists(const std::string &file) { - return wxFile::Exists(fmt::FromUTF8(file)); +#ifdef _WIN32 + std::wstring wstr = ConvertUTF8ToWString(filename); + return GetFileAttributes(wstr.c_str()) != 0xFFFFFFFF; +#else + struct stat buffer; + return (stat (file.c_str(), &buffer) == 0); +#endif } bool rFile::IsOpened() const @@ -173,14 +192,25 @@ std::string rGetCwd() return fmt::ToUTF8(wxGetCwd()); } -bool rMkdir(const std::string &path) +bool rMkdir(const std::string &dir) { - return wxMkdir(fmt::FromUTF8(path)); + return mkdir(dir.c_str()); } -bool rRmdir(const std::string &path) +bool rMkpath(const std::string& path) { - return wxRmdir(fmt::FromUTF8(path)); + return wxFileName::Mkdir(fmt::FromUTF8(path), 0777, wxPATH_MKDIR_FULL); +} + +bool rRmdir(const std::string &dir) +{ +#ifdef _WIN32 + if (!RemoveDirectory(ConvertUTF8ToWString(dir).c_str())) { + ELOG("Error deleting directory %s: %i", dir, GetLastError()); + } +#else + rmdir(dir.c_str()); +#endif } bool rDirExists(const std::string &path) @@ -235,7 +265,7 @@ bool rDir::Open(const std::string& path) bool rDir::Exists(const std::string &path) { - return wxDir::Exists(fmt::FromUTF8(path)); + return rFile::Exists(path); } bool rDir::GetFirst(std::string *filename) const @@ -299,11 +329,6 @@ std::string rFileName::GetFullName() return fmt::ToUTF8(reinterpret_cast(handle)->GetFullName()); } -bool rFileName::Mkdir(const std::string& name, int permissions , int flags ) -{ - return wxFileName::Mkdir(fmt::FromUTF8(name), permissions, flags); -} - bool rFileName::Normalize() { return reinterpret_cast(handle)->Normalize(); diff --git a/Utilities/rFile.h b/Utilities/rFile.h index cf4da0c284..35cb332661 100644 --- a/Utilities/rFile.h +++ b/Utilities/rFile.h @@ -2,8 +2,6 @@ #include -extern const int rPATH_MKDIR_FULL; - enum rSeekMode { rFromStart, @@ -44,8 +42,9 @@ public: }; std::string rGetCwd(); -bool rMkdir(const std::string &path); -bool rRmdir(const std::string &path); +bool rRmdir(const std::string& dir); +bool rMkdir(const std::string& dir); +bool rMkpath(const std::string& path); bool rDirExists(const std::string &path); bool rFileExists(const std::string &path); bool rRemoveFile(const std::string &path); @@ -77,7 +76,6 @@ struct rFileName std::string GetPath(); std::string GetName(); std::string GetFullName(); - static bool Mkdir(const std::string& name, int permissions=0777, int flags=0); bool Normalize(); void *handle; diff --git a/Utilities/rMsgBox.cpp b/Utilities/rMsgBox.cpp index bdc9fa4b07..716464a156 100644 --- a/Utilities/rMsgBox.cpp +++ b/Utilities/rMsgBox.cpp @@ -1,8 +1,6 @@ #include "stdafx.h" - -std::string rMessageBoxCaptionStr = "Message"; - +#ifndef QT_UI rMessageDialog::rMessageDialog(void *parent, const std::string& msg, const std::string& title , long style ) { handle = reinterpret_cast(new wxMessageDialog( @@ -28,24 +26,5 @@ long rMessageBox(const std::string& message, const std::string& title, long styl return wxMessageBox(fmt::FromUTF8(message), fmt::FromUTF8(title),style); } -std::string dummyApp::GetAppName() -{ - if (handle) - { - return fmt::ToUTF8(reinterpret_cast(handle)->GetAppName()); - } - else - { - return "NULL"; - } -} -dummyApp::dummyApp() : handle(nullptr) -{ +#endif -} -static dummyApp app; - -dummyApp& rGetApp() -{ - return app; -} \ No newline at end of file diff --git a/Utilities/rMsgBox.h b/Utilities/rMsgBox.h index 354c850141..f19081fe5c 100644 --- a/Utilities/rMsgBox.h +++ b/Utilities/rMsgBox.h @@ -1,34 +1,33 @@ #pragma once -extern std::string rMessageBoxCaptionStr;// = "Message"; - enum MsgBoxParams : unsigned long { - rOK = 0x4 - , rYES =0x2//res - , rNO = 0x8 //res - , rID_YES = 5103 //resDialog - , rCANCEL = 0x10 - , rYES_NO = 0xA - , rHELP = 0x1000 - , rNO_DEFAULT = 0x80 - , rCANCEL_DEFAULT = 0x80000000 - , rYES_DEFAULT = 0x0 - , rOK_DEFAULT = 0x0 - , rICON_NONE = 0x40000 - , rICON_EXCLAMATION = 0x100 - , rICON_ERROR = 0x200 - , rICON_HAND = 0x200 - , rICON_QUESTION = 0x400 - , rICON_INFORMATION = 0x800 - , rICON_AUTH_NEEDED = 0x80000 - , rSTAY_ON_TOP = 0x8000 - , rCENTRE = 0x1 + rYES_DEFAULT = 0x0, + rOK_DEFAULT = 0x0, + rCENTRE = 0x1, + rYES = 0x2, //res + rOK = 0x4, + rNO = 0x8, //res + rCANCEL = 0x10, + rYES_NO = 0xA, + rNO_DEFAULT = 0x80, + rICON_EXCLAMATION = 0x100, + rICON_ERROR = 0x200, + rICON_HAND = 0x200, + rICON_QUESTION = 0x400, + rICON_INFORMATION = 0x800, + rHELP = 0x1000, + rID_CANCEL = 0x13ED, + rID_YES = 0x13EF, //resDialog + rSTAY_ON_TOP = 0x8000, + rICON_NONE = 0x40000, + rICON_AUTH_NEEDED = 0x80000, + rCANCEL_DEFAULT = 0x80000000, }; struct rMessageDialog { - rMessageDialog(void *parent, const std::string& msg, const std::string& title = rMessageBoxCaptionStr, long style = rOK | rCENTRE); + rMessageDialog(void *parent, const std::string& msg, const std::string& title = "RPCS3", long style = rOK | rCENTRE); rMessageDialog(const rMessageDialog& other) = delete; ~rMessageDialog(); long ShowModal(); @@ -37,11 +36,3 @@ struct rMessageDialog long rMessageBox(const std::string& message, const std::string& title,long style); -struct dummyApp -{ - dummyApp(); - std::string GetAppName(); - void* handle; -}; - -dummyApp& rGetApp(); \ No newline at end of file diff --git a/rpcs3/Emu/FS/vfsLocalDir.cpp b/rpcs3/Emu/FS/vfsLocalDir.cpp index 349923e749..e97f9a5ad7 100644 --- a/rpcs3/Emu/FS/vfsLocalDir.cpp +++ b/rpcs3/Emu/FS/vfsLocalDir.cpp @@ -40,7 +40,7 @@ bool vfsLocalDir::Open(const std::string& path) bool vfsLocalDir::Create(const std::string& path) { - return rFileName::Mkdir(path, 0777, rPATH_MKDIR_FULL); + return rMkpath(path); } bool vfsLocalDir::Rename(const std::string& from, const std::string& to) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 5c766ebf46..9f56cb2bab 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -1330,8 +1330,10 @@ static const std::string GetMethodName(const u32 id) { NV4097_SET_TRANSFORM_BRANCH_BITS, "SetTransformBranchBits" } , }; - for(auto& s: METHOD_NAME_LIST) - if(s.id == id) return "cellGcm" + s.name; + for(auto& s: METHOD_NAME_LIST) { + if(s.id == id) + return "cellGcm" + s.name; + } return fmt::Format("unknown/illegal method [0x%08x]", id); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index d693772ff2..24c0ba865a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -456,7 +456,7 @@ int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) std::string errorMsg = fmt::Format("%s\nSpace needed: %d KB\nDirectory name: %s", errorName.c_str(), errNeedSizeKB, dirName); - rMessageBox(errorMsg, rGetApp().GetAppName(), rICON_ERROR | rOK); + rMessageBox(errorMsg, "Error", rICON_ERROR | rOK); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 7fcc039748..7869c80ff5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -287,14 +287,12 @@ int cellMsgDialogOpenErrorCode(u32 errorCode, mem_func_ptr_t static const std::string m_class_name = "GameViewer"; @@ -238,9 +239,9 @@ void GameViewer::RemoveGame(wxCommandEvent& event) Emu.GetVFS().UnMountAll(); - //TODO: Replace wxWidgetsSpecific filesystem stuff? - if (!wxDirExists(fmt::FromUTF8(localPath))) + if (!rFile::Exists(localPath)) return; + //TODO: Replace wxWidgetsSpecific filesystem stuff? WxDirDeleteTraverser deleter; wxDir localDir(localPath); localDir.Traverse(deleter); diff --git a/rpcs3/rpcs3.h b/rpcs3/rpcs3.h index 6ee25f0455..77b35aa7fc 100644 --- a/rpcs3/rpcs3.h +++ b/rpcs3/rpcs3.h @@ -2,6 +2,7 @@ #include "Gui/MainFrame.h" #include "Emu/DbgCommand.h" #include "Utilities/Thread.h" +#include class CPUThread; diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 8aaceab5d0..cfb31964fc 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -12,13 +12,9 @@ #include #include #include -#include -#include -#include #include #include -#include #include #include #include @@ -32,8 +28,6 @@ #include #include #include -#include -#include #include #include #endif From 9816ec3aa0da7a98750ec0437f9e1bd9689b6fd7 Mon Sep 17 00:00:00 2001 From: Sacha Date: Sat, 12 Jul 2014 17:02:39 +1000 Subject: [PATCH 159/499] Fix conflicts. --- Utilities/GNU.cpp | 29 +++++++++++--------- Utilities/GNU.h | 9 +++--- Utilities/SMutex.cpp | 2 +- Utilities/Thread.h | 4 +-- rpcs3/Emu/CPU/CPUThread.cpp | 7 +++-- rpcs3/Emu/CPU/CPUThread.h | 2 +- rpcs3/Emu/CPU/CPUThreadManager.cpp | 1 + rpcs3/Emu/Cell/RawSPUThread.cpp | 6 ++-- rpcs3/Emu/Cell/SPUThread.cpp | 2 -- rpcs3/Emu/Cell/SPUThread.h | 18 ++++++------ rpcs3/Emu/FS/vfsDir.cpp | 1 - rpcs3/Emu/FS/vfsFile.cpp | 1 - rpcs3/Emu/GS/GL/GLProgram.cpp | 6 ++-- rpcs3/Emu/GS/RSXThread.cpp | 6 ++-- rpcs3/Emu/Memory/Memory.cpp | 1 + rpcs3/Emu/SysCalls/Callback.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 15 +++++----- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 8 +++--- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 14 +++++----- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellRtc.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 16 +++++------ rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 6 ++-- rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp | 5 ++-- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 6 ++-- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 2 +- rpcs3/Emu/System.cpp | 5 ++-- rpcs3/Emu/System.h | 3 -- rpcs3/Gui/DisAsmFrame.cpp | 3 +- 35 files changed, 99 insertions(+), 103 deletions(-) diff --git a/Utilities/GNU.cpp b/Utilities/GNU.cpp index bb0a784fe7..9f21a344ba 100644 --- a/Utilities/GNU.cpp +++ b/Utilities/GNU.cpp @@ -1,20 +1,23 @@ -#include -#include #include "GNU.h" #ifdef __APPLE__ -void * _aligned_malloc(size_t size, size_t alignment) { - void *buffer; - posix_memalign(&buffer, alignment, size); - return buffer; -} +#include +#include int clock_gettime(int foo, struct timespec *ts) { - struct timeval tv; + struct timeval tv; - gettimeofday(&tv, NULL); - ts->tv_sec = tv.tv_sec; - ts->tv_nsec = tv.tv_usec * 1000; - return(0); + gettimeofday(&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + return(0); } -#endif /* !__APPLE__ */ +#endif /* __APPLE__ */ +#if defined(__GNUG__) + +void * _aligned_malloc(size_t size, size_t alignment) { + void *buffer; + return (posix_memalign(&buffer, alignment, size) == 0) ? buffer : 0; +} +#endif + diff --git a/Utilities/GNU.h b/Utilities/GNU.h index a79dfbf3d0..c0286b0491 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -28,7 +28,6 @@ void strcpy_trunc(char (&dst)[size], const std::string& src) #define _byteswap_ushort(x) __builtin_bswap16(x) #define _byteswap_ulong(x) __builtin_bswap32(x) #define _byteswap_uint64(x) __builtin_bswap64(x) -#define Sleep(x) usleep(x * 1000) #define mkdir(x) mkdir(x, 0777) #define INFINITE 0xFFFFFFFF #define _CRT_ALIGN(x) __attribute__((aligned(x))) @@ -61,10 +60,10 @@ inline int64_t __mulh(int64_t a, int64_t b) return result; } -#ifndef __APPLE__ -#define _aligned_malloc(size,alignment) memalign(alignment,size) -#else + void * _aligned_malloc(size_t size, size_t alignment); + +#ifdef __APPLE__ int clock_gettime(int foo, struct timespec *ts); #define wxIsNaN(x) ((x) != (x)) @@ -72,7 +71,7 @@ int clock_gettime(int foo, struct timespec *ts); #define CLOCK_MONOTONIC 0 #endif /* !CLOCK_MONOTONIC */ -#endif /* !__APPLE__ */ +#endif /* __APPLE__ */ #define _aligned_free free diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index 157e9103f0..80c8798941 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -14,7 +14,7 @@ __forceinline void SM_Sleep() } else { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } } diff --git a/Utilities/Thread.h b/Utilities/Thread.h index 1f27f2a683..f38ff73162 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -177,7 +177,7 @@ private: Step(); } - while(!TestDestroy()) Sleep(0); + while(!TestDestroy()) std::this_thread::sleep_for(std::chrono::milliseconds(0)); if(m_destroy_sem.TryWait() != wxSEMA_NO_ERROR) m_destroy_sem.Post(); } @@ -198,7 +198,7 @@ public: { if(!IsRunning()) return; - while(m_main_sem.TryWait() != wxSEMA_NO_ERROR) Sleep(0); + while(m_main_sem.TryWait() != wxSEMA_NO_ERROR) std::this_thread::sleep_for(std::chrono::milliseconds(0)); } void Exit(bool wait = false) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index df917d11aa..406721651a 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -3,6 +3,7 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Emu/DbgCommand.h" #include "rpcs3/Ini.h" #include "CPUThread.h" @@ -333,7 +334,7 @@ void CPUThread::Task() if (status == CPUThread_Sleeping) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } @@ -368,7 +369,7 @@ s64 CPUThread::ExecAsCallback(u64 pc, bool wait, u64 a1, u64 a2, u64 a3, u64 a4) LOG_WARNING(PPU, "ExecAsCallback() aborted"); return CELL_ECANCELED; // doesn't mean anything } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } Stop(); @@ -394,7 +395,7 @@ s64 CPUThread::ExecAsCallback(u64 pc, bool wait, u64 a1, u64 a2, u64 a3, u64 a4) LOG_WARNING(PPU, "ExecAsCallback(wait=%s) aborted", wait ? "true" : "false"); return CELL_EABORT; // doesn't mean anything } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } return wait * m_exit_status; diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 87d9b9963d..c7db9d1c0d 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -153,7 +153,7 @@ public: { while(func(ThreadStatus())) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } } diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index 245e01875f..01ba798add 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -2,6 +2,7 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Emu/DbgCommand.h" #include "CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 2b0ab6c68e..4f81ccf513 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -105,7 +105,8 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) case SPU_In_MBox_offs: { LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); - while (!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) Sleep(1); + while (!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) + std::this_thread::sleep_for(std::chrono::milliseconds(1)); break; } @@ -250,7 +251,8 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) case SPU_Out_MBox_offs: { LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); - while (!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) Sleep(1); + while (!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) + std::this_thread::sleep_for(std::chrono::milliseconds(1)); break; } diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 502e754c5d..a8355bc296 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1,11 +1,9 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/lv2/sys_lwmutex.h" #include "Emu/SysCalls/lv2/sys_event.h" - #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/SPUDecoder.h" #include "Emu/Cell/SPUInterpreter.h" diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index b082d2c7c7..a5f848ce65 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -977,7 +977,7 @@ public: { while (t->IsAlive()) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); @@ -1108,7 +1108,7 @@ public: case SPU_WrOutMbox: { //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); - while (!SPU.Out_MBox.Push(v) && !Emu.IsStopped()) Sleep(1); + while (!SPU.Out_MBox.Push(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); break; } @@ -1208,41 +1208,41 @@ public: { case SPU_RdInMbox: { - while (!SPU.In_MBox.Pop(v) && !Emu.IsStopped()) Sleep(1); + while (!SPU.In_MBox.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } case MFC_RdTagStat: { - while (!Prxy.TagStatus.Pop(v) && !Emu.IsStopped()) Sleep(1); + while (!Prxy.TagStatus.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } case SPU_RdSigNotify1: { - while (!SPU.SNR[0].Pop(v) && !Emu.IsStopped()) Sleep(1); + while (!SPU.SNR[0].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } case SPU_RdSigNotify2: { - while (!SPU.SNR[1].Pop(v) && !Emu.IsStopped()) Sleep(1); + while (!SPU.SNR[1].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } case MFC_RdAtomicStat: { - while (!Prxy.AtomicStat.Pop(v) && !Emu.IsStopped()) Sleep(1); + while (!Prxy.AtomicStat.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); break; } case MFC_RdListStallStat: { - while (!StallStat.Pop(v) && !Emu.IsStopped()) Sleep(1); + while (!StallStat.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); break; } @@ -1336,7 +1336,7 @@ public: default: eq->sq.invalidate(tid); SPU.In_MBox.PushUncond(CELL_ECANCELED); return; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { LOG_WARNING(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x) aborted", spuq); diff --git a/rpcs3/Emu/FS/vfsDir.cpp b/rpcs3/Emu/FS/vfsDir.cpp index ae32e0b05f..a161183549 100644 --- a/rpcs3/Emu/FS/vfsDir.cpp +++ b/rpcs3/Emu/FS/vfsDir.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "vfsDir.h" diff --git a/rpcs3/Emu/FS/vfsFile.cpp b/rpcs3/Emu/FS/vfsFile.cpp index 1a80009ba7..f30a2de9a5 100644 --- a/rpcs3/Emu/FS/vfsFile.cpp +++ b/rpcs3/Emu/FS/vfsFile.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "vfsFile.h" diff --git a/rpcs3/Emu/GS/GL/GLProgram.cpp b/rpcs3/Emu/GS/GL/GLProgram.cpp index 303f5ccf14..e7e7fdaa0a 100644 --- a/rpcs3/Emu/GS/GL/GLProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLProgram.cpp @@ -51,8 +51,7 @@ void GLProgram::Create(const u32 vp, const u32 fp) if (bufLength) { - char* buf = new char[bufLength+1]; - memset(buf, 0, bufLength+1); + char* buf = new char[bufLength+1](); glGetProgramInfoLog(id, bufLength, NULL, buf); LOG_ERROR(RSX, "Could not link program: %s", buf); delete[] buf; @@ -70,8 +69,7 @@ void GLProgram::Create(const u32 vp, const u32 fp) if (bufLength) { - char* buf = new char[bufLength]; - memset(buf, 0, bufLength); + char* buf = new char[bufLength](); glGetProgramInfoLog(id, bufLength, NULL, buf); LOG_ERROR(RSX, "Could not link program: %s", buf); delete[] buf; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 1172b627ec..60a464f342 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -2409,7 +2409,7 @@ void RSXThread::Task() continue; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } is_vblank_stopped = true; @@ -2446,7 +2446,7 @@ void RSXThread::Task() m_sem_flush.post_and_wait(); } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } @@ -2510,7 +2510,7 @@ void RSXThread::Task() while (!is_vblank_stopped) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } LOG_NOTICE(RSX, "RSX thread ended"); diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 7cc75f4db2..cf1b8a8f9a 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -94,6 +94,7 @@ void MemoryBlock::Free() void MemoryBlock::Delete() { Free(); + safe_free(mem); Init(); } diff --git a/rpcs3/Emu/SysCalls/Callback.cpp b/rpcs3/Emu/SysCalls/Callback.cpp index 02fb9dc9cf..378830875f 100644 --- a/rpcs3/Emu/SysCalls/Callback.cpp +++ b/rpcs3/Emu/SysCalls/Callback.cpp @@ -69,7 +69,7 @@ again: LOG_WARNING(HLE, "Callback::Branch() aborted"); return 0; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } std::lock_guard lock(cb_mutex); @@ -112,7 +112,7 @@ again: LOG_WARNING(HLE, "Callback::Branch(true) aborted (end)"); return 0; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } return thr.GetExitStatus(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 60b52a6c2c..44a2167f14 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -39,7 +39,7 @@ next: LOG_WARNING(HLE, "adecRawRead(): aborted"); return 0; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } switch (adec.job.Peek().type) @@ -212,13 +212,13 @@ u32 adecOpen(AudioDecoder* data) if (!adec.job.GetCountUnsafe() && adec.is_running) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } /*if (adec.frames.GetCount() >= 50) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; }*/ @@ -283,8 +283,7 @@ u32 adecOpen(AudioDecoder* data) if (size) { - data = (u8*)av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); - memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + data = (u8*)av_calloc(1, size + FF_INPUT_BUFFER_PADDING_SIZE); this->size = size + FF_INPUT_BUFFER_PADDING_SIZE; } else @@ -618,7 +617,7 @@ int cellAdecClose(u32 handle) LOG_WARNING(HLE, "cellAdecClose(%d) aborted", handle); break; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } if (adec->adecCb) Emu.GetCPU().RemoveThread(adec->adecCb->GetId()); @@ -728,7 +727,7 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) } // copy data - u8* out = (u8*)malloc(af.size); + u8* out = (u8*)calloc(1, af.size); // reverse byte order, extract data: float* in_f[2]; @@ -774,7 +773,7 @@ int cellAdecGetPcmItem(u32 handle, mem32_t pcmItem_ptr) if (adec->frames.IsEmpty()) { - Sleep(1); // hack + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack return CELL_ADEC_ERROR_EMPTY; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 8fd2e0b9ac..e3d3555746 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -157,7 +157,7 @@ int cellAudioInit() // precise time of sleeping: 5,(3) ms (or 256/48000 sec) if (m_config.counter * 256000000 / 48000 >= stamp0 - m_config.start_time) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } @@ -469,7 +469,7 @@ abort: while (!internal_finished) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } m_config.m_is_audio_finalized = true; @@ -483,7 +483,7 @@ abort: LOG_WARNING(HLE, "cellAudioInit() aborted"); return CELL_OK; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } return CELL_OK; @@ -502,7 +502,7 @@ int cellAudioQuit() while (!m_config.m_is_audio_finalized) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { LOG_WARNING(HLE, "cellAudioQuit(): aborted"); diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 3bde3766ac..254b7352dc 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -148,14 +148,14 @@ u32 dmuxOpen(Demuxer* data) if (es.isfull()) { stream = backup; - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } /*if (es.hasunseen()) // hack, probably useless { stream = backup; - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; }*/ @@ -194,7 +194,7 @@ u32 dmuxOpen(Demuxer* data) ElementaryStream& es = *esAVC[ch]; if (es.isfull()) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } @@ -214,7 +214,7 @@ u32 dmuxOpen(Demuxer* data) /*if (es.hasunseen()) // hack, probably useless { stream = backup; - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; }*/ es.finish(stream); @@ -237,7 +237,7 @@ u32 dmuxOpen(Demuxer* data) if (es.isfull()) { stream = backup; - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } @@ -598,7 +598,7 @@ int cellDmuxClose(u32 demuxerHandle) return CELL_OK; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } if (dmux->dmuxCb) Emu.GetCPU().RemoveThread(dmux->dmuxCb->GetId()); @@ -629,7 +629,7 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize LOG_WARNING(HLE, "cellDmuxSetStream(%d) aborted (waiting)", demuxerHandle); return CELL_OK; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); return CELL_DMUX_ERROR_BUSY; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 7869c80ff5..508f9516cf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -185,7 +185,7 @@ int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_t msgString, mem_func_ptr_t mutex) while (old_order != mutex->m_freed) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { LOG_WARNING(HLE, "cellSyncMutexLock(mutex=0x%x) aborted", mutex.GetAddr()); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index c1072297c4..94d22486e4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -2,9 +2,9 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/DbgCommand.h" #include "Emu/FS/vfsFile.h" #include "Emu/Audio/sysutil_audio.h" @@ -345,7 +345,7 @@ int cellSysutilCheckCallback() while (thr.IsAlive()) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { LOG_WARNING(HLE, "cellSysutilCheckCallback() aborted"); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index d76d846c4d..b80bd8a88e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -38,7 +38,7 @@ next: LOG_WARNING(HLE, "vdecRead(): aborted"); return 0; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } switch (vdec.job.Peek().type) @@ -150,13 +150,13 @@ u32 vdecOpen(VideoDecoder* data) if (!vdec.job.GetCountUnsafe() && vdec.is_running) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } if (vdec.frames.GetCount() >= 50) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } @@ -509,7 +509,7 @@ int cellVdecClose(u32 handle) LOG_WARNING(HLE, "cellVdecClose(%d) aborted", handle); break; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } if (vdec->vdecCb) Emu.GetCPU().RemoveThread(vdec->vdecCb->GetId()); @@ -543,13 +543,13 @@ int cellVdecEndSeq(u32 handle) /*if (!vdec->job.IsEmpty()) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); return CELL_VDEC_ERROR_BUSY; // ??? } if (!vdec->frames.IsEmpty()) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); return CELL_VDEC_ERROR_BUSY; // ??? }*/ @@ -560,7 +560,7 @@ int cellVdecEndSeq(u32 handle) LOG_WARNING(HLE, "cellVdecEndSeq(%d) aborted", handle); return CELL_OK; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } vdec->job.Push(VdecTask(vdecEndSeq)); @@ -680,7 +680,7 @@ int cellVdecGetPicItem(u32 handle, mem32_t picItem_ptr) if (vdec->frames.IsEmpty()) { - Sleep(1); // hack + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack return CELL_VDEC_ERROR_EMPTY; } diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 09d75fcaa1..d48f5efef2 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -363,7 +363,7 @@ int cellSurMixerCreate(const mem_ptr_t config) if (mixcount > (port.tag + 14)) // preemptive buffer filling (probably hack) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 9b08ead4d7..be6fe5291d 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -148,7 +148,7 @@ void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_tsq.m_mutex.unlock(); while (eq->sq.list.size()) { - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { LOG_WARNING(HLE, "sys_event_queue_destroy(equeue=%d) aborted", equeue_id); @@ -222,7 +222,7 @@ s32 sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 default: eq->sq.invalidate(tid); return CELL_ECANCELED; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (counter++ > timeout || Emu.IsStopped()) { if (Emu.IsStopped()) LOG_WARNING(HLE, "sys_event_queue_receive(equeue=%d) aborted", equeue_id); @@ -569,7 +569,7 @@ s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 return CELL_ECANCELED; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (counter++ > max_counter) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index 7bc6377c62..ee44e1601b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -245,7 +245,7 @@ s32 sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) return CELL_OK; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (counter++ > max_counter) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index 1708e2770a..969c39e680 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -253,7 +253,7 @@ int sys_lwmutex_t::trylock(be_t tid) LOG_WARNING(HLE, "(hack) sys_lwmutex_t::(try)lock aborted (waiting for recursive attribute, attr=0x%x)", (u32)attribute); return CELL_ESRCH; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); }*/ if (tid == owner_tid) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index 4761e13cd2..f42444ee12 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -32,7 +32,8 @@ void sys_ppu_thread_exit(u64 errorcode) s32 sys_ppu_thread_yield() { sysPrxForUser->Log("sys_ppu_thread_yield()"); - Sleep(1); + // Note: Or do we actually want to yield? + std::this_thread::sleep_for(std::chrono::milliseconds(1)); return CELL_OK; } @@ -50,7 +51,7 @@ s32 sys_ppu_thread_join(u64 thread_id, mem64_t vptr) LOG_WARNING(PPU, "sys_ppu_thread_join(%d) aborted", thread_id); return CELL_OK; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } vptr = thr->GetExitStatus(); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 2ad0524cee..8f3e7750bc 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" #include "sys_rwlock.h" @@ -72,7 +70,7 @@ s32 sys_rwlock_rlock(u32 rw_lock_id, u64 timeout) LOG_WARNING(HLE, "sys_rwlock_rlock(rw_lock_id=%d, ...) aborted", rw_lock_id); return CELL_ETIMEDOUT; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (rw->rlock_trylock(tid)) return CELL_OK; @@ -135,7 +133,7 @@ s32 sys_rwlock_wlock(u32 rw_lock_id, u64 timeout) LOG_WARNING(HLE, "sys_rwlock_wlock(rw_lock_id=%d, ...) aborted", rw_lock_id); return CELL_ETIMEDOUT; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (rw->wlock_trylock(tid, true)) return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 39f39ee591..b7dae66aec 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -370,7 +370,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) LOG_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d, ...) aborted", id); return CELL_OK; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } } diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index b44a4000a4..89a3bb748c 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -2,7 +2,7 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Ini.h" +//#include "Ini.h" #include "Emu/GameInfo.h" #include "Emu/SysCalls/Static.h" @@ -12,6 +12,7 @@ #include "Emu/Cell/PPUInstrTable.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDeviceLocalFile.h" +#include "Emu/DbgCommand.h" #include "Emu/CPU/CPUThreadManager.h" //gui dependency @@ -388,7 +389,7 @@ void Emulator::Stop() LOG_NOTICE(HLE, "All threads stopped..."); break; } - Sleep(1); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (counter++ > 3000) { LOG_ERROR(HLE, "%d threads not stopped (timeout)", (u32)(g_thread_count - uncounted)); diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index cc85ecabe8..3b9f992ee4 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -8,10 +8,7 @@ #include "Emu/GS/GSManager.h" #include "Emu/Audio/AudioManager.h" #include "Emu/FS/VFS.h" -#include "Emu/DbgCommand.h" -#include "Emu/SysCalls/Static.h" #include "Loader/Loader.h" -#include "SysCalls/Callback.h" enum Status { diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index edc42b0741..66852a2f83 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -220,7 +220,8 @@ struct WaitDumperThread : public ThreadBase { for(uint i=0; i Date: Sat, 12 Jul 2014 17:46:14 +1000 Subject: [PATCH 160/499] Remove some indirect headers. --- rpcs3/Emu/Cell/PPUThread.cpp | 1 - rpcs3/Emu/SysCalls/Modules.cpp | 4 ---- rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp | 3 --- rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp | 3 --- rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp | 5 +---- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp | 3 --- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellCamera.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellFiber.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellFont.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellImejp.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellMic.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 4 +--- rpcs3/Emu/SysCalls/Modules/cellOvis.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPrint.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellRtc.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellRudp.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSail.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSearch.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSheap.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellSsl.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellSync2.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/cellVoice.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 2 -- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 1 - rpcs3/Emu/SysCalls/SysCalls.cpp | 1 - rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp | 3 +-- 66 files changed, 35 insertions(+), 101 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index e5b8e8bc47..3c8362178d 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/Cell/PPUDecoder.h" diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index ecbdb085de..b538f37779 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -1,13 +1,9 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Crypto/sha1.h" #include -#include "Emu/System.h" #include "ModuleManager.h" u32 getFunctionId(const std::string& name) diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp index af657d37de..f171ae5705 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp @@ -2,11 +2,8 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/Io/Keyboard.h" -#include "Emu/SysCalls/SysCalls.h" extern Module *sys_io; diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp index 374b3dc3cc..44f3dad312 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp @@ -2,11 +2,8 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/Io/Mouse.h" -#include "Emu/SysCalls/SysCalls.h" extern Module *sys_io; diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp index 639c7efa84..5a4dbf2123 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp @@ -2,11 +2,8 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/Io/Pad.h" -#include "Emu/SysCalls/SysCalls.h" extern Module *sys_io; @@ -462,4 +459,4 @@ int cellPadSetSensorMode(u32 port_no, u32 mode) pads[port_no].m_port_setting &= ~CELL_PAD_SETTING_SENSOR_ON; return CELL_OK; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 44a2167f14..63caf2f4b1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "cellPamf.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp index 664d55024a..ef89f02ab4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp @@ -1,9 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index e3d3555746..9ff294a1aa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "Utilities/SQueue.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp b/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp index 72879e8d3b..1b0850cdd6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp index ee00c683fa..3d2feac52c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp index 70109e224a..28ee197457 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp index 80bea81089..92b2c9acc9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 254b7352dc..b689c0682f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -3,10 +3,8 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "cellPamf.h" #include "cellDmux.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp index a64a9a914f..b192d56231 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index 3692abbcdd..177f716bd1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/FS/vfsFile.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp index 19d3c204cd..8104be11f2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "cellFont.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 24c0ba865a..1022906f7d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -2,7 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 297d6e00cf..9ebe134f35 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/GS/GCM.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index 5133ce51c4..bb93900168 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index 866d6d48dc..b21151bbdd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "cellGifDec.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp b/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp index 97f94de794..e5ef30832f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp index b3dc1bd5da..fea418acb9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index c24fcc5f8e..8a7aa659c7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "cellJpgDec.h" #include "stblib/stb_image.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp index e8aa461f29..3bfebc50e6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp b/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp index eef9eb72f7..3a635b569b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index 571a332fe9..ea34d10566 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" // Requires GCC 4.10 apparently.. diff --git a/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp b/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp index 01dd518bba..13126bd402 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp index 23b2a9f61a..a8d0d74168 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 508f9516cf..d3959b9e32 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "rpcs3.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp index 14c64aefd0..24785dfa77 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp index 7ded73fc72..268677caa5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index 611979dbb8..9204105a34 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" //void cellNetCtl_init(); @@ -140,4 +138,4 @@ void cellNetCtl_init() cellNetCtl->AddFunc(0x0f1f13d3, cellNetCtlNetStartDialogUnloadAsync); cellNetCtl->AddFunc(0x3a12865f, cellNetCtlGetNatInfo); -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp index 25907207e1..f47f403140 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index ccda72ca4a..b71d83ba35 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "cellPamf.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp index 9281f3c17b..34d893e1f9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp index 71dd6f5bc9..3268783bee 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp index c5815b9f5b..ed24bfb5a0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 1ab78ff7a0..1b7e153a4c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "cellPngDec.h" #include "stblib/stb_image.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp index 4b59e80a26..5d10680730 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp b/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp index 191c53c1d8..62b1d312ad 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 60cd6fde8b..4b61ee5c34 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "cellSysutil.h" #include "cellResc.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp index 97ee89cc49..6856299797 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp @@ -1,7 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "cellRtc.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp index 6cef6bbf08..e8c1261ec2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp index b301af90b0..e590376216 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp b/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp index dce0b36acb..c3ff0bbe4f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp index bcc77d5466..6972ae06d4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp index 8ba73eba86..4da6818439 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp b/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp index ea15f3819f..feee6c5245 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 79d330909d..122c0ff1ff 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "cellSpurs.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp b/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp index c0a30dc9f7..3bf12e87ce 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp b/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp index 467f82d29d..0f4c7ad87f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index ae5e37b582..e66b8a4f3a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" //void cellSync_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index 1817f3c1b6..ecaa713f80 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp index 50c75daa24..4e0f949544 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/ModuleManager.h" #include "Emu/SysCalls/Modules.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 94d22486e4..caa363b96d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -2,7 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/DbgCommand.h" #include "Emu/FS/vfsFile.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp index e18d269089..2c2ddb95b3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" //void cellSysutilAp_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index 2517a23fe5..2393b0c2ff 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp index fa4323a05e..eb8d7dc369 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp index 9ce3671f2d..005c2741ca 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index 7143cca15f..615a1d392c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "cellUserInfo.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index b80bd8a88e..f2dcf61696 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "cellPamf.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp index 63dc1763d3..2330a2773e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" #if 0 +#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index 8219861713..ae26d1a07c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" extern "C" diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index d48f5efef2..b3a2c194eb 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/Audio/cellAudio.h" #include "libmixer.h" diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 814df0ba97..48c1a4c107 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "ModuleManager.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp index ba0c995a91..065f5cd4de 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp @@ -4,7 +4,6 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/Cell/RawSPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "sys_interrupt.h" @@ -108,4 +107,4 @@ void sys_interrupt_thread_eoi() GetCurrentPPUThread().Stop(); return; -} \ No newline at end of file +} From 2267c84d6a6ff071fea59bebd68135523d979e78 Mon Sep 17 00:00:00 2001 From: David Kiarie Date: Sat, 12 Jul 2014 12:48:58 +0300 Subject: [PATCH 161/499] rpcs3/Gui:minor gui fixes Enable uses to go back after using VHDDManager or VFSManager by providing Ok and Cancel buttons otherwise I have to kill rpcs3 signed-off-by: asla --- rpcs3/Gui/VFSManager.cpp | 8 +++++++- rpcs3/Gui/VHDDManager.cpp | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/rpcs3/Gui/VFSManager.cpp b/rpcs3/Gui/VFSManager.cpp index c9d3be671d..d1ba3365e4 100644 --- a/rpcs3/Gui/VFSManager.cpp +++ b/rpcs3/Gui/VFSManager.cpp @@ -120,8 +120,14 @@ VFSManagerDialog::VFSManagerDialog(wxWindow* parent) { m_list = new wxListView(this); + wxBoxSizer* s_btns = new wxBoxSizer(wxHORIZONTAL); + s_btns->Add(new wxButton(this, wxID_OK)); + s_btns->AddSpacer(30); + s_btns->Add(new wxButton(this, wxID_CANCEL)); + wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); s_main->Add(m_list, 1, wxEXPAND); + s_main->Add(s_btns, 0, wxALL | wxCENTER, 10); SetSizerAndFit(s_main); SetSize(800, 600); @@ -136,7 +142,7 @@ VFSManagerDialog::VFSManagerDialog(wxWindow* parent) Bind(wxEVT_MENU, &VFSManagerDialog::OnAdd, this, id_add); Bind(wxEVT_MENU, &VFSManagerDialog::OnRemove, this, id_remove); Bind(wxEVT_MENU, &VFSManagerDialog::OnEntryConfig, this, id_config); - Bind(wxEVT_CLOSE_WINDOW, &VFSManagerDialog::OnClose, this); + Bind(wxEVT_CLOSE_WINDOW, &VFSManagerDialog::OnClose, this, wxID_OK); LoadEntries(); UpdateList(); diff --git a/rpcs3/Gui/VHDDManager.cpp b/rpcs3/Gui/VHDDManager.cpp index 23c5e9974e..0f218e9634 100644 --- a/rpcs3/Gui/VHDDManager.cpp +++ b/rpcs3/Gui/VHDDManager.cpp @@ -382,8 +382,14 @@ VHDDManagerDialog::VHDDManagerDialog(wxWindow* parent) { m_list = new wxListView(this); + wxBoxSizer* s_btns = new wxBoxSizer(wxHORIZONTAL); + s_btns->Add(new wxButton(this, wxID_OK)); + s_btns->AddSpacer(30); + s_btns->Add(new wxButton(this, wxID_CANCEL)); + wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); s_main->Add(m_list, 1, wxEXPAND | wxALL, 5); + s_main->Add(s_btns, 0, wxALL | wxCENTER, 10); SetSizerAndFit(s_main); SetSize(800, 600); @@ -399,7 +405,7 @@ VHDDManagerDialog::VHDDManagerDialog(wxWindow* parent) Bind(wxEVT_MENU, &VHDDManagerDialog::OnOpen, this, id_open); Bind(wxEVT_MENU, &VHDDManagerDialog::OnRemove, this, id_remove); Bind(wxEVT_MENU, &VHDDManagerDialog::OnCreateHDD, this, id_create_hdd); - Bind(wxEVT_CLOSE_WINDOW, &VHDDManagerDialog::OnClose, this); + Bind(wxEVT_CLOSE_WINDOW, &VHDDManagerDialog::OnClose, this, wxID_OK); LoadPaths(); UpdateList(); } From f75a3c8f6084fab8a4dedeecf6a142357c1fe1cd Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sat, 12 Jul 2014 13:52:37 +0200 Subject: [PATCH 162/499] unload modules upon stopping I guess we won't find out what's wrong if we don't let it fail --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 13 ++++++++++++- rpcs3/Emu/System.cpp | 3 +-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index fa03dd18cb..25523e33b2 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -271,7 +271,7 @@ initialized(false) ModuleManager::~ModuleManager() { - m_mod_init.clear(); + UnloadModules(); } bool ModuleManager::IsLoadedFunc(u32 id) @@ -332,6 +332,7 @@ u32 ModuleManager::GetFuncNumById(u32 id) return id; } +//to load the default modules after calling this call Init() again void ModuleManager::UnloadModules() { for (u32 i = 0; i<3; ++i) @@ -345,6 +346,16 @@ void ModuleManager::UnloadModules() } } + //reset state of the module manager + //this could be done by calling the destructor and then a placement-new + //to avoid repeating the initial values here but the defaults aren't + //complicated enough to complicate this by using the placement-new + m_mod_init.clear(); + m_max_module_id = 0; + m_module_2_count = 0; + initialized = false; + memset(m_modules, 0, 3 * 0xFF * sizeof(Module*)); + std::lock_guard lock(m_funcs_lock); m_modules_funcs_list.clear(); } diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index b44a4000a4..45c0f0dee3 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -415,8 +415,7 @@ void Emulator::Stop() GetKeyboardManager().Close(); GetMouseManager().Close(); GetCallbackManager().Clear(); - // TODO: not all modules unload cleanly, so we're not unloading them for now - //GetModuleManager().UnloadModules(); + GetModuleManager().UnloadModules(); CurGameInfo.Reset(); Memory.Close(); From 19088422555e2580e49aac68e68b4e131c684a24 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 12 Jul 2014 18:53:36 +0400 Subject: [PATCH 163/499] Build fix Non-ASCII characters replaced in PPUThread.h Some cleanup --- Utilities/rFile.cpp | 6 +- rpcs3/Emu/Cell/PPUInterpreter.h | 2 +- rpcs3/Emu/Cell/PPUThread.h | 32 +++++----- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 61 +++---------------- rpcs3/Emu/Memory/Memory.cpp | 21 ++++--- rpcs3/Emu/Memory/Memory.h | 2 + rpcs3/Emu/Memory/MemoryBlock.h | 2 - rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellCamera.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp | 3 +- rpcs3/Emu/SysCalls/Modules/cellFiber.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellImejp.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellMic.cpp | 2 +- .../Emu/SysCalls/Modules/cellMusicDecode.cpp | 2 +- .../Emu/SysCalls/Modules/cellMusicExport.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellOvis.cpp | 2 +- .../Emu/SysCalls/Modules/cellPhotoDecode.cpp | 2 +- .../Emu/SysCalls/Modules/cellPhotoExport.cpp | 2 +- .../Emu/SysCalls/Modules/cellPhotoImport.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellPrint.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellRudp.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSail.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSearch.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSheap.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSsl.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSync2.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellVoice.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 11 ++-- rpcs3/Emu/SysCalls/Static.h | 2 +- 41 files changed, 86 insertions(+), 118 deletions(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 0973fae502..04a3da0b25 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -154,7 +154,7 @@ bool rFile::Open(const std::string &filename, rFile::OpenMode mode, int access) bool rFile::Exists(const std::string &file) { #ifdef _WIN32 - std::wstring wstr = ConvertUTF8ToWString(filename); + std::wstring wstr = ConvertUTF8ToWString(file); return GetFileAttributes(wstr.c_str()) != 0xFFFFFFFF; #else struct stat buffer; @@ -206,8 +206,10 @@ bool rRmdir(const std::string &dir) { #ifdef _WIN32 if (!RemoveDirectory(ConvertUTF8ToWString(dir).c_str())) { - ELOG("Error deleting directory %s: %i", dir, GetLastError()); + LOG_ERROR(GENERAL, "Error deleting directory %s: %i", dir, GetLastError()); + return false; } + return true; #else rmdir(dir.c_str()); #endif diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 74a4ec9f61..2f793db9c9 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -168,7 +168,7 @@ private: } } - void MFVSCR(u32 vd) + void MFVSCR(u32 vd) //nf { CPU.VPR[vd].Clear(); CPU.VPR[vd]._u32[0] = CPU.VSCR.VSCR; diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 6a183fb0dc..1fe6fffd01 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -75,15 +75,15 @@ union FPSCRhdr u32 RN :2; //Floating-point rounding control u32 NI :1; //Floating-point non-IEEE mode u32 XE :1; //Floating-point inexact exception enable - u32 ZE :1; //IEEE floating-point zero divide exception enable - u32 UE :1; //IEEE floating-point underflow exception enable - u32 OE :1; //IEEE floating-point overflow exception enable + u32 ZE :1; //IEEE floating-point zero divide exception enable + u32 UE :1; //IEEE floating-point underflow exception enable + u32 OE :1; //IEEE floating-point overflow exception enable u32 VE :1; //Floating-point invalid operation exception enable u32 VXCVI :1; //Floating-point invalid operation exception for invalid integer convert u32 VXSQRT :1; //Floating-point invalid operation exception for invalid square root u32 VXSOFT :1; //Floating-point invalid operation exception for software request u32 :1; //Reserved - u32 FPRF :5; //Floating-point result flags + u32 FPRF :5; //Floating-point result flags u32 FI :1; //Floating-point fraction inexact u32 FR :1; //Floating-point fraction rounded u32 VXVC :1; //Floating-point invalid operation exception for invalid compare @@ -94,8 +94,8 @@ union FPSCRhdr u32 VXSNAN :1; //Floating-point invalid operation exception for SNaN u32 XX :1; //Floating-point inexact exception u32 ZX :1; //Floating-point zero divide exception - u32 UX :1; //Floating-point underflow exception - u32 OX :1; //Floating-point overflow exception + u32 UX :1; //Floating-point underflow exception + u32 OX :1; //Floating-point overflow exception u32 VX :1; //Floating-point invalid operation exception summary u32 FEX :1; //Floating-point enabled exception summary u32 FX :1; //Floating-point exception summary @@ -131,7 +131,7 @@ union MSRhdr //1 Instruction address translation is enabled. u64 IR : 1; - //Exception prefix. The setting of this bit specifies whether an exception vector offset + //Exception prefix. The setting of this bit specifies whether an exception vector offset //is prepended with Fs or 0s. In the following description, nnnnn is the offset of the //exception. //0 Exceptions are vectored to the physical address 0x0000_0000_000n_nnnn in 64-bit implementations. @@ -168,9 +168,9 @@ union MSRhdr u64 ME : 1; //Floating-point available - //0 The processor prevents dispatch of floating-point instructions, including - //floating-point loads, stores, and moves. - //1 The processor can execute floating-point instructions. + //0 The processor prevents dispatch of floating-point instructions, including + //floating-point loads, stores, and moves. + //1 The processor can execute floating-point instructions. u64 FP : 1; //Privilege level @@ -261,7 +261,7 @@ union VSCRhdr { /* Saturation. A sticky status bit indicating that some field in a saturating instruction saturated since the last - time SAT was cleared. In other words when SAT = ‘1’ it remains set to ‘1’ until it is cleared to ‘0’ by an + time SAT was cleared. In other words when SAT = '1' it remains set to '1' until it is cleared to '0' by an mtvscr instruction. 1 The vector saturate instruction implicitly sets when saturation has occurred on the results one of the vector instructions having saturate in its name: @@ -283,12 +283,12 @@ union VSCRhdr /* Non-Java. A mode control bit that determines whether vector floating-point operations will be performed - in a Java-IEEE-C9X–compliant mode or a possibly faster non-Java/non-IEEE mode. - 0 The Java-IEEE-C9X–compliant mode is selected. Denormalized values are handled as specified + in a Java-IEEE-C9X-compliant mode or a possibly faster non-Java/non-IEEE mode. + 0 The Java-IEEE-C9X-compliant mode is selected. Denormalized values are handled as specified by Java, IEEE, and C9X standard. - 1 The non-Java/non-IEEE–compliant mode is selected. If an element in a source vector register - contains a denormalized value, the value ‘0’ is used instead. If an instruction causes an underflow - exception, the corresponding element in the target VR is cleared to ‘0’. In both cases, the ‘0’ + 1 The non-Java/non-IEEE-compliant mode is selected. If an element in a source vector register + contains a denormalized value, the value '0' is used instead. If an instruction causes an underflow + exception, the corresponding element in the target VR is cleared to '0'. In both cases, the '0' has the same sign as the denormalized or underflowing value. */ u32 NJ : 1; diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 10ada356ad..0b7c42768c 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -2,8 +2,8 @@ //DynamicMemoryBlockBase template DynamicMemoryBlockBase::DynamicMemoryBlockBase() -: PT() -, m_max_size(0) + : PT() + , m_max_size(0) { } @@ -39,9 +39,7 @@ bool DynamicMemoryBlockBase::IsMyAddress(const u64 addr) { if (!IsInMyRange(addr)) return false; - const u32 index = MemoryBlock::FixAddr(addr) >> 12; - - return m_pages[index] != nullptr; + return Memory.IsGoodAddr(addr); } template @@ -50,11 +48,11 @@ MemoryBlock* DynamicMemoryBlockBase::SetRange(const u64 start, const u32 siz std::lock_guard lock(m_lock); m_max_size = PAGE_4K(size); - MemoryBlock::SetRange(start, 0); - - const u32 page_count = m_max_size >> 12; - m_pages.resize(page_count); - memset(m_pages.data(), 0, sizeof(u8*) * page_count); + if (!MemoryBlock::SetRange(start, 0)) + { + assert(0); + return nullptr; + } return this; } @@ -67,8 +65,6 @@ void DynamicMemoryBlockBase::Delete() m_allocated.clear(); m_max_size = 0; - m_pages.clear(); - MemoryBlock::Delete(); } @@ -107,17 +103,6 @@ template void DynamicMemoryBlockBase::AppendMem(u64 addr, u32 size) /* private */ { m_allocated.emplace_back(addr, size); - u8* pointer = (u8*) m_allocated.back().mem; - - const u32 first = MemoryBlock::FixAddr(addr) >> 12; - - const u32 last = first + ((size - 1) >> 12); - - for (u32 i = first; i <= last; i++) - { - m_pages[i] = pointer; - pointer += 4096; - } } template @@ -186,24 +171,6 @@ bool DynamicMemoryBlockBase::Free(u64 addr) { if (addr == m_allocated[num].addr) { - /* if(IsLocked(m_allocated[num].addr)) return false; */ - - const u32 first = MemoryBlock::FixAddr(addr) >> 12; - - const u32 last = first + ((m_allocated[num].size - 1) >> 12); - - // check if locked: - //for (u32 i = first; i <= last; i++) - //{ - // if (!m_pages[i]) return false; - //} - - // clear pointers: - for (u32 i = first; i <= last; i++) - { - m_pages[i] = nullptr; - } - //LOG_NOTICE(MEMORY, "Free(0x%llx)", addr); m_allocated.erase(m_allocated.begin() + num); @@ -221,17 +188,9 @@ bool DynamicMemoryBlockBase::Free(u64 addr) } template -u8* DynamicMemoryBlockBase::GetMem(u64 addr) const // lock-free, addr is fixed +u8* DynamicMemoryBlockBase::GetMem(u64 addr) const { - const u32 index = addr >> 12; - - if (index < m_pages.size()) - { - if (u8* res = m_pages[index]) - { - return res + (addr & 4095); - } - } + if (addr < GetSize() && Memory.IsGoodAddr(addr + GetStartAddr())) return mem + addr; LOG_ERROR(MEMORY, "GetMem(0x%llx) from not allocated address.", addr); assert(0); diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index cf1b8a8f9a..00afc33ede 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -69,16 +69,21 @@ void MemoryBlock::Init() range_start = 0; range_size = 0; - mem = nullptr; + mem = Memory.GetMemFromAddr(0); } void MemoryBlock::InitMemory() { - if (!range_size) return; - - Free(); - mem_inf = new MemBlockInfo(range_start, range_size); - mem = (u8*)mem_inf->mem; + if (!range_size) + { + mem = Memory.GetMemFromAddr(range_start); + } + else + { + Free(); + mem_inf = new MemBlockInfo(range_start, range_size); + mem = (u8*)mem_inf->mem; + } } void MemoryBlock::Free() @@ -88,13 +93,11 @@ void MemoryBlock::Free() delete mem_inf; mem_inf = nullptr; } - mem = nullptr; } void MemoryBlock::Delete() { Free(); - safe_free(mem); Init(); } @@ -135,6 +138,8 @@ u8* MemoryBlock::GetMemFromAddr(const u64 addr) MemoryBlock* MemoryBlock::SetRange(const u64 start, const u32 size) { + if (start + size > 0x100000000) return nullptr; + range_start = start; range_size = size; diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 7d781a7a18..1642e36770 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -286,6 +286,8 @@ public: block->Delete(); } + RSXIOMem.Delete(); + MemoryBlocks.clear(); #ifdef _WIN32 diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index 7d8e1e9657..c4a3d70632 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -390,8 +390,6 @@ class DynamicMemoryBlockBase : public PT { mutable std::mutex m_lock; std::vector m_allocated; // allocation info - std::vector m_pages; // real addresses of every 4096 byte pages (array size should be fixed) - u32 m_max_size; public: diff --git a/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp b/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp index 1b0850cdd6..72879e8d3b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp index 3d2feac52c..ee00c683fa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp index 28ee197457..70109e224a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp index 92b2c9acc9..6541f6ae76 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp @@ -1,5 +1,6 @@ -#if 0 + #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp index b192d56231..a64a9a914f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index bb93900168..5133ce51c4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp b/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp index e5ef30832f..97f94de794 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp index fea418acb9..b3dc1bd5da 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp index 3bfebc50e6..e8aa461f29 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp b/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp index 3a635b569b..eef9eb72f7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp b/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp index 13126bd402..01dd518bba 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp index a8d0d74168..23b2a9f61a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp index 24785dfa77..14c64aefd0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp index 268677caa5..7ded73fc72 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp index f47f403140..25907207e1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp index 34d893e1f9..9281f3c17b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp index 3268783bee..71dd6f5bc9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp index ed24bfb5a0..c5815b9f5b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp index 5d10680730..4b59e80a26 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp b/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp index 62b1d312ad..191c53c1d8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp index e8c1261ec2..6cef6bbf08 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp index e590376216..b301af90b0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp b/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp index c3ff0bbe4f..dce0b36acb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp index 6972ae06d4..bcc77d5466 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp index 4da6818439..8ba73eba86 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp b/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp index feee6c5245..ea15f3819f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp b/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp index 3bf12e87ce..c0a30dc9f7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp b/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp index 0f4c7ad87f..467f82d29d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index ecaa713f80..1817f3c1b6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp index eb8d7dc369..fa4323a05e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp index 005c2741ca..9ce3671f2d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp index 2330a2773e..63dc1763d3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp @@ -1,5 +1,5 @@ -#if 0 #include "stdafx.h" +#if 0 #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index b3a2c194eb..0685b0e90c 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -14,11 +14,11 @@ Module *libmixer = nullptr; CellSurMixerConfig surMixer; #define SUR_PORT (7) -u32 surMixerCb = 0; -u32 surMixerCbArg = 0; +u32 surMixerCb; +u32 surMixerCbArg; std::mutex mixer_mutex; float mixdata[8*256]; -u64 mixcount = 0; +u64 mixcount; std::vector ssp; @@ -342,6 +342,9 @@ int cellSurMixerCreate(const mem_ptr_t config) libmixer->Warning("*** surMixer created (ch1=%d, ch2=%d, ch6=%d, ch8=%d)", (u32)surMixer.chStrips1, (u32)surMixer.chStrips2, (u32)surMixer.chStrips6, (u32)surMixer.chStrips8); + mixcount = 0; + surMixerCb = 0; + thread t("Surmixer Thread", []() { AudioPortConfig& port = m_config.m_ports[SUR_PORT]; @@ -350,8 +353,6 @@ int cellSurMixerCreate(const mem_ptr_t config) mixerCb->SetName("Surmixer Callback"); - mixcount = 0; - while (port.m_is_audio_port_opened) { if (Emu.IsStopped()) diff --git a/rpcs3/Emu/SysCalls/Static.h b/rpcs3/Emu/SysCalls/Static.h index 9050ed8b80..4fd9a6142a 100644 --- a/rpcs3/Emu/SysCalls/Static.h +++ b/rpcs3/Emu/SysCalls/Static.h @@ -1,6 +1,6 @@ #pragma once -class SFunc; +struct SFunc; class StaticFuncManager { From 9b5a3fd2b61ad69f7dba924c3dc7b03011f4d34d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 12 Jul 2014 19:30:07 +0400 Subject: [PATCH 164/499] Compilation fix --- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 0b7c42768c..fe190c2b88 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -190,11 +190,7 @@ bool DynamicMemoryBlockBase::Free(u64 addr) template u8* DynamicMemoryBlockBase::GetMem(u64 addr) const { - if (addr < GetSize() && Memory.IsGoodAddr(addr + GetStartAddr())) return mem + addr; - - LOG_ERROR(MEMORY, "GetMem(0x%llx) from not allocated address.", addr); - assert(0); - return nullptr; + return MemoryBlock::GetMem(addr); } template From a94d0771fec43db9b8e40a5dfa9fe52e483b8a76 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 12 Jul 2014 19:40:52 +0400 Subject: [PATCH 165/499] Compilation fix 2 --- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index fe190c2b88..0c7467ea18 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -37,9 +37,7 @@ bool DynamicMemoryBlockBase::IsInMyRange(const u64 addr, const u32 size) template bool DynamicMemoryBlockBase::IsMyAddress(const u64 addr) { - if (!IsInMyRange(addr)) return false; - - return Memory.IsGoodAddr(addr); + return IsInMyRange(addr); } template From 2331c5991aeb9d3cdee9c413e400b8130fe5f110 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 12 Jul 2014 20:38:37 +0400 Subject: [PATCH 166/499] Little fix --- rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 0c7467ea18..053f28086c 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -79,12 +79,6 @@ bool DynamicMemoryBlockBase::AllocFixed(u64 addr, u32 size) return false; } - if (IsMyAddress(addr) || IsMyAddress(addr + size - 1)) - { - assert(0); - return false; - } - std::lock_guard lock(m_lock); for (u32 i = 0; i Date: Sat, 12 Jul 2014 22:01:41 +0100 Subject: [PATCH 167/499] Add .DS_Store to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 396f474d54..43afefc806 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,5 @@ rpcs3/git-version.h bin/dev_hdd0/log.txt x64/Debug/emucore.lib x64/Release/emucore.lib + +.DS_Store From a4f73bc7054563527bee2ce891e3de2c24012c5a Mon Sep 17 00:00:00 2001 From: boxingcow Date: Sat, 12 Jul 2014 22:06:43 +0100 Subject: [PATCH 168/499] Fix broken OS X build with isnan and MAP_ANONYMOUS --- rpcs3/Emu/Cell/PPUThread.cpp | 6 ++++-- rpcs3/Emu/Memory/Memory.h | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 3c8362178d..0b039e4886 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -4,11 +4,13 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" - #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUInterpreter.h" #include "Emu/Cell/PPUDisAsm.h" + #include +#include + extern gcmInfo gcm_info; PPUThread& GetCurrentPPUThread() @@ -190,7 +192,7 @@ bool FPRdouble::IsINF(PPCdouble d) bool FPRdouble::IsNaN(PPCdouble d) { - return isnan(d) ? 1 : 0; + return std::isnan((double)d) ? 1 : 0; } bool FPRdouble::IsQNaN(PPCdouble d) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 1642e36770..4a10a3260a 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -8,6 +8,15 @@ #include "Emu/SysCalls/Callback.h" #include +/* OS X uses MAP_ANON instead of MAP_ANONYMOUS */ +#ifndef MAP_ANONYMOUS + #ifdef MAP_ANON + #define MAP_ANONYMOUS MAP_ANON + #else + #define MAP_ANONYMOUS 0 + #endif +#endif + using std::nullptr_t; #define safe_delete(x) do {delete (x);(x)=nullptr;} while(0) From b7b3761c09cbcf2c82a5db9099f214090dd4b5ff Mon Sep 17 00:00:00 2001 From: boxingcow Date: Sat, 12 Jul 2014 22:10:49 +0100 Subject: [PATCH 169/499] Add include path for XQuartz on OS X --- rpcs3/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 5e713720d4..c9b734be42 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -30,6 +30,11 @@ if (NOT MSVC) add_definitions(-msse2) endif() +if (APPLE) + set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -I/opt/include/X11”) + set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -I/opt/X11/include”) +endif() + If( NOT RPCS3_SRC_DIR) SET(RPCS3_SRC_DIR ${CMAKE_CURRENT_LIST_DIR}) Message("-- Initializing RPCS3_SRC_DIR=${RPCS3_SRC_DIR}") From 21aedb518c6b9d416358cd7749dacb0ac8e4d225 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 13 Jul 2014 02:39:43 +0400 Subject: [PATCH 170/499] PKG Installing fixed --- Utilities/rFile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 04a3da0b25..ed1b07df4c 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -194,7 +194,7 @@ std::string rGetCwd() bool rMkdir(const std::string &dir) { - return mkdir(dir.c_str()); + return !_mkdir(dir.c_str()); } bool rMkpath(const std::string& path) From 2c7de6102780d3ae05cdf76e5a03a15e3f360216 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 13 Jul 2014 02:56:52 +0400 Subject: [PATCH 171/499] Compilation fix --- Utilities/rFile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index ed1b07df4c..2ce5fdcbfe 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -194,7 +194,7 @@ std::string rGetCwd() bool rMkdir(const std::string &dir) { - return !_mkdir(dir.c_str()); + return !mkdir(dir.c_str()); } bool rMkpath(const std::string& path) From 3c8084b2c7ea5c50f5db3eabddb1c41102faeeb8 Mon Sep 17 00:00:00 2001 From: boxingcow Date: Sun, 13 Jul 2014 09:31:11 +0100 Subject: [PATCH 172/499] Stupid mistake. --- rpcs3/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index c9b734be42..b194f4b87f 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -31,7 +31,7 @@ if (NOT MSVC) endif() if (APPLE) - set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -I/opt/include/X11”) + set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -I/opt/X11/include”) set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -I/opt/X11/include”) endif() From 7370c49ff3e0f0582d021fbbd6a5fa31aa77cba9 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 13 Jul 2014 16:26:38 +0400 Subject: [PATCH 173/499] Forgotten memory check + PSV stuff fixed --- rpcs3/Emu/ARMv7/ARMv7Decoder.h | 4 +- rpcs3/Emu/ARMv7/ARMv7Interpreter.h | 4 +- rpcs3/Emu/Memory/Memory.cpp | 20 ++++----- rpcs3/Emu/Memory/Memory.h | 72 ++++++++++++++++++++++-------- rpcs3/Loader/ELF32.cpp | 4 +- 5 files changed, 69 insertions(+), 35 deletions(-) diff --git a/rpcs3/Emu/ARMv7/ARMv7Decoder.h b/rpcs3/Emu/ARMv7/ARMv7Decoder.h index b19bf94cd3..2d63602941 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Decoder.h +++ b/rpcs3/Emu/ARMv7/ARMv7Decoder.h @@ -21,8 +21,8 @@ public: virtual u8 DecodeMemory(const u64 address) { using namespace ARMv7_opcodes; - const u16 code0 = Memory.Read16(address); - const u16 code1 = Memory.Read16(address + 2); + const u16 code0 = Memory.PSV.Read16(address); + const u16 code1 = Memory.PSV.Read16(address + 2); switch(code0 >> 12) //15 - 12 { diff --git a/rpcs3/Emu/ARMv7/ARMv7Interpreter.h b/rpcs3/Emu/ARMv7/ARMv7Interpreter.h index 71aecf535d..477f09b18f 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Interpreter.h +++ b/rpcs3/Emu/ARMv7/ARMv7Interpreter.h @@ -275,7 +275,7 @@ protected: if(regs_list & mask) { CPU.SP -= 4; - Memory.Write32(CPU.SP, CPU.read_gpr(i)); + Memory.PSV.Write32(CPU.SP, CPU.read_gpr(i)); } } } @@ -286,7 +286,7 @@ protected: { if(regs_list & mask) { - CPU.write_gpr(i, Memory.Read32(CPU.SP)); + CPU.write_gpr(i, Memory.PSV.Read32(CPU.SP)); CPU.SP += 4; } } diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 00afc33ede..e804900963 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -369,7 +369,7 @@ void MemoryBase::Write8(u64 addr, const u8 data) { if ((u32)addr == addr) { - *(u8*)((u64)GetBaseAddr() + addr) = data; + *(u8*)((u8*)GetBaseAddr() + addr) = data; } else { @@ -382,7 +382,7 @@ void MemoryBase::Write16(u64 addr, const u16 data) { if ((u32)addr == addr) { - *(u16*)((u64)GetBaseAddr() + addr) = re16(data); + *(u16*)((u8*)GetBaseAddr() + addr) = re16(data); } else { @@ -397,7 +397,7 @@ void MemoryBase::Write32(u64 addr, const u32 data) { if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) { - *(u32*)((u64)GetBaseAddr() + addr) = re32(data); + *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); } else { @@ -415,7 +415,7 @@ void MemoryBase::Write64(u64 addr, const u64 data) { if ((u32)addr == addr) { - *(u64*)((u64)GetBaseAddr() + addr) = re64(data); + *(u64*)((u8*)GetBaseAddr() + addr) = re64(data); } else { @@ -428,7 +428,7 @@ void MemoryBase::Write128(u64 addr, const u128 data) { if ((u32)addr == addr) { - *(u128*)((u64)GetBaseAddr() + addr) = re128(data); + *(u128*)((u8*)GetBaseAddr() + addr) = re128(data); } else { @@ -476,7 +476,7 @@ u8 MemoryBase::Read8(u64 addr) { if ((u32)addr == addr) { - return *(u8*)((u64)GetBaseAddr() + addr); + return *(u8*)((u8*)GetBaseAddr() + addr); } else { @@ -490,7 +490,7 @@ u16 MemoryBase::Read16(u64 addr) { if ((u32)addr == addr) { - return re16(*(u16*)((u64)GetBaseAddr() + addr)); + return re16(*(u16*)((u8*)GetBaseAddr() + addr)); } else { @@ -506,7 +506,7 @@ u32 MemoryBase::Read32(u64 addr) { if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) { - return re32(*(u32*)((u64)GetBaseAddr() + addr)); + return re32(*(u32*)((u8*)GetBaseAddr() + addr)); } else { @@ -527,7 +527,7 @@ u64 MemoryBase::Read64(u64 addr) { if ((u32)addr == addr) { - return re64(*(u64*)((u64)GetBaseAddr() + addr)); + return re64(*(u64*)((u8*)GetBaseAddr() + addr)); } else { @@ -541,7 +541,7 @@ u128 MemoryBase::Read128(u64 addr) { if ((u32)addr == addr) { - return re128(*(u128*)((u64)GetBaseAddr() + addr)); + return re128(*(u128*)((u8*)GetBaseAddr() + addr)); } else { diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 4a10a3260a..b321ecb652 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -56,20 +56,43 @@ public: MemoryBlock* RawSPUMem[(0x100000000 - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]; VirtualMemoryBlock RSXIOMem; - struct + struct Reader32LE + { + private: + void* m_base_addr; + + public: + Reader32LE() : m_base_addr(nullptr) {} + + void Write8(const u32 addr, const u8 data) { *(u8*)((u64)m_base_addr + addr) = data; } + void Write16(const u32 addr, const u16 data) { *(u16*)((u64)m_base_addr + addr) = data; } + void Write32(const u32 addr, const u32 data) { *(u32*)((u64)m_base_addr + addr) = data; } + void Write64(const u32 addr, const u64 data) { *(u64*)((u64)m_base_addr + addr) = data; } + void Write128(const u32 addr, const u128 data) { *(u128*)((u64)m_base_addr + addr) = data; } + + u8 Read8(const u32 addr) { return *(u8*)((u64)m_base_addr + addr); } + u16 Read16(const u32 addr) { return *(u16*)((u64)m_base_addr + addr); } + u32 Read32(const u32 addr) { return *(u32*)((u64)m_base_addr + addr); } + u64 Read64(const u32 addr) { return *(u64*)((u64)m_base_addr + addr); } + u128 Read128(const u32 addr) { return *(u128*)((u64)m_base_addr + addr); } + + void Init(void* real_addr) { m_base_addr = real_addr; } + }; + + struct : Reader32LE { DynamicMemoryBlockLE RAM; DynamicMemoryBlockLE Userspace; - } PSVMemory; + } PSV; - struct + struct : Reader32LE { DynamicMemoryBlockLE Scratchpad; DynamicMemoryBlockLE VRAM; DynamicMemoryBlockLE RAM; DynamicMemoryBlockLE Kernel; DynamicMemoryBlockLE Userspace; - } PSPMemory; + } PSP; bool m_inited; @@ -150,17 +173,26 @@ public: return (T)ReverseData(val); }; - u8* GetMemFromAddr(const u64 addr) + template u8* GetMemFromAddr(const T addr) { - return (u8*)GetBaseAddr() + addr; + if ((u32)addr == addr) + { + return (u8*)GetBaseAddr() + addr; + } + else + { + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); + assert(0); + return (u8*)GetBaseAddr(); + } } - void* VirtualToRealAddr(const u64 vaddr) + template void* VirtualToRealAddr(const T vaddr) { - return GetMemFromAddr(vaddr); + return GetMemFromAddr(vaddr); } - u64 RealToVirtualAddr(const void* addr) + u32 RealToVirtualAddr(const void* addr) { const u64 res = (u64)addr - (u64)GetBaseAddr(); @@ -237,16 +269,18 @@ public: break; case Memory_PSV: - MemoryBlocks.push_back(PSVMemory.RAM.SetRange(0x81000000, 0x10000000)); - MemoryBlocks.push_back(UserMemory = PSVMemory.Userspace.SetRange(0x91000000, 0x10000000)); + MemoryBlocks.push_back(PSV.RAM.SetRange(0x81000000, 0x10000000)); + MemoryBlocks.push_back(UserMemory = PSV.Userspace.SetRange(0x91000000, 0x10000000)); + PSV.Init(GetBaseAddr()); break; case Memory_PSP: - MemoryBlocks.push_back(PSPMemory.Scratchpad.SetRange(0x00010000, 0x00004000)); - MemoryBlocks.push_back(PSPMemory.VRAM.SetRange(0x04000000, 0x00200000)); - MemoryBlocks.push_back(PSPMemory.RAM.SetRange(0x08000000, 0x02000000)); - MemoryBlocks.push_back(PSPMemory.Kernel.SetRange(0x88000000, 0x00800000)); - MemoryBlocks.push_back(UserMemory = PSPMemory.Userspace.SetRange(0x08800000, 0x01800000)); + MemoryBlocks.push_back(PSP.Scratchpad.SetRange(0x00010000, 0x00004000)); + MemoryBlocks.push_back(PSP.VRAM.SetRange(0x04000000, 0x00200000)); + MemoryBlocks.push_back(PSP.RAM.SetRange(0x08000000, 0x02000000)); + MemoryBlocks.push_back(PSP.Kernel.SetRange(0x88000000, 0x00800000)); + MemoryBlocks.push_back(UserMemory = PSP.Userspace.SetRange(0x08800000, 0x01800000)); + PSP.Init(GetBaseAddr()); break; } @@ -473,13 +507,13 @@ public: return false; } - u8* operator + (const u64 vaddr) + template u8* operator + (const T vaddr) { - u8* ret = GetMemFromAddr(vaddr); + u8* ret = GetMemFromAddr(vaddr); return ret; } - u8& operator[] (const u64 vaddr) + template u8& operator[] (const T vaddr) { return *(*this + vaddr); } diff --git a/rpcs3/Loader/ELF32.cpp b/rpcs3/Loader/ELF32.cpp index 4e736e34e2..49d56f56ee 100644 --- a/rpcs3/Loader/ELF32.cpp +++ b/rpcs3/Loader/ELF32.cpp @@ -237,8 +237,8 @@ bool ELF32Loader::LoadPhdrData(u64 _offset) switch(machine) { case MACHINE_SPU: break; - case MACHINE_MIPS: Memory.PSPMemory.RAM.AllocFixed(phdr_arr[i].p_vaddr + offset, phdr_arr[i].p_memsz); break; - case MACHINE_ARM: Memory.PSVMemory.RAM.AllocFixed(phdr_arr[i].p_vaddr + offset, phdr_arr[i].p_memsz); break; + case MACHINE_MIPS: Memory.PSP.RAM.AllocFixed(phdr_arr[i].p_vaddr + offset, phdr_arr[i].p_memsz); break; + case MACHINE_ARM: Memory.PSV.RAM.AllocFixed(phdr_arr[i].p_vaddr + offset, phdr_arr[i].p_memsz); break; default: continue; From 10647890ef5784b57adb737b14a4532201c30783 Mon Sep 17 00:00:00 2001 From: boxingcow Date: Sun, 13 Jul 2014 18:51:19 +0100 Subject: [PATCH 174/499] There is a special place in hell for 'Smart Dashes' --- rpcs3/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index b194f4b87f..896689a1e5 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -31,8 +31,8 @@ if (NOT MSVC) endif() if (APPLE) - set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -I/opt/X11/include”) - set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -I/opt/X11/include”) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/opt/X11/include") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/opt/X11/include") endif() If( NOT RPCS3_SRC_DIR) From 2eafb235ba547b9fddaf916ed45d0882d1201f4b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 13 Jul 2014 22:55:14 +0400 Subject: [PATCH 175/499] spu_printf fixed --- rpcs3/Emu/CPU/CPUThread.cpp | 7 +- rpcs3/Emu/Memory/Memory.h | 28 ++++---- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp | 11 ++-- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h | 2 +- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 79 ++++++++++++++++------- rpcs3/Emu/SysCalls/lv2/sys_spu.h | 12 ++-- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 23 ++++++- 7 files changed, 106 insertions(+), 56 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 406721651a..577fcf9c5f 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -285,7 +285,7 @@ void CPUThread::ExecOnce() void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) { const u64 addr = (u64)pExp->ExceptionRecord->ExceptionInformation[1] - (u64)Memory.GetBaseAddr(); - if (addr < 0x100000000 && u == EXCEPTION_ACCESS_VIOLATION) + if (u == EXCEPTION_ACCESS_VIOLATION && addr < 0x100000000) { // TODO: allow recovering from a page fault //GetCurrentPPUThread().Stop(); @@ -317,6 +317,8 @@ void CPUThread::Task() } } + std::vector trace; + #ifdef _WIN32 _set_se_translator(_se_translator); #else @@ -339,6 +341,7 @@ void CPUThread::Task() } Step(); + //if (PC - 0x13ED4 < 0x288) trace.push_back(PC); NextPc(m_dec->DecodeMemory(PC + m_offset)); if (status == CPUThread_Step) @@ -357,6 +360,8 @@ void CPUThread::Task() } } + for (auto& v : trace) LOG_NOTICE(PPU, "PC = 0x%llx", v); + if (Ini.HLELogging.GetValue()) LOG_NOTICE(PPU, "%s leave", CPUThread::GetFName().c_str()); } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index b321ecb652..5f7681301b 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -56,36 +56,36 @@ public: MemoryBlock* RawSPUMem[(0x100000000 - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]; VirtualMemoryBlock RSXIOMem; - struct Reader32LE + struct Wrapper32LE { private: void* m_base_addr; public: - Reader32LE() : m_base_addr(nullptr) {} + Wrapper32LE() : m_base_addr(nullptr) {} - void Write8(const u32 addr, const u8 data) { *(u8*)((u64)m_base_addr + addr) = data; } - void Write16(const u32 addr, const u16 data) { *(u16*)((u64)m_base_addr + addr) = data; } - void Write32(const u32 addr, const u32 data) { *(u32*)((u64)m_base_addr + addr) = data; } - void Write64(const u32 addr, const u64 data) { *(u64*)((u64)m_base_addr + addr) = data; } - void Write128(const u32 addr, const u128 data) { *(u128*)((u64)m_base_addr + addr) = data; } + void Write8(const u32 addr, const u8 data) { *(u8*)((u8*)m_base_addr + addr) = data; } + void Write16(const u32 addr, const u16 data) { *(u16*)((u8*)m_base_addr + addr) = data; } + void Write32(const u32 addr, const u32 data) { *(u32*)((u8*)m_base_addr + addr) = data; } + void Write64(const u32 addr, const u64 data) { *(u64*)((u8*)m_base_addr + addr) = data; } + void Write128(const u32 addr, const u128 data) { *(u128*)((u8*)m_base_addr + addr) = data; } - u8 Read8(const u32 addr) { return *(u8*)((u64)m_base_addr + addr); } - u16 Read16(const u32 addr) { return *(u16*)((u64)m_base_addr + addr); } - u32 Read32(const u32 addr) { return *(u32*)((u64)m_base_addr + addr); } - u64 Read64(const u32 addr) { return *(u64*)((u64)m_base_addr + addr); } - u128 Read128(const u32 addr) { return *(u128*)((u64)m_base_addr + addr); } + u8 Read8(const u32 addr) { return *(u8*)((u8*)m_base_addr + addr); } + u16 Read16(const u32 addr) { return *(u16*)((u8*)m_base_addr + addr); } + u32 Read32(const u32 addr) { return *(u32*)((u8*)m_base_addr + addr); } + u64 Read64(const u32 addr) { return *(u64*)((u8*)m_base_addr + addr); } + u128 Read128(const u32 addr) { return *(u128*)((u8*)m_base_addr + addr); } void Init(void* real_addr) { m_base_addr = real_addr; } }; - struct : Reader32LE + struct : Wrapper32LE { DynamicMemoryBlockLE RAM; DynamicMemoryBlockLE Userspace; } PSV; - struct : Reader32LE + struct : Wrapper32LE { DynamicMemoryBlockLE Scratchpad; DynamicMemoryBlockLE VRAM; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index f42444ee12..ad51e004a0 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -205,20 +205,19 @@ s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 s return CELL_OK; } -void sys_ppu_thread_once(u32 once_ctrl_addr, u32 entry) +void sys_ppu_thread_once(mem_ptr_t>> once_ctrl, u32 entry) { - sysPrxForUser->Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, entry=0x%x)", once_ctrl_addr, entry); + sysPrxForUser->Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, entry=0x%x)", once_ctrl.GetAddr(), entry); - if(Memory.IsGoodAddr(once_ctrl_addr, 4) && Memory.Read32(once_ctrl_addr) == SYS_PPU_THREAD_ONCE_INIT) + be_t old = SYS_PPU_THREAD_ONCE_INIT; + if (once_ctrl->compare_exchange_weak(old, SYS_PPU_THREAD_DONE_INIT)) { - Memory.Write32(once_ctrl_addr, SYS_PPU_THREAD_DONE_INIT); - CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_PPU); new_thread.SetEntry(entry); new_thread.Run(); new_thread.Exec(); - //GetCurrentPPUThread().Wait(new_thread); + while (new_thread.IsAlive()) SM_Sleep(); } } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h index 5256a9a5dc..ef99ca6012 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h @@ -24,5 +24,5 @@ s32 sys_ppu_thread_get_stack_information(u32 info_addr); s32 sys_ppu_thread_stop(u64 thread_id); s32 sys_ppu_thread_restart(u64 thread_id); s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 stacksize, u64 flags, u32 threadname_addr); -void sys_ppu_thread_once(u32 once_ctrl_addr, u32 entry); +void sys_ppu_thread_once(mem_ptr_t>> once_ctrl, u32 entry); s32 sys_ppu_thread_get_id(const u32 id_addr); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index b7dae66aec..4a88fb9c48 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -597,7 +597,7 @@ s32 sys_spu_thread_connect_event(u32 id, u32 eq_id, u32 et, u8 spup) return CELL_EINVAL; } - // TODO: check if can receive this events + // TODO: check if can receive these events SPUThread& spu = *(SPUThread*)thr; @@ -706,51 +706,82 @@ s32 sys_spu_thread_unbind_queue(u32 id, u32 spuq_num) return CELL_OK; } -s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq, u64 req, u32 spup_addr) +s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, mem8_t spup) { - sc_spu.Error("sys_spu_thread_group_connect_event_all_threads(id=%d, eq=%d, req=0x%llx, spup_addr=0x%x)", - id, eq, req, spup_addr); + sc_spu.Warning("sys_spu_thread_group_connect_event_all_threads(id=%d, eq_id=%d, req=0x%llx, spup_addr=0x%x)", + id, eq_id, req, spup.GetAddr()); - EventQueue* equeue; - if(!sys_event.CheckId(eq, equeue)) + if (!spup.IsGood()) + { + return CELL_EFAULT; + } + + EventQueue* eq; + if (!Emu.GetIdManager().GetIDData(eq_id, eq)) { return CELL_ESRCH; } - if(!req) + if (!req) { return CELL_EINVAL; } SpuGroupInfo* group; - if(!Emu.GetIdManager().GetIDData(id, group)) + if (!Emu.GetIdManager().GetIDData(id, group)) { return CELL_ESRCH; } - - /* - for(u32 i=0; ilist.size(); ++i) + + std::vector threads; + for (auto& v : group->list) { - CPUThread* t; - if(t = Emu.GetCPU().GetThread(group->list[i])) + if (!v) continue; + CPUThread* thr = Emu.GetCPU().GetThread(v); + if (thr->GetType() != CPU_THREAD_SPU) { - bool finded_port = false; - for(int j=0; jpos; ++j) + sc_spu.Error("sys_spu_thread_group_connect_event_all_threads(): CELL_ESTAT (wrong thread type)"); + return CELL_ESTAT; + } + threads.push_back((SPUThread*)thr); + } + + if (threads.size() != group->m_count) + { + sc_spu.Error("sys_spu_thread_group_connect_event_all_threads(): CELL_ESTAT (%d from %d)", (u32)threads.size(), group->m_count); + return CELL_ESTAT; + } + + for (u32 i = 0; i < 64; i++) // port number + { + bool found = true; + if (req & (1ull << i)) + { + for (auto& t : threads) t->SPUPs[i].m_mutex.lock(); + + for (auto& t : threads) if (t->SPUPs[i].eq) found = false; + + if (found) { - if(!equeue->ports[j]->thread) + for (auto& t : threads) { - finded_port = true; - equeue->ports[j]->thread = t; + eq->ports.add(&(t->SPUPs[i])); + t->SPUPs[i].eq = eq; } + spup = (u8)i; } - if(!finded_port) - { - return CELL_EISCONN; - } + for (auto& t : threads) t->SPUPs[i].m_mutex.unlock(); } - }*/ - return CELL_OK; + else + { + found = false; + } + + if (found) return CELL_OK; + } + + return CELL_EISCONN; } s32 sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.h b/rpcs3/Emu/SysCalls/lv2/sys_spu.h index 72821054b3..3750f151a4 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.h @@ -64,6 +64,7 @@ struct SpuGroupInfo int m_prio; int m_type; int m_ct; + u32 m_count; SpuGroupInfo(const std::string& name, u32 num, int prio, int type, u32 ct) : m_name(name) @@ -71,13 +72,10 @@ struct SpuGroupInfo , m_type(type) , m_ct(ct) , lock(0) + , m_count(num) { - num = 256; - list.resize(num); - for (u32 i = 0; i < num; i++) - { - list[i] = 0; - } + list.resize(256); + for (auto& v : list) v = 0; } }; @@ -95,7 +93,7 @@ s32 sys_spu_thread_create(mem32_t thread_id, mem32_t entry, u64 arg, int prio, u s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status); s32 sys_spu_thread_group_connect_event(u32 id, u32 eq, u32 et); s32 sys_spu_thread_group_disconnect_event(u32 id, u32 et); -s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq, u64 req, u32 spup_addr); +s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, mem8_t spup); s32 sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup); s32 sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type); s32 sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 7ff925b368..87afef7d75 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -104,14 +104,31 @@ s32 sys_timer_disconnect_event_queue(u32 timer_id) s32 sys_timer_sleep(u32 sleep_time) { sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); - std::this_thread::sleep_for(std::chrono::seconds(sleep_time)); + for (u32 i = 0; i < sleep_time; i++) + { + if (Emu.IsStopped()) + { + sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); + return CELL_OK; + } + std::this_thread::sleep_for(std::chrono::seconds(1)); + } return CELL_OK; } s32 sys_timer_usleep(u64 sleep_time) { - sys_timer.Log("sys_timer_usleep(sleep_time=%lld)", sleep_time); + sys_timer.Warning("sys_timer_usleep(sleep_time=%lld)", sleep_time); if (sleep_time > 0xFFFFFFFFFFFF) sleep_time = 0xFFFFFFFFFFFF; //2^48-1 - std::this_thread::sleep_for(std::chrono::microseconds(sleep_time)); + for (u64 i = 0; i < sleep_time; i += 1000000) + { + if (Emu.IsStopped()) + { + sys_timer.Warning("sys_timer_usleep(sleep_time=%lld)", sleep_time); + return CELL_OK; + } + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + std::this_thread::sleep_for(std::chrono::microseconds(sleep_time % 1000000)); return CELL_OK; } From 1dbbbc55f69eafff8783b324859afb6b1c84ff66 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 13 Jul 2014 22:59:54 +0400 Subject: [PATCH 176/499] Little fix --- rpcs3/Emu/CPU/CPUThread.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 577fcf9c5f..e08a025a9d 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -341,7 +341,7 @@ void CPUThread::Task() } Step(); - //if (PC - 0x13ED4 < 0x288) trace.push_back(PC); + trace.push_back(PC); NextPc(m_dec->DecodeMemory(PC + m_offset)); if (status == CPUThread_Step) From dab3d6c6d6a8f5a54f1ae8452d934842e43863b5 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 13 Jul 2014 23:05:28 +0400 Subject: [PATCH 177/499] Callbacks --- rpcs3/Emu/CPU/CPUThread.cpp | 2 +- rpcs3/Emu/SysCalls/Callback.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index e08a025a9d..577fcf9c5f 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -341,7 +341,7 @@ void CPUThread::Task() } Step(); - trace.push_back(PC); + //if (PC - 0x13ED4 < 0x288) trace.push_back(PC); NextPc(m_dec->DecodeMemory(PC + m_offset)); if (status == CPUThread_Step) diff --git a/rpcs3/Emu/SysCalls/Callback.cpp b/rpcs3/Emu/SysCalls/Callback.cpp index 378830875f..69fa0e8033 100644 --- a/rpcs3/Emu/SysCalls/Callback.cpp +++ b/rpcs3/Emu/SysCalls/Callback.cpp @@ -4,6 +4,7 @@ #include "Emu/System.h" #include "Callback.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/Cell/PPCThread.h" Callback::Callback(u32 slot, u64 addr) @@ -13,6 +14,7 @@ Callback::Callback(u32 slot, u64 addr) , a2(0) , a3(0) , a4(0) + , a5(0) , m_has_data(false) , m_name("Callback") { @@ -43,12 +45,13 @@ bool Callback::HasData() const return m_has_data; } -void Callback::Handle(u64 _a1, u64 _a2, u64 _a3, u64 _a4) +void Callback::Handle(u64 _a1, u64 _a2, u64 _a3, u64 _a4, u64 _a5) { a1 = _a1; a2 = _a2; a3 = _a3; a4 = _a4; + a5 = _a5; m_has_data = true; } @@ -97,6 +100,7 @@ again: thr.SetArg(2, a3); thr.SetArg(3, a4); thr.Run(); + ((PPUThread&)thr).GPR[7] = a5; thr.Exec(); From 3c04f2fef95944143cf95edbe1279e2fede567f1 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 14 Jul 2014 00:06:15 -0400 Subject: [PATCH 178/499] RSXThread: Remove some redundant assignments --- rpcs3/Emu/GS/RSXThread.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 8444083d93..623a1a433c 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -477,8 +477,6 @@ protected: m_clear_s = 0; m_poly_offset_scale_factor = 0.0; m_poly_offset_bias = 0.0; - m_depth_bounds_min = 0.0; - m_depth_bounds_max = 1.0; m_restart_index = 0xffffffff; m_front_polygon_mode = 0x1b02; // GL_FILL m_back_polygon_mode = 0x1b02; // GL_FILL @@ -571,7 +569,6 @@ protected: m_set_fog_mode = false; m_set_fog_params = false; m_set_clip_plane = false; - m_set_surface_format = false; m_set_context_dma_color_a = false; m_set_context_dma_color_b = false; m_set_context_dma_color_c = false; From 6bd044f9be56d325c77f6279d269046a82c82b19 Mon Sep 17 00:00:00 2001 From: Sacha Date: Mon, 14 Jul 2014 17:26:31 +1000 Subject: [PATCH 179/499] c++11 fixups. Initialise to zero where possible. note: cellAudio looks quite messed up. --- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 3 +- rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp | 12 ++--- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 57 +++++++++------------- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 12 ++--- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 20 +++----- 5 files changed, 39 insertions(+), 65 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index 82f08dc5b7..665f564c24 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -643,9 +643,8 @@ void GLVertexProgram::Compile() if(r) { - char* buf = new char[r+1]; + char* buf = new char[r+1](); GLsizei len; - memset(buf, 0, r+1); glGetShaderInfoLog(id, r, &len, buf); LOG_ERROR(RSX, "Failed to compile vertex shader: %s", buf); delete[] buf; diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp index 5a4dbf2123..fc0989e528 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp @@ -110,8 +110,7 @@ int cellPadGetData(u32 port_no, u32 data_addr) if(port_no >= rinfo.now_connect) return CELL_PAD_ERROR_NO_DEVICE; Pad& pad = pads[port_no]; - CellPadData data; - memset(&data, 0, sizeof(CellPadData)); + CellPadData data = {}; u16 d1Initial, d2Initial; d1Initial = pad.m_digital_1; @@ -301,8 +300,7 @@ int cellPadGetInfo(u32 info_addr) sys_io->Log("cellPadGetInfo(info_addr=0x%x)", info_addr); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; - CellPadInfo info; - memset(&info, 0, sizeof(CellPadInfo)); + CellPadInfo info = {}; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); info.max_connect = rinfo.max_connect; @@ -333,8 +331,7 @@ int cellPadGetInfo2(u32 info_addr) sys_io->Log("cellPadGetInfo2(info_addr=0x%x)", info_addr); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; - CellPadInfo2 info; - memset(&info, 0, sizeof(CellPadInfo2)); + CellPadInfo2 info = {}; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); info.max_connect = rinfo.max_connect; @@ -370,8 +367,7 @@ int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr) const std::vector& pads = Emu.GetPadManager().GetPads(); - CellCapabilityInfo data; - memset(&data, 0, sizeof(CellCapabilityInfo)); + CellCapabilityInfo data = {}; //Should return the same as device capability mask, psl1ght has it backwards in pad.h data.info[0] = pads[port_no].m_device_capability; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 9ff294a1aa..8a275aed96 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -21,6 +21,8 @@ static const bool g_is_u16 = Ini.AudioConvertToU16.GetValue(); // libaudio Functions +#define BUFFER_NUM 32 +#define BUFFER_SIZE 256 int cellAudioInit() { cellAudio->Warning("cellAudioInit()"); @@ -57,30 +59,25 @@ int cellAudioInit() if (Ini.AudioDumpToFile.GetValue()) m_dump.WriteHeader(); - float buf2ch[2 * 256]; // intermediate buffer for 2 channels - float buf8ch[8 * 256]; // intermediate buffer for 8 channels + float buf2ch[2 * BUFFER_SIZE]; // intermediate buffer for 2 channels + float buf8ch[8 * BUFFER_SIZE]; // intermediate buffer for 8 channels uint oal_buffer_offset = 0; - const uint oal_buffer_size = sizeof(buf2ch) / sizeof(float); + const uint oal_buffer_size = 2 * BUFFER_SIZE; - std::unique_ptr oal_buffer[32]; - SQueue queue; + std::unique_ptr oal_buffer[BUFFER_NUM]; + std::unique_ptr oal_buffer_float[BUFFER_NUM]; - std::unique_ptr oal_buffer_float[32]; - SQueue queue_float; - - for (u32 i = 0; i < sizeof(oal_buffer) / sizeof(oal_buffer[0]); i++) + for (u32 i = 0; i < BUFFER_NUM; i++) { - oal_buffer[i] = std::unique_ptr(new s16[oal_buffer_size]); - memset(oal_buffer[i].get(), 0, oal_buffer_size * sizeof(s16)); + oal_buffer[i] = std::unique_ptr(new s16[oal_buffer_size] {} ); + oal_buffer_float[i] = std::unique_ptr(new float[oal_buffer_size] {} ); } + + SQueue queue; queue.Clear(); - for (u32 i = 0; i < sizeof(oal_buffer_float) / sizeof(oal_buffer_float[0]); i++) - { - oal_buffer_float[i] = std::unique_ptr(new float[oal_buffer_size]); - memset(oal_buffer_float[i].get(), 0, oal_buffer_size * sizeof(float)); - } + SQueue queue_float; queue_float.Clear(); std::vector keys; @@ -89,10 +86,11 @@ int cellAudioInit() { m_audio_out->Init(); + // Note: What if the ini value changes? if (g_is_u16) m_audio_out->Open(oal_buffer[0].get(), oal_buffer_size * sizeof(s16)); - - m_audio_out->Open(oal_buffer_float[0].get(), oal_buffer_size * sizeof(float)); + else + m_audio_out->Open(oal_buffer_float[0].get(), oal_buffer_size * sizeof(float)); } m_config.start_time = get_system_time(); @@ -108,34 +106,27 @@ int cellAudioInit() if (g_is_u16) queue.Pop(oal_buffer); + else + queue_float.Pop(oal_buffer_float); - queue_float.Pop(oal_buffer_float); - if (g_is_u16) { if (oal_buffer) { m_audio_out->AddData(oal_buffer, oal_buffer_size * sizeof(s16)); - } - else - { - internal_finished = true; - return; + continue; } } - else { if (oal_buffer_float) { m_audio_out->AddData(oal_buffer_float, oal_buffer_size * sizeof(float)); - } - else - { - internal_finished = true; - return; + continue; } } + internal_finished = true; + return; } }); iat.detach(); @@ -161,8 +152,8 @@ int cellAudioInit() m_config.counter++; - const u32 oal_pos = m_config.counter % (sizeof(oal_buffer) / sizeof(oal_buffer[0])); - const u32 oal_pos_float = m_config.counter % (sizeof(oal_buffer_float) / sizeof(oal_buffer_float[0])); + const u32 oal_pos = m_config.counter % BUFFER_NUM; + const u32 oal_pos_float = m_config.counter % BUFFER_NUM; if (Emu.IsPaused()) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index caa363b96d..9d6512de52 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -148,8 +148,7 @@ int cellVideoOutGetState(u32 videoOut, u32 deviceIndex, u32 state_addr) if(deviceIndex) return CELL_VIDEO_OUT_ERROR_DEVICE_NOT_FOUND; - CellVideoOutState state; - memset(&state, 0, sizeof(CellVideoOutState)); + CellVideoOutState state = {}; switch(videoOut) { @@ -246,8 +245,7 @@ int cellVideoOutGetConfiguration(u32 videoOut, u32 config_addr, u32 option_addr) if(!Memory.IsGoodAddr(config_addr, sizeof(CellVideoOutConfiguration))) return CELL_EFAULT; - CellVideoOutConfiguration config; - memset(&config, 0, sizeof(CellVideoOutConfiguration)); + CellVideoOutConfiguration config = {}; switch(videoOut) { @@ -471,8 +469,7 @@ int cellAudioOutGetSoundAvailability2(u32 audioOut, u32 type, u32 fs, u32 ch, u3 int cellAudioOutGetState(u32 audioOut, u32 deviceIndex, u32 state_addr) { cellSysutil->Warning("cellAudioOutGetState(audioOut=0x%x,deviceIndex=0x%x,state_addr=0x%x)",audioOut,deviceIndex,state_addr); - CellAudioOutState state; - memset(&state, 0, sizeof(CellAudioOutState)); + CellAudioOutState state = {}; switch(audioOut) { @@ -541,8 +538,7 @@ int cellAudioOutGetConfiguration(u32 audioOut, u32 config_addr, u32 option_addr) if(!Memory.IsGoodAddr(config_addr, sizeof(CellAudioOutConfiguration))) return CELL_EFAULT; - CellAudioOutConfiguration config; - memset(&config, 0, sizeof(CellAudioOutConfiguration)); + CellAudioOutConfiguration config = {}; switch(audioOut) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index ae26d1a07c..b08dda80f4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -159,13 +159,11 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_treserved2 = 0; u64 stamp0 = get_system_time(); - - u8* pY = (u8*)malloc(w*h); // color planes - u8* pU = (u8*)malloc(w*h/4); - u8* pV = (u8*)malloc(w*h/4); - u8* pA = (u8*)malloc(w*h); - u32* res = (u32*)malloc(ow*oh*4); // RGBA interleaved output - const u8 alpha = ctrlParam->outAlpha; + auto pY = std::unique_ptr{ new u8[w*h] }.get(); // color planes + auto pU = std::unique_ptr{ new u8[w*h/4] }.get(); + auto pV = std::unique_ptr{ new u8[w*h/4] }.get(); + auto pA = std::unique_ptr{ new u8[w*h] }.get(); + auto res = std::unique_ptr{ new u32[ow*oh*4] }.get(); // RGBA interleaved output if (!Memory.CopyToReal(pY, inPicBuff_addr, w*h)) { @@ -185,7 +183,7 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_toutAlpha, w*h); u64 stamp1 = get_system_time(); @@ -210,12 +208,6 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_t Date: Mon, 14 Jul 2014 09:18:45 +0100 Subject: [PATCH 180/499] Update Memory.h To remove extraneous code. --- rpcs3/Emu/Memory/Memory.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 4a10a3260a..effa1b88f7 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -10,11 +10,7 @@ /* OS X uses MAP_ANON instead of MAP_ANONYMOUS */ #ifndef MAP_ANONYMOUS - #ifdef MAP_ANON - #define MAP_ANONYMOUS MAP_ANON - #else - #define MAP_ANONYMOUS 0 - #endif + #define MAP_ANONYMOUS MAP_ANON #endif using std::nullptr_t; From a71053ae15d0cd3eb8f363fb63cc3cd9cad590c1 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 14 Jul 2014 13:24:10 +0400 Subject: [PATCH 181/499] Asmjit updated --- asmjit | 2 +- asmjitsrc/asmjit.vcxproj | 34 +++++++++++++++++--- asmjitsrc/asmjit.vcxproj.filters | 46 +++++++++++++++++++++------- rpcs3/Emu/Cell/SPURecompiler.h | 28 ++++++++--------- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 22 ++++++------- rpcs3/Emu/Cell/SPUThread.h | 2 +- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 10 +++--- 7 files changed, 96 insertions(+), 48 deletions(-) diff --git a/asmjit b/asmjit index a66efd5460..3363e4138b 160000 --- a/asmjit +++ b/asmjit @@ -1 +1 @@ -Subproject commit a66efd54609aab7dd98e34c069937f34aa7c8f95 +Subproject commit 3363e4138b003be36dfb63cf8c63cf360f04276f diff --git a/asmjitsrc/asmjit.vcxproj b/asmjitsrc/asmjit.vcxproj index 04f30a8e35..92a1201431 100644 --- a/asmjitsrc/asmjit.vcxproj +++ b/asmjitsrc/asmjit.vcxproj @@ -23,31 +23,55 @@ + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + {AC40FF01-426E-4838-A317-66354CEFAE88} diff --git a/asmjitsrc/asmjit.vcxproj.filters b/asmjitsrc/asmjit.vcxproj.filters index b82be7b1a7..705a68121c 100644 --- a/asmjitsrc/asmjit.vcxproj.filters +++ b/asmjitsrc/asmjit.vcxproj.filters @@ -1,34 +1,58 @@  - - - - - - + + + - + - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 7e4501feec..7b019ac5ca 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -148,7 +148,7 @@ public: if (#a1[0] == 'r') XmmInvalidate(a1); \ if (#a2[0] == 'r') XmmInvalidate(a2); \ if (#a3[0] == 'r') XmmInvalidate(a3); \ - X86X64CallNode* call##a0 = c.call(imm_ptr(reinterpret_cast(&opwr_##a0::opcode)), kFuncConvHost, FuncBuilder4()); \ + X86CallNode* call##a0 = c.call(imm_ptr(reinterpret_cast(&opwr_##a0::opcode)), kFuncConvHost, FuncBuilder4()); \ call##a0->setArg(0, imm_u(a0)); \ call##a0->setArg(1, imm_u(a1)); \ call##a0->setArg(2, imm_u(a2)); \ @@ -163,24 +163,24 @@ private: SPURecompilerCore& rec; public: - Compiler* compiler; + X86Compiler* compiler; bool do_finalize; // input: - GpVar* cpu_var; - GpVar* ls_var; - GpVar* imm_var; - GpVar* g_imm_var; + X86GpVar* cpu_var; + X86GpVar* ls_var; + X86GpVar* imm_var; + X86GpVar* g_imm_var; // output: - GpVar* pos_var; + X86GpVar* pos_var; // temporary: - GpVar* addr; - GpVar* qw0; - GpVar* qw1; - GpVar* qw2; + X86GpVar* addr; + X86GpVar* qw0; + X86GpVar* qw1; + X86GpVar* qw2; struct XmmLink { - XmmVar* data; + X86XmmVar* data; s8 reg; bool taken; mutable bool got; @@ -443,7 +443,7 @@ private: } }; c.mov(cpu_qword(PC), (u32)CPU.PC); - X86X64CallNode* call = c.call(imm_ptr(reinterpret_cast(&STOP_wrapper::STOP)), kFuncConvHost, FuncBuilder1()); + X86CallNode* call = c.call(imm_ptr(reinterpret_cast(&STOP_wrapper::STOP)), kFuncConvHost, FuncBuilder1()); call->setArg(0, imm_u(code)); c.mov(*pos_var, (CPU.PC >> 2) + 1); do_finalize = true; @@ -1114,7 +1114,7 @@ private: /*XmmInvalidate(rt); - GpVar v(c, kVarTypeUInt32); + X86GpVar v(c, kVarTypeUInt32); c.mov(v, cpu_dword(GPR[rt]._u32[3])); switch (ra) { diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index d38911b110..e444dca66a 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -42,7 +42,7 @@ void SPURecompilerCore::Compile(u16 pos) StringLogger stringLogger; stringLogger.setOption(kLoggerOptionBinaryForm, true); - Compiler compiler(&runtime); + X86Compiler compiler(&runtime); m_enc->compiler = &compiler; compiler.setLogger(&stringLogger); @@ -51,40 +51,40 @@ void SPURecompilerCore::Compile(u16 pos) u32 excess = 0; entry[start].count = 0; - GpVar cpu_var(compiler, kVarTypeIntPtr, "cpu"); + X86GpVar cpu_var(compiler, kVarTypeIntPtr, "cpu"); compiler.setArg(0, cpu_var); compiler.alloc(cpu_var); m_enc->cpu_var = &cpu_var; - GpVar ls_var(compiler, kVarTypeIntPtr, "ls"); + X86GpVar ls_var(compiler, kVarTypeIntPtr, "ls"); compiler.setArg(1, ls_var); compiler.alloc(ls_var); m_enc->ls_var = &ls_var; - GpVar imm_var(compiler, kVarTypeIntPtr, "imm"); + X86GpVar imm_var(compiler, kVarTypeIntPtr, "imm"); compiler.setArg(2, imm_var); compiler.alloc(imm_var); m_enc->imm_var = &imm_var; - GpVar g_imm_var(compiler, kVarTypeIntPtr, "g_imm"); + X86GpVar g_imm_var(compiler, kVarTypeIntPtr, "g_imm"); compiler.setArg(3, g_imm_var); compiler.alloc(g_imm_var); m_enc->g_imm_var = &g_imm_var; - GpVar pos_var(compiler, kVarTypeUInt32, "pos"); + X86GpVar pos_var(compiler, kVarTypeUInt32, "pos"); m_enc->pos_var = &pos_var; - GpVar addr_var(compiler, kVarTypeUInt32, "addr"); + X86GpVar addr_var(compiler, kVarTypeUInt32, "addr"); m_enc->addr = &addr_var; - GpVar qw0_var(compiler, kVarTypeUInt64, "qw0"); + X86GpVar qw0_var(compiler, kVarTypeUInt64, "qw0"); m_enc->qw0 = &qw0_var; - GpVar qw1_var(compiler, kVarTypeUInt64, "qw1"); + X86GpVar qw1_var(compiler, kVarTypeUInt64, "qw1"); m_enc->qw1 = &qw1_var; - GpVar qw2_var(compiler, kVarTypeUInt64, "qw2"); + X86GpVar qw2_var(compiler, kVarTypeUInt64, "qw2"); m_enc->qw2 = &qw2_var; for (u32 i = 0; i < 16; i++) { - m_enc->xmm_var[i].data = new XmmVar(compiler, kVarTypeXmm, fmt::Format("reg_%d", i).c_str()); + m_enc->xmm_var[i].data = new X86XmmVar(compiler, kX86VarTypeXmm, fmt::Format("reg_%d", i).c_str()); } compiler.xor_(pos_var, pos_var); diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index a5f848ce65..a56751bbe8 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -362,7 +362,7 @@ public: void Init() { - m_index = 0; + m_indval = 0; } __forceinline bool Pop(u32& res) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 87afef7d75..d1907c0dc7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -103,31 +103,31 @@ s32 sys_timer_disconnect_event_queue(u32 timer_id) s32 sys_timer_sleep(u32 sleep_time) { - sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); + sys_timer.Log("sys_timer_sleep(sleep_time=%d)", sleep_time); for (u32 i = 0; i < sleep_time; i++) { + std::this_thread::sleep_for(std::chrono::seconds(1)); if (Emu.IsStopped()) { sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); return CELL_OK; } - std::this_thread::sleep_for(std::chrono::seconds(1)); } return CELL_OK; } s32 sys_timer_usleep(u64 sleep_time) { - sys_timer.Warning("sys_timer_usleep(sleep_time=%lld)", sleep_time); + sys_timer.Log("sys_timer_usleep(sleep_time=%lld)", sleep_time); if (sleep_time > 0xFFFFFFFFFFFF) sleep_time = 0xFFFFFFFFFFFF; //2^48-1 - for (u64 i = 0; i < sleep_time; i += 1000000) + for (u32 i = 0; i < sleep_time / 1000000; i++) { + std::this_thread::sleep_for(std::chrono::seconds(1)); if (Emu.IsStopped()) { sys_timer.Warning("sys_timer_usleep(sleep_time=%lld)", sleep_time); return CELL_OK; } - std::this_thread::sleep_for(std::chrono::seconds(1)); } std::this_thread::sleep_for(std::chrono::microseconds(sleep_time % 1000000)); return CELL_OK; From 82536b298c0f53ef3af196b7d56738d43b37c063 Mon Sep 17 00:00:00 2001 From: Sacha Date: Tue, 15 Jul 2014 03:21:24 +1000 Subject: [PATCH 182/499] Fix issue from #567 that stopped videos from working. Clean up some code. --- Utilities/rFile.cpp | 31 +++++++---- Utilities/rFile.h | 2 + rpcs3/Emu/FS/vfsDir.cpp | 5 +- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 24 ++++----- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 68 ++++++++---------------- 5 files changed, 62 insertions(+), 68 deletions(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 2ce5fdcbfe..20acd70efd 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -153,13 +153,7 @@ bool rFile::Open(const std::string &filename, rFile::OpenMode mode, int access) bool rFile::Exists(const std::string &file) { -#ifdef _WIN32 - std::wstring wstr = ConvertUTF8ToWString(file); - return GetFileAttributes(wstr.c_str()) != 0xFFFFFFFF; -#else - struct stat buffer; - return (stat (file.c_str(), &buffer) == 0); -#endif + rExists(file); } bool rFile::IsOpened() const @@ -215,6 +209,27 @@ bool rRmdir(const std::string &dir) #endif } +bool rRename(const std::string &from, const std::string &to) +{ + // TODO: Deal with case-sensitivity +#ifdef _WIN32 + return (MoveFile(ConvertUTF8ToWString(from).c_str(), ConvertUTF8ToWString(to).c_str()) == TRUE); +#else + return (0 == rename(from.c_str(), to.c_str())); +#endif +} + +bool rExists(const std::string &file) +{ +#ifdef _WIN32 + std::wstring wstr = ConvertUTF8ToWString(file); + return GetFileAttributes(wstr.c_str()) != 0xFFFFFFFF; +#else + struct stat buffer; + return (stat (file.c_str(), &buffer) == 0); +#endif +} + bool rDirExists(const std::string &path) { return wxDirExists(fmt::FromUTF8(path)); @@ -287,8 +302,6 @@ bool rDir::GetNext(std::string *filename) const *filename = str.ToStdString(); return res; } - - rFileName::rFileName() { diff --git a/Utilities/rFile.h b/Utilities/rFile.h index 35cb332661..55a760abef 100644 --- a/Utilities/rFile.h +++ b/Utilities/rFile.h @@ -45,6 +45,8 @@ std::string rGetCwd(); bool rRmdir(const std::string& dir); bool rMkdir(const std::string& dir); bool rMkpath(const std::string& path); +bool rRename(const std::string &from, const std::string &to); +bool rExists(const std::string &path); bool rDirExists(const std::string &path); bool rFileExists(const std::string &path); bool rRemoveFile(const std::string &path); diff --git a/rpcs3/Emu/FS/vfsDir.cpp b/rpcs3/Emu/FS/vfsDir.cpp index a161183549..e648745fe8 100644 --- a/rpcs3/Emu/FS/vfsDir.cpp +++ b/rpcs3/Emu/FS/vfsDir.cpp @@ -8,6 +8,9 @@ vfsDir::vfsDir() : vfsDirBase(nullptr) , m_stream(nullptr) { + // TODO: proper implementation + // m_stream is nullptr here. So open root until a proper dir is given + Open("/"); } vfsDir::vfsDir(const std::string& path) @@ -33,7 +36,7 @@ bool vfsDir::Create(const std::string& path) bool vfsDir::IsExists(const std::string& path) const { - return m_stream->IsExists(path); // Crash (Access violation reading location 0x0000000000000000) + return m_stream->IsExists(path); } const std::vector& vfsDir::GetEntries() const diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index b08dda80f4..34e1f4abf7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -159,31 +159,31 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_treserved2 = 0; u64 stamp0 = get_system_time(); - auto pY = std::unique_ptr{ new u8[w*h] }.get(); // color planes - auto pU = std::unique_ptr{ new u8[w*h/4] }.get(); - auto pV = std::unique_ptr{ new u8[w*h/4] }.get(); - auto pA = std::unique_ptr{ new u8[w*h] }.get(); - auto res = std::unique_ptr{ new u32[ow*oh*4] }.get(); // RGBA interleaved output + std::unique_ptr pY(new u8[w*h]); // color planes + std::unique_ptr pU(new u8[w*h/4]); + std::unique_ptr pV(new u8[w*h/4]); + std::unique_ptr pA(new u8[w*h]); + std::unique_ptr res(new u32[ow*oh*4]); // RGBA interleaved output - if (!Memory.CopyToReal(pY, inPicBuff_addr, w*h)) + if (!Memory.CopyToReal(pY.get(), inPicBuff_addr, w*h)) { cellVpost->Error("cellVpostExec: data copying failed(pY)"); Emu.Pause(); } - if (!Memory.CopyToReal(pU, inPicBuff_addr + w*h, w*h/4)) + if (!Memory.CopyToReal(pU.get(), inPicBuff_addr + w*h, w*h/4)) { cellVpost->Error("cellVpostExec: data copying failed(pU)"); Emu.Pause(); } - if (!Memory.CopyToReal(pV, inPicBuff_addr + w*h + w*h/4, w*h/4)) + if (!Memory.CopyToReal(pV.get(), inPicBuff_addr + w*h + w*h/4, w*h/4)) { cellVpost->Error("cellVpostExec: data copying failed(pV)"); Emu.Pause(); } - memset(pA, (const u8)ctrlParam->outAlpha, w*h); + memset(pA.get(), (const u8)ctrlParam->outAlpha, w*h); u64 stamp1 = get_system_time(); @@ -191,9 +191,9 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_t(ow*4), 0, 0, 0 }; sws_scale(sws, in_data, in_line, 0, h, out_data, out_line); @@ -202,7 +202,7 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_tError("cellVpostExec: data copying failed(result)"); Emu.Pause(); diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index ed40ca711e..b62df5b512 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -19,17 +19,9 @@ enum IDFlag_Dir = 2, }; -struct FsRingBuffer -{ - u64 m_ringbuf_size; - u64 m_block_size; - u64 m_transfer_rate; - u32 m_copy; -}; - struct FsRingBufferConfig { - FsRingBuffer m_ring_buffer; + CellFsRingBuffer m_ring_buffer; // Currently unused after assignment u32 m_buffer; u64 m_fs_status; u64 m_regid; @@ -41,15 +33,9 @@ struct FsRingBufferConfig , m_regid(0) , m_alloc_mem_size(0) , m_current_addr(0) - { - memset(&m_ring_buffer, 0, sizeof(FsRingBuffer)); - } + , m_ring_buffer() { } - ~FsRingBufferConfig() - { - memset(&m_ring_buffer, 0, sizeof(FsRingBuffer)); - } -} m_fs_config; +} fs_config; s32 cellFsOpen(u32 path_addr, s32 flags, mem32_t fd, mem32_t arg, u64 size) @@ -563,22 +549,17 @@ s32 cellFsStReadInit(u32 fd, mem_ptr_t ringbuf) if(!ringbuf.IsGood()) return CELL_EFAULT; - FsRingBuffer& buffer = m_fs_config.m_ring_buffer; + fs_config.m_ring_buffer = *ringbuf; - buffer.m_block_size = ringbuf->block_size; - buffer.m_copy = ringbuf->copy; - buffer.m_ringbuf_size = ringbuf->ringbuf_size; - buffer.m_transfer_rate = ringbuf->transfer_rate; - - if(buffer.m_ringbuf_size < 0x40000000) // If the size is less than 1MB - m_fs_config.m_alloc_mem_size = ((ringbuf->ringbuf_size + 64 * 1024 - 1) / (64 * 1024)) * (64 * 1024); - m_fs_config.m_alloc_mem_size = ((ringbuf->ringbuf_size + 1024 * 1024 - 1) / (1024 * 1024)) * (1024 * 1024); + if(ringbuf->ringbuf_size < 0x40000000) // If the size is less than 1MB + fs_config.m_alloc_mem_size = ((ringbuf->ringbuf_size + 64 * 1024 - 1) / (64 * 1024)) * (64 * 1024); + fs_config.m_alloc_mem_size = ((ringbuf->ringbuf_size + 1024 * 1024 - 1) / (1024 * 1024)) * (1024 * 1024); // alloc memory - m_fs_config.m_buffer = Memory.Alloc(m_fs_config.m_alloc_mem_size, 1024); - memset(Memory + m_fs_config.m_buffer, 0, m_fs_config.m_alloc_mem_size); + fs_config.m_buffer = Memory.Alloc(fs_config.m_alloc_mem_size, 1024); + memset(Memory + fs_config.m_buffer, 0, fs_config.m_alloc_mem_size); - m_fs_config.m_fs_status = CELL_FS_ST_INITIALIZED; + fs_config.m_fs_status = CELL_FS_ST_INITIALIZED; return CELL_OK; } @@ -590,8 +571,8 @@ s32 cellFsStReadFinish(u32 fd) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - Memory.Free(m_fs_config.m_buffer); - m_fs_config.m_fs_status = CELL_FS_ST_NOT_INITIALIZED; + Memory.Free(fs_config.m_buffer); + fs_config.m_fs_status = CELL_FS_ST_NOT_INITIALIZED; return CELL_OK; } @@ -606,15 +587,10 @@ s32 cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf) if(!ringbuf.IsGood()) return CELL_EFAULT; - FsRingBuffer& buffer = m_fs_config.m_ring_buffer; + *ringbuf = fs_config.m_ring_buffer; - ringbuf->block_size = buffer.m_block_size; - ringbuf->copy = buffer.m_copy; - ringbuf->ringbuf_size = buffer.m_ringbuf_size; - ringbuf->transfer_rate = buffer.m_transfer_rate; - - sys_fs->Warning("*** fs stream config: block_size=0x%llx, copy=%d, ringbuf_size = 0x%llx, transfer_rate = 0x%llx", ringbuf->block_size, ringbuf->copy, - ringbuf->ringbuf_size, ringbuf->transfer_rate); + sys_fs->Warning("*** fs stream config: block_size=0x%llx, copy=%d, ringbuf_size = 0x%llx, transfer_rate = 0x%llx", + ringbuf->block_size, ringbuf->copy,ringbuf->ringbuf_size, ringbuf->transfer_rate); return CELL_OK; } @@ -625,7 +601,7 @@ s32 cellFsStReadGetStatus(u32 fd, mem64_t status) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - status = m_fs_config.m_fs_status; + status = fs_config.m_fs_status; return CELL_OK; } @@ -637,7 +613,7 @@ s32 cellFsStReadGetRegid(u32 fd, mem64_t regid) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - regid = m_fs_config.m_regid; + regid = fs_config.m_regid; return CELL_OK; } @@ -649,8 +625,8 @@ s32 cellFsStReadStart(u32 fd, u64 offset, u64 size) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - m_fs_config.m_current_addr = m_fs_config.m_buffer + (u32)offset; - m_fs_config.m_fs_status = CELL_FS_ST_PROGRESS; + fs_config.m_current_addr = fs_config.m_buffer + (u32)offset; + fs_config.m_fs_status = CELL_FS_ST_PROGRESS; return CELL_OK; } @@ -662,7 +638,7 @@ s32 cellFsStReadStop(u32 fd) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - m_fs_config.m_fs_status = CELL_FS_ST_STOP; + fs_config.m_fs_status = CELL_FS_ST_STOP; return CELL_OK; } @@ -676,8 +652,8 @@ s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) if (rsize.GetAddr() && !rsize.IsGood()) return CELL_EFAULT; - m_fs_config.m_regid += size; - rsize = m_fs_config.m_regid; + fs_config.m_regid += size; + rsize = fs_config.m_regid; return CELL_OK; } From 01aa74e4a86be3b999383ccec8d8a54738eaa1fd Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 14 Jul 2014 23:15:30 +0400 Subject: [PATCH 183/499] IsGoodAddr() bug fixed --- Utilities/GNU.h | 6 + rpcs3/Emu/Memory/Memory.cpp | 188 +---------------------- rpcs3/Emu/Memory/Memory.h | 195 ++++++++++++++++++++---- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_tty.cpp | 2 +- 6 files changed, 181 insertions(+), 220 deletions(-) diff --git a/Utilities/GNU.h b/Utilities/GNU.h index c0286b0491..89cb3a1cfa 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -6,6 +6,12 @@ #define thread_local __thread #endif +#ifdef _WIN32 +#define noinline __declspec(noinline) +#else +#define noinline __attribute__((noinline)) +#endif + template void strcpy_trunc(char (&dst)[size], const std::string& src) { diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index e804900963..c69afb5a9a 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -364,193 +364,7 @@ bool MemoryBlockLE::Write128(const u64 addr, const u128 value) return true; } -//MemoryBase -void MemoryBase::Write8(u64 addr, const u8 data) -{ - if ((u32)addr == addr) - { - *(u8*)((u8*)GetBaseAddr() + addr) = data; - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - } -} - -void MemoryBase::Write16(u64 addr, const u16 data) -{ - if ((u32)addr == addr) - { - *(u16*)((u8*)GetBaseAddr() + addr) = re16(data); - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - } -} - -void MemoryBase::Write32(u64 addr, const u32 data) -{ - if ((u32)addr == addr) - { - if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) - { - *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); - } - else - { - RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data); - } - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - } -} - -void MemoryBase::Write64(u64 addr, const u64 data) -{ - if ((u32)addr == addr) - { - *(u64*)((u8*)GetBaseAddr() + addr) = re64(data); - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - } -} - -void MemoryBase::Write128(u64 addr, const u128 data) -{ - if ((u32)addr == addr) - { - *(u128*)((u8*)GetBaseAddr() + addr) = re128(data); - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - } -} - -bool MemoryBase::Write8NN(u64 addr, const u8 data) -{ - if(!IsGoodAddr(addr)) return false; - Write8(addr, data); - return true; -} - -bool MemoryBase::Write16NN(u64 addr, const u16 data) -{ - if(!IsGoodAddr(addr, 2)) return false; - Write16(addr, data); - return true; -} - -bool MemoryBase::Write32NN(u64 addr, const u32 data) -{ - if(!IsGoodAddr(addr, 4)) return false; - Write32(addr, data); - return true; -} - -bool MemoryBase::Write64NN(u64 addr, const u64 data) -{ - if(!IsGoodAddr(addr, 8)) return false; - Write64(addr, data); - return true; -} - -bool MemoryBase::Write128NN(u64 addr, const u128 data) -{ - if(!IsGoodAddr(addr, 16)) return false; - Write128(addr, data); - return true; -} - -u8 MemoryBase::Read8(u64 addr) -{ - if ((u32)addr == addr) - { - return *(u8*)((u8*)GetBaseAddr() + addr); - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - return 0; - } -} - -u16 MemoryBase::Read16(u64 addr) -{ - if ((u32)addr == addr) - { - return re16(*(u16*)((u8*)GetBaseAddr() + addr)); - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - return 0; - } -} - -u32 MemoryBase::Read32(u64 addr) -{ - if ((u32)addr == addr) - { - if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) - { - return re32(*(u32*)((u8*)GetBaseAddr() + addr)); - } - else - { - u32 res; - RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res); - return res; - } - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - return 0; - } -} - -u64 MemoryBase::Read64(u64 addr) -{ - if ((u32)addr == addr) - { - return re64(*(u64*)((u8*)GetBaseAddr() + addr)); - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - return 0; - } -} - -u128 MemoryBase::Read128(u64 addr) -{ - if ((u32)addr == addr) - { - return re128(*(u128*)((u8*)GetBaseAddr() + addr)); - } - else - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - Emu.Pause(); - return u128::From128(0, 0); - } -} - +// MemoryBase template<> __forceinline u64 MemoryBase::ReverseData<1>(u64 val) { return val; } template<> __forceinline u64 MemoryBase::ReverseData<2>(u64 val) { return Reverse16(val); } template<> __forceinline u64 MemoryBase::ReverseData<4>(u64 val) { return Reverse32(val); } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 5f7681301b..9ac13daba6 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -111,17 +111,26 @@ public: return m_base_addr; } + noinline void InvalidAddress(const char* func, const u64 addr) + { + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", func, addr); + } + void RegisterPages(u64 addr, u32 size) { std::lock_guard lock(m_mutex); //LOG_NOTICE(MEMORY, "RegisterPages(addr=0x%llx, size=0x%x)", addr, size); - for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) + for (u64 i = addr / 4096; i < (addr + size) / 4096; i++) { - if (i >= sizeof(m_pages) / sizeof(m_pages[0])) break; + if (i >= sizeof(m_pages) / sizeof(m_pages[0])) + { + InvalidAddress(__FUNCTION__, i * 4096); + break; + } if (m_pages[i]) { - LOG_ERROR(MEMORY, "Page already registered (page=0x%x)", i * 4096); + LOG_ERROR(MEMORY, "Page already registered (addr=0x%llx)", i * 4096); } m_pages[i] = 1; // TODO: define page parameters } @@ -132,12 +141,16 @@ public: std::lock_guard lock(m_mutex); //LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size); - for (u32 i = addr / 4096; i < (addr + size) / 4096; i++) + for (u64 i = addr / 4096; i < (addr + size) / 4096; i++) { - if (i >= sizeof(m_pages) / sizeof(m_pages[0])) break; + if (i >= sizeof(m_pages) / sizeof(m_pages[0])) + { + InvalidAddress(__FUNCTION__, i * 4096); + break; + } if (!m_pages[i]) { - LOG_ERROR(MEMORY, "Page not registered (page=0x%x)", i * 4096); + LOG_ERROR(MEMORY, "Page not registered (addr=0x%llx)", i * 4096); } m_pages[i] = 0; // TODO: define page parameters } @@ -181,8 +194,7 @@ public: } else { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", __FUNCTION__, addr); - assert(0); + InvalidAddress(__FUNCTION__, addr); return (u8*)GetBaseAddr(); } } @@ -287,9 +299,9 @@ public: LOG_NOTICE(MEMORY, "Memory initialized."); } - bool IsGoodAddr(const u64 addr) + template bool IsGoodAddr(const T addr) { - if (addr >= 0x100000000 || !m_pages[addr / 4096]) // TODO: define page parameters + if ((u32)addr != addr || !m_pages[addr / 4096]) // TODO: define page parameters { return false; } @@ -299,9 +311,9 @@ public: } } - bool IsGoodAddr(const u64 addr, const u32 size) + template bool IsGoodAddr(const T addr, const u32 size) { - if (addr + size > 0x100000000) + if ((u32)addr != addr || (u64)addr + (u64)size > 0x100000000ull) { return false; } @@ -346,23 +358,152 @@ public: #endif } - void Write8(const u64 addr, const u8 data); - void Write16(const u64 addr, const u16 data); - void Write32(const u64 addr, const u32 data); - void Write64(const u64 addr, const u64 data); - void Write128(const u64 addr, const u128 data); + //MemoryBase + template void Write8(T addr, const u8 data) + { + if ((u32)addr == addr) + { + *(u8*)((u8*)GetBaseAddr() + addr) = data; + } + else + { + InvalidAddress(__FUNCTION__, addr); + *(u8*)GetBaseAddr() = data; + } + } - bool Write8NN(const u64 addr, const u8 data); - bool Write16NN(const u64 addr, const u16 data); - bool Write32NN(const u64 addr, const u32 data); - bool Write64NN(const u64 addr, const u64 data); - bool Write128NN(const u64 addr, const u128 data); + template void Write16(T addr, const u16 data) + { + if ((u32)addr == addr) + { + *(u16*)((u8*)GetBaseAddr() + addr) = re16(data); + } + else + { + InvalidAddress(__FUNCTION__, addr); + *(u16*)GetBaseAddr() = data; + } + } - u8 Read8(const u64 addr); - u16 Read16(const u64 addr); - u32 Read32(const u64 addr); - u64 Read64(const u64 addr); - u128 Read128(const u64 addr); + template void Write32(T addr, const u32 data) + { + if ((u32)addr == addr) + { + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + { + *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); + } + else + { + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data); + } + } + else + { + InvalidAddress(__FUNCTION__, addr); + *(u32*)GetBaseAddr() = data; + } + } + + template void Write64(T addr, const u64 data) + { + if ((u32)addr == addr) + { + *(u64*)((u8*)GetBaseAddr() + addr) = re64(data); + } + else + { + InvalidAddress(__FUNCTION__, addr); + *(u64*)GetBaseAddr() = data; + } + } + + template void Write128(T addr, const u128 data) + { + if ((u32)addr == addr) + { + *(u128*)((u8*)GetBaseAddr() + addr) = re128(data); + } + else + { + InvalidAddress(__FUNCTION__, addr); + *(u128*)GetBaseAddr() = data; + } + } + + template u8 Read8(T addr) + { + if ((u32)addr == addr) + { + return *(u8*)((u8*)GetBaseAddr() + addr); + } + else + { + InvalidAddress(__FUNCTION__, addr); + return *(u8*)GetBaseAddr(); + } + } + + template u16 Read16(T addr) + { + if ((u32)addr == addr) + { + return re16(*(u16*)((u8*)GetBaseAddr() + addr)); + } + else + { + InvalidAddress(__FUNCTION__, addr); + return *(u16*)GetBaseAddr(); + } + } + + template u32 Read32(T addr) + { + if ((u32)addr == addr) + { + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + { + return re32(*(u32*)((u8*)GetBaseAddr() + addr)); + } + else + { + u32 res; + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res); + return res; + } + } + else + { + InvalidAddress(__FUNCTION__, addr); + return *(u32*)GetBaseAddr(); + } + } + + template u64 Read64(T addr) + { + if ((u32)addr == addr) + { + return re64(*(u64*)((u8*)GetBaseAddr() + addr)); + } + else + { + InvalidAddress(__FUNCTION__, addr); + return *(u64*)GetBaseAddr(); + } + } + + template u128 Read128(T addr) + { + if ((u32)addr == addr) + { + return re128(*(u128*)((u8*)GetBaseAddr() + addr)); + } + else + { + InvalidAddress(__FUNCTION__, addr); + return *(u128*)GetBaseAddr(); + } + } bool CopyToReal(void* real, u64 from, u32 count) { diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 0685b0e90c..3532fbf1e7 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -531,7 +531,8 @@ int cellSurMixerStart() int cellSurMixerSetParameter(u32 param, float value) { - libmixer->Error("cellSurMixerSetParameter(param=0x%x, value=%f)", param, value); + declCPU(); + libmixer->Error("cellSurMixerSetParameter(param=0x%x, value=%f, FPR[1]=%f, FPR[2]=%f)", param, value, (float&)CPU.FPR[1], (float&)CPU.FPR[2]); return CELL_OK; } @@ -559,8 +560,7 @@ int cellSurMixerSurBusAddData(u32 busNo, u32 offset, u32 addr, u32 samples) } else { - libmixer->Error("cellSurMixerSurBusAddData(busNo=%d, offset=0x%x, addr=0x%x, samples=%d)", busNo, offset, addr, samples); - Emu.Pause(); + libmixer->Error("cellSurMixerSurBusAddData(busNo=%d, offset=0x%x, addr=0x%x, samples=%d): unknown parameters", busNo, offset, addr, samples); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index d1907c0dc7..3aa176e46a 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -109,7 +109,7 @@ s32 sys_timer_sleep(u32 sleep_time) std::this_thread::sleep_for(std::chrono::seconds(1)); if (Emu.IsStopped()) { - sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); + sys_timer.Warning("sys_timer_sleep(sleep_time=%d) aborted", sleep_time); return CELL_OK; } } @@ -125,7 +125,7 @@ s32 sys_timer_usleep(u64 sleep_time) std::this_thread::sleep_for(std::chrono::seconds(1)); if (Emu.IsStopped()) { - sys_timer.Warning("sys_timer_usleep(sleep_time=%lld)", sleep_time); + sys_timer.Warning("sys_timer_usleep(sleep_time=%lld) aborted", sleep_time); return CELL_OK; } } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp index 630f00a959..073e1a0176 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp @@ -9,7 +9,7 @@ s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) { // We currently do not support reading from the Console LOG_WARNING(HLE, "sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); - Memory.Write32NN(preadlen_addr, len); + Memory.Write32(preadlen_addr, len); Emu.Pause(); return CELL_OK; From 26e14188976a7d0e6266b227ee57796f42f2d93f Mon Sep 17 00:00:00 2001 From: Sacha Date: Tue, 15 Jul 2014 05:42:41 +1000 Subject: [PATCH 184/499] Fix rFile --- Utilities/rFile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 20acd70efd..c0257fbed7 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -153,7 +153,7 @@ bool rFile::Open(const std::string &filename, rFile::OpenMode mode, int access) bool rFile::Exists(const std::string &file) { - rExists(file); + return rExists(file); } bool rFile::IsOpened() const From 51b54a4d6bf46b701983ea63fe988778469fb598 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 15 Jul 2014 01:32:32 +0400 Subject: [PATCH 185/499] SSE4.1 detection --- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 15 +++++++++++---- rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index e444dca66a..52563b2e0d 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -13,12 +13,19 @@ static const g_imm_table_struct g_imm_table; SPURecompilerCore::SPURecompilerCore(SPUThread& cpu) -: m_enc(new SPURecompiler(cpu, *this)) -, inter(new SPUInterpreter(cpu)) -, CPU(cpu) -, first(true) + : m_enc(new SPURecompiler(cpu, *this)) + , inter(new SPUInterpreter(cpu)) + , CPU(cpu) + , first(true) { memset(entry, 0, sizeof(entry)); + X86CpuInfo inf; + X86CpuUtil::detect(&inf); + if (!inf.hasFeature(kX86CpuFeatureSse41)) + { + LOG_ERROR(SPU, "SPU Recompiler requires SSE4.1 instruction set support"); + Emu.Pause(); + } } SPURecompilerCore::~SPURecompilerCore() diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index ea34d10566..d918962343 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -44,7 +44,7 @@ int UTF16stoUTF8s(mem16_ptr_t utf16, mem64_t utf16_len, mem8_ptr_t utf8, mem64_t if (!utf16.IsGood() || !utf16_len.IsGood() || !utf8_len.IsGood()) return SRCIllegal; - std::u16string wstr =(char16_t*)Memory.VirtualToRealAddr(utf16); + std::u16string wstr =(char16_t*)Memory.VirtualToRealAddr(utf16.GetAddr()); wstr.resize(utf16_len.GetValue()); // TODO: Is this really the role of utf16_len in this function? #ifdef _MSC_VER std::wstring_convert,char16_t> convert; diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 3532fbf1e7..147e37c812 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -361,7 +361,7 @@ int cellSurMixerCreate(const mem_ptr_t config) break; } - if (mixcount > (port.tag + 14)) // preemptive buffer filling (probably hack) + if (mixcount > (port.tag + 0)) // adding positive value (1-15): preemptive buffer filling (hack) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; From 51f64049ab563545c502adc451b507d40ff2e1a4 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 15 Jul 2014 01:33:35 +0400 Subject: [PATCH 186/499] Callback header fix --- rpcs3/Emu/SysCalls/Callback.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Callback.h b/rpcs3/Emu/SysCalls/Callback.h index ce9023b1b0..faf3b79e99 100644 --- a/rpcs3/Emu/SysCalls/Callback.h +++ b/rpcs3/Emu/SysCalls/Callback.h @@ -15,6 +15,7 @@ public: u64 a2; u64 a3; u64 a4; + u64 a5; u32 GetSlot() const; u64 GetAddr() const; @@ -23,7 +24,7 @@ public: bool HasData() const; Callback(u32 slot = 0, u64 addr = 0); - void Handle(u64 a1 = 0, u64 a2 = 0, u64 a3 = 0, u64 a4 = 0); + void Handle(u64 a1 = 0, u64 a2 = 0, u64 a3 = 0, u64 a4 = 0, u64 a5 = 0); u64 Branch(bool wait); void SetName(const std::string& name); From dbfd07f11e87668963dd053369556ec2094edf7f Mon Sep 17 00:00:00 2001 From: David Kiarie Date: Tue, 15 Jul 2014 18:04:37 +0300 Subject: [PATCH 187/499] fix broken commit (2267c84d6a6ff071fea59bebd68135523d979e78) --- rpcs3/Gui/VFSManager.cpp | 10 +++++----- rpcs3/Gui/VFSManager.h | 4 ++-- rpcs3/Gui/VHDDManager.cpp | 4 ++-- rpcs3/Gui/VHDDManager.h | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/rpcs3/Gui/VFSManager.cpp b/rpcs3/Gui/VFSManager.cpp index d1ba3365e4..af4fe3d1ed 100644 --- a/rpcs3/Gui/VFSManager.cpp +++ b/rpcs3/Gui/VFSManager.cpp @@ -139,10 +139,10 @@ VFSManagerDialog::VFSManagerDialog(wxWindow* parent) m_list->Bind(wxEVT_LIST_ITEM_ACTIVATED, &VFSManagerDialog::OnEntryConfig, this); m_list->Bind(wxEVT_RIGHT_DOWN, &VFSManagerDialog::OnRightClick, this); - Bind(wxEVT_MENU, &VFSManagerDialog::OnAdd, this, id_add); - Bind(wxEVT_MENU, &VFSManagerDialog::OnRemove, this, id_remove); - Bind(wxEVT_MENU, &VFSManagerDialog::OnEntryConfig, this, id_config); - Bind(wxEVT_CLOSE_WINDOW, &VFSManagerDialog::OnClose, this, wxID_OK); + Bind(wxEVT_MENU, &VFSManagerDialog::OnAdd, this, id_add); + Bind(wxEVT_MENU, &VFSManagerDialog::OnRemove, this, id_remove); + Bind(wxEVT_MENU, &VFSManagerDialog::OnEntryConfig, this, id_config); + Bind(wxEVT_BUTTON, &VFSManagerDialog::OnClose, this, wxID_OK); LoadEntries(); UpdateList(); @@ -214,7 +214,7 @@ void VFSManagerDialog::OnRemove(wxCommandEvent& event) UpdateList(); } -void VFSManagerDialog::OnClose(wxCloseEvent& event) +void VFSManagerDialog::OnClose(wxCommandEvent& event) { SaveEntries(); event.Skip(); diff --git a/rpcs3/Gui/VFSManager.h b/rpcs3/Gui/VFSManager.h index 309f9882e1..7f3e14d445 100644 --- a/rpcs3/Gui/VFSManager.h +++ b/rpcs3/Gui/VFSManager.h @@ -33,7 +33,7 @@ public: void OnAdd(wxCommandEvent& event); void OnRemove(wxCommandEvent& event); - void OnClose(wxCloseEvent& event); + void OnClose(wxCommandEvent& event); void LoadEntries(); void SaveEntries(); -}; \ No newline at end of file +}; diff --git a/rpcs3/Gui/VHDDManager.cpp b/rpcs3/Gui/VHDDManager.cpp index 27b4327ec1..7aa6ceb950 100644 --- a/rpcs3/Gui/VHDDManager.cpp +++ b/rpcs3/Gui/VHDDManager.cpp @@ -406,7 +406,7 @@ VHDDManagerDialog::VHDDManagerDialog(wxWindow* parent) Bind(wxEVT_MENU, &VHDDManagerDialog::OnOpen, this, id_open); Bind(wxEVT_MENU, &VHDDManagerDialog::OnRemove, this, id_remove); Bind(wxEVT_MENU, &VHDDManagerDialog::OnCreateHDD, this, id_create_hdd); - Bind(wxEVT_CLOSE_WINDOW, &VHDDManagerDialog::OnClose, this, wxID_OK); + Bind(wxEVT_BUTTON, &VHDDManagerDialog::OnClose, this, wxID_OK); LoadPaths(); UpdateList(); } @@ -521,7 +521,7 @@ void VHDDManagerDialog::OnCreateHDD(wxCommandEvent& event) } } -void VHDDManagerDialog::OnClose(wxCloseEvent& event) +void VHDDManagerDialog::OnClose(wxCommandEvent& event) { SavePaths(); event.Skip(); diff --git a/rpcs3/Gui/VHDDManager.h b/rpcs3/Gui/VHDDManager.h index aec9f55fc4..044b1bd341 100644 --- a/rpcs3/Gui/VHDDManager.h +++ b/rpcs3/Gui/VHDDManager.h @@ -82,7 +82,7 @@ public: void OnRemove(wxCommandEvent& event); void OnCreateHDD(wxCommandEvent& event); - void OnClose(wxCloseEvent& event); + void OnClose(wxCommandEvent& event); void LoadPaths(); void SavePaths(); }; From 78aef474a5a802b328ba82ba200cd234bab59b00 Mon Sep 17 00:00:00 2001 From: David Kiarie Date: Tue, 15 Jul 2014 18:29:48 +0300 Subject: [PATCH 188/499] rename some functions as per their function --- rpcs3/Gui/VFSManager.cpp | 4 ++-- rpcs3/Gui/VFSManager.h | 2 +- rpcs3/Gui/VHDDManager.cpp | 4 ++-- rpcs3/Gui/VHDDManager.h | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rpcs3/Gui/VFSManager.cpp b/rpcs3/Gui/VFSManager.cpp index af4fe3d1ed..9df763384f 100644 --- a/rpcs3/Gui/VFSManager.cpp +++ b/rpcs3/Gui/VFSManager.cpp @@ -142,7 +142,7 @@ VFSManagerDialog::VFSManagerDialog(wxWindow* parent) Bind(wxEVT_MENU, &VFSManagerDialog::OnAdd, this, id_add); Bind(wxEVT_MENU, &VFSManagerDialog::OnRemove, this, id_remove); Bind(wxEVT_MENU, &VFSManagerDialog::OnEntryConfig, this, id_config); - Bind(wxEVT_BUTTON, &VFSManagerDialog::OnClose, this, wxID_OK); + Bind(wxEVT_BUTTON, &VFSManagerDialog::OnOK, this, wxID_OK); LoadEntries(); UpdateList(); @@ -214,7 +214,7 @@ void VFSManagerDialog::OnRemove(wxCommandEvent& event) UpdateList(); } -void VFSManagerDialog::OnClose(wxCommandEvent& event) +void VFSManagerDialog::OnOK(wxCommandEvent& event) { SaveEntries(); event.Skip(); diff --git a/rpcs3/Gui/VFSManager.h b/rpcs3/Gui/VFSManager.h index 7f3e14d445..63260b3e6c 100644 --- a/rpcs3/Gui/VFSManager.h +++ b/rpcs3/Gui/VFSManager.h @@ -33,7 +33,7 @@ public: void OnAdd(wxCommandEvent& event); void OnRemove(wxCommandEvent& event); - void OnClose(wxCommandEvent& event); + void OnOK(wxCommandEvent& event); void LoadEntries(); void SaveEntries(); }; diff --git a/rpcs3/Gui/VHDDManager.cpp b/rpcs3/Gui/VHDDManager.cpp index 7aa6ceb950..5808848259 100644 --- a/rpcs3/Gui/VHDDManager.cpp +++ b/rpcs3/Gui/VHDDManager.cpp @@ -406,7 +406,7 @@ VHDDManagerDialog::VHDDManagerDialog(wxWindow* parent) Bind(wxEVT_MENU, &VHDDManagerDialog::OnOpen, this, id_open); Bind(wxEVT_MENU, &VHDDManagerDialog::OnRemove, this, id_remove); Bind(wxEVT_MENU, &VHDDManagerDialog::OnCreateHDD, this, id_create_hdd); - Bind(wxEVT_BUTTON, &VHDDManagerDialog::OnClose, this, wxID_OK); + Bind(wxEVT_BUTTON, &VHDDManagerDialog::OnOk, this, wxID_OK); LoadPaths(); UpdateList(); } @@ -521,7 +521,7 @@ void VHDDManagerDialog::OnCreateHDD(wxCommandEvent& event) } } -void VHDDManagerDialog::OnClose(wxCommandEvent& event) +void VHDDManagerDialog::OnOk(wxCommandEvent& event) { SavePaths(); event.Skip(); diff --git a/rpcs3/Gui/VHDDManager.h b/rpcs3/Gui/VHDDManager.h index 044b1bd341..b3b8ad9a49 100644 --- a/rpcs3/Gui/VHDDManager.h +++ b/rpcs3/Gui/VHDDManager.h @@ -82,7 +82,7 @@ public: void OnRemove(wxCommandEvent& event); void OnCreateHDD(wxCommandEvent& event); - void OnClose(wxCommandEvent& event); + void OnOk(wxCommandEvent& event); void LoadPaths(); void SavePaths(); }; From 8e19af530b7424d073540aa40766e9117a15e01d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 16:03:54 +0400 Subject: [PATCH 189/499] .gitignore fix --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 43afefc806..84200d4e1b 100644 --- a/.gitignore +++ b/.gitignore @@ -61,7 +61,7 @@ rpcs3/git-version.h !/bin/dev_hdd0/game/TEST12345/ # Ignore other system generated files -bin/dev_hdd0/log.txt +bin/dev_hdd0/*.txt x64/Debug/emucore.lib x64/Release/emucore.lib From b487dcee277681e0765f7bb48d5407e554373fc7 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 16:06:58 +0400 Subject: [PATCH 190/499] RawSPU initialization fix --- rpcs3/Emu/CPU/CPUThreadManager.cpp | 26 ++++++++++++++++++++------ rpcs3/Emu/CPU/CPUThreadManager.h | 1 - rpcs3/Emu/Cell/RawSPUThread.cpp | 7 +++---- rpcs3/Emu/Cell/RawSPUThread.h | 2 +- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index 01ba798add..d162bc493b 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -11,7 +11,6 @@ #include "Emu/ARMv7/ARMv7Thread.h" CPUThreadManager::CPUThreadManager() - : m_raw_spu_num(0) { } @@ -22,7 +21,6 @@ CPUThreadManager::~CPUThreadManager() void CPUThreadManager::Close() { - m_raw_spu_num = 0; while(m_threads.size()) RemoveThread(m_threads[0]->GetId()); } @@ -34,10 +32,26 @@ CPUThread& CPUThreadManager::AddThread(CPUThreadType type) switch(type) { - case CPU_THREAD_PPU: new_thread = new PPUThread(); break; - case CPU_THREAD_SPU: new_thread = new SPUThread(); break; - case CPU_THREAD_RAW_SPU: new_thread = new RawSPUThread(m_raw_spu_num++); break; - case CPU_THREAD_ARMv7: new_thread = new ARMv7Thread(); break; + case CPU_THREAD_PPU: + { + new_thread = new PPUThread(); + break; + } + case CPU_THREAD_SPU: + { + new_thread = new SPUThread(); + break; + } + case CPU_THREAD_RAW_SPU: + { + new_thread = new RawSPUThread(); + break; + } + case CPU_THREAD_ARMv7: + { + new_thread = new ARMv7Thread(); + break; + } default: assert(0); } diff --git a/rpcs3/Emu/CPU/CPUThreadManager.h b/rpcs3/Emu/CPU/CPUThreadManager.h index ba71cb78b9..ad312108d7 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.h +++ b/rpcs3/Emu/CPU/CPUThreadManager.h @@ -7,7 +7,6 @@ class CPUThreadManager { std::vector m_threads; std::mutex m_mtx_thread; - u32 m_raw_spu_num; public: CPUThreadManager(); diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 4f81ccf513..7255e31952 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -7,12 +7,11 @@ #include "Emu/Cell/RawSPUThread.h" -RawSPUThread::RawSPUThread(u32 index, CPUThreadType type) +RawSPUThread::RawSPUThread(CPUThreadType type) : SPUThread(type) , MemoryBlock() - , m_index(index) { - Memory.InitRawSPU(SetRange(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * index, RAW_SPU_PROB_OFFSET), m_index); + m_index = Memory.InitRawSPU(this); Reset(); } @@ -344,7 +343,7 @@ void RawSPUThread::Task() { PC = SPU.NPC.GetValue(); - CPUThread::Task(); + SPUThread::Task(); SPU.NPC.SetValue(PC); } diff --git a/rpcs3/Emu/Cell/RawSPUThread.h b/rpcs3/Emu/Cell/RawSPUThread.h index d8765a3b25..c7b3479f98 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.h +++ b/rpcs3/Emu/Cell/RawSPUThread.h @@ -19,7 +19,7 @@ class RawSPUThread u32 m_index; public: - RawSPUThread(u32 index, CPUThreadType type = CPU_THREAD_RAW_SPU); + RawSPUThread(CPUThreadType type = CPU_THREAD_RAW_SPU); virtual ~RawSPUThread(); virtual bool Read32(const u64 addr, u32* value) override; From e1a9f08a91f55aedf836ee6a6e0b6c6f08d91ee4 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 16:07:38 +0400 Subject: [PATCH 191/499] sys_raw_spu_destroy implemented --- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 72 +++++++++++++----------------- 1 file changed, 31 insertions(+), 41 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 4a88fb9c48..68303a28a4 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -18,46 +18,12 @@ u32 LoadSpuImage(vfsStream& stream, u32& spu_ep) { ELFLoader l(stream); l.LoadInfo(); - const u32 alloc_size = 256 * 1024 /*0x1000000 - stream.GetSize()*/; + const u32 alloc_size = 256 * 1024; u32 spu_offset = Memory.MainMem.AllocAlign(alloc_size); l.LoadData(spu_offset); spu_ep = l.GetEntry(); return spu_offset; } -/*u64 g_last_spu_offset = 0; -static const u64 g_spu_alloc_size = 0x1000000; - -u32 LoadSpuImage(vfsStream& stream, u64 address) -{ - ELFLoader l(stream); - l.LoadInfo(); - l.LoadData(address); - - return address + l.GetEntry(); -} - -u32 LoadSpuImage(vfsStream& stream) -{ - g_last_spu_offset = Memory.MainMem.Alloc(g_spu_alloc_size); - return LoadSpuImage(stream, g_last_spu_offset); -}*/ - -/*u32 _max_usable_spu = 0; -u32 _max_raw_spu = 0; - -s32 sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu) -{ - sc_spu.Log("sys_spu_initialize(max_usable_spu=%d, max_raw_spu=%d)", max_usable_spu, max_raw_spu); - _max_usable_spu = max_usable_spu; - _max_raw_spu = max_raw_spu; - return CELL_OK; -} - -s32 sys_raw_spu_create(u32 id_addr, u32 attr_addr) -{ - Memory.Write32(id_addr, Emu.GetIdManager().GetNewID("raw_spu")); - return CELL_OK; -}*/ //156 s32 sys_spu_image_open(mem_ptr_t img, u32 path_addr) @@ -349,13 +315,23 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) return CELL_ESRCH; } + if (cause.GetAddr() && !cause.IsGood()) + { + return CELL_EFAULT; + } + + if (status.GetAddr() && !status.IsGood()) + { + return CELL_EFAULT; + } + if (group_info->lock.exchange(1)) // acquire lock { return CELL_EBUSY; } - cause = SYS_SPU_THREAD_GROUP_JOIN_ALL_THREADS_EXIT; - status = 0; //unspecified because of ALL_THREADS_EXIT + if (cause.GetAddr()) cause = SYS_SPU_THREAD_GROUP_JOIN_ALL_THREADS_EXIT; + if (status.GetAddr()) status = 0; //unspecified because of ALL_THREADS_EXIT for (u32 i = 0; i < group_info->list.size(); i++) { @@ -796,24 +772,38 @@ s32 sys_raw_spu_create(mem32_t id, u32 attr_addr) { sc_spu.Warning("sys_raw_spu_create(id_addr=0x%x, attr_addr=0x%x)", id.GetAddr(), attr_addr); - //Emu.GetIdManager().GetNewID("sys_raw_spu", new u32(attr_addr)); CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_RAW_SPU); + if (((RawSPUThread&)new_thread).GetIndex() >= 5) + { + Emu.GetCPU().RemoveThread(new_thread.GetId()); + return CELL_EAGAIN; + } + id = ((RawSPUThread&)new_thread).GetIndex(); new_thread.Run(); - return CELL_OK; } s32 sys_raw_spu_destroy(u32 id) { - sc_spu.Error("sys_raw_spu_destroy(id=%d)", id); + sc_spu.Warning("sys_raw_spu_destroy(id=%d)", id); + RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); + + if (!t) + { + return CELL_ESRCH; + } + + // TODO: check if busy + + Emu.GetCPU().RemoveThread(t->GetId()); return CELL_OK; } s32 sys_raw_spu_create_interrupt_tag(u32 id, u32 class_id, u32 hwthread, mem32_t intrtag) { - sc_spu.Error("sys_raw_spu_create_interrupt_tag(id=%d, class_id=%d, hwthread=0x%x, intrtag_addr=0x%x)", id, class_id, hwthread, intrtag.GetAddr()); + sc_spu.Warning("sys_raw_spu_create_interrupt_tag(id=%d, class_id=%d, hwthread=0x%x, intrtag_addr=0x%x)", id, class_id, hwthread, intrtag.GetAddr()); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); From d94ce7094e857f11baac31f70addb5f9041771ea Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 16:09:20 +0400 Subject: [PATCH 192/499] Rounding mode set --- rpcs3/Emu/Cell/SPUThread.cpp | 15 +++++++++++++++ rpcs3/Emu/Cell/SPUThread.h | 1 + 2 files changed, 16 insertions(+) diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index a8355bc296..9c020cb219 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -10,6 +10,8 @@ #include "Emu/Cell/SPUDisAsm.h" #include "Emu/Cell/SPURecompiler.h" +#include + SPUThread& GetCurrentSPUThread() { PPCThread* thread = GetCurrentPPCThread(); @@ -35,6 +37,19 @@ SPUThread::~SPUThread() { } +void SPUThread::Task() +{ + const int round = std::fegetround(); + std::fesetround(FE_TOWARDZERO); + + CPUThread::Task(); + if (std::fegetround() != FE_TOWARDZERO) + { + LOG_ERROR(Log::SPU, "Rounding mode has changed(%d)", std::fegetround()); + } + std::fesetround(round); +} + void SPUThread::DoReset() { PPCThread::DoReset(); diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index a56751bbe8..5f38235859 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -1444,6 +1444,7 @@ public: public: virtual void InitRegs(); virtual u64 GetFreeStackSize() const; + virtual void Task(); protected: virtual void DoReset(); From 3d9c76a80d7fe0d74932b3afb20452dccf380fc0 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 16:09:43 +0400 Subject: [PATCH 193/499] RawSPU initialization fix --- rpcs3/Emu/Memory/Memory.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 6430e27d80..88cc1dea6d 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -214,12 +214,22 @@ public: } } - void InitRawSPU(MemoryBlock* raw_spu, const u32 num) + u32 InitRawSPU(MemoryBlock* raw_spu) { std::lock_guard lock(m_mutex); - MemoryBlocks.push_back(raw_spu); - if (num < sizeof(RawSPUMem) / sizeof(RawSPUMem[0])) RawSPUMem[num] = raw_spu; + u32 index; + for (index = 0; index < sizeof(RawSPUMem) / sizeof(RawSPUMem[0]); index++) + { + if (!RawSPUMem[index]) + { + RawSPUMem[index] = raw_spu; + break; + } + } + + MemoryBlocks.push_back(raw_spu->SetRange(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * index, RAW_SPU_PROB_OFFSET)); + return index; } void CloseRawSPU(MemoryBlock* raw_spu, const u32 num) From 3d0983e7d021ccc24ea2f462c9f2cc1bfcecf225 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 16:13:11 +0400 Subject: [PATCH 194/499] SPU Interpreter fix (these bugs weren't in SPURecompiler) --- rpcs3/Emu/Cell/SPUInterpreter.h | 156 +++++++++++++++++++++----------- 1 file changed, 102 insertions(+), 54 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index 32fa60e91c..b340677966 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -503,29 +503,50 @@ private: void ROTQBI(u32 rt, u32 ra, u32 rb) { const int t = CPU.GPR[rb]._u32[3] & 0x7; - const SPU_GPR_hdr temp = CPU.GPR[ra]; - CPU.GPR[rt]._u32[0] = (temp._u32[0] << t) | (temp._u32[3] >> (32 - t)); - CPU.GPR[rt]._u32[1] = (temp._u32[1] << t) | (temp._u32[0] >> (32 - t)); - CPU.GPR[rt]._u32[2] = (temp._u32[2] << t) | (temp._u32[1] >> (32 - t)); - CPU.GPR[rt]._u32[3] = (temp._u32[3] << t) | (temp._u32[2] >> (32 - t)); + if (t) // not an optimization, it fixes shifts + { + const SPU_GPR_hdr temp = CPU.GPR[ra]; + CPU.GPR[rt]._u32[0] = (temp._u32[0] << t) | (temp._u32[3] >> (32 - t)); + CPU.GPR[rt]._u32[1] = (temp._u32[1] << t) | (temp._u32[0] >> (32 - t)); + CPU.GPR[rt]._u32[2] = (temp._u32[2] << t) | (temp._u32[1] >> (32 - t)); + CPU.GPR[rt]._u32[3] = (temp._u32[3] << t) | (temp._u32[2] >> (32 - t)); + } + else + { + CPU.GPR[rt] = CPU.GPR[ra]; + } } void ROTQMBI(u32 rt, u32 ra, u32 rb) { const int t = (0 - CPU.GPR[rb]._u32[3]) & 0x7; - const SPU_GPR_hdr temp = CPU.GPR[ra]; - CPU.GPR[rt]._u32[0] = (temp._u32[0] >> t) | (temp._u32[1] << (32 - t)); - CPU.GPR[rt]._u32[1] = (temp._u32[1] >> t) | (temp._u32[2] << (32 - t)); - CPU.GPR[rt]._u32[2] = (temp._u32[2] >> t) | (temp._u32[3] << (32 - t)); - CPU.GPR[rt]._u32[3] = (temp._u32[3] >> t); + if (t) // not an optimization, it fixes shifts + { + const SPU_GPR_hdr temp = CPU.GPR[ra]; + CPU.GPR[rt]._u32[0] = (temp._u32[0] >> t) | (temp._u32[1] << (32 - t)); + CPU.GPR[rt]._u32[1] = (temp._u32[1] >> t) | (temp._u32[2] << (32 - t)); + CPU.GPR[rt]._u32[2] = (temp._u32[2] >> t) | (temp._u32[3] << (32 - t)); + CPU.GPR[rt]._u32[3] = (temp._u32[3] >> t); + } + else + { + CPU.GPR[rt] = CPU.GPR[ra]; + } } void SHLQBI(u32 rt, u32 ra, u32 rb) { const int t = CPU.GPR[rb]._u32[3] & 0x7; - const SPU_GPR_hdr temp = CPU.GPR[ra]; - CPU.GPR[rt]._u32[0] = (temp._u32[0] << t); - CPU.GPR[rt]._u32[1] = (temp._u32[1] << t) | (temp._u32[0] >> (32 - t)); - CPU.GPR[rt]._u32[2] = (temp._u32[2] << t) | (temp._u32[1] >> (32 - t)); - CPU.GPR[rt]._u32[3] = (temp._u32[3] << t) | (temp._u32[2] >> (32 - t)); + if (t) // not an optimization, it fixes shifts + { + const SPU_GPR_hdr temp = CPU.GPR[ra]; + CPU.GPR[rt]._u32[0] = (temp._u32[0] << t); + CPU.GPR[rt]._u32[1] = (temp._u32[1] << t) | (temp._u32[0] >> (32 - t)); + CPU.GPR[rt]._u32[2] = (temp._u32[2] << t) | (temp._u32[1] >> (32 - t)); + CPU.GPR[rt]._u32[3] = (temp._u32[3] << t) | (temp._u32[2] >> (32 - t)); + } + else + { + CPU.GPR[rt] = CPU.GPR[ra]; + } } void ROTQBY(u32 rt, u32 ra, u32 rb) { @@ -591,29 +612,50 @@ private: void ROTQBII(u32 rt, u32 ra, s32 i7) { const int s = i7 & 0x7; - const SPU_GPR_hdr temp = CPU.GPR[ra]; - CPU.GPR[rt]._u32[0] = (temp._u32[0] << s) | (temp._u32[3] >> (32 - s)); - CPU.GPR[rt]._u32[1] = (temp._u32[1] << s) | (temp._u32[0] >> (32 - s)); - CPU.GPR[rt]._u32[2] = (temp._u32[2] << s) | (temp._u32[1] >> (32 - s)); - CPU.GPR[rt]._u32[3] = (temp._u32[3] << s) | (temp._u32[2] >> (32 - s)); + if (s) // not an optimization, it fixes shifts + { + const SPU_GPR_hdr temp = CPU.GPR[ra]; + CPU.GPR[rt]._u32[0] = (temp._u32[0] << s) | (temp._u32[3] >> (32 - s)); + CPU.GPR[rt]._u32[1] = (temp._u32[1] << s) | (temp._u32[0] >> (32 - s)); + CPU.GPR[rt]._u32[2] = (temp._u32[2] << s) | (temp._u32[1] >> (32 - s)); + CPU.GPR[rt]._u32[3] = (temp._u32[3] << s) | (temp._u32[2] >> (32 - s)); + } + else + { + CPU.GPR[rt] = CPU.GPR[ra]; + } } void ROTQMBII(u32 rt, u32 ra, s32 i7) { const int s = (0 - i7) & 0x7; - const SPU_GPR_hdr temp = CPU.GPR[ra]; - CPU.GPR[rt]._u32[0] = (temp._u32[0] >> s) | (temp._u32[1] << (32 - s)); - CPU.GPR[rt]._u32[1] = (temp._u32[1] >> s) | (temp._u32[2] << (32 - s)); - CPU.GPR[rt]._u32[2] = (temp._u32[2] >> s) | (temp._u32[3] << (32 - s)); - CPU.GPR[rt]._u32[3] = (temp._u32[3] >> s); + if (s) // not an optimization, it fixes shifts + { + const SPU_GPR_hdr temp = CPU.GPR[ra]; + CPU.GPR[rt]._u32[0] = (temp._u32[0] >> s) | (temp._u32[1] << (32 - s)); + CPU.GPR[rt]._u32[1] = (temp._u32[1] >> s) | (temp._u32[2] << (32 - s)); + CPU.GPR[rt]._u32[2] = (temp._u32[2] >> s) | (temp._u32[3] << (32 - s)); + CPU.GPR[rt]._u32[3] = (temp._u32[3] >> s); + } + else + { + CPU.GPR[rt] = CPU.GPR[ra]; + } } void SHLQBII(u32 rt, u32 ra, s32 i7) { const int s = i7 & 0x7; - const SPU_GPR_hdr temp = CPU.GPR[ra]; - CPU.GPR[rt]._u32[0] = (temp._u32[0] << s); - CPU.GPR[rt]._u32[1] = (temp._u32[1] << s) | (temp._u32[0] >> (32 - s)); - CPU.GPR[rt]._u32[2] = (temp._u32[2] << s) | (temp._u32[1] >> (32 - s)); - CPU.GPR[rt]._u32[3] = (temp._u32[3] << s) | (temp._u32[2] >> (32 - s)); + if (s) // not an optimization, it fixes shifts + { + const SPU_GPR_hdr temp = CPU.GPR[ra]; + CPU.GPR[rt]._u32[0] = (temp._u32[0] << s); + CPU.GPR[rt]._u32[1] = (temp._u32[1] << s) | (temp._u32[0] >> (32 - s)); + CPU.GPR[rt]._u32[2] = (temp._u32[2] << s) | (temp._u32[1] >> (32 - s)); + CPU.GPR[rt]._u32[3] = (temp._u32[3] << s) | (temp._u32[2] >> (32 - s)); + } + else + { + CPU.GPR[rt] = CPU.GPR[ra]; + } } void ROTQBYI(u32 rt, u32 ra, s32 i7) { @@ -747,24 +789,27 @@ private: } void FA(u32 rt, u32 ra, u32 rb) { - CPU.GPR[rt]._f[0] = CPU.GPR[ra]._f[0] + CPU.GPR[rb]._f[0]; - CPU.GPR[rt]._f[1] = CPU.GPR[ra]._f[1] + CPU.GPR[rb]._f[1]; - CPU.GPR[rt]._f[2] = CPU.GPR[ra]._f[2] + CPU.GPR[rb]._f[2]; - CPU.GPR[rt]._f[3] = CPU.GPR[ra]._f[3] + CPU.GPR[rb]._f[3]; + for (int w = 0; w < 4; w++) + { + CPU.GPR[rt]._f[w] = CPU.GPR[ra]._f[w] + CPU.GPR[rb]._f[w]; + //if (CPU.GPR[rt]._f[w] == -0.0f) CPU.GPR[rt]._f[w] = 0.0f; + } } void FS(u32 rt, u32 ra, u32 rb) { - CPU.GPR[rt]._f[0] = CPU.GPR[ra]._f[0] - CPU.GPR[rb]._f[0]; - CPU.GPR[rt]._f[1] = CPU.GPR[ra]._f[1] - CPU.GPR[rb]._f[1]; - CPU.GPR[rt]._f[2] = CPU.GPR[ra]._f[2] - CPU.GPR[rb]._f[2]; - CPU.GPR[rt]._f[3] = CPU.GPR[ra]._f[3] - CPU.GPR[rb]._f[3]; + for (int w = 0; w < 4; w++) + { + CPU.GPR[rt]._f[w] = CPU.GPR[ra]._f[w] - CPU.GPR[rb]._f[w]; + //if (CPU.GPR[rt]._f[w] == -0.0f) CPU.GPR[rt]._f[w] = 0.0f; + } } void FM(u32 rt, u32 ra, u32 rb) { - CPU.GPR[rt]._f[0] = CPU.GPR[ra]._f[0] * CPU.GPR[rb]._f[0]; - CPU.GPR[rt]._f[1] = CPU.GPR[ra]._f[1] * CPU.GPR[rb]._f[1]; - CPU.GPR[rt]._f[2] = CPU.GPR[ra]._f[2] * CPU.GPR[rb]._f[2]; - CPU.GPR[rt]._f[3] = CPU.GPR[ra]._f[3] * CPU.GPR[rb]._f[3]; + for (int w = 0; w < 4; w++) + { + CPU.GPR[rt]._f[w] = CPU.GPR[ra]._f[w] * CPU.GPR[rb]._f[w]; + //if (CPU.GPR[rt]._f[w] == -0.0f) CPU.GPR[rt]._f[w] = 0.0f; + } } void CLGTH(u32 rt, u32 ra, u32 rb) { @@ -1513,24 +1558,27 @@ private: } void FNMS(u32 rt, u32 ra, u32 rb, u32 rc) { - CPU.GPR[rt]._f[0] = CPU.GPR[rc]._f[0] - CPU.GPR[ra]._f[0] * CPU.GPR[rb]._f[0]; - CPU.GPR[rt]._f[1] = CPU.GPR[rc]._f[1] - CPU.GPR[ra]._f[1] * CPU.GPR[rb]._f[1]; - CPU.GPR[rt]._f[2] = CPU.GPR[rc]._f[2] - CPU.GPR[ra]._f[2] * CPU.GPR[rb]._f[2]; - CPU.GPR[rt]._f[3] = CPU.GPR[rc]._f[3] - CPU.GPR[ra]._f[3] * CPU.GPR[rb]._f[3]; + for (int w = 0; w < 4; w++) + { + CPU.GPR[rt]._f[w] = CPU.GPR[rc]._f[w] - CPU.GPR[ra]._f[w] * CPU.GPR[rb]._f[w]; + //if (CPU.GPR[rt]._f[w] == -0.0f) CPU.GPR[rt]._f[w] = 0.0f; + } } void FMA(u32 rt, u32 ra, u32 rb, u32 rc) { - CPU.GPR[rt]._f[0] = CPU.GPR[ra]._f[0] * CPU.GPR[rb]._f[0] + CPU.GPR[rc]._f[0]; - CPU.GPR[rt]._f[1] = CPU.GPR[ra]._f[1] * CPU.GPR[rb]._f[1] + CPU.GPR[rc]._f[1]; - CPU.GPR[rt]._f[2] = CPU.GPR[ra]._f[2] * CPU.GPR[rb]._f[2] + CPU.GPR[rc]._f[2]; - CPU.GPR[rt]._f[3] = CPU.GPR[ra]._f[3] * CPU.GPR[rb]._f[3] + CPU.GPR[rc]._f[3]; + for (int w = 0; w < 4; w++) + { + CPU.GPR[rt]._f[w] = CPU.GPR[rc]._f[w] + CPU.GPR[ra]._f[w] * CPU.GPR[rb]._f[w]; + //if (CPU.GPR[rt]._f[w] == -0.0f) CPU.GPR[rt]._f[w] = 0.0f; + } } void FMS(u32 rt, u32 ra, u32 rb, u32 rc) { - CPU.GPR[rt]._f[0] = CPU.GPR[ra]._f[0] * CPU.GPR[rb]._f[0] - CPU.GPR[rc]._f[0]; - CPU.GPR[rt]._f[1] = CPU.GPR[ra]._f[1] * CPU.GPR[rb]._f[1] - CPU.GPR[rc]._f[1]; - CPU.GPR[rt]._f[2] = CPU.GPR[ra]._f[2] * CPU.GPR[rb]._f[2] - CPU.GPR[rc]._f[2]; - CPU.GPR[rt]._f[3] = CPU.GPR[ra]._f[3] * CPU.GPR[rb]._f[3] - CPU.GPR[rc]._f[3]; + for (int w = 0; w < 4; w++) + { + CPU.GPR[rt]._f[w] = CPU.GPR[ra]._f[w] * CPU.GPR[rb]._f[w] - CPU.GPR[rc]._f[w]; + //if (CPU.GPR[rt]._f[w] == -0.0f) CPU.GPR[rt]._f[w] = 0.0f; + } } void UNK(u32 code, u32 opcode, u32 gcode) From 694a2b774ed3eb415df26bf92d46b5affef84296 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 16:15:20 +0400 Subject: [PATCH 195/499] SPU Recompiler fix --- rpcs3/Emu/Cell/SPURecompiler.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 7b019ac5ca..0851c70a3e 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -1485,8 +1485,8 @@ private: c.movdqa(vr.get(), XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); XmmFinalize(vr, rt); XmmInvalidate(rt); - c.mov(dword_ptr(*cpu_var, *addr, 0, offsetof(SPUThread, GPR[rt]._u32[0])), 0x00010203); - c.mov(dword_ptr(*cpu_var, *addr, 0, offsetof(SPUThread, GPR[rt]._u32[1])), 0x04050607); + c.mov(dword_ptr(*cpu_var, *addr, 0, offsetof(SPUThread, GPR[rt]._u32[0])), 0x04050607); + c.mov(dword_ptr(*cpu_var, *addr, 0, offsetof(SPUThread, GPR[rt]._u32[1])), 0x00010203); LOG_OPCODE(); } void ROTQBI(u32 rt, u32 ra, u32 rb) @@ -1628,8 +1628,8 @@ private: c.movdqa(vr.get(), XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); XmmFinalize(vr, rt); XmmInvalidate(rt); - c.mov(dword_ptr(*cpu_var, *addr, 0, offsetof(SPUThread, GPR[rt]._u32[0])), 0x00010203); - c.mov(dword_ptr(*cpu_var, *addr, 0, offsetof(SPUThread, GPR[rt]._u32[1])), 0x04050607); + c.mov(dword_ptr(*cpu_var, *addr, 0, offsetof(SPUThread, GPR[rt]._u32[0])), 0x04050607); + c.mov(dword_ptr(*cpu_var, *addr, 0, offsetof(SPUThread, GPR[rt]._u32[1])), 0x00010203); LOG_OPCODE(); } void ROTQBII(u32 rt, u32 ra, s32 i7) From ecbc9d1b080494342f5682937e93881f1590b49e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 20:10:18 +0400 Subject: [PATCH 196/499] RawSPU cleanup --- rpcs3/Emu/Cell/RawSPUThread.cpp | 183 ++++---------------------------- rpcs3/Emu/Cell/SPUThread.cpp | 6 +- rpcs3/Emu/Cell/SPUThread.h | 49 ++++----- rpcs3/Emu/Memory/Memory.h | 10 +- 4 files changed, 54 insertions(+), 194 deletions(-) diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 7255e31952..2337f6d0e1 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -22,75 +22,20 @@ RawSPUThread::~RawSPUThread() bool RawSPUThread::Read32(const u64 addr, u32* value) { - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Read32(addr, value); - } + const u64 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - const u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - - switch(offset) + switch (offset) { - case MFC_LSA_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_LSA)", m_index); - *value = MFC2.LSA.GetValue(); - break; - } - - case MFC_EAH_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAH)", m_index); - *value = MFC2.EAH.GetValue(); - break; - } - - case MFC_EAL_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_EAL)", m_index); - *value = MFC2.EAL.GetValue(); - break; - } - - case MFC_Size_Tag_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_Size_Tag)", m_index); - *value = MFC2.Size_Tag.GetValue(); - break; - } - case MFC_CMDStatus_offs: { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(MFC_CMDStatus)", m_index); *value = MFC2.CMDStatus.GetValue(); break; } case MFC_QStatus_offs: { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(MFC_QStatus)", m_index); - *value = MFC2.QStatus.GetValue(); - break; - } - - case Prxy_QueryType_offs: - { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryType)", m_index); - *value = Prxy.QueryType.GetValue(); - break; - } - - case Prxy_QueryMask_offs: - { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_QueryMask)", m_index); - *value = Prxy.QueryMask.GetValue(); - break; - } - - case Prxy_TagStatus_offs: - { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(Prxy_TagStatus)", m_index); - *value = Prxy.TagStatus.GetValue(); + // TagStatus is not used: mask is written directly + *value = MFC2.QueryMask.GetValue(); break; } @@ -100,62 +45,23 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) SPU.Out_MBox.PopUncond(*value); break; } - - case SPU_In_MBox_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_In_MBox)", m_index); - while (!SPU.In_MBox.Pop(*value) && !Emu.IsStopped()) - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - break; - } case SPU_MBox_Status_offs: { - //LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Read32(SPU_MBox_Status)", m_index); - //SPU.MBox_Status.SetValue(SPU.Out_MBox.GetCount() ? SPU.MBox_Status.GetValue() | 1 : SPU.MBox_Status.GetValue() & ~1); - SPU.MBox_Status.SetValue((SPU.Out_MBox.GetCount() & 0xff) | (SPU.In_MBox.GetFreeCount() << 8)); - *value = SPU.MBox_Status.GetValue(); + *value = (SPU.Out_MBox.GetCount() & 0xff) | (SPU.In_MBox.GetFreeCount() << 8); break; } - case SPU_RunCntl_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RunCntl)", m_index); - *value = (u32)IsRunning(); - break; - } - case SPU_Status_offs: { *value = SPU.Status.GetValue(); break; } - - case SPU_NPC_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_NPC)", m_index); - *value = SPU.NPC.GetValue(); - break; - } - - case SPU_RdSigNotify1_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify1)", m_index); - *value = SPU.SNR[0].GetValue(); - break; - } - - case SPU_RdSigNotify2_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(SPU_RdSigNotify2)", m_index); - *value = SPU.SNR[1].GetValue(); - break; - } default: { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(0x%x)", m_index, offset); - Emu.Pause(); + // TODO: read value from LS if necessary (not important) + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Read32(0x%llx)", m_index, offset); return false; } } @@ -165,14 +71,9 @@ bool RawSPUThread::Read32(const u64 addr, u32* value) bool RawSPUThread::Write32(const u64 addr, const u32 value) { - if(addr < GetStartAddr() + RAW_SPU_PROB_OFFSET) - { - return MemoryBlock::Write32(addr, value); - } + const u64 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - const u32 offset = addr - GetStartAddr() - RAW_SPU_PROB_OFFSET; - - switch(offset) + switch (offset) { case MFC_LSA_offs: { @@ -205,53 +106,26 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) break; } - case MFC_QStatus_offs: - { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(MFC_QStatus, 0x%x)", m_index, value); - //MFC2.QStatus.SetValue(value); - break; - } - case Prxy_QueryType_offs: { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryType, 0x%x)", m_index, value); - Prxy.QueryType.SetValue(value); - switch(value) { - case 2: - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Prxy Query Immediate.", m_index); - break; + case 2: break; default: + { LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Unknown Prxy Query Type. (prxy_query=0x%x)", m_index, value); - break; + return false; + } } - Prxy.QueryType.SetValue(0); - MFC2.QStatus.SetValue(Prxy.QueryMask.GetValue()); + MFC2.QueryType.SetValue(value); // not used break; } case Prxy_QueryMask_offs: { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_QueryMask, 0x%x)", m_index, value); - Prxy.QueryMask.SetValue(value); - break; - } - - case Prxy_TagStatus_offs: - { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(Prxy_TagStatus, 0x%x)", m_index, value); - Prxy.TagStatus.SetValue(value); - break; - } - - case SPU_Out_MBox_offs: - { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Out_MBox, 0x%x)", m_index, value); - while (!SPU.Out_MBox.Push(value) && !Emu.IsStopped()) - std::this_thread::sleep_for(std::chrono::milliseconds(1)); + MFC2.QueryMask.SetValue(value); // TagStatus is not used break; } @@ -261,13 +135,6 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) SPU.In_MBox.PushUncond(value); break; } - - case SPU_MBox_Status_offs: - { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_MBox_Status, 0x%x)", m_index, value); - SPU.MBox_Status.SetValue(value); - break; - } case SPU_RunCntl_offs: { @@ -289,39 +156,29 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) break; } - case SPU_Status_offs: - { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_Status, 0x%x)", m_index, value); - SPU.Status.SetValue(value); - break; - } - case SPU_NPC_offs: { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_NPC, 0x%x)", m_index, value); SPU.NPC.SetValue(value); break; } case SPU_RdSigNotify1_offs: { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify1, 0x%x)", m_index, value); - SPU.SNR[0].SetValue(value); + WriteSNR(0, value); break; } case SPU_RdSigNotify2_offs: { - LOG_WARNING(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RdSigNotify2, 0x%x)", m_index, value); - SPU.SNR[1].SetValue(value); + WriteSNR(1, value); break; } default: { - LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(0x%x, 0x%x)", m_index, offset, value); - Emu.Pause(); - break; + // TODO: write value to LS if necessary (not important) + LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(0x%llx, 0x%x)", m_index, offset, value); + return false; } } diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 9c020cb219..235b73700c 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -75,9 +75,13 @@ void SPUThread::InitRegs() dmac.queue_lock = 0;*/ SPU.Status.SetValue(SPU_STATUS_STOPPED); - Prxy.QueryType.SetValue(0); + + // TODO: check initialization if necessary + MFC2.QueryType.SetValue(0); // prxy MFC1.CMDStatus.SetValue(0); MFC2.CMDStatus.SetValue(0); + MFC1.TagStatus.SetValue(0); + MFC2.TagStatus.SetValue(0); //PC = SPU.NPC.GetValue(); } diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 5f38235859..abc187e9c2 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -523,16 +523,11 @@ public: Channel<1> EAL; Channel<1> Size_Tag; Channel<1> CMDStatus; - Channel<1> QStatus; - } MFC1, MFC2; - - struct - { - Channel<1> QueryType; + Channel<1> QueryType; // only for prxy Channel<1> QueryMask; Channel<1> TagStatus; Channel<1> AtomicStat; - } Prxy; + } MFC1, MFC2; struct StalledList { @@ -555,7 +550,6 @@ public: Channel<1> Out_MBox; Channel<1> Out_IntrMBox; Channel<4> In_MBox; - Channel<1> MBox_Status; Channel<1> Status; Channel<1> NPC; Channel<1> SNR[2]; @@ -831,7 +825,7 @@ public: reservation.data[i] = *(u128*)&Memory[(u32)ea + i * 16]; *(u128*)&Memory[dmac.ls_offset + lsa + i * 16] = reservation.data[i]; } - Prxy.AtomicStat.PushUncond(MFC_GETLLAR_SUCCESS); + MFCArgs.AtomicStat.PushUncond(MFC_GETLLAR_SUCCESS); } else if (op == MFC_PUTLLC_CMD) // store conditional { @@ -854,7 +848,7 @@ public: } if (changed == 0) // nothing changed? { - Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); } else if (changed == 1) { @@ -862,7 +856,7 @@ public: { LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: TODO: 128bit compare and swap"); Emu.Pause(); - Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); } else { @@ -871,11 +865,11 @@ public: if (InterlockedCompareExchange64((volatile long long*)(Memory + (u32)ea + last * 16 + last_q * 8), buf[last]._u64[last_q], reservation.data[last]._u64[last_q]) == reservation.data[last]._u64[last_q]) { - Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); } else { - Prxy.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); } /*u32 last_d = last_q * 2; if (buf[last]._u32[last_d] == reservation.data[last]._u32[last_d] && buf[last]._u32[last_d+1] != reservation.data[last]._u32[last_d+1]) @@ -890,7 +884,7 @@ public: { LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: TODO: 64bit compare and swap"); Emu.Pause(); - Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); }*/ } } @@ -900,18 +894,18 @@ public: LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Reservation Error: impossibru (~ 16x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", changed, mask, op, cmd, lsa, ea, tag, size); Emu.Pause(); - Prxy.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); } } else { - Prxy.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); } reservation.clear(); } else // failed { - Prxy.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); } } else // store unconditional @@ -920,7 +914,7 @@ public: ProcessCmd(MFC_PUT_CMD, tag, lsa, ea, 128); if (op == MFC_PUTLLUC_CMD) { - Prxy.AtomicStat.PushUncond(MFC_PUTLLUC_SUCCESS); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLUC_SUCCESS); } if ((reservation.addr + reservation.size > ea && reservation.addr <= ea + size) || (ea + size > reservation.addr && ea <= reservation.addr + reservation.size)) @@ -944,12 +938,12 @@ public: { case SPU_WrOutMbox: return SPU.Out_MBox.GetFreeCount(); case SPU_RdInMbox: return SPU.In_MBox.GetCount(); - case MFC_RdTagStat: return Prxy.TagStatus.GetCount(); + case MFC_RdTagStat: return MFC1.TagStatus.GetCount(); case MFC_RdListStallStat: return StallStat.GetCount(); - case MFC_WrTagUpdate: return Prxy.TagStatus.GetCount(); // hack + case MFC_WrTagUpdate: return MFC1.TagStatus.GetCount(); // hack case SPU_RdSigNotify1: return SPU.SNR[0].GetCount(); case SPU_RdSigNotify2: return SPU.SNR[1].GetCount(); - case MFC_RdAtomicStat: return Prxy.AtomicStat.GetCount(); + case MFC_RdAtomicStat: return MFC1.AtomicStat.GetCount(); default: { @@ -1115,14 +1109,14 @@ public: case MFC_WrTagMask: { //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); - Prxy.QueryMask.SetValue(v); + MFC1.QueryMask.SetValue(v); break; } case MFC_WrTagUpdate: { //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); - Prxy.TagStatus.PushUncond(Prxy.QueryMask.GetValue()); + MFC1.TagStatus.PushUncond(MFC1.QueryMask.GetValue()); break; } @@ -1184,7 +1178,7 @@ public: case SPU_WrDec: { - m_dec_start = get_system_time(); + m_dec_start = get_time(); m_dec_value = v; break; } @@ -1215,7 +1209,7 @@ public: case MFC_RdTagStat: { - while (!Prxy.TagStatus.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + while (!MFC1.TagStatus.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } @@ -1236,7 +1230,7 @@ public: case MFC_RdAtomicStat: { - while (!Prxy.AtomicStat.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + while (!MFC1.AtomicStat.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); break; } @@ -1248,8 +1242,7 @@ public: case SPU_RdDec: { - // decrementer freq is probably 80 MHz - v = m_dec_value - (u32)(get_system_time() - m_dec_start) * 80; + v = m_dec_value - (u32)(get_time() - m_dec_start); break; } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 88cc1dea6d..c552fe2f7b 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -401,7 +401,10 @@ public: } else { - RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data); + if (!RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data)) + { + *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); + } } } else @@ -474,7 +477,10 @@ public: else { u32 res; - RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res); + if (!RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res)) + { + res = re32(*(u32*)((u8*)GetBaseAddr() + addr)); + } return res; } } From c3e06694351b6ee153b2253502818aa9cdf1fb24 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 20:21:09 +0400 Subject: [PATCH 197/499] Time functions fixed --- rpcs3/Emu/SysCalls/lv2/sys_time.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_time.cpp b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp index 0a5ded0ce9..df4d2b109a 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_time.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp @@ -14,22 +14,32 @@ SysCallBase sys_time("sys_time"); -//static const u64 timebase_frequency = 79800000; +static const u64 timebase_frequency = /*79800000*/ 80000000; // 80 Mhz extern int cellSysutilGetSystemParamInt(int id, mem32_t value); // Auxiliary functions u64 get_time() { #ifdef _WIN32 + static struct PerformanceFreqHolder + { + u64 value; + + PerformanceFreqHolder() + { + LARGE_INTEGER freq; + QueryPerformanceFrequency(&freq); + value = freq.QuadPart; + } + } freq; + LARGE_INTEGER cycle; - LARGE_INTEGER freq; QueryPerformanceCounter(&cycle); - QueryPerformanceFrequency(&freq); - return cycle.QuadPart * 10000000 / freq.QuadPart; + return cycle.QuadPart * timebase_frequency / freq.value; #else struct timespec ts; if (!clock_gettime(CLOCK_MONOTONIC, &ts)) - return ts.tv_sec * (s64)10000000 + (s64)ts.tv_nsec / (s64)100; + return ts.tv_sec * (s64)timebase_frequency + (s64)ts.tv_nsec * (s64)timebase_frequency / 1000000000; // Should never occur. assert(0); @@ -40,7 +50,7 @@ u64 get_time() // Returns some relative time in microseconds, don't change this fact u64 get_system_time() { - return get_time() / 10; + return get_time() / (timebase_frequency / 1000000); } @@ -61,8 +71,8 @@ s32 sys_time_get_current_time(u32 sec_addr, u32 nsec_addr) u64 time = get_time(); - Memory.Write64(sec_addr, time / 10000000); - Memory.Write64(nsec_addr, (time % 10000000) * 100); + Memory.Write64(sec_addr, time / timebase_frequency); + Memory.Write64(nsec_addr, (time % timebase_frequency) * 1000000000 / (s64)(timebase_frequency)); return CELL_OK; } @@ -76,5 +86,5 @@ s64 sys_time_get_system_time() u64 sys_time_get_timebase_frequency() { sys_time.Log("sys_time_get_timebase_frequency()"); - return 10000000; + return timebase_frequency; } From c37c90613f4b4b4fc7593657b14086dd6650e6a3 Mon Sep 17 00:00:00 2001 From: boxingcow Date: Wed, 16 Jul 2014 17:45:54 +0100 Subject: [PATCH 198/499] Fix small clang warning --- rpcs3/Emu/ARMv7/ARMv7Decoder.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/ARMv7/ARMv7Decoder.h b/rpcs3/Emu/ARMv7/ARMv7Decoder.h index 2d63602941..52e5960e42 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Decoder.h +++ b/rpcs3/Emu/ARMv7/ARMv7Decoder.h @@ -33,7 +33,7 @@ public: switch((code0 >> 8) & 0x1) { case 1: - m_op.CBZ((code0 >> 11) & 0x1, branchTarget((((code0 >> 9) & 0x1) << 5) | (code0 >> 3) & 0x1f), code0 & 0x7, 2); + m_op.CBZ((code0 >> 11) & 0x1, branchTarget((((code0 >> 9) & 0x1) << 5) | ((code0 >> 3) & 0x1f)), code0 & 0x7, 2); return 2; } break; From 7816843dfbe9ca5767267ef359270e063acacde8 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 16 Jul 2014 22:29:26 +0400 Subject: [PATCH 199/499] Little fix --- rpcs3/Emu/SysCalls/lv2/sys_time.cpp | 5 +++-- rpcs3/Emu/SysCalls/lv2/sys_time.h | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_time.cpp b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp index df4d2b109a..aada49f665 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_time.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp @@ -35,7 +35,8 @@ u64 get_time() LARGE_INTEGER cycle; QueryPerformanceCounter(&cycle); - return cycle.QuadPart * timebase_frequency / freq.value; + u64 sec = cycle.QuadPart / freq.value; + return sec * timebase_frequency + (cycle.QuadPart % freq.value) * timebase_frequency / freq.value; #else struct timespec ts; if (!clock_gettime(CLOCK_MONOTONIC, &ts)) @@ -50,7 +51,7 @@ u64 get_time() // Returns some relative time in microseconds, don't change this fact u64 get_system_time() { - return get_time() / (timebase_frequency / 1000000); + return get_time() / (timebase_frequency / MHZ); } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_time.h b/rpcs3/Emu/SysCalls/lv2/sys_time.h index 921504cb42..3ebdefb7da 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_time.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_time.h @@ -1,5 +1,7 @@ #pragma once +#define MHZ (10000000) + // Auxiliary functions u64 get_time(); u64 get_system_time(); From f729f21e6cf32f8f39c3e38c2d368c3291e79d7e Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 18 Jul 2014 04:05:15 +0800 Subject: [PATCH 200/499] Fix compiler warning --- rpcs3/Emu/GS/GL/GLFragmentProgram.h | 12 ++-- rpcs3/Emu/GS/GL/GLVertexProgram.h | 98 ++++++++++++++--------------- rpcs3/Emu/GS/RSXThread.cpp | 12 ++-- rpcs3/Emu/GS/RSXThread.h | 12 ++-- 4 files changed, 67 insertions(+), 67 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.h b/rpcs3/Emu/GS/GL/GLFragmentProgram.h index b903fd927b..0ff5af0d4f 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.h +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.h @@ -79,16 +79,16 @@ struct GLFragmentDecompilerThread : public ThreadBase struct { u32 else_offset : 31; - u32 : 1; + u32 : 1; }; struct { - u32 : 2; - u32 rep1 : 8; - u32 rep2 : 8; - u32 : 1; - u32 rep3 : 8; + u32 : 2; + u32 rep1 : 8; + u32 rep2 : 8; + u32 : 1; + u32 rep3 : 8; }; } src1; diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.h b/rpcs3/Emu/GS/GL/GLVertexProgram.h index 1a0c41c922..ffa19e8238 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.h +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.h @@ -10,26 +10,26 @@ struct GLVertexDecompilerThread : public ThreadBase struct { - u32 addr_swz : 2; - u32 mask_w : 2; - u32 mask_z : 2; - u32 mask_y : 2; - u32 mask_x : 2; - u32 cond : 3; - u32 cond_test_enable : 1; - u32 cond_update_enable_0 : 1; - u32 dst_tmp : 6; - u32 src0_abs : 1; - u32 src1_abs : 1; - u32 src2_abs : 1; - u32 addr_reg_sel_1 : 1; - u32 cond_reg_sel_1 : 1; - u32 staturate : 1; - u32 index_input : 1; - u32 : 1; - u32 cond_update_enable_1 : 1; - u32 vec_result : 1; - u32 : 1; + u32 addr_swz : 2; + u32 mask_w : 2; + u32 mask_z : 2; + u32 mask_y : 2; + u32 mask_x : 2; + u32 cond : 3; + u32 cond_test_enable : 1; + u32 cond_update_enable_0 : 1; + u32 dst_tmp : 6; + u32 src0_abs : 1; + u32 src1_abs : 1; + u32 src2_abs : 1; + u32 addr_reg_sel_1 : 1; + u32 cond_reg_sel_1 : 1; + u32 staturate : 1; + u32 index_input : 1; + u32 : 1; + u32 cond_update_enable_1 : 1; + u32 vec_result : 1; + u32 : 1; }; } d0; @@ -39,11 +39,11 @@ struct GLVertexDecompilerThread : public ThreadBase struct { - u32 src0h : 8; - u32 input_src : 4; - u32 const_src : 10; - u32 vec_opcode : 5; - u32 sca_opcode : 5; + u32 src0h : 8; + u32 input_src : 4; + u32 const_src : 10; + u32 vec_opcode : 5; + u32 sca_opcode : 5; }; } d1; @@ -53,14 +53,14 @@ struct GLVertexDecompilerThread : public ThreadBase struct { - u32 src2h : 6; - u32 src1 : 17; - u32 src0l : 9; + u32 src2h : 6; + u32 src1 : 17; + u32 src0l : 9; }; struct { - u32 iaddrh : 6; - u32 : 26; + u32 iaddrh : 6; + u32 : 26; }; } d2; @@ -70,10 +70,10 @@ struct GLVertexDecompilerThread : public ThreadBase struct { - u32 end : 1; - u32 index_const : 1; - u32 dst : 5; - u32 sca_dst_tmp : 6; + u32 end : 1; + u32 index_const : 1; + u32 dst : 5; + u32 sca_dst_tmp : 6; u32 vec_writemask_w : 1; u32 vec_writemask_z : 1; u32 vec_writemask_y : 1; @@ -82,12 +82,12 @@ struct GLVertexDecompilerThread : public ThreadBase u32 sca_writemask_z : 1; u32 sca_writemask_y : 1; u32 sca_writemask_x : 1; - u32 src2l : 11; + u32 src2l : 11; }; struct { - u32 : 29; - u32 iaddrl : 3; + u32 : 29; + u32 iaddrl : 3; }; } d3; @@ -99,31 +99,31 @@ struct GLVertexDecompilerThread : public ThreadBase struct { - u32 src0l : 9; - u32 src0h : 8; + u32 src0l : 9; + u32 src0h : 8; }; struct { - u32 src1 : 17; + u32 src1 : 17; }; struct { - u32 src2l : 11; - u32 src2h : 6; + u32 src2l : 11; + u32 src2h : 6; }; }; struct { - u32 reg_type : 2; - u32 tmp_src : 6; - u32 swz_w : 2; - u32 swz_z : 2; - u32 swz_y : 2; - u32 swz_x : 2; - u32 neg : 1; + u32 reg_type : 2; + u32 tmp_src : 6; + u32 swz_w : 2; + u32 swz_z : 2; + u32 swz_y : 2; + u32 swz_x : 2; + u32 neg : 1; }; } src[3]; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 60a464f342..c0bb2b1127 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1677,12 +1677,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 { const u32 a0 = ARGS(0); m_set_clip_plane = true; - m_clip_plane_0 = a0 & 0xf; - m_clip_plane_1 = (a0 >> 4) & 0xf; - m_clip_plane_2 = (a0 >> 8) & 0xf; - m_clip_plane_3 = (a0 >> 12) & 0xf; - m_clip_plane_4 = (a0 >> 16) & 0xf; - m_clip_plane_5 = a0 >> 20; + m_clip_plane_0 = (a0 & 0xf) ? true : false; + m_clip_plane_1 = ((a0 >> 4)) & 0xf ? true : false; + m_clip_plane_2 = ((a0 >> 8)) & 0xf ? true : false; + m_clip_plane_3 = ((a0 >> 12)) & 0xf ? true : false; + m_clip_plane_4 = ((a0 >> 16)) & 0xf ? true : false; + m_clip_plane_5 = (a0 >> 20) ? true : false; } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 623a1a433c..42a0c7695e 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -348,12 +348,12 @@ public: // Clip plane bool m_set_clip_plane; - u32 m_clip_plane_0; - u32 m_clip_plane_1; - u32 m_clip_plane_2; - u32 m_clip_plane_3; - u32 m_clip_plane_4; - u32 m_clip_plane_5; + bool m_clip_plane_0; + bool m_clip_plane_1; + bool m_clip_plane_2; + bool m_clip_plane_3; + bool m_clip_plane_4; + bool m_clip_plane_5; // Surface bool m_set_surface_format; From 4856066a81d4d363681e87b240b7bff1d6a49df0 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 18 Jul 2014 23:03:39 +0800 Subject: [PATCH 201/499] Regression fix #1 --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 2b33a7fdf0..2f3f18cb78 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -251,10 +251,10 @@ std::string GLFragmentDecompilerThread::BuildCode() static const std::pair table[] = { { "ocol0", m_ctrl & 0x40 ? "r0" : "h0" }, - { "ocol1", m_ctrl & 0x40 ? "r1" : "h2" }, - { "ocol2", m_ctrl & 0x40 ? "r2" : "h4" }, - { "ocol3", m_ctrl & 0x40 ? "r3" : "h6" }, - { "ocol4", m_ctrl & 0x40 ? "r4" : "h8" }, + { "ocol1", m_ctrl & 0x40 ? "r2" : "h2" }, + { "ocol2", m_ctrl & 0x40 ? "r3" : "h4" }, + { "ocol3", m_ctrl & 0x40 ? "r4" : "h6" }, + { "ocol4", m_ctrl & 0x40 ? "r5" : "h8" }, }; for (int i = 0; i < sizeof(table) / sizeof(*table); ++i) @@ -263,19 +263,19 @@ std::string GLFragmentDecompilerThread::BuildCode() AddCode(m_parr.AddParam(PARAM_OUT, "vec4", table[i].first, i) + " = " + table[i].second + ";"); } - if(m_ctrl & 0xe) main += "\tgl_FragDepth = r1.z;\n"; + if (m_ctrl & 0xe) main += "\tgl_FragDepth = r1.z;\n"; std::string p; - for(u32 i=0; i Date: Fri, 18 Jul 2014 20:55:26 +0400 Subject: [PATCH 202/499] be_t<> constructor elimination --- Utilities/BEType.h | 31 ++++++-------- Utilities/SMutex.cpp | 2 +- Utilities/SMutex.h | 42 +++++++++---------- rpcs3/Crypto/unpkg.cpp | 5 ++- rpcs3/Emu/GS/sysutil_video.h | 18 ++++---- rpcs3/Emu/Memory/Memory.h | 26 ++++++------ rpcs3/Emu/Memory/MemoryBlock.h | 19 --------- rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp | 2 + .../SysCalls/Modules/cellSysutil_SaveData.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp | 8 ++-- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp | 4 +- rpcs3/Loader/TROPUSR.cpp | 13 ++++-- 15 files changed, 81 insertions(+), 103 deletions(-) diff --git a/Utilities/BEType.h b/Utilities/BEType.h index 65fe524f89..4477ead2ce 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -63,24 +63,6 @@ class be_t public: typedef T type; - -#ifdef _WIN32 - be_t(){} -#else - be_t() noexcept = default; -#endif - - be_t(const be_t& value) = default; - be_t(const T& value) - { - FromLE(value); - } - - template - explicit be_t(const be_t& value) - { - FromBE(value.ToBE()); - } const T& ToBE() const { @@ -130,7 +112,18 @@ public: operator const be_t() const { be_t res; - res.FromBE(ToBE()); + if (sizeof(T1) < sizeof(T)) + { + res.FromBE(ToBE() >> ((sizeof(T)-sizeof(T1)) * 8)); + } + else if (sizeof(T1) > sizeof(T)) + { + res.FromBE((T1)ToBE() << ((sizeof(T1)-sizeof(T)) * 8)); + } + else + { + res.FromBE(ToBE()); + } return res; } diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index 80c8798941..fe853c191e 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -36,5 +36,5 @@ __forceinline u32 SM_GetCurrentCPUThreadId() __forceinline be_t SM_GetCurrentCPUThreadIdBE() { - return SM_GetCurrentCPUThreadId(); + return be_t::MakeFromLE(SM_GetCurrentCPUThreadId()); } diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index a769fe5469..beeb5a8920 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -22,8 +22,8 @@ enum SMutexResult template < typename T, - u64 free_value = 0, - u64 dead_value = 0xffffffff, + const u64 free_value = 0, + const u64 dead_value = 0xffffffffffffffffull, void (*wait)() = SM_Sleep > class SMutexBase @@ -32,20 +32,26 @@ class SMutexBase std::atomic owner; public: - SMutexBase() - : owner((T)free_value) + static const T GetFreeValue() { + static const u64 value = free_value; + return (const T&)value; + } + + static const T GetDeadValue() + { + static const u64 value = dead_value; + return (const T&)value; } void initialize() { - (T&)owner = free_value; + owner = GetFreeValue(); } - ~SMutexBase() + void finalize() { - lock((T)dead_value); - owner = (T)dead_value; + owner = GetDeadValue(); } __forceinline T GetOwner() const @@ -53,23 +59,13 @@ public: return (T&)owner; } - __forceinline T GetFreeValue() const - { - return (T)free_value; - } - - __forceinline T GetDeadValue() const - { - return (T)dead_value; - } - SMutexResult trylock(T tid) { if (Emu.IsStopped()) { return SMR_ABORT; } - T old = (T)free_value; + T old = GetFreeValue(); if (!owner.compare_exchange_strong(old, tid)) { @@ -77,7 +73,7 @@ public: { return SMR_DEADLOCK; } - if (old == (T)dead_value) + if (old == GetDeadValue()) { return SMR_DESTROYED; } @@ -87,7 +83,7 @@ public: return SMR_OK; } - SMutexResult unlock(T tid, T to = (T)free_value) + SMutexResult unlock(T tid, T to = GetFreeValue()) { if (Emu.IsStopped()) { @@ -97,11 +93,11 @@ public: if (!owner.compare_exchange_strong(old, to)) { - if (old == (T)free_value) + if (old == GetFreeValue()) { return SMR_FAILED; } - if (old == (T)dead_value) + if (old == GetDeadValue()) { return SMR_DESTROYED; } diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index 1b499ce61c..3d26e9178d 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -113,8 +113,9 @@ int Decrypt(rFile& pkg_f, rFile& dec_pkg_f, PKGHeader* m_header) { aes_crypt_ecb(&c, AES_ENCRYPT, iv, ctr+j*HASH_LEN); - be_t hi = *(be_t*)&iv[0]; - be_t lo = *(be_t*)&iv[8] + 1; + be_t hi = be_t::MakeFromBE(*(u64*)&iv[0]); + be_t lo = be_t::MakeFromBE(*(u64*)&iv[8]); + lo++; if (lo == 0) hi += 1; diff --git a/rpcs3/Emu/GS/sysutil_video.h b/rpcs3/Emu/GS/sysutil_video.h index b0d03c6323..c0d2a89370 100644 --- a/rpcs3/Emu/GS/sysutil_video.h +++ b/rpcs3/Emu/GS/sysutil_video.h @@ -223,15 +223,15 @@ enum CellVideoOutRGBOutputRange static const CellVideoOutResolution ResolutionTable[] = { - {(u16)-1, (u16)-1}, //0 - 0 - {1920, 1080}, //1 - 1 - {1280, 720}, //2 - 2 - {720, 480}, //4 - 3 - {720, 576}, //5 - 4 - {1600, 1080}, //10 - 5 - {1440, 1080}, //11 - 6 - {1280, 1080}, //12 - 7 - {960, 1080}, //13 - 8 + { be_t::MakeFromBE(se16(0xffff)), be_t::MakeFromBE(se16(0xffff)) }, //0 - 0 + { be_t::MakeFromBE(se16(1920)), be_t::MakeFromBE(se16(1080)) }, //1 - 1 + { be_t::MakeFromBE(se16(1280)), be_t::MakeFromBE(se16(720)) }, //2 - 2 + { be_t::MakeFromBE(se16(720)), be_t::MakeFromBE(se16(480)) }, //4 - 3 + { be_t::MakeFromBE(se16(720)), be_t::MakeFromBE(se16(576)) }, //5 - 4 + { be_t::MakeFromBE(se16(1600)), be_t::MakeFromBE(se16(1080)) }, //10 - 5 + { be_t::MakeFromBE(se16(1440)), be_t::MakeFromBE(se16(1080)) }, //11 - 6 + { be_t::MakeFromBE(se16(1280)), be_t::MakeFromBE(se16(1080)) }, //12 - 7 + { be_t::MakeFromBE(se16(960)), be_t::MakeFromBE(se16(1080)) }, //13 - 8 }; inline static u32 ResolutionIdToNum(u32 id) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index c552fe2f7b..114fdff049 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -517,29 +517,29 @@ public: } } - bool CopyToReal(void* real, u64 from, u32 count) + template bool CopyToReal(void* real, T from, u32 count) { - if (!IsGoodAddr(from, count)) return false; + if (!IsGoodAddr(from, count)) return false; - memcpy(real, GetMemFromAddr(from), count); + memcpy(real, GetMemFromAddr(from), count); return true; } - bool CopyFromReal(u64 to, const void* real, u32 count) + template bool CopyFromReal(T to, const void* real, u32 count) { - if (!IsGoodAddr(to, count)) return false; + if (!IsGoodAddr(to, count)) return false; - memcpy(GetMemFromAddr(to), real, count); + memcpy(GetMemFromAddr(to), real, count); return true; } - bool Copy(u64 to, u64 from, u32 count) + template bool Copy(T1 to, T2 from, u32 count) { - if (!IsGoodAddr(to, count) || !IsGoodAddr(from, count)) return false; + if (!IsGoodAddr(to, count) || !IsGoodAddr(from, count)) return false; - memmove(GetMemFromAddr(to), GetMemFromAddr(from), count); + memmove(GetMemFromAddr(to), GetMemFromAddr(from), count); return true; } @@ -564,14 +564,14 @@ public: for (u32 i = 0; i < size; ++i) Write8(addr + (size - 1 - i), src[i]); } - template void WriteData(const u64 addr, const T* data) + template void WriteData(const T addr, const Td* data) { - memcpy(GetMemFromAddr(addr), data, sizeof(T)); + memcpy(GetMemFromAddr(addr), data, sizeof(Td)); } - template void WriteData(const u64 addr, const T data) + template void WriteData(const T addr, const Td data) { - *(T*)GetMemFromAddr(addr) = data; + *(Td*)GetMemFromAddr(addr) = data; } std::string ReadString(const u64 addr, const u64 len) diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index c4a3d70632..1873d009dc 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -366,25 +366,6 @@ public: } }; -class NullMemoryBlock : public MemoryBlock -{ -public: - virtual bool IsNULL() { return true; } - virtual bool IsMyAddress(const u64 addr) { return true; } - - virtual bool Read8(const u64 addr, u8* value); - virtual bool Read16(const u64 addr, u16* value); - virtual bool Read32(const u64 addr, u32* value); - virtual bool Read64(const u64 addr, u64* value); - virtual bool Read128(const u64 addr, u128* value); - - virtual bool Write8(const u64 addr, const u8 value); - virtual bool Write16(const u64 addr, const u16 value); - virtual bool Write32(const u64 addr, const u32 value); - virtual bool Write64(const u64 addr, const u64 value); - virtual bool Write128(const u64 addr, const u128 value); -}; - template class DynamicMemoryBlockBase : public PT { diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp index fc0989e528..b91e990c89 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp @@ -332,6 +332,8 @@ int cellPadGetInfo2(u32 info_addr) if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; CellPadInfo2 info = {}; + //sys_io->Warning("*** info{}: max_connect=0x%x, now_connect=0x%x, system_info=0x%x, port_status[0]=0x%x, port_setting[0]=0x%x", + // (u32)info.max_connect, (u32)info.now_connect, (u32)info.system_info, (u32)info.port_status[0], (u32)info.port_setting[0]); const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); info.max_connect = rinfo.max_connect; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index 2393b0c2ff..b3c3cb2d27 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -178,7 +178,7 @@ void getSaveDataStat(SaveDataEntry entry, mem_ptr_t statGet memcpy(statGet->getParam.listParam, entry.listParam.c_str(), CELL_SAVEDATA_SYSP_LPARAM_SIZE); statGet->fileNum = 0; - statGet->fileList.SetAddr(0); + statGet->fileList.SetAddr(be_t::MakeFromBE(0)); statGet->fileListNum = 0; std::string saveDir = "/dev_hdd0/home/00000001/savedata/" + entry.dirName; // TODO: Get the path of the current user vfsDir dir(saveDir); @@ -210,7 +210,7 @@ void getSaveDataStat(SaveDataEntry entry, mem_ptr_t statGet } } - statGet->fileList.SetAddr(Memory.Alloc(sizeof(CellSaveDataFileStat) * fileEntries.size(), sizeof(CellSaveDataFileStat))); + statGet->fileList.SetAddr(be_t::MakeFromLE(Memory.Alloc(sizeof(CellSaveDataFileStat)* fileEntries.size(), sizeof(CellSaveDataFileStat)))); for (u32 i=0; ifileList[i], &fileEntries[i], sizeof(CellSaveDataFileStat)); } diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 147e37c812..00204a718b 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -213,7 +213,7 @@ int cellSSPlayerSetWave(u32 handle, mem_ptr_t waveInfo, m ssp[handle].m_addr = waveInfo->addr; ssp[handle].m_samples = waveInfo->samples; ssp[handle].m_loop_start = waveInfo->loopStartOffset - 1; - ssp[handle].m_loop_mode = commonInfo.GetAddr() ? commonInfo->loopMode : CELL_SSPLAYER_ONESHOT; + ssp[handle].m_loop_mode = commonInfo.GetAddr() ? (u32)commonInfo->loopMode : CELL_SSPLAYER_ONESHOT; ssp[handle].m_position = waveInfo->startOffset - 1; return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index ee44e1601b..9ebbcafb5d 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -189,7 +189,7 @@ s32 sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) mem_ptr_t mutex(lwcond->lwmutex); u32 tid_le = GetCurrentPPUThread().GetId(); - be_t tid = tid_le; + be_t tid = be_t::MakeFromLE(tid_le); SleepQueue* sq = nullptr; Emu.GetIdManager().GetIDData((u32)mutex->sleep_queue, sq); @@ -211,7 +211,7 @@ s32 sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) if (sq) { - mutex->mutex.unlock(tid, mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? sq->pop_prio() : sq->pop()); + mutex->mutex.unlock(tid, be_t::MakeFromLE(mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? sq->pop_prio() : sq->pop())); } else if (mutex->attribute.ToBE() == se32(SYS_SYNC_RETRY)) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index 969c39e680..ce1e049286 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -77,7 +77,7 @@ s32 sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout) //ConLog.Write("*** lock mutex (addr=0x%x, attr=0x%x, Nrec=%d, owner=%d, waiter=%d)", //lwmutex.GetAddr(), (u32)lwmutex->attribute, (u32)lwmutex->recursive_count, lwmutex->vars.parts.owner.GetOwner(), (u32)lwmutex->waiter); - return lwmutex->lock(GetCurrentPPUThread().GetId(), timeout ? ((timeout < 1000) ? 1 : (timeout / 1000)) : 0); + return lwmutex->lock(be_t::MakeFromLE(GetCurrentPPUThread().GetId()), timeout ? ((timeout < 1000) ? 1 : (timeout / 1000)) : 0); } s32 sys_lwmutex_trylock(mem_ptr_t lwmutex) @@ -86,7 +86,7 @@ s32 sys_lwmutex_trylock(mem_ptr_t lwmutex) if (!lwmutex.IsGood()) return CELL_EFAULT; - return lwmutex->trylock(GetCurrentPPUThread().GetId()); + return lwmutex->trylock(be_t::MakeFromLE(GetCurrentPPUThread().GetId())); } s32 sys_lwmutex_unlock(mem_ptr_t lwmutex) @@ -98,7 +98,7 @@ s32 sys_lwmutex_unlock(mem_ptr_t lwmutex) //ConLog.Write("*** unlocking mutex (addr=0x%x, attr=0x%x, Nrec=%d, owner=%d, waiter=%d)", //lwmutex.GetAddr(), (u32)lwmutex->attribute, (u32)lwmutex->recursive_count, (u32)lwmutex->vars.parts.owner.GetOwner(), (u32)lwmutex->waiter); - return lwmutex->unlock(GetCurrentPPUThread().GetId()); + return lwmutex->unlock(be_t::MakeFromLE(GetCurrentPPUThread().GetId())); } void SleepQueue::push(u32 tid) @@ -294,7 +294,7 @@ int sys_lwmutex_t::unlock(be_t tid) recursive_count -= 1; if (!recursive_count.ToBE()) { - be_t target = 0; + be_t target = be_t::MakeFromBE(se32(0)); switch (attribute.ToBE() & se32(SYS_SYNC_ATTR_PROTOCOL_MASK)) { case se32(SYS_SYNC_FIFO): diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index ad51e004a0..f60e144710 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -209,8 +209,8 @@ void sys_ppu_thread_once(mem_ptr_t>> once_ctrl, u32 entry) { sysPrxForUser->Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, entry=0x%x)", once_ctrl.GetAddr(), entry); - be_t old = SYS_PPU_THREAD_ONCE_INIT; - if (once_ctrl->compare_exchange_weak(old, SYS_PPU_THREAD_DONE_INIT)) + be_t old = be_t::MakeFromBE(se32(SYS_PPU_THREAD_ONCE_INIT)); + if (once_ctrl->compare_exchange_weak(old, be_t::MakeFromBE(se32(SYS_PPU_THREAD_DONE_INIT)))) { CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_PPU); new_thread.SetEntry(entry); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp index 23a618ad48..9d70571088 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp @@ -19,7 +19,7 @@ void sys_spinlock_lock(mem_ptr_t lock) { sys_spinlock.Log("sys_spinlock_lock(lock_addr=0x%x)", lock.GetAddr()); - be_t tid = GetCurrentPPUThread().GetId(); + be_t tid = be_t::MakeFromLE(GetCurrentPPUThread().GetId()); switch (lock->mutex.lock(tid)) { case SMR_ABORT: LOG_WARNING(HLE, "sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); break; @@ -32,7 +32,7 @@ s32 sys_spinlock_trylock(mem_ptr_t lock) { sys_spinlock.Log("sys_spinlock_trylock(lock_addr=0x%x)", lock.GetAddr()); - be_t tid = GetCurrentPPUThread().GetId(); + be_t tid = be_t::MakeFromLE(GetCurrentPPUThread().GetId()); switch (lock->mutex.trylock(tid)) { case SMR_FAILED: return CELL_EBUSY; diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index 118bf182ae..b19f0016d7 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -143,8 +143,11 @@ bool TROPUSRLoader::Generate(const std::string& filepath, const std::string& con default: trophy_grade = 0; } - TROPUSREntry4 entry4 = {4, sizeof(TROPUSREntry4)-0x10, m_table4.size(), 0, trophy_id, trophy_grade, 0xFFFFFFFF}; - TROPUSREntry6 entry6 = {6, sizeof(TROPUSREntry6)-0x10, m_table6.size(), 0, trophy_id, 0, 0, 0, 0, 0}; + TROPUSREntry4 entry4 = { be_t::MakeFromBE(se32(4)), be_t::MakeFromBE(se32(sizeof(TROPUSREntry4) - 0x10)), + be_t::MakeFromLE(m_table4.size()), be_t::MakeFromBE(se32(0)), be_t::MakeFromLE(trophy_id), + be_t::MakeFromLE(trophy_grade), be_t::MakeFromBE(se32(0xFFFFFFFF)) }; + TROPUSREntry6 entry6 = { be_t::MakeFromBE(se32(6)), be_t::MakeFromBE(se32(sizeof(TROPUSREntry6) - 0x10)), + be_t::MakeFromLE(m_table6.size()), be_t::MakeFromBE(0), be_t::MakeFromLE(trophy_id) }; m_table4.push_back(entry4); m_table6.push_back(entry6); @@ -152,9 +155,11 @@ bool TROPUSRLoader::Generate(const std::string& filepath, const std::string& con } u64 offset = sizeof(TROPUSRHeader) + 2 * sizeof(TROPUSRTableHeader); - TROPUSRTableHeader table4header = {4, sizeof(TROPUSREntry4)-0x10, 1, m_table4.size(), offset, 0}; + TROPUSRTableHeader table4header = { be_t::MakeFromBE(se32(4)), be_t::MakeFromBE(se32(sizeof(TROPUSREntry4)-0x10)), + be_t::MakeFromBE(se32(1)), be_t::MakeFromLE(m_table4.size()), be_t::MakeFromLE(offset) }; offset += m_table4.size() * sizeof(TROPUSREntry4); - TROPUSRTableHeader table6header = {6, sizeof(TROPUSREntry6)-0x10, 1, m_table6.size(), offset, 0}; + TROPUSRTableHeader table6header = { be_t::MakeFromBE(se32(6)), be_t::MakeFromBE(se32(sizeof(TROPUSREntry6)-0x10)), + be_t::MakeFromBE(se32(1)), be_t::MakeFromLE(m_table6.size()), be_t::MakeFromLE(offset) }; offset += m_table6.size() * sizeof(TROPUSREntry6); m_tableHeaders.clear(); From f69337be6540fea6a7e9744b505352ac6332029b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 18 Jul 2014 21:04:12 +0400 Subject: [PATCH 203/499] Little fix --- Utilities/BEType.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/BEType.h b/Utilities/BEType.h index 4477ead2ce..8c2880c71b 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -118,7 +118,7 @@ public: } else if (sizeof(T1) > sizeof(T)) { - res.FromBE((T1)ToBE() << ((sizeof(T1)-sizeof(T)) * 8)); + res.FromLE(ToLE()); } else { From 5f55afda0f9cf444cf209d51340038a278a877c4 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 18 Jul 2014 21:30:22 +0400 Subject: [PATCH 204/499] Little fix 2 --- Utilities/SMutex.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index beeb5a8920..c67578d7b2 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -49,6 +49,11 @@ public: owner = GetFreeValue(); } + SMutexBase() + { + initialize(); + } + void finalize() { owner = GetDeadValue(); From d058ef769cbea6baefea11645d327a56a5c6e12b Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 19 Jul 2014 01:47:58 +0800 Subject: [PATCH 205/499] Fix a dst_reg typo for tc9 --- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index 665f564c24..dc82212f7e 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -353,7 +353,7 @@ std::string GLVertexDecompilerThread::BuildCode() { "tc6", true, "dst_reg13", "", false }, { "tc7", true, "dst_reg14", "", false }, { "tc8", true, "dst_reg15", "", false }, - { "tc9", true, "dst_reg6", "", false } + { "tc9", true, "dst_reg16", "", false } }; std::string f; From f151ba7c53a1718fc4102f638f375a9b5c8c5b27 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 19 Jul 2014 02:07:50 +0800 Subject: [PATCH 206/499] GUI : Boot elf and run at start --- rpcs3/Gui/MainFrame.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 6938bc2f89..8fe3b05371 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -304,6 +304,11 @@ void MainFrame::BootElf(wxCommandEvent& WXUNUSED(event)) Emu.Load(); LOG_SUCCESS(HLE, "(S)ELF: boot done."); + + if (Ini.HLEAlwaysStart.GetValue() && Emu.IsReady()) + { + Emu.Run(); + } } void MainFrame::Pause(wxCommandEvent& WXUNUSED(event)) From 1a36a2d75942aa90f62a8e3b01dc29f822589442 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 19 Jul 2014 04:33:08 +0800 Subject: [PATCH 207/499] Regression fix #2 --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 2f3f18cb78..13a6f0d56c 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -248,9 +248,9 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) std::string GLFragmentDecompilerThread::BuildCode() { //main += fmt::Format("\tgl_FragColor = %c0;\n", m_ctrl & 0x40 ? 'r' : 'h'); + AddCode(m_parr.AddParam(PARAM_OUT, "vec4", "ocol0", 0) + " = " + (m_ctrl & 0x40 ? "r0" : "h0") + ";\n"); static const std::pair table[] = { - { "ocol0", m_ctrl & 0x40 ? "r0" : "h0" }, { "ocol1", m_ctrl & 0x40 ? "r2" : "h2" }, { "ocol2", m_ctrl & 0x40 ? "r3" : "h4" }, { "ocol3", m_ctrl & 0x40 ? "r4" : "h6" }, @@ -260,7 +260,7 @@ std::string GLFragmentDecompilerThread::BuildCode() for (int i = 0; i < sizeof(table) / sizeof(*table); ++i) { if (m_parr.HasParam(PARAM_NONE, "vec4", table[i].second)) - AddCode(m_parr.AddParam(PARAM_OUT, "vec4", table[i].first, i) + " = " + table[i].second + ";"); + AddCode(m_parr.AddParam(PARAM_OUT, "vec4", table[i].first, i+1) + " = " + table[i].second + ";"); } if (m_ctrl & 0xe) main += "\tgl_FragDepth = r1.z;\n"; From a7f3b6fd570e76c721243e24407cd87124db29ea Mon Sep 17 00:00:00 2001 From: B1ackDaemon Date: Sat, 19 Jul 2014 10:04:33 +0300 Subject: [PATCH 208/499] Revert "Fix a dst_reg typo for tc9" --- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index dc82212f7e..665f564c24 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -353,7 +353,7 @@ std::string GLVertexDecompilerThread::BuildCode() { "tc6", true, "dst_reg13", "", false }, { "tc7", true, "dst_reg14", "", false }, { "tc8", true, "dst_reg15", "", false }, - { "tc9", true, "dst_reg16", "", false } + { "tc9", true, "dst_reg6", "", false } }; std::string f; From 7433a021dbfe135acd4f141e044afe325413fac8 Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 19 Jul 2014 12:24:15 +0300 Subject: [PATCH 209/499] Improved RSX emulation - Fixed NV4097_SET_SHADER_CONTROL - Vertex Shader: SCA instructions don't override VEC result --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 6 ++++-- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 2 +- rpcs3/Emu/GS/RSXThread.cpp | 8 +------- rpcs3/Emu/GS/RSXThread.h | 5 +++-- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index e7a86654e0..7d1554d27e 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -340,13 +340,15 @@ bool GLGSRender::LoadProgram() LOG_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL"); return false; } - + + m_cur_shader_prog->ctrl = m_shader_ctrl; + if(!m_cur_vertex_prog) { LOG_WARNING(RSX, "LoadProgram: m_cur_vertex_prog == NULL"); return false; } - + m_fp_buf_num = m_prog_buffer.SearchFp(*m_cur_shader_prog, m_shader_prog); m_vp_buf_num = m_prog_buffer.SearchVp(*m_cur_vertex_prog, m_vertex_prog); diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index 665f564c24..1be0f3fc7c 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -41,7 +41,7 @@ std::string GLVertexDecompilerThread::GetDST(bool isSca) { std::string ret; - switch(d3.dst) + switch(isSca ? 0x1f : d3.dst) { case 0x1f: ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("tmp") + std::to_string(isSca ? d3.sca_dst_tmp : d0.dst_tmp)); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index c0bb2b1127..9fb0baad3b 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -972,13 +972,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_SHADER_CONTROL: { - if(!m_cur_shader_prog) - { - LOG_ERROR(RSX, "NV4097_SET_SHADER_CONTROL: m_cur_shader_prog == NULL"); - break; - } - - m_cur_shader_prog->ctrl = ARGS(0); + m_shader_ctrl = ARGS(0); } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 42a0c7695e..a09ebd68b0 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -112,8 +112,8 @@ public: RSXIndexArrayData m_indexed_array; std::vector m_fragment_constants; std::vector m_transform_constants; - - u32 m_cur_shader_prog_num; + + u32 m_shader_ctrl, m_cur_shader_prog_num; RSXShaderProgram m_shader_progs[m_fragment_count]; RSXShaderProgram* m_cur_shader_prog; RSXVertexProgram m_vertex_progs[m_vertex_count]; @@ -428,6 +428,7 @@ protected: RSXThread() : ThreadBase("RSXThread") , m_ctrl(nullptr) + , m_shader_ctrl(0x40) , m_flip_status(0) , m_flip_mode(CELL_GCM_DISPLAY_VSYNC) , m_debug_level(CELL_GCM_DEBUG_LEVEL0) From 68078427aac9dc52dacb028480077debb0fa05ad Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 19 Jul 2014 14:58:32 +0300 Subject: [PATCH 210/499] Fixed LOOP & REP instructions in FragmentShaderDecompiler --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 40 +++++++++++++++++++-------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index 13a6f0d56c..ffbd115437 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -398,20 +398,36 @@ void GLFragmentDecompilerThread::Task() break; case 0x43: //LOOP - AddCode(fmt::Format("$ifcond for(int i%u = %u; i%u < %u; i%u += %u) //LOOP", - m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); - m_loop_count++; - m_end_offsets.push_back(src2.end_offset << 2); - AddCode("{"); - m_code_level++; + if(!src0.exec_if_eq && !src0.exec_if_gr && !src0.exec_if_lt) + { + AddCode(fmt::Format("$ifcond for(int i%u = %u; i%u < %u; i%u += %u) {} //-> %u //LOOP", + m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3, src2.end_offset)); + } + else + { + AddCode(fmt::Format("$ifcond for(int i%u = %u; i%u < %u; i%u += %u) //LOOP", + m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); + m_loop_count++; + m_end_offsets.push_back(src2.end_offset << 2); + AddCode("{"); + m_code_level++; + } break; case 0x44: //REP - AddCode(fmt::Format("if($cond) for(int i%u = %u; i%u < %u; i%u += %u) //REP", - m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); - m_loop_count++; - m_end_offsets.push_back(src2.end_offset << 2); - AddCode("{"); - m_code_level++; + if(!src0.exec_if_eq && !src0.exec_if_gr && !src0.exec_if_lt) + { + AddCode(fmt::Format("$ifcond for(int i%u = %u; i%u < %u; i%u += %u) {} //-> %u //REP", + m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3, src2.end_offset)); + } + else + { + AddCode(fmt::Format("if($cond) for(int i%u = %u; i%u < %u; i%u += %u) //REP", + m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); + m_loop_count++; + m_end_offsets.push_back(src2.end_offset << 2); + AddCode("{"); + m_code_level++; + } break; //case 0x45: SetDst("return"); break; //RET From 0fe32fa0d357e5e924c7c5873d3229de7bef6c37 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Sat, 19 Jul 2014 15:09:39 +0200 Subject: [PATCH 211/499] fix a typo in the packaging batch file the soft_oal.dll was written with a dash which is clearly wrong --- package.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.bat b/package.bat index 8d6fe2cbe6..30efc34ebf 100644 --- a/package.bat +++ b/package.bat @@ -1,7 +1,7 @@ mkdir build mkdir build\rpcs3 copy bin\rpcs3-*.exe build\rpcs3 -copy bin\soft-oal.dll build\rpcs3 +copy bin\soft_oal.dll build\rpcs3 copy bin\make_fself.cmd build\rpcs3 mkdir build\rpcs3\dev_hdd1 From 8b9a46bb392c42b8a6f32f099fe070f99bba192b Mon Sep 17 00:00:00 2001 From: DH Date: Sat, 19 Jul 2014 18:39:47 +0300 Subject: [PATCH 212/499] RSX: fixed scissor --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 118 +++++++++++++++++-------------- rpcs3/Emu/GS/GL/GLGSRender.h | 3 + rpcs3/Emu/GS/Null/NullGSRender.h | 6 +- rpcs3/Emu/GS/RSXThread.cpp | 3 +- rpcs3/Emu/GS/RSXThread.h | 1 + 5 files changed, 75 insertions(+), 56 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 7d1554d27e..8a7f082f83 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -441,6 +441,19 @@ bool GLGSRender::LoadProgram() return true; } +void GLGSRender::WriteBuffers() +{ + if (Ini.GSDumpDepthBuffer.GetValue()) + { + WriteDepthBuffer(); + } + + if (Ini.GSDumpColorBuffers.GetValue()) + { + WriteColorBuffers(); + } +} + void GLGSRender::WriteDepthBuffer() { if (!m_set_context_dma_z) @@ -705,16 +718,8 @@ void GLGSRender::OnReset() m_vao.Delete(); } -void GLGSRender::ExecCMD() +void GLGSRender::InitDrawBuffers() { - //return; - if(!LoadProgram()) - { - LOG_ERROR(RSX, "LoadProgram failed."); - Emu.Pause(); - return; - } - if(!m_fbo.IsCreated() || RSXThread::m_width != last_width || RSXThread::m_height != last_height || last_depth_format != m_surface_depth_format) { LOG_WARNING(RSX, "New FBO (%dx%d)", RSXThread::m_width, RSXThread::m_height); @@ -795,11 +800,6 @@ void GLGSRender::ExecCMD() m_fbo.Bind(); - if (Ini.GSDumpDepthBuffer.GetValue()) - { - WriteDepthBuffer(); - } - static const GLenum draw_buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 }; switch(m_surface_colour_target) @@ -831,6 +831,13 @@ void GLGSRender::ExecCMD() LOG_ERROR(RSX, "Bad surface colour target: %d", m_surface_colour_target); break; } +} + +void GLGSRender::ExecCMD(u32 cmd) +{ + assert(cmd == NV4097_CLEAR_SURFACE); + + InitDrawBuffers(); if(m_set_color_mask) { @@ -838,50 +845,56 @@ void GLGSRender::ExecCMD() checkForGlError("glColorMask"); } - if(m_set_viewport_horizontal && m_set_viewport_vertical) - { - //glViewport(m_viewport_x, m_viewport_y, m_viewport_w, m_viewport_h); - //checkForGlError("glViewport"); - } - if (m_set_scissor_horizontal && m_set_scissor_vertical) { glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); checkForGlError("glScissor"); } - - if(m_clear_surface_mask) + + GLbitfield f = 0; + + if (m_clear_surface_mask & 0x1) { - GLbitfield f = 0; + glClearDepth(m_clear_surface_z / (float)0xffffff); - if (m_clear_surface_mask & 0x1) - { - glClearDepth(m_clear_surface_z / (float)0xffffff); - - f |= GL_DEPTH_BUFFER_BIT; - } - - if (m_clear_surface_mask & 0x2) - { - glClearStencil(m_clear_surface_s); - - f |= GL_STENCIL_BUFFER_BIT; - } - - if (m_clear_surface_mask & 0xF0) - { - glClearColor( - m_clear_surface_color_r / 255.0f, - m_clear_surface_color_g / 255.0f, - m_clear_surface_color_b / 255.0f, - m_clear_surface_color_a / 255.0f); - - f |= GL_COLOR_BUFFER_BIT; - } - - glClear(f); + f |= GL_DEPTH_BUFFER_BIT; } + if (m_clear_surface_mask & 0x2) + { + glClearStencil(m_clear_surface_s); + + f |= GL_STENCIL_BUFFER_BIT; + } + + if (m_clear_surface_mask & 0xF0) + { + glClearColor( + m_clear_surface_color_r / 255.0f, + m_clear_surface_color_g / 255.0f, + m_clear_surface_color_b / 255.0f, + m_clear_surface_color_a / 255.0f); + + f |= GL_COLOR_BUFFER_BIT; + } + + glClear(f); + + WriteBuffers(); +} + +void GLGSRender::ExecCMD() +{ + //return; + if(!LoadProgram()) + { + LOG_ERROR(RSX, "LoadProgram failed."); + Emu.Pause(); + return; + } + + InitDrawBuffers(); + Enable(m_set_depth_test, GL_DEPTH_TEST); Enable(m_set_alpha_test, GL_ALPHA_TEST); Enable(m_set_depth_bounds_test, GL_DEPTH_BOUNDS_TEST_EXT); @@ -1168,11 +1181,8 @@ void GLGSRender::ExecCMD() checkForGlError("glDrawArrays"); DisableVertexData(); } - - if (Ini.GSDumpColorBuffers.GetValue()) - { - WriteColorBuffers(); - } + + WriteBuffers(); } void GLGSRender::Flip() diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index c2ad1a82b0..f327cf2091 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -846,6 +846,7 @@ private: void Enable(bool enable, const u32 cap); virtual void Close(); bool LoadProgram(); + void WriteBuffers(); void WriteDepthBuffer(); void WriteColorBuffers(); void WriteColourBufferA(); @@ -854,12 +855,14 @@ private: void WriteColourBufferD(); void DrawObjects(); + void InitDrawBuffers(); protected: virtual void OnInit(); virtual void OnInitThread(); virtual void OnExitThread(); virtual void OnReset(); + virtual void ExecCMD(u32 cmd); virtual void ExecCMD(); virtual void Flip(); }; diff --git a/rpcs3/Emu/GS/Null/NullGSRender.h b/rpcs3/Emu/GS/Null/NullGSRender.h index b337045b48..26663236b9 100644 --- a/rpcs3/Emu/GS/Null/NullGSRender.h +++ b/rpcs3/Emu/GS/Null/NullGSRender.h @@ -30,7 +30,11 @@ private: virtual void OnReset() { } - + + virtual void ExecCMD(u32 cmd) + { + } + virtual void ExecCMD() { } diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 9fb0baad3b..b8e5a58074 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -822,7 +822,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 if(a0 & 0x40) m_clear_surface_color_b = m_clear_color_b; if(a0 & 0x80) m_clear_surface_color_a = m_clear_color_a; - m_clear_surface_mask |= a0; + m_clear_surface_mask = a0; + ExecCMD(NV4097_CLEAR_SURFACE); } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index a09ebd68b0..7f7fce9acf 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -615,6 +615,7 @@ protected: virtual void OnExitThread() = 0; virtual void OnReset() = 0; virtual void ExecCMD() = 0; + virtual void ExecCMD(u32 cmd) = 0; virtual void Flip() = 0; void LoadVertexData(u32 first, u32 count) From 5f3ea1005a7fce603969f1f81cb83b2971914536 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 20 Jul 2014 14:46:50 +0800 Subject: [PATCH 213/499] Make a spelling difference consistent --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 65 ++++++++++++------------- rpcs3/Emu/GS/GL/GLGSRender.h | 8 +-- rpcs3/Emu/GS/RSXThread.cpp | 2 +- rpcs3/Emu/GS/RSXThread.h | 2 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 4 +- 5 files changed, 39 insertions(+), 42 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 8a7f082f83..34d5f43399 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -461,9 +461,6 @@ void GLGSRender::WriteDepthBuffer() return; } - // Reset the flag - m_set_context_dma_z = false; - u32 address = GetAddress(m_surface_offset_z, m_context_dma_z - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { @@ -491,7 +488,7 @@ void GLGSRender::WriteDepthBuffer() } -void GLGSRender::WriteColourBufferA() +void GLGSRender::WriteColorBufferA() { if (!m_set_context_dma_color_a) { @@ -501,16 +498,16 @@ void GLGSRender::WriteColourBufferA() u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad colour buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); + LOG_WARNING(RSX, "Bad color buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); return; } glReadBuffer(GL_COLOR_ATTACHMENT0); - checkForGlError("WriteColourBufferA(): glReadBuffer(GL_COLOR_ATTACHMENT0)"); + checkForGlError("WriteColorBufferA(): glReadBuffer(GL_COLOR_ATTACHMENT0)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[0]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColourBufferA(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferA(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { @@ -520,7 +517,7 @@ void GLGSRender::WriteColourBufferA() glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } -void GLGSRender::WriteColourBufferB() +void GLGSRender::WriteColorBufferB() { if (!m_set_context_dma_color_b) { @@ -530,16 +527,16 @@ void GLGSRender::WriteColourBufferB() u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad colour buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); + LOG_WARNING(RSX, "Bad color buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); return; } glReadBuffer(GL_COLOR_ATTACHMENT1); - checkForGlError("WriteColourBufferB(): glReadBuffer(GL_COLOR_ATTACHMENT1)"); + checkForGlError("WriteColorBufferB(): glReadBuffer(GL_COLOR_ATTACHMENT1)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[1]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColourBufferB(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferB(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { @@ -550,7 +547,7 @@ void GLGSRender::WriteColourBufferB() } -void GLGSRender::WriteColourBufferC() +void GLGSRender::WriteColorBufferC() { if (!m_set_context_dma_color_c) { @@ -560,16 +557,16 @@ void GLGSRender::WriteColourBufferC() u32 address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad colour buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); + LOG_WARNING(RSX, "Bad color buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); return; } glReadBuffer(GL_COLOR_ATTACHMENT2); - checkForGlError("WriteColourBufferC(): glReadBuffer(GL_COLOR_ATTACHMENT2)"); + checkForGlError("WriteColorBufferC(): glReadBuffer(GL_COLOR_ATTACHMENT2)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[2]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColourBufferC(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferC(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { @@ -579,7 +576,7 @@ void GLGSRender::WriteColourBufferC() glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } -void GLGSRender::WriteColourBufferD() +void GLGSRender::WriteColorBufferD() { if (!m_set_context_dma_color_d) { @@ -589,16 +586,16 @@ void GLGSRender::WriteColourBufferD() u32 address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad colour buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); + LOG_WARNING(RSX, "Bad color buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); return; } glReadBuffer(GL_COLOR_ATTACHMENT3); - checkForGlError("WriteColourBufferD(): glReadBuffer(GL_COLOR_ATTACHMENT3)"); + checkForGlError("WriteColorBufferD(): glReadBuffer(GL_COLOR_ATTACHMENT3)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[3]); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColourBufferD(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferD(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { @@ -614,35 +611,35 @@ void GLGSRender::WriteColorBuffers() glPixelStorei(GL_PACK_ROW_LENGTH, 0); glPixelStorei(GL_PACK_ALIGNMENT, 4); - switch(m_surface_colour_target) + switch(m_surface_color_target) { case CELL_GCM_SURFACE_TARGET_NONE: return; case CELL_GCM_SURFACE_TARGET_0: - WriteColourBufferA(); + WriteColorBufferA(); break; case CELL_GCM_SURFACE_TARGET_1: - WriteColourBufferB(); + WriteColorBufferB(); break; case CELL_GCM_SURFACE_TARGET_MRT1: - WriteColourBufferA(); - WriteColourBufferB(); + WriteColorBufferA(); + WriteColorBufferB(); break; case CELL_GCM_SURFACE_TARGET_MRT2: - WriteColourBufferA(); - WriteColourBufferB(); - WriteColourBufferC(); + WriteColorBufferA(); + WriteColorBufferB(); + WriteColorBufferC(); break; case CELL_GCM_SURFACE_TARGET_MRT3: - WriteColourBufferA(); - WriteColourBufferB(); - WriteColourBufferC(); - WriteColourBufferD(); + WriteColorBufferA(); + WriteColorBufferB(); + WriteColorBufferC(); + WriteColorBufferD(); break; } } @@ -802,7 +799,7 @@ void GLGSRender::InitDrawBuffers() static const GLenum draw_buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 }; - switch(m_surface_colour_target) + switch(m_surface_color_target) { case CELL_GCM_SURFACE_TARGET_NONE: break; @@ -828,7 +825,7 @@ void GLGSRender::InitDrawBuffers() break; default: - LOG_ERROR(RSX, "Bad surface colour target: %d", m_surface_colour_target); + LOG_ERROR(RSX, "Bad surface color target: %d", m_surface_color_target); break; } } @@ -1194,7 +1191,7 @@ void GLGSRender::Flip() checkForGlError("glScissor"); } - switch (m_surface_colour_target) + switch (m_surface_color_target) { case CELL_GCM_SURFACE_TARGET_0: case CELL_GCM_SURFACE_TARGET_1: diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index f327cf2091..8596ed0116 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -849,10 +849,10 @@ private: void WriteBuffers(); void WriteDepthBuffer(); void WriteColorBuffers(); - void WriteColourBufferA(); - void WriteColourBufferB(); - void WriteColourBufferC(); - void WriteColourBufferD(); + void WriteColorBufferA(); + void WriteColorBufferB(); + void WriteColorBufferC(); + void WriteColorBufferD(); void DrawObjects(); void InitDrawBuffers(); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index b8e5a58074..f7b40be108 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1368,7 +1368,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_SURFACE_COLOR_TARGET: { - m_surface_colour_target = ARGS(0); + m_surface_color_target = ARGS(0); } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 7f7fce9acf..a519e6ea58 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -379,7 +379,7 @@ public: u32 m_surface_offset_c; u32 m_surface_offset_d; u32 m_surface_offset_z; - u32 m_surface_colour_target; + u32 m_surface_color_target; // DMA context bool m_set_context_dma_color_a; diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 4b61ee5c34..3d5da159b7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -565,7 +565,7 @@ void SetupRsxRenderingStates(mem_ptr_t& cntxt) r.m_height = s_rescInternalInstance->m_dstHeight; r.m_surface_depth_format = 2; - r.m_surface_colour_target = 1; + r.m_surface_color_target = 1; if (IsPalInterpolate()) { @@ -606,7 +606,7 @@ void SetupSurfaces(mem_ptr_t& cntxt) r.m_surface_type = CELL_GCM_SURFACE_PITCH; r.m_surface_antialias = CELL_GCM_SURFACE_CENTER_1; r.m_surface_color_format = (u8)s_rescInternalInstance->m_pRescDsts->format; - r.m_surface_colour_target = (!isMrt) ? CELL_GCM_SURFACE_TARGET_0 : CELL_GCM_SURFACE_TARGET_MRT1; + r.m_surface_color_target = (!isMrt) ? CELL_GCM_SURFACE_TARGET_0 : CELL_GCM_SURFACE_TARGET_MRT1; //surface.colorLocation[0] = CELL_GCM_LOCATION_LOCAL; r.m_surface_offset_a = dstOffset0; r.m_surface_pitch_a = s_rescInternalInstance->m_dstPitch; From 1f46098b23d9c2e5603548cf225a50a474b33687 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 20 Jul 2014 21:03:41 +0400 Subject: [PATCH 214/499] Name fix (SPU JIT) Unnecessary check removed --- rpcs3/Emu/Cell/SPURecompiler.h | 2 +- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 9 +-------- rpcs3/Gui/MainFrame.cpp | 9 ++++----- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 0851c70a3e..6bdcddf1cb 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -3840,7 +3840,7 @@ private: void UNK(u32 code, u32 opcode, u32 gcode) { - UNK(fmt::Format("(SPURecompiler) Unimplemented opcode! (0x%08x, 0x%x, 0x%x)", code, opcode, gcode)); + UNK(fmt::Format("Unimplemented opcode! (0x%08x, 0x%x, 0x%x)", code, opcode, gcode)); } void UNK(const std::string& err) diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 52563b2e0d..fe005b6804 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -23,7 +23,7 @@ SPURecompilerCore::SPURecompilerCore(SPUThread& cpu) X86CpuUtil::detect(&inf); if (!inf.hasFeature(kX86CpuFeatureSse41)) { - LOG_ERROR(SPU, "SPU Recompiler requires SSE4.1 instruction set support"); + LOG_ERROR(SPU, "SPU JIT requires SSE4.1 instruction set support"); Emu.Pause(); } } @@ -169,13 +169,6 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) //ConLog.Write("DecodeMemory: pos=%d", pos); u32* ls = (u32*)&Memory[m_offset]; - if (!pos) - { - LOG_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(): ls_addr = 0"); - Emu.Pause(); - return 0; - } - if (entry[pos].pointer) { // check data (hard way) diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 8fe3b05371..705aa26494 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -429,12 +429,11 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes"); wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot"); - //cbox_cpu_decoder->Append("DisAsm"); - cbox_cpu_decoder->Append("Interpreter & DisAsm"); - cbox_cpu_decoder->Append("Interpreter"); + cbox_cpu_decoder->Append("PPU Interpreter & DisAsm"); + cbox_cpu_decoder->Append("PPU Interpreter"); - cbox_spu_decoder->Append("Interpreter"); - cbox_spu_decoder->Append("Recompiler"); + cbox_spu_decoder->Append("SPU Interpreter"); + cbox_spu_decoder->Append("SPU JIT (asmjit)"); for(int i=1; i Date: Sun, 20 Jul 2014 21:05:48 +0400 Subject: [PATCH 215/499] sys_ppu_thread_exit fix --- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp | 20 ++++++++++++++++---- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index f60e144710..a991acc993 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -10,12 +10,10 @@ extern Module *sysPrxForUser; -static const u32 PPU_THREAD_ID_INVALID = 0xFFFFFFFFU; +static const u32 PPU_THREAD_ID_INVALID = 0xFFFFFFFFU/*UUUUUUUUUUuuuuuuuuuu~~~~~~~~*/; -void sys_ppu_thread_exit(u64 errorcode) +void ppu_thread_exit(u64 errorcode) { - sysPrxForUser->Log("sys_ppu_thread_exit(0x%llx)", errorcode); - PPUThread& thr = GetCurrentPPUThread(); u32 tid = thr.GetId(); @@ -29,6 +27,20 @@ void sys_ppu_thread_exit(u64 errorcode) thr.Stop(); } +void sys_ppu_thread_exit(u64 errorcode) +{ + sysPrxForUser->Log("sys_ppu_thread_exit(0x%llx)", errorcode); + + ppu_thread_exit(errorcode); +} + +void sys_internal_ppu_thread_exit(u64 errorcode) +{ + sysPrxForUser->Log("sys_internal_ppu_thread_exit(0x%llx)", errorcode); + + ppu_thread_exit(errorcode); +} + s32 sys_ppu_thread_yield() { sysPrxForUser->Log("sys_ppu_thread_yield()"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h index ef99ca6012..7918118e99 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.h @@ -14,6 +14,7 @@ enum ppu_thread_flags : u64 // SysCalls void sys_ppu_thread_exit(u64 errorcode); +void sys_internal_ppu_thread_exit(u64 errorcode); s32 sys_ppu_thread_yield(); s32 sys_ppu_thread_join(u64 thread_id, mem64_t vptr); s32 sys_ppu_thread_detach(u64 thread_id); From 25aeb2e086d19afd8afd8065a349c4629b6b01c7 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 20 Jul 2014 21:13:07 +0400 Subject: [PATCH 216/499] SysCall table fixes --- rpcs3/Emu/SysCalls/SysCalls.cpp | 42 ++++++++++++++++----------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 48c1a4c107..e92997781f 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -23,7 +23,7 @@ static func_caller* sc_table[kSyscallTableLength] = null_func, bind_func(sys_process_getpid), //1 (0x001) bind_func(sys_process_wait_for_child), //2 (0x002) ROOT - bind_func(sys_process_exit), //3 (0x003) + null_func,//bind_func(sys_process_exit), //3 (0x003) bind_func(sys_process_get_status), //4 (0x004) DBG bind_func(sys_process_detach_child), //5 (0x005) DBG @@ -55,7 +55,7 @@ static func_caller* sc_table[kSyscallTableLength] = // Unused: 32-40 null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, - bind_func(sys_ppu_thread_exit), //41 (0x029) + bind_func(sys_internal_ppu_thread_exit), //41 (0x029) null_func, // bind_func(sys_ppu_thread_yield), //43 (0x02B) bind_func(sys_ppu_thread_join), //44 (0x02C) @@ -64,9 +64,9 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_ppu_thread_set_priority), //47 (0x02F) DBG bind_func(sys_ppu_thread_get_priority), //48 (0x030) bind_func(sys_ppu_thread_get_stack_information), //49 (0x031) - bind_func(sys_ppu_thread_stop), //50 (0x032) ROOT - bind_func(sys_ppu_thread_restart), //51 (0x033) ROOT - bind_func(sys_ppu_thread_create), //52 (0x034) DBG + null_func,//bind_func(sys_ppu_thread_stop), //50 (0x032) ROOT + null_func,//bind_func(sys_ppu_thread_restart), //51 (0x033) ROOT + null_func,//bind_func(sys_ppu_thread_create), //52 (0x034) DBG null_func,//bind_func(sys_ppu_thread_start), //53 (0x035) null_func,//bind_func(), //54 (0x036) ROOT null_func,//bind_func(), //55 (0x037) ROOT @@ -115,11 +115,11 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_semaphore_wait), //92 (0x05C) bind_func(sys_semaphore_trywait), //93 (0x05D) bind_func(sys_semaphore_post), //94 (0x05E) - bind_func(sys_lwmutex_create), //95 (0x05F) - bind_func(sys_lwmutex_destroy), //96 (0x060) - bind_func(sys_lwmutex_lock), //97 (0x061) - bind_func(sys_lwmutex_trylock), //98 (0x062) - bind_func(sys_lwmutex_unlock), //99 (0x063) + null_func,//bind_func(sys_lwmutex_create), //95 (0x05F) + null_func,//bind_func(sys_lwmutex_destroy), //96 (0x060) + null_func,//bind_func(sys_lwmutex_lock), //97 (0x061) + null_func,//bind_func(sys_lwmutex_trylock), //98 (0x062) + null_func,//bind_func(sys_lwmutex_unlock), //99 (0x063) bind_func(sys_mutex_create), //100 (0x064) bind_func(sys_mutex_destroy), //101 (0x065) bind_func(sys_mutex_lock), //102 (0x066) @@ -166,7 +166,7 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_time_set_timezone) //143 (0x08F) ROOT bind_func(sys_time_get_timezone), //144 (0x090) bind_func(sys_time_get_current_time), //145 (0x091) - bind_func(sys_time_get_system_time), //146 (0x092) ROOT + null_func,//bind_func(sys_time_get_system_time), //146 (0x092) ROOT bind_func(sys_time_get_timebase_frequency), //147 (0x093) null_func,//bind_func(sys_rwlock_trywlock) //148 (0x094) @@ -342,24 +342,24 @@ static func_caller* sc_table[kSyscallTableLength] = null_func, null_func, null_func, null_func, null_func, //474 null_func, null_func, null_func, null_func, null_func, //479 - bind_func(sys_prx_load_module), //480 (0x1E0) - bind_func(sys_prx_start_module), //481 (0x1E1) - bind_func(sys_prx_stop_module), //482 (0x1E2) - bind_func(sys_prx_unload_module), //483 (0x1E3) - bind_func(sys_prx_register_module), //484 (0x1E4) + null_func,//bind_func(sys_prx_load_module), //480 (0x1E0) + null_func,//bind_func(sys_prx_start_module), //481 (0x1E1) + null_func,//bind_func(sys_prx_stop_module), //482 (0x1E2) + null_func,//bind_func(sys_prx_unload_module), //483 (0x1E3) + null_func,//bind_func(sys_prx_register_module), //484 (0x1E4) bind_func(sys_prx_query_module), //485 (0x1E5) bind_func(sys_prx_register_library), //486 (0x1E6) - bind_func(sys_prx_unregister_library), //487 (0x1E7) + null_func,//bind_func(sys_prx_unregister_library), //487 (0x1E7) bind_func(sys_prx_link_library), //488 (0x1E8) bind_func(sys_prx_unlink_library), //489 (0x1E9) bind_func(sys_prx_query_library), //490 (0x1EA) null_func, //491 (0x1EB) null_func, //492 (0x1EC) null_func,//sys_prx_dbg_get_module_info //493 (0x1ED) - bind_func(sys_prx_get_module_list), //494 (0x1EE) - bind_func(sys_prx_get_module_info), //495 (0x1EF) - bind_func(sys_prx_get_module_id_by_name), //496 (0x1F0) - bind_func(sys_prx_load_module_on_memcontainer), //497 (0x1F1) + null_func,//bind_func(sys_prx_get_module_list), //494 (0x1EE) + null_func,//bind_func(sys_prx_get_module_info), //495 (0x1EF) + null_func,//bind_func(sys_prx_get_module_id_by_name), //496 (0x1F0) + null_func,//bind_func(sys_prx_load_module_on_memcontainer),//497 (0x1F1) bind_func(sys_prx_start), //498 (0x1F2) bind_func(sys_prx_stop), //499 (0x1F3) From 3d74112aa3ba03fd942a79b1036f0d254426a8eb Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 20 Jul 2014 21:13:35 +0400 Subject: [PATCH 217/499] sys_process_is_stack fixed --- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 6721a233c3..d114db9933 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -77,11 +77,10 @@ s64 sys_process_at_Exitspawn() int sys_process_is_stack(u32 p) { - PPCThread* CPU = GetCurrentPPCThread(); - if (p >= CPU->GetStackAddr() && p <= CPU->GetStackAddr() + CPU->GetStackSize()) - return 1; + sysPrxForUser->Log("sys_process_is_stack(p=0x%x)", p); - return 0; + // prx: compare high 4 bits with "0xD" + return (int)(bool)(p >= Memory.StackMem.GetStartAddr() && p <= Memory.StackMem.GetEndAddr()); } int sys_spu_printf_initialize(int a1, int a2, int a3, int a4, int a5) From 883885dc0b47ec4e4382bcd6ffaf448d2db9d36b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 20 Jul 2014 21:14:04 +0400 Subject: [PATCH 218/499] cellSyncMutex fixed --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 69 +++++++------------------ rpcs3/Emu/SysCalls/Modules/cellSync.h | 38 ++++++++++++++ rpcs3/emucore.vcxproj | 3 +- rpcs3/emucore.vcxproj.filters | 5 +- 4 files changed, 64 insertions(+), 51 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellSync.h diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index e66b8a4f3a..604aab4902 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -4,51 +4,17 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "cellSync.h" + //void cellSync_init(); //Module cellSync("cellSync", cellSync_init); Module *cellSync = nullptr; -// Return Codes -enum -{ - CELL_SYNC_ERROR_AGAIN = 0x80410101, - CELL_SYNC_ERROR_INVAL = 0x80410102, - CELL_SYNC_ERROR_NOMEM = 0x80410104, - CELL_SYNC_ERROR_DEADLK = 0x80410108, - CELL_SYNC_ERROR_PERM = 0x80410109, - CELL_SYNC_ERROR_BUSY = 0x8041010A, - CELL_SYNC_ERROR_STAT = 0x8041010F, - CELL_SYNC_ERROR_ALIGN = 0x80410110, - CELL_SYNC_ERROR_NULL_POINTER = 0x80410111, - CELL_SYNC_ERROR_NOT_SUPPORTED_THREAD = 0x80410112, - CELL_SYNC_ERROR_NO_NOTIFIER = 0x80410113, - CELL_SYNC_ERROR_NO_SPU_CONTEXT_STORAGE = 0x80410114, -}; - -struct CellSyncMutex -{ - be_t m_freed; - be_t m_order; - - volatile u32& m_data() - { - return *reinterpret_cast(this); - }; - /* - (???) Initialize: set zeros - (???) Lock: increase m_order and wait until m_freed == old m_order - (???) Unlock: increase m_freed - (???) TryLock: ????? - */ -}; - -static_assert(sizeof(CellSyncMutex) == 4, "CellSyncMutex: wrong sizeof"); - int cellSyncMutexInitialize(mem_ptr_t mutex) { cellSync->Log("cellSyncMutexInitialize(mutex=0x%x)", mutex.GetAddr()); - if (!mutex.IsGood()) + if (!mutex) { return CELL_SYNC_ERROR_NULL_POINTER; } @@ -57,7 +23,8 @@ int cellSyncMutexInitialize(mem_ptr_t mutex) return CELL_SYNC_ERROR_ALIGN; } - mutex->m_data() = 0; + // prx: set zero and sync + InterlockedExchange(&mutex->m_data(), 0); return CELL_OK; } @@ -65,7 +32,7 @@ int cellSyncMutexLock(mem_ptr_t mutex) { cellSync->Log("cellSyncMutexLock(mutex=0x%x)", mutex.GetAddr()); - if (!mutex.IsGood()) + if (!mutex) { return CELL_SYNC_ERROR_NULL_POINTER; } @@ -74,6 +41,7 @@ int cellSyncMutexLock(mem_ptr_t mutex) return CELL_SYNC_ERROR_ALIGN; } + // prx: increase u16 and remember its old value be_t old_order; while (true) { @@ -82,11 +50,12 @@ int cellSyncMutexLock(mem_ptr_t mutex) new_mutex.m_data() = old_data; old_order = new_mutex.m_order; - new_mutex.m_order++; + new_mutex.m_order++; // increase m_order if (InterlockedCompareExchange(&mutex->m_data(), new_mutex.m_data(), old_data) == old_data) break; } - while (old_order != mutex->m_freed) + // prx: wait until another u16 value == old value + while (old_order != mutex->m_freed) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) @@ -95,7 +64,9 @@ int cellSyncMutexLock(mem_ptr_t mutex) break; } } - _mm_mfence(); + + // prx: sync + InterlockedCompareExchange(&mutex->m_data(), 0, 0); return CELL_OK; } @@ -103,7 +74,7 @@ int cellSyncMutexTryLock(mem_ptr_t mutex) { cellSync->Log("cellSyncMutexTryLock(mutex=0x%x)", mutex.GetAddr()); - if (!mutex.IsGood()) + if (!mutex) { return CELL_SYNC_ERROR_NULL_POINTER; } @@ -112,34 +83,32 @@ int cellSyncMutexTryLock(mem_ptr_t mutex) return CELL_SYNC_ERROR_ALIGN; } - int res; - while (true) { const u32 old_data = mutex->m_data(); CellSyncMutex new_mutex; new_mutex.m_data() = old_data; + // prx: compare two u16 values and exit if not equal if (new_mutex.m_order != new_mutex.m_freed) { - res = CELL_SYNC_ERROR_BUSY; + return CELL_SYNC_ERROR_BUSY; } else { new_mutex.m_order++; - res = CELL_OK; } if (InterlockedCompareExchange(&mutex->m_data(), new_mutex.m_data(), old_data) == old_data) break; } - return res; + return CELL_OK; } int cellSyncMutexUnlock(mem_ptr_t mutex) { cellSync->Log("cellSyncMutexUnlock(mutex=0x%x)", mutex.GetAddr()); - if (!mutex.IsGood()) + if (!mutex) { return CELL_SYNC_ERROR_NULL_POINTER; } @@ -148,6 +117,8 @@ int cellSyncMutexUnlock(mem_ptr_t mutex) return CELL_SYNC_ERROR_ALIGN; } + InterlockedCompareExchange(&mutex->m_data(), 0, 0); + while (true) { const u32 old_data = mutex->m_data(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h new file mode 100644 index 0000000000..36a768986e --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -0,0 +1,38 @@ +#pragma once + +// Return Codes +enum +{ + CELL_SYNC_ERROR_AGAIN = 0x80410101, + CELL_SYNC_ERROR_INVAL = 0x80410102, + CELL_SYNC_ERROR_NOMEM = 0x80410104, + CELL_SYNC_ERROR_DEADLK = 0x80410108, + CELL_SYNC_ERROR_PERM = 0x80410109, + CELL_SYNC_ERROR_BUSY = 0x8041010A, + CELL_SYNC_ERROR_STAT = 0x8041010F, + CELL_SYNC_ERROR_ALIGN = 0x80410110, + CELL_SYNC_ERROR_NULL_POINTER = 0x80410111, + CELL_SYNC_ERROR_NOT_SUPPORTED_THREAD = 0x80410112, + CELL_SYNC_ERROR_NO_NOTIFIER = 0x80410113, + CELL_SYNC_ERROR_NO_SPU_CONTEXT_STORAGE = 0x80410114, +}; + +struct CellSyncMutex +{ + be_t m_freed; + be_t m_order; + + volatile u32& m_data() + { + return *reinterpret_cast(this); + }; +}; + +static_assert(sizeof(CellSyncMutex) == 4, "CellSyncMutex: wrong size"); + +struct CellSyncBarrier +{ + be_t m_data; +}; + +static_assert(sizeof(CellSyncBarrier) == 4, "CellSyncBarrier: wrong size"); \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 058d68e32b..2ee34fa688 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -352,6 +352,7 @@ + @@ -560,4 +561,4 @@ - + \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 36357d7e1a..446d1a2613 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1090,5 +1090,8 @@ Emu\Memory + + Emu\SysCalls\Modules + - + \ No newline at end of file From bba74b90568ef94f98b6a7c05eb0bddd4af85f46 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 20 Jul 2014 21:52:27 +0400 Subject: [PATCH 219/499] Compilation fix --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 604aab4902..69c9f1ab12 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -24,7 +24,8 @@ int cellSyncMutexInitialize(mem_ptr_t mutex) } // prx: set zero and sync - InterlockedExchange(&mutex->m_data(), 0); + mutex->m_data = 0; + InterlockedCompareExchange(&mutex->m_data(), 0, 0); return CELL_OK; } From 1f64087a3be90b41247991979c6a54ac575566d6 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 20 Jul 2014 21:59:59 +0400 Subject: [PATCH 220/499] Fix of fix (damned crutch) --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 69c9f1ab12..68981edf65 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -24,7 +24,7 @@ int cellSyncMutexInitialize(mem_ptr_t mutex) } // prx: set zero and sync - mutex->m_data = 0; + mutex->m_data() = 0; InterlockedCompareExchange(&mutex->m_data(), 0, 0); return CELL_OK; } From fe49046a961fa2551739df588a3422d0980b7efb Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 21 Jul 2014 02:30:16 +0400 Subject: [PATCH 221/499] sys_spinlock fixed --- rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp | 48 ++++++++++++++----------- rpcs3/Emu/SysCalls/lv2/sys_spinlock.h | 13 +++---- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp index 9d70571088..358b234f37 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp @@ -4,53 +4,59 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" + #include "sys_spinlock.h" SysCallBase sys_spinlock("sys_spinlock"); -void sys_spinlock_initialize(mem_ptr_t lock) +void sys_spinlock_initialize(mem_ptr_t>> lock) { sys_spinlock.Log("sys_spinlock_initialize(lock_addr=0x%x)", lock.GetAddr()); - lock->mutex.initialize(); + // prx: set 0 and sync + *lock = be_t::MakeFromBE(0); } -void sys_spinlock_lock(mem_ptr_t lock) +void sys_spinlock_lock(mem_ptr_t>> lock) { sys_spinlock.Log("sys_spinlock_lock(lock_addr=0x%x)", lock.GetAddr()); - be_t tid = be_t::MakeFromLE(GetCurrentPPUThread().GetId()); - switch (lock->mutex.lock(tid)) + // prx: exchange with 0xabadcafe, repeat until exchanged with 0 + while (lock->exchange(be_t::MakeFromBE(se32(0xabadcafe))).ToBE()) { - case SMR_ABORT: LOG_WARNING(HLE, "sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); break; - case SMR_DEADLOCK: LOG_ERROR(HLE, "sys_spinlock_lock(0x%x) reached deadlock", lock.GetAddr()); break; // ??? - default: break; + while (lock->load(std::memory_order_relaxed).ToBE()) + { + if (Emu.IsStopped()) + { + break; + } + } + + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); + break; + } } } -s32 sys_spinlock_trylock(mem_ptr_t lock) +s32 sys_spinlock_trylock(mem_ptr_t>> lock) { sys_spinlock.Log("sys_spinlock_trylock(lock_addr=0x%x)", lock.GetAddr()); - be_t tid = be_t::MakeFromLE(GetCurrentPPUThread().GetId()); - switch (lock->mutex.trylock(tid)) + // prx: exchange with 0xabadcafe, translate exchanged value + if (lock->exchange(be_t::MakeFromBE(se32(0xabadcafe))).ToBE()) { - case SMR_FAILED: return CELL_EBUSY; - case SMR_ABORT: LOG_WARNING(HLE, "sys_spinlock_trylock(0x%x) aborted", lock.GetAddr()); break; - case SMR_DEADLOCK: LOG_ERROR(HLE, "sys_spinlock_trylock(0x%x) reached deadlock", lock.GetAddr()); break; - default: break; + return CELL_EBUSY; } return CELL_OK; } -void sys_spinlock_unlock(mem_ptr_t lock) +void sys_spinlock_unlock(mem_ptr_t>> lock) { sys_spinlock.Log("sys_spinlock_unlock(lock_addr=0x%x)", lock.GetAddr()); - while(true) - { - if (lock->mutex.unlock(lock->mutex.GetOwner()) != SMR_PERMITTED) - break; - } + // prx: sync and set 0 + *lock = be_t::MakeFromBE(0); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h index ed81750400..0dfaa371fc 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h @@ -1,12 +1,7 @@ #pragma once -struct spinlock -{ - SMutexBE mutex; -}; - // SysCalls -void sys_spinlock_initialize(mem_ptr_t lock); -void sys_spinlock_lock(mem_ptr_t lock); -s32 sys_spinlock_trylock(mem_ptr_t lock); -void sys_spinlock_unlock(mem_ptr_t lock); +void sys_spinlock_initialize(mem_ptr_t>> lock); +void sys_spinlock_lock(mem_ptr_t>> lock); +s32 sys_spinlock_trylock(mem_ptr_t>> lock); +void sys_spinlock_unlock(mem_ptr_t>> lock); From 9c2fe3b25d4f2b5b52882537ff713ff6d1324dc3 Mon Sep 17 00:00:00 2001 From: DHrpcs3 Date: Mon, 21 Jul 2014 09:57:07 +0000 Subject: [PATCH 222/499] Revert "Regression fix #343" --- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index ffbd115437..a3f43a09dc 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -248,9 +248,9 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) std::string GLFragmentDecompilerThread::BuildCode() { //main += fmt::Format("\tgl_FragColor = %c0;\n", m_ctrl & 0x40 ? 'r' : 'h'); - AddCode(m_parr.AddParam(PARAM_OUT, "vec4", "ocol0", 0) + " = " + (m_ctrl & 0x40 ? "r0" : "h0") + ";\n"); static const std::pair table[] = { + { "ocol0", m_ctrl & 0x40 ? "r0" : "h0" }, { "ocol1", m_ctrl & 0x40 ? "r2" : "h2" }, { "ocol2", m_ctrl & 0x40 ? "r3" : "h4" }, { "ocol3", m_ctrl & 0x40 ? "r4" : "h6" }, @@ -260,7 +260,7 @@ std::string GLFragmentDecompilerThread::BuildCode() for (int i = 0; i < sizeof(table) / sizeof(*table); ++i) { if (m_parr.HasParam(PARAM_NONE, "vec4", table[i].second)) - AddCode(m_parr.AddParam(PARAM_OUT, "vec4", table[i].first, i+1) + " = " + table[i].second + ";"); + AddCode(m_parr.AddParam(PARAM_OUT, "vec4", table[i].first, i) + " = " + table[i].second + ";"); } if (m_ctrl & 0xe) main += "\tgl_FragDepth = r1.z;\n"; From 640de8157104ebbd66bd258e0dd4b712f83ab4a3 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 21 Jul 2014 18:42:43 +0400 Subject: [PATCH 223/499] Variadic templates for module logs Two new module log types: Todo() and Notice() --- rpcs3/Emu/SysCalls/Modules.cpp | 54 ---------------- rpcs3/Emu/SysCalls/Modules.h | 65 +++++++++++++++++--- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp | 46 +++++++------- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 22 +++---- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 8 +-- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 52 ++++++++-------- rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 8 +-- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 14 ++--- rpcs3/Emu/SysCalls/Modules/libsynth2.cpp | 34 +++++----- rpcs3/Emu/SysCalls/SysCalls.h | 2 +- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 12 ++-- rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 8 +-- rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 20 +++--- rpcs3/Emu/SysCalls/lv2/sys_prx.cpp | 44 ++++++------- rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp | 24 ++++---- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 8 +-- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 6 +- 29 files changed, 233 insertions(+), 235 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index b538f37779..4aa50a02fa 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -158,60 +158,6 @@ void Module::SetName(const std::string& name) m_name = name; } -void Module::Log(const u32 id, std::string fmt, ...) -{ - if(Ini.HLELogging.GetValue()) - { - va_list list; - va_start(list, fmt); - LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::FormatV(fmt, list)); - va_end(list); - } -} - -void Module::Log(std::string fmt, ...) -{ - if(Ini.HLELogging.GetValue()) - { - va_list list; - va_start(list, fmt); - LOG_NOTICE(HLE, GetName() + ": " + fmt::FormatV(fmt, list)); - va_end(list); - } -} - -void Module::Warning(const u32 id, std::string fmt, ...) -{ - va_list list; - va_start(list, fmt); - LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::FormatV(fmt, list)); - va_end(list); -} - -void Module::Warning(std::string fmt, ...) -{ - va_list list; - va_start(list, fmt); - LOG_WARNING(HLE, GetName() + " warning: " + fmt::FormatV(fmt, list)); - va_end(list); -} - -void Module::Error(const u32 id, std::string fmt, ...) -{ - va_list list; - va_start(list, fmt); - LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::FormatV(fmt, list)); - va_end(list); -} - -void Module::Error(std::string fmt, ...) -{ - va_list list; - va_start(list, fmt); - LOG_ERROR(HLE, GetName() + " error: " + fmt::FormatV(fmt, list)); - va_end(list); -} - bool Module::CheckID(u32 id) const { return Emu.GetIdManager().CheckID(id) && Emu.GetIdManager().GetID(id).m_name == GetName(); diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index 31947f14c0..b65eba3f4c 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -77,15 +77,66 @@ public: void SetName(const std::string& name); public: - //TODO: use variadic function templates here to be able to use string references and forward all arguments without copying - void Log(const u32 id, std::string fmt, ...); - void Log(std::string fmt, ...); + bool IsLogging() + { + return Ini.HLELogging.GetValue(); + } - void Warning(const u32 id, std::string fmt, ...); - void Warning(std::string fmt, ...); + template void Notice(const u32 id, const char* fmt, Targs... args) + { + LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::Format(fmt, args...)); + } - void Error(const u32 id, std::string fmt, ...); - void Error(std::string fmt, ...); + template void Notice(const char* fmt, Targs... args) + { + LOG_NOTICE(HLE, GetName() + ": " + fmt::Format(fmt, args...)); + } + + template __forceinline void Log(const char* fmt, Targs... args) + { + if (IsLogging()) + { + Notice(fmt, args...); + } + } + + template __forceinline void Log(const u32 id, const char* fmt, Targs... args) + { + if (IsLogging()) + { + Notice(id, fmt, args...); + } + } + + template void Warning(const u32 id, const char* fmt, Targs... args) + { + LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::Format(fmt, args...)); + } + + template void Warning(const char* fmt, Targs... args) + { + LOG_WARNING(HLE, GetName() + " warning: " + fmt::Format(fmt, args...)); + } + + template void Error(const u32 id, const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::Format(fmt, args...)); + } + + template void Error(const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + " error: " + fmt::Format(fmt, args...)); + } + + template void Todo(const u32 id, const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + fmt::Format("[%d] TODO: ", id) + fmt::Format(fmt, args...)); + } + + template void Todo(const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + " TODO: " + fmt::Format(fmt, args...)); + } bool CheckID(u32 id) const; template bool CheckId(u32 id, T*& data) diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 63caf2f4b1..7a05b506a7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -534,7 +534,7 @@ bool adecCheckType(AudioCodecType type) case CELL_ADEC_TYPE_CELP: case CELL_ADEC_TYPE_M4AAC: case CELL_ADEC_TYPE_CELP8: - cellAdec->Error("Unimplemented audio codec type (%d)", type); + cellAdec->Todo("Unimplemented audio codec type (%d)", type); break; default: return false; @@ -640,7 +640,7 @@ int cellAdecStartSeq(u32 handle, u32 param_addr) } else*/ { - cellAdec->Warning("cellAdecStartSeq: (TODO) initialization"); + cellAdec->Todo("cellAdecStartSeq(): initialization"); } adec->job.Push(task); diff --git a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp index ef89f02ab4..fea80fdb1c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp @@ -10,7 +10,7 @@ Module *cellAtrac = nullptr; int cellAtracSetDataAndGetMemSize(mem_ptr_t pHandle, u32 pucBufferAddr, u32 uiReadByte, u32 uiBufferByte, mem32_t puiWorkMemByte) { - cellAtrac->Error("cellAtracSetDataAndGetMemSize(pHandle=0x%x, pucBufferAddr=0x%x, uiReadByte=0x%x, uiBufferByte=0x%x, puiWorkMemByte_addr=0x%x)", + cellAtrac->Todo("cellAtracSetDataAndGetMemSize(pHandle=0x%x, pucBufferAddr=0x%x, uiReadByte=0x%x, uiBufferByte=0x%x, puiWorkMemByte_addr=0x%x)", pHandle.GetAddr(), pucBufferAddr, uiReadByte, uiBufferByte, puiWorkMemByte.GetAddr()); puiWorkMemByte = 0x1000; // unproved @@ -19,7 +19,7 @@ int cellAtracSetDataAndGetMemSize(mem_ptr_t pHandle, u32 pucBuf int cellAtracCreateDecoder(mem_ptr_t pHandle, u32 pucWorkMem_addr, u32 uiPpuThreadPriority, u32 uiSpuThreadPriority) { - cellAtrac->Error("cellAtracCreateDecoder(pHandle=0x%x, pucWorkMem_addr=0x%x, uiPpuThreadPriority=%d, uiSpuThreadPriority=%d)", + cellAtrac->Todo("cellAtracCreateDecoder(pHandle=0x%x, pucWorkMem_addr=0x%x, uiPpuThreadPriority=%d, uiSpuThreadPriority=%d)", pHandle.GetAddr(), pucWorkMem_addr, uiPpuThreadPriority, uiSpuThreadPriority); pHandle->data.pucWorkMem_addr = pucWorkMem_addr; @@ -28,7 +28,7 @@ int cellAtracCreateDecoder(mem_ptr_t pHandle, u32 pucWorkMem_ad int cellAtracCreateDecoderExt(mem_ptr_t pHandle, u32 pucWorkMem_addr, u32 uiPpuThreadPriority, mem_ptr_t pExtRes) { - cellAtrac->Error("cellAtracCreateDecoderExt(pHandle=0x%x, pucWorkMem_addr=0x%x, uiPpuThreadPriority=%d, pExtRes_addr=0x%x)", + cellAtrac->Todo("cellAtracCreateDecoderExt(pHandle=0x%x, pucWorkMem_addr=0x%x, uiPpuThreadPriority=%d, pExtRes_addr=0x%x)", pHandle.GetAddr(), pucWorkMem_addr, uiPpuThreadPriority, pExtRes.GetAddr()); pHandle->data.pucWorkMem_addr = pucWorkMem_addr; @@ -37,13 +37,13 @@ int cellAtracCreateDecoderExt(mem_ptr_t pHandle, u32 pucWorkMem int cellAtracDeleteDecoder(mem_ptr_t pHandle) { - cellAtrac->Error("cellAtracDeleteDecoder(pHandle=0x%x)", pHandle.GetAddr()); + cellAtrac->Todo("cellAtracDeleteDecoder(pHandle=0x%x)", pHandle.GetAddr()); return CELL_OK; } int cellAtracDecode(mem_ptr_t pHandle, u32 pfOutAddr, mem32_t puiSamples, mem32_t puiFinishflag, mem32_t piRemainFrame) { - cellAtrac->Error("cellAtracDecode(pHandle=0x%x, pfOutAddr=0x%x, puiSamples_addr=0x%x, puiFinishFlag_addr=0x%x, piRemainFrame_addr=0x%x)", + cellAtrac->Todo("cellAtracDecode(pHandle=0x%x, pfOutAddr=0x%x, puiSamples_addr=0x%x, puiFinishFlag_addr=0x%x, piRemainFrame_addr=0x%x)", pHandle.GetAddr(), pfOutAddr, puiSamples.GetAddr(), puiFinishflag.GetAddr(), piRemainFrame.GetAddr()); puiSamples = 0; @@ -54,7 +54,7 @@ int cellAtracDecode(mem_ptr_t pHandle, u32 pfOutAddr, mem32_t p int cellAtracGetStreamDataInfo(mem_ptr_t pHandle, mem32_t ppucWritePointer, mem32_t puiWritableByte, mem32_t puiReadPosition) { - cellAtrac->Error("cellAtracGetStreamDataInfo(pHandle=0x%x, ppucWritePointer_addr=0x%x, puiWritableByte_addr=0x%x, puiReadPosition_addr=0x%x)", + cellAtrac->Todo("cellAtracGetStreamDataInfo(pHandle=0x%x, ppucWritePointer_addr=0x%x, puiWritableByte_addr=0x%x, puiReadPosition_addr=0x%x)", pHandle.GetAddr(), ppucWritePointer.GetAddr(), puiWritableByte.GetAddr(), puiReadPosition.GetAddr()); ppucWritePointer = pHandle->data.pucWorkMem_addr; @@ -65,13 +65,13 @@ int cellAtracGetStreamDataInfo(mem_ptr_t pHandle, mem32_t ppucW int cellAtracAddStreamData(mem_ptr_t pHandle, u32 uiAddByte) { - cellAtrac->Error("cellAtracAddStreamData(pHandle=0x%x, uiAddByte=0x%x)", pHandle.GetAddr(), uiAddByte); + cellAtrac->Todo("cellAtracAddStreamData(pHandle=0x%x, uiAddByte=0x%x)", pHandle.GetAddr(), uiAddByte); return CELL_OK; } int cellAtracGetRemainFrame(mem_ptr_t pHandle, mem32_t piRemainFrame) { - cellAtrac->Error("cellAtracGetRemainFrame(pHandle=0x%x, piRemainFrame_addr=0x%x)", pHandle.GetAddr(), piRemainFrame.GetAddr()); + cellAtrac->Todo("cellAtracGetRemainFrame(pHandle=0x%x, piRemainFrame_addr=0x%x)", pHandle.GetAddr(), piRemainFrame.GetAddr()); piRemainFrame = CELL_ATRAC_ALLDATA_IS_ON_MEMORY; return CELL_OK; @@ -79,7 +79,7 @@ int cellAtracGetRemainFrame(mem_ptr_t pHandle, mem32_t piRemain int cellAtracGetVacantSize(mem_ptr_t pHandle, mem32_t puiVacantSize) { - cellAtrac->Error("cellAtracGetVacantSize(pHandle=0x%x, puiVacantSize_addr=0x%x)", pHandle.GetAddr(), puiVacantSize.GetAddr()); + cellAtrac->Todo("cellAtracGetVacantSize(pHandle=0x%x, puiVacantSize_addr=0x%x)", pHandle.GetAddr(), puiVacantSize.GetAddr()); puiVacantSize = 0x1000; return CELL_OK; @@ -87,13 +87,13 @@ int cellAtracGetVacantSize(mem_ptr_t pHandle, mem32_t puiVacant int cellAtracIsSecondBufferNeeded(mem_ptr_t pHandle) { - cellAtrac->Error("cellAtracIsSecondBufferNeeded(pHandle=0x%x)", pHandle.GetAddr()); + cellAtrac->Todo("cellAtracIsSecondBufferNeeded(pHandle=0x%x)", pHandle.GetAddr()); return CELL_OK; } int cellAtracGetSecondBufferInfo(mem_ptr_t pHandle, mem32_t puiReadPosition, mem32_t puiDataByte) { - cellAtrac->Error("cellAtracGetSecondBufferInfo(pHandle=0x%x, puiReadPosition_addr=0x%x, puiDataByte_addr=0x%x)", + cellAtrac->Todo("cellAtracGetSecondBufferInfo(pHandle=0x%x, puiReadPosition_addr=0x%x, puiDataByte_addr=0x%x)", pHandle.GetAddr(), puiReadPosition.GetAddr(), puiDataByte.GetAddr()); puiReadPosition = 0; @@ -103,14 +103,14 @@ int cellAtracGetSecondBufferInfo(mem_ptr_t pHandle, mem32_t pui int cellAtracSetSecondBuffer(mem_ptr_t pHandle, u32 pucSecondBufferAddr, u32 uiSecondBufferByte) { - cellAtrac->Error("cellAtracSetSecondBuffer(pHandle=0x%x, pucSecondBufferAddr=0x%x, uiSecondBufferByte=0x%x)", + cellAtrac->Todo("cellAtracSetSecondBuffer(pHandle=0x%x, pucSecondBufferAddr=0x%x, uiSecondBufferByte=0x%x)", pHandle.GetAddr(), pucSecondBufferAddr, uiSecondBufferByte); return CELL_OK; } int cellAtracGetChannel(mem_ptr_t pHandle, mem32_t puiChannel) { - cellAtrac->Error("cellAtracGetChannel(pHandle=0x%x, puiChannel_addr=0x%x)", pHandle.GetAddr(), puiChannel.GetAddr()); + cellAtrac->Todo("cellAtracGetChannel(pHandle=0x%x, puiChannel_addr=0x%x)", pHandle.GetAddr(), puiChannel.GetAddr()); puiChannel = 2; return CELL_OK; @@ -118,7 +118,7 @@ int cellAtracGetChannel(mem_ptr_t pHandle, mem32_t puiChannel) int cellAtracGetMaxSample(mem_ptr_t pHandle, mem32_t puiMaxSample) { - cellAtrac->Error("cellAtracGetMaxSample(pHandle=0x%x, puiMaxSample_addr=0x%x)", pHandle.GetAddr(), puiMaxSample.GetAddr()); + cellAtrac->Todo("cellAtracGetMaxSample(pHandle=0x%x, puiMaxSample_addr=0x%x)", pHandle.GetAddr(), puiMaxSample.GetAddr()); puiMaxSample = 512; return CELL_OK; @@ -126,7 +126,7 @@ int cellAtracGetMaxSample(mem_ptr_t pHandle, mem32_t puiMaxSamp int cellAtracGetNextSample(mem_ptr_t pHandle, mem32_t puiNextSample) { - cellAtrac->Error("cellAtracGetNextSample(pHandle=0x%x, puiNextSample_addr=0x%x)", pHandle.GetAddr(), puiNextSample.GetAddr()); + cellAtrac->Todo("cellAtracGetNextSample(pHandle=0x%x, puiNextSample_addr=0x%x)", pHandle.GetAddr(), puiNextSample.GetAddr()); puiNextSample = 0; return CELL_OK; @@ -134,7 +134,7 @@ int cellAtracGetNextSample(mem_ptr_t pHandle, mem32_t puiNextSa int cellAtracGetSoundInfo(mem_ptr_t pHandle, mem32_t piEndSample, mem32_t piLoopStartSample, mem32_t piLoopEndSample) { - cellAtrac->Error("cellAtracGetSoundInfo(pHandle=0x%x, piEndSample_addr=0x%x, piLoopStartSample_addr=0x%x, piLoopEndSample_addr=0x%x)", + cellAtrac->Todo("cellAtracGetSoundInfo(pHandle=0x%x, piEndSample_addr=0x%x, piLoopStartSample_addr=0x%x, piLoopEndSample_addr=0x%x)", pHandle.GetAddr(), piEndSample.GetAddr(), piLoopStartSample.GetAddr(), piLoopEndSample.GetAddr()); piEndSample = 0; @@ -145,7 +145,7 @@ int cellAtracGetSoundInfo(mem_ptr_t pHandle, mem32_t piEndSampl int cellAtracGetNextDecodePosition(mem_ptr_t pHandle, mem32_t puiSamplePosition) { - cellAtrac->Error("cellAtracGetNextDecodePosition(pHandle=0x%x, puiSamplePosition_addr=0x%x)", + cellAtrac->Todo("cellAtracGetNextDecodePosition(pHandle=0x%x, puiSamplePosition_addr=0x%x)", pHandle.GetAddr(), puiSamplePosition.GetAddr()); puiSamplePosition = 0; @@ -154,7 +154,7 @@ int cellAtracGetNextDecodePosition(mem_ptr_t pHandle, mem32_t p int cellAtracGetBitrate(mem_ptr_t pHandle, mem32_t puiBitrate) { - cellAtrac->Error("cellAtracGetBitrate(pHandle=0x%x, puiBitrate_addr=0x%x)", + cellAtrac->Todo("cellAtracGetBitrate(pHandle=0x%x, puiBitrate_addr=0x%x)", pHandle.GetAddr(), puiBitrate.GetAddr()); puiBitrate = 128; @@ -163,7 +163,7 @@ int cellAtracGetBitrate(mem_ptr_t pHandle, mem32_t puiBitrate) int cellAtracGetLoopInfo(mem_ptr_t pHandle, mem32_t piLoopNum, mem32_t puiLoopStatus) { - cellAtrac->Error("cellAtracGetLoopInfo(pHandle=0x%x, piLoopNum_addr=0x%x, puiLoopStatus_addr=0x%x)", + cellAtrac->Todo("cellAtracGetLoopInfo(pHandle=0x%x, piLoopNum_addr=0x%x, puiLoopStatus_addr=0x%x)", pHandle.GetAddr(), piLoopNum.GetAddr(), puiLoopStatus.GetAddr()); piLoopNum = 0; @@ -173,13 +173,13 @@ int cellAtracGetLoopInfo(mem_ptr_t pHandle, mem32_t piLoopNum, int cellAtracSetLoopNum(mem_ptr_t pHandle, int iLoopNum) { - cellAtrac->Error("cellAtracSetLoopNum(pHandle=0x%x, iLoopNum=0x%x)", pHandle.GetAddr(), iLoopNum); + cellAtrac->Todo("cellAtracSetLoopNum(pHandle=0x%x, iLoopNum=0x%x)", pHandle.GetAddr(), iLoopNum); return CELL_OK; } int cellAtracGetBufferInfoForResetting(mem_ptr_t pHandle, u32 uiSample, mem_ptr_t pBufferInfo) { - cellAtrac->Error("cellAtracGetBufferInfoForResetting(pHandle=0x%x, uiSample=0x%x, pBufferInfo_addr=0x%x)", + cellAtrac->Todo("cellAtracGetBufferInfoForResetting(pHandle=0x%x, uiSample=0x%x, pBufferInfo_addr=0x%x)", pHandle.GetAddr(), uiSample, pBufferInfo.GetAddr()); pBufferInfo->pucWriteAddr = pHandle->data.pucWorkMem_addr; @@ -191,14 +191,14 @@ int cellAtracGetBufferInfoForResetting(mem_ptr_t pHandle, u32 u int cellAtracResetPlayPosition(mem_ptr_t pHandle, u32 uiSample, u32 uiWriteByte) { - cellAtrac->Error("cellAtracResetPlayPosition(pHandle=0x%x, uiSample=0x%x, uiWriteByte=0x%x)", + cellAtrac->Todo("cellAtracResetPlayPosition(pHandle=0x%x, uiSample=0x%x, uiWriteByte=0x%x)", pHandle.GetAddr(), uiSample, uiWriteByte); return CELL_OK; } int cellAtracGetInternalErrorInfo(mem_ptr_t pHandle, mem32_t piResult) { - cellAtrac->Error("cellAtracGetInternalErrorInfo(pHandle=0x%x, piResult_addr=0x%x)", + cellAtrac->Todo("cellAtracGetInternalErrorInfo(pHandle=0x%x, piResult_addr=0x%x)", pHandle.GetAddr(), piResult.GetAddr()); piResult = 0; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 8a275aed96..5461ac3134 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -736,7 +736,7 @@ int cellAudioGetPortBlockTag(u32 portNum, u64 blockNo, mem64_t tag) int cellAudioSetPortLevel(u32 portNum, float level) { - cellAudio->Error("cellAudioSetPortLevel(portNum=0x%x, level=%f)", portNum, level); + cellAudio->Todo("cellAudioSetPortLevel(portNum=0x%x, level=%f)", portNum, level); return CELL_OK; } @@ -771,7 +771,7 @@ int cellAudioCreateNotifyEventQueue(mem32_t id, mem64_t key) int cellAudioCreateNotifyEventQueueEx(mem32_t id, mem64_t key, u32 iFlags) { - cellAudio->Error("cellAudioCreateNotifyEventQueueEx(id_addr=0x%x, key_addr=0x%x, iFlags=0x%x)", id.GetAddr(), key.GetAddr(), iFlags); + cellAudio->Todo("cellAudioCreateNotifyEventQueueEx(id_addr=0x%x, key_addr=0x%x, iFlags=0x%x)", id.GetAddr(), key.GetAddr(), iFlags); return CELL_OK; } @@ -803,7 +803,7 @@ int cellAudioSetNotifyEventQueue(u64 key) int cellAudioSetNotifyEventQueueEx(u64 key, u32 iFlags) { - cellAudio->Error("cellAudioSetNotifyEventQueueEx(key=0x%llx, iFlags=0x%x)", key, iFlags); + cellAudio->Todo("cellAudioSetNotifyEventQueueEx(key=0x%llx, iFlags=0x%x)", key, iFlags); return CELL_OK; } @@ -843,49 +843,49 @@ int cellAudioRemoveNotifyEventQueue(u64 key) int cellAudioRemoveNotifyEventQueueEx(u64 key, u32 iFlags) { - cellAudio->Error("cellAudioRemoveNotifyEventQueueEx(key=0x%llx, iFlags=0x%x)", key, iFlags); + cellAudio->Todo("cellAudioRemoveNotifyEventQueueEx(key=0x%llx, iFlags=0x%x)", key, iFlags); return CELL_OK; } int cellAudioAddData(u32 portNum, mem32_t src, u32 samples, float volume) { - cellAudio->Error("cellAudioAddData(portNum=0x%x, src_addr=0x%x, samples=%d, volume=%f)", portNum, src.GetAddr(), samples, volume); + cellAudio->Todo("cellAudioAddData(portNum=0x%x, src_addr=0x%x, samples=%d, volume=%f)", portNum, src.GetAddr(), samples, volume); return CELL_OK; } int cellAudioAdd2chData(u32 portNum, mem32_t src, u32 samples, float volume) { - cellAudio->Error("cellAudioAdd2chData(portNum=0x%x, src_addr=0x%x, samples=%d, volume=%f)", portNum, src.GetAddr(), samples, volume); + cellAudio->Todo("cellAudioAdd2chData(portNum=0x%x, src_addr=0x%x, samples=%d, volume=%f)", portNum, src.GetAddr(), samples, volume); return CELL_OK; } int cellAudioAdd6chData(u32 portNum, mem32_t src, float volume) { - cellAudio->Error("cellAudioAdd6chData(portNum=0x%x, src_addr=0x%x, volume=%f)", portNum, src.GetAddr(), volume); + cellAudio->Todo("cellAudioAdd6chData(portNum=0x%x, src_addr=0x%x, volume=%f)", portNum, src.GetAddr(), volume); return CELL_OK; } int cellAudioMiscSetAccessoryVolume(u32 devNum, float volume) { - cellAudio->Error("cellAudioMiscSetAccessoryVolume(devNum=0x%x, volume=%f)", devNum, volume); + cellAudio->Todo("cellAudioMiscSetAccessoryVolume(devNum=0x%x, volume=%f)", devNum, volume); return CELL_OK; } int cellAudioSendAck(u64 data3) { - cellAudio->Error("cellAudioSendAck(data3=0x%llx)", data3); + cellAudio->Todo("cellAudioSendAck(data3=0x%llx)", data3); return CELL_OK; } int cellAudioSetPersonalDevice(int iPersonalStream, int iDevice) { - cellAudio->Error("cellAudioSetPersonalDevice(iPersonalStream=0x%x, iDevice=0x%x)", iPersonalStream, iDevice); + cellAudio->Todo("cellAudioSetPersonalDevice(iPersonalStream=0x%x, iDevice=0x%x)", iPersonalStream, iDevice); return CELL_OK; } int cellAudioUnsetPersonalDevice(int iPersonalStream) { - cellAudio->Error("cellAudioUnsetPersonalDevice(iPersonalStream=0x%x)", iPersonalStream); + cellAudio->Todo("cellAudioUnsetPersonalDevice(iPersonalStream=0x%x)", iPersonalStream); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 1022906f7d..3b1cbf3b04 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -221,7 +221,7 @@ int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 if (!Emu.GetVFS().ExistsDir(dir)) { - cellGame->Error("cellGameDataCheckCreate2(): TODO: creating directory '%s'", dir.c_str()); + cellGame->Todo("cellGameDataCheckCreate2(): creating directory '%s'", dir.c_str()); // TODO: create data return CELL_GAMEDATA_RET_OK; } @@ -275,7 +275,7 @@ int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 if (cbSet->setParam.GetAddr()) { // TODO: write PARAM.SFO from cbSet - cellGame->Error("cellGameDataCheckCreate2(): TODO: writing PARAM.SFO parameters (addr=0x%x)", cbSet->setParam.GetAddr()); + cellGame->Todo("cellGameDataCheckCreate2(): writing PARAM.SFO parameters (addr=0x%x)", cbSet->setParam.GetAddr()); } switch ((s32)cbResult->result) @@ -318,7 +318,7 @@ int cellGameDataCheckCreate(u32 version, const mem_list_ptr_t dirName, u32 e int cellGameCreateGameData(mem_ptr_t init, mem_list_ptr_t tmp_contentInfoPath, mem_list_ptr_t tmp_usrdirPath) { - cellGame->Error("cellGameCreateGameData(init_addr=0x%x, tmp_contentInfoPath_addr=0x%x, tmp_usrdirPath_addr=0x%x)", + cellGame->Todo("cellGameCreateGameData(init_addr=0x%x, tmp_contentInfoPath_addr=0x%x, tmp_usrdirPath_addr=0x%x)", init.GetAddr(), tmp_contentInfoPath.GetAddr(), tmp_usrdirPath.GetAddr()); // TODO: create temporary game directory, set initial PARAM.SFO parameters diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 9ebe134f35..efb723c3b8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -612,7 +612,7 @@ int cellGcmSetWaitFlip(mem_ptr_t ctxt) int cellGcmSetZcull(u8 index, u32 offset, u32 width, u32 height, u32 cullStart, u32 zFormat, u32 aaFormat, u32 zCullDir, u32 zCullFormat, u32 sFunc, u32 sRef, u32 sMask) { - cellGcmSys->Warning("TODO: cellGcmSetZcull(index=%d, offset=0x%x, width=%d, height=%d, cullStart=0x%x, zFormat=0x%x, aaFormat=0x%x, zCullDir=0x%x, zCullFormat=0x%x, sFunc=0x%x, sRef=0x%x, sMask=0x%x)", + cellGcmSys->Todo("cellGcmSetZcull(index=%d, offset=0x%x, width=%d, height=%d, cullStart=0x%x, zFormat=0x%x, aaFormat=0x%x, zCullDir=0x%x, zCullFormat=0x%x, sFunc=0x%x, sRef=0x%x, sMask=0x%x)", index, offset, width, height, cullStart, zFormat, aaFormat, zCullDir, zCullFormat, sFunc, sRef, sMask); if (index >= RSXThread::m_zculls_count) @@ -1096,7 +1096,7 @@ int cellGcmSetFlipCommand(u32 ctx, u32 id) s64 cellGcmFunc15() { - cellGcmSys->Error("cellGcmFunc15()"); + cellGcmSys->Todo("cellGcmFunc15()"); return 0; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index b71d83ba35..f7b32751f1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -621,7 +621,7 @@ int cellPamfReaderGetNumberOfEp(mem_ptr_t pSelf) int cellPamfReaderGetEpIteratorWithIndex(mem_ptr_t pSelf, u32 epIndex, mem_ptr_t pIt) { - cellPamf->Error("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x, stream=%d, epIndex=%d, pIt_addr=0x%x)", pSelf.GetAddr(), pSelf->stream, epIndex, pIt.GetAddr()); + cellPamf->Todo("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x, stream=%d, epIndex=%d, pIt_addr=0x%x)", pSelf.GetAddr(), pSelf->stream, epIndex, pIt.GetAddr()); if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) { @@ -636,7 +636,7 @@ int cellPamfReaderGetEpIteratorWithIndex(mem_ptr_t pSelf, u32 ep int cellPamfReaderGetEpIteratorWithTimeStamp(mem_ptr_t pSelf, mem_ptr_t pTimeStamp, mem_ptr_t pIt) { - cellPamf->Error("cellPamfReaderGetEpIteratorWithTimeStamp(pSelf=0x%x, pTimeStamp_addr=0x%x, pIt_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr(), pIt.GetAddr()); + cellPamf->Todo("cellPamfReaderGetEpIteratorWithTimeStamp(pSelf=0x%x, pTimeStamp_addr=0x%x, pIt_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr(), pIt.GetAddr()); const mem_ptr_t pAddr(pSelf->pAddr); @@ -647,7 +647,7 @@ int cellPamfReaderGetEpIteratorWithTimeStamp(mem_ptr_t pSelf, me int cellPamfEpIteratorGetEp(mem_ptr_t pIt, mem_ptr_t pEp) { - cellPamf->Error("cellPamfEpIteratorGetEp(pIt_addr=0x%x, pEp_addr=0x%x)", pIt.GetAddr(), pEp.GetAddr()); + cellPamf->Todo("cellPamfEpIteratorGetEp(pIt_addr=0x%x, pEp_addr=0x%x)", pIt.GetAddr(), pEp.GetAddr()); //TODO: @@ -656,7 +656,7 @@ int cellPamfEpIteratorGetEp(mem_ptr_t pIt, mem_ptr_t pIt, s32 steps, mem_ptr_t pEp) { - cellPamf->Error("cellPamfEpIteratorMove(pIt_addr=0x%x, steps=%d, pEp_addr=0x%x)", pIt.GetAddr(), steps, pEp.GetAddr()); + cellPamf->Todo("cellPamfEpIteratorMove(pIt_addr=0x%x, steps=%d, pEp_addr=0x%x)", pIt.GetAddr(), steps, pEp.GetAddr()); //TODO: diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 3d5da159b7..bf073c0439 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -659,7 +659,7 @@ void cellRescExit() if (!s_rescInternalInstance->m_bInitialized) { - cellResc->Error("cellRescExit()"); + cellResc->Error("cellRescExit(): not initialized"); return; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 122c0ff1ff..f60b770a34 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -167,7 +167,7 @@ int cellSpursAttributeSetNamePrefix(mem_ptr_t attr, const me int cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t attr) { - cellSpurs->Error("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr()); + cellSpurs->Todo("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr()); if (attr.GetAddr() % 8 != 0) { @@ -208,7 +208,7 @@ int cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t attr, int cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, const u8 priority[CELL_SPURS_MAX_SPU], u32 maxSpu, const bool isPreemptible[CELL_SPURS_MAX_SPU]) { - cellSpurs->Error("cellSpursAttributeEnableSystemWorkload(attr_addr=0x%x, priority[%u], maxSpu=%u, isPreemptible[%u])", attr.GetAddr(), priority, maxSpu, isPreemptible); + cellSpurs->Todo("cellSpursAttributeEnableSystemWorkload(attr_addr=0x%x, priority[%u], maxSpu=%u, isPreemptible[%u])", attr.GetAddr(), priority, maxSpu, isPreemptible); if (attr.GetAddr() % 8 != 0) { @@ -235,7 +235,7 @@ int cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, c int cellSpursGetSpuThreadGroupId(mem_ptr_t spurs, mem32_t group) { - cellSpurs->Error("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)", spurs.GetAddr(), group.GetAddr()); + cellSpurs->Todo("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)", spurs.GetAddr(), group.GetAddr()); if (spurs.GetAddr() % 128 != 0) { @@ -254,7 +254,7 @@ int cellSpursGetSpuThreadGroupId(mem_ptr_t spurs, mem32_t group) int cellSpursGetNumSpuThread(mem_ptr_t spurs, mem32_t nThreads) { - cellSpurs->Error("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), nThreads.GetAddr()); + cellSpurs->Todo("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), nThreads.GetAddr()); if (spurs.GetAddr() % 128 != 0) { @@ -273,7 +273,7 @@ int cellSpursGetNumSpuThread(mem_ptr_t spurs, mem32_t nThreads) int cellSpursGetSpuThreadId(mem_ptr_t spurs, mem32_t thread, mem32_t nThreads) { - cellSpurs->Error("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr()); + cellSpurs->Todo("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr()); if (spurs.GetAddr() % 128 != 0) { @@ -292,7 +292,7 @@ int cellSpursGetSpuThreadId(mem_ptr_t spurs, mem32_t thread, mem32_t int cellSpursSetMaxContention(mem_ptr_t spurs, u32 workloadId, u32 maxContention) { - cellSpurs->Error("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%u, maxContention=%u)", spurs.GetAddr(), workloadId, maxContention); + cellSpurs->Todo("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%u, maxContention=%u)", spurs.GetAddr(), workloadId, maxContention); if (spurs.GetAddr() % 128 != 0) { @@ -311,7 +311,7 @@ int cellSpursSetMaxContention(mem_ptr_t spurs, u32 workloadId, u32 ma int cellSpursSetPriorities(mem_ptr_t spurs, u32 workloadId, const u8 priorities[CELL_SPURS_MAX_SPU]) { - cellSpurs->Error("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%u, priorities[%u])", spurs.GetAddr(), workloadId, priorities); + cellSpurs->Todo("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%u, priorities[%u])", spurs.GetAddr(), workloadId, priorities); if (spurs.GetAddr() % 128 != 0) { @@ -330,7 +330,7 @@ int cellSpursSetPriorities(mem_ptr_t spurs, u32 workloadId, const u8 int cellSpursSetPriority(mem_ptr_t spurs, u32 workloadId, u32 spuId, u32 priority) { - cellSpurs->Error("cellSpursSetPriority(spurs_addr=0x%x, workloadId=%u, spuId=%u, priority=%u)", spurs.GetAddr(), workloadId, spuId, priority); + cellSpurs->Todo("cellSpursSetPriority(spurs_addr=0x%x, workloadId=%u, spuId=%u, priority=%u)", spurs.GetAddr(), workloadId, spuId, priority); if (spurs.GetAddr() % 128 != 0) { @@ -349,7 +349,7 @@ int cellSpursSetPriority(mem_ptr_t spurs, u32 workloadId, u32 spuId, int cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, const bool isPreemptible[CELL_SPURS_MAX_SPU]) { - cellSpurs->Error("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible[%u])", spurs.GetAddr(), isPreemptible); + cellSpurs->Todo("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible[%u])", spurs.GetAddr(), isPreemptible); if (spurs.GetAddr() % 128 != 0) { @@ -410,7 +410,7 @@ int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) int cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) { - cellSpurs->Error("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%u)", spurs.GetAddr(), flag); + cellSpurs->Todo("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%u)", spurs.GetAddr(), flag); if (spurs.GetAddr() % 128 != 0) { @@ -429,7 +429,7 @@ int cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, mem_func_ptr_t eaHandler, mem_ptr_t arg) { - cellSpurs->Error("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)", spurs.GetAddr(), eaHandler.GetAddr(), arg.GetAddr()); + cellSpurs->Todo("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)", spurs.GetAddr(), eaHandler.GetAddr(), arg.GetAddr()); if (spurs.GetAddr() % 128 != 0) { @@ -448,7 +448,7 @@ int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, mem_func int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t spurs) { - cellSpurs->Error("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr()); + cellSpurs->Todo("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr()); if (spurs.GetAddr() % 128 != 0) { @@ -467,7 +467,7 @@ int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t spurs) int cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) { - cellSpurs->Error("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr()); + cellSpurs->Todo("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr()); if (spurs.GetAddr() % 128 != 0) { @@ -507,7 +507,7 @@ int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t eventFlag) { - cellSpurs->Error("cellSpursEventFlagAttachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); + cellSpurs->Todo("cellSpursEventFlagAttachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -526,7 +526,7 @@ int cellSpursEventFlagAttachLv2EventQueue(mem_ptr_t eventFla int cellSpursEventFlagDetachLv2EventQueue(mem_ptr_t eventFlag) { - cellSpurs->Error("cellSpursEventFlagDetachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); + cellSpurs->Todo("cellSpursEventFlagDetachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -545,7 +545,7 @@ int cellSpursEventFlagDetachLv2EventQueue(mem_ptr_t eventFla int cellSpursEventFlagWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) { - cellSpurs->Error("cellSpursEventFlagWait(eventFlag_addr=0x%x, mask=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); + cellSpurs->Todo("cellSpursEventFlagWait(eventFlag_addr=0x%x, mask=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); if (eventFlag.GetAddr() % 128 != 0) { @@ -564,7 +564,7 @@ int cellSpursEventFlagWait(mem_ptr_t eventFlag, mem16_t mask int cellSpursEventFlagClear(mem_ptr_t eventFlag, u16 bits) { - cellSpurs->Error("cellSpursEventFlagClear(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); + cellSpurs->Todo("cellSpursEventFlagClear(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); if (eventFlag.GetAddr() % 128 != 0) { @@ -583,7 +583,7 @@ int cellSpursEventFlagClear(mem_ptr_t eventFlag, u16 bits) int cellSpursEventFlagSet(mem_ptr_t eventFlag, u16 bits) { - cellSpurs->Error("cellSpursEventFlagSet(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); + cellSpurs->Todo("cellSpursEventFlagSet(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); if (eventFlag.GetAddr() % 128 != 0) { @@ -602,7 +602,7 @@ int cellSpursEventFlagSet(mem_ptr_t eventFlag, u16 bits) int cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) { - cellSpurs->Error("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); + cellSpurs->Todo("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); if (eventFlag.GetAddr() % 128 != 0) { @@ -663,7 +663,7 @@ int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem3 int cellSpursEventFlagGetTasksetAddress(mem_ptr_t eventFlag, mem_ptr_t taskset) { - cellSpurs->Error("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); + cellSpurs->Todo("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -944,7 +944,7 @@ int cellSpursCreateTasksetWithAttribute() int cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_t taskset, u64 args, mem8_t priority, u32 maxContention) { - cellSpurs->Error("cellSpursCreateTaskset(spurs_addr=0x%x, taskset_addr=0x%x, args=0x%x, priority_addr=0x%x, maxContention=%u)", spurs.GetAddr(), taskset.GetAddr(), args, priority.GetAddr(), maxContention); + cellSpurs->Todo("cellSpursCreateTaskset(spurs_addr=0x%x, taskset_addr=0x%x, args=0x%x, priority_addr=0x%x, maxContention=%u)", spurs.GetAddr(), taskset.GetAddr(), args, priority.GetAddr(), maxContention); if ((spurs.GetAddr() % 128 != 0) || (taskset.GetAddr() % 128 != 0)) { @@ -966,7 +966,7 @@ int cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_t taskset) { - cellSpurs->Error("cellSpursJoinTaskset(taskset_addr=0x%x)", taskset.GetAddr()); + cellSpurs->Todo("cellSpursJoinTaskset(taskset_addr=0x%x)", taskset.GetAddr()); if (taskset.GetAddr() % 128 != 0) { @@ -985,7 +985,7 @@ int cellSpursJoinTaskset(mem_ptr_t taskset) int cellSpursGetTasksetId(mem_ptr_t taskset, mem32_t workloadId) { - cellSpurs->Error("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr()); + cellSpurs->Todo("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr()); if (taskset.GetAddr() % 128 != 0) { @@ -1004,7 +1004,7 @@ int cellSpursGetTasksetId(mem_ptr_t taskset, mem32_t workloadI int cellSpursShutdownTaskset(mem_ptr_t taskset) { - cellSpurs->Error("cellSpursShutdownTaskset(taskset_addr=0x%x)", taskset.GetAddr()); + cellSpurs->Todo("cellSpursShutdownTaskset(taskset_addr=0x%x)", taskset.GetAddr()); if (taskset.GetAddr() % 128 != 0) { @@ -1025,7 +1025,7 @@ int cellSpursCreateTask(mem_ptr_t taskset, mem32_t taskID, mem mem_ptr_t context_addr, u32 context_size, mem_ptr_t lsPattern, mem_ptr_t argument) { - cellSpurs->Error("cellSpursCreateTask(taskset_addr=0x%x, taskID_addr=0x%x, elf_addr_addr=0x%x, context_addr_addr=0x%x, context_size=%u, lsPattern_addr=0x%x, argument_addr=0x%x)", + cellSpurs->Todo("cellSpursCreateTask(taskset_addr=0x%x, taskID_addr=0x%x, elf_addr_addr=0x%x, context_addr_addr=0x%x, context_size=%u, lsPattern_addr=0x%x, argument_addr=0x%x)", taskset.GetAddr(), taskID.GetAddr(), elf_addr.GetAddr(), context_addr.GetAddr(), context_size, lsPattern.GetAddr(), argument.GetAddr()); if (taskset.GetAddr() % 128 != 0) @@ -1045,7 +1045,7 @@ int cellSpursCreateTask(mem_ptr_t taskset, mem32_t taskID, mem int _cellSpursSendSignal(mem_ptr_t taskset, u32 taskID) { - cellSpurs->Error("_cellSpursSendSignal(taskset_addr=0x%x, taskID=%u)", taskset.GetAddr(), taskID); + cellSpurs->Todo("_cellSpursSendSignal(taskset_addr=0x%x, taskID=%u)", taskset.GetAddr(), taskID); if (taskset.GetAddr() % 128 != 0) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp index 4e0f949544..c470d28e36 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp @@ -156,7 +156,7 @@ int cellSysmoduleFinalize() int cellSysmoduleSetMemcontainer(u32 ct_id) { - cellSysmodule->Warning("TODO: cellSysmoduleSetMemcontainer(ct_id=0x%x)", ct_id); + cellSysmodule->Todo("cellSysmoduleSetMemcontainer(ct_id=0x%x)", ct_id); return CELL_OK; } @@ -164,7 +164,7 @@ int cellSysmoduleLoadModule(u16 id) { if (id == 0xf054) { - cellSysmodule->Error("cellSysmoduleLoadModule: TODO: CELL_SYSMODULE_LIBATRAC3MULTI"); + cellSysmodule->Todo("cellSysmoduleLoadModule: CELL_SYSMODULE_LIBATRAC3MULTI"); } cellSysmodule->Warning("cellSysmoduleLoadModule(%s)", getModuleName(id)); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 9d6512de52..aae129c92a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -575,7 +575,7 @@ int cellAudioOutGetNumberOfDevice(u32 audioOut) int cellAudioOutGetDeviceInfo(u32 audioOut, u32 deviceIndex, mem_ptr_t info) { - cellSysutil->Error("Unimplemented function: cellAudioOutGetDeviceInfo(audioOut=%u, deviceIndex=%u, info_addr=0x%x)", + cellSysutil->Todo("Unimplemented function: cellAudioOutGetDeviceInfo(audioOut=%u, deviceIndex=%u, info_addr=0x%x)", audioOut, deviceIndex, info.GetAddr()); if(deviceIndex) return CELL_AUDIO_OUT_ERROR_DEVICE_NOT_FOUND; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index f2dcf61696..98365a1923 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -108,8 +108,8 @@ u32 vdecQueryAttr(CellVdecCodecType type, u32 profile, u32 spec_addr /* may be 0 switch (type) // TODO: check profile levels { case CELL_VDEC_CODEC_TYPE_AVC: cellVdec->Warning("cellVdecQueryAttr: AVC (profile=%d)", profile); break; - case CELL_VDEC_CODEC_TYPE_MPEG2: cellVdec->Error("TODO: MPEG2 not supported"); break; - case CELL_VDEC_CODEC_TYPE_DIVX: cellVdec->Error("TODO: DIVX not supported"); break; + case CELL_VDEC_CODEC_TYPE_MPEG2: cellVdec->Todo("MPEG2 not supported"); break; + case CELL_VDEC_CODEC_TYPE_DIVX: cellVdec->Todo("DIVX not supported"); break; default: return CELL_VDEC_ERROR_ARG; } @@ -620,13 +620,13 @@ int cellVdecGetPicture(u32 handle, const mem_ptr_t format, u3 if (format->formatType != CELL_VDEC_PICFMT_YUV420_PLANAR) { - cellVdec->Error("cellVdecGetPicture: TODO: unknown formatType(%d)", (u32)format->formatType); + cellVdec->Todo("cellVdecGetPicture: unknown formatType(%d)", (u32)format->formatType); return CELL_OK; } if (format->colorMatrixType != CELL_VDEC_COLOR_MATRIX_TYPE_BT709) { - cellVdec->Error("cellVdecGetPicture: TODO: unknown colorMatrixType(%d)", (u32)format->colorMatrixType); + cellVdec->Todo("cellVdecGetPicture: unknown colorMatrixType(%d)", (u32)format->colorMatrixType); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 00204a718b..3303469eb4 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -532,7 +532,7 @@ int cellSurMixerStart() int cellSurMixerSetParameter(u32 param, float value) { declCPU(); - libmixer->Error("cellSurMixerSetParameter(param=0x%x, value=%f, FPR[1]=%f, FPR[2]=%f)", param, value, (float&)CPU.FPR[1], (float&)CPU.FPR[2]); + libmixer->Todo("cellSurMixerSetParameter(param=0x%x, value=%f, FPR[1]=%f, FPR[2]=%f)", param, value, (float&)CPU.FPR[1], (float&)CPU.FPR[2]); return CELL_OK; } @@ -560,7 +560,7 @@ int cellSurMixerSurBusAddData(u32 busNo, u32 offset, u32 addr, u32 samples) } else { - libmixer->Error("cellSurMixerSurBusAddData(busNo=%d, offset=0x%x, addr=0x%x, samples=%d): unknown parameters", busNo, offset, addr, samples); + libmixer->Todo("cellSurMixerSurBusAddData(busNo=%d, offset=0x%x, addr=0x%x, samples=%d)", busNo, offset, addr, samples); return CELL_OK; } @@ -578,7 +578,7 @@ int cellSurMixerSurBusAddData(u32 busNo, u32 offset, u32 addr, u32 samples) int cellSurMixerChStripSetParameter(u32 type, u32 index, mem_ptr_t param) { - libmixer->Error("cellSurMixerChStripSetParameter(type=%d, index=%d, param_addr=0x%x)", type, index, param.GetAddr()); + libmixer->Todo("cellSurMixerChStripSetParameter(type=%d, index=%d, param_addr=0x%x)", type, index, param.GetAddr()); return CELL_OK; } @@ -614,14 +614,14 @@ int cellSurMixerGetTimestamp(u64 tag, mem64_t stamp) void cellSurMixerBeep(u32 arg) { - libmixer->Error("cellSurMixerBeep(arg=%d)", arg); + libmixer->Todo("cellSurMixerBeep(arg=%d)", arg); return; } void cellSurMixerUtilGetLevelFromDB(float dB) { // not hooked, probably unnecessary - libmixer->Error("cellSurMixerUtilGetLevelFromDB(dB=%f)", dB); + libmixer->Todo("cellSurMixerUtilGetLevelFromDB(dB=%f)", dB); declCPU(); (float&)CPU.FPR[0] = 0.0f; } @@ -629,7 +629,7 @@ void cellSurMixerUtilGetLevelFromDB(float dB) void cellSurMixerUtilGetLevelFromDBIndex(int index) { // not hooked, probably unnecessary - libmixer->Error("cellSurMixerUtilGetLevelFromDBIndex(index=%d)", index); + libmixer->Todo("cellSurMixerUtilGetLevelFromDBIndex(index=%d)", index); declCPU(); (float&)CPU.FPR[0] = 0.0f; } @@ -637,7 +637,7 @@ void cellSurMixerUtilGetLevelFromDBIndex(int index) void cellSurMixerUtilNoteToRatio(u8 refNote, u8 note) { // not hooked, probably unnecessary - libmixer->Error("cellSurMixerUtilNoteToRatio(refNote=%d, note=%d)", refNote, note); + libmixer->Todo("cellSurMixerUtilNoteToRatio(refNote=%d, note=%d)", refNote, note); declCPU(); (float&)CPU.FPR[0] = 0.0f; } diff --git a/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp b/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp index 0a6642efe1..340d586e24 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp @@ -10,103 +10,103 @@ Module libsynth2("libsynth2", libsynth2_init); int cellSoundSynth2Config(s16 param, int value) { - libsynth2.Error("cellSoundSynth2Config(param=%d, value=%d)", param, value); + libsynth2.Todo("cellSoundSynth2Config(param=%d, value=%d)", param, value); return CELL_OK; } int cellSoundSynth2Init(s16 flag) { - libsynth2.Error("cellSoundSynth2Init(flag=%d)", flag); + libsynth2.Todo("cellSoundSynth2Init(flag=%d)", flag); return CELL_OK; } int cellSoundSynth2Exit() { - libsynth2.Error("cellSoundSynth2Exit()"); + libsynth2.Todo("cellSoundSynth2Exit()"); return CELL_OK; } void cellSoundSynth2SetParam(u16 reg, u16 value) { - libsynth2.Error("cellSoundSynth2SetParam(register=0x%x, value=0x%x)", reg, value); + libsynth2.Todo("cellSoundSynth2SetParam(register=0x%x, value=0x%x)", reg, value); } u16 cellSoundSynth2GetParam(u16 reg) { - libsynth2.Error("cellSoundSynth2GetParam(register=0x%x) -> 0", reg); + libsynth2.Todo("cellSoundSynth2GetParam(register=0x%x) -> 0", reg); return 0; } void cellSoundSynth2SetSwitch(u16 reg, u32 value) { - libsynth2.Error("cellSoundSynth2SetSwitch(register=0x%x, value=0x%x)", reg, value); + libsynth2.Todo("cellSoundSynth2SetSwitch(register=0x%x, value=0x%x)", reg, value); } u32 cellSoundSynth2GetSwitch(u16 reg) { - libsynth2.Error("cellSoundSynth2GetSwitch(register=0x%x) -> 0", reg); + libsynth2.Todo("cellSoundSynth2GetSwitch(register=0x%x) -> 0", reg); return 0; } int cellSoundSynth2SetAddr(u16 reg, u32 value) { - libsynth2.Error("cellSoundSynth2SetAddr(register=0x%x, value=0x%x)", reg, value); + libsynth2.Todo("cellSoundSynth2SetAddr(register=0x%x, value=0x%x)", reg, value); return CELL_OK; } u32 cellSoundSynth2GetAddr(u16 reg) { - libsynth2.Error("cellSoundSynth2GetAddr(register=0x%x) -> 0", reg); + libsynth2.Todo("cellSoundSynth2GetAddr(register=0x%x) -> 0", reg); return 0; } int cellSoundSynth2SetEffectAttr(s16 bus, mem_ptr_t attr) { - libsynth2.Error("cellSoundSynth2SetEffectAttr(bus=%d, attr_addr=0x%x)", bus, attr.GetAddr()); + libsynth2.Todo("cellSoundSynth2SetEffectAttr(bus=%d, attr_addr=0x%x)", bus, attr.GetAddr()); return CELL_OK; } int cellSoundSynth2SetEffectMode(s16 bus, mem_ptr_t attr) { - libsynth2.Error("cellSoundSynth2SetEffectMode(bus=%d, attr_addr=0x%x)", bus, attr.GetAddr()); + libsynth2.Todo("cellSoundSynth2SetEffectMode(bus=%d, attr_addr=0x%x)", bus, attr.GetAddr()); return CELL_OK; } void cellSoundSynth2SetCoreAttr(u16 entry, u16 value) { - libsynth2.Error("cellSoundSynth2SetCoreAttr(entry=0x%x, value=0x%x)", entry, value); + libsynth2.Todo("cellSoundSynth2SetCoreAttr(entry=0x%x, value=0x%x)", entry, value); } int cellSoundSynth2Generate(u16 samples, u32 L_addr, u32 R_addr, u32 Lr_addr, u32 Rr_addr) { - libsynth2.Error("cellSoundSynth2Generate(samples=0x%x, left=0x%x, right=0x%x, left_rear=0x%x, right_rear=0x%x)", + libsynth2.Todo("cellSoundSynth2Generate(samples=0x%x, left=0x%x, right=0x%x, left_rear=0x%x, right_rear=0x%x)", samples, L_addr, R_addr, Lr_addr, Rr_addr); return CELL_OK; } int cellSoundSynth2VoiceTrans(s16 channel, u16 mode, u32 mem_side_addr, u32 lib_side_addr, u32 size) { - libsynth2.Error("cellSoundSynth2VoiceTrans(channel=%d, mode=0x%x, m_addr=0x%x, s_addr=0x%x, size=0x%x)", + libsynth2.Todo("cellSoundSynth2VoiceTrans(channel=%d, mode=0x%x, m_addr=0x%x, s_addr=0x%x, size=0x%x)", channel, mode, mem_side_addr, lib_side_addr, size); return CELL_OK; } int cellSoundSynth2VoiceTransStatus(s16 channel, s16 flag) { - libsynth2.Error("cellSoundSynth2VoiceTransStatus(channel=%d, flag=%d)", channel, flag); + libsynth2.Todo("cellSoundSynth2VoiceTransStatus(channel=%d, flag=%d)", channel, flag); return CELL_OK; } u16 cellSoundSynth2Note2Pitch(u16 center_note, u16 center_fine, u16 note, s16 fine) { - libsynth2.Error("cellSoundSynth2Note2Pitch(center_note=0x%x, center_fine=0x%x, note=0x%x, fine=%d) -> 0", + libsynth2.Todo("cellSoundSynth2Note2Pitch(center_note=0x%x, center_fine=0x%x, note=0x%x, fine=%d) -> 0", center_note, center_fine, note, fine); return 0; } u16 cellSoundSynth2Pitch2Note(u16 center_note, u16 center_fine, u16 pitch) { - libsynth2.Error("cellSoundSynth2Pitch2Note(center_note=0x%x, center_fine=0x%x, pitch=0x%x) -> 0", + libsynth2.Todo("cellSoundSynth2Pitch2Note(center_note=0x%x, center_fine=0x%x, pitch=0x%x) -> 0", center_note, center_fine, pitch); return 0; } diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index ff34ff8d2f..00c3a6c903 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -143,7 +143,7 @@ public: extern int cellGcmCallback(u32 context_addr, u32 count); -#define UNIMPLEMENTED_FUNC(module) module->Error("Unimplemented function: %s", __FUNCTION__) +#define UNIMPLEMENTED_FUNC(module) module->Todo("%s", __FUNCTION__) #define SC_ARG_0 CPU.GPR[3] #define SC_ARG_1 CPU.GPR[4] diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index b62df5b512..fb1ffe58f0 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -620,7 +620,7 @@ s32 cellFsStReadGetRegid(u32 fd, mem64_t regid) s32 cellFsStReadStart(u32 fd, u64 offset, u64 size) { - sys_fs->Warning("TODO: cellFsStReadStart(fd=%d, offset=0x%llx, size=0x%llx)", fd, offset, size); + sys_fs->Todo("cellFsStReadStart(fd=%d, offset=0x%llx, size=0x%llx)", fd, offset, size); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -645,7 +645,7 @@ s32 cellFsStReadStop(u32 fd) s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) { - sys_fs->Warning("TODO: cellFsStRead(fd=%d, buf_addr=0x%x, size=0x%llx, rsize_addr = 0x%x)", fd, buf_addr, size, rsize.GetAddr()); + sys_fs->Todo("cellFsStRead(fd=%d, buf_addr=0x%x, size=0x%llx, rsize_addr = 0x%x)", fd, buf_addr, size, rsize.GetAddr()); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -660,7 +660,7 @@ s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) s32 cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size) { - sys_fs->Warning("TODO: cellFsStReadGetCurrentAddr(fd=%d, addr_addr=0x%x, size_addr = 0x%x)", fd, addr_addr.GetAddr(), size.GetAddr()); + sys_fs->Todo("cellFsStReadGetCurrentAddr(fd=%d, addr_addr=0x%x, size_addr = 0x%x)", fd, addr_addr.GetAddr(), size.GetAddr()); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -672,7 +672,7 @@ s32 cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size) s32 cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) { - sys_fs->Warning("TODO: cellFsStReadPutCurrentAddr(fd=%d, addr_addr=0x%x, size = 0x%llx)", fd, addr_addr, size); + sys_fs->Todo("cellFsStReadPutCurrentAddr(fd=%d, addr_addr=0x%x, size = 0x%llx)", fd, addr_addr, size); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -684,7 +684,7 @@ s32 cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) s32 cellFsStReadWait(u32 fd, u64 size) { - sys_fs->Warning("TODO: cellFsStReadWait(fd=%d, size = 0x%llx)", fd, size); + sys_fs->Todo("cellFsStReadWait(fd=%d, size = 0x%llx)", fd, size); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -694,7 +694,7 @@ s32 cellFsStReadWait(u32 fd, u64 size) s32 cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_t func) { - sys_fs->Warning("TODO: cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.GetAddr()); + sys_fs->Todo("cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.GetAddr()); if (!func.IsGood()) return CELL_EFAULT; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index 20f8c98bf6..a80ef7ecc2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -66,7 +66,7 @@ s32 sys_event_queue_create(mem32_t equeue_id, mem_ptr_t at s32 sys_event_queue_destroy(u32 equeue_id, int mode) { - sys_event.Error("sys_event_queue_destroy(equeue_id=%d, mode=0x%x)", equeue_id, mode); + sys_event.Todo("sys_event_queue_destroy(equeue_id=%d, mode=0x%x)", equeue_id, mode); EventQueue* eq; if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) @@ -111,7 +111,7 @@ s32 sys_event_queue_destroy(u32 equeue_id, int mode) s32 sys_event_queue_tryreceive(u32 equeue_id, mem_ptr_t event_array, int size, mem32_t number) { - sys_event.Error("sys_event_queue_tryreceive(equeue_id=%d, event_array_addr=0x%x, size=%d, number_addr=0x%x)", + sys_event.Todo("sys_event_queue_tryreceive(equeue_id=%d, event_array_addr=0x%x, size=%d, number_addr=0x%x)", equeue_id, event_array.GetAddr(), size, number.GetAddr()); if (size < 0 || !number.IsGood()) @@ -403,8 +403,8 @@ s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, switch (attr->protocol.ToBE()) { case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_RETRY): sys_event.Warning("TODO: SYS_SYNC_RETRY attr"); break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_event.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT attr"); break; + case se32(SYS_SYNC_RETRY): sys_event.Todo("sys_event_flag_create(): SYS_SYNC_RETRY"); break; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_event.Todo("sys_event_flag_create(): SYS_SYNC_PRIORITY_INHERIT"); break; case se32(SYS_SYNC_FIFO): break; default: return CELL_EINVAL; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp index 065f5cd4de..4fd7715ee5 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp @@ -83,7 +83,7 @@ s32 sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 s32 sys_interrupt_thread_disestablish(u32 ih) { - sc_int.Error("sys_interrupt_thread_disestablish(ih=%d)", ih); + sc_int.Todo("sys_interrupt_thread_disestablish(ih=%d)", ih); CPUThread* it = Emu.GetCPU().GetThread(ih); if (!it) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index ab5b870efc..13a0304f7c 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -22,8 +22,8 @@ s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) { case se32(SYS_SYNC_FIFO): break; case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_mtx.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT protocol"); break; - case se32(SYS_SYNC_RETRY): sys_mtx.Error("Invalid SYS_SYNC_RETRY protocol"); return CELL_EINVAL; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_mtx.Todo("sys_mutex_create(): SYS_SYNC_PRIORITY_INHERIT"); break; + case se32(SYS_SYNC_RETRY): sys_mtx.Error("sys_mutex_create(): SYS_SYNC_RETRY"); return CELL_EINVAL; default: sys_mtx.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index a991acc993..28e37ce590 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -72,7 +72,7 @@ s32 sys_ppu_thread_join(u64 thread_id, mem64_t vptr) s32 sys_ppu_thread_detach(u64 thread_id) { - sysPrxForUser->Error("sys_ppu_thread_detach(thread_id=%lld)", thread_id); + sysPrxForUser->Todo("sys_ppu_thread_detach(thread_id=%lld)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp index 7ea71a6d9a..a6e6ba3982 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -17,7 +17,7 @@ s32 sys_process_getpid() s32 sys_process_getppid() { - sc_p.Warning("TODO: sys_process_getppid() returns 0"); + sc_p.Todo("sys_process_getppid() -> 0"); return 0; } @@ -46,7 +46,7 @@ void sys_game_process_exitspawn( u32 prio, u64 flags ) { - sc_p.Error("sys_game_process_exitspawn UNIMPLEMENTED"); + sc_p.Todo("sys_game_process_exitspawn()"); sc_p.Warning("path: %s", Memory.ReadString(path_addr).c_str()); sc_p.Warning("argv: 0x%x", argv_addr); sc_p.Warning("envp: 0x%x", envp_addr); @@ -94,7 +94,7 @@ void sys_game_process_exitspawn2( u32 prio, u64 flags) { - sc_p.Error("sys_game_process_exitspawn2 UNIMPLEMENTED"); + sc_p.Todo("sys_game_process_exitspawn2"); sc_p.Warning("path: %s", Memory.ReadString(path_addr).c_str()); sc_p.Warning("argv: 0x%x", argv_addr); sc_p.Warning("envp: 0x%x", envp_addr); @@ -170,7 +170,7 @@ s32 sys_process_get_number_of_object(u32 object, mem32_t nump) s32 sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_size) { - sc_p.Warning("TODO: sys_process_get_id(object=%d, buffer_addr=0x%x, size=%d, set_size_addr=0x%x)", + sc_p.Todo("sys_process_get_id(object=%d, buffer_addr=0x%x, size=%d, set_size_addr=0x%x)", object, buffer.GetAddr(), size, set_size.GetAddr()); switch(object) @@ -213,7 +213,7 @@ s32 sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_siz s32 sys_process_get_paramsfo(mem8_ptr_t buffer) { - sc_p.Warning("TODO: sys_process_get_paramsfo(buffer_addr=0x%x) returns CELL_ENOENT", buffer.GetAddr()); + sc_p.Todo("sys_process_get_paramsfo(buffer_addr=0x%x) -> CELL_ENOENT", buffer.GetAddr()); return CELL_ENOENT; /*//Before uncommenting this code, we should check if it is actually working. @@ -243,33 +243,33 @@ s32 sys_process_get_sdk_version(u32 pid, mem32_t version) s32 sys_process_kill(u32 pid) { - sc_p.Error("TODO: sys_process_kill(pid=%d)", pid); + sc_p.Todo("sys_process_kill(pid=%d)", pid); return CELL_OK; } s32 sys_process_wait_for_child(u32 pid, mem32_t status, u64 unk) { - sc_p.Error("TODO: sys_process_wait_for_child(pid=%d, status_addr=0x%x, unk=0x%llx", + sc_p.Todo("sys_process_wait_for_child(pid=%d, status_addr=0x%x, unk=0x%llx", pid, status.GetAddr(), unk); return CELL_OK; } s32 sys_process_wait_for_child2(u64 unk1, u64 unk2, u64 unk3, u64 unk4, u64 unk5, u64 unk6) { - sc_p.Error("TODO: sys_process_wait_for_child2(unk1=0x%llx, unk2=0x%llx, unk3=0x%llx, unk4=0x%llx, unk5=0x%llx, unk6=0x%llx)", + sc_p.Todo("sys_process_wait_for_child2(unk1=0x%llx, unk2=0x%llx, unk3=0x%llx, unk4=0x%llx, unk5=0x%llx, unk6=0x%llx)", unk1, unk2, unk3, unk4, unk5, unk6); return CELL_OK; } s32 sys_process_get_status(u64 unk) { - sc_p.Error("TODO: sys_process_get_status(unk=0x%llx)", unk); + sc_p.Todo("sys_process_get_status(unk=0x%llx)", unk); //Memory.Write32(CPU.GPR[4], GetPPUThreadStatus(CPU)); return CELL_OK; } s32 sys_process_detach_child(u64 unk) { - sc_p.Error("TODO: sys_process_detach_child(unk=0x%llx)", unk); + sc_p.Todo("sys_process_detach_child(unk=0x%llx)", unk); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index fccdee285f..595e6ea1e1 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -14,7 +14,7 @@ s32 sys_prx_load_module(u32 path_addr, u64 flags, mem_ptr_t pOpt) { - sys_prx.Error("TODO: sys_prx_start_module(id=%d, args=%d, argp_addr=0x%x, modres_addr=0x%x, flags=0x%llx, pOpt=0x%x)", + sys_prx.Todo("sys_prx_start_module(id=%d, args=%d, argp_addr=0x%x, modres_addr=0x%x, flags=0x%llx, pOpt=0x%x)", id, args, argp_addr, modres.GetAddr(), flags, pOpt.GetAddr()); if (!modres.IsGood()) @@ -70,7 +70,7 @@ s32 sys_prx_start_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 fl s32 sys_prx_stop_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 flags, mem_ptr_t pOpt) { - sys_prx.Error("TODO: sys_prx_stop_module(id=%d, args=%d, argp_addr=0x%x, modres_addr=0x%x, flags=0x%llx, pOpt=0x%x)", + sys_prx.Todo("sys_prx_stop_module(id=%d, args=%d, argp_addr=0x%x, modres_addr=0x%x, flags=0x%llx, pOpt=0x%x)", id, args, argp_addr, modres.GetAddr(), flags, pOpt.GetAddr()); if (!modres.IsGood()) @@ -88,7 +88,7 @@ s32 sys_prx_stop_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 fla s32 sys_prx_unload_module(s32 id, u64 flags, mem_ptr_t pOpt) { - sys_prx.Error("TODO: sys_prx_unload_module(id=%d, flags=0x%llx, pOpt=0x%x)", id, flags, pOpt.GetAddr()); + sys_prx.Todo("sys_prx_unload_module(id=%d, flags=0x%llx, pOpt=0x%x)", id, flags, pOpt.GetAddr()); // Get the PRX, free the used memory and delete the object and its ID sys_prx_t* prx; @@ -102,90 +102,90 @@ s32 sys_prx_unload_module(s32 id, u64 flags, mem_ptr_t attr switch (attr->attr_protocol.ToBE()) { - case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Warning("TODO: SYS_SYNC_PRIORITY attr"); break; - case se(attr->attr_protocol, SYS_SYNC_RETRY): sys_rwlock.Error("Invalid SYS_SYNC_RETRY attr"); break; - case se(attr->attr_protocol, SYS_SYNC_PRIORITY_INHERIT): sys_rwlock.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT attr"); break; + case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Todo("SYS_SYNC_PRIORITY"); break; + case se(attr->attr_protocol, SYS_SYNC_RETRY): sys_rwlock.Error("SYS_SYNC_RETRY"); return CELL_EINVAL; + case se(attr->attr_protocol, SYS_SYNC_PRIORITY_INHERIT): sys_rwlock.Todo("SYS_SYNC_PRIORITY_INHERIT"); break; case se(attr->attr_protocol, SYS_SYNC_FIFO): break; default: return CELL_EINVAL; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index 161f0945c0..aa0b82116a 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -35,8 +35,8 @@ s32 sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i { case se32(SYS_SYNC_FIFO): break; case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_sem.Warning("TODO: SYS_SYNC_PRIORITY_INHERIT protocol"); break; - case se32(SYS_SYNC_RETRY): sys_sem.Error("Invalid SYS_SYNC_RETRY protocol"); return CELL_EINVAL; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_sem.Todo("SYS_SYNC_PRIORITY_INHERIT"); break; + case se32(SYS_SYNC_RETRY): sys_sem.Error("SYS_SYNC_RETRY"); return CELL_EINVAL; default: sys_sem.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp index 358b234f37..26462efd71 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp @@ -26,6 +26,7 @@ void sys_spinlock_lock(mem_ptr_t>> lock) { while (lock->load(std::memory_order_relaxed).ToBE()) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack if (Emu.IsStopped()) { break; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 68303a28a4..7c2c740868 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -356,7 +356,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) s32 sys_spu_thread_create(mem32_t thread_id, mem32_t entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr) { - sc_spu.Error("sys_spu_thread_create(thread_id_addr=0x%x, entry_addr=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x", + sc_spu.Todo("sys_spu_thread_create(thread_id_addr=0x%x, entry_addr=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x", thread_id.GetAddr(), entry.GetAddr(), arg, prio, stacksize, flags, threadname_addr); return CELL_OK; } @@ -524,14 +524,14 @@ s32 sys_spu_thread_write_snr(u32 id, u32 number, u32 value) s32 sys_spu_thread_group_connect_event(u32 id, u32 eq, u32 et) { - sc_spu.Error("sys_spu_thread_group_connect_event(id=%d, eq=%d, et=0x%x)", id, eq, et); + sc_spu.Todo("sys_spu_thread_group_connect_event(id=%d, eq=%d, et=0x%x)", id, eq, et); return CELL_OK; } s32 sys_spu_thread_group_disconnect_event(u32 id, u32 et) { - sc_spu.Error("sys_spu_thread_group_disconnect_event(id=%d, et=0x%x)", id, et); + sc_spu.Todo("sys_spu_thread_group_disconnect_event(id=%d, et=0x%x)", id, et); return CELL_OK; } @@ -762,7 +762,7 @@ s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, m s32 sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup) { - sc_spu.Error("sys_spu_thread_group_disconnect_event_all_threads(id=%d, spup=%d)", id, spup); + sc_spu.Todo("sys_spu_thread_group_disconnect_event_all_threads(id=%d, spup=%d)", id, spup); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 3aa176e46a..f1c7271d64 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -20,7 +20,7 @@ s32 sys_timer_create(mem32_t timer_id) s32 sys_timer_destroy(u32 timer_id) { - sys_timer.Warning("TODO: sys_timer_destroy(timer_id=%d)", timer_id); + sys_timer.Todo("sys_timer_destroy(timer_id=%d)", timer_id); if(!sys_timer.CheckId(timer_id)) return CELL_ESRCH; @@ -65,7 +65,7 @@ s32 sys_timer_start(u32 timer_id, s64 base_time, u64 period) s32 sys_timer_stop(u32 timer_id) { - sys_timer.Warning("TODO: sys_timer_stop()"); + sys_timer.Todo("sys_timer_stop()"); timer* timer_data = nullptr; if(!sys_timer.CheckId(timer_id, timer_data)) return CELL_ESRCH; @@ -91,7 +91,7 @@ s32 sys_timer_connect_event_queue(u32 timer_id, u32 queue_id, u64 name, u64 data s32 sys_timer_disconnect_event_queue(u32 timer_id) { - sys_timer.Warning("TODO: sys_timer_disconnect_event_queue(timer_id=%d)", timer_id); + sys_timer.Todo("sys_timer_disconnect_event_queue(timer_id=%d)", timer_id); timer* timer_data = nullptr; if(!sys_timer.CheckId(timer_id, timer_data)) return CELL_ESRCH; From 0865fca90a7cc279cf8d98bdfdad2caa8cbb6ac0 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 21 Jul 2014 18:49:56 +0400 Subject: [PATCH 224/499] Fix for SysCallBase --- rpcs3/Emu/SysCalls/SysCalls.h | 75 ++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 00c3a6c903..66d07cfd45 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -64,62 +64,65 @@ public: const std::string& GetName() const { return m_module_name; } - void Log(const u32 id, std::string fmt, ...) + bool IsLogging() { - if(Ini.HLELogging.GetValue()) + return Ini.HLELogging.GetValue(); + } + + template void Notice(const u32 id, const char* fmt, Targs... args) + { + LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::Format(fmt, args...)); + } + + template void Notice(const char* fmt, Targs... args) + { + LOG_NOTICE(HLE, GetName() + ": " + fmt::Format(fmt, args...)); + } + + template __forceinline void Log(const char* fmt, Targs... args) + { + if (IsLogging()) { - va_list list; - va_start(list, fmt); - LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::FormatV(fmt, list)); - va_end(list); + Notice(fmt, args...); } } - void Log(std::string fmt, ...) + template __forceinline void Log(const u32 id, const char* fmt, Targs... args) { - if(Ini.HLELogging.GetValue()) + if (IsLogging()) { - va_list list; - va_start(list, fmt); - LOG_NOTICE(HLE, GetName() + ": " + fmt::FormatV(fmt, list)); - va_end(list); + Notice(id, fmt, args...); } } - void Warning(const u32 id, std::string fmt, ...) + template void Warning(const u32 id, const char* fmt, Targs... args) { -//#ifdef SYSCALLS_DEBUG - va_list list; - va_start(list, fmt); - LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::FormatV(fmt, list)); - va_end(list); -//#endif + LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::Format(fmt, args...)); } - void Warning(std::string fmt, ...) + template void Warning(const char* fmt, Targs... args) { -//#ifdef SYSCALLS_DEBUG - va_list list; - va_start(list, fmt); - LOG_WARNING(HLE, GetName() + " warning: " + fmt::FormatV(fmt, list)); - va_end(list); -//#endif + LOG_WARNING(HLE, GetName() + " warning: " + fmt::Format(fmt, args...)); } - void Error(const u32 id, std::string fmt, ...) + template void Error(const u32 id, const char* fmt, Targs... args) { - va_list list; - va_start(list, fmt); - LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::FormatV(fmt, list)); - va_end(list); + LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::Format(fmt, args...)); } - void Error(std::string fmt, ...) + template void Error(const char* fmt, Targs... args) { - va_list list; - va_start(list, fmt); - LOG_ERROR(HLE, GetName() + " error: " + fmt::FormatV(fmt, list)); - va_end(list); + LOG_ERROR(HLE, GetName() + " error: " + fmt::Format(fmt, args...)); + } + + template void Todo(const u32 id, const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + fmt::Format("[%d] TODO: ", id) + fmt::Format(fmt, args...)); + } + + template void Todo(const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + " TODO: " + fmt::Format(fmt, args...)); } bool CheckId(u32 id) const From 5c84ad30a199b59950bebf16c3985d169c932ac5 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 21 Jul 2014 19:58:03 +0400 Subject: [PATCH 225/499] LogBase class for both SysCallBase and Module --- rpcs3/Emu/SysCalls/LogBase.h | 75 +++++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules.cpp | 2 +- rpcs3/Emu/SysCalls/Modules.h | 66 +--------------------- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 6 +- rpcs3/Emu/SysCalls/SysCalls.h | 69 ++--------------------- rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 + 7 files changed, 90 insertions(+), 132 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/LogBase.h diff --git a/rpcs3/Emu/SysCalls/LogBase.h b/rpcs3/Emu/SysCalls/LogBase.h new file mode 100644 index 0000000000..9be179baec --- /dev/null +++ b/rpcs3/Emu/SysCalls/LogBase.h @@ -0,0 +1,75 @@ +#pragma once + +class LogBase +{ + bool m_logging; + +public: + LogBase() + : m_logging(false) + { + } + + void SetLogging(bool value) + { + m_logging = value; + } + + virtual const std::string& GetName() const = 0; + + template void Notice(const u32 id, const char* fmt, Targs... args) + { + LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::Format(fmt, args...)); + } + + template void Notice(const char* fmt, Targs... args) + { + LOG_NOTICE(HLE, GetName() + ": " + fmt::Format(fmt, args...)); + } + + template __forceinline void Log(const char* fmt, Targs... args) + { + if (m_logging) + { + Notice(fmt, args...); + } + } + + template __forceinline void Log(const u32 id, const char* fmt, Targs... args) + { + if (m_logging) + { + Notice(id, fmt, args...); + } + } + + template void Warning(const u32 id, const char* fmt, Targs... args) + { + LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::Format(fmt, args...)); + } + + template void Warning(const char* fmt, Targs... args) + { + LOG_WARNING(HLE, GetName() + " warning: " + fmt::Format(fmt, args...)); + } + + template void Error(const u32 id, const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::Format(fmt, args...)); + } + + template void Error(const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + " error: " + fmt::Format(fmt, args...)); + } + + template void Todo(const u32 id, const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + fmt::Format("[%d] TODO: ", id) + fmt::Format(fmt, args...)); + } + + template void Todo(const char* fmt, Targs... args) + { + LOG_ERROR(HLE, GetName() + " TODO: " + fmt::Format(fmt, args...)); + } +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 4aa50a02fa..78b5d4ba8d 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -148,7 +148,7 @@ u16 Module::GetID() const return m_id; } -std::string Module::GetName() const +const std::string& Module::GetName() const { return m_name; } diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index b65eba3f4c..a7835db354 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -1,6 +1,7 @@ #pragma once #include "Emu/SysCalls/SC_FUNC.h" +#include "LogBase.h" //TODO struct ModuleFunc @@ -41,7 +42,7 @@ struct SFunc } }; -class Module +class Module : public LogBase { std::string m_name; u16 m_id; @@ -73,71 +74,10 @@ public: bool IsLoaded() const; u16 GetID() const; - std::string GetName() const; + virtual const std::string& GetName() const override; void SetName(const std::string& name); public: - bool IsLogging() - { - return Ini.HLELogging.GetValue(); - } - - template void Notice(const u32 id, const char* fmt, Targs... args) - { - LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::Format(fmt, args...)); - } - - template void Notice(const char* fmt, Targs... args) - { - LOG_NOTICE(HLE, GetName() + ": " + fmt::Format(fmt, args...)); - } - - template __forceinline void Log(const char* fmt, Targs... args) - { - if (IsLogging()) - { - Notice(fmt, args...); - } - } - - template __forceinline void Log(const u32 id, const char* fmt, Targs... args) - { - if (IsLogging()) - { - Notice(id, fmt, args...); - } - } - - template void Warning(const u32 id, const char* fmt, Targs... args) - { - LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::Format(fmt, args...)); - } - - template void Warning(const char* fmt, Targs... args) - { - LOG_WARNING(HLE, GetName() + " warning: " + fmt::Format(fmt, args...)); - } - - template void Error(const u32 id, const char* fmt, Targs... args) - { - LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::Format(fmt, args...)); - } - - template void Error(const char* fmt, Targs... args) - { - LOG_ERROR(HLE, GetName() + " error: " + fmt::Format(fmt, args...)); - } - - template void Todo(const u32 id, const char* fmt, Targs... args) - { - LOG_ERROR(HLE, GetName() + fmt::Format("[%d] TODO: ", id) + fmt::Format(fmt, args...)); - } - - template void Todo(const char* fmt, Targs... args) - { - LOG_ERROR(HLE, GetName() + " TODO: " + fmt::Format(fmt, args...)); - } - bool CheckID(u32 id) const; template bool CheckId(u32 id, T*& data) { diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 3303469eb4..81fe2a7ab7 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -1206,7 +1206,7 @@ void libmixer_init() 0xf000000048000000 // b ); - REG_SUB_EMPTY(libmixer, "surmxUti", cellSurMixerUtilGetLevelFromDB); - REG_SUB_EMPTY(libmixer, "surmxUti", cellSurMixerUtilGetLevelFromDBIndex); - REG_SUB_EMPTY(libmixer, "surmxUti", cellSurMixerUtilNoteToRatio); + REG_SUB(libmixer, "surmxUti", cellSurMixerUtilGetLevelFromDB, 0); + REG_SUB(libmixer, "surmxUti", cellSurMixerUtilGetLevelFromDBIndex, 0); + REG_SUB(libmixer, "surmxUti", cellSurMixerUtilNoteToRatio, 0); } diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 66d07cfd45..61629ba897 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -30,6 +30,7 @@ #include "Emu/Event.h" #include "rpcs3/Ini.h" +#include "LogBase.h" //#define SYSCALLS_DEBUG @@ -49,7 +50,7 @@ namespace detail{ template<> bool CheckId(u32 id, ID*& _id,const std::string &name); } -class SysCallBase //Module +class SysCallBase : public LogBase { private: std::string m_module_name; @@ -62,67 +63,9 @@ public: { } - const std::string& GetName() const { return m_module_name; } - - bool IsLogging() + virtual const std::string& GetName() const override { - return Ini.HLELogging.GetValue(); - } - - template void Notice(const u32 id, const char* fmt, Targs... args) - { - LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::Format(fmt, args...)); - } - - template void Notice(const char* fmt, Targs... args) - { - LOG_NOTICE(HLE, GetName() + ": " + fmt::Format(fmt, args...)); - } - - template __forceinline void Log(const char* fmt, Targs... args) - { - if (IsLogging()) - { - Notice(fmt, args...); - } - } - - template __forceinline void Log(const u32 id, const char* fmt, Targs... args) - { - if (IsLogging()) - { - Notice(id, fmt, args...); - } - } - - template void Warning(const u32 id, const char* fmt, Targs... args) - { - LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::Format(fmt, args...)); - } - - template void Warning(const char* fmt, Targs... args) - { - LOG_WARNING(HLE, GetName() + " warning: " + fmt::Format(fmt, args...)); - } - - template void Error(const u32 id, const char* fmt, Targs... args) - { - LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::Format(fmt, args...)); - } - - template void Error(const char* fmt, Targs... args) - { - LOG_ERROR(HLE, GetName() + " error: " + fmt::Format(fmt, args...)); - } - - template void Todo(const u32 id, const char* fmt, Targs... args) - { - LOG_ERROR(HLE, GetName() + fmt::Format("[%d] TODO: ", id) + fmt::Format(fmt, args...)); - } - - template void Todo(const char* fmt, Targs... args) - { - LOG_ERROR(HLE, GetName() + " TODO: " + fmt::Format(fmt, args...)); + return m_module_name; } bool CheckId(u32 id) const @@ -190,7 +133,3 @@ public: #define REG_SUB(module, group, name, ...) \ static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ module->AddFuncSub(group, name ## _table, #name, name) - -#define REG_SUB_EMPTY(module, group, name,...) \ - static const u64 name ## _table[] = {0}; \ - module->AddFuncSub(group, name ## _table, #name, name) diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 2ee34fa688..0465079533 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -315,6 +315,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 446d1a2613..11ce9c141d 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1093,5 +1093,8 @@ Emu\SysCalls\Modules + + Emu\SysCalls + \ No newline at end of file From e3fbfc4bda38a5b341bdc5a28fe024933f747465 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 21 Jul 2014 20:39:00 +0400 Subject: [PATCH 226/499] Logging option restored --- rpcs3/Emu/SysCalls/LogBase.h | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/SysCalls/LogBase.h b/rpcs3/Emu/SysCalls/LogBase.h index 9be179baec..3c583aa8e6 100644 --- a/rpcs3/Emu/SysCalls/LogBase.h +++ b/rpcs3/Emu/SysCalls/LogBase.h @@ -5,16 +5,22 @@ class LogBase bool m_logging; public: - LogBase() - : m_logging(false) - { - } - void SetLogging(bool value) { m_logging = value; } + bool GetLogging() + { + //return m_logging; // TODO + return Ini.HLELogging.GetValue(); + } + + LogBase() + { + SetLogging(false); + } + virtual const std::string& GetName() const = 0; template void Notice(const u32 id, const char* fmt, Targs... args) @@ -29,7 +35,7 @@ public: template __forceinline void Log(const char* fmt, Targs... args) { - if (m_logging) + if (GetLogging()) { Notice(fmt, args...); } @@ -37,7 +43,7 @@ public: template __forceinline void Log(const u32 id, const char* fmt, Targs... args) { - if (m_logging) + if (GetLogging()) { Notice(id, fmt, args...); } From fa5311718eb700a641bfbdf896cbfd83e2c46c98 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 21 Jul 2014 22:35:44 +0400 Subject: [PATCH 227/499] Small SPU cleanup --- rpcs3/Emu/CPU/CPUThread.h | 2 +- rpcs3/Emu/Cell/MFC.h | 230 ------------------------------------- rpcs3/Emu/Cell/SPUThread.h | 94 +++++---------- 3 files changed, 30 insertions(+), 296 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index c7db9d1c0d..343f992d8f 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -12,7 +12,7 @@ struct reservation_struct // std::mutex doesn't work because it probably wakes up waiting threads in the most unwanted order // and doesn't give a chance to finish some work before losing the reservation u32 owner; // id of thread that got reservation - u32 addr; + u64 addr; u32 size; u32 data32; u64 data64; diff --git a/rpcs3/Emu/Cell/MFC.h b/rpcs3/Emu/Cell/MFC.h index f85e4eb9b3..9f93ce6104 100644 --- a/rpcs3/Emu/Cell/MFC.h +++ b/rpcs3/Emu/Cell/MFC.h @@ -60,237 +60,7 @@ enum MFC_SPU_MAX_QUEUE_SPACE = 0x10, }; -/*struct DMAC_Queue -{ - bool is_valid; - u64 ea; - u32 lsa; - u16 size; - u32 op; - u8 tag; - u8 rt; - u16 list_addr; - u16 list_size; - u32 dep_state; - u32 cmd; - u32 dep_type; -}; - -struct DMAC_Proxy -{ - u64 ea; - u32 lsa; - u16 size; - u32 op; - u8 tag; - u8 rt; - u16 list_addr; - u16 list_size; - u32 dep_state; - u32 cmd; - u32 dep_type; -}; - -template -class SPUReg -{ - u64 m_addr; - u32 m_pos; - -public: - static const size_t max_count = _max_count; - static const size_t size = max_count * 4; - - SPUReg() - { - Init(); - } - - void Init() - { - m_pos = 0; - } - - void SetAddr(u64 addr) - { - m_addr = addr; - } - - u64 GetAddr() const - { - return m_addr; - } - - __forceinline bool Pop(u32& res) - { - if(!m_pos) return false; - res = Memory.Read32(m_addr + m_pos--); - return true; - } - - __forceinline bool Push(u32 value) - { - if(m_pos >= max_count) return false; - Memory.Write32(m_addr + m_pos++, value); - return true; - } - - u32 GetCount() const - { - return m_pos; - } - - u32 GetFreeCount() const - { - return max_count - m_pos; - } - - void SetValue(u32 value) - { - Memory.Write32(m_addr, value); - } - - u32 GetValue() const - { - return Memory.Read32(m_addr); - } -};*/ - struct DMAC { u64 ls_offset; - - /*//DMAC_Queue queue[MFC_SPU_MAX_QUEUE_SPACE]; //not used yet - DMAC_Proxy proxy[MFC_PPU_MAX_QUEUE_SPACE+MFC_SPU_MAX_QUEUE_SPACE]; //temporarily 24 - u32 queue_pos; - u32 proxy_pos; - long queue_lock; - volatile std::atomic proxy_lock; - - bool ProcessCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) - { - //returns true if the command should be deleted from the queue - if (cmd & (MFC_BARRIER_MASK | MFC_FENCE_MASK)) _mm_mfence(); - - switch(cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK)) - { - case MFC_PUT_CMD: - Memory.Copy(ea, ls_offset + lsa, size); - return true; - - case MFC_GET_CMD: - Memory.Copy(ls_offset + lsa, ea, size); - return true; - - default: - LOG_ERROR(HLE, "DMAC::ProcessCmd(): Unknown DMA cmd."); - return true; - } - } - - u32 Cmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) - { - if(!Memory.IsGoodAddr(ls_offset + lsa, size) || !Memory.IsGoodAddr(ea, size)) - { - return MFC_PPU_DMA_CMD_SEQUENCE_ERROR; - } - - if(proxy_pos >= MFC_PPU_MAX_QUEUE_SPACE) - { - return MFC_PPU_DMA_QUEUE_FULL; - } - - ProcessCmd(cmd, tag, lsa, ea, size); - - return MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL; - } - - void ClearCmd() - { - while (std::atomic_exchange(&proxy_lock, 1)); - _mm_lfence(); - memcpy(proxy, proxy + 1, --proxy_pos * sizeof(DMAC_Proxy)); - _mm_sfence(); - proxy_lock = 0; //release lock - } - - void DoCmd() - { - if(proxy_pos) - { - const DMAC_Proxy& p = proxy[0]; - if (ProcessCmd(p.cmd, p.tag, p.lsa, p.ea, p.size)) - { - ClearCmd(); - } - } - }*/ }; - -/*struct MFC -{ - SPUReg<1> MFC_LSA; - SPUReg<1> MFC_EAH; - SPUReg<1> MFC_EAL; - SPUReg<1> MFC_Size_Tag; - SPUReg<1> MFC_CMDStatus; - SPUReg<1> MFC_QStatus; - SPUReg<1> Prxy_QueryType; - SPUReg<1> Prxy_QueryMask; - SPUReg<1> Prxy_TagStatus; - SPUReg<1> SPU_Out_MBox; - SPUReg<4> SPU_In_MBox; - SPUReg<1> SPU_MBox_Status; - SPUReg<1> SPU_RunCntl; - SPUReg<1> SPU_Status; - SPUReg<1> SPU_NPC; - SPUReg<1> SPU_RdSigNotify1; - SPUReg<1> SPU_RdSigNotify2; - - DMAC dmac; - - void Handle() - { - u32 cmd = MFC_CMDStatus.GetValue(); - - if(cmd) - { - u16 op = cmd & MFC_MASK_CMD; - - switch(op) - { - case MFC_PUT_CMD: - case MFC_GET_CMD: - { - u32 lsa = MFC_LSA.GetValue(); - u64 ea = (u64)MFC_EAL.GetValue() | ((u64)MFC_EAH.GetValue() << 32); - u32 size_tag = MFC_Size_Tag.GetValue(); - u16 tag = (u16)size_tag; - u16 size = size_tag >> 16; - - LOG_WARNING(HLE, "RawSPU DMA %s:", op == MFC_PUT_CMD ? "PUT" : "GET"); - LOG_WARNING(HLE, "*** lsa = 0x%x", lsa); - LOG_WARNING(HLE, "*** ea = 0x%llx", ea); - LOG_WARNING(HLE, "*** tag = 0x%x", tag); - LOG_WARNING(HLE, "*** size = 0x%x", size); - LOG_WARNING(HLE, " "); - - MFC_CMDStatus.SetValue(dmac.Cmd(cmd, tag, lsa, ea, size)); - } - break; - - default: - LOG_ERROR(HLE, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x)", op, cmd); - break; - } - } - - if(Prxy_QueryType.GetValue() == 2) - { - Prxy_QueryType.SetValue(0); - u32 mask = Prxy_QueryMask.GetValue(); - // - MFC_QStatus.SetValue(mask); - } - } -};*/ diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index abc187e9c2..0598a55018 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -579,7 +579,7 @@ public: #define LOG_DMAC(type, text) type(Log::SPU, "DMAC::ProcessCmd(cmd=0x%x, tag=0x%x, lsa=0x%x, ea=0x%llx, size=0x%x): " text, cmd, tag, lsa, ea, size) - bool ProcessCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) + void ProcessCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) { if (cmd & (MFC_BARRIER_MASK | MFC_FENCE_MASK)) _mm_mfence(); @@ -588,7 +588,8 @@ public: if (ea >= 0x100000000) { LOG_DMAC(LOG_ERROR, "Invalid external address"); - return false; + Emu.Pause(); + return; } else if (group) { @@ -597,7 +598,8 @@ public: if (num >= group->list.size() || !group->list[num]) { LOG_DMAC(LOG_ERROR, "Invalid thread (SPU Thread Group MMIO)"); - return false; + Emu.Pause(); + return; } SPUThread* spu = (SPUThread*)Emu.GetCPU().GetThread(group->list[num]); @@ -611,18 +613,20 @@ public: else if ((cmd & MFC_PUT_CMD) && size == 4 && (addr == SYS_SPU_THREAD_SNR1 || addr == SYS_SPU_THREAD_SNR2)) { spu->WriteSNR(SYS_SPU_THREAD_SNR2 == addr, Memory.Read32(dmac.ls_offset + lsa)); - return true; + return; } else { LOG_DMAC(LOG_ERROR, "Invalid register (SPU Thread Group MMIO)"); - return false; + Emu.Pause(); + return; } } else { LOG_DMAC(LOG_ERROR, "Thread group not set (SPU Thread Group MMIO)"); - return false; + Emu.Pause(); + return; } } else if (ea >= RAW_SPU_BASE_ADDR && size == 4) @@ -632,19 +636,20 @@ public: case MFC_PUT_CMD: { Memory.Write32(ea, ReadLS32(lsa)); - return true; + return; } case MFC_GET_CMD: { WriteLS32(lsa, Memory.Read32(ea)); - return true; + return; } default: { LOG_DMAC(LOG_ERROR, "Unknown DMA command"); - return false; + Emu.Pause(); + return; } } } @@ -653,53 +658,27 @@ public: { case MFC_PUT_CMD: { - if (Memory.Copy(ea, dmac.ls_offset + lsa, size)) - { - return true; - } - else - { - LOG_DMAC(LOG_ERROR, "PUT* cmd failed"); - return false; // TODO: page fault (?) - } + memcpy(Memory + ea, Memory + dmac.ls_offset + lsa, size); + return; } case MFC_GET_CMD: { - if (Memory.Copy(dmac.ls_offset + lsa, ea, size)) - { - return true; - } - else - { - LOG_DMAC(LOG_ERROR, "GET* cmd failed"); - return false; // TODO: page fault (?) - } + memcpy(Memory + dmac.ls_offset + lsa, Memory + ea, size); + return; } default: { LOG_DMAC(LOG_ERROR, "Unknown DMA command"); - return false; // ??? + Emu.Pause(); + return; } } } #undef LOG_CMD - u32 dmacCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) - { - /*if(proxy_pos >= MFC_PPU_MAX_QUEUE_SPACE) - { - return MFC_PPU_DMA_QUEUE_FULL; - }*/ - - if (ProcessCmd(cmd, tag, lsa, ea, size)) - return MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL; - else - return MFC_PPU_DMA_CMD_SEQUENCE_ERROR; - } - void ListCmd(u32 lsa, u64 ea, u16 tag, u16 size, u32 cmd, MFCReg& MFCArgs) { u32 list_addr = ea & 0x3ffff; @@ -713,7 +692,7 @@ public: be_t ea; // External Address Low }; - u32 result = MFC_PPU_DMA_CMD_SEQUENCE_ERROR; + u32 result = MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL; for (u32 i = 0; i < list_size; i++) { @@ -723,15 +702,12 @@ public: if (size < 16 && size != 1 && size != 2 && size != 4 && size != 8) { LOG_ERROR(Log::SPU, "DMA List: invalid transfer size(%d)", size); - return; + result = MFC_PPU_DMA_CMD_SEQUENCE_ERROR; + break; } u32 addr = rec->ea; - result = dmacCmd(cmd, tag, lsa | (addr & 0xf), addr, size); - if (result == MFC_PPU_DMA_CMD_SEQUENCE_ERROR) - { - break; - } + ProcessCmd(cmd, tag, lsa | (addr & 0xf), addr, size); if (Ini.HLELogging.GetValue() || rec->s) LOG_NOTICE(Log::SPU, "*** list element(%d/%d): s = 0x%x, ts = 0x%x, low ea = 0x%x (lsa = 0x%x)", @@ -746,6 +722,8 @@ public: if (StallList[tag].MFCArgs) { LOG_ERROR(Log::SPU, "DMA List: existing stalled list found (tag=%d)", tag); + result = MFC_PPU_DMA_CMD_SEQUENCE_ERROR; + break; } StallList[tag].MFCArgs = &MFCArgs; StallList[tag].cmd = cmd; @@ -753,7 +731,7 @@ public: StallList[tag].lsa = lsa; StallList[tag].size = (list_size - i - 1) * 8; - return; + break; } } @@ -784,7 +762,8 @@ public: (op & MFC_FENCE_MASK ? "F" : ""), lsa, ea, tag, size, cmd); - MFCArgs.CMDStatus.SetValue(dmacCmd(cmd, tag, lsa, ea, size)); + ProcessCmd(cmd, tag, lsa, ea, size); + MFCArgs.CMDStatus.SetValue(MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL); } break; @@ -871,21 +850,6 @@ public: { MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); } - /*u32 last_d = last_q * 2; - if (buf[last]._u32[last_d] == reservation.data[last]._u32[last_d] && buf[last]._u32[last_d+1] != reservation.data[last]._u32[last_d+1]) - { - last_d++; - } - else if (buf[last]._u32[last_d+1] == reservation.data[last]._u32[last_d+1]) - { - last_d; - } - else // full 64 bit - { - LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: TODO: 64bit compare and swap"); - Emu.Pause(); - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); - }*/ } } else From 2a5506dae6d0c01ee3c2a9855831277309e325e7 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 21 Jul 2014 23:05:58 +0400 Subject: [PATCH 228/499] cellSyncBarrierInitialize implemented (SPU sample works) --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 118 ++++++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellSync.h | 8 +- 2 files changed, 115 insertions(+), 11 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 68981edf65..9265e9decd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -10,9 +10,9 @@ //Module cellSync("cellSync", cellSync_init); Module *cellSync = nullptr; -int cellSyncMutexInitialize(mem_ptr_t mutex) +s32 cellSyncMutexInitialize(mem_ptr_t mutex) { - cellSync->Log("cellSyncMutexInitialize(mutex=0x%x)", mutex.GetAddr()); + cellSync->Log("cellSyncMutexInitialize(mutex_addr=0x%x)", mutex.GetAddr()); if (!mutex) { @@ -29,9 +29,9 @@ int cellSyncMutexInitialize(mem_ptr_t mutex) return CELL_OK; } -int cellSyncMutexLock(mem_ptr_t mutex) +s32 cellSyncMutexLock(mem_ptr_t mutex) { - cellSync->Log("cellSyncMutexLock(mutex=0x%x)", mutex.GetAddr()); + cellSync->Log("cellSyncMutexLock(mutex_addr=0x%x)", mutex.GetAddr()); if (!mutex) { @@ -58,10 +58,10 @@ int cellSyncMutexLock(mem_ptr_t mutex) // prx: wait until another u16 value == old value while (old_order != mutex->m_freed) { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellSyncMutexLock(mutex=0x%x) aborted", mutex.GetAddr()); + LOG_WARNING(HLE, "cellSyncMutexLock(mutex_addr=0x%x) aborted", mutex.GetAddr()); break; } } @@ -71,9 +71,9 @@ int cellSyncMutexLock(mem_ptr_t mutex) return CELL_OK; } -int cellSyncMutexTryLock(mem_ptr_t mutex) +s32 cellSyncMutexTryLock(mem_ptr_t mutex) { - cellSync->Log("cellSyncMutexTryLock(mutex=0x%x)", mutex.GetAddr()); + cellSync->Log("cellSyncMutexTryLock(mutex_addr=0x%x)", mutex.GetAddr()); if (!mutex) { @@ -105,9 +105,9 @@ int cellSyncMutexTryLock(mem_ptr_t mutex) return CELL_OK; } -int cellSyncMutexUnlock(mem_ptr_t mutex) +s32 cellSyncMutexUnlock(mem_ptr_t mutex) { - cellSync->Log("cellSyncMutexUnlock(mutex=0x%x)", mutex.GetAddr()); + cellSync->Log("cellSyncMutexUnlock(mutex_addr=0x%x)", mutex.GetAddr()); if (!mutex) { @@ -133,10 +133,108 @@ int cellSyncMutexUnlock(mem_ptr_t mutex) return CELL_OK; } +s32 cellSyncBarrierInitialize(mem_ptr_t barrier, u16 total_count) +{ + cellSync->Log("cellSyncBarrierInitialize(barrier_addr=0x%x, total_count=%d)", barrier.GetAddr(), total_count); + + if (!barrier) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (barrier.GetAddr() % 4) + { + return CELL_SYNC_ERROR_ALIGN; + } + if (!total_count || total_count > 32767) + { + return CELL_SYNC_ERROR_INVAL; + } + + // prx: zeroize first u16, write total_count in second u16 and sync + barrier->m_value = 0; + barrier->m_count = total_count; + InterlockedCompareExchange(&barrier->m_data(), 0, 0); + return CELL_OK; +} + +s32 cellSyncBarrierNotify(mem_ptr_t barrier) +{ + cellSync->Todo("cellSyncBarrierNotify(barrier_addr=0x%x)", barrier.GetAddr()); + + if (!barrier) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (barrier.GetAddr() % 4) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO + return CELL_OK; +} + +s32 cellSyncBarrierTryNotify(mem_ptr_t barrier) +{ + cellSync->Todo("cellSyncBarrierTryNotify(barrier_addr=0x%x)", barrier.GetAddr()); + + if (!barrier) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (barrier.GetAddr() % 4) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO + return CELL_OK; +} + +s32 cellSyncBarrierWait(mem_ptr_t barrier) +{ + cellSync->Todo("cellSyncBarrierWait(barrier_addr=0x%x)", barrier.GetAddr()); + + if (!barrier) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (barrier.GetAddr() % 4) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO + return CELL_OK; +} + +s32 cellSyncBarrierTryWait(mem_ptr_t barrier) +{ + cellSync->Todo("cellSyncBarrierTryWait(barrier_addr=0x%x)", barrier.GetAddr()); + + if (!barrier) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (barrier.GetAddr() % 4) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO + return CELL_OK; +} + void cellSync_init() { cellSync->AddFunc(0xa9072dee, cellSyncMutexInitialize); cellSync->AddFunc(0x1bb675c2, cellSyncMutexLock); cellSync->AddFunc(0xd06918c4, cellSyncMutexTryLock); cellSync->AddFunc(0x91f2b7b0, cellSyncMutexUnlock); + + cellSync->AddFunc(0x07254fda, cellSyncBarrierInitialize); + cellSync->AddFunc(0xf06a6415, cellSyncBarrierNotify); + cellSync->AddFunc(0x268edd6d, cellSyncBarrierTryNotify); + cellSync->AddFunc(0x35f21355, cellSyncBarrierWait); + cellSync->AddFunc(0x6c272124, cellSyncBarrierTryWait); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 36a768986e..c9dd86f607 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -32,7 +32,13 @@ static_assert(sizeof(CellSyncMutex) == 4, "CellSyncMutex: wrong size"); struct CellSyncBarrier { - be_t m_data; + be_t m_value; + be_t m_count; + + volatile u32& m_data() + { + return *reinterpret_cast(this); + }; }; static_assert(sizeof(CellSyncBarrier) == 4, "CellSyncBarrier: wrong size"); \ No newline at end of file From 356904d198200edd2615b3d839bfe56c46b6a976 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 22 Jul 2014 01:55:02 +0400 Subject: [PATCH 229/499] .gitignore updated --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 84200d4e1b..033f921069 100644 --- a/.gitignore +++ b/.gitignore @@ -64,5 +64,6 @@ rpcs3/git-version.h bin/dev_hdd0/*.txt x64/Debug/emucore.lib x64/Release/emucore.lib +rpcs3/x64/* .DS_Store From 1c32a284e1f4d5418f09e14856eef05cfae9a287 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 22 Jul 2014 18:46:31 +0400 Subject: [PATCH 230/499] cellSyncRwmInitialize implemented cellSyncRwmRead implemented (SPU sample works) --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 139 ++++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSync.h | 51 +++++++-- 2 files changed, 178 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 9265e9decd..bdd6dd6a0b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -225,6 +225,139 @@ s32 cellSyncBarrierTryWait(mem_ptr_t barrier) return CELL_OK; } +s32 cellSyncRwmInitialize(mem_ptr_t rwm, u32 buffer_addr, u32 buffer_size) +{ + cellSync->Log("cellSyncRwmInitialize(rwm_addr=0x%x, buffer_addr=0x%x, buffer_size=0x%x)", rwm.GetAddr(), buffer_addr, buffer_size); + + if (!rwm || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (rwm.GetAddr() % 16 || buffer_addr % 128) + { + return CELL_SYNC_ERROR_ALIGN; + } + if (buffer_size % 128 || buffer_size > 0x4000) + { + return CELL_SYNC_ERROR_INVAL; + } + + // prx: zeroize first u16 and second u16, write buffer_size in second u32, write buffer_addr in second u64 and sync + rwm->m_data() = 0; + rwm->m_size = buffer_size; + rwm->m_addr = (u64)buffer_addr; + InterlockedCompareExchange(&rwm->m_data(), 0, 0); + return CELL_OK; +} + +s32 cellSyncRwmRead(mem_ptr_t rwm, u32 buffer_addr) +{ + cellSync->Log("cellSyncRwmRead(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); + + if (!rwm || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (rwm.GetAddr() % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // prx: atomically load first u32, repeat until second u16 == 0, increase first u16 and sync + while (true) + { + const u32 old_data = rwm->m_data(); + CellSyncRwm new_rwm; + new_rwm.m_data() = old_data; + + if (new_rwm.m_writers.ToBE()) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("cellSyncRwmRead(rwm_addr=0x%x) aborted", rwm.GetAddr()); + return CELL_OK; + } + continue; + } + + new_rwm.m_readers++; + if (InterlockedCompareExchange(&rwm->m_data(), new_rwm.m_data(), old_data) == old_data) break; + } + + // copy data to buffer_addr + memcpy(Memory + buffer_addr, Memory + (u64)rwm->m_addr, (u32)rwm->m_size); + + // prx: load first u32, return 0x8041010C if first u16 == 0, atomically decrease it + while (true) + { + const u32 old_data = rwm->m_data(); + CellSyncRwm new_rwm; + new_rwm.m_data() = old_data; + + if (!new_rwm.m_readers.ToBE()) + { + cellSync->Error("cellSyncRwmRead(rwm_addr=0x%x): m_readers == 0 (m_writers=%d)", rwm.GetAddr(), (u16)new_rwm.m_writers); + return CELL_SYNC_ERROR_ABORT; + } + + new_rwm.m_readers--; + if (InterlockedCompareExchange(&rwm->m_data(), new_rwm.m_data(), old_data) == old_data) break; + } + return CELL_OK; +} + +s32 cellSyncRwmTryRead(mem_ptr_t rwm, u32 buffer_addr) +{ + cellSync->Todo("cellSyncRwmTryRead(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); + + if (!rwm || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (rwm.GetAddr() % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO + return CELL_OK; +} + +s32 cellSyncRwmWrite(mem_ptr_t rwm, u32 buffer_addr) +{ + cellSync->Todo("cellSyncRwmWrite(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); + + if (!rwm || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (rwm.GetAddr() % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO + return CELL_OK; +} + +s32 cellSyncRwmTryWrite(mem_ptr_t rwm, u32 buffer_addr) +{ + cellSync->Todo("cellSyncRwmTryWrite(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); + + if (!rwm || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (rwm.GetAddr() % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO + return CELL_OK; +} + void cellSync_init() { cellSync->AddFunc(0xa9072dee, cellSyncMutexInitialize); @@ -237,4 +370,10 @@ void cellSync_init() cellSync->AddFunc(0x268edd6d, cellSyncBarrierTryNotify); cellSync->AddFunc(0x35f21355, cellSyncBarrierWait); cellSync->AddFunc(0x6c272124, cellSyncBarrierTryWait); + + cellSync->AddFunc(0xfc48b03f, cellSyncRwmInitialize); + cellSync->AddFunc(0xcece771f, cellSyncRwmRead); + cellSync->AddFunc(0xa6669751, cellSyncRwmTryRead); + cellSync->AddFunc(0xed773f5f, cellSyncRwmWrite); + cellSync->AddFunc(0xba5bee48, cellSyncRwmTryWrite); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index c9dd86f607..02829fcdb1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -3,18 +3,30 @@ // Return Codes enum { - CELL_SYNC_ERROR_AGAIN = 0x80410101, - CELL_SYNC_ERROR_INVAL = 0x80410102, - CELL_SYNC_ERROR_NOMEM = 0x80410104, + CELL_SYNC_ERROR_AGAIN = 0x80410101, + CELL_SYNC_ERROR_INVAL = 0x80410102, + CELL_SYNC_ERROR_NOSYS = 0x80410103, // ??? + CELL_SYNC_ERROR_NOMEM = 0x80410104, + CELL_SYNC_ERROR_SRCH = 0x80410105, // ??? + CELL_SYNC_ERROR_NOENT = 0x80410106, // ??? + CELL_SYNC_ERROR_NOEXEC = 0x80410107, // ??? CELL_SYNC_ERROR_DEADLK = 0x80410108, - CELL_SYNC_ERROR_PERM = 0x80410109, - CELL_SYNC_ERROR_BUSY = 0x8041010A, - CELL_SYNC_ERROR_STAT = 0x8041010F, - CELL_SYNC_ERROR_ALIGN = 0x80410110, - CELL_SYNC_ERROR_NULL_POINTER = 0x80410111, - CELL_SYNC_ERROR_NOT_SUPPORTED_THREAD = 0x80410112, - CELL_SYNC_ERROR_NO_NOTIFIER = 0x80410113, - CELL_SYNC_ERROR_NO_SPU_CONTEXT_STORAGE = 0x80410114, + CELL_SYNC_ERROR_PERM = 0x80410109, + CELL_SYNC_ERROR_BUSY = 0x8041010A, + //////////////////////// 0x8041010B, // ??? + CELL_SYNC_ERROR_ABORT = 0x8041010C, // ??? + CELL_SYNC_ERROR_FAULT = 0x8041010D, // ??? + CELL_SYNC_ERROR_CHILD = 0x8041010E, // ??? + CELL_SYNC_ERROR_STAT = 0x8041010F, + CELL_SYNC_ERROR_ALIGN = 0x80410110, + + CELL_SYNC_ERROR_NULL_POINTER = 0x80410111, + + CELL_SYNC_ERROR_NOT_SUPPORTED_THREAD = 0x80410112, // ??? + CELL_SYNC_ERROR_SHOTAGE = 0x80410112, // ??? + CELL_SYNC_ERROR_NO_NOTIFIER = 0x80410113, // ??? + CELL_SYNC_ERROR_UNKNOWNKEY = 0x80410113, // ??? + CELL_SYNC_ERROR_NO_SPU_CONTEXT_STORAGE = 0x80410114, // ??? }; struct CellSyncMutex @@ -41,4 +53,19 @@ struct CellSyncBarrier }; }; -static_assert(sizeof(CellSyncBarrier) == 4, "CellSyncBarrier: wrong size"); \ No newline at end of file +static_assert(sizeof(CellSyncBarrier) == 4, "CellSyncBarrier: wrong size"); + +struct CellSyncRwm +{ + be_t m_readers; + be_t m_writers; + be_t m_size; + be_t m_addr; + + volatile u32& m_data() + { + return *reinterpret_cast(this); + }; +}; + +static_assert(sizeof(CellSyncRwm) == 16, "CellSyncBarrier: wrong size"); From fe46a4591564b2317a6f7b2f3b68ec28dccb6fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Tue, 22 Jul 2014 17:16:15 +0200 Subject: [PATCH 231/499] Fixed memory exception on cellJpgDec & cellGifDec * Added support for CELL_JPGDEC_BUFFER and CELL_GIFDEC_BUFFER. --- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 95 +++++++++++++---------- rpcs3/Emu/SysCalls/Modules/cellGifDec.h | 8 +- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 71 +++++++++++++---- rpcs3/Emu/SysCalls/Modules/cellJpgDec.h | 12 ++- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 11 ++- rpcs3/Emu/SysCalls/Modules/cellPngDec.h | 38 ++++----- 6 files changed, 146 insertions(+), 89 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index b21151bbdd..3e39e91d54 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -29,49 +29,33 @@ int cellGifDecOpen(u32 mainHandle, mem32_t subHandle, const mem_ptr_tsrcSelect) - { - case CELL_GIFDEC_FILE: - stream = Emu.GetVFS().Open(src->fileName.GetString(), vfsRead); - stream->Seek(src->fileOffset); - src->fileSize; - break; - - case CELL_GIFDEC_BUFFER: - if(src->streamSize < 5) - return CELL_GIFDEC_ERROR_ARG; - - stream = new vfsStreamMemory(src->streamPtr.GetAddr(), src->streamSize); - break; - - default: - return CELL_GIFDEC_ERROR_ARG; - } - - if(!stream->IsOpened()) - { - return CELL_GIFDEC_ERROR_OPEN_FILE; - } - */ - + CellGifDecSubHandle *current_subHandle = new CellGifDecSubHandle; + current_subHandle->fd = 0; + current_subHandle->src = *src; - // Get file descriptor - MemoryAllocator> fd; - int ret = cellFsOpen(src->fileName, 0, fd, 0, 0); - current_subHandle->fd = fd->ToLE(); - if(ret != CELL_OK) return CELL_GIFDEC_ERROR_OPEN_FILE; + switch(src->srcSelect.ToBE()) + { + case se32(CELL_GIFDEC_BUFFER): + current_subHandle->fileSize = src->streamSize.ToLE(); + break; - // Get size of file - MemoryAllocator sb; // Alloc a CellFsStat struct - ret = cellFsFstat(current_subHandle->fd, sb.GetAddr()); - if(ret != CELL_OK) return ret; - current_subHandle->fileSize = sb->st_size; // Get CellFsStat.st_size + case se32(CELL_GIFDEC_FILE): + // Get file descriptor + MemoryAllocator> fd; + int ret = cellFsOpen(src->fileName, 0, fd.GetAddr(), 0, 0); + current_subHandle->fd = fd->ToLE(); + if (ret != CELL_OK) return CELL_GIFDEC_ERROR_OPEN_FILE; - // From now, every u32 subHandle argument is a pointer to a CellPngDecSubHandle struct. + // Get size of file + MemoryAllocator sb; // Alloc a CellFsStat struct + ret = cellFsFstat(current_subHandle->fd, sb.GetAddr()); + if (ret != CELL_OK) return ret; + current_subHandle->fileSize = sb->st_size; // Get CellFsStat.st_size + break; + } + + // From now, every u32 subHandle argument is a pointer to a CellGifDecSubHandle struct. subHandle = cellGifDec->GetNewId(current_subHandle); return CELL_OK; @@ -94,8 +78,20 @@ int cellGifDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t buffer(13); // Alloc buffer for GIF header MemoryAllocator> pos, nread; - cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, buffer.GetAddr(), buffer.GetSize(), nread); + switch(subHandle_data->src.srcSelect.ToBE()) + { + case se32(CELL_GIFDEC_BUFFER): + if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) { + cellGifDec->Error("cellGifDecReadHeader() failed ()"); + return CELL_EFAULT; + } + break; + + case se32(CELL_GIFDEC_FILE): + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); + cellFsRead(fd, buffer.GetAddr(), buffer.GetSize(), nread); + break; + } if (*buffer.To>(0) != 0x47494638 || (*buffer.To(4) != 0x6139 && *buffer.To(4) != 0x6137)) // Error: The first 6 bytes are not a valid GIF signature @@ -166,8 +162,21 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m //Copy the GIF file to a buffer MemoryAllocator gif(fileSize); MemoryAllocator pos, nread; - cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, gif.GetAddr(), gif.GetSize(), nread); + + switch(subHandle_data->src.srcSelect.ToBE()) + { + case se32(CELL_GIFDEC_BUFFER): + if (!Memory.Copy(gif.GetAddr(), subHandle_data->src.streamPtr.ToLE(), gif.GetSize())) { + cellGifDec->Error("cellGifDecDecodeData() failed (I)"); + return CELL_EFAULT; + } + break; + + case se32(CELL_GIFDEC_FILE): + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); + cellFsRead(fd, gif.GetAddr(), gif.GetSize(), nread); + break; + } //Decode GIF file. (TODO: Is there any faster alternative? Can we do it without external libraries?) int width, height, actual_components; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.h b/rpcs3/Emu/SysCalls/Modules/cellGifDec.h index e6b13ac7c2..7ed3160b27 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.h @@ -16,8 +16,8 @@ enum enum CellGifDecStreamSrcSel { - CELL_GIFDEC_FILE = 0, //Input from a file - CELL_GIFDEC_BUFFER = 1, //Input from a buffer + CELL_GIFDEC_FILE = 0, // Input from a file + CELL_GIFDEC_BUFFER = 1, // Input from a buffer }; enum CellGifDecColorSpace @@ -105,10 +105,12 @@ struct CellGifDecDataCtrlParam be_t outputBytesPerLine; }; -struct CellGifDecSubHandle //Custom struct +//Custom structs +struct CellGifDecSubHandle { u32 fd; u64 fileSize; CellGifDecInfo info; CellGifDecOutParam outParam; + CellGifDecSrc src; }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index 8a7aa659c7..b3e5dd50af 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -33,24 +33,36 @@ int cellJpgDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s cellJpgDec->Warning("cellJpgDecOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x)", mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo); - if (!subHandle.IsGood() || !src.IsGood() || !openInfo.IsGood()) + if (!subHandle.IsGood() || !src.IsGood()) return CELL_JPGDEC_ERROR_ARG; CellJpgDecSubHandle *current_subHandle = new CellJpgDecSubHandle; - // Get file descriptor - MemoryAllocator> fd; - int ret = cellFsOpen(src->fileName, 0, fd, 0, 0); - current_subHandle->fd = fd->ToLE(); - if(ret != CELL_OK) return CELL_JPGDEC_ERROR_OPEN_FILE; + current_subHandle->fd = 0; + current_subHandle->src = *src; - // Get size of file - MemoryAllocator sb; // Alloc a CellFsStat struct - ret = cellFsFstat(current_subHandle->fd, sb.GetAddr()); - if(ret != CELL_OK) return ret; - current_subHandle->fileSize = sb->st_size; // Get CellFsStat.st_size + switch(src->srcSelect.ToBE()) + { + case se32(CELL_JPGDEC_BUFFER): + current_subHandle->fileSize = src->streamSize.ToLE(); + break; - // From now, every u32 subHandle argument is a pointer to a CellPngDecSubHandle struct. + case se32(CELL_JPGDEC_FILE): + // Get file descriptor + MemoryAllocator> fd; + int ret = cellFsOpen(src->fileName, 0, fd.GetAddr(), 0, 0); + current_subHandle->fd = fd->ToLE(); + if (ret != CELL_OK) return CELL_JPGDEC_ERROR_OPEN_FILE; + + // Get size of file + MemoryAllocator sb; // Alloc a CellFsStat struct + ret = cellFsFstat(current_subHandle->fd, sb.GetAddr()); + if (ret != CELL_OK) return ret; + current_subHandle->fileSize = sb->st_size; // Get CellFsStat.st_size + break; + } + + // From now, every u32 subHandle argument is a pointer to a CellJpgDecSubHandle struct. subHandle = cellJpgDec->GetNewId(current_subHandle); return CELL_OK; @@ -83,12 +95,24 @@ int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tfileSize; CellJpgDecInfo& current_info = subHandle_data->info; - //Copy the JPG file to a buffer + //Write the header to buffer MemoryAllocator buffer(fileSize); MemoryAllocator> pos, nread; - cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, buffer.GetAddr(), buffer.GetSize(), nread); + switch(subHandle_data->src.srcSelect.ToBE()) + { + case se32(CELL_JPGDEC_BUFFER): + if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) { + cellJpgDec->Error("cellJpgDecReadHeader() failed ()"); + return CELL_EFAULT; + } + break; + + case se32(CELL_JPGDEC_FILE): + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); + cellFsRead(fd, buffer.GetAddr(), buffer.GetSize(), nread); + break; + } if (*buffer.To(0) != 0xE0FFD8FF || // Error: Not a valid SOI header *buffer.To(6) != 0x4649464A) // Error: Not a valid JFIF string @@ -146,8 +170,21 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m //Copy the JPG file to a buffer MemoryAllocator jpg(fileSize); MemoryAllocator pos, nread; - cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, jpg.GetAddr(), jpg.GetSize(), nread); + + switch(subHandle_data->src.srcSelect.ToBE()) + { + case se32(CELL_JPGDEC_BUFFER): + if (!Memory.Copy(jpg.GetAddr(), subHandle_data->src.streamPtr.ToLE(), jpg.GetSize())) { + cellJpgDec->Error("cellJpgDecDecodeData() failed (I)"); + return CELL_EFAULT; + } + break; + + case se32(CELL_JPGDEC_FILE): + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); + cellFsRead(fd, jpg.GetAddr(), jpg.GetSize(), nread); + break; + } //Decode JPG file. (TODO: Is there any faster alternative? Can we do it without external libraries?) int width, height, actual_components; diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.h b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.h index 207dc0a7c2..4fa1438385 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.h @@ -27,6 +27,12 @@ enum CellJpgDecColorSpace CELL_JPG_GRAYSCALE_TO_ALPHA_ARGB = 41, }; +enum CellJpgDecStreamSrcSel +{ + CELL_JPGDEC_FILE = 0, + CELL_JPGDEC_BUFFER = 1, +}; + enum CellJpgDecDecodeStatus { CELL_JPGDEC_DEC_STATUS_FINISH = 0, //Decoding finished @@ -92,10 +98,12 @@ struct CellJpgDecDataOutInfo be_t status; }; -struct CellJpgDecSubHandle //Custom struct +// Custom structs +struct CellJpgDecSubHandle { u32 fd; u64 fileSize; CellJpgDecInfo info; CellJpgDecOutParam outParam; -}; \ No newline at end of file + CellJpgDecSrc src; +}; diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 1b7e153a4c..adb503a8d3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -60,7 +60,6 @@ int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s return CELL_PNGDEC_ERROR_ARG; CellPngDecSubHandle *current_subHandle = new CellPngDecSubHandle; - current_subHandle->fd = 0; current_subHandle->src = *src; @@ -212,16 +211,16 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m MemoryAllocator png(fileSize); MemoryAllocator pos, nread; - switch(subHandle_data->src.srcSelect.ToLE()) + switch(subHandle_data->src.srcSelect.ToBE()) { - case CELL_PNGDEC_BUFFER: - if (!Memory.Copy(png.GetAddr(), subHandle_data->src.streamPtr.ToLE(), png.GetSize())) - { + case se32(CELL_PNGDEC_BUFFER): + if (!Memory.Copy(png.GetAddr(), subHandle_data->src.streamPtr.ToLE(), png.GetSize())) { cellPngDec->Error("cellPngDecDecodeData() failed (I)"); return CELL_EFAULT; } break; - case CELL_PNGDEC_FILE: + + case se32(CELL_PNGDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); cellFsRead(fd, png.GetAddr(), png.GetSize(), nread.GetAddr()); break; diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.h b/rpcs3/Emu/SysCalls/Modules/cellPngDec.h index b93f82ba8e..271e1e837f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.h @@ -49,6 +49,7 @@ enum CellPngDecOutputMode CELL_PNGDEC_BOTTOM_TO_TOP = 1, }; + // Structs struct CellPngDecDataOutInfo { @@ -108,23 +109,6 @@ struct CellPngDecOutParam be_t useMemorySpace; }; -//Custom structs -struct CellPngDecSubHandle -{ - be_t fd; - be_t fileSize; - CellPngDecInfo info; - CellPngDecOutParam outParam; - CellPngDecSrc src; -}; - -struct CellPngDecMainHandle -{ - be_t mainHandle; - be_t threadInParam; - be_t threadOutParam; -}; - struct CellPngDecStrmInfo { be_t decodedStrmSize; @@ -174,4 +158,22 @@ struct CellPngDecExtOutParam struct CellPngDecOpnParam { be_t selectChunk; -}; \ No newline at end of file +}; + + +// Custom structs +struct CellPngDecSubHandle +{ + be_t fd; + be_t fileSize; + CellPngDecInfo info; + CellPngDecOutParam outParam; + CellPngDecSrc src; +}; + +struct CellPngDecMainHandle +{ + be_t mainHandle; + be_t threadInParam; + be_t threadOutParam; +}; From f55afc27a9e2153abf88ad3344f84e98325e76cd Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 22 Jul 2014 23:02:45 +0400 Subject: [PATCH 232/499] cellSyncQueue draft --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 96 +++++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSync.h | 16 +++++ 2 files changed, 112 insertions(+) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index bdd6dd6a0b..5778c67dc3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -358,6 +358,92 @@ s32 cellSyncRwmTryWrite(mem_ptr_t rwm, u32 buffer_addr) return CELL_OK; } +s32 cellSyncQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth) +{ + cellSync->Todo("cellSyncQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x)", queue.GetAddr(), buffer_addr, size, depth); + + if (!queue) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (size && !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32 || buffer_addr % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + if (!depth || size % 16) + { + return CELL_SYNC_ERROR_INVAL; + } + + // prx: zeroize first u64, write size in third u32, write depth in fourth u32, write address in third u64 and sync + queue->m_data() = 0; + queue->m_size = size; + queue->m_depth = depth; + queue->m_addr = (u64)buffer_addr; + InterlockedCompareExchange(&queue->m_data(), 0, 0); + return CELL_OK; +} + +s32 cellSyncQueuePush(mem_ptr_t queue, u32 buffer_addr) +{ + cellSync->Todo("cellSyncQueuePush(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + + return CELL_OK; +} + +s32 cellSyncQueueTryPush(mem_ptr_t queue, u32 buffer_addr) +{ + cellSync->Todo("cellSyncQueueTryPush(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + + return CELL_OK; +} + +s32 cellSyncQueuePop(mem_ptr_t queue, u32 buffer_addr) +{ + cellSync->Todo("cellSyncQueuePop(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + + return CELL_OK; +} + +s32 cellSyncQueueTryPop(mem_ptr_t queue, u32 buffer_addr) +{ + cellSync->Todo("cellSyncQueueTryPop(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + + return CELL_OK; +} + +s32 cellSyncQueuePeek(mem_ptr_t queue, u32 buffer_addr) +{ + cellSync->Todo("cellSyncQueuePeek(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + + return CELL_OK; +} + +s32 cellSyncQueueTryPeek(mem_ptr_t queue, u32 buffer_addr) +{ + cellSync->Todo("cellSyncQueueTryPeek(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + + return CELL_OK; +} + +s32 cellSyncQueueSize(mem_ptr_t queue) +{ + cellSync->Todo("cellSyncQueueSize(queue_addr=0x%x)", queue.GetAddr()); + + return CELL_OK; +} + +s32 cellSyncQueueClear(mem_ptr_t queue) +{ + cellSync->Todo("cellSyncQueueClear(queue_addr=0x%x)", queue.GetAddr()); + + return CELL_OK; +} + void cellSync_init() { cellSync->AddFunc(0xa9072dee, cellSyncMutexInitialize); @@ -376,4 +462,14 @@ void cellSync_init() cellSync->AddFunc(0xa6669751, cellSyncRwmTryRead); cellSync->AddFunc(0xed773f5f, cellSyncRwmWrite); cellSync->AddFunc(0xba5bee48, cellSyncRwmTryWrite); + + cellSync->AddFunc(0x3929948d, cellSyncQueueInitialize); + cellSync->AddFunc(0x5ae841e5, cellSyncQueuePush); + cellSync->AddFunc(0x705985cd, cellSyncQueueTryPush); + cellSync->AddFunc(0x4da6d7e0, cellSyncQueuePop); + cellSync->AddFunc(0xa58df87f, cellSyncQueueTryPop); + cellSync->AddFunc(0x48154c9b, cellSyncQueuePeek); + cellSync->AddFunc(0x68af923c, cellSyncQueueTryPeek); + cellSync->AddFunc(0x4da349b2, cellSyncQueueSize); + cellSync->AddFunc(0xa5362e73, cellSyncQueueClear); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 02829fcdb1..22afb9bebf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -69,3 +69,19 @@ struct CellSyncRwm }; static_assert(sizeof(CellSyncRwm) == 16, "CellSyncBarrier: wrong size"); + +struct CellSyncQueue +{ + be_t m_value; + be_t m_size; + be_t m_depth; + be_t m_addr; + be_t reserved; + + volatile u64& m_data() + { + return *reinterpret_cast(this); + }; +}; + +static_assert(sizeof(CellSyncQueue) == 32, "CellSyncQueue: wrong size"); \ No newline at end of file From 713bff01e129b0beea9c538a76c31fb47dde7524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Tue, 22 Jul 2014 21:37:45 +0200 Subject: [PATCH 233/499] Flipping / padding on .JPG and .GIF decoding * Changes in cellJpgDec and cellGifDec come from cellPngDec. --- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 81 +++++++++++++++++--- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 90 +++++++++++++++++++---- rpcs3/Emu/SysCalls/Modules/cellJpgDec.h | 10 ++- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 3 +- 4 files changed, 156 insertions(+), 28 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index 3e39e91d54..d515a84bb8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -180,30 +180,91 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m //Decode GIF file. (TODO: Is there any faster alternative? Can we do it without external libraries?) int width, height, actual_components; - std::shared_ptr image(stbi_load_from_memory(gif, fileSize, &width, &height, &actual_components, 4)); + auto image = std::unique_ptr + ( + stbi_load_from_memory(gif.GetPtr(), fileSize, &width, &height, &actual_components, 4), + &::free + ); + if (!image) return CELL_GIFDEC_ERROR_STREAM_FORMAT; - uint image_size = width * height * 4; + const int bytesPerLine = dataCtrlParam->outputBytesPerLine; + const char nComponents = 4; + uint image_size = width * height * nComponents; switch((u32)current_outParam.outputColorSpace) { case CELL_GIFDEC_RGBA: - if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) + { + if (bytesPerLine > width * nComponents) // Check if we need padding { - cellGifDec->Error("cellGifDecDecodeData() failed (dataa_addr=0x%x)", data.GetAddr()); - return CELL_EFAULT; + const int linesize = std::min(bytesPerLine, width * nComponents); + for (int i = 0; i < height; i++) + { + const int dstOffset = i * bytesPerLine; + const int srcOffset = width * nComponents * i; + if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize)) + { + cellGifDec->Error("cellGifDecDecodeData() failed (II)"); + return CELL_EFAULT; + } + } } + else + { + if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) + { + cellGifDec->Error("cellGifDecDecodeData() failed (III)"); + return CELL_EFAULT; + } + } + } break; case CELL_GIFDEC_ARGB: - for(uint i = 0; i < image_size; i+=4) + { + if (bytesPerLine > width * nComponents) // Check if we need padding { - data += image.get()[i+3]; - data += image.get()[i+0]; - data += image.get()[i+1]; - data += image.get()[i+2]; + //TODO: find out if we can't do padding without an extra copy + const int linesize = std::min(bytesPerLine, width * nComponents); + char *output = (char *) malloc(linesize); + for (int i = 0; i < height; i++) + { + const int dstOffset = i * bytesPerLine; + const int srcOffset = width * nComponents * i; + for (int j = 0; j < linesize; j += nComponents) + { + output[j + 0] = image.get()[srcOffset + j + 3]; + output[j + 1] = image.get()[srcOffset + j + 0]; + output[j + 2] = image.get()[srcOffset + j + 1]; + output[j + 3] = image.get()[srcOffset + j + 2]; + } + if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, output, linesize)) + { + cellGifDec->Error("cellGifDecDecodeData() failed (IV)"); + return CELL_EFAULT; + } + } + free(output); } + else + { + uint* dest = (uint*)new char[image_size]; + uint* source_current = (uint*)&(image.get()[0]); + uint* dest_current = dest; + for (uint i = 0; i < image_size / nComponents; i++) + { + uint val = *source_current; + *dest_current = (val >> 24) | (val << 8); // set alpha (A8) as leftmost byte + source_current++; + dest_current++; + } + // NOTE: AppendRawBytes has diff side-effect vs Memory.CopyFromReal + data.AppendRawBytes((u8*)dest, image_size); + delete[] dest; + } + } break; default: diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index b3e5dd50af..a10c0c13d3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -188,34 +188,96 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m //Decode JPG file. (TODO: Is there any faster alternative? Can we do it without external libraries?) int width, height, actual_components; - std::shared_ptr image(stbi_load_from_memory(jpg, fileSize, &width, &height, &actual_components, 4)); + auto image = std::unique_ptr + ( + stbi_load_from_memory(jpg.GetPtr(), fileSize, &width, &height, &actual_components, 4), + &::free + ); if (!image) return CELL_JPGDEC_ERROR_STREAM_FORMAT; - uint image_size = width * height; + const bool flip = current_outParam.outputMode == CELL_JPGDEC_BOTTOM_TO_TOP; + const int bytesPerLine = dataCtrlParam->outputBytesPerLine; + size_t image_size = width * height; + switch((u32)current_outParam.outputColorSpace) { - case CELL_JPG_RGBA: case CELL_JPG_RGB: - image_size *= current_outParam.outputColorSpace == CELL_JPG_RGBA ? 4 : 3; - if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) + case CELL_JPG_RGBA: + { + const char nComponents = current_outParam.outputColorSpace == CELL_JPG_RGBA ? 4 : 3; + image_size *= nComponents; + if (bytesPerLine > width * nComponents || flip) //check if we need padding { - cellJpgDec->Error("cellJpgDecDecodeData() failed (data_addr=0x%x)", data.GetAddr()); - return CELL_EFAULT; + const int linesize = std::min(bytesPerLine, width * nComponents); + for (int i = 0; i < height; i++) + { + const int dstOffset = i * bytesPerLine; + const int srcOffset = width * nComponents * (flip ? height - i - 1 : i); + if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize)) + { + cellJpgDec->Error("cellJpgDecDecodeData() failed (II)"); + return CELL_EFAULT; + } + } } + else + { + if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) + { + cellJpgDec->Error("cellJpgDecDecodeData() failed (III)"); + return CELL_EFAULT; + } + } + } break; case CELL_JPG_ARGB: - image_size *= 4; - - for(u32 i = 0; i < image_size; i+=4) + { + const int nComponents = 4; + image_size *= nComponents; + if (bytesPerLine > width * nComponents || flip) //check if we need padding { - data += image.get()[i+3]; - data += image.get()[i+0]; - data += image.get()[i+1]; - data += image.get()[i+2]; + //TODO: Find out if we can't do padding without an extra copy + const int linesize = std::min(bytesPerLine, width * nComponents); + char *output = (char *) malloc(linesize); + for (int i = 0; i < height; i++) + { + const int dstOffset = i * bytesPerLine; + const int srcOffset = width * nComponents * (flip ? height - i - 1 : i); + for (int j = 0; j < linesize; j += nComponents) + { + output[j + 0] = image.get()[srcOffset + j + 3]; + output[j + 1] = image.get()[srcOffset + j + 0]; + output[j + 2] = image.get()[srcOffset + j + 1]; + output[j + 3] = image.get()[srcOffset + j + 2]; + } + if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, output, linesize)) + { + cellJpgDec->Error("cellJpgDecDecodeData() failed (IV)"); + return CELL_EFAULT; + } + } + free(output); } + else + { + uint* dest = (uint*)new char[image_size]; + uint* source_current = (uint*)&(image.get()[0]); + uint* dest_current = dest; + for (uint i = 0; i < image_size / nComponents; i++) + { + uint val = *source_current; + *dest_current = (val >> 24) | (val << 8); // set alpha (A8) as leftmost byte + source_current++; + dest_current++; + } + // NOTE: AppendRawBytes has diff side-effect vs Memory.CopyFromReal + data.AppendRawBytes((u8*)dest, image_size); + delete[] dest; + } + } break; case CELL_JPG_GRAYSCALE: diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.h b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.h index 4fa1438385..2afe342e30 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.h @@ -35,8 +35,14 @@ enum CellJpgDecStreamSrcSel enum CellJpgDecDecodeStatus { - CELL_JPGDEC_DEC_STATUS_FINISH = 0, //Decoding finished - CELL_JPGDEC_DEC_STATUS_STOP = 1, //Decoding halted + CELL_JPGDEC_DEC_STATUS_FINISH = 0, // Decoding finished + CELL_JPGDEC_DEC_STATUS_STOP = 1, // Decoding halted +}; + +enum CellJpgDecOutputMode +{ + CELL_JPGDEC_TOP_TO_BOTTOM = 0, // Top left to bottom right + CELL_JPGDEC_BOTTOM_TO_TOP = 1, // Bottom left to top right }; struct CellJpgDecInfo diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index adb503a8d3..b704303428 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -237,12 +237,11 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m const bool flip = current_outParam.outputMode == CELL_PNGDEC_BOTTOM_TO_TOP; const int bytesPerLine = dataCtrlParam->outputBytesPerLine; - uint image_size = width * height; + switch((u32)current_outParam.outputColorSpace) { case CELL_PNGDEC_RGB: - image_size = width * height; case CELL_PNGDEC_RGBA: { const char nComponents = current_outParam.outputColorSpace == CELL_PNGDEC_RGBA ? 4 : 3; From abbd3ae2390699bd6ff558c8dbe1d30dca857089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Wed, 23 Jul 2014 00:50:45 +0200 Subject: [PATCH 234/499] RSX method naming modified GCM commands (e.g. cellGcmSet*) are not the same as RSX methods (e.g. NV4097_*). The name has to be changed. --- rpcs3/Emu/GS/GCM.h | 1380 ++++++++++++++++++++++---------------------- 1 file changed, 690 insertions(+), 690 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 9f56cb2bab..a9d719304e 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -639,700 +639,700 @@ static const std::string GetMethodName(const u32 id) const u32 id; const std::string& name; } static const METHOD_NAME_LIST[] = { - { NV4097_NO_OPERATION , "NoOperation" } , - { NV4097_NOTIFY , "Notify" } , - { NV4097_WAIT_FOR_IDLE , "WaitForIdle" } , - { NV4097_PM_TRIGGER , "PmTrigger" } , - { NV4097_SET_CONTEXT_DMA_NOTIFIES , "SetContextDmaNotifies" } , - { NV4097_SET_CONTEXT_DMA_A , "SetContextDmaA" } , - { NV4097_SET_CONTEXT_DMA_B , "SetContextDmaB" } , - { NV4097_SET_CONTEXT_DMA_COLOR_B , "SetContextDmaColorB" } , - { NV4097_SET_CONTEXT_DMA_STATE , "SetContextDmaState" } , - { NV4097_SET_CONTEXT_DMA_COLOR_A , "SetContextDmaColorA" } , - { NV4097_SET_CONTEXT_DMA_ZETA , "SetContextDmaZeta" } , - { NV4097_SET_CONTEXT_DMA_VERTEX_A , "SetContextDmaVertexA" } , - { NV4097_SET_CONTEXT_DMA_VERTEX_B , "SetContextDmaVertexB" } , - { NV4097_SET_CONTEXT_DMA_SEMAPHORE , "SetContextDmaSemaphore" } , - { NV4097_SET_CONTEXT_DMA_REPORT , "SetContextDmaReport" } , - { NV4097_SET_CONTEXT_DMA_CLIP_ID , "SetContextDmaClipId" } , - { NV4097_SET_CONTEXT_DMA_CULL_DATA , "SetContextDmaCullData" } , - { NV4097_SET_CONTEXT_DMA_COLOR_C , "SetContextDmaColorC" } , - { NV4097_SET_CONTEXT_DMA_COLOR_D , "SetContextDmaColorD" } , - { NV4097_SET_SURFACE_CLIP_HORIZONTAL , "SetSurfaceClipHorizontal" } , - { NV4097_SET_SURFACE_CLIP_VERTICAL , "SetSurfaceClipVertical" } , - { NV4097_SET_SURFACE_FORMAT , "SetSurfaceFormat" } , - { NV4097_SET_SURFACE_PITCH_A , "SetSurfacePitchA" } , - { NV4097_SET_SURFACE_COLOR_AOFFSET , "SetSurfaceColorAOffset" } , - { NV4097_SET_SURFACE_ZETA_OFFSET , "SetSurfaceZetaOffset" } , - { NV4097_SET_SURFACE_COLOR_BOFFSET , "SetSurfaceColorBOffset" } , - { NV4097_SET_SURFACE_PITCH_B , "SetSurfacePitchB" } , - { NV4097_SET_SURFACE_COLOR_TARGET , "SetSurfaceColorTarget" } , - { NV4097_SET_SURFACE_PITCH_Z , "SetSurfacePitchZ" } , - { NV4097_INVALIDATE_ZCULL , "InvalidateZcull" } , - { NV4097_SET_CYLINDRICAL_WRAP , "SetCylindricalWrap" } , - { NV4097_SET_CYLINDRICAL_WRAP1 , "SetCylindricalWrap1" } , - { NV4097_SET_SURFACE_PITCH_C , "SetSurfacePitchC" } , - { NV4097_SET_SURFACE_PITCH_D , "SetSurfacePitchD" } , - { NV4097_SET_SURFACE_COLOR_COFFSET , "SetSurfaceColorCOffset" } , - { NV4097_SET_SURFACE_COLOR_DOFFSET , "SetSurfaceColorDOffset" } , - { NV4097_SET_WINDOW_OFFSET , "SetWindowOffset" } , - { NV4097_SET_DITHER_ENABLE , "SetDitherEnable" } , - { NV4097_SET_ALPHA_TEST_ENABLE , "SetAlphaTestEnable" } , - { NV4097_SET_ALPHA_FUNC , "SetAlphaFunc" } , - { NV4097_SET_ALPHA_REF , "SetAlphaRef" } , - { NV4097_SET_BLEND_ENABLE , "SetBlendEnable" } , - { NV4097_SET_BLEND_FUNC_SFACTOR , "SetBlendFuncSfactor" } , - { NV4097_SET_BLEND_FUNC_DFACTOR , "SetBlendFuncDfactor" } , - { NV4097_SET_BLEND_COLOR , "SetBlendColor" } , - { NV4097_SET_BLEND_EQUATION , "SetBlendEquation" } , - { NV4097_SET_COLOR_MASK , "SetColorMask" } , - { NV4097_SET_STENCIL_TEST_ENABLE , "SetStencilTestEnable" } , - { NV4097_SET_STENCIL_MASK , "SetStencilMask" } , - { NV4097_SET_STENCIL_FUNC , "SetStencilFunc" } , - { NV4097_SET_STENCIL_FUNC_REF , "SetStencilFuncRef" } , - { NV4097_SET_STENCIL_FUNC_MASK , "SetStencilFuncMask" } , - { NV4097_SET_STENCIL_OP_FAIL , "SetStencilOpFail" } , - { NV4097_SET_STENCIL_OP_ZFAIL , "SetStencilOpZfail" } , - { NV4097_SET_STENCIL_OP_ZPASS , "SetStencilOpZpass" } , - { NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE , "SetTwoSidedStencilTestEnable" } , - { NV4097_SET_BACK_STENCIL_MASK , "SetBackStencilMask" } , - { NV4097_SET_BACK_STENCIL_FUNC , "SetBackStencilFunc" } , - { NV4097_SET_BACK_STENCIL_FUNC_REF , "SetBackStencilFuncRef" } , - { NV4097_SET_BACK_STENCIL_FUNC_MASK , "SetBackStencilFuncMask" } , - { NV4097_SET_BACK_STENCIL_OP_FAIL , "SetBackStencilOpFail" } , - { NV4097_SET_BACK_STENCIL_OP_ZFAIL , "SetBackStencilOpZfail" } , - { NV4097_SET_BACK_STENCIL_OP_ZPASS , "SetBackStencilOpZpass" } , - { NV4097_SET_SHADE_MODE , "SetShadeMode" } , - { NV4097_SET_BLEND_ENABLE_MRT , "SetBlendEnableMRT" } , - { NV4097_SET_COLOR_MASK_MRT , "SetColorMaskMRT" } , - { NV4097_SET_LOGIC_OP_ENABLE , "SetLogicOpEnable" } , - { NV4097_SET_LOGIC_OP , "SetLogicOp" } , - { NV4097_SET_BLEND_COLOR2 , "SetBlendColor2" } , - { NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE , "SetDepthBoundsTestEnable" } , - { NV4097_SET_DEPTH_BOUNDS_MIN , "SetDepthBoundsMin" } , - { NV4097_SET_DEPTH_BOUNDS_MAX , "SetDepthBoundsMax" } , - { NV4097_SET_CLIP_MIN , "SetClipMin" } , - { NV4097_SET_CLIP_MAX , "SetClipMax" } , - { NV4097_SET_CONTROL0 , "SetControl0" } , - { NV4097_SET_LINE_WIDTH , "SetLineWidth" } , - { NV4097_SET_LINE_SMOOTH_ENABLE , "SetLineSmoothEnable" } , - { NV4097_SET_ANISO_SPREAD , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 4 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 8 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 12 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 16 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 20 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 24 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 28 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 32 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 36 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 40 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 44 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 48 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 52 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 56 , "SetAnisoSpread" } , - { NV4097_SET_ANISO_SPREAD + 60 , "SetAnisoSpread" } , - { NV4097_SET_SCISSOR_HORIZONTAL , "SetScissorHorizontal" } , - { NV4097_SET_SCISSOR_VERTICAL , "SetScissorVertical" } , - { NV4097_SET_FOG_MODE , "SetFogMode" } , - { NV4097_SET_FOG_PARAMS , "SetFogParams" } , - { NV4097_SET_FOG_PARAMS + 4 , "SetFogParams" } , - { NV4097_SET_FOG_PARAMS + 8 , "SetFogParams" } , - { NV4097_SET_SHADER_PROGRAM , "SetShaderProgram" } , - { NV4097_SET_VERTEX_TEXTURE_OFFSET , "SetVertexTexture_Offset" } , - { NV4097_SET_VERTEX_TEXTURE_FORMAT , "SetVertexTexture_Format" } , - { NV4097_SET_VERTEX_TEXTURE_ADDRESS , "SetVertexTexture_Address" } , - { NV4097_SET_VERTEX_TEXTURE_CONTROL0 , "SetVertexTexture_Control0" } , - { NV4097_SET_VERTEX_TEXTURE_CONTROL3 , "SetVertexTexture_Control3" } , - { NV4097_SET_VERTEX_TEXTURE_FILTER , "SetVertexTexture_Filter" } , - { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT , "SetVertexTexture_ImageRect" } , - { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR , "SetVertexTexture_BorderColor" } , - { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20, "SetVertexTexture_Offset" } , - { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20, "SetVertexTexture_Format" } , - { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20, "SetVertexTexture_Address" } , - { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20, "SetVertexTexture_Control0" } , - { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20, "SetVertexTexture_Control3" } , - { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20, "SetVertexTexture_Filter" } , - { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20, "SetVertexTexture_ImageRect" } , - { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20, "SetVertexTexture_BorderColor" } , - { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40, "SetVertexTexture_Offset" } , - { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40, "SetVertexTexture_Format" } , - { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40, "SetVertexTexture_Address" } , - { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40, "SetVertexTexture_Control0" } , - { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40, "SetVertexTexture_Control3" } , - { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40, "SetVertexTexture_Filter" } , - { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40, "SetVertexTexture_ImageRect" } , - { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40, "SetVertexTexture_BorderColor" } , - { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60, "SetVertexTexture_Offset" } , - { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60, "SetVertexTexture_Format" } , - { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60, "SetVertexTexture_Address" } , - { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60, "SetVertexTexture_Control0" } , - { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60, "SetVertexTexture_Control3" } , - { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60, "SetVertexTexture_Filter" } , - { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60, "SetVertexTexture_ImageRect" } , - { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60, "SetVertexTexture_BorderColor" } , - { NV4097_SET_VIEWPORT_HORIZONTAL , "SetViewportHorizontal" } , - { NV4097_SET_VIEWPORT_VERTICAL , "SetViewportVertical" } , - { NV4097_SET_VIEWPORT_OFFSET , "SetViewportOffset" } , - { NV4097_SET_VIEWPORT_SCALE , "SetViewportScale" } , - { NV4097_SET_POLY_OFFSET_LINE_ENABLE , "SetPolyOffsetLineEnable" } , - { NV4097_SET_POLY_OFFSET_FILL_ENABLE , "SetPolyOffsetFillEnable" } , - { NV4097_SET_DEPTH_FUNC , "SetDepthFunc" } , - { NV4097_SET_DEPTH_MASK , "SetDepthMask" } , - { NV4097_SET_DEPTH_TEST_ENABLE , "SetDepthTestEnable" } , - { NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR , "SetPolygonOffsetScaleFactor" } , - { NV4097_SET_POLYGON_OFFSET_BIAS , "SetPolygonOffsetBias" } , - { NV4097_SET_VERTEX_DATA_SCALED4S_M , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 4 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 8 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 12 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 16 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 20 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 24 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 28 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 32 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 36 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 40, "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 44 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 48 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 52 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 56 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 60 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 64 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 68 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 72 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 76 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 80 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 84 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 88 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 92 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 96 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 100 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 104 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 108 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 112 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 116 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 120 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 124 , "SetVertexDataScaled4s_M"}, - { NV4097_SET_TEXTURE_CONTROL2 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 4 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 8 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 12 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 16 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 20 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 24 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 28 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 32 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 36 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 40 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 44 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 48 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 52 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 56 , "SetTextureControl2" } , - { NV4097_SET_TEXTURE_CONTROL2 + 60 , "SetTextureControl2" } , - { NV4097_SET_TEX_COORD_CONTROL , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 4 , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 8 , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 12 , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 16 , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 20 , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 24 , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 28 , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 32 , "SetTexCoordControl" } , - { NV4097_SET_TEX_COORD_CONTROL + 36 , "SetTexCoordControl" } , - { NV4097_SET_TRANSFORM_PROGRAM , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 4 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 8 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 12 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 16 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 20 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 24 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 28 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 32 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 36 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 40 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 44 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 48 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 52 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 56 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 60 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 64 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 68 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 72 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 76 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 80 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 84 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 88 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 92 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 96 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 100 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 104 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 108 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 112 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 116 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 120 , "SetTransformProgram"}, - { NV4097_SET_TRANSFORM_PROGRAM + 124 , "SetTransformProgram"}, - { NV4097_SET_TWO_SIDE_LIGHT_EN , "SetTwoSideLightEn" } , - { NV4097_CLEAR_ZCULL_SURFACE , "ClearZcullSurface" } , - { NV4097_SET_USER_CLIP_PLANE_CONTROL , "SetUserClipPlaneControl" } , - { NV4097_SET_POLYGON_STIPPLE , "SetPolygonStipple" } , - { NV4097_SET_POLYGON_STIPPLE_PATTERN , "SetPolygonStipplePattern" } , - { NV4097_SET_VERTEX_DATA3F_M , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 4 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 8 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 12 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 16 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 20 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 24 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 28 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 32 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 36 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 40 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 44 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 48 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 52 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 56 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 60 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 64 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 68 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 72 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 76 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 80 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 84 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 88 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 92 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 96 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 100 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 104 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 108 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 112 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 116 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 120 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 124 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 128 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 132 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 136 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 140 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 144 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 148 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 152 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 156 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 160 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 164 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 168 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 172 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 176 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 180 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 184 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA3F_M + 188 , "SetVertexData3f_M"}, - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56 , "SetVertexDataArrayOffset" } , - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60 , "SetVertexDataArrayOffset" } , - { NV4097_INVALIDATE_VERTEX_CACHE_FILE , "InvalidateVertexCacheFile" } , - { NV4097_INVALIDATE_VERTEX_FILE , "InvalidateVertexFile" } , - { NV4097_SET_VERTEX_DATA_BASE_OFFSET , "SetVertexDataBaseOffset" } , - { NV4097_SET_VERTEX_DATA_BASE_INDEX , "SetVertexDataBaseIndex" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56 , "SetVertexDataArrayFormat" } , - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60 , "SetVertexDataArrayFormat" } , - { NV4097_CLEAR_REPORT_VALUE , "ClearReportValue" } , - { NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE , "SetZpassPixelCountEnable" } , - { NV4097_GET_REPORT , "GetReport" } , - { NV4097_SET_ZCULL_STATS_ENABLE , "SetZcullStatsEnable" } , - { NV4097_SET_BEGIN_END , "SetBeginEnd" } , - { NV4097_ARRAY_ELEMENT16 , "ArrayElement16" } , - { NV4097_ARRAY_ELEMENT32 , "ArrayElement32" } , - { NV4097_DRAW_ARRAYS , "DrawArrays" } , - { NV4097_INLINE_ARRAY , "InlineArray" } , - { NV4097_SET_INDEX_ARRAY_ADDRESS , "SetIndexArrayAddress" } , - { NV4097_SET_INDEX_ARRAY_DMA , "SetIndexArrayDMA" } , - { NV4097_DRAW_INDEX_ARRAY , "DrawIndexArray" } , - { NV4097_SET_FRONT_POLYGON_MODE , "SetFrontPolygonMode" } , - { NV4097_SET_BACK_POLYGON_MODE , "SetBackPolygonMode" } , - { NV4097_SET_CULL_FACE , "SetCullFace" } , - { NV4097_SET_FRONT_FACE , "SetFrontFace" } , - { NV4097_SET_POLY_SMOOTH_ENABLE , "SetPolySmoothEnable" } , - { NV4097_SET_CULL_FACE_ENABLE , "SetCullFaceEnable" } , - { NV4097_SET_TEXTURE_CONTROL3 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 4 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 8 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 12 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 16 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 20 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 24 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 28 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 32 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 36 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 40 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 44 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 48 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 52 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 56 , "SetTextureControl3"}, - { NV4097_SET_TEXTURE_CONTROL3 + 60 , "SetTextureControl3"}, - { NV4097_SET_VERTEX_DATA2F_M , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 4 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 8 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 12 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 16 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 20 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 24 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 28 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 32 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 36 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 40 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 44 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 48 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 52 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 56 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 60 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 64 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 68 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 72 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 76 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 80 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 84 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 88 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 92 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 96 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 100 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 104 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 108 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 112 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 116 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 120 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2F_M + 124 , "SetVertexData2f_M"}, - { NV4097_SET_VERTEX_DATA2S_M , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 4 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 8 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 12 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 16 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 20 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 24 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 28 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 32 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 36 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 40 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 44 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 48 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 52 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 56 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA2S_M + 60 , "SetVertexData2s_M"}, - { NV4097_SET_VERTEX_DATA4UB_M , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 4 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 8 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 12 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 16 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 20 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 24 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 28 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 32 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 36 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 40 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 44 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 48 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 52 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 56 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4UB_M + 60 , "SetVertexData4ub_M"}, - { NV4097_SET_VERTEX_DATA4S_M , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 4 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 8 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 12 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 16 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 20 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 24 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 28 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 32 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 36 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 40 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 44 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 48 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 52 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 56 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 60 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 64 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 68 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 72 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 76 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 80 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 84 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 88 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 92 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 96 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 100 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 104 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 108 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 112 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 116 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 120 , "SetVertexData4s_M"}, - { NV4097_SET_VERTEX_DATA4S_M + 124 , "SetVertexData4s_M"}, - { NV4097_SET_TEXTURE_OFFSET , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x20 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x20 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x20 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x20 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x20 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x20 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x20 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x20 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x40 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x40 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x40 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x40 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x40 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x40 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x40 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x40 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x60 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x60 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x60 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x60 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x60 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x60 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x60 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x60 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x80 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x80 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x80 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x80 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x80 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x80 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x80 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x80 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0xa0 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0xa0 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0xa0 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0xa0 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0xa0 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0xa0 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0xc0 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0xc0 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0xc0 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0xc0 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0xc0 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0xc0 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0xe0 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0xe0 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0xe0 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0xe0 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0xe0 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0xe0 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x100 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x100 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x100 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x100 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x100 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x100 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x100 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x100 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x120 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x120 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x120 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x120 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x120 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x120 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x120 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x120 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x140 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x140 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x140 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x140 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x140 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x140 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x140 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x140 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x160 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x160 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x160 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x160 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x160 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x160 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x160 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x160 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x180 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x180 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x180 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x180 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x180 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x180 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x180 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x180 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x1a0 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x1a0 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x1a0 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x1a0 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x1a0 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x1a0 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x1c0 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x1c0 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x1c0 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x1c0 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x1c0 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x1c0 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0 , "SetTexture_BorderColor" } , - { NV4097_SET_TEXTURE_OFFSET + 0x1e0 , "SetTexture_Offset" } , - { NV4097_SET_TEXTURE_FORMAT + 0x1e0 , "SetTexture_Format" } , - { NV4097_SET_TEXTURE_ADDRESS + 0x1e0 , "SetTexture_Address" } , - { NV4097_SET_TEXTURE_CONTROL0 + 0x1e0 , "SetTexture_Control0" } , - { NV4097_SET_TEXTURE_CONTROL1 + 0x1e0 , "SetTexture_Control1" } , - { NV4097_SET_TEXTURE_FILTER + 0x1e0 , "SetTexture_Filter" } , - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0 , "SetTexture_ImageRect" } , - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0 , "SetTexture_BorderColor" } , - { NV4097_SET_VERTEX_DATA4F_M , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 4 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 8 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 12 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 16 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 20 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 24 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 28 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 32 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 36 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 40 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 44 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 48 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 52 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 56 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 60 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 64 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 68 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 72 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 76 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 80 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 84 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 88 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 92 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 96 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 100 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 104 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 108 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 112 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 116 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 120 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 124 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 128 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 132 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 136 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 140 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 144 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 148 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 152 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 156 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 160 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 164 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 168 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 172 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 176 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 180 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 184 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 188 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 192 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 196 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 200 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 204 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 208 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 212 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 216 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 220 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 224 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 228 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 232 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 236 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 240 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 244 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 248 , "SetVertexData4f_M"}, - { NV4097_SET_VERTEX_DATA4F_M + 252 , "SetVertexData4f_M"}, - { NV4097_SET_SHADER_CONTROL , "SetShaderControl" } , - { NV4097_SET_SEMAPHORE_OFFSET , "SetSemaphoreOffset" } , - { NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE , "BackEndWriteSemaphoreRelease" } , - { NV4097_TEXTURE_READ_SEMAPHORE_RELEASE , "TextureReadSemaphoreRelease" } , - { NV4097_SET_ZMIN_MAX_CONTROL , "SetZMinMaxControl" } , - { NV4097_SET_ANTI_ALIASING_CONTROL , "SetAntiAliasingControl" } , - { NV4097_SET_ZCULL_EN , "SetZcullEn" } , - { NV4097_SET_SHADER_WINDOW , "SetShaderWindow" } , - { NV4097_SET_ZSTENCIL_CLEAR_VALUE , "SetZStencilClearValue" } , - { NV4097_SET_COLOR_CLEAR_VALUE , "SetColorClearValue" } , - { NV4097_CLEAR_SURFACE , "ClearSurface" } , - { NV4097_SET_RESTART_INDEX_ENABLE , "SetRestartIndexEnable" } , - { NV4097_SET_RESTART_INDEX , "SetRestartIndex" } , - { NV4097_SET_LINE_STIPPLE , "SetLineStipple" } , - { NV4097_SET_LINE_STIPPLE_PATTERN , "SetLineStipplePattern" } , - { NV4097_SET_VERTEX_DATA1F_M , "SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 4 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 8 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 12 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 16 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 20 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 24 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 28 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 32 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 36 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 40 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 44 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 48 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 52 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 56 ,"SetVertexData1f_M"}, - { NV4097_SET_VERTEX_DATA1F_M + 60 ,"SetVertexData1f_M"}, - { NV4097_SET_RENDER_ENABLE , "SetRenderEnable" } , - { NV4097_SET_TRANSFORM_PROGRAM_LOAD , "SetTransformProgramLoad" } , - { NV4097_SET_TRANSFORM_PROGRAM_START , "SetTransformProgramStart" } , - { NV4097_SET_ZCULL_CONTROL0 , "SetZcullControl0" } , - { NV4097_SET_ZCULL_CONTROL1 , "SetZcullControl1" } , - { NV4097_SET_SCULL_CONTROL , "SetScullControl" } , - { NV4097_SET_POINT_SIZE , "SetPointSize" } , - { NV4097_SET_POINT_PARAMS_ENABLE , "SetPointParamsEnable" } , - { NV4097_SET_POINT_SPRITE_CONTROL , "SetPointSpriteControl" } , - { NV4097_SET_TRANSFORM_TIMEOUT , "SetTransformTimeout" } , - { NV4097_SET_TRANSFORM_CONSTANT_LOAD , "SetTransformConstantLoad" } , - { NV4097_SET_FREQUENCY_DIVIDER_OPERATION , "SetFrequencyDividerOperation" } , - { NV4097_INVALIDATE_L2 , "InvalidateL2" } , - { NV4097_SET_TRANSFORM_BRANCH_BITS, "SetTransformBranchBits" } , + { NV4097_NO_OPERATION , "NV4097_NO_OPERATION" } + { NV4097_NOTIFY , "NV4097_NOTIFY" } + { NV4097_WAIT_FOR_IDLE , "NV4097_WAIT_FOR_IDLE" } + { NV4097_PM_TRIGGER , "NV4097_PM_TRIGGER" } + { NV4097_SET_CONTEXT_DMA_NOTIFIES , "NV4097_SET_CONTEXT_DMA_NOTIFIES" } + { NV4097_SET_CONTEXT_DMA_A , "NV4097_SET_CONTEXT_DMA_A" } + { NV4097_SET_CONTEXT_DMA_B , "NV4097_SET_CONTEXT_DMA_B" } + { NV4097_SET_CONTEXT_DMA_COLOR_B , "NV4097_SET_CONTEXT_DMA_COLOR_B" } + { NV4097_SET_CONTEXT_DMA_STATE , "NV4097_SET_CONTEXT_DMA_STATE" } + { NV4097_SET_CONTEXT_DMA_COLOR_A , "NV4097_SET_CONTEXT_DMA_COLOR_A" } + { NV4097_SET_CONTEXT_DMA_ZETA , "NV4097_SET_CONTEXT_DMA_ZETA" } + { NV4097_SET_CONTEXT_DMA_VERTEX_A , "NV4097_SET_CONTEXT_DMA_VERTEX_A" } + { NV4097_SET_CONTEXT_DMA_VERTEX_B , "NV4097_SET_CONTEXT_DMA_VERTEX_B" } + { NV4097_SET_CONTEXT_DMA_SEMAPHORE , "NV4097_SET_CONTEXT_DMA_SEMAPHORE" } + { NV4097_SET_CONTEXT_DMA_REPORT , "NV4097_SET_CONTEXT_DMA_REPORT" } + { NV4097_SET_CONTEXT_DMA_CLIP_ID , "NV4097_SET_CONTEXT_DMA_CLIP_ID" } + { NV4097_SET_CONTEXT_DMA_CULL_DATA , "NV4097_SET_CONTEXT_DMA_CULL_DATA" } + { NV4097_SET_CONTEXT_DMA_COLOR_C , "NV4097_SET_CONTEXT_DMA_COLOR_C" } + { NV4097_SET_CONTEXT_DMA_COLOR_D , "NV4097_SET_CONTEXT_DMA_COLOR_D" } + { NV4097_SET_SURFACE_CLIP_HORIZONTAL , "NV4097_SET_SURFACE_CLIP_HORIZONTAL" } + { NV4097_SET_SURFACE_CLIP_VERTICAL , "NV4097_SET_SURFACE_CLIP_VERTICAL" } + { NV4097_SET_SURFACE_FORMAT , "NV4097_SET_SURFACE_FORMAT" } + { NV4097_SET_SURFACE_PITCH_A , "NV4097_SET_SURFACE_PITCH_A" } + { NV4097_SET_SURFACE_COLOR_AOFFSET , "NV4097_SET_SURFACE_COLOR_AOFFSET" } + { NV4097_SET_SURFACE_ZETA_OFFSET , "NV4097_SET_SURFACE_ZETA_OFFSET" } + { NV4097_SET_SURFACE_COLOR_BOFFSET , "NV4097_SET_SURFACE_COLOR_BOFFSET" } + { NV4097_SET_SURFACE_PITCH_B , "NV4097_SET_SURFACE_PITCH_B" } + { NV4097_SET_SURFACE_COLOR_TARGET , "NV4097_SET_SURFACE_COLOR_TARGET" } + { NV4097_SET_SURFACE_PITCH_Z , "NV4097_SET_SURFACE_PITCH_Z" } + { NV4097_INVALIDATE_ZCULL , "NV4097_INVALIDATE_ZCULL" } + { NV4097_SET_CYLINDRICAL_WRAP , "NV4097_SET_CYLINDRICAL_WRAP" } + { NV4097_SET_CYLINDRICAL_WRAP1 , "NV4097_SET_CYLINDRICAL_WRAP1" } + { NV4097_SET_SURFACE_PITCH_C , "NV4097_SET_SURFACE_PITCH_C" } + { NV4097_SET_SURFACE_PITCH_D , "NV4097_SET_SURFACE_PITCH_D" } + { NV4097_SET_SURFACE_COLOR_COFFSET , "NV4097_SET_SURFACE_COLOR_COFFSET" } + { NV4097_SET_SURFACE_COLOR_DOFFSET , "NV4097_SET_SURFACE_COLOR_DOFFSET" } + { NV4097_SET_WINDOW_OFFSET , "NV4097_SET_WINDOW_OFFSET" } + { NV4097_SET_DITHER_ENABLE , "NV4097_SET_DITHER_ENABLE" } + { NV4097_SET_ALPHA_TEST_ENABLE , "NV4097_SET_ALPHA_TEST_ENABLE" } + { NV4097_SET_ALPHA_FUNC , "NV4097_SET_ALPHA_FUNC" } + { NV4097_SET_ALPHA_REF , "NV4097_SET_ALPHA_REF" } + { NV4097_SET_BLEND_ENABLE , "NV4097_SET_BLEND_ENABLE" } + { NV4097_SET_BLEND_FUNC_SFACTOR , "NV4097_SET_BLEND_FUNC_SFACTOR" } + { NV4097_SET_BLEND_FUNC_DFACTOR , "NV4097_SET_BLEND_FUNC_DFACTOR" } + { NV4097_SET_BLEND_COLOR , "NV4097_SET_BLEND_COLOR" } + { NV4097_SET_BLEND_EQUATION , "NV4097_SET_BLEND_EQUATION" } + { NV4097_SET_COLOR_MASK , "NV4097_SET_COLOR_MASK" } + { NV4097_SET_STENCIL_TEST_ENABLE , "NV4097_SET_STENCIL_TEST_ENABLE" } + { NV4097_SET_STENCIL_MASK , "NV4097_SET_STENCIL_MASK" } + { NV4097_SET_STENCIL_FUNC , "NV4097_SET_STENCIL_FUNC" } + { NV4097_SET_STENCIL_FUNC_REF , "NV4097_SET_STENCIL_FUNC_REF" } + { NV4097_SET_STENCIL_FUNC_MASK , "NV4097_SET_STENCIL_FUNC_MASK" } + { NV4097_SET_STENCIL_OP_FAIL , "NV4097_SET_STENCIL_OP_FAIL" } + { NV4097_SET_STENCIL_OP_ZFAIL , "NV4097_SET_STENCIL_OP_ZFAIL" } + { NV4097_SET_STENCIL_OP_ZPASS , "NV4097_SET_STENCIL_OP_ZPASS" } + { NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE , "NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE" } + { NV4097_SET_BACK_STENCIL_MASK , "NV4097_SET_BACK_STENCIL_MASK" } + { NV4097_SET_BACK_STENCIL_FUNC , "NV4097_SET_BACK_STENCIL_FUNC" } + { NV4097_SET_BACK_STENCIL_FUNC_REF , "NV4097_SET_BACK_STENCIL_FUNC_REF" } + { NV4097_SET_BACK_STENCIL_FUNC_MASK , "NV4097_SET_BACK_STENCIL_FUNC_MASK" } + { NV4097_SET_BACK_STENCIL_OP_FAIL , "NV4097_SET_BACK_STENCIL_OP_FAIL" } + { NV4097_SET_BACK_STENCIL_OP_ZFAIL , "NV4097_SET_BACK_STENCIL_OP_ZFAIL" } + { NV4097_SET_BACK_STENCIL_OP_ZPASS , "NV4097_SET_BACK_STENCIL_OP_ZPASS" } + { NV4097_SET_SHADE_MODE , "NV4097_SET_SHADE_MODE" } + { NV4097_SET_BLEND_ENABLE_MRT , "NV4097_SET_BLEND_ENABLE_MRT" } + { NV4097_SET_COLOR_MASK_MRT , "NV4097_SET_COLOR_MASK_MRT" } + { NV4097_SET_LOGIC_OP_ENABLE , "NV4097_SET_LOGIC_OP_ENABLE" } + { NV4097_SET_LOGIC_OP , "NV4097_SET_LOGIC_OP" } + { NV4097_SET_BLEND_COLOR2 , "NV4097_SET_BLEND_COLOR2" } + { NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE , "NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE" } + { NV4097_SET_DEPTH_BOUNDS_MIN , "NV4097_SET_DEPTH_BOUNDS_MIN" } + { NV4097_SET_DEPTH_BOUNDS_MAX , "NV4097_SET_DEPTH_BOUNDS_MAX" } + { NV4097_SET_CLIP_MIN , "NV4097_SET_CLIP_MIN" } + { NV4097_SET_CLIP_MAX , "NV4097_SET_CLIP_MAX" } + { NV4097_SET_CONTROL0 , "NV4097_SET_CONTROL0" } + { NV4097_SET_LINE_WIDTH , "NV4097_SET_LINE_WIDTH" } + { NV4097_SET_LINE_SMOOTH_ENABLE , "NV4097_SET_LINE_SMOOTH_ENABLE" } + { NV4097_SET_ANISO_SPREAD , "NV4097_SET_ANISO_SPREAD" } + { NV4097_SET_ANISO_SPREAD + 4 , "NV4097_SET_ANISO_SPREAD + 4" } + { NV4097_SET_ANISO_SPREAD + 8 , "NV4097_SET_ANISO_SPREAD + 8" } + { NV4097_SET_ANISO_SPREAD + 12 , "NV4097_SET_ANISO_SPREAD + 12" } + { NV4097_SET_ANISO_SPREAD + 16 , "NV4097_SET_ANISO_SPREAD + 16" } + { NV4097_SET_ANISO_SPREAD + 20 , "NV4097_SET_ANISO_SPREAD + 20" } + { NV4097_SET_ANISO_SPREAD + 24 , "NV4097_SET_ANISO_SPREAD + 24" } + { NV4097_SET_ANISO_SPREAD + 28 , "NV4097_SET_ANISO_SPREAD + 28" } + { NV4097_SET_ANISO_SPREAD + 32 , "NV4097_SET_ANISO_SPREAD + 32" } + { NV4097_SET_ANISO_SPREAD + 36 , "NV4097_SET_ANISO_SPREAD + 36" } + { NV4097_SET_ANISO_SPREAD + 40 , "NV4097_SET_ANISO_SPREAD + 40" } + { NV4097_SET_ANISO_SPREAD + 44 , "NV4097_SET_ANISO_SPREAD + 44" } + { NV4097_SET_ANISO_SPREAD + 48 , "NV4097_SET_ANISO_SPREAD + 48" } + { NV4097_SET_ANISO_SPREAD + 52 , "NV4097_SET_ANISO_SPREAD + 52" } + { NV4097_SET_ANISO_SPREAD + 56 , "NV4097_SET_ANISO_SPREAD + 56" } + { NV4097_SET_ANISO_SPREAD + 60 , "NV4097_SET_ANISO_SPREAD + 60" } + { NV4097_SET_SCISSOR_HORIZONTAL , "NV4097_SET_SCISSOR_HORIZONTAL" } + { NV4097_SET_SCISSOR_VERTICAL , "NV4097_SET_SCISSOR_VERTICAL" } + { NV4097_SET_FOG_MODE , "NV4097_SET_FOG_MODE" } + { NV4097_SET_FOG_PARAMS , "NV4097_SET_FOG_PARAMS" } + { NV4097_SET_FOG_PARAMS + 4 , "NV4097_SET_FOG_PARAMS + 4" } + { NV4097_SET_FOG_PARAMS + 8 , "NV4097_SET_FOG_PARAMS + 8" } + { NV4097_SET_SHADER_PROGRAM , "NV4097_SET_SHADER_PROGRAM" } + { NV4097_SET_VERTEX_TEXTURE_OFFSET , "NV4097_SET_VERTEX_TEXTURE_OFFSET" } + { NV4097_SET_VERTEX_TEXTURE_FORMAT , "NV4097_SET_VERTEX_TEXTURE_FORMAT" } + { NV4097_SET_VERTEX_TEXTURE_ADDRESS , "NV4097_SET_VERTEX_TEXTURE_ADDRESS" } + { NV4097_SET_VERTEX_TEXTURE_CONTROL0 , "NV4097_SET_VERTEX_TEXTURE_CONTROL0" } + { NV4097_SET_VERTEX_TEXTURE_CONTROL3 , "NV4097_SET_VERTEX_TEXTURE_CONTROL3" } + { NV4097_SET_VERTEX_TEXTURE_FILTER , "NV4097_SET_VERTEX_TEXTURE_FILTER" } + { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT , "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT" } + { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR , "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR" } + { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20" } + { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20" } + { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20" } + { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20" } + { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20" } + { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20" } + { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20" } + { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20" } + { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40" } + { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40" } + { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40" } + { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40" } + { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40" } + { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40" } + { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40" } + { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40" } + { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60" } + { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60" } + { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60" } + { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60" } + { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60" } + { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60" } + { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60" } + { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60" } + { NV4097_SET_VIEWPORT_HORIZONTAL , "NV4097_SET_VIEWPORT_HORIZONTAL" } + { NV4097_SET_VIEWPORT_VERTICAL , "NV4097_SET_VIEWPORT_VERTICAL" } + { NV4097_SET_VIEWPORT_OFFSET , "NV4097_SET_VIEWPORT_OFFSET" } + { NV4097_SET_VIEWPORT_SCALE , "NV4097_SET_VIEWPORT_SCALE" } + { NV4097_SET_POLY_OFFSET_LINE_ENABLE , "NV4097_SET_POLY_OFFSET_LINE_ENABLE" } + { NV4097_SET_POLY_OFFSET_FILL_ENABLE , "NV4097_SET_POLY_OFFSET_FILL_ENABLE" } + { NV4097_SET_DEPTH_FUNC , "NV4097_SET_DEPTH_FUNC" } + { NV4097_SET_DEPTH_MASK , "NV4097_SET_DEPTH_MASK" } + { NV4097_SET_DEPTH_TEST_ENABLE , "NV4097_SET_DEPTH_TEST_ENABLE" } + { NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR , "NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR" } + { NV4097_SET_POLYGON_OFFSET_BIAS , "NV4097_SET_POLYGON_OFFSET_BIAS" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M , "NV4097_SET_VERTEX_DATA_SCALED4S_M" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 4 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 4" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 8 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 8" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 12 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 12" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 16 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 16" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 20 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 20" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 24 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 24" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 28 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 28" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 32 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 32" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 36 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 36" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 40, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 40" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 44 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 44" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 48 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 48" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 52 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 52" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 56 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 56" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 60 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 60" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 64 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 64" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 68 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 68" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 72 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 72" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 76 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 76" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 80 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 80" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 84 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 84" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 88 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 88" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 92 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 92" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 96 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 96" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 100 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 100" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 104 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 104" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 108 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 108" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 112 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 112" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 116 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 116" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 120 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 120" } + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 124 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 124" } + { NV4097_SET_TEXTURE_CONTROL2 , "NV4097_SET_TEXTURE_CONTROL2" } + { NV4097_SET_TEXTURE_CONTROL2 + 4 , "NV4097_SET_TEXTURE_CONTROL2 + 4" } + { NV4097_SET_TEXTURE_CONTROL2 + 8 , "NV4097_SET_TEXTURE_CONTROL2 + 8" } + { NV4097_SET_TEXTURE_CONTROL2 + 12 , "NV4097_SET_TEXTURE_CONTROL2 + 12" } + { NV4097_SET_TEXTURE_CONTROL2 + 16 , "NV4097_SET_TEXTURE_CONTROL2 + 16" } + { NV4097_SET_TEXTURE_CONTROL2 + 20 , "NV4097_SET_TEXTURE_CONTROL2 + 20" } + { NV4097_SET_TEXTURE_CONTROL2 + 24 , "NV4097_SET_TEXTURE_CONTROL2 + 24" } + { NV4097_SET_TEXTURE_CONTROL2 + 28 , "NV4097_SET_TEXTURE_CONTROL2 + 28" } + { NV4097_SET_TEXTURE_CONTROL2 + 32 , "NV4097_SET_TEXTURE_CONTROL2 + 32" } + { NV4097_SET_TEXTURE_CONTROL2 + 36 , "NV4097_SET_TEXTURE_CONTROL2 + 36" } + { NV4097_SET_TEXTURE_CONTROL2 + 40 , "NV4097_SET_TEXTURE_CONTROL2 + 40" } + { NV4097_SET_TEXTURE_CONTROL2 + 44 , "NV4097_SET_TEXTURE_CONTROL2 + 44" } + { NV4097_SET_TEXTURE_CONTROL2 + 48 , "NV4097_SET_TEXTURE_CONTROL2 + 48" } + { NV4097_SET_TEXTURE_CONTROL2 + 52 , "NV4097_SET_TEXTURE_CONTROL2 + 52" } + { NV4097_SET_TEXTURE_CONTROL2 + 56 , "NV4097_SET_TEXTURE_CONTROL2 + 56" } + { NV4097_SET_TEXTURE_CONTROL2 + 60 , "NV4097_SET_TEXTURE_CONTROL2 + 60" } + { NV4097_SET_TEX_COORD_CONTROL , "NV4097_SET_TEX_COORD_CONTROL" } + { NV4097_SET_TEX_COORD_CONTROL + 4 , "NV4097_SET_TEX_COORD_CONTROL + 4" } + { NV4097_SET_TEX_COORD_CONTROL + 8 , "NV4097_SET_TEX_COORD_CONTROL + 8" } + { NV4097_SET_TEX_COORD_CONTROL + 12 , "NV4097_SET_TEX_COORD_CONTROL + 12" } + { NV4097_SET_TEX_COORD_CONTROL + 16 , "NV4097_SET_TEX_COORD_CONTROL + 16" } + { NV4097_SET_TEX_COORD_CONTROL + 20 , "NV4097_SET_TEX_COORD_CONTROL + 20" } + { NV4097_SET_TEX_COORD_CONTROL + 24 , "NV4097_SET_TEX_COORD_CONTROL + 24" } + { NV4097_SET_TEX_COORD_CONTROL + 28 , "NV4097_SET_TEX_COORD_CONTROL + 28" } + { NV4097_SET_TEX_COORD_CONTROL + 32 , "NV4097_SET_TEX_COORD_CONTROL + 32" } + { NV4097_SET_TEX_COORD_CONTROL + 36 , "NV4097_SET_TEX_COORD_CONTROL + 36" } + { NV4097_SET_TRANSFORM_PROGRAM , "NV4097_SET_TRANSFORM_PROGRAM" } + { NV4097_SET_TRANSFORM_PROGRAM + 4 , "NV4097_SET_TRANSFORM_PROGRAM + 4" } + { NV4097_SET_TRANSFORM_PROGRAM + 8 , "NV4097_SET_TRANSFORM_PROGRAM + 8" } + { NV4097_SET_TRANSFORM_PROGRAM + 12 , "NV4097_SET_TRANSFORM_PROGRAM + 12" } + { NV4097_SET_TRANSFORM_PROGRAM + 16 , "NV4097_SET_TRANSFORM_PROGRAM + 16" } + { NV4097_SET_TRANSFORM_PROGRAM + 20 , "NV4097_SET_TRANSFORM_PROGRAM + 20" } + { NV4097_SET_TRANSFORM_PROGRAM + 24 , "NV4097_SET_TRANSFORM_PROGRAM + 24" } + { NV4097_SET_TRANSFORM_PROGRAM + 28 , "NV4097_SET_TRANSFORM_PROGRAM + 28" } + { NV4097_SET_TRANSFORM_PROGRAM + 32 , "NV4097_SET_TRANSFORM_PROGRAM + 32" } + { NV4097_SET_TRANSFORM_PROGRAM + 36 , "NV4097_SET_TRANSFORM_PROGRAM + 36" } + { NV4097_SET_TRANSFORM_PROGRAM + 40 , "NV4097_SET_TRANSFORM_PROGRAM + 40" } + { NV4097_SET_TRANSFORM_PROGRAM + 44 , "NV4097_SET_TRANSFORM_PROGRAM + 44" } + { NV4097_SET_TRANSFORM_PROGRAM + 48 , "NV4097_SET_TRANSFORM_PROGRAM + 48" } + { NV4097_SET_TRANSFORM_PROGRAM + 52 , "NV4097_SET_TRANSFORM_PROGRAM + 52" } + { NV4097_SET_TRANSFORM_PROGRAM + 56 , "NV4097_SET_TRANSFORM_PROGRAM + 56" } + { NV4097_SET_TRANSFORM_PROGRAM + 60 , "NV4097_SET_TRANSFORM_PROGRAM + 60" } + { NV4097_SET_TRANSFORM_PROGRAM + 64 , "NV4097_SET_TRANSFORM_PROGRAM + 64" } + { NV4097_SET_TRANSFORM_PROGRAM + 68 , "NV4097_SET_TRANSFORM_PROGRAM + 68" } + { NV4097_SET_TRANSFORM_PROGRAM + 72 , "NV4097_SET_TRANSFORM_PROGRAM + 72" } + { NV4097_SET_TRANSFORM_PROGRAM + 76 , "NV4097_SET_TRANSFORM_PROGRAM + 76" } + { NV4097_SET_TRANSFORM_PROGRAM + 80 , "NV4097_SET_TRANSFORM_PROGRAM + 80" } + { NV4097_SET_TRANSFORM_PROGRAM + 84 , "NV4097_SET_TRANSFORM_PROGRAM + 84" } + { NV4097_SET_TRANSFORM_PROGRAM + 88 , "NV4097_SET_TRANSFORM_PROGRAM + 88" } + { NV4097_SET_TRANSFORM_PROGRAM + 92 , "NV4097_SET_TRANSFORM_PROGRAM + 92" } + { NV4097_SET_TRANSFORM_PROGRAM + 96 , "NV4097_SET_TRANSFORM_PROGRAM + 96" } + { NV4097_SET_TRANSFORM_PROGRAM + 100 , "NV4097_SET_TRANSFORM_PROGRAM + 100" } + { NV4097_SET_TRANSFORM_PROGRAM + 104 , "NV4097_SET_TRANSFORM_PROGRAM + 104" } + { NV4097_SET_TRANSFORM_PROGRAM + 108 , "NV4097_SET_TRANSFORM_PROGRAM + 108" } + { NV4097_SET_TRANSFORM_PROGRAM + 112 , "NV4097_SET_TRANSFORM_PROGRAM + 112" } + { NV4097_SET_TRANSFORM_PROGRAM + 116 , "NV4097_SET_TRANSFORM_PROGRAM + 116" } + { NV4097_SET_TRANSFORM_PROGRAM + 120 , "NV4097_SET_TRANSFORM_PROGRAM + 120" } + { NV4097_SET_TRANSFORM_PROGRAM + 124 , "NV4097_SET_TRANSFORM_PROGRAM + 124" } + { NV4097_SET_TWO_SIDE_LIGHT_EN , "NV4097_SET_TWO_SIDE_LIGHT_EN" } + { NV4097_CLEAR_ZCULL_SURFACE , "NV4097_CLEAR_ZCULL_SURFACE" } + { NV4097_SET_USER_CLIP_PLANE_CONTROL , "NV4097_SET_USER_CLIP_PLANE_CONTROL" } + { NV4097_SET_POLYGON_STIPPLE , "NV4097_SET_POLYGON_STIPPLE" } + { NV4097_SET_POLYGON_STIPPLE_PATTERN , "NV4097_SET_POLYGON_STIPPLE_PATTERN" } + { NV4097_SET_VERTEX_DATA3F_M , "NV4097_SET_VERTEX_DATA3F_M" } + { NV4097_SET_VERTEX_DATA3F_M + 4 , "NV4097_SET_VERTEX_DATA3F_M + 4" } + { NV4097_SET_VERTEX_DATA3F_M + 8 , "NV4097_SET_VERTEX_DATA3F_M + 8" } + { NV4097_SET_VERTEX_DATA3F_M + 12 , "NV4097_SET_VERTEX_DATA3F_M + 12" } + { NV4097_SET_VERTEX_DATA3F_M + 16 , "NV4097_SET_VERTEX_DATA3F_M + 16" } + { NV4097_SET_VERTEX_DATA3F_M + 20 , "NV4097_SET_VERTEX_DATA3F_M + 20" } + { NV4097_SET_VERTEX_DATA3F_M + 24 , "NV4097_SET_VERTEX_DATA3F_M + 24" } + { NV4097_SET_VERTEX_DATA3F_M + 28 , "NV4097_SET_VERTEX_DATA3F_M + 28" } + { NV4097_SET_VERTEX_DATA3F_M + 32 , "NV4097_SET_VERTEX_DATA3F_M + 32" } + { NV4097_SET_VERTEX_DATA3F_M + 36 , "NV4097_SET_VERTEX_DATA3F_M + 36" } + { NV4097_SET_VERTEX_DATA3F_M + 40 , "NV4097_SET_VERTEX_DATA3F_M + 40" } + { NV4097_SET_VERTEX_DATA3F_M + 44 , "NV4097_SET_VERTEX_DATA3F_M + 44" } + { NV4097_SET_VERTEX_DATA3F_M + 48 , "NV4097_SET_VERTEX_DATA3F_M + 48" } + { NV4097_SET_VERTEX_DATA3F_M + 52 , "NV4097_SET_VERTEX_DATA3F_M + 52" } + { NV4097_SET_VERTEX_DATA3F_M + 56 , "NV4097_SET_VERTEX_DATA3F_M + 56" } + { NV4097_SET_VERTEX_DATA3F_M + 60 , "NV4097_SET_VERTEX_DATA3F_M + 60" } + { NV4097_SET_VERTEX_DATA3F_M + 64 , "NV4097_SET_VERTEX_DATA3F_M + 64" } + { NV4097_SET_VERTEX_DATA3F_M + 68 , "NV4097_SET_VERTEX_DATA3F_M + 68" } + { NV4097_SET_VERTEX_DATA3F_M + 72 , "NV4097_SET_VERTEX_DATA3F_M + 72" } + { NV4097_SET_VERTEX_DATA3F_M + 76 , "NV4097_SET_VERTEX_DATA3F_M + 76" } + { NV4097_SET_VERTEX_DATA3F_M + 80 , "NV4097_SET_VERTEX_DATA3F_M + 80" } + { NV4097_SET_VERTEX_DATA3F_M + 84 , "NV4097_SET_VERTEX_DATA3F_M + 84" } + { NV4097_SET_VERTEX_DATA3F_M + 88 , "NV4097_SET_VERTEX_DATA3F_M + 88" } + { NV4097_SET_VERTEX_DATA3F_M + 92 , "NV4097_SET_VERTEX_DATA3F_M + 92" } + { NV4097_SET_VERTEX_DATA3F_M + 96 , "NV4097_SET_VERTEX_DATA3F_M + 96" } + { NV4097_SET_VERTEX_DATA3F_M + 100 , "NV4097_SET_VERTEX_DATA3F_M + 100" } + { NV4097_SET_VERTEX_DATA3F_M + 104 , "NV4097_SET_VERTEX_DATA3F_M + 104" } + { NV4097_SET_VERTEX_DATA3F_M + 108 , "NV4097_SET_VERTEX_DATA3F_M + 108" } + { NV4097_SET_VERTEX_DATA3F_M + 112 , "NV4097_SET_VERTEX_DATA3F_M + 112" } + { NV4097_SET_VERTEX_DATA3F_M + 116 , "NV4097_SET_VERTEX_DATA3F_M + 116" } + { NV4097_SET_VERTEX_DATA3F_M + 120 , "NV4097_SET_VERTEX_DATA3F_M + 120" } + { NV4097_SET_VERTEX_DATA3F_M + 124 , "NV4097_SET_VERTEX_DATA3F_M + 124" } + { NV4097_SET_VERTEX_DATA3F_M + 128 , "NV4097_SET_VERTEX_DATA3F_M + 128" } + { NV4097_SET_VERTEX_DATA3F_M + 132 , "NV4097_SET_VERTEX_DATA3F_M + 132" } + { NV4097_SET_VERTEX_DATA3F_M + 136 , "NV4097_SET_VERTEX_DATA3F_M + 136" } + { NV4097_SET_VERTEX_DATA3F_M + 140 , "NV4097_SET_VERTEX_DATA3F_M + 140" } + { NV4097_SET_VERTEX_DATA3F_M + 144 , "NV4097_SET_VERTEX_DATA3F_M + 144" } + { NV4097_SET_VERTEX_DATA3F_M + 148 , "NV4097_SET_VERTEX_DATA3F_M + 148" } + { NV4097_SET_VERTEX_DATA3F_M + 152 , "NV4097_SET_VERTEX_DATA3F_M + 152" } + { NV4097_SET_VERTEX_DATA3F_M + 156 , "NV4097_SET_VERTEX_DATA3F_M + 156" } + { NV4097_SET_VERTEX_DATA3F_M + 160 , "NV4097_SET_VERTEX_DATA3F_M + 160" } + { NV4097_SET_VERTEX_DATA3F_M + 164 , "NV4097_SET_VERTEX_DATA3F_M + 164" } + { NV4097_SET_VERTEX_DATA3F_M + 168 , "NV4097_SET_VERTEX_DATA3F_M + 168" } + { NV4097_SET_VERTEX_DATA3F_M + 172 , "NV4097_SET_VERTEX_DATA3F_M + 172" } + { NV4097_SET_VERTEX_DATA3F_M + 176 , "NV4097_SET_VERTEX_DATA3F_M + 176" } + { NV4097_SET_VERTEX_DATA3F_M + 180 , "NV4097_SET_VERTEX_DATA3F_M + 180" } + { NV4097_SET_VERTEX_DATA3F_M + 184 , "NV4097_SET_VERTEX_DATA3F_M + 184" } + { NV4097_SET_VERTEX_DATA3F_M + 188 , "NV4097_SET_VERTEX_DATA3F_M + 188" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56" } + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60" } + { NV4097_INVALIDATE_VERTEX_CACHE_FILE , "NV4097_INVALIDATE_VERTEX_CACHE_FILE" } + { NV4097_INVALIDATE_VERTEX_FILE , "NV4097_INVALIDATE_VERTEX_FILE" } + { NV4097_SET_VERTEX_DATA_BASE_OFFSET , "NV4097_SET_VERTEX_DATA_BASE_OFFSET" } + { NV4097_SET_VERTEX_DATA_BASE_INDEX , "NV4097_SET_VERTEX_DATA_BASE_INDEX" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56" } + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60" } + { NV4097_CLEAR_REPORT_VALUE , "NV4097_CLEAR_REPORT_VALUE" } + { NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE , "NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE" } + { NV4097_GET_REPORT , "NV4097_GET_REPORT" } + { NV4097_SET_ZCULL_STATS_ENABLE , "NV4097_SET_ZCULL_STATS_ENABLE" } + { NV4097_SET_BEGIN_END , "NV4097_SET_BEGIN_END" } + { NV4097_ARRAY_ELEMENT16 , "NV4097_ARRAY_ELEMENT16" } + { NV4097_ARRAY_ELEMENT32 , "NV4097_ARRAY_ELEMENT32" } + { NV4097_DRAW_ARRAYS , "NV4097_DRAW_ARRAYS" } + { NV4097_INLINE_ARRAY , "NV4097_INLINE_ARRAY" } + { NV4097_SET_INDEX_ARRAY_ADDRESS , "NV4097_SET_INDEX_ARRAY_ADDRESS" } + { NV4097_SET_INDEX_ARRAY_DMA , "NV4097_SET_INDEX_ARRAY_DMA" } + { NV4097_DRAW_INDEX_ARRAY , "NV4097_DRAW_INDEX_ARRAY" } + { NV4097_SET_FRONT_POLYGON_MODE , "NV4097_SET_FRONT_POLYGON_MODE" } + { NV4097_SET_BACK_POLYGON_MODE , "NV4097_SET_BACK_POLYGON_MODE" } + { NV4097_SET_CULL_FACE , "NV4097_SET_CULL_FACE" } + { NV4097_SET_FRONT_FACE , "NV4097_SET_FRONT_FACE" } + { NV4097_SET_POLY_SMOOTH_ENABLE , "NV4097_SET_POLY_SMOOTH_ENABLE" } + { NV4097_SET_CULL_FACE_ENABLE , "NV4097_SET_CULL_FACE_ENABLE" } + { NV4097_SET_TEXTURE_CONTROL3 , "NV4097_SET_TEXTURE_CONTROL3" } + { NV4097_SET_TEXTURE_CONTROL3 + 4 , "NV4097_SET_TEXTURE_CONTROL3 + 4" } + { NV4097_SET_TEXTURE_CONTROL3 + 8 , "NV4097_SET_TEXTURE_CONTROL3 + 8" } + { NV4097_SET_TEXTURE_CONTROL3 + 12 , "NV4097_SET_TEXTURE_CONTROL3 + 12" } + { NV4097_SET_TEXTURE_CONTROL3 + 16 , "NV4097_SET_TEXTURE_CONTROL3 + 16" } + { NV4097_SET_TEXTURE_CONTROL3 + 20 , "NV4097_SET_TEXTURE_CONTROL3 + 20" } + { NV4097_SET_TEXTURE_CONTROL3 + 24 , "NV4097_SET_TEXTURE_CONTROL3 + 24" } + { NV4097_SET_TEXTURE_CONTROL3 + 28 , "NV4097_SET_TEXTURE_CONTROL3 + 28" } + { NV4097_SET_TEXTURE_CONTROL3 + 32 , "NV4097_SET_TEXTURE_CONTROL3 + 32" } + { NV4097_SET_TEXTURE_CONTROL3 + 36 , "NV4097_SET_TEXTURE_CONTROL3 + 36" } + { NV4097_SET_TEXTURE_CONTROL3 + 40 , "NV4097_SET_TEXTURE_CONTROL3 + 40" } + { NV4097_SET_TEXTURE_CONTROL3 + 44 , "NV4097_SET_TEXTURE_CONTROL3 + 44" } + { NV4097_SET_TEXTURE_CONTROL3 + 48 , "NV4097_SET_TEXTURE_CONTROL3 + 48" } + { NV4097_SET_TEXTURE_CONTROL3 + 52 , "NV4097_SET_TEXTURE_CONTROL3 + 52" } + { NV4097_SET_TEXTURE_CONTROL3 + 56 , "NV4097_SET_TEXTURE_CONTROL3 + 56" } + { NV4097_SET_TEXTURE_CONTROL3 + 60 , "NV4097_SET_TEXTURE_CONTROL3 + 60" } + { NV4097_SET_VERTEX_DATA2F_M , "NV4097_SET_VERTEX_DATA2F_M" } + { NV4097_SET_VERTEX_DATA2F_M + 4 , "NV4097_SET_VERTEX_DATA2F_M + 4" } + { NV4097_SET_VERTEX_DATA2F_M + 8 , "NV4097_SET_VERTEX_DATA2F_M + 8" } + { NV4097_SET_VERTEX_DATA2F_M + 12 , "NV4097_SET_VERTEX_DATA2F_M + 12" } + { NV4097_SET_VERTEX_DATA2F_M + 16 , "NV4097_SET_VERTEX_DATA2F_M + 16" } + { NV4097_SET_VERTEX_DATA2F_M + 20 , "NV4097_SET_VERTEX_DATA2F_M + 20" } + { NV4097_SET_VERTEX_DATA2F_M + 24 , "NV4097_SET_VERTEX_DATA2F_M + 24" } + { NV4097_SET_VERTEX_DATA2F_M + 28 , "NV4097_SET_VERTEX_DATA2F_M + 28" } + { NV4097_SET_VERTEX_DATA2F_M + 32 , "NV4097_SET_VERTEX_DATA2F_M + 32" } + { NV4097_SET_VERTEX_DATA2F_M + 36 , "NV4097_SET_VERTEX_DATA2F_M + 36" } + { NV4097_SET_VERTEX_DATA2F_M + 40 , "NV4097_SET_VERTEX_DATA2F_M + 40" } + { NV4097_SET_VERTEX_DATA2F_M + 44 , "NV4097_SET_VERTEX_DATA2F_M + 44" } + { NV4097_SET_VERTEX_DATA2F_M + 48 , "NV4097_SET_VERTEX_DATA2F_M + 48" } + { NV4097_SET_VERTEX_DATA2F_M + 52 , "NV4097_SET_VERTEX_DATA2F_M + 52" } + { NV4097_SET_VERTEX_DATA2F_M + 56 , "NV4097_SET_VERTEX_DATA2F_M + 56" } + { NV4097_SET_VERTEX_DATA2F_M + 60 , "NV4097_SET_VERTEX_DATA2F_M + 60" } + { NV4097_SET_VERTEX_DATA2F_M + 64 , "NV4097_SET_VERTEX_DATA2F_M + 64" } + { NV4097_SET_VERTEX_DATA2F_M + 68 , "NV4097_SET_VERTEX_DATA2F_M + 68" } + { NV4097_SET_VERTEX_DATA2F_M + 72 , "NV4097_SET_VERTEX_DATA2F_M + 72" } + { NV4097_SET_VERTEX_DATA2F_M + 76 , "NV4097_SET_VERTEX_DATA2F_M + 76" } + { NV4097_SET_VERTEX_DATA2F_M + 80 , "NV4097_SET_VERTEX_DATA2F_M + 80" } + { NV4097_SET_VERTEX_DATA2F_M + 84 , "NV4097_SET_VERTEX_DATA2F_M + 84" } + { NV4097_SET_VERTEX_DATA2F_M + 88 , "NV4097_SET_VERTEX_DATA2F_M + 88" } + { NV4097_SET_VERTEX_DATA2F_M + 92 , "NV4097_SET_VERTEX_DATA2F_M + 92" } + { NV4097_SET_VERTEX_DATA2F_M + 96 , "NV4097_SET_VERTEX_DATA2F_M + 96" } + { NV4097_SET_VERTEX_DATA2F_M + 100 , "NV4097_SET_VERTEX_DATA2F_M + 100" } + { NV4097_SET_VERTEX_DATA2F_M + 104 , "NV4097_SET_VERTEX_DATA2F_M + 104" } + { NV4097_SET_VERTEX_DATA2F_M + 108 , "NV4097_SET_VERTEX_DATA2F_M + 108" } + { NV4097_SET_VERTEX_DATA2F_M + 112 , "NV4097_SET_VERTEX_DATA2F_M + 112" } + { NV4097_SET_VERTEX_DATA2F_M + 116 , "NV4097_SET_VERTEX_DATA2F_M + 116" } + { NV4097_SET_VERTEX_DATA2F_M + 120 , "NV4097_SET_VERTEX_DATA2F_M + 120" } + { NV4097_SET_VERTEX_DATA2F_M + 124 , "NV4097_SET_VERTEX_DATA2F_M + 124" } + { NV4097_SET_VERTEX_DATA2S_M , "NV4097_SET_VERTEX_DATA2S_M" } + { NV4097_SET_VERTEX_DATA2S_M + 4 , "NV4097_SET_VERTEX_DATA2S_M + 4" } + { NV4097_SET_VERTEX_DATA2S_M + 8 , "NV4097_SET_VERTEX_DATA2S_M + 8" } + { NV4097_SET_VERTEX_DATA2S_M + 12 , "NV4097_SET_VERTEX_DATA2S_M + 12" } + { NV4097_SET_VERTEX_DATA2S_M + 16 , "NV4097_SET_VERTEX_DATA2S_M + 16" } + { NV4097_SET_VERTEX_DATA2S_M + 20 , "NV4097_SET_VERTEX_DATA2S_M + 20" } + { NV4097_SET_VERTEX_DATA2S_M + 24 , "NV4097_SET_VERTEX_DATA2S_M + 24" } + { NV4097_SET_VERTEX_DATA2S_M + 28 , "NV4097_SET_VERTEX_DATA2S_M + 28" } + { NV4097_SET_VERTEX_DATA2S_M + 32 , "NV4097_SET_VERTEX_DATA2S_M + 32" } + { NV4097_SET_VERTEX_DATA2S_M + 36 , "NV4097_SET_VERTEX_DATA2S_M + 36" } + { NV4097_SET_VERTEX_DATA2S_M + 40 , "NV4097_SET_VERTEX_DATA2S_M + 40" } + { NV4097_SET_VERTEX_DATA2S_M + 44 , "NV4097_SET_VERTEX_DATA2S_M + 44" } + { NV4097_SET_VERTEX_DATA2S_M + 48 , "NV4097_SET_VERTEX_DATA2S_M + 48" } + { NV4097_SET_VERTEX_DATA2S_M + 52 , "NV4097_SET_VERTEX_DATA2S_M + 52" } + { NV4097_SET_VERTEX_DATA2S_M + 56 , "NV4097_SET_VERTEX_DATA2S_M + 56" } + { NV4097_SET_VERTEX_DATA2S_M + 60 , "NV4097_SET_VERTEX_DATA2S_M + 60" } + { NV4097_SET_VERTEX_DATA4UB_M , "NV4097_SET_VERTEX_DATA4UB_M" } + { NV4097_SET_VERTEX_DATA4UB_M + 4 , "NV4097_SET_VERTEX_DATA4UB_M + 4" } + { NV4097_SET_VERTEX_DATA4UB_M + 8 , "NV4097_SET_VERTEX_DATA4UB_M + 8" } + { NV4097_SET_VERTEX_DATA4UB_M + 12 , "NV4097_SET_VERTEX_DATA4UB_M + 12" } + { NV4097_SET_VERTEX_DATA4UB_M + 16 , "NV4097_SET_VERTEX_DATA4UB_M + 16" } + { NV4097_SET_VERTEX_DATA4UB_M + 20 , "NV4097_SET_VERTEX_DATA4UB_M + 20" } + { NV4097_SET_VERTEX_DATA4UB_M + 24 , "NV4097_SET_VERTEX_DATA4UB_M + 24" } + { NV4097_SET_VERTEX_DATA4UB_M + 28 , "NV4097_SET_VERTEX_DATA4UB_M + 28" } + { NV4097_SET_VERTEX_DATA4UB_M + 32 , "NV4097_SET_VERTEX_DATA4UB_M + 32" } + { NV4097_SET_VERTEX_DATA4UB_M + 36 , "NV4097_SET_VERTEX_DATA4UB_M + 36" } + { NV4097_SET_VERTEX_DATA4UB_M + 40 , "NV4097_SET_VERTEX_DATA4UB_M + 40" } + { NV4097_SET_VERTEX_DATA4UB_M + 44 , "NV4097_SET_VERTEX_DATA4UB_M + 44" } + { NV4097_SET_VERTEX_DATA4UB_M + 48 , "NV4097_SET_VERTEX_DATA4UB_M + 48" } + { NV4097_SET_VERTEX_DATA4UB_M + 52 , "NV4097_SET_VERTEX_DATA4UB_M + 52" } + { NV4097_SET_VERTEX_DATA4UB_M + 56 , "NV4097_SET_VERTEX_DATA4UB_M + 56" } + { NV4097_SET_VERTEX_DATA4UB_M + 60 , "NV4097_SET_VERTEX_DATA4UB_M + 60" } + { NV4097_SET_VERTEX_DATA4S_M , "NV4097_SET_VERTEX_DATA4S_M" } + { NV4097_SET_VERTEX_DATA4S_M + 4 , "NV4097_SET_VERTEX_DATA4S_M + 4" } + { NV4097_SET_VERTEX_DATA4S_M + 8 , "NV4097_SET_VERTEX_DATA4S_M + 8" } + { NV4097_SET_VERTEX_DATA4S_M + 12 , "NV4097_SET_VERTEX_DATA4S_M + 12" } + { NV4097_SET_VERTEX_DATA4S_M + 16 , "NV4097_SET_VERTEX_DATA4S_M + 16" } + { NV4097_SET_VERTEX_DATA4S_M + 20 , "NV4097_SET_VERTEX_DATA4S_M + 20" } + { NV4097_SET_VERTEX_DATA4S_M + 24 , "NV4097_SET_VERTEX_DATA4S_M + 24" } + { NV4097_SET_VERTEX_DATA4S_M + 28 , "NV4097_SET_VERTEX_DATA4S_M + 28" } + { NV4097_SET_VERTEX_DATA4S_M + 32 , "NV4097_SET_VERTEX_DATA4S_M + 32" } + { NV4097_SET_VERTEX_DATA4S_M + 36 , "NV4097_SET_VERTEX_DATA4S_M + 36" } + { NV4097_SET_VERTEX_DATA4S_M + 40 , "NV4097_SET_VERTEX_DATA4S_M + 40" } + { NV4097_SET_VERTEX_DATA4S_M + 44 , "NV4097_SET_VERTEX_DATA4S_M + 44" } + { NV4097_SET_VERTEX_DATA4S_M + 48 , "NV4097_SET_VERTEX_DATA4S_M + 48" } + { NV4097_SET_VERTEX_DATA4S_M + 52 , "NV4097_SET_VERTEX_DATA4S_M + 52" } + { NV4097_SET_VERTEX_DATA4S_M + 56 , "NV4097_SET_VERTEX_DATA4S_M + 56" } + { NV4097_SET_VERTEX_DATA4S_M + 60 , "NV4097_SET_VERTEX_DATA4S_M + 60" } + { NV4097_SET_VERTEX_DATA4S_M + 64 , "NV4097_SET_VERTEX_DATA4S_M + 64" } + { NV4097_SET_VERTEX_DATA4S_M + 68 , "NV4097_SET_VERTEX_DATA4S_M + 68" } + { NV4097_SET_VERTEX_DATA4S_M + 72 , "NV4097_SET_VERTEX_DATA4S_M + 72" } + { NV4097_SET_VERTEX_DATA4S_M + 76 , "NV4097_SET_VERTEX_DATA4S_M + 76" } + { NV4097_SET_VERTEX_DATA4S_M + 80 , "NV4097_SET_VERTEX_DATA4S_M + 80" } + { NV4097_SET_VERTEX_DATA4S_M + 84 , "NV4097_SET_VERTEX_DATA4S_M + 84" } + { NV4097_SET_VERTEX_DATA4S_M + 88 , "NV4097_SET_VERTEX_DATA4S_M + 88" } + { NV4097_SET_VERTEX_DATA4S_M + 92 , "NV4097_SET_VERTEX_DATA4S_M + 92" } + { NV4097_SET_VERTEX_DATA4S_M + 96 , "NV4097_SET_VERTEX_DATA4S_M + 96" } + { NV4097_SET_VERTEX_DATA4S_M + 100 , "NV4097_SET_VERTEX_DATA4S_M + 100" } + { NV4097_SET_VERTEX_DATA4S_M + 104 , "NV4097_SET_VERTEX_DATA4S_M + 104" } + { NV4097_SET_VERTEX_DATA4S_M + 108 , "NV4097_SET_VERTEX_DATA4S_M + 108" } + { NV4097_SET_VERTEX_DATA4S_M + 112 , "NV4097_SET_VERTEX_DATA4S_M + 112" } + { NV4097_SET_VERTEX_DATA4S_M + 116 , "NV4097_SET_VERTEX_DATA4S_M + 116" } + { NV4097_SET_VERTEX_DATA4S_M + 120 , "NV4097_SET_VERTEX_DATA4S_M + 120" } + { NV4097_SET_VERTEX_DATA4S_M + 124 , "NV4097_SET_VERTEX_DATA4S_M + 124" } + { NV4097_SET_TEXTURE_OFFSET , "NV4097_SET_TEXTURE_OFFSET" } + { NV4097_SET_TEXTURE_FORMAT , "NV4097_SET_TEXTURE_FORMAT" } + { NV4097_SET_TEXTURE_ADDRESS , "NV4097_SET_TEXTURE_ADDRESS" } + { NV4097_SET_TEXTURE_CONTROL0 , "NV4097_SET_TEXTURE_CONTROL0" } + { NV4097_SET_TEXTURE_CONTROL1 , "NV4097_SET_TEXTURE_CONTROL1" } + { NV4097_SET_TEXTURE_FILTER , "NV4097_SET_TEXTURE_FILTER" } + { NV4097_SET_TEXTURE_IMAGE_RECT , "NV4097_SET_TEXTURE_IMAGE_RECT" } + { NV4097_SET_TEXTURE_BORDER_COLOR , "NV4097_SET_TEXTURE_BORDER_COLOR" } + { NV4097_SET_TEXTURE_OFFSET + 0x20 , "NV4097_SET_TEXTURE_OFFSET + 0x20" } + { NV4097_SET_TEXTURE_FORMAT + 0x20 , "NV4097_SET_TEXTURE_FORMAT + 0x20" } + { NV4097_SET_TEXTURE_ADDRESS + 0x20 , "NV4097_SET_TEXTURE_ADDRESS + 0x20" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x20 , "NV4097_SET_TEXTURE_CONTROL0 + 0x20" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x20 , "NV4097_SET_TEXTURE_CONTROL1 + 0x20" } + { NV4097_SET_TEXTURE_FILTER + 0x20 , "NV4097_SET_TEXTURE_FILTER + 0x20" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x20 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x20" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x20 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x20" } + { NV4097_SET_TEXTURE_OFFSET + 0x40 , "NV4097_SET_TEXTURE_OFFSET + 0x40" } + { NV4097_SET_TEXTURE_FORMAT + 0x40 , "NV4097_SET_TEXTURE_FORMAT + 0x40" } + { NV4097_SET_TEXTURE_ADDRESS + 0x40 , "NV4097_SET_TEXTURE_ADDRESS + 0x40" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x40 , "NV4097_SET_TEXTURE_CONTROL0 + 0x40" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x40 , "NV4097_SET_TEXTURE_CONTROL1 + 0x40" } + { NV4097_SET_TEXTURE_FILTER + 0x40 , "NV4097_SET_TEXTURE_FILTER + 0x40" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x40 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x40" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x40 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x40" } + { NV4097_SET_TEXTURE_OFFSET + 0x60 , "NV4097_SET_TEXTURE_OFFSET + 0x60" } + { NV4097_SET_TEXTURE_FORMAT + 0x60 , "NV4097_SET_TEXTURE_FORMAT + 0x60" } + { NV4097_SET_TEXTURE_ADDRESS + 0x60 , "NV4097_SET_TEXTURE_ADDRESS + 0x60" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x60 , "NV4097_SET_TEXTURE_CONTROL0 + 0x60" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x60 , "NV4097_SET_TEXTURE_CONTROL1 + 0x60" } + { NV4097_SET_TEXTURE_FILTER + 0x60 , "NV4097_SET_TEXTURE_FILTER + 0x60" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x60 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x60" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x60 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x60" } + { NV4097_SET_TEXTURE_OFFSET + 0x80 , "NV4097_SET_TEXTURE_OFFSET + 0x80" } + { NV4097_SET_TEXTURE_FORMAT + 0x80 , "NV4097_SET_TEXTURE_FORMAT + 0x80" } + { NV4097_SET_TEXTURE_ADDRESS + 0x80 , "NV4097_SET_TEXTURE_ADDRESS + 0x80" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x80 , "NV4097_SET_TEXTURE_CONTROL0 + 0x80" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x80 , "NV4097_SET_TEXTURE_CONTROL1 + 0x80" } + { NV4097_SET_TEXTURE_FILTER + 0x80 , "NV4097_SET_TEXTURE_FILTER + 0x80" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x80 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x80" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x80 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x80" } + { NV4097_SET_TEXTURE_OFFSET + 0xa0 , "NV4097_SET_TEXTURE_OFFSET + 0xa0" } + { NV4097_SET_TEXTURE_FORMAT + 0xa0 , "NV4097_SET_TEXTURE_FORMAT + 0xa0" } + { NV4097_SET_TEXTURE_ADDRESS + 0xa0 , "NV4097_SET_TEXTURE_ADDRESS + 0xa0" } + { NV4097_SET_TEXTURE_CONTROL0 + 0xa0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xa0" } + { NV4097_SET_TEXTURE_CONTROL1 + 0xa0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xa0" } + { NV4097_SET_TEXTURE_FILTER + 0xa0 , "NV4097_SET_TEXTURE_FILTER + 0xa0" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0" } + { NV4097_SET_TEXTURE_OFFSET + 0xc0 , "NV4097_SET_TEXTURE_OFFSET + 0xc0" } + { NV4097_SET_TEXTURE_FORMAT + 0xc0 , "NV4097_SET_TEXTURE_FORMAT + 0xc0" } + { NV4097_SET_TEXTURE_ADDRESS + 0xc0 , "NV4097_SET_TEXTURE_ADDRESS + 0xc0" } + { NV4097_SET_TEXTURE_CONTROL0 + 0xc0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xc0" } + { NV4097_SET_TEXTURE_CONTROL1 + 0xc0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xc0" } + { NV4097_SET_TEXTURE_FILTER + 0xc0 , "NV4097_SET_TEXTURE_FILTER + 0xc0" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0" } + { NV4097_SET_TEXTURE_OFFSET + 0xe0 , "NV4097_SET_TEXTURE_OFFSET + 0xe0" } + { NV4097_SET_TEXTURE_FORMAT + 0xe0 , "NV4097_SET_TEXTURE_FORMAT + 0xe0" } + { NV4097_SET_TEXTURE_ADDRESS + 0xe0 , "NV4097_SET_TEXTURE_ADDRESS + 0xe0" } + { NV4097_SET_TEXTURE_CONTROL0 + 0xe0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xe0" } + { NV4097_SET_TEXTURE_CONTROL1 + 0xe0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xe0" } + { NV4097_SET_TEXTURE_FILTER + 0xe0 , "NV4097_SET_TEXTURE_FILTER + 0xe0" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0" } + { NV4097_SET_TEXTURE_OFFSET + 0x100 , "NV4097_SET_TEXTURE_OFFSET + 0x100" } + { NV4097_SET_TEXTURE_FORMAT + 0x100 , "NV4097_SET_TEXTURE_FORMAT + 0x100" } + { NV4097_SET_TEXTURE_ADDRESS + 0x100 , "NV4097_SET_TEXTURE_ADDRESS + 0x100" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x100 , "NV4097_SET_TEXTURE_CONTROL0 + 0x100" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x100 , "NV4097_SET_TEXTURE_CONTROL1 + 0x100" } + { NV4097_SET_TEXTURE_FILTER + 0x100 , "NV4097_SET_TEXTURE_FILTER + 0x100" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x100 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x100" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x100 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x100" } + { NV4097_SET_TEXTURE_OFFSET + 0x120 , "NV4097_SET_TEXTURE_OFFSET + 0x120" } + { NV4097_SET_TEXTURE_FORMAT + 0x120 , "NV4097_SET_TEXTURE_FORMAT + 0x120" } + { NV4097_SET_TEXTURE_ADDRESS + 0x120 , "NV4097_SET_TEXTURE_ADDRESS + 0x120" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x120 , "NV4097_SET_TEXTURE_CONTROL0 + 0x120" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x120 , "NV4097_SET_TEXTURE_CONTROL1 + 0x120" } + { NV4097_SET_TEXTURE_FILTER + 0x120 , "NV4097_SET_TEXTURE_FILTER + 0x120" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x120 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x120" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x120 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x120" } + { NV4097_SET_TEXTURE_OFFSET + 0x140 , "NV4097_SET_TEXTURE_OFFSET + 0x140" } + { NV4097_SET_TEXTURE_FORMAT + 0x140 , "NV4097_SET_TEXTURE_FORMAT + 0x140" } + { NV4097_SET_TEXTURE_ADDRESS + 0x140 , "NV4097_SET_TEXTURE_ADDRESS + 0x140" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x140 , "NV4097_SET_TEXTURE_CONTROL0 + 0x140" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x140 , "NV4097_SET_TEXTURE_CONTROL1 + 0x140" } + { NV4097_SET_TEXTURE_FILTER + 0x140 , "NV4097_SET_TEXTURE_FILTER + 0x140" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x140 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x140" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x140 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x140" } + { NV4097_SET_TEXTURE_OFFSET + 0x160 , "NV4097_SET_TEXTURE_OFFSET + 0x160" } + { NV4097_SET_TEXTURE_FORMAT + 0x160 , "NV4097_SET_TEXTURE_FORMAT + 0x160" } + { NV4097_SET_TEXTURE_ADDRESS + 0x160 , "NV4097_SET_TEXTURE_ADDRESS + 0x160" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x160 , "NV4097_SET_TEXTURE_CONTROL0 + 0x160" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x160 , "NV4097_SET_TEXTURE_CONTROL1 + 0x160" } + { NV4097_SET_TEXTURE_FILTER + 0x160 , "NV4097_SET_TEXTURE_FILTER + 0x160" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x160 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x160" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x160 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x160" } + { NV4097_SET_TEXTURE_OFFSET + 0x180 , "NV4097_SET_TEXTURE_OFFSET + 0x180" } + { NV4097_SET_TEXTURE_FORMAT + 0x180 , "NV4097_SET_TEXTURE_FORMAT + 0x180" } + { NV4097_SET_TEXTURE_ADDRESS + 0x180 , "NV4097_SET_TEXTURE_ADDRESS + 0x180" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x180 , "NV4097_SET_TEXTURE_CONTROL0 + 0x180" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x180 , "NV4097_SET_TEXTURE_CONTROL1 + 0x180" } + { NV4097_SET_TEXTURE_FILTER + 0x180 , "NV4097_SET_TEXTURE_FILTER + 0x180" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x180 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x180" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x180 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x180" } + { NV4097_SET_TEXTURE_OFFSET + 0x1a0 , "NV4097_SET_TEXTURE_OFFSET + 0x1a0" } + { NV4097_SET_TEXTURE_FORMAT + 0x1a0 , "NV4097_SET_TEXTURE_FORMAT + 0x1a0" } + { NV4097_SET_TEXTURE_ADDRESS + 0x1a0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1a0" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x1a0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1a0" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x1a0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1a0" } + { NV4097_SET_TEXTURE_FILTER + 0x1a0 , "NV4097_SET_TEXTURE_FILTER + 0x1a0" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0" } + { NV4097_SET_TEXTURE_OFFSET + 0x1c0 , "NV4097_SET_TEXTURE_OFFSET + 0x1c0" } + { NV4097_SET_TEXTURE_FORMAT + 0x1c0 , "NV4097_SET_TEXTURE_FORMAT + 0x1c0" } + { NV4097_SET_TEXTURE_ADDRESS + 0x1c0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1c0" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x1c0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1c0" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x1c0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1c0" } + { NV4097_SET_TEXTURE_FILTER + 0x1c0 , "NV4097_SET_TEXTURE_FILTER + 0x1c0" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0" } + { NV4097_SET_TEXTURE_OFFSET + 0x1e0 , "NV4097_SET_TEXTURE_OFFSET + 0x1e0" } + { NV4097_SET_TEXTURE_FORMAT + 0x1e0 , "NV4097_SET_TEXTURE_FORMAT + 0x1e0" } + { NV4097_SET_TEXTURE_ADDRESS + 0x1e0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1e0" } + { NV4097_SET_TEXTURE_CONTROL0 + 0x1e0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1e0" } + { NV4097_SET_TEXTURE_CONTROL1 + 0x1e0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1e0" } + { NV4097_SET_TEXTURE_FILTER + 0x1e0 , "NV4097_SET_TEXTURE_FILTER + 0x1e0" } + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0" } + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0" } + { NV4097_SET_VERTEX_DATA4F_M , "NV4097_SET_VERTEX_DATA4F_M" } + { NV4097_SET_VERTEX_DATA4F_M + 4 , "NV4097_SET_VERTEX_DATA4F_M + 4" } + { NV4097_SET_VERTEX_DATA4F_M + 8 , "NV4097_SET_VERTEX_DATA4F_M + 8" } + { NV4097_SET_VERTEX_DATA4F_M + 12 , "NV4097_SET_VERTEX_DATA4F_M + 12" } + { NV4097_SET_VERTEX_DATA4F_M + 16 , "NV4097_SET_VERTEX_DATA4F_M + 16" } + { NV4097_SET_VERTEX_DATA4F_M + 20 , "NV4097_SET_VERTEX_DATA4F_M + 20" } + { NV4097_SET_VERTEX_DATA4F_M + 24 , "NV4097_SET_VERTEX_DATA4F_M + 24" } + { NV4097_SET_VERTEX_DATA4F_M + 28 , "NV4097_SET_VERTEX_DATA4F_M + 28" } + { NV4097_SET_VERTEX_DATA4F_M + 32 , "NV4097_SET_VERTEX_DATA4F_M + 32" } + { NV4097_SET_VERTEX_DATA4F_M + 36 , "NV4097_SET_VERTEX_DATA4F_M + 36" } + { NV4097_SET_VERTEX_DATA4F_M + 40 , "NV4097_SET_VERTEX_DATA4F_M + 40" } + { NV4097_SET_VERTEX_DATA4F_M + 44 , "NV4097_SET_VERTEX_DATA4F_M + 44" } + { NV4097_SET_VERTEX_DATA4F_M + 48 , "NV4097_SET_VERTEX_DATA4F_M + 48" } + { NV4097_SET_VERTEX_DATA4F_M + 52 , "NV4097_SET_VERTEX_DATA4F_M + 52" } + { NV4097_SET_VERTEX_DATA4F_M + 56 , "NV4097_SET_VERTEX_DATA4F_M + 56" } + { NV4097_SET_VERTEX_DATA4F_M + 60 , "NV4097_SET_VERTEX_DATA4F_M + 60" } + { NV4097_SET_VERTEX_DATA4F_M + 64 , "NV4097_SET_VERTEX_DATA4F_M + 64" } + { NV4097_SET_VERTEX_DATA4F_M + 68 , "NV4097_SET_VERTEX_DATA4F_M + 68" } + { NV4097_SET_VERTEX_DATA4F_M + 72 , "NV4097_SET_VERTEX_DATA4F_M + 72" } + { NV4097_SET_VERTEX_DATA4F_M + 76 , "NV4097_SET_VERTEX_DATA4F_M + 76" } + { NV4097_SET_VERTEX_DATA4F_M + 80 , "NV4097_SET_VERTEX_DATA4F_M + 80" } + { NV4097_SET_VERTEX_DATA4F_M + 84 , "NV4097_SET_VERTEX_DATA4F_M + 84" } + { NV4097_SET_VERTEX_DATA4F_M + 88 , "NV4097_SET_VERTEX_DATA4F_M + 88" } + { NV4097_SET_VERTEX_DATA4F_M + 92 , "NV4097_SET_VERTEX_DATA4F_M + 92" } + { NV4097_SET_VERTEX_DATA4F_M + 96 , "NV4097_SET_VERTEX_DATA4F_M + 96" } + { NV4097_SET_VERTEX_DATA4F_M + 100 , "NV4097_SET_VERTEX_DATA4F_M + 100" } + { NV4097_SET_VERTEX_DATA4F_M + 104 , "NV4097_SET_VERTEX_DATA4F_M + 104" } + { NV4097_SET_VERTEX_DATA4F_M + 108 , "NV4097_SET_VERTEX_DATA4F_M + 108" } + { NV4097_SET_VERTEX_DATA4F_M + 112 , "NV4097_SET_VERTEX_DATA4F_M + 112" } + { NV4097_SET_VERTEX_DATA4F_M + 116 , "NV4097_SET_VERTEX_DATA4F_M + 116" } + { NV4097_SET_VERTEX_DATA4F_M + 120 , "NV4097_SET_VERTEX_DATA4F_M + 120" } + { NV4097_SET_VERTEX_DATA4F_M + 124 , "NV4097_SET_VERTEX_DATA4F_M + 124" } + { NV4097_SET_VERTEX_DATA4F_M + 128 , "NV4097_SET_VERTEX_DATA4F_M + 128" } + { NV4097_SET_VERTEX_DATA4F_M + 132 , "NV4097_SET_VERTEX_DATA4F_M + 132" } + { NV4097_SET_VERTEX_DATA4F_M + 136 , "NV4097_SET_VERTEX_DATA4F_M + 136" } + { NV4097_SET_VERTEX_DATA4F_M + 140 , "NV4097_SET_VERTEX_DATA4F_M + 140" } + { NV4097_SET_VERTEX_DATA4F_M + 144 , "NV4097_SET_VERTEX_DATA4F_M + 144" } + { NV4097_SET_VERTEX_DATA4F_M + 148 , "NV4097_SET_VERTEX_DATA4F_M + 148" } + { NV4097_SET_VERTEX_DATA4F_M + 152 , "NV4097_SET_VERTEX_DATA4F_M + 152" } + { NV4097_SET_VERTEX_DATA4F_M + 156 , "NV4097_SET_VERTEX_DATA4F_M + 156" } + { NV4097_SET_VERTEX_DATA4F_M + 160 , "NV4097_SET_VERTEX_DATA4F_M + 160" } + { NV4097_SET_VERTEX_DATA4F_M + 164 , "NV4097_SET_VERTEX_DATA4F_M + 164" } + { NV4097_SET_VERTEX_DATA4F_M + 168 , "NV4097_SET_VERTEX_DATA4F_M + 168" } + { NV4097_SET_VERTEX_DATA4F_M + 172 , "NV4097_SET_VERTEX_DATA4F_M + 172" } + { NV4097_SET_VERTEX_DATA4F_M + 176 , "NV4097_SET_VERTEX_DATA4F_M + 176" } + { NV4097_SET_VERTEX_DATA4F_M + 180 , "NV4097_SET_VERTEX_DATA4F_M + 180" } + { NV4097_SET_VERTEX_DATA4F_M + 184 , "NV4097_SET_VERTEX_DATA4F_M + 184" } + { NV4097_SET_VERTEX_DATA4F_M + 188 , "NV4097_SET_VERTEX_DATA4F_M + 188" } + { NV4097_SET_VERTEX_DATA4F_M + 192 , "NV4097_SET_VERTEX_DATA4F_M + 192" } + { NV4097_SET_VERTEX_DATA4F_M + 196 , "NV4097_SET_VERTEX_DATA4F_M + 196" } + { NV4097_SET_VERTEX_DATA4F_M + 200 , "NV4097_SET_VERTEX_DATA4F_M + 200" } + { NV4097_SET_VERTEX_DATA4F_M + 204 , "NV4097_SET_VERTEX_DATA4F_M + 204" } + { NV4097_SET_VERTEX_DATA4F_M + 208 , "NV4097_SET_VERTEX_DATA4F_M + 208" } + { NV4097_SET_VERTEX_DATA4F_M + 212 , "NV4097_SET_VERTEX_DATA4F_M + 212" } + { NV4097_SET_VERTEX_DATA4F_M + 216 , "NV4097_SET_VERTEX_DATA4F_M + 216" } + { NV4097_SET_VERTEX_DATA4F_M + 220 , "NV4097_SET_VERTEX_DATA4F_M + 220" } + { NV4097_SET_VERTEX_DATA4F_M + 224 , "NV4097_SET_VERTEX_DATA4F_M + 224" } + { NV4097_SET_VERTEX_DATA4F_M + 228 , "NV4097_SET_VERTEX_DATA4F_M + 228" } + { NV4097_SET_VERTEX_DATA4F_M + 232 , "NV4097_SET_VERTEX_DATA4F_M + 232" } + { NV4097_SET_VERTEX_DATA4F_M + 236 , "NV4097_SET_VERTEX_DATA4F_M + 236" } + { NV4097_SET_VERTEX_DATA4F_M + 240 , "NV4097_SET_VERTEX_DATA4F_M + 240" } + { NV4097_SET_VERTEX_DATA4F_M + 244 , "NV4097_SET_VERTEX_DATA4F_M + 244" } + { NV4097_SET_VERTEX_DATA4F_M + 248 , "NV4097_SET_VERTEX_DATA4F_M + 248" } + { NV4097_SET_VERTEX_DATA4F_M + 252 , "NV4097_SET_VERTEX_DATA4F_M + 252" } + { NV4097_SET_SHADER_CONTROL , "NV4097_SET_SHADER_CONTROL" } + { NV4097_SET_SEMAPHORE_OFFSET , "NV4097_SET_SEMAPHORE_OFFSET" } + { NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE , "NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE" } + { NV4097_TEXTURE_READ_SEMAPHORE_RELEASE , "NV4097_TEXTURE_READ_SEMAPHORE_RELEASE" } + { NV4097_SET_ZMIN_MAX_CONTROL , "NV4097_SET_ZMIN_MAX_CONTROL" } + { NV4097_SET_ANTI_ALIASING_CONTROL , "NV4097_SET_ANTI_ALIASING_CONTROL" } + { NV4097_SET_ZCULL_EN , "NV4097_SET_ZCULL_EN" } + { NV4097_SET_SHADER_WINDOW , "NV4097_SET_SHADER_WINDOW" } + { NV4097_SET_ZSTENCIL_CLEAR_VALUE , "NV4097_SET_ZSTENCIL_CLEAR_VALUE" } + { NV4097_SET_COLOR_CLEAR_VALUE , "NV4097_SET_COLOR_CLEAR_VALUE" } + { NV4097_CLEAR_SURFACE , "NV4097_CLEAR_SURFACE" } + { NV4097_SET_RESTART_INDEX_ENABLE , "NV4097_SET_RESTART_INDEX_ENABLE" } + { NV4097_SET_RESTART_INDEX , "NV4097_SET_RESTART_INDEX" } + { NV4097_SET_LINE_STIPPLE , "NV4097_SET_LINE_STIPPLE" } + { NV4097_SET_LINE_STIPPLE_PATTERN , "NV4097_SET_LINE_STIPPLE_PATTERN" } + { NV4097_SET_VERTEX_DATA1F_M , "NV4097_SET_VERTEX_DATA1F_M" } + { NV4097_SET_VERTEX_DATA1F_M + 4 , "NV4097_SET_VERTEX_DATA1F_M + 4" } + { NV4097_SET_VERTEX_DATA1F_M + 8 , "NV4097_SET_VERTEX_DATA1F_M + 8" } + { NV4097_SET_VERTEX_DATA1F_M + 12 , "NV4097_SET_VERTEX_DATA1F_M + 12" } + { NV4097_SET_VERTEX_DATA1F_M + 16 , "NV4097_SET_VERTEX_DATA1F_M + 16" } + { NV4097_SET_VERTEX_DATA1F_M + 20 , "NV4097_SET_VERTEX_DATA1F_M + 20" } + { NV4097_SET_VERTEX_DATA1F_M + 24 , "NV4097_SET_VERTEX_DATA1F_M + 24" } + { NV4097_SET_VERTEX_DATA1F_M + 28 , "NV4097_SET_VERTEX_DATA1F_M + 28" } + { NV4097_SET_VERTEX_DATA1F_M + 32 , "NV4097_SET_VERTEX_DATA1F_M + 32" } + { NV4097_SET_VERTEX_DATA1F_M + 36 , "NV4097_SET_VERTEX_DATA1F_M + 36" } + { NV4097_SET_VERTEX_DATA1F_M + 40 , "NV4097_SET_VERTEX_DATA1F_M + 40" } + { NV4097_SET_VERTEX_DATA1F_M + 44 , "NV4097_SET_VERTEX_DATA1F_M + 44" } + { NV4097_SET_VERTEX_DATA1F_M + 48 , "NV4097_SET_VERTEX_DATA1F_M + 48" } + { NV4097_SET_VERTEX_DATA1F_M + 52 , "NV4097_SET_VERTEX_DATA1F_M + 52" } + { NV4097_SET_VERTEX_DATA1F_M + 56 , "NV4097_SET_VERTEX_DATA1F_M + 56" } + { NV4097_SET_VERTEX_DATA1F_M + 60 , "NV4097_SET_VERTEX_DATA1F_M + 60" } + { NV4097_SET_RENDER_ENABLE , "NV4097_SET_RENDER_ENABLE" } + { NV4097_SET_TRANSFORM_PROGRAM_LOAD , "NV4097_SET_TRANSFORM_PROGRAM_LOAD" } + { NV4097_SET_TRANSFORM_PROGRAM_START , "NV4097_SET_TRANSFORM_PROGRAM_START" } + { NV4097_SET_ZCULL_CONTROL0 , "NV4097_SET_ZCULL_CONTROL0" } + { NV4097_SET_ZCULL_CONTROL1 , "NV4097_SET_ZCULL_CONTROL1" } + { NV4097_SET_SCULL_CONTROL , "NV4097_SET_SCULL_CONTROL" } + { NV4097_SET_POINT_SIZE , "NV4097_SET_POINT_SIZE" } + { NV4097_SET_POINT_PARAMS_ENABLE , "NV4097_SET_POINT_PARAMS_ENABLE" } + { NV4097_SET_POINT_SPRITE_CONTROL , "NV4097_SET_POINT_SPRITE_CONTROL" } + { NV4097_SET_TRANSFORM_TIMEOUT , "NV4097_SET_TRANSFORM_TIMEOUT" } + { NV4097_SET_TRANSFORM_CONSTANT_LOAD , "NV4097_SET_TRANSFORM_CONSTANT_LOAD" } + { NV4097_SET_FREQUENCY_DIVIDER_OPERATION , "NV4097_SET_FREQUENCY_DIVIDER_OPERATION" } + { NV4097_INVALIDATE_L2 , "NV4097_INVALIDATE_L2" } + { NV4097_SET_TRANSFORM_BRANCH_BITS, "NV4097_SET_TRANSFORM_BRANCH_BITS" } }; for(auto& s: METHOD_NAME_LIST) { if(s.id == id) - return "cellGcm" + s.name; + return "CELL_GCM_" + s.name; } return fmt::Format("unknown/illegal method [0x%08x]", id); From 602c436e1c344448470c8012a59e643bee7c90e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Wed, 23 Jul 2014 12:38:08 +0200 Subject: [PATCH 235/499] Removed "Boot game and start" entry There is already a setting on the menu (Settings > HLE > Always start after boot) to do that. Make it active by default since disabling it is only useful for debugging purposes. --- rpcs3/Emu/GS/GCM.h | 1376 +++++++++++++-------------- rpcs3/Emu/GS/GL/GLVertexProgram.cpp | 2 +- rpcs3/Emu/GS/RSXThread.cpp | 2 +- rpcs3/Gui/GameViewer.cpp | 8 +- rpcs3/Gui/MainFrame.cpp | 47 +- rpcs3/Ini.h | 2 +- 6 files changed, 700 insertions(+), 737 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index a9d719304e..386c86b644 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -639,694 +639,694 @@ static const std::string GetMethodName(const u32 id) const u32 id; const std::string& name; } static const METHOD_NAME_LIST[] = { - { NV4097_NO_OPERATION , "NV4097_NO_OPERATION" } - { NV4097_NOTIFY , "NV4097_NOTIFY" } - { NV4097_WAIT_FOR_IDLE , "NV4097_WAIT_FOR_IDLE" } - { NV4097_PM_TRIGGER , "NV4097_PM_TRIGGER" } - { NV4097_SET_CONTEXT_DMA_NOTIFIES , "NV4097_SET_CONTEXT_DMA_NOTIFIES" } - { NV4097_SET_CONTEXT_DMA_A , "NV4097_SET_CONTEXT_DMA_A" } - { NV4097_SET_CONTEXT_DMA_B , "NV4097_SET_CONTEXT_DMA_B" } - { NV4097_SET_CONTEXT_DMA_COLOR_B , "NV4097_SET_CONTEXT_DMA_COLOR_B" } - { NV4097_SET_CONTEXT_DMA_STATE , "NV4097_SET_CONTEXT_DMA_STATE" } - { NV4097_SET_CONTEXT_DMA_COLOR_A , "NV4097_SET_CONTEXT_DMA_COLOR_A" } - { NV4097_SET_CONTEXT_DMA_ZETA , "NV4097_SET_CONTEXT_DMA_ZETA" } - { NV4097_SET_CONTEXT_DMA_VERTEX_A , "NV4097_SET_CONTEXT_DMA_VERTEX_A" } - { NV4097_SET_CONTEXT_DMA_VERTEX_B , "NV4097_SET_CONTEXT_DMA_VERTEX_B" } - { NV4097_SET_CONTEXT_DMA_SEMAPHORE , "NV4097_SET_CONTEXT_DMA_SEMAPHORE" } - { NV4097_SET_CONTEXT_DMA_REPORT , "NV4097_SET_CONTEXT_DMA_REPORT" } - { NV4097_SET_CONTEXT_DMA_CLIP_ID , "NV4097_SET_CONTEXT_DMA_CLIP_ID" } - { NV4097_SET_CONTEXT_DMA_CULL_DATA , "NV4097_SET_CONTEXT_DMA_CULL_DATA" } - { NV4097_SET_CONTEXT_DMA_COLOR_C , "NV4097_SET_CONTEXT_DMA_COLOR_C" } - { NV4097_SET_CONTEXT_DMA_COLOR_D , "NV4097_SET_CONTEXT_DMA_COLOR_D" } - { NV4097_SET_SURFACE_CLIP_HORIZONTAL , "NV4097_SET_SURFACE_CLIP_HORIZONTAL" } - { NV4097_SET_SURFACE_CLIP_VERTICAL , "NV4097_SET_SURFACE_CLIP_VERTICAL" } - { NV4097_SET_SURFACE_FORMAT , "NV4097_SET_SURFACE_FORMAT" } - { NV4097_SET_SURFACE_PITCH_A , "NV4097_SET_SURFACE_PITCH_A" } - { NV4097_SET_SURFACE_COLOR_AOFFSET , "NV4097_SET_SURFACE_COLOR_AOFFSET" } - { NV4097_SET_SURFACE_ZETA_OFFSET , "NV4097_SET_SURFACE_ZETA_OFFSET" } - { NV4097_SET_SURFACE_COLOR_BOFFSET , "NV4097_SET_SURFACE_COLOR_BOFFSET" } - { NV4097_SET_SURFACE_PITCH_B , "NV4097_SET_SURFACE_PITCH_B" } - { NV4097_SET_SURFACE_COLOR_TARGET , "NV4097_SET_SURFACE_COLOR_TARGET" } - { NV4097_SET_SURFACE_PITCH_Z , "NV4097_SET_SURFACE_PITCH_Z" } - { NV4097_INVALIDATE_ZCULL , "NV4097_INVALIDATE_ZCULL" } - { NV4097_SET_CYLINDRICAL_WRAP , "NV4097_SET_CYLINDRICAL_WRAP" } - { NV4097_SET_CYLINDRICAL_WRAP1 , "NV4097_SET_CYLINDRICAL_WRAP1" } - { NV4097_SET_SURFACE_PITCH_C , "NV4097_SET_SURFACE_PITCH_C" } - { NV4097_SET_SURFACE_PITCH_D , "NV4097_SET_SURFACE_PITCH_D" } - { NV4097_SET_SURFACE_COLOR_COFFSET , "NV4097_SET_SURFACE_COLOR_COFFSET" } - { NV4097_SET_SURFACE_COLOR_DOFFSET , "NV4097_SET_SURFACE_COLOR_DOFFSET" } - { NV4097_SET_WINDOW_OFFSET , "NV4097_SET_WINDOW_OFFSET" } - { NV4097_SET_DITHER_ENABLE , "NV4097_SET_DITHER_ENABLE" } - { NV4097_SET_ALPHA_TEST_ENABLE , "NV4097_SET_ALPHA_TEST_ENABLE" } - { NV4097_SET_ALPHA_FUNC , "NV4097_SET_ALPHA_FUNC" } - { NV4097_SET_ALPHA_REF , "NV4097_SET_ALPHA_REF" } - { NV4097_SET_BLEND_ENABLE , "NV4097_SET_BLEND_ENABLE" } - { NV4097_SET_BLEND_FUNC_SFACTOR , "NV4097_SET_BLEND_FUNC_SFACTOR" } - { NV4097_SET_BLEND_FUNC_DFACTOR , "NV4097_SET_BLEND_FUNC_DFACTOR" } - { NV4097_SET_BLEND_COLOR , "NV4097_SET_BLEND_COLOR" } - { NV4097_SET_BLEND_EQUATION , "NV4097_SET_BLEND_EQUATION" } - { NV4097_SET_COLOR_MASK , "NV4097_SET_COLOR_MASK" } - { NV4097_SET_STENCIL_TEST_ENABLE , "NV4097_SET_STENCIL_TEST_ENABLE" } - { NV4097_SET_STENCIL_MASK , "NV4097_SET_STENCIL_MASK" } - { NV4097_SET_STENCIL_FUNC , "NV4097_SET_STENCIL_FUNC" } - { NV4097_SET_STENCIL_FUNC_REF , "NV4097_SET_STENCIL_FUNC_REF" } - { NV4097_SET_STENCIL_FUNC_MASK , "NV4097_SET_STENCIL_FUNC_MASK" } - { NV4097_SET_STENCIL_OP_FAIL , "NV4097_SET_STENCIL_OP_FAIL" } - { NV4097_SET_STENCIL_OP_ZFAIL , "NV4097_SET_STENCIL_OP_ZFAIL" } - { NV4097_SET_STENCIL_OP_ZPASS , "NV4097_SET_STENCIL_OP_ZPASS" } - { NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE , "NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE" } - { NV4097_SET_BACK_STENCIL_MASK , "NV4097_SET_BACK_STENCIL_MASK" } - { NV4097_SET_BACK_STENCIL_FUNC , "NV4097_SET_BACK_STENCIL_FUNC" } - { NV4097_SET_BACK_STENCIL_FUNC_REF , "NV4097_SET_BACK_STENCIL_FUNC_REF" } - { NV4097_SET_BACK_STENCIL_FUNC_MASK , "NV4097_SET_BACK_STENCIL_FUNC_MASK" } - { NV4097_SET_BACK_STENCIL_OP_FAIL , "NV4097_SET_BACK_STENCIL_OP_FAIL" } - { NV4097_SET_BACK_STENCIL_OP_ZFAIL , "NV4097_SET_BACK_STENCIL_OP_ZFAIL" } - { NV4097_SET_BACK_STENCIL_OP_ZPASS , "NV4097_SET_BACK_STENCIL_OP_ZPASS" } - { NV4097_SET_SHADE_MODE , "NV4097_SET_SHADE_MODE" } - { NV4097_SET_BLEND_ENABLE_MRT , "NV4097_SET_BLEND_ENABLE_MRT" } - { NV4097_SET_COLOR_MASK_MRT , "NV4097_SET_COLOR_MASK_MRT" } - { NV4097_SET_LOGIC_OP_ENABLE , "NV4097_SET_LOGIC_OP_ENABLE" } - { NV4097_SET_LOGIC_OP , "NV4097_SET_LOGIC_OP" } - { NV4097_SET_BLEND_COLOR2 , "NV4097_SET_BLEND_COLOR2" } - { NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE , "NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE" } - { NV4097_SET_DEPTH_BOUNDS_MIN , "NV4097_SET_DEPTH_BOUNDS_MIN" } - { NV4097_SET_DEPTH_BOUNDS_MAX , "NV4097_SET_DEPTH_BOUNDS_MAX" } - { NV4097_SET_CLIP_MIN , "NV4097_SET_CLIP_MIN" } - { NV4097_SET_CLIP_MAX , "NV4097_SET_CLIP_MAX" } - { NV4097_SET_CONTROL0 , "NV4097_SET_CONTROL0" } - { NV4097_SET_LINE_WIDTH , "NV4097_SET_LINE_WIDTH" } - { NV4097_SET_LINE_SMOOTH_ENABLE , "NV4097_SET_LINE_SMOOTH_ENABLE" } - { NV4097_SET_ANISO_SPREAD , "NV4097_SET_ANISO_SPREAD" } - { NV4097_SET_ANISO_SPREAD + 4 , "NV4097_SET_ANISO_SPREAD + 4" } - { NV4097_SET_ANISO_SPREAD + 8 , "NV4097_SET_ANISO_SPREAD + 8" } - { NV4097_SET_ANISO_SPREAD + 12 , "NV4097_SET_ANISO_SPREAD + 12" } - { NV4097_SET_ANISO_SPREAD + 16 , "NV4097_SET_ANISO_SPREAD + 16" } - { NV4097_SET_ANISO_SPREAD + 20 , "NV4097_SET_ANISO_SPREAD + 20" } - { NV4097_SET_ANISO_SPREAD + 24 , "NV4097_SET_ANISO_SPREAD + 24" } - { NV4097_SET_ANISO_SPREAD + 28 , "NV4097_SET_ANISO_SPREAD + 28" } - { NV4097_SET_ANISO_SPREAD + 32 , "NV4097_SET_ANISO_SPREAD + 32" } - { NV4097_SET_ANISO_SPREAD + 36 , "NV4097_SET_ANISO_SPREAD + 36" } - { NV4097_SET_ANISO_SPREAD + 40 , "NV4097_SET_ANISO_SPREAD + 40" } - { NV4097_SET_ANISO_SPREAD + 44 , "NV4097_SET_ANISO_SPREAD + 44" } - { NV4097_SET_ANISO_SPREAD + 48 , "NV4097_SET_ANISO_SPREAD + 48" } - { NV4097_SET_ANISO_SPREAD + 52 , "NV4097_SET_ANISO_SPREAD + 52" } - { NV4097_SET_ANISO_SPREAD + 56 , "NV4097_SET_ANISO_SPREAD + 56" } - { NV4097_SET_ANISO_SPREAD + 60 , "NV4097_SET_ANISO_SPREAD + 60" } - { NV4097_SET_SCISSOR_HORIZONTAL , "NV4097_SET_SCISSOR_HORIZONTAL" } - { NV4097_SET_SCISSOR_VERTICAL , "NV4097_SET_SCISSOR_VERTICAL" } - { NV4097_SET_FOG_MODE , "NV4097_SET_FOG_MODE" } - { NV4097_SET_FOG_PARAMS , "NV4097_SET_FOG_PARAMS" } - { NV4097_SET_FOG_PARAMS + 4 , "NV4097_SET_FOG_PARAMS + 4" } - { NV4097_SET_FOG_PARAMS + 8 , "NV4097_SET_FOG_PARAMS + 8" } - { NV4097_SET_SHADER_PROGRAM , "NV4097_SET_SHADER_PROGRAM" } - { NV4097_SET_VERTEX_TEXTURE_OFFSET , "NV4097_SET_VERTEX_TEXTURE_OFFSET" } - { NV4097_SET_VERTEX_TEXTURE_FORMAT , "NV4097_SET_VERTEX_TEXTURE_FORMAT" } - { NV4097_SET_VERTEX_TEXTURE_ADDRESS , "NV4097_SET_VERTEX_TEXTURE_ADDRESS" } - { NV4097_SET_VERTEX_TEXTURE_CONTROL0 , "NV4097_SET_VERTEX_TEXTURE_CONTROL0" } - { NV4097_SET_VERTEX_TEXTURE_CONTROL3 , "NV4097_SET_VERTEX_TEXTURE_CONTROL3" } - { NV4097_SET_VERTEX_TEXTURE_FILTER , "NV4097_SET_VERTEX_TEXTURE_FILTER" } - { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT , "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT" } - { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR , "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR" } - { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20" } - { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20" } - { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20" } - { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20" } - { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20" } - { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20" } - { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20" } - { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20" } - { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40" } - { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40" } - { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40" } - { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40" } - { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40" } - { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40" } - { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40" } - { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40" } - { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60" } - { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60" } - { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60" } - { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60" } - { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60" } - { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60" } - { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60" } - { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60" } - { NV4097_SET_VIEWPORT_HORIZONTAL , "NV4097_SET_VIEWPORT_HORIZONTAL" } - { NV4097_SET_VIEWPORT_VERTICAL , "NV4097_SET_VIEWPORT_VERTICAL" } - { NV4097_SET_VIEWPORT_OFFSET , "NV4097_SET_VIEWPORT_OFFSET" } - { NV4097_SET_VIEWPORT_SCALE , "NV4097_SET_VIEWPORT_SCALE" } - { NV4097_SET_POLY_OFFSET_LINE_ENABLE , "NV4097_SET_POLY_OFFSET_LINE_ENABLE" } - { NV4097_SET_POLY_OFFSET_FILL_ENABLE , "NV4097_SET_POLY_OFFSET_FILL_ENABLE" } - { NV4097_SET_DEPTH_FUNC , "NV4097_SET_DEPTH_FUNC" } - { NV4097_SET_DEPTH_MASK , "NV4097_SET_DEPTH_MASK" } - { NV4097_SET_DEPTH_TEST_ENABLE , "NV4097_SET_DEPTH_TEST_ENABLE" } - { NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR , "NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR" } - { NV4097_SET_POLYGON_OFFSET_BIAS , "NV4097_SET_POLYGON_OFFSET_BIAS" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M , "NV4097_SET_VERTEX_DATA_SCALED4S_M" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 4 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 4" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 8 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 8" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 12 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 12" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 16 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 16" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 20 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 20" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 24 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 24" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 28 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 28" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 32 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 32" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 36 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 36" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 40, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 40" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 44 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 44" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 48 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 48" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 52 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 52" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 56 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 56" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 60 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 60" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 64 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 64" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 68 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 68" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 72 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 72" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 76 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 76" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 80 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 80" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 84 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 84" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 88 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 88" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 92 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 92" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 96 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 96" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 100 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 100" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 104 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 104" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 108 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 108" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 112 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 112" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 116 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 116" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 120 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 120" } - { NV4097_SET_VERTEX_DATA_SCALED4S_M + 124 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 124" } - { NV4097_SET_TEXTURE_CONTROL2 , "NV4097_SET_TEXTURE_CONTROL2" } - { NV4097_SET_TEXTURE_CONTROL2 + 4 , "NV4097_SET_TEXTURE_CONTROL2 + 4" } - { NV4097_SET_TEXTURE_CONTROL2 + 8 , "NV4097_SET_TEXTURE_CONTROL2 + 8" } - { NV4097_SET_TEXTURE_CONTROL2 + 12 , "NV4097_SET_TEXTURE_CONTROL2 + 12" } - { NV4097_SET_TEXTURE_CONTROL2 + 16 , "NV4097_SET_TEXTURE_CONTROL2 + 16" } - { NV4097_SET_TEXTURE_CONTROL2 + 20 , "NV4097_SET_TEXTURE_CONTROL2 + 20" } - { NV4097_SET_TEXTURE_CONTROL2 + 24 , "NV4097_SET_TEXTURE_CONTROL2 + 24" } - { NV4097_SET_TEXTURE_CONTROL2 + 28 , "NV4097_SET_TEXTURE_CONTROL2 + 28" } - { NV4097_SET_TEXTURE_CONTROL2 + 32 , "NV4097_SET_TEXTURE_CONTROL2 + 32" } - { NV4097_SET_TEXTURE_CONTROL2 + 36 , "NV4097_SET_TEXTURE_CONTROL2 + 36" } - { NV4097_SET_TEXTURE_CONTROL2 + 40 , "NV4097_SET_TEXTURE_CONTROL2 + 40" } - { NV4097_SET_TEXTURE_CONTROL2 + 44 , "NV4097_SET_TEXTURE_CONTROL2 + 44" } - { NV4097_SET_TEXTURE_CONTROL2 + 48 , "NV4097_SET_TEXTURE_CONTROL2 + 48" } - { NV4097_SET_TEXTURE_CONTROL2 + 52 , "NV4097_SET_TEXTURE_CONTROL2 + 52" } - { NV4097_SET_TEXTURE_CONTROL2 + 56 , "NV4097_SET_TEXTURE_CONTROL2 + 56" } - { NV4097_SET_TEXTURE_CONTROL2 + 60 , "NV4097_SET_TEXTURE_CONTROL2 + 60" } - { NV4097_SET_TEX_COORD_CONTROL , "NV4097_SET_TEX_COORD_CONTROL" } - { NV4097_SET_TEX_COORD_CONTROL + 4 , "NV4097_SET_TEX_COORD_CONTROL + 4" } - { NV4097_SET_TEX_COORD_CONTROL + 8 , "NV4097_SET_TEX_COORD_CONTROL + 8" } - { NV4097_SET_TEX_COORD_CONTROL + 12 , "NV4097_SET_TEX_COORD_CONTROL + 12" } - { NV4097_SET_TEX_COORD_CONTROL + 16 , "NV4097_SET_TEX_COORD_CONTROL + 16" } - { NV4097_SET_TEX_COORD_CONTROL + 20 , "NV4097_SET_TEX_COORD_CONTROL + 20" } - { NV4097_SET_TEX_COORD_CONTROL + 24 , "NV4097_SET_TEX_COORD_CONTROL + 24" } - { NV4097_SET_TEX_COORD_CONTROL + 28 , "NV4097_SET_TEX_COORD_CONTROL + 28" } - { NV4097_SET_TEX_COORD_CONTROL + 32 , "NV4097_SET_TEX_COORD_CONTROL + 32" } - { NV4097_SET_TEX_COORD_CONTROL + 36 , "NV4097_SET_TEX_COORD_CONTROL + 36" } - { NV4097_SET_TRANSFORM_PROGRAM , "NV4097_SET_TRANSFORM_PROGRAM" } - { NV4097_SET_TRANSFORM_PROGRAM + 4 , "NV4097_SET_TRANSFORM_PROGRAM + 4" } - { NV4097_SET_TRANSFORM_PROGRAM + 8 , "NV4097_SET_TRANSFORM_PROGRAM + 8" } - { NV4097_SET_TRANSFORM_PROGRAM + 12 , "NV4097_SET_TRANSFORM_PROGRAM + 12" } - { NV4097_SET_TRANSFORM_PROGRAM + 16 , "NV4097_SET_TRANSFORM_PROGRAM + 16" } - { NV4097_SET_TRANSFORM_PROGRAM + 20 , "NV4097_SET_TRANSFORM_PROGRAM + 20" } - { NV4097_SET_TRANSFORM_PROGRAM + 24 , "NV4097_SET_TRANSFORM_PROGRAM + 24" } - { NV4097_SET_TRANSFORM_PROGRAM + 28 , "NV4097_SET_TRANSFORM_PROGRAM + 28" } - { NV4097_SET_TRANSFORM_PROGRAM + 32 , "NV4097_SET_TRANSFORM_PROGRAM + 32" } - { NV4097_SET_TRANSFORM_PROGRAM + 36 , "NV4097_SET_TRANSFORM_PROGRAM + 36" } - { NV4097_SET_TRANSFORM_PROGRAM + 40 , "NV4097_SET_TRANSFORM_PROGRAM + 40" } - { NV4097_SET_TRANSFORM_PROGRAM + 44 , "NV4097_SET_TRANSFORM_PROGRAM + 44" } - { NV4097_SET_TRANSFORM_PROGRAM + 48 , "NV4097_SET_TRANSFORM_PROGRAM + 48" } - { NV4097_SET_TRANSFORM_PROGRAM + 52 , "NV4097_SET_TRANSFORM_PROGRAM + 52" } - { NV4097_SET_TRANSFORM_PROGRAM + 56 , "NV4097_SET_TRANSFORM_PROGRAM + 56" } - { NV4097_SET_TRANSFORM_PROGRAM + 60 , "NV4097_SET_TRANSFORM_PROGRAM + 60" } - { NV4097_SET_TRANSFORM_PROGRAM + 64 , "NV4097_SET_TRANSFORM_PROGRAM + 64" } - { NV4097_SET_TRANSFORM_PROGRAM + 68 , "NV4097_SET_TRANSFORM_PROGRAM + 68" } - { NV4097_SET_TRANSFORM_PROGRAM + 72 , "NV4097_SET_TRANSFORM_PROGRAM + 72" } - { NV4097_SET_TRANSFORM_PROGRAM + 76 , "NV4097_SET_TRANSFORM_PROGRAM + 76" } - { NV4097_SET_TRANSFORM_PROGRAM + 80 , "NV4097_SET_TRANSFORM_PROGRAM + 80" } - { NV4097_SET_TRANSFORM_PROGRAM + 84 , "NV4097_SET_TRANSFORM_PROGRAM + 84" } - { NV4097_SET_TRANSFORM_PROGRAM + 88 , "NV4097_SET_TRANSFORM_PROGRAM + 88" } - { NV4097_SET_TRANSFORM_PROGRAM + 92 , "NV4097_SET_TRANSFORM_PROGRAM + 92" } - { NV4097_SET_TRANSFORM_PROGRAM + 96 , "NV4097_SET_TRANSFORM_PROGRAM + 96" } - { NV4097_SET_TRANSFORM_PROGRAM + 100 , "NV4097_SET_TRANSFORM_PROGRAM + 100" } - { NV4097_SET_TRANSFORM_PROGRAM + 104 , "NV4097_SET_TRANSFORM_PROGRAM + 104" } - { NV4097_SET_TRANSFORM_PROGRAM + 108 , "NV4097_SET_TRANSFORM_PROGRAM + 108" } - { NV4097_SET_TRANSFORM_PROGRAM + 112 , "NV4097_SET_TRANSFORM_PROGRAM + 112" } - { NV4097_SET_TRANSFORM_PROGRAM + 116 , "NV4097_SET_TRANSFORM_PROGRAM + 116" } - { NV4097_SET_TRANSFORM_PROGRAM + 120 , "NV4097_SET_TRANSFORM_PROGRAM + 120" } - { NV4097_SET_TRANSFORM_PROGRAM + 124 , "NV4097_SET_TRANSFORM_PROGRAM + 124" } - { NV4097_SET_TWO_SIDE_LIGHT_EN , "NV4097_SET_TWO_SIDE_LIGHT_EN" } - { NV4097_CLEAR_ZCULL_SURFACE , "NV4097_CLEAR_ZCULL_SURFACE" } - { NV4097_SET_USER_CLIP_PLANE_CONTROL , "NV4097_SET_USER_CLIP_PLANE_CONTROL" } - { NV4097_SET_POLYGON_STIPPLE , "NV4097_SET_POLYGON_STIPPLE" } - { NV4097_SET_POLYGON_STIPPLE_PATTERN , "NV4097_SET_POLYGON_STIPPLE_PATTERN" } - { NV4097_SET_VERTEX_DATA3F_M , "NV4097_SET_VERTEX_DATA3F_M" } - { NV4097_SET_VERTEX_DATA3F_M + 4 , "NV4097_SET_VERTEX_DATA3F_M + 4" } - { NV4097_SET_VERTEX_DATA3F_M + 8 , "NV4097_SET_VERTEX_DATA3F_M + 8" } - { NV4097_SET_VERTEX_DATA3F_M + 12 , "NV4097_SET_VERTEX_DATA3F_M + 12" } - { NV4097_SET_VERTEX_DATA3F_M + 16 , "NV4097_SET_VERTEX_DATA3F_M + 16" } - { NV4097_SET_VERTEX_DATA3F_M + 20 , "NV4097_SET_VERTEX_DATA3F_M + 20" } - { NV4097_SET_VERTEX_DATA3F_M + 24 , "NV4097_SET_VERTEX_DATA3F_M + 24" } - { NV4097_SET_VERTEX_DATA3F_M + 28 , "NV4097_SET_VERTEX_DATA3F_M + 28" } - { NV4097_SET_VERTEX_DATA3F_M + 32 , "NV4097_SET_VERTEX_DATA3F_M + 32" } - { NV4097_SET_VERTEX_DATA3F_M + 36 , "NV4097_SET_VERTEX_DATA3F_M + 36" } - { NV4097_SET_VERTEX_DATA3F_M + 40 , "NV4097_SET_VERTEX_DATA3F_M + 40" } - { NV4097_SET_VERTEX_DATA3F_M + 44 , "NV4097_SET_VERTEX_DATA3F_M + 44" } - { NV4097_SET_VERTEX_DATA3F_M + 48 , "NV4097_SET_VERTEX_DATA3F_M + 48" } - { NV4097_SET_VERTEX_DATA3F_M + 52 , "NV4097_SET_VERTEX_DATA3F_M + 52" } - { NV4097_SET_VERTEX_DATA3F_M + 56 , "NV4097_SET_VERTEX_DATA3F_M + 56" } - { NV4097_SET_VERTEX_DATA3F_M + 60 , "NV4097_SET_VERTEX_DATA3F_M + 60" } - { NV4097_SET_VERTEX_DATA3F_M + 64 , "NV4097_SET_VERTEX_DATA3F_M + 64" } - { NV4097_SET_VERTEX_DATA3F_M + 68 , "NV4097_SET_VERTEX_DATA3F_M + 68" } - { NV4097_SET_VERTEX_DATA3F_M + 72 , "NV4097_SET_VERTEX_DATA3F_M + 72" } - { NV4097_SET_VERTEX_DATA3F_M + 76 , "NV4097_SET_VERTEX_DATA3F_M + 76" } - { NV4097_SET_VERTEX_DATA3F_M + 80 , "NV4097_SET_VERTEX_DATA3F_M + 80" } - { NV4097_SET_VERTEX_DATA3F_M + 84 , "NV4097_SET_VERTEX_DATA3F_M + 84" } - { NV4097_SET_VERTEX_DATA3F_M + 88 , "NV4097_SET_VERTEX_DATA3F_M + 88" } - { NV4097_SET_VERTEX_DATA3F_M + 92 , "NV4097_SET_VERTEX_DATA3F_M + 92" } - { NV4097_SET_VERTEX_DATA3F_M + 96 , "NV4097_SET_VERTEX_DATA3F_M + 96" } - { NV4097_SET_VERTEX_DATA3F_M + 100 , "NV4097_SET_VERTEX_DATA3F_M + 100" } - { NV4097_SET_VERTEX_DATA3F_M + 104 , "NV4097_SET_VERTEX_DATA3F_M + 104" } - { NV4097_SET_VERTEX_DATA3F_M + 108 , "NV4097_SET_VERTEX_DATA3F_M + 108" } - { NV4097_SET_VERTEX_DATA3F_M + 112 , "NV4097_SET_VERTEX_DATA3F_M + 112" } - { NV4097_SET_VERTEX_DATA3F_M + 116 , "NV4097_SET_VERTEX_DATA3F_M + 116" } - { NV4097_SET_VERTEX_DATA3F_M + 120 , "NV4097_SET_VERTEX_DATA3F_M + 120" } - { NV4097_SET_VERTEX_DATA3F_M + 124 , "NV4097_SET_VERTEX_DATA3F_M + 124" } - { NV4097_SET_VERTEX_DATA3F_M + 128 , "NV4097_SET_VERTEX_DATA3F_M + 128" } - { NV4097_SET_VERTEX_DATA3F_M + 132 , "NV4097_SET_VERTEX_DATA3F_M + 132" } - { NV4097_SET_VERTEX_DATA3F_M + 136 , "NV4097_SET_VERTEX_DATA3F_M + 136" } - { NV4097_SET_VERTEX_DATA3F_M + 140 , "NV4097_SET_VERTEX_DATA3F_M + 140" } - { NV4097_SET_VERTEX_DATA3F_M + 144 , "NV4097_SET_VERTEX_DATA3F_M + 144" } - { NV4097_SET_VERTEX_DATA3F_M + 148 , "NV4097_SET_VERTEX_DATA3F_M + 148" } - { NV4097_SET_VERTEX_DATA3F_M + 152 , "NV4097_SET_VERTEX_DATA3F_M + 152" } - { NV4097_SET_VERTEX_DATA3F_M + 156 , "NV4097_SET_VERTEX_DATA3F_M + 156" } - { NV4097_SET_VERTEX_DATA3F_M + 160 , "NV4097_SET_VERTEX_DATA3F_M + 160" } - { NV4097_SET_VERTEX_DATA3F_M + 164 , "NV4097_SET_VERTEX_DATA3F_M + 164" } - { NV4097_SET_VERTEX_DATA3F_M + 168 , "NV4097_SET_VERTEX_DATA3F_M + 168" } - { NV4097_SET_VERTEX_DATA3F_M + 172 , "NV4097_SET_VERTEX_DATA3F_M + 172" } - { NV4097_SET_VERTEX_DATA3F_M + 176 , "NV4097_SET_VERTEX_DATA3F_M + 176" } - { NV4097_SET_VERTEX_DATA3F_M + 180 , "NV4097_SET_VERTEX_DATA3F_M + 180" } - { NV4097_SET_VERTEX_DATA3F_M + 184 , "NV4097_SET_VERTEX_DATA3F_M + 184" } - { NV4097_SET_VERTEX_DATA3F_M + 188 , "NV4097_SET_VERTEX_DATA3F_M + 188" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56" } - { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60" } - { NV4097_INVALIDATE_VERTEX_CACHE_FILE , "NV4097_INVALIDATE_VERTEX_CACHE_FILE" } - { NV4097_INVALIDATE_VERTEX_FILE , "NV4097_INVALIDATE_VERTEX_FILE" } - { NV4097_SET_VERTEX_DATA_BASE_OFFSET , "NV4097_SET_VERTEX_DATA_BASE_OFFSET" } - { NV4097_SET_VERTEX_DATA_BASE_INDEX , "NV4097_SET_VERTEX_DATA_BASE_INDEX" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56" } - { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60" } - { NV4097_CLEAR_REPORT_VALUE , "NV4097_CLEAR_REPORT_VALUE" } - { NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE , "NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE" } - { NV4097_GET_REPORT , "NV4097_GET_REPORT" } - { NV4097_SET_ZCULL_STATS_ENABLE , "NV4097_SET_ZCULL_STATS_ENABLE" } - { NV4097_SET_BEGIN_END , "NV4097_SET_BEGIN_END" } - { NV4097_ARRAY_ELEMENT16 , "NV4097_ARRAY_ELEMENT16" } - { NV4097_ARRAY_ELEMENT32 , "NV4097_ARRAY_ELEMENT32" } - { NV4097_DRAW_ARRAYS , "NV4097_DRAW_ARRAYS" } - { NV4097_INLINE_ARRAY , "NV4097_INLINE_ARRAY" } - { NV4097_SET_INDEX_ARRAY_ADDRESS , "NV4097_SET_INDEX_ARRAY_ADDRESS" } - { NV4097_SET_INDEX_ARRAY_DMA , "NV4097_SET_INDEX_ARRAY_DMA" } - { NV4097_DRAW_INDEX_ARRAY , "NV4097_DRAW_INDEX_ARRAY" } - { NV4097_SET_FRONT_POLYGON_MODE , "NV4097_SET_FRONT_POLYGON_MODE" } - { NV4097_SET_BACK_POLYGON_MODE , "NV4097_SET_BACK_POLYGON_MODE" } - { NV4097_SET_CULL_FACE , "NV4097_SET_CULL_FACE" } - { NV4097_SET_FRONT_FACE , "NV4097_SET_FRONT_FACE" } - { NV4097_SET_POLY_SMOOTH_ENABLE , "NV4097_SET_POLY_SMOOTH_ENABLE" } - { NV4097_SET_CULL_FACE_ENABLE , "NV4097_SET_CULL_FACE_ENABLE" } - { NV4097_SET_TEXTURE_CONTROL3 , "NV4097_SET_TEXTURE_CONTROL3" } - { NV4097_SET_TEXTURE_CONTROL3 + 4 , "NV4097_SET_TEXTURE_CONTROL3 + 4" } - { NV4097_SET_TEXTURE_CONTROL3 + 8 , "NV4097_SET_TEXTURE_CONTROL3 + 8" } - { NV4097_SET_TEXTURE_CONTROL3 + 12 , "NV4097_SET_TEXTURE_CONTROL3 + 12" } - { NV4097_SET_TEXTURE_CONTROL3 + 16 , "NV4097_SET_TEXTURE_CONTROL3 + 16" } - { NV4097_SET_TEXTURE_CONTROL3 + 20 , "NV4097_SET_TEXTURE_CONTROL3 + 20" } - { NV4097_SET_TEXTURE_CONTROL3 + 24 , "NV4097_SET_TEXTURE_CONTROL3 + 24" } - { NV4097_SET_TEXTURE_CONTROL3 + 28 , "NV4097_SET_TEXTURE_CONTROL3 + 28" } - { NV4097_SET_TEXTURE_CONTROL3 + 32 , "NV4097_SET_TEXTURE_CONTROL3 + 32" } - { NV4097_SET_TEXTURE_CONTROL3 + 36 , "NV4097_SET_TEXTURE_CONTROL3 + 36" } - { NV4097_SET_TEXTURE_CONTROL3 + 40 , "NV4097_SET_TEXTURE_CONTROL3 + 40" } - { NV4097_SET_TEXTURE_CONTROL3 + 44 , "NV4097_SET_TEXTURE_CONTROL3 + 44" } - { NV4097_SET_TEXTURE_CONTROL3 + 48 , "NV4097_SET_TEXTURE_CONTROL3 + 48" } - { NV4097_SET_TEXTURE_CONTROL3 + 52 , "NV4097_SET_TEXTURE_CONTROL3 + 52" } - { NV4097_SET_TEXTURE_CONTROL3 + 56 , "NV4097_SET_TEXTURE_CONTROL3 + 56" } - { NV4097_SET_TEXTURE_CONTROL3 + 60 , "NV4097_SET_TEXTURE_CONTROL3 + 60" } - { NV4097_SET_VERTEX_DATA2F_M , "NV4097_SET_VERTEX_DATA2F_M" } - { NV4097_SET_VERTEX_DATA2F_M + 4 , "NV4097_SET_VERTEX_DATA2F_M + 4" } - { NV4097_SET_VERTEX_DATA2F_M + 8 , "NV4097_SET_VERTEX_DATA2F_M + 8" } - { NV4097_SET_VERTEX_DATA2F_M + 12 , "NV4097_SET_VERTEX_DATA2F_M + 12" } - { NV4097_SET_VERTEX_DATA2F_M + 16 , "NV4097_SET_VERTEX_DATA2F_M + 16" } - { NV4097_SET_VERTEX_DATA2F_M + 20 , "NV4097_SET_VERTEX_DATA2F_M + 20" } - { NV4097_SET_VERTEX_DATA2F_M + 24 , "NV4097_SET_VERTEX_DATA2F_M + 24" } - { NV4097_SET_VERTEX_DATA2F_M + 28 , "NV4097_SET_VERTEX_DATA2F_M + 28" } - { NV4097_SET_VERTEX_DATA2F_M + 32 , "NV4097_SET_VERTEX_DATA2F_M + 32" } - { NV4097_SET_VERTEX_DATA2F_M + 36 , "NV4097_SET_VERTEX_DATA2F_M + 36" } - { NV4097_SET_VERTEX_DATA2F_M + 40 , "NV4097_SET_VERTEX_DATA2F_M + 40" } - { NV4097_SET_VERTEX_DATA2F_M + 44 , "NV4097_SET_VERTEX_DATA2F_M + 44" } - { NV4097_SET_VERTEX_DATA2F_M + 48 , "NV4097_SET_VERTEX_DATA2F_M + 48" } - { NV4097_SET_VERTEX_DATA2F_M + 52 , "NV4097_SET_VERTEX_DATA2F_M + 52" } - { NV4097_SET_VERTEX_DATA2F_M + 56 , "NV4097_SET_VERTEX_DATA2F_M + 56" } - { NV4097_SET_VERTEX_DATA2F_M + 60 , "NV4097_SET_VERTEX_DATA2F_M + 60" } - { NV4097_SET_VERTEX_DATA2F_M + 64 , "NV4097_SET_VERTEX_DATA2F_M + 64" } - { NV4097_SET_VERTEX_DATA2F_M + 68 , "NV4097_SET_VERTEX_DATA2F_M + 68" } - { NV4097_SET_VERTEX_DATA2F_M + 72 , "NV4097_SET_VERTEX_DATA2F_M + 72" } - { NV4097_SET_VERTEX_DATA2F_M + 76 , "NV4097_SET_VERTEX_DATA2F_M + 76" } - { NV4097_SET_VERTEX_DATA2F_M + 80 , "NV4097_SET_VERTEX_DATA2F_M + 80" } - { NV4097_SET_VERTEX_DATA2F_M + 84 , "NV4097_SET_VERTEX_DATA2F_M + 84" } - { NV4097_SET_VERTEX_DATA2F_M + 88 , "NV4097_SET_VERTEX_DATA2F_M + 88" } - { NV4097_SET_VERTEX_DATA2F_M + 92 , "NV4097_SET_VERTEX_DATA2F_M + 92" } - { NV4097_SET_VERTEX_DATA2F_M + 96 , "NV4097_SET_VERTEX_DATA2F_M + 96" } - { NV4097_SET_VERTEX_DATA2F_M + 100 , "NV4097_SET_VERTEX_DATA2F_M + 100" } - { NV4097_SET_VERTEX_DATA2F_M + 104 , "NV4097_SET_VERTEX_DATA2F_M + 104" } - { NV4097_SET_VERTEX_DATA2F_M + 108 , "NV4097_SET_VERTEX_DATA2F_M + 108" } - { NV4097_SET_VERTEX_DATA2F_M + 112 , "NV4097_SET_VERTEX_DATA2F_M + 112" } - { NV4097_SET_VERTEX_DATA2F_M + 116 , "NV4097_SET_VERTEX_DATA2F_M + 116" } - { NV4097_SET_VERTEX_DATA2F_M + 120 , "NV4097_SET_VERTEX_DATA2F_M + 120" } - { NV4097_SET_VERTEX_DATA2F_M + 124 , "NV4097_SET_VERTEX_DATA2F_M + 124" } - { NV4097_SET_VERTEX_DATA2S_M , "NV4097_SET_VERTEX_DATA2S_M" } - { NV4097_SET_VERTEX_DATA2S_M + 4 , "NV4097_SET_VERTEX_DATA2S_M + 4" } - { NV4097_SET_VERTEX_DATA2S_M + 8 , "NV4097_SET_VERTEX_DATA2S_M + 8" } - { NV4097_SET_VERTEX_DATA2S_M + 12 , "NV4097_SET_VERTEX_DATA2S_M + 12" } - { NV4097_SET_VERTEX_DATA2S_M + 16 , "NV4097_SET_VERTEX_DATA2S_M + 16" } - { NV4097_SET_VERTEX_DATA2S_M + 20 , "NV4097_SET_VERTEX_DATA2S_M + 20" } - { NV4097_SET_VERTEX_DATA2S_M + 24 , "NV4097_SET_VERTEX_DATA2S_M + 24" } - { NV4097_SET_VERTEX_DATA2S_M + 28 , "NV4097_SET_VERTEX_DATA2S_M + 28" } - { NV4097_SET_VERTEX_DATA2S_M + 32 , "NV4097_SET_VERTEX_DATA2S_M + 32" } - { NV4097_SET_VERTEX_DATA2S_M + 36 , "NV4097_SET_VERTEX_DATA2S_M + 36" } - { NV4097_SET_VERTEX_DATA2S_M + 40 , "NV4097_SET_VERTEX_DATA2S_M + 40" } - { NV4097_SET_VERTEX_DATA2S_M + 44 , "NV4097_SET_VERTEX_DATA2S_M + 44" } - { NV4097_SET_VERTEX_DATA2S_M + 48 , "NV4097_SET_VERTEX_DATA2S_M + 48" } - { NV4097_SET_VERTEX_DATA2S_M + 52 , "NV4097_SET_VERTEX_DATA2S_M + 52" } - { NV4097_SET_VERTEX_DATA2S_M + 56 , "NV4097_SET_VERTEX_DATA2S_M + 56" } - { NV4097_SET_VERTEX_DATA2S_M + 60 , "NV4097_SET_VERTEX_DATA2S_M + 60" } - { NV4097_SET_VERTEX_DATA4UB_M , "NV4097_SET_VERTEX_DATA4UB_M" } - { NV4097_SET_VERTEX_DATA4UB_M + 4 , "NV4097_SET_VERTEX_DATA4UB_M + 4" } - { NV4097_SET_VERTEX_DATA4UB_M + 8 , "NV4097_SET_VERTEX_DATA4UB_M + 8" } - { NV4097_SET_VERTEX_DATA4UB_M + 12 , "NV4097_SET_VERTEX_DATA4UB_M + 12" } - { NV4097_SET_VERTEX_DATA4UB_M + 16 , "NV4097_SET_VERTEX_DATA4UB_M + 16" } - { NV4097_SET_VERTEX_DATA4UB_M + 20 , "NV4097_SET_VERTEX_DATA4UB_M + 20" } - { NV4097_SET_VERTEX_DATA4UB_M + 24 , "NV4097_SET_VERTEX_DATA4UB_M + 24" } - { NV4097_SET_VERTEX_DATA4UB_M + 28 , "NV4097_SET_VERTEX_DATA4UB_M + 28" } - { NV4097_SET_VERTEX_DATA4UB_M + 32 , "NV4097_SET_VERTEX_DATA4UB_M + 32" } - { NV4097_SET_VERTEX_DATA4UB_M + 36 , "NV4097_SET_VERTEX_DATA4UB_M + 36" } - { NV4097_SET_VERTEX_DATA4UB_M + 40 , "NV4097_SET_VERTEX_DATA4UB_M + 40" } - { NV4097_SET_VERTEX_DATA4UB_M + 44 , "NV4097_SET_VERTEX_DATA4UB_M + 44" } - { NV4097_SET_VERTEX_DATA4UB_M + 48 , "NV4097_SET_VERTEX_DATA4UB_M + 48" } - { NV4097_SET_VERTEX_DATA4UB_M + 52 , "NV4097_SET_VERTEX_DATA4UB_M + 52" } - { NV4097_SET_VERTEX_DATA4UB_M + 56 , "NV4097_SET_VERTEX_DATA4UB_M + 56" } - { NV4097_SET_VERTEX_DATA4UB_M + 60 , "NV4097_SET_VERTEX_DATA4UB_M + 60" } - { NV4097_SET_VERTEX_DATA4S_M , "NV4097_SET_VERTEX_DATA4S_M" } - { NV4097_SET_VERTEX_DATA4S_M + 4 , "NV4097_SET_VERTEX_DATA4S_M + 4" } - { NV4097_SET_VERTEX_DATA4S_M + 8 , "NV4097_SET_VERTEX_DATA4S_M + 8" } - { NV4097_SET_VERTEX_DATA4S_M + 12 , "NV4097_SET_VERTEX_DATA4S_M + 12" } - { NV4097_SET_VERTEX_DATA4S_M + 16 , "NV4097_SET_VERTEX_DATA4S_M + 16" } - { NV4097_SET_VERTEX_DATA4S_M + 20 , "NV4097_SET_VERTEX_DATA4S_M + 20" } - { NV4097_SET_VERTEX_DATA4S_M + 24 , "NV4097_SET_VERTEX_DATA4S_M + 24" } - { NV4097_SET_VERTEX_DATA4S_M + 28 , "NV4097_SET_VERTEX_DATA4S_M + 28" } - { NV4097_SET_VERTEX_DATA4S_M + 32 , "NV4097_SET_VERTEX_DATA4S_M + 32" } - { NV4097_SET_VERTEX_DATA4S_M + 36 , "NV4097_SET_VERTEX_DATA4S_M + 36" } - { NV4097_SET_VERTEX_DATA4S_M + 40 , "NV4097_SET_VERTEX_DATA4S_M + 40" } - { NV4097_SET_VERTEX_DATA4S_M + 44 , "NV4097_SET_VERTEX_DATA4S_M + 44" } - { NV4097_SET_VERTEX_DATA4S_M + 48 , "NV4097_SET_VERTEX_DATA4S_M + 48" } - { NV4097_SET_VERTEX_DATA4S_M + 52 , "NV4097_SET_VERTEX_DATA4S_M + 52" } - { NV4097_SET_VERTEX_DATA4S_M + 56 , "NV4097_SET_VERTEX_DATA4S_M + 56" } - { NV4097_SET_VERTEX_DATA4S_M + 60 , "NV4097_SET_VERTEX_DATA4S_M + 60" } - { NV4097_SET_VERTEX_DATA4S_M + 64 , "NV4097_SET_VERTEX_DATA4S_M + 64" } - { NV4097_SET_VERTEX_DATA4S_M + 68 , "NV4097_SET_VERTEX_DATA4S_M + 68" } - { NV4097_SET_VERTEX_DATA4S_M + 72 , "NV4097_SET_VERTEX_DATA4S_M + 72" } - { NV4097_SET_VERTEX_DATA4S_M + 76 , "NV4097_SET_VERTEX_DATA4S_M + 76" } - { NV4097_SET_VERTEX_DATA4S_M + 80 , "NV4097_SET_VERTEX_DATA4S_M + 80" } - { NV4097_SET_VERTEX_DATA4S_M + 84 , "NV4097_SET_VERTEX_DATA4S_M + 84" } - { NV4097_SET_VERTEX_DATA4S_M + 88 , "NV4097_SET_VERTEX_DATA4S_M + 88" } - { NV4097_SET_VERTEX_DATA4S_M + 92 , "NV4097_SET_VERTEX_DATA4S_M + 92" } - { NV4097_SET_VERTEX_DATA4S_M + 96 , "NV4097_SET_VERTEX_DATA4S_M + 96" } - { NV4097_SET_VERTEX_DATA4S_M + 100 , "NV4097_SET_VERTEX_DATA4S_M + 100" } - { NV4097_SET_VERTEX_DATA4S_M + 104 , "NV4097_SET_VERTEX_DATA4S_M + 104" } - { NV4097_SET_VERTEX_DATA4S_M + 108 , "NV4097_SET_VERTEX_DATA4S_M + 108" } - { NV4097_SET_VERTEX_DATA4S_M + 112 , "NV4097_SET_VERTEX_DATA4S_M + 112" } - { NV4097_SET_VERTEX_DATA4S_M + 116 , "NV4097_SET_VERTEX_DATA4S_M + 116" } - { NV4097_SET_VERTEX_DATA4S_M + 120 , "NV4097_SET_VERTEX_DATA4S_M + 120" } - { NV4097_SET_VERTEX_DATA4S_M + 124 , "NV4097_SET_VERTEX_DATA4S_M + 124" } - { NV4097_SET_TEXTURE_OFFSET , "NV4097_SET_TEXTURE_OFFSET" } - { NV4097_SET_TEXTURE_FORMAT , "NV4097_SET_TEXTURE_FORMAT" } - { NV4097_SET_TEXTURE_ADDRESS , "NV4097_SET_TEXTURE_ADDRESS" } - { NV4097_SET_TEXTURE_CONTROL0 , "NV4097_SET_TEXTURE_CONTROL0" } - { NV4097_SET_TEXTURE_CONTROL1 , "NV4097_SET_TEXTURE_CONTROL1" } - { NV4097_SET_TEXTURE_FILTER , "NV4097_SET_TEXTURE_FILTER" } - { NV4097_SET_TEXTURE_IMAGE_RECT , "NV4097_SET_TEXTURE_IMAGE_RECT" } - { NV4097_SET_TEXTURE_BORDER_COLOR , "NV4097_SET_TEXTURE_BORDER_COLOR" } - { NV4097_SET_TEXTURE_OFFSET + 0x20 , "NV4097_SET_TEXTURE_OFFSET + 0x20" } - { NV4097_SET_TEXTURE_FORMAT + 0x20 , "NV4097_SET_TEXTURE_FORMAT + 0x20" } - { NV4097_SET_TEXTURE_ADDRESS + 0x20 , "NV4097_SET_TEXTURE_ADDRESS + 0x20" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x20 , "NV4097_SET_TEXTURE_CONTROL0 + 0x20" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x20 , "NV4097_SET_TEXTURE_CONTROL1 + 0x20" } - { NV4097_SET_TEXTURE_FILTER + 0x20 , "NV4097_SET_TEXTURE_FILTER + 0x20" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x20 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x20" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x20 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x20" } - { NV4097_SET_TEXTURE_OFFSET + 0x40 , "NV4097_SET_TEXTURE_OFFSET + 0x40" } - { NV4097_SET_TEXTURE_FORMAT + 0x40 , "NV4097_SET_TEXTURE_FORMAT + 0x40" } - { NV4097_SET_TEXTURE_ADDRESS + 0x40 , "NV4097_SET_TEXTURE_ADDRESS + 0x40" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x40 , "NV4097_SET_TEXTURE_CONTROL0 + 0x40" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x40 , "NV4097_SET_TEXTURE_CONTROL1 + 0x40" } - { NV4097_SET_TEXTURE_FILTER + 0x40 , "NV4097_SET_TEXTURE_FILTER + 0x40" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x40 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x40" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x40 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x40" } - { NV4097_SET_TEXTURE_OFFSET + 0x60 , "NV4097_SET_TEXTURE_OFFSET + 0x60" } - { NV4097_SET_TEXTURE_FORMAT + 0x60 , "NV4097_SET_TEXTURE_FORMAT + 0x60" } - { NV4097_SET_TEXTURE_ADDRESS + 0x60 , "NV4097_SET_TEXTURE_ADDRESS + 0x60" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x60 , "NV4097_SET_TEXTURE_CONTROL0 + 0x60" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x60 , "NV4097_SET_TEXTURE_CONTROL1 + 0x60" } - { NV4097_SET_TEXTURE_FILTER + 0x60 , "NV4097_SET_TEXTURE_FILTER + 0x60" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x60 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x60" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x60 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x60" } - { NV4097_SET_TEXTURE_OFFSET + 0x80 , "NV4097_SET_TEXTURE_OFFSET + 0x80" } - { NV4097_SET_TEXTURE_FORMAT + 0x80 , "NV4097_SET_TEXTURE_FORMAT + 0x80" } - { NV4097_SET_TEXTURE_ADDRESS + 0x80 , "NV4097_SET_TEXTURE_ADDRESS + 0x80" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x80 , "NV4097_SET_TEXTURE_CONTROL0 + 0x80" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x80 , "NV4097_SET_TEXTURE_CONTROL1 + 0x80" } - { NV4097_SET_TEXTURE_FILTER + 0x80 , "NV4097_SET_TEXTURE_FILTER + 0x80" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x80 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x80" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x80 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x80" } - { NV4097_SET_TEXTURE_OFFSET + 0xa0 , "NV4097_SET_TEXTURE_OFFSET + 0xa0" } - { NV4097_SET_TEXTURE_FORMAT + 0xa0 , "NV4097_SET_TEXTURE_FORMAT + 0xa0" } - { NV4097_SET_TEXTURE_ADDRESS + 0xa0 , "NV4097_SET_TEXTURE_ADDRESS + 0xa0" } - { NV4097_SET_TEXTURE_CONTROL0 + 0xa0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xa0" } - { NV4097_SET_TEXTURE_CONTROL1 + 0xa0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xa0" } - { NV4097_SET_TEXTURE_FILTER + 0xa0 , "NV4097_SET_TEXTURE_FILTER + 0xa0" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0" } - { NV4097_SET_TEXTURE_OFFSET + 0xc0 , "NV4097_SET_TEXTURE_OFFSET + 0xc0" } - { NV4097_SET_TEXTURE_FORMAT + 0xc0 , "NV4097_SET_TEXTURE_FORMAT + 0xc0" } - { NV4097_SET_TEXTURE_ADDRESS + 0xc0 , "NV4097_SET_TEXTURE_ADDRESS + 0xc0" } - { NV4097_SET_TEXTURE_CONTROL0 + 0xc0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xc0" } - { NV4097_SET_TEXTURE_CONTROL1 + 0xc0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xc0" } - { NV4097_SET_TEXTURE_FILTER + 0xc0 , "NV4097_SET_TEXTURE_FILTER + 0xc0" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0" } - { NV4097_SET_TEXTURE_OFFSET + 0xe0 , "NV4097_SET_TEXTURE_OFFSET + 0xe0" } - { NV4097_SET_TEXTURE_FORMAT + 0xe0 , "NV4097_SET_TEXTURE_FORMAT + 0xe0" } - { NV4097_SET_TEXTURE_ADDRESS + 0xe0 , "NV4097_SET_TEXTURE_ADDRESS + 0xe0" } - { NV4097_SET_TEXTURE_CONTROL0 + 0xe0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xe0" } - { NV4097_SET_TEXTURE_CONTROL1 + 0xe0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xe0" } - { NV4097_SET_TEXTURE_FILTER + 0xe0 , "NV4097_SET_TEXTURE_FILTER + 0xe0" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0" } - { NV4097_SET_TEXTURE_OFFSET + 0x100 , "NV4097_SET_TEXTURE_OFFSET + 0x100" } - { NV4097_SET_TEXTURE_FORMAT + 0x100 , "NV4097_SET_TEXTURE_FORMAT + 0x100" } - { NV4097_SET_TEXTURE_ADDRESS + 0x100 , "NV4097_SET_TEXTURE_ADDRESS + 0x100" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x100 , "NV4097_SET_TEXTURE_CONTROL0 + 0x100" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x100 , "NV4097_SET_TEXTURE_CONTROL1 + 0x100" } - { NV4097_SET_TEXTURE_FILTER + 0x100 , "NV4097_SET_TEXTURE_FILTER + 0x100" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x100 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x100" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x100 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x100" } - { NV4097_SET_TEXTURE_OFFSET + 0x120 , "NV4097_SET_TEXTURE_OFFSET + 0x120" } - { NV4097_SET_TEXTURE_FORMAT + 0x120 , "NV4097_SET_TEXTURE_FORMAT + 0x120" } - { NV4097_SET_TEXTURE_ADDRESS + 0x120 , "NV4097_SET_TEXTURE_ADDRESS + 0x120" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x120 , "NV4097_SET_TEXTURE_CONTROL0 + 0x120" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x120 , "NV4097_SET_TEXTURE_CONTROL1 + 0x120" } - { NV4097_SET_TEXTURE_FILTER + 0x120 , "NV4097_SET_TEXTURE_FILTER + 0x120" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x120 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x120" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x120 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x120" } - { NV4097_SET_TEXTURE_OFFSET + 0x140 , "NV4097_SET_TEXTURE_OFFSET + 0x140" } - { NV4097_SET_TEXTURE_FORMAT + 0x140 , "NV4097_SET_TEXTURE_FORMAT + 0x140" } - { NV4097_SET_TEXTURE_ADDRESS + 0x140 , "NV4097_SET_TEXTURE_ADDRESS + 0x140" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x140 , "NV4097_SET_TEXTURE_CONTROL0 + 0x140" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x140 , "NV4097_SET_TEXTURE_CONTROL1 + 0x140" } - { NV4097_SET_TEXTURE_FILTER + 0x140 , "NV4097_SET_TEXTURE_FILTER + 0x140" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x140 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x140" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x140 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x140" } - { NV4097_SET_TEXTURE_OFFSET + 0x160 , "NV4097_SET_TEXTURE_OFFSET + 0x160" } - { NV4097_SET_TEXTURE_FORMAT + 0x160 , "NV4097_SET_TEXTURE_FORMAT + 0x160" } - { NV4097_SET_TEXTURE_ADDRESS + 0x160 , "NV4097_SET_TEXTURE_ADDRESS + 0x160" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x160 , "NV4097_SET_TEXTURE_CONTROL0 + 0x160" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x160 , "NV4097_SET_TEXTURE_CONTROL1 + 0x160" } - { NV4097_SET_TEXTURE_FILTER + 0x160 , "NV4097_SET_TEXTURE_FILTER + 0x160" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x160 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x160" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x160 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x160" } - { NV4097_SET_TEXTURE_OFFSET + 0x180 , "NV4097_SET_TEXTURE_OFFSET + 0x180" } - { NV4097_SET_TEXTURE_FORMAT + 0x180 , "NV4097_SET_TEXTURE_FORMAT + 0x180" } - { NV4097_SET_TEXTURE_ADDRESS + 0x180 , "NV4097_SET_TEXTURE_ADDRESS + 0x180" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x180 , "NV4097_SET_TEXTURE_CONTROL0 + 0x180" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x180 , "NV4097_SET_TEXTURE_CONTROL1 + 0x180" } - { NV4097_SET_TEXTURE_FILTER + 0x180 , "NV4097_SET_TEXTURE_FILTER + 0x180" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x180 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x180" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x180 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x180" } - { NV4097_SET_TEXTURE_OFFSET + 0x1a0 , "NV4097_SET_TEXTURE_OFFSET + 0x1a0" } - { NV4097_SET_TEXTURE_FORMAT + 0x1a0 , "NV4097_SET_TEXTURE_FORMAT + 0x1a0" } - { NV4097_SET_TEXTURE_ADDRESS + 0x1a0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1a0" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x1a0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1a0" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x1a0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1a0" } - { NV4097_SET_TEXTURE_FILTER + 0x1a0 , "NV4097_SET_TEXTURE_FILTER + 0x1a0" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0" } - { NV4097_SET_TEXTURE_OFFSET + 0x1c0 , "NV4097_SET_TEXTURE_OFFSET + 0x1c0" } - { NV4097_SET_TEXTURE_FORMAT + 0x1c0 , "NV4097_SET_TEXTURE_FORMAT + 0x1c0" } - { NV4097_SET_TEXTURE_ADDRESS + 0x1c0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1c0" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x1c0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1c0" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x1c0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1c0" } - { NV4097_SET_TEXTURE_FILTER + 0x1c0 , "NV4097_SET_TEXTURE_FILTER + 0x1c0" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0" } - { NV4097_SET_TEXTURE_OFFSET + 0x1e0 , "NV4097_SET_TEXTURE_OFFSET + 0x1e0" } - { NV4097_SET_TEXTURE_FORMAT + 0x1e0 , "NV4097_SET_TEXTURE_FORMAT + 0x1e0" } - { NV4097_SET_TEXTURE_ADDRESS + 0x1e0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1e0" } - { NV4097_SET_TEXTURE_CONTROL0 + 0x1e0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1e0" } - { NV4097_SET_TEXTURE_CONTROL1 + 0x1e0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1e0" } - { NV4097_SET_TEXTURE_FILTER + 0x1e0 , "NV4097_SET_TEXTURE_FILTER + 0x1e0" } - { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0" } - { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0" } - { NV4097_SET_VERTEX_DATA4F_M , "NV4097_SET_VERTEX_DATA4F_M" } - { NV4097_SET_VERTEX_DATA4F_M + 4 , "NV4097_SET_VERTEX_DATA4F_M + 4" } - { NV4097_SET_VERTEX_DATA4F_M + 8 , "NV4097_SET_VERTEX_DATA4F_M + 8" } - { NV4097_SET_VERTEX_DATA4F_M + 12 , "NV4097_SET_VERTEX_DATA4F_M + 12" } - { NV4097_SET_VERTEX_DATA4F_M + 16 , "NV4097_SET_VERTEX_DATA4F_M + 16" } - { NV4097_SET_VERTEX_DATA4F_M + 20 , "NV4097_SET_VERTEX_DATA4F_M + 20" } - { NV4097_SET_VERTEX_DATA4F_M + 24 , "NV4097_SET_VERTEX_DATA4F_M + 24" } - { NV4097_SET_VERTEX_DATA4F_M + 28 , "NV4097_SET_VERTEX_DATA4F_M + 28" } - { NV4097_SET_VERTEX_DATA4F_M + 32 , "NV4097_SET_VERTEX_DATA4F_M + 32" } - { NV4097_SET_VERTEX_DATA4F_M + 36 , "NV4097_SET_VERTEX_DATA4F_M + 36" } - { NV4097_SET_VERTEX_DATA4F_M + 40 , "NV4097_SET_VERTEX_DATA4F_M + 40" } - { NV4097_SET_VERTEX_DATA4F_M + 44 , "NV4097_SET_VERTEX_DATA4F_M + 44" } - { NV4097_SET_VERTEX_DATA4F_M + 48 , "NV4097_SET_VERTEX_DATA4F_M + 48" } - { NV4097_SET_VERTEX_DATA4F_M + 52 , "NV4097_SET_VERTEX_DATA4F_M + 52" } - { NV4097_SET_VERTEX_DATA4F_M + 56 , "NV4097_SET_VERTEX_DATA4F_M + 56" } - { NV4097_SET_VERTEX_DATA4F_M + 60 , "NV4097_SET_VERTEX_DATA4F_M + 60" } - { NV4097_SET_VERTEX_DATA4F_M + 64 , "NV4097_SET_VERTEX_DATA4F_M + 64" } - { NV4097_SET_VERTEX_DATA4F_M + 68 , "NV4097_SET_VERTEX_DATA4F_M + 68" } - { NV4097_SET_VERTEX_DATA4F_M + 72 , "NV4097_SET_VERTEX_DATA4F_M + 72" } - { NV4097_SET_VERTEX_DATA4F_M + 76 , "NV4097_SET_VERTEX_DATA4F_M + 76" } - { NV4097_SET_VERTEX_DATA4F_M + 80 , "NV4097_SET_VERTEX_DATA4F_M + 80" } - { NV4097_SET_VERTEX_DATA4F_M + 84 , "NV4097_SET_VERTEX_DATA4F_M + 84" } - { NV4097_SET_VERTEX_DATA4F_M + 88 , "NV4097_SET_VERTEX_DATA4F_M + 88" } - { NV4097_SET_VERTEX_DATA4F_M + 92 , "NV4097_SET_VERTEX_DATA4F_M + 92" } - { NV4097_SET_VERTEX_DATA4F_M + 96 , "NV4097_SET_VERTEX_DATA4F_M + 96" } - { NV4097_SET_VERTEX_DATA4F_M + 100 , "NV4097_SET_VERTEX_DATA4F_M + 100" } - { NV4097_SET_VERTEX_DATA4F_M + 104 , "NV4097_SET_VERTEX_DATA4F_M + 104" } - { NV4097_SET_VERTEX_DATA4F_M + 108 , "NV4097_SET_VERTEX_DATA4F_M + 108" } - { NV4097_SET_VERTEX_DATA4F_M + 112 , "NV4097_SET_VERTEX_DATA4F_M + 112" } - { NV4097_SET_VERTEX_DATA4F_M + 116 , "NV4097_SET_VERTEX_DATA4F_M + 116" } - { NV4097_SET_VERTEX_DATA4F_M + 120 , "NV4097_SET_VERTEX_DATA4F_M + 120" } - { NV4097_SET_VERTEX_DATA4F_M + 124 , "NV4097_SET_VERTEX_DATA4F_M + 124" } - { NV4097_SET_VERTEX_DATA4F_M + 128 , "NV4097_SET_VERTEX_DATA4F_M + 128" } - { NV4097_SET_VERTEX_DATA4F_M + 132 , "NV4097_SET_VERTEX_DATA4F_M + 132" } - { NV4097_SET_VERTEX_DATA4F_M + 136 , "NV4097_SET_VERTEX_DATA4F_M + 136" } - { NV4097_SET_VERTEX_DATA4F_M + 140 , "NV4097_SET_VERTEX_DATA4F_M + 140" } - { NV4097_SET_VERTEX_DATA4F_M + 144 , "NV4097_SET_VERTEX_DATA4F_M + 144" } - { NV4097_SET_VERTEX_DATA4F_M + 148 , "NV4097_SET_VERTEX_DATA4F_M + 148" } - { NV4097_SET_VERTEX_DATA4F_M + 152 , "NV4097_SET_VERTEX_DATA4F_M + 152" } - { NV4097_SET_VERTEX_DATA4F_M + 156 , "NV4097_SET_VERTEX_DATA4F_M + 156" } - { NV4097_SET_VERTEX_DATA4F_M + 160 , "NV4097_SET_VERTEX_DATA4F_M + 160" } - { NV4097_SET_VERTEX_DATA4F_M + 164 , "NV4097_SET_VERTEX_DATA4F_M + 164" } - { NV4097_SET_VERTEX_DATA4F_M + 168 , "NV4097_SET_VERTEX_DATA4F_M + 168" } - { NV4097_SET_VERTEX_DATA4F_M + 172 , "NV4097_SET_VERTEX_DATA4F_M + 172" } - { NV4097_SET_VERTEX_DATA4F_M + 176 , "NV4097_SET_VERTEX_DATA4F_M + 176" } - { NV4097_SET_VERTEX_DATA4F_M + 180 , "NV4097_SET_VERTEX_DATA4F_M + 180" } - { NV4097_SET_VERTEX_DATA4F_M + 184 , "NV4097_SET_VERTEX_DATA4F_M + 184" } - { NV4097_SET_VERTEX_DATA4F_M + 188 , "NV4097_SET_VERTEX_DATA4F_M + 188" } - { NV4097_SET_VERTEX_DATA4F_M + 192 , "NV4097_SET_VERTEX_DATA4F_M + 192" } - { NV4097_SET_VERTEX_DATA4F_M + 196 , "NV4097_SET_VERTEX_DATA4F_M + 196" } - { NV4097_SET_VERTEX_DATA4F_M + 200 , "NV4097_SET_VERTEX_DATA4F_M + 200" } - { NV4097_SET_VERTEX_DATA4F_M + 204 , "NV4097_SET_VERTEX_DATA4F_M + 204" } - { NV4097_SET_VERTEX_DATA4F_M + 208 , "NV4097_SET_VERTEX_DATA4F_M + 208" } - { NV4097_SET_VERTEX_DATA4F_M + 212 , "NV4097_SET_VERTEX_DATA4F_M + 212" } - { NV4097_SET_VERTEX_DATA4F_M + 216 , "NV4097_SET_VERTEX_DATA4F_M + 216" } - { NV4097_SET_VERTEX_DATA4F_M + 220 , "NV4097_SET_VERTEX_DATA4F_M + 220" } - { NV4097_SET_VERTEX_DATA4F_M + 224 , "NV4097_SET_VERTEX_DATA4F_M + 224" } - { NV4097_SET_VERTEX_DATA4F_M + 228 , "NV4097_SET_VERTEX_DATA4F_M + 228" } - { NV4097_SET_VERTEX_DATA4F_M + 232 , "NV4097_SET_VERTEX_DATA4F_M + 232" } - { NV4097_SET_VERTEX_DATA4F_M + 236 , "NV4097_SET_VERTEX_DATA4F_M + 236" } - { NV4097_SET_VERTEX_DATA4F_M + 240 , "NV4097_SET_VERTEX_DATA4F_M + 240" } - { NV4097_SET_VERTEX_DATA4F_M + 244 , "NV4097_SET_VERTEX_DATA4F_M + 244" } - { NV4097_SET_VERTEX_DATA4F_M + 248 , "NV4097_SET_VERTEX_DATA4F_M + 248" } - { NV4097_SET_VERTEX_DATA4F_M + 252 , "NV4097_SET_VERTEX_DATA4F_M + 252" } - { NV4097_SET_SHADER_CONTROL , "NV4097_SET_SHADER_CONTROL" } - { NV4097_SET_SEMAPHORE_OFFSET , "NV4097_SET_SEMAPHORE_OFFSET" } - { NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE , "NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE" } - { NV4097_TEXTURE_READ_SEMAPHORE_RELEASE , "NV4097_TEXTURE_READ_SEMAPHORE_RELEASE" } - { NV4097_SET_ZMIN_MAX_CONTROL , "NV4097_SET_ZMIN_MAX_CONTROL" } - { NV4097_SET_ANTI_ALIASING_CONTROL , "NV4097_SET_ANTI_ALIASING_CONTROL" } - { NV4097_SET_ZCULL_EN , "NV4097_SET_ZCULL_EN" } - { NV4097_SET_SHADER_WINDOW , "NV4097_SET_SHADER_WINDOW" } - { NV4097_SET_ZSTENCIL_CLEAR_VALUE , "NV4097_SET_ZSTENCIL_CLEAR_VALUE" } - { NV4097_SET_COLOR_CLEAR_VALUE , "NV4097_SET_COLOR_CLEAR_VALUE" } - { NV4097_CLEAR_SURFACE , "NV4097_CLEAR_SURFACE" } - { NV4097_SET_RESTART_INDEX_ENABLE , "NV4097_SET_RESTART_INDEX_ENABLE" } - { NV4097_SET_RESTART_INDEX , "NV4097_SET_RESTART_INDEX" } - { NV4097_SET_LINE_STIPPLE , "NV4097_SET_LINE_STIPPLE" } - { NV4097_SET_LINE_STIPPLE_PATTERN , "NV4097_SET_LINE_STIPPLE_PATTERN" } - { NV4097_SET_VERTEX_DATA1F_M , "NV4097_SET_VERTEX_DATA1F_M" } - { NV4097_SET_VERTEX_DATA1F_M + 4 , "NV4097_SET_VERTEX_DATA1F_M + 4" } - { NV4097_SET_VERTEX_DATA1F_M + 8 , "NV4097_SET_VERTEX_DATA1F_M + 8" } - { NV4097_SET_VERTEX_DATA1F_M + 12 , "NV4097_SET_VERTEX_DATA1F_M + 12" } - { NV4097_SET_VERTEX_DATA1F_M + 16 , "NV4097_SET_VERTEX_DATA1F_M + 16" } - { NV4097_SET_VERTEX_DATA1F_M + 20 , "NV4097_SET_VERTEX_DATA1F_M + 20" } - { NV4097_SET_VERTEX_DATA1F_M + 24 , "NV4097_SET_VERTEX_DATA1F_M + 24" } - { NV4097_SET_VERTEX_DATA1F_M + 28 , "NV4097_SET_VERTEX_DATA1F_M + 28" } - { NV4097_SET_VERTEX_DATA1F_M + 32 , "NV4097_SET_VERTEX_DATA1F_M + 32" } - { NV4097_SET_VERTEX_DATA1F_M + 36 , "NV4097_SET_VERTEX_DATA1F_M + 36" } - { NV4097_SET_VERTEX_DATA1F_M + 40 , "NV4097_SET_VERTEX_DATA1F_M + 40" } - { NV4097_SET_VERTEX_DATA1F_M + 44 , "NV4097_SET_VERTEX_DATA1F_M + 44" } - { NV4097_SET_VERTEX_DATA1F_M + 48 , "NV4097_SET_VERTEX_DATA1F_M + 48" } - { NV4097_SET_VERTEX_DATA1F_M + 52 , "NV4097_SET_VERTEX_DATA1F_M + 52" } - { NV4097_SET_VERTEX_DATA1F_M + 56 , "NV4097_SET_VERTEX_DATA1F_M + 56" } - { NV4097_SET_VERTEX_DATA1F_M + 60 , "NV4097_SET_VERTEX_DATA1F_M + 60" } - { NV4097_SET_RENDER_ENABLE , "NV4097_SET_RENDER_ENABLE" } - { NV4097_SET_TRANSFORM_PROGRAM_LOAD , "NV4097_SET_TRANSFORM_PROGRAM_LOAD" } - { NV4097_SET_TRANSFORM_PROGRAM_START , "NV4097_SET_TRANSFORM_PROGRAM_START" } - { NV4097_SET_ZCULL_CONTROL0 , "NV4097_SET_ZCULL_CONTROL0" } - { NV4097_SET_ZCULL_CONTROL1 , "NV4097_SET_ZCULL_CONTROL1" } - { NV4097_SET_SCULL_CONTROL , "NV4097_SET_SCULL_CONTROL" } - { NV4097_SET_POINT_SIZE , "NV4097_SET_POINT_SIZE" } - { NV4097_SET_POINT_PARAMS_ENABLE , "NV4097_SET_POINT_PARAMS_ENABLE" } - { NV4097_SET_POINT_SPRITE_CONTROL , "NV4097_SET_POINT_SPRITE_CONTROL" } - { NV4097_SET_TRANSFORM_TIMEOUT , "NV4097_SET_TRANSFORM_TIMEOUT" } - { NV4097_SET_TRANSFORM_CONSTANT_LOAD , "NV4097_SET_TRANSFORM_CONSTANT_LOAD" } - { NV4097_SET_FREQUENCY_DIVIDER_OPERATION , "NV4097_SET_FREQUENCY_DIVIDER_OPERATION" } - { NV4097_INVALIDATE_L2 , "NV4097_INVALIDATE_L2" } + { NV4097_NO_OPERATION , "NV4097_NO_OPERATION" }, + { NV4097_NOTIFY , "NV4097_NOTIFY" }, + { NV4097_WAIT_FOR_IDLE , "NV4097_WAIT_FOR_IDLE" }, + { NV4097_PM_TRIGGER , "NV4097_PM_TRIGGER" }, + { NV4097_SET_CONTEXT_DMA_NOTIFIES , "NV4097_SET_CONTEXT_DMA_NOTIFIES" }, + { NV4097_SET_CONTEXT_DMA_A , "NV4097_SET_CONTEXT_DMA_A" }, + { NV4097_SET_CONTEXT_DMA_B , "NV4097_SET_CONTEXT_DMA_B" }, + { NV4097_SET_CONTEXT_DMA_COLOR_B , "NV4097_SET_CONTEXT_DMA_COLOR_B" }, + { NV4097_SET_CONTEXT_DMA_STATE , "NV4097_SET_CONTEXT_DMA_STATE" }, + { NV4097_SET_CONTEXT_DMA_COLOR_A , "NV4097_SET_CONTEXT_DMA_COLOR_A" }, + { NV4097_SET_CONTEXT_DMA_ZETA , "NV4097_SET_CONTEXT_DMA_ZETA" }, + { NV4097_SET_CONTEXT_DMA_VERTEX_A , "NV4097_SET_CONTEXT_DMA_VERTEX_A" }, + { NV4097_SET_CONTEXT_DMA_VERTEX_B , "NV4097_SET_CONTEXT_DMA_VERTEX_B" }, + { NV4097_SET_CONTEXT_DMA_SEMAPHORE , "NV4097_SET_CONTEXT_DMA_SEMAPHORE" }, + { NV4097_SET_CONTEXT_DMA_REPORT , "NV4097_SET_CONTEXT_DMA_REPORT" }, + { NV4097_SET_CONTEXT_DMA_CLIP_ID , "NV4097_SET_CONTEXT_DMA_CLIP_ID" }, + { NV4097_SET_CONTEXT_DMA_CULL_DATA , "NV4097_SET_CONTEXT_DMA_CULL_DATA" }, + { NV4097_SET_CONTEXT_DMA_COLOR_C , "NV4097_SET_CONTEXT_DMA_COLOR_C" }, + { NV4097_SET_CONTEXT_DMA_COLOR_D , "NV4097_SET_CONTEXT_DMA_COLOR_D" }, + { NV4097_SET_SURFACE_CLIP_HORIZONTAL , "NV4097_SET_SURFACE_CLIP_HORIZONTAL" }, + { NV4097_SET_SURFACE_CLIP_VERTICAL , "NV4097_SET_SURFACE_CLIP_VERTICAL" }, + { NV4097_SET_SURFACE_FORMAT , "NV4097_SET_SURFACE_FORMAT" }, + { NV4097_SET_SURFACE_PITCH_A , "NV4097_SET_SURFACE_PITCH_A" }, + { NV4097_SET_SURFACE_COLOR_AOFFSET , "NV4097_SET_SURFACE_COLOR_AOFFSET" }, + { NV4097_SET_SURFACE_ZETA_OFFSET , "NV4097_SET_SURFACE_ZETA_OFFSET" }, + { NV4097_SET_SURFACE_COLOR_BOFFSET , "NV4097_SET_SURFACE_COLOR_BOFFSET" }, + { NV4097_SET_SURFACE_PITCH_B , "NV4097_SET_SURFACE_PITCH_B" }, + { NV4097_SET_SURFACE_COLOR_TARGET , "NV4097_SET_SURFACE_COLOR_TARGET" }, + { NV4097_SET_SURFACE_PITCH_Z , "NV4097_SET_SURFACE_PITCH_Z" }, + { NV4097_INVALIDATE_ZCULL , "NV4097_INVALIDATE_ZCULL" }, + { NV4097_SET_CYLINDRICAL_WRAP , "NV4097_SET_CYLINDRICAL_WRAP" }, + { NV4097_SET_CYLINDRICAL_WRAP1 , "NV4097_SET_CYLINDRICAL_WRAP1" }, + { NV4097_SET_SURFACE_PITCH_C , "NV4097_SET_SURFACE_PITCH_C" }, + { NV4097_SET_SURFACE_PITCH_D , "NV4097_SET_SURFACE_PITCH_D" }, + { NV4097_SET_SURFACE_COLOR_COFFSET , "NV4097_SET_SURFACE_COLOR_COFFSET" }, + { NV4097_SET_SURFACE_COLOR_DOFFSET , "NV4097_SET_SURFACE_COLOR_DOFFSET" }, + { NV4097_SET_WINDOW_OFFSET , "NV4097_SET_WINDOW_OFFSET" }, + { NV4097_SET_DITHER_ENABLE , "NV4097_SET_DITHER_ENABLE" }, + { NV4097_SET_ALPHA_TEST_ENABLE , "NV4097_SET_ALPHA_TEST_ENABLE" }, + { NV4097_SET_ALPHA_FUNC , "NV4097_SET_ALPHA_FUNC" }, + { NV4097_SET_ALPHA_REF , "NV4097_SET_ALPHA_REF" }, + { NV4097_SET_BLEND_ENABLE , "NV4097_SET_BLEND_ENABLE" }, + { NV4097_SET_BLEND_FUNC_SFACTOR , "NV4097_SET_BLEND_FUNC_SFACTOR" }, + { NV4097_SET_BLEND_FUNC_DFACTOR , "NV4097_SET_BLEND_FUNC_DFACTOR" }, + { NV4097_SET_BLEND_COLOR , "NV4097_SET_BLEND_COLOR" }, + { NV4097_SET_BLEND_EQUATION , "NV4097_SET_BLEND_EQUATION" }, + { NV4097_SET_COLOR_MASK , "NV4097_SET_COLOR_MASK" }, + { NV4097_SET_STENCIL_TEST_ENABLE , "NV4097_SET_STENCIL_TEST_ENABLE" }, + { NV4097_SET_STENCIL_MASK , "NV4097_SET_STENCIL_MASK" }, + { NV4097_SET_STENCIL_FUNC , "NV4097_SET_STENCIL_FUNC" }, + { NV4097_SET_STENCIL_FUNC_REF , "NV4097_SET_STENCIL_FUNC_REF" }, + { NV4097_SET_STENCIL_FUNC_MASK , "NV4097_SET_STENCIL_FUNC_MASK" }, + { NV4097_SET_STENCIL_OP_FAIL , "NV4097_SET_STENCIL_OP_FAIL" }, + { NV4097_SET_STENCIL_OP_ZFAIL , "NV4097_SET_STENCIL_OP_ZFAIL" }, + { NV4097_SET_STENCIL_OP_ZPASS , "NV4097_SET_STENCIL_OP_ZPASS" }, + { NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE , "NV4097_SET_TWO_SIDED_STENCIL_TEST_ENABLE" }, + { NV4097_SET_BACK_STENCIL_MASK , "NV4097_SET_BACK_STENCIL_MASK" }, + { NV4097_SET_BACK_STENCIL_FUNC , "NV4097_SET_BACK_STENCIL_FUNC" }, + { NV4097_SET_BACK_STENCIL_FUNC_REF , "NV4097_SET_BACK_STENCIL_FUNC_REF" }, + { NV4097_SET_BACK_STENCIL_FUNC_MASK , "NV4097_SET_BACK_STENCIL_FUNC_MASK" }, + { NV4097_SET_BACK_STENCIL_OP_FAIL , "NV4097_SET_BACK_STENCIL_OP_FAIL" }, + { NV4097_SET_BACK_STENCIL_OP_ZFAIL , "NV4097_SET_BACK_STENCIL_OP_ZFAIL" }, + { NV4097_SET_BACK_STENCIL_OP_ZPASS , "NV4097_SET_BACK_STENCIL_OP_ZPASS" }, + { NV4097_SET_SHADE_MODE , "NV4097_SET_SHADE_MODE" }, + { NV4097_SET_BLEND_ENABLE_MRT , "NV4097_SET_BLEND_ENABLE_MRT" }, + { NV4097_SET_COLOR_MASK_MRT , "NV4097_SET_COLOR_MASK_MRT" }, + { NV4097_SET_LOGIC_OP_ENABLE , "NV4097_SET_LOGIC_OP_ENABLE" }, + { NV4097_SET_LOGIC_OP , "NV4097_SET_LOGIC_OP" }, + { NV4097_SET_BLEND_COLOR2 , "NV4097_SET_BLEND_COLOR2" }, + { NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE , "NV4097_SET_DEPTH_BOUNDS_TEST_ENABLE" }, + { NV4097_SET_DEPTH_BOUNDS_MIN , "NV4097_SET_DEPTH_BOUNDS_MIN" }, + { NV4097_SET_DEPTH_BOUNDS_MAX , "NV4097_SET_DEPTH_BOUNDS_MAX" }, + { NV4097_SET_CLIP_MIN , "NV4097_SET_CLIP_MIN" }, + { NV4097_SET_CLIP_MAX , "NV4097_SET_CLIP_MAX" }, + { NV4097_SET_CONTROL0 , "NV4097_SET_CONTROL0" }, + { NV4097_SET_LINE_WIDTH , "NV4097_SET_LINE_WIDTH" }, + { NV4097_SET_LINE_SMOOTH_ENABLE , "NV4097_SET_LINE_SMOOTH_ENABLE" }, + { NV4097_SET_ANISO_SPREAD , "NV4097_SET_ANISO_SPREAD" }, + { NV4097_SET_ANISO_SPREAD + 4 , "NV4097_SET_ANISO_SPREAD + 4" }, + { NV4097_SET_ANISO_SPREAD + 8 , "NV4097_SET_ANISO_SPREAD + 8" }, + { NV4097_SET_ANISO_SPREAD + 12 , "NV4097_SET_ANISO_SPREAD + 12" }, + { NV4097_SET_ANISO_SPREAD + 16 , "NV4097_SET_ANISO_SPREAD + 16" }, + { NV4097_SET_ANISO_SPREAD + 20 , "NV4097_SET_ANISO_SPREAD + 20" }, + { NV4097_SET_ANISO_SPREAD + 24 , "NV4097_SET_ANISO_SPREAD + 24" }, + { NV4097_SET_ANISO_SPREAD + 28 , "NV4097_SET_ANISO_SPREAD + 28" }, + { NV4097_SET_ANISO_SPREAD + 32 , "NV4097_SET_ANISO_SPREAD + 32" }, + { NV4097_SET_ANISO_SPREAD + 36 , "NV4097_SET_ANISO_SPREAD + 36" }, + { NV4097_SET_ANISO_SPREAD + 40 , "NV4097_SET_ANISO_SPREAD + 40" }, + { NV4097_SET_ANISO_SPREAD + 44 , "NV4097_SET_ANISO_SPREAD + 44" }, + { NV4097_SET_ANISO_SPREAD + 48 , "NV4097_SET_ANISO_SPREAD + 48" }, + { NV4097_SET_ANISO_SPREAD + 52 , "NV4097_SET_ANISO_SPREAD + 52" }, + { NV4097_SET_ANISO_SPREAD + 56 , "NV4097_SET_ANISO_SPREAD + 56" }, + { NV4097_SET_ANISO_SPREAD + 60 , "NV4097_SET_ANISO_SPREAD + 60" }, + { NV4097_SET_SCISSOR_HORIZONTAL , "NV4097_SET_SCISSOR_HORIZONTAL" }, + { NV4097_SET_SCISSOR_VERTICAL , "NV4097_SET_SCISSOR_VERTICAL" }, + { NV4097_SET_FOG_MODE , "NV4097_SET_FOG_MODE" }, + { NV4097_SET_FOG_PARAMS , "NV4097_SET_FOG_PARAMS" }, + { NV4097_SET_FOG_PARAMS + 4 , "NV4097_SET_FOG_PARAMS + 4" }, + { NV4097_SET_FOG_PARAMS + 8 , "NV4097_SET_FOG_PARAMS + 8" }, + { NV4097_SET_SHADER_PROGRAM , "NV4097_SET_SHADER_PROGRAM" }, + { NV4097_SET_VERTEX_TEXTURE_OFFSET , "NV4097_SET_VERTEX_TEXTURE_OFFSET" }, + { NV4097_SET_VERTEX_TEXTURE_FORMAT , "NV4097_SET_VERTEX_TEXTURE_FORMAT" }, + { NV4097_SET_VERTEX_TEXTURE_ADDRESS , "NV4097_SET_VERTEX_TEXTURE_ADDRESS" }, + { NV4097_SET_VERTEX_TEXTURE_CONTROL0 , "NV4097_SET_VERTEX_TEXTURE_CONTROL0" }, + { NV4097_SET_VERTEX_TEXTURE_CONTROL3 , "NV4097_SET_VERTEX_TEXTURE_CONTROL3" }, + { NV4097_SET_VERTEX_TEXTURE_FILTER , "NV4097_SET_VERTEX_TEXTURE_FILTER" }, + { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT , "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT" }, + { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR , "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR" }, + { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x20" }, + { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x20" }, + { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x20" }, + { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x20" }, + { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x20" }, + { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x20" }, + { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x20" }, + { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x20" }, + { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x40" }, + { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x40" }, + { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x40" }, + { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x40" }, + { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x40" }, + { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x40" }, + { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x40" }, + { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x40" }, + { NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60, "NV4097_SET_VERTEX_TEXTURE_OFFSET + 0x60" }, + { NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60, "NV4097_SET_VERTEX_TEXTURE_FORMAT + 0x60" }, + { NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60, "NV4097_SET_VERTEX_TEXTURE_ADDRESS + 0x60" }, + { NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60, "NV4097_SET_VERTEX_TEXTURE_CONTROL0 + 0x60" }, + { NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60, "NV4097_SET_VERTEX_TEXTURE_CONTROL3 + 0x60" }, + { NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60, "NV4097_SET_VERTEX_TEXTURE_FILTER + 0x60" }, + { NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60, "NV4097_SET_VERTEX_TEXTURE_IMAGE_RECT + 0x60" }, + { NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60, "NV4097_SET_VERTEX_TEXTURE_BORDER_COLOR + 0x60" }, + { NV4097_SET_VIEWPORT_HORIZONTAL , "NV4097_SET_VIEWPORT_HORIZONTAL" }, + { NV4097_SET_VIEWPORT_VERTICAL , "NV4097_SET_VIEWPORT_VERTICAL" }, + { NV4097_SET_VIEWPORT_OFFSET , "NV4097_SET_VIEWPORT_OFFSET" }, + { NV4097_SET_VIEWPORT_SCALE , "NV4097_SET_VIEWPORT_SCALE" }, + { NV4097_SET_POLY_OFFSET_LINE_ENABLE , "NV4097_SET_POLY_OFFSET_LINE_ENABLE" }, + { NV4097_SET_POLY_OFFSET_FILL_ENABLE , "NV4097_SET_POLY_OFFSET_FILL_ENABLE" }, + { NV4097_SET_DEPTH_FUNC , "NV4097_SET_DEPTH_FUNC" }, + { NV4097_SET_DEPTH_MASK , "NV4097_SET_DEPTH_MASK" }, + { NV4097_SET_DEPTH_TEST_ENABLE , "NV4097_SET_DEPTH_TEST_ENABLE" }, + { NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR , "NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR" }, + { NV4097_SET_POLYGON_OFFSET_BIAS , "NV4097_SET_POLYGON_OFFSET_BIAS" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M , "NV4097_SET_VERTEX_DATA_SCALED4S_M" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 4 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 4" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 8 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 8" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 12 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 12" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 16 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 16" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 20 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 20" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 24 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 24" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 28 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 28" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 32 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 32" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 36 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 36" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 40, "NV4097_SET_VERTEX_DATA_SCALED4S_M + 40" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 44 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 44" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 48 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 48" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 52 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 52" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 56 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 56" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 60 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 60" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 64 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 64" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 68 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 68" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 72 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 72" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 76 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 76" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 80 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 80" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 84 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 84" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 88 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 88" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 92 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 92" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 96 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 96" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 100 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 100" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 104 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 104" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 108 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 108" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 112 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 112" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 116 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 116" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 120 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 120" }, + { NV4097_SET_VERTEX_DATA_SCALED4S_M + 124 , "NV4097_SET_VERTEX_DATA_SCALED4S_M + 124" }, + { NV4097_SET_TEXTURE_CONTROL2 , "NV4097_SET_TEXTURE_CONTROL2" }, + { NV4097_SET_TEXTURE_CONTROL2 + 4 , "NV4097_SET_TEXTURE_CONTROL2 + 4" }, + { NV4097_SET_TEXTURE_CONTROL2 + 8 , "NV4097_SET_TEXTURE_CONTROL2 + 8" }, + { NV4097_SET_TEXTURE_CONTROL2 + 12 , "NV4097_SET_TEXTURE_CONTROL2 + 12" }, + { NV4097_SET_TEXTURE_CONTROL2 + 16 , "NV4097_SET_TEXTURE_CONTROL2 + 16" }, + { NV4097_SET_TEXTURE_CONTROL2 + 20 , "NV4097_SET_TEXTURE_CONTROL2 + 20" }, + { NV4097_SET_TEXTURE_CONTROL2 + 24 , "NV4097_SET_TEXTURE_CONTROL2 + 24" }, + { NV4097_SET_TEXTURE_CONTROL2 + 28 , "NV4097_SET_TEXTURE_CONTROL2 + 28" }, + { NV4097_SET_TEXTURE_CONTROL2 + 32 , "NV4097_SET_TEXTURE_CONTROL2 + 32" }, + { NV4097_SET_TEXTURE_CONTROL2 + 36 , "NV4097_SET_TEXTURE_CONTROL2 + 36" }, + { NV4097_SET_TEXTURE_CONTROL2 + 40 , "NV4097_SET_TEXTURE_CONTROL2 + 40" }, + { NV4097_SET_TEXTURE_CONTROL2 + 44 , "NV4097_SET_TEXTURE_CONTROL2 + 44" }, + { NV4097_SET_TEXTURE_CONTROL2 + 48 , "NV4097_SET_TEXTURE_CONTROL2 + 48" }, + { NV4097_SET_TEXTURE_CONTROL2 + 52 , "NV4097_SET_TEXTURE_CONTROL2 + 52" }, + { NV4097_SET_TEXTURE_CONTROL2 + 56 , "NV4097_SET_TEXTURE_CONTROL2 + 56" }, + { NV4097_SET_TEXTURE_CONTROL2 + 60 , "NV4097_SET_TEXTURE_CONTROL2 + 60" }, + { NV4097_SET_TEX_COORD_CONTROL , "NV4097_SET_TEX_COORD_CONTROL" }, + { NV4097_SET_TEX_COORD_CONTROL + 4 , "NV4097_SET_TEX_COORD_CONTROL + 4" }, + { NV4097_SET_TEX_COORD_CONTROL + 8 , "NV4097_SET_TEX_COORD_CONTROL + 8" }, + { NV4097_SET_TEX_COORD_CONTROL + 12 , "NV4097_SET_TEX_COORD_CONTROL + 12" }, + { NV4097_SET_TEX_COORD_CONTROL + 16 , "NV4097_SET_TEX_COORD_CONTROL + 16" }, + { NV4097_SET_TEX_COORD_CONTROL + 20 , "NV4097_SET_TEX_COORD_CONTROL + 20" }, + { NV4097_SET_TEX_COORD_CONTROL + 24 , "NV4097_SET_TEX_COORD_CONTROL + 24" }, + { NV4097_SET_TEX_COORD_CONTROL + 28 , "NV4097_SET_TEX_COORD_CONTROL + 28" }, + { NV4097_SET_TEX_COORD_CONTROL + 32 , "NV4097_SET_TEX_COORD_CONTROL + 32" }, + { NV4097_SET_TEX_COORD_CONTROL + 36 , "NV4097_SET_TEX_COORD_CONTROL + 36" }, + { NV4097_SET_TRANSFORM_PROGRAM , "NV4097_SET_TRANSFORM_PROGRAM" }, + { NV4097_SET_TRANSFORM_PROGRAM + 4 , "NV4097_SET_TRANSFORM_PROGRAM + 4" }, + { NV4097_SET_TRANSFORM_PROGRAM + 8 , "NV4097_SET_TRANSFORM_PROGRAM + 8" }, + { NV4097_SET_TRANSFORM_PROGRAM + 12 , "NV4097_SET_TRANSFORM_PROGRAM + 12" }, + { NV4097_SET_TRANSFORM_PROGRAM + 16 , "NV4097_SET_TRANSFORM_PROGRAM + 16" }, + { NV4097_SET_TRANSFORM_PROGRAM + 20 , "NV4097_SET_TRANSFORM_PROGRAM + 20" }, + { NV4097_SET_TRANSFORM_PROGRAM + 24 , "NV4097_SET_TRANSFORM_PROGRAM + 24" }, + { NV4097_SET_TRANSFORM_PROGRAM + 28 , "NV4097_SET_TRANSFORM_PROGRAM + 28" }, + { NV4097_SET_TRANSFORM_PROGRAM + 32 , "NV4097_SET_TRANSFORM_PROGRAM + 32" }, + { NV4097_SET_TRANSFORM_PROGRAM + 36 , "NV4097_SET_TRANSFORM_PROGRAM + 36" }, + { NV4097_SET_TRANSFORM_PROGRAM + 40 , "NV4097_SET_TRANSFORM_PROGRAM + 40" }, + { NV4097_SET_TRANSFORM_PROGRAM + 44 , "NV4097_SET_TRANSFORM_PROGRAM + 44" }, + { NV4097_SET_TRANSFORM_PROGRAM + 48 , "NV4097_SET_TRANSFORM_PROGRAM + 48" }, + { NV4097_SET_TRANSFORM_PROGRAM + 52 , "NV4097_SET_TRANSFORM_PROGRAM + 52" }, + { NV4097_SET_TRANSFORM_PROGRAM + 56 , "NV4097_SET_TRANSFORM_PROGRAM + 56" }, + { NV4097_SET_TRANSFORM_PROGRAM + 60 , "NV4097_SET_TRANSFORM_PROGRAM + 60" }, + { NV4097_SET_TRANSFORM_PROGRAM + 64 , "NV4097_SET_TRANSFORM_PROGRAM + 64" }, + { NV4097_SET_TRANSFORM_PROGRAM + 68 , "NV4097_SET_TRANSFORM_PROGRAM + 68" }, + { NV4097_SET_TRANSFORM_PROGRAM + 72 , "NV4097_SET_TRANSFORM_PROGRAM + 72" }, + { NV4097_SET_TRANSFORM_PROGRAM + 76 , "NV4097_SET_TRANSFORM_PROGRAM + 76" }, + { NV4097_SET_TRANSFORM_PROGRAM + 80 , "NV4097_SET_TRANSFORM_PROGRAM + 80" }, + { NV4097_SET_TRANSFORM_PROGRAM + 84 , "NV4097_SET_TRANSFORM_PROGRAM + 84" }, + { NV4097_SET_TRANSFORM_PROGRAM + 88 , "NV4097_SET_TRANSFORM_PROGRAM + 88" }, + { NV4097_SET_TRANSFORM_PROGRAM + 92 , "NV4097_SET_TRANSFORM_PROGRAM + 92" }, + { NV4097_SET_TRANSFORM_PROGRAM + 96 , "NV4097_SET_TRANSFORM_PROGRAM + 96" }, + { NV4097_SET_TRANSFORM_PROGRAM + 100 , "NV4097_SET_TRANSFORM_PROGRAM + 100" }, + { NV4097_SET_TRANSFORM_PROGRAM + 104 , "NV4097_SET_TRANSFORM_PROGRAM + 104" }, + { NV4097_SET_TRANSFORM_PROGRAM + 108 , "NV4097_SET_TRANSFORM_PROGRAM + 108" }, + { NV4097_SET_TRANSFORM_PROGRAM + 112 , "NV4097_SET_TRANSFORM_PROGRAM + 112" }, + { NV4097_SET_TRANSFORM_PROGRAM + 116 , "NV4097_SET_TRANSFORM_PROGRAM + 116" }, + { NV4097_SET_TRANSFORM_PROGRAM + 120 , "NV4097_SET_TRANSFORM_PROGRAM + 120" }, + { NV4097_SET_TRANSFORM_PROGRAM + 124 , "NV4097_SET_TRANSFORM_PROGRAM + 124" }, + { NV4097_SET_TWO_SIDE_LIGHT_EN , "NV4097_SET_TWO_SIDE_LIGHT_EN" }, + { NV4097_CLEAR_ZCULL_SURFACE , "NV4097_CLEAR_ZCULL_SURFACE" }, + { NV4097_SET_USER_CLIP_PLANE_CONTROL , "NV4097_SET_USER_CLIP_PLANE_CONTROL" }, + { NV4097_SET_POLYGON_STIPPLE , "NV4097_SET_POLYGON_STIPPLE" }, + { NV4097_SET_POLYGON_STIPPLE_PATTERN , "NV4097_SET_POLYGON_STIPPLE_PATTERN" }, + { NV4097_SET_VERTEX_DATA3F_M , "NV4097_SET_VERTEX_DATA3F_M" }, + { NV4097_SET_VERTEX_DATA3F_M + 4 , "NV4097_SET_VERTEX_DATA3F_M + 4" }, + { NV4097_SET_VERTEX_DATA3F_M + 8 , "NV4097_SET_VERTEX_DATA3F_M + 8" }, + { NV4097_SET_VERTEX_DATA3F_M + 12 , "NV4097_SET_VERTEX_DATA3F_M + 12" }, + { NV4097_SET_VERTEX_DATA3F_M + 16 , "NV4097_SET_VERTEX_DATA3F_M + 16" }, + { NV4097_SET_VERTEX_DATA3F_M + 20 , "NV4097_SET_VERTEX_DATA3F_M + 20" }, + { NV4097_SET_VERTEX_DATA3F_M + 24 , "NV4097_SET_VERTEX_DATA3F_M + 24" }, + { NV4097_SET_VERTEX_DATA3F_M + 28 , "NV4097_SET_VERTEX_DATA3F_M + 28" }, + { NV4097_SET_VERTEX_DATA3F_M + 32 , "NV4097_SET_VERTEX_DATA3F_M + 32" }, + { NV4097_SET_VERTEX_DATA3F_M + 36 , "NV4097_SET_VERTEX_DATA3F_M + 36" }, + { NV4097_SET_VERTEX_DATA3F_M + 40 , "NV4097_SET_VERTEX_DATA3F_M + 40" }, + { NV4097_SET_VERTEX_DATA3F_M + 44 , "NV4097_SET_VERTEX_DATA3F_M + 44" }, + { NV4097_SET_VERTEX_DATA3F_M + 48 , "NV4097_SET_VERTEX_DATA3F_M + 48" }, + { NV4097_SET_VERTEX_DATA3F_M + 52 , "NV4097_SET_VERTEX_DATA3F_M + 52" }, + { NV4097_SET_VERTEX_DATA3F_M + 56 , "NV4097_SET_VERTEX_DATA3F_M + 56" }, + { NV4097_SET_VERTEX_DATA3F_M + 60 , "NV4097_SET_VERTEX_DATA3F_M + 60" }, + { NV4097_SET_VERTEX_DATA3F_M + 64 , "NV4097_SET_VERTEX_DATA3F_M + 64" }, + { NV4097_SET_VERTEX_DATA3F_M + 68 , "NV4097_SET_VERTEX_DATA3F_M + 68" }, + { NV4097_SET_VERTEX_DATA3F_M + 72 , "NV4097_SET_VERTEX_DATA3F_M + 72" }, + { NV4097_SET_VERTEX_DATA3F_M + 76 , "NV4097_SET_VERTEX_DATA3F_M + 76" }, + { NV4097_SET_VERTEX_DATA3F_M + 80 , "NV4097_SET_VERTEX_DATA3F_M + 80" }, + { NV4097_SET_VERTEX_DATA3F_M + 84 , "NV4097_SET_VERTEX_DATA3F_M + 84" }, + { NV4097_SET_VERTEX_DATA3F_M + 88 , "NV4097_SET_VERTEX_DATA3F_M + 88" }, + { NV4097_SET_VERTEX_DATA3F_M + 92 , "NV4097_SET_VERTEX_DATA3F_M + 92" }, + { NV4097_SET_VERTEX_DATA3F_M + 96 , "NV4097_SET_VERTEX_DATA3F_M + 96" }, + { NV4097_SET_VERTEX_DATA3F_M + 100 , "NV4097_SET_VERTEX_DATA3F_M + 100" }, + { NV4097_SET_VERTEX_DATA3F_M + 104 , "NV4097_SET_VERTEX_DATA3F_M + 104" }, + { NV4097_SET_VERTEX_DATA3F_M + 108 , "NV4097_SET_VERTEX_DATA3F_M + 108" }, + { NV4097_SET_VERTEX_DATA3F_M + 112 , "NV4097_SET_VERTEX_DATA3F_M + 112" }, + { NV4097_SET_VERTEX_DATA3F_M + 116 , "NV4097_SET_VERTEX_DATA3F_M + 116" }, + { NV4097_SET_VERTEX_DATA3F_M + 120 , "NV4097_SET_VERTEX_DATA3F_M + 120" }, + { NV4097_SET_VERTEX_DATA3F_M + 124 , "NV4097_SET_VERTEX_DATA3F_M + 124" }, + { NV4097_SET_VERTEX_DATA3F_M + 128 , "NV4097_SET_VERTEX_DATA3F_M + 128" }, + { NV4097_SET_VERTEX_DATA3F_M + 132 , "NV4097_SET_VERTEX_DATA3F_M + 132" }, + { NV4097_SET_VERTEX_DATA3F_M + 136 , "NV4097_SET_VERTEX_DATA3F_M + 136" }, + { NV4097_SET_VERTEX_DATA3F_M + 140 , "NV4097_SET_VERTEX_DATA3F_M + 140" }, + { NV4097_SET_VERTEX_DATA3F_M + 144 , "NV4097_SET_VERTEX_DATA3F_M + 144" }, + { NV4097_SET_VERTEX_DATA3F_M + 148 , "NV4097_SET_VERTEX_DATA3F_M + 148" }, + { NV4097_SET_VERTEX_DATA3F_M + 152 , "NV4097_SET_VERTEX_DATA3F_M + 152" }, + { NV4097_SET_VERTEX_DATA3F_M + 156 , "NV4097_SET_VERTEX_DATA3F_M + 156" }, + { NV4097_SET_VERTEX_DATA3F_M + 160 , "NV4097_SET_VERTEX_DATA3F_M + 160" }, + { NV4097_SET_VERTEX_DATA3F_M + 164 , "NV4097_SET_VERTEX_DATA3F_M + 164" }, + { NV4097_SET_VERTEX_DATA3F_M + 168 , "NV4097_SET_VERTEX_DATA3F_M + 168" }, + { NV4097_SET_VERTEX_DATA3F_M + 172 , "NV4097_SET_VERTEX_DATA3F_M + 172" }, + { NV4097_SET_VERTEX_DATA3F_M + 176 , "NV4097_SET_VERTEX_DATA3F_M + 176" }, + { NV4097_SET_VERTEX_DATA3F_M + 180 , "NV4097_SET_VERTEX_DATA3F_M + 180" }, + { NV4097_SET_VERTEX_DATA3F_M + 184 , "NV4097_SET_VERTEX_DATA3F_M + 184" }, + { NV4097_SET_VERTEX_DATA3F_M + 188 , "NV4097_SET_VERTEX_DATA3F_M + 188" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 4" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 8" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 12" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 16" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 20" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 24" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 28" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 32" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 36" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 40" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 44" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 48" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 52" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 56" }, + { NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60 , "NV4097_SET_VERTEX_DATA_ARRAY_OFFSET + 60" }, + { NV4097_INVALIDATE_VERTEX_CACHE_FILE , "NV4097_INVALIDATE_VERTEX_CACHE_FILE" }, + { NV4097_INVALIDATE_VERTEX_FILE , "NV4097_INVALIDATE_VERTEX_FILE" }, + { NV4097_SET_VERTEX_DATA_BASE_OFFSET , "NV4097_SET_VERTEX_DATA_BASE_OFFSET" }, + { NV4097_SET_VERTEX_DATA_BASE_INDEX , "NV4097_SET_VERTEX_DATA_BASE_INDEX" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 4" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 8" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 12" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 16" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 20" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 24" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 28" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 32" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 36" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 40" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 44" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 48" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 52" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 56" }, + { NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60 , "NV4097_SET_VERTEX_DATA_ARRAY_FORMAT + 60" }, + { NV4097_CLEAR_REPORT_VALUE , "NV4097_CLEAR_REPORT_VALUE" }, + { NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE , "NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE" }, + { NV4097_GET_REPORT , "NV4097_GET_REPORT" }, + { NV4097_SET_ZCULL_STATS_ENABLE , "NV4097_SET_ZCULL_STATS_ENABLE" }, + { NV4097_SET_BEGIN_END , "NV4097_SET_BEGIN_END" }, + { NV4097_ARRAY_ELEMENT16 , "NV4097_ARRAY_ELEMENT16" }, + { NV4097_ARRAY_ELEMENT32 , "NV4097_ARRAY_ELEMENT32" }, + { NV4097_DRAW_ARRAYS , "NV4097_DRAW_ARRAYS" }, + { NV4097_INLINE_ARRAY , "NV4097_INLINE_ARRAY" }, + { NV4097_SET_INDEX_ARRAY_ADDRESS , "NV4097_SET_INDEX_ARRAY_ADDRESS" }, + { NV4097_SET_INDEX_ARRAY_DMA , "NV4097_SET_INDEX_ARRAY_DMA" }, + { NV4097_DRAW_INDEX_ARRAY , "NV4097_DRAW_INDEX_ARRAY" }, + { NV4097_SET_FRONT_POLYGON_MODE , "NV4097_SET_FRONT_POLYGON_MODE" }, + { NV4097_SET_BACK_POLYGON_MODE , "NV4097_SET_BACK_POLYGON_MODE" }, + { NV4097_SET_CULL_FACE , "NV4097_SET_CULL_FACE" }, + { NV4097_SET_FRONT_FACE , "NV4097_SET_FRONT_FACE" }, + { NV4097_SET_POLY_SMOOTH_ENABLE , "NV4097_SET_POLY_SMOOTH_ENABLE" }, + { NV4097_SET_CULL_FACE_ENABLE , "NV4097_SET_CULL_FACE_ENABLE" }, + { NV4097_SET_TEXTURE_CONTROL3 , "NV4097_SET_TEXTURE_CONTROL3" }, + { NV4097_SET_TEXTURE_CONTROL3 + 4 , "NV4097_SET_TEXTURE_CONTROL3 + 4" }, + { NV4097_SET_TEXTURE_CONTROL3 + 8 , "NV4097_SET_TEXTURE_CONTROL3 + 8" }, + { NV4097_SET_TEXTURE_CONTROL3 + 12 , "NV4097_SET_TEXTURE_CONTROL3 + 12" }, + { NV4097_SET_TEXTURE_CONTROL3 + 16 , "NV4097_SET_TEXTURE_CONTROL3 + 16" }, + { NV4097_SET_TEXTURE_CONTROL3 + 20 , "NV4097_SET_TEXTURE_CONTROL3 + 20" }, + { NV4097_SET_TEXTURE_CONTROL3 + 24 , "NV4097_SET_TEXTURE_CONTROL3 + 24" }, + { NV4097_SET_TEXTURE_CONTROL3 + 28 , "NV4097_SET_TEXTURE_CONTROL3 + 28" }, + { NV4097_SET_TEXTURE_CONTROL3 + 32 , "NV4097_SET_TEXTURE_CONTROL3 + 32" }, + { NV4097_SET_TEXTURE_CONTROL3 + 36 , "NV4097_SET_TEXTURE_CONTROL3 + 36" }, + { NV4097_SET_TEXTURE_CONTROL3 + 40 , "NV4097_SET_TEXTURE_CONTROL3 + 40" }, + { NV4097_SET_TEXTURE_CONTROL3 + 44 , "NV4097_SET_TEXTURE_CONTROL3 + 44" }, + { NV4097_SET_TEXTURE_CONTROL3 + 48 , "NV4097_SET_TEXTURE_CONTROL3 + 48" }, + { NV4097_SET_TEXTURE_CONTROL3 + 52 , "NV4097_SET_TEXTURE_CONTROL3 + 52" }, + { NV4097_SET_TEXTURE_CONTROL3 + 56 , "NV4097_SET_TEXTURE_CONTROL3 + 56" }, + { NV4097_SET_TEXTURE_CONTROL3 + 60 , "NV4097_SET_TEXTURE_CONTROL3 + 60" }, + { NV4097_SET_VERTEX_DATA2F_M , "NV4097_SET_VERTEX_DATA2F_M" }, + { NV4097_SET_VERTEX_DATA2F_M + 4 , "NV4097_SET_VERTEX_DATA2F_M + 4" }, + { NV4097_SET_VERTEX_DATA2F_M + 8 , "NV4097_SET_VERTEX_DATA2F_M + 8" }, + { NV4097_SET_VERTEX_DATA2F_M + 12 , "NV4097_SET_VERTEX_DATA2F_M + 12" }, + { NV4097_SET_VERTEX_DATA2F_M + 16 , "NV4097_SET_VERTEX_DATA2F_M + 16" }, + { NV4097_SET_VERTEX_DATA2F_M + 20 , "NV4097_SET_VERTEX_DATA2F_M + 20" }, + { NV4097_SET_VERTEX_DATA2F_M + 24 , "NV4097_SET_VERTEX_DATA2F_M + 24" }, + { NV4097_SET_VERTEX_DATA2F_M + 28 , "NV4097_SET_VERTEX_DATA2F_M + 28" }, + { NV4097_SET_VERTEX_DATA2F_M + 32 , "NV4097_SET_VERTEX_DATA2F_M + 32" }, + { NV4097_SET_VERTEX_DATA2F_M + 36 , "NV4097_SET_VERTEX_DATA2F_M + 36" }, + { NV4097_SET_VERTEX_DATA2F_M + 40 , "NV4097_SET_VERTEX_DATA2F_M + 40" }, + { NV4097_SET_VERTEX_DATA2F_M + 44 , "NV4097_SET_VERTEX_DATA2F_M + 44" }, + { NV4097_SET_VERTEX_DATA2F_M + 48 , "NV4097_SET_VERTEX_DATA2F_M + 48" }, + { NV4097_SET_VERTEX_DATA2F_M + 52 , "NV4097_SET_VERTEX_DATA2F_M + 52" }, + { NV4097_SET_VERTEX_DATA2F_M + 56 , "NV4097_SET_VERTEX_DATA2F_M + 56" }, + { NV4097_SET_VERTEX_DATA2F_M + 60 , "NV4097_SET_VERTEX_DATA2F_M + 60" }, + { NV4097_SET_VERTEX_DATA2F_M + 64 , "NV4097_SET_VERTEX_DATA2F_M + 64" }, + { NV4097_SET_VERTEX_DATA2F_M + 68 , "NV4097_SET_VERTEX_DATA2F_M + 68" }, + { NV4097_SET_VERTEX_DATA2F_M + 72 , "NV4097_SET_VERTEX_DATA2F_M + 72" }, + { NV4097_SET_VERTEX_DATA2F_M + 76 , "NV4097_SET_VERTEX_DATA2F_M + 76" }, + { NV4097_SET_VERTEX_DATA2F_M + 80 , "NV4097_SET_VERTEX_DATA2F_M + 80" }, + { NV4097_SET_VERTEX_DATA2F_M + 84 , "NV4097_SET_VERTEX_DATA2F_M + 84" }, + { NV4097_SET_VERTEX_DATA2F_M + 88 , "NV4097_SET_VERTEX_DATA2F_M + 88" }, + { NV4097_SET_VERTEX_DATA2F_M + 92 , "NV4097_SET_VERTEX_DATA2F_M + 92" }, + { NV4097_SET_VERTEX_DATA2F_M + 96 , "NV4097_SET_VERTEX_DATA2F_M + 96" }, + { NV4097_SET_VERTEX_DATA2F_M + 100 , "NV4097_SET_VERTEX_DATA2F_M + 100" }, + { NV4097_SET_VERTEX_DATA2F_M + 104 , "NV4097_SET_VERTEX_DATA2F_M + 104" }, + { NV4097_SET_VERTEX_DATA2F_M + 108 , "NV4097_SET_VERTEX_DATA2F_M + 108" }, + { NV4097_SET_VERTEX_DATA2F_M + 112 , "NV4097_SET_VERTEX_DATA2F_M + 112" }, + { NV4097_SET_VERTEX_DATA2F_M + 116 , "NV4097_SET_VERTEX_DATA2F_M + 116" }, + { NV4097_SET_VERTEX_DATA2F_M + 120 , "NV4097_SET_VERTEX_DATA2F_M + 120" }, + { NV4097_SET_VERTEX_DATA2F_M + 124 , "NV4097_SET_VERTEX_DATA2F_M + 124" }, + { NV4097_SET_VERTEX_DATA2S_M , "NV4097_SET_VERTEX_DATA2S_M" }, + { NV4097_SET_VERTEX_DATA2S_M + 4 , "NV4097_SET_VERTEX_DATA2S_M + 4" }, + { NV4097_SET_VERTEX_DATA2S_M + 8 , "NV4097_SET_VERTEX_DATA2S_M + 8" }, + { NV4097_SET_VERTEX_DATA2S_M + 12 , "NV4097_SET_VERTEX_DATA2S_M + 12" }, + { NV4097_SET_VERTEX_DATA2S_M + 16 , "NV4097_SET_VERTEX_DATA2S_M + 16" }, + { NV4097_SET_VERTEX_DATA2S_M + 20 , "NV4097_SET_VERTEX_DATA2S_M + 20" }, + { NV4097_SET_VERTEX_DATA2S_M + 24 , "NV4097_SET_VERTEX_DATA2S_M + 24" }, + { NV4097_SET_VERTEX_DATA2S_M + 28 , "NV4097_SET_VERTEX_DATA2S_M + 28" }, + { NV4097_SET_VERTEX_DATA2S_M + 32 , "NV4097_SET_VERTEX_DATA2S_M + 32" }, + { NV4097_SET_VERTEX_DATA2S_M + 36 , "NV4097_SET_VERTEX_DATA2S_M + 36" }, + { NV4097_SET_VERTEX_DATA2S_M + 40 , "NV4097_SET_VERTEX_DATA2S_M + 40" }, + { NV4097_SET_VERTEX_DATA2S_M + 44 , "NV4097_SET_VERTEX_DATA2S_M + 44" }, + { NV4097_SET_VERTEX_DATA2S_M + 48 , "NV4097_SET_VERTEX_DATA2S_M + 48" }, + { NV4097_SET_VERTEX_DATA2S_M + 52 , "NV4097_SET_VERTEX_DATA2S_M + 52" }, + { NV4097_SET_VERTEX_DATA2S_M + 56 , "NV4097_SET_VERTEX_DATA2S_M + 56" }, + { NV4097_SET_VERTEX_DATA2S_M + 60 , "NV4097_SET_VERTEX_DATA2S_M + 60" }, + { NV4097_SET_VERTEX_DATA4UB_M , "NV4097_SET_VERTEX_DATA4UB_M" }, + { NV4097_SET_VERTEX_DATA4UB_M + 4 , "NV4097_SET_VERTEX_DATA4UB_M + 4" }, + { NV4097_SET_VERTEX_DATA4UB_M + 8 , "NV4097_SET_VERTEX_DATA4UB_M + 8" }, + { NV4097_SET_VERTEX_DATA4UB_M + 12 , "NV4097_SET_VERTEX_DATA4UB_M + 12" }, + { NV4097_SET_VERTEX_DATA4UB_M + 16 , "NV4097_SET_VERTEX_DATA4UB_M + 16" }, + { NV4097_SET_VERTEX_DATA4UB_M + 20 , "NV4097_SET_VERTEX_DATA4UB_M + 20" }, + { NV4097_SET_VERTEX_DATA4UB_M + 24 , "NV4097_SET_VERTEX_DATA4UB_M + 24" }, + { NV4097_SET_VERTEX_DATA4UB_M + 28 , "NV4097_SET_VERTEX_DATA4UB_M + 28" }, + { NV4097_SET_VERTEX_DATA4UB_M + 32 , "NV4097_SET_VERTEX_DATA4UB_M + 32" }, + { NV4097_SET_VERTEX_DATA4UB_M + 36 , "NV4097_SET_VERTEX_DATA4UB_M + 36" }, + { NV4097_SET_VERTEX_DATA4UB_M + 40 , "NV4097_SET_VERTEX_DATA4UB_M + 40" }, + { NV4097_SET_VERTEX_DATA4UB_M + 44 , "NV4097_SET_VERTEX_DATA4UB_M + 44" }, + { NV4097_SET_VERTEX_DATA4UB_M + 48 , "NV4097_SET_VERTEX_DATA4UB_M + 48" }, + { NV4097_SET_VERTEX_DATA4UB_M + 52 , "NV4097_SET_VERTEX_DATA4UB_M + 52" }, + { NV4097_SET_VERTEX_DATA4UB_M + 56 , "NV4097_SET_VERTEX_DATA4UB_M + 56" }, + { NV4097_SET_VERTEX_DATA4UB_M + 60 , "NV4097_SET_VERTEX_DATA4UB_M + 60" }, + { NV4097_SET_VERTEX_DATA4S_M , "NV4097_SET_VERTEX_DATA4S_M" }, + { NV4097_SET_VERTEX_DATA4S_M + 4 , "NV4097_SET_VERTEX_DATA4S_M + 4" }, + { NV4097_SET_VERTEX_DATA4S_M + 8 , "NV4097_SET_VERTEX_DATA4S_M + 8" }, + { NV4097_SET_VERTEX_DATA4S_M + 12 , "NV4097_SET_VERTEX_DATA4S_M + 12" }, + { NV4097_SET_VERTEX_DATA4S_M + 16 , "NV4097_SET_VERTEX_DATA4S_M + 16" }, + { NV4097_SET_VERTEX_DATA4S_M + 20 , "NV4097_SET_VERTEX_DATA4S_M + 20" }, + { NV4097_SET_VERTEX_DATA4S_M + 24 , "NV4097_SET_VERTEX_DATA4S_M + 24" }, + { NV4097_SET_VERTEX_DATA4S_M + 28 , "NV4097_SET_VERTEX_DATA4S_M + 28" }, + { NV4097_SET_VERTEX_DATA4S_M + 32 , "NV4097_SET_VERTEX_DATA4S_M + 32" }, + { NV4097_SET_VERTEX_DATA4S_M + 36 , "NV4097_SET_VERTEX_DATA4S_M + 36" }, + { NV4097_SET_VERTEX_DATA4S_M + 40 , "NV4097_SET_VERTEX_DATA4S_M + 40" }, + { NV4097_SET_VERTEX_DATA4S_M + 44 , "NV4097_SET_VERTEX_DATA4S_M + 44" }, + { NV4097_SET_VERTEX_DATA4S_M + 48 , "NV4097_SET_VERTEX_DATA4S_M + 48" }, + { NV4097_SET_VERTEX_DATA4S_M + 52 , "NV4097_SET_VERTEX_DATA4S_M + 52" }, + { NV4097_SET_VERTEX_DATA4S_M + 56 , "NV4097_SET_VERTEX_DATA4S_M + 56" }, + { NV4097_SET_VERTEX_DATA4S_M + 60 , "NV4097_SET_VERTEX_DATA4S_M + 60" }, + { NV4097_SET_VERTEX_DATA4S_M + 64 , "NV4097_SET_VERTEX_DATA4S_M + 64" }, + { NV4097_SET_VERTEX_DATA4S_M + 68 , "NV4097_SET_VERTEX_DATA4S_M + 68" }, + { NV4097_SET_VERTEX_DATA4S_M + 72 , "NV4097_SET_VERTEX_DATA4S_M + 72" }, + { NV4097_SET_VERTEX_DATA4S_M + 76 , "NV4097_SET_VERTEX_DATA4S_M + 76" }, + { NV4097_SET_VERTEX_DATA4S_M + 80 , "NV4097_SET_VERTEX_DATA4S_M + 80" }, + { NV4097_SET_VERTEX_DATA4S_M + 84 , "NV4097_SET_VERTEX_DATA4S_M + 84" }, + { NV4097_SET_VERTEX_DATA4S_M + 88 , "NV4097_SET_VERTEX_DATA4S_M + 88" }, + { NV4097_SET_VERTEX_DATA4S_M + 92 , "NV4097_SET_VERTEX_DATA4S_M + 92" }, + { NV4097_SET_VERTEX_DATA4S_M + 96 , "NV4097_SET_VERTEX_DATA4S_M + 96" }, + { NV4097_SET_VERTEX_DATA4S_M + 100 , "NV4097_SET_VERTEX_DATA4S_M + 100" }, + { NV4097_SET_VERTEX_DATA4S_M + 104 , "NV4097_SET_VERTEX_DATA4S_M + 104" }, + { NV4097_SET_VERTEX_DATA4S_M + 108 , "NV4097_SET_VERTEX_DATA4S_M + 108" }, + { NV4097_SET_VERTEX_DATA4S_M + 112 , "NV4097_SET_VERTEX_DATA4S_M + 112" }, + { NV4097_SET_VERTEX_DATA4S_M + 116 , "NV4097_SET_VERTEX_DATA4S_M + 116" }, + { NV4097_SET_VERTEX_DATA4S_M + 120 , "NV4097_SET_VERTEX_DATA4S_M + 120" }, + { NV4097_SET_VERTEX_DATA4S_M + 124 , "NV4097_SET_VERTEX_DATA4S_M + 124" }, + { NV4097_SET_TEXTURE_OFFSET , "NV4097_SET_TEXTURE_OFFSET" }, + { NV4097_SET_TEXTURE_FORMAT , "NV4097_SET_TEXTURE_FORMAT" }, + { NV4097_SET_TEXTURE_ADDRESS , "NV4097_SET_TEXTURE_ADDRESS" }, + { NV4097_SET_TEXTURE_CONTROL0 , "NV4097_SET_TEXTURE_CONTROL0" }, + { NV4097_SET_TEXTURE_CONTROL1 , "NV4097_SET_TEXTURE_CONTROL1" }, + { NV4097_SET_TEXTURE_FILTER , "NV4097_SET_TEXTURE_FILTER" }, + { NV4097_SET_TEXTURE_IMAGE_RECT , "NV4097_SET_TEXTURE_IMAGE_RECT" }, + { NV4097_SET_TEXTURE_BORDER_COLOR , "NV4097_SET_TEXTURE_BORDER_COLOR" }, + { NV4097_SET_TEXTURE_OFFSET + 0x20 , "NV4097_SET_TEXTURE_OFFSET + 0x20" }, + { NV4097_SET_TEXTURE_FORMAT + 0x20 , "NV4097_SET_TEXTURE_FORMAT + 0x20" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x20 , "NV4097_SET_TEXTURE_ADDRESS + 0x20" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x20 , "NV4097_SET_TEXTURE_CONTROL0 + 0x20" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x20 , "NV4097_SET_TEXTURE_CONTROL1 + 0x20" }, + { NV4097_SET_TEXTURE_FILTER + 0x20 , "NV4097_SET_TEXTURE_FILTER + 0x20" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x20 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x20" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x20 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x20" }, + { NV4097_SET_TEXTURE_OFFSET + 0x40 , "NV4097_SET_TEXTURE_OFFSET + 0x40" }, + { NV4097_SET_TEXTURE_FORMAT + 0x40 , "NV4097_SET_TEXTURE_FORMAT + 0x40" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x40 , "NV4097_SET_TEXTURE_ADDRESS + 0x40" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x40 , "NV4097_SET_TEXTURE_CONTROL0 + 0x40" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x40 , "NV4097_SET_TEXTURE_CONTROL1 + 0x40" }, + { NV4097_SET_TEXTURE_FILTER + 0x40 , "NV4097_SET_TEXTURE_FILTER + 0x40" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x40 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x40" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x40 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x40" }, + { NV4097_SET_TEXTURE_OFFSET + 0x60 , "NV4097_SET_TEXTURE_OFFSET + 0x60" }, + { NV4097_SET_TEXTURE_FORMAT + 0x60 , "NV4097_SET_TEXTURE_FORMAT + 0x60" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x60 , "NV4097_SET_TEXTURE_ADDRESS + 0x60" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x60 , "NV4097_SET_TEXTURE_CONTROL0 + 0x60" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x60 , "NV4097_SET_TEXTURE_CONTROL1 + 0x60" }, + { NV4097_SET_TEXTURE_FILTER + 0x60 , "NV4097_SET_TEXTURE_FILTER + 0x60" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x60 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x60" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x60 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x60" }, + { NV4097_SET_TEXTURE_OFFSET + 0x80 , "NV4097_SET_TEXTURE_OFFSET + 0x80" }, + { NV4097_SET_TEXTURE_FORMAT + 0x80 , "NV4097_SET_TEXTURE_FORMAT + 0x80" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x80 , "NV4097_SET_TEXTURE_ADDRESS + 0x80" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x80 , "NV4097_SET_TEXTURE_CONTROL0 + 0x80" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x80 , "NV4097_SET_TEXTURE_CONTROL1 + 0x80" }, + { NV4097_SET_TEXTURE_FILTER + 0x80 , "NV4097_SET_TEXTURE_FILTER + 0x80" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x80 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x80" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x80 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x80" }, + { NV4097_SET_TEXTURE_OFFSET + 0xa0 , "NV4097_SET_TEXTURE_OFFSET + 0xa0" }, + { NV4097_SET_TEXTURE_FORMAT + 0xa0 , "NV4097_SET_TEXTURE_FORMAT + 0xa0" }, + { NV4097_SET_TEXTURE_ADDRESS + 0xa0 , "NV4097_SET_TEXTURE_ADDRESS + 0xa0" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0xa0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xa0" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0xa0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xa0" }, + { NV4097_SET_TEXTURE_FILTER + 0xa0 , "NV4097_SET_TEXTURE_FILTER + 0xa0" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xa0" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xa0" }, + { NV4097_SET_TEXTURE_OFFSET + 0xc0 , "NV4097_SET_TEXTURE_OFFSET + 0xc0" }, + { NV4097_SET_TEXTURE_FORMAT + 0xc0 , "NV4097_SET_TEXTURE_FORMAT + 0xc0" }, + { NV4097_SET_TEXTURE_ADDRESS + 0xc0 , "NV4097_SET_TEXTURE_ADDRESS + 0xc0" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0xc0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xc0" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0xc0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xc0" }, + { NV4097_SET_TEXTURE_FILTER + 0xc0 , "NV4097_SET_TEXTURE_FILTER + 0xc0" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xc0" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xc0" }, + { NV4097_SET_TEXTURE_OFFSET + 0xe0 , "NV4097_SET_TEXTURE_OFFSET + 0xe0" }, + { NV4097_SET_TEXTURE_FORMAT + 0xe0 , "NV4097_SET_TEXTURE_FORMAT + 0xe0" }, + { NV4097_SET_TEXTURE_ADDRESS + 0xe0 , "NV4097_SET_TEXTURE_ADDRESS + 0xe0" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0xe0 , "NV4097_SET_TEXTURE_CONTROL0 + 0xe0" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0xe0 , "NV4097_SET_TEXTURE_CONTROL1 + 0xe0" }, + { NV4097_SET_TEXTURE_FILTER + 0xe0 , "NV4097_SET_TEXTURE_FILTER + 0xe0" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0xe0" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0xe0" }, + { NV4097_SET_TEXTURE_OFFSET + 0x100 , "NV4097_SET_TEXTURE_OFFSET + 0x100" }, + { NV4097_SET_TEXTURE_FORMAT + 0x100 , "NV4097_SET_TEXTURE_FORMAT + 0x100" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x100 , "NV4097_SET_TEXTURE_ADDRESS + 0x100" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x100 , "NV4097_SET_TEXTURE_CONTROL0 + 0x100" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x100 , "NV4097_SET_TEXTURE_CONTROL1 + 0x100" }, + { NV4097_SET_TEXTURE_FILTER + 0x100 , "NV4097_SET_TEXTURE_FILTER + 0x100" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x100 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x100" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x100 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x100" }, + { NV4097_SET_TEXTURE_OFFSET + 0x120 , "NV4097_SET_TEXTURE_OFFSET + 0x120" }, + { NV4097_SET_TEXTURE_FORMAT + 0x120 , "NV4097_SET_TEXTURE_FORMAT + 0x120" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x120 , "NV4097_SET_TEXTURE_ADDRESS + 0x120" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x120 , "NV4097_SET_TEXTURE_CONTROL0 + 0x120" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x120 , "NV4097_SET_TEXTURE_CONTROL1 + 0x120" }, + { NV4097_SET_TEXTURE_FILTER + 0x120 , "NV4097_SET_TEXTURE_FILTER + 0x120" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x120 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x120" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x120 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x120" }, + { NV4097_SET_TEXTURE_OFFSET + 0x140 , "NV4097_SET_TEXTURE_OFFSET + 0x140" }, + { NV4097_SET_TEXTURE_FORMAT + 0x140 , "NV4097_SET_TEXTURE_FORMAT + 0x140" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x140 , "NV4097_SET_TEXTURE_ADDRESS + 0x140" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x140 , "NV4097_SET_TEXTURE_CONTROL0 + 0x140" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x140 , "NV4097_SET_TEXTURE_CONTROL1 + 0x140" }, + { NV4097_SET_TEXTURE_FILTER + 0x140 , "NV4097_SET_TEXTURE_FILTER + 0x140" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x140 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x140" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x140 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x140" }, + { NV4097_SET_TEXTURE_OFFSET + 0x160 , "NV4097_SET_TEXTURE_OFFSET + 0x160" }, + { NV4097_SET_TEXTURE_FORMAT + 0x160 , "NV4097_SET_TEXTURE_FORMAT + 0x160" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x160 , "NV4097_SET_TEXTURE_ADDRESS + 0x160" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x160 , "NV4097_SET_TEXTURE_CONTROL0 + 0x160" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x160 , "NV4097_SET_TEXTURE_CONTROL1 + 0x160" }, + { NV4097_SET_TEXTURE_FILTER + 0x160 , "NV4097_SET_TEXTURE_FILTER + 0x160" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x160 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x160" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x160 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x160" }, + { NV4097_SET_TEXTURE_OFFSET + 0x180 , "NV4097_SET_TEXTURE_OFFSET + 0x180" }, + { NV4097_SET_TEXTURE_FORMAT + 0x180 , "NV4097_SET_TEXTURE_FORMAT + 0x180" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x180 , "NV4097_SET_TEXTURE_ADDRESS + 0x180" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x180 , "NV4097_SET_TEXTURE_CONTROL0 + 0x180" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x180 , "NV4097_SET_TEXTURE_CONTROL1 + 0x180" }, + { NV4097_SET_TEXTURE_FILTER + 0x180 , "NV4097_SET_TEXTURE_FILTER + 0x180" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x180 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x180" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x180 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x180" }, + { NV4097_SET_TEXTURE_OFFSET + 0x1a0 , "NV4097_SET_TEXTURE_OFFSET + 0x1a0" }, + { NV4097_SET_TEXTURE_FORMAT + 0x1a0 , "NV4097_SET_TEXTURE_FORMAT + 0x1a0" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x1a0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1a0" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x1a0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1a0" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x1a0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1a0" }, + { NV4097_SET_TEXTURE_FILTER + 0x1a0 , "NV4097_SET_TEXTURE_FILTER + 0x1a0" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1a0" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1a0" }, + { NV4097_SET_TEXTURE_OFFSET + 0x1c0 , "NV4097_SET_TEXTURE_OFFSET + 0x1c0" }, + { NV4097_SET_TEXTURE_FORMAT + 0x1c0 , "NV4097_SET_TEXTURE_FORMAT + 0x1c0" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x1c0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1c0" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x1c0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1c0" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x1c0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1c0" }, + { NV4097_SET_TEXTURE_FILTER + 0x1c0 , "NV4097_SET_TEXTURE_FILTER + 0x1c0" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1c0" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1c0" }, + { NV4097_SET_TEXTURE_OFFSET + 0x1e0 , "NV4097_SET_TEXTURE_OFFSET + 0x1e0" }, + { NV4097_SET_TEXTURE_FORMAT + 0x1e0 , "NV4097_SET_TEXTURE_FORMAT + 0x1e0" }, + { NV4097_SET_TEXTURE_ADDRESS + 0x1e0 , "NV4097_SET_TEXTURE_ADDRESS + 0x1e0" }, + { NV4097_SET_TEXTURE_CONTROL0 + 0x1e0 , "NV4097_SET_TEXTURE_CONTROL0 + 0x1e0" }, + { NV4097_SET_TEXTURE_CONTROL1 + 0x1e0 , "NV4097_SET_TEXTURE_CONTROL1 + 0x1e0" }, + { NV4097_SET_TEXTURE_FILTER + 0x1e0 , "NV4097_SET_TEXTURE_FILTER + 0x1e0" }, + { NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0 , "NV4097_SET_TEXTURE_IMAGE_RECT + 0x1e0" }, + { NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0 , "NV4097_SET_TEXTURE_BORDER_COLOR + 0x1e0" }, + { NV4097_SET_VERTEX_DATA4F_M , "NV4097_SET_VERTEX_DATA4F_M" }, + { NV4097_SET_VERTEX_DATA4F_M + 4 , "NV4097_SET_VERTEX_DATA4F_M + 4" }, + { NV4097_SET_VERTEX_DATA4F_M + 8 , "NV4097_SET_VERTEX_DATA4F_M + 8" }, + { NV4097_SET_VERTEX_DATA4F_M + 12 , "NV4097_SET_VERTEX_DATA4F_M + 12" }, + { NV4097_SET_VERTEX_DATA4F_M + 16 , "NV4097_SET_VERTEX_DATA4F_M + 16" }, + { NV4097_SET_VERTEX_DATA4F_M + 20 , "NV4097_SET_VERTEX_DATA4F_M + 20" }, + { NV4097_SET_VERTEX_DATA4F_M + 24 , "NV4097_SET_VERTEX_DATA4F_M + 24" }, + { NV4097_SET_VERTEX_DATA4F_M + 28 , "NV4097_SET_VERTEX_DATA4F_M + 28" }, + { NV4097_SET_VERTEX_DATA4F_M + 32 , "NV4097_SET_VERTEX_DATA4F_M + 32" }, + { NV4097_SET_VERTEX_DATA4F_M + 36 , "NV4097_SET_VERTEX_DATA4F_M + 36" }, + { NV4097_SET_VERTEX_DATA4F_M + 40 , "NV4097_SET_VERTEX_DATA4F_M + 40" }, + { NV4097_SET_VERTEX_DATA4F_M + 44 , "NV4097_SET_VERTEX_DATA4F_M + 44" }, + { NV4097_SET_VERTEX_DATA4F_M + 48 , "NV4097_SET_VERTEX_DATA4F_M + 48" }, + { NV4097_SET_VERTEX_DATA4F_M + 52 , "NV4097_SET_VERTEX_DATA4F_M + 52" }, + { NV4097_SET_VERTEX_DATA4F_M + 56 , "NV4097_SET_VERTEX_DATA4F_M + 56" }, + { NV4097_SET_VERTEX_DATA4F_M + 60 , "NV4097_SET_VERTEX_DATA4F_M + 60" }, + { NV4097_SET_VERTEX_DATA4F_M + 64 , "NV4097_SET_VERTEX_DATA4F_M + 64" }, + { NV4097_SET_VERTEX_DATA4F_M + 68 , "NV4097_SET_VERTEX_DATA4F_M + 68" }, + { NV4097_SET_VERTEX_DATA4F_M + 72 , "NV4097_SET_VERTEX_DATA4F_M + 72" }, + { NV4097_SET_VERTEX_DATA4F_M + 76 , "NV4097_SET_VERTEX_DATA4F_M + 76" }, + { NV4097_SET_VERTEX_DATA4F_M + 80 , "NV4097_SET_VERTEX_DATA4F_M + 80" }, + { NV4097_SET_VERTEX_DATA4F_M + 84 , "NV4097_SET_VERTEX_DATA4F_M + 84" }, + { NV4097_SET_VERTEX_DATA4F_M + 88 , "NV4097_SET_VERTEX_DATA4F_M + 88" }, + { NV4097_SET_VERTEX_DATA4F_M + 92 , "NV4097_SET_VERTEX_DATA4F_M + 92" }, + { NV4097_SET_VERTEX_DATA4F_M + 96 , "NV4097_SET_VERTEX_DATA4F_M + 96" }, + { NV4097_SET_VERTEX_DATA4F_M + 100 , "NV4097_SET_VERTEX_DATA4F_M + 100" }, + { NV4097_SET_VERTEX_DATA4F_M + 104 , "NV4097_SET_VERTEX_DATA4F_M + 104" }, + { NV4097_SET_VERTEX_DATA4F_M + 108 , "NV4097_SET_VERTEX_DATA4F_M + 108" }, + { NV4097_SET_VERTEX_DATA4F_M + 112 , "NV4097_SET_VERTEX_DATA4F_M + 112" }, + { NV4097_SET_VERTEX_DATA4F_M + 116 , "NV4097_SET_VERTEX_DATA4F_M + 116" }, + { NV4097_SET_VERTEX_DATA4F_M + 120 , "NV4097_SET_VERTEX_DATA4F_M + 120" }, + { NV4097_SET_VERTEX_DATA4F_M + 124 , "NV4097_SET_VERTEX_DATA4F_M + 124" }, + { NV4097_SET_VERTEX_DATA4F_M + 128 , "NV4097_SET_VERTEX_DATA4F_M + 128" }, + { NV4097_SET_VERTEX_DATA4F_M + 132 , "NV4097_SET_VERTEX_DATA4F_M + 132" }, + { NV4097_SET_VERTEX_DATA4F_M + 136 , "NV4097_SET_VERTEX_DATA4F_M + 136" }, + { NV4097_SET_VERTEX_DATA4F_M + 140 , "NV4097_SET_VERTEX_DATA4F_M + 140" }, + { NV4097_SET_VERTEX_DATA4F_M + 144 , "NV4097_SET_VERTEX_DATA4F_M + 144" }, + { NV4097_SET_VERTEX_DATA4F_M + 148 , "NV4097_SET_VERTEX_DATA4F_M + 148" }, + { NV4097_SET_VERTEX_DATA4F_M + 152 , "NV4097_SET_VERTEX_DATA4F_M + 152" }, + { NV4097_SET_VERTEX_DATA4F_M + 156 , "NV4097_SET_VERTEX_DATA4F_M + 156" }, + { NV4097_SET_VERTEX_DATA4F_M + 160 , "NV4097_SET_VERTEX_DATA4F_M + 160" }, + { NV4097_SET_VERTEX_DATA4F_M + 164 , "NV4097_SET_VERTEX_DATA4F_M + 164" }, + { NV4097_SET_VERTEX_DATA4F_M + 168 , "NV4097_SET_VERTEX_DATA4F_M + 168" }, + { NV4097_SET_VERTEX_DATA4F_M + 172 , "NV4097_SET_VERTEX_DATA4F_M + 172" }, + { NV4097_SET_VERTEX_DATA4F_M + 176 , "NV4097_SET_VERTEX_DATA4F_M + 176" }, + { NV4097_SET_VERTEX_DATA4F_M + 180 , "NV4097_SET_VERTEX_DATA4F_M + 180" }, + { NV4097_SET_VERTEX_DATA4F_M + 184 , "NV4097_SET_VERTEX_DATA4F_M + 184" }, + { NV4097_SET_VERTEX_DATA4F_M + 188 , "NV4097_SET_VERTEX_DATA4F_M + 188" }, + { NV4097_SET_VERTEX_DATA4F_M + 192 , "NV4097_SET_VERTEX_DATA4F_M + 192" }, + { NV4097_SET_VERTEX_DATA4F_M + 196 , "NV4097_SET_VERTEX_DATA4F_M + 196" }, + { NV4097_SET_VERTEX_DATA4F_M + 200 , "NV4097_SET_VERTEX_DATA4F_M + 200" }, + { NV4097_SET_VERTEX_DATA4F_M + 204 , "NV4097_SET_VERTEX_DATA4F_M + 204" }, + { NV4097_SET_VERTEX_DATA4F_M + 208 , "NV4097_SET_VERTEX_DATA4F_M + 208" }, + { NV4097_SET_VERTEX_DATA4F_M + 212 , "NV4097_SET_VERTEX_DATA4F_M + 212" }, + { NV4097_SET_VERTEX_DATA4F_M + 216 , "NV4097_SET_VERTEX_DATA4F_M + 216" }, + { NV4097_SET_VERTEX_DATA4F_M + 220 , "NV4097_SET_VERTEX_DATA4F_M + 220" }, + { NV4097_SET_VERTEX_DATA4F_M + 224 , "NV4097_SET_VERTEX_DATA4F_M + 224" }, + { NV4097_SET_VERTEX_DATA4F_M + 228 , "NV4097_SET_VERTEX_DATA4F_M + 228" }, + { NV4097_SET_VERTEX_DATA4F_M + 232 , "NV4097_SET_VERTEX_DATA4F_M + 232" }, + { NV4097_SET_VERTEX_DATA4F_M + 236 , "NV4097_SET_VERTEX_DATA4F_M + 236" }, + { NV4097_SET_VERTEX_DATA4F_M + 240 , "NV4097_SET_VERTEX_DATA4F_M + 240" }, + { NV4097_SET_VERTEX_DATA4F_M + 244 , "NV4097_SET_VERTEX_DATA4F_M + 244" }, + { NV4097_SET_VERTEX_DATA4F_M + 248 , "NV4097_SET_VERTEX_DATA4F_M + 248" }, + { NV4097_SET_VERTEX_DATA4F_M + 252 , "NV4097_SET_VERTEX_DATA4F_M + 252" }, + { NV4097_SET_SHADER_CONTROL , "NV4097_SET_SHADER_CONTROL" }, + { NV4097_SET_SEMAPHORE_OFFSET , "NV4097_SET_SEMAPHORE_OFFSET" }, + { NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE , "NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE" }, + { NV4097_TEXTURE_READ_SEMAPHORE_RELEASE , "NV4097_TEXTURE_READ_SEMAPHORE_RELEASE" }, + { NV4097_SET_ZMIN_MAX_CONTROL , "NV4097_SET_ZMIN_MAX_CONTROL" }, + { NV4097_SET_ANTI_ALIASING_CONTROL , "NV4097_SET_ANTI_ALIASING_CONTROL" }, + { NV4097_SET_ZCULL_EN , "NV4097_SET_ZCULL_EN" }, + { NV4097_SET_SHADER_WINDOW , "NV4097_SET_SHADER_WINDOW" }, + { NV4097_SET_ZSTENCIL_CLEAR_VALUE , "NV4097_SET_ZSTENCIL_CLEAR_VALUE" }, + { NV4097_SET_COLOR_CLEAR_VALUE , "NV4097_SET_COLOR_CLEAR_VALUE" }, + { NV4097_CLEAR_SURFACE , "NV4097_CLEAR_SURFACE" }, + { NV4097_SET_RESTART_INDEX_ENABLE , "NV4097_SET_RESTART_INDEX_ENABLE" }, + { NV4097_SET_RESTART_INDEX , "NV4097_SET_RESTART_INDEX" }, + { NV4097_SET_LINE_STIPPLE , "NV4097_SET_LINE_STIPPLE" }, + { NV4097_SET_LINE_STIPPLE_PATTERN , "NV4097_SET_LINE_STIPPLE_PATTERN" }, + { NV4097_SET_VERTEX_DATA1F_M , "NV4097_SET_VERTEX_DATA1F_M" }, + { NV4097_SET_VERTEX_DATA1F_M + 4 , "NV4097_SET_VERTEX_DATA1F_M + 4" }, + { NV4097_SET_VERTEX_DATA1F_M + 8 , "NV4097_SET_VERTEX_DATA1F_M + 8" }, + { NV4097_SET_VERTEX_DATA1F_M + 12 , "NV4097_SET_VERTEX_DATA1F_M + 12" }, + { NV4097_SET_VERTEX_DATA1F_M + 16 , "NV4097_SET_VERTEX_DATA1F_M + 16" }, + { NV4097_SET_VERTEX_DATA1F_M + 20 , "NV4097_SET_VERTEX_DATA1F_M + 20" }, + { NV4097_SET_VERTEX_DATA1F_M + 24 , "NV4097_SET_VERTEX_DATA1F_M + 24" }, + { NV4097_SET_VERTEX_DATA1F_M + 28 , "NV4097_SET_VERTEX_DATA1F_M + 28" }, + { NV4097_SET_VERTEX_DATA1F_M + 32 , "NV4097_SET_VERTEX_DATA1F_M + 32" }, + { NV4097_SET_VERTEX_DATA1F_M + 36 , "NV4097_SET_VERTEX_DATA1F_M + 36" }, + { NV4097_SET_VERTEX_DATA1F_M + 40 , "NV4097_SET_VERTEX_DATA1F_M + 40" }, + { NV4097_SET_VERTEX_DATA1F_M + 44 , "NV4097_SET_VERTEX_DATA1F_M + 44" }, + { NV4097_SET_VERTEX_DATA1F_M + 48 , "NV4097_SET_VERTEX_DATA1F_M + 48" }, + { NV4097_SET_VERTEX_DATA1F_M + 52 , "NV4097_SET_VERTEX_DATA1F_M + 52" }, + { NV4097_SET_VERTEX_DATA1F_M + 56 , "NV4097_SET_VERTEX_DATA1F_M + 56" }, + { NV4097_SET_VERTEX_DATA1F_M + 60 , "NV4097_SET_VERTEX_DATA1F_M + 60" }, + { NV4097_SET_RENDER_ENABLE , "NV4097_SET_RENDER_ENABLE" }, + { NV4097_SET_TRANSFORM_PROGRAM_LOAD , "NV4097_SET_TRANSFORM_PROGRAM_LOAD" }, + { NV4097_SET_TRANSFORM_PROGRAM_START , "NV4097_SET_TRANSFORM_PROGRAM_START" }, + { NV4097_SET_ZCULL_CONTROL0 , "NV4097_SET_ZCULL_CONTROL0" }, + { NV4097_SET_ZCULL_CONTROL1 , "NV4097_SET_ZCULL_CONTROL1" }, + { NV4097_SET_SCULL_CONTROL , "NV4097_SET_SCULL_CONTROL" }, + { NV4097_SET_POINT_SIZE , "NV4097_SET_POINT_SIZE" }, + { NV4097_SET_POINT_PARAMS_ENABLE , "NV4097_SET_POINT_PARAMS_ENABLE" }, + { NV4097_SET_POINT_SPRITE_CONTROL , "NV4097_SET_POINT_SPRITE_CONTROL" }, + { NV4097_SET_TRANSFORM_TIMEOUT , "NV4097_SET_TRANSFORM_TIMEOUT" }, + { NV4097_SET_TRANSFORM_CONSTANT_LOAD , "NV4097_SET_TRANSFORM_CONSTANT_LOAD" }, + { NV4097_SET_FREQUENCY_DIVIDER_OPERATION , "NV4097_SET_FREQUENCY_DIVIDER_OPERATION" }, + { NV4097_INVALIDATE_L2 , "NV4097_INVALIDATE_L2" }, { NV4097_SET_TRANSFORM_BRANCH_BITS, "NV4097_SET_TRANSFORM_BRANCH_BITS" } }; diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index 1be0f3fc7c..4e3827df55 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -353,7 +353,7 @@ std::string GLVertexDecompilerThread::BuildCode() { "tc6", true, "dst_reg13", "", false }, { "tc7", true, "dst_reg14", "", false }, { "tc8", true, "dst_reg15", "", false }, - { "tc9", true, "dst_reg6", "", false } + { "tc9", true, "dst_reg6", "", false } // In this line, dst_reg6 is correct since dst_reg goes from 0 to 15. }; std::string f; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index f7b40be108..5b4caf1fe3 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1524,7 +1524,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - // Anti aliasing + // Anti-aliasing case NV4097_SET_ANTI_ALIASING_CONTROL: { // TODO: diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 11b572560e..467389aeeb 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -206,12 +206,14 @@ void GameViewer::DClick(wxListEvent& event) Emu.Stop(); Emu.GetVFS().Init(path); std::string local_path; - if(Emu.GetVFS().GetDevice(path, local_path) && !Emu.BootGame(local_path)) - { + if (Emu.GetVFS().GetDevice(path, local_path) && !Emu.BootGame(local_path)) { LOG_ERROR(HLE, "Boot error: elf not found! [%s]", path.c_str()); return; } - Emu.Run(); + + if (Ini.HLEAlwaysStart.GetValue() && Emu.IsReady()) { + Emu.Run(); + } } void GameViewer::RightClick(wxListEvent& event) diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 8fe3b05371..c7d1eebe06 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -40,10 +40,8 @@ enum IDs id_tools_compiler, id_tools_memory_viewer, id_tools_rsx_debugger, - id_tools_fnid_generator, id_help_about, id_update_dbg, - id_boot_game_and_run, }; wxString GetPaneName() @@ -69,11 +67,10 @@ MainFrame::MainFrame() wxMenu* menu_boot = new wxMenu(); menubar->Append(menu_boot, "Boot"); + menu_boot->Append(id_boot_elf, "Boot ELF / SELF file"); menu_boot->Append(id_boot_game, "Boot game"); - menu_boot->Append(id_boot_game_and_run, "Boot game and start"); - menu_boot->Append(id_install_pkg, "Install PKG"); menu_boot->AppendSeparator(); - menu_boot->Append(id_boot_elf, "Boot (S)ELF"); + menu_boot->Append(id_install_pkg, "Install PKG"); wxMenu* menu_sys = new wxMenu(); menubar->Append(menu_sys, "System"); @@ -113,10 +110,9 @@ MainFrame::MainFrame() AddPane(m_debugger_frame, "Debugger", wxAUI_DOCK_RIGHT); // Events - Bind(wxEVT_MENU, &MainFrame::BootGame, this, id_boot_game); - Bind(wxEVT_MENU, &MainFrame::BootGameAndRun, this, id_boot_game_and_run); - Bind(wxEVT_MENU, &MainFrame::InstallPkg, this, id_install_pkg); Bind(wxEVT_MENU, &MainFrame::BootElf, this, id_boot_elf); + Bind(wxEVT_MENU, &MainFrame::BootGame, this, id_boot_game); + Bind(wxEVT_MENU, &MainFrame::InstallPkg, this, id_install_pkg); Bind(wxEVT_MENU, &MainFrame::Pause, this, id_sys_pause); Bind(wxEVT_MENU, &MainFrame::Stop, this, id_sys_stop); @@ -201,40 +197,6 @@ void MainFrame::BootGame(wxCommandEvent& WXUNUSED(event)) } } -void MainFrame::BootGameAndRun(wxCommandEvent& WXUNUSED(event)) -{ - bool stopped = false; - - if (Emu.IsRunning()) - { - Emu.Pause(); - stopped = true; - } - - wxDirDialog ctrl(this, L"Select game folder", wxEmptyString); - - if (ctrl.ShowModal() == wxID_CANCEL) - { - if (stopped) Emu.Resume(); - return; - } - - Emu.Stop(); - - if (Emu.BootGame(ctrl.GetPath().ToStdString())) - { - LOG_SUCCESS(HLE, "Game: boot done."); - } - else - { - LOG_ERROR(HLE, "PS3 executable not found in selected folder (%s)", ctrl.GetPath().wx_str()); - } - - if (Emu.IsReady()) - { - Emu.Run(); - } -} void MainFrame::InstallPkg(wxCommandEvent& WXUNUSED(event)) { bool stopped = false; @@ -299,7 +261,6 @@ void MainFrame::BootElf(wxCommandEvent& WXUNUSED(event)) LOG_NOTICE(HLE, "(S)ELF: booting..."); Emu.Stop(); - Emu.SetPath(fmt::ToUTF8(ctrl.GetPath())); Emu.Load(); diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index 523f107c98..b41bd0d1c9 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -276,7 +276,7 @@ public: HLESaveTTY.Load(false); HLEExitOnStop.Load(false); HLELogLvl.Load(3); - HLEAlwaysStart.Load(false); + HLEAlwaysStart.Load(true); // Language SysLanguage.Load(1); From afe493f18716387974364355115df55c741e3cd4 Mon Sep 17 00:00:00 2001 From: Peter Tissen Date: Wed, 23 Jul 2014 19:51:41 +0200 Subject: [PATCH 236/499] use a include directory relatie to the lists file --- rpcs3/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 896689a1e5..59f146c6dc 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) -set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/rpcs3/cmake_modules") +set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules") include(cotire) project(rpcs3) From 36895606171a05e65d50167d78ac612a3f074e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Wed, 23 Jul 2014 20:36:57 +0200 Subject: [PATCH 237/499] Minor fixes and changes --- rpcs3/Crypto/unedat.cpp | 4 ++-- rpcs3/Crypto/unedat.h | 3 +-- rpcs3/Emu/GS/GL/GLFragmentProgram.cpp | 2 +- rpcs3/Emu/GS/RSXThread.cpp | 9 ++++++--- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index d1ffc77fb2..f103f15cff 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -156,9 +156,9 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, int length = 0; int compression_end = 0; - if ((edat->flags & EDAT_FLAG_0x3C) != 0 || (edat->flags & EDAT_FLAG_0x3D) != 0) + if ((edat->flags & EDAT_FLAG_0x04) != 0) { - LOG_ERROR(LOADER, "EDAT: Flag 0x3C/0x3D EDAT files are unsupported yet"); + LOG_ERROR(LOADER, "EDAT: Flag 0x04 is not yet supported"); return -1; } diff --git a/rpcs3/Crypto/unedat.h b/rpcs3/Crypto/unedat.h index 4d60949790..990f8deca3 100644 --- a/rpcs3/Crypto/unedat.h +++ b/rpcs3/Crypto/unedat.h @@ -5,12 +5,11 @@ #define SDAT_FLAG 0x01000000 #define EDAT_COMPRESSED_FLAG 0x00000001 #define EDAT_FLAG_0x02 0x00000002 +#define EDAT_FLAG_0x04 0x00000004 #define EDAT_ENCRYPTED_KEY_FLAG 0x00000008 #define EDAT_FLAG_0x10 0x00000010 #define EDAT_FLAG_0x20 0x00000020 #define EDAT_DEBUG_DATA_FLAG 0x80000000 -#define EDAT_FLAG_0x3C 0x0000003C -#define EDAT_FLAG_0x3D 0x0000003D typedef struct { diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp index a3f43a09dc..bfb96fd2bb 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp @@ -248,7 +248,7 @@ template std::string GLFragmentDecompilerThread::GetSRC(T src) std::string GLFragmentDecompilerThread::BuildCode() { //main += fmt::Format("\tgl_FragColor = %c0;\n", m_ctrl & 0x40 ? 'r' : 'h'); - static const std::pair table[] = + const std::pair table[] = { { "ocol0", m_ctrl & 0x40 ? "r0" : "h0" }, { "ocol1", m_ctrl & 0x40 ? "r2" : "h2" }, diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 5b4caf1fe3..3da32d10cf 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1969,8 +1969,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV309E_SET_FORMAT: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV309E_SET_FORMAT: %x", ARGS(0)); + const u8 height = ARGS(0) >> 24; + const u8 width = ARGS(0) >> 16; + const u8 format = ARGS(0); + const u32 offset = ARGS(1); + LOG_WARNING(RSX, "NV309E_SET_FORMAT: Format:0x%x, Width:%d, Height:%d, Offset:0x%x", format, width, height, offset); } break; @@ -2041,7 +2044,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV308A_SET_CONTEXT_SURFACE: { if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_SURFACE: %x", ARGS(0)); + LOG_WARNING(RSX, "NV308A_SET_CONTEXT_SURFACE: %x", ARGS(0)); } break; From 3d184b3a594df6dd11e02b61b3017b5f232e6797 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 24 Jul 2014 01:51:57 +0400 Subject: [PATCH 238/499] cellSyncQueuePush implemented --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 65 ++++++++++++++++++++++++- rpcs3/Emu/SysCalls/Modules/cellSync.h | 3 +- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 5778c67dc3..dfab32dbd5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -360,7 +360,7 @@ s32 cellSyncRwmTryWrite(mem_ptr_t rwm, u32 buffer_addr) s32 cellSyncQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth) { - cellSync->Todo("cellSyncQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x)", queue.GetAddr(), buffer_addr, size, depth); + cellSync->Log("cellSyncQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x)", queue.GetAddr(), buffer_addr, size, depth); if (!queue) { @@ -390,8 +390,69 @@ s32 cellSyncQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 s32 cellSyncQueuePush(mem_ptr_t queue, u32 buffer_addr) { - cellSync->Todo("cellSyncQueuePush(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + cellSync->Log("cellSyncQueuePush(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + if (!queue || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32) + { + return CELL_SYNC_ERROR_ALIGN; + } + + const u32 size = (u32)queue->m_size; + const u32 depth = (u32)queue->m_depth; + if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) + { + cellSync->Error("cellSyncQueuePush(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); + Emu.Pause(); + } + + u32 position; + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + const u32 v1 = (u32)new_queue.m_v1; + const u32 v2 = (u32)new_queue.m_v2; + // prx: compare 5th u8 with zero (repeat if not zero) + // prx: compare (second u32 (u24) + first u8) with depth (repeat if greater or equal) + if ((v2 >> 24) || ((v2 & 0xffffff) + (v1 >> 24)) >= depth) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("cellSyncQueuePush(queue_addr=0x%x) aborted", queue.GetAddr()); + return CELL_OK; + } + continue; + } + + // prx: extract first u32 (u24) (-> position), calculate (position + 1) % depth, insert it back + // prx: insert 1 in 5th u8 + // prx: extract second u32 (u24), increase it, insert it back + position = (v1 & 0xffffff); + new_queue.m_v1 = (v1 & 0xff000000) | ((position + 1) % depth); + new_queue.m_v2 = (1 << 24) | ((v2 & 0xffffff) + 1); + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } + + // prx: memcpy(position * m_size + m_addr, buffer_addr, m_size), sync + memcpy(Memory + (u64)queue->m_addr + position * size, Memory + buffer_addr, size); + + // prx: atomically insert 0 in 5th u8 + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + new_queue.m_v2 &= 0xffffff; // TODO: use InterlockedAnd() or something + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 22afb9bebf..a1ef8fdf39 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -72,7 +72,8 @@ static_assert(sizeof(CellSyncRwm) == 16, "CellSyncBarrier: wrong size"); struct CellSyncQueue { - be_t m_value; + be_t m_v1; + be_t m_v2; be_t m_size; be_t m_depth; be_t m_addr; From c28747aef66e8c92bac0482451940a601d3c6ac4 Mon Sep 17 00:00:00 2001 From: Dante38490 Date: Thu, 24 Jul 2014 02:54:08 +0200 Subject: [PATCH 239/499] Version change to 0.0.0.5 After create Tag 0.0.0.5 --- rpcs3/stdafx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index cfb31964fc..0b5741fae2 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -66,4 +66,4 @@ typedef int64_t s64; #include "Utilities/IdManager.h" #define _PRGNAME_ "RPCS3" -#define _PRGVER_ "0.0.0.4" +#define _PRGVER_ "0.0.0.5" From 74e18dc8c925c56f3fe8c269dc396a6504514cf3 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 24 Jul 2014 19:02:04 +0400 Subject: [PATCH 240/499] cellSyncQueuePop... cellSyncQueueSize, cellSyncQueueClear implemented --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 149 +++++++++++++++++++++++- 1 file changed, 145 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index dfab32dbd5..39a6facdc0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -465,8 +465,69 @@ s32 cellSyncQueueTryPush(mem_ptr_t queue, u32 buffer_addr) s32 cellSyncQueuePop(mem_ptr_t queue, u32 buffer_addr) { - cellSync->Todo("cellSyncQueuePop(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + cellSync->Log("cellSyncQueuePop(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + if (!queue || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32) + { + return CELL_SYNC_ERROR_ALIGN; + } + + const u32 size = (u32)queue->m_size; + const u32 depth = (u32)queue->m_depth; + if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) + { + cellSync->Error("cellSyncQueuePop(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); + Emu.Pause(); + } + + u32 position; + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + const u32 v1 = (u32)new_queue.m_v1; + const u32 v2 = (u32)new_queue.m_v2; + // prx: extract first u8, repeat if not zero + // prx: extract second u32 (u24), subtract 5th u8, compare with zero, repeat if less or equal + if ((v1 >> 24) || ((v2 & 0xffffff) <= (v2 >> 24))) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("cellSyncQueuePop(queue_addr=0x%x) aborted", queue.GetAddr()); + return CELL_OK; + } + continue; + } + + // prx: insert 1 in first u8 + // prx: extract first u32 (u24), add depth, subtract second u32 (u24), calculate (% depth), save to position + // prx: extract second u32 (u24), decrease it, insert it back + new_queue.m_v1 = 0x1000000 | v1; + position = ((v1 & 0xffffff) + depth - (v2 & 0xffffff)) % depth; + new_queue.m_v2 = (v2 & 0xff000000) | ((v2 & 0xffffff) - 1); + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } + + // prx: (sync), memcpy(buffer_addr, position * m_size + m_addr, m_size) + memcpy(Memory + buffer_addr, Memory + (u64)queue->m_addr + position * size, size); + + // prx: atomically insert 0 in first u8 + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + new_queue.m_v1 &= 0xffffff; // TODO: use InterlockedAnd() or something + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } return CELL_OK; } @@ -493,15 +554,95 @@ s32 cellSyncQueueTryPeek(mem_ptr_t queue, u32 buffer_addr) s32 cellSyncQueueSize(mem_ptr_t queue) { - cellSync->Todo("cellSyncQueueSize(queue_addr=0x%x)", queue.GetAddr()); + cellSync->Log("cellSyncQueueSize(queue_addr=0x%x)", queue.GetAddr()); - return CELL_OK; + if (!queue) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32) + { + return CELL_SYNC_ERROR_ALIGN; + } + + const u32 count = (u32)queue->m_v2 & 0xffffff; + const u32 depth = (u32)queue->m_depth; + if (((u32)queue->m_v1 & 0xffffff) > depth || count > depth) + { + cellSync->Error("cellSyncQueueSize(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); + Emu.Pause(); + } + + return count; } s32 cellSyncQueueClear(mem_ptr_t queue) { - cellSync->Todo("cellSyncQueueClear(queue_addr=0x%x)", queue.GetAddr()); + cellSync->Log("cellSyncQueueClear(queue_addr=0x%x)", queue.GetAddr()); + if (!queue) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32) + { + return CELL_SYNC_ERROR_ALIGN; + } + + const u32 depth = (u32)queue->m_depth; + if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) + { + cellSync->Error("cellSyncQueueSize(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); + Emu.Pause(); + } + + // TODO: optimize if possible + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + const u32 v1 = (u32)new_queue.m_v1; + // prx: extract first u8, repeat if not zero, insert 1 + if (v1 >> 24) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("cellSyncQueueClear(queue_addr=0x%x) aborted (I)", queue.GetAddr()); + return CELL_OK; + } + continue; + } + new_queue.m_v1 = v1 | 0x1000000; + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } + + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + const u32 v2 = (u32)new_queue.m_v2; + // prx: extract 5th u8, repeat if not zero, insert 1 + if (v2 >> 24) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("cellSyncQueueClear(queue_addr=0x%x) aborted (II)", queue.GetAddr()); + return CELL_OK; + } + continue; + } + new_queue.m_v2 = v2 | 0x1000000; + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } + + queue->m_data() = 0; + InterlockedCompareExchange(&queue->m_data(), 0, 0); return CELL_OK; } From 9d0bd55ec0edafd781c05dc1af90db8549055fc8 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 25 Jul 2014 12:35:37 +0400 Subject: [PATCH 241/499] cellSyncQueueTryPush, cellSyncQueueTryPop --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 100 +++++++++++++++++++++++- 1 file changed, 98 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 39a6facdc0..ded18c4d2d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -458,8 +458,56 @@ s32 cellSyncQueuePush(mem_ptr_t queue, u32 buffer_addr) s32 cellSyncQueueTryPush(mem_ptr_t queue, u32 buffer_addr) { - cellSync->Todo("cellSyncQueueTryPush(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + cellSync->Log("cellSyncQueueTryPush(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + if (!queue || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32) + { + return CELL_SYNC_ERROR_ALIGN; + } + + const u32 size = (u32)queue->m_size; + const u32 depth = (u32)queue->m_depth; + if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) + { + cellSync->Error("cellSyncQueueTryPush(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); + Emu.Pause(); + } + + u32 position; + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + const u32 v1 = (u32)new_queue.m_v1; + const u32 v2 = (u32)new_queue.m_v2; + if ((v2 >> 24) || ((v2 & 0xffffff) + (v1 >> 24)) >= depth) + { + return CELL_SYNC_ERROR_BUSY; + } + + position = (v1 & 0xffffff); + new_queue.m_v1 = (v1 & 0xff000000) | ((position + 1) % depth); + new_queue.m_v2 = (1 << 24) | ((v2 & 0xffffff) + 1); + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } + + memcpy(Memory + (u64)queue->m_addr + position * size, Memory + buffer_addr, size); + + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + new_queue.m_v2 &= 0xffffff; // TODO: use InterlockedAnd() or something + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } return CELL_OK; } @@ -533,8 +581,56 @@ s32 cellSyncQueuePop(mem_ptr_t queue, u32 buffer_addr) s32 cellSyncQueueTryPop(mem_ptr_t queue, u32 buffer_addr) { - cellSync->Todo("cellSyncQueueTryPop(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + cellSync->Log("cellSyncQueueTryPop(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + if (!queue || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32) + { + return CELL_SYNC_ERROR_ALIGN; + } + + const u32 size = (u32)queue->m_size; + const u32 depth = (u32)queue->m_depth; + if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) + { + cellSync->Error("cellSyncQueueTryPop(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); + Emu.Pause(); + } + + u32 position; + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + const u32 v1 = (u32)new_queue.m_v1; + const u32 v2 = (u32)new_queue.m_v2; + if ((v1 >> 24) || ((v2 & 0xffffff) <= (v2 >> 24))) + { + return CELL_SYNC_ERROR_BUSY; + } + + new_queue.m_v1 = 0x1000000 | v1; + position = ((v1 & 0xffffff) + depth - (v2 & 0xffffff)) % depth; + new_queue.m_v2 = (v2 & 0xff000000) | ((v2 & 0xffffff) - 1); + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } + + memcpy(Memory + buffer_addr, Memory + (u64)queue->m_addr + position * size, size); + + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + new_queue.m_v1 &= 0xffffff; // TODO: use InterlockedAnd() or something + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } return CELL_OK; } From 1ac0ae817229690936a70b24d2e916ecacda2f08 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 25 Jul 2014 13:27:27 +0800 Subject: [PATCH 242/499] RSX : add missing NV4097 method names --- rpcs3/Emu/GS/GCM.h | 13 +++++++++++-- rpcs3/Emu/GS/RSXThread.cpp | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 386c86b644..dce0407ba9 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -555,7 +555,6 @@ enum NV4097_SET_VERTEX_ATTRIB_INPUT_MASK = 0x00001ff0, NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK = 0x00001ff4, NV4097_SET_TRANSFORM_BRANCH_BITS = 0x00001ff8, - NV4097_SET_FLIP = 0x0003fead, // NV03_MEMORY_TO_MEMORY_FORMAT (NV0039) NV0039_SET_OBJECT = 0x00002000, @@ -1326,7 +1325,17 @@ static const std::string GetMethodName(const u32 id) { NV4097_SET_TRANSFORM_TIMEOUT , "NV4097_SET_TRANSFORM_TIMEOUT" }, { NV4097_SET_TRANSFORM_CONSTANT_LOAD , "NV4097_SET_TRANSFORM_CONSTANT_LOAD" }, { NV4097_SET_FREQUENCY_DIVIDER_OPERATION , "NV4097_SET_FREQUENCY_DIVIDER_OPERATION" }, - { NV4097_INVALIDATE_L2 , "NV4097_INVALIDATE_L2" }, + { NV4097_SET_ATTRIB_COLOR, "NV4097_SET_ATTRIB_COLOR" }, + { NV4097_SET_ATTRIB_TEX_COORD, "NV4097_SET_ATTRIB_TEX_COORD" }, + { NV4097_SET_ATTRIB_TEX_COORD_EX, "NV4097_SET_ATTRIB_TEX_COORD_EX" }, + { NV4097_SET_ATTRIB_UCLIP0, "NV4097_SET_ATTRIB_UCLIP0" }, + { NV4097_SET_ATTRIB_UCLIP1, "NV4097_SET_ATTRIB_UCLIP1" }, + { NV4097_INVALIDATE_L2, "NV4097_INVALIDATE_L2" }, + { NV4097_SET_REDUCE_DST_COLOR, "NV4097_SET_REDUCE_DST_COLOR" }, + { NV4097_SET_NO_PARANOID_TEXTURE_FETCHES, "NV4097_SET_NO_PARANOID_TEXTURE_FETCHES" }, + { NV4097_SET_SHADER_PACKER, "NV4097_SET_SHADER_PACKER" }, + { NV4097_SET_VERTEX_ATTRIB_INPUT_MASK, "NV4097_SET_VERTEX_ATTRIB_INPUT_MASK" }, + { NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK, "NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK" }, { NV4097_SET_TRANSFORM_BRANCH_BITS, "NV4097_SET_TRANSFORM_BRANCH_BITS" } }; diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 3da32d10cf..ba340d38b7 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -275,7 +275,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 break; // NV4097 - case NV4097_SET_FLIP: + case 0x0003fead: //if(cmd == 0xfeadffff) { Flip(); From 2a16f50f7f4df4dbe81513fa3df96ef29dd66034 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 25 Jul 2014 16:43:38 +0800 Subject: [PATCH 243/499] Fix flip control gcm sample --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 34d5f43399..12d517536d 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -896,6 +896,7 @@ void GLGSRender::ExecCMD() Enable(m_set_alpha_test, GL_ALPHA_TEST); Enable(m_set_depth_bounds_test, GL_DEPTH_BOUNDS_TEST_EXT); Enable(m_set_blend || m_set_blend_mrt1 || m_set_blend_mrt2 || m_set_blend_mrt3, GL_BLEND); + Enable(m_set_scissor_horizontal && m_set_scissor_vertical, GL_SCISSOR_TEST); Enable(m_set_logic_op, GL_LOGIC_OP); Enable(m_set_cull_face, GL_CULL_FACE); Enable(m_set_dither, GL_DITHER); @@ -955,6 +956,12 @@ void GLGSRender::ExecCMD() checkForGlError("glLogicOp"); } + if (m_set_scissor_horizontal && m_set_scissor_vertical) + { + glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); + checkForGlError("glScissor"); + } + if(m_set_two_sided_stencil_test_enable) { if(m_set_stencil_fail && m_set_stencil_zfail && m_set_stencil_zpass) From c6cac4b205c99ea13f914e1acdd63d1cc59958be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Fri, 25 Jul 2014 21:03:08 +0200 Subject: [PATCH 244/499] Cleanup in RSXThread::DoCmd Some RSX commands added. Moved unused commands to the bottom of the big switch/case. --- rpcs3/Emu/GS/GCM.h | 9 +- rpcs3/Emu/GS/RSXThread.cpp | 648 +++++++++++-------------------------- rpcs3/Emu/GS/RSXThread.h | 2 + 3 files changed, 193 insertions(+), 466 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index dce0407ba9..af6d412e96 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -190,8 +190,13 @@ enum // GPU Class Handles enum { - CELL_GCM_CONTEXT_SURFACE2D = 0x313371C3, - CELL_GCM_CONTEXT_SWIZZLE2D = 0x31337A73, + CELL_GCM_CONTEXT_DMA_MEMORY_FRAME_BUFFER = 0xFEED0000, // Local memory + CELL_GCM_CONTEXT_DMA_MEMORY_HOST_BUFFER = 0xFEED0001, // Main memory + CELL_GCM_CONTEXT_SURFACE2D = 0x313371C3, + CELL_GCM_CONTEXT_SWIZZLE2D = 0x31337A73, + CELL_GCM_CONTEXT_DMA_TO_MEMORY_GET_REPORT = 0x66626660, + CELL_GCM_CONTEXT_DMA_REPORT_LOCATION_MAIN = 0xBAD68000, + CELL_GCM_CONTEXT_DMA_NOTIFY_MAIN_0 = 0x6660420F, }; struct CellGcmControl diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index ba340d38b7..b1f377b4f7 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -323,60 +323,26 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 break; // Texture - case_16(NV4097_SET_TEXTURE_FORMAT, 0x20) : - { - // Done in methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] - } - break; - + case_16(NV4097_SET_TEXTURE_FORMAT, 0x20): case_16(NV4097_SET_TEXTURE_OFFSET, 0x20): - { - // Done in methodRegisters[NV4097_SET_TEXTURE_OFFSET + (m_index*32)] - } - break; - - case_16(NV4097_SET_TEXTURE_FILTER, 0x20) : - { - // Done in methodRegisters[NV4097_SET_TEXTURE_FILTER + (m_index*32)] - } - break; - - case_16(NV4097_SET_TEXTURE_ADDRESS, 0x20) : - { - // Done in methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index * 32)] - } - break; - - case_16(NV4097_SET_TEXTURE_IMAGE_RECT, 32) : - { - // Done in methodRegisters[NV4097_SET_TEXTURE_IMAGE_RECT + (m_index*32)] - } - break; - - case_16(NV4097_SET_TEXTURE_BORDER_COLOR, 0x20) : - { - // Done in methodRegisters[NV4097_SET_TEXTURE_BORDER_COLOR + (m_index*32)] - } - break; + case_16(NV4097_SET_TEXTURE_FILTER, 0x20): + case_16(NV4097_SET_TEXTURE_ADDRESS, 0x20): + case_16(NV4097_SET_TEXTURE_IMAGE_RECT, 32): + case_16(NV4097_SET_TEXTURE_BORDER_COLOR, 0x20): case_16(NV4097_SET_TEXTURE_CONTROL0, 0x20): + case_16(NV4097_SET_TEXTURE_CONTROL1, 0x20): { - // Done in methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*32)] + // Done using methodRegisters in RSXTexture.cpp } break; - case_16(NV4097_SET_TEXTURE_CONTROL1, 0x20) : - { - // Done in methodRegisters[NV4097_SET_TEXTURE_CONTROL1 + (m_index*32)] - } - break; - - case_16(NV4097_SET_TEX_COORD_CONTROL, 4) : + case_16(NV4097_SET_TEX_COORD_CONTROL, 4): { LOG_WARNING(RSX, "NV4097_SET_TEX_COORD_CONTROL"); } break; - case_16(NV4097_SET_TEXTURE_CONTROL3, 4) : + case_16(NV4097_SET_TEXTURE_CONTROL3, 4): { RSXTexture& tex = m_textures[index]; const u32 a0 = ARGS(0); @@ -450,7 +416,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case_16(NV4097_SET_VERTEX_DATA_ARRAY_OFFSET, 4) : + case_16(NV4097_SET_VERTEX_DATA_ARRAY_OFFSET, 4): { const u32 addr = GetAddress(ARGS(0) & 0x7fffffff, ARGS(0) >> 31); CMD_LOG("num=%d, addr=0x%x", index, addr); @@ -459,7 +425,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case_16(NV4097_SET_VERTEX_DATA_ARRAY_FORMAT, 4) : + case_16(NV4097_SET_VERTEX_DATA_ARRAY_FORMAT, 4): { const u32 a0 = ARGS(0); u16 frequency = a0 >> 16; @@ -632,7 +598,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_REDUCE_DST_COLOR: { if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_REDUCE_DST_COLOR: 0x % x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_REDUCE_DST_COLOR: 0x%x", ARGS(0)); } break; @@ -714,8 +680,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_CLIP_MAX: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_CLIP_MAX: %x", ARGS(0)); + const u32 a0 = ARGS(0); + + m_set_clip = true; + m_clip_max = (float&)a0; + + CMD_LOG("clip_max=%.01f", m_clip_max); } break; @@ -845,13 +815,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV4097_CLEAR_REPORT_VALUE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_CLEAR_REPORT_VALUE: %x", ARGS(0)); - } - break; - case NV4097_SET_CLEAR_RECT_HORIZONTAL: { if (ARGS(0)) @@ -1527,11 +1490,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 // Anti-aliasing case NV4097_SET_ANTI_ALIASING_CONTROL: { - // TODO: - // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((enable) | ((alphaToCoverage) << 4) | ((alphaToOne) << 8) | ((sampleMask) << 16)); \ + const u32 a0 = ARGS(0); - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_ANTI_ALIASING_CONTROL: %x", ARGS(0)); + const u8 enable = a0 & 0xf; + const u8 alphaToCoverage = (a0 >> 4) & 0xf; + const u8 alphaToOne = (a0 >> 8) & 0xf; + const u16 sampleMask = a0 >> 16; + + LOG_WARNING(RSX, "TODO: NV4097_SET_ANTI_ALIASING_CONTROL: %x", a0); } break; @@ -1626,13 +1592,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 break; case NV4097_ZCULL_SYNC: - { + { if (ARGS(0)) LOG_WARNING(RSX, "NV4097_ZCULL_SYNC: %x", ARGS(0)); } break; - // Reporting + // Reports case NV4097_GET_REPORT: { const u32 a0 = ARGS(0); @@ -1667,6 +1633,24 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; + case NV4097_CLEAR_REPORT_VALUE: + { + const u32 type = ARGS(0); + + switch(type) + { + case CELL_GCM_ZPASS_PIXEL_CNT: + LOG_WARNING(RSX, "TODO: NV4097_CLEAR_REPORT_VALUE: ZPASS_PIXEL_CNT"); + break; + case CELL_GCM_ZCULL_STATS: + LOG_WARNING(RSX, "TODO: NV4097_CLEAR_REPORT_VALUE: ZCULL_STATS"); + break; + default: + LOG_ERROR(RSX, "NV4097_CLEAR_REPORT_VALUE: Bad type: %d", type); + } + } + break; + // Clip Plane case NV4097_SET_USER_CLIP_PLANE_CONTROL: { @@ -1702,40 +1686,20 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 // Zmin_max case NV4097_SET_ZMIN_MAX_CONTROL: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_ZMIN_MAX_CONTROL: %x", ARGS(0)); - - // TODO: - // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((cullNearFarEnable) | ((zclampEnable) << 4) | ((cullIgnoreW)<<8)); + const u8 cullNearFarEnable = ARGS(0) & 0xf; + const u8 zclampEnable = (ARGS(0) >> 4) & 0xf; + const u8 cullIgnoreW = (ARGS(0) >> 8) & 0xf; + LOG_WARNING(RSX, "TODO: NV4097_SET_ZMIN_MAX_CONTROL: cullNearFarEnable=%d, zclampEnable=%d, cullIgnoreW=%d", + cullNearFarEnable, zclampEnable, cullIgnoreW); } break; // Windows Clipping case NV4097_SET_WINDOW_OFFSET: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_WINDOW_OFFSET: %x", ARGS(0)); - } - break; - - case NV4097_SET_WINDOW_CLIP_TYPE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_TYPE: %x", ARGS(0)); - } - break; - - case NV4097_SET_WINDOW_CLIP_HORIZONTAL: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_HORIZONTAL: %x", ARGS(0)); - } - break; - - case NV4097_SET_WINDOW_CLIP_VERTICAL: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_VERTICAL: %x", ARGS(0)); + const u16 x = ARGS(0); + const u16 y = ARGS(0) >> 16; + LOG_WARNING(RSX, "TODO: NV4097_SET_WINDOW_OFFSET: x=%d, y=%d", x, y); } break; @@ -1747,68 +1711,30 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_RENDER_ENABLE: { - // TODO: - // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((offset) | ((mode) << 24)); \ - - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_RENDER_ENABLE: %x", ARGS(0)); + const u32 offset = ARGS(0) & 0xffffff; + const u8 mode = ARGS(0) >> 24; + LOG_WARNING(RSX, "NV4097_SET_RENDER_ENABLE: Offset=%06x, Mode=%x", offset, mode); } break; case NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: %x", ARGS(0)); + const u32 enable = ARGS(0); + LOG_WARNING(RSX, "TODO: NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: %d", enable); } break; - case 0x000002c8: - case 0x000002d0: - case 0x000002d8: - case 0x000002e0: - case 0x000002e8: - case 0x000002f0: - case 0x000002f8: - break; - // NV0039 - case NV0039_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV0039_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - - case NV0039_SET_CONTEXT_DMA_BUFFER_IN: // [E : RSXThread]: TODO: unknown/illegal method [0x00002184](0xfeed0000, 0xfeed0000) + case NV0039_SET_CONTEXT_DMA_BUFFER_IN: { const u32 srcContext = ARGS(0); const u32 dstContext = ARGS(1); - - if (srcContext == 0xfeed0000 && dstContext == 0xfeed0000) - { - } - else - { - LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_IN: TODO: srcContext=0x%x, dstContext=0x%x", srcContext, dstContext); - } + m_context_dma_buffer_in_src = srcContext; + m_context_dma_buffer_in_dst = dstContext; } break; - case NV0039_SET_CONTEXT_DMA_BUFFER_OUT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_OUT: %x", ARGS(0)); - } - break; - - case NV0039_OFFSET_IN: // [E : RSXThread]: TODO: unknown/illegal method [0x0000230c](0x0, 0xb00400, 0x0, 0x0, 0x384000, 0x1, 0x101, 0x0) + case NV0039_OFFSET_IN: { const u32 inOffset = ARGS(0); const u32 outOffset = ARGS(1); @@ -1816,12 +1742,16 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 const u32 outPitch = ARGS(3); const u32 lineLength = ARGS(4); const u32 lineCount = ARGS(5); - const u32 format = ARGS(6); - const u8 outFormat = (format >> 8); - const u8 inFormat = (format >> 0); + const u8 outFormat = (ARGS(6) >> 8); + const u8 inFormat = (ARGS(6) >> 0); const u32 notify = ARGS(7); - if (lineCount == 1 && !inPitch && !outPitch && !notify && format == 0x101) + // The existing GCM commands use only the value 0x1 for inFormat and outFormat + if (inFormat != 0x01 || outFormat != 0x01) { + LOG_ERROR(RSX, "NV0039_OFFSET_IN: Unsupported format: inFormat=%d, outFormat=%d", inFormat, outFormat); + } + + if (lineCount == 1 && !inPitch && !outPitch && !notify) { memcpy(&Memory[GetAddress(outOffset, 0)], &Memory[GetAddress(inOffset, 0)], lineLength); } @@ -1854,34 +1784,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV0039_PITCH_OUT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_PITCH_OUT: %x", ARGS(0)); - } - break; - - case NV0039_LINE_LENGTH_IN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_LINE_LENGTH_IN: %x", ARGS(0)); - } - break; - - case NV0039_LINE_COUNT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_LINE_COUNT: %x", ARGS(0)); - } - break; - - case NV0039_FORMAT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_FORMAT: %x", ARGS(0)); - } - break; - case NV0039_BUFFER_NOTIFY: { if (ARGS(0)) @@ -1890,33 +1792,18 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 break; // NV3062 - case NV3062_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV3062_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - - case NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: %x", ARGS(0)); - } - break; - case NV3062_SET_CONTEXT_DMA_IMAGE_DESTIN: { m_context_dma_img_dst = ARGS(0); } break; + case NV3062_SET_OFFSET_DESTIN: + { + m_dst_offset = ARGS(0); + } + break; + case NV3062_SET_COLOR_FORMAT: { m_color_format = ARGS(0); @@ -1925,41 +1812,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV3062_SET_PITCH: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_PITCH: %x", ARGS(0)); - } - break; - - case NV3062_SET_OFFSET_SOURCE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_OFFSET_SOURCE: %x", ARGS(0)); - } - break; - - case NV3062_SET_OFFSET_DESTIN: - { - m_dst_offset = ARGS(0); - } - break; - // NV309E - case NV309E_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV309E_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV309E_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV309E_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - case NV309E_SET_CONTEXT_DMA_IMAGE: { if (ARGS(0)) @@ -1977,98 +1830,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV309E_SET_OFFSET: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV309E_SET_OFFSET: %x", ARGS(0)); - } - break; - // NV308A - case NV308A_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_COLOR_KEY: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_COLOR_KEY: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_CLIP_RECTANGLE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_CLIP_RECTANGLE: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_PATTERN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_PATTERN: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_ROP: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_ROP: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_BETA1: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_BETA1: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_BETA4: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_BETA4: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_SURFACE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_SURFACE: %x", ARGS(0)); - } - break; - - case NV308A_SET_COLOR_CONVERSION: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_COLOR_CONVERSION: %x", ARGS(0)); - } - break; - - case NV308A_SET_OPERATION: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_OPERATION: %x", ARGS(0)); - } - break; - - case NV308A_SET_COLOR_FORMAT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_COLOR_FORMAT: %x", ARGS(0)); - } - break; - case NV308A_POINT: { const u32 a0 = ARGS(0); @@ -2077,20 +1839,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV308A_SIZE_OUT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SIZE_OUT: %x", ARGS(0)); - } - break; - - case NV308A_SIZE_IN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SIZE_IN: %x", ARGS(0)); - } - break; - case NV308A_COLOR: { RSXTransformConstant c; @@ -2135,54 +1883,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 break; // NV3089 - case NV3089_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV3089_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - case NV3089_SET_CONTEXT_DMA_IMAGE: { m_context_dma_img_src = ARGS(0); } break; - case NV3089_SET_CONTEXT_PATTERN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_PATTERN: %x", ARGS(0)); - } - break; - - case NV3089_SET_CONTEXT_ROP: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_ROP: %x", ARGS(0)); - } - break; - - case NV3089_SET_CONTEXT_BETA1: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_BETA1: %x", ARGS(0)); - } - break; - - case NV3089_SET_CONTEXT_BETA4: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_BETA4: %x", ARGS(0)); - } - break; - case NV3089_SET_CONTEXT_SURFACE: { if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D) @@ -2192,80 +1898,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV3089_SET_COLOR_CONVERSION: - { - m_color_conv = ARGS(0); - m_color_conv_fmt = ARGS(1); - m_color_conv_op = ARGS(2); - m_color_conv_in_x = ARGS(3); - m_color_conv_in_y = ARGS(3) >> 16; - m_color_conv_in_w = ARGS(4); - m_color_conv_in_h = ARGS(4) >> 16; - m_color_conv_out_x = ARGS(5); - m_color_conv_out_y = ARGS(5) >> 16; - m_color_conv_out_w = ARGS(6); - m_color_conv_out_h = ARGS(6) >> 16; - m_color_conv_dsdx = ARGS(7); - m_color_conv_dtdy = ARGS(8); - } - break; - - case NV3089_SET_COLOR_FORMAT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_COLOR_FORMAT: %x", ARGS(0)); - } - break; - - case NV3089_SET_OPERATION: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_OPERATION: %x", ARGS(0)); - } - break; - - case NV3089_CLIP_POINT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_CLIP_POINT: %x", ARGS(0)); - } - break; - - case NV3089_CLIP_SIZE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_CLIP_SIZE: %x", ARGS(0)); - } - break; - - case NV3089_IMAGE_OUT_POINT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_OUT_POINT: %x", ARGS(0)); - } - break; - - case NV3089_IMAGE_OUT_SIZE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_OUT_SIZE: %x", ARGS(0)); - } - break; - - case NV3089_DS_DX: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_DS_DX: %x", ARGS(0)); - } - break; - - case NV3089_DT_DY: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_DT_DY: %x", ARGS(0)); - } - break; - case NV3089_IMAGE_IN_SIZE: { u16 width = ARGS(0); @@ -2294,25 +1926,22 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } } break; - - case NV3089_IMAGE_IN_FORMAT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_IN_FORMAT: %x", ARGS(0)); - } - break; - case NV3089_IMAGE_IN_OFFSET: + case NV3089_SET_COLOR_CONVERSION: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_IN_OFFSET: %x", ARGS(0)); - } - break; - - case NV3089_IMAGE_IN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_IN: %x", ARGS(0)); + m_color_conv = ARGS(0); + m_color_conv_fmt = ARGS(1); + m_color_conv_op = ARGS(2); + m_color_conv_in_x = ARGS(3); + m_color_conv_in_y = ARGS(3) >> 16; + m_color_conv_in_w = ARGS(4); + m_color_conv_in_h = ARGS(4) >> 16; + m_color_conv_out_x = ARGS(5); + m_color_conv_out_y = ARGS(5) >> 16; + m_color_conv_out_w = ARGS(6); + m_color_conv_out_h = ARGS(6) >> 16; + m_color_conv_dsdx = ARGS(7); + m_color_conv_dtdy = ARGS(8); } break; @@ -2324,14 +1953,105 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; + // Note: What is this? NV4097 offsets? + case 0x000002c8: + case 0x000002d0: + case 0x000002d8: + case 0x000002e0: + case 0x000002e8: + case 0x000002f0: + case 0x000002f8: + break; + + // The existing GCM commands don't use any of the following NV4097 / NV0039 / NV3062 / NV309E / NV308A / NV3089 methods + case NV4097_SET_WINDOW_CLIP_TYPE: + case NV4097_SET_WINDOW_CLIP_HORIZONTAL: + case NV4097_SET_WINDOW_CLIP_VERTICAL: + { + LOG_WARNING(RSX, "Unused NV4097 method 0x%x detected!", cmd); + } + break; + + case NV0039_SET_CONTEXT_DMA_BUFFER_OUT: + case NV0039_PITCH_OUT: + case NV0039_LINE_LENGTH_IN: + case NV0039_LINE_COUNT: + case NV0039_FORMAT: + case NV0039_SET_OBJECT: + case NV0039_SET_CONTEXT_DMA_NOTIFIES: + { + LOG_WARNING(RSX, "Unused NV0039 method 0x%x detected!", cmd); + } + break; + + case NV3062_SET_OBJECT: + case NV3062_SET_CONTEXT_DMA_NOTIFIES: + case NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: + case NV3062_SET_PITCH: + case NV3062_SET_OFFSET_SOURCE: + { + LOG_WARNING(RSX, "Unused NV3062 method 0x%x detected!", cmd); + } + break; + + case NV308A_SET_OBJECT: + case NV308A_SET_CONTEXT_DMA_NOTIFIES: + case NV308A_SET_CONTEXT_COLOR_KEY: + case NV308A_SET_CONTEXT_CLIP_RECTANGLE: + case NV308A_SET_CONTEXT_PATTERN: + case NV308A_SET_CONTEXT_ROP: + case NV308A_SET_CONTEXT_BETA1: + case NV308A_SET_CONTEXT_BETA4: + case NV308A_SET_CONTEXT_SURFACE: + case NV308A_SET_COLOR_CONVERSION: + case NV308A_SET_OPERATION: + case NV308A_SET_COLOR_FORMAT: + case NV308A_SIZE_OUT: + case NV308A_SIZE_IN: + { + LOG_WARNING(RSX, "Unused NV308A method 0x%x detected!", cmd); + } + break; + + case NV309E_SET_OBJECT: + case NV309E_SET_CONTEXT_DMA_NOTIFIES: + case NV309E_SET_OFFSET: + { + LOG_WARNING(RSX, "Unused NV309E method 0x%x detected!", cmd); + } + break; + + case NV3089_SET_OBJECT: + case NV3089_SET_CONTEXT_DMA_NOTIFIES: + case NV3089_SET_CONTEXT_PATTERN: + case NV3089_SET_CONTEXT_ROP: + case NV3089_SET_CONTEXT_BETA1: + case NV3089_SET_CONTEXT_BETA4: + case NV3089_SET_COLOR_FORMAT: + case NV3089_SET_OPERATION: + case NV3089_CLIP_POINT: + case NV3089_CLIP_SIZE: + case NV3089_IMAGE_OUT_POINT: + case NV3089_IMAGE_OUT_SIZE: + case NV3089_DS_DX: + case NV3089_DT_DY: + case NV3089_IMAGE_IN_FORMAT: + case NV3089_IMAGE_IN_OFFSET: + case NV3089_IMAGE_IN: + { + LOG_WARNING(RSX, "Unused NV3089 method 0x%x detected!", cmd); + } + break; + default: { std::string log = GetMethodName(cmd); log += "("; - for(u32 i=0; i Date: Fri, 25 Jul 2014 20:57:48 +0800 Subject: [PATCH 245/499] RSX: checkForGlError for Stencil/Depth/Color misc --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 69 +++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 12d517536d..b47564be29 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -15,11 +15,7 @@ #endif gcmBuffer gcmBuffers[8]; -GLuint g_flip_tex; -GLuint g_depth_tex; -GLuint g_pbo[6]; - - +GLuint g_flip_tex, g_depth_tex, g_pbo[6]; int last_width = 0, last_height = 0, last_depth_format = 0; GLenum g_last_gl_error = GL_NO_ERROR; @@ -40,7 +36,6 @@ void printGlError(GLenum err, const std::string& situation) #define checkForGlError(x) /*x*/ #endif - GLGSRender::GLGSRender() : GSRender() , m_frame(nullptr) @@ -303,6 +298,7 @@ void GLGSRender::InitVertexData() l = m_program.GetLocation("scaleOffsetMat"); glUniformMatrix4fv(l, 1, false, scaleOffsetMat); + checkForGlError("glUniformMatrix4fv"); } void GLGSRender::InitFragmentData() @@ -319,7 +315,7 @@ void GLGSRender::InitFragmentData() u32 id = c.id - m_cur_shader_prog->offset; - //ConLog.Warning("fc%u[0x%x - 0x%x] = (%f, %f, %f, %f)", id, c.id, m_cur_shader_prog->offset, c.x, c.y, c.z, c.w); + //LOG_WARNING(RSX,"fc%u[0x%x - 0x%x] = (%f, %f, %f, %f)", id, c.id, m_cur_shader_prog->offset, c.x, c.y, c.z, c.w); const std::string name = fmt::Format("fc%u", id); const int l = m_program.GetLocation(name); @@ -464,28 +460,31 @@ void GLGSRender::WriteDepthBuffer() u32 address = GetAddress(m_surface_offset_z, m_context_dma_z - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad depth address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); + LOG_WARNING(RSX, "Bad depth buffer address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); return; } glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[5]); + checkForGlError("WriteDepthBuffer(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_DYNAMIC_READ); + checkForGlError("WriteDepthBuffer(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); - checkForGlError("WriteDepthBuffer(): glReadPixels(GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE)"); + checkForGlError("WriteDepthBuffer(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteDepthBuffer(): glUnmapBuffer"); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + checkForGlError("WriteDepthBuffer(): glBindBuffer"); glBindTexture(GL_TEXTURE_2D, g_depth_tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, RSXThread::m_buffer_width, RSXThread::m_buffer_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &Memory[address]); - checkForGlError("glTexImage2D"); + checkForGlError("WriteDepthBuffer(): glTexImage2D"); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); - checkForGlError("glGetTexImage"); - + checkForGlError("WriteDepthBuffer(): glGetTexImage"); } void GLGSRender::WriteColorBufferA() @@ -498,23 +497,27 @@ void GLGSRender::WriteColorBufferA() u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad color buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); + LOG_ERROR(RSX, "Bad color buffer A address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); return; } glReadBuffer(GL_COLOR_ATTACHMENT0); checkForGlError("WriteColorBufferA(): glReadBuffer(GL_COLOR_ATTACHMENT0)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[0]); + checkForGlError("WriteColorBufferA(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + checkForGlError("WriteColorBufferA(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColorBufferA(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferA(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteColorBufferA(): glUnmapBuffer"); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + checkForGlError("WriteColorBufferA(): glBindBuffer"); } void GLGSRender::WriteColorBufferB() @@ -527,23 +530,27 @@ void GLGSRender::WriteColorBufferB() u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad color buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); + LOG_ERROR(RSX, "Bad color buffer B address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); return; } glReadBuffer(GL_COLOR_ATTACHMENT1); checkForGlError("WriteColorBufferB(): glReadBuffer(GL_COLOR_ATTACHMENT1)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[1]); + checkForGlError("WriteColorBufferB(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + checkForGlError("WriteColorBufferB(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColorBufferB(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferB(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteColorBufferB(): glUnmapBuffer"); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + checkForGlError("WriteColorBufferB(): glBindBuffer"); } @@ -557,23 +564,27 @@ void GLGSRender::WriteColorBufferC() u32 address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad color buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); + LOG_ERROR(RSX, "Bad color buffer C address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); return; } glReadBuffer(GL_COLOR_ATTACHMENT2); checkForGlError("WriteColorBufferC(): glReadBuffer(GL_COLOR_ATTACHMENT2)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[2]); + checkForGlError("WriteColorBufferC(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + checkForGlError("WriteColorBufferC(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColorBufferC(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferC(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteColorBufferC(): glUnmapBuffer"); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + checkForGlError("WriteColorBufferC(): glBindBuffer"); } void GLGSRender::WriteColorBufferD() @@ -586,24 +597,28 @@ void GLGSRender::WriteColorBufferD() u32 address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad color buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); + LOG_ERROR(RSX, "Bad color buffer D address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); return; } glReadBuffer(GL_COLOR_ATTACHMENT3); checkForGlError("WriteColorBufferD(): glReadBuffer(GL_COLOR_ATTACHMENT3)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[3]); + checkForGlError("WriteColorBufferD(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + checkForGlError("WriteColorBufferD(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColorBufferD(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferD(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteColorBufferD(): glUnmapBuffer"); + } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - + checkForGlError("WriteColorBufferD(): glBindBuffer"); } void GLGSRender::WriteColorBuffers() @@ -670,6 +685,7 @@ void GLGSRender::OnInitThread() glEnable(GL_TEXTURE_2D); glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); + glGenTextures(1, &g_depth_tex); glGenTextures(1, &g_flip_tex); glGenBuffers(6, g_pbo); @@ -691,6 +707,9 @@ void GLGSRender::OnExitThread() glDeleteTextures(1, &g_depth_tex); glDeleteBuffers(6, g_pbo); + glDisable(GL_TEXTURE_2D); + glDisable(GL_VERTEX_PROGRAM_POINT_SIZE); + m_program.Delete(); m_rbo.Delete(); m_fbo.Delete(); @@ -824,6 +843,8 @@ void GLGSRender::InitDrawBuffers() glDrawBuffers(4, draw_buffers); break; + checkForGlError("glDrawBuffers"); + default: LOG_ERROR(RSX, "Bad surface color target: %d", m_surface_color_target); break; @@ -853,6 +874,7 @@ void GLGSRender::ExecCMD(u32 cmd) if (m_clear_surface_mask & 0x1) { glClearDepth(m_clear_surface_z / (float)0xffffff); + checkForGlError("glClearDepth"); f |= GL_DEPTH_BUFFER_BIT; } @@ -860,6 +882,7 @@ void GLGSRender::ExecCMD(u32 cmd) if (m_clear_surface_mask & 0x2) { glClearStencil(m_clear_surface_s); + checkForGlError("glClearStencil"); f |= GL_STENCIL_BUFFER_BIT; } @@ -871,11 +894,13 @@ void GLGSRender::ExecCMD(u32 cmd) m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f); + checkForGlError("glClearColor"); f |= GL_COLOR_BUFFER_BIT; } glClear(f); + checkForGlError("glClear"); WriteBuffers(); } @@ -1180,7 +1205,7 @@ void GLGSRender::ExecCMD() if(m_draw_array_count) { - //ConLog.Warning("glDrawArrays(%d,%d,%d)", m_draw_mode - 1, m_draw_array_first, m_draw_array_count); + //LOG_WARNING(RSX,"glDrawArrays(%d,%d,%d)", m_draw_mode - 1, m_draw_array_first, m_draw_array_count); glDrawArrays(m_draw_mode - 1, 0, m_draw_array_count); checkForGlError("glDrawArrays"); DisableVertexData(); From a7bc421137bc839378299c7928f86f7c5b303de2 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 27 Jul 2014 09:24:06 +0800 Subject: [PATCH 246/499] Regression fix https://github.com/DHrpcs3/rpcs3/issues/697 --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index b47564be29..99322ba4da 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -917,6 +917,12 @@ void GLGSRender::ExecCMD() InitDrawBuffers(); + if (m_set_color_mask) + { + glColorMask(m_color_mask_r, m_color_mask_g, m_color_mask_b, m_color_mask_a); + checkForGlError("glColorMask"); + } + Enable(m_set_depth_test, GL_DEPTH_TEST); Enable(m_set_alpha_test, GL_ALPHA_TEST); Enable(m_set_depth_bounds_test, GL_DEPTH_BOUNDS_TEST_EXT); From 726760a38e70b5b50a82d21e39c0e62f3ff3d8db Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 27 Jul 2014 22:18:53 +0800 Subject: [PATCH 247/499] RSX: detach shader when clear program buffer --- rpcs3/Emu/GS/GL/GLProgramBuffer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp b/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp index 87aacb94db..59eb82d573 100644 --- a/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp +++ b/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp @@ -117,9 +117,11 @@ void GLProgramBuffer::Clear() { for(u32 i=0; i Date: Mon, 28 Jul 2014 01:30:25 +0800 Subject: [PATCH 248/499] Stub all remaining sceNP functions --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 2503 +++++++++++++++++++++++++- 1 file changed, 2497 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 20dc321c69..43e18c437f 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -99,12 +99,6 @@ int sceNpDrmVerifyUpgradeLicense(u32 content_id_addr) return CELL_OK; } -int sceNpDrmVerifyUpgradeLicense2(u32 content_id_addr) -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - int sceNpDrmExecuteGamePurchase() { UNIMPLEMENTED_FUNC(sceNp); @@ -130,6 +124,2147 @@ int sceNpManagerGetStatus(mem32_t status) return CELL_OK; } +int sceNpManagerSubSignout() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetChildProductSkuInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicSendMessageGui() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingGetResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetFriendListEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreRecordGameData() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetDataFlagAbort() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetMatchingInvitationEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetRankingByNpId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetTicket() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingQuickMatchGUI() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingGetConnectionInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupNpId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreRecordScore() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicAddPlayersHistory() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetAccountAge() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetPsHandle() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreWaitAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetSkuUserData() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicAddBlockListEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupUserProfileWithAvatarSizeAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetRankingByRangeAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansRankingByClanIdAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreDestroyTitleCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetFriendPresenceByNpId2() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingGetCtxOpt() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingGetResultGUI() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetProductCategoryStart() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreSetPlayerCharacterId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingSetCtxOpt() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicAddFriend() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreSetTimeout() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansRankingByClanId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingAcceptInvitationGUI() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetNumOfChildCategory() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreSanitizeCommentAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingDestroyCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpProfileAbortGui() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupUserProfileWithAvatarSize() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetMessageEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetMyLanguages() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetFriendPresenceByIndex() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreInit() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingSearchJoinRoomGUI() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingKickRoomMember() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingGetConnectionFromPeerAddress() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetCategoryDescription() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetAvatarUrl() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetSkuId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetGameData() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingCreateRoomGUI() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupAbortTransaction() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetRankingByNpIdAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicSetPresence() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetProductCategoryResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicRegisterContextSensitiveHandler() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansMembersRankingByNpIdPcId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansMembersRankingByNpIdPcIdAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicSendMessageAttachment() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerSubSignin() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCustomMenuRegisterActions() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingJoinRoomGUI() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicAbortGui() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingSetRoomInfoNoLimit() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetCachedInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansMembersRankingByRangeAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetClanMessageEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingAddExtendedHandler() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerUnregisterCallback() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetTicketParam() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetMessageAttachmentEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupDestroyTitleCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupTitleStorageAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + + return CELL_OK; +} + +int sceNpBasicSetPresenceDetails2() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupInit() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerSubSigninAbortGui() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingActivateConnection() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingCreateCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetFriendPresenceByIndex2() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicRecvMessageAttachmentLoad() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingCancelPeerNetInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetProductCategoryAbort() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingGetRoomInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceDestroyProductCategory() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansMembersRankingByRange() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetCategoryName() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetContentRatingFlag() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreCreateTransactionCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingSetRoomInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupSetTimeout() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetNumOfChildProductSku() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetBlockListEntryCount() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingGetRoomMemberListLocal() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClanMemberGameData() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupPollAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingGetPeerNetInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetSkuPrice() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetCurrencyCode() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansRankingByRangeAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreCensorCommentAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreCensorComment() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerRequestTicket() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicRecvMessageCustom() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int _sceNpSysutilClientFree() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerRequestTicket2() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupTerm() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupTitleSmallStorageAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingSendInvitationGUI() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceInitProductCategory() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceSetDataFlagFinish() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetMessageAttachmentEntryCount() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetDataFlagFinish() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetProductId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetCategoryImageURL() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCustomMenuRegisterExceptionList() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingTerminateConnection() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreTerm() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceSetDataFlagStart() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingGetLocalNetInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupTitleStorage() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetPlayersHistoryEntryCount() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetEntitlementById() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingSetRoomSearchFlag() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScorePollAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetSkuDescription() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetCustomInvitationEntryCount() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpDrmProcessExitSpawn() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingCreateCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicUnregisterHandler() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetCategoryId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceDoCheckoutFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetMatchingInvitationEntryCount() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetCurrencyDecimals() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetFriendListEntryCount() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingGetRoomInfoNoLimit() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansRankingByRange() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetCurrencyInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetAccountRegion() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicRecvMessageAttachment() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupAvatarImage() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetEntitlementIdList() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreCreateTitleCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetChildCategoryInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetPlayersHistoryEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicRegisterHandler() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicAddPlayersHistoryAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetNetworkTime() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetOnlineId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpDrmVerifyUpgradeLicense2() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicSetPresenceDetails() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClanMemberGameDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetClanMessageEntryCount() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupAvatarImageAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetRankingByNpIdPcId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetRankingByNpIdPcIdAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreDestroyTransactionCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingGetConnectionStatus() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupTitleSmallStorage() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetSkuImageURL() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupCreateTitleCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpProfileCallGui() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetProductCategoryFinish() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetDataFlagState() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetCustomInvitationEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingGetPeerNetInfoResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupNpIdAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpUtilCmpNpId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingKickRoomMemberWithOpt() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupWaitAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpFriendlistCustom() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingGrantOwnership() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetGameDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} +int sceNpCommerceGetDataFlagStart() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetBoardInfoAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansMembersRankingByNpId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupUserProfile() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetEvent() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicMarkMessageAsUsed() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingGetRoomListLimitGUI() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceDestroyCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceDoCheckoutStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpDrmProcessExitSpawn2() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerRegisterCallback() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingGetConnectionFromNpId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetClansMembersRankingByNpIdAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupCreateTransactionCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetProductName() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetChatRestrictionFlag() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetCategoryInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicSendMessage() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetMessageEntryCount() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int _sceNpSysutilClientMalloc() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceGetSkuName() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreAbortTransaction() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingGetRoomSearchFlag() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpFriendlist() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreRecordScoreAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreSanitizeComment() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} +int sceNpBasicGetBlockListEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetOnlineName() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetBoardInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpFriendlistAbortGui() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpUtilCmpNpIdInOrder() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreRecordGameDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpMatchingLeaveRoom() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCustomMenuActionSetActivation() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupDestroyTransactionCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpScoreGetRankingByRange() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerceCreateCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpSignalingDeactivateConnection() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpBasicGetFriendPresenceByNpId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpManagerGetNpId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpLookupUserProfileAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansSendInvitationResponse() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansUpdateClanInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansRetrieveChallenges() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansSearchByProfile() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansGetMemberInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansCancelMembershipRequest() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansGetAutoAcceptStatus() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansTerm() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansDisbandClan() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansGetClanInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansAddBlacklistEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansLeaveClan() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansGetBlacklist() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansSendMembershipRequest() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansRemoveBlacklistEntry() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansUpdateAutoAcceptStatus() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansGetClanListByNpId() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansCancelInvitation() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansRetrieveAnnouncements() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansPostChallenge() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansGetMemberList() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansRetrievePostedChallenges() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansSendMembershipResponse() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansCreateRequest() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansInit() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansChangeMemberRole() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansCreateClan() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansKickMember() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansSearchByName() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} +int sceNpClansPostAnnouncement() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansSendInvitation() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansGetClanList() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} +int sceNpClansRemoveChallenge() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansRemovePostedChallenge() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansDestroyRequest() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansJoinClan() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansRemoveAnnouncement() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansAbortRequest() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpClansUpdateMemberInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DoCheckoutStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoListGetResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetContentRatingDescriptor() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetBGDLAvailability() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetStoreBrowseUserdata() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DestroyReq() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2Init() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryContentsStart() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DoDlListFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2Term() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2CreateSessionAbort() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DoDlListStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DestroyCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryContentsCreateReq() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2AbortReq() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoStart() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2CreateSessionFinish() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetContentInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DoProductBrowseStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoListStart() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DestroyGetCategoryContentsResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2SetBGDLAvailability() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoCreateReq() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DoProductCodeFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetContentRatingInfoFromCategoryInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DoProductBrowseFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoGetResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryContentsGetResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2CreateSessionStart() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DoCheckoutFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2InitGetCategoryContentsResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2CreateCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetPrice() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetGameSkuInfoFromGameProductInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DoProductCodeStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2InitGetProductInfoListResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoListCreateReq() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetGameProductInfoFromContentInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetContentRatingInfoFromGameProductInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2ExecuteStoreBrowse() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetGameProductInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DestroyGetProductInfoResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2DestroyGetProductInfoListResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2InitGetProductInfoResult() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryInfoFromContentInfo() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotDataVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiSlotVariable() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetMultiSlotVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetDataVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiUserVariable() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusTryAndSetVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusCreateTransactionCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusPollAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusAddAndGetVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusTerm() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiSlotVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiSlotDataStatusVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiUserDataStatusVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDestroyTitleCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusAbortTransaction() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiUserDataStatus() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusTryAndSetVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiUserDataStatusVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetDataVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDestroyTransactionCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusTryAndSetVariable() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetTimeout() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiSlotDataStatusAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiUserVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusCreateTitleCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetData() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetData() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusInit() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusAddAndGetVariable() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiUserVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetMultiSlotVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetDataVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiSlotDataStatusVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusAddAndGetVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetDataVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotVariable() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusWaitAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiSlotVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusTryAndSetVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiUserDataStatusAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotDataVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiSlotDataStatus() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiUserVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetMultiSlotVariable() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotData() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusAddAndGetVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusSetMultiSlotVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpTusGetMultiSlotVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpUtilBandwidthTestShutdown() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpUtilBandwidthTestInitStart() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + +int sceNpUtilBandwidthTestGetStatus() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + + +int sceNpUtilBandwidthTestAbort() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} + + void sceNp_init() { sceNp->AddFunc(0xbd28fdbf, sceNpInit); @@ -141,4 +2276,360 @@ void sceNp_init() sceNp->AddFunc(0xf283c143, sceNpDrmExecuteGamePurchase); sceNp->AddFunc(0xcf51864b, sceNpDrmGetTimelimit); sceNp->AddFunc(0xa7bff757, sceNpManagerGetStatus); + sceNp->AddFunc(0x000e53cc, sceNpManagerSubSignout); + sceNp->AddFunc(0x01cd9cfd, sceNpCommerceGetChildProductSkuInfo); + sceNp->AddFunc(0x01fbbc9b, sceNpBasicSendMessageGui); + sceNp->AddFunc(0x03c741a7, sceNpMatchingGetResult); + sceNp->AddFunc(0x04372385, sceNpBasicGetFriendListEntry); + sceNp->AddFunc(0x04ca5e6a, sceNpScoreRecordGameData); + sceNp->AddFunc(0x0561448b, sceNpCommerceGetDataFlagAbort); + sceNp->AddFunc(0x05af1cb8, sceNpBasicGetMatchingInvitationEntry); + sceNp->AddFunc(0x05d65dff, sceNpScoreGetRankingByNpId); + sceNp->AddFunc(0x0968aa36, sceNpManagerGetTicket); + sceNp->AddFunc(0x14497465, sceNpMatchingQuickMatchGUI); + sceNp->AddFunc(0x155de760, sceNpSignalingGetConnectionInfo); + sceNp->AddFunc(0x166dcc11, sceNpLookupNpId); + sceNp->AddFunc(0x1672170e, sceNpScoreRecordScore); + sceNp->AddFunc(0x168a3117, sceNpBasicAddPlayersHistory); + sceNp->AddFunc(0x168fcece, sceNpManagerGetAccountAge); + sceNp->AddFunc(0x16f88a6f, sceNpManagerGetPsHandle); + sceNp->AddFunc(0x1a2704f7, sceNpScoreWaitAsync); + sceNp->AddFunc(0x1a3fcb69, sceNpCommerceGetSkuUserData); + sceNp->AddFunc(0x1ae8a549, sceNpBasicAddBlockListEntry); + sceNp->AddFunc(0x1fdb3ec2, sceNpLookupUserProfileWithAvatarSizeAsync); + sceNp->AddFunc(0x21206642, sceNpScoreGetRankingByRangeAsync); + sceNp->AddFunc(0x227f8763, sceNpScoreGetClansRankingByClanIdAsync); + sceNp->AddFunc(0x259113b8, sceNpScoreDestroyTitleCtx); + sceNp->AddFunc(0x260caedd, sceNpBasicGetFriendPresenceByNpId2); + sceNp->AddFunc(0x2687a127, sceNpSignalingGetCtxOpt); + sceNp->AddFunc(0x26b3bc94, sceNpMatchingGetResultGUI); + sceNp->AddFunc(0x26f33146, sceNpCommerceGetProductCategoryStart); + sceNp->AddFunc(0x2706eaa1, sceNpScoreSetPlayerCharacterId); + sceNp->AddFunc(0x276c72b2, sceNpSignalingSetCtxOpt); + sceNp->AddFunc(0x27c69eba, sceNpBasicAddFriend); + sceNp->AddFunc(0x29dd45dc, sceNpScoreSetTimeout); + sceNp->AddFunc(0x2a76895a, sceNpScoreGetClansRankingByClanId); + sceNp->AddFunc(0x2ad7837d, sceNpMatchingAcceptInvitationGUI); + sceNp->AddFunc(0x2be41ece, sceNpCommerceGetNumOfChildCategory); + sceNp->AddFunc(0x2cd2a1af, sceNpScoreSanitizeCommentAsync); + sceNp->AddFunc(0x2e1c5068, sceNpMatchingDestroyCtx); + sceNp->AddFunc(0x2f2c6b3e, sceNpProfileAbortGui); + sceNp->AddFunc(0x2fccbfe0, sceNpLookupUserProfileWithAvatarSize); + sceNp->AddFunc(0x30d1cbde, sceNpBasicGetMessageEntry); + sceNp->AddFunc(0x32200389, sceNpManagerGetMyLanguages); + sceNp->AddFunc(0x32c78a6a, sceNpBasicGetFriendPresenceByIndex); + sceNp->AddFunc(0x32cf311f, sceNpScoreInit); + sceNp->AddFunc(0x32febb4c, sceNpMatchingSearchJoinRoomGUI); + sceNp->AddFunc(0x34cc0ca4, sceNpMatchingKickRoomMember); + sceNp->AddFunc(0x34ce82a0, sceNpSignalingGetConnectionFromPeerAddress); + sceNp->AddFunc(0x359642a6, sceNpCommerceGetCategoryDescription); + sceNp->AddFunc(0x36d0c2c5, sceNpManagerGetAvatarUrl); + sceNp->AddFunc(0x39a69619, sceNpCommerceGetSkuId); + sceNp->AddFunc(0x3b02418d, sceNpScoreGetGameData); + sceNp->AddFunc(0x3cc8588a, sceNpMatchingCreateRoomGUI); + sceNp->AddFunc(0x3d1760dc, sceNpLookupAbortTransaction); + sceNp->AddFunc(0x3db7914d, sceNpScoreGetRankingByNpIdAsync); + sceNp->AddFunc(0x3f0808aa, sceNpBasicSetPresence); + sceNp->AddFunc(0x3f195b3a, sceNpCommerceGetProductCategoryResult); + sceNp->AddFunc(0x4026eac5, sceNpBasicRegisterContextSensitiveHandler); + sceNp->AddFunc(0x41ffd4f2, sceNpScoreGetClansMembersRankingByNpIdPcId); + sceNp->AddFunc(0x433fcb30, sceNpScoreGetClansMembersRankingByNpIdPcIdAsync); + sceNp->AddFunc(0x43b989f5, sceNpBasicSendMessageAttachment); + sceNp->AddFunc(0x442381f7, sceNpManagerSubSignin); + sceNp->AddFunc(0x45f8f3aa, sceNpCustomMenuRegisterActions); + sceNp->AddFunc(0x474b7b13, sceNpMatchingJoinRoomGUI); + sceNp->AddFunc(0x481ce0e8, sceNpBasicAbortGui); + sceNp->AddFunc(0x4a18a89e, sceNpMatchingSetRoomInfoNoLimit); + sceNp->AddFunc(0x4b9efb7a, sceNpManagerGetCachedInfo); + sceNp->AddFunc(0x4d5e0670, sceNpScoreGetClansMembersRankingByRangeAsync); + sceNp->AddFunc(0x4d9c615d, sceNpBasicGetClanMessageEntry); + sceNp->AddFunc(0x50b86d94, sceNpSignalingAddExtendedHandler); + sceNp->AddFunc(0x52a6b523, sceNpManagerUnregisterCallback); + sceNp->AddFunc(0x58fa4fcd, sceNpManagerGetTicketParam); + sceNp->AddFunc(0x5d543bbe, sceNpBasicGetMessageAttachmentEntry); + sceNp->AddFunc(0x5de61626, sceNpLookupDestroyTitleCtx); + sceNp->AddFunc(0x5e117ed5, sceNpLookupTitleStorageAsync); + sceNp->AddFunc(0x5e849303, sceNpBasicSetPresenceDetails2); + sceNp->AddFunc(0x5f2d9257, sceNpLookupInit); + sceNp->AddFunc(0x60440c73, sceNpManagerSubSigninAbortGui); + sceNp->AddFunc(0x60897c38, sceNpSignalingActivateConnection); + sceNp->AddFunc(0x6356082e, sceNpSignalingCreateCtx); + sceNp->AddFunc(0x6453b27b, sceNpBasicGetFriendPresenceByIndex2); + sceNp->AddFunc(0x64a704cc, sceNpBasicRecvMessageAttachmentLoad); + sceNp->AddFunc(0x64dbb89d, sceNpSignalingCancelPeerNetInfo); + sceNp->AddFunc(0x674bb9ff, sceNpCommerceGetProductCategoryAbort); + sceNp->AddFunc(0x691f429d, sceNpMatchingGetRoomInfo); + sceNp->AddFunc(0x6cb81eb2, sceNpCommerceDestroyProductCategory); + sceNp->AddFunc(0x6d4adc3b, sceNpScoreGetClansMembersRankingByRange); + sceNp->AddFunc(0x6e2ab18b, sceNpCommerceGetCategoryName); + sceNp->AddFunc(0x6ee62ed2, sceNpManagerGetContentRatingFlag); + sceNp->AddFunc(0x6f5e8143, sceNpScoreCreateTransactionCtx); + sceNp->AddFunc(0x6f8fd267, sceNpMatchingSetRoomInfo); + sceNp->AddFunc(0x71e5af7e, sceNpLookupSetTimeout); + sceNp->AddFunc(0x7208dc08, sceNpCommerceGetNumOfChildProductSku); + sceNp->AddFunc(0x73931bd0, sceNpBasicGetBlockListEntryCount); + sceNp->AddFunc(0x73a2e36b, sceNpMatchingGetRoomMemberListLocal); + sceNp->AddFunc(0x741fbf24, sceNpScoreGetClanMemberGameData); + sceNp->AddFunc(0x7508112e, sceNpLookupPollAsync); + sceNp->AddFunc(0x75eb50cb, sceNpSignalingGetPeerNetInfo); + sceNp->AddFunc(0x78d7f9ad, sceNpCommerceGetSkuPrice); + sceNp->AddFunc(0x79225aa3, sceNpCommerceGetCurrencyCode); + sceNp->AddFunc(0x7b7e9137, sceNpScoreGetClansRankingByRangeAsync); + sceNp->AddFunc(0x7be47e61, sceNpScoreCensorCommentAsync); + sceNp->AddFunc(0x7deb244c, sceNpScoreCensorComment); + sceNp->AddFunc(0x7e2fef28, sceNpManagerRequestTicket); + sceNp->AddFunc(0x806960ab, sceNpBasicRecvMessageCustom); + sceNp->AddFunc(0x816c6a5f, _sceNpSysutilClientFree); + sceNp->AddFunc(0x8297f1ec, sceNpManagerRequestTicket2); + sceNp->AddFunc(0x8440537c, sceNpLookupTerm); + sceNp->AddFunc(0x860b1756, sceNpLookupTitleSmallStorageAsync); + sceNp->AddFunc(0x8b7bbd73, sceNpMatchingSendInvitationGUI); + sceNp->AddFunc(0x8d1d096c, sceNpCommerceInitProductCategory); + sceNp->AddFunc(0x8d4518a0, sceNpCommerceSetDataFlagFinish); + sceNp->AddFunc(0x9153bdf4, sceNpBasicGetMessageAttachmentEntryCount); + sceNp->AddFunc(0x9281e87a, sceNpCommerceGetDataFlagFinish); + sceNp->AddFunc(0x936df4aa, sceNpCommerceGetProductId); + sceNp->AddFunc(0x9452f4f8, sceNpCommerceGetCategoryImageURL); + sceNp->AddFunc(0x9458f464, sceNpCustomMenuRegisterExceptionList); + sceNp->AddFunc(0x95c7bba3, sceNpSignalingTerminateConnection); + sceNp->AddFunc(0x9851f805, sceNpScoreTerm); + sceNp->AddFunc(0x99ac9952, sceNpCommerceSetDataFlagStart); + sceNp->AddFunc(0x9ad7fbd1, sceNpSignalingGetLocalNetInfo); + sceNp->AddFunc(0x9ee9f97e, sceNpLookupTitleStorage); + sceNp->AddFunc(0xa15f35fe, sceNpBasicGetPlayersHistoryEntryCount); + sceNp->AddFunc(0xa1709abd, sceNpManagerGetEntitlementById); + sceNp->AddFunc(0xa284bd1d, sceNpMatchingSetRoomSearchFlag); + sceNp->AddFunc(0xa7a090e5, sceNpScorePollAsync); + sceNp->AddFunc(0xa85a4951, sceNpCommerceGetSkuDescription); + sceNp->AddFunc(0xa8afa7d4, sceNpBasicGetCustomInvitationEntryCount); + sceNp->AddFunc(0xaa16695f, sceNpDrmProcessExitSpawn); + sceNp->AddFunc(0xac66568c, sceNpMatchingCreateCtx); + sceNp->AddFunc(0xacb9ee8e, sceNpBasicUnregisterHandler); + sceNp->AddFunc(0xaee8cf71, sceNpCommerceGetCategoryId); + sceNp->AddFunc(0xaf3eba5a, sceNpCommerceDoCheckoutFinishAsync); + sceNp->AddFunc(0xaf505def, sceNpBasicGetMatchingInvitationEntryCount); + sceNp->AddFunc(0xaf57d9c9, sceNpCommerceGetCurrencyDecimals); + sceNp->AddFunc(0xafef640d, sceNpBasicGetFriendListEntryCount); + sceNp->AddFunc(0xb020684e, sceNpMatchingGetRoomInfoNoLimit); + sceNp->AddFunc(0xb082003b, sceNpScoreGetClansRankingByRange); + sceNp->AddFunc(0xb1c02d66, sceNpCommerceGetCurrencyInfo); + sceNp->AddFunc(0xb1e0718b, sceNpManagerGetAccountRegion); + sceNp->AddFunc(0xb5cb2d56, sceNpBasicRecvMessageAttachment); + sceNp->AddFunc(0xb6017827, sceNpLookupAvatarImage); + sceNp->AddFunc(0xb66d1c46, sceNpManagerGetEntitlementIdList); + sceNp->AddFunc(0xb9f93bbb, sceNpScoreCreateTitleCtx); + sceNp->AddFunc(0xba65de6d, sceNpCommerceGetChildCategoryInfo); + sceNp->AddFunc(0xbab91fc9, sceNpBasicGetPlayersHistoryEntry); + sceNp->AddFunc(0xbcc09fe7, sceNpBasicRegisterHandler); + sceNp->AddFunc(0xbcdbb2ab, sceNpBasicAddPlayersHistoryAsync); + sceNp->AddFunc(0xbdc07fd5, sceNpManagerGetNetworkTime); + sceNp->AddFunc(0xbe07c708, sceNpManagerGetOnlineId); + sceNp->AddFunc(0xbe81c71c, sceNpBasicSetPresenceDetails); + sceNp->AddFunc(0xbef887e5, sceNpScoreGetClanMemberGameDataAsync); + sceNp->AddFunc(0xbf607ec6, sceNpBasicGetClanMessageEntryCount); + sceNp->AddFunc(0xbf9eea93, sceNpLookupAvatarImageAsync); + sceNp->AddFunc(0xc3a991ee, sceNpScoreGetRankingByNpIdPcId); + sceNp->AddFunc(0xc4b6cd8f, sceNpScoreGetRankingByNpIdPcIdAsync); + sceNp->AddFunc(0xc5f4cf82, sceNpScoreDestroyTransactionCtx); + sceNp->AddFunc(0xca0a2d04, sceNpSignalingGetConnectionStatus); + sceNp->AddFunc(0xca39c4b2, sceNpLookupTitleSmallStorage); + sceNp->AddFunc(0xccbe2e69, sceNpCommerceGetSkuImageURL); + sceNp->AddFunc(0xce81c7f0, sceNpLookupCreateTitleCtx); + sceNp->AddFunc(0xceeebc7a, sceNpProfileCallGui); + sceNp->AddFunc(0xcfd469e4, sceNpCommerceGetProductCategoryFinish); + sceNp->AddFunc(0xd03cea35, sceNpCommerceGetDataFlagState); + sceNp->AddFunc(0xd053f113, sceNpBasicGetCustomInvitationEntry); + sceNp->AddFunc(0xd0958814, sceNpSignalingGetPeerNetInfoResult); + sceNp->AddFunc(0xd12e40ae, sceNpLookupNpIdAsync); + sceNp->AddFunc(0xd208f91d, sceNpUtilCmpNpId); + sceNp->AddFunc(0xd20d7798, sceNpMatchingKickRoomMemberWithOpt); + sceNp->AddFunc(0xd737fd2d, sceNpLookupWaitAsync); + sceNp->AddFunc(0xd7fb1fa6, sceNpFriendlistCustom); + sceNp->AddFunc(0xdae2d351, sceNpMatchingGrantOwnership); + sceNp->AddFunc(0xdb2e4dc2, sceNpScoreGetGameDataAsync); + sceNp->AddFunc(0xdbdb909f, sceNpCommerceGetDataFlagStart); + sceNp->AddFunc(0xddce7d15, sceNpScoreGetBoardInfoAsync); + sceNp->AddFunc(0xded17c26, sceNpScoreGetClansMembersRankingByNpId); + sceNp->AddFunc(0xdfd63b62, sceNpLookupUserProfile); + sceNp->AddFunc(0xe035f7d6, sceNpBasicGetEvent); + sceNp->AddFunc(0xe1c9f675, sceNpBasicMarkMessageAsUsed); + sceNp->AddFunc(0xe24eea19, sceNpMatchingGetRoomListLimitGUI); + sceNp->AddFunc(0xe2877bea, sceNpCommerceDestroyCtx); + sceNp->AddFunc(0xe36c660e, sceNpCommerceDoCheckoutStartAsync); + sceNp->AddFunc(0xe6c8f3f9, sceNpDrmProcessExitSpawn2); + sceNp->AddFunc(0xe7dcd3b4, sceNpManagerRegisterCallback); + sceNp->AddFunc(0xe853d388, sceNpSignalingGetConnectionFromNpId); + sceNp->AddFunc(0xe8a67160, sceNpScoreGetClansMembersRankingByNpIdAsync); + sceNp->AddFunc(0xea2e9ffc, sceNpLookupCreateTransactionCtx); + sceNp->AddFunc(0xeb5f2544, sceNpCommerceGetProductName); + sceNp->AddFunc(0xeb7a3d84, sceNpManagerGetChatRestrictionFlag); + sceNp->AddFunc(0xeb9df054, sceNpCommerceGetCategoryInfo); + sceNp->AddFunc(0xec0a1fbf, sceNpBasicSendMessage); + sceNp->AddFunc(0xecd503de, sceNpBasicGetMessageEntryCount); + sceNp->AddFunc(0xee0cc40c, _sceNpSysutilClientMalloc); + sceNp->AddFunc(0xee530059, sceNpCommerceGetSkuName); + sceNp->AddFunc(0xee5b20d9, sceNpScoreAbortTransaction); + sceNp->AddFunc(0xee64cf8e, sceNpMatchingGetRoomSearchFlag); + sceNp->AddFunc(0xf0a9182b, sceNpFriendlist); + sceNp->AddFunc(0xf0b1e399, sceNpScoreRecordScoreAsync); + sceNp->AddFunc(0xf1b77918, sceNpScoreSanitizeComment); + sceNp->AddFunc(0xf2b3338a, sceNpBasicGetBlockListEntry); + sceNp->AddFunc(0xf42c0df8, sceNpManagerGetOnlineName); + sceNp->AddFunc(0xf4e0f607, sceNpScoreGetBoardInfo); + sceNp->AddFunc(0xf59e1da8, sceNpFriendlistAbortGui); + sceNp->AddFunc(0xf5ff5f31, sceNpUtilCmpNpIdInOrder); + sceNp->AddFunc(0xf76847c2, sceNpScoreRecordGameDataAsync); + sceNp->AddFunc(0xf806c54c, sceNpMatchingLeaveRoom); + sceNp->AddFunc(0xf9732ac8, sceNpCustomMenuActionSetActivation); + sceNp->AddFunc(0xfb87cf5e, sceNpLookupDestroyTransactionCtx); + sceNp->AddFunc(0xfbc82301, sceNpScoreGetRankingByRange); + sceNp->AddFunc(0xfcac355a, sceNpCommerceCreateCtx); + sceNp->AddFunc(0xfd0eb5ae, sceNpSignalingDeactivateConnection); + sceNp->AddFunc(0xfd39ae13, sceNpBasicGetFriendPresenceByNpId); + sceNp->AddFunc(0xfe37a7f4, sceNpManagerGetNpId); + sceNp->AddFunc(0xff0a2378, sceNpLookupUserProfileAsync); + sceNp->AddFunc(0x095e12c6, sceNpClansSendInvitationResponse); + sceNp->AddFunc(0x09f9e1a9, sceNpClansUpdateClanInfo); + sceNp->AddFunc(0x0df25834, sceNpClansRetrieveChallenges); + sceNp->AddFunc(0x1221a1bf, sceNpClansSearchByProfile); + sceNp->AddFunc(0x20472da0, sceNpClansGetMemberInfo); + sceNp->AddFunc(0x299ccc9b, sceNpClansCancelMembershipRequest); + sceNp->AddFunc(0x38dadf1f, sceNpClansGetAutoAcceptStatus); + sceNp->AddFunc(0x42332cb7, sceNpClansTerm); + sceNp->AddFunc(0x4826f6d5, sceNpClansDisbandClan); + sceNp->AddFunc(0x487de998, sceNpClansGetClanInfo); + sceNp->AddFunc(0x4d06aef7, sceNpClansAddBlacklistEntry); + sceNp->AddFunc(0x560f717b, sceNpClansLeaveClan); + sceNp->AddFunc(0x56bc5a7c, sceNpClansGetBlacklist); + sceNp->AddFunc(0x59743b2b, sceNpClansSendMembershipRequest); + sceNp->AddFunc(0x5bff9da1, sceNpClansRemoveBlacklistEntry); + sceNp->AddFunc(0x5da94854, sceNpClansUpdateAutoAcceptStatus); + sceNp->AddFunc(0x672399a8, sceNpClansGetClanListByNpId); + sceNp->AddFunc(0x726dffd5, sceNpClansCancelInvitation); + sceNp->AddFunc(0x727aa7f8, sceNpClansRetrieveAnnouncements); + sceNp->AddFunc(0x83d65529, sceNpClansPostChallenge); + sceNp->AddFunc(0x856ff5c0, sceNpClansGetMemberList); + sceNp->AddFunc(0x8e785b97, sceNpClansRetrievePostedChallenges); + sceNp->AddFunc(0x942dbdc4, sceNpClansSendMembershipResponse); + sceNp->AddFunc(0x9a72232d, sceNpClansCreateRequest); + sceNp->AddFunc(0x9b820047, sceNpClansInit); + sceNp->AddFunc(0x9cac2085, sceNpClansChangeMemberRole); + sceNp->AddFunc(0xa6a31a38, sceNpClansCreateClan); + sceNp->AddFunc(0xaa7912b5, sceNpClansKickMember); + sceNp->AddFunc(0xace0cfba, sceNpClansSearchByName); + sceNp->AddFunc(0xada45b84, sceNpClansPostAnnouncement); + sceNp->AddFunc(0xbc05ef31, sceNpClansSendInvitation); + sceNp->AddFunc(0xca4181b4, sceNpClansGetClanList); + sceNp->AddFunc(0xce6dc0f0, sceNpClansRemoveChallenge); + sceNp->AddFunc(0xd3346dc4, sceNpClansRemovePostedChallenge); + sceNp->AddFunc(0xd6551cd1, sceNpClansDestroyRequest); + sceNp->AddFunc(0xdbf300ca, sceNpClansJoinClan); + sceNp->AddFunc(0xe2590f60, sceNpClansRemoveAnnouncement); + sceNp->AddFunc(0xe82969e2, sceNpClansAbortRequest); + sceNp->AddFunc(0xf4a2d52b, sceNpClansUpdateMemberInfo); + sceNp->AddFunc(0x104551a6, sceNpCommerce2DoCheckoutStartAsync); + sceNp->AddFunc(0x146618df, sceNpCommerce2GetProductInfoListGetResult); + sceNp->AddFunc(0x150fdca3, sceNpCommerce2GetContentRatingDescriptor); + sceNp->AddFunc(0x1fa1b312, sceNpCommerce2GetStoreBrowseUserdata); + sceNp->AddFunc(0x2a910f05, sceNpCommerce2DestroyReq); + sceNp->AddFunc(0x3539d233, sceNpCommerce2Init); + sceNp->AddFunc(0x371a2edd, sceNpCommerce2GetCategoryContentsStart); + sceNp->AddFunc(0x3d627d81, sceNpCommerce2GetBGDLAvailability); + sceNp->AddFunc(0x410d42be, sceNpCommerce2DoDlListFinishAsync); + sceNp->AddFunc(0x4d4a094c, sceNpCommerce2Term); + sceNp->AddFunc(0x62023e98, sceNpCommerce2CreateSessionAbort); + sceNp->AddFunc(0x6ca9efd4, sceNpCommerce2DoDlListStartAsync); + sceNp->AddFunc(0x6f67ea80, sceNpCommerce2DestroyCtx); + sceNp->AddFunc(0x7370d8d0, sceNpCommerce2GetCategoryContentsCreateReq); + sceNp->AddFunc(0x8df0057f, sceNpCommerce2AbortReq); + sceNp->AddFunc(0x8f46325b, sceNpCommerce2GetProductInfoStart); + sceNp->AddFunc(0x91f8843d, sceNpCommerce2CreateSessionFinish); + sceNp->AddFunc(0x972ab46c, sceNpCommerce2GetContentInfo); + sceNp->AddFunc(0x9825a0fc, sceNpCommerce2DoProductBrowseStartAsync); + sceNp->AddFunc(0x9cde07cc, sceNpCommerce2GetProductInfoListStart); + sceNp->AddFunc(0x9d9cb96b, sceNpCommerce2DestroyGetCategoryContentsResult); + sceNp->AddFunc(0xa5a863fe, sceNpCommerce2SetBGDLAvailability); + sceNp->AddFunc(0xa975ebb4, sceNpCommerce2GetProductInfoCreateReq); + sceNp->AddFunc(0xa9f945b3, sceNpCommerce2DoProductCodeFinishAsync); + sceNp->AddFunc(0xac78c1f3, sceNpCommerce2GetContentRatingInfoFromCategoryInfo); + sceNp->AddFunc(0xb23e3bd1, sceNpCommerce2DoProductBrowseFinishAsync); + sceNp->AddFunc(0xbd49eab2, sceNpCommerce2GetCategoryInfo); + sceNp->AddFunc(0xbf5f58ea, sceNpCommerce2GetProductInfoGetResult); + sceNp->AddFunc(0xca0ea996, sceNpCommerce2GetCategoryContentsGetResult); + sceNp->AddFunc(0xcc18cd2c, sceNpCommerce2CreateSessionStart); + sceNp->AddFunc(0xd43a130e, sceNpCommerce2DoCheckoutFinishAsync); + sceNp->AddFunc(0xd8a473a3, sceNpCommerce2InitGetCategoryContentsResult); + sceNp->AddFunc(0xd9956ce7, sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult); + sceNp->AddFunc(0xd9fdcec2, sceNpCommerce2CreateCtx); + sceNp->AddFunc(0xda8e322d, sceNpCommerce2GetPrice); + sceNp->AddFunc(0xdb19194c, sceNpCommerce2GetGameSkuInfoFromGameProductInfo); + sceNp->AddFunc(0xde7ab33d, sceNpCommerce2DoProductCodeStartAsync); + sceNp->AddFunc(0xe0f90e44, sceNpCommerce2InitGetProductInfoListResult); + sceNp->AddFunc(0xe1e7b5ac, sceNpCommerce2GetProductInfoListCreateReq); + sceNp->AddFunc(0xe51a4944, sceNpCommerce2GetGameProductInfoFromContentInfo); + sceNp->AddFunc(0xec324c8f, sceNpCommerce2GetContentRatingInfoFromGameProductInfo); + sceNp->AddFunc(0xeef51be0, sceNpCommerce2ExecuteStoreBrowse); + sceNp->AddFunc(0xef645654, sceNpCommerce2GetGameProductInfo); + sceNp->AddFunc(0xef8eafcd, sceNpCommerce2DestroyGetProductInfoResult); + sceNp->AddFunc(0xf6139b58, sceNpCommerce2DestroyGetProductInfoListResult); + sceNp->AddFunc(0xf798f5e3, sceNpCommerce2InitGetProductInfoResult); + sceNp->AddFunc(0xfc216890, sceNpCommerce2GetCategoryInfoFromContentInfo); + sceNp->AddFunc(0x01711e81, sceNpTusDeleteMultiSlotDataVUser); + sceNp->AddFunc(0x0423e622, sceNpTusGetMultiSlotVariable); + sceNp->AddFunc(0x065b610d, sceNpTusSetMultiSlotVariableAsync); + sceNp->AddFunc(0x0835deb2, sceNpTusSetDataVUser); + sceNp->AddFunc(0x0d15043b, sceNpTusGetMultiUserVariable); + sceNp->AddFunc(0x17db7aa7, sceNpTusTryAndSetVariableVUserAsync); + sceNp->AddFunc(0x1904435e, sceNpTusCreateTransactionCtx); + sceNp->AddFunc(0x19bce18c, sceNpTusPollAsync); + sceNp->AddFunc(0x1fa5c87d, sceNpTusAddAndGetVariableAsync); + sceNp->AddFunc(0x225aed26, sceNpTusTerm); + sceNp->AddFunc(0x2357ba9e, sceNpTusGetMultiSlotVariableVUser); + sceNp->AddFunc(0x2ab21ea9, sceNpTusGetMultiSlotDataStatusVUserAsync); + sceNp->AddFunc(0x2d1b9f1a, sceNpTusGetMultiUserDataStatusVUser); + sceNp->AddFunc(0x2e162a62, sceNpTusDestroyTitleCtx); + sceNp->AddFunc(0x3175af23, sceNpTusDeleteMultiSlotDataAsync); + sceNp->AddFunc(0x325c6284, sceNpTusAbortTransaction); + sceNp->AddFunc(0x348dbcb4, sceNpTusGetMultiUserDataStatus); + sceNp->AddFunc(0x3602bc80, sceNpTusTryAndSetVariableVUser); + sceNp->AddFunc(0x368fec59, sceNpTusGetMultiUserDataStatusVUserAsync); + sceNp->AddFunc(0x38f364b0, sceNpTusGetDataVUserAsync); + sceNp->AddFunc(0x44eca8b4, sceNpTusDestroyTransactionCtx); + sceNp->AddFunc(0x47e9424a, sceNpTusTryAndSetVariable); + sceNp->AddFunc(0x5175abb9, sceNpTusGetDataAsync); + sceNp->AddFunc(0x59432970, sceNpTusSetTimeout); + sceNp->AddFunc(0x651fd79f, sceNpTusGetMultiSlotDataStatusAsync); + sceNp->AddFunc(0x6c511024, sceNpTusGetMultiUserVariableVUser); + sceNp->AddFunc(0x7caf58ee, sceNpTusCreateTitleCtx); + sceNp->AddFunc(0x7d5f0f0e, sceNpTusSetData); + sceNp->AddFunc(0x8ddd0d85, sceNpTusGetData); + sceNp->AddFunc(0x8f87a06b, sceNpTusInit); + sceNp->AddFunc(0x94989003, sceNpTusAddAndGetVariable); + sceNp->AddFunc(0x9549d22c, sceNpTusGetMultiUserVariableVUserAsync); + sceNp->AddFunc(0x96a06212, sceNpTusSetMultiSlotVariableVUserAsync); + sceNp->AddFunc(0x9cc0cf44, sceNpTusSetDataVUserAsync); + sceNp->AddFunc(0xa3abfadb, sceNpTusGetMultiSlotDataStatusVUser); + sceNp->AddFunc(0xa7993bf3, sceNpTusAddAndGetVariableVUserAsync); + sceNp->AddFunc(0xae4e590e, sceNpTusGetDataVUser); + sceNp->AddFunc(0xaf985783, sceNpTusDeleteMultiSlotVariable); + sceNp->AddFunc(0xb8e8ff22, sceNpTusWaitAsync); + sceNp->AddFunc(0xbb2877f2, sceNpTusGetMultiSlotVariableAsync); + sceNp->AddFunc(0xbbb244b7, sceNpTusTryAndSetVariableAsync); + sceNp->AddFunc(0xc2e18da8, sceNpTusDeleteMultiSlotVariableVUserAsync); + sceNp->AddFunc(0xc4e51fbf, sceNpTusDeleteMultiSlotVariableVUser); + sceNp->AddFunc(0xc66ba67e, sceNpTusGetMultiUserDataStatusAsync); + sceNp->AddFunc(0xc815b219, sceNpTusDeleteMultiSlotDataVUserAsync); + sceNp->AddFunc(0xc848d425, sceNpTusGetMultiSlotDataStatus); + sceNp->AddFunc(0xcc7a31cd, sceNpTusGetMultiUserVariableAsync); + sceNp->AddFunc(0xcc86a8f6, sceNpTusSetMultiSlotVariable); + sceNp->AddFunc(0xe0719847, sceNpTusDeleteMultiSlotData); + sceNp->AddFunc(0xe847341f, sceNpTusSetDataAsync); + sceNp->AddFunc(0xf5363608, sceNpTusDeleteMultiSlotVariableAsync); + sceNp->AddFunc(0xf60be06f, sceNpTusAddAndGetVariableVUser); + sceNp->AddFunc(0xf819be91, sceNpTusSetMultiSlotVariableVUser); + sceNp->AddFunc(0xfc7d346e, sceNpTusGetMultiSlotVariableVUserAsync); + sceNp->AddFunc(0x432b3cbf, sceNpUtilBandwidthTestShutdown); + sceNp->AddFunc(0xc2ced2b7, sceNpUtilBandwidthTestInitStart); + sceNp->AddFunc(0xc880f37d, sceNpUtilBandwidthTestGetStatus); + sceNp->AddFunc(0xc99ee313, sceNpUtilBandwidthTestAbort); } From b22ba861833d1c9208c9b9abe39dbd16bb0b4ae3 Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 28 Jul 2014 14:10:50 +0800 Subject: [PATCH 249/499] Fix spacing --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 702 +++++++++++++-------------- 1 file changed, 351 insertions(+), 351 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 43e18c437f..b9348a5f55 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -142,602 +142,602 @@ int sceNpBasicSendMessageGui() return CELL_OK; } -int sceNpMatchingGetResult() +int sceNpMatchingGetResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetFriendListEntry() +int sceNpBasicGetFriendListEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreRecordGameData() +int sceNpScoreRecordGameData() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetDataFlagAbort() +int sceNpCommerceGetDataFlagAbort() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetMatchingInvitationEntry() +int sceNpBasicGetMatchingInvitationEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetRankingByNpId() +int sceNpScoreGetRankingByNpId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetTicket() +int sceNpManagerGetTicket() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingQuickMatchGUI() +int sceNpMatchingQuickMatchGUI() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingGetConnectionInfo() +int sceNpSignalingGetConnectionInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupNpId() +int sceNpLookupNpId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreRecordScore() +int sceNpScoreRecordScore() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicAddPlayersHistory() +int sceNpBasicAddPlayersHistory() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetAccountAge() +int sceNpManagerGetAccountAge() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetPsHandle() +int sceNpManagerGetPsHandle() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreWaitAsync() +int sceNpScoreWaitAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetSkuUserData() +int sceNpCommerceGetSkuUserData() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicAddBlockListEntry() +int sceNpBasicAddBlockListEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupUserProfileWithAvatarSizeAsync() +int sceNpLookupUserProfileWithAvatarSizeAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetRankingByRangeAsync() +int sceNpScoreGetRankingByRangeAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansRankingByClanIdAsync() +int sceNpScoreGetClansRankingByClanIdAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreDestroyTitleCtx() +int sceNpScoreDestroyTitleCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetFriendPresenceByNpId2() +int sceNpBasicGetFriendPresenceByNpId2() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingGetCtxOpt() +int sceNpSignalingGetCtxOpt() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingGetResultGUI() +int sceNpMatchingGetResultGUI() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetProductCategoryStart() +int sceNpCommerceGetProductCategoryStart() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreSetPlayerCharacterId() +int sceNpScoreSetPlayerCharacterId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingSetCtxOpt() +int sceNpSignalingSetCtxOpt() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicAddFriend() +int sceNpBasicAddFriend() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreSetTimeout() +int sceNpScoreSetTimeout() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansRankingByClanId() +int sceNpScoreGetClansRankingByClanId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingAcceptInvitationGUI() +int sceNpMatchingAcceptInvitationGUI() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetNumOfChildCategory() +int sceNpCommerceGetNumOfChildCategory() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreSanitizeCommentAsync() +int sceNpScoreSanitizeCommentAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingDestroyCtx() +int sceNpMatchingDestroyCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpProfileAbortGui() +int sceNpProfileAbortGui() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupUserProfileWithAvatarSize() +int sceNpLookupUserProfileWithAvatarSize() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetMessageEntry() +int sceNpBasicGetMessageEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetMyLanguages() +int sceNpManagerGetMyLanguages() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetFriendPresenceByIndex() +int sceNpBasicGetFriendPresenceByIndex() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreInit() +int sceNpScoreInit() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingSearchJoinRoomGUI() +int sceNpMatchingSearchJoinRoomGUI() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingKickRoomMember() +int sceNpMatchingKickRoomMember() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingGetConnectionFromPeerAddress() +int sceNpSignalingGetConnectionFromPeerAddress() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetCategoryDescription() +int sceNpCommerceGetCategoryDescription() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetAvatarUrl() +int sceNpManagerGetAvatarUrl() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetSkuId() +int sceNpCommerceGetSkuId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetGameData() +int sceNpScoreGetGameData() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingCreateRoomGUI() +int sceNpMatchingCreateRoomGUI() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupAbortTransaction() +int sceNpLookupAbortTransaction() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetRankingByNpIdAsync() +int sceNpScoreGetRankingByNpIdAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicSetPresence() +int sceNpBasicSetPresence() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetProductCategoryResult() +int sceNpCommerceGetProductCategoryResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicRegisterContextSensitiveHandler() +int sceNpBasicRegisterContextSensitiveHandler() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansMembersRankingByNpIdPcId() +int sceNpScoreGetClansMembersRankingByNpIdPcId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansMembersRankingByNpIdPcIdAsync() +int sceNpScoreGetClansMembersRankingByNpIdPcIdAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicSendMessageAttachment() +int sceNpBasicSendMessageAttachment() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerSubSignin() +int sceNpManagerSubSignin() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCustomMenuRegisterActions() +int sceNpCustomMenuRegisterActions() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingJoinRoomGUI() +int sceNpMatchingJoinRoomGUI() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicAbortGui() +int sceNpBasicAbortGui() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingSetRoomInfoNoLimit() +int sceNpMatchingSetRoomInfoNoLimit() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetCachedInfo() +int sceNpManagerGetCachedInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansMembersRankingByRangeAsync() +int sceNpScoreGetClansMembersRankingByRangeAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetClanMessageEntry() +int sceNpBasicGetClanMessageEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingAddExtendedHandler() +int sceNpSignalingAddExtendedHandler() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerUnregisterCallback() +int sceNpManagerUnregisterCallback() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetTicketParam() +int sceNpManagerGetTicketParam() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetMessageAttachmentEntry() +int sceNpBasicGetMessageAttachmentEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupDestroyTitleCtx() +int sceNpLookupDestroyTitleCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupTitleStorageAsync() +int sceNpLookupTitleStorageAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicSetPresenceDetails2() +int sceNpBasicSetPresenceDetails2() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupInit() +int sceNpLookupInit() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerSubSigninAbortGui() +int sceNpManagerSubSigninAbortGui() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingActivateConnection() +int sceNpSignalingActivateConnection() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingCreateCtx() +int sceNpSignalingCreateCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetFriendPresenceByIndex2() +int sceNpBasicGetFriendPresenceByIndex2() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicRecvMessageAttachmentLoad() +int sceNpBasicRecvMessageAttachmentLoad() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingCancelPeerNetInfo() +int sceNpSignalingCancelPeerNetInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetProductCategoryAbort() +int sceNpCommerceGetProductCategoryAbort() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingGetRoomInfo() +int sceNpMatchingGetRoomInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceDestroyProductCategory() +int sceNpCommerceDestroyProductCategory() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansMembersRankingByRange() +int sceNpScoreGetClansMembersRankingByRange() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetCategoryName() +int sceNpCommerceGetCategoryName() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetContentRatingFlag() +int sceNpManagerGetContentRatingFlag() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreCreateTransactionCtx() +int sceNpScoreCreateTransactionCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingSetRoomInfo() +int sceNpMatchingSetRoomInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupSetTimeout() +int sceNpLookupSetTimeout() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetNumOfChildProductSku() +int sceNpCommerceGetNumOfChildProductSku() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetBlockListEntryCount() +int sceNpBasicGetBlockListEntryCount() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingGetRoomMemberListLocal() +int sceNpMatchingGetRoomMemberListLocal() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClanMemberGameData() +int sceNpScoreGetClanMemberGameData() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupPollAsync() +int sceNpLookupPollAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingGetPeerNetInfo() +int sceNpSignalingGetPeerNetInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetSkuPrice() +int sceNpCommerceGetSkuPrice() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetCurrencyCode() +int sceNpCommerceGetCurrencyCode() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansRankingByRangeAsync() +int sceNpScoreGetClansRankingByRangeAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreCensorCommentAsync() +int sceNpScoreCensorCommentAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreCensorComment() +int sceNpScoreCensorComment() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerRequestTicket() +int sceNpManagerRequestTicket() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicRecvMessageCustom() +int sceNpBasicRecvMessageCustom() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; @@ -749,522 +749,522 @@ int _sceNpSysutilClientFree() return CELL_OK; } -int sceNpManagerRequestTicket2() +int sceNpManagerRequestTicket2() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupTerm() +int sceNpLookupTerm() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupTitleSmallStorageAsync() +int sceNpLookupTitleSmallStorageAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingSendInvitationGUI() +int sceNpMatchingSendInvitationGUI() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceInitProductCategory() +int sceNpCommerceInitProductCategory() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceSetDataFlagFinish() +int sceNpCommerceSetDataFlagFinish() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetMessageAttachmentEntryCount() +int sceNpBasicGetMessageAttachmentEntryCount() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetDataFlagFinish() +int sceNpCommerceGetDataFlagFinish() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetProductId() +int sceNpCommerceGetProductId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetCategoryImageURL() +int sceNpCommerceGetCategoryImageURL() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCustomMenuRegisterExceptionList() +int sceNpCustomMenuRegisterExceptionList() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingTerminateConnection() +int sceNpSignalingTerminateConnection() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreTerm() +int sceNpScoreTerm() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceSetDataFlagStart() +int sceNpCommerceSetDataFlagStart() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingGetLocalNetInfo() +int sceNpSignalingGetLocalNetInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupTitleStorage() +int sceNpLookupTitleStorage() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetPlayersHistoryEntryCount() +int sceNpBasicGetPlayersHistoryEntryCount() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetEntitlementById() +int sceNpManagerGetEntitlementById() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingSetRoomSearchFlag() +int sceNpMatchingSetRoomSearchFlag() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScorePollAsync() +int sceNpScorePollAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetSkuDescription() +int sceNpCommerceGetSkuDescription() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetCustomInvitationEntryCount() +int sceNpBasicGetCustomInvitationEntryCount() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpDrmProcessExitSpawn() +int sceNpDrmProcessExitSpawn() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingCreateCtx() +int sceNpMatchingCreateCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicUnregisterHandler() +int sceNpBasicUnregisterHandler() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetCategoryId() +int sceNpCommerceGetCategoryId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceDoCheckoutFinishAsync() +int sceNpCommerceDoCheckoutFinishAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetMatchingInvitationEntryCount() +int sceNpBasicGetMatchingInvitationEntryCount() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetCurrencyDecimals() +int sceNpCommerceGetCurrencyDecimals() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetFriendListEntryCount() +int sceNpBasicGetFriendListEntryCount() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingGetRoomInfoNoLimit() +int sceNpMatchingGetRoomInfoNoLimit() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansRankingByRange() +int sceNpScoreGetClansRankingByRange() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetCurrencyInfo() +int sceNpCommerceGetCurrencyInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetAccountRegion() +int sceNpManagerGetAccountRegion() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicRecvMessageAttachment() +int sceNpBasicRecvMessageAttachment() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupAvatarImage() +int sceNpLookupAvatarImage() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetEntitlementIdList() +int sceNpManagerGetEntitlementIdList() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreCreateTitleCtx() +int sceNpScoreCreateTitleCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetChildCategoryInfo() +int sceNpCommerceGetChildCategoryInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetPlayersHistoryEntry() +int sceNpBasicGetPlayersHistoryEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicRegisterHandler() +int sceNpBasicRegisterHandler() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicAddPlayersHistoryAsync() +int sceNpBasicAddPlayersHistoryAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetNetworkTime() +int sceNpManagerGetNetworkTime() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetOnlineId() +int sceNpManagerGetOnlineId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpDrmVerifyUpgradeLicense2() +int sceNpDrmVerifyUpgradeLicense2() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicSetPresenceDetails() +int sceNpBasicSetPresenceDetails() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClanMemberGameDataAsync() +int sceNpScoreGetClanMemberGameDataAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetClanMessageEntryCount() +int sceNpBasicGetClanMessageEntryCount() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupAvatarImageAsync() +int sceNpLookupAvatarImageAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetRankingByNpIdPcId() +int sceNpScoreGetRankingByNpIdPcId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetRankingByNpIdPcIdAsync() +int sceNpScoreGetRankingByNpIdPcIdAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreDestroyTransactionCtx() +int sceNpScoreDestroyTransactionCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingGetConnectionStatus() +int sceNpSignalingGetConnectionStatus() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupTitleSmallStorage() +int sceNpLookupTitleSmallStorage() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetSkuImageURL() +int sceNpCommerceGetSkuImageURL() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupCreateTitleCtx() +int sceNpLookupCreateTitleCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpProfileCallGui() +int sceNpProfileCallGui() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetProductCategoryFinish() +int sceNpCommerceGetProductCategoryFinish() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetDataFlagState() +int sceNpCommerceGetDataFlagState() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetCustomInvitationEntry() +int sceNpBasicGetCustomInvitationEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingGetPeerNetInfoResult() +int sceNpSignalingGetPeerNetInfoResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupNpIdAsync() +int sceNpLookupNpIdAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpUtilCmpNpId() +int sceNpUtilCmpNpId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingKickRoomMemberWithOpt() +int sceNpMatchingKickRoomMemberWithOpt() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupWaitAsync() +int sceNpLookupWaitAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpFriendlistCustom() +int sceNpFriendlistCustom() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingGrantOwnership() +int sceNpMatchingGrantOwnership() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetGameDataAsync() +int sceNpScoreGetGameDataAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetDataFlagStart() +int sceNpCommerceGetDataFlagStart() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetBoardInfoAsync() +int sceNpScoreGetBoardInfoAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansMembersRankingByNpId() +int sceNpScoreGetClansMembersRankingByNpId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupUserProfile() +int sceNpLookupUserProfile() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetEvent() +int sceNpBasicGetEvent() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicMarkMessageAsUsed() +int sceNpBasicMarkMessageAsUsed() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingGetRoomListLimitGUI() +int sceNpMatchingGetRoomListLimitGUI() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceDestroyCtx() +int sceNpCommerceDestroyCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceDoCheckoutStartAsync() +int sceNpCommerceDoCheckoutStartAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpDrmProcessExitSpawn2() +int sceNpDrmProcessExitSpawn2() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerRegisterCallback() +int sceNpManagerRegisterCallback() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingGetConnectionFromNpId() +int sceNpSignalingGetConnectionFromNpId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetClansMembersRankingByNpIdAsync() +int sceNpScoreGetClansMembersRankingByNpIdAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupCreateTransactionCtx() +int sceNpLookupCreateTransactionCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetProductName() +int sceNpCommerceGetProductName() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetChatRestrictionFlag() +int sceNpManagerGetChatRestrictionFlag() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceGetCategoryInfo() +int sceNpCommerceGetCategoryInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicSendMessage() +int sceNpBasicSendMessage() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetMessageEntryCount() +int sceNpBasicGetMessageEntryCount() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; @@ -1276,346 +1276,346 @@ int _sceNpSysutilClientMalloc() return CELL_OK; } -int sceNpCommerceGetSkuName() +int sceNpCommerceGetSkuName() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreAbortTransaction() +int sceNpScoreAbortTransaction() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingGetRoomSearchFlag() +int sceNpMatchingGetRoomSearchFlag() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpFriendlist() +int sceNpFriendlist() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreRecordScoreAsync() +int sceNpScoreRecordScoreAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreSanitizeComment() +int sceNpScoreSanitizeComment() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetBlockListEntry() +int sceNpBasicGetBlockListEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetOnlineName() +int sceNpManagerGetOnlineName() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetBoardInfo() +int sceNpScoreGetBoardInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpFriendlistAbortGui() +int sceNpFriendlistAbortGui() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpUtilCmpNpIdInOrder() +int sceNpUtilCmpNpIdInOrder() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreRecordGameDataAsync() +int sceNpScoreRecordGameDataAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpMatchingLeaveRoom() +int sceNpMatchingLeaveRoom() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCustomMenuActionSetActivation() +int sceNpCustomMenuActionSetActivation() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupDestroyTransactionCtx() +int sceNpLookupDestroyTransactionCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpScoreGetRankingByRange() +int sceNpScoreGetRankingByRange() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerceCreateCtx() +int sceNpCommerceCreateCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpSignalingDeactivateConnection() +int sceNpSignalingDeactivateConnection() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpBasicGetFriendPresenceByNpId() +int sceNpBasicGetFriendPresenceByNpId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpManagerGetNpId() +int sceNpManagerGetNpId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpLookupUserProfileAsync() +int sceNpLookupUserProfileAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansSendInvitationResponse() +int sceNpClansSendInvitationResponse() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansUpdateClanInfo() +int sceNpClansUpdateClanInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansRetrieveChallenges() +int sceNpClansRetrieveChallenges() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansSearchByProfile() +int sceNpClansSearchByProfile() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansGetMemberInfo() +int sceNpClansGetMemberInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansCancelMembershipRequest() +int sceNpClansCancelMembershipRequest() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansGetAutoAcceptStatus() +int sceNpClansGetAutoAcceptStatus() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansTerm() +int sceNpClansTerm() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansDisbandClan() +int sceNpClansDisbandClan() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansGetClanInfo() +int sceNpClansGetClanInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansAddBlacklistEntry() +int sceNpClansAddBlacklistEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansLeaveClan() +int sceNpClansLeaveClan() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansGetBlacklist() +int sceNpClansGetBlacklist() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansSendMembershipRequest() +int sceNpClansSendMembershipRequest() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansRemoveBlacklistEntry() +int sceNpClansRemoveBlacklistEntry() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansUpdateAutoAcceptStatus() +int sceNpClansUpdateAutoAcceptStatus() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansGetClanListByNpId() +int sceNpClansGetClanListByNpId() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansCancelInvitation() +int sceNpClansCancelInvitation() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansRetrieveAnnouncements() +int sceNpClansRetrieveAnnouncements() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansPostChallenge() +int sceNpClansPostChallenge() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansGetMemberList() +int sceNpClansGetMemberList() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansRetrievePostedChallenges() +int sceNpClansRetrievePostedChallenges() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansSendMembershipResponse() +int sceNpClansSendMembershipResponse() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansCreateRequest() +int sceNpClansCreateRequest() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansInit() +int sceNpClansInit() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansChangeMemberRole() +int sceNpClansChangeMemberRole() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansCreateClan() +int sceNpClansCreateClan() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansKickMember() +int sceNpClansKickMember() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansSearchByName() +int sceNpClansSearchByName() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansPostAnnouncement() +int sceNpClansPostAnnouncement() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansSendInvitation() +int sceNpClansSendInvitation() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansGetClanList() +int sceNpClansGetClanList() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansRemoveChallenge() +int sceNpClansRemoveChallenge() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansRemovePostedChallenge() +int sceNpClansRemovePostedChallenge() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansDestroyRequest() +int sceNpClansDestroyRequest() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansJoinClan() +int sceNpClansJoinClan() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpClansRemoveAnnouncement() +int sceNpClansRemoveAnnouncement() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; @@ -1627,638 +1627,638 @@ int sceNpClansAbortRequest() return CELL_OK; } -int sceNpClansUpdateMemberInfo() +int sceNpClansUpdateMemberInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DoCheckoutStartAsync() +int sceNpCommerce2DoCheckoutStartAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetProductInfoListGetResult() +int sceNpCommerce2GetProductInfoListGetResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetContentRatingDescriptor() +int sceNpCommerce2GetContentRatingDescriptor() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetBGDLAvailability() +int sceNpCommerce2GetBGDLAvailability() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetStoreBrowseUserdata() +int sceNpCommerce2GetStoreBrowseUserdata() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DestroyReq() +int sceNpCommerce2DestroyReq() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2Init() +int sceNpCommerce2Init() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetCategoryContentsStart() +int sceNpCommerce2GetCategoryContentsStart() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DoDlListFinishAsync() +int sceNpCommerce2DoDlListFinishAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2Term() +int sceNpCommerce2Term() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2CreateSessionAbort() +int sceNpCommerce2CreateSessionAbort() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DoDlListStartAsync() +int sceNpCommerce2DoDlListStartAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DestroyCtx() +int sceNpCommerce2DestroyCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetCategoryContentsCreateReq() +int sceNpCommerce2GetCategoryContentsCreateReq() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2AbortReq() +int sceNpCommerce2AbortReq() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetProductInfoStart() +int sceNpCommerce2GetProductInfoStart() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2CreateSessionFinish() +int sceNpCommerce2CreateSessionFinish() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetContentInfo() +int sceNpCommerce2GetContentInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DoProductBrowseStartAsync() +int sceNpCommerce2DoProductBrowseStartAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetProductInfoListStart() +int sceNpCommerce2GetProductInfoListStart() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DestroyGetCategoryContentsResult() +int sceNpCommerce2DestroyGetCategoryContentsResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2SetBGDLAvailability() +int sceNpCommerce2SetBGDLAvailability() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetProductInfoCreateReq() +int sceNpCommerce2GetProductInfoCreateReq() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DoProductCodeFinishAsync() +int sceNpCommerce2DoProductCodeFinishAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetContentRatingInfoFromCategoryInfo() +int sceNpCommerce2GetContentRatingInfoFromCategoryInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DoProductBrowseFinishAsync() +int sceNpCommerce2DoProductBrowseFinishAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetCategoryInfo() +int sceNpCommerce2GetCategoryInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetProductInfoGetResult() +int sceNpCommerce2GetProductInfoGetResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetCategoryContentsGetResult() +int sceNpCommerce2GetCategoryContentsGetResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2CreateSessionStart() +int sceNpCommerce2CreateSessionStart() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DoCheckoutFinishAsync() +int sceNpCommerce2DoCheckoutFinishAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2InitGetCategoryContentsResult() +int sceNpCommerce2InitGetCategoryContentsResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult() +int sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2CreateCtx() +int sceNpCommerce2CreateCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetPrice() +int sceNpCommerce2GetPrice() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetGameSkuInfoFromGameProductInfo() +int sceNpCommerce2GetGameSkuInfoFromGameProductInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DoProductCodeStartAsync() +int sceNpCommerce2DoProductCodeStartAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2InitGetProductInfoListResult() +int sceNpCommerce2InitGetProductInfoListResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetProductInfoListCreateReq() +int sceNpCommerce2GetProductInfoListCreateReq() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetGameProductInfoFromContentInfo() +int sceNpCommerce2GetGameProductInfoFromContentInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetContentRatingInfoFromGameProductInfo() +int sceNpCommerce2GetContentRatingInfoFromGameProductInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2ExecuteStoreBrowse() +int sceNpCommerce2ExecuteStoreBrowse() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetGameProductInfo() +int sceNpCommerce2GetGameProductInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DestroyGetProductInfoResult() +int sceNpCommerce2DestroyGetProductInfoResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2DestroyGetProductInfoListResult() +int sceNpCommerce2DestroyGetProductInfoListResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2InitGetProductInfoResult() +int sceNpCommerce2InitGetProductInfoResult() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpCommerce2GetCategoryInfoFromContentInfo() +int sceNpCommerce2GetCategoryInfoFromContentInfo() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDeleteMultiSlotDataVUser() +int sceNpTusDeleteMultiSlotDataVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiSlotVariable() +int sceNpTusGetMultiSlotVariable() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetMultiSlotVariableAsync() +int sceNpTusSetMultiSlotVariableAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetDataVUser() +int sceNpTusSetDataVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiUserVariable() +int sceNpTusGetMultiUserVariable() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusTryAndSetVariableVUserAsync() +int sceNpTusTryAndSetVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusCreateTransactionCtx() +int sceNpTusCreateTransactionCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusPollAsync() +int sceNpTusPollAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusAddAndGetVariableAsync() +int sceNpTusAddAndGetVariableAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusTerm() +int sceNpTusTerm() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiSlotVariableVUser() +int sceNpTusGetMultiSlotVariableVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiSlotDataStatusVUserAsync() +int sceNpTusGetMultiSlotDataStatusVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiUserDataStatusVUser() +int sceNpTusGetMultiUserDataStatusVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDestroyTitleCtx() +int sceNpTusDestroyTitleCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDeleteMultiSlotDataAsync() +int sceNpTusDeleteMultiSlotDataAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusAbortTransaction() +int sceNpTusAbortTransaction() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiUserDataStatus() +int sceNpTusGetMultiUserDataStatus() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusTryAndSetVariableVUser() +int sceNpTusTryAndSetVariableVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiUserDataStatusVUserAsync() +int sceNpTusGetMultiUserDataStatusVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetDataVUserAsync() +int sceNpTusGetDataVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDestroyTransactionCtx() +int sceNpTusDestroyTransactionCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusTryAndSetVariable() +int sceNpTusTryAndSetVariable() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetDataAsync() +int sceNpTusGetDataAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetTimeout() +int sceNpTusSetTimeout() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiSlotDataStatusAsync() +int sceNpTusGetMultiSlotDataStatusAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiUserVariableVUser() +int sceNpTusGetMultiUserVariableVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusCreateTitleCtx() +int sceNpTusCreateTitleCtx() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetData() +int sceNpTusSetData() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetData() +int sceNpTusGetData() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusInit() +int sceNpTusInit() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusAddAndGetVariable() +int sceNpTusAddAndGetVariable() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiUserVariableVUserAsync() +int sceNpTusGetMultiUserVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetMultiSlotVariableVUserAsync() +int sceNpTusSetMultiSlotVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetDataVUserAsync() +int sceNpTusSetDataVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiSlotDataStatusVUser() +int sceNpTusGetMultiSlotDataStatusVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusAddAndGetVariableVUserAsync() +int sceNpTusAddAndGetVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetDataVUser() +int sceNpTusGetDataVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDeleteMultiSlotVariable() +int sceNpTusDeleteMultiSlotVariable() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusWaitAsync() +int sceNpTusWaitAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiSlotVariableAsync() +int sceNpTusGetMultiSlotVariableAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusTryAndSetVariableAsync() +int sceNpTusTryAndSetVariableAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDeleteMultiSlotVariableVUserAsync() +int sceNpTusDeleteMultiSlotVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDeleteMultiSlotVariableVUser() +int sceNpTusDeleteMultiSlotVariableVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiUserDataStatusAsync() +int sceNpTusGetMultiUserDataStatusAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDeleteMultiSlotDataVUserAsync() +int sceNpTusDeleteMultiSlotDataVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiSlotDataStatus() +int sceNpTusGetMultiSlotDataStatus() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiUserVariableAsync() +int sceNpTusGetMultiUserVariableAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetMultiSlotVariable() +int sceNpTusSetMultiSlotVariable() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDeleteMultiSlotData() +int sceNpTusDeleteMultiSlotData() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetDataAsync() +int sceNpTusSetDataAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusDeleteMultiSlotVariableAsync() +int sceNpTusDeleteMultiSlotVariableAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusAddAndGetVariableVUser() +int sceNpTusAddAndGetVariableVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusSetMultiSlotVariableVUser() +int sceNpTusSetMultiSlotVariableVUser() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpTusGetMultiSlotVariableVUserAsync() +int sceNpTusGetMultiSlotVariableVUserAsync() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpUtilBandwidthTestShutdown() +int sceNpUtilBandwidthTestShutdown() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpUtilBandwidthTestInitStart() +int sceNpUtilBandwidthTestInitStart() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpUtilBandwidthTestGetStatus() +int sceNpUtilBandwidthTestGetStatus() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } -int sceNpUtilBandwidthTestAbort() +int sceNpUtilBandwidthTestAbort() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; From dbc8f76b52e178191af276828aa08a36bdcf10c0 Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 28 Jul 2014 19:15:28 +0800 Subject: [PATCH 250/499] Add sceNpSignalingDestroyCtx() --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index b9348a5f55..6b5bce2a51 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -2257,13 +2257,17 @@ int sceNpUtilBandwidthTestGetStatus() return CELL_OK; } - int sceNpUtilBandwidthTestAbort() { UNIMPLEMENTED_FUNC(sceNp); return CELL_OK; } +int sceNpSignalingDestroyCtx() +{ + UNIMPLEMENTED_FUNC(sceNp); + return CELL_OK; +} void sceNp_init() { @@ -2632,4 +2636,5 @@ void sceNp_init() sceNp->AddFunc(0xc2ced2b7, sceNpUtilBandwidthTestInitStart); sceNp->AddFunc(0xc880f37d, sceNpUtilBandwidthTestGetStatus); sceNp->AddFunc(0xc99ee313, sceNpUtilBandwidthTestAbort); + sceNp->AddFunc(0xa8cf8451, sceNpSignalingDestroyCtx); } From 329520168b39bf94b503d1be5fdcf459833e0d90 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Mon, 28 Jul 2014 18:40:06 +0300 Subject: [PATCH 251/499] Prepared new SysCalls, made nicer --- rpcs3/Emu/SysCalls/SysCalls.cpp | 741 +++++++++++++++++++++++--------- 1 file changed, 542 insertions(+), 199 deletions(-) diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 48c1a4c107..68964a2ccf 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -18,6 +18,11 @@ static func_caller *null_func = bind_func(default_syscall); static const int kSyscallTableLength = 1024; +// UNS = Unused +// ROOT = Root +// DBG = Debug +// PM = Product Mode +// AuthID = Authentication ID static func_caller* sc_table[kSyscallTableLength] = { null_func, @@ -27,19 +32,17 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_process_get_status), //4 (0x004) DBG bind_func(sys_process_detach_child), //5 (0x005) DBG - // Unused: 6-11 - null_func, null_func, null_func, null_func, null_func, null_func, + null_func, null_func, null_func, null_func, null_func, null_func, //6-11 UNS bind_func(sys_process_get_number_of_object), //12 (0x00B) bind_func(sys_process_get_id), //13 (0x00C) null_func,//bind_func(sys_process_is_spu_lock_line_reservation_address), //14 (0x00D) - // Unused: 15-17 - null_func, null_func, null_func, + null_func, null_func, null_func, //15-17 UNS bind_func(sys_process_getppid), //18 (0x012) bind_func(sys_process_kill), //19 (0x013) - null_func, // + null_func, //20 (0x014) UNS null_func,//bind_func(_sys_process_spawn), //21 (0x015) DBG bind_func(sys_process_exit), //22 (0x016) bind_func(sys_process_wait_for_child2), //23 (0x017) DBG @@ -52,11 +55,10 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_process_get_paramsfo), //30 (0x01E) null_func,//bind_func(sys_process_get_ppu_guid), //31 (0x01F) - // Unused: 32-40 - null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, + null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, //32-40 UNS bind_func(sys_ppu_thread_exit), //41 (0x029) - null_func, // + null_func, //42 (0x02A) UNS bind_func(sys_ppu_thread_yield), //43 (0x02B) bind_func(sys_ppu_thread_join), //44 (0x02C) bind_func(sys_ppu_thread_detach), //45 (0x02D) @@ -68,15 +70,12 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_ppu_thread_restart), //51 (0x033) ROOT bind_func(sys_ppu_thread_create), //52 (0x034) DBG null_func,//bind_func(sys_ppu_thread_start), //53 (0x035) - null_func,//bind_func(), //54 (0x036) ROOT - null_func,//bind_func(), //55 (0x037) ROOT + null_func,//bind_func(sys_ppu_...), //54 (0x036) ROOT + null_func,//bind_func(sys_ppu_...), //55 (0x037) ROOT null_func,//bind_func(sys_ppu_thread_rename), //56 (0x038) null_func,//bind_func(sys_ppu_thread_recover_page_fault)//57 (0x039) null_func,//bind_func(sys_ppu_thread_get_page_fault_context),//58 (0x03A) - - // Unused: 59 - null_func, - + null_func, //59 (0x03B) UNS bind_func(sys_trace_create), //60 (0x03C) bind_func(sys_trace_start), //61 (0x03D) bind_func(sys_trace_stop), //62 (0x03E) @@ -95,11 +94,8 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_timer_connect_event_queue), //75 (0x04B) bind_func(sys_timer_disconnect_event_queue), //76 (0x04C) null_func,//bind_func(sys_trace_create2_in_cbepm), //77 (0x04D) - null_func,//bind_func() //78 (0x04E) - - // Unused: 79 - null_func, - + null_func,//bind_func(sys_trace_...) //78 (0x04E) + null_func, //79 (0x04F) UNS null_func,//bind_func(sys_interrupt_tag_create) //80 (0x050) bind_func(sys_interrupt_tag_destroy), //81 (0x051) bind_func(sys_event_flag_create), //82 (0x052) @@ -135,11 +131,11 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_lwcond_destroy) //112 (0x070) null_func,//bind_func(sys_lwcond_queue_wait) //113 (0x071) bind_func(sys_semaphore_get_value), //114 (0x072) - null_func,//bind_func() //115 (0x073) - null_func,//bind_func() //116 (0x074) - null_func,//bind_func() //117 (0x075) + null_func,//bind_func(sys_semaphore_...) //115 (0x073) + null_func,//bind_func(sys_semaphore_...) //116 (0x074) + null_func,//bind_func(sys_semaphore_...) //117 (0x075) bind_func(sys_event_flag_clear), //118 (0x076) - null_func,//bind_func() //119 (0x077) ROOT + null_func,//bind_func(sys_event_...) //119 (0x077) ROOT bind_func(sys_rwlock_create), //120 (0x078) bind_func(sys_rwlock_destroy), //121 (0x079) bind_func(sys_rwlock_rlock), //122 (0x07A) @@ -169,10 +165,7 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_time_get_system_time), //146 (0x092) ROOT bind_func(sys_time_get_timebase_frequency), //147 (0x093) null_func,//bind_func(sys_rwlock_trywlock) //148 (0x094) - - // Unused: 149 - null_func, - + null_func, //149 (0x095) UNS bind_func(sys_raw_spu_create_interrupt_tag), //150 (0x096) bind_func(sys_raw_spu_set_int_mask), //151 (0x097) bind_func(sys_raw_spu_get_int_mask), //152 (0x098) @@ -185,13 +178,13 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_raw_spu_load) //159 (0x09F) bind_func(sys_raw_spu_create), //160 (0x0A0) bind_func(sys_raw_spu_destroy), //161 (0x0A1) - null_func, // + null_func, //162 (0x0A2) UNS bind_func(sys_raw_spu_read_puint_mb), //163 (0x0A3) - null_func, // + null_func, //164 (0x0A4) UNS bind_func(sys_spu_thread_get_exit_status), //165 (0x0A5) bind_func(sys_spu_thread_set_argument), //166 (0x0A6) null_func,//bind_func(sys_spu_thread_group_start_on_exit)//167(0x0A7) - null_func, // + null_func, //168 (0x0A8) UNS bind_func(sys_spu_initialize), //169 (0x0A9) bind_func(sys_spu_thread_group_create), //170 (0x0AA) bind_func(sys_spu_thread_group_destroy), //171 (0x0AB) @@ -206,54 +199,75 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_spu_thread_group_get_priority)//180 (0x0B4) bind_func(sys_spu_thread_write_ls), //181 (0x0B5) bind_func(sys_spu_thread_read_ls), //182 (0x0B6) - null_func, // + null_func, //183 (0x0B7) UNS bind_func(sys_spu_thread_write_snr), //184 (0x0B8) bind_func(sys_spu_thread_group_connect_event), //185 (0x0B9) bind_func(sys_spu_thread_group_disconnect_event), //186 (0x0BA) bind_func(sys_spu_thread_set_spu_cfg), //187 (0x0BB) bind_func(sys_spu_thread_get_spu_cfg), //188 (0x0BC) - null_func, // + null_func, //189 (0x0BD) UNS bind_func(sys_spu_thread_write_spu_mb), //190 (0x0BE) bind_func(sys_spu_thread_connect_event), //191 (0x0BF) bind_func(sys_spu_thread_disconnect_event), //192 (0x0C0) bind_func(sys_spu_thread_bind_queue), //193 (0x0C1) bind_func(sys_spu_thread_unbind_queue), //194 (0x0C2) - null_func, // + null_func, //195 (0x0C3) UNS bind_func(sys_raw_spu_set_spu_cfg), //196 (0x0C4) bind_func(sys_raw_spu_get_spu_cfg), //197 (0x0C5) null_func,//bind_func(sys_spu_thread_recover_page_fault)//198 (0x0C6) null_func,//bind_func(sys_raw_spu_recover_page_fault) //199 (0x0C7) - null_func, null_func, null_func, null_func, null_func, //204(0x104) - null_func, null_func, null_func, null_func, null_func, //209 - null_func, null_func, null_func, null_func, null_func, //214 - null_func, null_func, null_func, null_func, null_func, //219 - null_func, null_func, null_func, null_func, null_func, //224 - null_func, null_func, null_func, null_func, null_func, //229 - null_func, null_func, null_func, null_func, null_func, //234 - null_func, null_func, null_func, null_func, null_func, //239 - null_func, null_func, null_func, null_func, null_func, //244 - null_func, null_func, null_func, null_func, null_func, //249 - null_func, //250 + null_func, null_func, null_func, null_func, null_func, //204 UNS? + null_func, null_func, null_func, null_func, null_func, //209 UNS? + null_func, null_func, null_func, null_func, null_func, //214 UNS? - bind_func(sys_spu_thread_group_connect_event_all_threads),//251 (0x0FB) - bind_func(sys_spu_thread_group_disconnect_event_all_threads),//252 (0x0FC) + null_func,//bind_func(sys_dbg_mat_set_condition) //215 (0x0D7) + null_func,//bind_func(sys_dbg_mat_get_condition) //216 (0x0D8) + null_func,//bind_func(sys_dbg_...) //217 (0x0D9) DBG UNS? + null_func,//bind_func(sys_dbg_...) //218 (0x0DA) DBG UNS? + null_func,//bind_func(sys_dbg_...) //219 (0x0DB) DBG UNS? + + null_func, null_func, null_func, null_func, null_func, //224 UNS + null_func, null_func, null_func, null_func, null_func, //229 UNS? + + null_func,//bind_func(sys_isolated_spu_create) //230 (0x0E6) ROOT + null_func,//bind_func(sys_isolated_spu_destroy) //231 (0x0E7) ROOT + null_func,//bind_func(sys_isolated_spu_start) //232 (0x0E8) ROOT + null_func,//bind_func(sys_isolated_spu_create_interrupt_tag) //233 (0x0E9) ROOT + null_func,//bind_func(sys_isolated_spu_set_int_mask) //234 (0x0EA) ROOT + null_func,//bind_func(sys_isolated_spu_get_int_mask) //235 (0x0EB) ROOT + null_func,//bind_func(sys_isolated_spu_set_int_stat) //236 (0x0EC) ROOT + null_func,//bind_func(sys_isolated_spu_get_int_stat) //237 (0x0ED) ROOT + null_func,//bind_func(sys_isolated_spu_set_spu_cfg) //238 (0x0EE) ROOT + null_func,//bind_func(sys_isolated_spu_get_spu_cfg) //239 (0x0EF) ROOT + null_func,//bind_func(sys_isolated_spu_read_puint_mb) //240 (0x0F0) ROOT + null_func, //241 (0x0F1) ROOT UNS + null_func, //242 (0x0F2) ROOT UNS + null_func, //243 (0x0F3) ROOT UNS + null_func,//bind_func(sys_spu_thread_group_system_set_next_group) //244 (0x0F4) ROOT + null_func,//bind_func(sys_spu_thread_group_system_unset_next_group) //245 (0x0F5) ROOT + null_func,//bind_func(sys_spu_thread_group_system_set_switch_group) //246 (0x0F6) ROOT + null_func,//bind_func(sys_spu_thread_group_system_unset_switch_group) //247 (0x0F7) ROOT + null_func,//bind_func(sys_spu_thread_group...) //248 (0x0F8) ROOT + null_func,//bind_func(sys_spu_thread_group...) //249 (0x0F9) ROOT + null_func,//bind_func(sys_spu_thread_group_set_cooperative_victims) //250 (0x0FA) + bind_func(sys_spu_thread_group_connect_event_all_threads), //251 (0x0FB) + bind_func(sys_spu_thread_group_disconnect_event_all_threads), //252 (0x0FC) null_func,//bind_func() //253 (0x0FD) null_func,//bind_func(sys_spu_thread_group_log) //254 (0x0FE) - // Unused: 255-259 - null_func, null_func, null_func, null_func, null_func, + null_func, null_func, null_func, null_func, null_func, //255-259 UNS null_func,//bind_func(sys_spu_image_open_by_fd) //260 (0x104) - null_func, null_func, null_func, null_func, //264 - null_func, null_func, null_func, null_func, null_func, //269 - null_func, null_func, null_func, null_func, null_func, //274 - null_func, null_func, null_func, null_func, null_func, //279 - null_func, null_func, null_func, null_func, null_func, //284 - null_func, null_func, null_func, null_func, null_func, //289 - null_func, null_func, null_func, null_func, null_func, //294 - null_func, null_func, null_func, null_func, null_func, //299 + null_func, null_func, null_func, null_func, //264 UNS + null_func, null_func, null_func, null_func, null_func, //269 UNS + null_func, null_func, null_func, null_func, null_func, //274 UNS + null_func, null_func, null_func, null_func, null_func, //279 UNS + null_func, null_func, null_func, null_func, null_func, //284 UNS + null_func, null_func, null_func, null_func, null_func, //289 UNS + null_func, null_func, null_func, null_func, null_func, //294 UNS + null_func, null_func, null_func, null_func, null_func, //299 UNS bind_func(sys_vm_memory_map), //300 (0x12C) bind_func(sys_vm_unmap), //301 (0x12D) @@ -268,18 +282,17 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_vm_sync), //310 (0x136) bind_func(sys_vm_test), //311 (0x137) bind_func(sys_vm_get_statistics), //312 (0x138) - null_func,//bind_func() //313 (0x139) - null_func,//bind_func() //314 (0x13A) - null_func,//bind_func() //315 (0x13B) + null_func,//bind_func(sys_vm_memory_map (different)) //313 (0x139) + null_func,//bind_func(sys_...) //314 (0x13A) + null_func,//bind_func(sys_...) //315 (0x13B) - // Unused: 316-323 - null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, + null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, //316-323 UNS - bind_func(sys_memory_container_create), //324 (0x144) - bind_func(sys_memory_container_destroy), //325 (0x145) + bind_func(sys_memory_container_create), //324 (0x144) DBG + bind_func(sys_memory_container_destroy), //325 (0x145) DBG bind_func(sys_mmapper_allocate_fixed_address), //326 (0x146) bind_func(sys_mmapper_enable_page_fault_notification), //327 (0x147) - null_func,//bind_func() //328 (0x148) + null_func,//bind_func(sys_mmapper_...) //328 (0x148) null_func,//bind_func(sys_mmapper_free_shared_memory) //329 (0x149) bind_func(sys_mmapper_allocate_address), //330 (0x14A) bind_func(sys_mmapper_free_address), //331 (0x14B) @@ -290,57 +303,121 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_mmapper_change_address_access_right), //336 (0x150) bind_func(sys_mmapper_search_and_map), //337 (0x151) null_func,//bind_func(sys_mmapper_get_shared_memory_attribute) //338 (0x152) - null_func,//bind_func() //339 (0x153) - null_func,//bind_func() //340 (0x154) + null_func,//bind_func(sys_...) //339 (0x153) + null_func,//bind_func(sys_...) //340 (0x154) bind_func(sys_memory_container_create), //341 (0x155) bind_func(sys_memory_container_destroy), //342 (0x156) bind_func(sys_memory_container_get_size), //343 (0x157) null_func,//bind_func(sys_memory_budget_set) //344 (0x158) - null_func,//bind_func() //345 (0x159) - null_func,//bind_func() //346 (0x15A) - null_func, // + null_func,//bind_func(sys_memory_...) //345 (0x159) + null_func,//bind_func(sys_memory_...) //346 (0x15A) + null_func, //347 (0x15B) UNS bind_func(sys_memory_allocate), //348 (0x15C) bind_func(sys_memory_free), //349 (0x15D) bind_func(sys_memory_allocate_from_container), //350 (0x15E) bind_func(sys_memory_get_page_attribute), //351 (0x15F) bind_func(sys_memory_get_user_memory_size), //352 (0x160) null_func,//bind_func(sys_memory_get_user_memory_stat) //353 (0x161) - null_func,//bind_func() //354 (0x162) - null_func,//bind_func() //355 (0x163) + null_func,//bind_func(sys_memory_...) //354 (0x162) + null_func,//bind_func(sys_memory_...) //355 (0x163) null_func,//bind_func(sys_memory_allocate_colored) //356 (0x164) - null_func,//bind_func() //357 (0x165) - null_func,//bind_func() //358 (0x166) - null_func,//bind_func() //359 (0x167) - null_func,//bind_func() //360 (0x168) + null_func,//bind_func(sys_memory_...) //357 (0x165) + null_func,//bind_func(sys_memory_...) //358 (0x166) + null_func,//bind_func(sys_memory_...) //359 (0x167) + null_func,//bind_func(sys_memory_...) //360 (0x168) null_func,//bind_func(sys_memory_allocate_from_container_colored) //361 (0x169) null_func,//bind_func(sys_mmapper_allocate_memory_from_container) //362 (0x16A) - null_func,//bind_func() //363 (0x16B) - null_func,//bind_func() //364 (0x16C) + null_func,//bind_func(sys_mmapper_...) //363 (0x16B) + null_func,//bind_func(sys_mmapper_...) //364 (0x16C) + null_func, //365 (0x16D) UNS + null_func, //366 (0x16E) UNS + null_func,//bind_func(sys_uart_initialize) //367 (0x16F) ROOT + null_func,//bind_func(sys_uart_receive) //368 (0x170) ROOT + null_func,//bind_func(sys_uart_send) //369 (0x171) ROOT + null_func,//bind_func(sys_uart_get_params) //370 (0x172) ROOT + null_func, //371 (0x173) UNS + null_func,//bind_func(sys_game_watchdog_start) //372 (0x174) + null_func,//bind_func(sys_game_watchdog_stop) //373 (0x175) + null_func,//bind_func(sys_game_watchdog_clear) //374 (0x176) + null_func,//bind_func(sys_game_set_system_sw_version) //375 (0x177) ROOT + null_func,//bind_func(sys_game_get_system_sw_version) //376 (0x178) ROOT + null_func,//bind_func(sys_sm_set_shop_mode) //377 (0x179) ROOT + null_func,//bind_func(sys_sm_get_ext_event2) //378 (0x17A) ROOT + null_func,//bind_func(sys_sm_shutdown) //379 (0x17B) ROOT + null_func,//bind_func(sys_sm_get_params) //380 (0x17C) DBG + null_func,//bind_func(sys_sm_get_inter_lpar_parameter) //381 (0x17D) ROOT + null_func,//bind_func(sys_sm_) //382 (0x17E) ROOT + null_func,//bind_func(sys_game_get_temperature) //383 (0x17F) ROOT + null_func,//bind_func(sys_sm_get_tzpb) //384 (0x180) ROOT + null_func,//bind_func(sys_sm_request_led) //385 (0x181) ROOT + null_func,//bind_func(sys_sm_control_led) //386 (0x182) ROOT + null_func,//bind_func(sys_sm_get_platform_info) //387 (0x183) DBG + null_func,//bind_func(sys_sm_ring_buzzer) //388 (0x184) ROOT + null_func,//bind_func(sys_sm_set_fan_policy) //389 (0x185) PM + null_func,//bind_func(sys_sm_request_error_log) //390 (0x186) ROOT + null_func,//bind_func(sys_sm_request_be_count) //391 (0x187) ROOT + null_func,//bind_func(sys_sm_ring_buzzer) //392 (0x188) ROOT + null_func,//bind_func(sys_sm_get_hw_config) //393 (0x189) ROOT + null_func,//bind_func(sys_sm_request_scversion) //394 (0x18A) ROOT + null_func,//bind_func(sys_sm_request_system_event_log) //395 (0x18B) PM + null_func,//bind_func(sys_sm_set_rtc_alarm) //396 (0x18C) ROOT + null_func,//bind_func(sys_sm_get_rtc_alarm) //397 (0x18D) ROOT + null_func,//bind_func(sys_console_write) //398 (0x18E) ROOT + null_func, //399 (0x18F) UNS + null_func,//bind_func(sys_sm_...) //400 (0x190) PM + null_func,//bind_func(sys_sm_...) //401 (0x191) ROOT + bind_func(sys_tty_read), //402 (0x192) + bind_func(sys_tty_write), //403 (0x193) + null_func,//bind_func(sys_...) //404 (0x194) ROOT + null_func,//bind_func(sys_...) //405 (0x195) PM + null_func,//bind_func(sys_...) //406 (0x196) PM + null_func,//bind_func(sys_...) //407 (0x197) PM + null_func,//bind_func(sys_sm_get_tzpb) //408 (0x198) PM + null_func,//bind_func(sys_sm_get_fan_policy) //409 (0x199) PM + null_func,//bind_func(sys_game_board_storage_read) //410 (0x19A) + null_func,//bind_func(sys_game_board_storage_write) //411 (0x19B) + null_func,//bind_func(sys_game_get_rtc_status) //412 (0x19C) + null_func,//bind_func(sys_...) //413 (0x19D) ROOT + null_func,//bind_func(sys_...) //414 (0x19E) ROOT + null_func,//bind_func(sys_...) //415 (0x19F) ROOT + null_func, null_func, null_func, null_func, //419 UNS + null_func, null_func, null_func, null_func, null_func, //424 UNS + null_func, null_func, null_func, null_func, null_func, //429 UNS + null_func, null_func, null_func, null_func, null_func, //434 UNS + null_func, null_func, null_func, null_func, null_func, //439 UNS + null_func, null_func, null_func, null_func, null_func, //444 UNS + null_func, null_func, null_func, null_func, null_func, //449 UNS - null_func, null_func, null_func, null_func, null_func, //369 - null_func, null_func, null_func, null_func, null_func, //374 - null_func, null_func, null_func, null_func, null_func, //379 - null_func, null_func, null_func, null_func, null_func, //384 - null_func, null_func, null_func, null_func, null_func, //389 - null_func, null_func, null_func, null_func, null_func, //394 - null_func, null_func, null_func, null_func, null_func, //399 - null_func, null_func, bind_func(sys_tty_read), bind_func(sys_tty_write), null_func, //404 - null_func, null_func, null_func, null_func, null_func, //409 - null_func, null_func, null_func, null_func, null_func, //414 - null_func, null_func, null_func, null_func, null_func, //419 - null_func, null_func, null_func, null_func, null_func, //424 - null_func, null_func, null_func, null_func, null_func, //429 - null_func, null_func, null_func, null_func, null_func, //434 - null_func, null_func, null_func, null_func, null_func, //439 - null_func, null_func, null_func, null_func, null_func, //444 - null_func, null_func, null_func, null_func, null_func, //449 - null_func, null_func, null_func, null_func, null_func, //454 - null_func, null_func, null_func, null_func, null_func, //459 - null_func, null_func, null_func, null_func, null_func, //464 - null_func, null_func, null_func, null_func, null_func, //469 - null_func, null_func, null_func, null_func, null_func, //474 - null_func, null_func, null_func, null_func, null_func, //479 + null_func,//bind_func(sys_overlay_load_module) //450 (0x1C2) + null_func,//bind_func(sys_overlay_unload_module) //451 (0x1C3) + null_func,//bind_func(sys_overlay_get_module_list) //452 (0x1C4) + null_func,//bind_func(sys_overlay_get_module_info) //453 (0x1C5) + null_func,//bind_func(sys_overlay_load_module_by_fd) //454 (0x1C6) + null_func,//bind_func(sys_overlay_get_module_info2) //455 (0x1C7) + null_func,//bind_func(sys_overlay_get_sdk_version) //456 (0x1C8) + null_func,//bind_func(sys_overlay_get_module_dbg_info) //457 (0x1C9) + null_func,//bind_func(sys_overlay_get_module_dbg_info) //458 (0x1CA) + null_func, //459 (0x1CB) UNS + null_func,//bind_func(sys_prx_dbg_get_module_id_list) //460 (0x1CC) ROOT + null_func,//bind_func(sys_prx_get_module_id_by_address) //461 (0x1CD) + null_func, //462 (0x1CE) UNS + null_func,//bind_func(sys_prx_load_module_by_fd) //463 (0x1CF) + null_func,//bind_func(sys_prx_load_module_on_memcontainer_by_fd) //464 (0x1D0) + null_func,//bind_func(sys_prx_load_module_list) //465 (0x1D1) + null_func,//bind_func(sys_prx_load_module_list_on_memcontainer) //466 (0x1D2) + null_func,//bind_func(sys_prx_get_ppu_guid) //467 (0x1D3) + null_func,//bind_func(sys_...) //468 (0x1D4) ROOT + null_func, //469 (0x1D5) UNS + null_func,//bind_func(sys_...) //470 (0x1D6) ROOT + null_func,//bind_func(sys_...) //471 (0x1D7) ROOT + null_func,//bind_func(sys_...) //472 (0x1D8) ROOT + null_func,//bind_func(sys_...) //473 (0x1D9) + null_func,//bind_func(sys_...) //474 (0x1DA) + null_func,//bind_func(sys_...) //475 (0x1DB) ROOT + null_func,//bind_func(sys_...) //476 (0x1DC) ROOT + + null_func, null_func, null_func, //477-479 UNS bind_func(sys_prx_load_module), //480 (0x1E0) bind_func(sys_prx_start_module), //481 (0x1E1) @@ -353,50 +430,172 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_prx_link_library), //488 (0x1E8) bind_func(sys_prx_unlink_library), //489 (0x1E9) bind_func(sys_prx_query_library), //490 (0x1EA) - null_func, //491 (0x1EB) - null_func, //492 (0x1EC) - null_func,//sys_prx_dbg_get_module_info //493 (0x1ED) + null_func, //491 (0x1EB) UNS + null_func,//bind_func(sys_...) //492 (0x1EC) DBG + null_func,//bind_func(sys_prx_dbg_get_module_info) //493 (0x1ED) DBG bind_func(sys_prx_get_module_list), //494 (0x1EE) bind_func(sys_prx_get_module_info), //495 (0x1EF) bind_func(sys_prx_get_module_id_by_name), //496 (0x1F0) bind_func(sys_prx_load_module_on_memcontainer), //497 (0x1F1) bind_func(sys_prx_start), //498 (0x1F2) bind_func(sys_prx_stop), //499 (0x1F3) + null_func,//bind_func(sys_hid_manager_open) //500 (0x1F4) + null_func,//bind_func(sys_hid_manager_close) //501 (0x1F5) + null_func,//bind_func(sys_hid_manager_read) //502 (0x1F6) ROOT + null_func,//bind_func(sys_hid_manager_ioctl) //503 (0x1F7) + null_func,//bind_func(sys_hid_manager_map_logical_id_to_port_id) //504 (0x1F8) ROOT + null_func,//bind_func(sys_hid_manager_unmap_logical_id_to_port_id) //505 (0x1F9) ROOT + null_func,//bind_func(sys_hid_manager_add_hot_key_observer) //506 (0x1FA) ROOT + null_func,//bind_func(sys_hid_manager_remove_hot_key_observer) //507 (0x1FB) ROOT + null_func,//bind_func(sys_hid_manager_grab_focus) //508 (0x1FC) ROOT + null_func,//bind_func(sys_hid_manager_release_focus) //509 (0x1FD) ROOT + null_func,//bind_func(sys_hid_manager_...) //510 (0x1FE) + null_func,//bind_func(sys_hid_manager_set_...) //511 (0x1FF) ROOT + null_func,//bind_func(sys_hid_manager_...) //512 (0x200) ROOT + null_func,//bind_func(sys_hid_manager_...) //513 (0x201) + null_func,//bind_func(sys_hid_manager_...) //514 (0x202) + null_func, //515 (0x203) UNS + null_func,//bind_func(sys_config_open) //516 (0x204) + null_func,//bind_func(sys_config_close) //517 (0x205) + null_func,//bind_func(sys_config_get_service_event) //518 (0x206) + null_func,//bind_func(sys_config_add_service_listener) //519 (0x207) + null_func,//bind_func(sys_config_remove_service_listener) //520 (0x208) + null_func,//bind_func(sys_config_register_service) //521 (0x209) + null_func,//bind_func(sys_config_unregister_service) //522 (0x20A) + null_func,//bind_func(sys_config_io_event) //523 (0x20B) + null_func,//bind_func(sys_config_...) //524 (0x20C) + null_func,//bind_func(sys_config_...) //525 (0x20D) + null_func, //526 (0x20E) UNS + null_func, //527 (0x20F) UNS + null_func, //528 (0x210) UNS + null_func, //529 (0x211) UNS + null_func,//bind_func(sys_usbd_initialize) //530 (0x212) + null_func,//bind_func(sys_usbd_finalize) //531 (0x213) + null_func,//bind_func(sys_usbd_get_device_list) //532 (0x214) + null_func,//bind_func(sys_usbd_get_descriptor_size) //533 (0x215) + null_func,//bind_func(sys_usbd_get_descriptor) //534 (0x216) + null_func,//bind_func(sys_usbd_register_ldd) //535 (0x217) + null_func,//bind_func(sys_usbd_unregister_ldd) //536 (0x218) + null_func,//bind_func(sys_usbd_open_pipe) //537 (0x219) + null_func,//bind_func(sys_usbd_open_default_pipe) //538 (0x21A) + null_func,//bind_func(sys_usbd_close_pipe) //539 (0x21B) + null_func,//bind_func(sys_usbd_receive_event) //540 (0x21C) + null_func,//bind_func(sys_usbd_detect_event) //541 (0x21D) + null_func,//bind_func(sys_usbd_attach) //542 (0x21E) + null_func,//bind_func(sys_usbd_transfer_data) //543 (0x21F) + null_func,//bind_func(sys_usbd_isochronous_transfer_data) //544 (0x220) + null_func,//bind_func(sys_usbd_get_transfer_status) //545 (0x221) + null_func,//bind_func(sys_usbd_get_isochronous_transfer_status) //546 (0x222) + null_func,//bind_func(sys_usbd_get_device_location) //547 (0x223) + null_func,//bind_func(sys_usbd_send_event) //548 (0x224) + null_func,//bind_func(sys_ubsd_...) //549 (0x225) + null_func,//bind_func(sys_usbd_allocate_memory) //550 (0x226) + null_func,//bind_func(sys_usbd_free_memory) //551 (0x227) + null_func,//bind_func(sys_ubsd_...) //552 (0x228) + null_func,//bind_func(sys_ubsd_...) //553 (0x229) + null_func,//bind_func(sys_ubsd_...) //554 (0x22A) + null_func,//bind_func(sys_ubsd_...) //555 (0x22B) + null_func,//bind_func(sys_usbd_get_device_speed) //556 (0x22C) + null_func,//bind_func(sys_ubsd_...) //557 (0x22D) + null_func,//bind_func(sys_ubsd_...) //558 (0x22E) + null_func,//bind_func(sys_usbd_register_extra_ldd) //559 (0x22F) + null_func,//bind_func(sys_...) //560 (0x230) ROOT + null_func,//bind_func(sys_...) //561 (0x231) ROOT + null_func,//bind_func(sys_...) //562 (0x232) ROOT + null_func,//bind_func(sys_...) //563 (0x233) + null_func,//bind_func(sys_...) //564 (0x234) + null_func,//bind_func(sys_...) //565 (0x235) + null_func,//bind_func(sys_...) //566 (0x236) + null_func,//bind_func(sys_...) //567 (0x237) + null_func,//bind_func(sys_...) //568 (0x238) + null_func,//bind_func(sys_...) //569 (0x239) + null_func,//bind_func(sys_...) //570 (0x23A) + null_func,//bind_func(sys_pad_ldd_unregister_controller) //571 (0x23B) + null_func,//bind_func(sys_pad_ldd_data_insert) //572 (0x23C) + null_func,//bind_func(sys_pad_dbg_ldd_set_data_insert_mode) //573 (0x23D) + null_func,//bind_func(sys_pad_ldd_register_controller) //574 (0x23E) + null_func,//bind_func(sys_pad_ldd_get_port_no) //575 (0x23F) + null_func, //576 (0x240) UNS + null_func,//bind_func(sys_pad_manager_...) //577 (0x241) ROOT PM + null_func,//bind_func(sys_bluetooth_...) //578 (0x242) + null_func,//bind_func(sys_bluetooth_...) //579 (0x243) + null_func,//bind_func(sys_bluetooth_...) //580 (0x244) ROOT + null_func,//bind_func(sys_bluetooth_...) //581 (0x245) ROOT + null_func,//bind_func(sys_bluetooth_...) //582 (0x246) ROOT + null_func,//bind_func(sys_bluetooth_...) //583 (0x247) ROOT + null_func,//bind_func(sys_bluetooth_...) //584 (0x248) ROOT + null_func,//bind_func(sys_bluetooth_...) //585 (0x249) + null_func,//bind_func(sys_bluetooth_...) //586 (0x24A) + null_func,//bind_func(sys_bluetooth_...) //587 (0x24B) ROOT + null_func,//bind_func(sys_bluetooth_...) //588 (0x24C) + null_func,//bind_func(sys_bluetooth_...) //589 (0x24D) + null_func,//bind_func(sys_bluetooth_...) //590 (0x24E) ROOT + null_func,//bind_func(sys_bluetooth_...) //591 (0x24F) + null_func,//bind_func(sys_bluetooth_...) //592 (0x250) + null_func,//bind_func(sys_bluetooth_...) //593 (0x251) ROOT + null_func,//bind_func(sys_bluetooth_...) //594 (0x252) + null_func,//bind_func(sys_bluetooth_...) //595 (0x253) + null_func,//bind_func(sys_bluetooth_...) //596 (0x254) + null_func,//bind_func(sys_bluetooth_...) //597 (0x255) + null_func,//bind_func(sys_bluetooth_...) //598 (0x256) ROOT + null_func,//bind_func(sys_bluetooth_...) //599 (0x257) ROOT + null_func,//bind_func(sys_storage_open) //600 (0x258) ROOT + null_func,//bind_func(sys_storage_close) //601 (0x259) + null_func,//bind_func(sys_storage_read) //602 (0x25A) + null_func,//bind_func(sys_storage_write) //603 (0x25B) + null_func,//bind_func(sys_storage_send_device_command) //604 (0x25C) + null_func,//bind_func(sys_storage_async_configure) //605 (0x25D) + null_func,//bind_func(sys_storage_async_read) //606 (0x25E) + null_func,//bind_func(sys_storage_async_write) //607 (0x25F) + null_func,//bind_func(sys_storage_async_cancel) //608 (0x260) + null_func,//bind_func(sys_storage_get_device_info) //609 (0x261) ROOT + null_func,//bind_func(sys_storage_get_device_config) //610 (0x262) ROOT + null_func,//bind_func(sys_storage_report_devices) //611 (0x263) ROOT + null_func,//bind_func(sys_storage_configure_medium_event) //612 (0x264) ROOT + null_func,//bind_func(sys_storage_set_medium_polling_interval) //613 (0x265) + null_func,//bind_func(sys_storage_create_region) //614 (0x266) + null_func,//bind_func(sys_storage_delete_region) //615 (0x267) + null_func,//bind_func(sys_storage_execute_device_command) //616 (0x268) + null_func,//bind_func(sys_storage_check_region_acl) //617 (0x269) + null_func,//bind_func(sys_storage_set_region_acl) //618 (0x26A) + null_func,//bind_func(sys_storage_async_send_device_command) //619 (0x26B) + null_func,//bind_func(sys_...) //620 (0x26C) ROOT + null_func,//bind_func(sys_gamepad_ycon_if) //621 (0x26D) + null_func,//bind_func(sys_storage_get_region_offset) //622 (0x26E) + null_func,//bind_func(sys_storage_set_emulated_speed) //623 (0x26F) + null_func,//bind_func(sys_io_buffer_create) //624 (0x270) + null_func,//bind_func(sys_io_buffer_destroy) //625 (0x271) + null_func,//bind_func(sys_io_buffer_allocate) //626 (0x272) + null_func,//bind_func(sys_io_buffer_free) //627 (0x273) + null_func, //628 (0x274) UNS + null_func, //629 (0x275) UNS + null_func,//bind_func(sys_gpio_set) //630 (0x276) + null_func,//bind_func(sys_gpio_get) //631 (0x277) + null_func, //632 (0x278) UNS + null_func,//bind_func(sys_fsw_connect_event) //633 (0x279) + null_func,//bind_func(sys_fsw_disconnect_event) //634 (0x27A) + null_func,//bind_func(sys_btsetting_if) //635 (0x27B) + null_func,//bind_func(sys_...) //636 (0x27C) + null_func,//bind_func(sys_...) //637 (0x27D) + null_func,//bind_func(sys_...) //638 (0x27E) - null_func, null_func, null_func, null_func, null_func, //504 - null_func, null_func, null_func, null_func, null_func, //509 - null_func, null_func, null_func, null_func, null_func, //514 - null_func, null_func, null_func, null_func, null_func, //519 - null_func, null_func, null_func, null_func, null_func, //524 - null_func, null_func, null_func, null_func, null_func, //529 - null_func, null_func, null_func, null_func, null_func, //534 - null_func, null_func, null_func, null_func, null_func, //539 - null_func, null_func, null_func, null_func, null_func, //544 - null_func, null_func, null_func, null_func, null_func, //549 - null_func, null_func, null_func, null_func, null_func, //554 - null_func, null_func, null_func, null_func, null_func, //559 - null_func, null_func, null_func, null_func, null_func, //564 - null_func, null_func, null_func, null_func, null_func, //569 - null_func, null_func, null_func, null_func, null_func, //574 - null_func, null_func, null_func, null_func, null_func, //579 - null_func, null_func, null_func, null_func, null_func, //584 - null_func, null_func, null_func, null_func, null_func, //589 - null_func, null_func, null_func, null_func, null_func, //594 - null_func, null_func, null_func, null_func, null_func, //599 - null_func, null_func, null_func, null_func, null_func, //604 - null_func, null_func, null_func, null_func, null_func, //609 - null_func, null_func, null_func, null_func, null_func, //614 - null_func, null_func, null_func, null_func, null_func, //619 - null_func, null_func, null_func, null_func, null_func, //624 - null_func, null_func, null_func, null_func, null_func, //629 - null_func, null_func, null_func, null_func, null_func, //634 - null_func, null_func, null_func, null_func, null_func, //639 - null_func, null_func, null_func, null_func, null_func, //644 - null_func, null_func, null_func, null_func, null_func, //649 - null_func, null_func, null_func, null_func, null_func, //654 - null_func, null_func, null_func, null_func, null_func, //659 - null_func, null_func, null_func, null_func, null_func, //664 - null_func, //665 + null_func, //639 DEPRECATED + null_func, null_func, null_func, null_func, null_func, //644 DEPRECATED + null_func, null_func, null_func, null_func, null_func, //649 DEPRECATED + + null_func,//bind_func(sys_rsxaudio_initialize) //650 (0x28A) + null_func,//bind_func(sys_rsxaudio_finalize) //651 (0x28B) + null_func,//bind_func(sys_rsxaudio_import_shared_memory) //652 (0x28C) + null_func,//bind_func(sys_rsxaudio_unimport_shared_memory) //653 (0x28D) + null_func,//bind_func(sys_rsxaudio_create_connection) //654 (0x28E) + null_func,//bind_func(sys_rsxaudio_close_connection) //655 (0x28F) + null_func,//bind_func(sys_rsxaudio_prepare_process) //656 (0x290) + null_func,//bind_func(sys_rsxaudio_start_process) //657 (0x291) + null_func,//bind_func(sys_rsxaudio_) //658 (0x292) + null_func,//bind_func(sys_rsxaudio_) //659 (0x293) + + null_func, null_func, null_func, null_func, null_func, //664 UNS + null_func, //665 UNS bind_func(sys_rsx_device_open), //666 (0x29A) bind_func(sys_rsx_device_close), //667 (0x29B) @@ -410,33 +609,71 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_rsx_device_map), //675 (0x2A3) bind_func(sys_rsx_device_unmap), //676 (0x2A4) bind_func(sys_rsx_attribute), //677 (0x2A5) - null_func, //678 (0x2A6) - null_func, //679 (0x2A7) ROOT + null_func,//bind_func(sys_...) //678 (0x2A6) + null_func,//bind_func(sys_...) //679 (0x2A7) ROOT + null_func,//bind_func(sys_...) //680 (0x2A8) ROOT + null_func,//bind_func(sys_...) //681 (0x2A9) ROOT + null_func,//bind_func(sys_...) //682 (0x2AA) ROOT + null_func,//bind_func(sys_...) //683 (0x2AB) ROOT + null_func,//bind_func(sys_...) //684 (0x2AC) ROOT + null_func,//bind_func(sys_...) //685 (0x2AD) ROOT + null_func,//bind_func(sys_...) //686 (0x2AE) ROOT + null_func,//bind_func(sys_...) //687 (0x2AF) ROOT + null_func,//bind_func(sys_...) //688 (0x2B0) ROOT + null_func,//bind_func(sys_...) //689 (0x2B1) ROOT + null_func,//bind_func(sys_...) //690 (0x2B2) ROOT + null_func,//bind_func(sys_...) //691 (0x2B3) ROOT + null_func,//bind_func(sys_...) //692 (0x2B4) ROOT + null_func,//bind_func(sys_...) //693 (0x2B5) ROOT + null_func,//bind_func(sys_...) //694 (0x2B6) DEPRECATED + null_func,//bind_func(sys_...) //695 (0x2B7) DEPRECATED + null_func,//bind_func(sys_...) //696 (0x2B8) ROOT + null_func,//bind_func(sys_...) //697 (0x2B9) UNS + null_func,//bind_func(sys_...) //698 (0x2BA) UNS + null_func,//bind_func(sys_bdemu_send_command) //699 (0x2BB) + null_func,//bind_func(sys_net_bnet_accept) //700 (0x2BC) + null_func,//bind_func(sys_net_bnet_bind) //701 (0x2BD) + null_func,//bind_func(sys_net_bnet_connect) //702 (0x2BE) + null_func,//bind_func(sys_net_bnet_getpeername) //703 (0x2BF) + null_func,//bind_func(sys_net_bnet_getsockname) //704 (0x2C0) + null_func,//bind_func(sys_net_bnet_getsockopt) //705 (0x2C1) + null_func,//bind_func(sys_net_bnet_listen) //706 (0x2C2) + null_func,//bind_func(sys_net_bnet_recvfrom) //707 (0x2C3) + null_func,//bind_func(sys_net_bnet_recvmsg) //708 (0x2C4) + null_func,//bind_func(sys_net_bnet_sendmsg) //709 (0x2C5) + null_func,//bind_func(sys_net_bnet_sendto) //710 (0x2C6) + null_func,//bind_func(sys_net_bnet_setsockop) //711 (0x2C7) + null_func,//bind_func(sys_net_bnet_shutdown) //712 (0x2C8) + null_func,//bind_func(sys_net_bnet_socket) //713 (0x2C9) + null_func,//bind_func(sys_net_bnet_close) //714 (0x2CA) + null_func,//bind_func(sys_net_bnet_poll) //715 (0x2CB) + null_func,//bind_func(sys_net_bnet_select) //716 (0x2CC) + null_func,//bind_func(sys_net_open_dump) //717 (0x2CD) + null_func,//bind_func(sys_net_read_dump) //718 (0x2CE) + null_func,//bind_func(sys_net_close_dump) //719 (0x2CF) + null_func,//bind_func(sys_net_write_dump) //720 (0x2D0) + null_func,//bind_func(sys_net_abort) //721 (0x2D1) + null_func,//bind_func(sys_net_infoctl) //722 (0x2D2) + null_func,//bind_func(sys_net_control) //723 (0x2D3) + null_func,//bind_func(sys_net_bnet_ioctl) //724 (0x2D4) + null_func,//bind_func(sys_net_bnet_sysctl) //725 (0x2D5) + null_func,//bind_func(sys_net_eurus_post_command) //726 (0x2D6) - null_func, null_func, null_func, null_func, null_func, //684 - null_func, null_func, null_func, null_func, null_func, //689 - null_func, null_func, null_func, null_func, null_func, //694 - null_func, null_func, null_func, null_func, null_func, //699 - null_func, null_func, null_func, null_func, null_func, //704 - null_func, null_func, null_func, null_func, null_func, //709 - null_func, null_func, null_func, null_func, null_func, //714 - null_func, null_func, null_func, null_func, null_func, //719 - null_func, null_func, null_func, null_func, null_func, //724 - null_func, null_func, null_func, null_func, null_func, //729 - null_func, null_func, null_func, null_func, null_func, //734 - null_func, null_func, null_func, null_func, null_func, //739 - null_func, null_func, null_func, null_func, null_func, //744 - null_func, null_func, null_func, null_func, null_func, //749 - null_func, null_func, null_func, null_func, null_func, //754 - null_func, null_func, null_func, null_func, null_func, //759 - null_func, null_func, null_func, null_func, null_func, //764 - null_func, null_func, null_func, null_func, null_func, //769 - null_func, null_func, null_func, null_func, null_func, //774 - null_func, null_func, null_func, null_func, null_func, //779 - null_func, null_func, null_func, null_func, null_func, //784 - null_func, null_func, null_func, null_func, null_func, //789 - null_func, null_func, null_func, null_func, null_func, //794 - null_func, null_func, null_func, null_func, null_func, //799 + null_func, null_func, null_func, //729 UNS + null_func, null_func, null_func, null_func, null_func, //734 UNS + null_func, null_func, null_func, null_func, null_func, //739 UNS + null_func, null_func, null_func, null_func, null_func, //744 UNS + null_func, null_func, null_func, null_func, null_func, //749 UNS + null_func, null_func, null_func, null_func, null_func, //754 UNS + null_func, null_func, null_func, null_func, null_func, //759 UNS + null_func, null_func, null_func, null_func, null_func, //764 UNS + null_func, null_func, null_func, null_func, null_func, //769 UNS + null_func, null_func, null_func, null_func, null_func, //774 UNS + null_func, null_func, null_func, null_func, null_func, //779 UNS + null_func, null_func, null_func, null_func, null_func, //784 UNS + null_func, null_func, null_func, null_func, null_func, //789 UNS + null_func, null_func, null_func, null_func, null_func, //794 UNS + null_func, null_func, null_func, null_func, null_func, //799 UNS null_func,//bind_func(sys_fs_test), //800 (0x320) bind_func(cellFsOpen), //801 (0x321) @@ -487,42 +724,148 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_fs_mapped_free), //846 (0x34E) null_func,//bind_func(sys_fs_truncate2), //847 (0x34F) - null_func, null_func, //849 - null_func, null_func, null_func, null_func, null_func, //854 - null_func, null_func, null_func, null_func, null_func, //859 - null_func, null_func, null_func, null_func, null_func, //864 - null_func, null_func, null_func, null_func, null_func, //869 - null_func, null_func, null_func, null_func, null_func, //874 - null_func, null_func, null_func, null_func, null_func, //879 - null_func, null_func, null_func, null_func, null_func, //884 - null_func, null_func, null_func, null_func, null_func, //889 - null_func, null_func, null_func, null_func, null_func, //894 - null_func, null_func, null_func, null_func, null_func, //899 - null_func, null_func, null_func, null_func, null_func, //904 - null_func, null_func, null_func, null_func, null_func, //909 - null_func, null_func, null_func, null_func, null_func, //914 - null_func, null_func, null_func, null_func, null_func, //919 - null_func, null_func, null_func, null_func, null_func, //924 - null_func, null_func, null_func, null_func, null_func, //929 - null_func, null_func, null_func, null_func, null_func, //934 - null_func, null_func, null_func, null_func, null_func, //939 - null_func, null_func, null_func, null_func, null_func, //944 - null_func, null_func, null_func, null_func, null_func, //949 - null_func, null_func, null_func, null_func, null_func, //954 - null_func, null_func, null_func, null_func, null_func, //959 - null_func, null_func, null_func, null_func, null_func, //964 - null_func, null_func, null_func, null_func, null_func, //969 - null_func, null_func, null_func, null_func, null_func, //974 - null_func, null_func, null_func, null_func, null_func, //979 - null_func, null_func, null_func, null_func, null_func, //984 - null_func, null_func, null_func, null_func, null_func, //989 - null_func, null_func, null_func, null_func, null_func, //994 - null_func, null_func, null_func, null_func, null_func, //999 - null_func, null_func, null_func, null_func, null_func, //1004 - null_func, null_func, null_func, null_func, null_func, //1009 - null_func, null_func, null_func, null_func, null_func, //1014 - null_func, null_func, null_func, null_func, null_func, //1019 - null_func, null_func, null_func, bind_func(cellGcmCallback), //1023 + null_func, null_func, //849 UNS + null_func, null_func, null_func, null_func, null_func, //854 UNS + null_func, null_func, null_func, null_func, null_func, //859 UNS + + null_func,//bind_func(syscall_sys_ss_get_cache_of_analog_sunset_flag), //860 (0x35C) AUTHID + null_func,//bind_func(syscall_...) //861 ROOT + null_func,//bind_func(syscall_...) //862 ROOT + null_func,//bind_func(syscall_...) //863 ROOT + null_func,//bind_func(syscall_...) //864 DBG + null_func,//bind_func(sys_ss_random_number_generator), //865 (0x361) ROOT AUTHID + null_func,//bind_func(sys_...) //866 ROOT + null_func,//bind_func(sys_...) //867 ROOT + null_func,//bind_func(sys_...) //868 ROOT / DBG AUTHID + null_func,//bind_func(sys_...) //869 ROOT + null_func,//bind_func(sys_ss_get_console_id), //870 (0x366) + null_func,//bind_func(sys_ss_access_control_engine), //871 (0x367) DBG + null_func,//bind_func(sys_ss_get_open_psid), //872 (0x368) + null_func,//bind_func(sys_ss_get_cache_of_product_mode), //873 (0x369) + null_func,//bind_func(sys_ss_get_cache_of_flash_ext_flag), //874 (0x36A) + null_func,//bind_func(sys_ss_get_boot_device) //875 (0x36B) + null_func,//bind_func(sys_ss_disc_access_control) //876 (0x36C) + null_func,//bind_func(sys_ss_~utoken_if) //877 (0x36D) ROOT + null_func,//bind_func(sys_ss_ad_sign) //878 (0x36E) + null_func,//bind_func(sys_ss_media_id) //879 (0x36F) + null_func,//bind_func(sys_deci3_open) //880 (0x370) + null_func,//bind_func(sys_deci3_create_event_path) //881 (0x371) + null_func,//bind_func(sys_deci3_close) //882 (0x372) + null_func,//bind_func(sys_deci3_send) //883 (0x373) + null_func,//bind_func(sys_deci3_receive) //884 (0x374) + null_func,//bind_func(sys_deci3_open2) //885 (0x375) + null_func, //886 (0x376) UNS + null_func, //887 (0x377) UNS + null_func, //888 (0x378) UNS + null_func,//bind_func(sys_...) //889 (0x379) ROOT + null_func,//bind_func(sys_deci3_initialize) //890 (0x37A) + null_func,//bind_func(sys_deci3_terminate) //891 (0x37B) + null_func,//bind_func(sys_deci3_debug_mode) //892 (0x37C) + null_func,//bind_func(sys_deci3_show_status) //893 (0x37D) + null_func,//bind_func(sys_deci3_echo_test) //894 (0x37E) + null_func,//bind_func(sys_deci3_send_dcmp_packet) //895 (0x37F) + null_func,//bind_func(sys_deci3_dump_cp_register) //896 (0x380) + null_func,//bind_func(sys_deci3_dump_cp_buffer) //897 (0x381) + null_func, //898 (0x382) UNS + null_func,//bind_func(sys_deci3_test) //899 (0x383) + null_func,//bind_func(sys_dbg_stop_processes) //900 (0x384) + null_func,//bind_func(sys_dbg_continue_processes) //901 (0x385) + null_func,//bind_func(sys_dbg_stop_threads) //902 (0x386) + null_func,//bind_func(sys_dbg_continue_threads) //903 (0x387) + null_func,//bind_func(sys_dbg_read_process_memory) //904 (0x388) + null_func,//bind_func(sys_dbg_write_process_memory) //905 (0x389) + null_func,//bind_func(sys_dbg_read_thread_register) //906 (0x38A) + null_func,//bind_func(sys_dbg_write_thread_register) //907 (0x38B) + null_func,//bind_func(sys_dbg_get_process_list) //908 (0x38C) + null_func,//bind_func(sys_dbg_get_thread_list) //909 (0x38D) + null_func,//bind_func(sys_dbg_get_thread_info) //910 (0x38E) + null_func,//bind_func(sys_dbg_spu_thread_read_from_ls) //911 (0x38F) + null_func,//bind_func(sys_dbg_spu_thread_write_to_ls) //912 (0x390) + null_func,//bind_func(sys_dbg_kill_process) //913 (0x391) + null_func,//bind_func(sys_dbg_get_process_info) //914 (0x392) + null_func,//bind_func(sys_dbg_set_run_control_bit_to_spu) //915 (0x393) + null_func,//bind_func(sys_dbg_spu_thread_get_exception_cause) //916 (0x394) + null_func,//bind_func(sys_dbg_create_kernel_event_queue) //917 (0x395) + null_func,//bind_func(sys_dbg_read_kernel_event_queue) //918 (0x396) + null_func,//bind_func(sys_dbg_destroy_kernel_event_queue) //919 (0x397) + null_func,//bind_func(sys_dbg_get_process_event_ctrl_flag) //920 (0x398) + null_func,//bind_func(sys_dbg_set_process_event_cntl_flag) //921 (0x399) + null_func,//bind_func(sys_dbg_get_spu_thread_group_event_cntl_flag) //922 (0x39A) + null_func,//bind_func(sys_dbg_set_spu_thread_group_event_cntl_flag) //923 (0x39B) + null_func,//bind_func(sys_...) //924 (0x39C) + null_func,//bind_func(sys_dbg_get_raw_spu_list) //925 (0x39D) + null_func,//bind_func(sys_...) //926 (0x39E) + null_func,//bind_func(sys_...) //927 (0x3A0) + null_func,//bind_func(sys_...) //928 (0x3A1) + null_func,//bind_func(sys_...) //929 (0x3A2) + null_func,//bind_func(sys_...) //930 (0x3A3) + null_func,//bind_func(sys_...) //931 (0x3A4) + null_func,//bind_func(sys_dbg_get_mutex_list) //932 (0x3A4) + null_func,//bind_func(sys_dbg_get_mutex_information) //933 (0x3A5) + null_func,//bind_func(sys_dbg_get_cond_list) //934 (0x3A6) + null_func,//bind_func(sys_dbg_get_cond_information) //935 (0x3A7) + null_func,//bind_func(sys_dbg_get_rwlock_list) //936 (0x3A8) + null_func,//bind_func(sys_dbg_get_rwlock_information) //937 (0x3A9) + null_func,//bind_func(sys_dbg_get_lwmutex_list) //938 (0x3AA) + null_func,//bind_func(sys_dbg_get_address_from_dabr) //939 (0x3AB) + null_func,//bind_func(sys_dbg_set_address_to_dabr) //940 (0x3AC) + null_func,//bind_func(sys_dbg_get_lwmutex_information) //941 (0x3AD) + null_func,//bind_func(sys_dbg_get_event_queue_list) //942 (0x3AE) + null_func,//bind_func(sys_dbg_get_event_queue_information) //943 (0x3AF) + null_func,//bind_func(sys_dbg_initialize_ppu_exception_handler) //944 (0x3B0) + null_func,//bind_func(sys_dbg_finalize_ppu_exception_handler) //945 (0x3B1) DBG + null_func,//bind_func(sys_dbg_get_semaphore_list) //946 (0x3B2) + null_func,//bind_func(sys_dbg_get_semaphore_information) //947 (0x3B3) + null_func,//bind_func(sys_dbg_get_kernel_thread_list) //948 (0x3B4) + null_func,//bind_func(sys_dbg_get_kernel_thread_info) //949 (0x3B5) + null_func,//bind_func(sys_dbg_get_lwcond_list) //950 (0x3B6) + null_func,//bind_func(sys_dbg_get_lwcond_information) //951 (0x3B7) + null_func,//bind_func(sys_dbg_create_scratch_data_area_ext) //952 (0x3B8) + null_func,//bind_func(sys_dbg_vm_get_page_information) //953 (0x3B9) + null_func,//bind_func(sys_dbg_vm_get_info) //954 (0x3BA) + null_func,//bind_func(sys_dbg_enable_floating_point_enabled_exception) //955 (0x3BB) + null_func,//bind_func(sys_dbg_disable_floating_point_enabled_exception) //956 (0x3BC) + null_func,//bind_func(sys_dbg_...) //957 (0x3BD) DBG + null_func, //958 (0x3BE) UNS + null_func,//bind_func(sys_dbg_...) //959 (0x3BF) + null_func,//bind_func(sys_dbg_perfomance_monitor) //960 (0x3C0) + null_func,//bind_func(sys_dbg_...) //961 (0x3C1) + null_func,//bind_func(sys_dbg_...) //962 (0x3C2) + null_func,//bind_func(sys_dbg_...) //963 (0x3C3) + null_func,//bind_func(sys_dbg_...) //964 (0x3C4) + null_func,//bind_func(sys_dbg_...) //965 (0x3C5) + null_func,//bind_func(sys_dbg_...) //966 (0x3C6) + null_func,//bind_func(sys_dbg_...) //967 (0x3C7) + null_func,//bind_func(sys_dbg_...) //968 (0x3C8) + null_func,//bind_func(sys_dbg_...) //969 (0x3C9) + null_func,//bind_func(sys_dbg_get_event_flag_list) //970 (0x3CA) + null_func,//bind_func(sys_dbg_get_event_flag_information) //971 (0x3CB) + null_func,//bind_func(sys_dbg_...) //972 (0x3CC) + null_func,//bind_func(sys_dbg_...) //973 (0x3CD) + null_func,//bind_func(sys_dbg_...) //974 (0x3CE) + null_func,//bind_func(sys_dbg_read_spu_thread_context2) //975 (0x3CF) + null_func,//bind_func(sys_dbg_...) //976 (0x3D0) + null_func,//bind_func(sys_dbg_...) //977 (0x3D1) + null_func,//bind_func(sys_dbg_...) //978 (0x3D2) ROOT + null_func,//bind_func(sys_dbg_...) //979 (0x3D3) + null_func,//bind_func(sys_dbg_...) //980 (0x3D4) + null_func,//bind_func(sys_dbg_...) //981 (0x3D5) ROOT + null_func,//bind_func(sys_dbg_...) //982 (0x3D6) + null_func,//bind_func(sys_dbg_...) //983 (0x3D7) + null_func,//bind_func(sys_dbg_...) //984 (0x3D8) + null_func,//bind_func(sys_dbg_get_console_type) //985 (0x3D9) ROOT + null_func,//bind_func(sys_dbg_...) //986 (0x3DA) ROOT DBG + null_func,//bind_func(sys_dbg_...) //987 (0x3DB) ROOT + null_func,//bind_func(sys_dbg_..._ppu_exception_handler) //988 (0x3DC) + null_func,//bind_func(sys_dbg_...) //989 (0x3DD) + + null_func, null_func, null_func, null_func, null_func, //994 UNS + null_func, null_func, null_func, null_func, null_func, //999 UNS + null_func, null_func, null_func, null_func, null_func, //1004 UNS + null_func, null_func, null_func, null_func, null_func, //1009 UNS + null_func, null_func, null_func, null_func, null_func, //1014 UNS + null_func, null_func, null_func, null_func, null_func, //1019 UNS + null_func, null_func, null_func, bind_func(cellGcmCallback), //1023 UNS }; /** HACK: Used to delete func_caller objects that get allocated and stored in sc_table (above). From 143a75616ceb4adb644940e024fcd89a68febb0d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 29 Jul 2014 00:29:38 +0400 Subject: [PATCH 252/499] Conflicts fixed --- rpcs3/Emu/GS/GCM.h | 22 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 82 +- rpcs3/Emu/GS/GL/GLProgramBuffer.cpp | 4 +- rpcs3/Emu/GS/RSXThread.cpp | 650 ++----- rpcs3/Emu/GS/RSXThread.h | 2 + rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 2508 +++++++++++++++++++++++++- rpcs3/Emu/SysCalls/SysCalls.cpp | 743 ++++++-- rpcs3/stdafx.h | 2 +- 8 files changed, 3314 insertions(+), 699 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 386c86b644..af6d412e96 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -190,8 +190,13 @@ enum // GPU Class Handles enum { - CELL_GCM_CONTEXT_SURFACE2D = 0x313371C3, - CELL_GCM_CONTEXT_SWIZZLE2D = 0x31337A73, + CELL_GCM_CONTEXT_DMA_MEMORY_FRAME_BUFFER = 0xFEED0000, // Local memory + CELL_GCM_CONTEXT_DMA_MEMORY_HOST_BUFFER = 0xFEED0001, // Main memory + CELL_GCM_CONTEXT_SURFACE2D = 0x313371C3, + CELL_GCM_CONTEXT_SWIZZLE2D = 0x31337A73, + CELL_GCM_CONTEXT_DMA_TO_MEMORY_GET_REPORT = 0x66626660, + CELL_GCM_CONTEXT_DMA_REPORT_LOCATION_MAIN = 0xBAD68000, + CELL_GCM_CONTEXT_DMA_NOTIFY_MAIN_0 = 0x6660420F, }; struct CellGcmControl @@ -555,7 +560,6 @@ enum NV4097_SET_VERTEX_ATTRIB_INPUT_MASK = 0x00001ff0, NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK = 0x00001ff4, NV4097_SET_TRANSFORM_BRANCH_BITS = 0x00001ff8, - NV4097_SET_FLIP = 0x0003fead, // NV03_MEMORY_TO_MEMORY_FORMAT (NV0039) NV0039_SET_OBJECT = 0x00002000, @@ -1326,7 +1330,17 @@ static const std::string GetMethodName(const u32 id) { NV4097_SET_TRANSFORM_TIMEOUT , "NV4097_SET_TRANSFORM_TIMEOUT" }, { NV4097_SET_TRANSFORM_CONSTANT_LOAD , "NV4097_SET_TRANSFORM_CONSTANT_LOAD" }, { NV4097_SET_FREQUENCY_DIVIDER_OPERATION , "NV4097_SET_FREQUENCY_DIVIDER_OPERATION" }, - { NV4097_INVALIDATE_L2 , "NV4097_INVALIDATE_L2" }, + { NV4097_SET_ATTRIB_COLOR, "NV4097_SET_ATTRIB_COLOR" }, + { NV4097_SET_ATTRIB_TEX_COORD, "NV4097_SET_ATTRIB_TEX_COORD" }, + { NV4097_SET_ATTRIB_TEX_COORD_EX, "NV4097_SET_ATTRIB_TEX_COORD_EX" }, + { NV4097_SET_ATTRIB_UCLIP0, "NV4097_SET_ATTRIB_UCLIP0" }, + { NV4097_SET_ATTRIB_UCLIP1, "NV4097_SET_ATTRIB_UCLIP1" }, + { NV4097_INVALIDATE_L2, "NV4097_INVALIDATE_L2" }, + { NV4097_SET_REDUCE_DST_COLOR, "NV4097_SET_REDUCE_DST_COLOR" }, + { NV4097_SET_NO_PARANOID_TEXTURE_FETCHES, "NV4097_SET_NO_PARANOID_TEXTURE_FETCHES" }, + { NV4097_SET_SHADER_PACKER, "NV4097_SET_SHADER_PACKER" }, + { NV4097_SET_VERTEX_ATTRIB_INPUT_MASK, "NV4097_SET_VERTEX_ATTRIB_INPUT_MASK" }, + { NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK, "NV4097_SET_VERTEX_ATTRIB_OUTPUT_MASK" }, { NV4097_SET_TRANSFORM_BRANCH_BITS, "NV4097_SET_TRANSFORM_BRANCH_BITS" } }; diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 34d5f43399..99322ba4da 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -15,11 +15,7 @@ #endif gcmBuffer gcmBuffers[8]; -GLuint g_flip_tex; -GLuint g_depth_tex; -GLuint g_pbo[6]; - - +GLuint g_flip_tex, g_depth_tex, g_pbo[6]; int last_width = 0, last_height = 0, last_depth_format = 0; GLenum g_last_gl_error = GL_NO_ERROR; @@ -40,7 +36,6 @@ void printGlError(GLenum err, const std::string& situation) #define checkForGlError(x) /*x*/ #endif - GLGSRender::GLGSRender() : GSRender() , m_frame(nullptr) @@ -303,6 +298,7 @@ void GLGSRender::InitVertexData() l = m_program.GetLocation("scaleOffsetMat"); glUniformMatrix4fv(l, 1, false, scaleOffsetMat); + checkForGlError("glUniformMatrix4fv"); } void GLGSRender::InitFragmentData() @@ -319,7 +315,7 @@ void GLGSRender::InitFragmentData() u32 id = c.id - m_cur_shader_prog->offset; - //ConLog.Warning("fc%u[0x%x - 0x%x] = (%f, %f, %f, %f)", id, c.id, m_cur_shader_prog->offset, c.x, c.y, c.z, c.w); + //LOG_WARNING(RSX,"fc%u[0x%x - 0x%x] = (%f, %f, %f, %f)", id, c.id, m_cur_shader_prog->offset, c.x, c.y, c.z, c.w); const std::string name = fmt::Format("fc%u", id); const int l = m_program.GetLocation(name); @@ -464,28 +460,31 @@ void GLGSRender::WriteDepthBuffer() u32 address = GetAddress(m_surface_offset_z, m_context_dma_z - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad depth address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); + LOG_WARNING(RSX, "Bad depth buffer address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); return; } glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[5]); + checkForGlError("WriteDepthBuffer(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_DYNAMIC_READ); + checkForGlError("WriteDepthBuffer(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); - checkForGlError("WriteDepthBuffer(): glReadPixels(GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE)"); + checkForGlError("WriteDepthBuffer(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteDepthBuffer(): glUnmapBuffer"); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + checkForGlError("WriteDepthBuffer(): glBindBuffer"); glBindTexture(GL_TEXTURE_2D, g_depth_tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, RSXThread::m_buffer_width, RSXThread::m_buffer_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &Memory[address]); - checkForGlError("glTexImage2D"); + checkForGlError("WriteDepthBuffer(): glTexImage2D"); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); - checkForGlError("glGetTexImage"); - + checkForGlError("WriteDepthBuffer(): glGetTexImage"); } void GLGSRender::WriteColorBufferA() @@ -498,23 +497,27 @@ void GLGSRender::WriteColorBufferA() u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad color buffer a address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); + LOG_ERROR(RSX, "Bad color buffer A address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_a, m_context_dma_color_a); return; } glReadBuffer(GL_COLOR_ATTACHMENT0); checkForGlError("WriteColorBufferA(): glReadBuffer(GL_COLOR_ATTACHMENT0)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[0]); + checkForGlError("WriteColorBufferA(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + checkForGlError("WriteColorBufferA(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColorBufferA(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferA(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteColorBufferA(): glUnmapBuffer"); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + checkForGlError("WriteColorBufferA(): glBindBuffer"); } void GLGSRender::WriteColorBufferB() @@ -527,23 +530,27 @@ void GLGSRender::WriteColorBufferB() u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad color buffer b address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); + LOG_ERROR(RSX, "Bad color buffer B address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_b, m_context_dma_color_b); return; } glReadBuffer(GL_COLOR_ATTACHMENT1); checkForGlError("WriteColorBufferB(): glReadBuffer(GL_COLOR_ATTACHMENT1)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[1]); + checkForGlError("WriteColorBufferB(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + checkForGlError("WriteColorBufferB(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColorBufferB(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferB(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteColorBufferB(): glUnmapBuffer"); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + checkForGlError("WriteColorBufferB(): glBindBuffer"); } @@ -557,23 +564,27 @@ void GLGSRender::WriteColorBufferC() u32 address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad color buffer c address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); + LOG_ERROR(RSX, "Bad color buffer C address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_c, m_context_dma_color_c); return; } glReadBuffer(GL_COLOR_ATTACHMENT2); checkForGlError("WriteColorBufferC(): glReadBuffer(GL_COLOR_ATTACHMENT2)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[2]); + checkForGlError("WriteColorBufferC(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + checkForGlError("WriteColorBufferC(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColorBufferC(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferC(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteColorBufferC(): glUnmapBuffer"); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + checkForGlError("WriteColorBufferC(): glBindBuffer"); } void GLGSRender::WriteColorBufferD() @@ -586,24 +597,28 @@ void GLGSRender::WriteColorBufferD() u32 address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000); if (!Memory.IsGoodAddr(address)) { - LOG_WARNING(RSX, "Bad color buffer d address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); + LOG_ERROR(RSX, "Bad color buffer D address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_d, m_context_dma_color_d); return; } glReadBuffer(GL_COLOR_ATTACHMENT3); checkForGlError("WriteColorBufferD(): glReadBuffer(GL_COLOR_ATTACHMENT3)"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[3]); + checkForGlError("WriteColorBufferD(): glBindBuffer"); glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + checkForGlError("WriteColorBufferD(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); - checkForGlError("WriteColorBufferD(): glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8)"); + checkForGlError("WriteColorBufferD(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + checkForGlError("WriteColorBufferD(): glUnmapBuffer"); + } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - + checkForGlError("WriteColorBufferD(): glBindBuffer"); } void GLGSRender::WriteColorBuffers() @@ -670,6 +685,7 @@ void GLGSRender::OnInitThread() glEnable(GL_TEXTURE_2D); glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); + glGenTextures(1, &g_depth_tex); glGenTextures(1, &g_flip_tex); glGenBuffers(6, g_pbo); @@ -691,6 +707,9 @@ void GLGSRender::OnExitThread() glDeleteTextures(1, &g_depth_tex); glDeleteBuffers(6, g_pbo); + glDisable(GL_TEXTURE_2D); + glDisable(GL_VERTEX_PROGRAM_POINT_SIZE); + m_program.Delete(); m_rbo.Delete(); m_fbo.Delete(); @@ -824,6 +843,8 @@ void GLGSRender::InitDrawBuffers() glDrawBuffers(4, draw_buffers); break; + checkForGlError("glDrawBuffers"); + default: LOG_ERROR(RSX, "Bad surface color target: %d", m_surface_color_target); break; @@ -853,6 +874,7 @@ void GLGSRender::ExecCMD(u32 cmd) if (m_clear_surface_mask & 0x1) { glClearDepth(m_clear_surface_z / (float)0xffffff); + checkForGlError("glClearDepth"); f |= GL_DEPTH_BUFFER_BIT; } @@ -860,6 +882,7 @@ void GLGSRender::ExecCMD(u32 cmd) if (m_clear_surface_mask & 0x2) { glClearStencil(m_clear_surface_s); + checkForGlError("glClearStencil"); f |= GL_STENCIL_BUFFER_BIT; } @@ -871,11 +894,13 @@ void GLGSRender::ExecCMD(u32 cmd) m_clear_surface_color_g / 255.0f, m_clear_surface_color_b / 255.0f, m_clear_surface_color_a / 255.0f); + checkForGlError("glClearColor"); f |= GL_COLOR_BUFFER_BIT; } glClear(f); + checkForGlError("glClear"); WriteBuffers(); } @@ -892,10 +917,17 @@ void GLGSRender::ExecCMD() InitDrawBuffers(); + if (m_set_color_mask) + { + glColorMask(m_color_mask_r, m_color_mask_g, m_color_mask_b, m_color_mask_a); + checkForGlError("glColorMask"); + } + Enable(m_set_depth_test, GL_DEPTH_TEST); Enable(m_set_alpha_test, GL_ALPHA_TEST); Enable(m_set_depth_bounds_test, GL_DEPTH_BOUNDS_TEST_EXT); Enable(m_set_blend || m_set_blend_mrt1 || m_set_blend_mrt2 || m_set_blend_mrt3, GL_BLEND); + Enable(m_set_scissor_horizontal && m_set_scissor_vertical, GL_SCISSOR_TEST); Enable(m_set_logic_op, GL_LOGIC_OP); Enable(m_set_cull_face, GL_CULL_FACE); Enable(m_set_dither, GL_DITHER); @@ -955,6 +987,12 @@ void GLGSRender::ExecCMD() checkForGlError("glLogicOp"); } + if (m_set_scissor_horizontal && m_set_scissor_vertical) + { + glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); + checkForGlError("glScissor"); + } + if(m_set_two_sided_stencil_test_enable) { if(m_set_stencil_fail && m_set_stencil_zfail && m_set_stencil_zpass) @@ -1173,7 +1211,7 @@ void GLGSRender::ExecCMD() if(m_draw_array_count) { - //ConLog.Warning("glDrawArrays(%d,%d,%d)", m_draw_mode - 1, m_draw_array_first, m_draw_array_count); + //LOG_WARNING(RSX,"glDrawArrays(%d,%d,%d)", m_draw_mode - 1, m_draw_array_first, m_draw_array_count); glDrawArrays(m_draw_mode - 1, 0, m_draw_array_count); checkForGlError("glDrawArrays"); DisableVertexData(); diff --git a/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp b/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp index 87aacb94db..59eb82d573 100644 --- a/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp +++ b/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp @@ -117,9 +117,11 @@ void GLProgramBuffer::Clear() { for(u32 i=0; i> 31); CMD_LOG("num=%d, addr=0x%x", index, addr); @@ -459,7 +425,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case_16(NV4097_SET_VERTEX_DATA_ARRAY_FORMAT, 4) : + case_16(NV4097_SET_VERTEX_DATA_ARRAY_FORMAT, 4): { const u32 a0 = ARGS(0); u16 frequency = a0 >> 16; @@ -632,7 +598,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_REDUCE_DST_COLOR: { if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_REDUCE_DST_COLOR: 0x % x", ARGS(0)); + LOG_WARNING(RSX, "NV4097_SET_REDUCE_DST_COLOR: 0x%x", ARGS(0)); } break; @@ -714,8 +680,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_CLIP_MAX: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_CLIP_MAX: %x", ARGS(0)); + const u32 a0 = ARGS(0); + + m_set_clip = true; + m_clip_max = (float&)a0; + + CMD_LOG("clip_max=%.01f", m_clip_max); } break; @@ -845,13 +815,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV4097_CLEAR_REPORT_VALUE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_CLEAR_REPORT_VALUE: %x", ARGS(0)); - } - break; - case NV4097_SET_CLEAR_RECT_HORIZONTAL: { if (ARGS(0)) @@ -1527,11 +1490,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 // Anti-aliasing case NV4097_SET_ANTI_ALIASING_CONTROL: { - // TODO: - // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((enable) | ((alphaToCoverage) << 4) | ((alphaToOne) << 8) | ((sampleMask) << 16)); \ + const u32 a0 = ARGS(0); - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_ANTI_ALIASING_CONTROL: %x", ARGS(0)); + const u8 enable = a0 & 0xf; + const u8 alphaToCoverage = (a0 >> 4) & 0xf; + const u8 alphaToOne = (a0 >> 8) & 0xf; + const u16 sampleMask = a0 >> 16; + + LOG_WARNING(RSX, "TODO: NV4097_SET_ANTI_ALIASING_CONTROL: %x", a0); } break; @@ -1626,13 +1592,13 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 break; case NV4097_ZCULL_SYNC: - { + { if (ARGS(0)) LOG_WARNING(RSX, "NV4097_ZCULL_SYNC: %x", ARGS(0)); } break; - // Reporting + // Reports case NV4097_GET_REPORT: { const u32 a0 = ARGS(0); @@ -1667,6 +1633,24 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; + case NV4097_CLEAR_REPORT_VALUE: + { + const u32 type = ARGS(0); + + switch(type) + { + case CELL_GCM_ZPASS_PIXEL_CNT: + LOG_WARNING(RSX, "TODO: NV4097_CLEAR_REPORT_VALUE: ZPASS_PIXEL_CNT"); + break; + case CELL_GCM_ZCULL_STATS: + LOG_WARNING(RSX, "TODO: NV4097_CLEAR_REPORT_VALUE: ZCULL_STATS"); + break; + default: + LOG_ERROR(RSX, "NV4097_CLEAR_REPORT_VALUE: Bad type: %d", type); + } + } + break; + // Clip Plane case NV4097_SET_USER_CLIP_PLANE_CONTROL: { @@ -1702,40 +1686,20 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 // Zmin_max case NV4097_SET_ZMIN_MAX_CONTROL: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_ZMIN_MAX_CONTROL: %x", ARGS(0)); - - // TODO: - // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((cullNearFarEnable) | ((zclampEnable) << 4) | ((cullIgnoreW)<<8)); + const u8 cullNearFarEnable = ARGS(0) & 0xf; + const u8 zclampEnable = (ARGS(0) >> 4) & 0xf; + const u8 cullIgnoreW = (ARGS(0) >> 8) & 0xf; + LOG_WARNING(RSX, "TODO: NV4097_SET_ZMIN_MAX_CONTROL: cullNearFarEnable=%d, zclampEnable=%d, cullIgnoreW=%d", + cullNearFarEnable, zclampEnable, cullIgnoreW); } break; // Windows Clipping case NV4097_SET_WINDOW_OFFSET: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_WINDOW_OFFSET: %x", ARGS(0)); - } - break; - - case NV4097_SET_WINDOW_CLIP_TYPE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_TYPE: %x", ARGS(0)); - } - break; - - case NV4097_SET_WINDOW_CLIP_HORIZONTAL: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_HORIZONTAL: %x", ARGS(0)); - } - break; - - case NV4097_SET_WINDOW_CLIP_VERTICAL: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_WINDOW_CLIP_VERTICAL: %x", ARGS(0)); + const u16 x = ARGS(0); + const u16 y = ARGS(0) >> 16; + LOG_WARNING(RSX, "TODO: NV4097_SET_WINDOW_OFFSET: x=%d, y=%d", x, y); } break; @@ -1747,68 +1711,30 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_RENDER_ENABLE: { - // TODO: - // (cmd)[1] = CELL_GCM_ENDIAN_SWAP((offset) | ((mode) << 24)); \ - - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_RENDER_ENABLE: %x", ARGS(0)); + const u32 offset = ARGS(0) & 0xffffff; + const u8 mode = ARGS(0) >> 24; + LOG_WARNING(RSX, "NV4097_SET_RENDER_ENABLE: Offset=%06x, Mode=%x", offset, mode); } break; case NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: %x", ARGS(0)); + const u32 enable = ARGS(0); + LOG_WARNING(RSX, "TODO: NV4097_SET_ZPASS_PIXEL_COUNT_ENABLE: %d", enable); } break; - case 0x000002c8: - case 0x000002d0: - case 0x000002d8: - case 0x000002e0: - case 0x000002e8: - case 0x000002f0: - case 0x000002f8: - break; - // NV0039 - case NV0039_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV0039_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - - case NV0039_SET_CONTEXT_DMA_BUFFER_IN: // [E : RSXThread]: TODO: unknown/illegal method [0x00002184](0xfeed0000, 0xfeed0000) + case NV0039_SET_CONTEXT_DMA_BUFFER_IN: { const u32 srcContext = ARGS(0); const u32 dstContext = ARGS(1); - - if (srcContext == 0xfeed0000 && dstContext == 0xfeed0000) - { - } - else - { - LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_IN: TODO: srcContext=0x%x, dstContext=0x%x", srcContext, dstContext); - } + m_context_dma_buffer_in_src = srcContext; + m_context_dma_buffer_in_dst = dstContext; } break; - case NV0039_SET_CONTEXT_DMA_BUFFER_OUT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_SET_CONTEXT_DMA_BUFFER_OUT: %x", ARGS(0)); - } - break; - - case NV0039_OFFSET_IN: // [E : RSXThread]: TODO: unknown/illegal method [0x0000230c](0x0, 0xb00400, 0x0, 0x0, 0x384000, 0x1, 0x101, 0x0) + case NV0039_OFFSET_IN: { const u32 inOffset = ARGS(0); const u32 outOffset = ARGS(1); @@ -1816,12 +1742,16 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 const u32 outPitch = ARGS(3); const u32 lineLength = ARGS(4); const u32 lineCount = ARGS(5); - const u32 format = ARGS(6); - const u8 outFormat = (format >> 8); - const u8 inFormat = (format >> 0); + const u8 outFormat = (ARGS(6) >> 8); + const u8 inFormat = (ARGS(6) >> 0); const u32 notify = ARGS(7); - if (lineCount == 1 && !inPitch && !outPitch && !notify && format == 0x101) + // The existing GCM commands use only the value 0x1 for inFormat and outFormat + if (inFormat != 0x01 || outFormat != 0x01) { + LOG_ERROR(RSX, "NV0039_OFFSET_IN: Unsupported format: inFormat=%d, outFormat=%d", inFormat, outFormat); + } + + if (lineCount == 1 && !inPitch && !outPitch && !notify) { memcpy(&Memory[GetAddress(outOffset, 0)], &Memory[GetAddress(inOffset, 0)], lineLength); } @@ -1854,34 +1784,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV0039_PITCH_OUT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_PITCH_OUT: %x", ARGS(0)); - } - break; - - case NV0039_LINE_LENGTH_IN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_LINE_LENGTH_IN: %x", ARGS(0)); - } - break; - - case NV0039_LINE_COUNT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_LINE_COUNT: %x", ARGS(0)); - } - break; - - case NV0039_FORMAT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV0039_FORMAT: %x", ARGS(0)); - } - break; - case NV0039_BUFFER_NOTIFY: { if (ARGS(0)) @@ -1890,33 +1792,18 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 break; // NV3062 - case NV3062_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV3062_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - - case NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: %x", ARGS(0)); - } - break; - case NV3062_SET_CONTEXT_DMA_IMAGE_DESTIN: { m_context_dma_img_dst = ARGS(0); } break; + case NV3062_SET_OFFSET_DESTIN: + { + m_dst_offset = ARGS(0); + } + break; + case NV3062_SET_COLOR_FORMAT: { m_color_format = ARGS(0); @@ -1925,41 +1812,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV3062_SET_PITCH: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_PITCH: %x", ARGS(0)); - } - break; - - case NV3062_SET_OFFSET_SOURCE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3062_SET_OFFSET_SOURCE: %x", ARGS(0)); - } - break; - - case NV3062_SET_OFFSET_DESTIN: - { - m_dst_offset = ARGS(0); - } - break; - // NV309E - case NV309E_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV309E_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV309E_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV309E_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - case NV309E_SET_CONTEXT_DMA_IMAGE: { if (ARGS(0)) @@ -1977,98 +1830,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV309E_SET_OFFSET: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV309E_SET_OFFSET: %x", ARGS(0)); - } - break; - // NV308A - case NV308A_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_COLOR_KEY: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_COLOR_KEY: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_CLIP_RECTANGLE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_CLIP_RECTANGLE: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_PATTERN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_PATTERN: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_ROP: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_ROP: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_BETA1: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_BETA1: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_BETA4: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_BETA4: %x", ARGS(0)); - } - break; - - case NV308A_SET_CONTEXT_SURFACE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_CONTEXT_SURFACE: %x", ARGS(0)); - } - break; - - case NV308A_SET_COLOR_CONVERSION: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_COLOR_CONVERSION: %x", ARGS(0)); - } - break; - - case NV308A_SET_OPERATION: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_OPERATION: %x", ARGS(0)); - } - break; - - case NV308A_SET_COLOR_FORMAT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SET_COLOR_FORMAT: %x", ARGS(0)); - } - break; - case NV308A_POINT: { const u32 a0 = ARGS(0); @@ -2077,20 +1839,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV308A_SIZE_OUT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SIZE_OUT: %x", ARGS(0)); - } - break; - - case NV308A_SIZE_IN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV308A_SIZE_IN: %x", ARGS(0)); - } - break; - case NV308A_COLOR: { RSXTransformConstant c; @@ -2135,54 +1883,12 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 break; // NV3089 - case NV3089_SET_OBJECT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_OBJECT: %x", ARGS(0)); - } - break; - - case NV3089_SET_CONTEXT_DMA_NOTIFIES: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_DMA_NOTIFIES: %x", ARGS(0)); - } - break; - case NV3089_SET_CONTEXT_DMA_IMAGE: { m_context_dma_img_src = ARGS(0); } break; - case NV3089_SET_CONTEXT_PATTERN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_PATTERN: %x", ARGS(0)); - } - break; - - case NV3089_SET_CONTEXT_ROP: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_ROP: %x", ARGS(0)); - } - break; - - case NV3089_SET_CONTEXT_BETA1: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_BETA1: %x", ARGS(0)); - } - break; - - case NV3089_SET_CONTEXT_BETA4: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_CONTEXT_BETA4: %x", ARGS(0)); - } - break; - case NV3089_SET_CONTEXT_SURFACE: { if (ARGS(0) != CELL_GCM_CONTEXT_SURFACE2D) @@ -2192,80 +1898,6 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; - case NV3089_SET_COLOR_CONVERSION: - { - m_color_conv = ARGS(0); - m_color_conv_fmt = ARGS(1); - m_color_conv_op = ARGS(2); - m_color_conv_in_x = ARGS(3); - m_color_conv_in_y = ARGS(3) >> 16; - m_color_conv_in_w = ARGS(4); - m_color_conv_in_h = ARGS(4) >> 16; - m_color_conv_out_x = ARGS(5); - m_color_conv_out_y = ARGS(5) >> 16; - m_color_conv_out_w = ARGS(6); - m_color_conv_out_h = ARGS(6) >> 16; - m_color_conv_dsdx = ARGS(7); - m_color_conv_dtdy = ARGS(8); - } - break; - - case NV3089_SET_COLOR_FORMAT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_COLOR_FORMAT: %x", ARGS(0)); - } - break; - - case NV3089_SET_OPERATION: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_SET_OPERATION: %x", ARGS(0)); - } - break; - - case NV3089_CLIP_POINT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_CLIP_POINT: %x", ARGS(0)); - } - break; - - case NV3089_CLIP_SIZE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_CLIP_SIZE: %x", ARGS(0)); - } - break; - - case NV3089_IMAGE_OUT_POINT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_OUT_POINT: %x", ARGS(0)); - } - break; - - case NV3089_IMAGE_OUT_SIZE: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_OUT_SIZE: %x", ARGS(0)); - } - break; - - case NV3089_DS_DX: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_DS_DX: %x", ARGS(0)); - } - break; - - case NV3089_DT_DY: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_DT_DY: %x", ARGS(0)); - } - break; - case NV3089_IMAGE_IN_SIZE: { u16 width = ARGS(0); @@ -2294,25 +1926,22 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } } break; - - case NV3089_IMAGE_IN_FORMAT: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_IN_FORMAT: %x", ARGS(0)); - } - break; - case NV3089_IMAGE_IN_OFFSET: + case NV3089_SET_COLOR_CONVERSION: { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_IN_OFFSET: %x", ARGS(0)); - } - break; - - case NV3089_IMAGE_IN: - { - if (ARGS(0)) - LOG_WARNING(RSX, "NV3089_IMAGE_IN: %x", ARGS(0)); + m_color_conv = ARGS(0); + m_color_conv_fmt = ARGS(1); + m_color_conv_op = ARGS(2); + m_color_conv_in_x = ARGS(3); + m_color_conv_in_y = ARGS(3) >> 16; + m_color_conv_in_w = ARGS(4); + m_color_conv_in_h = ARGS(4) >> 16; + m_color_conv_out_x = ARGS(5); + m_color_conv_out_y = ARGS(5) >> 16; + m_color_conv_out_w = ARGS(6); + m_color_conv_out_h = ARGS(6) >> 16; + m_color_conv_dsdx = ARGS(7); + m_color_conv_dtdy = ARGS(8); } break; @@ -2324,14 +1953,105 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } break; + // Note: What is this? NV4097 offsets? + case 0x000002c8: + case 0x000002d0: + case 0x000002d8: + case 0x000002e0: + case 0x000002e8: + case 0x000002f0: + case 0x000002f8: + break; + + // The existing GCM commands don't use any of the following NV4097 / NV0039 / NV3062 / NV309E / NV308A / NV3089 methods + case NV4097_SET_WINDOW_CLIP_TYPE: + case NV4097_SET_WINDOW_CLIP_HORIZONTAL: + case NV4097_SET_WINDOW_CLIP_VERTICAL: + { + LOG_WARNING(RSX, "Unused NV4097 method 0x%x detected!", cmd); + } + break; + + case NV0039_SET_CONTEXT_DMA_BUFFER_OUT: + case NV0039_PITCH_OUT: + case NV0039_LINE_LENGTH_IN: + case NV0039_LINE_COUNT: + case NV0039_FORMAT: + case NV0039_SET_OBJECT: + case NV0039_SET_CONTEXT_DMA_NOTIFIES: + { + LOG_WARNING(RSX, "Unused NV0039 method 0x%x detected!", cmd); + } + break; + + case NV3062_SET_OBJECT: + case NV3062_SET_CONTEXT_DMA_NOTIFIES: + case NV3062_SET_CONTEXT_DMA_IMAGE_SOURCE: + case NV3062_SET_PITCH: + case NV3062_SET_OFFSET_SOURCE: + { + LOG_WARNING(RSX, "Unused NV3062 method 0x%x detected!", cmd); + } + break; + + case NV308A_SET_OBJECT: + case NV308A_SET_CONTEXT_DMA_NOTIFIES: + case NV308A_SET_CONTEXT_COLOR_KEY: + case NV308A_SET_CONTEXT_CLIP_RECTANGLE: + case NV308A_SET_CONTEXT_PATTERN: + case NV308A_SET_CONTEXT_ROP: + case NV308A_SET_CONTEXT_BETA1: + case NV308A_SET_CONTEXT_BETA4: + case NV308A_SET_CONTEXT_SURFACE: + case NV308A_SET_COLOR_CONVERSION: + case NV308A_SET_OPERATION: + case NV308A_SET_COLOR_FORMAT: + case NV308A_SIZE_OUT: + case NV308A_SIZE_IN: + { + LOG_WARNING(RSX, "Unused NV308A method 0x%x detected!", cmd); + } + break; + + case NV309E_SET_OBJECT: + case NV309E_SET_CONTEXT_DMA_NOTIFIES: + case NV309E_SET_OFFSET: + { + LOG_WARNING(RSX, "Unused NV309E method 0x%x detected!", cmd); + } + break; + + case NV3089_SET_OBJECT: + case NV3089_SET_CONTEXT_DMA_NOTIFIES: + case NV3089_SET_CONTEXT_PATTERN: + case NV3089_SET_CONTEXT_ROP: + case NV3089_SET_CONTEXT_BETA1: + case NV3089_SET_CONTEXT_BETA4: + case NV3089_SET_COLOR_FORMAT: + case NV3089_SET_OPERATION: + case NV3089_CLIP_POINT: + case NV3089_CLIP_SIZE: + case NV3089_IMAGE_OUT_POINT: + case NV3089_IMAGE_OUT_SIZE: + case NV3089_DS_DX: + case NV3089_DT_DY: + case NV3089_IMAGE_IN_FORMAT: + case NV3089_IMAGE_IN_OFFSET: + case NV3089_IMAGE_IN: + { + LOG_WARNING(RSX, "Unused NV3089 method 0x%x detected!", cmd); + } + break; + default: { std::string log = GetMethodName(cmd); log += "("; - for(u32 i=0; iAddFunc(0xbd28fdbf, sceNpInit); @@ -141,4 +2280,361 @@ void sceNp_init() sceNp->AddFunc(0xf283c143, sceNpDrmExecuteGamePurchase); sceNp->AddFunc(0xcf51864b, sceNpDrmGetTimelimit); sceNp->AddFunc(0xa7bff757, sceNpManagerGetStatus); + sceNp->AddFunc(0x000e53cc, sceNpManagerSubSignout); + sceNp->AddFunc(0x01cd9cfd, sceNpCommerceGetChildProductSkuInfo); + sceNp->AddFunc(0x01fbbc9b, sceNpBasicSendMessageGui); + sceNp->AddFunc(0x03c741a7, sceNpMatchingGetResult); + sceNp->AddFunc(0x04372385, sceNpBasicGetFriendListEntry); + sceNp->AddFunc(0x04ca5e6a, sceNpScoreRecordGameData); + sceNp->AddFunc(0x0561448b, sceNpCommerceGetDataFlagAbort); + sceNp->AddFunc(0x05af1cb8, sceNpBasicGetMatchingInvitationEntry); + sceNp->AddFunc(0x05d65dff, sceNpScoreGetRankingByNpId); + sceNp->AddFunc(0x0968aa36, sceNpManagerGetTicket); + sceNp->AddFunc(0x14497465, sceNpMatchingQuickMatchGUI); + sceNp->AddFunc(0x155de760, sceNpSignalingGetConnectionInfo); + sceNp->AddFunc(0x166dcc11, sceNpLookupNpId); + sceNp->AddFunc(0x1672170e, sceNpScoreRecordScore); + sceNp->AddFunc(0x168a3117, sceNpBasicAddPlayersHistory); + sceNp->AddFunc(0x168fcece, sceNpManagerGetAccountAge); + sceNp->AddFunc(0x16f88a6f, sceNpManagerGetPsHandle); + sceNp->AddFunc(0x1a2704f7, sceNpScoreWaitAsync); + sceNp->AddFunc(0x1a3fcb69, sceNpCommerceGetSkuUserData); + sceNp->AddFunc(0x1ae8a549, sceNpBasicAddBlockListEntry); + sceNp->AddFunc(0x1fdb3ec2, sceNpLookupUserProfileWithAvatarSizeAsync); + sceNp->AddFunc(0x21206642, sceNpScoreGetRankingByRangeAsync); + sceNp->AddFunc(0x227f8763, sceNpScoreGetClansRankingByClanIdAsync); + sceNp->AddFunc(0x259113b8, sceNpScoreDestroyTitleCtx); + sceNp->AddFunc(0x260caedd, sceNpBasicGetFriendPresenceByNpId2); + sceNp->AddFunc(0x2687a127, sceNpSignalingGetCtxOpt); + sceNp->AddFunc(0x26b3bc94, sceNpMatchingGetResultGUI); + sceNp->AddFunc(0x26f33146, sceNpCommerceGetProductCategoryStart); + sceNp->AddFunc(0x2706eaa1, sceNpScoreSetPlayerCharacterId); + sceNp->AddFunc(0x276c72b2, sceNpSignalingSetCtxOpt); + sceNp->AddFunc(0x27c69eba, sceNpBasicAddFriend); + sceNp->AddFunc(0x29dd45dc, sceNpScoreSetTimeout); + sceNp->AddFunc(0x2a76895a, sceNpScoreGetClansRankingByClanId); + sceNp->AddFunc(0x2ad7837d, sceNpMatchingAcceptInvitationGUI); + sceNp->AddFunc(0x2be41ece, sceNpCommerceGetNumOfChildCategory); + sceNp->AddFunc(0x2cd2a1af, sceNpScoreSanitizeCommentAsync); + sceNp->AddFunc(0x2e1c5068, sceNpMatchingDestroyCtx); + sceNp->AddFunc(0x2f2c6b3e, sceNpProfileAbortGui); + sceNp->AddFunc(0x2fccbfe0, sceNpLookupUserProfileWithAvatarSize); + sceNp->AddFunc(0x30d1cbde, sceNpBasicGetMessageEntry); + sceNp->AddFunc(0x32200389, sceNpManagerGetMyLanguages); + sceNp->AddFunc(0x32c78a6a, sceNpBasicGetFriendPresenceByIndex); + sceNp->AddFunc(0x32cf311f, sceNpScoreInit); + sceNp->AddFunc(0x32febb4c, sceNpMatchingSearchJoinRoomGUI); + sceNp->AddFunc(0x34cc0ca4, sceNpMatchingKickRoomMember); + sceNp->AddFunc(0x34ce82a0, sceNpSignalingGetConnectionFromPeerAddress); + sceNp->AddFunc(0x359642a6, sceNpCommerceGetCategoryDescription); + sceNp->AddFunc(0x36d0c2c5, sceNpManagerGetAvatarUrl); + sceNp->AddFunc(0x39a69619, sceNpCommerceGetSkuId); + sceNp->AddFunc(0x3b02418d, sceNpScoreGetGameData); + sceNp->AddFunc(0x3cc8588a, sceNpMatchingCreateRoomGUI); + sceNp->AddFunc(0x3d1760dc, sceNpLookupAbortTransaction); + sceNp->AddFunc(0x3db7914d, sceNpScoreGetRankingByNpIdAsync); + sceNp->AddFunc(0x3f0808aa, sceNpBasicSetPresence); + sceNp->AddFunc(0x3f195b3a, sceNpCommerceGetProductCategoryResult); + sceNp->AddFunc(0x4026eac5, sceNpBasicRegisterContextSensitiveHandler); + sceNp->AddFunc(0x41ffd4f2, sceNpScoreGetClansMembersRankingByNpIdPcId); + sceNp->AddFunc(0x433fcb30, sceNpScoreGetClansMembersRankingByNpIdPcIdAsync); + sceNp->AddFunc(0x43b989f5, sceNpBasicSendMessageAttachment); + sceNp->AddFunc(0x442381f7, sceNpManagerSubSignin); + sceNp->AddFunc(0x45f8f3aa, sceNpCustomMenuRegisterActions); + sceNp->AddFunc(0x474b7b13, sceNpMatchingJoinRoomGUI); + sceNp->AddFunc(0x481ce0e8, sceNpBasicAbortGui); + sceNp->AddFunc(0x4a18a89e, sceNpMatchingSetRoomInfoNoLimit); + sceNp->AddFunc(0x4b9efb7a, sceNpManagerGetCachedInfo); + sceNp->AddFunc(0x4d5e0670, sceNpScoreGetClansMembersRankingByRangeAsync); + sceNp->AddFunc(0x4d9c615d, sceNpBasicGetClanMessageEntry); + sceNp->AddFunc(0x50b86d94, sceNpSignalingAddExtendedHandler); + sceNp->AddFunc(0x52a6b523, sceNpManagerUnregisterCallback); + sceNp->AddFunc(0x58fa4fcd, sceNpManagerGetTicketParam); + sceNp->AddFunc(0x5d543bbe, sceNpBasicGetMessageAttachmentEntry); + sceNp->AddFunc(0x5de61626, sceNpLookupDestroyTitleCtx); + sceNp->AddFunc(0x5e117ed5, sceNpLookupTitleStorageAsync); + sceNp->AddFunc(0x5e849303, sceNpBasicSetPresenceDetails2); + sceNp->AddFunc(0x5f2d9257, sceNpLookupInit); + sceNp->AddFunc(0x60440c73, sceNpManagerSubSigninAbortGui); + sceNp->AddFunc(0x60897c38, sceNpSignalingActivateConnection); + sceNp->AddFunc(0x6356082e, sceNpSignalingCreateCtx); + sceNp->AddFunc(0x6453b27b, sceNpBasicGetFriendPresenceByIndex2); + sceNp->AddFunc(0x64a704cc, sceNpBasicRecvMessageAttachmentLoad); + sceNp->AddFunc(0x64dbb89d, sceNpSignalingCancelPeerNetInfo); + sceNp->AddFunc(0x674bb9ff, sceNpCommerceGetProductCategoryAbort); + sceNp->AddFunc(0x691f429d, sceNpMatchingGetRoomInfo); + sceNp->AddFunc(0x6cb81eb2, sceNpCommerceDestroyProductCategory); + sceNp->AddFunc(0x6d4adc3b, sceNpScoreGetClansMembersRankingByRange); + sceNp->AddFunc(0x6e2ab18b, sceNpCommerceGetCategoryName); + sceNp->AddFunc(0x6ee62ed2, sceNpManagerGetContentRatingFlag); + sceNp->AddFunc(0x6f5e8143, sceNpScoreCreateTransactionCtx); + sceNp->AddFunc(0x6f8fd267, sceNpMatchingSetRoomInfo); + sceNp->AddFunc(0x71e5af7e, sceNpLookupSetTimeout); + sceNp->AddFunc(0x7208dc08, sceNpCommerceGetNumOfChildProductSku); + sceNp->AddFunc(0x73931bd0, sceNpBasicGetBlockListEntryCount); + sceNp->AddFunc(0x73a2e36b, sceNpMatchingGetRoomMemberListLocal); + sceNp->AddFunc(0x741fbf24, sceNpScoreGetClanMemberGameData); + sceNp->AddFunc(0x7508112e, sceNpLookupPollAsync); + sceNp->AddFunc(0x75eb50cb, sceNpSignalingGetPeerNetInfo); + sceNp->AddFunc(0x78d7f9ad, sceNpCommerceGetSkuPrice); + sceNp->AddFunc(0x79225aa3, sceNpCommerceGetCurrencyCode); + sceNp->AddFunc(0x7b7e9137, sceNpScoreGetClansRankingByRangeAsync); + sceNp->AddFunc(0x7be47e61, sceNpScoreCensorCommentAsync); + sceNp->AddFunc(0x7deb244c, sceNpScoreCensorComment); + sceNp->AddFunc(0x7e2fef28, sceNpManagerRequestTicket); + sceNp->AddFunc(0x806960ab, sceNpBasicRecvMessageCustom); + sceNp->AddFunc(0x816c6a5f, _sceNpSysutilClientFree); + sceNp->AddFunc(0x8297f1ec, sceNpManagerRequestTicket2); + sceNp->AddFunc(0x8440537c, sceNpLookupTerm); + sceNp->AddFunc(0x860b1756, sceNpLookupTitleSmallStorageAsync); + sceNp->AddFunc(0x8b7bbd73, sceNpMatchingSendInvitationGUI); + sceNp->AddFunc(0x8d1d096c, sceNpCommerceInitProductCategory); + sceNp->AddFunc(0x8d4518a0, sceNpCommerceSetDataFlagFinish); + sceNp->AddFunc(0x9153bdf4, sceNpBasicGetMessageAttachmentEntryCount); + sceNp->AddFunc(0x9281e87a, sceNpCommerceGetDataFlagFinish); + sceNp->AddFunc(0x936df4aa, sceNpCommerceGetProductId); + sceNp->AddFunc(0x9452f4f8, sceNpCommerceGetCategoryImageURL); + sceNp->AddFunc(0x9458f464, sceNpCustomMenuRegisterExceptionList); + sceNp->AddFunc(0x95c7bba3, sceNpSignalingTerminateConnection); + sceNp->AddFunc(0x9851f805, sceNpScoreTerm); + sceNp->AddFunc(0x99ac9952, sceNpCommerceSetDataFlagStart); + sceNp->AddFunc(0x9ad7fbd1, sceNpSignalingGetLocalNetInfo); + sceNp->AddFunc(0x9ee9f97e, sceNpLookupTitleStorage); + sceNp->AddFunc(0xa15f35fe, sceNpBasicGetPlayersHistoryEntryCount); + sceNp->AddFunc(0xa1709abd, sceNpManagerGetEntitlementById); + sceNp->AddFunc(0xa284bd1d, sceNpMatchingSetRoomSearchFlag); + sceNp->AddFunc(0xa7a090e5, sceNpScorePollAsync); + sceNp->AddFunc(0xa85a4951, sceNpCommerceGetSkuDescription); + sceNp->AddFunc(0xa8afa7d4, sceNpBasicGetCustomInvitationEntryCount); + sceNp->AddFunc(0xaa16695f, sceNpDrmProcessExitSpawn); + sceNp->AddFunc(0xac66568c, sceNpMatchingCreateCtx); + sceNp->AddFunc(0xacb9ee8e, sceNpBasicUnregisterHandler); + sceNp->AddFunc(0xaee8cf71, sceNpCommerceGetCategoryId); + sceNp->AddFunc(0xaf3eba5a, sceNpCommerceDoCheckoutFinishAsync); + sceNp->AddFunc(0xaf505def, sceNpBasicGetMatchingInvitationEntryCount); + sceNp->AddFunc(0xaf57d9c9, sceNpCommerceGetCurrencyDecimals); + sceNp->AddFunc(0xafef640d, sceNpBasicGetFriendListEntryCount); + sceNp->AddFunc(0xb020684e, sceNpMatchingGetRoomInfoNoLimit); + sceNp->AddFunc(0xb082003b, sceNpScoreGetClansRankingByRange); + sceNp->AddFunc(0xb1c02d66, sceNpCommerceGetCurrencyInfo); + sceNp->AddFunc(0xb1e0718b, sceNpManagerGetAccountRegion); + sceNp->AddFunc(0xb5cb2d56, sceNpBasicRecvMessageAttachment); + sceNp->AddFunc(0xb6017827, sceNpLookupAvatarImage); + sceNp->AddFunc(0xb66d1c46, sceNpManagerGetEntitlementIdList); + sceNp->AddFunc(0xb9f93bbb, sceNpScoreCreateTitleCtx); + sceNp->AddFunc(0xba65de6d, sceNpCommerceGetChildCategoryInfo); + sceNp->AddFunc(0xbab91fc9, sceNpBasicGetPlayersHistoryEntry); + sceNp->AddFunc(0xbcc09fe7, sceNpBasicRegisterHandler); + sceNp->AddFunc(0xbcdbb2ab, sceNpBasicAddPlayersHistoryAsync); + sceNp->AddFunc(0xbdc07fd5, sceNpManagerGetNetworkTime); + sceNp->AddFunc(0xbe07c708, sceNpManagerGetOnlineId); + sceNp->AddFunc(0xbe81c71c, sceNpBasicSetPresenceDetails); + sceNp->AddFunc(0xbef887e5, sceNpScoreGetClanMemberGameDataAsync); + sceNp->AddFunc(0xbf607ec6, sceNpBasicGetClanMessageEntryCount); + sceNp->AddFunc(0xbf9eea93, sceNpLookupAvatarImageAsync); + sceNp->AddFunc(0xc3a991ee, sceNpScoreGetRankingByNpIdPcId); + sceNp->AddFunc(0xc4b6cd8f, sceNpScoreGetRankingByNpIdPcIdAsync); + sceNp->AddFunc(0xc5f4cf82, sceNpScoreDestroyTransactionCtx); + sceNp->AddFunc(0xca0a2d04, sceNpSignalingGetConnectionStatus); + sceNp->AddFunc(0xca39c4b2, sceNpLookupTitleSmallStorage); + sceNp->AddFunc(0xccbe2e69, sceNpCommerceGetSkuImageURL); + sceNp->AddFunc(0xce81c7f0, sceNpLookupCreateTitleCtx); + sceNp->AddFunc(0xceeebc7a, sceNpProfileCallGui); + sceNp->AddFunc(0xcfd469e4, sceNpCommerceGetProductCategoryFinish); + sceNp->AddFunc(0xd03cea35, sceNpCommerceGetDataFlagState); + sceNp->AddFunc(0xd053f113, sceNpBasicGetCustomInvitationEntry); + sceNp->AddFunc(0xd0958814, sceNpSignalingGetPeerNetInfoResult); + sceNp->AddFunc(0xd12e40ae, sceNpLookupNpIdAsync); + sceNp->AddFunc(0xd208f91d, sceNpUtilCmpNpId); + sceNp->AddFunc(0xd20d7798, sceNpMatchingKickRoomMemberWithOpt); + sceNp->AddFunc(0xd737fd2d, sceNpLookupWaitAsync); + sceNp->AddFunc(0xd7fb1fa6, sceNpFriendlistCustom); + sceNp->AddFunc(0xdae2d351, sceNpMatchingGrantOwnership); + sceNp->AddFunc(0xdb2e4dc2, sceNpScoreGetGameDataAsync); + sceNp->AddFunc(0xdbdb909f, sceNpCommerceGetDataFlagStart); + sceNp->AddFunc(0xddce7d15, sceNpScoreGetBoardInfoAsync); + sceNp->AddFunc(0xded17c26, sceNpScoreGetClansMembersRankingByNpId); + sceNp->AddFunc(0xdfd63b62, sceNpLookupUserProfile); + sceNp->AddFunc(0xe035f7d6, sceNpBasicGetEvent); + sceNp->AddFunc(0xe1c9f675, sceNpBasicMarkMessageAsUsed); + sceNp->AddFunc(0xe24eea19, sceNpMatchingGetRoomListLimitGUI); + sceNp->AddFunc(0xe2877bea, sceNpCommerceDestroyCtx); + sceNp->AddFunc(0xe36c660e, sceNpCommerceDoCheckoutStartAsync); + sceNp->AddFunc(0xe6c8f3f9, sceNpDrmProcessExitSpawn2); + sceNp->AddFunc(0xe7dcd3b4, sceNpManagerRegisterCallback); + sceNp->AddFunc(0xe853d388, sceNpSignalingGetConnectionFromNpId); + sceNp->AddFunc(0xe8a67160, sceNpScoreGetClansMembersRankingByNpIdAsync); + sceNp->AddFunc(0xea2e9ffc, sceNpLookupCreateTransactionCtx); + sceNp->AddFunc(0xeb5f2544, sceNpCommerceGetProductName); + sceNp->AddFunc(0xeb7a3d84, sceNpManagerGetChatRestrictionFlag); + sceNp->AddFunc(0xeb9df054, sceNpCommerceGetCategoryInfo); + sceNp->AddFunc(0xec0a1fbf, sceNpBasicSendMessage); + sceNp->AddFunc(0xecd503de, sceNpBasicGetMessageEntryCount); + sceNp->AddFunc(0xee0cc40c, _sceNpSysutilClientMalloc); + sceNp->AddFunc(0xee530059, sceNpCommerceGetSkuName); + sceNp->AddFunc(0xee5b20d9, sceNpScoreAbortTransaction); + sceNp->AddFunc(0xee64cf8e, sceNpMatchingGetRoomSearchFlag); + sceNp->AddFunc(0xf0a9182b, sceNpFriendlist); + sceNp->AddFunc(0xf0b1e399, sceNpScoreRecordScoreAsync); + sceNp->AddFunc(0xf1b77918, sceNpScoreSanitizeComment); + sceNp->AddFunc(0xf2b3338a, sceNpBasicGetBlockListEntry); + sceNp->AddFunc(0xf42c0df8, sceNpManagerGetOnlineName); + sceNp->AddFunc(0xf4e0f607, sceNpScoreGetBoardInfo); + sceNp->AddFunc(0xf59e1da8, sceNpFriendlistAbortGui); + sceNp->AddFunc(0xf5ff5f31, sceNpUtilCmpNpIdInOrder); + sceNp->AddFunc(0xf76847c2, sceNpScoreRecordGameDataAsync); + sceNp->AddFunc(0xf806c54c, sceNpMatchingLeaveRoom); + sceNp->AddFunc(0xf9732ac8, sceNpCustomMenuActionSetActivation); + sceNp->AddFunc(0xfb87cf5e, sceNpLookupDestroyTransactionCtx); + sceNp->AddFunc(0xfbc82301, sceNpScoreGetRankingByRange); + sceNp->AddFunc(0xfcac355a, sceNpCommerceCreateCtx); + sceNp->AddFunc(0xfd0eb5ae, sceNpSignalingDeactivateConnection); + sceNp->AddFunc(0xfd39ae13, sceNpBasicGetFriendPresenceByNpId); + sceNp->AddFunc(0xfe37a7f4, sceNpManagerGetNpId); + sceNp->AddFunc(0xff0a2378, sceNpLookupUserProfileAsync); + sceNp->AddFunc(0x095e12c6, sceNpClansSendInvitationResponse); + sceNp->AddFunc(0x09f9e1a9, sceNpClansUpdateClanInfo); + sceNp->AddFunc(0x0df25834, sceNpClansRetrieveChallenges); + sceNp->AddFunc(0x1221a1bf, sceNpClansSearchByProfile); + sceNp->AddFunc(0x20472da0, sceNpClansGetMemberInfo); + sceNp->AddFunc(0x299ccc9b, sceNpClansCancelMembershipRequest); + sceNp->AddFunc(0x38dadf1f, sceNpClansGetAutoAcceptStatus); + sceNp->AddFunc(0x42332cb7, sceNpClansTerm); + sceNp->AddFunc(0x4826f6d5, sceNpClansDisbandClan); + sceNp->AddFunc(0x487de998, sceNpClansGetClanInfo); + sceNp->AddFunc(0x4d06aef7, sceNpClansAddBlacklistEntry); + sceNp->AddFunc(0x560f717b, sceNpClansLeaveClan); + sceNp->AddFunc(0x56bc5a7c, sceNpClansGetBlacklist); + sceNp->AddFunc(0x59743b2b, sceNpClansSendMembershipRequest); + sceNp->AddFunc(0x5bff9da1, sceNpClansRemoveBlacklistEntry); + sceNp->AddFunc(0x5da94854, sceNpClansUpdateAutoAcceptStatus); + sceNp->AddFunc(0x672399a8, sceNpClansGetClanListByNpId); + sceNp->AddFunc(0x726dffd5, sceNpClansCancelInvitation); + sceNp->AddFunc(0x727aa7f8, sceNpClansRetrieveAnnouncements); + sceNp->AddFunc(0x83d65529, sceNpClansPostChallenge); + sceNp->AddFunc(0x856ff5c0, sceNpClansGetMemberList); + sceNp->AddFunc(0x8e785b97, sceNpClansRetrievePostedChallenges); + sceNp->AddFunc(0x942dbdc4, sceNpClansSendMembershipResponse); + sceNp->AddFunc(0x9a72232d, sceNpClansCreateRequest); + sceNp->AddFunc(0x9b820047, sceNpClansInit); + sceNp->AddFunc(0x9cac2085, sceNpClansChangeMemberRole); + sceNp->AddFunc(0xa6a31a38, sceNpClansCreateClan); + sceNp->AddFunc(0xaa7912b5, sceNpClansKickMember); + sceNp->AddFunc(0xace0cfba, sceNpClansSearchByName); + sceNp->AddFunc(0xada45b84, sceNpClansPostAnnouncement); + sceNp->AddFunc(0xbc05ef31, sceNpClansSendInvitation); + sceNp->AddFunc(0xca4181b4, sceNpClansGetClanList); + sceNp->AddFunc(0xce6dc0f0, sceNpClansRemoveChallenge); + sceNp->AddFunc(0xd3346dc4, sceNpClansRemovePostedChallenge); + sceNp->AddFunc(0xd6551cd1, sceNpClansDestroyRequest); + sceNp->AddFunc(0xdbf300ca, sceNpClansJoinClan); + sceNp->AddFunc(0xe2590f60, sceNpClansRemoveAnnouncement); + sceNp->AddFunc(0xe82969e2, sceNpClansAbortRequest); + sceNp->AddFunc(0xf4a2d52b, sceNpClansUpdateMemberInfo); + sceNp->AddFunc(0x104551a6, sceNpCommerce2DoCheckoutStartAsync); + sceNp->AddFunc(0x146618df, sceNpCommerce2GetProductInfoListGetResult); + sceNp->AddFunc(0x150fdca3, sceNpCommerce2GetContentRatingDescriptor); + sceNp->AddFunc(0x1fa1b312, sceNpCommerce2GetStoreBrowseUserdata); + sceNp->AddFunc(0x2a910f05, sceNpCommerce2DestroyReq); + sceNp->AddFunc(0x3539d233, sceNpCommerce2Init); + sceNp->AddFunc(0x371a2edd, sceNpCommerce2GetCategoryContentsStart); + sceNp->AddFunc(0x3d627d81, sceNpCommerce2GetBGDLAvailability); + sceNp->AddFunc(0x410d42be, sceNpCommerce2DoDlListFinishAsync); + sceNp->AddFunc(0x4d4a094c, sceNpCommerce2Term); + sceNp->AddFunc(0x62023e98, sceNpCommerce2CreateSessionAbort); + sceNp->AddFunc(0x6ca9efd4, sceNpCommerce2DoDlListStartAsync); + sceNp->AddFunc(0x6f67ea80, sceNpCommerce2DestroyCtx); + sceNp->AddFunc(0x7370d8d0, sceNpCommerce2GetCategoryContentsCreateReq); + sceNp->AddFunc(0x8df0057f, sceNpCommerce2AbortReq); + sceNp->AddFunc(0x8f46325b, sceNpCommerce2GetProductInfoStart); + sceNp->AddFunc(0x91f8843d, sceNpCommerce2CreateSessionFinish); + sceNp->AddFunc(0x972ab46c, sceNpCommerce2GetContentInfo); + sceNp->AddFunc(0x9825a0fc, sceNpCommerce2DoProductBrowseStartAsync); + sceNp->AddFunc(0x9cde07cc, sceNpCommerce2GetProductInfoListStart); + sceNp->AddFunc(0x9d9cb96b, sceNpCommerce2DestroyGetCategoryContentsResult); + sceNp->AddFunc(0xa5a863fe, sceNpCommerce2SetBGDLAvailability); + sceNp->AddFunc(0xa975ebb4, sceNpCommerce2GetProductInfoCreateReq); + sceNp->AddFunc(0xa9f945b3, sceNpCommerce2DoProductCodeFinishAsync); + sceNp->AddFunc(0xac78c1f3, sceNpCommerce2GetContentRatingInfoFromCategoryInfo); + sceNp->AddFunc(0xb23e3bd1, sceNpCommerce2DoProductBrowseFinishAsync); + sceNp->AddFunc(0xbd49eab2, sceNpCommerce2GetCategoryInfo); + sceNp->AddFunc(0xbf5f58ea, sceNpCommerce2GetProductInfoGetResult); + sceNp->AddFunc(0xca0ea996, sceNpCommerce2GetCategoryContentsGetResult); + sceNp->AddFunc(0xcc18cd2c, sceNpCommerce2CreateSessionStart); + sceNp->AddFunc(0xd43a130e, sceNpCommerce2DoCheckoutFinishAsync); + sceNp->AddFunc(0xd8a473a3, sceNpCommerce2InitGetCategoryContentsResult); + sceNp->AddFunc(0xd9956ce7, sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult); + sceNp->AddFunc(0xd9fdcec2, sceNpCommerce2CreateCtx); + sceNp->AddFunc(0xda8e322d, sceNpCommerce2GetPrice); + sceNp->AddFunc(0xdb19194c, sceNpCommerce2GetGameSkuInfoFromGameProductInfo); + sceNp->AddFunc(0xde7ab33d, sceNpCommerce2DoProductCodeStartAsync); + sceNp->AddFunc(0xe0f90e44, sceNpCommerce2InitGetProductInfoListResult); + sceNp->AddFunc(0xe1e7b5ac, sceNpCommerce2GetProductInfoListCreateReq); + sceNp->AddFunc(0xe51a4944, sceNpCommerce2GetGameProductInfoFromContentInfo); + sceNp->AddFunc(0xec324c8f, sceNpCommerce2GetContentRatingInfoFromGameProductInfo); + sceNp->AddFunc(0xeef51be0, sceNpCommerce2ExecuteStoreBrowse); + sceNp->AddFunc(0xef645654, sceNpCommerce2GetGameProductInfo); + sceNp->AddFunc(0xef8eafcd, sceNpCommerce2DestroyGetProductInfoResult); + sceNp->AddFunc(0xf6139b58, sceNpCommerce2DestroyGetProductInfoListResult); + sceNp->AddFunc(0xf798f5e3, sceNpCommerce2InitGetProductInfoResult); + sceNp->AddFunc(0xfc216890, sceNpCommerce2GetCategoryInfoFromContentInfo); + sceNp->AddFunc(0x01711e81, sceNpTusDeleteMultiSlotDataVUser); + sceNp->AddFunc(0x0423e622, sceNpTusGetMultiSlotVariable); + sceNp->AddFunc(0x065b610d, sceNpTusSetMultiSlotVariableAsync); + sceNp->AddFunc(0x0835deb2, sceNpTusSetDataVUser); + sceNp->AddFunc(0x0d15043b, sceNpTusGetMultiUserVariable); + sceNp->AddFunc(0x17db7aa7, sceNpTusTryAndSetVariableVUserAsync); + sceNp->AddFunc(0x1904435e, sceNpTusCreateTransactionCtx); + sceNp->AddFunc(0x19bce18c, sceNpTusPollAsync); + sceNp->AddFunc(0x1fa5c87d, sceNpTusAddAndGetVariableAsync); + sceNp->AddFunc(0x225aed26, sceNpTusTerm); + sceNp->AddFunc(0x2357ba9e, sceNpTusGetMultiSlotVariableVUser); + sceNp->AddFunc(0x2ab21ea9, sceNpTusGetMultiSlotDataStatusVUserAsync); + sceNp->AddFunc(0x2d1b9f1a, sceNpTusGetMultiUserDataStatusVUser); + sceNp->AddFunc(0x2e162a62, sceNpTusDestroyTitleCtx); + sceNp->AddFunc(0x3175af23, sceNpTusDeleteMultiSlotDataAsync); + sceNp->AddFunc(0x325c6284, sceNpTusAbortTransaction); + sceNp->AddFunc(0x348dbcb4, sceNpTusGetMultiUserDataStatus); + sceNp->AddFunc(0x3602bc80, sceNpTusTryAndSetVariableVUser); + sceNp->AddFunc(0x368fec59, sceNpTusGetMultiUserDataStatusVUserAsync); + sceNp->AddFunc(0x38f364b0, sceNpTusGetDataVUserAsync); + sceNp->AddFunc(0x44eca8b4, sceNpTusDestroyTransactionCtx); + sceNp->AddFunc(0x47e9424a, sceNpTusTryAndSetVariable); + sceNp->AddFunc(0x5175abb9, sceNpTusGetDataAsync); + sceNp->AddFunc(0x59432970, sceNpTusSetTimeout); + sceNp->AddFunc(0x651fd79f, sceNpTusGetMultiSlotDataStatusAsync); + sceNp->AddFunc(0x6c511024, sceNpTusGetMultiUserVariableVUser); + sceNp->AddFunc(0x7caf58ee, sceNpTusCreateTitleCtx); + sceNp->AddFunc(0x7d5f0f0e, sceNpTusSetData); + sceNp->AddFunc(0x8ddd0d85, sceNpTusGetData); + sceNp->AddFunc(0x8f87a06b, sceNpTusInit); + sceNp->AddFunc(0x94989003, sceNpTusAddAndGetVariable); + sceNp->AddFunc(0x9549d22c, sceNpTusGetMultiUserVariableVUserAsync); + sceNp->AddFunc(0x96a06212, sceNpTusSetMultiSlotVariableVUserAsync); + sceNp->AddFunc(0x9cc0cf44, sceNpTusSetDataVUserAsync); + sceNp->AddFunc(0xa3abfadb, sceNpTusGetMultiSlotDataStatusVUser); + sceNp->AddFunc(0xa7993bf3, sceNpTusAddAndGetVariableVUserAsync); + sceNp->AddFunc(0xae4e590e, sceNpTusGetDataVUser); + sceNp->AddFunc(0xaf985783, sceNpTusDeleteMultiSlotVariable); + sceNp->AddFunc(0xb8e8ff22, sceNpTusWaitAsync); + sceNp->AddFunc(0xbb2877f2, sceNpTusGetMultiSlotVariableAsync); + sceNp->AddFunc(0xbbb244b7, sceNpTusTryAndSetVariableAsync); + sceNp->AddFunc(0xc2e18da8, sceNpTusDeleteMultiSlotVariableVUserAsync); + sceNp->AddFunc(0xc4e51fbf, sceNpTusDeleteMultiSlotVariableVUser); + sceNp->AddFunc(0xc66ba67e, sceNpTusGetMultiUserDataStatusAsync); + sceNp->AddFunc(0xc815b219, sceNpTusDeleteMultiSlotDataVUserAsync); + sceNp->AddFunc(0xc848d425, sceNpTusGetMultiSlotDataStatus); + sceNp->AddFunc(0xcc7a31cd, sceNpTusGetMultiUserVariableAsync); + sceNp->AddFunc(0xcc86a8f6, sceNpTusSetMultiSlotVariable); + sceNp->AddFunc(0xe0719847, sceNpTusDeleteMultiSlotData); + sceNp->AddFunc(0xe847341f, sceNpTusSetDataAsync); + sceNp->AddFunc(0xf5363608, sceNpTusDeleteMultiSlotVariableAsync); + sceNp->AddFunc(0xf60be06f, sceNpTusAddAndGetVariableVUser); + sceNp->AddFunc(0xf819be91, sceNpTusSetMultiSlotVariableVUser); + sceNp->AddFunc(0xfc7d346e, sceNpTusGetMultiSlotVariableVUserAsync); + sceNp->AddFunc(0x432b3cbf, sceNpUtilBandwidthTestShutdown); + sceNp->AddFunc(0xc2ced2b7, sceNpUtilBandwidthTestInitStart); + sceNp->AddFunc(0xc880f37d, sceNpUtilBandwidthTestGetStatus); + sceNp->AddFunc(0xc99ee313, sceNpUtilBandwidthTestAbort); + sceNp->AddFunc(0xa8cf8451, sceNpSignalingDestroyCtx); } diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index e92997781f..a8917cb195 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -18,6 +18,11 @@ static func_caller *null_func = bind_func(default_syscall); static const int kSyscallTableLength = 1024; +// UNS = Unused +// ROOT = Root +// DBG = Debug +// PM = Product Mode +// AuthID = Authentication ID static func_caller* sc_table[kSyscallTableLength] = { null_func, @@ -27,19 +32,17 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_process_get_status), //4 (0x004) DBG bind_func(sys_process_detach_child), //5 (0x005) DBG - // Unused: 6-11 - null_func, null_func, null_func, null_func, null_func, null_func, + null_func, null_func, null_func, null_func, null_func, null_func, //6-11 UNS bind_func(sys_process_get_number_of_object), //12 (0x00B) bind_func(sys_process_get_id), //13 (0x00C) null_func,//bind_func(sys_process_is_spu_lock_line_reservation_address), //14 (0x00D) - // Unused: 15-17 - null_func, null_func, null_func, + null_func, null_func, null_func, //15-17 UNS bind_func(sys_process_getppid), //18 (0x012) bind_func(sys_process_kill), //19 (0x013) - null_func, // + null_func, //20 (0x014) UNS null_func,//bind_func(_sys_process_spawn), //21 (0x015) DBG bind_func(sys_process_exit), //22 (0x016) bind_func(sys_process_wait_for_child2), //23 (0x017) DBG @@ -52,11 +55,10 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_process_get_paramsfo), //30 (0x01E) null_func,//bind_func(sys_process_get_ppu_guid), //31 (0x01F) - // Unused: 32-40 - null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, + null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, //32-40 UNS - bind_func(sys_internal_ppu_thread_exit), //41 (0x029) - null_func, // + bind_func(sys_internal_ppu_thread_exit), //41 (0x029) + null_func, //42 (0x02A) UNS bind_func(sys_ppu_thread_yield), //43 (0x02B) bind_func(sys_ppu_thread_join), //44 (0x02C) bind_func(sys_ppu_thread_detach), //45 (0x02D) @@ -68,15 +70,12 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_ppu_thread_restart), //51 (0x033) ROOT null_func,//bind_func(sys_ppu_thread_create), //52 (0x034) DBG null_func,//bind_func(sys_ppu_thread_start), //53 (0x035) - null_func,//bind_func(), //54 (0x036) ROOT - null_func,//bind_func(), //55 (0x037) ROOT + null_func,//bind_func(sys_ppu_...), //54 (0x036) ROOT + null_func,//bind_func(sys_ppu_...), //55 (0x037) ROOT null_func,//bind_func(sys_ppu_thread_rename), //56 (0x038) null_func,//bind_func(sys_ppu_thread_recover_page_fault)//57 (0x039) null_func,//bind_func(sys_ppu_thread_get_page_fault_context),//58 (0x03A) - - // Unused: 59 - null_func, - + null_func, //59 (0x03B) UNS bind_func(sys_trace_create), //60 (0x03C) bind_func(sys_trace_start), //61 (0x03D) bind_func(sys_trace_stop), //62 (0x03E) @@ -95,11 +94,8 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_timer_connect_event_queue), //75 (0x04B) bind_func(sys_timer_disconnect_event_queue), //76 (0x04C) null_func,//bind_func(sys_trace_create2_in_cbepm), //77 (0x04D) - null_func,//bind_func() //78 (0x04E) - - // Unused: 79 - null_func, - + null_func,//bind_func(sys_trace_...) //78 (0x04E) + null_func, //79 (0x04F) UNS null_func,//bind_func(sys_interrupt_tag_create) //80 (0x050) bind_func(sys_interrupt_tag_destroy), //81 (0x051) bind_func(sys_event_flag_create), //82 (0x052) @@ -135,11 +131,11 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_lwcond_destroy) //112 (0x070) null_func,//bind_func(sys_lwcond_queue_wait) //113 (0x071) bind_func(sys_semaphore_get_value), //114 (0x072) - null_func,//bind_func() //115 (0x073) - null_func,//bind_func() //116 (0x074) - null_func,//bind_func() //117 (0x075) + null_func,//bind_func(sys_semaphore_...) //115 (0x073) + null_func,//bind_func(sys_semaphore_...) //116 (0x074) + null_func,//bind_func(sys_semaphore_...) //117 (0x075) bind_func(sys_event_flag_clear), //118 (0x076) - null_func,//bind_func() //119 (0x077) ROOT + null_func,//bind_func(sys_event_...) //119 (0x077) ROOT bind_func(sys_rwlock_create), //120 (0x078) bind_func(sys_rwlock_destroy), //121 (0x079) bind_func(sys_rwlock_rlock), //122 (0x07A) @@ -169,10 +165,7 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_time_get_system_time), //146 (0x092) ROOT bind_func(sys_time_get_timebase_frequency), //147 (0x093) null_func,//bind_func(sys_rwlock_trywlock) //148 (0x094) - - // Unused: 149 - null_func, - + null_func, //149 (0x095) UNS bind_func(sys_raw_spu_create_interrupt_tag), //150 (0x096) bind_func(sys_raw_spu_set_int_mask), //151 (0x097) bind_func(sys_raw_spu_get_int_mask), //152 (0x098) @@ -185,13 +178,13 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_raw_spu_load) //159 (0x09F) bind_func(sys_raw_spu_create), //160 (0x0A0) bind_func(sys_raw_spu_destroy), //161 (0x0A1) - null_func, // + null_func, //162 (0x0A2) UNS bind_func(sys_raw_spu_read_puint_mb), //163 (0x0A3) - null_func, // + null_func, //164 (0x0A4) UNS bind_func(sys_spu_thread_get_exit_status), //165 (0x0A5) bind_func(sys_spu_thread_set_argument), //166 (0x0A6) null_func,//bind_func(sys_spu_thread_group_start_on_exit)//167(0x0A7) - null_func, // + null_func, //168 (0x0A8) UNS bind_func(sys_spu_initialize), //169 (0x0A9) bind_func(sys_spu_thread_group_create), //170 (0x0AA) bind_func(sys_spu_thread_group_destroy), //171 (0x0AB) @@ -206,54 +199,75 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_spu_thread_group_get_priority)//180 (0x0B4) bind_func(sys_spu_thread_write_ls), //181 (0x0B5) bind_func(sys_spu_thread_read_ls), //182 (0x0B6) - null_func, // + null_func, //183 (0x0B7) UNS bind_func(sys_spu_thread_write_snr), //184 (0x0B8) bind_func(sys_spu_thread_group_connect_event), //185 (0x0B9) bind_func(sys_spu_thread_group_disconnect_event), //186 (0x0BA) bind_func(sys_spu_thread_set_spu_cfg), //187 (0x0BB) bind_func(sys_spu_thread_get_spu_cfg), //188 (0x0BC) - null_func, // + null_func, //189 (0x0BD) UNS bind_func(sys_spu_thread_write_spu_mb), //190 (0x0BE) bind_func(sys_spu_thread_connect_event), //191 (0x0BF) bind_func(sys_spu_thread_disconnect_event), //192 (0x0C0) bind_func(sys_spu_thread_bind_queue), //193 (0x0C1) bind_func(sys_spu_thread_unbind_queue), //194 (0x0C2) - null_func, // + null_func, //195 (0x0C3) UNS bind_func(sys_raw_spu_set_spu_cfg), //196 (0x0C4) bind_func(sys_raw_spu_get_spu_cfg), //197 (0x0C5) null_func,//bind_func(sys_spu_thread_recover_page_fault)//198 (0x0C6) null_func,//bind_func(sys_raw_spu_recover_page_fault) //199 (0x0C7) - null_func, null_func, null_func, null_func, null_func, //204(0x104) - null_func, null_func, null_func, null_func, null_func, //209 - null_func, null_func, null_func, null_func, null_func, //214 - null_func, null_func, null_func, null_func, null_func, //219 - null_func, null_func, null_func, null_func, null_func, //224 - null_func, null_func, null_func, null_func, null_func, //229 - null_func, null_func, null_func, null_func, null_func, //234 - null_func, null_func, null_func, null_func, null_func, //239 - null_func, null_func, null_func, null_func, null_func, //244 - null_func, null_func, null_func, null_func, null_func, //249 - null_func, //250 + null_func, null_func, null_func, null_func, null_func, //204 UNS? + null_func, null_func, null_func, null_func, null_func, //209 UNS? + null_func, null_func, null_func, null_func, null_func, //214 UNS? - bind_func(sys_spu_thread_group_connect_event_all_threads),//251 (0x0FB) - bind_func(sys_spu_thread_group_disconnect_event_all_threads),//252 (0x0FC) + null_func,//bind_func(sys_dbg_mat_set_condition) //215 (0x0D7) + null_func,//bind_func(sys_dbg_mat_get_condition) //216 (0x0D8) + null_func,//bind_func(sys_dbg_...) //217 (0x0D9) DBG UNS? + null_func,//bind_func(sys_dbg_...) //218 (0x0DA) DBG UNS? + null_func,//bind_func(sys_dbg_...) //219 (0x0DB) DBG UNS? + + null_func, null_func, null_func, null_func, null_func, //224 UNS + null_func, null_func, null_func, null_func, null_func, //229 UNS? + + null_func,//bind_func(sys_isolated_spu_create) //230 (0x0E6) ROOT + null_func,//bind_func(sys_isolated_spu_destroy) //231 (0x0E7) ROOT + null_func,//bind_func(sys_isolated_spu_start) //232 (0x0E8) ROOT + null_func,//bind_func(sys_isolated_spu_create_interrupt_tag) //233 (0x0E9) ROOT + null_func,//bind_func(sys_isolated_spu_set_int_mask) //234 (0x0EA) ROOT + null_func,//bind_func(sys_isolated_spu_get_int_mask) //235 (0x0EB) ROOT + null_func,//bind_func(sys_isolated_spu_set_int_stat) //236 (0x0EC) ROOT + null_func,//bind_func(sys_isolated_spu_get_int_stat) //237 (0x0ED) ROOT + null_func,//bind_func(sys_isolated_spu_set_spu_cfg) //238 (0x0EE) ROOT + null_func,//bind_func(sys_isolated_spu_get_spu_cfg) //239 (0x0EF) ROOT + null_func,//bind_func(sys_isolated_spu_read_puint_mb) //240 (0x0F0) ROOT + null_func, //241 (0x0F1) ROOT UNS + null_func, //242 (0x0F2) ROOT UNS + null_func, //243 (0x0F3) ROOT UNS + null_func,//bind_func(sys_spu_thread_group_system_set_next_group) //244 (0x0F4) ROOT + null_func,//bind_func(sys_spu_thread_group_system_unset_next_group) //245 (0x0F5) ROOT + null_func,//bind_func(sys_spu_thread_group_system_set_switch_group) //246 (0x0F6) ROOT + null_func,//bind_func(sys_spu_thread_group_system_unset_switch_group) //247 (0x0F7) ROOT + null_func,//bind_func(sys_spu_thread_group...) //248 (0x0F8) ROOT + null_func,//bind_func(sys_spu_thread_group...) //249 (0x0F9) ROOT + null_func,//bind_func(sys_spu_thread_group_set_cooperative_victims) //250 (0x0FA) + bind_func(sys_spu_thread_group_connect_event_all_threads), //251 (0x0FB) + bind_func(sys_spu_thread_group_disconnect_event_all_threads), //252 (0x0FC) null_func,//bind_func() //253 (0x0FD) null_func,//bind_func(sys_spu_thread_group_log) //254 (0x0FE) - // Unused: 255-259 - null_func, null_func, null_func, null_func, null_func, + null_func, null_func, null_func, null_func, null_func, //255-259 UNS null_func,//bind_func(sys_spu_image_open_by_fd) //260 (0x104) - null_func, null_func, null_func, null_func, //264 - null_func, null_func, null_func, null_func, null_func, //269 - null_func, null_func, null_func, null_func, null_func, //274 - null_func, null_func, null_func, null_func, null_func, //279 - null_func, null_func, null_func, null_func, null_func, //284 - null_func, null_func, null_func, null_func, null_func, //289 - null_func, null_func, null_func, null_func, null_func, //294 - null_func, null_func, null_func, null_func, null_func, //299 + null_func, null_func, null_func, null_func, //264 UNS + null_func, null_func, null_func, null_func, null_func, //269 UNS + null_func, null_func, null_func, null_func, null_func, //274 UNS + null_func, null_func, null_func, null_func, null_func, //279 UNS + null_func, null_func, null_func, null_func, null_func, //284 UNS + null_func, null_func, null_func, null_func, null_func, //289 UNS + null_func, null_func, null_func, null_func, null_func, //294 UNS + null_func, null_func, null_func, null_func, null_func, //299 UNS bind_func(sys_vm_memory_map), //300 (0x12C) bind_func(sys_vm_unmap), //301 (0x12D) @@ -268,18 +282,17 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_vm_sync), //310 (0x136) bind_func(sys_vm_test), //311 (0x137) bind_func(sys_vm_get_statistics), //312 (0x138) - null_func,//bind_func() //313 (0x139) - null_func,//bind_func() //314 (0x13A) - null_func,//bind_func() //315 (0x13B) + null_func,//bind_func(sys_vm_memory_map (different)) //313 (0x139) + null_func,//bind_func(sys_...) //314 (0x13A) + null_func,//bind_func(sys_...) //315 (0x13B) - // Unused: 316-323 - null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, + null_func, null_func, null_func, null_func, null_func, null_func, null_func, null_func, //316-323 UNS - bind_func(sys_memory_container_create), //324 (0x144) - bind_func(sys_memory_container_destroy), //325 (0x145) + bind_func(sys_memory_container_create), //324 (0x144) DBG + bind_func(sys_memory_container_destroy), //325 (0x145) DBG bind_func(sys_mmapper_allocate_fixed_address), //326 (0x146) bind_func(sys_mmapper_enable_page_fault_notification), //327 (0x147) - null_func,//bind_func() //328 (0x148) + null_func,//bind_func(sys_mmapper_...) //328 (0x148) null_func,//bind_func(sys_mmapper_free_shared_memory) //329 (0x149) bind_func(sys_mmapper_allocate_address), //330 (0x14A) bind_func(sys_mmapper_free_address), //331 (0x14B) @@ -290,57 +303,121 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_mmapper_change_address_access_right), //336 (0x150) bind_func(sys_mmapper_search_and_map), //337 (0x151) null_func,//bind_func(sys_mmapper_get_shared_memory_attribute) //338 (0x152) - null_func,//bind_func() //339 (0x153) - null_func,//bind_func() //340 (0x154) + null_func,//bind_func(sys_...) //339 (0x153) + null_func,//bind_func(sys_...) //340 (0x154) bind_func(sys_memory_container_create), //341 (0x155) bind_func(sys_memory_container_destroy), //342 (0x156) bind_func(sys_memory_container_get_size), //343 (0x157) null_func,//bind_func(sys_memory_budget_set) //344 (0x158) - null_func,//bind_func() //345 (0x159) - null_func,//bind_func() //346 (0x15A) - null_func, // + null_func,//bind_func(sys_memory_...) //345 (0x159) + null_func,//bind_func(sys_memory_...) //346 (0x15A) + null_func, //347 (0x15B) UNS bind_func(sys_memory_allocate), //348 (0x15C) bind_func(sys_memory_free), //349 (0x15D) bind_func(sys_memory_allocate_from_container), //350 (0x15E) bind_func(sys_memory_get_page_attribute), //351 (0x15F) bind_func(sys_memory_get_user_memory_size), //352 (0x160) null_func,//bind_func(sys_memory_get_user_memory_stat) //353 (0x161) - null_func,//bind_func() //354 (0x162) - null_func,//bind_func() //355 (0x163) + null_func,//bind_func(sys_memory_...) //354 (0x162) + null_func,//bind_func(sys_memory_...) //355 (0x163) null_func,//bind_func(sys_memory_allocate_colored) //356 (0x164) - null_func,//bind_func() //357 (0x165) - null_func,//bind_func() //358 (0x166) - null_func,//bind_func() //359 (0x167) - null_func,//bind_func() //360 (0x168) + null_func,//bind_func(sys_memory_...) //357 (0x165) + null_func,//bind_func(sys_memory_...) //358 (0x166) + null_func,//bind_func(sys_memory_...) //359 (0x167) + null_func,//bind_func(sys_memory_...) //360 (0x168) null_func,//bind_func(sys_memory_allocate_from_container_colored) //361 (0x169) null_func,//bind_func(sys_mmapper_allocate_memory_from_container) //362 (0x16A) - null_func,//bind_func() //363 (0x16B) - null_func,//bind_func() //364 (0x16C) + null_func,//bind_func(sys_mmapper_...) //363 (0x16B) + null_func,//bind_func(sys_mmapper_...) //364 (0x16C) + null_func, //365 (0x16D) UNS + null_func, //366 (0x16E) UNS + null_func,//bind_func(sys_uart_initialize) //367 (0x16F) ROOT + null_func,//bind_func(sys_uart_receive) //368 (0x170) ROOT + null_func,//bind_func(sys_uart_send) //369 (0x171) ROOT + null_func,//bind_func(sys_uart_get_params) //370 (0x172) ROOT + null_func, //371 (0x173) UNS + null_func,//bind_func(sys_game_watchdog_start) //372 (0x174) + null_func,//bind_func(sys_game_watchdog_stop) //373 (0x175) + null_func,//bind_func(sys_game_watchdog_clear) //374 (0x176) + null_func,//bind_func(sys_game_set_system_sw_version) //375 (0x177) ROOT + null_func,//bind_func(sys_game_get_system_sw_version) //376 (0x178) ROOT + null_func,//bind_func(sys_sm_set_shop_mode) //377 (0x179) ROOT + null_func,//bind_func(sys_sm_get_ext_event2) //378 (0x17A) ROOT + null_func,//bind_func(sys_sm_shutdown) //379 (0x17B) ROOT + null_func,//bind_func(sys_sm_get_params) //380 (0x17C) DBG + null_func,//bind_func(sys_sm_get_inter_lpar_parameter) //381 (0x17D) ROOT + null_func,//bind_func(sys_sm_) //382 (0x17E) ROOT + null_func,//bind_func(sys_game_get_temperature) //383 (0x17F) ROOT + null_func,//bind_func(sys_sm_get_tzpb) //384 (0x180) ROOT + null_func,//bind_func(sys_sm_request_led) //385 (0x181) ROOT + null_func,//bind_func(sys_sm_control_led) //386 (0x182) ROOT + null_func,//bind_func(sys_sm_get_platform_info) //387 (0x183) DBG + null_func,//bind_func(sys_sm_ring_buzzer) //388 (0x184) ROOT + null_func,//bind_func(sys_sm_set_fan_policy) //389 (0x185) PM + null_func,//bind_func(sys_sm_request_error_log) //390 (0x186) ROOT + null_func,//bind_func(sys_sm_request_be_count) //391 (0x187) ROOT + null_func,//bind_func(sys_sm_ring_buzzer) //392 (0x188) ROOT + null_func,//bind_func(sys_sm_get_hw_config) //393 (0x189) ROOT + null_func,//bind_func(sys_sm_request_scversion) //394 (0x18A) ROOT + null_func,//bind_func(sys_sm_request_system_event_log) //395 (0x18B) PM + null_func,//bind_func(sys_sm_set_rtc_alarm) //396 (0x18C) ROOT + null_func,//bind_func(sys_sm_get_rtc_alarm) //397 (0x18D) ROOT + null_func,//bind_func(sys_console_write) //398 (0x18E) ROOT + null_func, //399 (0x18F) UNS + null_func,//bind_func(sys_sm_...) //400 (0x190) PM + null_func,//bind_func(sys_sm_...) //401 (0x191) ROOT + bind_func(sys_tty_read), //402 (0x192) + bind_func(sys_tty_write), //403 (0x193) + null_func,//bind_func(sys_...) //404 (0x194) ROOT + null_func,//bind_func(sys_...) //405 (0x195) PM + null_func,//bind_func(sys_...) //406 (0x196) PM + null_func,//bind_func(sys_...) //407 (0x197) PM + null_func,//bind_func(sys_sm_get_tzpb) //408 (0x198) PM + null_func,//bind_func(sys_sm_get_fan_policy) //409 (0x199) PM + null_func,//bind_func(sys_game_board_storage_read) //410 (0x19A) + null_func,//bind_func(sys_game_board_storage_write) //411 (0x19B) + null_func,//bind_func(sys_game_get_rtc_status) //412 (0x19C) + null_func,//bind_func(sys_...) //413 (0x19D) ROOT + null_func,//bind_func(sys_...) //414 (0x19E) ROOT + null_func,//bind_func(sys_...) //415 (0x19F) ROOT + null_func, null_func, null_func, null_func, //419 UNS + null_func, null_func, null_func, null_func, null_func, //424 UNS + null_func, null_func, null_func, null_func, null_func, //429 UNS + null_func, null_func, null_func, null_func, null_func, //434 UNS + null_func, null_func, null_func, null_func, null_func, //439 UNS + null_func, null_func, null_func, null_func, null_func, //444 UNS + null_func, null_func, null_func, null_func, null_func, //449 UNS - null_func, null_func, null_func, null_func, null_func, //369 - null_func, null_func, null_func, null_func, null_func, //374 - null_func, null_func, null_func, null_func, null_func, //379 - null_func, null_func, null_func, null_func, null_func, //384 - null_func, null_func, null_func, null_func, null_func, //389 - null_func, null_func, null_func, null_func, null_func, //394 - null_func, null_func, null_func, null_func, null_func, //399 - null_func, null_func, bind_func(sys_tty_read), bind_func(sys_tty_write), null_func, //404 - null_func, null_func, null_func, null_func, null_func, //409 - null_func, null_func, null_func, null_func, null_func, //414 - null_func, null_func, null_func, null_func, null_func, //419 - null_func, null_func, null_func, null_func, null_func, //424 - null_func, null_func, null_func, null_func, null_func, //429 - null_func, null_func, null_func, null_func, null_func, //434 - null_func, null_func, null_func, null_func, null_func, //439 - null_func, null_func, null_func, null_func, null_func, //444 - null_func, null_func, null_func, null_func, null_func, //449 - null_func, null_func, null_func, null_func, null_func, //454 - null_func, null_func, null_func, null_func, null_func, //459 - null_func, null_func, null_func, null_func, null_func, //464 - null_func, null_func, null_func, null_func, null_func, //469 - null_func, null_func, null_func, null_func, null_func, //474 - null_func, null_func, null_func, null_func, null_func, //479 + null_func,//bind_func(sys_overlay_load_module) //450 (0x1C2) + null_func,//bind_func(sys_overlay_unload_module) //451 (0x1C3) + null_func,//bind_func(sys_overlay_get_module_list) //452 (0x1C4) + null_func,//bind_func(sys_overlay_get_module_info) //453 (0x1C5) + null_func,//bind_func(sys_overlay_load_module_by_fd) //454 (0x1C6) + null_func,//bind_func(sys_overlay_get_module_info2) //455 (0x1C7) + null_func,//bind_func(sys_overlay_get_sdk_version) //456 (0x1C8) + null_func,//bind_func(sys_overlay_get_module_dbg_info) //457 (0x1C9) + null_func,//bind_func(sys_overlay_get_module_dbg_info) //458 (0x1CA) + null_func, //459 (0x1CB) UNS + null_func,//bind_func(sys_prx_dbg_get_module_id_list) //460 (0x1CC) ROOT + null_func,//bind_func(sys_prx_get_module_id_by_address) //461 (0x1CD) + null_func, //462 (0x1CE) UNS + null_func,//bind_func(sys_prx_load_module_by_fd) //463 (0x1CF) + null_func,//bind_func(sys_prx_load_module_on_memcontainer_by_fd) //464 (0x1D0) + null_func,//bind_func(sys_prx_load_module_list) //465 (0x1D1) + null_func,//bind_func(sys_prx_load_module_list_on_memcontainer) //466 (0x1D2) + null_func,//bind_func(sys_prx_get_ppu_guid) //467 (0x1D3) + null_func,//bind_func(sys_...) //468 (0x1D4) ROOT + null_func, //469 (0x1D5) UNS + null_func,//bind_func(sys_...) //470 (0x1D6) ROOT + null_func,//bind_func(sys_...) //471 (0x1D7) ROOT + null_func,//bind_func(sys_...) //472 (0x1D8) ROOT + null_func,//bind_func(sys_...) //473 (0x1D9) + null_func,//bind_func(sys_...) //474 (0x1DA) + null_func,//bind_func(sys_...) //475 (0x1DB) ROOT + null_func,//bind_func(sys_...) //476 (0x1DC) ROOT + + null_func, null_func, null_func, //477-479 UNS null_func,//bind_func(sys_prx_load_module), //480 (0x1E0) null_func,//bind_func(sys_prx_start_module), //481 (0x1E1) @@ -353,50 +430,172 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_prx_link_library), //488 (0x1E8) bind_func(sys_prx_unlink_library), //489 (0x1E9) bind_func(sys_prx_query_library), //490 (0x1EA) - null_func, //491 (0x1EB) - null_func, //492 (0x1EC) - null_func,//sys_prx_dbg_get_module_info //493 (0x1ED) + null_func, //491 (0x1EB) UNS + null_func,//bind_func(sys_...) //492 (0x1EC) DBG + null_func,//bind_func(sys_prx_dbg_get_module_info) //493 (0x1ED) DBG null_func,//bind_func(sys_prx_get_module_list), //494 (0x1EE) null_func,//bind_func(sys_prx_get_module_info), //495 (0x1EF) null_func,//bind_func(sys_prx_get_module_id_by_name), //496 (0x1F0) null_func,//bind_func(sys_prx_load_module_on_memcontainer),//497 (0x1F1) bind_func(sys_prx_start), //498 (0x1F2) bind_func(sys_prx_stop), //499 (0x1F3) + null_func,//bind_func(sys_hid_manager_open) //500 (0x1F4) + null_func,//bind_func(sys_hid_manager_close) //501 (0x1F5) + null_func,//bind_func(sys_hid_manager_read) //502 (0x1F6) ROOT + null_func,//bind_func(sys_hid_manager_ioctl) //503 (0x1F7) + null_func,//bind_func(sys_hid_manager_map_logical_id_to_port_id) //504 (0x1F8) ROOT + null_func,//bind_func(sys_hid_manager_unmap_logical_id_to_port_id) //505 (0x1F9) ROOT + null_func,//bind_func(sys_hid_manager_add_hot_key_observer) //506 (0x1FA) ROOT + null_func,//bind_func(sys_hid_manager_remove_hot_key_observer) //507 (0x1FB) ROOT + null_func,//bind_func(sys_hid_manager_grab_focus) //508 (0x1FC) ROOT + null_func,//bind_func(sys_hid_manager_release_focus) //509 (0x1FD) ROOT + null_func,//bind_func(sys_hid_manager_...) //510 (0x1FE) + null_func,//bind_func(sys_hid_manager_set_...) //511 (0x1FF) ROOT + null_func,//bind_func(sys_hid_manager_...) //512 (0x200) ROOT + null_func,//bind_func(sys_hid_manager_...) //513 (0x201) + null_func,//bind_func(sys_hid_manager_...) //514 (0x202) + null_func, //515 (0x203) UNS + null_func,//bind_func(sys_config_open) //516 (0x204) + null_func,//bind_func(sys_config_close) //517 (0x205) + null_func,//bind_func(sys_config_get_service_event) //518 (0x206) + null_func,//bind_func(sys_config_add_service_listener) //519 (0x207) + null_func,//bind_func(sys_config_remove_service_listener) //520 (0x208) + null_func,//bind_func(sys_config_register_service) //521 (0x209) + null_func,//bind_func(sys_config_unregister_service) //522 (0x20A) + null_func,//bind_func(sys_config_io_event) //523 (0x20B) + null_func,//bind_func(sys_config_...) //524 (0x20C) + null_func,//bind_func(sys_config_...) //525 (0x20D) + null_func, //526 (0x20E) UNS + null_func, //527 (0x20F) UNS + null_func, //528 (0x210) UNS + null_func, //529 (0x211) UNS + null_func,//bind_func(sys_usbd_initialize) //530 (0x212) + null_func,//bind_func(sys_usbd_finalize) //531 (0x213) + null_func,//bind_func(sys_usbd_get_device_list) //532 (0x214) + null_func,//bind_func(sys_usbd_get_descriptor_size) //533 (0x215) + null_func,//bind_func(sys_usbd_get_descriptor) //534 (0x216) + null_func,//bind_func(sys_usbd_register_ldd) //535 (0x217) + null_func,//bind_func(sys_usbd_unregister_ldd) //536 (0x218) + null_func,//bind_func(sys_usbd_open_pipe) //537 (0x219) + null_func,//bind_func(sys_usbd_open_default_pipe) //538 (0x21A) + null_func,//bind_func(sys_usbd_close_pipe) //539 (0x21B) + null_func,//bind_func(sys_usbd_receive_event) //540 (0x21C) + null_func,//bind_func(sys_usbd_detect_event) //541 (0x21D) + null_func,//bind_func(sys_usbd_attach) //542 (0x21E) + null_func,//bind_func(sys_usbd_transfer_data) //543 (0x21F) + null_func,//bind_func(sys_usbd_isochronous_transfer_data) //544 (0x220) + null_func,//bind_func(sys_usbd_get_transfer_status) //545 (0x221) + null_func,//bind_func(sys_usbd_get_isochronous_transfer_status) //546 (0x222) + null_func,//bind_func(sys_usbd_get_device_location) //547 (0x223) + null_func,//bind_func(sys_usbd_send_event) //548 (0x224) + null_func,//bind_func(sys_ubsd_...) //549 (0x225) + null_func,//bind_func(sys_usbd_allocate_memory) //550 (0x226) + null_func,//bind_func(sys_usbd_free_memory) //551 (0x227) + null_func,//bind_func(sys_ubsd_...) //552 (0x228) + null_func,//bind_func(sys_ubsd_...) //553 (0x229) + null_func,//bind_func(sys_ubsd_...) //554 (0x22A) + null_func,//bind_func(sys_ubsd_...) //555 (0x22B) + null_func,//bind_func(sys_usbd_get_device_speed) //556 (0x22C) + null_func,//bind_func(sys_ubsd_...) //557 (0x22D) + null_func,//bind_func(sys_ubsd_...) //558 (0x22E) + null_func,//bind_func(sys_usbd_register_extra_ldd) //559 (0x22F) + null_func,//bind_func(sys_...) //560 (0x230) ROOT + null_func,//bind_func(sys_...) //561 (0x231) ROOT + null_func,//bind_func(sys_...) //562 (0x232) ROOT + null_func,//bind_func(sys_...) //563 (0x233) + null_func,//bind_func(sys_...) //564 (0x234) + null_func,//bind_func(sys_...) //565 (0x235) + null_func,//bind_func(sys_...) //566 (0x236) + null_func,//bind_func(sys_...) //567 (0x237) + null_func,//bind_func(sys_...) //568 (0x238) + null_func,//bind_func(sys_...) //569 (0x239) + null_func,//bind_func(sys_...) //570 (0x23A) + null_func,//bind_func(sys_pad_ldd_unregister_controller) //571 (0x23B) + null_func,//bind_func(sys_pad_ldd_data_insert) //572 (0x23C) + null_func,//bind_func(sys_pad_dbg_ldd_set_data_insert_mode) //573 (0x23D) + null_func,//bind_func(sys_pad_ldd_register_controller) //574 (0x23E) + null_func,//bind_func(sys_pad_ldd_get_port_no) //575 (0x23F) + null_func, //576 (0x240) UNS + null_func,//bind_func(sys_pad_manager_...) //577 (0x241) ROOT PM + null_func,//bind_func(sys_bluetooth_...) //578 (0x242) + null_func,//bind_func(sys_bluetooth_...) //579 (0x243) + null_func,//bind_func(sys_bluetooth_...) //580 (0x244) ROOT + null_func,//bind_func(sys_bluetooth_...) //581 (0x245) ROOT + null_func,//bind_func(sys_bluetooth_...) //582 (0x246) ROOT + null_func,//bind_func(sys_bluetooth_...) //583 (0x247) ROOT + null_func,//bind_func(sys_bluetooth_...) //584 (0x248) ROOT + null_func,//bind_func(sys_bluetooth_...) //585 (0x249) + null_func,//bind_func(sys_bluetooth_...) //586 (0x24A) + null_func,//bind_func(sys_bluetooth_...) //587 (0x24B) ROOT + null_func,//bind_func(sys_bluetooth_...) //588 (0x24C) + null_func,//bind_func(sys_bluetooth_...) //589 (0x24D) + null_func,//bind_func(sys_bluetooth_...) //590 (0x24E) ROOT + null_func,//bind_func(sys_bluetooth_...) //591 (0x24F) + null_func,//bind_func(sys_bluetooth_...) //592 (0x250) + null_func,//bind_func(sys_bluetooth_...) //593 (0x251) ROOT + null_func,//bind_func(sys_bluetooth_...) //594 (0x252) + null_func,//bind_func(sys_bluetooth_...) //595 (0x253) + null_func,//bind_func(sys_bluetooth_...) //596 (0x254) + null_func,//bind_func(sys_bluetooth_...) //597 (0x255) + null_func,//bind_func(sys_bluetooth_...) //598 (0x256) ROOT + null_func,//bind_func(sys_bluetooth_...) //599 (0x257) ROOT + null_func,//bind_func(sys_storage_open) //600 (0x258) ROOT + null_func,//bind_func(sys_storage_close) //601 (0x259) + null_func,//bind_func(sys_storage_read) //602 (0x25A) + null_func,//bind_func(sys_storage_write) //603 (0x25B) + null_func,//bind_func(sys_storage_send_device_command) //604 (0x25C) + null_func,//bind_func(sys_storage_async_configure) //605 (0x25D) + null_func,//bind_func(sys_storage_async_read) //606 (0x25E) + null_func,//bind_func(sys_storage_async_write) //607 (0x25F) + null_func,//bind_func(sys_storage_async_cancel) //608 (0x260) + null_func,//bind_func(sys_storage_get_device_info) //609 (0x261) ROOT + null_func,//bind_func(sys_storage_get_device_config) //610 (0x262) ROOT + null_func,//bind_func(sys_storage_report_devices) //611 (0x263) ROOT + null_func,//bind_func(sys_storage_configure_medium_event) //612 (0x264) ROOT + null_func,//bind_func(sys_storage_set_medium_polling_interval) //613 (0x265) + null_func,//bind_func(sys_storage_create_region) //614 (0x266) + null_func,//bind_func(sys_storage_delete_region) //615 (0x267) + null_func,//bind_func(sys_storage_execute_device_command) //616 (0x268) + null_func,//bind_func(sys_storage_check_region_acl) //617 (0x269) + null_func,//bind_func(sys_storage_set_region_acl) //618 (0x26A) + null_func,//bind_func(sys_storage_async_send_device_command) //619 (0x26B) + null_func,//bind_func(sys_...) //620 (0x26C) ROOT + null_func,//bind_func(sys_gamepad_ycon_if) //621 (0x26D) + null_func,//bind_func(sys_storage_get_region_offset) //622 (0x26E) + null_func,//bind_func(sys_storage_set_emulated_speed) //623 (0x26F) + null_func,//bind_func(sys_io_buffer_create) //624 (0x270) + null_func,//bind_func(sys_io_buffer_destroy) //625 (0x271) + null_func,//bind_func(sys_io_buffer_allocate) //626 (0x272) + null_func,//bind_func(sys_io_buffer_free) //627 (0x273) + null_func, //628 (0x274) UNS + null_func, //629 (0x275) UNS + null_func,//bind_func(sys_gpio_set) //630 (0x276) + null_func,//bind_func(sys_gpio_get) //631 (0x277) + null_func, //632 (0x278) UNS + null_func,//bind_func(sys_fsw_connect_event) //633 (0x279) + null_func,//bind_func(sys_fsw_disconnect_event) //634 (0x27A) + null_func,//bind_func(sys_btsetting_if) //635 (0x27B) + null_func,//bind_func(sys_...) //636 (0x27C) + null_func,//bind_func(sys_...) //637 (0x27D) + null_func,//bind_func(sys_...) //638 (0x27E) - null_func, null_func, null_func, null_func, null_func, //504 - null_func, null_func, null_func, null_func, null_func, //509 - null_func, null_func, null_func, null_func, null_func, //514 - null_func, null_func, null_func, null_func, null_func, //519 - null_func, null_func, null_func, null_func, null_func, //524 - null_func, null_func, null_func, null_func, null_func, //529 - null_func, null_func, null_func, null_func, null_func, //534 - null_func, null_func, null_func, null_func, null_func, //539 - null_func, null_func, null_func, null_func, null_func, //544 - null_func, null_func, null_func, null_func, null_func, //549 - null_func, null_func, null_func, null_func, null_func, //554 - null_func, null_func, null_func, null_func, null_func, //559 - null_func, null_func, null_func, null_func, null_func, //564 - null_func, null_func, null_func, null_func, null_func, //569 - null_func, null_func, null_func, null_func, null_func, //574 - null_func, null_func, null_func, null_func, null_func, //579 - null_func, null_func, null_func, null_func, null_func, //584 - null_func, null_func, null_func, null_func, null_func, //589 - null_func, null_func, null_func, null_func, null_func, //594 - null_func, null_func, null_func, null_func, null_func, //599 - null_func, null_func, null_func, null_func, null_func, //604 - null_func, null_func, null_func, null_func, null_func, //609 - null_func, null_func, null_func, null_func, null_func, //614 - null_func, null_func, null_func, null_func, null_func, //619 - null_func, null_func, null_func, null_func, null_func, //624 - null_func, null_func, null_func, null_func, null_func, //629 - null_func, null_func, null_func, null_func, null_func, //634 - null_func, null_func, null_func, null_func, null_func, //639 - null_func, null_func, null_func, null_func, null_func, //644 - null_func, null_func, null_func, null_func, null_func, //649 - null_func, null_func, null_func, null_func, null_func, //654 - null_func, null_func, null_func, null_func, null_func, //659 - null_func, null_func, null_func, null_func, null_func, //664 - null_func, //665 + null_func, //639 DEPRECATED + null_func, null_func, null_func, null_func, null_func, //644 DEPRECATED + null_func, null_func, null_func, null_func, null_func, //649 DEPRECATED + + null_func,//bind_func(sys_rsxaudio_initialize) //650 (0x28A) + null_func,//bind_func(sys_rsxaudio_finalize) //651 (0x28B) + null_func,//bind_func(sys_rsxaudio_import_shared_memory) //652 (0x28C) + null_func,//bind_func(sys_rsxaudio_unimport_shared_memory) //653 (0x28D) + null_func,//bind_func(sys_rsxaudio_create_connection) //654 (0x28E) + null_func,//bind_func(sys_rsxaudio_close_connection) //655 (0x28F) + null_func,//bind_func(sys_rsxaudio_prepare_process) //656 (0x290) + null_func,//bind_func(sys_rsxaudio_start_process) //657 (0x291) + null_func,//bind_func(sys_rsxaudio_) //658 (0x292) + null_func,//bind_func(sys_rsxaudio_) //659 (0x293) + + null_func, null_func, null_func, null_func, null_func, //664 UNS + null_func, //665 UNS bind_func(sys_rsx_device_open), //666 (0x29A) bind_func(sys_rsx_device_close), //667 (0x29B) @@ -410,33 +609,71 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_rsx_device_map), //675 (0x2A3) bind_func(sys_rsx_device_unmap), //676 (0x2A4) bind_func(sys_rsx_attribute), //677 (0x2A5) - null_func, //678 (0x2A6) - null_func, //679 (0x2A7) ROOT + null_func,//bind_func(sys_...) //678 (0x2A6) + null_func,//bind_func(sys_...) //679 (0x2A7) ROOT + null_func,//bind_func(sys_...) //680 (0x2A8) ROOT + null_func,//bind_func(sys_...) //681 (0x2A9) ROOT + null_func,//bind_func(sys_...) //682 (0x2AA) ROOT + null_func,//bind_func(sys_...) //683 (0x2AB) ROOT + null_func,//bind_func(sys_...) //684 (0x2AC) ROOT + null_func,//bind_func(sys_...) //685 (0x2AD) ROOT + null_func,//bind_func(sys_...) //686 (0x2AE) ROOT + null_func,//bind_func(sys_...) //687 (0x2AF) ROOT + null_func,//bind_func(sys_...) //688 (0x2B0) ROOT + null_func,//bind_func(sys_...) //689 (0x2B1) ROOT + null_func,//bind_func(sys_...) //690 (0x2B2) ROOT + null_func,//bind_func(sys_...) //691 (0x2B3) ROOT + null_func,//bind_func(sys_...) //692 (0x2B4) ROOT + null_func,//bind_func(sys_...) //693 (0x2B5) ROOT + null_func,//bind_func(sys_...) //694 (0x2B6) DEPRECATED + null_func,//bind_func(sys_...) //695 (0x2B7) DEPRECATED + null_func,//bind_func(sys_...) //696 (0x2B8) ROOT + null_func,//bind_func(sys_...) //697 (0x2B9) UNS + null_func,//bind_func(sys_...) //698 (0x2BA) UNS + null_func,//bind_func(sys_bdemu_send_command) //699 (0x2BB) + null_func,//bind_func(sys_net_bnet_accept) //700 (0x2BC) + null_func,//bind_func(sys_net_bnet_bind) //701 (0x2BD) + null_func,//bind_func(sys_net_bnet_connect) //702 (0x2BE) + null_func,//bind_func(sys_net_bnet_getpeername) //703 (0x2BF) + null_func,//bind_func(sys_net_bnet_getsockname) //704 (0x2C0) + null_func,//bind_func(sys_net_bnet_getsockopt) //705 (0x2C1) + null_func,//bind_func(sys_net_bnet_listen) //706 (0x2C2) + null_func,//bind_func(sys_net_bnet_recvfrom) //707 (0x2C3) + null_func,//bind_func(sys_net_bnet_recvmsg) //708 (0x2C4) + null_func,//bind_func(sys_net_bnet_sendmsg) //709 (0x2C5) + null_func,//bind_func(sys_net_bnet_sendto) //710 (0x2C6) + null_func,//bind_func(sys_net_bnet_setsockop) //711 (0x2C7) + null_func,//bind_func(sys_net_bnet_shutdown) //712 (0x2C8) + null_func,//bind_func(sys_net_bnet_socket) //713 (0x2C9) + null_func,//bind_func(sys_net_bnet_close) //714 (0x2CA) + null_func,//bind_func(sys_net_bnet_poll) //715 (0x2CB) + null_func,//bind_func(sys_net_bnet_select) //716 (0x2CC) + null_func,//bind_func(sys_net_open_dump) //717 (0x2CD) + null_func,//bind_func(sys_net_read_dump) //718 (0x2CE) + null_func,//bind_func(sys_net_close_dump) //719 (0x2CF) + null_func,//bind_func(sys_net_write_dump) //720 (0x2D0) + null_func,//bind_func(sys_net_abort) //721 (0x2D1) + null_func,//bind_func(sys_net_infoctl) //722 (0x2D2) + null_func,//bind_func(sys_net_control) //723 (0x2D3) + null_func,//bind_func(sys_net_bnet_ioctl) //724 (0x2D4) + null_func,//bind_func(sys_net_bnet_sysctl) //725 (0x2D5) + null_func,//bind_func(sys_net_eurus_post_command) //726 (0x2D6) - null_func, null_func, null_func, null_func, null_func, //684 - null_func, null_func, null_func, null_func, null_func, //689 - null_func, null_func, null_func, null_func, null_func, //694 - null_func, null_func, null_func, null_func, null_func, //699 - null_func, null_func, null_func, null_func, null_func, //704 - null_func, null_func, null_func, null_func, null_func, //709 - null_func, null_func, null_func, null_func, null_func, //714 - null_func, null_func, null_func, null_func, null_func, //719 - null_func, null_func, null_func, null_func, null_func, //724 - null_func, null_func, null_func, null_func, null_func, //729 - null_func, null_func, null_func, null_func, null_func, //734 - null_func, null_func, null_func, null_func, null_func, //739 - null_func, null_func, null_func, null_func, null_func, //744 - null_func, null_func, null_func, null_func, null_func, //749 - null_func, null_func, null_func, null_func, null_func, //754 - null_func, null_func, null_func, null_func, null_func, //759 - null_func, null_func, null_func, null_func, null_func, //764 - null_func, null_func, null_func, null_func, null_func, //769 - null_func, null_func, null_func, null_func, null_func, //774 - null_func, null_func, null_func, null_func, null_func, //779 - null_func, null_func, null_func, null_func, null_func, //784 - null_func, null_func, null_func, null_func, null_func, //789 - null_func, null_func, null_func, null_func, null_func, //794 - null_func, null_func, null_func, null_func, null_func, //799 + null_func, null_func, null_func, //729 UNS + null_func, null_func, null_func, null_func, null_func, //734 UNS + null_func, null_func, null_func, null_func, null_func, //739 UNS + null_func, null_func, null_func, null_func, null_func, //744 UNS + null_func, null_func, null_func, null_func, null_func, //749 UNS + null_func, null_func, null_func, null_func, null_func, //754 UNS + null_func, null_func, null_func, null_func, null_func, //759 UNS + null_func, null_func, null_func, null_func, null_func, //764 UNS + null_func, null_func, null_func, null_func, null_func, //769 UNS + null_func, null_func, null_func, null_func, null_func, //774 UNS + null_func, null_func, null_func, null_func, null_func, //779 UNS + null_func, null_func, null_func, null_func, null_func, //784 UNS + null_func, null_func, null_func, null_func, null_func, //789 UNS + null_func, null_func, null_func, null_func, null_func, //794 UNS + null_func, null_func, null_func, null_func, null_func, //799 UNS null_func,//bind_func(sys_fs_test), //800 (0x320) bind_func(cellFsOpen), //801 (0x321) @@ -487,42 +724,148 @@ static func_caller* sc_table[kSyscallTableLength] = null_func,//bind_func(sys_fs_mapped_free), //846 (0x34E) null_func,//bind_func(sys_fs_truncate2), //847 (0x34F) - null_func, null_func, //849 - null_func, null_func, null_func, null_func, null_func, //854 - null_func, null_func, null_func, null_func, null_func, //859 - null_func, null_func, null_func, null_func, null_func, //864 - null_func, null_func, null_func, null_func, null_func, //869 - null_func, null_func, null_func, null_func, null_func, //874 - null_func, null_func, null_func, null_func, null_func, //879 - null_func, null_func, null_func, null_func, null_func, //884 - null_func, null_func, null_func, null_func, null_func, //889 - null_func, null_func, null_func, null_func, null_func, //894 - null_func, null_func, null_func, null_func, null_func, //899 - null_func, null_func, null_func, null_func, null_func, //904 - null_func, null_func, null_func, null_func, null_func, //909 - null_func, null_func, null_func, null_func, null_func, //914 - null_func, null_func, null_func, null_func, null_func, //919 - null_func, null_func, null_func, null_func, null_func, //924 - null_func, null_func, null_func, null_func, null_func, //929 - null_func, null_func, null_func, null_func, null_func, //934 - null_func, null_func, null_func, null_func, null_func, //939 - null_func, null_func, null_func, null_func, null_func, //944 - null_func, null_func, null_func, null_func, null_func, //949 - null_func, null_func, null_func, null_func, null_func, //954 - null_func, null_func, null_func, null_func, null_func, //959 - null_func, null_func, null_func, null_func, null_func, //964 - null_func, null_func, null_func, null_func, null_func, //969 - null_func, null_func, null_func, null_func, null_func, //974 - null_func, null_func, null_func, null_func, null_func, //979 - null_func, null_func, null_func, null_func, null_func, //984 - null_func, null_func, null_func, null_func, null_func, //989 - null_func, null_func, null_func, null_func, null_func, //994 - null_func, null_func, null_func, null_func, null_func, //999 - null_func, null_func, null_func, null_func, null_func, //1004 - null_func, null_func, null_func, null_func, null_func, //1009 - null_func, null_func, null_func, null_func, null_func, //1014 - null_func, null_func, null_func, null_func, null_func, //1019 - null_func, null_func, null_func, bind_func(cellGcmCallback), //1023 + null_func, null_func, //849 UNS + null_func, null_func, null_func, null_func, null_func, //854 UNS + null_func, null_func, null_func, null_func, null_func, //859 UNS + + null_func,//bind_func(syscall_sys_ss_get_cache_of_analog_sunset_flag), //860 (0x35C) AUTHID + null_func,//bind_func(syscall_...) //861 ROOT + null_func,//bind_func(syscall_...) //862 ROOT + null_func,//bind_func(syscall_...) //863 ROOT + null_func,//bind_func(syscall_...) //864 DBG + null_func,//bind_func(sys_ss_random_number_generator), //865 (0x361) ROOT AUTHID + null_func,//bind_func(sys_...) //866 ROOT + null_func,//bind_func(sys_...) //867 ROOT + null_func,//bind_func(sys_...) //868 ROOT / DBG AUTHID + null_func,//bind_func(sys_...) //869 ROOT + null_func,//bind_func(sys_ss_get_console_id), //870 (0x366) + null_func,//bind_func(sys_ss_access_control_engine), //871 (0x367) DBG + null_func,//bind_func(sys_ss_get_open_psid), //872 (0x368) + null_func,//bind_func(sys_ss_get_cache_of_product_mode), //873 (0x369) + null_func,//bind_func(sys_ss_get_cache_of_flash_ext_flag), //874 (0x36A) + null_func,//bind_func(sys_ss_get_boot_device) //875 (0x36B) + null_func,//bind_func(sys_ss_disc_access_control) //876 (0x36C) + null_func,//bind_func(sys_ss_~utoken_if) //877 (0x36D) ROOT + null_func,//bind_func(sys_ss_ad_sign) //878 (0x36E) + null_func,//bind_func(sys_ss_media_id) //879 (0x36F) + null_func,//bind_func(sys_deci3_open) //880 (0x370) + null_func,//bind_func(sys_deci3_create_event_path) //881 (0x371) + null_func,//bind_func(sys_deci3_close) //882 (0x372) + null_func,//bind_func(sys_deci3_send) //883 (0x373) + null_func,//bind_func(sys_deci3_receive) //884 (0x374) + null_func,//bind_func(sys_deci3_open2) //885 (0x375) + null_func, //886 (0x376) UNS + null_func, //887 (0x377) UNS + null_func, //888 (0x378) UNS + null_func,//bind_func(sys_...) //889 (0x379) ROOT + null_func,//bind_func(sys_deci3_initialize) //890 (0x37A) + null_func,//bind_func(sys_deci3_terminate) //891 (0x37B) + null_func,//bind_func(sys_deci3_debug_mode) //892 (0x37C) + null_func,//bind_func(sys_deci3_show_status) //893 (0x37D) + null_func,//bind_func(sys_deci3_echo_test) //894 (0x37E) + null_func,//bind_func(sys_deci3_send_dcmp_packet) //895 (0x37F) + null_func,//bind_func(sys_deci3_dump_cp_register) //896 (0x380) + null_func,//bind_func(sys_deci3_dump_cp_buffer) //897 (0x381) + null_func, //898 (0x382) UNS + null_func,//bind_func(sys_deci3_test) //899 (0x383) + null_func,//bind_func(sys_dbg_stop_processes) //900 (0x384) + null_func,//bind_func(sys_dbg_continue_processes) //901 (0x385) + null_func,//bind_func(sys_dbg_stop_threads) //902 (0x386) + null_func,//bind_func(sys_dbg_continue_threads) //903 (0x387) + null_func,//bind_func(sys_dbg_read_process_memory) //904 (0x388) + null_func,//bind_func(sys_dbg_write_process_memory) //905 (0x389) + null_func,//bind_func(sys_dbg_read_thread_register) //906 (0x38A) + null_func,//bind_func(sys_dbg_write_thread_register) //907 (0x38B) + null_func,//bind_func(sys_dbg_get_process_list) //908 (0x38C) + null_func,//bind_func(sys_dbg_get_thread_list) //909 (0x38D) + null_func,//bind_func(sys_dbg_get_thread_info) //910 (0x38E) + null_func,//bind_func(sys_dbg_spu_thread_read_from_ls) //911 (0x38F) + null_func,//bind_func(sys_dbg_spu_thread_write_to_ls) //912 (0x390) + null_func,//bind_func(sys_dbg_kill_process) //913 (0x391) + null_func,//bind_func(sys_dbg_get_process_info) //914 (0x392) + null_func,//bind_func(sys_dbg_set_run_control_bit_to_spu) //915 (0x393) + null_func,//bind_func(sys_dbg_spu_thread_get_exception_cause) //916 (0x394) + null_func,//bind_func(sys_dbg_create_kernel_event_queue) //917 (0x395) + null_func,//bind_func(sys_dbg_read_kernel_event_queue) //918 (0x396) + null_func,//bind_func(sys_dbg_destroy_kernel_event_queue) //919 (0x397) + null_func,//bind_func(sys_dbg_get_process_event_ctrl_flag) //920 (0x398) + null_func,//bind_func(sys_dbg_set_process_event_cntl_flag) //921 (0x399) + null_func,//bind_func(sys_dbg_get_spu_thread_group_event_cntl_flag) //922 (0x39A) + null_func,//bind_func(sys_dbg_set_spu_thread_group_event_cntl_flag) //923 (0x39B) + null_func,//bind_func(sys_...) //924 (0x39C) + null_func,//bind_func(sys_dbg_get_raw_spu_list) //925 (0x39D) + null_func,//bind_func(sys_...) //926 (0x39E) + null_func,//bind_func(sys_...) //927 (0x3A0) + null_func,//bind_func(sys_...) //928 (0x3A1) + null_func,//bind_func(sys_...) //929 (0x3A2) + null_func,//bind_func(sys_...) //930 (0x3A3) + null_func,//bind_func(sys_...) //931 (0x3A4) + null_func,//bind_func(sys_dbg_get_mutex_list) //932 (0x3A4) + null_func,//bind_func(sys_dbg_get_mutex_information) //933 (0x3A5) + null_func,//bind_func(sys_dbg_get_cond_list) //934 (0x3A6) + null_func,//bind_func(sys_dbg_get_cond_information) //935 (0x3A7) + null_func,//bind_func(sys_dbg_get_rwlock_list) //936 (0x3A8) + null_func,//bind_func(sys_dbg_get_rwlock_information) //937 (0x3A9) + null_func,//bind_func(sys_dbg_get_lwmutex_list) //938 (0x3AA) + null_func,//bind_func(sys_dbg_get_address_from_dabr) //939 (0x3AB) + null_func,//bind_func(sys_dbg_set_address_to_dabr) //940 (0x3AC) + null_func,//bind_func(sys_dbg_get_lwmutex_information) //941 (0x3AD) + null_func,//bind_func(sys_dbg_get_event_queue_list) //942 (0x3AE) + null_func,//bind_func(sys_dbg_get_event_queue_information) //943 (0x3AF) + null_func,//bind_func(sys_dbg_initialize_ppu_exception_handler) //944 (0x3B0) + null_func,//bind_func(sys_dbg_finalize_ppu_exception_handler) //945 (0x3B1) DBG + null_func,//bind_func(sys_dbg_get_semaphore_list) //946 (0x3B2) + null_func,//bind_func(sys_dbg_get_semaphore_information) //947 (0x3B3) + null_func,//bind_func(sys_dbg_get_kernel_thread_list) //948 (0x3B4) + null_func,//bind_func(sys_dbg_get_kernel_thread_info) //949 (0x3B5) + null_func,//bind_func(sys_dbg_get_lwcond_list) //950 (0x3B6) + null_func,//bind_func(sys_dbg_get_lwcond_information) //951 (0x3B7) + null_func,//bind_func(sys_dbg_create_scratch_data_area_ext) //952 (0x3B8) + null_func,//bind_func(sys_dbg_vm_get_page_information) //953 (0x3B9) + null_func,//bind_func(sys_dbg_vm_get_info) //954 (0x3BA) + null_func,//bind_func(sys_dbg_enable_floating_point_enabled_exception) //955 (0x3BB) + null_func,//bind_func(sys_dbg_disable_floating_point_enabled_exception) //956 (0x3BC) + null_func,//bind_func(sys_dbg_...) //957 (0x3BD) DBG + null_func, //958 (0x3BE) UNS + null_func,//bind_func(sys_dbg_...) //959 (0x3BF) + null_func,//bind_func(sys_dbg_perfomance_monitor) //960 (0x3C0) + null_func,//bind_func(sys_dbg_...) //961 (0x3C1) + null_func,//bind_func(sys_dbg_...) //962 (0x3C2) + null_func,//bind_func(sys_dbg_...) //963 (0x3C3) + null_func,//bind_func(sys_dbg_...) //964 (0x3C4) + null_func,//bind_func(sys_dbg_...) //965 (0x3C5) + null_func,//bind_func(sys_dbg_...) //966 (0x3C6) + null_func,//bind_func(sys_dbg_...) //967 (0x3C7) + null_func,//bind_func(sys_dbg_...) //968 (0x3C8) + null_func,//bind_func(sys_dbg_...) //969 (0x3C9) + null_func,//bind_func(sys_dbg_get_event_flag_list) //970 (0x3CA) + null_func,//bind_func(sys_dbg_get_event_flag_information) //971 (0x3CB) + null_func,//bind_func(sys_dbg_...) //972 (0x3CC) + null_func,//bind_func(sys_dbg_...) //973 (0x3CD) + null_func,//bind_func(sys_dbg_...) //974 (0x3CE) + null_func,//bind_func(sys_dbg_read_spu_thread_context2) //975 (0x3CF) + null_func,//bind_func(sys_dbg_...) //976 (0x3D0) + null_func,//bind_func(sys_dbg_...) //977 (0x3D1) + null_func,//bind_func(sys_dbg_...) //978 (0x3D2) ROOT + null_func,//bind_func(sys_dbg_...) //979 (0x3D3) + null_func,//bind_func(sys_dbg_...) //980 (0x3D4) + null_func,//bind_func(sys_dbg_...) //981 (0x3D5) ROOT + null_func,//bind_func(sys_dbg_...) //982 (0x3D6) + null_func,//bind_func(sys_dbg_...) //983 (0x3D7) + null_func,//bind_func(sys_dbg_...) //984 (0x3D8) + null_func,//bind_func(sys_dbg_get_console_type) //985 (0x3D9) ROOT + null_func,//bind_func(sys_dbg_...) //986 (0x3DA) ROOT DBG + null_func,//bind_func(sys_dbg_...) //987 (0x3DB) ROOT + null_func,//bind_func(sys_dbg_..._ppu_exception_handler) //988 (0x3DC) + null_func,//bind_func(sys_dbg_...) //989 (0x3DD) + + null_func, null_func, null_func, null_func, null_func, //994 UNS + null_func, null_func, null_func, null_func, null_func, //999 UNS + null_func, null_func, null_func, null_func, null_func, //1004 UNS + null_func, null_func, null_func, null_func, null_func, //1009 UNS + null_func, null_func, null_func, null_func, null_func, //1014 UNS + null_func, null_func, null_func, null_func, null_func, //1019 UNS + null_func, null_func, null_func, bind_func(cellGcmCallback), //1023 UNS }; /** HACK: Used to delete func_caller objects that get allocated and stored in sc_table (above). diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index cfb31964fc..0b5741fae2 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -66,4 +66,4 @@ typedef int64_t s64; #include "Utilities/IdManager.h" #define _PRGNAME_ "RPCS3" -#define _PRGVER_ "0.0.0.4" +#define _PRGVER_ "0.0.0.5" From 8c6622dd820d5bf9899d6c512684e621351d4f4e Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Tue, 29 Jul 2014 11:28:15 +0300 Subject: [PATCH 253/499] Fix debugger startup error --- rpcs3/Gui/RSXDebugger.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rpcs3/Gui/RSXDebugger.cpp b/rpcs3/Gui/RSXDebugger.cpp index 65e64e72b7..b145d49079 100644 --- a/rpcs3/Gui/RSXDebugger.cpp +++ b/rpcs3/Gui/RSXDebugger.cpp @@ -443,7 +443,9 @@ void RSXDebugger::GetBuffers() wxImage img(width, height, buffer); wxClientDC dc_canvas(pnl); - dc_canvas.DrawBitmap(img.Scale(m_panel_width, m_panel_height), 0, 0, false); + + if (img.IsOk()) + dc_canvas.DrawBitmap(img.Scale(m_panel_width, m_panel_height), 0, 0, false); } // Draw Texture From 90dd215b8c601df96e426dd6ff087597a68edfe4 Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 30 Jul 2014 03:33:44 +0800 Subject: [PATCH 254/499] RSX: cleanup PBO --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 69 +++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 99322ba4da..822284b088 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -15,7 +15,7 @@ #endif gcmBuffer gcmBuffers[8]; -GLuint g_flip_tex, g_depth_tex, g_pbo[6]; +GLuint g_flip_tex, g_depth_tex, g_pbo[5]; int last_width = 0, last_height = 0, last_depth_format = 0; GLenum g_last_gl_error = GL_NO_ERROR; @@ -441,6 +441,9 @@ void GLGSRender::WriteBuffers() { if (Ini.GSDumpDepthBuffer.GetValue()) { + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[4]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteDepthBuffer(); } @@ -463,11 +466,8 @@ void GLGSRender::WriteDepthBuffer() LOG_WARNING(RSX, "Bad depth buffer address: address=0x%x, offset=0x%x, dma=0x%x", address, m_surface_offset_z, m_context_dma_z); return; } - - glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[5]); + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[4]); checkForGlError("WriteDepthBuffer(): glBindBuffer"); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_DYNAMIC_READ); - checkForGlError("WriteDepthBuffer(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); checkForGlError("WriteDepthBuffer(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); @@ -477,9 +477,10 @@ void GLGSRender::WriteDepthBuffer() glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteDepthBuffer(): glUnmapBuffer"); } - glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - checkForGlError("WriteDepthBuffer(): glBindBuffer"); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + + checkForGlError("WriteDepthBuffer(): glReadPixels"); glBindTexture(GL_TEXTURE_2D, g_depth_tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, RSXThread::m_buffer_width, RSXThread::m_buffer_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &Memory[address]); checkForGlError("WriteDepthBuffer(): glTexImage2D"); @@ -502,11 +503,9 @@ void GLGSRender::WriteColorBufferA() } glReadBuffer(GL_COLOR_ATTACHMENT0); - checkForGlError("WriteColorBufferA(): glReadBuffer(GL_COLOR_ATTACHMENT0)"); + checkForGlError("WriteColorBufferA(): glReadBuffer"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[0]); checkForGlError("WriteColorBufferA(): glBindBuffer"); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); - checkForGlError("WriteColorBufferA(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColorBufferA(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); @@ -516,8 +515,8 @@ void GLGSRender::WriteColorBufferA() glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteColorBufferA(): glUnmapBuffer"); } + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - checkForGlError("WriteColorBufferA(): glBindBuffer"); } void GLGSRender::WriteColorBufferB() @@ -535,11 +534,9 @@ void GLGSRender::WriteColorBufferB() } glReadBuffer(GL_COLOR_ATTACHMENT1); - checkForGlError("WriteColorBufferB(): glReadBuffer(GL_COLOR_ATTACHMENT1)"); + checkForGlError("WriteColorBufferB(): glReadBuffer"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[1]); checkForGlError("WriteColorBufferB(): glBindBuffer"); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); - checkForGlError("WriteColorBufferB(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColorBufferB(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); @@ -549,9 +546,8 @@ void GLGSRender::WriteColorBufferB() glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteColorBufferB(): glUnmapBuffer"); } - glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - checkForGlError("WriteColorBufferB(): glBindBuffer"); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } void GLGSRender::WriteColorBufferC() @@ -569,11 +565,9 @@ void GLGSRender::WriteColorBufferC() } glReadBuffer(GL_COLOR_ATTACHMENT2); - checkForGlError("WriteColorBufferC(): glReadBuffer(GL_COLOR_ATTACHMENT2)"); + checkForGlError("WriteColorBufferC(): glReadBuffer"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[2]); checkForGlError("WriteColorBufferC(): glBindBuffer"); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); - checkForGlError("WriteColorBufferC(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColorBufferC(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); @@ -583,8 +577,8 @@ void GLGSRender::WriteColorBufferC() glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteColorBufferC(): glUnmapBuffer"); } + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - checkForGlError("WriteColorBufferC(): glBindBuffer"); } void GLGSRender::WriteColorBufferD() @@ -602,11 +596,9 @@ void GLGSRender::WriteColorBufferD() } glReadBuffer(GL_COLOR_ATTACHMENT3); - checkForGlError("WriteColorBufferD(): glReadBuffer(GL_COLOR_ATTACHMENT3)"); + checkForGlError("WriteColorBufferD(): glReadBuffer"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[3]); checkForGlError("WriteColorBufferD(): glBindBuffer"); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); - checkForGlError("WriteColorBufferD(): glBufferData"); glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColorBufferD(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); @@ -615,10 +607,10 @@ void GLGSRender::WriteColorBufferD() memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteColorBufferD(): glUnmapBuffer"); - } + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - checkForGlError("WriteColorBufferD(): glBindBuffer"); + } void GLGSRender::WriteColorBuffers() @@ -632,25 +624,48 @@ void GLGSRender::WriteColorBuffers() return; case CELL_GCM_SURFACE_TARGET_0: + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[0]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteColorBufferA(); break; case CELL_GCM_SURFACE_TARGET_1: + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[1]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteColorBufferB(); break; case CELL_GCM_SURFACE_TARGET_MRT1: + for (int i = 0; i < 2; i++) + { + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[i]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + } WriteColorBufferA(); WriteColorBufferB(); break; case CELL_GCM_SURFACE_TARGET_MRT2: + for (int i = 0; i < 3; i++) + { + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[i]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + } + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteColorBufferA(); WriteColorBufferB(); WriteColorBufferC(); break; case CELL_GCM_SURFACE_TARGET_MRT3: + for (int i = 0; i < 4; i++) + { + glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[i]); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + } + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteColorBufferA(); WriteColorBufferB(); WriteColorBufferC(); @@ -688,7 +703,7 @@ void GLGSRender::OnInitThread() glGenTextures(1, &g_depth_tex); glGenTextures(1, &g_flip_tex); - glGenBuffers(6, g_pbo); + glGenBuffers(5, g_pbo); // 4 color + 1 depth #ifdef _WIN32 glSwapInterval(Ini.GSVSyncEnable.GetValue() ? 1 : 0); @@ -705,7 +720,7 @@ void GLGSRender::OnExitThread() { glDeleteTextures(1, &g_flip_tex); glDeleteTextures(1, &g_depth_tex); - glDeleteBuffers(6, g_pbo); + glDeleteBuffers(5, g_pbo); glDisable(GL_TEXTURE_2D); glDisable(GL_VERTEX_PROGRAM_POINT_SIZE); From ebec856a3607e403fde4353b5755bc82af306b64 Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 30 Jul 2014 05:45:23 +0800 Subject: [PATCH 255/499] EDAT: list the edat files name --- rpcs3/Crypto/unedat.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index f103f15cff..94c997e745 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -522,7 +522,7 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi unsigned char npd_magic[4] = {0x4E, 0x50, 0x44, 0x00}; //NPD0 if(memcmp(NPD->magic, npd_magic, 4)) { - LOG_ERROR(LOADER, "EDAT: File has invalid NPD header."); + LOG_ERROR(LOADER, "EDAT: %s has invalid NPD header or already decrypted.", input_file_name); delete NPD; delete EDAT; return 1; From 33559ca0ea6e9d7cda1ae32e445adaffc00095c2 Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 30 Jul 2014 05:48:58 +0800 Subject: [PATCH 256/499] Minor change --- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index efb723c3b8..73c6065272 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -1133,7 +1133,7 @@ int cellGcmSetTile(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u8 co if(comp) { - cellGcmSys->Error("cellGcmSetTile: bad comp! (%d)", comp); + cellGcmSys->Error("cellGcmSetTile: bad compression mode! (%d)", comp); } auto& tile = Emu.GetGSManager().GetRender().m_tiles[index]; From f52c644af73479a7a2fe687377a5ffaba6be41a0 Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 30 Jul 2014 21:31:55 +0800 Subject: [PATCH 257/499] Update GLGSRender.cpp --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 822284b088..9126fba185 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -15,7 +15,7 @@ #endif gcmBuffer gcmBuffers[8]; -GLuint g_flip_tex, g_depth_tex, g_pbo[5]; +GLuint g_flip_tex, g_depth_tex, g_pbo[6]; int last_width = 0, last_height = 0, last_depth_format = 0; GLenum g_last_gl_error = GL_NO_ERROR; @@ -703,7 +703,7 @@ void GLGSRender::OnInitThread() glGenTextures(1, &g_depth_tex); glGenTextures(1, &g_flip_tex); - glGenBuffers(5, g_pbo); // 4 color + 1 depth + glGenBuffers(6, g_pbo); // 4 for color buffers + 1 for depth buffer + 1 for flip() #ifdef _WIN32 glSwapInterval(Ini.GSVSyncEnable.GetValue() ? 1 : 0); @@ -720,7 +720,7 @@ void GLGSRender::OnExitThread() { glDeleteTextures(1, &g_flip_tex); glDeleteTextures(1, &g_depth_tex); - glDeleteBuffers(5, g_pbo); + glDeleteBuffers(6, g_pbo); glDisable(GL_TEXTURE_2D); glDisable(GL_VERTEX_PROGRAM_POINT_SIZE); From cd33be149133b48e7143c135113459ad05ae80c6 Mon Sep 17 00:00:00 2001 From: DHrpcs3 Date: Thu, 31 Jul 2014 19:08:02 +0300 Subject: [PATCH 258/499] Implemented vm::var. MemoryAllocator replaced with vm::var --- rpcs3/Emu/Memory/Memory.h | 4 + rpcs3/Emu/Memory/vm.h | 48 ++ rpcs3/Emu/Memory/vm_ptr.h | 6 + rpcs3/Emu/Memory/vm_ref.h | 6 + rpcs3/Emu/Memory/vm_var.h | 513 ++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellFont.cpp | 5 +- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 10 +- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 30 +- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 30 +- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 58 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 10 +- .../SysCalls/Modules/cellSysutil_SaveData.cpp | 160 +++--- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 8 +- rpcs3/emucore.vcxproj | 4 + rpcs3/emucore.vcxproj.filters | 12 + 16 files changed, 763 insertions(+), 149 deletions(-) create mode 100644 rpcs3/Emu/Memory/vm.h create mode 100644 rpcs3/Emu/Memory/vm_ptr.h create mode 100644 rpcs3/Emu/Memory/vm_ref.h create mode 100644 rpcs3/Emu/Memory/vm_var.h diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 114fdff049..72f48a0e9a 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -1113,6 +1113,7 @@ public: } }; +/* template class MemoryAllocator { @@ -1222,6 +1223,7 @@ public: return (NT*)(m_ptr + offset); } }; +*/ typedef mem_t mem8_t; typedef mem_t mem16_t; @@ -1245,3 +1247,5 @@ typedef mem_list_ptr_t mem16_ptr_t; typedef mem_list_ptr_t mem32_ptr_t; typedef mem_list_ptr_t mem64_ptr_t; +#include "vm.h" + diff --git a/rpcs3/Emu/Memory/vm.h b/rpcs3/Emu/Memory/vm.h new file mode 100644 index 0000000000..b1858c4597 --- /dev/null +++ b/rpcs3/Emu/Memory/vm.h @@ -0,0 +1,48 @@ +#pragma once + +namespace vm +{ + //TODO + bool check_addr(u32 addr) + { + return false; + } + + bool map(u32 addr, u32 size, u32 flags) + { + return false; + } + + bool unmap(u32 addr, u32 size = 0, u32 flags = 0) + { + return false; + } + + u32 alloc(u32 size) + { + return 0; + } + + void unalloc(u32 addr) + { + } + + u32 read32(u32 addr) + { + return 0; + } + + bool read32(u32 addr, u32& value) + { + return false; + } + + bool write32(u32 addr, u32 value) + { + return false; + } +} + +#include "vm_ptr.h" +#include "vm_ref.h" +#include "vm_var.h" \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm_ptr.h b/rpcs3/Emu/Memory/vm_ptr.h new file mode 100644 index 0000000000..629a59dc91 --- /dev/null +++ b/rpcs3/Emu/Memory/vm_ptr.h @@ -0,0 +1,6 @@ +#pragma once + +namespace vm +{ + //TODO +} \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm_ref.h b/rpcs3/Emu/Memory/vm_ref.h new file mode 100644 index 0000000000..629a59dc91 --- /dev/null +++ b/rpcs3/Emu/Memory/vm_ref.h @@ -0,0 +1,6 @@ +#pragma once + +namespace vm +{ + //TODO +} \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm_var.h b/rpcs3/Emu/Memory/vm_var.h new file mode 100644 index 0000000000..bc4a99422c --- /dev/null +++ b/rpcs3/Emu/Memory/vm_var.h @@ -0,0 +1,513 @@ +#pragma once + +namespace vm +{ + template + class var + { + u32 m_addr; + u32 m_size; + u32 m_align; + T* m_ptr; + + public: + var(u32 size = sizeof(T), u32 align = sizeof(T)) + : m_size(size) + , m_align(align) + { + alloc(); + } + + var(const var& r) + : m_size(r.m_size) + , m_align(r.m_align) + { + alloc(); + *m_ptr = *r.m_ptr; + } + + ~var() + { + dealloc(); + } + + void alloc() + { + m_addr = Memory.Alloc(size(), m_align); + m_ptr = Memory.IsGoodAddr(m_addr, size()) ? (T*)&Memory[m_addr] : nullptr; + } + + void dealloc() + { + if (check()) + { + Memory.Free(m_addr); + m_addr = 0; + m_ptr = nullptr; + } + } + + void clear() + { + if (check()) + { + Memory.Free(m_addr); + m_addr = 0; + m_ptr = nullptr; + } + } + + static var make(u32 addr, u32 size = sizeof(T), u32 align = sizeof(T)) + { + var res; + + res.m_addr = addr; + res.m_size = size; + res.m_align = align; + res.m_ptr = Memory.IsGoodAddr(m_addr, sizeof(T)) ? (T*)&Memory[m_addr] : nullptr; + + return res; + } + + T* operator -> () + { + return m_ptr; + } + + const T* operator -> () const + { + return m_ptr; + } + + T* get_ptr() + { + return m_ptr; + } + + const T* get_ptr() const + { + return m_ptr; + } + + T& value() + { + return *m_ptr; + } + + const T& value() const + { + return *m_ptr; + } + + u32 addr() const + { + return m_addr; + } + + u32 size() const + { + return m_size; + } + + bool check() const + { + return m_ptr != nullptr; + } + + /* + operator const ref() const + { + return addr(); + } + */ + + operator T&() + { + return *m_ptr; + } + + operator const T&() const + { + return *m_ptr; + } + }; + + template + class var + { + u32 m_addr; + u32 m_count; + u32 m_size; + u32 m_align; + T* m_ptr; + + public: + var(u32 count, u32 size = sizeof(T), u32 align = sizeof(T)) + : m_count(count) + , m_size(size) + , m_align(align) + { + alloc(); + } + + ~var() + { + dealloc(); + } + + var(const var& r) + : m_size(r.m_size) + , m_align(r.m_align) + { + alloc(); + memcpy(m_ptr, r.m_ptr, size()); + } + + void alloc() + { + m_addr = Memory.Alloc(size(), m_align); + m_ptr = Memory.IsGoodAddr(m_addr, size()) ? (T*)&Memory[m_addr] : nullptr; + } + + void dealloc() + { + if (check()) + { + Memory.Free(m_addr); + m_addr = 0; + m_ptr = nullptr; + } + } + + static var make(u32 addr, u32 count, u32 size = sizeof(T), u32 align = sizeof(T)) + { + var res; + + res.m_addr = addr; + res.m_count = count; + res.m_size = size; + res.m_align = align; + res.m_ptr = Memory.IsGoodAddr(m_addr, size()) ? (T*)&Memory[m_addr] : nullptr; + + return res; + } + + T* begin() + { + return m_ptr; + } + + const T* begin() const + { + return m_ptr; + } + + T* end() + { + return m_ptr + count(); + } + + const T* end() const + { + return m_ptr + count(); + } + + T* operator -> () + { + return m_ptr; + } + + T& get() + { + return m_ptr; + } + + const T& get() const + { + return m_ptr; + } + + const T* operator -> () const + { + return m_ptr; + } + + uint addr() const + { + return m_addr; + } + + uint size() const + { + return m_count * m_size; + } + + uint count() const + { + return m_count; + } + + bool check() const + { + return Memory.IsGoodAddr(m_addr, size()); + } + + template + operator const T1() const + { + return T1(*m_ptr); + } + + template + operator T1() + { + return T1(*m_ptr); + } + + operator const T&() const + { + return *m_ptr; + } + + operator T&() + { + return *m_ptr; + } + + operator const T*() const + { + return m_ptr; + } + + operator T*() + { + return m_ptr; + } + + T& operator [](int index) + { + return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); + } + + const T& operator [](int index) const + { + return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); + } + + T& at(uint index) + { + if (index >= count()) + throw std::out_of_range(); + + return *(m_ptr + index); + } + + const T& at(uint index) const + { + if (index >= count()) + throw std::out_of_range(); + + return *(m_ptr + index); + } + + T* ptr() + { + return m_ptr; + } + + const T* ptr() const + { + return m_ptr; + } + + /* + operator const ptr() const + { + return addr(); + } + */ + template + NT* To(uint offset = 0) + { + return (NT*)(m_ptr + offset); + } + }; + + template + class var + { + u32 m_addr; + u32 m_size; + u32 m_align; + T* m_ptr; + + public: + var(u32 size = sizeof(T), u32 align = sizeof(T)) + : m_size(size) + , m_align(align) + { + alloc(); + } + + ~var() + { + dealloc(); + } + + var(const var& r) + : m_size(r.m_size) + , m_align(r.m_align) + { + alloc(); + memcpy(m_ptr, r.m_ptr, size()); + } + + void alloc() + { + m_addr = Memory.Alloc(size(), m_align); + m_ptr = Memory.IsGoodAddr(m_addr, size()) ? (T*)&Memory[m_addr] : nullptr; + } + + void dealloc() + { + if (check()) + { + Memory.Free(m_addr); + m_addr = 0; + m_ptr = nullptr; + } + } + + T* operator -> () + { + return m_ptr; + } + + T* begin() + { + return m_ptr; + } + + const T* begin() const + { + return m_ptr; + } + + T* end() + { + return m_ptr + count(); + } + + const T* end() const + { + return m_ptr + count(); + } + + T& get() + { + return m_ptr; + } + + const T& get() const + { + return m_ptr; + } + + const T* operator -> () const + { + return m_ptr; + } + + uint addr() const + { + return m_addr; + } + + __forceinline uint count() const + { + return _count; + } + + uint size() const + { + return _count * m_size; + } + + bool check() const + { + return m_ptr != nullptr; + } + + template + operator const T1() const + { + return T1(*m_ptr); + } + + template + operator T1() + { + return T1(*m_ptr); + } + + operator const T&() const + { + return *m_ptr; + } + + operator T&() + { + return *m_ptr; + } + + operator const T*() const + { + return m_ptr; + } + + operator T*() + { + return m_ptr; + } + + T& operator [](uint index) + { + assert(index < count()); + return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); + } + + const T& operator [](uint index) const + { + assert(index < count()); + return return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); + } + + T& at(uint index) + { + if (index >= count()) + throw std::out_of_range(); + + return *(m_ptr + index); + } + + const T& at(uint index) const + { + if (index >= count()) + throw std::out_of_range(); + + return *(m_ptr + index); + } + + /* + operator const ptr() const + { + return addr(); + } + */ + template + NT* To(uint offset = 0) + { + return (NT*)(m_ptr + offset); + } + }; +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index 177f716bd1..dd1328196d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -269,8 +269,9 @@ int cellFontInit(mem_ptr_t config) { cellFont->Log("cellFontInit(config=0x%x)", config.GetAddr()); - MemoryAllocator revisionFlags = 0; - cellFontGetRevisionFlags(revisionFlags.GetAddr()); + vm::var revisionFlags; + revisionFlags.value() = 0; + cellFontGetRevisionFlags(revisionFlags.addr()); return cellFontInitializeWithRevision(revisionFlags, config.GetAddr()); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 3b1cbf3b04..d43aceb56e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -241,11 +241,11 @@ int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 } // TODO: use memory container - MemoryAllocator cbResult; - MemoryAllocator cbGet; - MemoryAllocator cbSet; + vm::var cbResult; + vm::var cbGet; + vm::var cbSet; - memset(cbGet.GetPtr(), 0, sizeof(CellGameDataStatGet)); + cbGet.value() = {}; // TODO: Use the free space of the computer's HDD where RPCS3 is being run. cbGet->hddFreeSizeKB = 40000000; //40 GB @@ -270,7 +270,7 @@ int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 strcpy_trunc(cbGet->getParam.title, psf.GetString("TITLE")); // TODO: write lang titles - funcStat(cbResult.GetAddr(), cbGet.GetAddr(), cbSet.GetAddr()); + funcStat(cbResult.addr(), cbGet.addr(), cbSet.addr()); if (cbSet->setParam.GetAddr()) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index d515a84bb8..e541b9842b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -42,14 +42,14 @@ int cellGifDecOpen(u32 mainHandle, mem32_t subHandle, const mem_ptr_t> fd; - int ret = cellFsOpen(src->fileName, 0, fd.GetAddr(), 0, 0); + vm::var> fd; + int ret = cellFsOpen(src->fileName, 0, fd.addr(), 0, 0); current_subHandle->fd = fd->ToLE(); if (ret != CELL_OK) return CELL_GIFDEC_ERROR_OPEN_FILE; // Get size of file - MemoryAllocator sb; // Alloc a CellFsStat struct - ret = cellFsFstat(current_subHandle->fd, sb.GetAddr()); + vm::var sb; // Alloc a CellFsStat struct + ret = cellFsFstat(current_subHandle->fd, sb.addr()); if (ret != CELL_OK) return ret; current_subHandle->fileSize = sb->st_size; // Get CellFsStat.st_size break; @@ -75,21 +75,21 @@ int cellGifDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tinfo; //Write the header to buffer - MemoryAllocator buffer(13); // Alloc buffer for GIF header - MemoryAllocator> pos, nread; + vm::var buffer; // Alloc buffer for GIF header + vm::var> pos, nread; switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_GIFDEC_BUFFER): - if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) { + if (!Memory.Copy(buffer.addr(), subHandle_data->src.streamPtr.ToLE(), buffer.size())) { cellGifDec->Error("cellGifDecReadHeader() failed ()"); return CELL_EFAULT; } break; case se32(CELL_GIFDEC_FILE): - cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); - cellFsRead(fd, buffer.GetAddr(), buffer.GetSize(), nread); + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.addr()); + cellFsRead(fd, buffer.addr(), buffer.size(), nread.addr()); break; } @@ -160,21 +160,21 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m const CellGifDecOutParam& current_outParam = subHandle_data->outParam; //Copy the GIF file to a buffer - MemoryAllocator gif(fileSize); - MemoryAllocator pos, nread; + vm::var gif(fileSize); + vm::var pos, nread; switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_GIFDEC_BUFFER): - if (!Memory.Copy(gif.GetAddr(), subHandle_data->src.streamPtr.ToLE(), gif.GetSize())) { + if (!Memory.Copy(gif.addr(), subHandle_data->src.streamPtr.ToLE(), gif.size())) { cellGifDec->Error("cellGifDecDecodeData() failed (I)"); return CELL_EFAULT; } break; case se32(CELL_GIFDEC_FILE): - cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); - cellFsRead(fd, gif.GetAddr(), gif.GetSize(), nread); + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.addr()); + cellFsRead(fd, gif.addr(), gif.size(), nread.addr()); break; } @@ -182,7 +182,7 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int width, height, actual_components; auto image = std::unique_ptr ( - stbi_load_from_memory(gif.GetPtr(), fileSize, &width, &height, &actual_components, 4), + stbi_load_from_memory(gif.ptr(), fileSize, &width, &height, &actual_components, 4), &::free ); diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index a10c0c13d3..d627d00763 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -49,14 +49,14 @@ int cellJpgDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s case se32(CELL_JPGDEC_FILE): // Get file descriptor - MemoryAllocator> fd; - int ret = cellFsOpen(src->fileName, 0, fd.GetAddr(), 0, 0); + vm::var> fd; + int ret = cellFsOpen(src->fileName, 0, fd.addr(), 0, 0); current_subHandle->fd = fd->ToLE(); if (ret != CELL_OK) return CELL_JPGDEC_ERROR_OPEN_FILE; // Get size of file - MemoryAllocator sb; // Alloc a CellFsStat struct - ret = cellFsFstat(current_subHandle->fd, sb.GetAddr()); + vm::var sb; // Alloc a CellFsStat struct + ret = cellFsFstat(current_subHandle->fd, sb.addr()); if (ret != CELL_OK) return ret; current_subHandle->fileSize = sb->st_size; // Get CellFsStat.st_size break; @@ -96,21 +96,21 @@ int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tinfo; //Write the header to buffer - MemoryAllocator buffer(fileSize); - MemoryAllocator> pos, nread; + vm::var buffer(fileSize); + vm::var> pos, nread; switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_JPGDEC_BUFFER): - if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) { + if (!Memory.Copy(buffer.addr(), subHandle_data->src.streamPtr.ToLE(), buffer.size())) { cellJpgDec->Error("cellJpgDecReadHeader() failed ()"); return CELL_EFAULT; } break; case se32(CELL_JPGDEC_FILE): - cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); - cellFsRead(fd, buffer.GetAddr(), buffer.GetSize(), nread); + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.addr()); + cellFsRead(fd, buffer.addr(), buffer.size(), nread.addr()); break; } @@ -168,21 +168,21 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m const CellJpgDecOutParam& current_outParam = subHandle_data->outParam; //Copy the JPG file to a buffer - MemoryAllocator jpg(fileSize); - MemoryAllocator pos, nread; + vm::var jpg(fileSize); + vm::var pos, nread; switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_JPGDEC_BUFFER): - if (!Memory.Copy(jpg.GetAddr(), subHandle_data->src.streamPtr.ToLE(), jpg.GetSize())) { + if (!Memory.Copy(jpg.addr(), subHandle_data->src.streamPtr.ToLE(), jpg.size())) { cellJpgDec->Error("cellJpgDecDecodeData() failed (I)"); return CELL_EFAULT; } break; case se32(CELL_JPGDEC_FILE): - cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); - cellFsRead(fd, jpg.GetAddr(), jpg.GetSize(), nread); + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.addr()); + cellFsRead(fd, jpg.addr(), jpg.size(), nread.addr()); break; } @@ -190,7 +190,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int width, height, actual_components; auto image = std::unique_ptr ( - stbi_load_from_memory(jpg.GetPtr(), fileSize, &width, &height, &actual_components, 4), + stbi_load_from_memory(jpg.ptr(), fileSize, &width, &height, &actual_components, 4), &::free ); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index b704303428..5277a1902b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -13,9 +13,10 @@ Module *cellPngDec = nullptr; static std::map cellPngDecMap; -CellPngDecMainHandle *getCellPngDecCtx(u32 mainHandle) { +CellPngDecMainHandle *getCellPngDecCtx(u32 mainHandle) +{ if (cellPngDecMap.find(mainHandle) == cellPngDecMap.end()) - return NULL; + return nullptr; return cellPngDecMap[mainHandle]; } @@ -71,14 +72,14 @@ int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s case se32(CELL_PNGDEC_FILE): // Get file descriptor - MemoryAllocator> fd; - int ret = cellFsOpen(src->fileName_addr, 0, fd.GetAddr(), 0, 0); + vm::var> fd; + int ret = cellFsOpen(src->fileName_addr, 0, fd.addr(), 0, 0); current_subHandle->fd = fd->ToLE(); if(ret != CELL_OK) return CELL_PNGDEC_ERROR_OPEN_FILE; // Get size of file - MemoryAllocator sb; // Alloc a CellFsStat struct - ret = cellFsFstat(current_subHandle->fd, sb.GetAddr()); + vm::var sb; // Alloc a CellFsStat struct + ret = cellFsFstat(current_subHandle->fd, sb.addr()); if(ret != CELL_OK) return ret; current_subHandle->fileSize = sb->st_size; // Get CellFsStat.st_size break; @@ -97,12 +98,12 @@ int cellPngDecExtOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_tWarning("*** cbCtrlStrm->cbCtrlStrmFunc_addr=0x%x", cbCtrlStrm->cbCtrlStrmFunc.GetAddr()); - MemoryAllocator streamInfo; - MemoryAllocator streamParam; + vm::var streamInfo; + vm::var streamParam; int res = cellPngDecOpen(mainHandle, subHandle, src, openInfo); - if (!res) cbCtrlStrm->cbCtrlStrmFunc(streamInfo.GetAddr(), streamParam.GetAddr(), cbCtrlStrm->cbCtrlStrmArg); + if (!res) cbCtrlStrm->cbCtrlStrmFunc(streamInfo.addr(), streamParam.addr(), cbCtrlStrm->cbCtrlStrmArg); return res; } @@ -139,32 +140,33 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t> buffer(34); // Alloc buffer for PNG header - MemoryAllocator> pos, nread; + vm::var buffer; // Alloc buffer for PNG header + auto buffer_32 = buffer.To>(); + vm::var> pos, nread; switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_PNGDEC_BUFFER): - if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) + if (!Memory.Copy(buffer.addr(), subHandle_data->src.streamPtr.ToLE(), buffer.size())) { cellPngDec->Error("cellPngDecReadHeader() failed ()"); return CELL_EFAULT; } break; case se32(CELL_PNGDEC_FILE): - cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); - cellFsRead(fd, buffer.GetAddr(), buffer.GetSize(), nread.GetAddr()); + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.addr()); + cellFsRead(fd, buffer.addr(), buffer.size(), nread.addr()); break; } - if (buffer[0] != 0x89504E47 || - buffer[1] != 0x0D0A1A0A || // Error: The first 8 bytes are not a valid PNG signature - buffer[3] != 0x49484452) // Error: The PNG file does not start with an IHDR chunk + if (buffer_32[0].ToBE() != se32(0x89504E47) || + buffer_32[1].ToBE() != se32(0x0D0A1A0A) || // Error: The first 8 bytes are not a valid PNG signature + buffer_32[3].ToBE() != se32(0x49484452)) // Error: The PNG file does not start with an IHDR chunk { return CELL_PNGDEC_ERROR_HEADER; } - switch (buffer.To()[25]) + switch (buffer[25]) { case 0: current_info.colorSpace = CELL_PNGDEC_GRAYSCALE; current_info.numComponents = 1; break; case 2: current_info.colorSpace = CELL_PNGDEC_RGB; current_info.numComponents = 3; break; @@ -174,10 +176,10 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t()[24]; - current_info.interlaceMethod = buffer.To()[28]; + current_info.imageWidth = buffer_32[4]; + current_info.imageHeight = buffer_32[5]; + current_info.bitDepth = buffer[24]; + current_info.interlaceMethod = buffer[28]; current_info.chunkInformation = 0; // Unimplemented *info = current_info; @@ -208,21 +210,21 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m const CellPngDecOutParam& current_outParam = subHandle_data->outParam; //Copy the PNG file to a buffer - MemoryAllocator png(fileSize); - MemoryAllocator pos, nread; + vm::var png(fileSize); + vm::var pos, nread; switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_PNGDEC_BUFFER): - if (!Memory.Copy(png.GetAddr(), subHandle_data->src.streamPtr.ToLE(), png.GetSize())) { + if (!Memory.Copy(png.addr(), subHandle_data->src.streamPtr.ToLE(), png.size())) { cellPngDec->Error("cellPngDecDecodeData() failed (I)"); return CELL_EFAULT; } break; case se32(CELL_PNGDEC_FILE): - cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); - cellFsRead(fd, png.GetAddr(), png.GetSize(), nread.GetAddr()); + cellFsLseek(fd, 0, CELL_SEEK_SET, pos.addr()); + cellFsRead(fd, png.addr(), png.size(), nread.addr()); break; } @@ -230,7 +232,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int width, height, actual_components; auto image = std::unique_ptr ( - stbi_load_from_memory(png.GetPtr(), fileSize, &width, &height, &actual_components, 4), + stbi_load_from_memory(png.ptr(), fileSize, &width, &height, &actual_components, 4), &::free ); if (!image) return CELL_PNGDEC_ERROR_STREAM_FORMAT; diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index bf073c0439..548b13de76 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -839,13 +839,13 @@ int cellRescSetDisplayMode(u32 displayMode) else m_pCFragmentShader = m_pCFragmentShaderArray[RESC_SHADER_DEFAULT_BILINEAR]; }*/ - MemoryAllocator videocfg; + vm::var videocfg; videocfg->resolutionId = RescBufferMode2SysutilResolutionId(s_rescInternalInstance->m_dstMode); videocfg->format = RescDstFormat2SysutilFormat(s_rescInternalInstance->m_pRescDsts->format ); videocfg->aspect = CELL_VIDEO_OUT_ASPECT_AUTO; videocfg->pitch = s_rescInternalInstance->m_dstPitch; - cellVideoOutConfigure(CELL_VIDEO_OUT_PRIMARY, videocfg.GetAddr(), 0, 0); + cellVideoOutConfigure(CELL_VIDEO_OUT_PRIMARY, videocfg.addr(), 0, 0); if (IsPalInterpolate()) { @@ -1141,8 +1141,8 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t s_rescInternalInstance->m_vertexArrayEA = vertexArray.GetAddr(); s_rescInternalInstance->m_fragmentUcodeEA = fragmentShader.GetAddr(); - MemoryAllocator> dstOffset; - cellGcmAddressToOffset(s_rescInternalInstance->m_colorBuffersEA, dstOffset.GetAddr()); + vm::var> dstOffset; + cellGcmAddressToOffset(s_rescInternalInstance->m_colorBuffersEA, dstOffset.addr()); for (int i=0; i param; - MemoryAllocator result; - MemoryAllocator get; - MemoryAllocator set; + vm::var param; + vm::var result; + vm::var get; + vm::var set; get->hddFreeSizeKB = 40 * 1024 * 1024; // 40 GB, TODO: Use the free space of the computer's HDD where RPCS3 is being run. get->isNewData = CELL_HDDGAME_ISNEWDATA_EXIST; @@ -751,7 +751,7 @@ int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_ // TODO ? - funcStat(result.GetAddr(), get.GetAddr(), set.GetAddr()); + funcStat(result.addr(), get.addr(), set.addr()); if (result->result != CELL_HDDGAME_CBRESULT_OK && result->result != CELL_HDDGAME_CBRESULT_OK_CANCEL) return CELL_HDDGAME_ERROR_CBRESULT; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index b3c3cb2d27..1c95018fda 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -217,8 +217,8 @@ void getSaveDataStat(SaveDataEntry entry, mem_ptr_t statGet s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ptr_t result, const std::string& saveDataDir) { - MemoryAllocator fileGet; - MemoryAllocator fileSet; + vm::var fileGet; + vm::var fileSet; if (!Emu.GetVFS().ExistsDir(saveDataDir)) Emu.GetVFS().CreateDir(saveDataDir); @@ -226,7 +226,7 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ fileGet->excSize = 0; while (true) { - funcFile(result.GetAddr(), fileGet.GetAddr(), fileSet.GetAddr()); + funcFile(result.GetAddr(), fileGet.addr(), fileSet.addr()); if (result->result < 0) { LOG_ERROR(HLE, "modifySaveDataFiles: CellSaveDataFileCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; @@ -298,11 +298,11 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m if (!setList.IsGood() || !setBuf.IsGood() || !funcList.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; - MemoryAllocator listGet; - MemoryAllocator listSet; - MemoryAllocator statGet; - MemoryAllocator statSet; + vm::var result; + vm::var listGet; + vm::var listSet; + vm::var statGet; + vm::var statSet; std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user vfsDir dir(saveBaseDir); @@ -330,13 +330,15 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList.SetAddr(setBuf->buf_addr); CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.GetAddr()); - for (u32 i=0; iresult < 0) { + funcList(result.addr(), listGet.addr(), listSet.addr()); + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -346,7 +348,8 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); if (listSet->newData.IsGood()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); - if (saveEntries.size() == 0) { + if (saveEntries.size() == 0) + { LOG_WARNING(HLE, "cellSaveDataListSave2: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -354,10 +357,10 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m u32 focusIndex = focusSaveDataEntry(saveEntries, listSet->focusPosition); // TODO: Display the dialog here u32 selectedIndex = focusIndex; // TODO: Until the dialog is implemented, select always the focused entry - getSaveDataStat(saveEntries[selectedIndex], statGet.GetAddr()); + getSaveDataStat(saveEntries[selectedIndex], statGet.addr()); result->userdata_addr = userdata_addr; - funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); + funcStat(result.addr(), statGet.addr(), statSet.addr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. @@ -368,7 +371,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.GetAddr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); return ret; } @@ -383,11 +386,11 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m if (!setList.IsGood() || !setBuf.IsGood() || !funcList.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; - MemoryAllocator listGet; - MemoryAllocator listSet; - MemoryAllocator statGet; - MemoryAllocator statSet; + vm::var result; + vm::var listGet; + vm::var listSet; + vm::var statGet; + vm::var statSet; std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user vfsDir dir(saveBaseDir); @@ -415,13 +418,15 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList.SetAddr(setBuf->buf_addr); CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.GetAddr()); - for (u32 i=0; iresult < 0) { + funcList(result.addr(), listGet.addr(), listSet.addr()); + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -431,7 +436,8 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); if (listSet->newData.IsGood()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); - if (saveEntries.size() == 0) { + if (saveEntries.size() == 0) + { LOG_WARNING(HLE, "cellSaveDataListLoad2: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -439,12 +445,13 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m u32 focusIndex = focusSaveDataEntry(saveEntries, listSet->focusPosition); // TODO: Display the dialog here u32 selectedIndex = focusIndex; // TODO: Until the dialog is implemented, select always the focused entry - getSaveDataStat(saveEntries[selectedIndex], statGet.GetAddr()); + getSaveDataStat(saveEntries[selectedIndex], statGet.addr()); result->userdata_addr = userdata_addr; - funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); + funcStat(result.addr(), statGet.addr(), statSet.addr()); Memory.Free(statGet->fileList.GetAddr()); - if (result->result < 0) { + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -453,7 +460,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.GetAddr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); return ret; } @@ -468,11 +475,11 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, if (!setList.IsGood() || !setBuf.IsGood() || !funcFixed.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; - MemoryAllocator listGet; - MemoryAllocator fixedSet; - MemoryAllocator statGet; - MemoryAllocator statSet; + vm::var result; + vm::var listGet; + vm::var fixedSet; + vm::var statGet; + vm::var statSet; std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user vfsDir dir(saveBaseDir); @@ -500,23 +507,26 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList.SetAddr(setBuf->buf_addr); CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.GetAddr()); - for (u32 i = 0; iresult < 0) { + funcFixed(result.addr(), listGet.addr(), fixedSet.addr()); + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - setSaveDataFixed(saveEntries, fixedSet.GetAddr()); - getSaveDataStat(saveEntries[0], statGet.GetAddr()); // There should be only one element in this list + setSaveDataFixed(saveEntries, fixedSet.addr()); + getSaveDataStat(saveEntries[0], statGet.addr()); // There should be only one element in this list // TODO: Display the Yes|No dialog here result->userdata_addr = userdata_addr; - funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); + funcStat(result.addr(), statGet.addr(), statSet.addr()); Memory.Free(statGet->fileList.GetAddr()); - if (result->result < 0) { + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -525,7 +535,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.GetAddr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); return ret; } @@ -540,11 +550,11 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, if (!setList.IsGood() || !setBuf.IsGood() || !funcFixed.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; - MemoryAllocator listGet; - MemoryAllocator fixedSet; - MemoryAllocator statGet; - MemoryAllocator statSet; + vm::var result; + vm::var listGet; + vm::var fixedSet; + vm::var statGet; + vm::var statSet; std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user vfsDir dir(saveBaseDir); @@ -572,23 +582,26 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList.SetAddr(setBuf->buf_addr); CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.GetAddr()); - for (u32 i = 0; iresult < 0) { + funcFixed(result.addr(), listGet.addr(), fixedSet.addr()); + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - setSaveDataFixed(saveEntries, fixedSet.GetAddr()); - getSaveDataStat(saveEntries[0], statGet.GetAddr()); // There should be only one element in this list + setSaveDataFixed(saveEntries, fixedSet.addr()); + getSaveDataStat(saveEntries[0], statGet.addr()); // There should be only one element in this list // TODO: Display the Yes|No dialog here result->userdata_addr = userdata_addr; - funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); + funcStat(result.addr(), statGet.addr(), statSet.addr()); Memory.Free(statGet->fileList.GetAddr()); - if (result->result < 0) { + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -597,7 +610,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.GetAddr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); return ret; } @@ -612,9 +625,9 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ if (!setBuf.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; - MemoryAllocator statGet; - MemoryAllocator statSet; + vm::var result; + vm::var statGet; + vm::var statSet; std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user vfsDir dir(saveBaseDir); @@ -625,13 +638,15 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ std::vector saveEntries; for (const DirEntryInfo* entry = dir.Read(); entry; entry = dir.Read()) { - if (entry->flags & DirEntry_TypeDir && entry->name == dirName) { + if (entry->flags & DirEntry_TypeDir && entry->name == dirName) + { addSaveDataEntry(saveEntries, saveBaseDir+dirName); } } // The target entry does not exist - if (saveEntries.size() == 0) { + if (saveEntries.size() == 0) + { SaveDataEntry entry; entry.dirName = dirName; entry.sizeKB = 0; @@ -639,12 +654,13 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ saveEntries.push_back(entry); } - getSaveDataStat(saveEntries[0], statGet.GetAddr()); // There should be only one element in this list + getSaveDataStat(saveEntries[0], statGet.addr()); // There should be only one element in this list result->userdata_addr = userdata_addr; - funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); + funcStat(result.addr(), statGet.addr(), statSet.addr()); Memory.Free(statGet->fileList.GetAddr()); - if (result->result < 0) { + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataAutoSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -653,7 +669,7 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.GetAddr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); return CELL_SAVEDATA_RET_OK; } @@ -668,9 +684,9 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ if (!setBuf.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; - MemoryAllocator statGet; - MemoryAllocator statSet; + vm::var result; + vm::var statGet; + vm::var statSet; std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user vfsDir dir(saveBaseDir); @@ -681,7 +697,8 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ std::vector saveEntries; for (const DirEntryInfo* entry = dir.Read(); entry; entry = dir.Read()) { - if (entry->flags & DirEntry_TypeDir && entry->name == dirName) { + if (entry->flags & DirEntry_TypeDir && entry->name == dirName) + { addSaveDataEntry(saveEntries, saveBaseDir+dirName); } } @@ -692,12 +709,13 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ return CELL_OK; // TODO: Can anyone check the actual behaviour of a PS3 when saves are not found? } - getSaveDataStat(saveEntries[0], statGet.GetAddr()); // There should be only one element in this list + getSaveDataStat(saveEntries[0], statGet.addr()); // There should be only one element in this list result->userdata_addr = userdata_addr; - funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); + funcStat(result.addr(), statGet.addr(), statSet.addr()); Memory.Free(statGet->fileList.GetAddr()); - if (result->result < 0) { + if (result->result < 0) + { LOG_ERROR(HLE, "cellSaveDataAutoLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -706,7 +724,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.GetAddr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); return CELL_SAVEDATA_RET_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index be6fe5291d..488fa3bee2 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -246,14 +246,14 @@ int cellFsReadWithOffset(u32 fd, u64 offset, u32 buf_addr, u64 buffer_size, mem6 fd, offset, buf_addr, buffer_size, nread.GetAddr()); int ret; - MemoryAllocator> oldPos, newPos; - ret = cellFsLseek(fd, 0, CELL_SEEK_CUR, oldPos.GetAddr()); // Save the current position + vm::var> oldPos, newPos; + ret = cellFsLseek(fd, 0, CELL_SEEK_CUR, oldPos.addr()); // Save the current position if (ret) return ret; - ret = cellFsLseek(fd, offset, CELL_SEEK_SET, newPos.GetAddr()); // Move to the specified offset + ret = cellFsLseek(fd, offset, CELL_SEEK_SET, newPos.addr()); // Move to the specified offset if (ret) return ret; ret = cellFsRead(fd, buf_addr, buffer_size, nread.GetAddr()); // Read the file if (ret) return ret; - ret = cellFsLseek(fd, Memory.Read64(oldPos.GetAddr()), CELL_SEEK_SET, newPos.GetAddr()); // Return to the old position + ret = cellFsLseek(fd, oldPos.value(), CELL_SEEK_SET, newPos.addr()); // Return to the old position if (ret) return ret; return CELL_OK; diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 0465079533..f576cfabe6 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -313,6 +313,10 @@ + + + + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 11ce9c141d..44c5720d14 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1096,5 +1096,17 @@ Emu\SysCalls + + Emu\Memory + + + Emu\Memory + + + Emu\Memory + + + Emu\Memory + \ No newline at end of file From e8525a6f1461e64deb2668dda3bfbd40cdfd7b33 Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 1 Aug 2014 04:20:00 +1000 Subject: [PATCH 259/499] More rFile cleanups and fixes. Was using fileExists/dirExists before when really should have just been exists. File or Dir doesn't matter and would only create false negatives. Current working directory shouldn't really be used at all. This is just the folder the application is run from (not even where the .exe resides). Some of the infos required by vfsLocalDir such as executable may not be portable. Not sure of their intended function as they are never used. --- Utilities/rFile.cpp | 210 ++++++++++++--------- Utilities/rFile.h | 32 ++-- rpcs3/Crypto/unpkg.cpp | 3 +- rpcs3/Crypto/unself.cpp | 5 +- rpcs3/Emu/FS/VFS.cpp | 3 +- rpcs3/Emu/FS/vfsDirBase.cpp | 2 +- rpcs3/Emu/FS/vfsLocalDir.cpp | 13 +- rpcs3/Emu/FS/vfsLocalFile.cpp | 6 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 6 +- rpcs3/Emu/GS/GL/GLGSRender.h | 4 +- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 15 +- rpcs3/Emu/System.cpp | 2 +- rpcs3/Gui/GameViewer.cpp | 2 +- rpcs3/Loader/PKG.cpp | 7 +- 15 files changed, 180 insertions(+), 132 deletions(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index c0257fbed7..345aa284c5 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -15,6 +15,125 @@ std::wstring ConvertUTF8ToWString(const std::string &source) { } #endif +bool getFileInfo(const char *path, FileInfo *fileInfo) { + // TODO: Expand relative paths? + fileInfo->fullName = path; + +#ifdef _WIN32 + WIN32_FILE_ATTRIBUTE_DATA attrs; + if (!GetFileAttributesExW(ConvertUTF8ToWString(path).c_str(), GetFileExInfoStandard, &attrs)) { + fileInfo->size = 0; + fileInfo->isDirectory = false; + fileInfo->exists = false; + return false; + } + fileInfo->size = (uint64_t)attrs.nFileSizeLow | ((uint64_t)attrs.nFileSizeHigh << 32); + fileInfo->isDirectory = (attrs.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; + fileInfo->isWritable = (attrs.dwFileAttributes & FILE_ATTRIBUTE_READONLY) == 0; + fileInfo->exists = true; +#else + struct stat64 file_info; + int result = stat64(path, &file_info); + + if (result < 0) { + LOG_NOTICE(GENERAL, "IsDirectory: stat failed on %s", path); + fileInfo->exists = false; + return false; + } + + fileInfo->isDirectory = S_ISDIR(file_info.st_mode); + fileInfo->isWritable = false; + fileInfo->size = file_info.st_size; + fileInfo->exists = true; + // HACK: approximation + if (file_info.st_mode & 0200) + fileInfo->isWritable = true; +#endif + return true; +} + +bool rIsDir(const std::string &filename) { + FileInfo info; + getFileInfo(filename.c_str(), &info); + return info.isDirectory; +} + +bool rMkdir(const std::string &dir) +{ + return !mkdir(dir.c_str()); +} + +bool rMkpath(const std::string &path) +{ + size_t start=0, pos; + std::string dir; + bool ret; + + while (true) { + if ((pos = path.find_first_of('/', start)) == std::string::npos) + pos = path.length(); + + dir = path.substr(0,pos++); + start = pos; + if(dir.size() == 0) + continue; + if((ret = mkdir(dir.c_str())) && errno != EEXIST){ + return !ret; + } + if (pos == path.length()) + return true; + } + return true; +} + +bool rRmdir(const std::string &dir) +{ +#ifdef _WIN32 + if (!RemoveDirectory(ConvertUTF8ToWString(dir).c_str())) { + LOG_ERROR(GENERAL, "Error deleting directory %s: %i", dir.c_str(), GetLastError()); + return false; + } + return true; +#else + rmdir(dir.c_str()); +#endif +} + +bool rRename(const std::string &from, const std::string &to) +{ + // TODO: Deal with case-sensitivity +#ifdef _WIN32 + return (MoveFile(ConvertUTF8ToWString(from).c_str(), ConvertUTF8ToWString(to).c_str()) == TRUE); +#else + return (0 == rename(from.c_str(), to.c_str())); +#endif +} + +bool rExists(const std::string &file) +{ +#ifdef _WIN32 + std::wstring wstr = ConvertUTF8ToWString(file); + return GetFileAttributes(wstr.c_str()) != 0xFFFFFFFF; +#else + struct stat buffer; + return (stat (file.c_str(), &buffer) == 0); +#endif +} + +bool rRemoveFile(const std::string &file) +{ +#ifdef _WIN32 + if (!DeleteFile(ConvertUTF8ToWString(file).c_str())) { + LOG_ERROR(GENERAL, "Error deleting %s: %i", file.c_str(), GetLastError()); + } +#else + int err = unlink(file.c_str()); + if (err) { + LOG_ERROR(GENERAL, "Error unlinking %s: %i", file.c_str(), err); + } +#endif +} + wxFile::OpenMode convertOpenMode(rFile::OpenMode open) { wxFile::OpenMode mode; @@ -143,7 +262,7 @@ bool rFile::Close() bool rFile::Create(const std::string &filename, bool overwrite, int access) { - return reinterpret_cast(handle)->Create(fmt::FromUTF8(filename),overwrite,access); + return reinterpret_cast(handle)->Create(fmt::FromUTF8(filename), overwrite, access); } bool rFile::Open(const std::string &filename, rFile::OpenMode mode, int access) @@ -151,11 +270,6 @@ bool rFile::Open(const std::string &filename, rFile::OpenMode mode, int access) return reinterpret_cast(handle)->Open(fmt::FromUTF8(filename), convertOpenMode(mode), access); } -bool rFile::Exists(const std::string &file) -{ - return rExists(file); -} - bool rFile::IsOpened() const { return reinterpret_cast(handle)->IsOpened(); @@ -181,85 +295,6 @@ size_t rFile::Tell() const return reinterpret_cast(handle)->Tell(); } -std::string rGetCwd() -{ - return fmt::ToUTF8(wxGetCwd()); -} - -bool rMkdir(const std::string &dir) -{ - return !mkdir(dir.c_str()); -} - -bool rMkpath(const std::string& path) -{ - return wxFileName::Mkdir(fmt::FromUTF8(path), 0777, wxPATH_MKDIR_FULL); -} - -bool rRmdir(const std::string &dir) -{ -#ifdef _WIN32 - if (!RemoveDirectory(ConvertUTF8ToWString(dir).c_str())) { - LOG_ERROR(GENERAL, "Error deleting directory %s: %i", dir, GetLastError()); - return false; - } - return true; -#else - rmdir(dir.c_str()); -#endif -} - -bool rRename(const std::string &from, const std::string &to) -{ - // TODO: Deal with case-sensitivity -#ifdef _WIN32 - return (MoveFile(ConvertUTF8ToWString(from).c_str(), ConvertUTF8ToWString(to).c_str()) == TRUE); -#else - return (0 == rename(from.c_str(), to.c_str())); -#endif -} - -bool rExists(const std::string &file) -{ -#ifdef _WIN32 - std::wstring wstr = ConvertUTF8ToWString(file); - return GetFileAttributes(wstr.c_str()) != 0xFFFFFFFF; -#else - struct stat buffer; - return (stat (file.c_str(), &buffer) == 0); -#endif -} - -bool rDirExists(const std::string &path) -{ - return wxDirExists(fmt::FromUTF8(path)); -} - -bool rFileExists(const std::string &path) -{ - return wxFileExists(fmt::FromUTF8(path)); -} - -bool rRemoveFile(const std::string &path) -{ - return wxRemoveFile(fmt::FromUTF8(path)); -} - -bool rIsWritable(const std::string& path) -{ - return wxIsWritable(fmt::FromUTF8(path)); -} - -bool rIsReadable(const std::string& path) -{ - return wxIsReadable(fmt::FromUTF8(path)); -} - -bool rIsExecutable(const std::string& path) -{ - return wxIsExecutable(fmt::FromUTF8(path)); -} - rDir::rDir() { handle = reinterpret_cast(new wxDir()); @@ -280,11 +315,6 @@ bool rDir::Open(const std::string& path) return reinterpret_cast(handle)->Open(fmt::FromUTF8(path)); } -bool rDir::Exists(const std::string &path) -{ - return rFile::Exists(path); -} - bool rDir::GetFirst(std::string *filename) const { wxString str; diff --git a/Utilities/rFile.h b/Utilities/rFile.h index 55a760abef..fb2be71fbb 100644 --- a/Utilities/rFile.h +++ b/Utilities/rFile.h @@ -2,6 +2,24 @@ #include +struct FileInfo { + std::string name; + std::string fullName; + bool exists; + bool isDirectory; + bool isWritable; + uint64_t size; +}; + +bool getFileInfo(const char *path, FileInfo *fileInfo); +bool rIsDir(const std::string& filename); +bool rRmdir(const std::string& dir); +bool rMkdir(const std::string& dir); +bool rMkpath(const std::string& path); +bool rRename(const std::string &from, const std::string &to); +bool rExists(const std::string &path); +bool rRemoveFile(const std::string &path); + enum rSeekMode { rFromStart, @@ -41,20 +59,6 @@ public: void *handle; }; -std::string rGetCwd(); -bool rRmdir(const std::string& dir); -bool rMkdir(const std::string& dir); -bool rMkpath(const std::string& path); -bool rRename(const std::string &from, const std::string &to); -bool rExists(const std::string &path); -bool rDirExists(const std::string &path); -bool rFileExists(const std::string &path); -bool rRemoveFile(const std::string &path); - -bool rIsWritable(const std::string& path); -bool rIsReadable(const std::string& path); -bool rIsExecutable(const std::string& path); - struct rDir { rDir(); diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index 3d26e9178d..c08a3b5eab 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -191,7 +191,8 @@ int Unpack(rFile& pkg_f, std::string src, std::string dst) PKGHeader* m_header = (PKGHeader*) malloc (sizeof(PKGHeader)); rFile dec_pkg_f; - std::string decryptedFile = rGetCwd() + "/dev_hdd1/" + src + ".dec"; + // TODO: This shouldn't use current dir + std::string decryptedFile = "./dev_hdd1/" + src + ".dec"; dec_pkg_f.Create(decryptedFile, true); diff --git a/rpcs3/Crypto/unself.cpp b/rpcs3/Crypto/unself.cpp index eef46d2e28..d03091dae1 100644 --- a/rpcs3/Crypto/unself.cpp +++ b/rpcs3/Crypto/unself.cpp @@ -505,10 +505,11 @@ bool SELFDecrypter::GetKeyFromRap(u8 *content_id, u8 *npdrm_key) // Try to find a matching RAP file under dev_usb000. std::string ci_str((const char *)content_id); - std::string rap_path(rGetCwd() + "/dev_usb000/" + ci_str + ".rap"); + // TODO: This shouldn't use current dir + std::string rap_path("./dev_usb000/" + ci_str + ".rap"); // Check if we have a valid RAP file. - if (!rFile::Exists(rap_path)) + if (!rExists(rap_path)) { LOG_ERROR(LOADER, "This application requires a valid RAP file for decryption!"); return false; diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index 3c79002e13..1776343ce8 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -291,7 +291,8 @@ void VFS::Init(const std::string& path) } std::string mpath = entry.path; - fmt::Replace(mpath,"$(EmulatorDir)", rGetCwd()); + // TODO: This shouldn't use current dir + fmt::Replace(mpath,"$(EmulatorDir)", "."); fmt::Replace(mpath,"$(GameDir)", vfsDevice::GetRoot(path)); Mount(entry.mount, mpath, dev); } diff --git a/rpcs3/Emu/FS/vfsDirBase.cpp b/rpcs3/Emu/FS/vfsDirBase.cpp index 63e5908dd0..14f4fdfc45 100644 --- a/rpcs3/Emu/FS/vfsDirBase.cpp +++ b/rpcs3/Emu/FS/vfsDirBase.cpp @@ -32,7 +32,7 @@ bool vfsDirBase::IsOpened() const bool vfsDirBase::IsExists(const std::string& path) const { - return rDirExists(path); + return rExists(path); } const std::vector& vfsDirBase::GetEntries() const diff --git a/rpcs3/Emu/FS/vfsLocalDir.cpp b/rpcs3/Emu/FS/vfsLocalDir.cpp index e97f9a5ad7..69008fa03b 100644 --- a/rpcs3/Emu/FS/vfsLocalDir.cpp +++ b/rpcs3/Emu/FS/vfsLocalDir.cpp @@ -26,13 +26,18 @@ bool vfsLocalDir::Open(const std::string& path) std::string dir_path = path + name; m_entries.emplace_back(); + // TODO: Use same info structure as fileinfo? DirEntryInfo& info = m_entries.back(); info.name = name; - info.flags |= dir.Exists(dir_path) ? DirEntry_TypeDir : DirEntry_TypeFile; - if(rIsWritable(dir_path)) info.flags |= DirEntry_PermWritable; - if(rIsReadable(dir_path)) info.flags |= DirEntry_PermReadable; - if(rIsExecutable(dir_path)) info.flags |= DirEntry_PermExecutable; + FileInfo fileinfo; + getFileInfo(dir_path.c_str(), &fileinfo); + + // Not sure of purpose for below. I hope these don't need to be correct + info.flags |= rIsDir(dir_path) ? DirEntry_TypeDir : DirEntry_TypeFile; + if(fileinfo.isWritable) info.flags |= DirEntry_PermWritable; + info.flags |= DirEntry_PermReadable; // Always? + info.flags |= DirEntry_PermExecutable; // Always? } return true; diff --git a/rpcs3/Emu/FS/vfsLocalFile.cpp b/rpcs3/Emu/FS/vfsLocalFile.cpp index 7a6e71c09c..aea1e02e0c 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.cpp +++ b/rpcs3/Emu/FS/vfsLocalFile.cpp @@ -63,7 +63,7 @@ bool vfsLocalFile::Create(const std::string& path) break; const std::string& dir = path.substr(0, p); - if(!rDirExists(dir)) + if(!rExists(dir)) { LOG_NOTICE(HLE, "create dir: %s", dir.c_str()); rMkdir(dir); @@ -72,7 +72,7 @@ bool vfsLocalFile::Create(const std::string& path) //create file const char m = path[path.length() - 1]; - if(m != '/' && m != '\\' && !rFileExists(path)) // ??? + if(m != '/' && m != '\\' && !rExists(path)) // ??? { rFile f; return f.Create(path); @@ -118,5 +118,5 @@ bool vfsLocalFile::IsOpened() const bool vfsLocalFile::Exists(const std::string& path) { - return rFileExists(path); + return rExists(path); } \ No newline at end of file diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 9126fba185..873a2167f1 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -359,7 +359,8 @@ bool GLGSRender::LoadProgram() m_shader_prog.Compile(); checkForGlError("m_shader_prog.Compile"); - rFile f(rGetCwd() + "/FragmentProgram.txt", rFile::write); + // TODO: This shouldn't use current dir + rFile f("./FragmentProgram.txt", rFile::write); f.Write(m_shader_prog.GetShaderText()); } @@ -372,7 +373,8 @@ bool GLGSRender::LoadProgram() m_vertex_prog.Compile(); checkForGlError("m_vertex_prog.Compile"); - rFile f(rGetCwd() + "/VertexProgram.txt", rFile::write); + // TODO: This shouldn't use current dir + rFile f("./VertexProgram.txt", rFile::write); f.Write(m_vertex_prog.shader); } diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index 8596ed0116..325bca7fa4 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -593,10 +593,10 @@ public: static const std::string& dir_path = "textures"; static const std::string& file_fmt = dir_path + "/" + "tex[%d].png"; - if(!rDirExists(dir_path)) rMkdir(dir_path); + if(!rExists(dir_path)) rMkdir(dir_path); u32 count = 0; - while(rFileExists(fmt::Format(file_fmt, count))) count++; + while(rExists(fmt::Format(file_fmt, count))) count++; Save(tex, fmt::Format(file_fmt, count)); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index aae129c92a..703c6eb3c8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -660,7 +660,7 @@ int cellSysCacheClear(void) Emu.GetVFS().GetDevice(std::string("/dev_hdd1/cache/"), localPath); //TODO: implement - //if (rDirExists(localPath)){ + //if (rIsDir(localPath)){ // WxDirDeleteTraverser deleter; // wxString f = wxFindFirstFile(fmt::FromUTF8(localPath+"\\*"),wxDIR); // while (!f.empty()) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 6b5bce2a51..783adaaf48 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -53,10 +53,12 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) //make more explicit what this actually does (currently everything after the third slash and before the fourth slash) std::string titleID = fmt::BeforeFirst(fmt::AfterFirst(fmt::AfterFirst(fmt::AfterFirst(drm_path,'/'),'/'),'/'),'/'); - std::string enc_drm_path = rGetCwd() + drm_path; - std::string dec_drm_path = rGetCwd() + "/dev_hdd1/" + titleID + "/" + drm_file_name; + // TODO: These shouldn't use current dir + std::string enc_drm_path = drm_path; + drm_path.insert(0, 1, '.'); + std::string dec_drm_path = "./dev_hdd1/" + titleID + "/" + drm_file_name; - std::string rap_dir_path = rGetCwd() + "/dev_usb000/"; + std::string rap_dir_path = "./dev_usb000/"; std::string rap_file_path = rap_dir_path; // Search dev_usb000 for a compatible RAP file. @@ -77,9 +79,10 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) } // Create a new directory under dev_hdd1/titleID to hold the decrypted data. - std::string tmp_dir = rGetCwd() + "/dev_hdd1/" + titleID; - if (!rDir::Exists(tmp_dir)) - rMkdir(rGetCwd() + "/dev_hdd1/" + titleID); + // TODO: These shouldn't use current dir + std::string tmp_dir = "./dev_hdd1/" + titleID; + if (!rExists(tmp_dir)) + rMkdir("./dev_hdd1/" + titleID); // Decrypt this EDAT using the supplied k_licensee and matching RAP file. DecryptEDAT(enc_drm_path, dec_drm_path, 8, rap_file_path, k_licensee, false); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 0e66104969..554450d425 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -133,7 +133,7 @@ void Emulator::Load() { GetModuleManager().init(); - if(!rFileExists(m_path)) return; + if(!rExists(m_path)) return; if(IsSelf(m_path)) { diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 467389aeeb..f709031bb8 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -241,7 +241,7 @@ void GameViewer::RemoveGame(wxCommandEvent& event) Emu.GetVFS().UnMountAll(); - if (!rFile::Exists(localPath)) + if (!rExists(localPath)) return; //TODO: Replace wxWidgetsSpecific filesystem stuff? WxDirDeleteTraverser deleter; diff --git a/rpcs3/Loader/PKG.cpp b/rpcs3/Loader/PKG.cpp index 7c055c35be..c07e43a5fa 100644 --- a/rpcs3/Loader/PKG.cpp +++ b/rpcs3/Loader/PKG.cpp @@ -13,7 +13,8 @@ bool PKGLoader::Install(std::string dest) if (!pkg_f.IsOpened()) return false; - dest = rGetCwd() + dest; + // TODO: This shouldn't use current dir + dest.insert(0, 1, '.'); if (!dest.empty() && dest.back() != '/') dest += '/'; @@ -24,7 +25,7 @@ bool PKGLoader::Install(std::string dest) std::string titleID = std::string(title_id).substr(7, 9); - if (rDirExists(dest+titleID)) { + if (rExists(dest+titleID)) { rMessageDialog d_overwrite(NULL, "Another installation was found. Do you want to overwrite it?", "PKG Decrypter / Installer", rYES_NO|rCENTRE); if (d_overwrite.ShowModal() != rID_YES) { LOG_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); @@ -55,4 +56,4 @@ bool PKGLoader::Install(std::string dest) bool PKGLoader::Close() { return pkg_f.Close(); -} \ No newline at end of file +} From 7411012db9b6659eed131592d54a7de8bd976d01 Mon Sep 17 00:00:00 2001 From: DHrpcs3 Date: Fri, 1 Aug 2014 19:27:48 +0300 Subject: [PATCH 260/499] Fixed compilation errors Implemented vm::ptr & vm::ref --- rpcs3/Emu/Memory/vm.cpp | 44 ++++ rpcs3/Emu/Memory/vm.h | 59 ++---- rpcs3/Emu/Memory/vm_ptr.h | 382 +++++++++++++++++++++++++++++++++- rpcs3/Emu/Memory/vm_ref.h | 59 +++++- rpcs3/Emu/Memory/vm_var.h | 38 ++-- rpcs3/emucore.vcxproj | 3 +- rpcs3/emucore.vcxproj.filters | 3 + 7 files changed, 523 insertions(+), 65 deletions(-) create mode 100644 rpcs3/Emu/Memory/vm.cpp diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp new file mode 100644 index 0000000000..a475b85eb7 --- /dev/null +++ b/rpcs3/Emu/Memory/vm.cpp @@ -0,0 +1,44 @@ +#include "stdafx.h" + +namespace vm +{ + //TODO + bool check_addr(u32 addr) + { + return false; + } + + bool map(u32 addr, u32 size, u32 flags) + { + return false; + } + + bool unmap(u32 addr, u32 size, u32 flags) + { + return false; + } + + u32 alloc(u32 size) + { + return 0; + } + + void unalloc(u32 addr) + { + } + + u32 read32(u32 addr) + { + return 0; + } + + bool read32(u32 addr, u32& value) + { + return false; + } + + bool write32(u32 addr, u32 value) + { + return false; + } +} \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm.h b/rpcs3/Emu/Memory/vm.h index b1858c4597..97a43cb78a 100644 --- a/rpcs3/Emu/Memory/vm.h +++ b/rpcs3/Emu/Memory/vm.h @@ -2,45 +2,28 @@ namespace vm { + bool check_addr(u32 addr); + bool map(u32 addr, u32 size, u32 flags); + bool unmap(u32 addr, u32 size = 0, u32 flags = 0); + u32 alloc(u32 size); + void unalloc(u32 addr); + + template + T* get_ptr(u32 addr) + { + return (T*)&Memory[addr]; + } + + template + T& get_ref(u32 addr) + { + return (T&)Memory[addr]; + } + //TODO - bool check_addr(u32 addr) - { - return false; - } - - bool map(u32 addr, u32 size, u32 flags) - { - return false; - } - - bool unmap(u32 addr, u32 size = 0, u32 flags = 0) - { - return false; - } - - u32 alloc(u32 size) - { - return 0; - } - - void unalloc(u32 addr) - { - } - - u32 read32(u32 addr) - { - return 0; - } - - bool read32(u32 addr, u32& value) - { - return false; - } - - bool write32(u32 addr, u32 value) - { - return false; - } + u32 read32(u32 addr); + bool read32(u32 addr, u32& value); + bool write32(u32 addr, u32 value); } #include "vm_ptr.h" diff --git a/rpcs3/Emu/Memory/vm_ptr.h b/rpcs3/Emu/Memory/vm_ptr.h index 629a59dc91..3003f11e66 100644 --- a/rpcs3/Emu/Memory/vm_ptr.h +++ b/rpcs3/Emu/Memory/vm_ptr.h @@ -2,5 +2,385 @@ namespace vm { - //TODO + template + class ptr + { + AT m_addr; + + public: + ptr operator++ (int) + { + AT result = m_addr; + m_addr += sizeof(AT); + return { result }; + } + + ptr& operator++ () + { + m_addr += sizeof(AT); + return *this; + } + + ptr operator-- (int) + { + AT result = m_addr; + m_addr -= sizeof(AT); + return { result }; + } + + ptr& operator-- () + { + m_addr -= sizeof(AT); + return *this; + } + + ptr& operator += (int count) + { + m_addr += count * sizeof(AT); + return *this; + } + + ptr& operator -= (int count) + { + m_addr -= count * sizeof(AT); + return *this; + } + + ptr operator + (int count) const + { + return { m_addr + count * sizeof(AT) }; + } + + ptr operator - (int count) const + { + return { m_addr - count * sizeof(AT) }; + } + + __forceinline ptr& operator *() + { + return get_ref>(m_addr); + } + + __forceinline const ptr& operator *() const + { + return get_ref>(m_addr); + } + + __forceinline ptr& operator [](int index) + { + return get_ref>(m_addr + sizeof(AT) * index); + } + + __forceinline const ptr& operator [](int index) const + { + return get_ref>(m_addr + sizeof(AT) * index); + } + + operator bool() const + { + return m_addr != 0; + } + + AT addr() const + { + return m_addr; + } + + bool check() const + { + return Memory.IsGoodAddr(m_addr, sizeof(AT)); + } + + static ptr make(u32 addr) + { + return (ptr&)addr; + } + }; + + template + class ptr + { + AT m_addr; + + public: + __forceinline T* operator -> () + { + return get_ptr(m_addr); + } + + __forceinline const T* operator -> () const + { + return get_ptr(m_addr); + } + + ptr operator++ (int) + { + AT result = m_addr; + m_addr += sizeof(T); + return { result }; + } + + ptr& operator++ () + { + m_addr += sizeof(T); + return *this; + } + + ptr operator-- (int) + { + AT result = m_addr; + m_addr -= sizeof(T); + return { result }; + } + + ptr& operator-- () + { + m_addr -= sizeof(T); + return *this; + } + + ptr& operator += (int count) + { + m_addr += count * sizeof(T); + return *this; + } + + ptr& operator -= (int count) + { + m_addr -= count * sizeof(T); + return *this; + } + + ptr operator + (int count) const + { + return { m_addr + count * sizeof(T) }; + } + + ptr operator - (int count) const + { + return { m_addr - count * sizeof(T) }; + } + + __forceinline T& operator *() + { + return get_ref(m_addr); + } + + __forceinline const T& operator *() const + { + return get_ref(m_addr); + } + + __forceinline T& operator [](int index) + { + return get_ref(m_addr + sizeof(T) * index); + } + + __forceinline const T& operator [](int index) const + { + return get_ref(m_addr + sizeof(T) * index); + } + + /* + operator ref() + { + return { m_addr }; + } + + operator const ref() const + { + return { m_addr }; + } + */ + + AT addr() const + { + return m_addr; + } + + operator bool() const + { + return m_addr != 0; + } + + T* get_ptr() const + { + return vm::get_ptr(m_addr); + } + + bool check() const + { + return Memory.IsGoodAddr(m_addr, sizeof(T)); + } + + static ptr make(u32 addr) + { + return (ptr&)addr; + } + }; + + template + class ptr + { + AT m_addr; + + public: + AT addr() const + { + return m_addr; + } + + void* get_ptr() const + { + return vm::get_ptr(m_addr); + } + + bool check() const + { + return Memory.IsGoodAddr(m_addr); + } + + operator bool() const + { + return m_addr != 0; + } + + static ptr make(u32 addr) + { + return (ptr&)addr; + } + }; + + template + class ptr + { + AT m_addr; + + __forceinline RT call_func(bool is_async) const + { + Callback cb; + cb.SetAddr(m_addr); + return (RT)cb.Branch(!is_async); + } + + public: + typedef RT(*type)(); + + __forceinline RT operator()() const + { + return call_func(false); + } + + __forceinline void async() const + { + call_func(true); + } + + AT addr() const + { + return m_addr; + } + + type get_ptr() const + { + return *((type*)vm::get_ptr(m_addr)); + } + + bool check() const + { + return Memory.IsGoodAddr(m_addr); + } + + operator bool() const + { + return m_addr != 0; + } + + static ptr make(u32 addr) + { + return (ptr&)addr; + } + }; + + template + class ptr + { + AT m_addr; + + __forceinline RT call_func(bool is_async, T... args) const + { + template + struct _func_arg + { + __forceinline static u64 get_value(const T& arg) + { + return arg; + } + }; + + template + struct _func_arg> + { + __forceinline static u64 get_value(const ptr arg) + { + return arg.addr(); + } + }; + + template + struct _func_arg> + { + __forceinline static u64 get_value(const ref arg) + { + return arg.addr(); + } + }; + + Callback cb; + cb.SetAddr(m_addr); + cb.Handle(_func_arg::get_value(args)...); + return (RT)cb.Branch(!is_async); + } + + public: + typedef RT(*type)(T...); + + __forceinline RT operator()(T... args) const + { + return call_func(false, args...); + } + + __forceinline void async(T... args) const + { + call_func(true, args...); + } + + AT addr() const + { + return m_addr; + } + + type get_ptr() const + { + return *((type*)vm::get_ptr(m_addr)); + } + + bool check() const + { + return Memory.IsGoodAddr(m_addr); + } + + operator bool() const + { + return m_addr != 0; + } + + static ptr make(u32 addr) + { + return (ptr&)addr; + } + }; + + template + class beptr : public ptr> {}; } \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm_ref.h b/rpcs3/Emu/Memory/vm_ref.h index 629a59dc91..797c6da784 100644 --- a/rpcs3/Emu/Memory/vm_ref.h +++ b/rpcs3/Emu/Memory/vm_ref.h @@ -2,5 +2,62 @@ namespace vm { - //TODO + template + class _ref_base + { + AT m_addr; + + public: + operator T&() + { + return get_ref(m_addr); + } + + operator const T&() const + { + return get_ref(m_addr); + } + + AT addr() const + { + return m_addr; + } + + bool check() const + { + return Memory.IsGoodAddr(m_addr, sizeof(T)); + } + + static ref make(u32 addr) + { + return (ref&)addr; + } + }; + + //BE reference to LE data + template class brefl : public _ref_base> {}; + + //BE reference to BE data + template class brefb : public _ref_base, be_t> {}; + + //LE reference to BE data + template class lrefb : public _ref_base, AT> {}; + + //LE reference to LE data + template class lrefl : public _ref_base {}; + + namespace ps3 + { + //default reference for HLE functions (LE reference to BE data) + template class ref : public lrefb {}; + + //default reference for HLE structures (BE reference to BE data) + template class bref : public brefb {}; + } + + namespace psv + { + //default reference for HLE functions & structures (LE reference to LE data) + template class ref : public lrefl {}; + } } \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm_var.h b/rpcs3/Emu/Memory/vm_var.h index bc4a99422c..adb4338c0d 100644 --- a/rpcs3/Emu/Memory/vm_var.h +++ b/rpcs3/Emu/Memory/vm_var.h @@ -34,7 +34,7 @@ namespace vm void alloc() { m_addr = Memory.Alloc(size(), m_align); - m_ptr = Memory.IsGoodAddr(m_addr, size()) ? (T*)&Memory[m_addr] : nullptr; + m_ptr = Memory.IsGoodAddr(m_addr, size()) ? get_ptr(m_addr) : nullptr; } void dealloc() @@ -46,16 +46,6 @@ namespace vm m_ptr = nullptr; } } - - void clear() - { - if (check()) - { - Memory.Free(m_addr); - m_addr = 0; - m_ptr = nullptr; - } - } static var make(u32 addr, u32 size = sizeof(T), u32 align = sizeof(T)) { @@ -64,7 +54,7 @@ namespace vm res.m_addr = addr; res.m_size = size; res.m_align = align; - res.m_ptr = Memory.IsGoodAddr(m_addr, sizeof(T)) ? (T*)&Memory[m_addr] : nullptr; + res.m_ptr = Memory.IsGoodAddr(addr, size) ? get_ptr(addr) : nullptr; return res; } @@ -166,7 +156,7 @@ namespace vm void alloc() { m_addr = Memory.Alloc(size(), m_align); - m_ptr = Memory.IsGoodAddr(m_addr, size()) ? (T*)&Memory[m_addr] : nullptr; + m_ptr = Memory.IsGoodAddr(m_addr, size()) ? get_ptr(m_addr) : nullptr; } void dealloc() @@ -187,7 +177,7 @@ namespace vm res.m_count = count; res.m_size = size; res.m_align = align; - res.m_ptr = Memory.IsGoodAddr(m_addr, size()) ? (T*)&Memory[m_addr] : nullptr; + res.m_ptr = Memory.IsGoodAddr(addr, size * count) ? get_ptr(addr) : nullptr; return res; } @@ -297,17 +287,17 @@ namespace vm T& at(uint index) { if (index >= count()) - throw std::out_of_range(); + throw std::out_of_range(std::to_string(index) + " >= " + count()); - return *(m_ptr + index); + return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); } const T& at(uint index) const { if (index >= count()) - throw std::out_of_range(); + throw std::out_of_range(std::to_string(index) + " >= " + count()); - return *(m_ptr + index); + return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); } T* ptr() @@ -365,7 +355,7 @@ namespace vm void alloc() { m_addr = Memory.Alloc(size(), m_align); - m_ptr = Memory.IsGoodAddr(m_addr, size()) ? (T*)&Memory[m_addr] : nullptr; + m_ptr = Memory.IsGoodAddr(m_addr, size()) ? get_ptr(m_addr) : nullptr; } void dealloc() @@ -479,23 +469,23 @@ namespace vm const T& operator [](uint index) const { assert(index < count()); - return return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); + return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); } T& at(uint index) { if (index >= count()) - throw std::out_of_range(); + throw std::out_of_range(std::to_string(index) + " >= " + count()); - return *(m_ptr + index); + return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); } const T& at(uint index) const { if (index >= count()) - throw std::out_of_range(); + throw std::out_of_range(std::to_string(index) + " >= " + count()); - return *(m_ptr + index); + return *(T*)((u8*)m_ptr + (m_size < m_align ? m_align : m_size) * index); } /* diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index f576cfabe6..8029d613c3 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -90,6 +90,7 @@ + @@ -518,7 +519,7 @@ - Level3 + Level2 Disabled false Use diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 44c5720d14..ac5d371cdb 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -584,6 +584,9 @@ Emu\SysCalls\Modules + + Emu\Memory + From f405395f972b6874d27efdb4fb4452c8f42713f4 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 3 Aug 2014 09:30:45 +0300 Subject: [PATCH 261/499] Additions and improvements to cellNetCtl --- rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 93 ++++---- rpcs3/Emu/SysCalls/Modules/cellNetCtl.h | 258 ++++++++++++++++++++++ rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 + 4 files changed, 300 insertions(+), 55 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellNetCtl.h diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index 9204105a34..12cab5b0df 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -4,59 +4,12 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "cellNetCtl.h" + //void cellNetCtl_init(); //Module cellNetCtl(0x0014, cellNetCtl_init); Module *cellNetCtl; -// Error Codes -enum -{ - CELL_NET_CTL_ERROR_NOT_INITIALIZED = 0x80130101, - CELL_NET_CTL_ERROR_NOT_TERMINATED = 0x80130102, - CELL_NET_CTL_ERROR_HANDLER_MAX = 0x80130103, - CELL_NET_CTL_ERROR_ID_NOT_FOUND = 0x80130104, - CELL_NET_CTL_ERROR_INVALID_ID = 0x80130105, - CELL_NET_CTL_ERROR_INVALID_CODE = 0x80130106, - CELL_NET_CTL_ERROR_INVALID_ADDR = 0x80130107, - CELL_NET_CTL_ERROR_NOT_CONNECTED = 0x80130108, - CELL_NET_CTL_ERROR_NOT_AVAIL = 0x80130109, - CELL_NET_CTL_ERROR_INVALID_TYPE = 0x8013010a, - CELL_NET_CTL_ERROR_INVALID_SIZE = 0x8013010b, - CELL_NET_CTL_ERROR_NET_DISABLED = 0x80130181, - CELL_NET_CTL_ERROR_NET_NOT_CONNECTED = 0x80130182, - CELL_NET_CTL_ERROR_NP_NO_ACCOUNT = 0x80130183, - CELL_NET_CTL_ERROR_NP_RESERVED1 = 0x80130184, - CELL_NET_CTL_ERROR_NP_RESERVED2 = 0x80130185, - CELL_NET_CTL_ERROR_NET_CABLE_NOT_CONNECTED = 0x80130186, - CELL_NET_CTL_ERROR_DIALOG_CANCELED = 0x80130190, - CELL_NET_CTL_ERROR_DIALOG_ABORTED = 0x80130191, - - CELL_NET_CTL_ERROR_WLAN_DEAUTHED = 0x80130137, - CELL_NET_CTL_ERROR_WLAN_KEYINFO_EXCHNAGE_TIMEOUT = 0x8013013d, - CELL_NET_CTL_ERROR_WLAN_ASSOC_FAILED = 0x8013013e, - CELL_NET_CTL_ERROR_WLAN_AP_DISAPPEARED = 0x8013013f, - CELL_NET_CTL_ERROR_PPPOE_SESSION_INIT = 0x80130409, - CELL_NET_CTL_ERROR_PPPOE_SESSION_NO_PADO = 0x8013040a, - CELL_NET_CTL_ERROR_PPPOE_SESSION_NO_PADS = 0x8013040b, - CELL_NET_CTL_ERROR_PPPOE_SESSION_GET_PADT = 0x8013040d, - CELL_NET_CTL_ERROR_PPPOE_SESSION_SERVICE_NAME = 0x8013040f, - CELL_NET_CTL_ERROR_PPPOE_SESSION_AC_SYSTEM = 0x80130410, - CELL_NET_CTL_ERROR_PPPOE_SESSION_GENERIC = 0x80130411, - CELL_NET_CTL_ERROR_PPPOE_STATUS_AUTH = 0x80130412, - CELL_NET_CTL_ERROR_PPPOE_STATUS_NETWORK = 0x80130413, - CELL_NET_CTL_ERROR_PPPOE_STATUS_TERMINATE = 0x80130414, - CELL_NET_CTL_ERROR_DHCP_LEASE_TIME = 0x80130504, -}; - -// Network connection states -enum -{ - CELL_NET_CTL_STATE_Disconnected = 0, - CELL_NET_CTL_STATE_Connecting = 1, - CELL_NET_CTL_STATE_IPObtaining = 2, - CELL_NET_CTL_STATE_IPObtained = 3, -}; - int cellNetCtlInit() { UNIMPLEMENTED_FUNC(cellNetCtl); @@ -74,7 +27,10 @@ int cellNetCtlGetState(mem32_t state) cellNetCtl->Log("cellNetCtlGetState(state_addr=0x%x)", state.GetAddr()); if (!state.IsGood()) + { + cellNetCtl->Error("cellNetCtlGetState : CELL_NET_CTL_ERROR_INVALID_ADDR"); return CELL_NET_CTL_ERROR_INVALID_ADDR; + } state = CELL_NET_CTL_STATE_Disconnected; // TODO: Allow other states return CELL_OK; @@ -98,9 +54,16 @@ int cellNetCtlGetInfo() return CELL_OK; } -int cellNetCtlNetStartDialogLoadAsync() +int cellNetCtlNetStartDialogLoadAsync(mem_ptr_t param) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlNetStartDialogLoadAsync(param_addr=0x%x)", param.GetAddr()); + + if (!param.IsGood()) + { + cellNetCtl->Error("cellNetCtlNetStartDialogLoadAsync : CELL_NET_CTL_ERROR_INVALID_ADDR"); + return CELL_NET_CTL_ERROR_INVALID_ADDR; + } + return CELL_OK; } @@ -110,15 +73,35 @@ int cellNetCtlNetStartDialogAbortAsync() return CELL_OK; } -int cellNetCtlNetStartDialogUnloadAsync() +int cellNetCtlNetStartDialogUnloadAsync(mem_ptr_t result) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlNetStartDialogUnloadAsync(result_addr=0x%x)", result.GetAddr()); + + if (!result.IsGood()) + { + cellNetCtl->Error("cellNetCtlNetStartDialogLoadAsync : CELL_NET_CTL_ERROR_INVALID_ADDR"); + return CELL_NET_CTL_ERROR_INVALID_ADDR; + } + return CELL_OK; } -int cellNetCtlGetNatInfo() +int cellNetCtlGetNatInfo(mem_ptr_t natInfo) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlGetNatInfo(natInfo_addr=0x%x)", natInfo.GetAddr()); + + if (!natInfo.IsGood()) + { + cellNetCtl->Error("cellNetCtlGetNatInfo : CELL_NET_CTL_ERROR_INVALID_ADDR"); + return CELL_NET_CTL_ERROR_INVALID_ADDR; + } + + if (natInfo->size == 0) + { + cellNetCtl->Error("cellNetCtlGetNatInfo : CELL_NET_CTL_ERROR_INVALID_SIZE"); + return CELL_NET_CTL_ERROR_INVALID_SIZE; + } + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h new file mode 100644 index 0000000000..6b3c5c7291 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h @@ -0,0 +1,258 @@ +#pragma once + +// Error Codes +enum +{ + CELL_NET_CTL_ERROR_NOT_INITIALIZED = 0x80130101, + CELL_NET_CTL_ERROR_NOT_TERMINATED = 0x80130102, + CELL_NET_CTL_ERROR_HANDLER_MAX = 0x80130103, + CELL_NET_CTL_ERROR_ID_NOT_FOUND = 0x80130104, + CELL_NET_CTL_ERROR_INVALID_ID = 0x80130105, + CELL_NET_CTL_ERROR_INVALID_CODE = 0x80130106, + CELL_NET_CTL_ERROR_INVALID_ADDR = 0x80130107, + CELL_NET_CTL_ERROR_NOT_CONNECTED = 0x80130108, + CELL_NET_CTL_ERROR_NOT_AVAIL = 0x80130109, + CELL_NET_CTL_ERROR_INVALID_TYPE = 0x8013010a, + CELL_NET_CTL_ERROR_INVALID_SIZE = 0x8013010b, + CELL_NET_CTL_ERROR_NET_DISABLED = 0x80130181, + CELL_NET_CTL_ERROR_NET_NOT_CONNECTED = 0x80130182, + CELL_NET_CTL_ERROR_NP_NO_ACCOUNT = 0x80130183, + CELL_NET_CTL_ERROR_NP_RESERVED1 = 0x80130184, + CELL_NET_CTL_ERROR_NP_RESERVED2 = 0x80130185, + CELL_NET_CTL_ERROR_NET_CABLE_NOT_CONNECTED = 0x80130186, + CELL_NET_CTL_ERROR_DIALOG_CANCELED = 0x80130190, + CELL_NET_CTL_ERROR_DIALOG_ABORTED = 0x80130191, + + CELL_NET_CTL_ERROR_WLAN_DEAUTHED = 0x80130137, + CELL_NET_CTL_ERROR_WLAN_KEYINFO_EXCHNAGE_TIMEOUT = 0x8013013d, + CELL_NET_CTL_ERROR_WLAN_ASSOC_FAILED = 0x8013013e, + CELL_NET_CTL_ERROR_WLAN_AP_DISAPPEARED = 0x8013013f, + CELL_NET_CTL_ERROR_PPPOE_SESSION_INIT = 0x80130409, + CELL_NET_CTL_ERROR_PPPOE_SESSION_NO_PADO = 0x8013040a, + CELL_NET_CTL_ERROR_PPPOE_SESSION_NO_PADS = 0x8013040b, + CELL_NET_CTL_ERROR_PPPOE_SESSION_GET_PADT = 0x8013040d, + CELL_NET_CTL_ERROR_PPPOE_SESSION_SERVICE_NAME = 0x8013040f, + CELL_NET_CTL_ERROR_PPPOE_SESSION_AC_SYSTEM = 0x80130410, + CELL_NET_CTL_ERROR_PPPOE_SESSION_GENERIC = 0x80130411, + CELL_NET_CTL_ERROR_PPPOE_STATUS_AUTH = 0x80130412, + CELL_NET_CTL_ERROR_PPPOE_STATUS_NETWORK = 0x80130413, + CELL_NET_CTL_ERROR_PPPOE_STATUS_TERMINATE = 0x80130414, + CELL_NET_CTL_ERROR_DHCP_LEASE_TIME = 0x80130504, +}; + +// Network connection states +enum +{ + CELL_NET_CTL_STATE_Disconnected = 0, + CELL_NET_CTL_STATE_Connecting = 1, + CELL_NET_CTL_STATE_IPObtaining = 2, + CELL_NET_CTL_STATE_IPObtained = 3, +}; + +// Transition connection states +enum +{ + CELL_NET_CTL_EVENT_CONNECT_REQ = 0, + CELL_NET_CTL_EVENT_ESTABLISH = 1, + CELL_NET_CTL_EVENT_GET_IP = 2, + CELL_NET_CTL_EVENT_DISCONNECT_REQ = 3, + CELL_NET_CTL_EVENT_ERROR = 4, + CELL_NET_CTL_EVENT_LINK_DISCONNECTED = 5, + CELL_NET_CTL_EVENT_AUTO_RETRY = 6, +}; + +// Network connection devices +enum +{ + CELL_NET_CTL_DEVICE_WIRED = 0, + CELL_NET_CTL_DEVICE_WIRELESS = 1, +}; + +// Cable connection types +enum +{ + CELL_NET_CTL_LINK_TYPE_AUTO = 0, + CELL_NET_CTL_LINK_TYPE_10BASE_HALF = 1, + CELL_NET_CTL_LINK_TYPE_10BASE_FULL = 2, + CELL_NET_CTL_LINK_TYPE_100BASE_HALF = 3, + CELL_NET_CTL_LINK_TYPE_100BASE_FULL = 4, + CELL_NET_CTL_LINK_TYPE_1000BASE_HALF = 5, + CELL_NET_CTL_LINK_TYPE_1000BASE_FULL = 6, +}; + +// Link connection states +enum +{ + CELL_NET_CTL_LINK_DISCONNECTED = 0, + CELL_NET_CTL_LINK_CONNECTED = 1, +}; + +// Wireless connection security measures +enum +{ + CELL_NET_CTL_WLAN_SECURITY_NOAUTH = 0, + CELL_NET_CTL_WLAN_SECURITY_WEP = 1, + CELL_NET_CTL_WLAN_SECURITY_WPAPSK_TKIP = 2, + CELL_NET_CTL_WLAN_SECURITY_WPAPSK_AES = 3, + CELL_NET_CTL_WLAN_SECURITY_UNSUPPORTED = 4, +}; + +// 802.1X settings +enum +{ + CELL_NET_CTL_8021X_NONE = 0, + CELL_NET_CTL_8021X_EAP_MD5 = 1, +}; + +// IP settings +enum +{ + CELL_NET_CTL_IP_DHCP = 0, + CELL_NET_CTL_IP_STATIC = 1, + CELL_NET_CTL_IP_PPPOE = 2, +}; + +// HTTP proxy settings +enum +{ + CELL_NET_CTL_HTTP_PROXY_OFF = 0, + CELL_NET_CTL_HTTP_PROXY_ON = 1, +}; + +// UPnP settings +enum +{ + CELL_NET_CTL_UPNP_ON = 0, + CELL_NET_CTL_UPNP_OFF = 1, +}; + +// Codes for information +enum +{ + CELL_NET_CTL_INFO_DEVICE = 1, + CELL_NET_CTL_INFO_ETHER_ADDR = 2, + CELL_NET_CTL_INFO_MTU = 3, + CELL_NET_CTL_INFO_LINK = 4, + CELL_NET_CTL_INFO_LINK_TYPE = 5, + CELL_NET_CTL_INFO_BSSID = 6, + CELL_NET_CTL_INFO_SSID = 7, + CELL_NET_CTL_INFO_WLAN_SECURITY = 8, + CELL_NET_CTL_INFO_8021X_TYPE = 9, + CELL_NET_CTL_INFO_8021X_AUTH_NAME = 10, + CELL_NET_CTL_INFO_RSSI = 11, + CELL_NET_CTL_INFO_CHANNEL = 12, + CELL_NET_CTL_INFO_IP_CONFIG = 13, + CELL_NET_CTL_INFO_DHCP_HOSTNAME = 14, + CELL_NET_CTL_INFO_PPPOE_AUTH_NAME = 15, + CELL_NET_CTL_INFO_IP_ADDRESS = 16, + CELL_NET_CTL_INFO_NETMASK = 17, + CELL_NET_CTL_INFO_DEFAULT_ROUTE = 18, + CELL_NET_CTL_INFO_PRIMARY_DNS = 19, + CELL_NET_CTL_INFO_SECONDARY_DNS = 20, + CELL_NET_CTL_INFO_HTTP_PROXY_CONFIG = 21, + CELL_NET_CTL_INFO_HTTP_PROXY_SERVER = 22, + CELL_NET_CTL_INFO_HTTP_PROXY_PORT = 23, + CELL_NET_CTL_INFO_UPNP_CONFIG = 24, +}; + +// Network start dialogs +enum +{ + CELL_NET_CTL_NETSTART_TYPE_NET = 0, + CELL_NET_CTL_NETSTART_TYPE_NP = 1, +}; + +// Network start dialog statuses +enum +{ + CELL_SYSUTIL_NET_CTL_NETSTART_LOADED = 0x0801, + CELL_SYSUTIL_NET_CTL_NETSTART_FINISHED = 0x0802, + CELL_SYSUTIL_NET_CTL_NETSTART_UNLOADED = 0x0803, +}; + +// UPnP NAT statuses +enum +{ + CELL_NET_CTL_NATINFO_UPNP_UNCHECKED = 0, + CELL_NET_CTL_NATINFO_UPNP_NO = 1, + CELL_NET_CTL_NATINFO_UPNP_USED = 2, +}; + +// STUN NAT statuses +enum +{ + CELL_NET_CTL_NATINFO_STUN_UNCHECKED = 0, + CELL_NET_CTL_NATINFO_STUN_FAILED = 1, + CELL_NET_CTL_NATINFO_STUN_OK = 2, +}; + +// NAT types +enum +{ + CELL_NET_CTL_NATINFO_NAT_TYPE_1 = 1, + CELL_NET_CTL_NATINFO_NAT_TYPE_2 = 2, + CELL_NET_CTL_NATINFO_NAT_TYPE_3 = 3, +}; + +struct CellNetCtlEtherAddr +{ + u8 data[6]; + u8 padding[2]; +}; + +struct CellNetCtlSSID +{ + u8 data[32]; + u8 term; + u8 padding[3]; +}; + +struct CellNetCtlInfo +{ + be_t device; + struct CellNetCtlEtherAddr ether_addr; + be_t mtu; + be_t link; + be_t link_type; + struct CellNetCtlEtherAddr bssid; + struct CellNetCtlSSID ssid; + be_t wlan_security; + be_t auth_8021x_type; + s8 auth_8021x_auth_name[128]; + u8 rssi; + u8 channel; + be_t ip_config; + s8 dhcp_hostname[256]; + s8 pppoe_auth_name[128]; + s8 ip_address[16]; + s8 netmask[16]; + s8 default_route[16]; + s8 primary_dns[16]; + s8 secondary_dns[16]; + be_t http_proxy_config; + s8 http_proxy_server[256]; + be_t http_proxy_port; + be_t upnp_config; +}; + +struct CellNetCtlNetStartDialogParam +{ + be_t size; + be_t type; + be_t cid; +}; + +struct CellNetCtlNetStartDialogResult +{ + be_t size; + be_t result; +}; + +struct CellNetCtlNatInfo +{ + be_t size; + be_t upnp_status; + be_t stun_status; + be_t nat_type; + struct in_addr mapped_addr; +}; \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 0465079533..12dca55fec 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -347,6 +347,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 11ce9c141d..a6f671312e 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -649,6 +649,9 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + Emu\SysCalls\Modules From 18918db012230b237e094774a75a8d6a29bfb858 Mon Sep 17 00:00:00 2001 From: Dante38490 Date: Sun, 3 Aug 2014 03:41:06 +0200 Subject: [PATCH 262/499] Remove the Soft_OAL line Because now that the file is integrated with git it so it became unnecessary. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 98ffc9be25..9701937b1b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,6 @@ If you want to contribute please take a took at the [Coding Style](https://githu __Windows__ * [Visual C++ Redistributable Packages for Visual Studio 2013](http://www.microsoft.com/en-us/download/details.aspx?id=40784) -* [OpenAL binaries](http://kcat.strangesoft.net/openal.html): download and copy `Win64\soft_oal.dll` to `rpcs3\bin\` __Linux__ * Debian & Ubuntu: `sudo apt-get install libopenal-dev libwxgtk3.0-dev build-essential` From 35b00bf8bcf56fd2d47a6a72e32c188033f56ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Mon, 4 Aug 2014 00:07:50 +0200 Subject: [PATCH 263/499] Fixed error of pull request #719 --- rpcs3/Emu/SysCalls/Modules/cellNetCtl.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h index 6b3c5c7291..6a2786eb73 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h @@ -210,12 +210,12 @@ struct CellNetCtlSSID struct CellNetCtlInfo { be_t device; - struct CellNetCtlEtherAddr ether_addr; + CellNetCtlEtherAddr ether_addr; be_t mtu; be_t link; be_t link_type; - struct CellNetCtlEtherAddr bssid; - struct CellNetCtlSSID ssid; + CellNetCtlEtherAddr bssid; + CellNetCtlSSID ssid; be_t wlan_security; be_t auth_8021x_type; s8 auth_8021x_auth_name[128]; @@ -254,5 +254,5 @@ struct CellNetCtlNatInfo be_t upnp_status; be_t stun_status; be_t nat_type; - struct in_addr mapped_addr; + be_t mapped_addr; }; \ No newline at end of file From fa2fa5b4bffee14ccfbd7d2bcdec9f643b2d347d Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 2 Aug 2014 16:20:48 +0800 Subject: [PATCH 264/499] Init cellSail module --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 4 + rpcs3/Emu/SysCalls/Modules/cellSail.cpp | 281 +++++++++++------------- rpcs3/Emu/SysCalls/Modules/cellSail.h | 18 ++ rpcs3/emucore.vcxproj | 4 +- rpcs3/emucore.vcxproj.filters | 8 +- 5 files changed, 165 insertions(+), 150 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellSail.h diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 25523e33b2..e3f354b86e 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -54,6 +54,8 @@ extern void cellResc_init(); extern void cellResc_load(); extern void cellResc_unload(); extern Module *cellResc; +extern void cellSail_init(); +extern Module *cellSail; extern void cellRtc_init(); extern Module *cellRtc; extern void cellSpurs_init(); @@ -237,6 +239,8 @@ void ModuleManager::init() m_mod_init.emplace_back(0x001e, cellL10n_init); cellPamf = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0012, cellPamf_init); + cellSail = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back("cellSail", cellSail_init); cellResc = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x001f, cellResc_init, cellResc_load, cellResc_unload); cellRtc = static_cast (&(m_mod_init.back())) + 1; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp index b301af90b0..e191eea5e0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp @@ -1,27 +1,12 @@ #include "stdafx.h" -#if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" +#include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/Modules.h" -void cellSail_init(); -Module cellSail(0x001d, cellSail_init); +#include "cellSail.h" -// Error Codes -enum -{ - CELL_SAIL_ERROR_INVALID_ARG = 0x80610701, - CELL_SAIL_ERROR_INVALID_STATE = 0x80610702, - CELL_SAIL_ERROR_UNSUPPORTED_STREAM = 0x80610703, - CELL_SAIL_ERROR_INDEX_OUT_OF_RANGE = 0x80610704, - CELL_SAIL_ERROR_EMPTY = 0x80610705, - CELL_SAIL_ERROR_FULLED = 0x80610706, - CELL_SAIL_ERROR_USING = 0x80610707, - CELL_SAIL_ERROR_NOT_AVAILABLE = 0x80610708, - CELL_SAIL_ERROR_CANCEL = 0x80610709, - CELL_SAIL_ERROR_MEMORY = 0x806107F0, - CELL_SAIL_ERROR_INVALID_FD = 0x806107F1, - CELL_SAIL_ERROR_FATAL = 0x806107FF, -}; +Module *cellSail = nullptr; int cellSailMemAllocatorInitialize() { @@ -781,142 +766,142 @@ int cellSailPlayerUnregisterSource() void cellSail_init() { - cellSail.AddFunc(0x346ebba3, cellSailMemAllocatorInitialize); + cellSail->AddFunc(0x346ebba3, cellSailMemAllocatorInitialize); - cellSail.AddFunc(0x4cc54f8e, cellSailFutureInitialize); - cellSail.AddFunc(0x9553af65, cellSailFutureFinalize); - cellSail.AddFunc(0x0c4cb439, cellSailFutureReset); - cellSail.AddFunc(0xa37fed15, cellSailFutureSet); - cellSail.AddFunc(0x3a2d806c, cellSailFutureGet); - cellSail.AddFunc(0x51ecf361, cellSailFutureIsDone); + cellSail->AddFunc(0x4cc54f8e, cellSailFutureInitialize); + cellSail->AddFunc(0x9553af65, cellSailFutureFinalize); + cellSail->AddFunc(0x0c4cb439, cellSailFutureReset); + cellSail->AddFunc(0xa37fed15, cellSailFutureSet); + cellSail->AddFunc(0x3a2d806c, cellSailFutureGet); + cellSail->AddFunc(0x51ecf361, cellSailFutureIsDone); - cellSail.AddFunc(0xd5f9a15b, cellSailDescriptorGetStreamType); - cellSail.AddFunc(0x4c191088, cellSailDescriptorGetUri); - cellSail.AddFunc(0xbd1635f4, cellSailDescriptorGetMediaInfo); - cellSail.AddFunc(0x76b1a425, cellSailDescriptorSetAutoSelection); - cellSail.AddFunc(0x277adf21, cellSailDescriptorIsAutoSelection); - cellSail.AddFunc(0x0abb318b, cellSailDescriptorCreateDatabase); - cellSail.AddFunc(0x28336e89, cellSailDescriptorDestroyDatabase); - cellSail.AddFunc(0xc044fab1, cellSailDescriptorOpen); - cellSail.AddFunc(0x15fd6a2a, cellSailDescriptorClose); - cellSail.AddFunc(0x0d0c2f0c, cellSailDescriptorSetEs); - cellSail.AddFunc(0xdf5553ef, cellSailDescriptorClearEs); - cellSail.AddFunc(0xac9c3b1f, cellSailDescriptorGetCapabilities); - cellSail.AddFunc(0x92590d52, cellSailDescriptorInquireCapability); - cellSail.AddFunc(0xee94b99b, cellSailDescriptorSetParameter); + cellSail->AddFunc(0xd5f9a15b, cellSailDescriptorGetStreamType); + cellSail->AddFunc(0x4c191088, cellSailDescriptorGetUri); + cellSail->AddFunc(0xbd1635f4, cellSailDescriptorGetMediaInfo); + cellSail->AddFunc(0x76b1a425, cellSailDescriptorSetAutoSelection); + cellSail->AddFunc(0x277adf21, cellSailDescriptorIsAutoSelection); + cellSail->AddFunc(0x0abb318b, cellSailDescriptorCreateDatabase); + cellSail->AddFunc(0x28336e89, cellSailDescriptorDestroyDatabase); + cellSail->AddFunc(0xc044fab1, cellSailDescriptorOpen); + cellSail->AddFunc(0x15fd6a2a, cellSailDescriptorClose); + cellSail->AddFunc(0x0d0c2f0c, cellSailDescriptorSetEs); + cellSail->AddFunc(0xdf5553ef, cellSailDescriptorClearEs); + cellSail->AddFunc(0xac9c3b1f, cellSailDescriptorGetCapabilities); + cellSail->AddFunc(0x92590d52, cellSailDescriptorInquireCapability); + cellSail->AddFunc(0xee94b99b, cellSailDescriptorSetParameter); - cellSail.AddFunc(0x3d0d3b72, cellSailSoundAdapterInitialize); - cellSail.AddFunc(0xd1462438, cellSailSoundAdapterFinalize); - cellSail.AddFunc(0x1c9d5e5a, cellSailSoundAdapterSetPreferredFormat); - cellSail.AddFunc(0x7eb8d6b5, cellSailSoundAdapterGetFrame); - cellSail.AddFunc(0xf25f197d, cellSailSoundAdapterGetFormat); - cellSail.AddFunc(0xeec22809, cellSailSoundAdapterUpdateAvSync); - cellSail.AddFunc(0x4ae979df, cellSailSoundAdapterPtsToTimePosition); + cellSail->AddFunc(0x3d0d3b72, cellSailSoundAdapterInitialize); + cellSail->AddFunc(0xd1462438, cellSailSoundAdapterFinalize); + cellSail->AddFunc(0x1c9d5e5a, cellSailSoundAdapterSetPreferredFormat); + cellSail->AddFunc(0x7eb8d6b5, cellSailSoundAdapterGetFrame); + cellSail->AddFunc(0xf25f197d, cellSailSoundAdapterGetFormat); + cellSail->AddFunc(0xeec22809, cellSailSoundAdapterUpdateAvSync); + cellSail->AddFunc(0x4ae979df, cellSailSoundAdapterPtsToTimePosition); - cellSail.AddFunc(0x1c983864, cellSailGraphicsAdapterInitialize); - cellSail.AddFunc(0x76488bb1, cellSailGraphicsAdapterFinalize); - cellSail.AddFunc(0x2e3ccb5e, cellSailGraphicsAdapterSetPreferredFormat); - cellSail.AddFunc(0x0247c69e, cellSailGraphicsAdapterGetFrame); - cellSail.AddFunc(0x018281a8, cellSailGraphicsAdapterGetFrame2); - cellSail.AddFunc(0xffd58aa4, cellSailGraphicsAdapterGetFormat); - cellSail.AddFunc(0x44a20e79, cellSailGraphicsAdapterUpdateAvSync); - cellSail.AddFunc(0x1872331b, cellSailGraphicsAdapterPtsToTimePosition); + cellSail->AddFunc(0x1c983864, cellSailGraphicsAdapterInitialize); + cellSail->AddFunc(0x76488bb1, cellSailGraphicsAdapterFinalize); + cellSail->AddFunc(0x2e3ccb5e, cellSailGraphicsAdapterSetPreferredFormat); + cellSail->AddFunc(0x0247c69e, cellSailGraphicsAdapterGetFrame); + cellSail->AddFunc(0x018281a8, cellSailGraphicsAdapterGetFrame2); + cellSail->AddFunc(0xffd58aa4, cellSailGraphicsAdapterGetFormat); + cellSail->AddFunc(0x44a20e79, cellSailGraphicsAdapterUpdateAvSync); + cellSail->AddFunc(0x1872331b, cellSailGraphicsAdapterPtsToTimePosition); - cellSail.AddFunc(0x3dd9639a, cellSailAuReceiverInitialize); - cellSail.AddFunc(0xed58e3ec, cellSailAuReceiverFinalize); - cellSail.AddFunc(0x3a1132ed, cellSailAuReceiverGet); + cellSail->AddFunc(0x3dd9639a, cellSailAuReceiverInitialize); + cellSail->AddFunc(0xed58e3ec, cellSailAuReceiverFinalize); + cellSail->AddFunc(0x3a1132ed, cellSailAuReceiverGet); - cellSail.AddFunc(0x67b4d01f, cellSailRendererAudioInitialize); - cellSail.AddFunc(0x06dd4174, cellSailRendererAudioFinalize); - cellSail.AddFunc(0xb7b4ecee, cellSailRendererAudioNotifyCallCompleted); - cellSail.AddFunc(0xf841a537, cellSailRendererAudioNotifyFrameDone); - cellSail.AddFunc(0x325039b9, cellSailRendererAudioNotifyOutputEos); + cellSail->AddFunc(0x67b4d01f, cellSailRendererAudioInitialize); + cellSail->AddFunc(0x06dd4174, cellSailRendererAudioFinalize); + cellSail->AddFunc(0xb7b4ecee, cellSailRendererAudioNotifyCallCompleted); + cellSail->AddFunc(0xf841a537, cellSailRendererAudioNotifyFrameDone); + cellSail->AddFunc(0x325039b9, cellSailRendererAudioNotifyOutputEos); - cellSail.AddFunc(0x8d1ff475, cellSailRendererVideoInitialize); - cellSail.AddFunc(0x47055fea, cellSailRendererVideoFinalize); - cellSail.AddFunc(0x954f48f8, cellSailRendererVideoNotifyCallCompleted); - cellSail.AddFunc(0x5f77e8df, cellSailRendererVideoNotifyFrameDone); - cellSail.AddFunc(0xdff1cda2, cellSailRendererVideoNotifyOutputEos); + cellSail->AddFunc(0x8d1ff475, cellSailRendererVideoInitialize); + cellSail->AddFunc(0x47055fea, cellSailRendererVideoFinalize); + cellSail->AddFunc(0x954f48f8, cellSailRendererVideoNotifyCallCompleted); + cellSail->AddFunc(0x5f77e8df, cellSailRendererVideoNotifyFrameDone); + cellSail->AddFunc(0xdff1cda2, cellSailRendererVideoNotifyOutputEos); - cellSail.AddFunc(0x9d30bdce, cellSailSourceInitialize); - cellSail.AddFunc(0xee724c99, cellSailSourceFinalize); - cellSail.AddFunc(0x764ec2d2, cellSailSourceNotifyCallCompleted); - cellSail.AddFunc(0x54c53688, cellSailSourceNotifyInputEos); - cellSail.AddFunc(0x95ee1695, cellSailSourceNotifyStreamOut); - cellSail.AddFunc(0xf289f0cd, cellSailSourceNotifySessionError); - cellSail.AddFunc(0xf4009a94, cellSailSourceNotifyMediaStateChanged); - //cellSail.AddFunc(, cellSailSourceCheck); - cellSail.AddFunc(0x3df98d41, cellSailSourceNotifyOpenCompleted); - cellSail.AddFunc(0x640c7278, cellSailSourceNotifyStartCompleted); - cellSail.AddFunc(0x7473970a, cellSailSourceNotifyStopCompleted); - cellSail.AddFunc(0x946ecca0, cellSailSourceNotifyReadCompleted); - cellSail.AddFunc(0xbdb2251a, cellSailSourceSetDiagHandler); - cellSail.AddFunc(0xc457b203, cellSailSourceNotifyCloseCompleted); + cellSail->AddFunc(0x9d30bdce, cellSailSourceInitialize); + cellSail->AddFunc(0xee724c99, cellSailSourceFinalize); + cellSail->AddFunc(0x764ec2d2, cellSailSourceNotifyCallCompleted); + cellSail->AddFunc(0x54c53688, cellSailSourceNotifyInputEos); + cellSail->AddFunc(0x95ee1695, cellSailSourceNotifyStreamOut); + cellSail->AddFunc(0xf289f0cd, cellSailSourceNotifySessionError); + cellSail->AddFunc(0xf4009a94, cellSailSourceNotifyMediaStateChanged); + //cellSail->AddFunc(, cellSailSourceCheck); + cellSail->AddFunc(0x3df98d41, cellSailSourceNotifyOpenCompleted); + cellSail->AddFunc(0x640c7278, cellSailSourceNotifyStartCompleted); + cellSail->AddFunc(0x7473970a, cellSailSourceNotifyStopCompleted); + cellSail->AddFunc(0x946ecca0, cellSailSourceNotifyReadCompleted); + cellSail->AddFunc(0xbdb2251a, cellSailSourceSetDiagHandler); + cellSail->AddFunc(0xc457b203, cellSailSourceNotifyCloseCompleted); - cellSail.AddFunc(0xb980b76e, cellSailMp4MovieGetBrand); - cellSail.AddFunc(0xd4049de0, cellSailMp4MovieIsCompatibleBrand); - cellSail.AddFunc(0x5783a454, cellSailMp4MovieGetMovieInfo); - cellSail.AddFunc(0x5faf802b, cellSailMp4MovieGetTrackByIndex); - cellSail.AddFunc(0x85b07126, cellSailMp4MovieGetTrackById); - cellSail.AddFunc(0xc2d90ec9, cellSailMp4MovieGetTrackByTypeAndIndex); - cellSail.AddFunc(0xa48be428, cellSailMp4TrackGetTrackInfo); - cellSail.AddFunc(0x72236ec1, cellSailMp4TrackGetTrackReferenceCount); - cellSail.AddFunc(0x5f44f64f, cellSailMp4TrackGetTrackReference); - //cellSail.AddFunc(, cellSailMp4ConvertTimeScale); + cellSail->AddFunc(0xb980b76e, cellSailMp4MovieGetBrand); + cellSail->AddFunc(0xd4049de0, cellSailMp4MovieIsCompatibleBrand); + cellSail->AddFunc(0x5783a454, cellSailMp4MovieGetMovieInfo); + cellSail->AddFunc(0x5faf802b, cellSailMp4MovieGetTrackByIndex); + cellSail->AddFunc(0x85b07126, cellSailMp4MovieGetTrackById); + cellSail->AddFunc(0xc2d90ec9, cellSailMp4MovieGetTrackByTypeAndIndex); + cellSail->AddFunc(0xa48be428, cellSailMp4TrackGetTrackInfo); + cellSail->AddFunc(0x72236ec1, cellSailMp4TrackGetTrackReferenceCount); + cellSail->AddFunc(0x5f44f64f, cellSailMp4TrackGetTrackReference); + //cellSail->AddFunc(, cellSailMp4ConvertTimeScale); - cellSail.AddFunc(0x6e83f5c0, cellSailAviMovieGetMovieInfo); - cellSail.AddFunc(0x3e908c56, cellSailAviMovieGetStreamByIndex); - cellSail.AddFunc(0xddebd2a5, cellSailAviMovieGetStreamByTypeAndIndex); - cellSail.AddFunc(0x10298371, cellSailAviMovieGetHeader); - cellSail.AddFunc(0xc09e2f23, cellSailAviStreamGetMediaType); - cellSail.AddFunc(0xcc3cca60, cellSailAviStreamGetHeader); + cellSail->AddFunc(0x6e83f5c0, cellSailAviMovieGetMovieInfo); + cellSail->AddFunc(0x3e908c56, cellSailAviMovieGetStreamByIndex); + cellSail->AddFunc(0xddebd2a5, cellSailAviMovieGetStreamByTypeAndIndex); + cellSail->AddFunc(0x10298371, cellSailAviMovieGetHeader); + cellSail->AddFunc(0xc09e2f23, cellSailAviStreamGetMediaType); + cellSail->AddFunc(0xcc3cca60, cellSailAviStreamGetHeader); - cellSail.AddFunc(0x17932b26, cellSailPlayerInitialize); - cellSail.AddFunc(0x23654375, cellSailPlayerInitialize2); - cellSail.AddFunc(0x18b4629d, cellSailPlayerFinalize); - cellSail.AddFunc(0xbedccc74, cellSailPlayerRegisterSource); - cellSail.AddFunc(0x186b98d3, cellSailPlayerGetRegisteredProtocols); - cellSail.AddFunc(0x1139a206, cellSailPlayerSetSoundAdapter); - cellSail.AddFunc(0x18bcd21b, cellSailPlayerSetGraphicsAdapter); - cellSail.AddFunc(0xf5747e1f, cellSailPlayerSetAuReceiver); - cellSail.AddFunc(0x92eaf6ca, cellSailPlayerSetRendererAudio); - cellSail.AddFunc(0xecf56150, cellSailPlayerSetRendererVideo); - cellSail.AddFunc(0x5f7c7a6f, cellSailPlayerSetParameter); - cellSail.AddFunc(0x952269c9, cellSailPlayerGetParameter); - cellSail.AddFunc(0x6f0b1002, cellSailPlayerSubscribeEvent); - cellSail.AddFunc(0x69793952, cellSailPlayerUnsubscribeEvent); - cellSail.AddFunc(0x47632810, cellSailPlayerReplaceEventHandler); - cellSail.AddFunc(0xbdf21b0f, cellSailPlayerBoot); - cellSail.AddFunc(0xd7938b8d, cellSailPlayerCreateDescriptor); - cellSail.AddFunc(0xfc839bd4, cellSailPlayerDestroyDescriptor); - cellSail.AddFunc(0x7c8dff3b, cellSailPlayerAddDescriptor); - cellSail.AddFunc(0x9897fbd1, cellSailPlayerRemoveDescriptor); - cellSail.AddFunc(0x752f8585, cellSailPlayerGetDescriptorCount); - cellSail.AddFunc(0x75fca288, cellSailPlayerGetCurrentDescriptor); - cellSail.AddFunc(0x34ecc1b9, cellSailPlayerOpenStream); - cellSail.AddFunc(0x85beffcc, cellSailPlayerCloseStream); - cellSail.AddFunc(0x145f9b11, cellSailPlayerOpenEsAudio); - cellSail.AddFunc(0x477501f6, cellSailPlayerOpenEsVideo); - cellSail.AddFunc(0xa849d0a7, cellSailPlayerOpenEsUser); - cellSail.AddFunc(0x4fa5ad09, cellSailPlayerReopenEsAudio); - cellSail.AddFunc(0xf60a8a69, cellSailPlayerReopenEsVideo); - cellSail.AddFunc(0x7b6fa92e, cellSailPlayerReopenEsUser); - cellSail.AddFunc(0xbf9b8d72, cellSailPlayerCloseEsAudio); - cellSail.AddFunc(0x07924359, cellSailPlayerCloseEsVideo); - cellSail.AddFunc(0xaed9d6cd, cellSailPlayerCloseEsUser); - cellSail.AddFunc(0xe535b0d3, cellSailPlayerStart); - cellSail.AddFunc(0xeba8d4ec, cellSailPlayerStop); - cellSail.AddFunc(0x26563ddc, cellSailPlayerNext); - cellSail.AddFunc(0x950d53c1, cellSailPlayerCancel); - cellSail.AddFunc(0xd1d55a90, cellSailPlayerSetPaused); - cellSail.AddFunc(0xaafa17b8, cellSailPlayerIsPaused); - cellSail.AddFunc(0xfc5baf8a, cellSailPlayerSetRepeatMode); - cellSail.AddFunc(0x38144ecf, cellSailPlayerGetRepeatMode); - cellSail.AddFunc(0x91d287f6, cellSailPlayerSetEsAudioMuted); - cellSail.AddFunc(0xf1446a40, cellSailPlayerSetEsVideoMuted); - cellSail.AddFunc(0x09de25fd, cellSailPlayerIsEsAudioMuted); - cellSail.AddFunc(0xdbe32ed4, cellSailPlayerIsEsVideoMuted); - cellSail.AddFunc(0xcc987ba6, cellSailPlayerDumpImage); - cellSail.AddFunc(0x025b4974, cellSailPlayerUnregisterSource); + cellSail->AddFunc(0x17932b26, cellSailPlayerInitialize); + cellSail->AddFunc(0x23654375, cellSailPlayerInitialize2); + cellSail->AddFunc(0x18b4629d, cellSailPlayerFinalize); + cellSail->AddFunc(0xbedccc74, cellSailPlayerRegisterSource); + cellSail->AddFunc(0x186b98d3, cellSailPlayerGetRegisteredProtocols); + cellSail->AddFunc(0x1139a206, cellSailPlayerSetSoundAdapter); + cellSail->AddFunc(0x18bcd21b, cellSailPlayerSetGraphicsAdapter); + cellSail->AddFunc(0xf5747e1f, cellSailPlayerSetAuReceiver); + cellSail->AddFunc(0x92eaf6ca, cellSailPlayerSetRendererAudio); + cellSail->AddFunc(0xecf56150, cellSailPlayerSetRendererVideo); + cellSail->AddFunc(0x5f7c7a6f, cellSailPlayerSetParameter); + cellSail->AddFunc(0x952269c9, cellSailPlayerGetParameter); + cellSail->AddFunc(0x6f0b1002, cellSailPlayerSubscribeEvent); + cellSail->AddFunc(0x69793952, cellSailPlayerUnsubscribeEvent); + cellSail->AddFunc(0x47632810, cellSailPlayerReplaceEventHandler); + cellSail->AddFunc(0xbdf21b0f, cellSailPlayerBoot); + cellSail->AddFunc(0xd7938b8d, cellSailPlayerCreateDescriptor); + cellSail->AddFunc(0xfc839bd4, cellSailPlayerDestroyDescriptor); + cellSail->AddFunc(0x7c8dff3b, cellSailPlayerAddDescriptor); + cellSail->AddFunc(0x9897fbd1, cellSailPlayerRemoveDescriptor); + cellSail->AddFunc(0x752f8585, cellSailPlayerGetDescriptorCount); + cellSail->AddFunc(0x75fca288, cellSailPlayerGetCurrentDescriptor); + cellSail->AddFunc(0x34ecc1b9, cellSailPlayerOpenStream); + cellSail->AddFunc(0x85beffcc, cellSailPlayerCloseStream); + cellSail->AddFunc(0x145f9b11, cellSailPlayerOpenEsAudio); + cellSail->AddFunc(0x477501f6, cellSailPlayerOpenEsVideo); + cellSail->AddFunc(0xa849d0a7, cellSailPlayerOpenEsUser); + cellSail->AddFunc(0x4fa5ad09, cellSailPlayerReopenEsAudio); + cellSail->AddFunc(0xf60a8a69, cellSailPlayerReopenEsVideo); + cellSail->AddFunc(0x7b6fa92e, cellSailPlayerReopenEsUser); + cellSail->AddFunc(0xbf9b8d72, cellSailPlayerCloseEsAudio); + cellSail->AddFunc(0x07924359, cellSailPlayerCloseEsVideo); + cellSail->AddFunc(0xaed9d6cd, cellSailPlayerCloseEsUser); + cellSail->AddFunc(0xe535b0d3, cellSailPlayerStart); + cellSail->AddFunc(0xeba8d4ec, cellSailPlayerStop); + cellSail->AddFunc(0x26563ddc, cellSailPlayerNext); + cellSail->AddFunc(0x950d53c1, cellSailPlayerCancel); + cellSail->AddFunc(0xd1d55a90, cellSailPlayerSetPaused); + cellSail->AddFunc(0xaafa17b8, cellSailPlayerIsPaused); + cellSail->AddFunc(0xfc5baf8a, cellSailPlayerSetRepeatMode); + cellSail->AddFunc(0x38144ecf, cellSailPlayerGetRepeatMode); + cellSail->AddFunc(0x91d287f6, cellSailPlayerSetEsAudioMuted); + cellSail->AddFunc(0xf1446a40, cellSailPlayerSetEsVideoMuted); + cellSail->AddFunc(0x09de25fd, cellSailPlayerIsEsAudioMuted); + cellSail->AddFunc(0xdbe32ed4, cellSailPlayerIsEsVideoMuted); + cellSail->AddFunc(0xcc987ba6, cellSailPlayerDumpImage); + cellSail->AddFunc(0x025b4974, cellSailPlayerUnregisterSource); } -#endif + diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.h b/rpcs3/Emu/SysCalls/Modules/cellSail.h new file mode 100644 index 0000000000..924567b65b --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.h @@ -0,0 +1,18 @@ +#pragma once + +// Error Codes +enum +{ + CELL_SAIL_ERROR_INVALID_ARG = 0x80610701, + CELL_SAIL_ERROR_INVALID_STATE = 0x80610702, + CELL_SAIL_ERROR_UNSUPPORTED_STREAM = 0x80610703, + CELL_SAIL_ERROR_INDEX_OUT_OF_RANGE = 0x80610704, + CELL_SAIL_ERROR_EMPTY = 0x80610705, + CELL_SAIL_ERROR_FULLED = 0x80610706, + CELL_SAIL_ERROR_USING = 0x80610707, + CELL_SAIL_ERROR_NOT_AVAILABLE = 0x80610708, + CELL_SAIL_ERROR_CANCEL = 0x80610709, + CELL_SAIL_ERROR_MEMORY = 0x806107F0, + CELL_SAIL_ERROR_INVALID_FD = 0x806107F1, + CELL_SAIL_ERROR_FATAL = 0x806107FF, +}; diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 12dca55fec..2ed228080d 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -151,6 +151,7 @@ + @@ -351,6 +352,7 @@ + @@ -563,4 +565,4 @@ - \ No newline at end of file + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index a6f671312e..5a9604bec4 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -170,6 +170,9 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + Emu\SysCalls\Modules @@ -658,6 +661,9 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + Emu\SysCalls\Modules @@ -1100,4 +1106,4 @@ Emu\SysCalls - \ No newline at end of file + From 7f5cc96842946d7e0733678f393e330cdff670ae Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 3 Aug 2014 14:31:59 +0800 Subject: [PATCH 265/499] RSX : fix opengl error 0x505 --- rpcs3/Emu/GS/GL/GLGSRender.cpp | 34 +++++++++++++++++----------------- rpcs3/Emu/GS/RSXThread.cpp | 6 +++--- rpcs3/Emu/GS/RSXThread.h | 2 -- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 9126fba185..184510d77b 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -442,7 +442,7 @@ void GLGSRender::WriteBuffers() if (Ini.GSDumpDepthBuffer.GetValue()) { glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[4]); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_width * RSXThread::m_height * 4, 0, GL_STREAM_READ); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteDepthBuffer(); } @@ -468,12 +468,12 @@ void GLGSRender::WriteDepthBuffer() } glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[4]); checkForGlError("WriteDepthBuffer(): glBindBuffer"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); + glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); checkForGlError("WriteDepthBuffer(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + memcpy(&Memory[address], packed, RSXThread::m_width * RSXThread::m_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteDepthBuffer(): glUnmapBuffer"); } @@ -482,7 +482,7 @@ void GLGSRender::WriteDepthBuffer() checkForGlError("WriteDepthBuffer(): glReadPixels"); glBindTexture(GL_TEXTURE_2D, g_depth_tex); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, RSXThread::m_buffer_width, RSXThread::m_buffer_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &Memory[address]); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, RSXThread::m_width, RSXThread::m_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, &Memory[address]); checkForGlError("WriteDepthBuffer(): glTexImage2D"); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, &Memory[address]); checkForGlError("WriteDepthBuffer(): glGetTexImage"); @@ -506,12 +506,12 @@ void GLGSRender::WriteColorBufferA() checkForGlError("WriteColorBufferA(): glReadBuffer"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[0]); checkForGlError("WriteColorBufferA(): glBindBuffer"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); + glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColorBufferA(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + memcpy(&Memory[address], packed, RSXThread::m_width * RSXThread::m_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteColorBufferA(): glUnmapBuffer"); } @@ -537,12 +537,12 @@ void GLGSRender::WriteColorBufferB() checkForGlError("WriteColorBufferB(): glReadBuffer"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[1]); checkForGlError("WriteColorBufferB(): glBindBuffer"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); + glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColorBufferB(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + memcpy(&Memory[address], packed, RSXThread::m_width * RSXThread::m_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteColorBufferB(): glUnmapBuffer"); } @@ -568,12 +568,12 @@ void GLGSRender::WriteColorBufferC() checkForGlError("WriteColorBufferC(): glReadBuffer"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[2]); checkForGlError("WriteColorBufferC(): glBindBuffer"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); + glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColorBufferC(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + memcpy(&Memory[address], packed, RSXThread::m_width * RSXThread::m_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteColorBufferC(): glUnmapBuffer"); } @@ -599,12 +599,12 @@ void GLGSRender::WriteColorBufferD() checkForGlError("WriteColorBufferD(): glReadBuffer"); glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[3]); checkForGlError("WriteColorBufferD(): glBindBuffer"); - glReadPixels(0, 0, RSXThread::m_buffer_width, RSXThread::m_buffer_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); + glReadPixels(0, 0, RSXThread::m_width, RSXThread::m_height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); checkForGlError("WriteColorBufferD(): glReadPixels"); GLubyte *packed = (GLubyte *)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (packed) { - memcpy(&Memory[address], packed, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4); + memcpy(&Memory[address], packed, RSXThread::m_width * RSXThread::m_height * 4); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); checkForGlError("WriteColorBufferD(): glUnmapBuffer"); } @@ -625,14 +625,14 @@ void GLGSRender::WriteColorBuffers() case CELL_GCM_SURFACE_TARGET_0: glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[0]); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_width * RSXThread::m_height * 4, 0, GL_STREAM_READ); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteColorBufferA(); break; case CELL_GCM_SURFACE_TARGET_1: glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[1]); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_width * RSXThread::m_height * 4, 0, GL_STREAM_READ); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteColorBufferB(); break; @@ -641,7 +641,7 @@ void GLGSRender::WriteColorBuffers() for (int i = 0; i < 2; i++) { glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[i]); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_width * RSXThread::m_height * 4, 0, GL_STREAM_READ); } WriteColorBufferA(); WriteColorBufferB(); @@ -651,7 +651,7 @@ void GLGSRender::WriteColorBuffers() for (int i = 0; i < 3; i++) { glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[i]); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_width * RSXThread::m_height * 4, 0, GL_STREAM_READ); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteColorBufferA(); @@ -663,7 +663,7 @@ void GLGSRender::WriteColorBuffers() for (int i = 0; i < 4; i++) { glBindBuffer(GL_PIXEL_PACK_BUFFER, g_pbo[i]); - glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_buffer_width * RSXThread::m_buffer_height * 4, 0, GL_STREAM_READ); + glBufferData(GL_PIXEL_PACK_BUFFER, RSXThread::m_width * RSXThread::m_height * 4, 0, GL_STREAM_READ); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); WriteColorBufferA(); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index b1f377b4f7..295768b92a 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1321,11 +1321,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(m_gcm_buffers_addr); - m_width = m_buffer_width = re(buffers[m_gcm_current_buffer].width); - m_height = m_buffer_height = re(buffers[m_gcm_current_buffer].height); + m_width = re(buffers[m_gcm_current_buffer].width); + m_height = re(buffers[m_gcm_current_buffer].height); // Rescale native resolution to fit 1080p/720p/480p/576p window size - nativeRescale((float)m_buffer_width, (float)m_buffer_height); + nativeRescale((float)m_width, (float)m_height); } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 6cbdfc8c55..8e8f592362 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -141,8 +141,6 @@ public: u32 m_width; u32 m_height; - u32 m_buffer_width; - u32 m_buffer_height; float m_width_scale; float m_height_scale; u32 m_draw_array_count; From 48a339fd17489f1658ae0faa2c51017f1ba6250d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Fri, 1 Aug 2014 01:52:43 +0200 Subject: [PATCH 266/499] cellGcmSys updated * cellGcmGetTiledPitchSize (thanks 3141card), cellGcmFunc15. * sysPrxForUser: _sys_memset * Created headers cellGcmSys.h and sysPrxForUser.h * int, int32_t -> s32 and uint32_t -> u32. --- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 103 ++++++++----------- rpcs3/Emu/SysCalls/Modules/cellGcmSys.h | 35 +++++++ rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 25 ++--- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h | 18 ++++ rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 ++ 6 files changed, 115 insertions(+), 74 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellGcmSys.h create mode 100644 rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 73c6065272..9c31b9130d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -5,6 +5,8 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/GS/GCM.h" +#include "sysPrxForUser.h" +#include "cellGcmSys.h" //void cellGcmSys_init(); //void cellGcmSys_load(); @@ -12,48 +14,22 @@ //Module cellGcmSys(0x0010, cellGcmSys_init, cellGcmSys_load, cellGcmSys_unload); Module *cellGcmSys = nullptr; +const u32 tiled_pitches[] = { + 0x00000000, 0x00000200, 0x00000300, 0x00000400, + 0x00000500, 0x00000600, 0x00000700, 0x00000800, + 0x00000A00, 0x00000C00, 0x00000D00, 0x00000E00, + 0x00001000, 0x00001400, 0x00001800, 0x00001A00, + 0x00001C00, 0x00002000, 0x00002800, 0x00003000, + 0x00003400, 0x00003800, 0x00004000, 0x00005000, + 0x00006000, 0x00006800, 0x00007000, 0x00008000, + 0x0000A000, 0x0000C000, 0x0000D000, 0x0000E000, + 0x00010000 +}; + u32 local_size = 0; u32 local_addr = 0; u32 system_mode = 0; -enum -{ - CELL_GCM_ERROR_FAILURE = 0x802100ff, - CELL_GCM_ERROR_NO_IO_PAGE_TABLE = 0x80210001, - CELL_GCM_ERROR_INVALID_ENUM = 0x80210002, - CELL_GCM_ERROR_INVALID_VALUE = 0x80210003, - CELL_GCM_ERROR_INVALID_ALIGNMENT = 0x80210004, - CELL_GCM_ERROR_ADDRESS_OVERWRAP = 0x80210005 -}; - -// Function declaration -int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id); - -//---------------------------------------------------------------------------- -// Memory Mapping -//---------------------------------------------------------------------------- - -struct gcm_offset -{ - u64 io; - u64 ea; -}; - -void InitOffsetTable(); -int32_t cellGcmAddressToOffset(u64 address, mem32_t offset); -uint32_t cellGcmGetMaxIoMapSize(); -void cellGcmGetOffsetTable(mem_ptr_t table); -int32_t cellGcmIoOffsetToAddress(u32 ioOffset, u64 address); -int32_t cellGcmMapEaIoAddress(const u32 ea, const u32 io, const u32 size); -int32_t cellGcmMapEaIoAddressWithFlags(const u32 ea, const u32 io, const u32 size, const u32 flags); -int32_t cellGcmMapMainMemory(u64 ea, u32 size, mem32_t offset); -int32_t cellGcmReserveIoMapSize(const u32 size); -int32_t cellGcmUnmapEaIoAddress(u64 ea); -int32_t cellGcmUnmapIoAddress(u64 io); -int32_t cellGcmUnreserveIoMapSize(u32 size); - -//---------------------------------------------------------------------------- - CellGcmConfig current_config; CellGcmContextData current_context; gcmInfo gcm_info; @@ -287,10 +263,14 @@ int cellGcmGetFlipStatus() u32 cellGcmGetTiledPitchSize(u32 size) { - cellGcmSys->Warning("cellGcmGetTiledPitchSize(size=%d)", size); - // TODO: + cellGcmSys->Log("cellGcmGetTiledPitchSize(size=%d)", size); - return size; + for (size_t i=0; i < sizeof(tiled_pitches)/sizeof(tiled_pitches[0]) - 1; i++) { + if (tiled_pitches[i] < size && size <= tiled_pitches[i+1]) { + return tiled_pitches[i+1]; + } + } + return 0; } int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) @@ -467,7 +447,7 @@ void cellGcmSetFlipStatus() Emu.GetGSManager().GetRender().m_flip_status = 0; } -int cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) +s32 cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) { cellGcmSys->Log("cellGcmSetPrepareFlip(ctx=0x%x, id=0x%x)", ctxt.GetAddr(), id); @@ -808,7 +788,7 @@ void InitOffsetTable() } } -int32_t cellGcmAddressToOffset(u64 address, mem32_t offset) +s32 cellGcmAddressToOffset(u64 address, mem32_t offset) { cellGcmSys->Log("cellGcmAddressToOffset(address=0x%x,offset_addr=0x%x)", address, offset.GetAddr()); @@ -827,14 +807,11 @@ int32_t cellGcmAddressToOffset(u64 address, mem32_t offset) { u16 upper12Bits = Memory.Read16(offsetTable.io + sizeof(u16)*(address >> 20)); - if (upper12Bits != 0xFFFF) - { + if (upper12Bits != 0xFFFF) { result = (((u64)upper12Bits << 20) | (address & (0xFFFFF))); } // address is not mapped in IO - else - { - + else { return CELL_GCM_ERROR_FAILURE; } } @@ -843,7 +820,7 @@ int32_t cellGcmAddressToOffset(u64 address, mem32_t offset) return CELL_OK; } -uint32_t cellGcmGetMaxIoMapSize() +u32 cellGcmGetMaxIoMapSize() { return Memory.RSXIOMem.GetEndAddr() - Memory.RSXIOMem.GetStartAddr() - Memory.RSXIOMem.GetReservedAmount(); } @@ -854,7 +831,7 @@ void cellGcmGetOffsetTable(mem_ptr_t table) table->ea = re(offsetTable.ea); } -int32_t cellGcmIoOffsetToAddress(u32 ioOffset, u64 address) +s32 cellGcmIoOffsetToAddress(u32 ioOffset, u64 address) { u64 realAddr; @@ -866,7 +843,7 @@ int32_t cellGcmIoOffsetToAddress(u32 ioOffset, u64 address) return CELL_OK; } -int32_t cellGcmMapEaIoAddress(const u32 ea, const u32 io, const u32 size) +s32 cellGcmMapEaIoAddress(u32 ea, u32 io, u32 size) { cellGcmSys->Warning("cellGcmMapEaIoAddress(ea=0x%x, io=0x%x, size=0x%x)", ea, io, size); @@ -891,13 +868,13 @@ int32_t cellGcmMapEaIoAddress(const u32 ea, const u32 io, const u32 size) return CELL_OK; } -int32_t cellGcmMapEaIoAddressWithFlags(const u32 ea, const u32 io, const u32 size, const u32 flags) +s32 cellGcmMapEaIoAddressWithFlags(u32 ea, u32 io, u32 size, u32 flags) { cellGcmSys->Warning("cellGcmMapEaIoAddressWithFlags(ea=0x%x, io=0x%x, size=0x%x, flags=0x%x)", ea, io, size, flags); return cellGcmMapEaIoAddress(ea, io, size); // TODO: strict ordering } -int32_t cellGcmMapLocalMemory(u64 address, u64 size) +s32 cellGcmMapLocalMemory(u64 address, u64 size) { if (!local_size && !local_addr) { @@ -916,7 +893,7 @@ int32_t cellGcmMapLocalMemory(u64 address, u64 size) return CELL_OK; } -int32_t cellGcmMapMainMemory(u64 ea, u32 size, mem32_t offset) +s32 cellGcmMapMainMemory(u64 ea, u32 size, mem32_t offset) { cellGcmSys->Warning("cellGcmMapMainMemory(ea=0x%x,size=0x%x,offset_addr=0x%x)", ea, size, offset.GetAddr()); @@ -950,7 +927,7 @@ int32_t cellGcmMapMainMemory(u64 ea, u32 size, mem32_t offset) return CELL_OK; } -int32_t cellGcmReserveIoMapSize(const u32 size) +s32 cellGcmReserveIoMapSize(u32 size) { if (size & 0xFFFFF) { @@ -968,7 +945,7 @@ int32_t cellGcmReserveIoMapSize(const u32 size) return CELL_OK; } -int32_t cellGcmUnmapEaIoAddress(u64 ea) +s32 cellGcmUnmapEaIoAddress(u64 ea) { u32 size = Memory.RSXIOMem.UnmapRealAddress(ea); if (size) @@ -992,7 +969,7 @@ int32_t cellGcmUnmapEaIoAddress(u64 ea) return CELL_OK; } -int32_t cellGcmUnmapIoAddress(u64 io) +s32 cellGcmUnmapIoAddress(u64 io) { u32 size = Memory.RSXIOMem.UnmapAddress(io); if (size) @@ -1016,7 +993,7 @@ int32_t cellGcmUnmapIoAddress(u64 io) return CELL_OK; } -int32_t cellGcmUnreserveIoMapSize(u32 size) +s32 cellGcmUnreserveIoMapSize(u32 size) { if (size & 0xFFFFF) @@ -1094,9 +1071,15 @@ int cellGcmSetFlipCommand(u32 ctx, u32 id) return cellGcmSetPrepareFlip(ctx, id); } -s64 cellGcmFunc15() +s64 cellGcmFunc15(u32 unk_addr) { - cellGcmSys->Todo("cellGcmFunc15()"); + cellGcmSys->Todo("cellGcmFunc15(unk_addr=0x%x)", unk_addr); + + if (0/*TODO: If what?*/) { + _sys_memset(unk_addr, 0, 0x84); + } + + // TODO return 0; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.h b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.h new file mode 100644 index 0000000000..610b177edc --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.h @@ -0,0 +1,35 @@ +#pragma once + +enum +{ + CELL_GCM_ERROR_FAILURE = 0x802100ff, + CELL_GCM_ERROR_NO_IO_PAGE_TABLE = 0x80210001, + CELL_GCM_ERROR_INVALID_ENUM = 0x80210002, + CELL_GCM_ERROR_INVALID_VALUE = 0x80210003, + CELL_GCM_ERROR_INVALID_ALIGNMENT = 0x80210004, + CELL_GCM_ERROR_ADDRESS_OVERWRAP = 0x80210005 +}; + +struct gcm_offset +{ + u64 io; + u64 ea; +}; + +// Auxiliary functions +void InitOffsetTable(); + +// SysCalls +s32 cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id); + +s32 cellGcmAddressToOffset(u64 address, mem32_t offset); +u32 cellGcmGetMaxIoMapSize(); +void cellGcmGetOffsetTable(mem_ptr_t table); +s32 cellGcmIoOffsetToAddress(u32 ioOffset, u64 address); +s32 cellGcmMapEaIoAddress(u32 ea, u32 io, u32 size); +s32 cellGcmMapEaIoAddressWithFlags(u32 ea, u32 io, u32 size, u32 flags); +s32 cellGcmMapMainMemory(u64 ea, u32 size, mem32_t offset); +s32 cellGcmReserveIoMapSize(u32 size); +s32 cellGcmUnmapEaIoAddress(u64 ea); +s32 cellGcmUnmapIoAddress(u64 io); +s32 cellGcmUnreserveIoMapSize(u32 size); diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index d114db9933..2ab01ebac4 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -10,25 +10,12 @@ #include "Emu/SysCalls/lv2/sys_spu.h" #include "Loader/ELF.h" #include "Emu/Cell/RawSPUThread.h" +#include "sysPrxForUser.h" //void sysPrxForUser_init(); //Module sysPrxForUser("sysPrxForUser", sysPrxForUser_init); Module *sysPrxForUser = nullptr; -struct HeapInfo -{ - u32 heap_addr; - u32 align; - u32 size; - - HeapInfo(u32 _heap_addr, u32 _align, u32 _size) - : heap_addr(_heap_addr) - , align(_align) - , size(_size) - { - } -}; - 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); @@ -177,6 +164,14 @@ int sys_raw_spu_image_load(int id, mem_ptr_t img) return CELL_OK; } +s32 _sys_memset(u32 addr, s32 value, u32 size) +{ + sysPrxForUser->Log("_sys_memset(addr=0x%x, value=%d, size=%d)", addr, value, size); + + memset(Memory + addr, value, size); + return CELL_OK; +} + void sysPrxForUser_init() { sysPrxForUser->AddFunc(0x744680a2, sys_initialize_tls); @@ -249,4 +244,6 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0x67f9fedb, sys_game_process_exitspawn2); sysPrxForUser->AddFunc(0xfc52a7a9, sys_game_process_exitspawn); + + sysPrxForUser->AddFunc(0x68b9b011, _sys_memset); } diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h new file mode 100644 index 0000000000..d32efb69c5 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h @@ -0,0 +1,18 @@ +# pragma once + +struct HeapInfo +{ + u32 heap_addr; + u32 align; + u32 size; + + HeapInfo(u32 _heap_addr, u32 _align, u32 _size) + : heap_addr(_heap_addr) + , align(_align) + , size(_size) + { + } +}; + +// SysCalls +s32 _sys_memset(u32 addr, s32 value, u32 num); diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 2ed228080d..8c856e1d45 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -346,6 +346,7 @@ + @@ -367,6 +368,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 5a9604bec4..3b692b7c0a 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1105,5 +1105,11 @@ Emu\SysCalls + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + From f07c35d9aeb7dfd476c5e933aa3f0602e916c77d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Mon, 4 Aug 2014 01:33:57 +0200 Subject: [PATCH 267/499] Renamed Emu/GS -> Emu/RSX --- rpcs3/Emu/{GS => RSX}/GCM.h | 0 rpcs3/Emu/{GS => RSX}/GL/GLBuffers.cpp | 0 rpcs3/Emu/{GS => RSX}/GL/GLBuffers.h | 0 .../Emu/{GS => RSX}/GL/GLFragmentProgram.cpp | 0 rpcs3/Emu/{GS => RSX}/GL/GLFragmentProgram.h | 2 +- rpcs3/Emu/{GS => RSX}/GL/GLGSRender.cpp | 0 rpcs3/Emu/{GS => RSX}/GL/GLGSRender.h | 4 +- rpcs3/Emu/{GS => RSX}/GL/GLProcTable.h | 0 rpcs3/Emu/{GS => RSX}/GL/GLProgram.cpp | 0 rpcs3/Emu/{GS => RSX}/GL/GLProgram.h | 0 rpcs3/Emu/{GS => RSX}/GL/GLProgramBuffer.cpp | 0 rpcs3/Emu/{GS => RSX}/GL/GLProgramBuffer.h | 0 rpcs3/Emu/{GS => RSX}/GL/GLShaderParam.h | 0 rpcs3/Emu/{GS => RSX}/GL/GLVertexProgram.cpp | 0 rpcs3/Emu/{GS => RSX}/GL/GLVertexProgram.h | 2 +- rpcs3/Emu/{GS => RSX}/GL/OpenGL.cpp | 0 rpcs3/Emu/{GS => RSX}/GL/OpenGL.h | 0 rpcs3/Emu/{GS => RSX}/GSManager.cpp | 0 rpcs3/Emu/{GS => RSX}/GSManager.h | 0 rpcs3/Emu/{GS => RSX}/GSRender.cpp | 0 rpcs3/Emu/{GS => RSX}/GSRender.h | 4 +- rpcs3/Emu/{GS => RSX}/Null/NullGSRender.h | 2 +- rpcs3/Emu/{GS => RSX}/RSXFragmentProgram.h | 0 rpcs3/Emu/{GS => RSX}/RSXTexture.cpp | 0 rpcs3/Emu/{GS => RSX}/RSXTexture.h | 0 rpcs3/Emu/{GS => RSX}/RSXThread.cpp | 0 rpcs3/Emu/{GS => RSX}/RSXThread.h | 0 rpcs3/Emu/{GS => RSX}/RSXVertexProgram.h | 0 rpcs3/Emu/{GS => RSX}/sysutil_video.h | 0 rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 2 +- rpcs3/Emu/System.h | 2 +- rpcs3/Gui/MainFrame.cpp | 2 +- rpcs3/Gui/RSXDebugger.cpp | 4 +- rpcs3/emucore.vcxproj | 56 +++--- rpcs3/emucore.vcxproj.filters | 186 +++++++++--------- 35 files changed, 137 insertions(+), 129 deletions(-) rename rpcs3/Emu/{GS => RSX}/GCM.h (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLBuffers.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLBuffers.h (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLFragmentProgram.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLFragmentProgram.h (99%) rename rpcs3/Emu/{GS => RSX}/GL/GLGSRender.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLGSRender.h (99%) rename rpcs3/Emu/{GS => RSX}/GL/GLProcTable.h (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLProgram.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLProgram.h (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLProgramBuffer.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLProgramBuffer.h (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLShaderParam.h (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLVertexProgram.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GL/GLVertexProgram.h (99%) rename rpcs3/Emu/{GS => RSX}/GL/OpenGL.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GL/OpenGL.h (100%) rename rpcs3/Emu/{GS => RSX}/GSManager.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GSManager.h (100%) rename rpcs3/Emu/{GS => RSX}/GSRender.cpp (100%) rename rpcs3/Emu/{GS => RSX}/GSRender.h (94%) rename rpcs3/Emu/{GS => RSX}/Null/NullGSRender.h (92%) rename rpcs3/Emu/{GS => RSX}/RSXFragmentProgram.h (100%) rename rpcs3/Emu/{GS => RSX}/RSXTexture.cpp (100%) rename rpcs3/Emu/{GS => RSX}/RSXTexture.h (100%) rename rpcs3/Emu/{GS => RSX}/RSXThread.cpp (100%) rename rpcs3/Emu/{GS => RSX}/RSXThread.h (100%) rename rpcs3/Emu/{GS => RSX}/RSXVertexProgram.h (100%) rename rpcs3/Emu/{GS => RSX}/sysutil_video.h (100%) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/RSX/GCM.h similarity index 100% rename from rpcs3/Emu/GS/GCM.h rename to rpcs3/Emu/RSX/GCM.h diff --git a/rpcs3/Emu/GS/GL/GLBuffers.cpp b/rpcs3/Emu/RSX/GL/GLBuffers.cpp similarity index 100% rename from rpcs3/Emu/GS/GL/GLBuffers.cpp rename to rpcs3/Emu/RSX/GL/GLBuffers.cpp diff --git a/rpcs3/Emu/GS/GL/GLBuffers.h b/rpcs3/Emu/RSX/GL/GLBuffers.h similarity index 100% rename from rpcs3/Emu/GS/GL/GLBuffers.h rename to rpcs3/Emu/RSX/GL/GLBuffers.h diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.cpp b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp similarity index 100% rename from rpcs3/Emu/GS/GL/GLFragmentProgram.cpp rename to rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp diff --git a/rpcs3/Emu/GS/GL/GLFragmentProgram.h b/rpcs3/Emu/RSX/GL/GLFragmentProgram.h similarity index 99% rename from rpcs3/Emu/GS/GL/GLFragmentProgram.h rename to rpcs3/Emu/RSX/GL/GLFragmentProgram.h index 0ff5af0d4f..6219d9304f 100644 --- a/rpcs3/Emu/GS/GL/GLFragmentProgram.h +++ b/rpcs3/Emu/RSX/GL/GLFragmentProgram.h @@ -1,6 +1,6 @@ #pragma once #include "GLShaderParam.h" -#include "Emu/GS/RSXFragmentProgram.h" +#include "Emu/RSX/RSXFragmentProgram.h" struct GLFragmentDecompilerThread : public ThreadBase { diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp similarity index 100% rename from rpcs3/Emu/GS/GL/GLGSRender.cpp rename to rpcs3/Emu/RSX/GL/GLGSRender.cpp diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/RSX/GL/GLGSRender.h similarity index 99% rename from rpcs3/Emu/GS/GL/GLGSRender.h rename to rpcs3/Emu/RSX/GL/GLGSRender.h index 325bca7fa4..e2cf5f9d6f 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/RSX/GL/GLGSRender.h @@ -1,6 +1,6 @@ #pragma once -#include "Emu/GS/GSRender.h" -#include "Emu/GS/RSXThread.h" +#include "Emu/RSX/GSRender.h" +#include "Emu/RSX/RSXThread.h" #include "Utilities/rPlatform.h" #include "GLBuffers.h" #include "GLProgramBuffer.h" diff --git a/rpcs3/Emu/GS/GL/GLProcTable.h b/rpcs3/Emu/RSX/GL/GLProcTable.h similarity index 100% rename from rpcs3/Emu/GS/GL/GLProcTable.h rename to rpcs3/Emu/RSX/GL/GLProcTable.h diff --git a/rpcs3/Emu/GS/GL/GLProgram.cpp b/rpcs3/Emu/RSX/GL/GLProgram.cpp similarity index 100% rename from rpcs3/Emu/GS/GL/GLProgram.cpp rename to rpcs3/Emu/RSX/GL/GLProgram.cpp diff --git a/rpcs3/Emu/GS/GL/GLProgram.h b/rpcs3/Emu/RSX/GL/GLProgram.h similarity index 100% rename from rpcs3/Emu/GS/GL/GLProgram.h rename to rpcs3/Emu/RSX/GL/GLProgram.h diff --git a/rpcs3/Emu/GS/GL/GLProgramBuffer.cpp b/rpcs3/Emu/RSX/GL/GLProgramBuffer.cpp similarity index 100% rename from rpcs3/Emu/GS/GL/GLProgramBuffer.cpp rename to rpcs3/Emu/RSX/GL/GLProgramBuffer.cpp diff --git a/rpcs3/Emu/GS/GL/GLProgramBuffer.h b/rpcs3/Emu/RSX/GL/GLProgramBuffer.h similarity index 100% rename from rpcs3/Emu/GS/GL/GLProgramBuffer.h rename to rpcs3/Emu/RSX/GL/GLProgramBuffer.h diff --git a/rpcs3/Emu/GS/GL/GLShaderParam.h b/rpcs3/Emu/RSX/GL/GLShaderParam.h similarity index 100% rename from rpcs3/Emu/GS/GL/GLShaderParam.h rename to rpcs3/Emu/RSX/GL/GLShaderParam.h diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp similarity index 100% rename from rpcs3/Emu/GS/GL/GLVertexProgram.cpp rename to rpcs3/Emu/RSX/GL/GLVertexProgram.cpp diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.h b/rpcs3/Emu/RSX/GL/GLVertexProgram.h similarity index 99% rename from rpcs3/Emu/GS/GL/GLVertexProgram.h rename to rpcs3/Emu/RSX/GL/GLVertexProgram.h index ffa19e8238..2605410a34 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.h +++ b/rpcs3/Emu/RSX/GL/GLVertexProgram.h @@ -1,6 +1,6 @@ #pragma once #include "GLShaderParam.h" -#include "Emu/GS/RSXVertexProgram.h" +#include "Emu/RSX/RSXVertexProgram.h" struct GLVertexDecompilerThread : public ThreadBase { diff --git a/rpcs3/Emu/GS/GL/OpenGL.cpp b/rpcs3/Emu/RSX/GL/OpenGL.cpp similarity index 100% rename from rpcs3/Emu/GS/GL/OpenGL.cpp rename to rpcs3/Emu/RSX/GL/OpenGL.cpp diff --git a/rpcs3/Emu/GS/GL/OpenGL.h b/rpcs3/Emu/RSX/GL/OpenGL.h similarity index 100% rename from rpcs3/Emu/GS/GL/OpenGL.h rename to rpcs3/Emu/RSX/GL/OpenGL.h diff --git a/rpcs3/Emu/GS/GSManager.cpp b/rpcs3/Emu/RSX/GSManager.cpp similarity index 100% rename from rpcs3/Emu/GS/GSManager.cpp rename to rpcs3/Emu/RSX/GSManager.cpp diff --git a/rpcs3/Emu/GS/GSManager.h b/rpcs3/Emu/RSX/GSManager.h similarity index 100% rename from rpcs3/Emu/GS/GSManager.h rename to rpcs3/Emu/RSX/GSManager.h diff --git a/rpcs3/Emu/GS/GSRender.cpp b/rpcs3/Emu/RSX/GSRender.cpp similarity index 100% rename from rpcs3/Emu/GS/GSRender.cpp rename to rpcs3/Emu/RSX/GSRender.cpp diff --git a/rpcs3/Emu/GS/GSRender.h b/rpcs3/Emu/RSX/GSRender.h similarity index 94% rename from rpcs3/Emu/GS/GSRender.h rename to rpcs3/Emu/RSX/GSRender.h index 86d74748a2..f1b6b74082 100644 --- a/rpcs3/Emu/GS/GSRender.h +++ b/rpcs3/Emu/RSX/GSRender.h @@ -1,6 +1,6 @@ #pragma once -#include "Emu/GS/GCM.h" -#include "Emu/GS/RSXThread.h" +#include "Emu/RSX/GCM.h" +#include "Emu/RSX/RSXThread.h" struct GSRender : public RSXThread { diff --git a/rpcs3/Emu/GS/Null/NullGSRender.h b/rpcs3/Emu/RSX/Null/NullGSRender.h similarity index 92% rename from rpcs3/Emu/GS/Null/NullGSRender.h rename to rpcs3/Emu/RSX/Null/NullGSRender.h index 26663236b9..1fa7104356 100644 --- a/rpcs3/Emu/GS/Null/NullGSRender.h +++ b/rpcs3/Emu/RSX/Null/NullGSRender.h @@ -1,5 +1,5 @@ #pragma once -#include "Emu/GS/GSRender.h" +#include "Emu/RSX/GSRender.h" class NullGSRender : public GSRender diff --git a/rpcs3/Emu/GS/RSXFragmentProgram.h b/rpcs3/Emu/RSX/RSXFragmentProgram.h similarity index 100% rename from rpcs3/Emu/GS/RSXFragmentProgram.h rename to rpcs3/Emu/RSX/RSXFragmentProgram.h diff --git a/rpcs3/Emu/GS/RSXTexture.cpp b/rpcs3/Emu/RSX/RSXTexture.cpp similarity index 100% rename from rpcs3/Emu/GS/RSXTexture.cpp rename to rpcs3/Emu/RSX/RSXTexture.cpp diff --git a/rpcs3/Emu/GS/RSXTexture.h b/rpcs3/Emu/RSX/RSXTexture.h similarity index 100% rename from rpcs3/Emu/GS/RSXTexture.h rename to rpcs3/Emu/RSX/RSXTexture.h diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp similarity index 100% rename from rpcs3/Emu/GS/RSXThread.cpp rename to rpcs3/Emu/RSX/RSXThread.cpp diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h similarity index 100% rename from rpcs3/Emu/GS/RSXThread.h rename to rpcs3/Emu/RSX/RSXThread.h diff --git a/rpcs3/Emu/GS/RSXVertexProgram.h b/rpcs3/Emu/RSX/RSXVertexProgram.h similarity index 100% rename from rpcs3/Emu/GS/RSXVertexProgram.h rename to rpcs3/Emu/RSX/RSXVertexProgram.h diff --git a/rpcs3/Emu/GS/sysutil_video.h b/rpcs3/Emu/RSX/sysutil_video.h similarity index 100% rename from rpcs3/Emu/GS/sysutil_video.h rename to rpcs3/Emu/RSX/sysutil_video.h diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 9c31b9130d..17d34d1610 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -4,7 +4,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/GS/GCM.h" +#include "Emu/RSX/GCM.h" #include "sysPrxForUser.h" #include "cellGcmSys.h" diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 3b9f992ee4..7052d05118 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -5,7 +5,7 @@ #include "Emu/Io/Pad.h" #include "Emu/Io/Keyboard.h" #include "Emu/Io/Mouse.h" -#include "Emu/GS/GSManager.h" +#include "Emu/RSX/GSManager.h" #include "Emu/Audio/AudioManager.h" #include "Emu/FS/VFS.h" #include "Loader/Loader.h" diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 5c71f2abdd..923390d63d 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -11,7 +11,7 @@ #include "git-version.h" #include "Ini.h" -#include "Emu/GS/sysutil_video.h" +#include "Emu/RSX/sysutil_video.h" #include "Gui/VHDDManager.h" #include "Gui/VFSManager.h" #include "Gui/AboutDialog.h" diff --git a/rpcs3/Gui/RSXDebugger.cpp b/rpcs3/Gui/RSXDebugger.cpp index b145d49079..d3aeb017ae 100644 --- a/rpcs3/Gui/RSXDebugger.cpp +++ b/rpcs3/Gui/RSXDebugger.cpp @@ -4,8 +4,8 @@ #include "Emu/System.h" #include "RSXDebugger.h" -#include "Emu/GS/sysutil_video.h" -#include "Emu/GS/GCM.h" +#include "Emu/RSX/sysutil_video.h" +#include "Emu/RSX/GCM.h" #include "MemoryViewer.h" diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 8c856e1d45..ff0f638f7d 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -74,22 +74,22 @@ - - - - - - - - - - - + + + + + + + + + + + @@ -284,22 +284,6 @@ - - - - - - - - - - - - - - - - @@ -314,6 +298,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 3b692b7c0a..e976ffed57 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -33,15 +33,6 @@ {c04826b8-05a1-4015-b3aa-ef44805531a2} - - {c344f241-48a9-4950-8b94-8b60adc4a67f} - - - {9aaa9b5c-c890-485c-a729-d2b5e783406f} - - - {f81523a6-0846-4abc-96b2-1284b2506485} - {b26b6b08-a8ce-4bb5-8339-c5352a23ce96} @@ -81,6 +72,15 @@ {187d33b8-7b69-4081-9545-de6ad1d8fe98} + + {fadb4b36-57af-4583-891d-d22ff369e266} + + + {4adca4fa-b90f-4662-9eb0-1d29cf3cd2eb} + + + {6f1da5b2-52c5-416b-9b5c-b9897bc1b300} + @@ -236,39 +236,6 @@ Emu\Io - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - Emu\FS @@ -587,6 +554,39 @@ Emu\SysCalls\Modules + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX + + + Emu\RSX + + + Emu\RSX + + + Emu\RSX + @@ -730,54 +730,6 @@ Emu\Io\Windows - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\GL - - - Emu\GS\Null - Emu\FS @@ -1111,5 +1063,59 @@ Emu\SysCalls\Modules + + Emu\RSX\Null + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX\GL + + + Emu\RSX + + + Emu\RSX + + + Emu\RSX + + + Emu\RSX + + + Emu\RSX + + + Emu\RSX + + + Emu\RSX + + + Emu\RSX + From 90d0e69a569e8a74fbada773c07fcce44b5ea587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Mon, 4 Aug 2014 01:52:36 +0200 Subject: [PATCH 268/499] Fixed error of pull request #714 --- Utilities/rFile.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 345aa284c5..853f2678ef 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -125,13 +125,16 @@ bool rRemoveFile(const std::string &file) #ifdef _WIN32 if (!DeleteFile(ConvertUTF8ToWString(file).c_str())) { LOG_ERROR(GENERAL, "Error deleting %s: %i", file.c_str(), GetLastError()); + return false; } #else int err = unlink(file.c_str()); if (err) { LOG_ERROR(GENERAL, "Error unlinking %s: %i", file.c_str(), err); + return false; } #endif + return true; } wxFile::OpenMode convertOpenMode(rFile::OpenMode open) From d48de0afb0478f8e1bbcdfbff3d186c7ddb706da Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 4 Aug 2014 18:36:32 +0800 Subject: [PATCH 269/499] Remove duplicate --- rpcs3/emucore.vcxproj | 1 - 1 file changed, 1 deletion(-) diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index ff0f638f7d..5a92f945e1 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -155,7 +155,6 @@ - From f5b3c38c27816647897b6116674a961f6a84ad0d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 4 Aug 2014 22:33:17 +0400 Subject: [PATCH 270/499] Arrgh, wrong checks!!! --- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 7c2c740868..e8c3394b75 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -135,7 +135,7 @@ s32 sys_spu_thread_set_argument(u32 id, mem_ptr_t arg) sc_spu.Warning("sys_spu_thread_set_argument(id=%d, arg_addr=0x%x)", id, arg.GetAddr()); CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -165,7 +165,7 @@ s32 sys_spu_thread_get_exit_status(u32 id, mem32_t status) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -382,7 +382,7 @@ s32 sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -415,7 +415,7 @@ s32 sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -452,7 +452,7 @@ s32 sys_spu_thread_write_spu_mb(u32 id, u32 value) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -469,7 +469,7 @@ s32 sys_spu_thread_set_spu_cfg(u32 id, u64 value) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -491,7 +491,7 @@ s32 sys_spu_thread_get_spu_cfg(u32 id, mem64_t value) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -507,7 +507,7 @@ s32 sys_spu_thread_write_snr(u32 id, u32 number, u32 value) sc_spu.Log("sys_spu_thread_write_snr(id=%d, number=%d, value=0x%x)", id, number, value); CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -550,7 +550,7 @@ s32 sys_spu_thread_connect_event(u32 id, u32 eq_id, u32 et, u8 spup) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -599,7 +599,7 @@ s32 sys_spu_thread_disconnect_event(u32 id, u32 et, u8 spup) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -650,7 +650,7 @@ s32 sys_spu_thread_bind_queue(u32 id, u32 eq_id, u32 spuq_num) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } @@ -669,7 +669,7 @@ s32 sys_spu_thread_unbind_queue(u32 id, u32 spuq_num) CPUThread* thr = Emu.GetCPU().GetThread(id); - if(!thr || (thr->GetType() != CPU_THREAD_SPU && thr->GetType() != CPU_THREAD_RAW_SPU)) + if(!thr || thr->GetType() != CPU_THREAD_SPU) { return CELL_ESRCH; } From 424d5e22d2ec0d6124f87b4a16c224fd24d3d048 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 4 Aug 2014 22:43:42 +0400 Subject: [PATCH 271/499] GetCount for Out_IntrMBox --- rpcs3/Emu/Cell/SPUThread.h | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 0598a55018..cd5594d285 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -901,6 +901,7 @@ public: switch(ch) { case SPU_WrOutMbox: return SPU.Out_MBox.GetFreeCount(); + case SPU_WrOutIntrMbox: return SPU.Out_IntrMBox.GetFreeCount(); case SPU_RdInMbox: return SPU.In_MBox.GetCount(); case MFC_RdTagStat: return MFC1.TagStatus.GetCount(); case MFC_RdListStallStat: return StallStat.GetCount(); @@ -929,16 +930,24 @@ public: if (!group) // if RawSPU { if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); - SPU.Out_IntrMBox.PushUncond(v); + while (!SPU.Out_IntrMBox.Push(v)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + if (Emu.IsStopped()) + { + LOG_WARNING(Log::SPU, "%s(%s) aborted (I)", __FUNCTION__, spu_ch_name[ch]); + return; + } + } m_intrtag[2].stat |= 1; if (CPUThread* t = Emu.GetCPU().GetThread(m_intrtag[2].thread)) { - while (t->IsAlive()) + while (t->IsAlive()) // TODO: ??? { std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { - LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + LOG_WARNING(Log::SPU, "%s(%s) aborted (II)", __FUNCTION__, spu_ch_name[ch]); return; } } @@ -1065,21 +1074,18 @@ public: case SPU_WrOutMbox: { - //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); while (!SPU.Out_MBox.Push(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); break; } case MFC_WrTagMask: { - //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); MFC1.QueryMask.SetValue(v); break; } case MFC_WrTagUpdate: { - //ConLog.Warning("%s: %s = 0x%x", __FUNCTION__, spu_ch_name[ch], v); MFC1.TagStatus.PushUncond(MFC1.QueryMask.GetValue()); break; } @@ -1167,28 +1173,24 @@ public: case SPU_RdInMbox: { while (!SPU.In_MBox.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } case MFC_RdTagStat: { while (!MFC1.TagStatus.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } case SPU_RdSigNotify1: { while (!SPU.SNR[0].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } case SPU_RdSigNotify2: { while (!SPU.SNR[1].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - //ConLog.Warning("%s: 0x%x = %s", __FUNCTION__, v, spu_ch_name[ch]); break; } From 48514b0e93d0092c9916148673bfec0d4cdcffa2 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 00:25:25 +0400 Subject: [PATCH 272/499] It doesn't hurt if we list all the imports? --- rpcs3/Loader/ELF64.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 1736ecf163..e949ae56d3 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -343,9 +343,14 @@ bool ELF64Loader::LoadPhdrData(u64 offset) const u32 nid = Memory.Read32(stub.s_nid + i*4); const u32 text = Memory.Read32(stub.s_text + i*4); - if (module && !module->Load(nid)) { + if (module && !module->Load(nid)) + { LOG_WARNING(LOADER, "Unimplemented function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); } + else //if (Ini.HLELogging.GetValue()) + { + LOG_NOTICE(LOADER, "Imported function '%s' in '%s' module", SysCalls::GetHLEFuncName(nid).c_str(), module_name.c_str()); + } #ifdef LOADER_DEBUG LOG_NOTICE(LOADER, "import %d:", i+1); LOG_NOTICE(LOADER, "*** nid: 0x%x (0x%x)", nid, stub.s_nid + i*4); From 8f04ab07ed480dd4d898d2ded53ff294302a0332 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 14:18:22 +0400 Subject: [PATCH 273/499] IsGood() check elimination Reasons: 1) It's unsafe - we cannot guarantee that address is still good while it is used. 2) It's wrong in many modules which are usually just compare pointer with zero. --- rpcs3/Emu/CPU/CPUThread.cpp | 6 - rpcs3/Emu/Cell/SPUInterpreter.h | 50 +--- rpcs3/Emu/Cell/SPUThread.h | 3 +- rpcs3/Emu/Memory/Memory.h | 18 +- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 42 +--- rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 103 -------- rpcs3/Emu/SysCalls/Modules/cellFont.cpp | 49 +--- rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 27 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 27 -- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 12 - rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 12 - rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 12 +- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 12 - rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 24 -- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 121 --------- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 12 - rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 44 +--- rpcs3/Emu/SysCalls/Modules/cellRtc.cpp | 90 ------- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 234 ------------------ rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 28 --- .../SysCalls/Modules/cellSysutil_SaveData.cpp | 42 +--- rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 10 +- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 45 ---- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 31 --- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 20 -- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 2 - rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 24 +- rpcs3/Emu/SysCalls/Modules/sceNpTrophy.h | 19 ++ rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 5 - rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 10 +- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 33 --- rpcs3/Emu/SysCalls/lv2/sys_cond.cpp | 5 - rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 91 +------ rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp | 5 - rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp | 46 ---- rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp | 10 - rpcs3/Emu/SysCalls/lv2/sys_memory.cpp | 6 - rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp | 30 +-- rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp | 5 - rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp | 24 +- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 14 +- rpcs3/Emu/SysCalls/lv2/sys_prx.cpp | 9 - rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 2 - rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp | 10 - rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 83 +------ rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 2 - rpcs3/Emu/SysCalls/lv2/sys_tty.cpp | 3 - rpcs3/Emu/SysCalls/lv2/sys_vm.cpp | 28 +-- rpcs3/Emu/System.cpp | 3 +- rpcs3/Loader/ELF32.cpp | 2 +- 52 files changed, 104 insertions(+), 1450 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 577fcf9c5f..f948836ef5 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -148,12 +148,6 @@ void CPUThread::NextPc(u8 instr_size) void CPUThread::SetBranch(const u64 pc, bool record_branch) { - if(!Memory.IsGoodAddr(m_offset + pc)) - { - LOG_ERROR(PPU, "%s branch error: bad address 0x%llx #pc: 0x%llx", GetFName().c_str(), m_offset + pc, m_offset + PC); - Emu.Pause(); - } - m_is_branch = true; nPC = pc; diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index b340677966..b5d80a691e 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -337,12 +337,6 @@ private: void STQX(u32 rt, u32 ra, u32 rb) { u32 lsa = (CPU.GPR[ra]._u32[3] + CPU.GPR[rb]._u32[3]) & 0x3fff0; - if(!CPU.IsGoodLSA(lsa)) - { - LOG_ERROR(Log::SPU, "STQX: bad lsa (0x%x)", lsa); - Emu.Pause(); - return; - } CPU.WriteLS128(lsa, CPU.GPR[rt]._u128); } @@ -436,13 +430,6 @@ private: u32 lsa = (a + b) & 0x3fff0; - if(!CPU.IsGoodLSA(lsa)) - { - LOG_ERROR(Log::SPU, "LQX: bad lsa (0x%x)", lsa); - Emu.Pause(); - return; - } - CPU.GPR[rt]._u128 = CPU.ReadLS128(lsa); } void ROTQBYBI(u32 rt, u32 ra, u32 rb) @@ -1169,12 +1156,6 @@ private: void STQA(u32 rt, s32 i16) { u32 lsa = (i16 << 2) & 0x3fff0; - if(!CPU.IsGoodLSA(lsa)) - { - LOG_ERROR(Log::SPU, "STQA: bad lsa (0x%x)", lsa); - Emu.Pause(); - return; - } CPU.WriteLS128(lsa, CPU.GPR[rt]._u128); } @@ -1220,12 +1201,6 @@ private: void STQR(u32 rt, s32 i16) { u32 lsa = branchTarget(CPU.PC, i16) & 0x3fff0; - if(!CPU.IsGoodLSA(lsa)) - { - LOG_ERROR(Log::SPU, "STQR: bad lsa (0x%x)", lsa); - Emu.Pause(); - return; - } CPU.WriteLS128(lsa, CPU.GPR[rt]._u128); } @@ -1238,12 +1213,6 @@ private: void LQA(u32 rt, s32 i16) { u32 lsa = (i16 << 2) & 0x3fff0; - if(!CPU.IsGoodLSA(lsa)) - { - LOG_ERROR(Log::SPU, "LQA: bad lsa (0x%x)", lsa); - Emu.Pause(); - return; - } CPU.GPR[rt]._u128 = CPU.ReadLS128(lsa); } @@ -1288,12 +1257,6 @@ private: void LQR(u32 rt, s32 i16) { u32 lsa = branchTarget(CPU.PC, i16) & 0x3fff0; - if(!CPU.IsGoodLSA(lsa)) - { - LOG_ERROR(Log::SPU, "LQR: bad lsa (0x%x)", lsa); - Emu.Pause(); - return; - } CPU.GPR[rt]._u128 = CPU.ReadLS128(lsa); } @@ -1377,24 +1340,13 @@ private: void STQD(u32 rt, s32 i10, u32 ra) //i10 is shifted left by 4 while decoding { const u32 lsa = (CPU.GPR[ra]._i32[3] + i10) & 0x3fff0; - if(!CPU.IsGoodLSA(lsa)) - { - LOG_ERROR(Log::SPU, "STQD: bad lsa (0x%x)", lsa); - Emu.Pause(); - return; - } + //LOG_NOTICE(Log::SPU, "STQD(lsa=0x%x): GPR[%d] (0x%llx%llx)", lsa, rt, CPU.GPR[rt]._u64[1], CPU.GPR[rt]._u64[0]); CPU.WriteLS128(lsa, CPU.GPR[rt]._u128); } void LQD(u32 rt, s32 i10, u32 ra) //i10 is shifted left by 4 while decoding { const u32 lsa = (CPU.GPR[ra]._i32[3] + i10) & 0x3fff0; - if(!CPU.IsGoodLSA(lsa)) - { - LOG_ERROR(Log::SPU, "LQD: bad lsa (0x%x)", lsa); - Emu.Pause(); - return; - } CPU.GPR[rt]._u128 = CPU.ReadLS128(lsa); } diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index cd5594d285..664f96cc0f 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -1333,8 +1333,7 @@ public: } } - bool IsGoodLSA(const u32 lsa) const { return Memory.IsGoodAddr(lsa + m_offset) && lsa < 0x40000; } - virtual u8 ReadLS8 (const u32 lsa) const { return Memory.Read8 (lsa + m_offset); } // m_offset & 0x3fffc ????? + virtual u8 ReadLS8 (const u32 lsa) const { return Memory.Read8 (lsa + m_offset); } virtual u16 ReadLS16 (const u32 lsa) const { return Memory.Read16 (lsa + m_offset); } virtual u32 ReadLS32 (const u32 lsa) const { return Memory.Read32 (lsa + m_offset); } virtual u64 ReadLS64 (const u32 lsa) const { return Memory.Read64 (lsa + m_offset); } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 114fdff049..b559a9a846 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -519,7 +519,7 @@ public: template bool CopyToReal(void* real, T from, u32 count) { - if (!IsGoodAddr(from, count)) return false; + if (!IsGoodAddr(from, count)) return false; // TODO: eliminate memcpy(real, GetMemFromAddr(from), count); @@ -528,7 +528,7 @@ public: template bool CopyFromReal(T to, const void* real, u32 count) { - if (!IsGoodAddr(to, count)) return false; + if (!IsGoodAddr(to, count)) return false; // TODO: eliminate memcpy(GetMemFromAddr(to), real, count); @@ -537,7 +537,7 @@ public: template bool Copy(T1 to, T2 from, u32 count) { - if (!IsGoodAddr(to, count) || !IsGoodAddr(from, count)) return false; + if (!IsGoodAddr(to, count) || !IsGoodAddr(from, count)) return false; // TODO: eliminate memmove(GetMemFromAddr(to), GetMemFromAddr(from), count); @@ -574,21 +574,21 @@ public: *(Td*)GetMemFromAddr(addr) = data; } - std::string ReadString(const u64 addr, const u64 len) + template std::string ReadString(const T addr, const u64 len) { - std::string ret((const char *)GetMemFromAddr(addr), len); + std::string ret((const char *)GetMemFromAddr(addr), len); return ret; } - std::string ReadString(const u64 addr) + template std::string ReadString(const T addr) { - return std::string((const char*)GetMemFromAddr(addr)); + return std::string((const char*)GetMemFromAddr(addr)); } - void WriteString(const u64 addr, const std::string& str) + template void WriteString(const T addr, const std::string& str) { - strcpy((char*)GetMemFromAddr(addr), str.c_str()); + strcpy((char*)GetMemFromAddr(addr), str.c_str()); } static u64 AlignAddr(const u64 addr, const u64 align) diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 7a05b506a7..3943e11880 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -547,11 +547,6 @@ int cellAdecQueryAttr(mem_ptr_t type, mem_ptr_t attr { cellAdec->Warning("cellAdecQueryAttr(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); - if (!type.IsGood() || !attr.IsGood()) - { - return CELL_ADEC_ERROR_FATAL; - } - if (!adecCheckType(type->audioCodecType)) return CELL_ADEC_ERROR_ARG; // TODO: check values @@ -567,11 +562,6 @@ int cellAdecOpen(mem_ptr_t type, mem_ptr_t res, cellAdec->Warning("cellAdecOpen(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.GetAddr(), res.GetAddr(), cb.GetAddr(), handle.GetAddr()); - if (!type.IsGood() || !res.IsGood() || !cb.IsGood() || !handle.IsGood()) - { - return CELL_ADEC_ERROR_FATAL; - } - if (!adecCheckType(type->audioCodecType)) return CELL_ADEC_ERROR_ARG; handle = adecOpen(new AudioDecoder(type->audioCodecType, res->startAddr, res->totalMemSize, cb->cbFunc, cb->cbArg)); @@ -584,11 +574,6 @@ int cellAdecOpenEx(mem_ptr_t type, mem_ptr_t r cellAdec->Warning("cellAdecOpenEx(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.GetAddr(), res.GetAddr(), cb.GetAddr(), handle.GetAddr()); - if (!type.IsGood() || !res.IsGood() || !cb.IsGood() || !handle.IsGood()) - { - return CELL_ADEC_ERROR_FATAL; - } - if (!adecCheckType(type->audioCodecType)) return CELL_ADEC_ERROR_ARG; handle = adecOpen(new AudioDecoder(type->audioCodecType, res->startAddr, res->totalMemSize, cb->cbFunc, cb->cbArg)); @@ -671,11 +656,6 @@ int cellAdecDecodeAu(u32 handle, mem_ptr_t auInfo) return CELL_ADEC_ERROR_ARG; } - if (!auInfo.IsGood()) - { - return CELL_ADEC_ERROR_FATAL; - } - AdecTask task(adecDecodeAu); task.au.auInfo_addr = auInfo.GetAddr(); task.au.addr = auInfo->startAddr; @@ -706,22 +686,9 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) adec->frames.Pop(af); AVFrame* frame = af.data; - int result = CELL_OK; - - if (!Memory.IsGoodAddr(outBuffer_addr, af.size)) - { - result = CELL_ADEC_ERROR_FATAL; - if (af.data) - { - av_frame_unref(af.data); - av_frame_free(&af.data); - } - return result; - } - if (!af.data) // fake: empty data { - return result; + return CELL_OK; } // copy data @@ -751,7 +718,7 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) av_frame_unref(af.data); av_frame_free(&af.data); } - return result; + return CELL_OK; } int cellAdecGetPcmItem(u32 handle, mem32_t pcmItem_ptr) @@ -764,11 +731,6 @@ int cellAdecGetPcmItem(u32 handle, mem32_t pcmItem_ptr) return CELL_ADEC_ERROR_ARG; } - if (!pcmItem_ptr.IsGood()) - { - return CELL_ADEC_ERROR_FATAL; - } - if (adec->frames.IsEmpty()) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 5461ac3134..b43cac4381 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -509,11 +509,6 @@ int cellAudioPortOpen(mem_ptr_t audioParam, mem32_t portNum) { cellAudio->Warning("cellAudioPortOpen(audioParam_addr=0x%x, portNum_addr=0x%x)", audioParam.GetAddr(), portNum.GetAddr()); - if(!audioParam.IsGood() || !portNum.IsGood()) - { - return CELL_AUDIO_ERROR_PARAM; - } - if (audioParam->nChannel > 8 || audioParam->nBlock > 16) { return CELL_AUDIO_ERROR_PARAM; @@ -562,7 +557,7 @@ int cellAudioGetPortConfig(u32 portNum, mem_ptr_t portConfi { cellAudio->Warning("cellAudioGetPortConfig(portNum=0x%x, portConfig_addr=0x%x)", portNum, portConfig.GetAddr()); - if (!portConfig.IsGood() || portNum >= m_config.AUDIO_PORT_COUNT) + if (portNum >= m_config.AUDIO_PORT_COUNT) { return CELL_AUDIO_ERROR_PARAM; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index b689c0682f..13f23a10a3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -460,11 +460,6 @@ int cellDmuxQueryAttr(const mem_ptr_t demuxerType, mem_ptr_tWarning("cellDmuxQueryAttr(demuxerType_addr=0x%x, demuxerAttr_addr=0x%x)", demuxerType.GetAddr(), demuxerAttr.GetAddr()); - if (!demuxerType.IsGood() || !demuxerAttr.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - if (demuxerType->streamType != CELL_DMUX_STREAM_TYPE_PAMF) { return CELL_DMUX_ERROR_ARG; @@ -478,11 +473,6 @@ int cellDmuxQueryAttr2(const mem_ptr_t demuxerType2, mem_ptr_tWarning("cellDmuxQueryAttr2(demuxerType2_addr=0x%x, demuxerAttr_addr=0x%x)", demuxerType2.GetAddr(), demuxerAttr.GetAddr()); - if (!demuxerType2.IsGood() || !demuxerAttr.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - if (demuxerType2->streamType != CELL_DMUX_STREAM_TYPE_PAMF) { return CELL_DMUX_ERROR_ARG; @@ -498,21 +488,11 @@ int cellDmuxOpen(const mem_ptr_t demuxerType, const mem_ptr_tWarning("cellDmuxOpen(demuxerType_addr=0x%x, demuxerResource_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType.GetAddr(), demuxerResource.GetAddr(), demuxerCb.GetAddr(), demuxerHandle.GetAddr()); - if (!demuxerType.IsGood() || !demuxerResource.IsGood() || !demuxerCb.IsGood() || !demuxerHandle.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - if (demuxerType->streamType != CELL_DMUX_STREAM_TYPE_PAMF) { return CELL_DMUX_ERROR_ARG; } - if (!Memory.IsGoodAddr(demuxerResource->memAddr, demuxerResource->memSize)) - { - return CELL_DMUX_ERROR_FATAL; - } - // TODO: check demuxerResource and demuxerCb arguments demuxerHandle = dmuxOpen(new Demuxer(demuxerResource->memAddr, demuxerResource->memSize, demuxerCb->cbMsgFunc, demuxerCb->cbArg_addr)); @@ -526,21 +506,11 @@ int cellDmuxOpenEx(const mem_ptr_t demuxerType, const mem_ptr_tWarning("cellDmuxOpenEx(demuxerType_addr=0x%x, demuxerResourceEx_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType.GetAddr(), demuxerResourceEx.GetAddr(), demuxerCb.GetAddr(), demuxerHandle.GetAddr()); - if (!demuxerType.IsGood() || !demuxerResourceEx.IsGood() || !demuxerCb.IsGood() || !demuxerHandle.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - if (demuxerType->streamType != CELL_DMUX_STREAM_TYPE_PAMF) { return CELL_DMUX_ERROR_ARG; } - if (!Memory.IsGoodAddr(demuxerResourceEx->memAddr, demuxerResourceEx->memSize)) - { - return CELL_DMUX_ERROR_FATAL; - } - // TODO: check demuxerResourceEx and demuxerCb arguments demuxerHandle = dmuxOpen(new Demuxer(demuxerResourceEx->memAddr, demuxerResourceEx->memSize, demuxerCb->cbMsgFunc, demuxerCb->cbArg_addr)); @@ -554,21 +524,11 @@ int cellDmuxOpen2(const mem_ptr_t demuxerType2, const mem_ptr_tWarning("cellDmuxOpen2(demuxerType2_addr=0x%x, demuxerResource2_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType2.GetAddr(), demuxerResource2.GetAddr(), demuxerCb.GetAddr(), demuxerHandle.GetAddr()); - if (!demuxerType2.IsGood() || !demuxerResource2.IsGood() || !demuxerCb.IsGood() || !demuxerHandle.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - if (demuxerType2->streamType != CELL_DMUX_STREAM_TYPE_PAMF) { return CELL_DMUX_ERROR_ARG; } - if (!Memory.IsGoodAddr(demuxerResource2->memAddr, demuxerResource2->memSize)) - { - return CELL_DMUX_ERROR_FATAL; - } - // TODO: check demuxerType2, demuxerResource2 and demuxerCb arguments demuxerHandle = dmuxOpen(new Demuxer(demuxerResource2->memAddr, demuxerResource2->memSize, demuxerCb->cbMsgFunc, demuxerCb->cbArg_addr)); @@ -615,11 +575,6 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize return CELL_DMUX_ERROR_ARG; } - if (!Memory.IsGoodAddr(streamAddress, streamSize)) - { - return CELL_DMUX_ERROR_FATAL; - } - if (dmux->is_running) { if (Emu.IsStopped()) @@ -701,17 +656,6 @@ int cellDmuxQueryEsAttr(const mem_ptr_t demuxerType, const mem_ptr cellDmux->Warning("cellDmuxQueryEsAttr(demuxerType_addr=0x%x, esFilterId_addr=0x%x, esSpecificInfo_addr=0x%x, esAttr_addr=0x%x)", demuxerType.GetAddr(), esFilterId.GetAddr(), esSpecificInfo_addr, esAttr.GetAddr()); - if (!demuxerType.IsGood() || !esFilterId.IsGood() || !esAttr.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - - if (!Memory.IsGoodAddr(esSpecificInfo_addr, 12)) - { - cellDmux->Error("cellDmuxQueryEsAttr: invalid specific info addr (0x%x)", esSpecificInfo_addr); - return CELL_DMUX_ERROR_FATAL; - } - if (demuxerType->streamType != CELL_DMUX_STREAM_TYPE_PAMF) { return CELL_DMUX_ERROR_ARG; @@ -729,17 +673,6 @@ int cellDmuxQueryEsAttr2(const mem_ptr_t demuxerType2, const mem_ cellDmux->Warning("cellDmuxQueryEsAttr2(demuxerType2_addr=0x%x, esFilterId_addr=0x%x, esSpecificInfo_addr=0x%x, esAttr_addr=0x%x)", demuxerType2.GetAddr(), esFilterId.GetAddr(), esSpecificInfo_addr, esAttr.GetAddr()); - if (!demuxerType2.IsGood() || !esFilterId.IsGood() || !esAttr.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - - if (!Memory.IsGoodAddr(esSpecificInfo_addr, 12)) - { - cellDmux->Error("cellDmuxQueryEsAttr2: invalid specific info addr (0x%x)", esSpecificInfo_addr); - return CELL_DMUX_ERROR_FATAL; - } - if (demuxerType2->streamType != CELL_DMUX_STREAM_TYPE_PAMF) { return CELL_DMUX_ERROR_ARG; @@ -759,22 +692,6 @@ int cellDmuxEnableEs(u32 demuxerHandle, const mem_ptr_t esF "esSpecificInfo_addr=0x%x, esHandle_addr=0x%x)", demuxerHandle, esFilterId.GetAddr(), esResourceInfo.GetAddr(), esCb.GetAddr(), esSpecificInfo_addr, esHandle.GetAddr()); - if (!esFilterId.IsGood() || !esResourceInfo.IsGood() || !esCb.IsGood() || !esHandle.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - - if (!Memory.IsGoodAddr(esSpecificInfo_addr, 12)) - { - cellDmux->Error("cellDmuxEnableEs: invalid specific info addr (0x%x)", esSpecificInfo_addr); - return CELL_DMUX_ERROR_FATAL; - } - - if (!Memory.IsGoodAddr(esResourceInfo->memAddr, esResourceInfo->memSize)) - { - return CELL_DMUX_ERROR_FATAL; - } - Demuxer* dmux; if (!Emu.GetIdManager().GetIDData(demuxerHandle, dmux)) { @@ -849,11 +766,6 @@ int cellDmuxGetAu(u32 esHandle, mem32_t auInfo_ptr, mem32_t auSpecificInfo_ptr) return CELL_DMUX_ERROR_ARG; } - if (!auInfo_ptr.IsGood() || !auSpecificInfo_ptr.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - u32 info; u32 spec; if (!es->peek(info, true, spec, true)) @@ -877,11 +789,6 @@ int cellDmuxPeekAu(u32 esHandle, mem32_t auInfo_ptr, mem32_t auSpecificInfo_ptr) return CELL_DMUX_ERROR_ARG; } - if (!auInfo_ptr.IsGood() || !auSpecificInfo_ptr.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - u32 info; u32 spec; if (!es->peek(info, true, spec, false)) @@ -905,11 +812,6 @@ int cellDmuxGetAuEx(u32 esHandle, mem32_t auInfoEx_ptr, mem32_t auSpecificInfo_p return CELL_DMUX_ERROR_ARG; } - if (!auInfoEx_ptr.IsGood() || !auSpecificInfo_ptr.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - u32 info; u32 spec; if (!es->peek(info, false, spec, true)) @@ -933,11 +835,6 @@ int cellDmuxPeekAuEx(u32 esHandle, mem32_t auInfoEx_ptr, mem32_t auSpecificInfo_ return CELL_DMUX_ERROR_ARG; } - if (!auInfoEx_ptr.IsGood() || !auSpecificInfo_ptr.IsGood()) - { - return CELL_DMUX_ERROR_FATAL; - } - u32 info; u32 spec; if (!es->peek(info, false, spec, false)) diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index 177f716bd1..8629065669 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -242,10 +242,6 @@ int cellFontInitializeWithRevision(u64 revisionFlags, mem_ptr_t if (s_fontInternalInstance->m_bInitialized) return CELL_FONT_ERROR_ALREADY_INITIALIZED; - if (!config.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; - if (!Memory.IsGoodAddr(config->FileCache.buffer_addr)) - return CELL_FONT_ERROR_INVALID_CACHE_BUFFER; if (config->FileCache.size < 24) return CELL_FONT_ERROR_INVALID_PARAMETER; if (config->flags != 0) @@ -299,10 +295,6 @@ int cellFontOpenFontMemory(mem_ptr_t library, u32 fontAddr, u32 if (!s_fontInternalInstance->m_bInitialized) return CELL_FONT_ERROR_UNINITIALIZED; - if (!library.IsGood() || !font.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; - if (!Memory.IsGoodAddr(fontAddr)) - return CELL_FONT_ERROR_FONT_OPEN_FAILED; if (!stbtt_InitFont(&(font->stbfont), (unsigned char*)Memory.VirtualToRealAddr(fontAddr), 0)) return CELL_FONT_ERROR_FONT_OPEN_FAILED; @@ -336,8 +328,6 @@ int cellFontOpenFontset(mem_ptr_t library, mem_ptr_tLog("cellFontOpenFontset(library_addr=0x%x, fontType_addr=0x%x, font_addr=0x%x)", library.GetAddr(), fontType.GetAddr(), font.GetAddr()); - if (!library.IsGood() || !fontType.IsGood() || !font.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; if (!s_fontInternalInstance->m_bInitialized) return CELL_FONT_ERROR_UNINITIALIZED; if (fontType->map != CELL_FONT_MAP_UNICODE) @@ -421,9 +411,6 @@ int cellFontOpenFontInstance(mem_ptr_t openedFont, mem_ptr_t { cellFont->Warning("cellFontOpenFontInstance(openedFont=0x%x, font=0x%x)", openedFont.GetAddr(), font.GetAddr()); - if (!openedFont.IsGood() || !font.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; - font->renderer_addr = openedFont->renderer_addr; font->scale_x = openedFont->scale_x; font->scale_y = openedFont->scale_y; @@ -446,8 +433,6 @@ int cellFontCreateRenderer(mem_ptr_t library, mem_ptr_tWarning("cellFontCreateRenderer(library_addr=0x%x, config_addr=0x%x, Renderer_addr=0x%x)", library.GetAddr(), config.GetAddr(), Renderer.GetAddr()); - if (!library.IsGood() || !config.IsGood() || !Renderer.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; if (!s_fontInternalInstance->m_bInitialized) return CELL_FONT_ERROR_UNINITIALIZED; @@ -488,9 +473,6 @@ int cellFontSetScalePixel(mem_ptr_t font, float w, float h) h = GetCurrentPPUThread().FPR[2]; // TODO: Something is wrong with the float arguments cellFont->Log("cellFontSetScalePixel(font_addr=0x%x, w=%f, h=%f)", font.GetAddr(), w, h); - if (!font.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; - font->scale_x = w; font->scale_y = h; return CELL_FONT_OK; @@ -501,9 +483,6 @@ int cellFontGetHorizontalLayout(mem_ptr_t font, mem_ptr_tLog("cellFontGetHorizontalLayout(font_addr=0x%x, layout_addr=0x%x)", font.GetAddr(), layout.GetAddr()); - if (!font.IsGood() || !layout.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; - int ascent, descent, lineGap; float scale = stbtt_ScaleForPixelHeight(&(font->stbfont), font->scale_y); stbtt_GetFontVMetrics(&(font->stbfont), &ascent, &descent, &lineGap); @@ -518,9 +497,7 @@ int cellFontBindRenderer(mem_ptr_t font, mem_ptr_t r { cellFont->Warning("cellFontBindRenderer(font_addr=0x%x, renderer_addr=0x%x)", font.GetAddr(), renderer.GetAddr()); - - if (!font.IsGood() || !renderer.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; + if (font->renderer_addr) return CELL_FONT_ERROR_RENDERER_ALREADY_BIND; @@ -532,8 +509,6 @@ int cellFontUnbindRenderer(mem_ptr_t font) { cellFont->Warning("cellFontBindRenderer(font_addr=0x%x)", font.GetAddr()); - if (!font.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; if (!font->renderer_addr) return CELL_FONT_ERROR_RENDERER_UNBIND; @@ -553,8 +528,6 @@ int cellFontSetupRenderScalePixel(mem_ptr_t font, float w, float h) h = GetCurrentPPUThread().FPR[2]; // TODO: Something is wrong with the float arguments cellFont->Log("cellFontSetupRenderScalePixel(font_addr=0x%x, w=%f, h=%f)", font.GetAddr(), w, h); - if (!font.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; if (!font->renderer_addr) return CELL_FONT_ERROR_RENDERER_UNBIND; @@ -567,8 +540,6 @@ int cellFontGetRenderCharGlyphMetrics(mem_ptr_t font, u32 code, mem_pt cellFont->Log("cellFontGetRenderCharGlyphMetrics(font_addr=0x%x, code=0x%x, metrics_addr=0x%x)", font.GetAddr(), code, metrics.GetAddr()); - if (!font.IsGood() || !metrics.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; if (!font->renderer_addr) return CELL_FONT_ERROR_RENDERER_UNBIND; @@ -583,8 +554,6 @@ int cellFontRenderCharGlyphImage(mem_ptr_t font, u32 code, mem_ptr_tLog("cellFontRenderCharGlyphImage(font_addr=0x%x, code=0x%x, surface_addr=0x%x, x=%f, y=%f, metrics_addr=0x%x, trans_addr=0x%x)", font.GetAddr(), code, surface.GetAddr(), x, y, metrics.GetAddr(), transInfo.GetAddr()); - if (!font.IsGood() || !surface.IsGood() || !metrics.IsGood() || !transInfo.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; if (!font->renderer_addr) return CELL_FONT_ERROR_RENDERER_UNBIND; @@ -629,7 +598,7 @@ int cellFontSetEffectSlant(mem_ptr_t font, float slantParam) slantParam = GetCurrentPPUThread().FPR[1]; // TODO: Something is wrong with the float arguments cellFont->Log("cellFontSetEffectSlant(font_addr=0x%x, slantParam=%f)", font.GetAddr(), slantParam); - if (!font.IsGood() || slantParam < -1.0 || slantParam > 1.0) + if (slantParam < -1.0 || slantParam > 1.0) return CELL_FONT_ERROR_INVALID_PARAMETER; font->slant = slantParam; @@ -640,21 +609,15 @@ int cellFontGetEffectSlant(mem_ptr_t font, mem32_t slantParam) { cellFont->Warning("cellFontSetEffectSlant(font_addr=0x%x, slantParam_addr=0x%x)", font.GetAddr(), slantParam.GetAddr()); - if (!font.IsGood() || !slantParam.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; - slantParam = font->slant; //Does this conversion from be_t to *mem32_t work? return CELL_FONT_OK; } int cellFontGetFontIdCode(mem_ptr_t font, u32 code, mem32_t fontId, mem32_t fontCode) { - cellFont->Log("cellFontGetFontIdCode(font_addr=0x%x, code=0x%x, fontId_addr=0x%x, fontCode_addr=0x%x", + cellFont->Todo("cellFontGetFontIdCode(font_addr=0x%x, code=0x%x, fontId_addr=0x%x, fontCode_addr=0x%x", font.GetAddr(), code, fontId.GetAddr(), fontCode.GetAddr()); - if (!font.IsGood() || !fontId.IsGood()) //fontCode isn't used - return CELL_FONT_ERROR_INVALID_PARAMETER; - // TODO: ? return CELL_FONT_OK; } @@ -663,9 +626,6 @@ int cellFontCloseFont(mem_ptr_t font) { cellFont->Warning("cellFontCloseFont(font_addr=0x%x)", font.GetAddr()); - if (!font.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; - if (font->origin == CELL_FONT_OPEN_FONTSET || font->origin == CELL_FONT_OPEN_FONT_FILE || font->origin == CELL_FONT_OPEN_MEMORY) @@ -679,9 +639,6 @@ int cellFontGetCharGlyphMetrics(mem_ptr_t font, u32 code, mem_ptr_tLog("cellFontGetCharGlyphMetrics(font_addr=0x%x, code=0x%x, metrics_addr=0x%x", font.GetAddr(), code, metrics.GetAddr()); - if (!font.IsGood() || metrics.IsGood()) - return CELL_FONT_ERROR_INVALID_PARAMETER; - int x0, y0, x1, y1; int advanceWidth, leftSideBearing; float scale = stbtt_ScaleForPixelHeight(&(font->stbfont), font->scale_y); diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp index 8104be11f2..cf33200cb3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp @@ -46,8 +46,6 @@ int cellFontInitLibraryFreeTypeWithRevision(u64 revisionFlags, mem_ptr_tWarning("cellFontInitLibraryFreeTypeWithRevision(revisionFlags=0x%llx, config_addr=0x%x, lib_addr_addr=0x%x", revisionFlags, config.GetAddr(), lib_addr_addr); - if (!config.IsGood() || !Memory.IsGoodAddr(lib_addr_addr)) - return CELL_FONT_ERROR_INVALID_PARAMETER; //if (s_fontInternalInstance->m_bInitialized) //return CELL_FONT_ERROR_UNINITIALIZED; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 3b1cbf3b04..13077e8b4b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -23,12 +23,6 @@ int cellGameBootCheck(mem32_t type, mem32_t attributes, mem_ptr_tWarning("cellGameBootCheck(type_addr=0x%x, attributes_addr=0x%x, size_addr=0x%x, dirName_addr=0x%x)", type.GetAddr(), attributes.GetAddr(), size.GetAddr(), dirName.GetAddr()); - if (!type.IsGood() || !attributes.IsGood() || !size.IsGood() || (dirName.GetAddr() && !dirName.IsGood())) - { - cellGame->Error("cellGameBootCheck(): CELL_GAME_ERROR_PARAM"); - return CELL_GAME_ERROR_PARAM; - } - // TODO: Use the free space of the computer's HDD where RPCS3 is being run. size->hddFreeSizeKB = 40000000; // 40 GB @@ -90,7 +84,7 @@ int cellGamePatchCheck(mem_ptr_t size, u32 reserved_addr) { cellGame->Warning("cellGamePatchCheck(size_addr=0x%x, reserved_addr=0x%x)", size.GetAddr(), reserved_addr); - if (!size.IsGood() || reserved_addr != 0) + if (reserved_addr != 0) { cellGame->Error("cellGamePatchCheck(): CELL_GAME_ERROR_PARAM"); return CELL_GAME_ERROR_PARAM; @@ -135,7 +129,7 @@ int cellGameDataCheck(u32 type, const mem_list_ptr_t dirName, mem_ptr_tWarning("cellGameDataCheck(type=0x%x, dirName_addr=0x%x, size_addr=0x%x)", type, dirName.GetAddr(), size.GetAddr()); - if ((type - 1) >= 3 || !size.IsGood() || !dirName.IsGood()) + if ((type - 1) >= 3) { cellGame->Error("cellGameDataCheck(): CELL_GAME_ERROR_PARAM"); return CELL_GAME_ERROR_PARAM; @@ -181,12 +175,6 @@ int cellGameContentPermit(mem_list_ptr_t contentInfoPath, mem_list_ptr_t cellGame->Warning("cellGameContentPermit(contentInfoPath_addr=0x%x, usrdirPath_addr=0x%x)", contentInfoPath.GetAddr(), usrdirPath.GetAddr()); - if (!contentInfoPath.IsGood() || !usrdirPath.IsGood()) - { - cellGame->Error("cellGameContentPermit(): CELL_GAME_ERROR_PARAM"); - return CELL_GAME_ERROR_PARAM; - } - if (contentInfo == "" && usrdir == "") { cellGame->Warning("cellGameContentPermit(): CELL_GAME_ERROR_FAILURE (no permission given)"); @@ -209,7 +197,7 @@ int cellGameDataCheckCreate2(u32 version, const mem_list_ptr_t dirName, u32 cellGame->Warning("cellGameDataCheckCreate2(version=0x%x, dirName_addr=0x%x, errDialog=0x%x, funcStat_addr=0x%x, container=%d)", version, dirName.GetAddr(), errDialog, funcStat.GetAddr(), container); - if (version != CELL_GAMEDATA_VERSION_CURRENT || !dirName.IsGood() || errDialog > 1 || !funcStat.IsGood()) + if (version != CELL_GAMEDATA_VERSION_CURRENT || errDialog > 1) { cellGame->Error("cellGameDataCheckCreate2(): CELL_GAMEDATA_ERROR_PARAM"); return CELL_GAMEDATA_ERROR_PARAM; @@ -336,9 +324,6 @@ int cellGameGetParamInt(u32 id, mem32_t value) { cellGame->Warning("cellGameGetParamInt(id=%d, value_addr=0x%x)", id, value.GetAddr()); - if(!value.IsGood()) - return CELL_GAME_ERROR_PARAM; - // TODO: Access through cellGame***Check functions vfsFile f("/app_home/PARAM.SFO"); PSFLoader psf(f); @@ -362,9 +347,6 @@ int cellGameGetParamString(u32 id, u32 buf_addr, u32 bufsize) { cellGame->Warning("cellGameGetParamString(id=%d, buf_addr=0x%x, bufsize=%d)", id, buf_addr, bufsize); - if(!Memory.IsGoodAddr(buf_addr)) - return CELL_GAME_ERROR_PARAM; - // TODO: Access through cellGame***Check functions vfsFile f("/app_home/PARAM.SFO"); PSFLoader psf(f); @@ -437,9 +419,6 @@ int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) { cellGame->Warning("cellGameContentErrorDialog(type=%d, errNeedSizeKB=%d, dirName_addr=0x%x)", type, errNeedSizeKB, dirName_addr); - if (Memory.IsGoodAddr(dirName_addr)) - return CELL_GAME_ERROR_PARAM; - char* dirName = (char*)Memory.VirtualToRealAddr(dirName_addr); std::string errorName; switch(type) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 17d34d1610..2755166198 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -243,12 +243,6 @@ int cellGcmGetConfiguration(mem_ptr_t config) { cellGcmSys->Log("cellGcmGetConfiguration(config_addr=0x%x)", config.GetAddr()); - if (!config.IsGood()) - { - cellGcmSys->Error("cellGcmGetConfiguration : CELL_EFAULT"); - return CELL_EFAULT; - } - *config = current_config; return CELL_OK; @@ -413,11 +407,6 @@ void cellGcmSetFlipHandler(u32 handler_addr) { cellGcmSys->Warning("cellGcmSetFlipHandler(handler_addr=%d)", handler_addr); - if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) - { - cellGcmSys->Error("cellGcmSetFlipHandler(handler_addr=%d): invalid address", handler_addr); - } - Emu.GetGSManager().GetRender().m_flip_handler.SetAddr(handler_addr); } @@ -562,11 +551,6 @@ void cellGcmSetUserHandler(u32 handler_addr) { cellGcmSys->Warning("cellGcmSetUserHandler(handler_addr=0x%x)", handler_addr); - if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) - { - cellGcmSys->Error("cellGcmSetUserHandler(handler_addr=%d): invalid address", handler_addr); - } - Emu.GetGSManager().GetRender().m_user_handler.SetAddr(handler_addr); } @@ -574,11 +558,6 @@ void cellGcmSetVBlankHandler(u32 handler_addr) { cellGcmSys->Warning("cellGcmSetVBlankHandler(handler_addr=0x%x)", handler_addr); - if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) - { - cellGcmSys->Error("cellGcmSetVBlankHandler(handler_addr=%d): invalid address", handler_addr); - } - Emu.GetGSManager().GetRender().m_vblank_handler.SetAddr(handler_addr); } @@ -673,12 +652,6 @@ int cellGcmGetCurrentDisplayBufferId(u32 id_addr) { cellGcmSys->Warning("cellGcmGetCurrentDisplayBufferId(id_addr=0x%x)", id_addr); - if (!Memory.IsGoodAddr(id_addr)) - { - cellGcmSys->Error("cellGcmGetCurrentDisplayBufferId : CELL_EFAULT"); - return CELL_EFAULT; - } - Memory.Write32(id_addr, Emu.GetGSManager().GetRender().m_gcm_current_buffer); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index d515a84bb8..b3681a8f85 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -27,9 +27,6 @@ int cellGifDecExtCreate(u32 mainHandle, u32 threadInParam, u32 threadOutParam, u int cellGifDecOpen(u32 mainHandle, mem32_t subHandle, const mem_ptr_t src, mem_ptr_t openInfo) { - if (!subHandle.IsGood() || !src.IsGood()) - return CELL_GIFDEC_ERROR_ARG; - CellGifDecSubHandle *current_subHandle = new CellGifDecSubHandle; current_subHandle->fd = 0; current_subHandle->src = *src; @@ -63,9 +60,6 @@ int cellGifDecOpen(u32 mainHandle, mem32_t subHandle, const mem_ptr_t info) { - if (!info.IsGood()) - return CELL_GIFDEC_ERROR_ARG; - CellGifDecSubHandle* subHandle_data; if(!cellGifDec->CheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; @@ -116,9 +110,6 @@ int cellGifDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t inParam, mem_ptr_t outParam) { - if (!inParam.IsGood() || !outParam.IsGood()) - return CELL_GIFDEC_ERROR_ARG; - CellGifDecSubHandle* subHandle_data; if(!cellGifDec->CheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; @@ -146,9 +137,6 @@ int cellGifDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_t dataCtrlParam, mem_ptr_t dataOutInfo) { - if (!data.IsGood() || !dataCtrlParam.IsGood() || !dataOutInfo.IsGood()) - return CELL_GIFDEC_ERROR_ARG; - dataOutInfo->status = CELL_GIFDEC_DEC_STATUS_STOP; CellGifDecSubHandle* subHandle_data; diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index a10c0c13d3..81a139c3ba 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -33,9 +33,6 @@ int cellJpgDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s cellJpgDec->Warning("cellJpgDecOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x)", mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo); - if (!subHandle.IsGood() || !src.IsGood()) - return CELL_JPGDEC_ERROR_ARG; - CellJpgDecSubHandle *current_subHandle = new CellJpgDecSubHandle; current_subHandle->fd = 0; @@ -84,9 +81,6 @@ int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tLog("cellJpgDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%llx)", mainHandle, subHandle, info.GetAddr()); - if (!info.IsGood()) - return CELL_JPGDEC_ERROR_ARG; - CellJpgDecSubHandle* subHandle_data; if(!cellJpgDec->CheckId(subHandle, subHandle_data)) return CELL_JPGDEC_ERROR_FATAL; @@ -155,9 +149,6 @@ int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t dataCtrlParam, mem_ptr_t dataOutInfo) { - if (!data.IsGood() || !dataCtrlParam.IsGood() || !dataOutInfo.IsGood()) - return CELL_JPGDEC_ERROR_ARG; - dataOutInfo->status = CELL_JPGDEC_DEC_STATUS_STOP; CellJpgDecSubHandle* subHandle_data; if(!cellJpgDec->CheckId(subHandle, subHandle_data)) @@ -302,9 +293,6 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int cellJpgDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_t inParam, mem_ptr_t outParam) { - if (!inParam.IsGood() || !outParam.IsGood()) - return CELL_JPGDEC_ERROR_ARG; - CellJpgDecSubHandle* subHandle_data; if(!cellJpgDec->CheckId(subHandle, subHandle_data)) return CELL_JPGDEC_ERROR_FATAL; diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index d918962343..1a70d38543 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -41,16 +41,13 @@ int UTF16stoUTF8s(mem16_ptr_t utf16, mem64_t utf16_len, mem8_ptr_t utf8, mem64_t cellL10n->Warning("UTF16stoUTF8s(utf16_addr=0x%x, utf16_len_addr=0x%x, utf8_addr=0x%x, utf8_len_addr=0x%x)", utf16.GetAddr(), utf16_len.GetAddr(), utf8.GetAddr(), utf8_len.GetAddr()); - if (!utf16.IsGood() || !utf16_len.IsGood() || !utf8_len.IsGood()) - return SRCIllegal; - std::u16string wstr =(char16_t*)Memory.VirtualToRealAddr(utf16.GetAddr()); wstr.resize(utf16_len.GetValue()); // TODO: Is this really the role of utf16_len in this function? #ifdef _MSC_VER std::wstring_convert,char16_t> convert; std::string str = convert.to_bytes(wstr); - if (!utf8.IsGood() || utf8_len.GetValue() < str.size()) + if (utf8_len.GetValue() < str.size()) { utf8_len = str.size(); return DSTExhausted; @@ -64,12 +61,7 @@ int UTF16stoUTF8s(mem16_ptr_t utf16, mem64_t utf16_len, mem8_ptr_t utf8, mem64_t int jstrchk(mem8_ptr_t jstr) { - if (!jstr.IsGood()) - cellL10n->Error("jstrchk(jstr_addr=0x%x): invalid address", jstr.GetAddr()); - else if (jstr[0]) - cellL10n->Log("jstrchk(jstr_addr=0x%x): utf-8: [%s]", jstr.GetAddr(), Memory.ReadString(jstr.GetAddr()).c_str()); - else - cellL10n->Log("jstrchk(jstr_addr=0x%x): empty string", jstr.GetAddr()); + cellL10n->Warning("jstrchk(jstr_addr=0x%x) -> utf8", jstr.GetAddr()); return L10N_STR_UTF8; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index d3959b9e32..21d1d4515a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -31,11 +31,6 @@ int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_tWarning("cellMsgDialogOpen2(type=0x%x, msgString_addr=0x%x, callback_addr=0x%x, userData=0x%x, extParam=0x%x)", type, msgString.GetAddr(), callback.GetAddr(), userData, extParam); - if (!msgString.IsGood() || !callback.IsGood()) - { - return CELL_EFAULT; - } - //type |= CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE; //type |= CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO; @@ -356,13 +351,6 @@ int cellMsgDialogAbort() int cellMsgDialogProgressBarSetMsg(u32 progressBarIndex, mem_list_ptr_t msgString) { - if (!msgString.IsGood()) - { - cellSysutil->Error("cellMsgDialogProgressBarSetMsg(progressBarIndex=%d, msgString_addr=0x%x): CELL_EFAULT", - progressBarIndex, msgString.GetAddr()); - return CELL_EFAULT; - } - cellSysutil->Warning("cellMsgDialogProgressBarSetMsg(progressBarIndex=%d, msgString_addr=0x%x): '%s'", progressBarIndex, msgString.GetAddr(), msgString.GetString()); diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index 12cab5b0df..ad1b6d5e41 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -26,12 +26,6 @@ int cellNetCtlGetState(mem32_t state) { cellNetCtl->Log("cellNetCtlGetState(state_addr=0x%x)", state.GetAddr()); - if (!state.IsGood()) - { - cellNetCtl->Error("cellNetCtlGetState : CELL_NET_CTL_ERROR_INVALID_ADDR"); - return CELL_NET_CTL_ERROR_INVALID_ADDR; - } - state = CELL_NET_CTL_STATE_Disconnected; // TODO: Allow other states return CELL_OK; } @@ -58,12 +52,6 @@ int cellNetCtlNetStartDialogLoadAsync(mem_ptr_t p { cellNetCtl->Todo("cellNetCtlNetStartDialogLoadAsync(param_addr=0x%x)", param.GetAddr()); - if (!param.IsGood()) - { - cellNetCtl->Error("cellNetCtlNetStartDialogLoadAsync : CELL_NET_CTL_ERROR_INVALID_ADDR"); - return CELL_NET_CTL_ERROR_INVALID_ADDR; - } - return CELL_OK; } @@ -77,12 +65,6 @@ int cellNetCtlNetStartDialogUnloadAsync(mem_ptr_tTodo("cellNetCtlNetStartDialogUnloadAsync(result_addr=0x%x)", result.GetAddr()); - if (!result.IsGood()) - { - cellNetCtl->Error("cellNetCtlNetStartDialogLoadAsync : CELL_NET_CTL_ERROR_INVALID_ADDR"); - return CELL_NET_CTL_ERROR_INVALID_ADDR; - } - return CELL_OK; } @@ -90,12 +72,6 @@ int cellNetCtlGetNatInfo(mem_ptr_t natInfo) { cellNetCtl->Todo("cellNetCtlGetNatInfo(natInfo_addr=0x%x)", natInfo.GetAddr()); - if (!natInfo.IsGood()) - { - cellNetCtl->Error("cellNetCtlGetNatInfo : CELL_NET_CTL_ERROR_INVALID_ADDR"); - return CELL_NET_CTL_ERROR_INVALID_ADDR; - } - if (natInfo->size == 0) { cellNetCtl->Error("cellNetCtlGetNatInfo : CELL_NET_CTL_ERROR_INVALID_SIZE"); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index f7b32751f1..96e02756dd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -132,12 +132,6 @@ int cellPamfGetHeaderSize(mem_ptr_t pAddr, u64 fileSize, mem64_t pSi { cellPamf->Warning("cellPamfGetHeaderSize(pAddr=0x%x, fileSize=%d, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, pSize.GetAddr()); - if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pSize.IsGood()) - { - cellPamf->Error("cellPamfGetHeaderSize: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - //if ((u32)pAddr->magic != 0x464d4150) //return CELL_PAMF_ERROR_UNKNOWN_TYPE; @@ -150,12 +144,6 @@ int cellPamfGetHeaderSize2(mem_ptr_t pAddr, u64 fileSize, u32 attrib { cellPamf->Warning("cellPamfGetHeaderSize2(pAddr=0x%x, fileSize=%d, attribute=0x%x, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, attribute, pSize.GetAddr()); - if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pSize.IsGood()) - { - cellPamf->Error("cellPamfGetHeaderSize2: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - //if ((u32)pAddr->magic != 0x464d4150) //return CELL_PAMF_ERROR_UNKNOWN_TYPE; @@ -168,12 +156,6 @@ int cellPamfGetStreamOffsetAndSize(mem_ptr_t pAddr, u64 fileSize, me { cellPamf->Warning("cellPamfGetStreamOffsetAndSize(pAddr=0x%x, fileSize=%d, pOffset_addr=0x%x, pSize_addr=0x%x)", pAddr.GetAddr(), fileSize, pOffset.GetAddr(), pSize.GetAddr()); - if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048) || !pOffset.IsGood() || !pSize.IsGood()) - { - cellPamf->Error("cellPamfGetStreamOffsetAndSize: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - //if ((u32)pAddr->magic != 0x464d4150) //return CELL_PAMF_ERROR_UNKNOWN_TYPE; @@ -188,12 +170,6 @@ int cellPamfVerify(mem_ptr_t pAddr, u64 fileSize) { cellPamf->Warning("cellPamfVerify(pAddr=0x%x, fileSize=%d)", pAddr.GetAddr(), fileSize); - if (!Memory.IsGoodAddr(pAddr.GetAddr(), 2048)) - { - cellPamf->Error("cellPamfVerify: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - return CELL_OK; } @@ -201,13 +177,6 @@ int cellPamfReaderInitialize(mem_ptr_t pSelf, mem_ptr_tWarning("cellPamfReaderInitialize(pSelf=0x%x, pAddr=0x%x, fileSize=%d, attribute=0x%x)", pSelf.GetAddr(), pAddr.GetAddr(), fileSize, attribute); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pAddr.GetAddr(), 2048)) - { - cellPamf->Error("cellPamfReaderInitialize: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - - } - if (fileSize) { pSelf->fileSize = fileSize; @@ -231,12 +200,6 @@ int cellPamfReaderGetPresentationStartTime(mem_ptr_t pSelf, mem_ { cellPamf->Warning("cellPamfReaderGetPresentationStartTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr()); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderGetPresentationStartTime: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); const u32 upper = (u16)pAddr->start_pts_high; pTimeStamp->upper = upper; @@ -248,12 +211,6 @@ int cellPamfReaderGetPresentationEndTime(mem_ptr_t pSelf, mem_pt { cellPamf->Warning("cellPamfReaderGetPresentationEndTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.GetAddr(), pTimeStamp.GetAddr()); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderGetPresentationEndTime: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); const u32 upper = (u16)pAddr->end_pts_high; pTimeStamp->upper = upper; @@ -265,12 +222,6 @@ int cellPamfReaderGetMuxRateBound(mem_ptr_t pSelf) { cellPamf->Warning("cellPamfReaderGetMuxRateBound(pSelf=0x%x)", pSelf.GetAddr()); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderGetMuxRateBound: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); return pAddr->mux_rate_max; } @@ -279,12 +230,6 @@ int cellPamfReaderGetNumberOfStreams(mem_ptr_t pSelf) { cellPamf->Warning("cellPamfReaderGetNumberOfStreams(pSelf=0x%x)", pSelf.GetAddr()); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderGetNumberOfStreams: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); return pAddr->stream_count; } @@ -293,12 +238,6 @@ int cellPamfReaderGetNumberOfSpecificStreams(mem_ptr_t pSelf, u8 { cellPamf->Warning("cellPamfReaderGetNumberOfSpecificStreams(pSelf=0x%x, streamType=%d)", pSelf.GetAddr(), streamType); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderGetNumberOfSpecificStreams: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); int counts[6] = {0, 0, 0, 0, 0, 0}; @@ -330,12 +269,6 @@ int cellPamfReaderSetStreamWithIndex(mem_ptr_t pSelf, u8 streamI { cellPamf->Warning("cellPamfReaderSetStreamWithIndex(pSelf=0x%x, streamIndex=%d)", pSelf.GetAddr(), streamIndex); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderSetStreamWithIndex: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); if (streamIndex < pAddr->stream_count) @@ -354,12 +287,6 @@ int cellPamfReaderSetStreamWithTypeAndChannel(mem_ptr_t pSelf, u { cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndChannel(pSelf=0x%x, streamType=%d, ch=%d)", pSelf.GetAddr(), streamType, ch); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderSetStreamWithTypeAndChannel: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); if (streamType > 5) @@ -388,12 +315,6 @@ int cellPamfReaderSetStreamWithTypeAndIndex(mem_ptr_t pSelf, u8 { cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndIndex(pSelf=0x%x, streamType=%d, streamIndex=%d)", pSelf.GetAddr(), streamType, streamIndex); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderSetStreamWithTypeAndIndex: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); u32 found = 0; @@ -441,12 +362,6 @@ int cellPamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_tWarning("cellPamfStreamTypeToEsFilterId(type=%d, ch=%d, pEsFilterId_addr=0x%x)", type, ch, pEsFilterId.GetAddr()); - if (!pEsFilterId.IsGood()) - { - cellPamf->Error("cellPamfStreamTypeToEsFilterId: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - return pamfStreamTypeToEsFilterId(type, ch, pEsFilterId); } @@ -454,12 +369,6 @@ int cellPamfReaderGetStreamIndex(mem_ptr_t pSelf) { cellPamf->Log("cellPamfReaderGetStreamIndex(pSelf=0x%x)", pSelf.GetAddr()); - if (!pSelf.IsGood()) - { - cellPamf->Error("cellPamfReaderGetStreamIndex: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - return pSelf->stream; } @@ -467,12 +376,6 @@ int cellPamfReaderGetStreamTypeAndChannel(mem_ptr_t pSelf, mem8_ { cellPamf->Warning("cellPamfReaderGetStreamTypeAndChannel(pSelf=0x%x (stream=%d), pType_addr=0x%x, pCh_addr=0x%x", pSelf.GetAddr(), pSelf->stream, pType.GetAddr(), pCh.GetAddr()); - if (!pSelf.IsGood() || !pCh.IsGood()) - { - cellPamf->Error("cellPamfReaderGetStreamTypeAndChannel: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - pType = pamfGetStreamType(pSelf, pSelf->stream); pCh = pamfGetStreamChannel(pSelf, pSelf->stream); return CELL_OK; @@ -482,12 +385,6 @@ int cellPamfReaderGetEsFilterId(mem_ptr_t pSelf, mem_ptr_tWarning("cellPamfReaderGetEsFilterId(pSelf=0x%x (stream=%d), pEsFilterId_addr=0x%x)", pSelf.GetAddr(), pSelf->stream, pEsFilterId.GetAddr()); - if (!pSelf.IsGood() || !pEsFilterId.IsGood()) - { - cellPamf->Error("cellPamfReaderGetEsFilterId: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - return pamfStreamTypeToEsFilterId(pamfGetStreamType(pSelf, pSelf->stream), pamfGetStreamChannel(pSelf, pSelf->stream), pEsFilterId); } @@ -496,12 +393,6 @@ int cellPamfReaderGetStreamInfo(mem_ptr_t pSelf, u32 pInfo_addr, { cellPamf->Warning("cellPamfReaderGetStreamInfo(pSelf=0x%x, stream=%d, pInfo_addr=0x%x, size=%d)", pSelf.GetAddr(), pSelf->stream, pInfo_addr, size); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderGetStreamInfo: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); memset(Memory + pInfo_addr, 0, size); @@ -609,12 +500,6 @@ int cellPamfReaderGetNumberOfEp(mem_ptr_t pSelf) { cellPamf->Warning("cellPamfReaderGetNumberOfEp(pSelf=0x%x, stream=%d)", pSelf.GetAddr(), pSelf->stream); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderGetNumberOfEp: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); return pAddr->stream_headers[pSelf->stream].ep_num; } @@ -623,12 +508,6 @@ int cellPamfReaderGetEpIteratorWithIndex(mem_ptr_t pSelf, u32 ep { cellPamf->Todo("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x, stream=%d, epIndex=%d, pIt_addr=0x%x)", pSelf.GetAddr(), pSelf->stream, epIndex, pIt.GetAddr()); - if (!pSelf.IsGood() || !Memory.IsGoodAddr(pSelf->pAddr)) - { - cellPamf->Error("cellPamfReaderGetEpIteratorWithIndex: CELL_PAMF_ERROR_INVALID_ARG"); - return CELL_PAMF_ERROR_INVALID_ARG; - } - const mem_ptr_t pAddr(pSelf->pAddr); //TODO: return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index b704303428..6ee981a95c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -56,9 +56,6 @@ int cellPngDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s cellPngDec->Warning("cellPngDecOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x)", mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo); - if (!subHandle.IsGood() || !src.IsGood()) - return CELL_PNGDEC_ERROR_ARG; - CellPngDecSubHandle *current_subHandle = new CellPngDecSubHandle; current_subHandle->fd = 0; current_subHandle->src = *src; @@ -123,9 +120,6 @@ int cellPngDecClose(u32 mainHandle, u32 subHandle) int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t info) { - if (!info.IsGood()) - return CELL_PNGDEC_ERROR_ARG; - cellPngDec->Warning("cellPngDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%x)", mainHandle, subHandle, info.GetAddr()); CellPngDecSubHandle* subHandle_data; if(!cellPngDec->CheckId(subHandle, subHandle_data)) @@ -195,9 +189,6 @@ int cellPngDecExtReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t dataCtrlParam, mem_ptr_t dataOutInfo) { - if (!data.IsGood() || !dataCtrlParam.IsGood() || !dataOutInfo.IsGood()) - return CELL_PNGDEC_ERROR_ARG; - dataOutInfo->status = CELL_PNGDEC_DEC_STATUS_STOP; CellPngDecSubHandle* subHandle_data; if(!cellPngDec->CheckId(subHandle, subHandle_data)) @@ -346,9 +337,6 @@ int cellPngDecExtDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, cons int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_t inParam, mem_ptr_t outParam) { - if (!inParam.IsGood() || !outParam.IsGood()) - return CELL_PNGDEC_ERROR_ARG; - CellPngDecSubHandle* subHandle_data; if(!cellPngDec->CheckId(subHandle, subHandle_data)) return CELL_PNGDEC_ERROR_FATAL; diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index bf073c0439..e05aa91a7c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -640,7 +640,7 @@ int cellRescInit(mem_ptr_t initConfig) return CELL_RESC_ERROR_REINITIALIZED; } - if (!initConfig.IsGood() || InternalVersion(initConfig.GetAddr()) == -1 || !CheckInitConfig(initConfig)) + if (InternalVersion(initConfig.GetAddr()) == -1 || !CheckInitConfig(initConfig)) { cellResc->Error("cellRescInit : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; @@ -687,12 +687,6 @@ int cellRescVideoOutResolutionId2RescBufferMode(u32 resolutionId, mem32_t buffer { cellResc->Log("cellRescVideoOutResolutionId2RescBufferMode(resolutionId=%d, bufferMode_addr=0x%x)", resolutionId, bufferMode.GetAddr()); - if (!bufferMode.IsGood()) - { - cellResc->Error("cellRescVideoOutResolutionId2RescBufferMode : CELL_RESC_ERROR_BAD_ARGUMENT"); - return CELL_RESC_ERROR_BAD_ARGUMENT; - } - switch (resolutionId) { case CELL_VIDEO_OUT_RESOLUTION_1080: @@ -725,12 +719,6 @@ int cellRescSetDsts(u32 dstsMode, mem_ptr_t dsts) return CELL_RESC_ERROR_NOT_INITIALIZED; } - if (!dsts.IsGood()) - { - cellResc->Error("cellRescSetDst : CELL_RESC_ERROR_BAD_ARGUMENT"); - return CELL_RESC_ERROR_BAD_ARGUMENT; - } - if ((dstsMode != CELL_RESC_720x480) && (dstsMode != CELL_RESC_720x576) && (dstsMode != CELL_RESC_1280x720) && (dstsMode != CELL_RESC_1920x1080)) { cellResc->Error("cellRescSetDsts : CELL_RESC_ERROR_BAD_ARGUMENT"); @@ -958,17 +946,17 @@ int cellRescGetBufferSize(mem32_t colorBuffers, mem32_t vertexArray, mem32_t fra fragmentUcodeSize = 0x300; } - if (colorBuffers.IsGood()) + if (colorBuffers.GetAddr()) { colorBuffers = colorBuffersSize; } - if (vertexArray.IsGood()) + if (vertexArray.GetAddr()) { vertexArray = vertexArraySize; } - if (fragmentShader.IsGood()) + if (fragmentShader.GetAddr()) { fragmentShader = fragmentUcodeSize; } @@ -1001,12 +989,6 @@ int cellRescGcmSurface2RescSrc(mem_ptr_t gcmSurface, mem_ptr_tLog("cellRescGcmSurface2RescSrc(gcmSurface_addr=0x%x, rescSrc_addr=0x%x)", gcmSurface.GetAddr(), rescSrc.GetAddr()); - if (!gcmSurface.IsGood() || !rescSrc.IsGood()) - { - cellResc->Error("cellRescGcmSurface2RescSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); - return CELL_RESC_ERROR_BAD_ARGUMENT; - } - u8 textureFormat = GcmSurfaceFormat2GcmTextureFormat(gcmSurface->colorFormat, gcmSurface->type); s32 xW = 1, xH = 1; @@ -1044,7 +1026,7 @@ int cellRescSetSrc(s32 idx, mem_ptr_t src) return CELL_RESC_ERROR_NOT_INITIALIZED; } - if(idx < 0 || SRC_BUFFER_NUM <= idx || !src.IsGood()) + if(idx < 0 || SRC_BUFFER_NUM <= idx) { cellResc->Error("cellRescSetSrc : CELL_RESC_ERROR_BAD_ARGUMENT"); return CELL_RESC_ERROR_BAD_ARGUMENT; @@ -1125,12 +1107,6 @@ int cellRescSetBufferAddress(mem32_t colorBuffers, mem32_t vertexArray, mem32_t return CELL_RESC_ERROR_NOT_INITIALIZED; } - if(!colorBuffers.IsGood() || !vertexArray.IsGood() || !fragmentShader.IsGood()) - { - cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ARGUMENT"); - return CELL_RESC_ERROR_BAD_ARGUMENT; - } - if(colorBuffers.GetAddr() % COLOR_BUFFER_ALIGNMENT || vertexArray.GetAddr() % VERTEX_BUFFER_ALIGNMENT || fragmentShader.GetAddr() % FRAGMENT_SHADER_ALIGNMENT) { cellResc->Error("cellRescSetBufferAddress : CELL_RESC_ERROR_BAD_ALIGNMENT"); @@ -1169,11 +1145,6 @@ void cellRescSetFlipHandler(u32 handler_addr) { cellResc->Warning("cellRescSetFlipHandler(handler_addr=0x%x)", handler_addr); - if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) - { - cellResc->Error("cellRescSetFlipHandler(handler_addr=%d): invalid address", handler_addr); - } - Emu.GetGSManager().GetRender().m_flip_handler.SetAddr(handler_addr); } @@ -1214,11 +1185,6 @@ void cellRescSetVBlankHandler(u32 handler_addr) { cellResc->Warning("cellRescSetVBlankHandler(handler_addr=0x%x)", handler_addr); - if (handler_addr != 0 && !Memory.IsGoodAddr(handler_addr)) - { - cellResc->Error("cellRescSetVBlankHandler(handler_addr=%d): invalid address", handler_addr); - } - Emu.GetGSManager().GetRender().m_vblank_handler.SetAddr(handler_addr); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp index 6856299797..f16dc3752f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp @@ -26,9 +26,6 @@ int cellRtcGetCurrentTick(mem_ptr_t pTick) { cellRtc->Log("cellRtcGetCurrentTick(pTick=0x%x)", pTick.GetAddr()); - if (!pTick.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime unow = rDateTime::UNow(); pTick->tick = unow.GetTicks(); return CELL_OK; @@ -38,9 +35,6 @@ int cellRtcGetCurrentClock(mem_ptr_t pClock, s32 iTimeZone) { cellRtc->Log("cellRtcGetCurrentClock(pClock=0x%x, time_zone=%d)", pClock.GetAddr(), iTimeZone); - if (!pClock.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime unow = rDateTime::UNow(); // Add time_zone as offset in minutes. @@ -62,9 +56,6 @@ int cellRtcGetCurrentClockLocalTime(mem_ptr_t pClock) { cellRtc->Log("cellRtcGetCurrentClockLocalTime(pClock=0x%x)", pClock.GetAddr()); - if (!pClock.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime unow = rDateTime::UNow(); pClock->year = unow.GetYear(rDateTime::TZ::Local); @@ -82,9 +73,6 @@ int cellRtcFormatRfc2822(u32 pszDateTime_addr, mem_ptr_t pUtc, s32 { cellRtc->Log("cellRtcFormatRfc2822(pszDateTime_addr=0x%x, pUtc=0x%x, time_zone=%d)", pszDateTime_addr, pUtc.GetAddr(), iTimeZone); - if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) - return CELL_RTC_ERROR_INVALID_POINTER; - // Add time_zone as offset in minutes. rTimeSpan tz = rTimeSpan(0, (long) iTimeZone, 0, 0); @@ -103,9 +91,6 @@ int cellRtcFormatRfc2822LocalTime(u32 pszDateTime_addr, mem_ptr_t p { cellRtc->Log("cellRtcFormatRfc2822LocalTime(pszDateTime_addr=0x%x, pUtc=0x%x)", pszDateTime_addr, pUtc.GetAddr()); - if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) - return CELL_RTC_ERROR_INVALID_POINTER; - // Get date from ticks. rDateTime date = rDateTime((time_t)pUtc->tick); @@ -120,9 +105,6 @@ int cellRtcFormatRfc3339(u32 pszDateTime_addr, mem_ptr_t pUtc, s32 { cellRtc->Log("cellRtcFormatRfc3339(pszDateTime_addr=0x%x, pUtc=0x%x, iTimeZone=%d)", pszDateTime_addr, pUtc.GetAddr(), iTimeZone); - if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) - return CELL_RTC_ERROR_INVALID_POINTER; - // Add time_zone as offset in minutes. rTimeSpan tz = rTimeSpan(0, (long) iTimeZone, 0, 0); @@ -141,9 +123,6 @@ int cellRtcFormatRfc3339LocalTime(u32 pszDateTime_addr, mem_ptr_t p { cellRtc->Log("cellRtcFormatRfc3339LocalTime(pszDateTime_addr=0x%x, pUtc=0x%x)", pszDateTime_addr, pUtc.GetAddr()); - if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) - return CELL_RTC_ERROR_INVALID_POINTER; - // Get date from ticks. rDateTime date = rDateTime((time_t) pUtc->tick); @@ -158,9 +137,6 @@ int cellRtcParseDateTime(mem_ptr_t pUtc, u32 pszDateTime_addr) { cellRtc->Log("cellRtcParseDateTime(pUtc=0x%x, pszDateTime_addr=0x%x)", pUtc.GetAddr(), pszDateTime_addr); - if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) - return CELL_RTC_ERROR_INVALID_POINTER; - // Get date from formatted string. rDateTime date; const std::string& format = Memory.ReadString(pszDateTime_addr); @@ -175,9 +151,6 @@ int cellRtcParseRfc3339(mem_ptr_t pUtc, u32 pszDateTime_addr) { cellRtc->Log("cellRtcParseRfc3339(pUtc=0x%x, pszDateTime_addr=0x%x)", pUtc.GetAddr(), pszDateTime_addr); - if (!pUtc.IsGood() || !Memory.IsGoodAddr(pszDateTime_addr)) - return CELL_RTC_ERROR_INVALID_POINTER; - // Get date from RFC3339 formatted string. rDateTime date; const std::string& format = Memory.ReadString(pszDateTime_addr); @@ -192,9 +165,6 @@ int cellRtcGetTick(mem_ptr_t pTime, mem_ptr_t pTic { cellRtc->Log("cellRtcGetTick(pTime=0x%x, pTick=0x%x)", pTime.GetAddr(), pTick.GetAddr()); - if (!pTime.IsGood() || !pTick.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime datetime = rDateTime(pTime->day, (rDateTime::Month)pTime->month.ToLE(), pTime->year, pTime->hour, pTime->minute, pTime->second, (pTime->microsecond / 1000)); pTick->tick = datetime.GetTicks(); @@ -205,9 +175,6 @@ int cellRtcSetTick(mem_ptr_t pTime, mem_ptr_t pTic { cellRtc->Log("cellRtcSetTick(pTime=0x%x, pTick=0x%x)", pTime.GetAddr(), pTick.GetAddr()); - if (!pTime.IsGood() || !pTick.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime date = rDateTime((time_t)pTick->tick); pTime->year = date.GetYear(rDateTime::TZ::UTC); @@ -225,9 +192,6 @@ int cellRtcTickAddTicks(mem_ptr_t pTick0, mem_ptr_t pT { cellRtc->Log("cellRtcTickAddTicks(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - pTick0->tick = pTick1->tick + lAdd; return CELL_OK; } @@ -236,9 +200,6 @@ int cellRtcTickAddMicroseconds(mem_ptr_t pTick0, mem_ptr_tLog("cellRtcTickAddMicroseconds(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime date = rDateTime((time_t)pTick1->tick); rTimeSpan microseconds = rTimeSpan(0, 0, 0, lAdd / 1000); date.Add(microseconds); @@ -250,9 +211,6 @@ int cellRtcTickAddMicroseconds(mem_ptr_t pTick0, mem_ptr_t pTick0, mem_ptr_t pTick1, s64 lAdd) { cellRtc->Log("cellRtcTickAddSeconds(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); - - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date = rDateTime((time_t)pTick1->tick); rTimeSpan seconds = rTimeSpan(0, 0, lAdd, 0); @@ -266,9 +224,6 @@ int cellRtcTickAddMinutes(mem_ptr_t pTick0, mem_ptr_t { cellRtc->Log("cellRtcTickAddMinutes(pTick0=0x%x, pTick1=0x%x, lAdd=%lld)", pTick0.GetAddr(), pTick1.GetAddr(), lAdd); - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime date = rDateTime((time_t)pTick1->tick); rTimeSpan minutes = rTimeSpan(0, lAdd, 0, 0); date.Add(minutes); @@ -280,9 +235,6 @@ int cellRtcTickAddMinutes(mem_ptr_t pTick0, mem_ptr_t int cellRtcTickAddHours(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { cellRtc->Log("cellRtcTickAddHours(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); - - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date = rDateTime((time_t)pTick1->tick); rTimeSpan hours = rTimeSpan(iAdd, 0, 0, 0); @@ -295,9 +247,6 @@ int cellRtcTickAddHours(mem_ptr_t pTick0, mem_ptr_t pT int cellRtcTickAddDays(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { cellRtc->Log("cellRtcTickAddDays(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); - - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date = rDateTime((time_t)pTick1->tick); rDateSpan days = rDateSpan(0, 0, 0, iAdd); @@ -310,9 +259,6 @@ int cellRtcTickAddDays(mem_ptr_t pTick0, mem_ptr_t pTi int cellRtcTickAddWeeks(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { cellRtc->Log("cellRtcTickAddWeeks(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); - - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date = rDateTime((time_t)pTick1->tick); rDateSpan weeks = rDateSpan(0, 0, iAdd, 0); @@ -325,9 +271,6 @@ int cellRtcTickAddWeeks(mem_ptr_t pTick0, mem_ptr_t pT int cellRtcTickAddMonths(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { cellRtc->Log("cellRtcTickAddMonths(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); - - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date = rDateTime((time_t)pTick1->tick); rDateSpan months = rDateSpan(0, iAdd, 0, 0); @@ -340,9 +283,6 @@ int cellRtcTickAddMonths(mem_ptr_t pTick0, mem_ptr_t p int cellRtcTickAddYears(mem_ptr_t pTick0, mem_ptr_t pTick1, s32 iAdd) { cellRtc->Log("cellRtcTickAddYears(pTick0=0x%x, pTick1=0x%x, iAdd=%d)", pTick0.GetAddr(), pTick1.GetAddr(), iAdd); - - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date = rDateTime((time_t)pTick1->tick); rDateSpan years = rDateSpan(iAdd, 0, 0, 0); @@ -356,9 +296,6 @@ int cellRtcConvertUtcToLocalTime(mem_ptr_t pUtc, mem_ptr_tLog("cellRtcConvertUtcToLocalTime(pUtc=0x%x, pLocalTime=0x%x)", pUtc.GetAddr(), pLocalTime.GetAddr()); - if (!pUtc.IsGood() || !pLocalTime.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime time = rDateTime((time_t)pUtc->tick); rDateTime local_time = time.FromUTC(false); pLocalTime->tick = local_time.GetTicks(); @@ -369,9 +306,6 @@ int cellRtcConvertLocalTimeToUtc(mem_ptr_t pLocalTime, mem_ptr_tLog("cellRtcConvertLocalTimeToUtc(pLocalTime=0x%x, pUtc=0x%x)", pLocalTime.GetAddr(), pUtc.GetAddr()); - if (!pLocalTime.IsGood() || !pUtc.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - rDateTime time = rDateTime((time_t)pLocalTime->tick); rDateTime utc_time = time.ToUTC(false); pUtc->tick = utc_time.GetTicks(); @@ -382,9 +316,6 @@ int cellRtcGetDosTime(mem_ptr_t pDateTime, mem32_t puiDosTime) { cellRtc->Log("cellRtcGetDosTime(pDateTime=0x%x, puiDosTime=0x%x)", pDateTime.GetAddr(), puiDosTime.GetAddr()); - if (!pDateTime.IsGood() || !puiDosTime.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - // Convert to DOS time. rDateTime date_time = rDateTime(pDateTime->day, (rDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); puiDosTime = date_time.GetAsDOS(); @@ -396,9 +327,6 @@ int cellRtcGetTime_t(mem_ptr_t pDateTime, mem64_t piTime) { cellRtc->Log("cellRtcGetTime_t(pDateTime=0x%x, piTime=0x%x)", pDateTime.GetAddr(), piTime.GetAddr()); - if (!pDateTime.IsGood() || !piTime.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - // Convert to POSIX time_t. rDateTime date_time = rDateTime(pDateTime->day, (rDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); piTime = convertToUNIXTime(date_time.GetSecond(rDateTime::TZ::UTC), date_time.GetMinute(rDateTime::TZ::UTC), @@ -411,9 +339,6 @@ int cellRtcGetWin32FileTime(mem_ptr_t pDateTime, mem64_t pulWin { cellRtc->Log("cellRtcGetWin32FileTime(pDateTime=0x%x, pulWin32FileTime=0x%x)", pDateTime.GetAddr(), pulWin32FileTime.GetAddr()); - if (!pDateTime.IsGood() || !pulWin32FileTime.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - // Convert to WIN32 FILETIME. rDateTime date_time = rDateTime(pDateTime->day, (rDateTime::Month)pDateTime->month.ToLE(), pDateTime->year, pDateTime->hour, pDateTime->minute, pDateTime->second, (pDateTime->microsecond / 1000)); pulWin32FileTime = convertToWin32FILETIME(date_time.GetSecond(rDateTime::TZ::UTC), date_time.GetMinute(rDateTime::TZ::UTC), @@ -425,9 +350,6 @@ int cellRtcGetWin32FileTime(mem_ptr_t pDateTime, mem64_t pulWin int cellRtcSetDosTime(mem_ptr_t pDateTime, u32 uiDosTime) { cellRtc->Log("cellRtcSetDosTime(pDateTime=0x%x, uiDosTime=0x%x)", pDateTime.GetAddr(), uiDosTime); - - if (!pDateTime.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date_time; rDateTime dos_time = date_time.SetFromDOS(uiDosTime); @@ -446,9 +368,6 @@ int cellRtcSetDosTime(mem_ptr_t pDateTime, u32 uiDosTime) int cellRtcSetTime_t(mem_ptr_t pDateTime, u64 iTime) { cellRtc->Log("cellRtcSetTime_t(pDateTime=0x%x, iTime=0x%llx)", pDateTime.GetAddr(), iTime); - - if (!pDateTime.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date_time = rDateTime((time_t)iTime); @@ -466,9 +385,6 @@ int cellRtcSetTime_t(mem_ptr_t pDateTime, u64 iTime) int cellRtcSetWin32FileTime(mem_ptr_t pDateTime, u64 ulWin32FileTime) { cellRtc->Log("cellRtcSetWin32FileTime(pDateTime=0x%x, ulWin32FileTime=0x%llx)", pDateTime, ulWin32FileTime); - - if (!pDateTime.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; rDateTime date_time = rDateTime((time_t)ulWin32FileTime); @@ -511,9 +427,6 @@ int cellRtcGetDayOfWeek(s32 year, s32 month, s32 day) int cellRtcCheckValid(mem_ptr_t pTime) { cellRtc->Log("cellRtcCheckValid(pTime=0x%x)", pTime.GetAddr()); - - if (!pTime.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; if ((pTime->year < 1) || (pTime->year > 9999)) return CELL_RTC_ERROR_INVALID_YEAR; else if ((pTime->month < 1) || (pTime->month > 12)) return CELL_RTC_ERROR_INVALID_MONTH; @@ -529,9 +442,6 @@ int cellRtcCompareTick(mem_ptr_t pTick0, mem_ptr_t pTi { cellRtc->Log("cellRtcCompareTick(pTick0=0x%x, pTick1=0x%x)", pTick0.GetAddr(), pTick1.GetAddr()); - if (!pTick0.IsGood() || !pTick1.IsGood()) - return CELL_RTC_ERROR_INVALID_POINTER; - if (pTick0->tick < pTick1->tick) return -1; else if (pTick0->tick > pTick1->tick) return 1; else return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index f60b770a34..d758100a5b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -21,12 +21,6 @@ int cellSpursInitialize(mem_ptr_t spurs, int nSpus, int spuPriority, return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursInitialize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - SPURSManagerAttribute *attr = new SPURSManagerAttribute(nSpus, spuPriority, ppuPriority, exitIfNoWork); spurs->spurs = new SPURSManager(attr); @@ -43,12 +37,6 @@ int cellSpursFinalize(mem_ptr_t spurs) return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursFinalize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - spurs->spurs->Finalize(); return CELL_OK; @@ -64,12 +52,6 @@ int cellSpursInitializeWithAttribute(mem_ptr_t spurs, const mem_ptr_t return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood() || !attr.IsGood()) - { - cellSpurs->Error("cellSpursInitializeWithAttribute : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - spurs->spurs = new SPURSManager(attr->attr); return CELL_OK; @@ -85,12 +67,6 @@ int cellSpursInitializeWithAttribute2(mem_ptr_t spurs, const mem_ptr return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood() || !attr.IsGood()) - { - cellSpurs->Error("cellSpursInitializeWithAttribute2 : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - spurs->spurs = new SPURSManager(attr->attr); return CELL_OK; @@ -106,12 +82,6 @@ int _cellSpursAttributeInitialize(mem_ptr_t attr, int nSpus, return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!attr.IsGood()) - { - cellSpurs->Error("_cellSpursAttributeInitialize : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - attr->attr = new SPURSManagerAttribute(nSpus, spuPriority, ppuPriority, exitIfNoWork); return CELL_OK; @@ -127,12 +97,6 @@ int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_tError("cellSpursAttributeSetMemoryContainerForSpuThread : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - attr->attr->_setMemoryContainerForSpuThread(container); return CELL_OK; @@ -148,12 +112,6 @@ int cellSpursAttributeSetNamePrefix(mem_ptr_t attr, const me return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!attr.IsGood() || !prefix.IsGood()) - { - cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - if (size > CELL_SPURS_NAME_MAX_LENGTH) { cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_INVAL"); @@ -175,12 +133,6 @@ int cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t a return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!attr.IsGood()) - { - cellSpurs->Error("cellSpursAttributeEnableSpuPrintfIfAvailable : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -194,12 +146,6 @@ int cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t attr, return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!attr.IsGood()) - { - cellSpurs->Error("cellSpursAttributeSetSpuThreadGroupType : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - attr->attr->_setSpuThreadGroupType(type); return CELL_OK; @@ -216,12 +162,6 @@ int cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, c return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!attr.IsGood()) - { - cellSpurs->Error("cellSpursAttributeEnableSystemWorkload : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - for (int i = 0; i < CELL_SPURS_MAX_SPU; i++) { if (priority[i] != 1 || maxSpu == 0) @@ -243,12 +183,6 @@ int cellSpursGetSpuThreadGroupId(mem_ptr_t spurs, mem32_t group) return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood() || group.IsGood()) - { - cellSpurs->Error("cellSpursGetSpuThreadGroupId : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -262,12 +196,6 @@ int cellSpursGetNumSpuThread(mem_ptr_t spurs, mem32_t nThreads) return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood() || nThreads.IsGood()) - { - cellSpurs->Error("cellSpursGetNumSpuThread : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -281,12 +209,6 @@ int cellSpursGetSpuThreadId(mem_ptr_t spurs, mem32_t thread, mem32_t return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood() || !thread.IsGood() || nThreads.IsGood()) - { - cellSpurs->Error("cellSpursGetSpuThreadId : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -300,12 +222,6 @@ int cellSpursSetMaxContention(mem_ptr_t spurs, u32 workloadId, u32 ma return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursSetMaxContention : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -319,12 +235,6 @@ int cellSpursSetPriorities(mem_ptr_t spurs, u32 workloadId, const u8 return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursSetPriorities : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -338,12 +248,6 @@ int cellSpursSetPriority(mem_ptr_t spurs, u32 workloadId, u32 spuId, return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursSetPriority : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -357,12 +261,6 @@ int cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, const bool isP return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursSetPreemptionVictimHints : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -376,12 +274,6 @@ int cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t p return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood() || !port.IsGood()) - { - cellSpurs->Error("cellSpursAttachLv2EventQueue : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - spurs->spurs->AttachLv2EventQueue(queue, port, isDynamic); return CELL_OK; @@ -397,12 +289,6 @@ int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursDetachLv2EventQueue : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - spurs->spurs->DetachLv2EventQueue(port); return CELL_OK; @@ -418,12 +304,6 @@ int cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursEnableExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -437,12 +317,6 @@ int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, mem_func return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood() || eaHandler.IsGood()) - { - cellSpurs->Error("cellSpursSetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -456,12 +330,6 @@ int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t spurs) return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood()) - { - cellSpurs->Error("cellSpursUnsetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -475,12 +343,6 @@ int cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) return CELL_SPURS_CORE_ERROR_ALIGN; } - if (!spurs.IsGood() || !info.IsGood()) - { - cellSpurs->Error("cellSpursGetInfo : CELL_SPURS_CORE_ERROR_NULL_POINTER"); - return CELL_SPURS_CORE_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -494,12 +356,6 @@ int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_tError("_cellSpursEventFlagInitialize : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - eventFlag->eventFlag = new SPURSManagerEventFlag(flagClearMode, flagDirection); return CELL_OK; @@ -515,12 +371,6 @@ int cellSpursEventFlagAttachLv2EventQueue(mem_ptr_t eventFla return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagAttachLv2EventQueue : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -534,12 +384,6 @@ int cellSpursEventFlagDetachLv2EventQueue(mem_ptr_t eventFla return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagDetachLv2EventQueue : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -553,12 +397,6 @@ int cellSpursEventFlagWait(mem_ptr_t eventFlag, mem16_t mask return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood() || !mask.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -572,12 +410,6 @@ int cellSpursEventFlagClear(mem_ptr_t eventFlag, u16 bits) return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagClear : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -591,12 +423,6 @@ int cellSpursEventFlagSet(mem_ptr_t eventFlag, u16 bits) return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagSet : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -610,12 +436,6 @@ int cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t m return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -629,12 +449,6 @@ int cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem3 return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood() || !direction.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagGetDirection : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - direction = eventFlag->eventFlag->_getDirection(); return CELL_OK; @@ -650,12 +464,6 @@ int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem3 return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood() || !clear_mode.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagGetClearMode : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - clear_mode = eventFlag->eventFlag->_getClearMode(); return CELL_OK; @@ -671,12 +479,6 @@ int cellSpursEventFlagGetTasksetAddress(mem_ptr_t eventFlag, return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!eventFlag.IsGood() || !taskset.IsGood()) - { - cellSpurs->Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -952,12 +754,6 @@ int cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_tError("cellSpursCreateTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - SPURSManagerTasksetAttribute *tattr = new SPURSManagerTasksetAttribute(args, priority, maxContention); taskset->taskset = new SPURSManagerTaskset(taskset.GetAddr(), tattr); @@ -974,12 +770,6 @@ int cellSpursJoinTaskset(mem_ptr_t taskset) return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!taskset.IsGood()) - { - cellSpurs->Error("cellSpursJoinTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -993,12 +783,6 @@ int cellSpursGetTasksetId(mem_ptr_t taskset, mem32_t workloadI return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!taskset.IsGood() || !workloadId.IsGood()) - { - cellSpurs->Error("cellSpursGetTasksetId : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -1012,12 +796,6 @@ int cellSpursShutdownTaskset(mem_ptr_t taskset) return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!taskset.IsGood()) - { - cellSpurs->Error("cellSpursShutdownTaskset : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -1034,12 +812,6 @@ int cellSpursCreateTask(mem_ptr_t taskset, mem32_t taskID, mem return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!taskset.IsGood()) - { - cellSpurs->Error("cellSpursCreateTask : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } @@ -1053,12 +825,6 @@ int _cellSpursSendSignal(mem_ptr_t taskset, u32 taskID) return CELL_SPURS_TASK_ERROR_ALIGN; } - if (!taskset.IsGood()) - { - cellSpurs->Error("_cellSpursSendSignal : CELL_SPURS_TASK_ERROR_NULL_POINTER"); - return CELL_SPURS_TASK_ERROR_NULL_POINTER; - } - return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 703c6eb3c8..22a35d2691 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -25,11 +25,6 @@ int cellSysutilGetSystemParamInt(int id, mem32_t value) { cellSysutil->Log("cellSysutilGetSystemParamInt(id=0x%x, value_addr=0x%x)", id, value.GetAddr()); - if(!value.IsGood()) - { - return CELL_EFAULT; - } - switch(id) { case CELL_SYSUTIL_SYSTEMPARAM_ID_LANG: @@ -118,9 +113,6 @@ int cellSysutilGetSystemParamString(s32 id, mem_list_ptr_t buf, u32 bufsize) { cellSysutil->Log("cellSysutilGetSystemParamString(id=%d, buf_addr=0x%x, bufsize=%d)", id, buf.GetAddr(), bufsize); - if (!buf.IsGood()) - return CELL_EFAULT; - memset(buf, 0, bufsize); switch(id) @@ -184,9 +176,6 @@ int cellVideoOutGetResolution(u32 resolutionId, mem_ptr_tLog("cellVideoOutGetResolution(resolutionId=%d, resolution_addr=0x%x)", resolutionId, resolution.GetAddr()); - if (!resolution.IsGood()) - return CELL_VIDEO_OUT_ERROR_ILLEGAL_PARAMETER; - u32 num = ResolutionIdToNum(resolutionId); if(!num) return CELL_EINVAL; @@ -202,11 +191,6 @@ s32 cellVideoOutConfigure(u32 videoOut, u32 config_addr, u32 option_addr, u32 wa cellSysutil->Warning("cellVideoOutConfigure(videoOut=%d, config_addr=0x%x, option_addr=0x%x, waitForEvent=0x%x)", videoOut, config_addr, option_addr, waitForEvent); - if(!Memory.IsGoodAddr(config_addr, sizeof(CellVideoOutConfiguration))) - { - return CELL_EFAULT; - } - CellVideoOutConfiguration& config = (CellVideoOutConfiguration&)Memory[config_addr]; switch(videoOut) @@ -243,8 +227,6 @@ int cellVideoOutGetConfiguration(u32 videoOut, u32 config_addr, u32 option_addr) cellSysutil->Warning("cellVideoOutGetConfiguration(videoOut=%d, config_addr=0x%x, option_addr=0x%x)", videoOut, config_addr, option_addr); - if(!Memory.IsGoodAddr(config_addr, sizeof(CellVideoOutConfiguration))) return CELL_EFAULT; - CellVideoOutConfiguration config = {}; switch(videoOut) @@ -502,11 +484,6 @@ int cellAudioOutConfigure(u32 audioOut, mem_ptr_t con cellSysutil->Warning("cellAudioOutConfigure(audioOut=%d, config_addr=0x%x, option_addr=0x%x, (!)waitForEvent=%d)", audioOut, config.GetAddr(), option.GetAddr(), waitForEvent); - if (!config.IsGood()) - { - return CELL_EFAULT; - } - switch(audioOut) { case CELL_AUDIO_OUT_PRIMARY: @@ -536,8 +513,6 @@ int cellAudioOutGetConfiguration(u32 audioOut, u32 config_addr, u32 option_addr) cellSysutil->Warning("cellAudioOutGetConfiguration(audioOut=%d, config_addr=0x%x, option_addr=0x%x)", audioOut, config_addr, option_addr); - if(!Memory.IsGoodAddr(config_addr, sizeof(CellAudioOutConfiguration))) return CELL_EFAULT; - CellAudioOutConfiguration config = {}; switch(audioOut) @@ -695,9 +670,6 @@ int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_ cellSysutil->Warning("cellHddGameCheck(version=%d, dirName_addr=0x%xx, errDialog=%d, funcStat_addr=0x%x, container=%d)", version, dirName_addr, errDialog, funcStat, container); - if (!Memory.IsGoodAddr(dirName_addr) || !funcStat.IsGood()) - return CELL_HDDGAME_ERROR_PARAM; - std::string dirName = Memory.ReadString(dirName_addr); if (dirName.size() != 9) return CELL_HDDGAME_ERROR_PARAM; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index b3c3cb2d27..fbc06e6693 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -146,7 +146,7 @@ void setSaveDataFixed(std::vector& saveEntries, mem_ptr_tnewIcon.IsGood()) + if (fixedSet->newIcon.GetAddr()) { saveEntries[0].iconBuf = Memory.VirtualToRealAddr(fixedSet->newIcon->iconBuf_addr); saveEntries[0].iconBufSize = fixedSet->newIcon->iconBufSize; @@ -295,9 +295,6 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m cellSysutil->Warning("cellSaveDataListSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcList.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); - if (!setList.IsGood() || !setBuf.IsGood() || !funcList.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) - return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; MemoryAllocator listGet; MemoryAllocator listSet; @@ -340,11 +337,9 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m LOG_ERROR(HLE, "cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - if (!listSet->fixedList.IsGood()) - return CELL_SAVEDATA_ERROR_PARAM; setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); - if (listSet->newData.IsGood()) + if (listSet->newData.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { LOG_WARNING(HLE, "cellSaveDataListSave2: No save entries found!"); // TODO: Find a better way to handle this error @@ -363,7 +358,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - /*if (statSet->setParam.IsGood()) + /*if (statSet->setParam.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); // TODO: This *is* wrong */ @@ -380,9 +375,6 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m cellSysutil->Warning("cellSaveDataListLoad2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcList.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); - if (!setList.IsGood() || !setBuf.IsGood() || !funcList.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) - return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; MemoryAllocator listGet; MemoryAllocator listSet; @@ -425,11 +417,9 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - if (!listSet->fixedList.IsGood()) - return CELL_SAVEDATA_ERROR_PARAM; setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); - if (listSet->newData.IsGood()) + if (listSet->newData.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { LOG_WARNING(HLE, "cellSaveDataListLoad2: No save entries found!"); // TODO: Find a better way to handle this error @@ -448,7 +438,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - /*if (statSet->setParam.IsGood()) + /*if (statSet->setParam.GetAddr()) // TODO: Write PARAM.SFO file */ @@ -465,9 +455,6 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, cellSysutil->Warning("cellSaveDataFixedSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcFixed_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); - if (!setList.IsGood() || !setBuf.IsGood() || !funcFixed.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) - return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; MemoryAllocator listGet; MemoryAllocator fixedSet; @@ -520,7 +507,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, LOG_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - /*if (statSet->setParam.IsGood()) + /*if (statSet->setParam.GetAddr()) // TODO: Write PARAM.SFO file */ @@ -537,9 +524,6 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, cellSysutil->Warning("cellSaveDataFixedLoad2(version=%d, setList_addr=0x%x, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); - if (!setList.IsGood() || !setBuf.IsGood() || !funcFixed.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) - return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; MemoryAllocator listGet; MemoryAllocator fixedSet; @@ -592,7 +576,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, LOG_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - /*if (statSet->setParam.IsGood()) + /*if (statSet->setParam.GetAddr()) // TODO: Write PARAM.SFO file */ @@ -609,9 +593,6 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ cellSysutil->Warning("cellSaveDataAutoSave2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); - if (!setBuf.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) - return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; MemoryAllocator statGet; MemoryAllocator statSet; @@ -648,7 +629,7 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ LOG_ERROR(HLE, "cellSaveDataAutoSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - /*if (statSet->setParam.IsGood()) + /*if (statSet->setParam.GetAddr()) // TODO: Write PARAM.SFO file */ @@ -662,12 +643,9 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil->Warning("cellSaveDataAutoLoad2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataAutoLoad2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); - if (!setBuf.IsGood() || !funcStat.IsGood() || !funcFile.IsGood()) - return CELL_SAVEDATA_ERROR_PARAM; - MemoryAllocator result; MemoryAllocator statGet; MemoryAllocator statSet; @@ -701,7 +679,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ LOG_ERROR(HLE, "cellSaveDataAutoLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - /*if (statSet->setParam.IsGood()) + /*if (statSet->setParam.GetAddr()) // TODO: Write PARAM.SFO file */ diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index 615a1d392c..a8325f6082 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -14,8 +14,6 @@ int cellUserInfoGetStat(u32 id, mem_ptr_t stat) { cellUserInfo->Warning("cellUserInfoGetStat(id=%d, stat_addr=0x%x)", id, stat.GetAddr()); - if (!stat.IsGood()) - return CELL_USERINFO_ERROR_PARAM; if (id > CELL_USERINFO_USER_MAX) return CELL_USERINFO_ERROR_NOUSER; @@ -64,14 +62,14 @@ int cellUserInfoGetList(mem32_t listNum, mem_ptr_t listBuf listNum.GetAddr(), listBuf.GetAddr(), currentUserId.GetAddr()); // If only listNum is NULL, an error will be returned - if (listBuf.IsGood() && !listNum.IsGood()) + if (listBuf.GetAddr() && !listNum.GetAddr()) return CELL_USERINFO_ERROR_PARAM; - if (listNum.IsGood()) + if (listNum.GetAddr()) listNum = 1; - if (listBuf.IsGood()) + if (listBuf.GetAddr()) listBuf->userId[0] = 1; - if (currentUserId.IsGood()) + if (currentUserId.GetAddr()) currentUserId = 1; return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 98365a1923..f01f4a3279 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -428,11 +428,6 @@ int cellVdecQueryAttr(const mem_ptr_t type, mem_ptr_tWarning("cellVdecQueryAttr(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); - if (!type.IsGood() || !attr.IsGood()) - { - return CELL_VDEC_ERROR_FATAL; - } - return vdecQueryAttr(type->codecType, type->profileLevel, 0, attr); } @@ -440,11 +435,6 @@ int cellVdecQueryAttrEx(const mem_ptr_t type, mem_ptr_tWarning("cellVdecQueryAttrEx(type_addr=0x%x, attr_addr=0x%x)", type.GetAddr(), attr.GetAddr()); - if (!type.IsGood() || !attr.IsGood()) - { - return CELL_VDEC_ERROR_FATAL; - } - return vdecQueryAttr(type->codecType, type->profileLevel, type->codecSpecificInfo_addr, attr); } @@ -453,16 +443,6 @@ int cellVdecOpen(const mem_ptr_t type, const mem_ptr_tWarning("cellVdecOpen(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.GetAddr(), res.GetAddr(), cb.GetAddr(), handle.GetAddr()); - if (!type.IsGood() || !res.IsGood() || !cb.IsGood() || !handle.IsGood()) - { - return CELL_VDEC_ERROR_FATAL; - } - - if (!Memory.IsGoodAddr(res->memAddr, res->memSize) || !Memory.IsGoodAddr(cb->cbFunc)) - { - return CELL_VDEC_ERROR_FATAL; - } - handle = vdecOpen(new VideoDecoder(type->codecType, type->profileLevel, res->memAddr, res->memSize, cb->cbFunc, cb->cbArg)); return CELL_OK; @@ -473,16 +453,6 @@ int cellVdecOpenEx(const mem_ptr_t type, const mem_ptr_tWarning("cellVdecOpenEx(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.GetAddr(), res.GetAddr(), cb.GetAddr(), handle.GetAddr()); - if (!type.IsGood() || !res.IsGood() || !cb.IsGood() || !handle.IsGood()) - { - return CELL_VDEC_ERROR_FATAL; - } - - if (!Memory.IsGoodAddr(res->memAddr, res->memSize) || !Memory.IsGoodAddr(cb->cbFunc)) - { - return CELL_VDEC_ERROR_FATAL; - } - handle = vdecOpen(new VideoDecoder(type->codecType, type->profileLevel, res->memAddr, res->memSize, cb->cbFunc, cb->cbArg)); return CELL_OK; @@ -599,11 +569,6 @@ int cellVdecGetPicture(u32 handle, const mem_ptr_t format, u3 return CELL_VDEC_ERROR_ARG; } - if (!format.IsGood()) - { - return CELL_VDEC_ERROR_FATAL; - } - if (vdec->frames.IsEmpty()) { return CELL_VDEC_ERROR_EMPTY; @@ -613,11 +578,6 @@ int cellVdecGetPicture(u32 handle, const mem_ptr_t format, u3 { u32 buf_size = a128(av_image_get_buffer_size(vdec->ctx->pix_fmt, vdec->ctx->width, vdec->ctx->height, 1)); - if (!Memory.IsGoodAddr(out_addr, buf_size)) - { - return CELL_VDEC_ERROR_FATAL; - } - if (format->formatType != CELL_VDEC_PICFMT_YUV420_PLANAR) { cellVdec->Todo("cellVdecGetPicture: unknown formatType(%d)", (u32)format->formatType); @@ -671,11 +631,6 @@ int cellVdecGetPicItem(u32 handle, mem32_t picItem_ptr) return CELL_VDEC_ERROR_ARG; } - if (!picItem_ptr.IsGood()) - { - return CELL_VDEC_ERROR_FATAL; - } - if (vdec->frames.IsEmpty()) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index 34e1f4abf7..2ebff16141 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -19,9 +19,6 @@ int cellVpostQueryAttr(const mem_ptr_t cfgParam, mem_ptr_tWarning("cellVpostQueryAttr(cfgParam_addr=0x%x, attr_addr=0x%x)", cfgParam.GetAddr(), attr.GetAddr()); - if (!cfgParam.IsGood()) return CELL_VPOST_ERROR_Q_ARG_CFG_NULL; - if (!attr.IsGood()) return CELL_VPOST_ERROR_Q_ARG_ATTR_NULL; - // TODO: check cfgParam and output values attr->delay = 0; @@ -46,10 +43,6 @@ int cellVpostOpen(const mem_ptr_t cfgParam, const mem_ptr_tWarning("cellVpostOpen(cfgParam_addr=0x%x, resource_addr=0x%x, handle_addr=0x%x)", cfgParam.GetAddr(), resource.GetAddr(), handle.GetAddr()); - if (!cfgParam.IsGood()) return CELL_VPOST_ERROR_O_ARG_CFG_NULL; - if (!resource.IsGood()) return CELL_VPOST_ERROR_O_ARG_RSRC_NULL; - if (!handle.IsGood()) return CELL_VPOST_ERROR_O_ARG_HDL_NULL; - // TODO: check values handle = vpostOpen(new VpostInstance(cfgParam->outPicFmt == CELL_VPOST_PIC_FMT_OUT_RGBA_ILV)); return CELL_OK; @@ -60,10 +53,6 @@ int cellVpostOpenEx(const mem_ptr_t cfgParam, const mem_ptr_t cellVpost->Warning("cellVpostOpenEx(cfgParam_addr=0x%x, resource_addr=0x%x, handle_addr=0x%x)", cfgParam.GetAddr(), resource.GetAddr(), handle.GetAddr()); - if (!cfgParam.IsGood()) return CELL_VPOST_ERROR_O_ARG_CFG_NULL; - if (!resource.IsGood()) return CELL_VPOST_ERROR_O_ARG_RSRC_NULL; - if (!handle.IsGood()) return CELL_VPOST_ERROR_O_ARG_HDL_NULL; - // TODO: check values handle = vpostOpen(new VpostInstance(cfgParam->outPicFmt == CELL_VPOST_PIC_FMT_OUT_RGBA_ILV)); return CELL_OK; @@ -95,31 +84,11 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_tinWidth; u32 h = ctrlParam->inHeight; u32 ow = ctrlParam->outWidth; u32 oh = ctrlParam->outHeight; - if (!Memory.IsGoodAddr(inPicBuff_addr, w*h*3/2)) - { - return CELL_VPOST_ERROR_E_ARG_INPICBUF_INVALID; - } - - if (!Memory.IsGoodAddr(outPicBuff_addr, ow*oh*4)) - { - return CELL_VPOST_ERROR_E_ARG_OUTPICBUF_INVALID; - } - - if (!picInfo.IsGood()) - { - return CELL_VPOST_ERROR_E_ARG_PICINFO_NULL; - } - ctrlParam->inWindow; // ignored if (ctrlParam->inWindow.x) LOG_WARNING(HLE, "*** inWindow.x = %d", (u32)ctrlParam->inWindow.x); if (ctrlParam->inWindow.y) LOG_WARNING(HLE, "*** inWindow.y = %d", (u32)ctrlParam->inWindow.y); diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 81fe2a7ab7..d86a31a59f 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -146,11 +146,6 @@ int cellSSPlayerCreate(mem32_t handle, mem_ptr_t config) libmixer->Warning("cellSSPlayerCreate(handle_addr=0x%x, config_addr=0x%x)", handle.GetAddr(), config.GetAddr()); - if (!config.IsGood()) - { - return CELL_EFAULT; - } - if (config->outputMode != 0 || config->channels - 1 >= 2) { libmixer->Error("cellSSPlayerCreate(config.outputMode=%d, config.channels=%d): invalid parameters", @@ -195,11 +190,6 @@ int cellSSPlayerSetWave(u32 handle, mem_ptr_t waveInfo, m libmixer->Warning("cellSSPlayerSetWave(handle=%d, waveInfo_addr=0x%x, commonInfo_addr=0x%x)", handle, waveInfo.GetAddr(), commonInfo.GetAddr()); - if (!waveInfo.IsGood() || (commonInfo.GetAddr() && !commonInfo.IsGood())) - { - return CELL_EFAULT; - } - std::lock_guard lock(mixer_mutex); if (handle >= ssp.size() || !ssp[handle].m_created) @@ -223,11 +213,6 @@ int cellSSPlayerPlay(u32 handle, mem_ptr_t info) { libmixer->Warning("cellSSPlayerPlay(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); - if (!info.IsGood()) - { - return CELL_EFAULT; - } - std::lock_guard lock(mixer_mutex); if (handle >= ssp.size() || !ssp[handle].m_created) @@ -271,11 +256,6 @@ int cellSSPlayerSetParam(u32 handle, mem_ptr_t info) { libmixer->Warning("cellSSPlayerSetParam(handle=%d, info_addr=0x%x)", handle, info.GetAddr()); - if (!info.IsGood()) - { - return CELL_EFAULT; - } - std::lock_guard lock(mixer_mutex); if (handle >= ssp.size() || !ssp[handle].m_created) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 783adaaf48..112b39b379 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -119,8 +119,6 @@ int sceNpManagerGetStatus(mem32_t status) sceNp->Log("sceNpManagerGetStatus(status_addr=0x%x)", status.GetAddr()); // TODO: Check if sceNpInit() was called, if not return SCE_NP_ERROR_NOT_INITIALIZED - if (!status.IsGood()) - return SCE_NP_ERROR_INVALID_ARGUMENT; // TODO: Support different statuses status = SCE_NP_MANAGER_STATUS_OFFLINE; diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index dc326289a0..bcefea5a49 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -96,8 +96,6 @@ int sceNpTrophyCreateContext(mem32_t context, mem_ptr_t co if (!s_npTrophyInstance.m_bInitialized) return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; - if (!context.IsGood()) - return SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT; if (options & (~(u64)1)) return SCE_NP_TROPHY_ERROR_NOT_SUPPORTED; // TODO: There are other possible errors @@ -135,8 +133,6 @@ int sceNpTrophyCreateHandle(mem32_t handle) if (!s_npTrophyInstance.m_bInitialized) return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; - if (!handle.IsGood()) - return SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT; // TODO: There are other possible errors // TODO: ? @@ -144,15 +140,13 @@ int sceNpTrophyCreateHandle(mem32_t handle) return CELL_OK; } -int sceNpTrophyRegisterContext(u32 context, u32 handle, u32 statusCb_addr, u32 arg_addr, u64 options) +int sceNpTrophyRegisterContext(u32 context, u32 handle, mem_func_ptr_t statusCb, u32 arg_addr, u64 options) { sceNpTrophy->Warning("sceNpTrophyRegisterContext(context=%d, handle=%d, statusCb_addr=0x%x, arg_addr=0x%x, options=0x%llx)", - context, handle, statusCb_addr, arg_addr, options); + context, handle, statusCb.GetAddr(), arg_addr, options); if (!(s_npTrophyInstance.m_bInitialized)) return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; - if (!Memory.IsGoodAddr(statusCb_addr)) - return SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT; if (options & (~(u64)1)) return SCE_NP_TROPHY_ERROR_NOT_SUPPORTED; if (context >= s_npTrophyInstance.contexts.size()) @@ -205,6 +199,8 @@ int sceNpTrophyRegisterContext(u32 context, u32 handle, u32 statusCb_addr, u32 a ctxt.tropusr.reset(tropusr); // TODO: Callbacks + statusCb(context, SCE_NP_TROPHY_STATUS_INSTALLED, 100, 100, arg_addr); + statusCb(context, SCE_NP_TROPHY_STATUS_PROCESSING_COMPLETE, 100, 100, arg_addr); return CELL_OK; } @@ -228,8 +224,6 @@ int sceNpTrophyGetRequiredDiskSpace(u32 context, u32 handle, mem64_t reqspace, u if (!s_npTrophyInstance.m_bInitialized) return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; - if (!reqspace.IsGood()) - return SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT; if (context >= s_npTrophyInstance.contexts.size()) return SCE_NP_TROPHY_ERROR_UNKNOWN_CONTEXT; // TODO: There are other possible errors @@ -261,8 +255,6 @@ int sceNpTrophyGetGameInfo(u32 context, u32 handle, mem_ptr_t> SCE_NP_TROPHY_FLAG_BITS_SHIFT]; }; + +enum +{ + SCE_NP_TROPHY_STATUS_UNKNOWN = 0, + SCE_NP_TROPHY_STATUS_NOT_INSTALLED = 1, + SCE_NP_TROPHY_STATUS_DATA_CORRUPT = 2, + SCE_NP_TROPHY_STATUS_INSTALLED = 3, + SCE_NP_TROPHY_STATUS_REQUIRES_UPDATE = 4, + + SCE_NP_TROPHY_STATUS_PROCESSING_SETUP = 5, + SCE_NP_TROPHY_STATUS_PROCESSING_PROGRESS = 6, + SCE_NP_TROPHY_STATUS_PROCESSING_FINALIZE = 7, + + SCE_NP_TROPHY_STATUS_PROCESSING_COMPLETE = 8, + + SCE_NP_TROPHY_STATUS_CHANGES_DETECTED = 9, +}; + +typedef s32 (*SceNpTrophyStatusCallback)(u32 context, u32 status, s32 completed, s32 total, u32 arg_addr); diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 2ab01ebac4..43b0cdc78c 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -105,11 +105,6 @@ int sys_spu_image_import(mem_ptr_t img, u32 src, u32 type) { sysPrxForUser->Warning("sys_spu_image_import(img=0x%x, src=0x%x, type=0x%x)", img.GetAddr(), src, type); - if(!img.IsGood() || !Memory.IsGoodAddr(src)) - { - return CELL_EFAULT; - } - vfsStreamMemory f(src); u32 entry; u32 offset = LoadSpuImage(f, entry); diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index be6fe5291d..921d748d82 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -117,10 +117,7 @@ int cellFsSdataOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) sys_fs->Warning("cellFsSdataOpen(path=\"%s\", flags=0x%x, fd_addr=0x%x, arg_addr=0x%x, size=0x%llx) -> cellFsOpen()", path.c_str(), flags, fd.GetAddr(), arg.GetAddr(), size); - /*if (!fd.IsGood() || (!arg.IsGood() && size)) - return CELL_EFAULT; - - if (flags != CELL_O_RDONLY) + /*if (flags != CELL_O_RDONLY) return CELL_EINVAL; std::string suffix = path.substr(path.length() - 5, 5); @@ -198,11 +195,6 @@ int cellFsAioRead(mem_ptr_t aio, mem32_t aio_id, mem_func_ptr_tWarning("cellFsAioRead(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.GetAddr(), aio_id.GetAddr(), func.GetAddr()); - if (!aio.IsGood() || !aio_id.IsGood() || !func.IsGood()) - { - return CELL_EFAULT; - } - if (!aio_init) { return CELL_ENXIO; diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index fb1ffe58f0..c6d8e428c7 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -130,12 +130,6 @@ s32 cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nread) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if (nread.GetAddr() && !nread.IsGood()) - { - sys_fs->Error("cellFsRead(): bad nread_addr(0x%x)", nread.GetAddr()); - return CELL_EFAULT; - } - if (nbytes != (u32)nbytes) return CELL_ENOMEM; // TODO: checks @@ -154,8 +148,6 @@ s32 cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, mem64_t nwrite) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if (nwrite.GetAddr() && !nwrite.IsGood()) return CELL_EFAULT; - if (nbytes != (u32)nbytes) return CELL_ENOMEM; // TODO: checks @@ -182,9 +174,6 @@ s32 cellFsOpendir(u32 path_addr, mem32_t fd) const std::string& path = Memory.ReadString(path_addr); sys_fs->Warning("cellFsOpendir(path=\"%s\", fd_addr=0x%x)", path.c_str(), fd.GetAddr()); - if(!Memory.IsGoodAddr(path_addr) || !fd.IsGood()) - return CELL_EFAULT; - vfsDirBase* dir = Emu.GetVFS().OpenDir(path); if(!dir || !dir->IsOpened()) { @@ -203,8 +192,6 @@ s32 cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread) vfsDirBase* directory; if(!sys_fs->CheckId(fd, directory)) return CELL_ESRCH; - if(!dir.IsGood() || !nread.IsGood()) - return CELL_EFAULT; const DirEntryInfo* info = directory->Read(); if(info) @@ -488,9 +475,6 @@ s32 cellFsGetFreeSize(u32 path_addr, mem32_t block_size, mem64_t block_count) sys_fs->Warning("cellFsGetFreeSize(path=\"%s\", block_size_addr=0x%x, block_count_addr=0x%x)", ps3_path.c_str(), block_size.GetAddr(), block_count.GetAddr()); - if (!Memory.IsGoodAddr(path_addr) || !block_size.IsGood() || !block_count.IsGood()) - return CELL_EFAULT; - if (ps3_path.empty()) return CELL_EINVAL; @@ -508,8 +492,6 @@ s32 cellFsGetDirectoryEntries(u32 fd, mem_ptr_t entries, u vfsDirBase* directory; if(!sys_fs->CheckId(fd, directory)) return CELL_ESRCH; - if(!entries.IsGood() || !data_count.IsGood()) - return CELL_EFAULT; const DirEntryInfo* info = directory->Read(); if(info) @@ -546,9 +528,6 @@ s32 cellFsStReadInit(u32 fd, mem_ptr_t ringbuf) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if(!ringbuf.IsGood()) - return CELL_EFAULT; - fs_config.m_ring_buffer = *ringbuf; if(ringbuf->ringbuf_size < 0x40000000) // If the size is less than 1MB @@ -584,9 +563,6 @@ s32 cellFsStReadGetRingBuf(u32 fd, mem_ptr_t ringbuf) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if(!ringbuf.IsGood()) - return CELL_EFAULT; - *ringbuf = fs_config.m_ring_buffer; sys_fs->Warning("*** fs stream config: block_size=0x%llx, copy=%d, ringbuf_size = 0x%llx, transfer_rate = 0x%llx", @@ -650,8 +626,6 @@ s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, mem64_t rsize) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if (rsize.GetAddr() && !rsize.IsGood()) return CELL_EFAULT; - fs_config.m_regid += size; rsize = fs_config.m_regid; @@ -665,8 +639,6 @@ s32 cellFsStReadGetCurrentAddr(u32 fd, mem32_t addr_addr, mem64_t size) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if (!addr_addr.IsGood() && !size.IsGood()) return CELL_EFAULT; - return CELL_OK; } @@ -677,8 +649,6 @@ s32 cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; - if (!Memory.IsGoodAddr(addr_addr)) return CELL_EFAULT; - return CELL_OK; } @@ -696,9 +666,6 @@ s32 cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_tTodo("cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.GetAddr()); - if (!func.IsGood()) - return CELL_EFAULT; - vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp index de61193d45..b90ac46e18 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp @@ -14,11 +14,6 @@ s32 sys_cond_create(mem32_t cond_id, u32 mutex_id, mem_ptr_t sys_cond.Log("sys_cond_create(cond_id_addr=0x%x, mutex_id=%d, attr_addr=0x%x)", cond_id.GetAddr(), mutex_id, attr.GetAddr()); - if (!cond_id.IsGood() || !attr.IsGood()) - { - return CELL_EFAULT; - } - if (attr->pshared.ToBE() != se32(0x200)) { sys_cond.Error("Invalid pshared attribute(0x%x)", (u32)attr->pshared); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index a80ef7ecc2..c49347d4ff 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -23,11 +23,6 @@ s32 sys_event_queue_create(mem32_t equeue_id, mem_ptr_t at return CELL_EINVAL; } - if(!equeue_id.IsGood() || !attr.IsGood()) - { - return CELL_EFAULT; - } - switch (attr->protocol.ToBE()) { case se32(SYS_SYNC_PRIORITY): break; @@ -114,16 +109,6 @@ s32 sys_event_queue_tryreceive(u32 equeue_id, mem_ptr_t event_ar sys_event.Todo("sys_event_queue_tryreceive(equeue_id=%d, event_array_addr=0x%x, size=%d, number_addr=0x%x)", equeue_id, event_array.GetAddr(), size, number.GetAddr()); - if (size < 0 || !number.IsGood()) - { - return CELL_EFAULT; - } - - if (size && !Memory.IsGoodAddr(event_array.GetAddr(), sizeof(sys_event_data) * size)) - { - return CELL_EFAULT; - } - EventQueue* eq; if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) { @@ -163,11 +148,6 @@ s32 sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 sys_event.Log("sys_event_queue_receive(equeue_id=%d, event_addr=0x%x, timeout=%lld)", equeue_id, event.GetAddr(), timeout); - if (!event.IsGood()) - { - return CELL_EFAULT; - } - EventQueue* eq; if (!Emu.GetIdManager().GetIDData(equeue_id, eq)) { @@ -252,11 +232,6 @@ s32 sys_event_port_create(mem32_t eport_id, int port_type, u64 name) sys_event.Warning("sys_event_port_create(eport_id_addr=0x%x, port_type=0x%x, name=0x%llx)", eport_id.GetAddr(), port_type, name); - if (!eport_id.IsGood()) - { - return CELL_EFAULT; - } - if (port_type != SYS_EVENT_PORT_LOCAL) { sys_event.Error("sys_event_port_create: invalid port_type(0x%x)", port_type); @@ -395,11 +370,6 @@ s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, sys_event.Warning("sys_event_flag_create(eflag_id_addr=0x%x, attr_addr=0x%x, init=0x%llx)", eflag_id.GetAddr(), attr.GetAddr(), init); - if(!eflag_id.IsGood() || !attr.IsGood()) - { - return CELL_EFAULT; - } - switch (attr->protocol.ToBE()) { case se32(SYS_SYNC_PRIORITY): break; @@ -451,7 +421,7 @@ s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 sys_event.Log("sys_event_flag_wait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x, timeout=%lld)", eflag_id, bitptn, mode, result.GetAddr(), timeout); - if (result.IsGood()) result = 0; + if (result.GetAddr()) result = 0; switch (mode & 0xf) { @@ -500,17 +470,9 @@ s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 ef->flags = 0; } - if (result.IsGood()) - { - result = flags; - return CELL_OK; - } - - if (!result.GetAddr()) - { - return CELL_OK; - } - return CELL_EFAULT; + if (result.GetAddr()) result = flags; + + return CELL_OK; } } @@ -551,17 +513,9 @@ s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 ef->signal.unlock(tid); } - if (result.IsGood()) - { - result = flags; - return CELL_OK; - } + if (result.GetAddr()) result = flags; - if (!result.GetAddr()) - { - return CELL_OK; - } - return CELL_EFAULT; + return CELL_OK; } } @@ -599,7 +553,7 @@ s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result) sys_event.Log("sys_event_flag_trywait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x)", eflag_id, bitptn, mode, result.GetAddr()); - if (result.IsGood()) result = 0; + if (result.GetAddr()) result = 0; switch (mode & 0xf) { @@ -635,17 +589,9 @@ s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result) ef->flags = 0; } - if (result.IsGood()) - { - result = flags; - return CELL_OK; - } - - if (!result.GetAddr()) - { - return CELL_OK; - } - return CELL_EFAULT; + if (result.GetAddr()) result = flags; + + return CELL_OK; } return CELL_EBUSY; @@ -719,17 +665,9 @@ s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num) return CELL_OK; } - if (num.IsGood()) - { - num = tids.size(); - return CELL_OK; - } + if (num.GetAddr()) num = tids.size(); - if (!num.GetAddr()) - { - return CELL_OK; - } - return CELL_EFAULT; + return CELL_OK; } s32 sys_event_flag_get(u32 eflag_id, mem64_t flags) @@ -739,11 +677,6 @@ s32 sys_event_flag_get(u32 eflag_id, mem64_t flags) EventFlag* ef; if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; - if (!flags.IsGood()) - { - return CELL_EFAULT; - } - SMutexLocker lock(ef->m_mutex); flags = ef->flags; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp index 4fd7715ee5..36f5839975 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp @@ -41,11 +41,6 @@ s32 sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 { sc_int.Warning("sys_interrupt_thread_establish(ih_addr=0x%x, intrtag=%d, intrthread=%lld, arg=0x%llx)", ih.GetAddr(), intrtag, intrthread, arg); - if (!ih.IsGood()) - { - return CELL_EFAULT; - } - u32 id = intrtag & 0xff; u32 class_id = intrtag >> 8; RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index 9ebbcafb5d..e7bdb22458 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -14,31 +14,10 @@ s32 sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t l sys_lwcond.Log("sys_lwcond_create(lwcond_addr=0x%x, lwmutex_addr=0x%x, attr_addr=0x%x)", lwcond.GetAddr(), lwmutex.GetAddr(), attr.GetAddr()); - if (!lwcond.IsGood() /*|| !lwmutex.IsGood()*/ || !attr.IsGood()) - { - return CELL_EFAULT; - } - u32 id = sys_lwcond.GetNewId(new Lwcond(attr->name_u64)); lwcond->lwmutex = lwmutex.GetAddr(); lwcond->lwcond_queue = id; - if (lwmutex.IsGood()) - { - if (lwmutex->attribute.ToBE() & se32(SYS_SYNC_RETRY)) - { - sys_lwcond.Warning("Unsupported SYS_SYNC_RETRY lwmutex protocol"); - } - if (lwmutex->attribute.ToBE() & se32(SYS_SYNC_RECURSIVE)) - { - sys_lwcond.Warning("Recursive lwmutex(sq=%d)", (u32)lwmutex->sleep_queue); - } - } - else - { - sys_lwcond.Warning("Invalid lwmutex address(0x%x)", lwmutex.GetAddr()); - } - sys_lwcond.Warning("*** lwcond created [%s] (lwmutex_addr=0x%x): id = %d", std::string(attr->name, 8).c_str(), lwmutex.GetAddr(), (u32) lwcond->lwcond_queue); @@ -49,11 +28,6 @@ s32 sys_lwcond_destroy(mem_ptr_t lwcond) { sys_lwcond.Warning("sys_lwcond_destroy(lwcond_addr=0x%x)", lwcond.GetAddr()); - if (!lwcond.IsGood()) - { - return CELL_EFAULT; - } - u32 id = lwcond->lwcond_queue; Lwcond* lw; @@ -75,11 +49,6 @@ s32 sys_lwcond_signal(mem_ptr_t lwcond) { sys_lwcond.Log("sys_lwcond_signal(lwcond_addr=0x%x)", lwcond.GetAddr()); - if (!lwcond.IsGood()) - { - return CELL_EFAULT; - } - Lwcond* lw; if (!Emu.GetIdManager().GetIDData((u32)lwcond->lwcond_queue, lw)) { @@ -106,11 +75,6 @@ s32 sys_lwcond_signal_all(mem_ptr_t lwcond) { sys_lwcond.Log("sys_lwcond_signal_all(lwcond_addr=0x%x)", lwcond.GetAddr()); - if (!lwcond.IsGood()) - { - return CELL_EFAULT; - } - Lwcond* lw; if (!Emu.GetIdManager().GetIDData((u32)lwcond->lwcond_queue, lw)) { @@ -137,11 +101,6 @@ s32 sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id) { sys_lwcond.Log("sys_lwcond_signal_to(lwcond_addr=0x%x, ppu_thread_id=%d)", lwcond.GetAddr(), ppu_thread_id); - if (!lwcond.IsGood()) - { - return CELL_EFAULT; - } - Lwcond* lw; if (!Emu.GetIdManager().GetIDData((u32)lwcond->lwcond_queue, lw)) { @@ -176,11 +135,6 @@ s32 sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) { sys_lwcond.Log("sys_lwcond_wait(lwcond_addr=0x%x, timeout=%lld)", lwcond.GetAddr(), timeout); - if (!lwcond.IsGood()) - { - return CELL_EFAULT; - } - Lwcond* lw; if (!Emu.GetIdManager().GetIDData((u32)lwcond->lwcond_queue, lw)) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index ce1e049286..958142a75a 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -13,8 +13,6 @@ s32 sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_tattr_recursive.ToBE()) { case se32(SYS_SYNC_RECURSIVE): break; @@ -51,8 +49,6 @@ s32 sys_lwmutex_destroy(mem_ptr_t lwmutex) { sc_lwmutex.Warning("sys_lwmutex_destroy(lwmutex_addr=0x%x)", lwmutex.GetAddr()); - if (!lwmutex.IsGood()) return CELL_EFAULT; - u32 sq_id = lwmutex->sleep_queue; if (!Emu.GetIdManager().CheckID(sq_id)) return CELL_ESRCH; @@ -72,8 +68,6 @@ s32 sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout) { sc_lwmutex.Log("sys_lwmutex_lock(lwmutex_addr=0x%x, timeout=%lld)", lwmutex.GetAddr(), timeout); - if (!lwmutex.IsGood()) return CELL_EFAULT; - //ConLog.Write("*** lock mutex (addr=0x%x, attr=0x%x, Nrec=%d, owner=%d, waiter=%d)", //lwmutex.GetAddr(), (u32)lwmutex->attribute, (u32)lwmutex->recursive_count, lwmutex->vars.parts.owner.GetOwner(), (u32)lwmutex->waiter); @@ -84,8 +78,6 @@ s32 sys_lwmutex_trylock(mem_ptr_t lwmutex) { sc_lwmutex.Log("sys_lwmutex_trylock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); - if (!lwmutex.IsGood()) return CELL_EFAULT; - return lwmutex->trylock(be_t::MakeFromLE(GetCurrentPPUThread().GetId())); } @@ -93,8 +85,6 @@ s32 sys_lwmutex_unlock(mem_ptr_t lwmutex) { sc_lwmutex.Log("sys_lwmutex_unlock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); - if (!lwmutex.IsGood()) return CELL_EFAULT; - //ConLog.Write("*** unlocking mutex (addr=0x%x, attr=0x%x, Nrec=%d, owner=%d, waiter=%d)", //lwmutex.GetAddr(), (u32)lwmutex->attribute, (u32)lwmutex->recursive_count, (u32)lwmutex->vars.parts.owner.GetOwner(), (u32)lwmutex->waiter); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp index 9815223f86..e56b65c580 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp @@ -91,9 +91,6 @@ s32 sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr) { sc_mem.Warning("sys_memory_get_page_attribute(addr=0x%x, attr_addr=0x%x)", addr, attr.GetAddr()); - if (!attr.IsGood()) - return CELL_EFAULT; - // TODO: Implement per thread page attribute setting. attr->attribute = 0; attr->page_size = 0; @@ -117,9 +114,6 @@ s32 sys_memory_container_create(mem32_t cid, u32 yield_size) { sc_mem.Warning("sys_memory_container_create(cid_addr=0x%x, yield_size=0x%x)", cid.GetAddr(), yield_size); - if (!cid.IsGood()) - return CELL_EFAULT; - yield_size &= ~0xfffff; //round down to 1 MB granularity u64 addr = Memory.Alloc(yield_size, 0x100000); //1 MB alignment diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp index 1660ce5b3d..3a041eb0a7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp @@ -15,9 +15,6 @@ s32 sys_mmapper_allocate_address(u32 size, u64 flags, u32 alignment, u32 alloc_a sys_mmapper.Warning("sys_mmapper_allocate_address(size=0x%x, flags=0x%llx, alignment=0x%x, alloc_addr=0x%x)", size, flags, alignment, alloc_addr); - if(!Memory.IsGoodAddr(alloc_addr)) - return CELL_EFAULT; - // Check for valid alignment. if(alignment > 0x80000000) return CELL_EALIGN; @@ -61,9 +58,6 @@ s32 sys_mmapper_allocate_memory(u32 size, u64 flags, mem32_t mem_id) { sys_mmapper.Warning("sys_mmapper_allocate_memory(size=0x%x, flags=0x%llx, mem_id_addr=0x%x)", size, flags, mem_id.GetAddr()); - if(!mem_id.IsGood()) - return CELL_EFAULT; - // Check page granularity. u32 addr; switch(flags & (SYS_MEMORY_PAGE_SIZE_1M | SYS_MEMORY_PAGE_SIZE_64K)) @@ -98,9 +92,6 @@ s32 sys_mmapper_allocate_memory_from_container(u32 size, u32 cid, u64 flags, mem sys_mmapper.Warning("sys_mmapper_allocate_memory_from_container(size=0x%x, cid=%d, flags=0x%llx, mem_id_addr=0x%x)", size, cid, flags, mem_id.GetAddr()); - if(!mem_id.IsGood()) - return CELL_EFAULT; - // Check if this container ID is valid. MemoryContainerInfo* ct; if(!sys_mmapper.CheckId(cid, ct)) @@ -139,9 +130,6 @@ s32 sys_mmapper_change_address_access_right(u32 start_addr, u64 flags) { sys_mmapper.Warning("sys_mmapper_change_address_access_right(start_addr=0x%x, flags=0x%llx)", start_addr, flags); - if (!Memory.IsGoodAddr(start_addr)) - return CELL_EINVAL; - // TODO return CELL_OK; @@ -151,9 +139,6 @@ s32 sys_mmapper_free_address(u32 start_addr) { sys_mmapper.Warning("sys_mmapper_free_address(start_addr=0x%x)", start_addr); - if(!Memory.IsGoodAddr(start_addr)) - return CELL_EINVAL; - // Free the address. Memory.Free(start_addr); return CELL_OK; @@ -199,9 +184,6 @@ s32 sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, u32 alloc_ sys_mmapper.Warning("sys_mmapper_search_and_map(start_addr=0x%x, mem_id=0x%x, flags=0x%llx, alloc_addr=0x%x)", start_addr, mem_id, flags, alloc_addr); - if(!Memory.IsGoodAddr(alloc_addr)) - return CELL_EFAULT; - // Check if this mem ID is valid. mmapper_info* info; if(!sys_mmapper.CheckId(mem_id, info)) @@ -221,8 +203,7 @@ s32 sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, u32 alloc_ } } - // Check if the address is valid. - if (!Memory.IsGoodAddr(addr) || !found) + if (!found) return CELL_ENOMEM; // Write back the start address of the allocated area. @@ -238,12 +219,6 @@ s32 sys_mmapper_unmap_memory(u32 start_addr, u32 mem_id_addr) { sys_mmapper.Warning("sys_mmapper_unmap_memory(start_addr=0x%x, mem_id_addr=0x%x)", start_addr, mem_id_addr); - if (!Memory.IsGoodAddr(start_addr)) - return CELL_EINVAL; - - if (!Memory.IsGoodAddr(mem_id_addr)) - return CELL_EFAULT; - // Write back the mem ID of the unmapped area. u32 mem_id = mmapper_info_map.find(start_addr)->first; Memory.Write32(mem_id_addr, mem_id); @@ -255,9 +230,6 @@ s32 sys_mmapper_enable_page_fault_notification(u32 start_addr, u32 q_id) { sys_mmapper.Warning("sys_mmapper_enable_page_fault_notification(start_addr=0x%x, q_id=0x%x)", start_addr, q_id); - if (!Memory.IsGoodAddr(start_addr)) - return CELL_EINVAL; - // TODO return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index 13a0304f7c..fed9b6d3cd 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -13,11 +13,6 @@ s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) { sys_mtx.Log("sys_mutex_create(mutex_id_addr=0x%x, attr_addr=0x%x)", mutex_id.GetAddr(), attr.GetAddr()); - if (!mutex_id.IsGood() || !attr.IsGood()) - { - return CELL_EFAULT; - } - switch (attr->protocol.ToBE()) { case se32(SYS_SYNC_FIFO): break; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index 28e37ce590..9a69b5b4b5 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -108,7 +108,6 @@ s32 sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr) CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; - if(!Memory.IsGoodAddr(prio_addr)) return CELL_EFAULT; Memory.Write32(prio_addr, thr->GetPrio()); @@ -119,8 +118,6 @@ s32 sys_ppu_thread_get_stack_information(u32 info_addr) { sysPrxForUser->Log("sys_ppu_thread_get_stack_information(info_addr=0x%x)", info_addr); - if(!Memory.IsGoodAddr(info_addr)) return CELL_EFAULT; - declCPU(); Memory.Write32(info_addr, CPU.GetStackAddr()); @@ -157,23 +154,10 @@ s32 sys_ppu_thread_restart(u64 thread_id) s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 stacksize, u64 flags, u32 threadname_addr) { std::string threadname = ""; - if (Memory.IsGoodAddr(threadname_addr)) - { - threadname = Memory.ReadString(threadname_addr); - sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", - thread_id.GetAddr(), entry, arg, prio, stacksize, flags, threadname_addr, threadname.c_str()); - } - else - { - sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x)", - thread_id.GetAddr(), entry, arg, prio, stacksize, flags, threadname_addr); - if (threadname_addr != 0) return CELL_EFAULT; - } - - if (!Memory.IsGoodAddr(entry) || !thread_id.IsGood()) - { - return CELL_EFAULT; - } + if (threadname_addr) threadname = Memory.ReadString(threadname_addr); + + sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", + thread_id.GetAddr(), entry, arg, prio, stacksize, flags, threadname_addr, threadname.c_str()); bool is_joinable = false; bool is_interrupt = false; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp index a6e6ba3982..09dca5c8d1 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -60,13 +60,13 @@ void sys_game_process_exitspawn( std::vector env; mem_ptr_t argvp(argv_addr); - while (argvp.GetAddr() && argvp.IsGood() && *argvp) + while (argvp.GetAddr() && *argvp) { argv.push_back(Memory.ReadString(Memory.Read32(argvp.GetAddr()))); argvp++; } mem_ptr_t envp(envp_addr); - while (envp.GetAddr() && envp.IsGood() && *envp) + while (envp.GetAddr() && *envp) { env.push_back(Memory.ReadString(Memory.Read32(envp.GetAddr()))); envp++; @@ -108,13 +108,13 @@ void sys_game_process_exitspawn2( std::vector env; mem_ptr_t argvp(argv_addr); - while (argvp.GetAddr() && argvp.IsGood() && *argvp) + while (argvp.GetAddr() && *argvp) { argv.push_back(Memory.ReadString(Memory.Read32(argvp.GetAddr()))); argvp++; } mem_ptr_t envp(envp_addr); - while (envp.GetAddr() && envp.IsGood() && *envp) + while (envp.GetAddr() && *envp) { env.push_back(Memory.ReadString(Memory.Read32(envp.GetAddr()))); envp++; @@ -137,9 +137,6 @@ s32 sys_process_get_number_of_object(u32 object, mem32_t nump) { sc_p.Warning("sys_process_get_number_of_object(object=%d, nump_addr=0x%x)", object, nump.GetAddr()); - - if (!nump.IsGood()) - return CELL_EFAULT; switch(object) { @@ -234,9 +231,6 @@ s32 sys_process_get_sdk_version(u32 pid, mem32_t version) { sc_p.Warning("sys_process_get_sdk_version(pid=%d, version_addr=0x%x)", pid, version.GetAddr()); - if (!version.IsGood()) - return CELL_EFAULT; - version = 0x360001; // TODO return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index 595e6ea1e1..2abbc26226 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -10,9 +10,6 @@ SysCallBase sys_prx("sys_prx"); s32 sys_prx_load_module(u32 path_addr, u64 flags, mem_ptr_t pOpt) { - if (!Memory.IsGoodAddr(path_addr)) - return CELL_PRX_ERROR_INVAL; - std::string path = Memory.ReadString(path_addr); sys_prx.Todo("sys_prx_load_module(path=\"%s\", flags=0x%llx, pOpt=0x%x)", path.c_str(), flags, pOpt.GetAddr()); @@ -55,9 +52,6 @@ s32 sys_prx_start_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 fl sys_prx.Todo("sys_prx_start_module(id=%d, args=%d, argp_addr=0x%x, modres_addr=0x%x, flags=0x%llx, pOpt=0x%x)", id, args, argp_addr, modres.GetAddr(), flags, pOpt.GetAddr()); - if (!modres.IsGood()) - return CELL_EINVAL; - sys_prx_t* prx; if (!Emu.GetIdManager().GetIDData(id, prx)) return CELL_ESRCH; @@ -73,9 +67,6 @@ s32 sys_prx_stop_module(s32 id, u32 args, u32 argp_addr, mem32_t modres, u64 fla sys_prx.Todo("sys_prx_stop_module(id=%d, args=%d, argp_addr=0x%x, modres_addr=0x%x, flags=0x%llx, pOpt=0x%x)", id, args, argp_addr, modres.GetAddr(), flags, pOpt.GetAddr()); - if (!modres.IsGood()) - return CELL_EINVAL; - sys_prx_t* prx; if (!Emu.GetIdManager().GetIDData(id, prx)) return CELL_ESRCH; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 2e55253509..98d8dd60b2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -10,8 +10,6 @@ s32 sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr { sys_rwlock.Warning("sys_rwlock_create(rw_lock_id_addr=0x%x, attr_addr=0x%x)", rw_lock_id.GetAddr(), attr.GetAddr()); - if (!rw_lock_id.IsGood() || !attr.IsGood()) return CELL_EFAULT; - switch (attr->attr_protocol.ToBE()) { case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Todo("SYS_SYNC_PRIORITY"); break; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index aa0b82116a..243f578076 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -14,11 +14,6 @@ s32 sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i sys_sem.Warning("sys_semaphore_create(sem_addr=0x%x, attr_addr=0x%x, initial_count=%d, max_count=%d)", sem.GetAddr(), attr.GetAddr(), initial_count, max_count); - if (!sem.IsGood() || !attr.IsGood()) - { - return CELL_EFAULT; - } - if (max_count <= 0 || initial_count > max_count || initial_count < 0) { sys_sem.Error("sys_semaphore_create(): invalid parameters (initial_count=%d, max_count=%d)", initial_count, max_count); @@ -199,11 +194,6 @@ s32 sys_semaphore_get_value(u32 sem_id, mem32_t count) { sys_sem.Log("sys_semaphore_get_value(sem_id=%d, count_addr=0x%x)", sem_id, count.GetAddr()); - if (!count.IsGood()) - { - return CELL_EFAULT; - } - Semaphore* sem; if (!Emu.GetIdManager().GetIDData(sem_id, sem)) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index e8c3394b75..d55f04d5f5 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -28,14 +28,9 @@ u32 LoadSpuImage(vfsStream& stream, u32& spu_ep) //156 s32 sys_spu_image_open(mem_ptr_t img, u32 path_addr) { - const std::string path = Memory.ReadString(path_addr).c_str(); + const std::string path = Memory.ReadString(path_addr); sc_spu.Warning("sys_spu_image_open(img_addr=0x%x, path_addr=0x%x [%s])", img.GetAddr(), path_addr, path.c_str()); - if(!img.IsGood() || !Memory.IsGoodAddr(path_addr)) - { - return CELL_EFAULT; - } - vfsFile f(path); if(!f.IsOpened()) { @@ -66,19 +61,6 @@ s32 sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t< return CELL_ESRCH; } - if(!thread.IsGood() || !img.IsGood() || !attr.IsGood() || !arg.IsGood()) - { - return CELL_EFAULT; - } - - if (attr->name_addr) - { - if(!Memory.IsGoodAddr(attr->name_addr, attr->name_len)) - { - return CELL_EFAULT; - } - } - if(spu_num >= group_info->list.size()) { return CELL_EINVAL; @@ -140,11 +122,6 @@ s32 sys_spu_thread_set_argument(u32 id, mem_ptr_t arg) return CELL_ESRCH; } - if(!arg.IsGood()) - { - return CELL_EFAULT; - } - thr->SetArg(0, arg->arg1); thr->SetArg(1, arg->arg2); thr->SetArg(2, arg->arg3); @@ -158,11 +135,6 @@ s32 sys_spu_thread_get_exit_status(u32 id, mem32_t status) { sc_spu.Warning("sys_spu_thread_get_exit_status(id=%d, status_addr=0x%x)", id, status.GetAddr()); - if (!status.IsGood()) - { - return CELL_EFAULT; - } - CPUThread* thr = Emu.GetCPU().GetThread(id); if(!thr || thr->GetType() != CPU_THREAD_SPU) @@ -286,10 +258,6 @@ s32 sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_tname_addr, attr->name_len)) return CELL_EFAULT; - if (num > 256) return CELL_EINVAL; if (prio < 16 || prio > 255) return CELL_EINVAL; @@ -315,16 +283,6 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) return CELL_ESRCH; } - if (cause.GetAddr() && !cause.IsGood()) - { - return CELL_EFAULT; - } - - if (status.GetAddr() && !status.IsGood()) - { - return CELL_EFAULT; - } - if (group_info->lock.exchange(1)) // acquire lock { return CELL_EBUSY; @@ -392,7 +350,7 @@ s32 sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type) return CELL_ESTAT; } - if (!(*(SPUThread*)thr).IsGoodLSA(address) || (address % type)) // +check alignment + if (address % type) // check alignment { return CELL_EINVAL; } @@ -425,12 +383,7 @@ s32 sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type) return CELL_ESTAT; } - if(!value.IsGood()) - { - return CELL_EFAULT; - } - - if (!(*(SPUThread*)thr).IsGoodLSA(address) || (address % type)) // +check alignment + if (address % type) // check alignment { return CELL_EINVAL; } @@ -687,11 +640,6 @@ s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, m sc_spu.Warning("sys_spu_thread_group_connect_event_all_threads(id=%d, eq_id=%d, req=0x%llx, spup_addr=0x%x)", id, eq_id, req, spup.GetAddr()); - if (!spup.IsGood()) - { - return CELL_EFAULT; - } - EventQueue* eq; if (!Emu.GetIdManager().GetIDData(eq_id, eq)) { @@ -817,11 +765,6 @@ s32 sys_raw_spu_create_interrupt_tag(u32 id, u32 class_id, u32 hwthread, mem32_t return CELL_EINVAL; } - if (!intrtag.IsGood()) - { - return CELL_EFAULT; - } - if (t->m_intrtag[class_id].enabled) { return CELL_EAGAIN; @@ -856,11 +799,6 @@ s32 sys_raw_spu_get_int_mask(u32 id, u32 class_id, mem64_t mask) { sc_spu.Log("sys_raw_spu_get_int_mask(id=%d, class_id=%d, mask_addr=0x%x)", id, class_id, mask.GetAddr()); - if (!mask.IsGood()) - { - return CELL_EFAULT; - } - RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) { @@ -899,11 +837,6 @@ s32 sys_raw_spu_get_int_stat(u32 id, u32 class_id, mem64_t stat) { sc_spu.Log("sys_raw_spu_get_int_stat(id=%d, class_id=%d, stat_addr=0xx)", id, class_id, stat.GetAddr()); - if (!stat.IsGood()) - { - return CELL_EFAULT; - } - RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) { @@ -923,11 +856,6 @@ s32 sys_raw_spu_read_puint_mb(u32 id, mem32_t value) { sc_spu.Log("sys_raw_spu_read_puint_mb(id=%d, value_addr=0x%x)", id, value.GetAddr()); - if (!value.IsGood()) - { - return CELL_EFAULT; - } - RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) { @@ -958,11 +886,6 @@ s32 sys_raw_spu_get_spu_cfg(u32 id, mem32_t value) { sc_spu.Log("sys_raw_spu_get_spu_afg(id=%d, value_addr=0x%x)", id, value.GetAddr()); - if (!value.IsGood()) - { - return CELL_EFAULT; - } - RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index f1c7271d64..3b32171486 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -12,8 +12,6 @@ s32 sys_timer_create(mem32_t timer_id) { sys_timer.Warning("sys_timer_create(timer_id_addr=0x%x)", timer_id.GetAddr()); - if(!Memory.IsGoodAddr(timer_id.GetAddr())) return CELL_EFAULT; - timer_id = sys_timer.GetNewId(new timer); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp index 073e1a0176..a570630de0 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp @@ -18,7 +18,6 @@ s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) s32 sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) { if(ch > 15 || (s32)len <= 0) return CELL_EINVAL; - if(!Memory.IsGoodAddr(buf_addr)) return CELL_EFAULT; if (ch == SYS_TTYP_PPU_STDOUT || ch == SYS_TTYP_SPU_STDOUT || (ch >= SYS_TTYP_USER1 && ch <= SYS_TTYP_USER13)) { LOG_NOTICE(TTY, Memory.ReadString(buf_addr, len)); @@ -27,8 +26,6 @@ s32 sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) LOG_ERROR(TTY, Memory.ReadString(buf_addr, len)); } - if(!Memory.IsGoodAddr(pwritelen_addr)) return CELL_EFAULT; - Memory.Write32(pwritelen_addr, len); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp b/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp index 6495255fad..728c5db222 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp @@ -13,12 +13,6 @@ s32 sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 a sc_vm.Warning("sys_vm_memory_map(vsize=0x%x,psize=0x%x,cidr=0x%x,flags=0x%llx,policy=0x%llx,addr=0x%x)", vsize, psize, cid, flag, policy, addr); - // Check output address. - if(!Memory.IsGoodAddr(addr, 4)) - { - return CELL_EFAULT; - } - // Check virtual size. if((vsize < (0x100000 * 32)) || (vsize > (0x100000 * 256))) { @@ -83,7 +77,7 @@ s32 sys_vm_append_memory(u32 addr, u32 size) sc_vm.Warning("sys_vm_append_memory(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (size <= 0)) + if((current_ct->addr != addr) || (size <= 0)) { return CELL_EINVAL; } @@ -105,7 +99,7 @@ s32 sys_vm_return_memory(u32 addr, u32 size) sc_vm.Warning("sys_vm_return_memory(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (size <= 0)) + if((current_ct->addr != addr) || (size <= 0)) { return CELL_EINVAL; } @@ -127,7 +121,7 @@ s32 sys_vm_lock(u32 addr, u32 size) sc_vm.Warning("sys_vm_lock(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) + if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) { return CELL_EINVAL; } @@ -149,7 +143,7 @@ s32 sys_vm_unlock(u32 addr, u32 size) sc_vm.Warning("sys_vm_unlock(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) + if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) { return CELL_EINVAL; } @@ -164,7 +158,7 @@ s32 sys_vm_touch(u32 addr, u32 size) sc_vm.Warning("Unimplemented function: sys_vm_touch(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) + if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) { return CELL_EINVAL; } @@ -181,7 +175,7 @@ s32 sys_vm_flush(u32 addr, u32 size) sc_vm.Warning("Unimplemented function: sys_vm_flush(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) + if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) { return CELL_EINVAL; } @@ -198,7 +192,7 @@ s32 sys_vm_invalidate(u32 addr, u32 size) sc_vm.Warning("Unimplemented function: sys_vm_invalidate(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) + if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) { return CELL_EINVAL; } @@ -215,7 +209,7 @@ s32 sys_vm_store(u32 addr, u32 size) sc_vm.Warning("Unimplemented function: sys_vm_store(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) + if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) { return CELL_EINVAL; } @@ -232,7 +226,7 @@ s32 sys_vm_sync(u32 addr, u32 size) sc_vm.Warning("Unimplemented function: sys_vm_sync(addr=0x%x,size=0x%x)", addr, size); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) + if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) { return CELL_EINVAL; } @@ -248,7 +242,7 @@ s32 sys_vm_test(u32 addr, u32 size, u32 result_addr) sc_vm.Warning("Unimplemented function: sys_vm_test(addr=0x%x,size=0x%x,result_addr=0x%x)", addr, size, result_addr); // Check address and size. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) + if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) { return CELL_EINVAL; } @@ -267,7 +261,7 @@ s32 sys_vm_get_statistics(u32 addr, u32 stat_addr) sc_vm.Warning("Unimplemented function: sys_vm_get_statistics(addr=0x%x,stat_addr=0x%x)", addr, stat_addr); // Check address. - if(!Memory.IsGoodAddr(addr, 4) || (current_ct->addr != addr)) + if(current_ct->addr != addr) { return CELL_EINVAL; } diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 554450d425..3bf2af91bf 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -416,7 +416,8 @@ void Emulator::Stop() GetKeyboardManager().Close(); GetMouseManager().Close(); GetCallbackManager().Clear(); - GetModuleManager().UnloadModules(); + GetModuleManager().UnloadModules(); + GetSFuncManager().StaticFinalize(); CurGameInfo.Reset(); Memory.Close(); diff --git a/rpcs3/Loader/ELF32.cpp b/rpcs3/Loader/ELF32.cpp index 49d56f56ee..2c3c4f4fac 100644 --- a/rpcs3/Loader/ELF32.cpp +++ b/rpcs3/Loader/ELF32.cpp @@ -138,7 +138,7 @@ bool ELF32Loader::LoadPhdrInfo() phdr_arr.back().Load(elf32_f); } - if(/*!Memory.IsGoodAddr(entry)*/ entry & 0x1) + if(entry & 0x1) { //entry is physical, convert to virtual From bdc263bc34eddf36921fcc0303c8494a314b77b5 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 14:29:00 +0400 Subject: [PATCH 274/499] sys_time fix --- rpcs3/Emu/SysCalls/lv2/sys_time.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_time.h b/rpcs3/Emu/SysCalls/lv2/sys_time.h index 3ebdefb7da..bb65b7c7f2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_time.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_time.h @@ -1,6 +1,6 @@ #pragma once -#define MHZ (10000000) +#define MHZ (1000000) // Auxiliary functions u64 get_time(); From e1b7380bc6e1f0af0cb4f689eae360d142f53a88 Mon Sep 17 00:00:00 2001 From: Sacha Date: Tue, 5 Aug 2014 22:14:08 +1000 Subject: [PATCH 275/499] Fix infinite loop in rMkpath --- Utilities/rFile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 853f2678ef..47979233f9 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -70,7 +70,7 @@ bool rMkpath(const std::string &path) bool ret; while (true) { - if ((pos = path.find_first_of('/', start)) == std::string::npos) + if ((pos = path.find_first_of("/\\", start)) == std::string::npos) pos = path.length(); dir = path.substr(0,pos++); @@ -80,7 +80,7 @@ bool rMkpath(const std::string &path) if((ret = mkdir(dir.c_str())) && errno != EEXIST){ return !ret; } - if (pos == path.length()) + if (pos >= path.length()) return true; } return true; From 021656d8216723c334c14e83311a52a372f9590e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 18:06:40 +0400 Subject: [PATCH 276/499] Some missing logs --- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 6 ++++++ rpcs3/Emu/SysCalls/lv2/sys_time.cpp | 2 ++ 2 files changed, 8 insertions(+) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 22a35d2691..5bacd9f287 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -628,6 +628,8 @@ typedef struct{ int cellSysCacheClear(void) { + cellSysutil->Warning("cellSysCacheClear()"); + //if some software expects CELL_SYSCACHE_ERROR_NOTMOUNTED we need to check whether //it was mounted before, for that we would need to save the state which I don't know //where to put @@ -655,6 +657,8 @@ int cellSysCacheClear(void) int cellSysCacheMount(mem_ptr_t param) { + cellSysutil->Warning("cellSysCacheMount(param_addr=0x%x)", param.GetAddr()); + //TODO: implement char id[CELL_SYSCACHE_ID_SIZE]; strncpy(id, param->cacheId, CELL_SYSCACHE_ID_SIZE); @@ -802,6 +806,8 @@ int cellSysutilGetBgmPlaybackStatus2(mem_ptr_t st int cellWebBrowserEstimate2(mem8_ptr_t _config, mem32_ptr_t memSize) { + cellSysutil->Warning("cellWebBrowserEstimate2(config_addr=0x%x, memSize_addr=0x%x)", _config.GetAddr(), memSize.GetAddr()); + // TODO: When cellWebBrowser stuff is implemented, change this to some real // needed memory buffer size. *memSize = 1024 * 1024 * 1; // 1 MB diff --git a/rpcs3/Emu/SysCalls/lv2/sys_time.cpp b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp index aada49f665..69292b5fed 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_time.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp @@ -58,6 +58,8 @@ u64 get_system_time() // Functions s32 sys_time_get_timezone(mem32_t timezone, mem32_t summertime) { + sys_time.Warning("sys_time_get_timezone(timezone_addr=0x%x, summertime_addr=0x%x)", timezone.GetAddr(), summertime.GetAddr()); + int ret; ret = cellSysutilGetSystemParamInt(0x0116, timezone); //0x0116 = CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE if (ret != CELL_OK) return ret; From d2bb2c71b4f87ac37c21db3cd4dfbdac2a863b0b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 18:36:16 +0400 Subject: [PATCH 277/499] edat patch --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 783adaaf48..e0bab500aa 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -50,19 +50,16 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) // Set the necessary file paths. std::string drm_file_name = fmt::AfterLast(drm_path,'/'); - //make more explicit what this actually does (currently everything after the third slash and before the fourth slash) + // TODO: Make more explicit what this actually does (currently it copies "XXXXXXXX" from drm_path (== "/dev_hdd0/game/XXXXXXXXX/*" assumed) std::string titleID = fmt::BeforeFirst(fmt::AfterFirst(fmt::AfterFirst(fmt::AfterFirst(drm_path,'/'),'/'),'/'),'/'); // TODO: These shouldn't use current dir std::string enc_drm_path = drm_path; - drm_path.insert(0, 1, '.'); - std::string dec_drm_path = "./dev_hdd1/" + titleID + "/" + drm_file_name; - - std::string rap_dir_path = "./dev_usb000/"; - std::string rap_file_path = rap_dir_path; + std::string dec_drm_path = "/dev_hdd1/" + titleID + "/" + drm_file_name; + std::string rap_path = "/dev_usb000/"; // Search dev_usb000 for a compatible RAP file. - vfsDir *raps_dir = new vfsDir(rap_dir_path); + vfsDir *raps_dir = new vfsDir(rap_path); if (!raps_dir->IsOpened()) sceNp->Warning("sceNpDrmIsAvailable: Can't find RAP file for DRM!"); else @@ -72,7 +69,7 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) { if (entry.name.find(titleID) != std::string::npos ) { - rap_file_path += entry.name; + rap_path += entry.name; break; } } @@ -85,8 +82,12 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) rMkdir("./dev_hdd1/" + titleID); // Decrypt this EDAT using the supplied k_licensee and matching RAP file. - DecryptEDAT(enc_drm_path, dec_drm_path, 8, rap_file_path, k_licensee, false); + std::string enc_drm_path_local, dec_drm_path_local, rap_path_local; + Emu.GetVFS().GetDevice(enc_drm_path, enc_drm_path_local); + Emu.GetVFS().GetDevice(dec_drm_path, dec_drm_path_local); + Emu.GetVFS().GetDevice(rap_path, rap_path_local); + DecryptEDAT(enc_drm_path_local, dec_drm_path_local, 8, rap_path_local, k_licensee, false); return CELL_OK; } From 83948a298c14a1acc018fa774eded28cc0601675 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 18:41:32 +0400 Subject: [PATCH 278/499] ... --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index e0bab500aa..067d233df3 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -51,7 +51,7 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) std::string drm_file_name = fmt::AfterLast(drm_path,'/'); // TODO: Make more explicit what this actually does (currently it copies "XXXXXXXX" from drm_path (== "/dev_hdd0/game/XXXXXXXXX/*" assumed) - std::string titleID = fmt::BeforeFirst(fmt::AfterFirst(fmt::AfterFirst(fmt::AfterFirst(drm_path,'/'),'/'),'/'),'/'); + std::string titleID = drm_path.substr(15, 9); // TODO: These shouldn't use current dir std::string enc_drm_path = drm_path; From e7ae71bd73673164e9abcfa626d21c87a888100d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 21:33:02 +0400 Subject: [PATCH 279/499] Copy(To)(From)(Real) elimination It was nothing but a crutch --- rpcs3/Emu/FS/vfsStreamMemory.cpp | 22 ++---- rpcs3/Emu/Memory/Memory.cpp | 30 -------- rpcs3/Emu/Memory/Memory.h | 75 ++++++++++---------- rpcs3/Emu/Memory/MemoryBlock.h | 5 -- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 28 ++------ rpcs3/Emu/SysCalls/Modules/cellDmux.h | 7 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 15 +--- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 28 ++------ rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 28 ++------ rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 29 ++------ rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 26 ++----- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 34 +-------- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 3 - rpcs3/Emu/SysCalls/lv2/sys_memory.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 5 +- 16 files changed, 75 insertions(+), 268 deletions(-) diff --git a/rpcs3/Emu/FS/vfsStreamMemory.cpp b/rpcs3/Emu/FS/vfsStreamMemory.cpp index 1608f5c1da..d8534193f0 100644 --- a/rpcs3/Emu/FS/vfsStreamMemory.cpp +++ b/rpcs3/Emu/FS/vfsStreamMemory.cpp @@ -32,14 +32,9 @@ u64 vfsStreamMemory::Write(const void* src, u64 size) size = GetSize() - Tell(); } - if (!Memory.CopyFromReal(m_addr + Tell(), (void*)src, size)) - { - return 0; - } - else - { - return vfsStream::Write(src, size); - } + memcpy(Memory + m_addr + Tell(), (void*)src, size); + + return vfsStream::Write(src, size); } u64 vfsStreamMemory::Read(void* dst, u64 size) @@ -49,12 +44,7 @@ u64 vfsStreamMemory::Read(void* dst, u64 size) size = GetSize() - Tell(); } - if (!Memory.CopyToReal(dst, m_addr + Tell(), size)) - { - return 0; - } - else - { - return vfsStream::Read(dst, size); - } + memcpy(dst, Memory + m_addr + Tell(), size); + + return vfsStream::Read(dst, size); } diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index c69afb5a9a..8fbae6c536 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -106,36 +106,6 @@ u64 MemoryBlock::FixAddr(const u64 addr) const return addr - GetStartAddr(); } -bool MemoryBlock::GetMemFromAddr(void* dst, const u64 addr, const u32 size) -{ - if(!IsMyAddress(addr) || FixAddr(addr) + size > GetSize()) return false; - - return Memory.CopyToReal(dst, addr, size); -} - -bool MemoryBlock::SetMemFromAddr(void* src, const u64 addr, const u32 size) -{ - if(!IsMyAddress(addr) || FixAddr(addr) + size > GetSize()) return false; - - return Memory.CopyFromReal(addr, src, size); -} - -bool MemoryBlock::GetMemFFromAddr(void* dst, const u64 addr) -{ - if(!IsMyAddress(addr)) return false; - - dst = GetMem(FixAddr(addr)); - - return true; -} - -u8* MemoryBlock::GetMemFromAddr(const u64 addr) -{ - if(!IsMyAddress(addr) || IsNULL()) return nullptr; - - return GetMem(FixAddr(addr)); -} - MemoryBlock* MemoryBlock::SetRange(const u64 start, const u32 size) { if (start + size > 0x100000000) return nullptr; diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index b559a9a846..a4ea0cfca7 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -391,20 +391,32 @@ public: } } + noinline void WriteMMIO32(u32 addr, const u32 data) + { + { + std::lock_guard lock(m_mutex); + + if (RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET] && + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data)) + { + return; + } + } + + *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); // provoke error + } + template void Write32(T addr, const u32 data) { if ((u32)addr == addr) { - if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET) { *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); } else { - if (!RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data)) - { - *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); - } + WriteMMIO32(addr, data); } } else @@ -466,22 +478,34 @@ public: } } + noinline u32 ReadMMIO32(u32 addr) + { + u32 res; + { + std::lock_guard lock(m_mutex); + + if (RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET] && + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res)) + { + return res; + } + } + + res = re32(*(u32*)((u8*)GetBaseAddr() + addr)); // provoke error + return res; + } + template u32 Read32(T addr) { if ((u32)addr == addr) { - if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET || !RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]) + if (addr < RAW_SPU_BASE_ADDR || (addr % RAW_SPU_OFFSET) < RAW_SPU_PROB_OFFSET) { return re32(*(u32*)((u8*)GetBaseAddr() + addr)); } else { - u32 res; - if (!RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res)) - { - res = re32(*(u32*)((u8*)GetBaseAddr() + addr)); - } - return res; + return ReadMMIO32(addr); } } else @@ -517,33 +541,6 @@ public: } } - template bool CopyToReal(void* real, T from, u32 count) - { - if (!IsGoodAddr(from, count)) return false; // TODO: eliminate - - memcpy(real, GetMemFromAddr(from), count); - - return true; - } - - template bool CopyFromReal(T to, const void* real, u32 count) - { - if (!IsGoodAddr(to, count)) return false; // TODO: eliminate - - memcpy(GetMemFromAddr(to), real, count); - - return true; - } - - template bool Copy(T1 to, T2 from, u32 count) - { - if (!IsGoodAddr(to, count) || !IsGoodAddr(from, count)) return false; // TODO: eliminate - - memmove(GetMemFromAddr(to), GetMemFromAddr(from), count); - - return true; - } - void ReadLeft(u8* dst, const u64 addr, const u32 size) { for (u32 i = 0; i < size; ++i) dst[size - 1 - i] = Read8(addr + i); diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index 1873d009dc..fa5b913797 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -283,11 +283,6 @@ public: u64 FixAddr(const u64 addr) const; - bool GetMemFromAddr(void* dst, const u64 addr, const u32 size); - bool SetMemFromAddr(void* src, const u64 addr, const u32 size); - bool GetMemFFromAddr(void* dst, const u64 addr); - u8* GetMemFromAddr(const u64 addr); - virtual MemoryBlock* SetRange(const u64 start, const u32 size); virtual bool IsMyAddress(const u64 addr); virtual bool IsLocked(const u64 addr) { return false; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 3943e11880..f43dfe1e40 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -50,12 +50,7 @@ next: break; case adecDecodeAu: { - if (!Memory.CopyToReal(buf, adec.reader.addr, adec.reader.size)) - { - LOG_ERROR(HLE, "adecRawRead(): data reading failed (reader.size=0x%x)", adec.reader.size); - Emu.Pause(); - return 0; - } + memcpy(buf, Memory + adec.reader.addr, adec.reader.size); buf += adec.reader.size; buf_size -= adec.reader.size; @@ -86,14 +81,10 @@ next: { return res; } - else if (!Memory.CopyToReal(buf, adec.reader.addr, buf_size)) - { - LOG_ERROR(HLE, "adecRawRead(): data reading failed (buf_size=0x%x)", buf_size); - Emu.Pause(); - return 0; - } else { + memcpy(buf, Memory + adec.reader.addr, buf_size); + adec.reader.addr += buf_size; adec.reader.size -= buf_size; return res + buf_size; @@ -691,28 +682,17 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) return CELL_OK; } - // copy data - u8* out = (u8*)calloc(1, af.size); - // reverse byte order, extract data: float* in_f[2]; in_f[0] = (float*)frame->extended_data[0]; in_f[1] = (float*)frame->extended_data[1]; - be_t* out_f = (be_t*)out; + be_t* out_f = (be_t*)Memory.GetMemFromAddr(outBuffer_addr); for (u32 i = 0; i < af.size / 8; i++) { out_f[i*2] = in_f[0][i]; out_f[i*2+1] = in_f[1][i]; } - if (!Memory.CopyFromReal(outBuffer_addr, out, af.size)) - { - LOG_ERROR(HLE, "cellAdecGetPcm(%d): data copying failed (addr=0x%x)", handle, outBuffer_addr); - Emu.Pause(); - } - - free(out); - if (af.data) { av_frame_unref(af.data); diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.h b/rpcs3/Emu/SysCalls/Modules/cellDmux.h index 750de6eaf6..db6e39b5c8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.h +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.h @@ -632,12 +632,7 @@ public: u32 data_addr = put + 128 + size; size += sz; - if (!Memory.Copy(data_addr, stream.addr, sz)) - { - LOG_ERROR(HLE, "es::push(): data copying failed"); - Emu.Pause(); - return; - } + memcpy(Memory + data_addr, Memory + stream.addr, sz); stream.skip(sz); mem_ptr_t info(put); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 2755166198..5b3b923b15 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -461,12 +461,8 @@ s32 cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) const s32 res = ctxt->current - ctxt->begin - ctrl.put; - if (res > 0 && !Memory.Copy(ctxt->begin, ctxt->current - res, res)) - { - cellGcmSys->Error("cellGcmSetPrepareFlip(): Memory.Copy(0x%x, 0x%x, 0x%x) failed", (u32)ctxt->begin, (u32)ctxt->current - res, res); - Emu.Pause(); - return CELL_EFAULT; - } + memmove(Memory + ctxt->begin, Memory + ctxt->current - res, res); + ctxt->current = ctxt->begin + res; //InterlockedExchange64((volatile long long*)((u8*)&ctrl + offsetof(CellGcmControl, put)), (u64)(u32)re(res)); @@ -1119,12 +1115,7 @@ int cellGcmCallback(u32 context_addr, u32 count) const s32 res = ctx.current - ctx.begin - ctrl.put; - if (res > 0 && !Memory.Copy(ctx.begin, ctx.current - res, res)) - { - cellGcmSys->Error("cellGcmCallback(): Memory.Copy(0x%x, 0x%x, 0x%x) failed", (u32)ctx.begin, (u32)ctx.current - res, res); - Emu.Pause(); - return CELL_EFAULT; - } + memmove(Memory + ctx.begin, Memory + ctx.current - res, res); ctx.current = ctx.begin + res; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index b3681a8f85..c2ec05e193 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -75,10 +75,7 @@ int cellGifDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tsrc.srcSelect.ToBE()) { case se32(CELL_GIFDEC_BUFFER): - if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) { - cellGifDec->Error("cellGifDecReadHeader() failed ()"); - return CELL_EFAULT; - } + memmove(Memory + buffer.GetAddr(), Memory + subHandle_data->src.streamPtr.ToLE(), buffer.GetSize()); break; case se32(CELL_GIFDEC_FILE): @@ -154,10 +151,7 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_GIFDEC_BUFFER): - if (!Memory.Copy(gif.GetAddr(), subHandle_data->src.streamPtr.ToLE(), gif.GetSize())) { - cellGifDec->Error("cellGifDecDecodeData() failed (I)"); - return CELL_EFAULT; - } + memmove(Memory + gif.GetAddr(), Memory + subHandle_data->src.streamPtr.ToLE(), gif.GetSize()); break; case se32(CELL_GIFDEC_FILE): @@ -192,20 +186,12 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m { const int dstOffset = i * bytesPerLine; const int srcOffset = width * nComponents * i; - if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize)) - { - cellGifDec->Error("cellGifDecDecodeData() failed (II)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize); } } else { - if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) - { - cellGifDec->Error("cellGifDecDecodeData() failed (III)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr(), image.get(), image_size); } } break; @@ -228,11 +214,7 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m output[j + 2] = image.get()[srcOffset + j + 1]; output[j + 3] = image.get()[srcOffset + j + 2]; } - if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, output, linesize)) - { - cellGifDec->Error("cellGifDecDecodeData() failed (IV)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr() + dstOffset, output, linesize); } free(output); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index 81a139c3ba..2670f3e846 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -96,10 +96,7 @@ int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tsrc.srcSelect.ToBE()) { case se32(CELL_JPGDEC_BUFFER): - if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) { - cellJpgDec->Error("cellJpgDecReadHeader() failed ()"); - return CELL_EFAULT; - } + memmove(Memory + buffer.GetAddr(), Memory + subHandle_data->src.streamPtr.ToLE(), buffer.GetSize()); break; case se32(CELL_JPGDEC_FILE): @@ -165,10 +162,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_JPGDEC_BUFFER): - if (!Memory.Copy(jpg.GetAddr(), subHandle_data->src.streamPtr.ToLE(), jpg.GetSize())) { - cellJpgDec->Error("cellJpgDecDecodeData() failed (I)"); - return CELL_EFAULT; - } + memmove(Memory + jpg.GetAddr(), Memory + subHandle_data->src.streamPtr.ToLE(), jpg.GetSize()); break; case se32(CELL_JPGDEC_FILE): @@ -206,20 +200,12 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m { const int dstOffset = i * bytesPerLine; const int srcOffset = width * nComponents * (flip ? height - i - 1 : i); - if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize)) - { - cellJpgDec->Error("cellJpgDecDecodeData() failed (II)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize); } } else { - if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) - { - cellJpgDec->Error("cellJpgDecDecodeData() failed (III)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr(), image.get(), image_size); } } break; @@ -244,11 +230,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m output[j + 2] = image.get()[srcOffset + j + 1]; output[j + 3] = image.get()[srcOffset + j + 2]; } - if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, output, linesize)) - { - cellJpgDec->Error("cellJpgDecDecodeData() failed (IV)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr() + dstOffset, output, linesize); } free(output); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 6ee981a95c..c2b5749de1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -139,11 +139,7 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_tsrc.srcSelect.ToBE()) { case se32(CELL_PNGDEC_BUFFER): - if (!Memory.Copy(buffer.GetAddr(), subHandle_data->src.streamPtr.ToLE(), buffer.GetSize())) - { - cellPngDec->Error("cellPngDecReadHeader() failed ()"); - return CELL_EFAULT; - } + memmove(Memory + buffer.GetAddr(), Memory + subHandle_data->src.streamPtr.ToLE(), buffer.GetSize()); break; case se32(CELL_PNGDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos.GetAddr()); @@ -205,10 +201,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m switch(subHandle_data->src.srcSelect.ToBE()) { case se32(CELL_PNGDEC_BUFFER): - if (!Memory.Copy(png.GetAddr(), subHandle_data->src.streamPtr.ToLE(), png.GetSize())) { - cellPngDec->Error("cellPngDecDecodeData() failed (I)"); - return CELL_EFAULT; - } + memmove(Memory + png.GetAddr(), Memory + subHandle_data->src.streamPtr.ToLE(), png.GetSize()); break; case se32(CELL_PNGDEC_FILE): @@ -244,20 +237,12 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m { const int dstOffset = i * bytesPerLine; const int srcOffset = width * nComponents * (flip ? height - i - 1 : i); - if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize)) - { - cellPngDec->Error("cellPngDecDecodeData() failed (II)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize); } } else { - if (!Memory.CopyFromReal(data.GetAddr(), image.get(), image_size)) - { - cellPngDec->Error("cellPngDecDecodeData() failed (III)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr(), image.get(), image_size); } } break; @@ -282,11 +267,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m output[j + 2] = image.get()[srcOffset + j + 1]; output[j + 3] = image.get()[srcOffset + j + 2]; } - if (!Memory.CopyFromReal(data.GetAddr() + dstOffset, output, linesize)) - { - cellPngDec->Error("cellPngDecDecodeData() failed (IV)"); - return CELL_EFAULT; - } + memcpy(Memory + data.GetAddr() + dstOffset, output, linesize); } free(output); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index f01f4a3279..c2b5d0b99e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -49,12 +49,7 @@ next: break; case vdecDecodeAu: { - if (!Memory.CopyToReal(buf, vdec.reader.addr, vdec.reader.size)) - { - LOG_ERROR(HLE, "vdecRead(): data reading failed (reader.size=0x%x)", vdec.reader.size); - Emu.Pause(); - return 0; - } + memcpy(buf, Memory + vdec.reader.addr, vdec.reader.size); buf += vdec.reader.size; buf_size -= vdec.reader.size; @@ -89,14 +84,10 @@ next: { return res; } - else if (!Memory.CopyToReal(buf, vdec.reader.addr, buf_size)) - { - LOG_ERROR(HLE, "vdecRead(): data reading failed (buf_size=0x%x)", buf_size); - Emu.Pause(); - return 0; - } else { + memcpy(buf, Memory + vdec.reader.addr, buf_size); + vdec.reader.addr += buf_size; vdec.reader.size -= buf_size; return res + buf_size; @@ -596,26 +587,17 @@ int cellVdecGetPicture(u32 handle, const mem_ptr_t format, u3 AVFrame& frame = *vf.data; - u8* buf = (u8*)malloc(buf_size); - // TODO: zero padding bytes - int err = av_image_copy_to_buffer(buf, buf_size, frame.data, frame.linesize, vdec->ctx->pix_fmt, frame.width, frame.height, 1); + int err = av_image_copy_to_buffer(Memory + out_addr, buf_size, frame.data, frame.linesize, vdec->ctx->pix_fmt, frame.width, frame.height, 1); if (err < 0) { cellVdec->Error("cellVdecGetPicture: av_image_copy_to_buffer failed(%d)", err); Emu.Pause(); } - if (!Memory.CopyFromReal(out_addr, buf, buf_size)) - { - cellVdec->Error("cellVdecGetPicture: data copying failed"); - Emu.Pause(); - } - av_frame_unref(vf.data); av_frame_free(&vf.data); - free(buf); } return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index 2ebff16141..ad594ad883 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -128,29 +128,7 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_treserved2 = 0; u64 stamp0 = get_system_time(); - std::unique_ptr pY(new u8[w*h]); // color planes - std::unique_ptr pU(new u8[w*h/4]); - std::unique_ptr pV(new u8[w*h/4]); std::unique_ptr pA(new u8[w*h]); - std::unique_ptr res(new u32[ow*oh*4]); // RGBA interleaved output - - if (!Memory.CopyToReal(pY.get(), inPicBuff_addr, w*h)) - { - cellVpost->Error("cellVpostExec: data copying failed(pY)"); - Emu.Pause(); - } - - if (!Memory.CopyToReal(pU.get(), inPicBuff_addr + w*h, w*h/4)) - { - cellVpost->Error("cellVpostExec: data copying failed(pU)"); - Emu.Pause(); - } - - if (!Memory.CopyToReal(pV.get(), inPicBuff_addr + w*h + w*h/4, w*h/4)) - { - cellVpost->Error("cellVpostExec: data copying failed(pV)"); - Emu.Pause(); - } memset(pA.get(), (const u8)ctrlParam->outAlpha, w*h); @@ -160,22 +138,16 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_t(ow*4), 0, 0, 0 }; sws_scale(sws, in_data, in_line, 0, h, out_data, out_line); - sws_freeContext(sws); - u64 stamp3 = get_system_time(); - if (!Memory.CopyFromReal(outPicBuff_addr, res.get(), ow*oh*4)) - { - cellVpost->Error("cellVpostExec: data copying failed(result)"); - Emu.Pause(); - } + sws_freeContext(sws); //ConLog.Write("cellVpostExec() perf (access=%d, getContext=%d, scale=%d, finalize=%d)", //stamp1 - stamp0, stamp2 - stamp1, stamp3 - stamp2, get_system_time() - stamp3); diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 43b0cdc78c..cf41b0cf4f 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -149,11 +149,7 @@ int sys_raw_spu_image_load(int id, mem_ptr_t img) { sysPrxForUser->Warning("sys_raw_spu_image_load(id=0x%x, img_addr=0x%x)", id, img.GetAddr()); - if (!Memory.Copy(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id, (u32)img->segs_addr, 256 * 1024)) - { - sysPrxForUser->Error("sys_raw_spu_image_load() failed"); - return CELL_EFAULT; - } + memcpy(Memory + RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id, Memory + (u32)img->segs_addr, 256 * 1024); Memory.Write32(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id + RAW_SPU_PROB_OFFSET + SPU_NPC_offs, (u32)img->entry_point); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index c6d8e428c7..daca04cb31 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -353,9 +353,6 @@ s32 cellFsUnlink(u32 path_addr) const std::string& ps3_path = Memory.ReadString(path_addr); sys_fs->Warning("cellFsUnlink(path=\"%s\")", ps3_path.c_str()); - if (ps3_path.empty()) - return CELL_EFAULT; - if (Emu.GetVFS().ExistsDir(ps3_path)) return CELL_EISDIR; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp index e56b65c580..dd16cae520 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp @@ -82,7 +82,7 @@ s32 sys_memory_free(u32 start_addr) // Release the allocated memory. if(!Memory.Free(start_addr)) - return CELL_EFAULT; + return CELL_EINVAL; return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index d55f04d5f5..b84ca51828 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -86,10 +86,7 @@ s32 sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t< //copy SPU image: auto spu_offset = Memory.MainMem.AllocAlign(256 * 1024); - if (!Memory.Copy(spu_offset, (u32)img->segs_addr, 256 * 1024)) - { - return CELL_EFAULT; - } + memcpy(Memory + spu_offset, Memory + (u32)img->segs_addr, 256 * 1024); CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_SPU); //initialize from new place: From 9f268065def0ed73baeef77f1ca774a3ce46d485 Mon Sep 17 00:00:00 2001 From: Sacha Date: Tue, 5 Aug 2014 22:14:08 +1000 Subject: [PATCH 280/499] Fix infinite loop in rMkpath --- Utilities/rFile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 853f2678ef..47979233f9 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -70,7 +70,7 @@ bool rMkpath(const std::string &path) bool ret; while (true) { - if ((pos = path.find_first_of('/', start)) == std::string::npos) + if ((pos = path.find_first_of("/\\", start)) == std::string::npos) pos = path.length(); dir = path.substr(0,pos++); @@ -80,7 +80,7 @@ bool rMkpath(const std::string &path) if((ret = mkdir(dir.c_str())) && errno != EEXIST){ return !ret; } - if (pos == path.length()) + if (pos >= path.length()) return true; } return true; From 5621258b9d1a8020d57e691a92f5c877ee40b5fe Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 18:36:16 +0400 Subject: [PATCH 281/499] edat patch --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 112b39b379..2b40318eb2 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -50,19 +50,16 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) // Set the necessary file paths. std::string drm_file_name = fmt::AfterLast(drm_path,'/'); - //make more explicit what this actually does (currently everything after the third slash and before the fourth slash) + // TODO: Make more explicit what this actually does (currently it copies "XXXXXXXX" from drm_path (== "/dev_hdd0/game/XXXXXXXXX/*" assumed) std::string titleID = fmt::BeforeFirst(fmt::AfterFirst(fmt::AfterFirst(fmt::AfterFirst(drm_path,'/'),'/'),'/'),'/'); // TODO: These shouldn't use current dir std::string enc_drm_path = drm_path; - drm_path.insert(0, 1, '.'); - std::string dec_drm_path = "./dev_hdd1/" + titleID + "/" + drm_file_name; - - std::string rap_dir_path = "./dev_usb000/"; - std::string rap_file_path = rap_dir_path; + std::string dec_drm_path = "/dev_hdd1/" + titleID + "/" + drm_file_name; + std::string rap_path = "/dev_usb000/"; // Search dev_usb000 for a compatible RAP file. - vfsDir *raps_dir = new vfsDir(rap_dir_path); + vfsDir *raps_dir = new vfsDir(rap_path); if (!raps_dir->IsOpened()) sceNp->Warning("sceNpDrmIsAvailable: Can't find RAP file for DRM!"); else @@ -72,7 +69,7 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) { if (entry.name.find(titleID) != std::string::npos ) { - rap_file_path += entry.name; + rap_path += entry.name; break; } } @@ -85,8 +82,12 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) rMkdir("./dev_hdd1/" + titleID); // Decrypt this EDAT using the supplied k_licensee and matching RAP file. - DecryptEDAT(enc_drm_path, dec_drm_path, 8, rap_file_path, k_licensee, false); + std::string enc_drm_path_local, dec_drm_path_local, rap_path_local; + Emu.GetVFS().GetDevice(enc_drm_path, enc_drm_path_local); + Emu.GetVFS().GetDevice(dec_drm_path, dec_drm_path_local); + Emu.GetVFS().GetDevice(rap_path, rap_path_local); + DecryptEDAT(enc_drm_path_local, dec_drm_path_local, 8, rap_path_local, k_licensee, false); return CELL_OK; } From facb412e6280bcc114d13fbd26bee89ebc0fb97f Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 5 Aug 2014 18:41:32 +0400 Subject: [PATCH 282/499] ... --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 2b40318eb2..f686e4f293 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -51,7 +51,7 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) std::string drm_file_name = fmt::AfterLast(drm_path,'/'); // TODO: Make more explicit what this actually does (currently it copies "XXXXXXXX" from drm_path (== "/dev_hdd0/game/XXXXXXXXX/*" assumed) - std::string titleID = fmt::BeforeFirst(fmt::AfterFirst(fmt::AfterFirst(fmt::AfterFirst(drm_path,'/'),'/'),'/'),'/'); + std::string titleID = drm_path.substr(15, 9); // TODO: These shouldn't use current dir std::string enc_drm_path = drm_path; From 36f76bf2883a6e740b7a8f2262a251b727903d3c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 6 Aug 2014 02:19:33 +0400 Subject: [PATCH 283/499] Some missing logs --- rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 22 ++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 15 +++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 15 ++++++++++++--- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 8 +++++++- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 5 +++-- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_trace.cpp | 20 ++++++++++---------- rpcs3/Emu/SysCalls/lv2/sys_vm.cpp | 14 +++++++------- 11 files changed, 80 insertions(+), 26 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp index f171ae5705..c71dac97ad 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp @@ -21,7 +21,7 @@ enum CELL_KB_ERROR_CODE int cellKbInit(u32 max_connect) { - sys_io->Log("cellKbInit(max_connect=%d)", max_connect); + sys_io->Warning("cellKbInit(max_connect=%d)", max_connect); if(Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_ALREADY_INITIALIZED; if(max_connect > 7) return CELL_KB_ERROR_INVALID_PARAMETER; diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp index 44f3dad312..b4cee94fdb 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp @@ -21,7 +21,7 @@ enum CELL_MOUSE_ERROR_CODE int cellMouseInit(u32 max_connect) { - sys_io->Log("cellMouseInit(max_connect=%d)", max_connect); + sys_io->Warning("cellMouseInit(max_connect=%d)", max_connect); if(Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_ALREADY_INITIALIZED; if(max_connect > 7) return CELL_MOUSE_ERROR_INVALID_PARAMETER; diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp index b91e990c89..de2aecd3b7 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp @@ -55,7 +55,7 @@ struct CellCapabilityInfo int cellPadInit(u32 max_connect) { - sys_io->Log("cellPadInit(max_connect=%d)", max_connect); + sys_io->Warning("cellPadInit(max_connect=%d)", max_connect); if(Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_ALREADY_INITIALIZED; if (max_connect > CELL_PAD_MAX_PORT_NUM) return CELL_PAD_ERROR_INVALID_PARAMETER; Emu.GetPadManager().Init(max_connect); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 5b3b923b15..ecfb9c4633 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -791,17 +791,23 @@ s32 cellGcmAddressToOffset(u64 address, mem32_t offset) u32 cellGcmGetMaxIoMapSize() { + cellGcmSys->Log("cellGcmGetMaxIoMapSize()"); + return Memory.RSXIOMem.GetEndAddr() - Memory.RSXIOMem.GetStartAddr() - Memory.RSXIOMem.GetReservedAmount(); } void cellGcmGetOffsetTable(mem_ptr_t table) { + cellGcmSys->Log("cellGcmGetOffsetTable(table_addr=0x%x)", table.GetAddr()); + table->io = re(offsetTable.io); table->ea = re(offsetTable.ea); } s32 cellGcmIoOffsetToAddress(u32 ioOffset, u64 address) { + cellGcmSys->Log("cellGcmIoOffsetToAddress(ioOffset=0x%x, address=0x%llx)", ioOffset, address); + u64 realAddr; if (!Memory.RSXIOMem.getRealAddr(Memory.RSXIOMem.GetStartAddr() + ioOffset, realAddr)) @@ -845,6 +851,8 @@ s32 cellGcmMapEaIoAddressWithFlags(u32 ea, u32 io, u32 size, u32 flags) s32 cellGcmMapLocalMemory(u64 address, u64 size) { + cellGcmSys->Warning("cellGcmMapLocalMemory(address=0x%llx, size=0x%llx)", address, size); + if (!local_size && !local_addr) { local_size = 0xf900000; //TODO @@ -898,6 +906,8 @@ s32 cellGcmMapMainMemory(u64 ea, u32 size, mem32_t offset) s32 cellGcmReserveIoMapSize(u32 size) { + cellGcmSys->Log("cellGcmReserveIoMapSize(size=0x%x)", size); + if (size & 0xFFFFF) { cellGcmSys->Error("cellGcmReserveIoMapSize : CELL_GCM_ERROR_INVALID_ALIGNMENT"); @@ -916,6 +926,8 @@ s32 cellGcmReserveIoMapSize(u32 size) s32 cellGcmUnmapEaIoAddress(u64 ea) { + cellGcmSys->Log("cellGcmUnmapEaIoAddress(ea=0x%llx)", ea); + u32 size = Memory.RSXIOMem.UnmapRealAddress(ea); if (size) { @@ -940,6 +952,8 @@ s32 cellGcmUnmapEaIoAddress(u64 ea) s32 cellGcmUnmapIoAddress(u64 io) { + cellGcmSys->Log("cellGcmUnmapIoAddress(io=0x%x)", io); + u32 size = Memory.RSXIOMem.UnmapAddress(io); if (size) { @@ -964,6 +978,7 @@ s32 cellGcmUnmapIoAddress(u64 io) s32 cellGcmUnreserveIoMapSize(u32 size) { + cellGcmSys->Log("cellGcmUnreserveIoMapSize(size=0x%x)", size); if (size & 0xFFFFF) { @@ -1037,6 +1052,8 @@ void cellGcmSetDefaultCommandBuffer() int cellGcmSetFlipCommand(u32 ctx, u32 id) { + cellGcmSys->Log("cellGcmSetFlipCommand(ctx=0x%x, id=0x%x)", ctx, id); + return cellGcmSetPrepareFlip(ctx, id); } @@ -1054,6 +1071,9 @@ s64 cellGcmFunc15(u32 unk_addr) int cellGcmSetFlipCommandWithWaitLabel(u32 ctx, u32 id, u32 label_index, u32 label_value) { + cellGcmSys->Log("cellGcmSetFlipCommandWithWaitLabel(ctx=0x%x, id=0x%x, label_index=0x%x, label_value=0x%x", + ctx, id, label_index, label_value); + int res = cellGcmSetPrepareFlip(ctx, id); Memory.Write32(Memory.RSXCMDMem.GetStartAddr() + 0x10 * label_index, label_value); return res < 0 ? CELL_GCM_ERROR_FAILURE : CELL_OK; @@ -1108,6 +1128,8 @@ int cellGcmSetTile(u8 index, u8 location, u32 offset, u32 size, u32 pitch, u8 co int cellGcmCallback(u32 context_addr, u32 count) { + cellGcmSys->Log("cellGcmCallback(context_addr=0x%x, count=0x%x)", context_addr, count); + GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); CellGcmContextData& ctx = (CellGcmContextData&)Memory[context_addr]; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index c2ec05e193..bf904a2170 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -27,6 +27,9 @@ int cellGifDecExtCreate(u32 mainHandle, u32 threadInParam, u32 threadOutParam, u int cellGifDecOpen(u32 mainHandle, mem32_t subHandle, const mem_ptr_t src, mem_ptr_t openInfo) { + cellGifDec->Warning("cellGifDecOpen(mainHandle=0x%x, subHandle_addr=0x%x, src_addr=0x%x, openInfo_addr=0x%x)", + mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo.GetAddr()); + CellGifDecSubHandle *current_subHandle = new CellGifDecSubHandle; current_subHandle->fd = 0; current_subHandle->src = *src; @@ -60,6 +63,9 @@ int cellGifDecOpen(u32 mainHandle, mem32_t subHandle, const mem_ptr_t info) { + cellGifDec->Warning("cellGifDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%x)", + mainHandle, subHandle, info.GetAddr()); + CellGifDecSubHandle* subHandle_data; if(!cellGifDec->CheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; @@ -107,6 +113,9 @@ int cellGifDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t inParam, mem_ptr_t outParam) { + cellGifDec->Warning("cellGifDecSetParameter(mainHandle=0x%x, subHandle=0x%x, inParam_addr=0x%x, outParam_addr=0x%x)", + mainHandle, subHandle, inParam.GetAddr(), outParam.GetAddr()); + CellGifDecSubHandle* subHandle_data; if(!cellGifDec->CheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; @@ -134,6 +143,9 @@ int cellGifDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_t dataCtrlParam, mem_ptr_t dataOutInfo) { + cellGifDec->Warning("cellGifDecDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x)", + mainHandle, subHandle, data.GetAddr(), dataCtrlParam.GetAddr(), dataOutInfo.GetAddr()); + dataOutInfo->status = CELL_GIFDEC_DEC_STATUS_STOP; CellGifDecSubHandle* subHandle_data; @@ -249,6 +261,9 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int cellGifDecClose(u32 mainHandle, u32 subHandle) { + cellGifDec->Warning("cellGifDecClose(mainHandle=0x%x, subHandle=0x%x)", + mainHandle, subHandle); + CellGifDecSubHandle* subHandle_data; if(!cellGifDec->CheckId(subHandle, subHandle_data)) return CELL_GIFDEC_ERROR_FATAL; diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index 2670f3e846..9c0ccd9377 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -30,8 +30,8 @@ int cellJpgDecDestroy(u32 mainHandle) int cellJpgDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t src, mem_ptr_t openInfo) { - cellJpgDec->Warning("cellJpgDecOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x)", - mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo); + cellJpgDec->Warning("cellJpgDecOpen(mainHandle=0x%x, subHandle_addr=0x%x, src_addr=0x%x, openInfo_addr=0x%x)", + mainHandle, subHandle.GetAddr(), src.GetAddr(), openInfo.GetAddr()); CellJpgDecSubHandle *current_subHandle = new CellJpgDecSubHandle; @@ -67,6 +67,9 @@ int cellJpgDecOpen(u32 mainHandle, mem32_t subHandle, mem_ptr_t s int cellJpgDecClose(u32 mainHandle, u32 subHandle) { + cellJpgDec->Warning("cellJpgDecOpen(mainHandle=0x%x, subHandle=0x%x)", + mainHandle, subHandle); + CellJpgDecSubHandle* subHandle_data; if(!cellJpgDec->CheckId(subHandle, subHandle_data)) return CELL_JPGDEC_ERROR_FATAL; @@ -79,7 +82,7 @@ int cellJpgDecClose(u32 mainHandle, u32 subHandle) int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t info) { - cellJpgDec->Log("cellJpgDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%llx)", mainHandle, subHandle, info.GetAddr()); + cellJpgDec->Log("cellJpgDecReadHeader(mainHandle=0x%x, subHandle=0x%x, info_addr=0x%x)", mainHandle, subHandle, info.GetAddr()); CellJpgDecSubHandle* subHandle_data; if(!cellJpgDec->CheckId(subHandle, subHandle_data)) @@ -146,6 +149,9 @@ int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t dataCtrlParam, mem_ptr_t dataOutInfo) { + cellJpgDec->Log("cellJpgDecDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x)", + mainHandle, subHandle, data.GetAddr(), dataCtrlParam.GetAddr(), dataOutInfo.GetAddr()); + dataOutInfo->status = CELL_JPGDEC_DEC_STATUS_STOP; CellJpgDecSubHandle* subHandle_data; if(!cellJpgDec->CheckId(subHandle, subHandle_data)) @@ -275,6 +281,9 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int cellJpgDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_t inParam, mem_ptr_t outParam) { + cellJpgDec->Log("cellJpgDecSetParameter(mainHandle=0x%x, subHandle=0x%x, inParam_addr=0x%x, outParam_addr=0x%x)", + mainHandle, subHandle, inParam.GetAddr(), outParam.GetAddr()); + CellJpgDecSubHandle* subHandle_data; if(!cellJpgDec->CheckId(subHandle, subHandle_data)) return CELL_JPGDEC_ERROR_FATAL; diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index c2b5749de1..735054e89d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -185,6 +185,9 @@ int cellPngDecExtReadHeader(u32 mainHandle, u32 subHandle, mem_ptr_t dataCtrlParam, mem_ptr_t dataOutInfo) { + cellPngDec->Warning("cellPngDecDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x)", + mainHandle, subHandle, data.GetAddr(), dataCtrlParam.GetAddr(), dataOutInfo.GetAddr()); + dataOutInfo->status = CELL_PNGDEC_DEC_STATUS_STOP; CellPngDecSubHandle* subHandle_data; if(!cellPngDec->CheckId(subHandle, subHandle_data)) @@ -308,7 +311,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m int cellPngDecExtDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const mem_ptr_t dataCtrlParam, mem_ptr_t dataOutInfo, mem_ptr_t cbCtrlDisp, mem_ptr_t dispParam) { - cellPngDec->Warning("cellPngDecExtDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x, cbCtrlDisp_addr=0x%x, dispParam=0x%x", + cellPngDec->Warning("cellPngDecExtDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x, cbCtrlDisp_addr=0x%x, dispParam=0x%x)", mainHandle, subHandle, data.GetAddr(), dataCtrlParam.GetAddr(), dataOutInfo.GetAddr(), cbCtrlDisp.GetAddr(), dispParam.GetAddr()); if (cbCtrlDisp.GetAddr()) cellPngDec->Warning("*** cbCtrlDisp->cbCtrlDispFunc_addr=0x%x", (u32)cbCtrlDisp->cbCtrlDispFunc_addr); @@ -318,6 +321,9 @@ int cellPngDecExtDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, cons int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, const mem_ptr_t inParam, mem_ptr_t outParam) { + cellPngDec->Warning("cellPngDecSetParameter(mainHandle=0x%x, subHandle=0x%x, inParam_addr=0x%x, outParam_addr=0x%x)", + mainHandle, subHandle, inParam.GetAddr(), outParam.GetAddr()); + CellPngDecSubHandle* subHandle_data; if(!cellPngDec->CheckId(subHandle, subHandle_data)) return CELL_PNGDEC_ERROR_FATAL; diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index daca04cb31..eb881690d9 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -118,7 +118,7 @@ s32 cellFsOpen(u32 path_addr, s32 flags, mem32_t fd, mem32_t arg, u64 size) } fd = sys_fs->GetNewId(stream, IDFlag_File); - LOG_WARNING(HLE, "\"%s\" opened: fd = %d", path.c_str(), fd.GetValue()); + LOG_NOTICE(HLE, "\"%s\" opened: fd = %d", path.c_str(), fd.GetValue()); return CELL_OK; } @@ -222,7 +222,7 @@ s32 cellFsClosedir(u32 fd) s32 cellFsStat(const u32 path_addr, mem_ptr_t sb) { const std::string& path = Memory.ReadString(path_addr); - sys_fs->Log("cellFsStat(path=\"%s\", sb_addr: 0x%x)", path.c_str(), sb.GetAddr()); + sys_fs->Warning("cellFsStat(path=\"%s\", sb_addr: 0x%x)", path.c_str(), sb.GetAddr()); sb->st_mode = CELL_FS_S_IRUSR | CELL_FS_S_IWUSR | CELL_FS_S_IXUSR | @@ -307,6 +307,7 @@ s32 cellFsRename(u32 from_addr, u32 to_addr) { const std::string& ps3_from = Memory.ReadString(from_addr); const std::string& ps3_to = Memory.ReadString(to_addr); + sys_fs->Log("cellFsRename(from='%s' (from_addr=0x%x), to='%s' (to_addr=0x%x))", ps3_from.c_str(), from_addr, ps3_to.c_str(), to_addr); { vfsDir dir; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp index 09dca5c8d1..ecb7f302bc 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -12,6 +12,7 @@ sysProcessObjects_t procObjects; s32 sys_process_getpid() { + sc_p.Log("sys_process_getpid() -> 1"); return 1; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp b/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp index 6df868f1aa..725cb49338 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp @@ -9,60 +9,60 @@ SysCallBase sys_trace("sys_trace"); s32 sys_trace_create() { - sys_trace.Warning("Unimplemented function: sys_trace_create()"); + sys_trace.Todo("sys_trace_create()"); return CELL_OK; } s32 sys_trace_start() { - sys_trace.Warning("Unimplemented function: sys_trace_start()"); + sys_trace.Todo("sys_trace_start()"); return CELL_OK; } s32 sys_trace_stop() { - sys_trace.Warning("Unimplemented function: sys_trace_stop()"); + sys_trace.Todo("sys_trace_stop()"); return CELL_OK; } s32 sys_trace_update_top_index() { - sys_trace.Warning("Unimplemented function: sys_trace_update_top_index()"); + sys_trace.Todo("sys_trace_update_top_index()"); return CELL_OK; } s32 sys_trace_destroy() { - sys_trace.Warning("Unimplemented function: sys_trace_destroy()"); + sys_trace.Todo("sys_trace_destroy()"); return CELL_OK; } s32 sys_trace_drain() { - sys_trace.Warning("Unimplemented function: sys_trace_drain()"); + sys_trace.Todo("sys_trace_drain()"); return CELL_OK; } s32 sys_trace_attach_process() { - sys_trace.Warning("Unimplemented function: sys_trace_attach_process()"); + sys_trace.Todo("sys_trace_attach_process()"); return CELL_OK; } s32 sys_trace_allocate_buffer() { - sys_trace.Warning("Unimplemented function: sys_trace_allocate_buffer()"); + sys_trace.Todo("sys_trace_allocate_buffer()"); return CELL_OK; } s32 sys_trace_free_buffer() { - sys_trace.Warning("Unimplemented function: sys_trace_free_buffer()"); + sys_trace.Todo("sys_trace_free_buffer()"); return CELL_OK; } s32 sys_trace_create2() { - sys_trace.Warning("Unimplemented function: sys_trace_create2()"); + sys_trace.Todo("sys_trace_create2()"); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp b/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp index 728c5db222..3c1de7c437 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp @@ -155,7 +155,7 @@ s32 sys_vm_unlock(u32 addr, u32 size) s32 sys_vm_touch(u32 addr, u32 size) { - sc_vm.Warning("Unimplemented function: sys_vm_touch(addr=0x%x,size=0x%x)", addr, size); + sc_vm.Todo("sys_vm_touch(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -172,7 +172,7 @@ s32 sys_vm_touch(u32 addr, u32 size) s32 sys_vm_flush(u32 addr, u32 size) { - sc_vm.Warning("Unimplemented function: sys_vm_flush(addr=0x%x,size=0x%x)", addr, size); + sc_vm.Todo("sys_vm_flush(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -189,7 +189,7 @@ s32 sys_vm_flush(u32 addr, u32 size) s32 sys_vm_invalidate(u32 addr, u32 size) { - sc_vm.Warning("Unimplemented function: sys_vm_invalidate(addr=0x%x,size=0x%x)", addr, size); + sc_vm.Todo("sys_vm_invalidate(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -206,7 +206,7 @@ s32 sys_vm_invalidate(u32 addr, u32 size) s32 sys_vm_store(u32 addr, u32 size) { - sc_vm.Warning("Unimplemented function: sys_vm_store(addr=0x%x,size=0x%x)", addr, size); + sc_vm.Todo("sys_vm_store(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -223,7 +223,7 @@ s32 sys_vm_store(u32 addr, u32 size) s32 sys_vm_sync(u32 addr, u32 size) { - sc_vm.Warning("Unimplemented function: sys_vm_sync(addr=0x%x,size=0x%x)", addr, size); + sc_vm.Todo("sys_vm_sync(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -239,7 +239,7 @@ s32 sys_vm_sync(u32 addr, u32 size) s32 sys_vm_test(u32 addr, u32 size, u32 result_addr) { - sc_vm.Warning("Unimplemented function: sys_vm_test(addr=0x%x,size=0x%x,result_addr=0x%x)", addr, size, result_addr); + sc_vm.Todo("sys_vm_test(addr=0x%x,size=0x%x,result_addr=0x%x)", addr, size, result_addr); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -258,7 +258,7 @@ s32 sys_vm_test(u32 addr, u32 size, u32 result_addr) s32 sys_vm_get_statistics(u32 addr, u32 stat_addr) { - sc_vm.Warning("Unimplemented function: sys_vm_get_statistics(addr=0x%x,stat_addr=0x%x)", addr, stat_addr); + sc_vm.Todo("sys_vm_get_statistics(addr=0x%x,stat_addr=0x%x)", addr, stat_addr); // Check address. if(current_ct->addr != addr) From 270c8516453a338465a37217f9f6a82bf07e579c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 6 Aug 2014 02:34:26 +0400 Subject: [PATCH 284/499] vfsLocalDir::IsOpened() implemented --- Utilities/rFile.cpp | 5 +++++ Utilities/rFile.h | 1 + rpcs3/Emu/FS/vfsLocalDir.cpp | 7 +++++-- rpcs3/Emu/FS/vfsLocalDir.h | 2 ++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 47979233f9..83cad71cd0 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -318,6 +318,11 @@ bool rDir::Open(const std::string& path) return reinterpret_cast(handle)->Open(fmt::FromUTF8(path)); } +bool rDir::IsOpened() const +{ + return reinterpret_cast(handle)->IsOpened(); +} + bool rDir::GetFirst(std::string *filename) const { wxString str; diff --git a/Utilities/rFile.h b/Utilities/rFile.h index fb2be71fbb..7b596db7df 100644 --- a/Utilities/rFile.h +++ b/Utilities/rFile.h @@ -66,6 +66,7 @@ struct rDir rDir(const rDir& other) = delete; rDir(const std::string &path); bool Open(const std::string& path); + bool IsOpened() const; static bool Exists(const std::string &path); bool GetFirst(std::string *filename) const; bool GetNext(std::string *filename) const; diff --git a/rpcs3/Emu/FS/vfsLocalDir.cpp b/rpcs3/Emu/FS/vfsLocalDir.cpp index 69008fa03b..0c44144ab9 100644 --- a/rpcs3/Emu/FS/vfsLocalDir.cpp +++ b/rpcs3/Emu/FS/vfsLocalDir.cpp @@ -15,8 +15,6 @@ bool vfsLocalDir::Open(const std::string& path) if(!vfsDirBase::Open(path)) return false; - rDir dir; - if(!dir.Open(path)) return false; @@ -57,3 +55,8 @@ bool vfsLocalDir::Remove(const std::string& path) { return rRmdir(path); } + +bool vfsLocalDir::IsOpened() const +{ + return dir.IsOpened() && vfsDirBase::IsOpened(); +} diff --git a/rpcs3/Emu/FS/vfsLocalDir.h b/rpcs3/Emu/FS/vfsLocalDir.h index 4120b12f41..c914f0c7c8 100644 --- a/rpcs3/Emu/FS/vfsLocalDir.h +++ b/rpcs3/Emu/FS/vfsLocalDir.h @@ -5,6 +5,7 @@ class vfsLocalDir : public vfsDirBase { private: u32 m_pos; + rDir dir; public: vfsLocalDir(vfsDevice* device); @@ -15,4 +16,5 @@ public: virtual bool Create(const std::string& path) override; virtual bool Rename(const std::string& from, const std::string& to) override; virtual bool Remove(const std::string& path) override; + virtual bool IsOpened() const override; }; \ No newline at end of file From fb448461df10ebbf09f35b3b0e299bcdf2ca858e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 7 Aug 2014 11:59:56 +0400 Subject: [PATCH 285/499] cellSyncBarrierNotify --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 61 +++++++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellSync.h | 4 +- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index ded18c4d2d..901e51c0e2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -159,7 +159,7 @@ s32 cellSyncBarrierInitialize(mem_ptr_t barrier, u16 total_coun s32 cellSyncBarrierNotify(mem_ptr_t barrier) { - cellSync->Todo("cellSyncBarrierNotify(barrier_addr=0x%x)", barrier.GetAddr()); + cellSync->Log("cellSyncBarrierNotify(barrier_addr=0x%x)", barrier.GetAddr()); if (!barrier) { @@ -170,13 +170,42 @@ s32 cellSyncBarrierNotify(mem_ptr_t barrier) return CELL_SYNC_ERROR_ALIGN; } - // TODO + // prx: sync, extract m_value, repeat if < 0, increase, compare with second s16, set sign bit if equal, insert it back + InterlockedCompareExchange(&barrier->m_data(), 0, 0); + + while (true) + { + const u32 old_data = barrier->m_data(); + CellSyncBarrier new_barrier; + new_barrier.m_data() = old_data; + + s16 value = (s16)new_barrier.m_value; + if (value < 0) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "cellSyncBarrierNotify(barrier_addr=0x%x) aborted", barrier.GetAddr()); + return CELL_OK; + } + continue; + } + + value++; + if (value == (s16)new_barrier.m_count) + { + value |= 0x8000; + } + new_barrier.m_value = value; + if (InterlockedCompareExchange(&barrier->m_data(), new_barrier.m_data(), old_data) == old_data) break; + } + return CELL_OK; } s32 cellSyncBarrierTryNotify(mem_ptr_t barrier) { - cellSync->Todo("cellSyncBarrierTryNotify(barrier_addr=0x%x)", barrier.GetAddr()); + cellSync->Log("cellSyncBarrierTryNotify(barrier_addr=0x%x)", barrier.GetAddr()); if (!barrier) { @@ -187,7 +216,31 @@ s32 cellSyncBarrierTryNotify(mem_ptr_t barrier) return CELL_SYNC_ERROR_ALIGN; } - // TODO + InterlockedCompareExchange(&barrier->m_data(), 0, 0); + + while (true) + { + const u32 old_data = barrier->m_data(); + CellSyncBarrier new_barrier; + new_barrier.m_data() = old_data; + + s16 value = (s16)new_barrier.m_value; + if (value >= 0) + { + value++; + if (value == (s16)new_barrier.m_count) + { + value |= 0x8000; + } + new_barrier.m_value = value; + if (InterlockedCompareExchange(&barrier->m_data(), new_barrier.m_data(), old_data) == old_data) break; + } + else + { + if (InterlockedCompareExchange(&barrier->m_data(), new_barrier.m_data(), old_data) == old_data) return CELL_SYNC_ERROR_BUSY; + } + } + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index a1ef8fdf39..00c753e3be 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -44,8 +44,8 @@ static_assert(sizeof(CellSyncMutex) == 4, "CellSyncMutex: wrong size"); struct CellSyncBarrier { - be_t m_value; - be_t m_count; + be_t m_value; + be_t m_count; volatile u32& m_data() { From 6568a94b0e5a6a71525a80fb5f07f5538ea3b5d5 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 7 Aug 2014 23:16:29 +0400 Subject: [PATCH 286/499] cellSyncBarrierWait --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 59 +++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 901e51c0e2..91aea95292 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -246,7 +246,7 @@ s32 cellSyncBarrierTryNotify(mem_ptr_t barrier) s32 cellSyncBarrierWait(mem_ptr_t barrier) { - cellSync->Todo("cellSyncBarrierWait(barrier_addr=0x%x)", barrier.GetAddr()); + cellSync->Log("cellSyncBarrierWait(barrier_addr=0x%x)", barrier.GetAddr()); if (!barrier) { @@ -257,13 +257,42 @@ s32 cellSyncBarrierWait(mem_ptr_t barrier) return CELL_SYNC_ERROR_ALIGN; } - // TODO + // prx: sync, extract m_value (repeat if >= 0), decrease it, set 0 if == 0x8000, insert it back + InterlockedCompareExchange(&barrier->m_data(), 0, 0); + + while (true) + { + const u32 old_data = barrier->m_data(); + CellSyncBarrier new_barrier; + new_barrier.m_data() = old_data; + + s16 value = (s16)new_barrier.m_value; + if (value >= 0) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "cellSyncBarrierWait(barrier_addr=0x%x) aborted", barrier.GetAddr()); + return CELL_OK; + } + continue; + } + + value--; + if (value == (s16)0x8000) + { + value = 0; + } + new_barrier.m_value = value; + if (InterlockedCompareExchange(&barrier->m_data(), new_barrier.m_data(), old_data) == old_data) break; + } + return CELL_OK; } s32 cellSyncBarrierTryWait(mem_ptr_t barrier) { - cellSync->Todo("cellSyncBarrierTryWait(barrier_addr=0x%x)", barrier.GetAddr()); + cellSync->Log("cellSyncBarrierTryWait(barrier_addr=0x%x)", barrier.GetAddr()); if (!barrier) { @@ -274,7 +303,29 @@ s32 cellSyncBarrierTryWait(mem_ptr_t barrier) return CELL_SYNC_ERROR_ALIGN; } - // TODO + InterlockedCompareExchange(&barrier->m_data(), 0, 0); + + while (true) + { + const u32 old_data = barrier->m_data(); + CellSyncBarrier new_barrier; + new_barrier.m_data() = old_data; + + s16 value = (s16)new_barrier.m_value; + if (value >= 0) + { + return CELL_SYNC_ERROR_BUSY; + } + + value--; + if (value == (s16)0x8000) + { + value = 0; + } + new_barrier.m_value = value; + if (InterlockedCompareExchange(&barrier->m_data(), new_barrier.m_data(), old_data) == old_data) break; + } + return CELL_OK; } From 8169a8e4bbdce54af93d71ff518c9579d9cda09e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 01:34:56 +0400 Subject: [PATCH 287/499] cellSyncRwmWrite --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 89 +++++++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellSync.h | 2 +- 2 files changed, 84 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 91aea95292..ed43ceaca0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -413,7 +413,7 @@ s32 cellSyncRwmRead(mem_ptr_t rwm, u32 buffer_addr) s32 cellSyncRwmTryRead(mem_ptr_t rwm, u32 buffer_addr) { - cellSync->Todo("cellSyncRwmTryRead(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); + cellSync->Log("cellSyncRwmTryRead(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); if (!rwm || !buffer_addr) { @@ -424,13 +424,44 @@ s32 cellSyncRwmTryRead(mem_ptr_t rwm, u32 buffer_addr) return CELL_SYNC_ERROR_ALIGN; } - // TODO + while (true) + { + const u32 old_data = rwm->m_data(); + CellSyncRwm new_rwm; + new_rwm.m_data() = old_data; + + if (new_rwm.m_writers.ToBE()) + { + return CELL_SYNC_ERROR_BUSY; + } + + new_rwm.m_readers++; + if (InterlockedCompareExchange(&rwm->m_data(), new_rwm.m_data(), old_data) == old_data) break; + } + + memcpy(Memory + buffer_addr, Memory + (u64)rwm->m_addr, (u32)rwm->m_size); + + while (true) + { + const u32 old_data = rwm->m_data(); + CellSyncRwm new_rwm; + new_rwm.m_data() = old_data; + + if (!new_rwm.m_readers.ToBE()) + { + cellSync->Error("cellSyncRwmRead(rwm_addr=0x%x): m_readers == 0 (m_writers=%d)", rwm.GetAddr(), (u16)new_rwm.m_writers); + return CELL_SYNC_ERROR_ABORT; + } + + new_rwm.m_readers--; + if (InterlockedCompareExchange(&rwm->m_data(), new_rwm.m_data(), old_data) == old_data) break; + } return CELL_OK; } s32 cellSyncRwmWrite(mem_ptr_t rwm, u32 buffer_addr) { - cellSync->Todo("cellSyncRwmWrite(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); + cellSync->Log("cellSyncRwmWrite(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); if (!rwm || !buffer_addr) { @@ -441,13 +472,51 @@ s32 cellSyncRwmWrite(mem_ptr_t rwm, u32 buffer_addr) return CELL_SYNC_ERROR_ALIGN; } - // TODO + // prx: atomically compare second u16 (m_writers) with 0, repeat if not 0, set 1, sync + while (true) + { + const u32 old_data = rwm->m_data(); + CellSyncRwm new_rwm; + new_rwm.m_data() = old_data; + + if (new_rwm.m_writers.ToBE()) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("cellSyncRwmWrite(rwm_addr=0x%x) aborted (I)", rwm.GetAddr()); + return CELL_OK; + } + continue; + } + + new_rwm.m_writers = 1; + if (InterlockedCompareExchange(&rwm->m_data(), new_rwm.m_data(), old_data) == old_data) break; + } + + // prx: wait until m_readers == 0 + while (rwm->m_readers.ToBE()) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("cellSyncRwmWrite(rwm_addr=0x%x) aborted (II)", rwm.GetAddr()); + return CELL_OK; + } + } + + // prx: copy data from buffer_addr + memcpy(Memory + (u64)rwm->m_addr, Memory + buffer_addr, (u32)rwm->m_size); + + // prx: sync and zeroize m_readers and m_writers + InterlockedCompareExchange(&rwm->m_data(), 0, 0); + rwm->m_data() = 0; return CELL_OK; } s32 cellSyncRwmTryWrite(mem_ptr_t rwm, u32 buffer_addr) { - cellSync->Todo("cellSyncRwmTryWrite(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); + cellSync->Log("cellSyncRwmTryWrite(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); if (!rwm || !buffer_addr) { @@ -458,7 +527,15 @@ s32 cellSyncRwmTryWrite(mem_ptr_t rwm, u32 buffer_addr) return CELL_SYNC_ERROR_ALIGN; } - // TODO + // prx: compare m_readers | m_writers with 0, return busy if not zero, set m_writers to 1 + if (InterlockedCompareExchange(&rwm->m_data(), se32(1), 0) != 0) return CELL_SYNC_ERROR_BUSY; + + // prx: copy data from buffer_addr + memcpy(Memory + (u64)rwm->m_addr, Memory + buffer_addr, (u32)rwm->m_size); + + // prx: sync and zeroize m_readers and m_writers + InterlockedCompareExchange(&rwm->m_data(), 0, 0); + rwm->m_data() = 0; return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 00c753e3be..4e24b4cbad 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -68,7 +68,7 @@ struct CellSyncRwm }; }; -static_assert(sizeof(CellSyncRwm) == 16, "CellSyncBarrier: wrong size"); +static_assert(sizeof(CellSyncRwm) == 16, "CellSyncRwm: wrong size"); struct CellSyncQueue { From 9b24ca7a28775e6815e6f8f5cb8215f449dc0d82 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 16:55:51 +0400 Subject: [PATCH 288/499] Broken comments --- rpcs3/Emu/SysCalls/SysCalls.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index a8917cb195..d908755f74 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -34,9 +34,9 @@ static func_caller* sc_table[kSyscallTableLength] = null_func, null_func, null_func, null_func, null_func, null_func, //6-11 UNS - bind_func(sys_process_get_number_of_object), //12 (0x00B) - bind_func(sys_process_get_id), //13 (0x00C) - null_func,//bind_func(sys_process_is_spu_lock_line_reservation_address), //14 (0x00D) + bind_func(sys_process_get_number_of_object), //12 (0x00C) + bind_func(sys_process_get_id), //13 (0x00D) + null_func,//bind_func(sys_process_is_spu_lock_line_reservation_address), //14 (0x00E) null_func, null_func, null_func, //15-17 UNS From 9b24db3a76aff9e5098654786f15d8c1f3b16e53 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 17:54:46 +0400 Subject: [PATCH 289/499] cellSyncQueuePeek --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 104 +++++++++++++++++++++++- 1 file changed, 102 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index ed43ceaca0..f1ec50073e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -817,15 +817,115 @@ s32 cellSyncQueueTryPop(mem_ptr_t queue, u32 buffer_addr) s32 cellSyncQueuePeek(mem_ptr_t queue, u32 buffer_addr) { - cellSync->Todo("cellSyncQueuePeek(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + cellSync->Log("cellSyncQueuePeek(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + if (!queue || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32) + { + return CELL_SYNC_ERROR_ALIGN; + } + + const u32 size = (u32)queue->m_size; + const u32 depth = (u32)queue->m_depth; + if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) + { + cellSync->Error("cellSyncQueuePeek(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); + Emu.Pause(); + } + + u32 position; + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + const u32 v1 = (u32)new_queue.m_v1; + const u32 v2 = (u32)new_queue.m_v2; + if ((v1 >> 24) || ((v2 & 0xffffff) <= (v2 >> 24))) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("cellSyncQueuePeek(queue_addr=0x%x) aborted", queue.GetAddr()); + return CELL_OK; + } + continue; + } + + new_queue.m_v1 = 0x1000000 | v1; + position = ((v1 & 0xffffff) + depth - (v2 & 0xffffff)) % depth; + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } + + memcpy(Memory + buffer_addr, Memory + (u64)queue->m_addr + position * size, size); + + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + new_queue.m_v1 &= 0xffffff; // TODO: use InterlockedAnd() or something + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } return CELL_OK; } s32 cellSyncQueueTryPeek(mem_ptr_t queue, u32 buffer_addr) { - cellSync->Todo("cellSyncQueueTryPeek(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + cellSync->Log("cellSyncQueueTryPeek(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); + if (!queue || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 32) + { + return CELL_SYNC_ERROR_ALIGN; + } + + const u32 size = (u32)queue->m_size; + const u32 depth = (u32)queue->m_depth; + if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) + { + cellSync->Error("cellSyncQueueTryPeek(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); + Emu.Pause(); + } + + u32 position; + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + const u32 v1 = (u32)new_queue.m_v1; + const u32 v2 = (u32)new_queue.m_v2; + if ((v1 >> 24) || ((v2 & 0xffffff) <= (v2 >> 24))) + { + return CELL_SYNC_ERROR_BUSY; + } + + new_queue.m_v1 = 0x1000000 | v1; + position = ((v1 & 0xffffff) + depth - (v2 & 0xffffff)) % depth; + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } + + memcpy(Memory + buffer_addr, Memory + (u64)queue->m_addr + position * size, size); + + while (true) + { + const u64 old_data = queue->m_data(); + CellSyncQueue new_queue; + new_queue.m_data() = old_data; + + new_queue.m_v1 &= 0xffffff; // TODO: use InterlockedAnd() or something + if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; + } return CELL_OK; } From b89c4fec3e49050fc5adbfa1638b43d8aa7ccb55 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 18:50:42 +0400 Subject: [PATCH 290/499] cellSyncLFQueue moved, cellSpursQueue cleared --- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 250 +++++------------------ rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 132 ++++++++++++ 2 files changed, 185 insertions(+), 197 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index d758100a5b..41be2f8084 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -506,12 +506,6 @@ int cellSpursLFQueueAttachLv2EventQueue() return CELL_OK; } -int cellSpursQueueDetachLv2EventQueue() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - int _cellSpursLFQueuePopBody() { UNIMPLEMENTED_FUNC(cellSpurs); @@ -524,166 +518,6 @@ int cellSpursLFQueueGetTasksetAddress() return CELL_OK; } -int cellSyncLFQueueGetEntrySize() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} -int cellSyncLFQueueSize() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncLFQueueClear() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} -int _cellSyncLFQueueCompletePushPointer2() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueGetPopPointer2() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncQueuePeek() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncQueueSize() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncQueuePop() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueCompletePushPointer() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueAttachLv2EventQueue() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncQueuePush() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncQueueTryPeek() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueGetPushPointer2() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncQueueTryPush() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueGetPopPointer() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueCompletePopPointer2() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueDetachLv2EventQueue() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncQueueClear() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncQueueTryPop() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncLFQueueInitialize() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueGetSignalAddress() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueuePushBody() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncLFQueueGetDirection() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int cellSyncLFQueueDepth() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueuePopBody() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueGetPushPointer() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - -int _cellSyncLFQueueCompletePopPointer() -{ - UNIMPLEMENTED_FUNC(cellSpurs); - return CELL_OK; -} - int _cellSpursQueueInitialize() { UNIMPLEMENTED_FUNC(cellSpurs); @@ -708,6 +542,48 @@ int cellSpursQueueAttachLv2EventQueue() return CELL_OK; } +int cellSpursQueueDetachLv2EventQueue() +{ + UNIMPLEMENTED_FUNC(cellSpurs); + return CELL_OK; +} + +int cellSpursQueueGetTasksetAddress() +{ + UNIMPLEMENTED_FUNC(cellSpurs); + return CELL_OK; +} + +int cellSpursQueueClear() +{ + UNIMPLEMENTED_FUNC(cellSpurs); + return CELL_OK; +} + +int cellSpursQueueDepth() +{ + UNIMPLEMENTED_FUNC(cellSpurs); + return CELL_OK; +} + +int cellSpursQueueGetEntrySize() +{ + UNIMPLEMENTED_FUNC(cellSpurs); + return CELL_OK; +} + +int cellSpursQueueSize() +{ + UNIMPLEMENTED_FUNC(cellSpurs); + return CELL_OK; +} + +int cellSpursQueueGetDirection() +{ + UNIMPLEMENTED_FUNC(cellSpurs); + return CELL_OK; +} + int cellSpursCreateJobChainWithAttribute() { UNIMPLEMENTED_FUNC(cellSpurs); @@ -1123,45 +999,25 @@ void cellSpurs_init() cellSpurs->AddFunc(0xd5d0b256, cellSpursJobGuardNotify); cellSpurs->AddFunc(0x00af2519, cellSpursJobGuardReset); - // Queue/LFQueue + // LFQueue cellSpurs->AddFunc(0x011ee38b, _cellSpursLFQueueInitialize); cellSpurs->AddFunc(0x8a85674d, _cellSpursLFQueuePushBody); cellSpurs->AddFunc(0x1656d49f, cellSpursLFQueueAttachLv2EventQueue); cellSpurs->AddFunc(0x73e06f91, cellSpursLFQueueDetachLv2EventQueue); + cellSpurs->AddFunc(0x35dae22b, _cellSpursLFQueuePopBody); + cellSpurs->AddFunc(0xb792ca1a, cellSpursLFQueueGetTasksetAddress); + + // Queue cellSpurs->AddFunc(0x082bfb09, _cellSpursQueueInitialize); cellSpurs->AddFunc(0x91066667, cellSpursQueuePopBody); cellSpurs->AddFunc(0x92cff6ed, cellSpursQueuePushBody); cellSpurs->AddFunc(0xe5443be7, cellSpursQueueAttachLv2EventQueue); cellSpurs->AddFunc(0x039d70b7, cellSpursQueueDetachLv2EventQueue); - cellSpurs->AddFunc(0x35dae22b, _cellSpursLFQueuePopBody); - cellSpurs->AddFunc(0xb792ca1a, cellSpursLFQueueGetTasksetAddress); - cellSpurs->AddFunc(0x0c7cb9f7, cellSyncLFQueueGetEntrySize); - cellSpurs->AddFunc(0x167ea63e, cellSyncLFQueueSize); - cellSpurs->AddFunc(0x2af0c515, cellSyncLFQueueClear); - cellSpurs->AddFunc(0x35bbdad2, _cellSyncLFQueueCompletePushPointer2); - cellSpurs->AddFunc(0x46356fe0, _cellSyncLFQueueGetPopPointer2); - cellSpurs->AddFunc(0x48154c9b, cellSyncQueuePeek); - cellSpurs->AddFunc(0x4da349b2, cellSyncQueueSize); - cellSpurs->AddFunc(0x4da6d7e0, cellSyncQueuePop); - cellSpurs->AddFunc(0x4e88c68d, _cellSyncLFQueueCompletePushPointer); - cellSpurs->AddFunc(0x54fc2032, _cellSyncLFQueueAttachLv2EventQueue); - cellSpurs->AddFunc(0x5ae841e5, cellSyncQueuePush); - cellSpurs->AddFunc(0x68af923c, cellSyncQueueTryPeek); - cellSpurs->AddFunc(0x6bb4ef9d,_cellSyncLFQueueGetPushPointer2); - cellSpurs->AddFunc(0x705985cd, cellSyncQueueTryPush); - cellSpurs->AddFunc(0x74c37666, _cellSyncLFQueueGetPopPointer); - cellSpurs->AddFunc(0x7a51deee, _cellSyncLFQueueCompletePopPointer2); - cellSpurs->AddFunc(0x811d148e, _cellSyncLFQueueDetachLv2EventQueue); - cellSpurs->AddFunc(0xa5362e73, cellSyncQueueClear); - cellSpurs->AddFunc(0xa58df87f, cellSyncQueueTryPop); - cellSpurs->AddFunc(0xaa355278, cellSyncLFQueueInitialize); - cellSpurs->AddFunc(0xaff7627a, _cellSyncLFQueueGetSignalAddress); - cellSpurs->AddFunc(0xba5961ca, _cellSyncLFQueuePushBody); - cellSpurs->AddFunc(0xd59aa307, cellSyncLFQueueGetDirection); - cellSpurs->AddFunc(0xe18c273c, cellSyncLFQueueDepth); - cellSpurs->AddFunc(0xe1bc7add, _cellSyncLFQueuePopBody); - cellSpurs->AddFunc(0xe9bf2110, _cellSyncLFQueueGetPushPointer); - cellSpurs->AddFunc(0xfe74e8e7, _cellSyncLFQueueCompletePopPointer); - + cellSpurs->AddFunc(0x2093252b, cellSpursQueueGetTasksetAddress); + cellSpurs->AddFunc(0x247414d0, cellSpursQueueClear); + cellSpurs->AddFunc(0x35f02287, cellSpursQueueDepth); + cellSpurs->AddFunc(0x369fe03d, cellSpursQueueGetEntrySize); + cellSpurs->AddFunc(0x54876603, cellSpursQueueSize); + cellSpurs->AddFunc(0xec68442c, cellSpursQueueGetDirection); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index f1ec50073e..6146a3fcc1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1023,6 +1023,118 @@ s32 cellSyncQueueClear(mem_ptr_t queue) return CELL_OK; } +int cellSyncLFQueueGetEntrySize() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} +int cellSyncLFQueueSize() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int cellSyncLFQueueClear() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} +int _cellSyncLFQueueCompletePushPointer2() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueGetPopPointer2() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueCompletePushPointer() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueAttachLv2EventQueue() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueGetPushPointer2() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueGetPopPointer() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueCompletePopPointer2() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueDetachLv2EventQueue() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int cellSyncLFQueueInitialize() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueGetSignalAddress() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueuePushBody() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int cellSyncLFQueueGetDirection() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int cellSyncLFQueueDepth() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueuePopBody() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueGetPushPointer() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + +int _cellSyncLFQueueCompletePopPointer() +{ + UNIMPLEMENTED_FUNC(cellSync); + return CELL_OK; +} + void cellSync_init() { cellSync->AddFunc(0xa9072dee, cellSyncMutexInitialize); @@ -1051,4 +1163,24 @@ void cellSync_init() cellSync->AddFunc(0x68af923c, cellSyncQueueTryPeek); cellSync->AddFunc(0x4da349b2, cellSyncQueueSize); cellSync->AddFunc(0xa5362e73, cellSyncQueueClear); + + cellSync->AddFunc(0x0c7cb9f7, cellSyncLFQueueGetEntrySize); + cellSync->AddFunc(0x167ea63e, cellSyncLFQueueSize); + cellSync->AddFunc(0x2af0c515, cellSyncLFQueueClear); + cellSync->AddFunc(0x35bbdad2, _cellSyncLFQueueCompletePushPointer2); + cellSync->AddFunc(0x46356fe0, _cellSyncLFQueueGetPopPointer2); + cellSync->AddFunc(0x4e88c68d, _cellSyncLFQueueCompletePushPointer); + cellSync->AddFunc(0x54fc2032, _cellSyncLFQueueAttachLv2EventQueue); + cellSync->AddFunc(0x6bb4ef9d, _cellSyncLFQueueGetPushPointer2); + cellSync->AddFunc(0x74c37666, _cellSyncLFQueueGetPopPointer); + cellSync->AddFunc(0x7a51deee, _cellSyncLFQueueCompletePopPointer2); + cellSync->AddFunc(0x811d148e, _cellSyncLFQueueDetachLv2EventQueue); + cellSync->AddFunc(0xaa355278, cellSyncLFQueueInitialize); + cellSync->AddFunc(0xaff7627a, _cellSyncLFQueueGetSignalAddress); + cellSync->AddFunc(0xba5961ca, _cellSyncLFQueuePushBody); + cellSync->AddFunc(0xd59aa307, cellSyncLFQueueGetDirection); + cellSync->AddFunc(0xe18c273c, cellSyncLFQueueDepth); + cellSync->AddFunc(0xe1bc7add, _cellSyncLFQueuePopBody); + cellSync->AddFunc(0xe9bf2110, _cellSyncLFQueueGetPushPointer); + cellSync->AddFunc(0xfe74e8e7, _cellSyncLFQueueCompletePopPointer); } From b00e0fcf695ef491065a37b7ea92bc2bed8c1339 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 19:55:12 +0400 Subject: [PATCH 291/499] sys_event_flag.cpp restored --- rpcs3/Emu/Cell/RawSPUThread.cpp | 2 - rpcs3/Emu/Cell/SPURecompilerCore.cpp | 2 - rpcs3/Emu/Cell/SPUThread.cpp | 2 - rpcs3/Emu/Cell/SPUThread.h | 1 + rpcs3/Emu/Event.h | 214 +------------- rpcs3/Emu/SysCalls/SysCalls.h | 1 + rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 322 +-------------------- rpcs3/Emu/SysCalls/lv2/sys_event.h | 246 ++++++++++++---- rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp | 329 ++++++++++++++++++++++ rpcs3/Emu/SysCalls/lv2/sys_event_flag.h | 84 ++++++ rpcs3/emucore.vcxproj | 4 +- rpcs3/emucore.vcxproj.filters | 8 +- 12 files changed, 615 insertions(+), 600 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp create mode 100644 rpcs3/Emu/SysCalls/lv2/sys_event_flag.h diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 2337f6d0e1..a1ad6c258a 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/lv2/sys_lwmutex.h" -#include "Emu/SysCalls/lv2/sys_event.h" #include "Emu/Cell/RawSPUThread.h" diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index fe005b6804..72a59dc6cf 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/lv2/sys_lwmutex.h" -#include "Emu/SysCalls/lv2/sys_event.h" #include "SPUInstrTable.h" #include "SPUDisAsm.h" diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 235b73700c..559861ddd3 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1,8 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Emu/System.h" -#include "Emu/SysCalls/lv2/sys_lwmutex.h" -#include "Emu/SysCalls/lv2/sys_event.h" #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/SPUDecoder.h" diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 664f96cc0f..6a4e1ef40e 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -3,6 +3,7 @@ #include "Emu/Event.h" #include "Emu/SysCalls/lv2/sys_spu.h" #include "Emu/SysCalls/lv2/sys_event.h" +#include "Emu/SysCalls/lv2/sys_event_flag.h" #include "Emu/SysCalls/lv2/sys_time.h" #include "MFC.h" #include "Emu/SysCalls/ErrorCodes.h" diff --git a/rpcs3/Emu/Event.h b/rpcs3/Emu/Event.h index 235b924daf..fe4a2147b7 100644 --- a/rpcs3/Emu/Event.h +++ b/rpcs3/Emu/Event.h @@ -1,217 +1,5 @@ #pragma once -#include "Emu/SysCalls/lv2/sys_lwmutex.h" - -#define FIX_SPUQ(x) ((u64)x | 0x5350555100000000ULL) -// arbitrary code to prevent "special" zero value in key argument - -enum EventQueueType -{ - SYS_PPU_QUEUE = 1, - SYS_SPU_QUEUE = 2, -}; - -enum EventQueueDestroyMode -{ - // DEFAULT = 0, - SYS_EVENT_QUEUE_DESTROY_FORCE = 1, -}; - -enum EventPortType -{ - SYS_EVENT_PORT_LOCAL = 1, -}; - -enum EventSourceType -{ - SYS_SPU_THREAD_EVENT_USER = 1, - /* SYS_SPU_THREAD_EVENT_DMA = 2, */ // not supported -}; - -enum EventSourceKey : u64 -{ - SYS_SPU_THREAD_EVENT_USER_KEY = 0xFFFFFFFF53505501, - /* SYS_SPU_THREAD_EVENT_DMA_KEY = 0xFFFFFFFF53505502, */ -}; - -struct sys_event_queue_attr -{ - be_t protocol; // SYS_SYNC_PRIORITY or SYS_SYNC_FIFO - be_t type; // SYS_PPU_QUEUE or SYS_SPU_QUEUE - union - { - char name[8]; - u64 name_u64; - }; -}; - -struct sys_event_data -{ - be_t source; - be_t data1; - be_t data2; - be_t data3; -}; - -struct EventQueue; - -struct EventPort -{ - u64 name; // generated or user-specified code that is passed to sys_event_data struct - EventQueue* eq; // event queue this port has been connected to - std::mutex m_mutex; // may be locked until the event sending is finished - - EventPort(u64 name = 0) - : eq(nullptr) - , name(name) - { - } -}; - -class EventRingBuffer -{ - std::vector data; - std::mutex m_mutex; - u32 buf_pos; - u32 buf_count; - -public: - const u32 size; - - EventRingBuffer(u32 size) - : size(size) - , buf_pos(0) - , buf_count(0) - { - data.resize(size); - } - - void clear() - { - std::lock_guard lock(m_mutex); - buf_count = 0; - buf_pos = 0; - } - - bool push(u64 name, u64 d1, u64 d2, u64 d3) - { - std::lock_guard lock(m_mutex); - if (buf_count >= size) return false; - - sys_event_data& ref = data[(buf_pos + buf_count++) % size]; - ref.source = name; - ref.data1 = d1; - ref.data2 = d2; - ref.data3 = d3; - - return true; - } - - bool pop(sys_event_data& ref) - { - std::lock_guard lock(m_mutex); - if (!buf_count) return false; - - sys_event_data& from = data[buf_pos]; - buf_pos = (buf_pos + 1) % size; - buf_count--; - ref.source = from.source; - ref.data1 = from.data1; - ref.data2 = from.data2; - ref.data3 = from.data3; - - return true; - } - - u32 pop_all(sys_event_data* ptr, u32 max) - { - std::lock_guard lock(m_mutex); - - u32 res = 0; - while (buf_count && max) - { - sys_event_data& from = data[buf_pos]; - ptr->source = from.source; - ptr->data1 = from.data1; - ptr->data2 = from.data2; - ptr->data3 = from.data3; - buf_pos = (buf_pos + 1) % size; - buf_count--; - max--; - ptr++; - res++; - } - return res; - } - - u32 count() const - { - return buf_count; - } -}; - -class EventPortList -{ - std::vector data; - std::mutex m_mutex; - -public: - - void clear() - { - std::lock_guard lock(m_mutex); - for (u32 i = 0; i < data.size(); i++) - { - std::lock_guard lock2(data[i]->m_mutex); - data[i]->eq = nullptr; // force all ports to disconnect - } - data.clear(); - } - - void add(EventPort* port) - { - std::lock_guard lock(m_mutex); - data.push_back(port); - } - - void remove(EventPort* port) - { - std::lock_guard lock(m_mutex); - for (u32 i = 0; i < data.size(); i++) - { - if (data[i] == port) - { - data.erase(data.begin() + i); - return; - } - } - } -}; - -struct EventQueue -{ - SleepQueue sq; - EventPortList ports; - EventRingBuffer events; - SMutex owner; - - const union - { - u64 name_u64; - char name[8]; - }; - const u32 protocol; - const int type; - const u64 key; - - EventQueue(u32 protocol, int type, u64 name, u64 key, int size) - : type(type) - , protocol(protocol) - , name_u64(name) - , key(key) - , events(size) // size: max event count this queue can hold - { - } -}; +#include "Emu/SysCalls/lv2/sys_event.h" class EventManager { diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 61629ba897..bd3391340d 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -8,6 +8,7 @@ #include "lv2/lv2Fs.h" #include "lv2/sys_cond.h" #include "lv2/sys_event.h" +#include "lv2/sys_event_flag.h" #include "lv2/sys_interrupt.h" #include "lv2/sys_lwcond.h" #include "lv2/sys_lwmutex.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index c49347d4ff..838a53ebca 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -8,7 +8,6 @@ #include "Emu/Cell/SPUThread.h" #include "Emu/Event.h" -#include "sys_lwmutex.h" #include "sys_event.h" SysCallBase sys_event("sys_event"); @@ -362,323 +361,4 @@ s32 sys_event_port_send(u32 eport_id, u64 data1, u64 data2, u64 data3) } return CELL_OK; -} - -// sys_event_flag -s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init) -{ - sys_event.Warning("sys_event_flag_create(eflag_id_addr=0x%x, attr_addr=0x%x, init=0x%llx)", - eflag_id.GetAddr(), attr.GetAddr(), init); - - switch (attr->protocol.ToBE()) - { - case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_RETRY): sys_event.Todo("sys_event_flag_create(): SYS_SYNC_RETRY"); break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_event.Todo("sys_event_flag_create(): SYS_SYNC_PRIORITY_INHERIT"); break; - case se32(SYS_SYNC_FIFO): break; - default: return CELL_EINVAL; - } - - if (attr->pshared.ToBE() != se32(0x200)) - { - return CELL_EINVAL; - } - - switch (attr->type.ToBE()) - { - case se32(SYS_SYNC_WAITER_SINGLE): break; - case se32(SYS_SYNC_WAITER_MULTIPLE): break; - default: return CELL_EINVAL; - } - - eflag_id = sys_event.GetNewId(new EventFlag(init, (u32)attr->protocol, (int)attr->type)); - - sys_event.Warning("*** event_flag created [%s] (protocol=0x%x, type=0x%x): id = %d", - std::string(attr->name, 8).c_str(), (u32)attr->protocol, (int)attr->type, eflag_id.GetValue()); - - return CELL_OK; -} - -s32 sys_event_flag_destroy(u32 eflag_id) -{ - sys_event.Warning("sys_event_flag_destroy(eflag_id=%d)", eflag_id); - - EventFlag* ef; - if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; - - if (ef->waiters.size()) // ??? - { - return CELL_EBUSY; - } - - Emu.GetIdManager().RemoveID(eflag_id); - - return CELL_OK; -} - -s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 timeout) -{ - sys_event.Log("sys_event_flag_wait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x, timeout=%lld)", - eflag_id, bitptn, mode, result.GetAddr(), timeout); - - if (result.GetAddr()) result = 0; - - switch (mode & 0xf) - { - case SYS_EVENT_FLAG_WAIT_AND: break; - case SYS_EVENT_FLAG_WAIT_OR: break; - default: return CELL_EINVAL; - } - - switch (mode & ~0xf) - { - case 0: break; // ??? - case SYS_EVENT_FLAG_WAIT_CLEAR: break; - case SYS_EVENT_FLAG_WAIT_CLEAR_ALL: break; - default: return CELL_EINVAL; - } - - EventFlag* ef; - if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; - - u32 tid = GetCurrentPPUThread().GetId(); - - { - SMutexLocker lock(ef->m_mutex); - if (ef->m_type == SYS_SYNC_WAITER_SINGLE && ef->waiters.size() > 0) - { - return CELL_EPERM; - } - EventFlagWaiter rec; - rec.bitptn = bitptn; - rec.mode = mode; - rec.tid = tid; - ef->waiters.push_back(rec); - - if (ef->check() == tid) - { - u64 flags = ef->flags; - - ef->waiters.erase(ef->waiters.end() - 1); - - if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) - { - ef->flags &= ~bitptn; - } - else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) - { - ef->flags = 0; - } - - if (result.GetAddr()) result = flags; - - return CELL_OK; - } - } - - u32 counter = 0; - const u32 max_counter = timeout ? (timeout / 1000) : ~0; - - while (true) - { - if (ef->signal.unlock(tid, tid) == SMR_OK) - { - SMutexLocker lock(ef->m_mutex); - - u64 flags = ef->flags; - - for (u32 i = 0; i < ef->waiters.size(); i++) - { - if (ef->waiters[i].tid == tid) - { - ef->waiters.erase(ef->waiters.begin() +i); - - if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) - { - ef->flags &= ~bitptn; - } - else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) - { - ef->flags = 0; - } - - if (u32 target = ef->check()) - { - // if signal, leave both mutexes locked... - ef->signal.unlock(tid, target); - ef->m_mutex.unlock(tid, target); - } - else - { - ef->signal.unlock(tid); - } - - if (result.GetAddr()) result = flags; - - return CELL_OK; - } - } - - ef->signal.unlock(tid); - return CELL_ECANCELED; - } - - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - - if (counter++ > max_counter) - { - SMutexLocker lock(ef->m_mutex); - - for (u32 i = 0; i < ef->waiters.size(); i++) - { - if (ef->waiters[i].tid == tid) - { - ef->waiters.erase(ef->waiters.begin() + i); - break; - } - } - - return CELL_ETIMEDOUT; - } - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "sys_event_flag_wait(id=%d) aborted", eflag_id); - return CELL_OK; - } - } -} - -s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result) -{ - sys_event.Log("sys_event_flag_trywait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x)", - eflag_id, bitptn, mode, result.GetAddr()); - - if (result.GetAddr()) result = 0; - - switch (mode & 0xf) - { - case SYS_EVENT_FLAG_WAIT_AND: break; - case SYS_EVENT_FLAG_WAIT_OR: break; - default: return CELL_EINVAL; - } - - switch (mode & ~0xf) - { - case 0: break; // ??? - case SYS_EVENT_FLAG_WAIT_CLEAR: break; - case SYS_EVENT_FLAG_WAIT_CLEAR_ALL: break; - default: return CELL_EINVAL; - } - - EventFlag* ef; - if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; - - SMutexLocker lock(ef->m_mutex); - - u64 flags = ef->flags; - - if (((mode & SYS_EVENT_FLAG_WAIT_AND) && (flags & bitptn) == bitptn) || - ((mode & SYS_EVENT_FLAG_WAIT_OR) && (flags & bitptn))) - { - if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) - { - ef->flags &= ~bitptn; - } - else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) - { - ef->flags = 0; - } - - if (result.GetAddr()) result = flags; - - return CELL_OK; - } - - return CELL_EBUSY; -} - -s32 sys_event_flag_set(u32 eflag_id, u64 bitptn) -{ - sys_event.Log("sys_event_flag_set(eflag_id=%d, bitptn=0x%llx)", eflag_id, bitptn); - - EventFlag* ef; - if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; - - u32 tid = GetCurrentPPUThread().GetId(); - - ef->m_mutex.lock(tid); - ef->flags |= bitptn; - if (u32 target = ef->check()) - { - // if signal, leave both mutexes locked... - ef->signal.lock(target); - ef->m_mutex.unlock(tid, target); - } - else - { - ef->m_mutex.unlock(tid); - } - - return CELL_OK; -} - -s32 sys_event_flag_clear(u32 eflag_id, u64 bitptn) -{ - sys_event.Log("sys_event_flag_clear(eflag_id=%d, bitptn=0x%llx)", eflag_id, bitptn); - - EventFlag* ef; - if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; - - SMutexLocker lock(ef->m_mutex); - ef->flags &= bitptn; - - return CELL_OK; -} - -s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num) -{ - sys_event.Log("sys_event_flag_cancel(eflag_id=%d, num_addr=0x%x)", eflag_id, num.GetAddr()); - - EventFlag* ef; - if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; - - std::vector tids; - - { - SMutexLocker lock(ef->m_mutex); - tids.resize(ef->waiters.size()); - for (u32 i = 0; i < ef->waiters.size(); i++) - { - tids[i] = ef->waiters[i].tid; - } - ef->waiters.clear(); - } - - for (u32 i = 0; i < tids.size(); i++) - { - ef->signal.lock(tids[i]); - } - - if (Emu.IsStopped()) - { - LOG_WARNING(HLE, "sys_event_flag_cancel(id=%d) aborted", eflag_id); - return CELL_OK; - } - - if (num.GetAddr()) num = tids.size(); - - return CELL_OK; -} - -s32 sys_event_flag_get(u32 eflag_id, mem64_t flags) -{ - sys_event.Log("sys_event_flag_get(eflag_id=%d, flags_addr=0x%x)", eflag_id, flags.GetAddr()); - - EventFlag* ef; - if(!sys_event.CheckId(eflag_id, ef)) return CELL_ESRCH; - - SMutexLocker lock(ef->m_mutex); - flags = ef->flags; - - return CELL_OK; -} +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.h b/rpcs3/Emu/SysCalls/lv2/sys_event.h index 09866991e7..984e3bd762 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.h @@ -1,77 +1,216 @@ #pragma once -#include "Emu/Event.h" -enum +#include "sys_lwmutex.h" + +#define FIX_SPUQ(x) ((u64)x | 0x5350555100000000ULL) +// arbitrary code to prevent "special" zero value in key argument + +enum EventQueueType { - SYS_SYNC_WAITER_SINGLE = 0x10000, - SYS_SYNC_WAITER_MULTIPLE = 0x20000, - - SYS_EVENT_FLAG_WAIT_AND = 0x01, - SYS_EVENT_FLAG_WAIT_OR = 0x02, - - SYS_EVENT_FLAG_WAIT_CLEAR = 0x10, - SYS_EVENT_FLAG_WAIT_CLEAR_ALL = 0x20, + SYS_PPU_QUEUE = 1, + SYS_SPU_QUEUE = 2, }; -struct sys_event_flag_attr +enum EventQueueDestroyMode { - be_t protocol; - be_t pshared; - be_t ipc_key; - be_t flags; - be_t type; - char name[8]; + // DEFAULT = 0, + SYS_EVENT_QUEUE_DESTROY_FORCE = 1, }; -struct EventFlagWaiter +enum EventPortType { - u32 tid; - u32 mode; - u64 bitptn; + SYS_EVENT_PORT_LOCAL = 1, }; -struct EventFlag +enum EventSourceType { - SMutex m_mutex; - u64 flags; - std::vector waiters; - SMutex signal; - const u32 m_protocol; - const int m_type; + SYS_SPU_THREAD_EVENT_USER = 1, + /* SYS_SPU_THREAD_EVENT_DMA = 2, */ // not supported +}; - EventFlag(u64 pattern, u32 protocol, int type) - : flags(pattern) - , m_protocol(protocol) - , m_type(type) +enum EventSourceKey : u64 +{ + SYS_SPU_THREAD_EVENT_USER_KEY = 0xFFFFFFFF53505501, + /* SYS_SPU_THREAD_EVENT_DMA_KEY = 0xFFFFFFFF53505502, */ +}; + +struct sys_event_queue_attr +{ + be_t protocol; // SYS_SYNC_PRIORITY or SYS_SYNC_FIFO + be_t type; // SYS_PPU_QUEUE or SYS_SPU_QUEUE + union + { + char name[8]; + u64 name_u64; + }; +}; + +struct sys_event_data +{ + be_t source; + be_t data1; + be_t data2; + be_t data3; +}; + +struct EventQueue; + +struct EventPort +{ + u64 name; // generated or user-specified code that is passed to sys_event_data struct + EventQueue* eq; // event queue this port has been connected to + std::mutex m_mutex; // may be locked until the event sending is finished + + EventPort(u64 name = 0) + : eq(nullptr) + , name(name) { } +}; - u32 check() +class EventRingBuffer +{ + std::vector data; + std::mutex m_mutex; + u32 buf_pos; + u32 buf_count; + +public: + const u32 size; + + EventRingBuffer(u32 size) + : size(size) + , buf_pos(0) + , buf_count(0) { - SleepQueue sq; // TODO: implement without SleepQueue + data.resize(size); + } - u32 target = 0; + void clear() + { + std::lock_guard lock(m_mutex); + buf_count = 0; + buf_pos = 0; + } - for (u32 i = 0; i < waiters.size(); i++) + bool push(u64 name, u64 d1, u64 d2, u64 d3) + { + std::lock_guard lock(m_mutex); + if (buf_count >= size) return false; + + sys_event_data& ref = data[(buf_pos + buf_count++) % size]; + ref.source = name; + ref.data1 = d1; + ref.data2 = d2; + ref.data3 = d3; + + return true; + } + + bool pop(sys_event_data& ref) + { + std::lock_guard lock(m_mutex); + if (!buf_count) return false; + + sys_event_data& from = data[buf_pos]; + buf_pos = (buf_pos + 1) % size; + buf_count--; + ref.source = from.source; + ref.data1 = from.data1; + ref.data2 = from.data2; + ref.data3 = from.data3; + + return true; + } + + u32 pop_all(sys_event_data* ptr, u32 max) + { + std::lock_guard lock(m_mutex); + + u32 res = 0; + while (buf_count && max) { - if (((waiters[i].mode & SYS_EVENT_FLAG_WAIT_AND) && (flags & waiters[i].bitptn) == waiters[i].bitptn) || - ((waiters[i].mode & SYS_EVENT_FLAG_WAIT_OR) && (flags & waiters[i].bitptn))) + sys_event_data& from = data[buf_pos]; + ptr->source = from.source; + ptr->data1 = from.data1; + ptr->data2 = from.data2; + ptr->data3 = from.data3; + buf_pos = (buf_pos + 1) % size; + buf_count--; + max--; + ptr++; + res++; + } + return res; + } + + u32 count() const + { + return buf_count; + } +}; + +class EventPortList +{ + std::vector data; + std::mutex m_mutex; + +public: + + void clear() + { + std::lock_guard lock(m_mutex); + for (u32 i = 0; i < data.size(); i++) + { + std::lock_guard lock2(data[i]->m_mutex); + data[i]->eq = nullptr; // force all ports to disconnect + } + data.clear(); + } + + void add(EventPort* port) + { + std::lock_guard lock(m_mutex); + data.push_back(port); + } + + void remove(EventPort* port) + { + std::lock_guard lock(m_mutex); + for (u32 i = 0; i < data.size(); i++) + { + if (data[i] == port) { - if (m_protocol == SYS_SYNC_FIFO) - { - target = waiters[i].tid; - break; - } - sq.list.push_back(waiters[i].tid); + data.erase(data.begin() + i); + return; } } + } +}; - if (m_protocol == SYS_SYNC_PRIORITY) - { - target = sq.pop_prio(); - } +struct EventQueue +{ + SleepQueue sq; + EventPortList ports; + EventRingBuffer events; + SMutex owner; - return target; + const union + { + u64 name_u64; + char name[8]; + }; + const u32 protocol; + const int type; + const u64 key; + + EventQueue(u32 protocol, int type, u64 name, u64 key, int size) + : type(type) + , protocol(protocol) + , name_u64(name) + , key(key) + , events(size) // size: max event count this queue can hold + { } }; @@ -87,12 +226,3 @@ s32 sys_event_port_destroy(u32 eport_id); s32 sys_event_port_connect_local(u32 event_port_id, u32 event_queue_id); s32 sys_event_port_disconnect(u32 eport_id); s32 sys_event_port_send(u32 event_port_id, u64 data1, u64 data2, u64 data3); - -s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init); -s32 sys_event_flag_destroy(u32 eflag_id); -s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 timeout); -s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result); -s32 sys_event_flag_set(u32 eflag_id, u64 bitptn); -s32 sys_event_flag_clear(u32 eflag_id, u64 bitptn); -s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num); -s32 sys_event_flag_get(u32 eflag_id, mem64_t flags); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp new file mode 100644 index 0000000000..8a2b1374e5 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp @@ -0,0 +1,329 @@ +#include "stdafx.h" +#include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/Cell/PPUThread.h" + +#include "Emu/SysCalls/SysCalls.h" + +#include "sys_event_flag.h" + +SysCallBase sys_event_flag("sys_event_flag"); + +s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init) +{ + sys_event_flag.Warning("sys_event_flag_create(eflag_id_addr=0x%x, attr_addr=0x%x, init=0x%llx)", + eflag_id.GetAddr(), attr.GetAddr(), init); + + switch (attr->protocol.ToBE()) + { + case se32(SYS_SYNC_PRIORITY): break; + case se32(SYS_SYNC_RETRY): sys_event_flag.Todo("sys_event_flag_create(): SYS_SYNC_RETRY"); break; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_event_flag.Todo("sys_event_flag_create(): SYS_SYNC_PRIORITY_INHERIT"); break; + case se32(SYS_SYNC_FIFO): break; + default: return CELL_EINVAL; + } + + if (attr->pshared.ToBE() != se32(0x200)) + { + return CELL_EINVAL; + } + + switch (attr->type.ToBE()) + { + case se32(SYS_SYNC_WAITER_SINGLE): break; + case se32(SYS_SYNC_WAITER_MULTIPLE): break; + default: return CELL_EINVAL; + } + + eflag_id = sys_event_flag.GetNewId(new EventFlag(init, (u32)attr->protocol, (int)attr->type)); + + sys_event_flag.Warning("*** event_flag created [%s] (protocol=0x%x, type=0x%x): id = %d", + std::string(attr->name, 8).c_str(), (u32)attr->protocol, (int)attr->type, eflag_id.GetValue()); + + return CELL_OK; +} + +s32 sys_event_flag_destroy(u32 eflag_id) +{ + sys_event_flag.Warning("sys_event_flag_destroy(eflag_id=%d)", eflag_id); + + EventFlag* ef; + if (!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; + + if (ef->waiters.size()) // ??? + { + return CELL_EBUSY; + } + + Emu.GetIdManager().RemoveID(eflag_id); + + return CELL_OK; +} + +s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 timeout) +{ + sys_event_flag.Log("sys_event_flag_wait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x, timeout=%lld)", + eflag_id, bitptn, mode, result.GetAddr(), timeout); + + if (result.GetAddr()) result = 0; + + switch (mode & 0xf) + { + case SYS_EVENT_FLAG_WAIT_AND: break; + case SYS_EVENT_FLAG_WAIT_OR: break; + default: return CELL_EINVAL; + } + + switch (mode & ~0xf) + { + case 0: break; // ??? + case SYS_EVENT_FLAG_WAIT_CLEAR: break; + case SYS_EVENT_FLAG_WAIT_CLEAR_ALL: break; + default: return CELL_EINVAL; + } + + EventFlag* ef; + if (!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; + + u32 tid = GetCurrentPPUThread().GetId(); + + { + SMutexLocker lock(ef->m_mutex); + if (ef->m_type == SYS_SYNC_WAITER_SINGLE && ef->waiters.size() > 0) + { + return CELL_EPERM; + } + EventFlagWaiter rec; + rec.bitptn = bitptn; + rec.mode = mode; + rec.tid = tid; + ef->waiters.push_back(rec); + + if (ef->check() == tid) + { + u64 flags = ef->flags; + + ef->waiters.erase(ef->waiters.end() - 1); + + if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) + { + ef->flags &= ~bitptn; + } + else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) + { + ef->flags = 0; + } + + if (result.GetAddr()) result = flags; + + return CELL_OK; + } + } + + u32 counter = 0; + const u32 max_counter = timeout ? (timeout / 1000) : ~0; + + while (true) + { + if (ef->signal.unlock(tid, tid) == SMR_OK) + { + SMutexLocker lock(ef->m_mutex); + + u64 flags = ef->flags; + + for (u32 i = 0; i < ef->waiters.size(); i++) + { + if (ef->waiters[i].tid == tid) + { + ef->waiters.erase(ef->waiters.begin() + i); + + if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) + { + ef->flags &= ~bitptn; + } + else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) + { + ef->flags = 0; + } + + if (u32 target = ef->check()) + { + // if signal, leave both mutexes locked... + ef->signal.unlock(tid, target); + ef->m_mutex.unlock(tid, target); + } + else + { + ef->signal.unlock(tid); + } + + if (result.GetAddr()) result = flags; + + return CELL_OK; + } + } + + ef->signal.unlock(tid); + return CELL_ECANCELED; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + + if (counter++ > max_counter) + { + SMutexLocker lock(ef->m_mutex); + + for (u32 i = 0; i < ef->waiters.size(); i++) + { + if (ef->waiters[i].tid == tid) + { + ef->waiters.erase(ef->waiters.begin() + i); + break; + } + } + + return CELL_ETIMEDOUT; + } + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "sys_event_flag_wait(id=%d) aborted", eflag_id); + return CELL_OK; + } + } +} + +s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result) +{ + sys_event_flag.Log("sys_event_flag_trywait(eflag_id=%d, bitptn=0x%llx, mode=0x%x, result_addr=0x%x)", + eflag_id, bitptn, mode, result.GetAddr()); + + if (result.GetAddr()) result = 0; + + switch (mode & 0xf) + { + case SYS_EVENT_FLAG_WAIT_AND: break; + case SYS_EVENT_FLAG_WAIT_OR: break; + default: return CELL_EINVAL; + } + + switch (mode & ~0xf) + { + case 0: break; // ??? + case SYS_EVENT_FLAG_WAIT_CLEAR: break; + case SYS_EVENT_FLAG_WAIT_CLEAR_ALL: break; + default: return CELL_EINVAL; + } + + EventFlag* ef; + if (!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; + + SMutexLocker lock(ef->m_mutex); + + u64 flags = ef->flags; + + if (((mode & SYS_EVENT_FLAG_WAIT_AND) && (flags & bitptn) == bitptn) || + ((mode & SYS_EVENT_FLAG_WAIT_OR) && (flags & bitptn))) + { + if (mode & SYS_EVENT_FLAG_WAIT_CLEAR) + { + ef->flags &= ~bitptn; + } + else if (mode & SYS_EVENT_FLAG_WAIT_CLEAR_ALL) + { + ef->flags = 0; + } + + if (result.GetAddr()) result = flags; + + return CELL_OK; + } + + return CELL_EBUSY; +} + +s32 sys_event_flag_set(u32 eflag_id, u64 bitptn) +{ + sys_event_flag.Log("sys_event_flag_set(eflag_id=%d, bitptn=0x%llx)", eflag_id, bitptn); + + EventFlag* ef; + if (!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; + + u32 tid = GetCurrentPPUThread().GetId(); + + ef->m_mutex.lock(tid); + ef->flags |= bitptn; + if (u32 target = ef->check()) + { + // if signal, leave both mutexes locked... + ef->signal.lock(target); + ef->m_mutex.unlock(tid, target); + } + else + { + ef->m_mutex.unlock(tid); + } + + return CELL_OK; +} + +s32 sys_event_flag_clear(u32 eflag_id, u64 bitptn) +{ + sys_event_flag.Log("sys_event_flag_clear(eflag_id=%d, bitptn=0x%llx)", eflag_id, bitptn); + + EventFlag* ef; + if (!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; + + SMutexLocker lock(ef->m_mutex); + ef->flags &= bitptn; + + return CELL_OK; +} + +s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num) +{ + sys_event_flag.Log("sys_event_flag_cancel(eflag_id=%d, num_addr=0x%x)", eflag_id, num.GetAddr()); + + EventFlag* ef; + if (!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; + + std::vector tids; + + { + SMutexLocker lock(ef->m_mutex); + tids.resize(ef->waiters.size()); + for (u32 i = 0; i < ef->waiters.size(); i++) + { + tids[i] = ef->waiters[i].tid; + } + ef->waiters.clear(); + } + + for (u32 i = 0; i < tids.size(); i++) + { + ef->signal.lock(tids[i]); + } + + if (Emu.IsStopped()) + { + LOG_WARNING(HLE, "sys_event_flag_cancel(id=%d) aborted", eflag_id); + return CELL_OK; + } + + if (num.GetAddr()) num = tids.size(); + + return CELL_OK; +} + +s32 sys_event_flag_get(u32 eflag_id, mem64_t flags) +{ + sys_event_flag.Log("sys_event_flag_get(eflag_id=%d, flags_addr=0x%x)", eflag_id, flags.GetAddr()); + + EventFlag* ef; + if (!sys_event_flag.CheckId(eflag_id, ef)) return CELL_ESRCH; + + SMutexLocker lock(ef->m_mutex); + flags = ef->flags; + + return CELL_OK; +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h new file mode 100644 index 0000000000..48901ba572 --- /dev/null +++ b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h @@ -0,0 +1,84 @@ +#pragma once + +enum +{ + SYS_SYNC_WAITER_SINGLE = 0x10000, + SYS_SYNC_WAITER_MULTIPLE = 0x20000, + + SYS_EVENT_FLAG_WAIT_AND = 0x01, + SYS_EVENT_FLAG_WAIT_OR = 0x02, + + SYS_EVENT_FLAG_WAIT_CLEAR = 0x10, + SYS_EVENT_FLAG_WAIT_CLEAR_ALL = 0x20, +}; + +struct sys_event_flag_attr +{ + be_t protocol; + be_t pshared; + be_t ipc_key; + be_t flags; + be_t type; + char name[8]; +}; + +struct EventFlagWaiter +{ + u32 tid; + u32 mode; + u64 bitptn; +}; + +struct EventFlag +{ + SMutex m_mutex; + u64 flags; + std::vector waiters; + SMutex signal; + const u32 m_protocol; + const int m_type; + + EventFlag(u64 pattern, u32 protocol, int type) + : flags(pattern) + , m_protocol(protocol) + , m_type(type) + { + } + + u32 check() + { + SleepQueue sq; // TODO: implement without SleepQueue + + u32 target = 0; + + for (u32 i = 0; i < waiters.size(); i++) + { + if (((waiters[i].mode & SYS_EVENT_FLAG_WAIT_AND) && (flags & waiters[i].bitptn) == waiters[i].bitptn) || + ((waiters[i].mode & SYS_EVENT_FLAG_WAIT_OR) && (flags & waiters[i].bitptn))) + { + if (m_protocol == SYS_SYNC_FIFO) + { + target = waiters[i].tid; + break; + } + sq.list.push_back(waiters[i].tid); + } + } + + if (m_protocol == SYS_SYNC_PRIORITY) + { + target = sq.pop_prio(); + } + + return target; + } +}; + +s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init); +s32 sys_event_flag_destroy(u32 eflag_id); +s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 timeout); +s32 sys_event_flag_trywait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result); +s32 sys_event_flag_set(u32 eflag_id, u64 bitptn); +s32 sys_event_flag_clear(u32 eflag_id, u64 bitptn); +s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num); +s32 sys_event_flag_get(u32 eflag_id, mem64_t flags); \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 5a92f945e1..f14bade857 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -95,6 +95,7 @@ + @@ -321,6 +322,7 @@ + @@ -568,4 +570,4 @@ - + \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index e976ffed57..0a1d6e9701 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -587,6 +587,9 @@ Emu\RSX + + Emu\SysCalls\lv2 + @@ -1117,5 +1120,8 @@ Emu\RSX + + Emu\SysCalls\lv2 + - + \ No newline at end of file From dfd5fd388e1d6cf1495a76da6f9916e7b3728440 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 22:13:17 +0400 Subject: [PATCH 292/499] Little cleanup --- rpcs3/Emu/Cell/RawSPUThread.h | 1 - rpcs3/Emu/Cell/SPUThread.h | 1 - rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 1 + rpcs3/Emu/SysCalls/SysCalls.h | 2 -- rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 1 - rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 1 - 6 files changed, 1 insertion(+), 6 deletions(-) diff --git a/rpcs3/Emu/Cell/RawSPUThread.h b/rpcs3/Emu/Cell/RawSPUThread.h index c7b3479f98..ec40d69ab4 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.h +++ b/rpcs3/Emu/Cell/RawSPUThread.h @@ -1,6 +1,5 @@ #pragma once #include "SPUThread.h" -#include "Emu/Event.h" __forceinline static u32 GetRawSPURegAddrByNum(int num, int offset) { diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 6a4e1ef40e..c6c3e95470 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -2,7 +2,6 @@ #include "PPCThread.h" #include "Emu/Event.h" #include "Emu/SysCalls/lv2/sys_spu.h" -#include "Emu/SysCalls/lv2/sys_event.h" #include "Emu/SysCalls/lv2/sys_event_flag.h" #include "Emu/SysCalls/lv2/sys_time.h" #include "MFC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index b43cac4381..57d9e7a47c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -5,6 +5,7 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "Utilities/SQueue.h" +#include "Emu/Event.h" #include "Emu/Audio/cellAudio.h" #include "Emu/Audio/AudioManager.h" #include "Emu/Audio/AudioDumper.h" diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index bd3391340d..ae82066d4e 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -28,8 +28,6 @@ #include "lv2/sys_tty.h" #include "lv2/sys_vm.h" -#include "Emu/Event.h" - #include "rpcs3/Ini.h" #include "LogBase.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index 838a53ebca..52c4703e6c 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -6,7 +6,6 @@ #include "Emu/SysCalls/SysCalls.h" #include "Emu/Cell/SPUThread.h" -#include "Emu/Event.h" #include "sys_event.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 3b32171486..b479783bfa 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/Event.h" #include "sys_timer.h" SysCallBase sys_timer("sys_timer"); From 7f5ae1cdc2a7766926088fd54bd498b8b47dc4a4 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 22:23:30 +0400 Subject: [PATCH 293/499] Renaming (1) --- rpcs3/Emu/Event.h | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 rpcs3/Emu/Event.h diff --git a/rpcs3/Emu/Event.h b/rpcs3/Emu/Event.h deleted file mode 100644 index fe4a2147b7..0000000000 --- a/rpcs3/Emu/Event.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once -#include "Emu/SysCalls/lv2/sys_event.h" - -class EventManager -{ - std::mutex m_lock; - std::unordered_map key_map; - -public: - void Init(); - void Clear(); - bool CheckKey(u64 key); - bool RegisterKey(EventQueue* data, u64 key); - bool GetEventQueue(u64 key, EventQueue*& data); - bool UnregisterKey(u64 key); - bool SendEvent(u64 key, u64 source, u64 d1, u64 d2, u64 d3); -}; From 231de946a06a1d28496f16ddc6829d8c401ff3bf Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 22:25:45 +0400 Subject: [PATCH 294/499] Renaming (2) --- rpcs3/Emu/Event.h | 17 +++++++++++++++++ rpcs3/emucore.vcxproj | 2 +- rpcs3/emucore.vcxproj.filters | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 rpcs3/Emu/Event.h diff --git a/rpcs3/Emu/Event.h b/rpcs3/Emu/Event.h new file mode 100644 index 0000000000..bc01aaf162 --- /dev/null +++ b/rpcs3/Emu/Event.h @@ -0,0 +1,17 @@ +#pragma once +#include "Emu/SysCalls/lv2/sys_event.h" + +class EventManager +{ + std::mutex m_lock; + std::unordered_map key_map; + +public: + void Init(); + void Clear(); + bool CheckKey(u64 key); + bool RegisterKey(EventQueue* data, u64 key); + bool GetEventQueue(u64 key, EventQueue*& data); + bool UnregisterKey(u64 key); + bool SendEvent(u64 key, u64 source, u64 d1, u64 d2, u64 d3); +}; diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index f14bade857..37ce298aca 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -271,7 +271,7 @@ - + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 0a1d6e9701..b5828b0a70 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -967,7 +967,7 @@ Emu\Io\XInput - + Emu\SysCalls From f0eadc783dbae0584d0098ef4fb8809bf25ef010 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 8 Aug 2014 22:52:11 +0400 Subject: [PATCH 295/499] Oops. --- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index b84ca51828..0d393eaec1 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -347,7 +347,7 @@ s32 sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type) return CELL_ESTAT; } - if (address % type) // check alignment + if (address >= 0x40000 || address + type > 0x40000 || address % type) // check range and alignment { return CELL_EINVAL; } @@ -380,7 +380,7 @@ s32 sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type) return CELL_ESTAT; } - if (address % type) // check alignment + if (address >= 0x40000 || address + type > 0x40000 || address % type) // check range and alignment { return CELL_EINVAL; } From c3d84c8f05812022e93411caedaf93fbbd997baf Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 00:39:15 +0400 Subject: [PATCH 296/499] Log fix --- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index ecfb9c4633..e36b976f48 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -952,7 +952,7 @@ s32 cellGcmUnmapEaIoAddress(u64 ea) s32 cellGcmUnmapIoAddress(u64 io) { - cellGcmSys->Log("cellGcmUnmapIoAddress(io=0x%x)", io); + cellGcmSys->Log("cellGcmUnmapIoAddress(io=0x%llx)", io); u32 size = Memory.RSXIOMem.UnmapAddress(io); if (size) @@ -1071,7 +1071,7 @@ s64 cellGcmFunc15(u32 unk_addr) int cellGcmSetFlipCommandWithWaitLabel(u32 ctx, u32 id, u32 label_index, u32 label_value) { - cellGcmSys->Log("cellGcmSetFlipCommandWithWaitLabel(ctx=0x%x, id=0x%x, label_index=0x%x, label_value=0x%x", + cellGcmSys->Log("cellGcmSetFlipCommandWithWaitLabel(ctx=0x%x, id=0x%x, label_index=0x%x, label_value=0x%x)", ctx, id, label_index, label_value); int res = cellGcmSetPrepareFlip(ctx, id); From ae96537b8d313fa4f1e716c676de98313c826352 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 9 Aug 2014 14:52:50 +0800 Subject: [PATCH 297/499] FS: add cellFsChmod & cellFsAioWrite --- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 17 ++++++++++++++++- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 9 +++++++++ rpcs3/Emu/SysCalls/lv2/lv2Fs.h | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 921d748d82..3b90d25b28 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -202,7 +202,11 @@ int cellFsAioRead(mem_ptr_t aio, mem32_t aio_id, mem_func_ptr_tfd; - if (!sys_fs->CheckId(fd, orig_file)) return CELL_EBADF; + + if (!sys_fs->CheckId(fd, orig_file)) + { + return CELL_EBADF; + } //get a unique id for the callback (may be used by cellFsAioCancel) const u32 xid = g_FsAioReadID++; @@ -216,6 +220,15 @@ int cellFsAioRead(mem_ptr_t aio, mem32_t aio_id, mem_func_ptr_t aio, mem32_t aio_id, mem_func_ptr_t xaio, int error, int xid, u64 size)> func) +{ + sys_fs->Todo("cellFsAioWrite(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.GetAddr(), aio_id.GetAddr(), func.GetAddr()); + + // TODO: + + return CELL_OK; +} + int cellFsAioInit(mem8_ptr_t mount_point) { std::string mp = Memory.ReadString(mount_point.GetAddr()); @@ -265,6 +278,7 @@ void sys_fs_init() sys_fs->AddFunc(0xef3efa34, cellFsFstat); sys_fs->AddFunc(0xba901fe6, cellFsMkdir); sys_fs->AddFunc(0xf12eecc8, cellFsRename); + sys_fs->AddFunc(0x99406d0b, cellFsChmod); sys_fs->AddFunc(0x2796fdf3, cellFsRmdir); sys_fs->AddFunc(0x7f4677a8, cellFsUnlink); sys_fs->AddFunc(0xa397d042, cellFsLseek); @@ -272,6 +286,7 @@ void sys_fs_init() sys_fs->AddFunc(0xc9dc3ac5, cellFsTruncate); sys_fs->AddFunc(0xcb588dba, cellFsFGetBlockSize); sys_fs->AddFunc(0xc1c507e7, cellFsAioRead); + sys_fs->AddFunc(0x4cef342e, cellFsAioWrite); sys_fs->AddFunc(0xdb869f20, cellFsAioInit); sys_fs->AddFunc(0x9f951810, cellFsAioFinish); sys_fs->AddFunc(0x1a108ab7, cellFsGetBlockSize); diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index eb881690d9..1ef720cac7 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -333,6 +333,15 @@ s32 cellFsRename(u32 from_addr, u32 to_addr) return CELL_ENOENT; } +s32 cellFsChmod(u32 path_addr, u32 mode) +{ + const std::string& ps3_path = Memory.ReadString(path_addr); + sys_fs->Todo("cellFsChmod(path=\"%s\", mode=0x%x)", ps3_path.c_str(), mode); + + // TODO: + + return CELL_OK; +} s32 cellFsRmdir(u32 path_addr) { diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h index c2a4faf33f..e23f0d4ba3 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h @@ -135,6 +135,7 @@ s32 cellFsStat(u32 path_addr, mem_ptr_t sb); s32 cellFsFstat(u32 fd, mem_ptr_t sb); s32 cellFsMkdir(u32 path_addr, u32 mode); s32 cellFsRename(u32 from_addr, u32 to_addr); +s32 cellFsChmod(u32 path_addr, u32 mode); s32 cellFsRmdir(u32 path_addr); s32 cellFsUnlink(u32 path_addr); s32 cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos); From 1521eea3240254fbdc5d29febe149257895bb018 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 9 Aug 2014 16:27:59 +0800 Subject: [PATCH 298/499] Misc cleanup --- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 23 +++-- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 112 +----------------------- rpcs3/Emu/SysCalls/Modules/cellResc.h | 104 +++++++++++++++++++++- 4 files changed, 119 insertions(+), 124 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index f43dfe1e40..23e30c4efc 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -512,8 +512,8 @@ bool adecCheckType(AudioCodecType type) { switch (type) { - case CELL_ADEC_TYPE_ATRACX: LOG_NOTICE(HLE, "*** (?) type: ATRAC3plus"); break; - case CELL_ADEC_TYPE_ATRACX_2CH: LOG_NOTICE(HLE, "*** type: ATRAC3plus 2ch"); break; + case CELL_ADEC_TYPE_ATRACX: LOG_NOTICE(HLE, "adecCheckType: ATRAC3plus"); break; + case CELL_ADEC_TYPE_ATRACX_2CH: LOG_NOTICE(HLE, "adecCheckType: ATRAC3plus 2ch"); break; case CELL_ADEC_TYPE_ATRACX_6CH: case CELL_ADEC_TYPE_ATRACX_8CH: diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 96e02756dd..7332696116 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -5,11 +5,8 @@ #include "Emu/SysCalls/Modules.h" #include "cellPamf.h" -//void cellPamf_init(); -//Module cellPamf(0x0012, cellPamf_init); Module *cellPamf = nullptr; - int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pEsFilterId) { //TODO: convert type and ch to EsFilterId @@ -42,7 +39,7 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pE pEsFilterId->supplementalInfo2 = 0; } else - cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS (ch=%d)", ch); + cellPamf->Todo("pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS (ch=%d)", ch); break; case CELL_PAMF_STREAM_TYPE_PAMF_LPCM: if (ch == 0) @@ -53,7 +50,7 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pE pEsFilterId->supplementalInfo2 = 0; } else - cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_LPCM (ch=%d)", ch); + cellPamf->Todo("pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_LPCM (ch=%d)", ch); break; case CELL_PAMF_STREAM_TYPE_USER_DATA: if (ch == 0) @@ -64,13 +61,13 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t pE pEsFilterId->supplementalInfo2 = 0; } else - cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_USER_DATA (ch=%d)", ch); + cellPamf->Todo("pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_USER_DATA (ch=%d)", ch); break; case CELL_PAMF_STREAM_TYPE_AC3: - cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_AC3 (ch=%d)", ch); + cellPamf->Todo("pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_AC3 (ch=%d)", ch); break; case CELL_PAMF_STREAM_TYPE_M2V: - cellPamf->Error("*** TODO: pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_M2V (ch=%d)", ch); + cellPamf->Todo("pamfStreamTypeToEsFilterId: CELL_PAMF_STREAM_TYPE_M2V (ch=%d)", ch); break; default: return CELL_PAMF_ERROR_INVALID_ARG; @@ -90,7 +87,7 @@ u8 pamfGetStreamType(mem_ptr_t pSelf, u8 stream) case 0x80: return CELL_PAMF_STREAM_TYPE_PAMF_LPCM; case 0xdd: return CELL_PAMF_STREAM_TYPE_USER_DATA; default: - cellPamf->Error("*** TODO: pamfGetStreamType: unsupported stream type found(0x%x)", pAddr->stream_headers[stream].type); + cellPamf->Todo("pamfGetStreamType: unsupported stream type found(0x%x)", pAddr->stream_headers[stream].type); return 0; } } @@ -113,16 +110,16 @@ u8 pamfGetStreamChannel(mem_ptr_t pSelf, u8 stream) return 0; } case 0xdc: - cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS"); + cellPamf->Todo("pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS"); return 0; case 0x80: - cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_PAMF_LPCM"); + cellPamf->Todo("pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_PAMF_LPCM"); return 0; case 0xdd: - cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_USER_DATA"); + cellPamf->Todo("pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_USER_DATA"); return 0; default: - cellPamf->Error("*** TODO: pamfGetStreamType: unsupported stream type found(0x%x)", pAddr->stream_headers[stream].type); + cellPamf->Todo("pamfGetStreamType: unsupported stream type found(0x%x)", pAddr->stream_headers[stream].type); return 0; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index e05aa91a7c..eccd0861e2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -6,117 +6,13 @@ #include "cellSysutil.h" #include "cellResc.h" -//void cellResc_init(); -//void cellResc_load(); -//void cellResc_unload(); -//Module cellResc(0x001f, cellResc_init, cellResc_load, cellResc_unload); Module *cellResc = nullptr; -// Error Codes -enum -{ - CELL_RESC_ERROR_NOT_INITIALIZED = 0x80210301, - CELL_RESC_ERROR_REINITIALIZED = 0x80210302, - CELL_RESC_ERROR_BAD_ALIGNMENT = 0x80210303, - CELL_RESC_ERROR_BAD_ARGUMENT = 0x80210304, - CELL_RESC_ERROR_LESS_MEMORY = 0x80210305, - CELL_RESC_ERROR_GCM_FLIP_QUE_FULL = 0x80210306, - CELL_RESC_ERROR_BAD_COMBINATION = 0x80210307, -}; - -enum -{ - COLOR_BUFFER_ALIGNMENT = 128, - VERTEX_BUFFER_ALIGNMENT = 4, - FRAGMENT_SHADER_ALIGNMENT = 64, - VERTEX_NUMBER_NORMAL = 4, - - SRC_BUFFER_NUM = 8, - MAX_DST_BUFFER_NUM = 6, - RESC_PARAM_NUM -}; - static const float - PICTURE_SIZE = (1.0f), - UV_DELTA_PS = (1.f / 8.f), - UV_DELTA_LB = (1.f / 6.f), - XY_DELTA_LB = (1.f / 8.f); - -struct RescVertex_t -{ - be_t Px, Py; - be_t u, v; - be_t u2, v2; -}; - -// Defines -#define roundup(x,a) (((x)+(a)-1)&(~((a)-1))) -#define SEVIRITY 80.f - -struct CCellRescInternal -{ - CellRescInitConfig m_initConfig; - CellRescSrc m_rescSrc[SRC_BUFFER_NUM]; - u32 m_dstMode; - CellRescDsts m_rescDsts[4], *m_pRescDsts; - CellRescTableElement m_interlaceElement; - - u32 m_colorBuffersEA, m_vertexArrayEA, m_fragmentUcodeEA; - u32 m_bufIdFront; - s32 m_dstWidth, m_dstHeight, m_dstPitch; - u16 m_srcWidthInterlace, m_srcHeightInterlace; - u32 m_dstBufInterval, m_dstOffsets[MAX_DST_BUFFER_NUM]; - s32 m_nVertex; - u32 m_bufIdFrontPrevDrop, m_bufIdPalMidPrev, m_bufIdPalMidNow; - u32 m_interlaceTableEA; - int m_interlaceTableLength; - float m_ratioAdjX, m_ratioAdjY, m_flexRatio; - bool m_bInitialized, m_bNewlyAdjustRatio; - bool m_isDummyFlipped; - u8 m_cgParamIndex[RESC_PARAM_NUM]; - u64 m_commandIdxCaF, m_rcvdCmdIdx; - u32 s_applicationFlipHandler; - u32 s_applicationVBlankHandler; - - CCellRescInternal() - : m_bInitialized(false) - { - } -}; - - -CCellRescInternal* s_rescInternalInstance = nullptr; - -// Extern Functions -extern int cellGcmSetFlipMode(u32 mode); -extern void cellGcmSetFlipHandler(u32 handler_addr); -extern void cellGcmSetVBlankHandler(u32 handler_addr); -extern int cellGcmAddressToOffset(u64 address, mem32_t offset); -extern int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height); -extern int cellGcmSetPrepareFlip(mem_ptr_t ctx, u32 id); -extern int cellGcmSetSecondVFrequency(u32 freq); -extern u32 cellGcmGetLabelAddress(u8 index); -extern u32 cellGcmGetTiledPitchSize(u32 size); - -// Local Functions -int cellRescGetNumColorBuffers(u32 dstMode, u32 palTemporalMode, u32 reserved); - -// Help Functions -inline bool IsPal() { return s_rescInternalInstance->m_dstMode == CELL_RESC_720x576; } -inline bool IsPal60Hsync() { return (IsPal() && s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_FOR_HSYNC); } -inline bool IsPalDrop() { return (IsPal() && s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_DROP); } -inline bool IsPalInterpolate() { return (IsPal() && ((s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE) - || (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE_30_DROP) - || (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE_DROP_FLEXIBLE))); } -inline bool IsNotPalInterpolate() { return !IsPalInterpolate(); } -inline bool IsPalTemporal() { return (IsPal() && s_rescInternalInstance->m_initConfig.palTemporalMode != CELL_RESC_PAL_50); } -inline bool IsNotPalTemporal() { return !IsPalTemporal(); } -inline bool IsNotPal() { return !IsPal(); } -inline bool IsGcmFlip() { return (IsNotPal() || (IsPal() && (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_50 - || s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_FOR_HSYNC)));} -inline int GetNumColorBuffers(){ return IsPalInterpolate() ? 6 : (IsPalDrop() ? 3 : 2); } -inline bool IsInterlace() { return s_rescInternalInstance->m_initConfig.interlaceMode == CELL_RESC_INTERLACE_FILTER; } -inline bool IsTextureNR() { return !IsInterlace(); } +PICTURE_SIZE = (1.0f), +UV_DELTA_PS = (1.f / 8.f), +UV_DELTA_LB = (1.f / 6.f), +XY_DELTA_LB = (1.f / 8.f); void BuildupVertexBufferNR() { diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.h b/rpcs3/Emu/SysCalls/Modules/cellResc.h index 8816237e00..bb83d43506 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.h +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.h @@ -1,5 +1,31 @@ #pragma once +#define roundup(x,a) (((x)+(a)-1)&(~((a)-1))) +#define SEVIRITY 80.f + +enum +{ + CELL_RESC_ERROR_NOT_INITIALIZED = 0x80210301, + CELL_RESC_ERROR_REINITIALIZED = 0x80210302, + CELL_RESC_ERROR_BAD_ALIGNMENT = 0x80210303, + CELL_RESC_ERROR_BAD_ARGUMENT = 0x80210304, + CELL_RESC_ERROR_LESS_MEMORY = 0x80210305, + CELL_RESC_ERROR_GCM_FLIP_QUE_FULL = 0x80210306, + CELL_RESC_ERROR_BAD_COMBINATION = 0x80210307, +}; + +enum +{ + COLOR_BUFFER_ALIGNMENT = 128, + VERTEX_BUFFER_ALIGNMENT = 4, + FRAGMENT_SHADER_ALIGNMENT = 64, + VERTEX_NUMBER_NORMAL = 4, + + SRC_BUFFER_NUM = 8, + MAX_DST_BUFFER_NUM = 6, + RESC_PARAM_NUM +}; + enum CellRescBufferMode { CELL_RESC_720x480 = 0x1, @@ -78,4 +104,80 @@ struct CellRescSrc be_t width; be_t height; be_t offset; -}; \ No newline at end of file +}; + +struct RescVertex_t +{ + be_t Px, Py; + be_t u, v; + be_t u2, v2; +}; + +struct CCellRescInternal +{ + CellRescInitConfig m_initConfig; + CellRescSrc m_rescSrc[SRC_BUFFER_NUM]; + u32 m_dstMode; + CellRescDsts m_rescDsts[4], *m_pRescDsts; + CellRescTableElement m_interlaceElement; + + u32 m_colorBuffersEA, m_vertexArrayEA, m_fragmentUcodeEA; + u32 m_bufIdFront; + s32 m_dstWidth, m_dstHeight, m_dstPitch; + u16 m_srcWidthInterlace, m_srcHeightInterlace; + u32 m_dstBufInterval, m_dstOffsets[MAX_DST_BUFFER_NUM]; + s32 m_nVertex; + u32 m_bufIdFrontPrevDrop, m_bufIdPalMidPrev, m_bufIdPalMidNow; + u32 m_interlaceTableEA; + int m_interlaceTableLength; + float m_ratioAdjX, m_ratioAdjY, m_flexRatio; + bool m_bInitialized, m_bNewlyAdjustRatio; + bool m_isDummyFlipped; + u8 m_cgParamIndex[RESC_PARAM_NUM]; + u64 m_commandIdxCaF, m_rcvdCmdIdx; + u32 s_applicationFlipHandler; + u32 s_applicationVBlankHandler; + + CCellRescInternal() + : m_bInitialized(false) + { + } +}; + + +CCellRescInternal* s_rescInternalInstance = nullptr; + +// Extern Functions +extern int cellGcmSetFlipMode(u32 mode); +extern void cellGcmSetFlipHandler(u32 handler_addr); +extern void cellGcmSetVBlankHandler(u32 handler_addr); +extern int cellGcmAddressToOffset(u64 address, mem32_t offset); +extern int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height); +extern int cellGcmSetPrepareFlip(mem_ptr_t ctx, u32 id); +extern int cellGcmSetSecondVFrequency(u32 freq); +extern u32 cellGcmGetLabelAddress(u8 index); +extern u32 cellGcmGetTiledPitchSize(u32 size); + +// Local Functions +int cellRescGetNumColorBuffers(u32 dstMode, u32 palTemporalMode, u32 reserved); + +// Help Functions +inline bool IsPal() { return s_rescInternalInstance->m_dstMode == CELL_RESC_720x576; } +inline bool IsPal60Hsync() { return (IsPal() && s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_FOR_HSYNC); } +inline bool IsPalDrop() { return (IsPal() && s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_DROP); } +inline bool IsPalInterpolate() { + return (IsPal() && ((s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE) + || (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE_30_DROP) + || (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_INTERPOLATE_DROP_FLEXIBLE))); +} +inline bool IsNotPalInterpolate() { return !IsPalInterpolate(); } +inline bool IsPalTemporal() { return (IsPal() && s_rescInternalInstance->m_initConfig.palTemporalMode != CELL_RESC_PAL_50); } +inline bool IsNotPalTemporal() { return !IsPalTemporal(); } +inline bool IsNotPal() { return !IsPal(); } +inline bool IsGcmFlip() { + return (IsNotPal() || (IsPal() && (s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_50 + || s_rescInternalInstance->m_initConfig.palTemporalMode == CELL_RESC_PAL_60_FOR_HSYNC))); +} +inline int GetNumColorBuffers(){ return IsPalInterpolate() ? 6 : (IsPalDrop() ? 3 : 2); } +inline bool IsInterlace() { return s_rescInternalInstance->m_initConfig.interlaceMode == CELL_RESC_INTERLACE_FILTER; } +inline bool IsTextureNR() { return !IsInterlace(); } \ No newline at end of file From 6a0ad1b0014f981ba44932269628a6c5e07d9297 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 9 Aug 2014 16:44:27 +0800 Subject: [PATCH 299/499] cellFsFsync --- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 3 +-- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 9 +++++++++ rpcs3/Emu/SysCalls/lv2/lv2Fs.h | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 3b90d25b28..94e0a8ae2b 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -6,8 +6,6 @@ #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" -//void sys_fs_init(); -//Module sys_fs(0x000e, sys_fs_init); Module *sys_fs = nullptr; bool sdata_check(u32 version, u32 flags, u64 filesizeInput, u64 filesizeTmp) @@ -279,6 +277,7 @@ void sys_fs_init() sys_fs->AddFunc(0xba901fe6, cellFsMkdir); sys_fs->AddFunc(0xf12eecc8, cellFsRename); sys_fs->AddFunc(0x99406d0b, cellFsChmod); + sys_fs->AddFunc(0x967a162b, cellFsFsync); sys_fs->AddFunc(0x2796fdf3, cellFsRmdir); sys_fs->AddFunc(0x7f4677a8, cellFsUnlink); sys_fs->AddFunc(0xa397d042, cellFsLseek); diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 1ef720cac7..8446a195f3 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -343,6 +343,15 @@ s32 cellFsChmod(u32 path_addr, u32 mode) return CELL_OK; } +s32 cellFsFsync(u32 fd) +{ + sys_fs->Todo("cellFsFsync(fd=0x%x)", fd); + + // TODO: + + return CELL_OK; +} + s32 cellFsRmdir(u32 path_addr) { const std::string& ps3_path = Memory.ReadString(path_addr); diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h index e23f0d4ba3..d1f299e1b3 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h @@ -136,6 +136,7 @@ s32 cellFsFstat(u32 fd, mem_ptr_t sb); s32 cellFsMkdir(u32 path_addr, u32 mode); s32 cellFsRename(u32 from_addr, u32 to_addr); s32 cellFsChmod(u32 path_addr, u32 mode); +s32 cellFsFsync(u32 fd); s32 cellFsRmdir(u32 path_addr); s32 cellFsUnlink(u32 path_addr); s32 cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos); From 3f65b54a1ecfb7092552d199a3ea0a6e0a1b6eac Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 9 Aug 2014 17:17:23 +0800 Subject: [PATCH 300/499] cellFsSdataOpenByFd --- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 94e0a8ae2b..eb97c00e58 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -135,6 +135,15 @@ int cellFsSdataOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) return cellFsOpen(path_addr, flags, fd, arg, size); } +int cellFsSdataOpenByFd(int mself_fd, int flags, mem32_t sdata_fd, u64 offset, mem32_t arg, u64 size) +{ + sys_fs->Todo("cellFsSdataOpenByFd(mself_fd=0x%x, flags=0x%x, sdata_fd_addr=0x%x, offset=0x%llx, arg_addr=0x%x, size=0x%llx) -> cellFsOpen()", mself_fd, flags, sdata_fd.GetAddr(), offset, arg.GetAddr(), size); + + // TODO: + + return CELL_OK; +} + std::atomic g_FsAioReadID( 0 ); std::atomic g_FsAioReadCur( 0 ); bool aio_init = false; @@ -266,6 +275,7 @@ void sys_fs_init() { sys_fs->AddFunc(0x718bf5f8, cellFsOpen); sys_fs->AddFunc(0xb1840b53, cellFsSdataOpen); + sys_fs->AddFunc(0x6d3bb15b, cellFsSdataOpenByFd); sys_fs->AddFunc(0x4d5ff8e2, cellFsRead); sys_fs->AddFunc(0xecdcf2ab, cellFsWrite); sys_fs->AddFunc(0x2cb51f0d, cellFsClose); From 15fa50f24e0a5016563ea3a4bd1f58304e59dac2 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 9 Aug 2014 20:36:24 +0800 Subject: [PATCH 301/499] Return CELL_EFAULT if specified address is invalid --- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 98d8dd60b2..f1eb9d6936 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -10,6 +10,11 @@ s32 sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr { sys_rwlock.Warning("sys_rwlock_create(rw_lock_id_addr=0x%x, attr_addr=0x%x)", rw_lock_id.GetAddr(), attr.GetAddr()); + if (!rw_lock_id.GetAddr() || !attr.GetAddr()) + { + return CELL_EFAULT; + } + switch (attr->attr_protocol.ToBE()) { case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Todo("SYS_SYNC_PRIORITY"); break; From b9ae34cc3b2b0e2badd99f58e08dab9b7fc65965 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 9 Aug 2014 23:16:21 +0800 Subject: [PATCH 302/499] Show game title and ID in log --- rpcs3/Emu/System.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 3bf2af91bf..87d9b12369 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -16,6 +16,8 @@ #include "Emu/CPU/CPUThreadManager.h" //gui dependency +#include "../Loader/PSF.h" + #include "../Crypto/unself.h" #include #include @@ -165,6 +167,16 @@ void Emulator::Load() { LOG_NOTICE(LOADER, "%s -> %s", m_vfs.m_devices[i]->GetPs3Path().c_str(), m_vfs.m_devices[i]->GetLocalPath().c_str()); } + + LOG_NOTICE(LOADER, " ");//used to be skip_line + vfsFile sfo("/app_home/PARAM.SFO"); + PSFLoader psf(sfo); + psf.Load(false); + std::string title = psf.GetString("TITLE"); + std::string title_id = psf.GetString("TITLE_ID"); + LOG_NOTICE(LOADER, "Title: %s", title.c_str()); + LOG_NOTICE(LOADER, "Serial: %s", title_id.c_str()); + // bdvd inserting imitation vfsFile f1("/app_home/dev_bdvd.path"); if (f1.IsOpened()) From e49fcd4b2109121349f339f4467b2d5e94a567a0 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 9 Aug 2014 23:31:21 +0800 Subject: [PATCH 303/499] Fix typo --- rpcs3/Emu/Memory/Memory.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index a4ea0cfca7..6ed79d3b55 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -266,13 +266,13 @@ public: #endif { m_base_addr = nullptr; - LOG_ERROR(MEMORY, "Initing memory failed"); + LOG_ERROR(MEMORY, "Initialing memory failed"); assert(0); return; } else { - LOG_NOTICE(MEMORY, "Initing memory: m_base_addr = 0x%llx", (u64)m_base_addr); + LOG_NOTICE(MEMORY, "Initialing memory: m_base_addr = 0x%llx", (u64)m_base_addr); } switch(type) From 6f8fb71d15473bb64c99c93baa38ecf3b6f9e7bd Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 20:01:55 +0400 Subject: [PATCH 304/499] Last syscall registering --- rpcs3/Emu/CPU/CPUThread.cpp | 4 +++- rpcs3/Emu/CPU/CPUThread.h | 1 + rpcs3/Emu/Cell/PPUInterpreter.h | 3 +++ rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index f948836ef5..4267e56f91 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -28,6 +28,7 @@ CPUThread::CPUThread(CPUThreadType type) , m_is_step(false) , m_is_branch(false) , m_status(Stopped) + , m_last_syscall(0) { } @@ -284,7 +285,8 @@ void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) // TODO: allow recovering from a page fault //GetCurrentPPUThread().Stop(); Emu.Pause(); - throw fmt::Format("Access violation: addr = 0x%x", (u32)addr); + throw fmt::Format("Access violation: addr = 0x%x (last_syscall=0x%llx)", + (u32)addr, (u64)GetCurrentCPUThread()->m_last_syscall); } else { diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 343f992d8f..2ecd40ad4a 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -133,6 +133,7 @@ public: bool m_is_interrupt; bool m_has_interrupt; u64 m_interrupt_arg; + u64 m_last_syscall; protected: CPUThread(CPUThreadType type); diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 2f793db9c9..3f27b769ca 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -66,6 +66,7 @@ private: void SysCall() { + CPU.m_last_syscall = CPU.GPR[11]; SysCalls::DoSyscall(CPU.GPR[11]); if(Ini.HLELogging.GetValue()) @@ -81,6 +82,8 @@ private: #ifdef HLE_CALL_DEBUG LOG_NOTICE(PPU, "SysCall[%lld] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); #endif + + CPU.m_last_syscall = 0; } void NULL_OP() diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 0d393eaec1..efb280d2c0 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -298,7 +298,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) } if (Emu.IsStopped()) { - LOG_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d, ...) aborted", id); + LOG_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d) aborted", id); return CELL_OK; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); From b7ea1f4d4460740b868b5c713274c73d3c8d7b38 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 20:04:53 +0400 Subject: [PATCH 305/499] sys_process_get_sdk_version rough implementation --- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 29 +++++++++++++++++++++++--- rpcs3/Emu/SysCalls/lv2/sys_process.h | 4 ++++ rpcs3/Emu/System.cpp | 22 +++++++++++++++++++ rpcs3/Emu/System.h | 1 + 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp index ecb7f302bc..f36e417ec2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -10,10 +10,16 @@ SysCallBase sc_p("Process"); sysProcessObjects_t procObjects; +s32 process_getpid() +{ + // TODO: get current process id + return 1; +} + s32 sys_process_getpid() { sc_p.Log("sys_process_getpid() -> 1"); - return 1; + return process_getpid(); } s32 sys_process_getppid() @@ -228,12 +234,29 @@ s32 sys_process_get_paramsfo(mem8_ptr_t buffer) return CELL_OK;*/ } +s32 process_get_sdk_version(u32 pid, s32& ver) +{ + // TODO: get correct SDK version for selected pid + ver = Emu.m_sdk_version; + + return CELL_OK; +} + s32 sys_process_get_sdk_version(u32 pid, mem32_t version) { sc_p.Warning("sys_process_get_sdk_version(pid=%d, version_addr=0x%x)", pid, version.GetAddr()); - version = 0x360001; // TODO - return CELL_OK; + s32 sdk_ver; + s32 ret = process_get_sdk_version(pid, sdk_ver); + if (ret != CELL_OK) + { + return ret; // error code + } + else + { + version = sdk_ver; + return CELL_OK; + } } s32 sys_process_kill(u32 pid) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.h b/rpcs3/Emu/SysCalls/lv2/sys_process.h index 3ec275818b..8d14099c05 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.h @@ -51,6 +51,10 @@ struct sysProcessObjects_t // Extern extern sysProcessObjects_t procObjects; +// Auxiliary functions +s32 process_getpid(); +s32 process_get_sdk_version(u32 pid, s32& ver); + // SysCalls s32 sys_process_getpid(); s32 sys_process_getppid(); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 3bf2af91bf..5fb9ff7a36 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -16,6 +16,8 @@ #include "Emu/CPU/CPUThreadManager.h" //gui dependency +#include "Loader/PSF.h" + #include "../Crypto/unself.h" #include #include @@ -258,6 +260,26 @@ void Emulator::Load() return; } + // setting default values + Emu.m_sdk_version = -1; // possibly "unknown" value + + // trying to load some info from PARAM.SFO + vfsFile f2("/app_home/PARAM.SFO"); + if (f2.IsOpened()) + { + PSFLoader psf(f2); + if (psf.Load(false)) + { + std::string version = psf.GetString("PS3_SYSTEM_VER"); + + const size_t dot = version.find('.'); + if (dot != std::string::npos) + { + Emu.m_sdk_version = (std::stoi(version, nullptr, 16) << 20) | ((std::stoi(version.substr(dot + 1), nullptr, 16) & 0xffff) << 4) | 1; + } + } + } + LoadPoints(BreakPointsDBName); CPUThread& thread = GetCPU().AddThread(thread_type); diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 7052d05118..f2500878ac 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -106,6 +106,7 @@ public: std::string m_path; std::string m_elf_path; std::string m_title_id; + s32 m_sdk_version; Emulator(); From b4615f24520f7c337b5854d112ed157e9ea480d0 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 20:23:53 +0400 Subject: [PATCH 306/499] cellSyncLFQueueInitialize preparations --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 146 ++++++++++++++++++++---- rpcs3/Emu/SysCalls/Modules/cellSync.h | 39 ++++++- 2 files changed, 164 insertions(+), 21 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 6146a3fcc1..c19f1e27db 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1025,113 +1025,219 @@ s32 cellSyncQueueClear(mem_ptr_t queue) int cellSyncLFQueueGetEntrySize() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueGetEntrySize()"); return CELL_OK; } + int cellSyncLFQueueSize() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueSize()"); return CELL_OK; } int cellSyncLFQueueClear() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueClear()"); return CELL_OK; } + int _cellSyncLFQueueCompletePushPointer2() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueCompletePushPointer2()"); return CELL_OK; } int _cellSyncLFQueueGetPopPointer2() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetPopPointer2()"); return CELL_OK; } int _cellSyncLFQueueCompletePushPointer() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueCompletePushPointer()"); return CELL_OK; } int _cellSyncLFQueueAttachLv2EventQueue() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue()"); return CELL_OK; } int _cellSyncLFQueueGetPushPointer2() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetPushPointer2()"); return CELL_OK; } int _cellSyncLFQueueGetPopPointer() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetPopPointer()"); return CELL_OK; } int _cellSyncLFQueueCompletePopPointer2() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueCompletePopPointer2()"); return CELL_OK; } int _cellSyncLFQueueDetachLv2EventQueue() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue()"); return CELL_OK; } -int cellSyncLFQueueInitialize() +void syncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) { - UNIMPLEMENTED_FUNC(cellSync); + +} + +int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +{ + cellSync->Todo("cellSyncLFQueueInitialize(ea_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", + ea.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); + + if (!ea) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (size) + { + if (!buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (size > 0x4000 || size % 16) + { + return CELL_SYNC_ERROR_INVAL; + } + } + if (!depth || (depth >> 15) || direction > 3) + { + return CELL_SYNC_ERROR_INVAL; + } + if (ea.GetAddr() % 128 || buffer_addr % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // prx: get sdk version of current process, return non-zero result of sys_process_get_sdk_version + s32 sdk_ver; + s32 ret = process_get_sdk_version(process_getpid(), sdk_ver); + if (ret != CELL_OK) + { + return ret; + } + if (sdk_ver == -1) + { + sdk_ver = 0x460000; + } + + // prx: reserve u32 at 0x2c offset + u32 old_value; + while (true) + { + const u32 old_data = ea->m_data1(); + CellSyncLFQueue new_data; + new_data.m_data1() = old_data; + + if (old_data) + { + if (sdk_ver > 0x17ffff && old_data != se32(2)) + { + return CELL_SYNC_ERROR_STAT; + } + old_value = old_data; + } + else + { + if (sdk_ver > 0x17ffff) + { + for (u32 i = 0; i < sizeof(CellSyncLFQueue) / sizeof(u64); i++) + { + if ((u64&)Memory[ea.GetAddr() + i * sizeof(u64)]) + { + return CELL_SYNC_ERROR_STAT; + } + } + } + new_data.m_data1() = se32(1); + old_value = se32(1); + } + + if (InterlockedCompareExchange(&ea->m_data1(), new_data.m_data1(), old_data) == old_data) break; + } + + if (old_value == se32(2)) + { + if ((u32)ea->m_size != size || (u32)ea->m_depth != depth || (u64)ea->m_buffer != (u64)buffer_addr) + { + return CELL_SYNC_ERROR_INVAL; + } + if (sdk_ver > 0x17ffff) + { + if ((u64)ea->m_eaSignal != (u64)eaSignal_addr || (u32)ea->m_direction != direction) + { + return CELL_SYNC_ERROR_INVAL; + } + } + } + else + { + // prx: call internal function with same arguments + + + // prx: sync, zeroize u32 at 0x2c offset + InterlockedCompareExchange(&ea->m_data1(), 0, 0); + ea->m_data1() = 0; + } + + // prx: sync + InterlockedCompareExchange(&ea->m_data1(), 0, 0); return CELL_OK; } int _cellSyncLFQueueGetSignalAddress() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetSignalAddress()"); return CELL_OK; } int _cellSyncLFQueuePushBody() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueuePushBody()"); return CELL_OK; } int cellSyncLFQueueGetDirection() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueGetDirection()"); return CELL_OK; } int cellSyncLFQueueDepth() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueDepth()"); return CELL_OK; } int _cellSyncLFQueuePopBody() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueuePopBody()"); return CELL_OK; } int _cellSyncLFQueueGetPushPointer() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetPushPointer()"); return CELL_OK; } int _cellSyncLFQueueCompletePopPointer() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueCompletePopPointer()"); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 4e24b4cbad..ff941b65d4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -85,4 +85,41 @@ struct CellSyncQueue }; }; -static_assert(sizeof(CellSyncQueue) == 32, "CellSyncQueue: wrong size"); \ No newline at end of file +static_assert(sizeof(CellSyncQueue) == 32, "CellSyncQueue: wrong size"); + +enum CellSyncQueueDirection : u32 +{ + CELL_SYNC_QUEUE_SPU2SPU = 0, // SPU to SPU + CELL_SYNC_QUEUE_SPU2PPU = 1, // SPU to PPU + CELL_SYNC_QUEUE_PPU2SPU = 2, // PPU to SPU + CELL_SYNC_QUEUE_ANY2ANY = 3, // SPU/PPU to SPU/PPU +}; + +struct CellSyncLFQueue +{ + be_t m_v1; + be_t m_v2; + be_t m_size; + be_t m_depth; + be_t m_buffer; + be_t m_v5; + be_t m_direction; + be_t m_v6; + be_t m_v7; + be_t m_v8; + be_t m_v9; + be_t m_v10; + be_t m_v11; + be_t m_v12; + be_t m_v13; + be_t m_v14; + be_t m_eaSignal; + be_t reserved; + + volatile u32& m_data1() + { + return *reinterpret_cast((u8*)this + 0x2c); + } +}; + +static_assert(sizeof(CellSyncLFQueue) == 128, "CellSyncLFQueue: wrong size"); \ No newline at end of file From 18e1799980177cae9293b432078d0747ae16edb8 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 20:01:55 +0400 Subject: [PATCH 307/499] Last syscall registering --- rpcs3/Emu/CPU/CPUThread.cpp | 4 +++- rpcs3/Emu/CPU/CPUThread.h | 1 + rpcs3/Emu/Cell/PPUInterpreter.h | 3 +++ rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index f948836ef5..4267e56f91 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -28,6 +28,7 @@ CPUThread::CPUThread(CPUThreadType type) , m_is_step(false) , m_is_branch(false) , m_status(Stopped) + , m_last_syscall(0) { } @@ -284,7 +285,8 @@ void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) // TODO: allow recovering from a page fault //GetCurrentPPUThread().Stop(); Emu.Pause(); - throw fmt::Format("Access violation: addr = 0x%x", (u32)addr); + throw fmt::Format("Access violation: addr = 0x%x (last_syscall=0x%llx)", + (u32)addr, (u64)GetCurrentCPUThread()->m_last_syscall); } else { diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 343f992d8f..2ecd40ad4a 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -133,6 +133,7 @@ public: bool m_is_interrupt; bool m_has_interrupt; u64 m_interrupt_arg; + u64 m_last_syscall; protected: CPUThread(CPUThreadType type); diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 2f793db9c9..3f27b769ca 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -66,6 +66,7 @@ private: void SysCall() { + CPU.m_last_syscall = CPU.GPR[11]; SysCalls::DoSyscall(CPU.GPR[11]); if(Ini.HLELogging.GetValue()) @@ -81,6 +82,8 @@ private: #ifdef HLE_CALL_DEBUG LOG_NOTICE(PPU, "SysCall[%lld] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); #endif + + CPU.m_last_syscall = 0; } void NULL_OP() diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 0d393eaec1..efb280d2c0 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -298,7 +298,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) } if (Emu.IsStopped()) { - LOG_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d, ...) aborted", id); + LOG_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d) aborted", id); return CELL_OK; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); From b09412a79ad4004e167d2578805cb4b46c720beb Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 20:04:53 +0400 Subject: [PATCH 308/499] sys_process_get_sdk_version rough implementation --- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 29 +++++++++++++++++++++++--- rpcs3/Emu/SysCalls/lv2/sys_process.h | 4 ++++ rpcs3/Emu/System.cpp | 22 ++++++++++++++++++- rpcs3/Emu/System.h | 1 + 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp index ecb7f302bc..f36e417ec2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -10,10 +10,16 @@ SysCallBase sc_p("Process"); sysProcessObjects_t procObjects; +s32 process_getpid() +{ + // TODO: get current process id + return 1; +} + s32 sys_process_getpid() { sc_p.Log("sys_process_getpid() -> 1"); - return 1; + return process_getpid(); } s32 sys_process_getppid() @@ -228,12 +234,29 @@ s32 sys_process_get_paramsfo(mem8_ptr_t buffer) return CELL_OK;*/ } +s32 process_get_sdk_version(u32 pid, s32& ver) +{ + // TODO: get correct SDK version for selected pid + ver = Emu.m_sdk_version; + + return CELL_OK; +} + s32 sys_process_get_sdk_version(u32 pid, mem32_t version) { sc_p.Warning("sys_process_get_sdk_version(pid=%d, version_addr=0x%x)", pid, version.GetAddr()); - version = 0x360001; // TODO - return CELL_OK; + s32 sdk_ver; + s32 ret = process_get_sdk_version(pid, sdk_ver); + if (ret != CELL_OK) + { + return ret; // error code + } + else + { + version = sdk_ver; + return CELL_OK; + } } s32 sys_process_kill(u32 pid) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.h b/rpcs3/Emu/SysCalls/lv2/sys_process.h index 3ec275818b..8d14099c05 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.h @@ -51,6 +51,10 @@ struct sysProcessObjects_t // Extern extern sysProcessObjects_t procObjects; +// Auxiliary functions +s32 process_getpid(); +s32 process_get_sdk_version(u32 pid, s32& ver); + // SysCalls s32 sys_process_getpid(); s32 sys_process_getppid(); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 87d9b12369..0745e1c49c 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -16,7 +16,7 @@ #include "Emu/CPU/CPUThreadManager.h" //gui dependency -#include "../Loader/PSF.h" +#include "Loader/PSF.h" #include "../Crypto/unself.h" #include @@ -270,6 +270,26 @@ void Emulator::Load() return; } + // setting default values + Emu.m_sdk_version = -1; // possibly "unknown" value + + // trying to load some info from PARAM.SFO + vfsFile f2("/app_home/PARAM.SFO"); + if (f2.IsOpened()) + { + PSFLoader psf(f2); + if (psf.Load(false)) + { + std::string version = psf.GetString("PS3_SYSTEM_VER"); + + const size_t dot = version.find('.'); + if (dot != std::string::npos) + { + Emu.m_sdk_version = (std::stoi(version, nullptr, 16) << 20) | ((std::stoi(version.substr(dot + 1), nullptr, 16) & 0xffff) << 4) | 1; + } + } + } + LoadPoints(BreakPointsDBName); CPUThread& thread = GetCPU().AddThread(thread_type); diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 7052d05118..f2500878ac 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -106,6 +106,7 @@ public: std::string m_path; std::string m_elf_path; std::string m_title_id; + s32 m_sdk_version; Emulator(); From c3bba76d32196188de15af0b5c6eb1a03f939d3c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 20:23:53 +0400 Subject: [PATCH 309/499] cellSyncLFQueueInitialize preparations --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 146 ++++++++++++++++++++---- rpcs3/Emu/SysCalls/Modules/cellSync.h | 39 ++++++- 2 files changed, 164 insertions(+), 21 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 6146a3fcc1..c19f1e27db 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1025,113 +1025,219 @@ s32 cellSyncQueueClear(mem_ptr_t queue) int cellSyncLFQueueGetEntrySize() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueGetEntrySize()"); return CELL_OK; } + int cellSyncLFQueueSize() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueSize()"); return CELL_OK; } int cellSyncLFQueueClear() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueClear()"); return CELL_OK; } + int _cellSyncLFQueueCompletePushPointer2() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueCompletePushPointer2()"); return CELL_OK; } int _cellSyncLFQueueGetPopPointer2() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetPopPointer2()"); return CELL_OK; } int _cellSyncLFQueueCompletePushPointer() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueCompletePushPointer()"); return CELL_OK; } int _cellSyncLFQueueAttachLv2EventQueue() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue()"); return CELL_OK; } int _cellSyncLFQueueGetPushPointer2() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetPushPointer2()"); return CELL_OK; } int _cellSyncLFQueueGetPopPointer() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetPopPointer()"); return CELL_OK; } int _cellSyncLFQueueCompletePopPointer2() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueCompletePopPointer2()"); return CELL_OK; } int _cellSyncLFQueueDetachLv2EventQueue() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue()"); return CELL_OK; } -int cellSyncLFQueueInitialize() +void syncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) { - UNIMPLEMENTED_FUNC(cellSync); + +} + +int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +{ + cellSync->Todo("cellSyncLFQueueInitialize(ea_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", + ea.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); + + if (!ea) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (size) + { + if (!buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (size > 0x4000 || size % 16) + { + return CELL_SYNC_ERROR_INVAL; + } + } + if (!depth || (depth >> 15) || direction > 3) + { + return CELL_SYNC_ERROR_INVAL; + } + if (ea.GetAddr() % 128 || buffer_addr % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // prx: get sdk version of current process, return non-zero result of sys_process_get_sdk_version + s32 sdk_ver; + s32 ret = process_get_sdk_version(process_getpid(), sdk_ver); + if (ret != CELL_OK) + { + return ret; + } + if (sdk_ver == -1) + { + sdk_ver = 0x460000; + } + + // prx: reserve u32 at 0x2c offset + u32 old_value; + while (true) + { + const u32 old_data = ea->m_data1(); + CellSyncLFQueue new_data; + new_data.m_data1() = old_data; + + if (old_data) + { + if (sdk_ver > 0x17ffff && old_data != se32(2)) + { + return CELL_SYNC_ERROR_STAT; + } + old_value = old_data; + } + else + { + if (sdk_ver > 0x17ffff) + { + for (u32 i = 0; i < sizeof(CellSyncLFQueue) / sizeof(u64); i++) + { + if ((u64&)Memory[ea.GetAddr() + i * sizeof(u64)]) + { + return CELL_SYNC_ERROR_STAT; + } + } + } + new_data.m_data1() = se32(1); + old_value = se32(1); + } + + if (InterlockedCompareExchange(&ea->m_data1(), new_data.m_data1(), old_data) == old_data) break; + } + + if (old_value == se32(2)) + { + if ((u32)ea->m_size != size || (u32)ea->m_depth != depth || (u64)ea->m_buffer != (u64)buffer_addr) + { + return CELL_SYNC_ERROR_INVAL; + } + if (sdk_ver > 0x17ffff) + { + if ((u64)ea->m_eaSignal != (u64)eaSignal_addr || (u32)ea->m_direction != direction) + { + return CELL_SYNC_ERROR_INVAL; + } + } + } + else + { + // prx: call internal function with same arguments + + + // prx: sync, zeroize u32 at 0x2c offset + InterlockedCompareExchange(&ea->m_data1(), 0, 0); + ea->m_data1() = 0; + } + + // prx: sync + InterlockedCompareExchange(&ea->m_data1(), 0, 0); return CELL_OK; } int _cellSyncLFQueueGetSignalAddress() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetSignalAddress()"); return CELL_OK; } int _cellSyncLFQueuePushBody() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueuePushBody()"); return CELL_OK; } int cellSyncLFQueueGetDirection() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueGetDirection()"); return CELL_OK; } int cellSyncLFQueueDepth() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("cellSyncLFQueueDepth()"); return CELL_OK; } int _cellSyncLFQueuePopBody() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueuePopBody()"); return CELL_OK; } int _cellSyncLFQueueGetPushPointer() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueGetPushPointer()"); return CELL_OK; } int _cellSyncLFQueueCompletePopPointer() { - UNIMPLEMENTED_FUNC(cellSync); + cellSync->Todo("_cellSyncLFQueueCompletePopPointer()"); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 4e24b4cbad..ff941b65d4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -85,4 +85,41 @@ struct CellSyncQueue }; }; -static_assert(sizeof(CellSyncQueue) == 32, "CellSyncQueue: wrong size"); \ No newline at end of file +static_assert(sizeof(CellSyncQueue) == 32, "CellSyncQueue: wrong size"); + +enum CellSyncQueueDirection : u32 +{ + CELL_SYNC_QUEUE_SPU2SPU = 0, // SPU to SPU + CELL_SYNC_QUEUE_SPU2PPU = 1, // SPU to PPU + CELL_SYNC_QUEUE_PPU2SPU = 2, // PPU to SPU + CELL_SYNC_QUEUE_ANY2ANY = 3, // SPU/PPU to SPU/PPU +}; + +struct CellSyncLFQueue +{ + be_t m_v1; + be_t m_v2; + be_t m_size; + be_t m_depth; + be_t m_buffer; + be_t m_v5; + be_t m_direction; + be_t m_v6; + be_t m_v7; + be_t m_v8; + be_t m_v9; + be_t m_v10; + be_t m_v11; + be_t m_v12; + be_t m_v13; + be_t m_v14; + be_t m_eaSignal; + be_t reserved; + + volatile u32& m_data1() + { + return *reinterpret_cast((u8*)this + 0x2c); + } +}; + +static_assert(sizeof(CellSyncLFQueue) == 128, "CellSyncLFQueue: wrong size"); \ No newline at end of file From dadd93bb8415d7f877f810b4127c9cdc0b89c1d2 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 20:39:28 +0400 Subject: [PATCH 310/499] Revert "Return CELL_EFAULT if specified address is invalid" This reverts commit 15fa50f24e0a5016563ea3a4bd1f58304e59dac2. --- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index f1eb9d6936..98d8dd60b2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -10,11 +10,6 @@ s32 sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr { sys_rwlock.Warning("sys_rwlock_create(rw_lock_id_addr=0x%x, attr_addr=0x%x)", rw_lock_id.GetAddr(), attr.GetAddr()); - if (!rw_lock_id.GetAddr() || !attr.GetAddr()) - { - return CELL_EFAULT; - } - switch (attr->attr_protocol.ToBE()) { case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Todo("SYS_SYNC_PRIORITY"); break; From c7e77730fe30c2bb1a2d7ee6395189f64d03f2f0 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 23:39:56 +0400 Subject: [PATCH 311/499] syncLFQueueInitialize --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 56 +++++++++++++++++++++---- rpcs3/Emu/SysCalls/Modules/cellSync.h | 39 ++++++++--------- 2 files changed, 69 insertions(+), 26 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index c19f1e27db..5a8cb71804 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1091,7 +1091,49 @@ int _cellSyncLFQueueDetachLv2EventQueue() void syncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) { + ea->m_h1 = 0; + ea->m_h2 = 0; + ea->m_h4 = 0; + ea->m_h5 = 0; + ea->m_h6 = 0; + ea->m_h8 = 0; + ea->m_size = size; + ea->m_depth = depth; + ea->m_buffer = (u64)buffer_addr; + ea->m_direction = direction; + for (u32 i = 0; i < sizeof(ea->m_hs) / sizeof(u16); i++) + { + ea->m_hs[i] = 0; + } + ea->m_eaSignal = (u64)eaSignal_addr; + if (direction == CELL_SYNC_QUEUE_ANY2ANY) + { + ea->m_h3 = 0; + ea->m_h7 = 0; + ea->m_buffer = (u64)buffer_addr | 1; + ea->m_bs[0] = -1; + ea->m_bs[1] = -1; + //m_bs[2] + //m_bs[3] + ea->m_v1 = -1; + ea->m_hs[0] = -1; + ea->m_hs[16] = -1; + ea->m_v2 = 0; + ea->m_v3 = 0; + } + else + { + //m_h3 + //m_h7 + ea->m_bs[0] = -1; // written as u32 + ea->m_bs[1] = -1; + ea->m_bs[2] = -1; + ea->m_bs[3] = -1; + ea->m_v1 = 0; + ea->m_v2 = 0; // written as u64 + ea->m_v3 = 0; + } } int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) @@ -1139,9 +1181,9 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 u32 old_value; while (true) { - const u32 old_data = ea->m_data1(); + const u32 old_data = ea->m_data(); CellSyncLFQueue new_data; - new_data.m_data1() = old_data; + new_data.m_data() = old_data; if (old_data) { @@ -1163,11 +1205,11 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 } } } - new_data.m_data1() = se32(1); + new_data.m_data() = se32(1); old_value = se32(1); } - if (InterlockedCompareExchange(&ea->m_data1(), new_data.m_data1(), old_data) == old_data) break; + if (InterlockedCompareExchange(&ea->m_data(), new_data.m_data(), old_data) == old_data) break; } if (old_value == se32(2)) @@ -1190,12 +1232,12 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 // prx: sync, zeroize u32 at 0x2c offset - InterlockedCompareExchange(&ea->m_data1(), 0, 0); - ea->m_data1() = 0; + InterlockedCompareExchange(&ea->m_data(), 0, 0); + ea->m_data() = 0; } // prx: sync - InterlockedCompareExchange(&ea->m_data1(), 0, 0); + InterlockedCompareExchange(&ea->m_data(), 0, 0); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index ff941b65d4..4cdb1ab081 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -97,26 +97,27 @@ enum CellSyncQueueDirection : u32 struct CellSyncLFQueue { - be_t m_v1; - be_t m_v2; - be_t m_size; - be_t m_depth; - be_t m_buffer; - be_t m_v5; - be_t m_direction; - be_t m_v6; - be_t m_v7; - be_t m_v8; - be_t m_v9; - be_t m_v10; - be_t m_v11; - be_t m_v12; - be_t m_v13; - be_t m_v14; - be_t m_eaSignal; - be_t reserved; + be_t m_h1; // 0x0 + be_t m_h2; // 0x2 + be_t m_h3; // 0x4 + be_t m_h4; // 0x6 + be_t m_h5; // 0x8 + be_t m_h6; // 0xA + be_t m_h7; // 0xC + be_t m_h8; // 0xE + be_t m_size; // 0x10 + be_t m_depth; // 0x14 + be_t m_buffer; // 0x18 + u8 m_bs[4]; // 0x20 + be_t m_direction; // 0x24 + be_t m_v1; // 0x28 + be_t m_sync; // 0x2C + be_t m_hs[32]; // 0x30 + be_t m_eaSignal;// 0x70 + be_t m_v2; // 0x78 + be_t m_v3; // 0x7C - volatile u32& m_data1() + volatile u32& m_data() { return *reinterpret_cast((u8*)this + 0x2c); } From e948842faaf1aa3ce70c41c8768cc743abf515df Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 10 Aug 2014 07:10:44 +0800 Subject: [PATCH 312/499] Damn typo --- rpcs3/Emu/Memory/Memory.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 6ed79d3b55..0c230593d2 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -266,13 +266,13 @@ public: #endif { m_base_addr = nullptr; - LOG_ERROR(MEMORY, "Initialing memory failed"); + LOG_ERROR(MEMORY, "Initializing memory failed"); assert(0); return; } else { - LOG_NOTICE(MEMORY, "Initialing memory: m_base_addr = 0x%llx", (u64)m_base_addr); + LOG_NOTICE(MEMORY, "Initializing memory: m_base_addr = 0x%llx", (u64)m_base_addr); } switch(type) From 51dd8cb5c3347706053a162f64c6d2d73241b5c4 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 10 Aug 2014 19:05:41 +0300 Subject: [PATCH 313/499] Add TasksetAttribute2 initilization, fix wrong TODO Also fixed cellSpurs.h formatting --- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 20 +- rpcs3/Emu/SysCalls/Modules/cellSpurs.h | 232 +++++++++++------------ 2 files changed, 133 insertions(+), 119 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 41be2f8084..8e1a1b3216 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -471,7 +471,7 @@ int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem3 int cellSpursEventFlagGetTasksetAddress(mem_ptr_t eventFlag, mem_ptr_t taskset) { - cellSpurs->Todo("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); + cellSpurs->Todo("cellSpursEventFlagGetTasksetAddress(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -716,9 +716,23 @@ int cellSpursTasksetAttributeSetName() return CELL_OK; } -int _cellSpursTasksetAttribute2Initialize() +int _cellSpursTasksetAttribute2Initialize(mem_ptr_t attribute, u32 revision) { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("_cellSpursTasksetAttribute2Initialize(attribute_addr=0x%x, revision=%d)", attribute.GetAddr(), revision); + + attribute->revision = revision; + attribute->name_addr = NULL; + attribute->argTaskset = 0; + + for (int i = 0; i < 8; i++) + { + attribute->priority[i] = 1; + } + + attribute->maxContention = 8; + attribute->enableClearLs = 0; + attribute->CellSpursTaskNameBuffer_addr = 0; + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h index 633da2d541..5d61947f75 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h @@ -26,30 +26,30 @@ enum CELL_SPURS_TASK_ERROR_PERM = 0x80410909, CELL_SPURS_TASK_ERROR_BUSY = 0x8041090A, CELL_SPURS_TASK_ERROR_FAULT = 0x8041090D, - CELL_SPURS_TASK_ERROR_STAT = 0x8041090F, CELL_SPURS_TASK_ERROR_ALIGN = 0x80410910, + CELL_SPURS_TASK_ERROR_STAT = 0x8041090F, CELL_SPURS_TASK_ERROR_NULL_POINTER = 0x80410911, CELL_SPURS_TASK_ERROR_FATAL = 0x80410914, - CELL_SPURS_TASK_ERROR_SHUTDOWN = 0x80410920, + CELL_SPURS_TASK_ERROR_SHUTDOWN = 0x80410920, }; // Core CellSpurs structures. struct CellSpurs -{ - SPURSManager *spurs; +{ + SPURSManager *spurs; }; struct CellSpurs2 -{ +{ SPURSManager *spurs; }; struct CellSpursAttribute -{ - SPURSManagerAttribute *attr; +{ + SPURSManagerAttribute *attr; }; -struct CellSpursEventFlag +struct CellSpursEventFlag { SPURSManagerEventFlag *eventFlag; }; @@ -60,87 +60,87 @@ struct CellSpursTaskset }; struct CellSpursInfo -{ +{ be_t nSpus; be_t spuThreadGroupPriority; - be_t ppuThreadPriority; - bool exitIfNoWork; - bool spurs2; + be_t ppuThreadPriority; + bool exitIfNoWork; + bool spurs2; be_t traceBuffer_addr; //void *traceBuffer; - be_t traceBufferSize; - be_t traceMode; + be_t traceBufferSize; + be_t traceMode; be_t spuThreadGroup; //typedef u32 sys_spu_thread_group_t; be_t spuThreads[8]; //typedef u32 sys_spu_thread_t; - be_t spursHandlerThread0; - be_t spursHandlerThread1; - s8 namePrefix[CELL_SPURS_NAME_MAX_LENGTH+1]; - be_t namePrefixLength; - be_t deadlineMissCounter; - be_t deadlineMeetCounter; - //u8 padding[]; + be_t spursHandlerThread0; + be_t spursHandlerThread1; + s8 namePrefix[CELL_SPURS_NAME_MAX_LENGTH+1]; + be_t namePrefixLength; + be_t deadlineMissCounter; + be_t deadlineMeetCounter; + //u8 padding[]; }; -struct CellSpursExceptionInfo -{ - be_t spu_thread; - be_t spu_npc; - be_t cause; - be_t option; +struct CellSpursExceptionInfo +{ + be_t spu_thread; + be_t spu_npc; + be_t cause; + be_t option; }; struct CellSpursTraceInfo -{ - be_t spu_thread[8]; - be_t count[8]; - be_t spu_thread_grp; - be_t nspu; - //u8 padding[]; +{ + be_t spu_thread[8]; + be_t count[8]; + be_t spu_thread_grp; + be_t nspu; + //u8 padding[]; }; -struct CellTraceHeader -{ - u8 tag; - u8 length; - u8 cpu; - u8 thread; - be_t time; +struct CellTraceHeader +{ + u8 tag; + u8 length; + u8 cpu; + u8 thread; + be_t time; }; struct CellSpursTracePacket -{ +{ struct header_struct - { - u8 tag; - u8 length; - u8 spu; - u8 workload; - be_t time; + { + u8 tag; + u8 length; + u8 spu; + u8 workload; + be_t time; } header; struct data_struct { struct load_struct - { - be_t ea; - be_t ls; - be_t size; - } load; + { + be_t ea; + be_t ls; + be_t size; + } load; struct map_struct - { - be_t offset; - be_t ls; - be_t size; - } map; + { + be_t offset; + be_t ls; + be_t size; + } map; struct start_struct - { + { s8 module[4]; - be_t level; - be_t ls; - } start; + be_t level; + be_t ls; + } start; - be_t user; + be_t user; be_t guid; } data; }; @@ -152,94 +152,94 @@ typedef void (*CellSpursGlobalExceptionEventHandler)(mem_ptr_t spurs, typedef void (*CellSpursTasksetExceptionEventHandler)(mem_ptr_t spurs, mem_ptr_t taskset, u32 idTask, const mem_ptr_t info, mem_ptr_t arg); -struct CellSpursTasksetInfo -{ - //CellSpursTaskInfo taskInfo[CELL_SPURS_MAX_TASK]; - be_t argument; - be_t idWorkload; +struct CellSpursTasksetInfo +{ + //CellSpursTaskInfo taskInfo[CELL_SPURS_MAX_TASK]; + be_t argument; + be_t idWorkload; be_t idLastScheduledTask; //typedef unsigned CellSpursTaskId - be_t name_addr; - CellSpursTasksetExceptionEventHandler exceptionEventHandler; + be_t name_addr; + CellSpursTasksetExceptionEventHandler exceptionEventHandler; be_t exceptionEventHandlerArgument_addr; //void *exceptionEventHandlerArgument - be_t sizeTaskset; - //be_t reserved[]; + be_t sizeTaskset; + //be_t reserved[]; }; -struct CellSpursTaskset2 +struct CellSpursTaskset2 { be_t skip[10496]; }; -struct CellSpursTasksetAttribute2 -{ - be_t revision; - be_t name_addr; - be_t argTaskset; - u8 priority[8]; - be_t maxContention; - be_t enableClearLs; +struct CellSpursTasksetAttribute2 +{ + be_t revision; + be_t name_addr; + be_t argTaskset; + u8 priority[8]; + be_t maxContention; + be_t enableClearLs; be_t CellSpursTaskNameBuffer_addr; //??? *taskNameBuffer - //be_t __reserved__[]; + //be_t __reserved__[]; }; // cellSpurs task structures. -struct CellSpursTaskNameBuffer -{ - char taskName[CELL_SPURS_MAX_TASK][CELL_SPURS_MAX_TASK_NAME_LENGTH]; +struct CellSpursTaskNameBuffer +{ + char taskName[CELL_SPURS_MAX_TASK][CELL_SPURS_MAX_TASK_NAME_LENGTH]; }; -struct CellSpursTraceTaskData -{ - be_t incident; - be_t task; +struct CellSpursTraceTaskData +{ + be_t incident; + be_t task; }; typedef be_t be_u32; typedef be_t be_u64; -struct CellSpursTaskArgument -{ - be_u32 u32[4]; - be_u64 u64[2]; -}; - -struct CellSpursTaskLsPattern +struct CellSpursTaskArgument { be_u32 u32[4]; be_u64 u64[2]; }; -struct CellSpursTaskAttribute2 -{ - be_t revision; - be_t sizeContext; - be_t eaContext; - CellSpursTaskLsPattern lsPattern; //??? - be_t name_addr; - //be_t __reserved__[]; +struct CellSpursTaskLsPattern +{ + be_u32 u32[4]; + be_u64 u64[2]; }; -struct CellSpursTaskExitCode +struct CellSpursTaskAttribute2 +{ + be_t revision; + be_t sizeContext; + be_t eaContext; + CellSpursTaskLsPattern lsPattern; //??? + be_t name_addr; + //be_t __reserved__[]; +}; + +struct CellSpursTaskExitCode { unsigned char skip[128]; }; -struct CellSpursTaskInfo -{ - CellSpursTaskLsPattern lsPattern; - CellSpursTaskArgument argument; +struct CellSpursTaskInfo +{ + CellSpursTaskLsPattern lsPattern; + CellSpursTaskArgument argument; const be_t eaElf_addr; //void *eaElf const be_t eaContext_addr; //void *eaContext - be_t sizeContext; - be_t state; - be_t hasSignal; - const be_t CellSpursTaskExitCode_addr; - u8 guid[8]; - //be_t reserved[]; + be_t sizeContext; + be_t state; + be_t hasSignal; + const be_t CellSpursTaskExitCode_addr; + u8 guid[8]; + //be_t reserved[]; }; -struct CellSpursTaskBinInfo -{ +struct CellSpursTaskBinInfo +{ be_t eaElf; be_t sizeContext; be_t __reserved__; From 0aed6d8c198c49ad17af651e9ff4c5814decb366 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 10 Aug 2014 22:06:51 +0300 Subject: [PATCH 314/499] Add TaskAttribute2 initilization --- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 21 +++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellSpurs.h | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 8e1a1b3216..76a8f423ca 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -784,9 +784,26 @@ int cellSpursTaskAttributeSetExitCodeContainer() return CELL_OK; } -int _cellSpursTaskAttribute2Initialize() +int _cellSpursTaskAttribute2Initialize(mem_ptr_t attribute, u32 revision) { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("_cellSpursTaskAttribute2Initialize(attribute_addr=0x%x, revision=%d)", attribute.GetAddr(), revision); + + attribute->revision = revision; + attribute->sizeContext = 0; + attribute->eaContext = NULL; + + for (int c = 0; c < 4; c++) + { + attribute->lsPattern.u32[c] = 0; + } + + for (int i = 0; i < 2; i++) + { + attribute->lsPattern.u64[i] = 0; + } + + attribute->name_addr = 0; + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h index 5d61947f75..13d56dfaef 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h @@ -214,7 +214,7 @@ struct CellSpursTaskAttribute2 be_t revision; be_t sizeContext; be_t eaContext; - CellSpursTaskLsPattern lsPattern; //??? + CellSpursTaskLsPattern lsPattern; be_t name_addr; //be_t __reserved__[]; }; From 54839b293bf374ab6fc7daeab8bbf314e1787d3a Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 10 Aug 2014 22:56:42 +0300 Subject: [PATCH 315/499] Log name of syscall, when access violation occurs --- rpcs3/Emu/CPU/CPUThread.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 4267e56f91..1f318b8abc 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Emu/SysCalls/ErrorCodes.h" +#include "Emu/SysCalls/SysCalls.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" @@ -285,8 +286,8 @@ void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) // TODO: allow recovering from a page fault //GetCurrentPPUThread().Stop(); Emu.Pause(); - throw fmt::Format("Access violation: addr = 0x%x (last_syscall=0x%llx)", - (u32)addr, (u64)GetCurrentCPUThread()->m_last_syscall); + throw fmt::Format("Access violation: addr = 0x%x (last_syscall=0x%llx (%s))", + (u32)addr, (u64)GetCurrentCPUThread()->m_last_syscall, SysCalls::GetHLEFuncName((u64)GetCurrentCPUThread()->m_last_syscall).c_str()); } else { From 641efa9b341037561ab0d2b90f6080a1c789afa1 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 11 Aug 2014 22:35:34 +0400 Subject: [PATCH 316/499] CellSyncLFQueue draft --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 390 +++++++++++++++++------- rpcs3/Emu/SysCalls/Modules/cellSync.h | 2 +- 2 files changed, 286 insertions(+), 106 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 5a8cb71804..0ee553c6f0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1023,125 +1023,299 @@ s32 cellSyncQueueClear(mem_ptr_t queue) return CELL_OK; } -int cellSyncLFQueueGetEntrySize() +// LFQueue functions + +s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) { - cellSync->Todo("cellSyncLFQueueGetEntrySize()"); + // TODO return CELL_OK; } -int cellSyncLFQueueSize() +s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 useEventQueue) { - cellSync->Todo("cellSyncLFQueueSize()"); + cellSync->Todo("_cellSyncLFQueueGetPushPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); + + return syncLFQueueGetPushPointer(queue, *pointer, isBlocking, useEventQueue); +} + +s32 syncLFQueueGetPushPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) +{ + // TODO return CELL_OK; } -int cellSyncLFQueueClear() +s32 _cellSyncLFQueueGetPushPointer2(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 useEventQueue) { - cellSync->Todo("cellSyncLFQueueClear()"); + // arguments copied from _cellSyncLFQueueGetPushPointer + cellSync->Todo("_cellSyncLFQueueGetPushPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); + + return syncLFQueueGetPushPointer2(queue, *pointer, isBlocking, useEventQueue); +} + +s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal) +{ + // TODO + if (fpSendSignal) return fpSendSignal(0, 0); return CELL_OK; } -int _cellSyncLFQueueCompletePushPointer2() +s32 _cellSyncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal) { - cellSync->Todo("_cellSyncLFQueueCompletePushPointer2()"); + cellSync->Todo("_cellSyncLFQueueCompletePushPointer(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x)", + queue.GetAddr(), pointer, fpSendSignal.GetAddr()); + + return syncLFQueueCompletePushPointer(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }); +} + +s32 syncLFQueueCompletePushPointer2(mem_ptr_t queue, s32 pointer, std::function fpSendSignal) +{ + // TODO + if (fpSendSignal) return fpSendSignal(0, 0); return CELL_OK; } -int _cellSyncLFQueueGetPopPointer2() +s32 _cellSyncLFQueueCompletePushPointer2(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal) { - cellSync->Todo("_cellSyncLFQueueGetPopPointer2()"); - return CELL_OK; + // arguments copied from _cellSyncLFQueueCompletePushPointer + cellSync->Todo("_cellSyncLFQueueCompletePushPointer2(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x)", + queue.GetAddr(), pointer, fpSendSignal.GetAddr()); + + return syncLFQueueCompletePushPointer2(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }); } -int _cellSyncLFQueueCompletePushPointer() +s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, u32 isBlocking) { - cellSync->Todo("_cellSyncLFQueueCompletePushPointer()"); - return CELL_OK; -} + // cellSyncLFQueuePush has 1 in isBlocking param, cellSyncLFQueueTryPush has 0 + cellSync->Todo("_cellSyncLFQueuePushBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); -int _cellSyncLFQueueAttachLv2EventQueue() -{ - cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue()"); - return CELL_OK; -} - -int _cellSyncLFQueueGetPushPointer2() -{ - cellSync->Todo("_cellSyncLFQueueGetPushPointer2()"); - return CELL_OK; -} - -int _cellSyncLFQueueGetPopPointer() -{ - cellSync->Todo("_cellSyncLFQueueGetPopPointer()"); - return CELL_OK; -} - -int _cellSyncLFQueueCompletePopPointer2() -{ - cellSync->Todo("_cellSyncLFQueueCompletePopPointer2()"); - return CELL_OK; -} - -int _cellSyncLFQueueDetachLv2EventQueue() -{ - cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue()"); - return CELL_OK; -} - -void syncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) -{ - ea->m_h1 = 0; - ea->m_h2 = 0; - ea->m_h4 = 0; - ea->m_h5 = 0; - ea->m_h6 = 0; - ea->m_h8 = 0; - ea->m_size = size; - ea->m_depth = depth; - ea->m_buffer = (u64)buffer_addr; - ea->m_direction = direction; - for (u32 i = 0; i < sizeof(ea->m_hs) / sizeof(u16); i++) + if (!queue || !buffer_addr) { - ea->m_hs[i] = 0; + return CELL_SYNC_ERROR_NULL_POINTER; } - ea->m_eaSignal = (u64)eaSignal_addr; + if (queue.GetAddr() % 128 || buffer_addr % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + s32 position; + while (true) + { + s32 res; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + res = syncLFQueueGetPushPointer(queue, position, isBlocking, 0); + } + else + { + res = syncLFQueueGetPushPointer2(queue, position, isBlocking, 0); + } + + if (!isBlocking || res != CELL_SYNC_ERROR_AGAIN) + { + if (res) + { + return res; + } + break; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("_cellSyncLFQueuePushBody(queue_addr=0x%x) aborted", queue.GetAddr()); + return CELL_OK; + } + } + + s32 depth = (u32)queue->m_depth; + s32 size = (u32)queue->m_size; + memcpy(Memory + ((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position), Memory + buffer_addr, size); + + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + return syncLFQueueCompletePushPointer(queue, position, nullptr); + } + else + { + return syncLFQueueCompletePushPointer2(queue, position, nullptr); + } +} + +s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) +{ + // TODO + return CELL_OK; +} + +s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +{ + // arguments copied from _cellSyncLFQueueGetPushPointer (arg4, arg5 not used) + cellSync->Todo("_cellSyncLFQueueGetPopPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); + + return syncLFQueueGetPopPointer(queue, *pointer, isBlocking, arg4, arg5); +} + +s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) +{ + // TODO + return CELL_OK; +} + +s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +{ + // arguments copied from _cellSyncLFQueueGetPushPointer (arg5 not used) + cellSync->Todo("_cellSyncLFQueueGetPopPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); + + return syncLFQueueGetPopPointer2(queue, *pointer, isBlocking, arg4, arg5); +} + +s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal, u32 noQueueFull) +{ + // TODO + if (fpSendSignal) fpSendSignal(0, 0); + return CELL_OK; +} + +s32 _cellSyncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal, u32 noQueueFull) +{ + // arguments copied from _cellSyncLFQueueCompletePushPointer + unknown argument (noQueueFull taken from LFQueue2CompletePopPointer) + cellSync->Todo("_cellSyncLFQueueCompletePopPointer(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x, noQueueFull=%d)", + queue.GetAddr(), pointer, fpSendSignal.GetAddr(), noQueueFull); + + return syncLFQueueCompletePopPointer(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }, noQueueFull); +} + +s32 syncLFQueueCompletePopPointer2(mem_ptr_t queue, s32 pointer, std::function fpSendSignal, u32 noQueueFull) +{ + // TODO + if (fpSendSignal) fpSendSignal(0, 0); + return CELL_OK; +} + +s32 _cellSyncLFQueueCompletePopPointer2(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal, u32 noQueueFull) +{ + // arguments copied from _cellSyncLFQueueCompletePopPointer + cellSync->Todo("_cellSyncLFQueueCompletePopPointer2(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x, noQueueFull=%d)", + queue.GetAddr(), pointer, fpSendSignal.GetAddr(), noQueueFull); + + return syncLFQueueCompletePopPointer2(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }, noQueueFull); +} + +s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u32 isBlocking) +{ + // cellSyncLFQueuePop has 1 in isBlocking param, cellSyncLFQueueTryPop has 0 + cellSync->Todo("_cellSyncLFQueuePopBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); + + if (!queue || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 128 || buffer_addr % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + s32 position; + while (true) + { + s32 res; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + res = syncLFQueueGetPopPointer(queue, position, isBlocking, 0, 0); + } + else + { + res = syncLFQueueGetPopPointer2(queue, position, isBlocking, 0, 0); + } + + if (!isBlocking || res != CELL_SYNC_ERROR_AGAIN) + { + if (res) + { + return res; + } + break; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("_cellSyncLFQueuePopBody(queue_addr=0x%x) aborted", queue.GetAddr()); + return CELL_OK; + } + } + + s32 depth = (u32)queue->m_depth; + s32 size = (u32)queue->m_size; + memcpy(Memory + buffer_addr, Memory + ((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position), size); + + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + return syncLFQueueCompletePopPointer(queue, position, nullptr, 0); + } + else + { + return syncLFQueueCompletePopPointer2(queue, position, nullptr, 0); + } +} + +void syncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +{ + queue->m_h1 = 0; + queue->m_h2 = 0; + queue->m_h4 = 0; + queue->m_h5 = 0; + queue->m_h6 = 0; + queue->m_h8 = 0; + queue->m_size = size; + queue->m_depth = depth; + queue->m_buffer = (u64)buffer_addr; + queue->m_direction = direction; + for (u32 i = 0; i < sizeof(queue->m_hs) / sizeof(queue->m_hs[0]); i++) + { + queue->m_hs[i] = 0; + } + queue->m_eaSignal = (u64)eaSignal_addr; if (direction == CELL_SYNC_QUEUE_ANY2ANY) { - ea->m_h3 = 0; - ea->m_h7 = 0; - ea->m_buffer = (u64)buffer_addr | 1; - ea->m_bs[0] = -1; - ea->m_bs[1] = -1; + queue->m_h3 = 0; + queue->m_h7 = 0; + queue->m_buffer = (u64)buffer_addr | 1; + queue->m_bs[0] = -1; + queue->m_bs[1] = -1; //m_bs[2] //m_bs[3] - ea->m_v1 = -1; - ea->m_hs[0] = -1; - ea->m_hs[16] = -1; - ea->m_v2 = 0; - ea->m_v3 = 0; + queue->m_v1 = -1; + queue->m_hs[0] = -1; + queue->m_hs[16] = -1; + queue->m_v2 = 0; + queue->m_v3 = 0; } else { //m_h3 //m_h7 - ea->m_bs[0] = -1; // written as u32 - ea->m_bs[1] = -1; - ea->m_bs[2] = -1; - ea->m_bs[3] = -1; - ea->m_v1 = 0; - ea->m_v2 = 0; // written as u64 - ea->m_v3 = 0; + queue->m_bs[0] = -1; // written as u32 + queue->m_bs[1] = -1; + queue->m_bs[2] = -1; + queue->m_bs[3] = -1; + queue->m_v1 = 0; + queue->m_v2 = 0; // written as u64 + queue->m_v3 = 0; } } -int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +s32 cellSyncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) { - cellSync->Todo("cellSyncLFQueueInitialize(ea_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", - ea.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); + cellSync->Todo("cellSyncLFQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", + queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); - if (!ea) + if (!queue) { return CELL_SYNC_ERROR_NULL_POINTER; } @@ -1160,7 +1334,7 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 { return CELL_SYNC_ERROR_INVAL; } - if (ea.GetAddr() % 128 || buffer_addr % 16) + if (queue.GetAddr() % 128 || buffer_addr % 16) { return CELL_SYNC_ERROR_ALIGN; } @@ -1181,7 +1355,7 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 u32 old_value; while (true) { - const u32 old_data = ea->m_data(); + const u32 old_data = queue->m_data(); CellSyncLFQueue new_data; new_data.m_data() = old_data; @@ -1199,7 +1373,7 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 { for (u32 i = 0; i < sizeof(CellSyncLFQueue) / sizeof(u64); i++) { - if ((u64&)Memory[ea.GetAddr() + i * sizeof(u64)]) + if ((u64&)Memory[queue.GetAddr() + i * sizeof(u64)]) { return CELL_SYNC_ERROR_STAT; } @@ -1209,18 +1383,18 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 old_value = se32(1); } - if (InterlockedCompareExchange(&ea->m_data(), new_data.m_data(), old_data) == old_data) break; + if (InterlockedCompareExchange(&queue->m_data(), new_data.m_data(), old_data) == old_data) break; } if (old_value == se32(2)) { - if ((u32)ea->m_size != size || (u32)ea->m_depth != depth || (u64)ea->m_buffer != (u64)buffer_addr) + if ((u32)queue->m_size != size || (u32)queue->m_depth != depth || (u64)queue->m_buffer != (u64)buffer_addr) { return CELL_SYNC_ERROR_INVAL; } if (sdk_ver > 0x17ffff) { - if ((u64)ea->m_eaSignal != (u64)eaSignal_addr || (u32)ea->m_direction != direction) + if ((u64)queue->m_eaSignal != (u64)eaSignal_addr || (u32)queue->m_direction != direction) { return CELL_SYNC_ERROR_INVAL; } @@ -1229,57 +1403,63 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 else { // prx: call internal function with same arguments - + syncLFQueueInitialize(queue, buffer_addr, size, depth, direction, eaSignal_addr); // prx: sync, zeroize u32 at 0x2c offset - InterlockedCompareExchange(&ea->m_data(), 0, 0); - ea->m_data() = 0; + InterlockedCompareExchange(&queue->m_data(), 0, 0); + queue->m_data() = 0; } // prx: sync - InterlockedCompareExchange(&ea->m_data(), 0, 0); + InterlockedCompareExchange(&queue->m_data(), 0, 0); return CELL_OK; } -int _cellSyncLFQueueGetSignalAddress() +s32 cellSyncLFQueueGetDirection(mem_ptr_t queue, mem32_t direction) { - cellSync->Todo("_cellSyncLFQueueGetSignalAddress()"); + cellSync->Todo("cellSyncLFQueueGetDirection(queue_addr=0x%x, direction_addr=0x%x)", queue.GetAddr(), direction.GetAddr()); return CELL_OK; } -int _cellSyncLFQueuePushBody() +s32 cellSyncLFQueueDepth(mem_ptr_t queue, mem32_t depth) { - cellSync->Todo("_cellSyncLFQueuePushBody()"); + cellSync->Todo("cellSyncLFQueueDepth(queue_addr=0x%x, depth_addr=0x%x)", queue.GetAddr(), depth.GetAddr()); return CELL_OK; } -int cellSyncLFQueueGetDirection() +s32 cellSyncLFQueueGetEntrySize(mem_ptr_t queue, mem32_t entry_size) { - cellSync->Todo("cellSyncLFQueueGetDirection()"); + cellSync->Todo("cellSyncLFQueueGetEntrySize(queue_addr=0x%x, entry_size_addr=0x%x)", queue.GetAddr(), entry_size.GetAddr()); return CELL_OK; } -int cellSyncLFQueueDepth() +s32 cellSyncLFQueueSize(mem_ptr_t queue, mem32_t size) { - cellSync->Todo("cellSyncLFQueueDepth()"); + cellSync->Todo("cellSyncLFQueueSize(queue_addr=0x%x, size_addr=0x%x)", queue.GetAddr(), size.GetAddr()); return CELL_OK; } -int _cellSyncLFQueuePopBody() +s32 cellSyncLFQueueClear(mem_ptr_t queue) { - cellSync->Todo("_cellSyncLFQueuePopBody()"); + cellSync->Todo("cellSyncLFQueueClear(queue_addr=0x%x)", queue.GetAddr()); return CELL_OK; } -int _cellSyncLFQueueGetPushPointer() +s32 _cellSyncLFQueueGetSignalAddress(mem_ptr_t queue, mem32_t ppSignal) { - cellSync->Todo("_cellSyncLFQueueGetPushPointer()"); + cellSync->Todo("_cellSyncLFQueueGetSignalAddress(queue_addr=0x%x, ppSignal_addr=0x%x)", queue.GetAddr(), ppSignal.GetAddr()); return CELL_OK; } -int _cellSyncLFQueueCompletePopPointer() +s32 _cellSyncLFQueueAttachLv2EventQueue(mem_ptr_t spus, u32 num, mem_ptr_t queue) { - cellSync->Todo("_cellSyncLFQueueCompletePopPointer()"); + cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); + return CELL_OK; +} + +s32 _cellSyncLFQueueDetachLv2EventQueue(mem_ptr_t spus, u32 num, mem_ptr_t queue) +{ + cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 4cdb1ab081..126bdc2ccb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -87,7 +87,7 @@ struct CellSyncQueue static_assert(sizeof(CellSyncQueue) == 32, "CellSyncQueue: wrong size"); -enum CellSyncQueueDirection : u32 +enum CellSyncQueueDirection : u32 // CellSyncLFQueueDirection { CELL_SYNC_QUEUE_SPU2SPU = 0, // SPU to SPU CELL_SYNC_QUEUE_SPU2PPU = 1, // SPU to PPU From e9ee084231a4e98e6f0011be5a9223cfc24700de Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Tue, 12 Aug 2014 04:15:20 +0800 Subject: [PATCH 317/499] Automatic-Pause at specified function calls, can be set up using "pause.bin" with rpcs3. You would need to find the function ids you wanna play with and write them reversed with Hex Editor. That's quite pity i have no knowledge about wxWidgets so there is no GUI to set up this. --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 47 ++++++++++++++++++++++++++++ rpcs3/Emu/SysCalls/ModuleManager.h | 3 +- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index e3f354b86e..3a0e882b87 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -263,6 +263,7 @@ void ModuleManager::init() m_mod_init.emplace_back(0x000e, sys_fs_init); initialized = true; } + LoadFuncPauses(); //Load the list of pause functions } ModuleManager::ModuleManager() : @@ -293,6 +294,17 @@ bool ModuleManager::IsLoadedFunc(u32 id) bool ModuleManager::CallFunc(u32 num) { + //Pause at specified function calls + for (u32 i = 0; i < m_funcs_pause_funcs.size(); ++i) + { + //Add Call Pause Here. This call is from BLJS10157 + if (num == m_funcs_pause_funcs[i]) + { + Emu.Pause(); //So it is now pause, yep. + LOG_ERROR(HLE, "TEST PAUSE AT %x", num); //Used Error + } + } + func_caller* func = nullptr; { std::lock_guard lock(m_funcs_lock); @@ -306,6 +318,7 @@ bool ModuleManager::CallFunc(u32 num) } } } + if (func) { (*func)(); @@ -362,6 +375,9 @@ void ModuleManager::UnloadModules() std::lock_guard lock(m_funcs_lock); m_modules_funcs_list.clear(); + + //unload pause list + m_funcs_pause_funcs.clear(); } Module* ModuleManager::GetModuleByName(const std::string& name) @@ -463,3 +479,34 @@ void ModuleManager::AddFunc(ModuleFunc *func) } } +//read pause.bin to get some function id that should auto-pause at call. +//you can make this file with Hex Editors, such as MadEdit.. +//you can find the function ids in \rpcs3\rpcs3\Emu\SysCalls\FuncList.cpp +//or just by searching the function name with grep within repo. +//Example if i want it to pause at 0x1051d134, i create the file with 34D15110(Hex, start from 00). +void ModuleManager::LoadFuncPauses(void) +{ + if (rExists("pause.bin")) + { + m_funcs_pause_funcs.reserve(16); + rFile list; + list.Open("pause.bin", rFile::read); + u32 num; + size_t fmax = list.Length(); + size_t fcur = 0; + list.Seek(0); + while (fcur <= fmax - sizeof(u32)) + { + list.Read(&num, sizeof(u32)); + fcur += sizeof(u32); + if (num == 0xFFFFFFFF) break; + m_funcs_pause_funcs.push_back(num); + LOG_WARNING(HLE, "Read Pause Function ID: %x", num); + } + list.Close(); + } + else + { + LOG_WARNING(HLE, "No Pause Function ID specified in pause.bin"); + } +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/ModuleManager.h b/rpcs3/Emu/SysCalls/ModuleManager.h index e4a85c9958..8b10ec24c7 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.h +++ b/rpcs3/Emu/SysCalls/ModuleManager.h @@ -10,6 +10,7 @@ class ModuleManager std::vector m_modules_funcs_list; std::vector m_mod_init; bool initialized; + std::vector m_funcs_pause_funcs; public: ModuleManager(); ~ModuleManager(); @@ -24,5 +25,5 @@ public: u32 GetFuncNumById(u32 id); Module* GetModuleByName(const std::string& name); Module* GetModuleById(u16 id); - + void LoadFuncPauses(void); }; \ No newline at end of file From fcab9b2f8e2e87ac7bfa3c6846b0404ab606f13e Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Tue, 12 Aug 2014 04:24:12 +0800 Subject: [PATCH 318/499] typo fix. --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 3a0e882b87..57f8085848 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -301,7 +301,7 @@ bool ModuleManager::CallFunc(u32 num) if (num == m_funcs_pause_funcs[i]) { Emu.Pause(); //So it is now pause, yep. - LOG_ERROR(HLE, "TEST PAUSE AT %x", num); //Used Error + LOG_ERROR(HLE, "AUTO PAUSE AT %x", num); //Used Error } } @@ -318,7 +318,7 @@ bool ModuleManager::CallFunc(u32 num) } } } - + if (func) { (*func)(); From 99b4b369357f1cdf4951322a0bbf9724dc5a9ab3 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 12 Aug 2014 01:10:18 +0400 Subject: [PATCH 319/499] Endianness fix (I'm idiot) --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 32 +++++++++++++++++-------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 0ee553c6f0..78162338a7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1031,12 +1031,15 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 return CELL_OK; } -s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 useEventQueue) +s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 useEventQueue) { cellSync->Todo("_cellSyncLFQueueGetPushPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); - return syncLFQueueGetPushPointer(queue, *pointer, isBlocking, useEventQueue); + s32 pointer_value; + s32 result = syncLFQueueGetPushPointer(queue, pointer_value, isBlocking, useEventQueue); + pointer = pointer_value; + return result; } s32 syncLFQueueGetPushPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) @@ -1045,13 +1048,16 @@ s32 syncLFQueueGetPushPointer2(mem_ptr_t queue, s32& pointer, u return CELL_OK; } -s32 _cellSyncLFQueueGetPushPointer2(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 useEventQueue) +s32 _cellSyncLFQueueGetPushPointer2(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 useEventQueue) { // arguments copied from _cellSyncLFQueueGetPushPointer cellSync->Todo("_cellSyncLFQueueGetPushPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); - return syncLFQueueGetPushPointer2(queue, *pointer, isBlocking, useEventQueue); + s32 pointer_value; + s32 result = syncLFQueueGetPushPointer2(queue, pointer_value, isBlocking, useEventQueue); + pointer = pointer_value; + return result; } s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal) @@ -1149,13 +1155,16 @@ s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 return CELL_OK; } -s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 arg4, u32 arg5) { // arguments copied from _cellSyncLFQueueGetPushPointer (arg4, arg5 not used) cellSync->Todo("_cellSyncLFQueueGetPopPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); - return syncLFQueueGetPopPointer(queue, *pointer, isBlocking, arg4, arg5); + s32 pointer_value; + s32 result = syncLFQueueGetPopPointer(queue, pointer_value, isBlocking, arg4, arg5); + pointer = pointer_value; + return result; } s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) @@ -1164,13 +1173,16 @@ s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u3 return CELL_OK; } -s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 arg4, u32 arg5) { // arguments copied from _cellSyncLFQueueGetPushPointer (arg5 not used) cellSync->Todo("_cellSyncLFQueueGetPopPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); - return syncLFQueueGetPopPointer2(queue, *pointer, isBlocking, arg4, arg5); + s32 pointer_value; + s32 result = syncLFQueueGetPopPointer2(queue, pointer_value, isBlocking, arg4, arg5); + pointer = pointer_value; + return result; } s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal, u32 noQueueFull) @@ -1451,13 +1463,13 @@ s32 _cellSyncLFQueueGetSignalAddress(mem_ptr_t queue, mem32_t p return CELL_OK; } -s32 _cellSyncLFQueueAttachLv2EventQueue(mem_ptr_t spus, u32 num, mem_ptr_t queue) +s32 _cellSyncLFQueueAttachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue) { cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); return CELL_OK; } -s32 _cellSyncLFQueueDetachLv2EventQueue(mem_ptr_t spus, u32 num, mem_ptr_t queue) +s32 _cellSyncLFQueueDetachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue) { cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); return CELL_OK; From 6383288311f907a09014a32581cce87610e7b8c9 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 9 Aug 2014 23:39:56 +0400 Subject: [PATCH 320/499] syncLFQueueInitialize --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 56 +++++++++++++++++++++---- rpcs3/Emu/SysCalls/Modules/cellSync.h | 39 ++++++++--------- 2 files changed, 69 insertions(+), 26 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index c19f1e27db..5a8cb71804 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1091,7 +1091,49 @@ int _cellSyncLFQueueDetachLv2EventQueue() void syncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) { + ea->m_h1 = 0; + ea->m_h2 = 0; + ea->m_h4 = 0; + ea->m_h5 = 0; + ea->m_h6 = 0; + ea->m_h8 = 0; + ea->m_size = size; + ea->m_depth = depth; + ea->m_buffer = (u64)buffer_addr; + ea->m_direction = direction; + for (u32 i = 0; i < sizeof(ea->m_hs) / sizeof(u16); i++) + { + ea->m_hs[i] = 0; + } + ea->m_eaSignal = (u64)eaSignal_addr; + if (direction == CELL_SYNC_QUEUE_ANY2ANY) + { + ea->m_h3 = 0; + ea->m_h7 = 0; + ea->m_buffer = (u64)buffer_addr | 1; + ea->m_bs[0] = -1; + ea->m_bs[1] = -1; + //m_bs[2] + //m_bs[3] + ea->m_v1 = -1; + ea->m_hs[0] = -1; + ea->m_hs[16] = -1; + ea->m_v2 = 0; + ea->m_v3 = 0; + } + else + { + //m_h3 + //m_h7 + ea->m_bs[0] = -1; // written as u32 + ea->m_bs[1] = -1; + ea->m_bs[2] = -1; + ea->m_bs[3] = -1; + ea->m_v1 = 0; + ea->m_v2 = 0; // written as u64 + ea->m_v3 = 0; + } } int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) @@ -1139,9 +1181,9 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 u32 old_value; while (true) { - const u32 old_data = ea->m_data1(); + const u32 old_data = ea->m_data(); CellSyncLFQueue new_data; - new_data.m_data1() = old_data; + new_data.m_data() = old_data; if (old_data) { @@ -1163,11 +1205,11 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 } } } - new_data.m_data1() = se32(1); + new_data.m_data() = se32(1); old_value = se32(1); } - if (InterlockedCompareExchange(&ea->m_data1(), new_data.m_data1(), old_data) == old_data) break; + if (InterlockedCompareExchange(&ea->m_data(), new_data.m_data(), old_data) == old_data) break; } if (old_value == se32(2)) @@ -1190,12 +1232,12 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 // prx: sync, zeroize u32 at 0x2c offset - InterlockedCompareExchange(&ea->m_data1(), 0, 0); - ea->m_data1() = 0; + InterlockedCompareExchange(&ea->m_data(), 0, 0); + ea->m_data() = 0; } // prx: sync - InterlockedCompareExchange(&ea->m_data1(), 0, 0); + InterlockedCompareExchange(&ea->m_data(), 0, 0); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index ff941b65d4..4cdb1ab081 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -97,26 +97,27 @@ enum CellSyncQueueDirection : u32 struct CellSyncLFQueue { - be_t m_v1; - be_t m_v2; - be_t m_size; - be_t m_depth; - be_t m_buffer; - be_t m_v5; - be_t m_direction; - be_t m_v6; - be_t m_v7; - be_t m_v8; - be_t m_v9; - be_t m_v10; - be_t m_v11; - be_t m_v12; - be_t m_v13; - be_t m_v14; - be_t m_eaSignal; - be_t reserved; + be_t m_h1; // 0x0 + be_t m_h2; // 0x2 + be_t m_h3; // 0x4 + be_t m_h4; // 0x6 + be_t m_h5; // 0x8 + be_t m_h6; // 0xA + be_t m_h7; // 0xC + be_t m_h8; // 0xE + be_t m_size; // 0x10 + be_t m_depth; // 0x14 + be_t m_buffer; // 0x18 + u8 m_bs[4]; // 0x20 + be_t m_direction; // 0x24 + be_t m_v1; // 0x28 + be_t m_sync; // 0x2C + be_t m_hs[32]; // 0x30 + be_t m_eaSignal;// 0x70 + be_t m_v2; // 0x78 + be_t m_v3; // 0x7C - volatile u32& m_data1() + volatile u32& m_data() { return *reinterpret_cast((u8*)this + 0x2c); } From 24019fa7b278ddb6ff90d1ef8238bee885e495fb Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 11 Aug 2014 22:35:34 +0400 Subject: [PATCH 321/499] CellSyncLFQueue draft --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 390 +++++++++++++++++------- rpcs3/Emu/SysCalls/Modules/cellSync.h | 2 +- 2 files changed, 286 insertions(+), 106 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 5a8cb71804..0ee553c6f0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1023,125 +1023,299 @@ s32 cellSyncQueueClear(mem_ptr_t queue) return CELL_OK; } -int cellSyncLFQueueGetEntrySize() +// LFQueue functions + +s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) { - cellSync->Todo("cellSyncLFQueueGetEntrySize()"); + // TODO return CELL_OK; } -int cellSyncLFQueueSize() +s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 useEventQueue) { - cellSync->Todo("cellSyncLFQueueSize()"); + cellSync->Todo("_cellSyncLFQueueGetPushPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); + + return syncLFQueueGetPushPointer(queue, *pointer, isBlocking, useEventQueue); +} + +s32 syncLFQueueGetPushPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) +{ + // TODO return CELL_OK; } -int cellSyncLFQueueClear() +s32 _cellSyncLFQueueGetPushPointer2(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 useEventQueue) { - cellSync->Todo("cellSyncLFQueueClear()"); + // arguments copied from _cellSyncLFQueueGetPushPointer + cellSync->Todo("_cellSyncLFQueueGetPushPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); + + return syncLFQueueGetPushPointer2(queue, *pointer, isBlocking, useEventQueue); +} + +s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal) +{ + // TODO + if (fpSendSignal) return fpSendSignal(0, 0); return CELL_OK; } -int _cellSyncLFQueueCompletePushPointer2() +s32 _cellSyncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal) { - cellSync->Todo("_cellSyncLFQueueCompletePushPointer2()"); + cellSync->Todo("_cellSyncLFQueueCompletePushPointer(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x)", + queue.GetAddr(), pointer, fpSendSignal.GetAddr()); + + return syncLFQueueCompletePushPointer(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }); +} + +s32 syncLFQueueCompletePushPointer2(mem_ptr_t queue, s32 pointer, std::function fpSendSignal) +{ + // TODO + if (fpSendSignal) return fpSendSignal(0, 0); return CELL_OK; } -int _cellSyncLFQueueGetPopPointer2() +s32 _cellSyncLFQueueCompletePushPointer2(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal) { - cellSync->Todo("_cellSyncLFQueueGetPopPointer2()"); - return CELL_OK; + // arguments copied from _cellSyncLFQueueCompletePushPointer + cellSync->Todo("_cellSyncLFQueueCompletePushPointer2(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x)", + queue.GetAddr(), pointer, fpSendSignal.GetAddr()); + + return syncLFQueueCompletePushPointer2(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }); } -int _cellSyncLFQueueCompletePushPointer() +s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, u32 isBlocking) { - cellSync->Todo("_cellSyncLFQueueCompletePushPointer()"); - return CELL_OK; -} + // cellSyncLFQueuePush has 1 in isBlocking param, cellSyncLFQueueTryPush has 0 + cellSync->Todo("_cellSyncLFQueuePushBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); -int _cellSyncLFQueueAttachLv2EventQueue() -{ - cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue()"); - return CELL_OK; -} - -int _cellSyncLFQueueGetPushPointer2() -{ - cellSync->Todo("_cellSyncLFQueueGetPushPointer2()"); - return CELL_OK; -} - -int _cellSyncLFQueueGetPopPointer() -{ - cellSync->Todo("_cellSyncLFQueueGetPopPointer()"); - return CELL_OK; -} - -int _cellSyncLFQueueCompletePopPointer2() -{ - cellSync->Todo("_cellSyncLFQueueCompletePopPointer2()"); - return CELL_OK; -} - -int _cellSyncLFQueueDetachLv2EventQueue() -{ - cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue()"); - return CELL_OK; -} - -void syncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) -{ - ea->m_h1 = 0; - ea->m_h2 = 0; - ea->m_h4 = 0; - ea->m_h5 = 0; - ea->m_h6 = 0; - ea->m_h8 = 0; - ea->m_size = size; - ea->m_depth = depth; - ea->m_buffer = (u64)buffer_addr; - ea->m_direction = direction; - for (u32 i = 0; i < sizeof(ea->m_hs) / sizeof(u16); i++) + if (!queue || !buffer_addr) { - ea->m_hs[i] = 0; + return CELL_SYNC_ERROR_NULL_POINTER; } - ea->m_eaSignal = (u64)eaSignal_addr; + if (queue.GetAddr() % 128 || buffer_addr % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + s32 position; + while (true) + { + s32 res; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + res = syncLFQueueGetPushPointer(queue, position, isBlocking, 0); + } + else + { + res = syncLFQueueGetPushPointer2(queue, position, isBlocking, 0); + } + + if (!isBlocking || res != CELL_SYNC_ERROR_AGAIN) + { + if (res) + { + return res; + } + break; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("_cellSyncLFQueuePushBody(queue_addr=0x%x) aborted", queue.GetAddr()); + return CELL_OK; + } + } + + s32 depth = (u32)queue->m_depth; + s32 size = (u32)queue->m_size; + memcpy(Memory + ((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position), Memory + buffer_addr, size); + + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + return syncLFQueueCompletePushPointer(queue, position, nullptr); + } + else + { + return syncLFQueueCompletePushPointer2(queue, position, nullptr); + } +} + +s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) +{ + // TODO + return CELL_OK; +} + +s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +{ + // arguments copied from _cellSyncLFQueueGetPushPointer (arg4, arg5 not used) + cellSync->Todo("_cellSyncLFQueueGetPopPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); + + return syncLFQueueGetPopPointer(queue, *pointer, isBlocking, arg4, arg5); +} + +s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) +{ + // TODO + return CELL_OK; +} + +s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +{ + // arguments copied from _cellSyncLFQueueGetPushPointer (arg5 not used) + cellSync->Todo("_cellSyncLFQueueGetPopPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); + + return syncLFQueueGetPopPointer2(queue, *pointer, isBlocking, arg4, arg5); +} + +s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal, u32 noQueueFull) +{ + // TODO + if (fpSendSignal) fpSendSignal(0, 0); + return CELL_OK; +} + +s32 _cellSyncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal, u32 noQueueFull) +{ + // arguments copied from _cellSyncLFQueueCompletePushPointer + unknown argument (noQueueFull taken from LFQueue2CompletePopPointer) + cellSync->Todo("_cellSyncLFQueueCompletePopPointer(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x, noQueueFull=%d)", + queue.GetAddr(), pointer, fpSendSignal.GetAddr(), noQueueFull); + + return syncLFQueueCompletePopPointer(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }, noQueueFull); +} + +s32 syncLFQueueCompletePopPointer2(mem_ptr_t queue, s32 pointer, std::function fpSendSignal, u32 noQueueFull) +{ + // TODO + if (fpSendSignal) fpSendSignal(0, 0); + return CELL_OK; +} + +s32 _cellSyncLFQueueCompletePopPointer2(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal, u32 noQueueFull) +{ + // arguments copied from _cellSyncLFQueueCompletePopPointer + cellSync->Todo("_cellSyncLFQueueCompletePopPointer2(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x, noQueueFull=%d)", + queue.GetAddr(), pointer, fpSendSignal.GetAddr(), noQueueFull); + + return syncLFQueueCompletePopPointer2(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }, noQueueFull); +} + +s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u32 isBlocking) +{ + // cellSyncLFQueuePop has 1 in isBlocking param, cellSyncLFQueueTryPop has 0 + cellSync->Todo("_cellSyncLFQueuePopBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); + + if (!queue || !buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 128 || buffer_addr % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + s32 position; + while (true) + { + s32 res; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + res = syncLFQueueGetPopPointer(queue, position, isBlocking, 0, 0); + } + else + { + res = syncLFQueueGetPopPointer2(queue, position, isBlocking, 0, 0); + } + + if (!isBlocking || res != CELL_SYNC_ERROR_AGAIN) + { + if (res) + { + return res; + } + break; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack + if (Emu.IsStopped()) + { + cellSync->Warning("_cellSyncLFQueuePopBody(queue_addr=0x%x) aborted", queue.GetAddr()); + return CELL_OK; + } + } + + s32 depth = (u32)queue->m_depth; + s32 size = (u32)queue->m_size; + memcpy(Memory + buffer_addr, Memory + ((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position), size); + + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + return syncLFQueueCompletePopPointer(queue, position, nullptr, 0); + } + else + { + return syncLFQueueCompletePopPointer2(queue, position, nullptr, 0); + } +} + +void syncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +{ + queue->m_h1 = 0; + queue->m_h2 = 0; + queue->m_h4 = 0; + queue->m_h5 = 0; + queue->m_h6 = 0; + queue->m_h8 = 0; + queue->m_size = size; + queue->m_depth = depth; + queue->m_buffer = (u64)buffer_addr; + queue->m_direction = direction; + for (u32 i = 0; i < sizeof(queue->m_hs) / sizeof(queue->m_hs[0]); i++) + { + queue->m_hs[i] = 0; + } + queue->m_eaSignal = (u64)eaSignal_addr; if (direction == CELL_SYNC_QUEUE_ANY2ANY) { - ea->m_h3 = 0; - ea->m_h7 = 0; - ea->m_buffer = (u64)buffer_addr | 1; - ea->m_bs[0] = -1; - ea->m_bs[1] = -1; + queue->m_h3 = 0; + queue->m_h7 = 0; + queue->m_buffer = (u64)buffer_addr | 1; + queue->m_bs[0] = -1; + queue->m_bs[1] = -1; //m_bs[2] //m_bs[3] - ea->m_v1 = -1; - ea->m_hs[0] = -1; - ea->m_hs[16] = -1; - ea->m_v2 = 0; - ea->m_v3 = 0; + queue->m_v1 = -1; + queue->m_hs[0] = -1; + queue->m_hs[16] = -1; + queue->m_v2 = 0; + queue->m_v3 = 0; } else { //m_h3 //m_h7 - ea->m_bs[0] = -1; // written as u32 - ea->m_bs[1] = -1; - ea->m_bs[2] = -1; - ea->m_bs[3] = -1; - ea->m_v1 = 0; - ea->m_v2 = 0; // written as u64 - ea->m_v3 = 0; + queue->m_bs[0] = -1; // written as u32 + queue->m_bs[1] = -1; + queue->m_bs[2] = -1; + queue->m_bs[3] = -1; + queue->m_v1 = 0; + queue->m_v2 = 0; // written as u64 + queue->m_v3 = 0; } } -int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +s32 cellSyncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) { - cellSync->Todo("cellSyncLFQueueInitialize(ea_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", - ea.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); + cellSync->Todo("cellSyncLFQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", + queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); - if (!ea) + if (!queue) { return CELL_SYNC_ERROR_NULL_POINTER; } @@ -1160,7 +1334,7 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 { return CELL_SYNC_ERROR_INVAL; } - if (ea.GetAddr() % 128 || buffer_addr % 16) + if (queue.GetAddr() % 128 || buffer_addr % 16) { return CELL_SYNC_ERROR_ALIGN; } @@ -1181,7 +1355,7 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 u32 old_value; while (true) { - const u32 old_data = ea->m_data(); + const u32 old_data = queue->m_data(); CellSyncLFQueue new_data; new_data.m_data() = old_data; @@ -1199,7 +1373,7 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 { for (u32 i = 0; i < sizeof(CellSyncLFQueue) / sizeof(u64); i++) { - if ((u64&)Memory[ea.GetAddr() + i * sizeof(u64)]) + if ((u64&)Memory[queue.GetAddr() + i * sizeof(u64)]) { return CELL_SYNC_ERROR_STAT; } @@ -1209,18 +1383,18 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 old_value = se32(1); } - if (InterlockedCompareExchange(&ea->m_data(), new_data.m_data(), old_data) == old_data) break; + if (InterlockedCompareExchange(&queue->m_data(), new_data.m_data(), old_data) == old_data) break; } if (old_value == se32(2)) { - if ((u32)ea->m_size != size || (u32)ea->m_depth != depth || (u64)ea->m_buffer != (u64)buffer_addr) + if ((u32)queue->m_size != size || (u32)queue->m_depth != depth || (u64)queue->m_buffer != (u64)buffer_addr) { return CELL_SYNC_ERROR_INVAL; } if (sdk_ver > 0x17ffff) { - if ((u64)ea->m_eaSignal != (u64)eaSignal_addr || (u32)ea->m_direction != direction) + if ((u64)queue->m_eaSignal != (u64)eaSignal_addr || (u32)queue->m_direction != direction) { return CELL_SYNC_ERROR_INVAL; } @@ -1229,57 +1403,63 @@ int cellSyncLFQueueInitialize(mem_ptr_t ea, u32 buffer_addr, u3 else { // prx: call internal function with same arguments - + syncLFQueueInitialize(queue, buffer_addr, size, depth, direction, eaSignal_addr); // prx: sync, zeroize u32 at 0x2c offset - InterlockedCompareExchange(&ea->m_data(), 0, 0); - ea->m_data() = 0; + InterlockedCompareExchange(&queue->m_data(), 0, 0); + queue->m_data() = 0; } // prx: sync - InterlockedCompareExchange(&ea->m_data(), 0, 0); + InterlockedCompareExchange(&queue->m_data(), 0, 0); return CELL_OK; } -int _cellSyncLFQueueGetSignalAddress() +s32 cellSyncLFQueueGetDirection(mem_ptr_t queue, mem32_t direction) { - cellSync->Todo("_cellSyncLFQueueGetSignalAddress()"); + cellSync->Todo("cellSyncLFQueueGetDirection(queue_addr=0x%x, direction_addr=0x%x)", queue.GetAddr(), direction.GetAddr()); return CELL_OK; } -int _cellSyncLFQueuePushBody() +s32 cellSyncLFQueueDepth(mem_ptr_t queue, mem32_t depth) { - cellSync->Todo("_cellSyncLFQueuePushBody()"); + cellSync->Todo("cellSyncLFQueueDepth(queue_addr=0x%x, depth_addr=0x%x)", queue.GetAddr(), depth.GetAddr()); return CELL_OK; } -int cellSyncLFQueueGetDirection() +s32 cellSyncLFQueueGetEntrySize(mem_ptr_t queue, mem32_t entry_size) { - cellSync->Todo("cellSyncLFQueueGetDirection()"); + cellSync->Todo("cellSyncLFQueueGetEntrySize(queue_addr=0x%x, entry_size_addr=0x%x)", queue.GetAddr(), entry_size.GetAddr()); return CELL_OK; } -int cellSyncLFQueueDepth() +s32 cellSyncLFQueueSize(mem_ptr_t queue, mem32_t size) { - cellSync->Todo("cellSyncLFQueueDepth()"); + cellSync->Todo("cellSyncLFQueueSize(queue_addr=0x%x, size_addr=0x%x)", queue.GetAddr(), size.GetAddr()); return CELL_OK; } -int _cellSyncLFQueuePopBody() +s32 cellSyncLFQueueClear(mem_ptr_t queue) { - cellSync->Todo("_cellSyncLFQueuePopBody()"); + cellSync->Todo("cellSyncLFQueueClear(queue_addr=0x%x)", queue.GetAddr()); return CELL_OK; } -int _cellSyncLFQueueGetPushPointer() +s32 _cellSyncLFQueueGetSignalAddress(mem_ptr_t queue, mem32_t ppSignal) { - cellSync->Todo("_cellSyncLFQueueGetPushPointer()"); + cellSync->Todo("_cellSyncLFQueueGetSignalAddress(queue_addr=0x%x, ppSignal_addr=0x%x)", queue.GetAddr(), ppSignal.GetAddr()); return CELL_OK; } -int _cellSyncLFQueueCompletePopPointer() +s32 _cellSyncLFQueueAttachLv2EventQueue(mem_ptr_t spus, u32 num, mem_ptr_t queue) { - cellSync->Todo("_cellSyncLFQueueCompletePopPointer()"); + cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); + return CELL_OK; +} + +s32 _cellSyncLFQueueDetachLv2EventQueue(mem_ptr_t spus, u32 num, mem_ptr_t queue) +{ + cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 4cdb1ab081..126bdc2ccb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -87,7 +87,7 @@ struct CellSyncQueue static_assert(sizeof(CellSyncQueue) == 32, "CellSyncQueue: wrong size"); -enum CellSyncQueueDirection : u32 +enum CellSyncQueueDirection : u32 // CellSyncLFQueueDirection { CELL_SYNC_QUEUE_SPU2SPU = 0, // SPU to SPU CELL_SYNC_QUEUE_SPU2PPU = 1, // SPU to PPU From fb80c1419c1435fdb1c286a08631df653023cb7c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 12 Aug 2014 01:10:18 +0400 Subject: [PATCH 322/499] Endianness fix (I'm idiot) --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 32 +++++++++++++++++-------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 0ee553c6f0..78162338a7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1031,12 +1031,15 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 return CELL_OK; } -s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 useEventQueue) +s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 useEventQueue) { cellSync->Todo("_cellSyncLFQueueGetPushPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); - return syncLFQueueGetPushPointer(queue, *pointer, isBlocking, useEventQueue); + s32 pointer_value; + s32 result = syncLFQueueGetPushPointer(queue, pointer_value, isBlocking, useEventQueue); + pointer = pointer_value; + return result; } s32 syncLFQueueGetPushPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) @@ -1045,13 +1048,16 @@ s32 syncLFQueueGetPushPointer2(mem_ptr_t queue, s32& pointer, u return CELL_OK; } -s32 _cellSyncLFQueueGetPushPointer2(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 useEventQueue) +s32 _cellSyncLFQueueGetPushPointer2(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 useEventQueue) { // arguments copied from _cellSyncLFQueueGetPushPointer cellSync->Todo("_cellSyncLFQueueGetPushPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); - return syncLFQueueGetPushPointer2(queue, *pointer, isBlocking, useEventQueue); + s32 pointer_value; + s32 result = syncLFQueueGetPushPointer2(queue, pointer_value, isBlocking, useEventQueue); + pointer = pointer_value; + return result; } s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal) @@ -1149,13 +1155,16 @@ s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 return CELL_OK; } -s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 arg4, u32 arg5) { // arguments copied from _cellSyncLFQueueGetPushPointer (arg4, arg5 not used) cellSync->Todo("_cellSyncLFQueueGetPopPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); - return syncLFQueueGetPopPointer(queue, *pointer, isBlocking, arg4, arg5); + s32 pointer_value; + s32 result = syncLFQueueGetPopPointer(queue, pointer_value, isBlocking, arg4, arg5); + pointer = pointer_value; + return result; } s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) @@ -1164,13 +1173,16 @@ s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u3 return CELL_OK; } -s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem_ptr_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 arg4, u32 arg5) { // arguments copied from _cellSyncLFQueueGetPushPointer (arg5 not used) cellSync->Todo("_cellSyncLFQueueGetPopPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); - return syncLFQueueGetPopPointer2(queue, *pointer, isBlocking, arg4, arg5); + s32 pointer_value; + s32 result = syncLFQueueGetPopPointer2(queue, pointer_value, isBlocking, arg4, arg5); + pointer = pointer_value; + return result; } s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal, u32 noQueueFull) @@ -1451,13 +1463,13 @@ s32 _cellSyncLFQueueGetSignalAddress(mem_ptr_t queue, mem32_t p return CELL_OK; } -s32 _cellSyncLFQueueAttachLv2EventQueue(mem_ptr_t spus, u32 num, mem_ptr_t queue) +s32 _cellSyncLFQueueAttachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue) { cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); return CELL_OK; } -s32 _cellSyncLFQueueDetachLv2EventQueue(mem_ptr_t spus, u32 num, mem_ptr_t queue) +s32 _cellSyncLFQueueDetachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue) { cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); return CELL_OK; From ce0a7fda5cfebb17e2fd822528b5eb23be0c88e6 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 12 Aug 2014 19:46:22 +0400 Subject: [PATCH 323/499] syncLFQueueGetPushPointer --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 128 ++++++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellSync.h | 5 + 2 files changed, 123 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 78162338a7..716fe5e679 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1027,8 +1027,106 @@ s32 cellSyncQueueClear(mem_ptr_t queue) s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) { - // TODO - return CELL_OK; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_PPU2SPU)) + { + return CELL_SYNC_ERROR_PERM; + } + + u32 var0 = 0; + s32 depth = (u32)queue->m_depth; + while (true) + { + while (true) + { + const u64 old_data = InterlockedCompareExchange(&queue->m_push1(), 0, 0); + CellSyncLFQueue new_queue; + new_queue.m_push1() = old_data; + + if (!var0) + { + new_queue.m_h7 = 0; + } + if (isBlocking && useEventQueue && *(u32*)queue->m_bs == -1) + { + return CELL_SYNC_ERROR_STAT; + } + + s32 var2 = (s16)new_queue.m_h8; + s32 res; + if (isBlocking && ((s32)(u16)new_queue.m_h5 != var2 || new_queue.m_h7.ToBE() != 0)) + { + res = CELL_SYNC_ERROR_BUSY; + } + else + { + var2 -= (s32)(u16)queue->m_h1; + if (var2 < 0) + { + var2 += depth * 2; + } + + if (var2 < depth) + { + pointer = (s16)new_queue.m_h8 + 1; + if (pointer >= depth * 2) + { + new_queue.m_h8 = 0; + } + else + { + new_queue.m_h8 = pointer; + } + res = CELL_OK; + } + else + { + if (!useEventQueue) + { + res = CELL_SYNC_ERROR_AGAIN; + if (!new_queue.m_h7.ToBE() || res) + { + return res; + } + break; + } + else if (!isBlocking) + { + continue; + } + else + { + res = CELL_OK; + new_queue.m_h7 = 3; + if (isBlocking != 3) + { + break; + } + } + } + } + + if (InterlockedCompareExchange(&queue->m_push1(), new_queue.m_push1(), old_data) == old_data) + { + if (!new_queue.m_h7.ToBE() || res) + { + return res; + } + break; + } + } + + u32 eq = (u32)queue->m_v3; // 0x7c + sys_event_data event; + assert(0); + // sys_event_queue_receive (seems event data is not used) + // assert if error returned (but continue anyway?) + var0 = 1; + + if (Emu.IsStopped()) + { + return CELL_OK; + } + } } s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 useEventQueue) @@ -1045,6 +1143,8 @@ s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem32_t poi s32 syncLFQueueGetPushPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) { // TODO + //pointer = 0; + assert(0); return CELL_OK; } @@ -1060,10 +1160,11 @@ s32 _cellSyncLFQueueGetPushPointer2(mem_ptr_t queue, mem32_t po return result; } -s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal) +s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal) { // TODO - if (fpSendSignal) return fpSendSignal(0, 0); + //if (fpSendSignal) return fpSendSignal(0, 0); + assert(0); return CELL_OK; } @@ -1075,10 +1176,11 @@ s32 _cellSyncLFQueueCompletePushPointer(mem_ptr_t queue, s32 po return syncLFQueueCompletePushPointer(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }); } -s32 syncLFQueueCompletePushPointer2(mem_ptr_t queue, s32 pointer, std::function fpSendSignal) +s32 syncLFQueueCompletePushPointer2(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal) { // TODO - if (fpSendSignal) return fpSendSignal(0, 0); + //if (fpSendSignal) return fpSendSignal(0, 0); + assert(0); return CELL_OK; } @@ -1152,6 +1254,8 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) { // TODO + //pointer = 0; + assert(0); return CELL_OK; } @@ -1170,6 +1274,8 @@ s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem32_t poin s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) { // TODO + //pointer = 0; + assert(0); return CELL_OK; } @@ -1185,10 +1291,11 @@ s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem32_t poi return result; } -s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, std::function fpSendSignal, u32 noQueueFull) +s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal, u32 noQueueFull) { // TODO - if (fpSendSignal) fpSendSignal(0, 0); + //if (fpSendSignal) fpSendSignal(0, 0); + assert(0); return CELL_OK; } @@ -1201,10 +1308,11 @@ s32 _cellSyncLFQueueCompletePopPointer(mem_ptr_t queue, s32 poi return syncLFQueueCompletePopPointer(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }, noQueueFull); } -s32 syncLFQueueCompletePopPointer2(mem_ptr_t queue, s32 pointer, std::function fpSendSignal, u32 noQueueFull) +s32 syncLFQueueCompletePopPointer2(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal, u32 noQueueFull) { // TODO - if (fpSendSignal) fpSendSignal(0, 0); + //if (fpSendSignal) fpSendSignal(0, 0); + assert(0); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 126bdc2ccb..6a731f8e84 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -121,6 +121,11 @@ struct CellSyncLFQueue { return *reinterpret_cast((u8*)this + 0x2c); } + + volatile u64& m_push1() + { + return *reinterpret_cast((u8*)this + 0x8); + } }; static_assert(sizeof(CellSyncLFQueue) == 128, "CellSyncLFQueue: wrong size"); \ No newline at end of file From 8095c34e4976a3b98371671d16764646a17210a9 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Tue, 12 Aug 2014 20:44:28 +0300 Subject: [PATCH 324/499] Don't set game's size info when it's a null pointer --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 13077e8b4b..ecf4884059 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -23,12 +23,15 @@ int cellGameBootCheck(mem32_t type, mem32_t attributes, mem_ptr_tWarning("cellGameBootCheck(type_addr=0x%x, attributes_addr=0x%x, size_addr=0x%x, dirName_addr=0x%x)", type.GetAddr(), attributes.GetAddr(), size.GetAddr(), dirName.GetAddr()); - // TODO: Use the free space of the computer's HDD where RPCS3 is being run. - size->hddFreeSizeKB = 40000000; // 40 GB + if (size) + { + // TODO: Use the free space of the computer's HDD where RPCS3 is being run. + size->hddFreeSizeKB = 40000000; // 40 GB - // TODO: Calculate data size for HG and DG games, if necessary. - size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; - size->sysSizeKB = 0; + // TODO: Calculate data size for HG and DG games, if necessary. + size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; + size->sysSizeKB = 0; + } vfsFile f("/app_home/PARAM.SFO"); if (!f.IsOpened()) From 7dc48425c10326383a7bd5ee39feb4203a827a27 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Tue, 12 Aug 2014 23:27:13 +0300 Subject: [PATCH 325/499] Improve content errors and fix access violation --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 38 +++++++++++++++++-------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 13077e8b4b..5ebef120af 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -418,23 +418,37 @@ int cellGameGetLocalWebContentPath() int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) { cellGame->Warning("cellGameContentErrorDialog(type=%d, errNeedSizeKB=%d, dirName_addr=0x%x)", type, errNeedSizeKB, dirName_addr); - - char* dirName = (char*)Memory.VirtualToRealAddr(dirName_addr); std::string errorName; - switch(type) + std::string errorMsg; + char* dirName; + + if (type == CELL_GAME_ERRDIALOG_NOSPACE || CELL_GAME_ERRDIALOG_NOSPACE_EXIT) { - case CELL_GAME_ERRDIALOG_BROKEN_GAMEDATA: errorName = "Game data is corrupted (can be continued)."; break; - case CELL_GAME_ERRDIALOG_BROKEN_HDDGAME: errorName = "HDD boot game is corrupted (can be continued)."; break; - case CELL_GAME_ERRDIALOG_NOSPACE: errorName = "Not enough available space (can be continued)."; break; - case CELL_GAME_ERRDIALOG_BROKEN_EXIT_GAMEDATA: errorName = "Game data is corrupted (terminate application)."; break; - case CELL_GAME_ERRDIALOG_BROKEN_EXIT_HDDGAME: errorName = "HDD boot game is corrupted (terminate application)."; break; - case CELL_GAME_ERRDIALOG_NOSPACE_EXIT: errorName = "Not enough available space (terminate application)."; break; - default: return CELL_GAME_ERROR_PARAM; + char* dirName = (char*)Memory.VirtualToRealAddr(dirName_addr); + } + + switch (type) + { + case CELL_GAME_ERRDIALOG_BROKEN_GAMEDATA: errorName = "Game data is corrupted (can be continued)."; break; + case CELL_GAME_ERRDIALOG_BROKEN_HDDGAME: errorName = "HDD boot game is corrupted (can be continued)."; break; + case CELL_GAME_ERRDIALOG_NOSPACE: errorName = "Not enough available space (can be continued)."; break; + case CELL_GAME_ERRDIALOG_BROKEN_EXIT_GAMEDATA: errorName = "Game data is corrupted (terminate application)."; break; + case CELL_GAME_ERRDIALOG_BROKEN_EXIT_HDDGAME: errorName = "HDD boot game is corrupted (terminate application)."; break; + case CELL_GAME_ERRDIALOG_NOSPACE_EXIT: errorName = "Not enough available space (terminate application)."; break; + default: return CELL_GAME_ERROR_PARAM; + } + + if (type == CELL_GAME_ERRDIALOG_NOSPACE || CELL_GAME_ERRDIALOG_NOSPACE_EXIT) + { + errorMsg = fmt::Format("ERROR: %s\nSpace needed: %d KB\nDirectory name: %s", errorName.c_str(), errNeedSizeKB, dirName); + } + else + { + errorMsg = fmt::Format("ERROR: %s", errorName.c_str()); } - std::string errorMsg = fmt::Format("%s\nSpace needed: %d KB\nDirectory name: %s", - errorName.c_str(), errNeedSizeKB, dirName); rMessageBox(errorMsg, "Error", rICON_ERROR | rOK); + return CELL_OK; } From 980dfc8f4be25d83c83c15552f990ae855ffe0eb Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Wed, 13 Aug 2014 09:39:45 +0300 Subject: [PATCH 326/499] Re-fixed content error dialogs --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index bc57e18af1..ddc766a2bf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -425,7 +425,7 @@ int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) std::string errorMsg; char* dirName; - if (type == CELL_GAME_ERRDIALOG_NOSPACE || CELL_GAME_ERRDIALOG_NOSPACE_EXIT) + if (type == CELL_GAME_ERRDIALOG_NOSPACE || type == CELL_GAME_ERRDIALOG_NOSPACE_EXIT) { char* dirName = (char*)Memory.VirtualToRealAddr(dirName_addr); } @@ -441,7 +441,7 @@ int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) default: return CELL_GAME_ERROR_PARAM; } - if (type == CELL_GAME_ERRDIALOG_NOSPACE || CELL_GAME_ERRDIALOG_NOSPACE_EXIT) + if (type == CELL_GAME_ERRDIALOG_NOSPACE || type == CELL_GAME_ERRDIALOG_NOSPACE_EXIT) { errorMsg = fmt::Format("ERROR: %s\nSpace needed: %d KB\nDirectory name: %s", errorName.c_str(), errNeedSizeKB, dirName); } From 1570bee4b81fc616e2a4e28b208463ecde1b7486 Mon Sep 17 00:00:00 2001 From: archshift Date: Wed, 13 Aug 2014 00:43:11 -0700 Subject: [PATCH 327/499] Add build directory to .gitignore Many people prefer to build out-of-source, especially in the ./build directory. This prevents it from being tracked by git. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 033f921069..d9060700ad 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,8 @@ *.dump *.wav +/build + /libs /ipch /rpcs3/Debug From 3095d01144c0cc092bec7ccaf7f13671dfe28010 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Wed, 13 Aug 2014 10:46:17 +0300 Subject: [PATCH 328/499] Create RWLock with default attributes, when attributes is a null pointer --- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 42 +++++++++++++++++---------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 98d8dd60b2..6e6d631618 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -10,26 +10,38 @@ s32 sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr { sys_rwlock.Warning("sys_rwlock_create(rw_lock_id_addr=0x%x, attr_addr=0x%x)", rw_lock_id.GetAddr(), attr.GetAddr()); - switch (attr->attr_protocol.ToBE()) + if (attr) { - case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Todo("SYS_SYNC_PRIORITY"); break; - case se(attr->attr_protocol, SYS_SYNC_RETRY): sys_rwlock.Error("SYS_SYNC_RETRY"); return CELL_EINVAL; - case se(attr->attr_protocol, SYS_SYNC_PRIORITY_INHERIT): sys_rwlock.Todo("SYS_SYNC_PRIORITY_INHERIT"); break; - case se(attr->attr_protocol, SYS_SYNC_FIFO): break; - default: return CELL_EINVAL; - } + switch (attr->attr_protocol.ToBE()) + { + case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Todo("SYS_SYNC_PRIORITY"); break; + case se(attr->attr_protocol, SYS_SYNC_RETRY): sys_rwlock.Error("SYS_SYNC_RETRY"); return CELL_EINVAL; + case se(attr->attr_protocol, SYS_SYNC_PRIORITY_INHERIT): sys_rwlock.Todo("SYS_SYNC_PRIORITY_INHERIT"); break; + case se(attr->attr_protocol, SYS_SYNC_FIFO): break; + default: return CELL_EINVAL; + } - if (attr->attr_pshared.ToBE() != se32(0x200)) + if (attr->attr_pshared.ToBE() != se32(0x200)) + { + sys_rwlock.Error("Invalid attr_pshared(0x%x)", (u32)attr->attr_pshared); + return CELL_EINVAL; + } + + rw_lock_id = sys_rwlock.GetNewId(new RWLock((u32)attr->attr_protocol, attr->name_u64)); + + sys_rwlock.Warning("*** rwlock created [%s] (protocol=0x%x): id = %d", + std::string(attr->name, 8).c_str(), (u32)attr->attr_protocol, rw_lock_id.GetValue()); + } + else { - sys_rwlock.Error("Invalid attr_pshared(0x%x)", (u32)attr->attr_pshared); - return CELL_EINVAL; + sys_rwlock.Todo("SYS_SYNC_PRIORITY"); + + rw_lock_id = sys_rwlock.GetNewId(new RWLock((u32)SYS_SYNC_PRIORITY, (u64)"default")); + + sys_rwlock.Warning("*** rwlock created [%s] (protocol=0x%x): id = %d", + std::string("default", 8).c_str(), (u32)SYS_SYNC_PRIORITY, rw_lock_id.GetValue()); } - rw_lock_id = sys_rwlock.GetNewId(new RWLock((u32)attr->attr_protocol, attr->name_u64)); - - sys_rwlock.Warning("*** rwlock created [%s] (protocol=0x%x): id = %d", - std::string(attr->name, 8).c_str(), (u32) attr->attr_protocol, rw_lock_id.GetValue()); - return CELL_OK; } From 1a92526ba006efcf319d05d4a3867dacf96a1dde Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Wed, 13 Aug 2014 10:57:55 +0300 Subject: [PATCH 329/499] Don't set game's size info in Patch and Data check --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 26 +++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index bc57e18af1..494963cd94 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -93,12 +93,15 @@ int cellGamePatchCheck(mem_ptr_t size, u32 reserved_addr) return CELL_GAME_ERROR_PARAM; } - // TODO: Use the free space of the computer's HDD where RPCS3 is being run. - size->hddFreeSizeKB = 40000000; // 40 GB + if (size) + { + // TODO: Use the free space of the computer's HDD where RPCS3 is being run. + size->hddFreeSizeKB = 40000000; // 40 GB - // TODO: Calculate data size for patch data, if necessary. - size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; - size->sysSizeKB = 0; + // TODO: Calculate data size for patch data, if necessary. + size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; + size->sysSizeKB = 0; + } vfsFile f("/app_home/PARAM.SFO"); if (!f.IsOpened()) @@ -138,12 +141,15 @@ int cellGameDataCheck(u32 type, const mem_list_ptr_t dirName, mem_ptr_thddFreeSizeKB = 40000000; //40 GB + if (size) + { + // TODO: Use the free space of the computer's HDD where RPCS3 is being run. + size->hddFreeSizeKB = 40000000; //40 GB - // TODO: Calculate data size for game data, if necessary. - size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; - size->sysSizeKB = 0; + // TODO: Calculate data size for game data, if necessary. + size->sizeKB = CELL_GAME_SIZEKB_NOTCALC; + size->sysSizeKB = 0; + } if (type == CELL_GAME_GAMETYPE_DISC) { From 03747e3106699ddb323827cf138ac3cdd4334803 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Wed, 13 Aug 2014 13:53:21 +0300 Subject: [PATCH 330/499] Fix redeclaration --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 7b1ae3b0d5..86611c8edb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -433,7 +433,7 @@ int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) if (type == CELL_GAME_ERRDIALOG_NOSPACE || type == CELL_GAME_ERRDIALOG_NOSPACE_EXIT) { - char* dirName = (char*)Memory.VirtualToRealAddr(dirName_addr); + dirName = (char*)Memory.VirtualToRealAddr(dirName_addr); } switch (type) From 8f4d8f82ed205d10aa14a90fa9518605f0e6177e Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Wed, 13 Aug 2014 15:25:13 +0300 Subject: [PATCH 331/499] License isn't always needed, fixes access violation --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index f686e4f293..7ae3e88654 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -36,12 +36,16 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) return CELL_ENOENT; } - std::string k_licensee_str; + std::string k_licensee_str = "0"; u8 k_licensee[0x10]; - for(int i = 0; i < 0x10; i++) + + if (k_licensee_addr) { - k_licensee[i] = Memory.Read8(k_licensee_addr + i); - k_licensee_str += fmt::Format("%02x", k_licensee[i]); + for (int i = 0; i < 0x10; i++) + { + k_licensee[i] = Memory.Read8(k_licensee_addr + i); + k_licensee_str += fmt::Format("%02x", k_licensee[i]); + } } sceNp->Warning("sceNpDrmIsAvailable: Found DRM license file at %s", drm_path.c_str()); From ea00c3a07f0b66b19a56a49e970db168cdfa89d8 Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Wed, 13 Aug 2014 20:54:27 +0800 Subject: [PATCH 332/499] Auto-Pause At Function Call and System Call. Would have a configuration window (with create the list, and enable/disable, being something similar to VFSManger and etc). Move the code to Debug::AutoPause in AutoPause.cpp and AutoPause.h It triggers currently in GameViewer, and would finally change to somewhere else. Well and now it is all enabled (Function call + System call) by default. --- Utilities/AutoPause.cpp | 130 +++++++++++++++++++++++++++ Utilities/AutoPause.h | 29 ++++++ rpcs3/Emu/SysCalls/ModuleManager.cpp | 47 ---------- rpcs3/Emu/SysCalls/ModuleManager.h | 2 - rpcs3/Emu/SysCalls/SysCalls.cpp | 4 + rpcs3/Gui/GameViewer.cpp | 4 + rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 ++ 8 files changed, 175 insertions(+), 49 deletions(-) create mode 100644 Utilities/AutoPause.cpp create mode 100644 Utilities/AutoPause.h diff --git a/Utilities/AutoPause.cpp b/Utilities/AutoPause.cpp new file mode 100644 index 0000000000..ad7e3ddd80 --- /dev/null +++ b/Utilities/AutoPause.cpp @@ -0,0 +1,130 @@ +#include "stdafx.h" +#include "AutoPause.h" + +using namespace Debug; + +//Even different from those tutorials on webpages, i use the method similiar from Log.h +//TODO:: Question: Does such a Singleton struct get fully deallocated after its pointer? +AutoPause* gAutoPause = nullptr; + +AutoPause& AutoPause::getInstance(void) +{ + if (!gAutoPause) + { + gAutoPause = new AutoPause(); + } + return *gAutoPause; +} + +//Still use binary format. Default Setting should be "disable all auto-pause". +AutoPause::AutoPause(void) +{ + m_pause_function.reserve(16); + m_pause_syscall.reserve(16); + initialized = false; + //Reload(false, false); + Reload(true, true); //Temporarily use auto enable +} + +//Notice: I would not allow to write the binary to file in this command. +AutoPause::~AutoPause(void) +{ + initialized = false; + m_pause_function.clear(); + m_pause_syscall.clear(); + m_pause_function_enable = false; + m_pause_syscall_enable = false; +} + +//Load Auto-Pause Configuration from file "pause.bin" +//This would be able to create in a GUI window. +void AutoPause::Reload(void) +{ + if (rExists("pause.bin")) + { + m_pause_function.clear(); + m_pause_function.reserve(16); + m_pause_syscall.clear(); + m_pause_syscall.reserve(16); + + rFile list; + list.Open("pause.bin", rFile::read); + //System calls ID and Function calls ID are all u32 iirc. + u32 num; + size_t fmax = list.Length(); + size_t fcur = 0; + list.Seek(0); + while (fcur <= fmax - sizeof(u32)) + { + list.Read(&num, sizeof(u32)); + fcur += sizeof(u32); + if (num == 0xFFFFFFFF) break; + + if (num < 1024) + { + //Less than 1024 - be regarded as a system call. + //emplace_back may not cause reductant move/copy operation. + m_pause_syscall.emplace_back(num); + LOG_WARNING(HLE, "Auto-Pause: Find System Call ID %x", num); + } + else + { + m_pause_function.emplace_back(num); + LOG_WARNING(HLE, "Auto-Pause: Find Function Call ID %x", num); + } + } + list.Close(); + } + else + { + LOG_WARNING(HLE, "No Pause ID specified in pause.bin, Auto-Pause would not act."); + } + + initialized = true; +} + +void AutoPause::Reload(bool enable_pause_syscall, bool enable_pause_function) +{ + Reload(); + m_pause_syscall_enable = enable_pause_syscall; + m_pause_function_enable = enable_pause_function; +} + +void AutoPause::TryPause(u32 code) { + if (code < 1024) + { + //Would first check Enable setting. Then the list length. + if ((!m_pause_syscall_enable) + || (m_pause_syscall.size() <= 0)) + { + return; + } + + for (u32 i = 0; i < m_pause_syscall.size(); ++i) + { + if (code == m_pause_syscall[i]) + { + Emu.Pause(); + LOG_ERROR(HLE, "Auto-Pause Triggered: System call %x", code); //Used Error + } + } + } + else + { + //Well similiar.. Seperate the list caused by possible setting difference. + if ((!m_pause_function_enable) + || (m_pause_function.size() <= 0)) + { + return; + } + + for (u32 i = 0; i < m_pause_function.size(); ++i) + { + if (code == m_pause_function[i]) + { + Emu.Pause(); + LOG_ERROR(HLE, "Auto-Pause Triggered: Function call %x", code); //Used Error + } + } + } +} \ No newline at end of file diff --git a/Utilities/AutoPause.h b/Utilities/AutoPause.h new file mode 100644 index 0000000000..b62ed47eb9 --- /dev/null +++ b/Utilities/AutoPause.h @@ -0,0 +1,29 @@ +#pragma once +#include "Utilities/Log.h" +#include "Utilities/rFile.h" +#include "Emu/System.h" + +//Regarded as a Debugger Enchantment +namespace Debug { + //To store the pause function/call id, and let those pause there. + //Would be with a GUI to configure those. + struct AutoPause + { + std::vector m_pause_syscall; + std::vector m_pause_function; + bool initialized; + bool m_pause_syscall_enable; + bool m_pause_function_enable; + + AutoPause(); + ~AutoPause(); + public: + static AutoPause& getInstance(void); + + void Reload(bool enable_pause_syscall, bool enable_pause_function); + + void Reload(void); + + void TryPause(u32 code); + }; +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 57f8085848..5e1d472032 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -263,7 +263,6 @@ void ModuleManager::init() m_mod_init.emplace_back(0x000e, sys_fs_init); initialized = true; } - LoadFuncPauses(); //Load the list of pause functions } ModuleManager::ModuleManager() : @@ -294,17 +293,6 @@ bool ModuleManager::IsLoadedFunc(u32 id) bool ModuleManager::CallFunc(u32 num) { - //Pause at specified function calls - for (u32 i = 0; i < m_funcs_pause_funcs.size(); ++i) - { - //Add Call Pause Here. This call is from BLJS10157 - if (num == m_funcs_pause_funcs[i]) - { - Emu.Pause(); //So it is now pause, yep. - LOG_ERROR(HLE, "AUTO PAUSE AT %x", num); //Used Error - } - } - func_caller* func = nullptr; { std::lock_guard lock(m_funcs_lock); @@ -375,9 +363,6 @@ void ModuleManager::UnloadModules() std::lock_guard lock(m_funcs_lock); m_modules_funcs_list.clear(); - - //unload pause list - m_funcs_pause_funcs.clear(); } Module* ModuleManager::GetModuleByName(const std::string& name) @@ -477,36 +462,4 @@ void ModuleManager::AddFunc(ModuleFunc *func) { m_modules_funcs_list.push_back(func); } -} - -//read pause.bin to get some function id that should auto-pause at call. -//you can make this file with Hex Editors, such as MadEdit.. -//you can find the function ids in \rpcs3\rpcs3\Emu\SysCalls\FuncList.cpp -//or just by searching the function name with grep within repo. -//Example if i want it to pause at 0x1051d134, i create the file with 34D15110(Hex, start from 00). -void ModuleManager::LoadFuncPauses(void) -{ - if (rExists("pause.bin")) - { - m_funcs_pause_funcs.reserve(16); - rFile list; - list.Open("pause.bin", rFile::read); - u32 num; - size_t fmax = list.Length(); - size_t fcur = 0; - list.Seek(0); - while (fcur <= fmax - sizeof(u32)) - { - list.Read(&num, sizeof(u32)); - fcur += sizeof(u32); - if (num == 0xFFFFFFFF) break; - m_funcs_pause_funcs.push_back(num); - LOG_WARNING(HLE, "Read Pause Function ID: %x", num); - } - list.Close(); - } - else - { - LOG_WARNING(HLE, "No Pause Function ID specified in pause.bin"); - } } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/ModuleManager.h b/rpcs3/Emu/SysCalls/ModuleManager.h index 8b10ec24c7..4ff1c96f40 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.h +++ b/rpcs3/Emu/SysCalls/ModuleManager.h @@ -10,7 +10,6 @@ class ModuleManager std::vector m_modules_funcs_list; std::vector m_mod_init; bool initialized; - std::vector m_funcs_pause_funcs; public: ModuleManager(); ~ModuleManager(); @@ -25,5 +24,4 @@ public: u32 GetFuncNumById(u32 id); Module* GetModuleByName(const std::string& name); Module* GetModuleById(u16 id); - void LoadFuncPauses(void); }; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index d908755f74..da13269249 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/AutoPause.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" @@ -919,6 +920,9 @@ void default_syscall() void SysCalls::DoSyscall(u32 code) { + //Auto-Pause using simple singleton. + Debug::AutoPause::getInstance().TryPause(code); + if(code < 1024) { (*sc_table[code])(); diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index f709031bb8..77d1b017c5 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Utilities/AutoPause.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" @@ -204,6 +205,9 @@ void GameViewer::DClick(wxListEvent& event) const std::string& path = m_path + m_game_data[i].root; Emu.Stop(); + + Debug::AutoPause::getInstance().Reload(); + Emu.GetVFS().Init(path); std::string local_path; if (Emu.GetVFS().GetDevice(path, local_path) && !Emu.BootGame(local_path)) { diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 37ce298aca..81ff0fdffb 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -27,6 +27,7 @@ + @@ -211,6 +212,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index b5828b0a70..034c7a7020 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -590,6 +590,9 @@ Emu\SysCalls\lv2 + + Utilities + @@ -1123,5 +1126,8 @@ Emu\SysCalls\lv2 + + Utilities + \ No newline at end of file From 134ee1eff0039161a74bc7127ffea75c95939b78 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Wed, 13 Aug 2014 17:00:37 +0300 Subject: [PATCH 333/499] Somewhat implemented cellGcmSetFlipImmediate Also a small change (optimization?) in cellGcmSetPrepareFlip() --- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index e36b976f48..a8310a7bc1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -440,7 +440,7 @@ s32 cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) { cellGcmSys->Log("cellGcmSetPrepareFlip(ctx=0x%x, id=0x%x)", ctxt.GetAddr(), id); - if(id >= 8) + if(id > 7) { cellGcmSys->Error("cellGcmSetPrepareFlip : CELL_GCM_ERROR_FAILURE"); return CELL_GCM_ERROR_FAILURE; @@ -700,9 +700,18 @@ int cellGcmInitSystemMode(u64 mode) return CELL_OK; } -int cellGcmSetFlipImmediate() +int cellGcmSetFlipImmediate(u8 id) { - UNIMPLEMENTED_FUNC(cellGcmSys); + cellGcmSys->Todo("cellGcmSetFlipImmediate(fid=0x%x)", id); + + if (id > 7) + { + cellGcmSys->Error("cellGcmSetFlipImmediate : CELL_GCM_ERROR_FAILURE"); + return CELL_GCM_ERROR_FAILURE; + } + + cellGcmSetFlipMode(id); + return CELL_OK; } From 2d29023931fa2d7874548508091d6d969d73327b Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Thu, 14 Aug 2014 01:55:35 +0800 Subject: [PATCH 334/499] Implemented Syscalls 177. Not tested (having nothing to trigger it) Added State changes for sys_spu_thread_group_* calls. Does almost nothing for 176 and skips the EPERM check for 177. --- rpcs3/Emu/SysCalls/SysCalls.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 160 ++++++++++++++++++++++++++++- rpcs3/Emu/SysCalls/lv2/sys_spu.h | 30 ++++++ 3 files changed, 188 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index d908755f74..7f8e4efcaa 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -192,8 +192,8 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_spu_thread_group_start), //173 (0x0AD) bind_func(sys_spu_thread_group_suspend), //174 (0x0AE) bind_func(sys_spu_thread_group_resume), //175 (0x0AF) - null_func,//bind_func(sys_spu_thread_group_yield) //176 (0x0B0) - null_func,//bind_func(sys_spu_thread_group_terminate) //177 (0x0B1) + bind_func(sys_spu_thread_group_yield), //176 (0x0B0) + bind_func(sys_spu_thread_group_terminate), //177 (0x0B1) bind_func(sys_spu_thread_group_join), //178 (0x0B2) null_func,//bind_func(sys_spu_thread_group_set_priority)//179 (0x0B3) null_func,//bind_func(sys_spu_thread_group_get_priority)//180 (0x0B4) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index efb280d2c0..7298643bc2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -160,10 +160,19 @@ s32 sys_spu_thread_group_destroy(u32 id) return CELL_ESRCH; } - if (group_info->lock) // ??? + //TODO: New method to check busy. and even maybe in other sys_spu_thread_group_ calls. + + //TODO: SPU_THREAD_GROUP lock may not be gracefully implemented now. + // But it could still be set using simple way? + //Check the state it should be in NOT_INITIALIZED / INITIALIZED. + if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_INITIALIZED) + && (group_info->m_state != SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED)) { - return CELL_EBUSY; + sc_spu.Error("sys_spu_thread_group_destroy(id=%d) is not in NOT_INITIALIZED / INITIALIZED, state=%d", id, group_info->m_state); + return CELL_ESTAT; //Indeed this should not be encountered. If program itself all right. } + //SET BUSY + for (u32 i = 0; i < group_info->list.size(); i++) { @@ -172,6 +181,9 @@ s32 sys_spu_thread_group_destroy(u32 id) Emu.GetCPU().RemoveThread(group_info->list[i]); } + group_info->m_state = SPU_THREAD_GROUP_STATUS_UNKNOWN; + //REMOVE BUSY + Emu.GetIdManager().RemoveID(id); return CELL_OK; } @@ -189,6 +201,14 @@ s32 sys_spu_thread_group_start(u32 id) // TODO: check group state + //Check for BUSY? + + //SET BUSY + + //Different from what i expected. Or else there would not be any with RUNNING. + group_info->m_state = SPU_THREAD_GROUP_STATUS_READY; //Added Group State + //Notice: I can not know the action preformed below be following the definition, but left unchanged. + for (u32 i = 0; i < group_info->list.size(); i++) { CPUThread* t = Emu.GetCPU().GetThread(group_info->list[i]); @@ -198,6 +218,9 @@ s32 sys_spu_thread_group_start(u32 id) } } + group_info->m_state = SPU_THREAD_GROUP_STATUS_RUNNING; //SPU Thread Group now all in running. + //REMOVE BUSY + return CELL_OK; } @@ -213,6 +236,17 @@ s32 sys_spu_thread_group_suspend(u32 id) } // TODO: check group state + //Experimental implementation for the state checking + if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_READY) + && (group_info->m_state != SPU_THREAD_GROUP_STATUS_RUNNING) + && (group_info->m_state != SPU_THREAD_GROUP_STATUS_WAITING)) + { + return CELL_ESTAT; + } + + //Check for BUSY? + + //SET BUSY for (u32 i = 0; i < group_info->list.size(); i++) { @@ -222,6 +256,18 @@ s32 sys_spu_thread_group_suspend(u32 id) } } + //Now the state changes. + if ((group_info->m_state == SPU_THREAD_GROUP_STATUS_READY) + || (group_info->m_state == SPU_THREAD_GROUP_STATUS_RUNNING)) + { + group_info->m_state = SPU_THREAD_GROUP_STATUS_SUSPENDED; + } + else if (group_info->m_state == SPU_THREAD_GROUP_STATUS_WAITING) + { + group_info->m_state = SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED; + } + //REMOVE BUSY + return CELL_OK; } @@ -237,6 +283,24 @@ s32 sys_spu_thread_group_resume(u32 id) } // TODO: check group state + if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_SUSPENDED) + && (group_info->m_state != SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED)) + { + return CELL_ESTAT; + } + + //Maybe check for BUSY + + //SET BUSY + + if (group_info->m_state == SPU_THREAD_GROUP_STATUS_SUSPENDED) + { + group_info->m_state = SPU_THREAD_GROUP_STATUS_READY; + } + else if (group_info->m_state == SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED) + { + group_info->m_state = SPU_THREAD_GROUP_STATUS_WAITING; + } for (u32 i = 0; i < group_info->list.size(); i++) { @@ -246,6 +310,94 @@ s32 sys_spu_thread_group_resume(u32 id) } } + if (group_info->m_state == SPU_THREAD_GROUP_STATUS_READY) + { + group_info->m_state = SPU_THREAD_GROUP_STATUS_RUNNING; + } + //REMOVE BUSY + + return CELL_OK; +} + +//176: Left doing nothing, indeed +s32 sys_spu_thread_group_yield(u32 id) +{ + sc_spu.Error("sys_spu_thread_group_yield(id=%d)", id); + + SpuGroupInfo* group_info; + if (!Emu.GetIdManager().GetIDData(id, group_info)) + { + return CELL_ESRCH; + } + + ////TODO::implement sys_spu_thread_group_yield. + //Sorry i don't know where to get the caller group. So Only checking. + //Removed some stupid comments. + + //Check the priority of the target spu group info. + //And check the state of target spu. + //if ((group_info->m_prio < current_thread.GetPrio()) + // ||(group_info->m_state != SPU_THREAD_GROUP_STATUS_READY)) + //{ + // return CELL_OK; + //} + + ////Maybe Check for BUSY + + ////SET BUSY + //for (u32 i = 0; i < current_group_info->list.size(); i++) + //{ + //if (CPUThread* t = Emu.GetCPU().GetThread(current_group_info->list[i])) + //{ + //Not finding anything that suite the yield test. Do nothing. + //t->WaitFor(group_info); + //} + //} + + //Do nothing now, so not entering the WAITING state. + //current_group_info->m_state = SPU_THREAD_GROUP_STATUS_WAITING; + + ////CLEAR BUSY + + return CELL_OK; +} + +//177: Left omit the EPERM check. +s32 sys_spu_thread_group_terminate(u32 id, int value) +{ + sc_spu.Error("sys_spu_thread_group_terminate(id=%d, value=%d)", id, value); + + SpuGroupInfo* group_info; + if (!Emu.GetIdManager().GetIDData(id, group_info)) + { + return CELL_ESRCH; + } + if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED) + && (group_info->m_state != SPU_THREAD_GROUP_STATUS_INITIALIZED) + && (group_info->m_state != SPU_THREAD_GROUP_STATUS_WAITING)) + { + return CELL_ESTAT; + } + //TODO::I don't know who should i be referred to check the EPERM. + //Also i don't know how to check that is a primary or not. so disabled the EPERM check. + //Removed some stupid comments made. + + //Attention. This action may not check for BUSY + + //SET BUSY + for (u32 i = 0; i < group_info->list.size(); i++) + { + if (CPUThread* t = Emu.GetCPU().GetThread(group_info->list[i])) + { + t->Stop(); + } + } + group_info->m_state = SPU_THREAD_GROUP_STATUS_INITIALIZED; // In initialized state but not running, maybe. + //Remove BUSY + + group_info->m_exit_status = value; + + ////TODO::implement sys_spu_thread_group_terminate return CELL_OK; } @@ -280,7 +432,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) return CELL_ESRCH; } - if (group_info->lock.exchange(1)) // acquire lock + if (group_info->lock.exchange(1)) // acquire lock TODO:: The lock might be replaced. { return CELL_EBUSY; } @@ -305,7 +457,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) } } - group_info->lock = 0; // release lock + group_info->lock = 0; // release lock TODO: this LOCK may be replaced. return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.h b/rpcs3/Emu/SysCalls/lv2/sys_spu.h index 3750f151a4..7f6399aa7b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.h @@ -2,6 +2,17 @@ u32 LoadSpuImage(vfsStream& stream, u32& spu_ep); +enum +{ + SYS_SPU_THREAD_GROUP_TYPE_NORMAL = 0x00, + SYS_SPU_THREAD_GROUP_TYPE_SEQUENTIAL = 0x01, + SYS_SPU_THREAD_GROUP_TYPE_SYSTEM = 0x02, + SYS_SPU_THREAD_GROUP_TYPE_MEMORY_FROM_CONTAINER = 0x04, + SYS_SPU_THREAD_GROUP_TYPE_NON_CONTEXT = 0x08, + SYS_SPU_THREAD_GROUP_TYPE_EXCLUSIVE_NON_CONTEXT = 0x18, + SYS_SPU_THREAD_GROUP_TYPE_COOPERATE_WITH_SYSTEM = 0x20 +}; + enum { SYS_SPU_THREAD_GROUP_JOIN_GROUP_EXIT = 0x0001, @@ -9,6 +20,18 @@ enum SYS_SPU_THREAD_GROUP_JOIN_TERMINATED = 0x0004 }; +enum { + SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED, + SPU_THREAD_GROUP_STATUS_INITIALIZED, + SPU_THREAD_GROUP_STATUS_READY, + SPU_THREAD_GROUP_STATUS_WAITING, + SPU_THREAD_GROUP_STATUS_SUSPENDED, + SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED, + SPU_THREAD_GROUP_STATUS_RUNNING, + SPU_THREAD_GROUP_STATUS_STOPPED, + SPU_THREAD_GROUP_STATUS_UNKNOWN +}; + enum { SYS_SPU_SEGMENT_TYPE_COPY = 0x0001, @@ -65,6 +88,8 @@ struct SpuGroupInfo int m_type; int m_ct; u32 m_count; + int m_state; //SPU Thread Group State. + int m_exit_status; SpuGroupInfo(const std::string& name, u32 num, int prio, int type, u32 ct) : m_name(name) @@ -74,8 +99,11 @@ struct SpuGroupInfo , lock(0) , m_count(num) { + m_state = SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED; //Before all the nums done, it is not initialized. list.resize(256); for (auto& v : list) v = 0; + m_state = SPU_THREAD_GROUP_STATUS_INITIALIZED; //Then Ready to Start. Cause Reference use New i can only place this here. + m_exit_status = 0; } }; @@ -88,6 +116,8 @@ s32 sys_spu_thread_group_destroy(u32 id); s32 sys_spu_thread_group_start(u32 id); s32 sys_spu_thread_group_suspend(u32 id); s32 sys_spu_thread_group_resume(u32 id); +s32 sys_spu_thread_group_yield(u32 id); +s32 sys_spu_thread_group_terminate(u32 id, int value); s32 sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t attr); s32 sys_spu_thread_create(mem32_t thread_id, mem32_t entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr); s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status); From 63088515b49e118ffad192b73163ea1dbff27899 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Wed, 13 Aug 2014 21:01:09 +0300 Subject: [PATCH 335/499] Actually fix sys_rwlock_create --- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 45 +++++++++++---------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 6e6d631618..74987422fd 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -10,38 +10,29 @@ s32 sys_rwlock_create(mem32_t rw_lock_id, mem_ptr_t attr { sys_rwlock.Warning("sys_rwlock_create(rw_lock_id_addr=0x%x, attr_addr=0x%x)", rw_lock_id.GetAddr(), attr.GetAddr()); - if (attr) + if (!attr) + return CELL_EFAULT; + + switch (attr->attr_protocol.ToBE()) { - switch (attr->attr_protocol.ToBE()) - { - case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Todo("SYS_SYNC_PRIORITY"); break; - case se(attr->attr_protocol, SYS_SYNC_RETRY): sys_rwlock.Error("SYS_SYNC_RETRY"); return CELL_EINVAL; - case se(attr->attr_protocol, SYS_SYNC_PRIORITY_INHERIT): sys_rwlock.Todo("SYS_SYNC_PRIORITY_INHERIT"); break; - case se(attr->attr_protocol, SYS_SYNC_FIFO): break; - default: return CELL_EINVAL; - } - - if (attr->attr_pshared.ToBE() != se32(0x200)) - { - sys_rwlock.Error("Invalid attr_pshared(0x%x)", (u32)attr->attr_pshared); - return CELL_EINVAL; - } - - rw_lock_id = sys_rwlock.GetNewId(new RWLock((u32)attr->attr_protocol, attr->name_u64)); - - sys_rwlock.Warning("*** rwlock created [%s] (protocol=0x%x): id = %d", - std::string(attr->name, 8).c_str(), (u32)attr->attr_protocol, rw_lock_id.GetValue()); + case se(attr->attr_protocol, SYS_SYNC_PRIORITY): sys_rwlock.Todo("SYS_SYNC_PRIORITY"); break; + case se(attr->attr_protocol, SYS_SYNC_RETRY): sys_rwlock.Error("SYS_SYNC_RETRY"); return CELL_EINVAL; + case se(attr->attr_protocol, SYS_SYNC_PRIORITY_INHERIT): sys_rwlock.Todo("SYS_SYNC_PRIORITY_INHERIT"); break; + case se(attr->attr_protocol, SYS_SYNC_FIFO): break; + default: return CELL_EINVAL; } - else + + if (attr->attr_pshared.ToBE() != se32(0x200)) { - sys_rwlock.Todo("SYS_SYNC_PRIORITY"); - - rw_lock_id = sys_rwlock.GetNewId(new RWLock((u32)SYS_SYNC_PRIORITY, (u64)"default")); - - sys_rwlock.Warning("*** rwlock created [%s] (protocol=0x%x): id = %d", - std::string("default", 8).c_str(), (u32)SYS_SYNC_PRIORITY, rw_lock_id.GetValue()); + sys_rwlock.Error("Invalid attr_pshared(0x%x)", (u32)attr->attr_pshared); + return CELL_EINVAL; } + rw_lock_id = sys_rwlock.GetNewId(new RWLock((u32)attr->attr_protocol, attr->name_u64)); + + sys_rwlock.Warning("*** rwlock created [%s] (protocol=0x%x): id = %d", + std::string(attr->name, 8).c_str(), (u32)attr->attr_protocol, rw_lock_id.GetValue()); + return CELL_OK; } From 91b4596c0bccefabdd9ad3d8f9317a05bfa1bdde Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Wed, 13 Aug 2014 22:29:38 +0300 Subject: [PATCH 336/499] Implement sceNpDrmIsAvailable2 --- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 66 +++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 7ae3e88654..f8588f7c6d 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -97,7 +97,71 @@ int sceNpDrmIsAvailable(u32 k_licensee_addr, u32 drm_path_addr) int sceNpDrmIsAvailable2(u32 k_licensee_addr, u32 drm_path_addr) { - UNIMPLEMENTED_FUNC(sceNp); + sceNp->Warning("sceNpDrmIsAvailable2(k_licensee_addr=0x%x, drm_path_addr=0x%x)", k_licensee_addr, drm_path_addr); + + std::string drm_path = Memory.ReadString(drm_path_addr); + if (!Emu.GetVFS().ExistsFile(drm_path)) + { + sceNp->Warning("sceNpDrmIsAvailable2(): '%s' not found", drm_path.c_str()); + return CELL_ENOENT; + } + + std::string k_licensee_str = "0"; + u8 k_licensee[0x10]; + + if (k_licensee_addr) + { + for (int i = 0; i < 0x10; i++) + { + k_licensee[i] = Memory.Read8(k_licensee_addr + i); + k_licensee_str += fmt::Format("%02x", k_licensee[i]); + } + } + + sceNp->Warning("sceNpDrmIsAvailable2: Found DRM license file at %s", drm_path.c_str()); + sceNp->Warning("sceNpDrmIsAvailable2: Using k_licensee 0x%s", k_licensee_str.c_str()); + + // Set the necessary file paths. + std::string drm_file_name = fmt::AfterLast(drm_path, '/'); + + // TODO: Make more explicit what this actually does (currently it copies "XXXXXXXX" from drm_path (== "/dev_hdd0/game/XXXXXXXXX/*" assumed) + std::string titleID = drm_path.substr(15, 9); + + // TODO: These shouldn't use current dir + std::string enc_drm_path = drm_path; + std::string dec_drm_path = "/dev_hdd1/" + titleID + "/" + drm_file_name; + std::string rap_path = "/dev_usb000/"; + + // Search dev_usb000 for a compatible RAP file. + vfsDir *raps_dir = new vfsDir(rap_path); + if (!raps_dir->IsOpened()) + sceNp->Warning("sceNpDrmIsAvailable2: Can't find RAP file for DRM!"); + else + { + const std::vector &entries = raps_dir->GetEntries(); + for (auto &entry : entries) + { + if (entry.name.find(titleID) != std::string::npos) + { + rap_path += entry.name; + break; + } + } + } + + // Create a new directory under dev_hdd1/titleID to hold the decrypted data. + // TODO: These shouldn't use current dir + std::string tmp_dir = "./dev_hdd1/" + titleID; + if (!rExists(tmp_dir)) + rMkdir("./dev_hdd1/" + titleID); + + // Decrypt this EDAT using the supplied k_licensee and matching RAP file. + std::string enc_drm_path_local, dec_drm_path_local, rap_path_local; + Emu.GetVFS().GetDevice(enc_drm_path, enc_drm_path_local); + Emu.GetVFS().GetDevice(dec_drm_path, dec_drm_path_local); + Emu.GetVFS().GetDevice(rap_path, rap_path_local); + + DecryptEDAT(enc_drm_path_local, dec_drm_path_local, 8, rap_path_local, k_licensee, false); return CELL_OK; } From 369c667faafc9f27065d9990accaacc93d3d6b91 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 14 Aug 2014 01:39:54 +0400 Subject: [PATCH 337/499] syncLFQueueCompletePushPointer --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 204 ++++++++++++++++++------ rpcs3/Emu/SysCalls/Modules/cellSync.h | 10 ++ 2 files changed, 164 insertions(+), 50 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 716fe5e679..04013930dd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -584,11 +584,7 @@ s32 cellSyncQueuePush(mem_ptr_t queue, u32 buffer_addr) const u32 size = (u32)queue->m_size; const u32 depth = (u32)queue->m_depth; - if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) - { - cellSync->Error("cellSyncQueuePush(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); - Emu.Pause(); - } + assert(((u32)queue->m_v1 & 0xffffff) <= depth && ((u32)queue->m_v2 & 0xffffff) <= depth); u32 position; while (true) @@ -652,11 +648,7 @@ s32 cellSyncQueueTryPush(mem_ptr_t queue, u32 buffer_addr) const u32 size = (u32)queue->m_size; const u32 depth = (u32)queue->m_depth; - if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) - { - cellSync->Error("cellSyncQueueTryPush(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); - Emu.Pause(); - } + assert(((u32)queue->m_v1 & 0xffffff) <= depth && ((u32)queue->m_v2 & 0xffffff) <= depth); u32 position; while (true) @@ -707,11 +699,7 @@ s32 cellSyncQueuePop(mem_ptr_t queue, u32 buffer_addr) const u32 size = (u32)queue->m_size; const u32 depth = (u32)queue->m_depth; - if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) - { - cellSync->Error("cellSyncQueuePop(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); - Emu.Pause(); - } + assert(((u32)queue->m_v1 & 0xffffff) <= depth && ((u32)queue->m_v2 & 0xffffff) <= depth); u32 position; while (true) @@ -775,11 +763,7 @@ s32 cellSyncQueueTryPop(mem_ptr_t queue, u32 buffer_addr) const u32 size = (u32)queue->m_size; const u32 depth = (u32)queue->m_depth; - if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) - { - cellSync->Error("cellSyncQueueTryPop(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); - Emu.Pause(); - } + assert(((u32)queue->m_v1 & 0xffffff) <= depth && ((u32)queue->m_v2 & 0xffffff) <= depth); u32 position; while (true) @@ -830,11 +814,7 @@ s32 cellSyncQueuePeek(mem_ptr_t queue, u32 buffer_addr) const u32 size = (u32)queue->m_size; const u32 depth = (u32)queue->m_depth; - if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) - { - cellSync->Error("cellSyncQueuePeek(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); - Emu.Pause(); - } + assert(((u32)queue->m_v1 & 0xffffff) <= depth && ((u32)queue->m_v2 & 0xffffff) <= depth); u32 position; while (true) @@ -890,11 +870,7 @@ s32 cellSyncQueueTryPeek(mem_ptr_t queue, u32 buffer_addr) const u32 size = (u32)queue->m_size; const u32 depth = (u32)queue->m_depth; - if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) - { - cellSync->Error("cellSyncQueueTryPeek(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); - Emu.Pause(); - } + assert(((u32)queue->m_v1 & 0xffffff) <= depth && ((u32)queue->m_v2 & 0xffffff) <= depth); u32 position; while (true) @@ -944,11 +920,7 @@ s32 cellSyncQueueSize(mem_ptr_t queue) const u32 count = (u32)queue->m_v2 & 0xffffff; const u32 depth = (u32)queue->m_depth; - if (((u32)queue->m_v1 & 0xffffff) > depth || count > depth) - { - cellSync->Error("cellSyncQueueSize(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); - Emu.Pause(); - } + assert(((u32)queue->m_v1 & 0xffffff) <= depth && count <= depth); return count; } @@ -967,11 +939,7 @@ s32 cellSyncQueueClear(mem_ptr_t queue) } const u32 depth = (u32)queue->m_depth; - if (((u32)queue->m_v1 & 0xffffff) > depth || ((u32)queue->m_v2 & 0xffffff) > depth) - { - cellSync->Error("cellSyncQueueSize(queue_addr=0x%x): m_depth limit broken", queue.GetAddr()); - Emu.Pause(); - } + assert(((u32)queue->m_v1 & 0xffffff) <= depth && ((u32)queue->m_v2 & 0xffffff) <= depth); // TODO: optimize if possible while (true) @@ -1038,6 +1006,11 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 { while (true) { + if (Emu.IsStopped()) + { + return -1; + } + const u64 old_data = InterlockedCompareExchange(&queue->m_push1(), 0, 0); CellSyncLFQueue new_queue; new_queue.m_push1() = old_data; @@ -1118,14 +1091,9 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 u32 eq = (u32)queue->m_v3; // 0x7c sys_event_data event; assert(0); - // sys_event_queue_receive (seems event data is not used) + // run sys_event_queue_receive (seems event data is not used) // assert if error returned (but continue anyway?) var0 = 1; - - if (Emu.IsStopped()) - { - return CELL_OK; - } } } @@ -1162,10 +1130,146 @@ s32 _cellSyncLFQueueGetPushPointer2(mem_ptr_t queue, mem32_t po s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal) { - // TODO - //if (fpSendSignal) return fpSendSignal(0, 0); - assert(0); - return CELL_OK; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_PPU2SPU)) + { + return CELL_SYNC_ERROR_PERM; + } + + s32 depth = (u32)queue->m_depth; + + while (true) + { + const u32 old_data = InterlockedCompareExchange(&queue->m_push2(), 0, 0); + CellSyncLFQueue new_queue; + new_queue.m_push2() = old_data; + + const u32 old_data2 = queue->m_push3(); + + s32 var1 = pointer - (u16)queue->m_h5; + if (var1 < 0) + { + var1 += depth * 2; + } + + s32 var2 = (s32)(s16)queue->m_h4 - (s32)(u16)queue->m_h1; + if (var2 < 0) + { + var2 += depth * 2; + } + + s32 var9_ = (15 - var1) & 0x3f; + // calculate (1 slw (15 - var1)) + if (var9_ & 0x30) + { + var9_ = 0; + } + else + { + var9_ = 1 << var9_; + } + s32 var9 = ~(u16)var9_ & ~(u16)queue->m_h6; + if ((u16)var9) + { + var9 = __lzcnt16((u16)var9); + } + else + { + var9 = 16; + } + + s32 var5 = (s32)(u16)queue->m_h6 | var9_; + if (var9 & 0x30) + { + var5 = 0; + } + else + { + var5 <<= var9; + } + + s32 var3 = (u16)queue->m_h5 + var9; + if (var3 >= depth * 2) + { + var3 -= depth * 2; + } + + const u16 pack = new_queue.m_hs[0]; // three packed 5-bit fields + + s32 var4 = ((pack >> 10) & 0x1f) - ((pack >> 5) & 0x1f); + if (var4 < 0) + { + var4 += 0x1e; + } + + u32 var6; + if (var2 + var4 <= 15 && ((pack >> 10) & 0x1f) != (pack & 0x1f)) + { + s32 var8 = (pack & 0x1f) - ((pack >> 10) & 0x1f); + if (var8 < 0) + { + var8 += 0x1e; + } + + if (var9 > 1 && (u32)var8 > 1) + { + assert(16 - var2 <= 1); + } + + s32 var11 = (pack >> 10) & 0x1f; + if (var11 >= 15) + { + var11 -= 15; + } + + u16 var12 = (pack >> 10) & 0x1f; + if (var12 == 0x1d) + { + var12 = 0; + } + else + { + var12 = (var12 + 1) << 10; + } + + new_queue.m_hs[0] = (pack & 0x83ff) | var12; + var6 = (u16)queue->m_hs[1 + 2 * var11]; + } + else + { + var6 = -1; + } + + s32 var7 = (var3 << 16) | (var5 & 0xffff); + + if (InterlockedCompareExchange(&queue->m_push2(), new_queue.m_push2(), old_data) == old_data) + { + // break; + assert(var2 + var4 < 16); + if (var6 == -1) + { + if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) + { + return CELL_OK; + } + } + else + { + const u16 pack2 = queue->m_hs[0]; + if ((pack2 & 0x1f) == ((pack >> 10) & 0x1f)) + { + if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) + { + assert(fpSendSignal); + return fpSendSignal((u64)queue->m_eaSignal, var6); + } + } + else + { + assert(queue->m_push3() == old_data2); + } + } + } + } } s32 _cellSyncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 6a731f8e84..9ddea45f02 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -126,6 +126,16 @@ struct CellSyncLFQueue { return *reinterpret_cast((u8*)this + 0x8); } + + volatile u32& m_push2() + { + return *reinterpret_cast((u8*)this + 0x30); + } + + volatile u32& m_push3() + { + return *reinterpret_cast((u8*)this + 0x8); + } }; static_assert(sizeof(CellSyncLFQueue) == 128, "CellSyncLFQueue: wrong size"); \ No newline at end of file From c9cd80c0890e66475c74c87a34aab207c7e23aac Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 14 Aug 2014 16:02:01 +0400 Subject: [PATCH 338/499] Memory bugs fixed --- rpcs3/Emu/Cell/SPUThread.h | 6 ++-- rpcs3/Emu/FS/vfsStreamMemory.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 4 +-- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 35 +++++++++++--------- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 2 +- 8 files changed, 33 insertions(+), 30 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index c6c3e95470..e00a086ed5 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -658,13 +658,13 @@ public: { case MFC_PUT_CMD: { - memcpy(Memory + ea, Memory + dmac.ls_offset + lsa, size); + memcpy(Memory + ea, Memory + (dmac.ls_offset + lsa), size); return; } case MFC_GET_CMD: { - memcpy(Memory + dmac.ls_offset + lsa, Memory + ea, size); + memcpy(Memory + (dmac.ls_offset + lsa), Memory + ea, size); return; } @@ -841,7 +841,7 @@ public: { const u32 last_q = (buf[last].hi == reservation.data[last].hi); - if (InterlockedCompareExchange64((volatile long long*)(Memory + (u32)ea + last * 16 + last_q * 8), + if (InterlockedCompareExchange64((volatile long long*)(Memory + ((u32)ea + last * 16 + last_q * 8)), buf[last]._u64[last_q], reservation.data[last]._u64[last_q]) == reservation.data[last]._u64[last_q]) { MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); diff --git a/rpcs3/Emu/FS/vfsStreamMemory.cpp b/rpcs3/Emu/FS/vfsStreamMemory.cpp index d8534193f0..03a71b5d38 100644 --- a/rpcs3/Emu/FS/vfsStreamMemory.cpp +++ b/rpcs3/Emu/FS/vfsStreamMemory.cpp @@ -32,7 +32,7 @@ u64 vfsStreamMemory::Write(const void* src, u64 size) size = GetSize() - Tell(); } - memcpy(Memory + m_addr + Tell(), (void*)src, size); + memcpy(Memory + (m_addr + Tell()), (void*)src, size); return vfsStream::Write(src, size); } @@ -44,7 +44,7 @@ u64 vfsStreamMemory::Read(void* dst, u64 size) size = GetSize() - Tell(); } - memcpy(dst, Memory + m_addr + Tell(), size); + memcpy(dst, Memory + (m_addr + Tell()), size); return vfsStream::Read(dst, size); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index a8310a7bc1..c10e46ff4a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -461,7 +461,7 @@ s32 cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) const s32 res = ctxt->current - ctxt->begin - ctrl.put; - memmove(Memory + ctxt->begin, Memory + ctxt->current - res, res); + memmove(Memory + ctxt->begin, Memory + (ctxt->current - res), res); ctxt->current = ctxt->begin + res; @@ -1146,7 +1146,7 @@ int cellGcmCallback(u32 context_addr, u32 count) const s32 res = ctx.current - ctx.begin - ctrl.put; - memmove(Memory + ctx.begin, Memory + ctx.current - res, res); + memmove(Memory + ctx.begin, Memory + (ctx.current - res), res); ctx.current = ctx.begin + res; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index bf904a2170..c29d15c44c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -198,7 +198,7 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m { const int dstOffset = i * bytesPerLine; const int srcOffset = width * nComponents * i; - memcpy(Memory + data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize); + memcpy(Memory + (data.GetAddr() + dstOffset), &image.get()[srcOffset], linesize); } } else @@ -226,7 +226,7 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m output[j + 2] = image.get()[srcOffset + j + 1]; output[j + 3] = image.get()[srcOffset + j + 2]; } - memcpy(Memory + data.GetAddr() + dstOffset, output, linesize); + memcpy(Memory + (data.GetAddr() + dstOffset), output, linesize); } free(output); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index 9c0ccd9377..be776e7456 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -206,7 +206,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m { const int dstOffset = i * bytesPerLine; const int srcOffset = width * nComponents * (flip ? height - i - 1 : i); - memcpy(Memory + data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize); + memcpy(Memory + (data.GetAddr() + dstOffset), &image.get()[srcOffset], linesize); } } else @@ -236,7 +236,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m output[j + 2] = image.get()[srcOffset + j + 1]; output[j + 3] = image.get()[srcOffset + j + 2]; } - memcpy(Memory + data.GetAddr() + dstOffset, output, linesize); + memcpy(Memory + (data.GetAddr() + dstOffset), output, linesize); } free(output); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 735054e89d..d7a03013e7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -240,7 +240,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m { const int dstOffset = i * bytesPerLine; const int srcOffset = width * nComponents * (flip ? height - i - 1 : i); - memcpy(Memory + data.GetAddr() + dstOffset, &image.get()[srcOffset], linesize); + memcpy(Memory + (data.GetAddr() + dstOffset), &image.get()[srcOffset], linesize); } } else @@ -270,7 +270,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, mem8_ptr_t data, const m output[j + 2] = image.get()[srcOffset + j + 1]; output[j + 3] = image.get()[srcOffset + j + 2]; } - memcpy(Memory + data.GetAddr() + dstOffset, output, linesize); + memcpy(Memory + (data.GetAddr() + dstOffset), output, linesize); } free(output); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 04013930dd..b5a509e264 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -618,7 +618,7 @@ s32 cellSyncQueuePush(mem_ptr_t queue, u32 buffer_addr) } // prx: memcpy(position * m_size + m_addr, buffer_addr, m_size), sync - memcpy(Memory + (u64)queue->m_addr + position * size, Memory + buffer_addr, size); + memcpy(Memory + ((u64)queue->m_addr + position * size), Memory + buffer_addr, size); // prx: atomically insert 0 in 5th u8 while (true) @@ -670,7 +670,7 @@ s32 cellSyncQueueTryPush(mem_ptr_t queue, u32 buffer_addr) if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; } - memcpy(Memory + (u64)queue->m_addr + position * size, Memory + buffer_addr, size); + memcpy(Memory + ((u64)queue->m_addr + position * size), Memory + buffer_addr, size); while (true) { @@ -733,7 +733,7 @@ s32 cellSyncQueuePop(mem_ptr_t queue, u32 buffer_addr) } // prx: (sync), memcpy(buffer_addr, position * m_size + m_addr, m_size) - memcpy(Memory + buffer_addr, Memory + (u64)queue->m_addr + position * size, size); + memcpy(Memory + buffer_addr, Memory + ((u64)queue->m_addr + position * size), size); // prx: atomically insert 0 in first u8 while (true) @@ -785,7 +785,7 @@ s32 cellSyncQueueTryPop(mem_ptr_t queue, u32 buffer_addr) if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; } - memcpy(Memory + buffer_addr, Memory + (u64)queue->m_addr + position * size, size); + memcpy(Memory + buffer_addr, Memory + ((u64)queue->m_addr + position * size), size); while (true) { @@ -841,7 +841,7 @@ s32 cellSyncQueuePeek(mem_ptr_t queue, u32 buffer_addr) if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; } - memcpy(Memory + buffer_addr, Memory + (u64)queue->m_addr + position * size, size); + memcpy(Memory + buffer_addr, Memory + ((u64)queue->m_addr + position * size), size); while (true) { @@ -891,7 +891,7 @@ s32 cellSyncQueueTryPeek(mem_ptr_t queue, u32 buffer_addr) if (InterlockedCompareExchange(&queue->m_data(), new_queue.m_data(), old_data) == old_data) break; } - memcpy(Memory + buffer_addr, Memory + (u64)queue->m_addr + position * size, size); + memcpy(Memory + buffer_addr, Memory + ((u64)queue->m_addr + position * size), size); while (true) { @@ -1015,7 +1015,7 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 CellSyncLFQueue new_queue; new_queue.m_push1() = old_data; - if (!var0) + if (var0) { new_queue.m_h7 = 0; } @@ -1024,7 +1024,7 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 return CELL_SYNC_ERROR_STAT; } - s32 var2 = (s16)new_queue.m_h8; + s32 var2 = (s32)(s16)new_queue.m_h8; s32 res; if (isBlocking && ((s32)(u16)new_queue.m_h5 != var2 || new_queue.m_h7.ToBE() != 0)) { @@ -1168,13 +1168,16 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer var9_ = 1 << var9_; } s32 var9 = ~(u16)var9_ & ~(u16)queue->m_h6; - if ((u16)var9) + // count leading zeros in u16 { - var9 = __lzcnt16((u16)var9); - } - else - { - var9 = 16; + u16 v = var9; + for (var9 = 0; var9 < 16; var9++) + { + if (v & (1 << (15 - var9))) + { + break; + } + } } s32 var5 = (s32)(u16)queue->m_h6 | var9_; @@ -1343,7 +1346,7 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, s32 depth = (u32)queue->m_depth; s32 size = (u32)queue->m_size; - memcpy(Memory + ((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position), Memory + buffer_addr, size); + memcpy(Memory + (((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position)), Memory + buffer_addr, size); if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { @@ -1475,7 +1478,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u s32 depth = (u32)queue->m_depth; s32 size = (u32)queue->m_size; - memcpy(Memory + buffer_addr, Memory + ((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position), size); + memcpy(Memory + buffer_addr, Memory + (((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position)), size); if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index cf41b0cf4f..e962354efe 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -149,7 +149,7 @@ int sys_raw_spu_image_load(int id, mem_ptr_t img) { sysPrxForUser->Warning("sys_raw_spu_image_load(id=0x%x, img_addr=0x%x)", id, img.GetAddr()); - memcpy(Memory + RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id, Memory + (u32)img->segs_addr, 256 * 1024); + memcpy(Memory + (RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id), Memory + (u32)img->segs_addr, 256 * 1024); Memory.Write32(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * id + RAW_SPU_PROB_OFFSET + SPU_NPC_offs, (u32)img->entry_point); return CELL_OK; From 9f0c5899d6d3c28cebc3f73c170f5e9d8f56d125 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 14 Aug 2014 16:15:04 +0400 Subject: [PATCH 339/499] Little fix (forbids pointer arithmetic in some places) --- rpcs3/Emu/Memory/Memory.h | 7 +++---- rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 0c230593d2..4df6ff55a3 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -657,15 +657,14 @@ public: return false; } - template u8* operator + (const T vaddr) + template void* operator + (const T vaddr) { - u8* ret = GetMemFromAddr(vaddr); - return ret; + return GetMemFromAddr(vaddr); } template u8& operator[] (const T vaddr) { - return *(*this + vaddr); + return *GetMemFromAddr(vaddr); } }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index c2b5d0b99e..9cb6efa0bf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -589,7 +589,7 @@ int cellVdecGetPicture(u32 handle, const mem_ptr_t format, u3 // TODO: zero padding bytes - int err = av_image_copy_to_buffer(Memory + out_addr, buf_size, frame.data, frame.linesize, vdec->ctx->pix_fmt, frame.width, frame.height, 1); + int err = av_image_copy_to_buffer(Memory.GetMemFromAddr(out_addr), buf_size, frame.data, frame.linesize, vdec->ctx->pix_fmt, frame.width, frame.height, 1); if (err < 0) { cellVdec->Error("cellVdecGetPicture: av_image_copy_to_buffer failed(%d)", err); From 069aa9fb2a71622b0e518dec72d37c134e9d2d0c Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Thu, 14 Aug 2014 23:22:13 +0800 Subject: [PATCH 340/499] Added GUI Configuration for Auto-Pause. You can easily configure it as what you do for VHD/VFS. To disable/enable Auto-Pause, find the configuration checkboxes from HLE/Misc panel in Config->Setting of rpcs3. --- Utilities/AutoPause.cpp | 12 +- Utilities/AutoPause.h | 2 - rpcs3/Gui/AutoPauseManager.cpp | 302 +++++++++++++++++++++++++++++++++ rpcs3/Gui/AutoPauseManager.h | 46 +++++ rpcs3/Gui/MainFrame.cpp | 24 ++- rpcs3/Gui/MainFrame.h | 1 + rpcs3/Ini.h | 14 ++ rpcs3/rpcs3.vcxproj | 4 +- rpcs3/rpcs3.vcxproj.filters | 8 +- 9 files changed, 399 insertions(+), 14 deletions(-) create mode 100644 rpcs3/Gui/AutoPauseManager.cpp create mode 100644 rpcs3/Gui/AutoPauseManager.h diff --git a/Utilities/AutoPause.cpp b/Utilities/AutoPause.cpp index ad7e3ddd80..5182d91aad 100644 --- a/Utilities/AutoPause.cpp +++ b/Utilities/AutoPause.cpp @@ -23,7 +23,7 @@ AutoPause::AutoPause(void) m_pause_syscall.reserve(16); initialized = false; //Reload(false, false); - Reload(true, true); //Temporarily use auto enable + Reload(); } //Notice: I would not allow to write the binary to file in this command. @@ -79,17 +79,11 @@ void AutoPause::Reload(void) { LOG_WARNING(HLE, "No Pause ID specified in pause.bin, Auto-Pause would not act."); } - + m_pause_syscall_enable = Ini.DBGAutoPauseSystemCall.GetValue(); + m_pause_function_enable = Ini.DBGAutoPauseFunctionCall.GetValue(); initialized = true; } -void AutoPause::Reload(bool enable_pause_syscall, bool enable_pause_function) -{ - Reload(); - m_pause_syscall_enable = enable_pause_syscall; - m_pause_function_enable = enable_pause_function; -} - void AutoPause::TryPause(u32 code) { if (code < 1024) { diff --git a/Utilities/AutoPause.h b/Utilities/AutoPause.h index b62ed47eb9..208097a55d 100644 --- a/Utilities/AutoPause.h +++ b/Utilities/AutoPause.h @@ -20,8 +20,6 @@ namespace Debug { public: static AutoPause& getInstance(void); - void Reload(bool enable_pause_syscall, bool enable_pause_function); - void Reload(void); void TryPause(u32 code); diff --git a/rpcs3/Gui/AutoPauseManager.cpp b/rpcs3/Gui/AutoPauseManager.cpp new file mode 100644 index 0000000000..9faebb5cc3 --- /dev/null +++ b/rpcs3/Gui/AutoPauseManager.cpp @@ -0,0 +1,302 @@ +#include "stdafx.h" +#include "Emu/System.h" +#include "AutoPauseManager.h" + +enum +{ + id_add, + id_remove, + id_config +}; + +//TODO::Get the enable configuration from ini. +AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) + : wxDialog(parent, wxID_ANY, "Auto-Pause Manager") +{ + SetSizeHints(wxSize(400, 300), wxDefaultSize); + + wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); + + m_entry_convert.clear(); + m_entry_convert.str(""); + m_entry_convert << "To use Auto-Pause: need the IDs of Function call or System call. Need Restart game." + << " Disable/enable using setting Misc."; + + wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(),wxDefaultPosition, wxDefaultSize, 0); + s_description->Wrap(400); + s_main->Add(s_description, 0, wxALL, 5); + + m_list = new wxListView(this); + m_list->InsertColumn(0, "Call ID"); + m_list->InsertColumn(1, "Type"); + + m_list->Bind(wxEVT_LIST_ITEM_ACTIVATED, &AutoPauseManagerDialog::OnEntryConfig, this); + m_list->Bind(wxEVT_RIGHT_DOWN, &AutoPauseManagerDialog::OnRightClick, this); + + s_main->Add(m_list, 1, wxALL | wxEXPAND, 5); + + wxBoxSizer* s_action = new wxBoxSizer(wxHORIZONTAL); + + s_action->Add(new wxButton(this, wxID_CLEAR, wxT("Cl&ear"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); + s_action->Add(new wxButton(this, wxID_REFRESH, wxT("&Reload"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5); + s_action->Add(new wxButton(this, wxID_SAVE, wxT("&Save"), wxDefaultPosition, wxDefaultSize, 0), 2, wxALL, 5); + s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 3, wxALL, 5); + + s_main->Add(s_action, 2, wxALL, 5); + + Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnAdd, this, id_add); + Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnRemove, this, id_remove); + Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnEntryConfig, this, id_config); + + Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnClear, this, wxID_CLEAR); + Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnReload, this, wxID_REFRESH); + Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnSave, this, wxID_SAVE); + //Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnClose, this, wxID_CLOSE); + + Emu.Stop(); + + LoadEntries(); + UpdateList(); + + SetSizerAndFit(s_main); + SetSize(wxSize(400, 360)); + Layout(); + Centre(wxBOTH); +} + +//Copied some from AutoPause. +void AutoPauseManagerDialog::LoadEntries(void) +{ + m_entries.clear(); + m_entries.reserve(16); + + if (rExists("pause.bin")) + { + rFile list; + list.Open("pause.bin", rFile::read); + //System calls ID and Function calls ID are all u32 iirc. + u32 num; + size_t fmax = list.Length(); + size_t fcur = 0; + list.Seek(0); + while (fcur <= fmax - sizeof(u32)) + { + list.Read(&num, sizeof(u32)); + fcur += sizeof(u32); + if (num == 0xFFFFFFFF) break; + + m_entries.emplace_back(num); + } + list.Close(); + } +} + +//Copied some from AutoPause. +//Tip: This one doesn't check for the file is being read or not. +//This would always use a 0xFFFFFFFF as end of the pause.bin +void AutoPauseManagerDialog::SaveEntries(void) +{ + if (rExists("pause.bin")) + { + rRemoveFile("pause.bin"); + } + rFile list; + list.Open("pause.bin", rFile::write); + //System calls ID and Function calls ID are all u32 iirc. + u32 num = 0; + list.Seek(0); + for (size_t i = 0; i < m_entries.size(); ++i) + { + if (num == 0xFFFFFFFF) continue; + num = m_entries[i]; + list.Write(&num, sizeof(u32)); + } + num = 0xFFFFFFFF; + list.Write(&num, sizeof(u32)); + list.Close(); +} + +void AutoPauseManagerDialog::UpdateList(void) +{ + m_list->Freeze(); + m_list->DeleteAllItems(); + for (size_t i = 0; i < m_entries.size(); ++i) + { + m_list->InsertItem(i, i); + if (m_entries[i] != 0xFFFFFFFF) + { + m_entry_convert.clear(); + m_entry_convert.str(""); + m_entry_convert << std::hex << std::setw(8) << std::setfill('0') << m_entries[i]; + m_list->SetItem(i, 0, m_entry_convert.str()); + } + else + { + m_list->SetItem(i, 0, "Unset"); + } + + if (m_entries[i] < 1024) + { + m_list->SetItem(i, 1, "System Call"); + } + else + { + m_list->SetItem(i, 1, "Function Call"); + } + } + m_list->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER); + m_list->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER); + m_list->Thaw(); +} + +void AutoPauseManagerDialog::OnEntryConfig(wxCommandEvent& event) +{ + int idx = m_list->GetFirstSelected(); + if (idx != wxNOT_FOUND) + { + AutoPauseSettingsDialog(this, &m_entries[idx]).ShowModal(); + UpdateList(); + } +} + +void AutoPauseManagerDialog::OnRightClick(wxMouseEvent& event) +{ + wxMenu* menu = new wxMenu(); + int idx = m_list->GetFirstSelected(); + + menu->Append(id_add, "&Add"); + menu->Append(id_remove, "&Remove")->Enable(idx != wxNOT_FOUND); + menu->AppendSeparator(); + menu->Append(id_config, "&Config")->Enable(idx != wxNOT_FOUND); + + PopupMenu(menu); +} + +void AutoPauseManagerDialog::OnAdd(wxCommandEvent& event) +{ + m_entries.emplace_back(0xFFFFFFFF); + UpdateList(); + + u32 idx = m_entries.size() - 1; + for (int i = 0; i < m_list->GetItemCount(); ++i) + { + m_list->SetItemState(i, i == idx ? wxLIST_STATE_SELECTED : ~wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); + } + + wxCommandEvent ce; + OnEntryConfig(ce); +} + +void AutoPauseManagerDialog::OnRemove(wxCommandEvent& event) +{ + for (int sel = m_list->GetNextSelected(-1), offs = 0; sel != wxNOT_FOUND; sel = m_list->GetNextSelected(sel), --offs) + { + m_entries.erase(m_entries.begin() + (sel + offs)); + } + UpdateList(); +} + +void AutoPauseManagerDialog::OnSave(wxCommandEvent& event) +{ + SaveEntries(); + LOG_SUCCESS(HLE,"Auto-Pause: File pause.bin was updated."); + //event.Skip(); +} + +void AutoPauseManagerDialog::OnClear(wxCommandEvent& event) +{ + m_entries.clear(); + UpdateList(); +} + +void AutoPauseManagerDialog::OnReload(wxCommandEvent& event) +{ + LoadEntries(); + UpdateList(); +} + +AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry) + : wxDialog(parent, wxID_ANY, "Auto-Pause Setting") + , m_presult(entry) +{ + m_entry = *m_presult; + SetSizeHints(wxSize(400, -1), wxDefaultSize); + + wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); + + m_entry_convert.clear(); + m_entry_convert.str(""); + m_entry_convert << "Specify ID of System Call or Function Call below." + << " Please remember give the Hexidemical id."; + + wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(), wxDefaultPosition, wxDefaultSize, 0); + s_description->Wrap(400); + s_main->Add(s_description, 0, wxALL, 5); + + wxBoxSizer* s_config = new wxBoxSizer(wxHORIZONTAL); + + m_id = new wxTextCtrl(this, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + s_config->Add(m_id, 0, wxALL | wxEXPAND, 5); + s_config->Add(new wxButton(this, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5); + s_config->Add(new wxButton(this, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5); + + s_main->Add(s_config, 1, wxEXPAND, 5); + + m_current_converted = new wxStaticText(this, wxID_ANY, wxT("Currently it gets an id of \"Unset\"."), wxDefaultPosition, wxDefaultSize, 0); + s_main->Add(m_current_converted, 2, wxALL | wxEXPAND, 5); + + m_entry_convert.clear(); + m_entry_convert.str(""); + m_entry_convert << std::hex << std::setw(8) << std::setfill('0') << m_entry; + m_id->SetValue(m_entry_convert.str()); + + SetTitle("Auto-Pause Setting: "+m_entry_convert.str()); + + Bind(wxEVT_BUTTON, &AutoPauseSettingsDialog::OnOk, this, wxID_OK); + Bind(wxEVT_TEXT, &AutoPauseSettingsDialog::OnUpdateValue, this, wxID_STATIC); + + SetSizerAndFit(s_main); + SetSize(wxSize(400, -1)); + Layout(); + Centre(wxBOTH); + + wxCommandEvent ce; + OnUpdateValue(ce); +} + +void AutoPauseSettingsDialog::OnOk(wxCommandEvent& event) +{ + //Luckily StringStream omit those not hex. + m_entry_convert.clear(); + m_entry_convert.str(""); + m_entry_convert << std::hex << m_id->GetValue(); + m_entry_convert >> m_entry; + + *m_presult = m_entry; + + EndModal(wxID_OK); +} + +void AutoPauseSettingsDialog::OnUpdateValue(wxCommandEvent& event) +{ + //Luckily StringStream omit those not hex. + m_entry_convert.clear(); + m_entry_convert.str(""); + m_entry_convert << std::hex << m_id->GetValue(); + m_entry_convert >> m_entry; + + m_entry_convert.clear(); + m_entry_convert.str(""); + m_entry_convert << "Currently it gets an id of \"" + << std::hex << std::setw(8) << std::setfill('0') << m_entry; + m_entry_convert.clear(); + m_entry_convert << "\"."; + if (m_entry_convert.str() == m_id->GetValue()) + { + m_entry_convert << " SAME."; + } + + m_current_converted->SetLabelText(m_entry_convert.str()); + + event.Skip(); +} \ No newline at end of file diff --git a/rpcs3/Gui/AutoPauseManager.h b/rpcs3/Gui/AutoPauseManager.h new file mode 100644 index 0000000000..fa1aad3964 --- /dev/null +++ b/rpcs3/Gui/AutoPauseManager.h @@ -0,0 +1,46 @@ +#pragma once +#include "stdafx.h" +#include +#include +#include "Utilities/Log.h" +#include "Utilities/rFile.h" + +class AutoPauseManagerDialog : public wxDialog +{ + wxListView *m_list; + std::vector m_entries; + //Used when i want to convert u32 id to string + std::stringstream m_entry_convert; + +public: + AutoPauseManagerDialog(wxWindow* parent); + + void UpdateList(void); + + void OnEntryConfig(wxCommandEvent& event); + void OnRightClick(wxMouseEvent& event); + void OnAdd(wxCommandEvent& event); + void OnRemove(wxCommandEvent& event); + + void OnClear(wxCommandEvent& event); + void OnReload(wxCommandEvent& event); + void OnSave(wxCommandEvent& event); + //void OnClose(wxCommandEvent& event); + + void LoadEntries(void); + void SaveEntries(void); +}; + +class AutoPauseSettingsDialog : public wxDialog +{ + u32 m_entry; + u32 *m_presult; + wxTextCtrl* m_id; + wxStaticText* m_current_converted; + std::stringstream m_entry_convert; + +public: + AutoPauseSettingsDialog(wxWindow* parent, u32 *entry); + void OnOk(wxCommandEvent& event); + void OnUpdateValue(wxCommandEvent& event); +}; \ No newline at end of file diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 923390d63d..3d34a85305 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -16,6 +16,7 @@ #include "Gui/VFSManager.h" #include "Gui/AboutDialog.h" #include "Gui/GameViewer.h" +#include "Gui/AutoPauseManager.h" #include #include "Loader/PKG.h" @@ -37,6 +38,7 @@ enum IDs id_config_pad, id_config_vfs_manager, id_config_vhdd_manager, + id_config_autopause_manager, id_tools_compiler, id_tools_memory_viewer, id_tools_rsx_debugger, @@ -85,8 +87,10 @@ MainFrame::MainFrame() menu_conf->Append(id_config_emu, "Settings"); menu_conf->Append(id_config_pad, "PAD Settings"); menu_conf->AppendSeparator(); + menu_conf->Append(id_config_autopause_manager, "Auto-Pause Settings"); + menu_conf->AppendSeparator(); menu_conf->Append(id_config_vfs_manager, "Virtual File System Manager"); - menu_conf->Append(id_config_vhdd_manager, "Virtual HDD Manager"); + menu_conf->Append(id_config_vhdd_manager, "Virtual HDD Manager"); wxMenu* menu_tools = new wxMenu(); menubar->Append(menu_tools, "Tools"); @@ -123,6 +127,7 @@ MainFrame::MainFrame() Bind(wxEVT_MENU, &MainFrame::ConfigPad, this, id_config_pad); Bind(wxEVT_MENU, &MainFrame::ConfigVFS, this, id_config_vfs_manager); Bind(wxEVT_MENU, &MainFrame::ConfigVHDD, this, id_config_vhdd_manager); + Bind(wxEVT_MENU, &MainFrame::ConfigAutoPause, this, id_config_autopause_manager); Bind(wxEVT_MENU, &MainFrame::OpenELFCompiler, this, id_tools_compiler); Bind(wxEVT_MENU, &MainFrame::OpenMemoryViewer, this, id_tools_memory_viewer); @@ -389,6 +394,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_hle_savetty = new wxCheckBox(p_hle, wxID_ANY, "Save TTY output to file"); wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes"); wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot"); + //Auto-Pause related + wxCheckBox* chbox_dbg_ap_systemcall = new wxCheckBox(p_hle, wxID_ANY, "Auto-Pause at System Call"); + wxCheckBox* chbox_dbg_ap_functioncall = new wxCheckBox(p_hle, wxID_ANY, "Auto-Pause at Function Call"); cbox_cpu_decoder->Append("PPU Interpreter & DisAsm"); cbox_cpu_decoder->Append("PPU Interpreter"); @@ -464,6 +472,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_hle_savetty ->SetValue(Ini.HLESaveTTY.GetValue()); chbox_hle_exitonstop ->SetValue(Ini.HLEExitOnStop.GetValue()); chbox_hle_always_start ->SetValue(Ini.HLEAlwaysStart.GetValue()); + //Auto-Pause related + chbox_dbg_ap_systemcall ->SetValue(Ini.DBGAutoPauseSystemCall.GetValue()); + chbox_dbg_ap_functioncall->SetValue(Ini.DBGAutoPauseFunctionCall.GetValue()); cbox_cpu_decoder ->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() - 1 : 0); cbox_spu_decoder ->SetSelection(Ini.SPUDecoderMode.GetValue() ? Ini.SPUDecoderMode.GetValue() - 1 : 0); @@ -532,6 +543,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_hle->Add(chbox_hle_savetty, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_exitonstop, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_always_start, wxSizerFlags().Border(wxALL, 5).Expand()); + //Auto-Pause + s_subpanel_hle->Add(chbox_dbg_ap_systemcall, wxSizerFlags().Border(wxALL, 5).Expand()); + s_subpanel_hle->Add(chbox_dbg_ap_functioncall, wxSizerFlags().Border(wxALL, 5).Expand()); // System s_subpanel_system->Add(s_round_sys_lang, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -576,6 +590,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.HLELogLvl.SetValue(cbox_hle_loglvl->GetSelection()); Ini.SysLanguage.SetValue(cbox_sys_lang->GetSelection()); Ini.HLEAlwaysStart.SetValue(chbox_hle_always_start->GetValue()); + //Auto-Pause + Ini.DBGAutoPauseFunctionCall.SetValue(chbox_dbg_ap_functioncall->GetValue()); + Ini.DBGAutoPauseSystemCall.SetValue(chbox_dbg_ap_systemcall->GetValue()); Ini.Save(); } @@ -598,6 +615,11 @@ void MainFrame::ConfigVHDD(wxCommandEvent& WXUNUSED(event)) VHDDManagerDialog(this).ShowModal(); } +void MainFrame::ConfigAutoPause(wxCommandEvent& WXUNUSED(event)) +{ + AutoPauseManagerDialog(this).ShowModal(); +} + void MainFrame::OpenELFCompiler(wxCommandEvent& WXUNUSED(event)) { (new CompilerELF(this)) -> Show(); diff --git a/rpcs3/Gui/MainFrame.h b/rpcs3/Gui/MainFrame.h index 975230eef7..5dea885e34 100644 --- a/rpcs3/Gui/MainFrame.h +++ b/rpcs3/Gui/MainFrame.h @@ -38,6 +38,7 @@ private: void ConfigPad(wxCommandEvent& event); void ConfigVFS(wxCommandEvent& event); void ConfigVHDD(wxCommandEvent& event); + void ConfigAutoPause(wxCommandEvent& event); void OpenELFCompiler(wxCommandEvent& evt); void OpenMemoryViewer(wxCommandEvent& evt); void OpenRSXDebugger(wxCommandEvent& evt); diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index b41bd0d1c9..f812f6296e 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -152,6 +152,10 @@ public: IniEntry HLELogLvl; IniEntry HLEAlwaysStart; + //Auto-Pause + IniEntry DBGAutoPauseSystemCall; + IniEntry DBGAutoPauseFunctionCall; + // Language IniEntry SysLanguage; @@ -217,6 +221,10 @@ public: HLELogLvl.Init("HLE_HLELogLvl", path); HLEAlwaysStart.Init("HLE_HLEAlwaysStart", path); + // Auto-Pause + DBGAutoPauseFunctionCall.Init("DBG_AutoPauseFunctionCall", path); + DBGAutoPauseSystemCall.Init("DBG_AutoPauseSystemCall", path); + // Language SysLanguage.Init("Sytem_SysLanguage", path); } @@ -277,6 +285,9 @@ public: HLEExitOnStop.Load(false); HLELogLvl.Load(3); HLEAlwaysStart.Load(true); + //Auto-Pause + DBGAutoPauseFunctionCall.Load(false); + DBGAutoPauseSystemCall.Load(false); // Language SysLanguage.Load(1); @@ -339,6 +350,9 @@ public: HLEExitOnStop.Save(); HLELogLvl.Save(); HLEAlwaysStart.Save(); + //Auto-Pause + DBGAutoPauseFunctionCall.Save(); + DBGAutoPauseSystemCall.Save(); // Language SysLanguage.Save(); diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index b3befe689e..aa7a3dd570 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -164,6 +164,7 @@ + @@ -206,6 +207,7 @@ + @@ -229,4 +231,4 @@ - + \ No newline at end of file diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index f1a38b6bb4..ab5d60bf39 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -96,6 +96,9 @@ Gui + + Gui + @@ -203,5 +206,8 @@ Utilities + + Gui + - + \ No newline at end of file From b9b9eb7fb236f4ea92262da65ff9d17f2c5e6eab Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Fri, 15 Aug 2014 00:04:32 +0800 Subject: [PATCH 341/499] Typo fix for checking input against what program get. --- rpcs3/Gui/AutoPauseManager.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/rpcs3/Gui/AutoPauseManager.cpp b/rpcs3/Gui/AutoPauseManager.cpp index 9faebb5cc3..bccf730b76 100644 --- a/rpcs3/Gui/AutoPauseManager.cpp +++ b/rpcs3/Gui/AutoPauseManager.cpp @@ -287,16 +287,14 @@ void AutoPauseSettingsDialog::OnUpdateValue(wxCommandEvent& event) m_entry_convert.clear(); m_entry_convert.str(""); - m_entry_convert << "Currently it gets an id of \"" - << std::hex << std::setw(8) << std::setfill('0') << m_entry; + m_entry_convert << std::hex << /*std::setw(8) << std::setfill('0') <<*/ m_entry; m_entry_convert.clear(); - m_entry_convert << "\"."; if (m_entry_convert.str() == m_id->GetValue()) { - m_entry_convert << " SAME."; + m_current_converted->SetLabelText("Currently it gets an id of \"" + m_entry_convert.str() + "\" - SAME."); + } + else { + m_current_converted->SetLabelText("Currently it gets an id of \"" + m_entry_convert.str() + "\"."); } - - m_current_converted->SetLabelText(m_entry_convert.str()); - event.Skip(); } \ No newline at end of file From 98cdbb759b58a3565e49551a98182445a65f5a70 Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Fri, 15 Aug 2014 15:02:36 +0800 Subject: [PATCH 342/499] Make Auto-Pause UI better. --- rpcs3/Gui/AutoPauseManager.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/rpcs3/Gui/AutoPauseManager.cpp b/rpcs3/Gui/AutoPauseManager.cpp index bccf730b76..540d5a0b8c 100644 --- a/rpcs3/Gui/AutoPauseManager.cpp +++ b/rpcs3/Gui/AutoPauseManager.cpp @@ -13,7 +13,8 @@ enum AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) : wxDialog(parent, wxID_ANY, "Auto-Pause Manager") { - SetSizeHints(wxSize(400, 300), wxDefaultSize); + //SetSizeHints(wxSize(400, 300), wxDefaultSize); + SetMinSize(wxSize(400, 360)); wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); @@ -38,11 +39,11 @@ AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) wxBoxSizer* s_action = new wxBoxSizer(wxHORIZONTAL); s_action->Add(new wxButton(this, wxID_CLEAR, wxT("Cl&ear"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); - s_action->Add(new wxButton(this, wxID_REFRESH, wxT("&Reload"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5); - s_action->Add(new wxButton(this, wxID_SAVE, wxT("&Save"), wxDefaultPosition, wxDefaultSize, 0), 2, wxALL, 5); - s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 3, wxALL, 5); + s_action->Add(new wxButton(this, wxID_REFRESH, wxT("&Reload"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); + s_action->Add(new wxButton(this, wxID_SAVE, wxT("&Save"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); + s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); - s_main->Add(s_action, 2, wxALL, 5); + s_main->Add(s_action, 0, wxALL, 5); Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnAdd, this, id_add); Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnRemove, this, id_remove); @@ -59,7 +60,7 @@ AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) UpdateList(); SetSizerAndFit(s_main); - SetSize(wxSize(400, 360)); + //SetSize(wxSize(400, 360)); Layout(); Centre(wxBOTH); } @@ -220,7 +221,8 @@ AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry) , m_presult(entry) { m_entry = *m_presult; - SetSizeHints(wxSize(400, -1), wxDefaultSize); + //SetSizeHints(wxSize(400, -1), wxDefaultSize); + SetMinSize(wxSize(400, -1)); wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); @@ -236,14 +238,14 @@ AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry) wxBoxSizer* s_config = new wxBoxSizer(wxHORIZONTAL); m_id = new wxTextCtrl(this, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); - s_config->Add(m_id, 0, wxALL | wxEXPAND, 5); - s_config->Add(new wxButton(this, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5); - s_config->Add(new wxButton(this, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5); + s_config->Add(m_id, 1, wxALL | wxEXPAND, 5); + s_config->Add(new wxButton(this, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); + s_config->Add(new wxButton(this, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); - s_main->Add(s_config, 1, wxEXPAND, 5); + s_main->Add(s_config, 0, wxEXPAND, 5); m_current_converted = new wxStaticText(this, wxID_ANY, wxT("Currently it gets an id of \"Unset\"."), wxDefaultPosition, wxDefaultSize, 0); - s_main->Add(m_current_converted, 2, wxALL | wxEXPAND, 5); + s_main->Add(m_current_converted, 0, wxALL, 5); m_entry_convert.clear(); m_entry_convert.str(""); @@ -256,7 +258,7 @@ AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry) Bind(wxEVT_TEXT, &AutoPauseSettingsDialog::OnUpdateValue, this, wxID_STATIC); SetSizerAndFit(s_main); - SetSize(wxSize(400, -1)); + //SetSize(wxSize(400, -1)); Layout(); Centre(wxBOTH); From 5531a615e68893aaf81cf15b6da85ac6641fe211 Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Fri, 15 Aug 2014 19:44:16 +0800 Subject: [PATCH 343/499] Added Save Data Utility UI (stub). May be connected to real data after those related save data list get implemented, with those data sent to UI decided. Also removed some comments from Auto-Pause. --- rpcs3/Gui/AutoPauseManager.cpp | 3 - rpcs3/Gui/AutoPauseManager.h | 1 - rpcs3/Gui/MainFrame.cpp | 11 +- rpcs3/Gui/MainFrame.h | 1 + rpcs3/Gui/SaveDataUtility.cpp | 339 +++++++++++++++++++++++++++++++++ rpcs3/Gui/SaveDataUtility.h | 83 ++++++++ rpcs3/rpcs3.vcxproj | 2 + rpcs3/rpcs3.vcxproj.filters | 6 + 8 files changed, 441 insertions(+), 5 deletions(-) create mode 100644 rpcs3/Gui/SaveDataUtility.cpp create mode 100644 rpcs3/Gui/SaveDataUtility.h diff --git a/rpcs3/Gui/AutoPauseManager.cpp b/rpcs3/Gui/AutoPauseManager.cpp index 540d5a0b8c..19c96ee06e 100644 --- a/rpcs3/Gui/AutoPauseManager.cpp +++ b/rpcs3/Gui/AutoPauseManager.cpp @@ -13,7 +13,6 @@ enum AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) : wxDialog(parent, wxID_ANY, "Auto-Pause Manager") { - //SetSizeHints(wxSize(400, 300), wxDefaultSize); SetMinSize(wxSize(400, 360)); wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); @@ -52,7 +51,6 @@ AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnClear, this, wxID_CLEAR); Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnReload, this, wxID_REFRESH); Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnSave, this, wxID_SAVE); - //Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnClose, this, wxID_CLOSE); Emu.Stop(); @@ -60,7 +58,6 @@ AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) UpdateList(); SetSizerAndFit(s_main); - //SetSize(wxSize(400, 360)); Layout(); Centre(wxBOTH); } diff --git a/rpcs3/Gui/AutoPauseManager.h b/rpcs3/Gui/AutoPauseManager.h index fa1aad3964..a1b8f00450 100644 --- a/rpcs3/Gui/AutoPauseManager.h +++ b/rpcs3/Gui/AutoPauseManager.h @@ -25,7 +25,6 @@ public: void OnClear(wxCommandEvent& event); void OnReload(wxCommandEvent& event); void OnSave(wxCommandEvent& event); - //void OnClose(wxCommandEvent& event); void LoadEntries(void); void SaveEntries(void); diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 3d34a85305..6a46ee08bf 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -17,6 +17,7 @@ #include "Gui/AboutDialog.h" #include "Gui/GameViewer.h" #include "Gui/AutoPauseManager.h" +#include "Gui/SaveDataUtility.h" #include #include "Loader/PKG.h" @@ -39,6 +40,7 @@ enum IDs id_config_vfs_manager, id_config_vhdd_manager, id_config_autopause_manager, + id_config_savedata_manager, id_tools_compiler, id_tools_memory_viewer, id_tools_rsx_debugger, @@ -90,7 +92,8 @@ MainFrame::MainFrame() menu_conf->Append(id_config_autopause_manager, "Auto-Pause Settings"); menu_conf->AppendSeparator(); menu_conf->Append(id_config_vfs_manager, "Virtual File System Manager"); - menu_conf->Append(id_config_vhdd_manager, "Virtual HDD Manager"); + menu_conf->Append(id_config_vhdd_manager, "Virtual HDD Manager"); + menu_conf->Append(id_config_savedata_manager, "Save Data Utility"); wxMenu* menu_tools = new wxMenu(); menubar->Append(menu_tools, "Tools"); @@ -128,6 +131,7 @@ MainFrame::MainFrame() Bind(wxEVT_MENU, &MainFrame::ConfigVFS, this, id_config_vfs_manager); Bind(wxEVT_MENU, &MainFrame::ConfigVHDD, this, id_config_vhdd_manager); Bind(wxEVT_MENU, &MainFrame::ConfigAutoPause, this, id_config_autopause_manager); + Bind(wxEVT_MENU, &MainFrame::ConfigSaveData, this, id_config_savedata_manager); Bind(wxEVT_MENU, &MainFrame::OpenELFCompiler, this, id_tools_compiler); Bind(wxEVT_MENU, &MainFrame::OpenMemoryViewer, this, id_tools_memory_viewer); @@ -620,6 +624,11 @@ void MainFrame::ConfigAutoPause(wxCommandEvent& WXUNUSED(event)) AutoPauseManagerDialog(this).ShowModal(); } +void MainFrame::ConfigSaveData(wxCommandEvent& event) +{ + SaveDataListDialog(this, true).ShowModal(); +} + void MainFrame::OpenELFCompiler(wxCommandEvent& WXUNUSED(event)) { (new CompilerELF(this)) -> Show(); diff --git a/rpcs3/Gui/MainFrame.h b/rpcs3/Gui/MainFrame.h index 5dea885e34..604e68e97c 100644 --- a/rpcs3/Gui/MainFrame.h +++ b/rpcs3/Gui/MainFrame.h @@ -39,6 +39,7 @@ private: void ConfigVFS(wxCommandEvent& event); void ConfigVHDD(wxCommandEvent& event); void ConfigAutoPause(wxCommandEvent& event); + void ConfigSaveData(wxCommandEvent& event); void OpenELFCompiler(wxCommandEvent& evt); void OpenMemoryViewer(wxCommandEvent& evt); void OpenRSXDebugger(wxCommandEvent& evt); diff --git a/rpcs3/Gui/SaveDataUtility.cpp b/rpcs3/Gui/SaveDataUtility.cpp new file mode 100644 index 0000000000..41cef9d2ba --- /dev/null +++ b/rpcs3/Gui/SaveDataUtility.cpp @@ -0,0 +1,339 @@ +#include "stdafx.h" +#include "SaveDataUtility.h" + +//Cause i can not decide what struct to be used to fill those. Just use no real data now. +//Currently variable info isn't used. it supposed to be a container for the information passed by other. +SaveDataInfoDialog::SaveDataInfoDialog(wxWindow* parent, const SaveDataInformation& info) + : wxDialog(parent, wxID_ANY, "Save Data Information") +{ + SetMinSize(wxSize(400, 300)); + + wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); + + m_list = new wxListView(this); + m_list->InsertColumn(0, "Name"); + m_list->InsertColumn(1, "Detail"); + s_main->Add(m_list, 1, wxALL | wxEXPAND, 5); + + wxBoxSizer* s_actions = new wxBoxSizer(wxHORIZONTAL); + s_actions->Add(0, 0, 1, wxEXPAND, 5); //Add a spacer to make Close on the Right-Down corner of this dialog. + s_actions->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); + s_main->Add(s_actions, 0, wxEXPAND, 5); + + SetSizerAndFit(s_main); + Layout(); + Centre(wxBOTH); + + SetSize(wxSize(400, 300)); + + UpdateData(); +} +//This is intended to write the information of save data to wxListView. +//However been not able to decide which data struct i should use, i use static content for this to make it stub. +void SaveDataInfoDialog::UpdateData() +{ + m_list->Freeze(); + m_list->DeleteAllItems(); + + m_list->InsertItem(0, 0); + m_list->SetItem(0, 0, "User ID"); + m_list->SetItem(0, 1, "00000000 (None)"); + + m_list->InsertItem(1, 1); + m_list->SetItem(1, 0, "Game Title"); + m_list->SetItem(1, 1, "Happy with rpcs3 (free)"); + + m_list->InsertItem(2, 2); + m_list->SetItem(2, 0, "Subtitle"); + m_list->SetItem(2, 1, "You devs are great"); + + m_list->InsertItem(3, 3); + m_list->SetItem(3, 0, "Detail"); + m_list->SetItem(3, 1, "Stub it first"); + + m_list->InsertItem(4, 4); + m_list->SetItem(4, 0, "Copy-Able?"); + m_list->SetItem(4, 1, "1 (Not allowed)"); + + m_list->InsertItem(5, 5); + m_list->SetItem(5, 0, "Play Time"); + m_list->SetItem(5, 1, "00:00:00"); + //Maybe there should be more details of save data. + //But i'm getting bored for assign it one by one. + + m_list->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER); + m_list->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER); + m_list->Thaw(); +} + +//This dialog represents the Menu of Save Data Utility - which pop up after when you roll to a save and press triangle. +//I've ever thought of make it a right-click menu or a show-hide panel of the main dialog. +//Well only when those function calls related get implemented we can tell what this GUI should be, seriously. +SaveDataManageDialog::SaveDataManageDialog(wxWindow* parent, unsigned int* sort_type, SaveDataEntry& save) + : wxDialog(parent, wxID_ANY, "Save Data Pop-up Menu") +{ + SetMinSize(wxSize(400, 110)); + + wxBoxSizer* s_manage = new wxBoxSizer(wxVERTICAL); + + wxBoxSizer* s_sort = new wxBoxSizer(wxHORIZONTAL); + s_sort->Add(new wxStaticText(this, wxID_ANY, wxT("Sort By"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL | wxEXPAND, 5); + + m_sort_options = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN | wxCB_READONLY); + //You might change this - of corse we should know what to been set - maybe after functions related been implemented. + m_sort_options->Append(wxT("User Id")); + m_sort_options->Append(wxT("Game Title")); + m_sort_options->Append(wxT("Game Subtitle")); + m_sort_options->Append(wxT("Play Time")); + m_sort_options->Append(wxT("Data Size")); + m_sort_options->Append(wxT("Last Modified")); + m_sort_options->Append(wxT("Created Time")); + m_sort_options->Append(wxT("Accessed Time")); + m_sort_options->Append(wxT("Modified Time")); + m_sort_options->Append(wxT("Modify Time")); + + m_sort_type = sort_type; + if (m_sort_type != nullptr) + { + //Check sort type and set it to combo box + if ((*m_sort_type >= m_sort_options->GetCount()) + || (*m_sort_type < 0)) + { + *m_sort_type = 0; + } + } + + m_sort_options->SetSelection(*m_sort_type); + s_sort->Add(m_sort_options, 1, wxALL | wxEXPAND, 5); + + wxButton* s_sort_action = new wxButton(this, wxID_ANY, wxT("&Apply!"), wxDefaultPosition, wxDefaultSize, 0); + s_sort_action->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnApplySort, this); + s_sort->Add(s_sort_action, 0, wxALL, 5); + + s_manage->Add(s_sort, 1, wxEXPAND, 5); + + wxBoxSizer* s_actions = new wxBoxSizer(wxHORIZONTAL); + + wxButton* s_copy = new wxButton(this, wxID_ANY, wxT("&Copy"), wxDefaultPosition, wxDefaultSize, 0); + s_copy->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnCopy, this); + s_actions->Add(s_copy, 0, wxALL, 5); + + wxButton* s_delete = new wxButton(this, wxID_ANY, wxT("&Delete"), wxDefaultPosition, wxDefaultSize, 0); + s_delete->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnDelete, this); + s_actions->Add(s_delete, 0, wxALL, 5); + + wxButton* s_info = new wxButton(this, wxID_ANY, wxT("&Info"), wxDefaultPosition, wxDefaultSize, 0); + s_info->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnInfo, this); + s_actions->Add(s_info, 0, wxALL, 5); + + s_actions->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); + + s_manage->Add(s_actions, 1, wxEXPAND, 5); + + SetSizerAndFit(s_manage); + Layout(); + Center(wxBOTH); +} +//Display information about the current selected save data. +//If selected is "New Save Data" or other invalid, this dialog would be initialized with "Info" disabled or not visible. +void SaveDataManageDialog::OnInfo(wxCommandEvent& event) +{ + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnInfo called."); + SaveDataInformation info; //It should get a real one for information.. finally + SaveDataInfoDialog(this, info).ShowModal(); +} +//Copy selected save data to another. Might need a dialog but i just leave it as this. Or Modal Dialog. +void SaveDataManageDialog::OnCopy(wxCommandEvent& event) +{ + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnCopy called."); + event.Skip(); +} +//Delete selected save data, need confirm. just a stub now. +void SaveDataManageDialog::OnDelete(wxCommandEvent& event) +{ + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnDelete called."); + event.Skip(); +} +//This should return the sort setting of the save data list. Also not implemented really. +void SaveDataManageDialog::OnApplySort(wxCommandEvent& event) +{ + *m_sort_type = m_sort_options->GetSelection(); + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnApplySort called. NAME=%s", + m_sort_options->GetStringSelection().ToStdString().c_str()); + //event.Skip(); +} + +//Show up the savedata list, either to choose one to save/load or to manage saves. +//I suggest to use function callbacks to give save data list or get save data entry. (Not implemented or stubbed) +SaveDataListDialog::SaveDataListDialog(wxWindow* parent, bool enable_manage) + : wxDialog(parent, wxID_ANY, "Save Data Utility") +{ + SetMinSize(wxSize(400, 400)); + + wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL); + + m_entry_convert.clear(); + m_entry_convert.str(""); + m_entry_convert << "This is only a stub now. Don't expect real effect from this." + << "Cause related functions hasn't been implemented yet."; + wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(), wxDefaultPosition, wxDefaultSize, 0); + s_description->Wrap(400); + s_main->Add(s_description, 0, wxALL, 5); + + m_list = new wxListView(this); + m_list->InsertColumn(0, "Game ID"); + m_list->InsertColumn(1, "Save ID"); + m_list->InsertColumn(2, "Detail"); + + m_list->Bind(wxEVT_LIST_ITEM_ACTIVATED, &SaveDataListDialog::OnEntryInfo, this); + m_list->Bind(wxEVT_RIGHT_DOWN, &SaveDataListDialog::OnRightClick, this); + + s_main->Add(m_list, 1, wxALL | wxEXPAND, 5); + + wxBoxSizer* s_action = new wxBoxSizer(wxHORIZONTAL); + + //If do not need manage, hide it, like just a save data picker. + if (!enable_manage) + { + wxButton *m_select = new wxButton(this, wxID_OK, wxT("&Select"), wxDefaultPosition, wxDefaultSize, 0); + m_select->Bind(wxEVT_BUTTON, &SaveDataListDialog::OnSelect, this); + s_action->Add(m_select, 0, wxALL, 5); + SetTitle("Save Data Chooser"); + } + else { + wxButton *m_manage = new wxButton(this, wxID_ANY, wxT("&Manage"), wxDefaultPosition, wxDefaultSize, 0); + m_manage->Bind(wxEVT_BUTTON, &SaveDataListDialog::OnManage, this); + s_action->Add(m_manage, 0, wxALL, 5); + } + + s_action->Add(0, 0, 1, wxEXPAND, 5); + + s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5); + + s_main->Add(s_action, 0, wxEXPAND, 5); + + Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryCopy, this, id_copy); + Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryRemove, this, id_remove); + Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryInfo, this, id_info); + + SetSizerAndFit(s_main); + Layout(); + Centre(wxBOTH); + + LoadEntries(); + UpdateList(); +} +//After you pick a menu item from the sort sub-menu +void SaveDataListDialog::OnSort(wxCommandEvent& event) +{ + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSort called."); + int idx = event.GetSelection(); + if ((idx < m_sort_options->GetMenuItemCount()) + && (idx >= 0)) + { + m_sort_type = idx; + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSort called. Type Value:%d",m_sort_type); + } +} +//Copy a existing save, need to get more arguments. maybe a new dialog. +void SaveDataListDialog::OnEntryCopy(wxCommandEvent& event) +{ + int idx = m_list->GetFirstSelected(); + if (idx != wxNOT_FOUND) + { + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryCopy called."); + //Some Operations? + UpdateList(); + } +} +//Remove a save file, need to be confirmed. +void SaveDataListDialog::OnEntryRemove(wxCommandEvent& event) +{ + int idx = m_list->GetFirstSelected(); + if (idx != wxNOT_FOUND) + { + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryRemove called."); + //Some Operations? + UpdateList(); + } +} +//Display info dialog directly. +void SaveDataListDialog::OnEntryInfo(wxCommandEvent& event) +{ + int idx = m_list->GetFirstSelected(); + if (idx != wxNOT_FOUND) + { + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryInfo called."); + SaveDataInformation info; //Only a stub now. + SaveDataInfoDialog(this, info).ShowModal(); + } +} +//Display info dialog directly. +void SaveDataListDialog::OnManage(wxCommandEvent& event) +{ + int idx = m_list->GetFirstSelected(); + if (idx != wxNOT_FOUND) + { + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnManage called."); + SaveDataEntry save; //Only a stub now. + SaveDataManageDialog(this, &m_sort_type, save).ShowModal(); + } +} +//When you press that select button in the Chooser mode. +void SaveDataListDialog::OnSelect(wxCommandEvent& event) +{ + int idx = m_list->GetFirstSelected(); + if (idx != wxNOT_FOUND) + { + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSelect called."); + EndModal(wxID_OK); + } +} +//Pop-up a small context-menu, being a replacement for SaveDataManageDialog +void SaveDataListDialog::OnRightClick(wxMouseEvent& event) +{ + wxMenu* menu = new wxMenu(); + int idx = m_list->GetFirstSelected(); + + //This is also a stub for the sort setting. Ids is set according to their sort-type integer. + m_sort_options = new wxMenu(); + m_sort_options->Append(0, "UserID"); + m_sort_options->Append(1, "Title"); + m_sort_options->Append(2, "Subtitle"); + //Well you can not use direct index cause you can not get its index through wxCommandEvent + m_sort_options->Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this); + + menu->AppendSubMenu(m_sort_options, "&Sort"); + menu->AppendSeparator(); + menu->Append(id_copy, "&Copy")->Enable(idx != wxNOT_FOUND); + menu->Append(id_remove, "&Remove")->Enable(idx != wxNOT_FOUND); + menu->AppendSeparator(); + menu->Append(id_info, "&Info"); + + PopupMenu(menu); +} +//This is intended to load the save data list from a way. However that is not certain for a stub. Does nothing now. +void SaveDataListDialog::LoadEntries(void) +{ + +} +//Setup some static items just for display. +void SaveDataListDialog::UpdateList(void) +{ + m_list->Freeze(); + m_list->DeleteAllItems(); + + m_list->InsertItem(0, 0); + m_list->SetItem(0, 0, "TEST00000"); + m_list->SetItem(0, 1, "00"); + m_list->SetItem(0, 2, "Final battle"); + + m_list->InsertItem(0, 0); + m_list->SetItem(0, 0, "XXXX99876"); + m_list->SetItem(0, 1, "30"); + m_list->SetItem(0, 2, "This is a fake game"); + + m_list->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER); + m_list->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER); + m_list->Thaw(); +} \ No newline at end of file diff --git a/rpcs3/Gui/SaveDataUtility.h b/rpcs3/Gui/SaveDataUtility.h new file mode 100644 index 0000000000..c04fa8f910 --- /dev/null +++ b/rpcs3/Gui/SaveDataUtility.h @@ -0,0 +1,83 @@ +#pragma once +#include "stdafx.h" +#include +#include +#include "Utilities/Log.h" +#include "Utilities/rFile.h" + +//TODO: Implement function calls related to Save Data List. +//Those function calls may be needed to use this GUI. +//Currently this is only a stub. + +//A stub for the struct sent to SaveDataInfoDialog. +struct SaveDataInformation +{ + +}; +//A stub for the sorting. +enum +{ + SAVE_DATA_LIST_SORT_BY_USERID +}; +//A stub for a single entry of save data. used to make a save data list or do management. +struct SaveDataEntry +{ + +}; + +enum +{ + id_copy, + id_remove, + id_info +}; + +//Used to display the information of a savedata. +//Not sure about what information should be displayed. +class SaveDataInfoDialog :public wxDialog +{ + wxListView* m_list; + + void UpdateData(); +public: + SaveDataInfoDialog(wxWindow* parent, const SaveDataInformation& info); +}; + +//Simple way to show up the sort menu and other operations +//Like what you get when press Triangle on SaveData. +class SaveDataManageDialog :public wxDialog +{ + wxComboBox* m_sort_options; + unsigned int* m_sort_type; + + void OnInfo(wxCommandEvent& event); + void OnCopy(wxCommandEvent& event); + void OnDelete(wxCommandEvent& event); + void OnApplySort(wxCommandEvent& event); +public: + SaveDataManageDialog(wxWindow* parent, unsigned int* sort_type, SaveDataEntry& save); +}; + +//Display a list of SaveData. Would need to be initialized. +//Can also be used as a Save Data Chooser. +class SaveDataListDialog : public wxDialog +{ + wxListView* m_list; + wxMenu* m_sort_options; + unsigned int m_sort_type; + std::stringstream m_entry_convert; + + void OnSelect(wxCommandEvent& event); + void OnManage(wxCommandEvent& event); + + void OnRightClick(wxMouseEvent& event); + void OnSort(wxCommandEvent& event); + void OnEntryCopy(wxCommandEvent& event); + void OnEntryRemove(wxCommandEvent& event); + void OnEntryInfo(wxCommandEvent& event); + + void LoadEntries(void); + void UpdateList(void); +public: + SaveDataListDialog(wxWindow* parent, bool enable_manage); +}; diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index aa7a3dd570..9b4424a1db 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -177,6 +177,7 @@ + @@ -221,6 +222,7 @@ + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index ab5d60bf39..7043c6c0f1 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -99,6 +99,9 @@ Gui + + Gui + @@ -209,5 +212,8 @@ Gui + + Gui + \ No newline at end of file From cb58a773c9354d204c64107c9dbc4ebad257882a Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 15 Aug 2014 16:50:59 +0400 Subject: [PATCH 344/499] Some hack --- rpcs3/Emu/Cell/PPUInterpreter.h | 37 +++++++--------------- rpcs3/Emu/Cell/PPUThread.cpp | 31 ++++++++++++++++++ rpcs3/Emu/Cell/PPUThread.h | 5 +++ rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 2 +- rpcs3/Emu/SysCalls/SysCalls.cpp | 2 +- rpcs3/Emu/System.cpp | 13 ++++---- rpcs3/Emu/System.h | 1 + 7 files changed, 57 insertions(+), 34 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 3f27b769ca..94cc1cde92 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -2104,6 +2104,7 @@ private: Emu.GetSFuncManager()[CPU.GPR[11]]->name, CPU.GPR[3], CPU.PC); } break; + case 0x4: CPU.FastStop(); break; case 0x22: UNK("HyperCall LV1"); break; default: UNK(fmt::Format("Unknown sc: %x", sc_code)); } @@ -2368,13 +2369,9 @@ private: } void LWARX(u32 rd, u32 ra, u32 rb) { - const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - - SMutexLockerR lock(reservation.mutex); - reservation.owner = lock.tid; - reservation.addr = addr; - reservation.size = 4; - reservation.data32 = CPU.GPR[rd] = Memory.Read32(addr); + CPU.R_ADDR = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; + CPU.R_VALUE = (u32&)Memory[CPU.R_ADDR]; + CPU.GPR[rd] = re32((u32)CPU.R_VALUE); } void LDX(u32 rd, u32 ra, u32 rb) { @@ -2523,13 +2520,9 @@ private: } void LDARX(u32 rd, u32 ra, u32 rb) { - const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - - SMutexLockerR lock(reservation.mutex); - reservation.owner = lock.tid; - reservation.addr = addr; - reservation.size = 8; - reservation.data64 = CPU.GPR[rd] = Memory.Read64(addr); + CPU.R_ADDR = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; + CPU.R_VALUE = (u64&)Memory[CPU.R_ADDR]; + CPU.GPR[rd] = re64(CPU.R_VALUE); } void DCBF(u32 ra, u32 rb) { @@ -2644,17 +2637,13 @@ private: { const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - SMutexLockerR lock(reservation.mutex); - if (lock.tid == reservation.owner && reservation.addr == addr && reservation.size == 4) + if (CPU.R_ADDR == addr) { - // Memory.Write32(addr, CPU.GPR[rs]); - CPU.SetCR_EQ(0, InterlockedCompareExchange((volatile long*) (Memory + addr), re((u32) CPU.GPR[rs]), re(reservation.data32)) == re(reservation.data32)); - reservation.clear(); + CPU.SetCR_EQ(0, InterlockedCompareExchange((volatile u32*)(Memory + addr), re32((u32)CPU.GPR[rs]), (u32)CPU.R_VALUE) == (u32)CPU.R_VALUE); } else { CPU.SetCR_EQ(0, false); - if (lock.tid == reservation.owner) reservation.clear(); } } void STWX(u32 rs, u32 ra, u32 rb) @@ -2705,17 +2694,13 @@ private: { const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - SMutexLockerR lock(reservation.mutex); - if (lock.tid == reservation.owner && reservation.addr == addr && reservation.size == 8) + if (CPU.R_ADDR == addr) { - // Memory.Write64(addr, CPU.GPR[rs]); - CPU.SetCR_EQ(0, InterlockedCompareExchange64((volatile long long*)(Memory + addr), re(CPU.GPR[rs]), re(reservation.data64)) == re(reservation.data64)); - reservation.clear(); + CPU.SetCR_EQ(0, InterlockedCompareExchange((volatile u64*)(Memory + addr), re64(CPU.GPR[rs]), CPU.R_VALUE) == CPU.R_VALUE); } else { CPU.SetCR_EQ(0, false); - if (lock.tid == reservation.owner) reservation.clear(); } } void STBX(u32 rs, u32 ra, u32 rb) diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 0b039e4886..c4907dc6e3 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -219,3 +219,34 @@ int FPRdouble::Cmp(PPCdouble a, PPCdouble b) return CR_SO; } + +u64 PPUThread::FastCall(u64 addr, u64 arg1, u64 arg2, u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7, u64 arg8) +{ + auto old_status = m_status; + auto old_PC = PC; + auto old_LR = LR; + + PC = addr; + GPR[3] = arg1; + GPR[4] = arg2; + GPR[5] = arg3; + GPR[6] = arg4; + GPR[7] = arg5; + GPR[8] = arg6; + GPR[9] = arg7; + GPR[10] = arg8; + LR = Emu.m_ppu_thr_stop; + + Task(); + + LR = old_LR; + PC = old_PC; + m_status = old_status; + + return GPR[3]; +} + +void PPUThread::FastStop() +{ + m_status = Stopped; +} \ No newline at end of file diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 1fe6fffd01..7d8cd62197 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -607,6 +607,9 @@ public: u64 cycle; + u64 R_ADDR; // reservation address + u64 R_VALUE; // reservation value (BE) + public: PPUThread(); virtual ~PPUThread(); @@ -839,6 +842,8 @@ public: public: virtual void InitRegs(); virtual u64 GetFreeStackSize() const; + u64 FastCall(u64 addr, u64 arg1 = 0, u64 arg2 = 0, u64 arg3 = 0, u64 arg4 = 0, u64 arg5 = 0, u64 arg6 = 0, u64 arg7 = 0, u64 arg8 = 0); + void FastStop(); protected: virtual void DoReset() override; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 5bacd9f287..e3e538286d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -550,7 +550,7 @@ int cellAudioOutGetNumberOfDevice(u32 audioOut) int cellAudioOutGetDeviceInfo(u32 audioOut, u32 deviceIndex, mem_ptr_t info) { - cellSysutil->Todo("Unimplemented function: cellAudioOutGetDeviceInfo(audioOut=%u, deviceIndex=%u, info_addr=0x%x)", + cellSysutil->Todo("cellAudioOutGetDeviceInfo(audioOut=%u, deviceIndex=%u, info_addr=0x%x)", audioOut, deviceIndex, info.GetAddr()); if(deviceIndex) return CELL_AUDIO_OUT_ERROR_DEVICE_NOT_FOUND; diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index da13269249..ddea3cdd5b 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -45,7 +45,7 @@ static func_caller* sc_table[kSyscallTableLength] = bind_func(sys_process_kill), //19 (0x013) null_func, //20 (0x014) UNS null_func,//bind_func(_sys_process_spawn), //21 (0x015) DBG - bind_func(sys_process_exit), //22 (0x016) + null_func,//bind_func(sys_process_exit), //22 (0x016) bind_func(sys_process_wait_for_child2), //23 (0x017) DBG null_func,//bind_func(), //24 (0x018) DBG bind_func(sys_process_get_sdk_version), //25 (0x019) diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 0745e1c49c..ec21d85dbd 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -324,11 +324,17 @@ void Emulator::Load() m_ppu_thr_exit = Memory.MainMem.AllocAlign(4 * 4); mem32_ptr_t ppu_thr_exit_data(m_ppu_thr_exit); - ppu_thr_exit_data += ADDI(3, 0, 0); + //ppu_thr_exit_data += ADDI(3, 0, 0); // why it kills return value (GPR[3]) ? ppu_thr_exit_data += ADDI(11, 0, 41); ppu_thr_exit_data += SC(2); ppu_thr_exit_data += BCLR(0x10 | 0x04, 0, 0, 0); + m_ppu_thr_stop = Memory.MainMem.AllocAlign(2 * 4); + + mem32_ptr_t ppu_thr_stop_data(m_ppu_thr_stop); + ppu_thr_stop_data += SC(4); + ppu_thr_exit_data += BCLR(0x10 | 0x04, 0, 0, 0); + Memory.Write64(Memory.PRXMem.AllocAlign(0x10000), 0xDEADBEEFABADCAFE); } break; @@ -422,11 +428,6 @@ void Emulator::Stop() break; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); - if (counter++ > 3000) - { - LOG_ERROR(HLE, "%d threads not stopped (timeout)", (u32)(g_thread_count - uncounted)); - break; - } } m_rsx_callback = 0; diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index f2500878ac..66a087589e 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -106,6 +106,7 @@ public: std::string m_path; std::string m_elf_path; std::string m_title_id; + u32 m_ppu_thr_stop; s32 m_sdk_version; Emulator(); From 9e59ccd9affa0c6d088c666250a213143805d051 Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Fri, 15 Aug 2014 21:02:18 +0800 Subject: [PATCH 345/499] Typo Fix. Bind submenu items. --- rpcs3/Gui/SaveDataUtility.cpp | 12 +++++++----- rpcs3/Gui/SaveDataUtility.h | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/rpcs3/Gui/SaveDataUtility.cpp b/rpcs3/Gui/SaveDataUtility.cpp index 41cef9d2ba..8c888dc084 100644 --- a/rpcs3/Gui/SaveDataUtility.cpp +++ b/rpcs3/Gui/SaveDataUtility.cpp @@ -216,6 +216,11 @@ SaveDataListDialog::SaveDataListDialog(wxWindow* parent, bool enable_manage) Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryRemove, this, id_remove); Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryInfo, this, id_info); + //Looks stupid, isn't it. I can't find Bind for range use.. + Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 0); + Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 1); + Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 2); + SetSizerAndFit(s_main); Layout(); Centre(wxBOTH); @@ -226,13 +231,12 @@ SaveDataListDialog::SaveDataListDialog(wxWindow* parent, bool enable_manage) //After you pick a menu item from the sort sub-menu void SaveDataListDialog::OnSort(wxCommandEvent& event) { - LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSort called."); - int idx = event.GetSelection(); + int idx = event.GetId(); + LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSort called. Type Value:%d", idx); if ((idx < m_sort_options->GetMenuItemCount()) && (idx >= 0)) { m_sort_type = idx; - LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSort called. Type Value:%d",m_sort_type); } } //Copy a existing save, need to get more arguments. maybe a new dialog. @@ -300,8 +304,6 @@ void SaveDataListDialog::OnRightClick(wxMouseEvent& event) m_sort_options->Append(0, "UserID"); m_sort_options->Append(1, "Title"); m_sort_options->Append(2, "Subtitle"); - //Well you can not use direct index cause you can not get its index through wxCommandEvent - m_sort_options->Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this); menu->AppendSubMenu(m_sort_options, "&Sort"); menu->AppendSeparator(); diff --git a/rpcs3/Gui/SaveDataUtility.h b/rpcs3/Gui/SaveDataUtility.h index c04fa8f910..88037add29 100644 --- a/rpcs3/Gui/SaveDataUtility.h +++ b/rpcs3/Gui/SaveDataUtility.h @@ -27,7 +27,8 @@ struct SaveDataEntry enum { - id_copy, + //Reserved some Ids for Sort-By Submenu. + id_copy = 64, id_remove, id_info }; From d949ef1b8a626afc1638df2d9f768a72cb9d70da Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Fri, 15 Aug 2014 21:36:20 +0800 Subject: [PATCH 346/499] Removed checking <0 on unsigned int. (lol) --- rpcs3/Gui/SaveDataUtility.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rpcs3/Gui/SaveDataUtility.cpp b/rpcs3/Gui/SaveDataUtility.cpp index 8c888dc084..82ed6a70d2 100644 --- a/rpcs3/Gui/SaveDataUtility.cpp +++ b/rpcs3/Gui/SaveDataUtility.cpp @@ -96,8 +96,7 @@ SaveDataManageDialog::SaveDataManageDialog(wxWindow* parent, unsigned int* sort_ if (m_sort_type != nullptr) { //Check sort type and set it to combo box - if ((*m_sort_type >= m_sort_options->GetCount()) - || (*m_sort_type < 0)) + if (*m_sort_type >= m_sort_options->GetCount()) { *m_sort_type = 0; } From d36580f1dc5c75691f357e2f311c6e54f085d1ec Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Fri, 15 Aug 2014 17:57:55 +0300 Subject: [PATCH 347/499] Huge SceNp header additions and splitting TUS, SNS, Commerce and Clans modules are now in seperate files. Added a lot of headers and structures. --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 22 +- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 978 --------- rpcs3/Emu/SysCalls/Modules/sceNp.h | 1899 ++++++++++++++++- rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp | 293 +++ rpcs3/Emu/SysCalls/Modules/sceNpClans.h | 253 +++ rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp | 347 +++ rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h | 275 +++ rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp | 18 + rpcs3/Emu/SysCalls/Modules/sceNpSns.h | 38 + rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpTrophy.h | 2 +- rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp | 397 ++++ rpcs3/Emu/SysCalls/Modules/sceNpTus.h | 46 + rpcs3/emucore.vcxproj | 8 + rpcs3/emucore.vcxproj.filters | 24 + 15 files changed, 3586 insertions(+), 1015 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp create mode 100644 rpcs3/Emu/SysCalls/Modules/sceNpClans.h create mode 100644 rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp create mode 100644 rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h create mode 100644 rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp create mode 100644 rpcs3/Emu/SysCalls/Modules/sceNpSns.h create mode 100644 rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp create mode 100644 rpcs3/Emu/SysCalls/Modules/sceNpTus.h diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 5e1d472032..76df8fb2f7 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -15,11 +15,6 @@ extern void cellFont_unload(); extern Module *cellFont; extern void sys_net_init(); extern Module *sys_net; -extern void sceNpTrophy_unload(); -extern void sceNpTrophy_init(); -extern Module *sceNpTrophy; -extern void sceNp_init(); -extern Module *sceNp; extern void cellUserInfo_init(); extern Module *cellUserInfo; extern void cellSysutil_init(); @@ -70,6 +65,23 @@ extern void cellVpost_init(); extern Module *cellVpost; extern void libmixer_init(); extern Module *libmixer; +extern void sceNp_init(); +extern Module *sceNp; +extern void sceNpClans_unload(); +extern void sceNpClans_init(); +extern Module *sceNpClans; +extern void sceNpCommerce2_unload(); +extern void sceNpCommerce2_init(); +extern Module *sceNpCommerce2; +extern void sceNpSns_unload(); +extern void sceNpSns_init(); +extern Module *sceNpSns; +extern void sceNpTrophy_unload(); +extern void sceNpTrophy_init(); +extern Module *sceNpTrophy; +extern void sceNpTus_unload(); +extern void sceNpTus_init(); +extern Module *sceNpTus; extern void sysPrxForUser_init(); extern Module *sysPrxForUser; extern void sys_fs_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index f8588f7c6d..253001353c 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -1471,844 +1471,6 @@ int sceNpLookupUserProfileAsync() return CELL_OK; } -int sceNpClansSendInvitationResponse() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansUpdateClanInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansRetrieveChallenges() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansSearchByProfile() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansGetMemberInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansCancelMembershipRequest() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansGetAutoAcceptStatus() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansTerm() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansDisbandClan() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansGetClanInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansAddBlacklistEntry() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansLeaveClan() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansGetBlacklist() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansSendMembershipRequest() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansRemoveBlacklistEntry() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansUpdateAutoAcceptStatus() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansGetClanListByNpId() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansCancelInvitation() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansRetrieveAnnouncements() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansPostChallenge() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansGetMemberList() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansRetrievePostedChallenges() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansSendMembershipResponse() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansCreateRequest() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansInit() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansChangeMemberRole() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansCreateClan() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansKickMember() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansSearchByName() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} -int sceNpClansPostAnnouncement() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansSendInvitation() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansGetClanList() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} -int sceNpClansRemoveChallenge() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansRemovePostedChallenge() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansDestroyRequest() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansJoinClan() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansRemoveAnnouncement() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansAbortRequest() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpClansUpdateMemberInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DoCheckoutStartAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetProductInfoListGetResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetContentRatingDescriptor() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetBGDLAvailability() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetStoreBrowseUserdata() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DestroyReq() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2Init() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetCategoryContentsStart() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DoDlListFinishAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2Term() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2CreateSessionAbort() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DoDlListStartAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DestroyCtx() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetCategoryContentsCreateReq() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2AbortReq() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetProductInfoStart() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2CreateSessionFinish() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetContentInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DoProductBrowseStartAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetProductInfoListStart() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DestroyGetCategoryContentsResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2SetBGDLAvailability() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetProductInfoCreateReq() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DoProductCodeFinishAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetContentRatingInfoFromCategoryInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DoProductBrowseFinishAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetCategoryInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetProductInfoGetResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetCategoryContentsGetResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2CreateSessionStart() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DoCheckoutFinishAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2InitGetCategoryContentsResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2CreateCtx() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetPrice() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetGameSkuInfoFromGameProductInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DoProductCodeStartAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2InitGetProductInfoListResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetProductInfoListCreateReq() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetGameProductInfoFromContentInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetContentRatingInfoFromGameProductInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2ExecuteStoreBrowse() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetGameProductInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DestroyGetProductInfoResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2DestroyGetProductInfoListResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2InitGetProductInfoResult() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpCommerce2GetCategoryInfoFromContentInfo() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDeleteMultiSlotDataVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiSlotVariable() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetMultiSlotVariableAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetDataVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiUserVariable() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusTryAndSetVariableVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusCreateTransactionCtx() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusPollAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusAddAndGetVariableAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusTerm() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiSlotVariableVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiSlotDataStatusVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiUserDataStatusVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDestroyTitleCtx() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDeleteMultiSlotDataAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusAbortTransaction() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiUserDataStatus() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusTryAndSetVariableVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiUserDataStatusVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetDataVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDestroyTransactionCtx() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusTryAndSetVariable() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetDataAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetTimeout() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiSlotDataStatusAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiUserVariableVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusCreateTitleCtx() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetData() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetData() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusInit() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusAddAndGetVariable() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiUserVariableVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetMultiSlotVariableVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetDataVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiSlotDataStatusVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusAddAndGetVariableVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetDataVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDeleteMultiSlotVariable() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusWaitAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiSlotVariableAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusTryAndSetVariableAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDeleteMultiSlotVariableVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDeleteMultiSlotVariableVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiUserDataStatusAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDeleteMultiSlotDataVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiSlotDataStatus() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiUserVariableAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetMultiSlotVariable() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDeleteMultiSlotData() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetDataAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusDeleteMultiSlotVariableAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusAddAndGetVariableVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusSetMultiSlotVariableVUser() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - -int sceNpTusGetMultiSlotVariableVUserAsync() -{ - UNIMPLEMENTED_FUNC(sceNp); - return CELL_OK; -} - int sceNpUtilBandwidthTestShutdown() { UNIMPLEMENTED_FUNC(sceNp); @@ -2562,146 +1724,6 @@ void sceNp_init() sceNp->AddFunc(0xfd39ae13, sceNpBasicGetFriendPresenceByNpId); sceNp->AddFunc(0xfe37a7f4, sceNpManagerGetNpId); sceNp->AddFunc(0xff0a2378, sceNpLookupUserProfileAsync); - sceNp->AddFunc(0x095e12c6, sceNpClansSendInvitationResponse); - sceNp->AddFunc(0x09f9e1a9, sceNpClansUpdateClanInfo); - sceNp->AddFunc(0x0df25834, sceNpClansRetrieveChallenges); - sceNp->AddFunc(0x1221a1bf, sceNpClansSearchByProfile); - sceNp->AddFunc(0x20472da0, sceNpClansGetMemberInfo); - sceNp->AddFunc(0x299ccc9b, sceNpClansCancelMembershipRequest); - sceNp->AddFunc(0x38dadf1f, sceNpClansGetAutoAcceptStatus); - sceNp->AddFunc(0x42332cb7, sceNpClansTerm); - sceNp->AddFunc(0x4826f6d5, sceNpClansDisbandClan); - sceNp->AddFunc(0x487de998, sceNpClansGetClanInfo); - sceNp->AddFunc(0x4d06aef7, sceNpClansAddBlacklistEntry); - sceNp->AddFunc(0x560f717b, sceNpClansLeaveClan); - sceNp->AddFunc(0x56bc5a7c, sceNpClansGetBlacklist); - sceNp->AddFunc(0x59743b2b, sceNpClansSendMembershipRequest); - sceNp->AddFunc(0x5bff9da1, sceNpClansRemoveBlacklistEntry); - sceNp->AddFunc(0x5da94854, sceNpClansUpdateAutoAcceptStatus); - sceNp->AddFunc(0x672399a8, sceNpClansGetClanListByNpId); - sceNp->AddFunc(0x726dffd5, sceNpClansCancelInvitation); - sceNp->AddFunc(0x727aa7f8, sceNpClansRetrieveAnnouncements); - sceNp->AddFunc(0x83d65529, sceNpClansPostChallenge); - sceNp->AddFunc(0x856ff5c0, sceNpClansGetMemberList); - sceNp->AddFunc(0x8e785b97, sceNpClansRetrievePostedChallenges); - sceNp->AddFunc(0x942dbdc4, sceNpClansSendMembershipResponse); - sceNp->AddFunc(0x9a72232d, sceNpClansCreateRequest); - sceNp->AddFunc(0x9b820047, sceNpClansInit); - sceNp->AddFunc(0x9cac2085, sceNpClansChangeMemberRole); - sceNp->AddFunc(0xa6a31a38, sceNpClansCreateClan); - sceNp->AddFunc(0xaa7912b5, sceNpClansKickMember); - sceNp->AddFunc(0xace0cfba, sceNpClansSearchByName); - sceNp->AddFunc(0xada45b84, sceNpClansPostAnnouncement); - sceNp->AddFunc(0xbc05ef31, sceNpClansSendInvitation); - sceNp->AddFunc(0xca4181b4, sceNpClansGetClanList); - sceNp->AddFunc(0xce6dc0f0, sceNpClansRemoveChallenge); - sceNp->AddFunc(0xd3346dc4, sceNpClansRemovePostedChallenge); - sceNp->AddFunc(0xd6551cd1, sceNpClansDestroyRequest); - sceNp->AddFunc(0xdbf300ca, sceNpClansJoinClan); - sceNp->AddFunc(0xe2590f60, sceNpClansRemoveAnnouncement); - sceNp->AddFunc(0xe82969e2, sceNpClansAbortRequest); - sceNp->AddFunc(0xf4a2d52b, sceNpClansUpdateMemberInfo); - sceNp->AddFunc(0x104551a6, sceNpCommerce2DoCheckoutStartAsync); - sceNp->AddFunc(0x146618df, sceNpCommerce2GetProductInfoListGetResult); - sceNp->AddFunc(0x150fdca3, sceNpCommerce2GetContentRatingDescriptor); - sceNp->AddFunc(0x1fa1b312, sceNpCommerce2GetStoreBrowseUserdata); - sceNp->AddFunc(0x2a910f05, sceNpCommerce2DestroyReq); - sceNp->AddFunc(0x3539d233, sceNpCommerce2Init); - sceNp->AddFunc(0x371a2edd, sceNpCommerce2GetCategoryContentsStart); - sceNp->AddFunc(0x3d627d81, sceNpCommerce2GetBGDLAvailability); - sceNp->AddFunc(0x410d42be, sceNpCommerce2DoDlListFinishAsync); - sceNp->AddFunc(0x4d4a094c, sceNpCommerce2Term); - sceNp->AddFunc(0x62023e98, sceNpCommerce2CreateSessionAbort); - sceNp->AddFunc(0x6ca9efd4, sceNpCommerce2DoDlListStartAsync); - sceNp->AddFunc(0x6f67ea80, sceNpCommerce2DestroyCtx); - sceNp->AddFunc(0x7370d8d0, sceNpCommerce2GetCategoryContentsCreateReq); - sceNp->AddFunc(0x8df0057f, sceNpCommerce2AbortReq); - sceNp->AddFunc(0x8f46325b, sceNpCommerce2GetProductInfoStart); - sceNp->AddFunc(0x91f8843d, sceNpCommerce2CreateSessionFinish); - sceNp->AddFunc(0x972ab46c, sceNpCommerce2GetContentInfo); - sceNp->AddFunc(0x9825a0fc, sceNpCommerce2DoProductBrowseStartAsync); - sceNp->AddFunc(0x9cde07cc, sceNpCommerce2GetProductInfoListStart); - sceNp->AddFunc(0x9d9cb96b, sceNpCommerce2DestroyGetCategoryContentsResult); - sceNp->AddFunc(0xa5a863fe, sceNpCommerce2SetBGDLAvailability); - sceNp->AddFunc(0xa975ebb4, sceNpCommerce2GetProductInfoCreateReq); - sceNp->AddFunc(0xa9f945b3, sceNpCommerce2DoProductCodeFinishAsync); - sceNp->AddFunc(0xac78c1f3, sceNpCommerce2GetContentRatingInfoFromCategoryInfo); - sceNp->AddFunc(0xb23e3bd1, sceNpCommerce2DoProductBrowseFinishAsync); - sceNp->AddFunc(0xbd49eab2, sceNpCommerce2GetCategoryInfo); - sceNp->AddFunc(0xbf5f58ea, sceNpCommerce2GetProductInfoGetResult); - sceNp->AddFunc(0xca0ea996, sceNpCommerce2GetCategoryContentsGetResult); - sceNp->AddFunc(0xcc18cd2c, sceNpCommerce2CreateSessionStart); - sceNp->AddFunc(0xd43a130e, sceNpCommerce2DoCheckoutFinishAsync); - sceNp->AddFunc(0xd8a473a3, sceNpCommerce2InitGetCategoryContentsResult); - sceNp->AddFunc(0xd9956ce7, sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult); - sceNp->AddFunc(0xd9fdcec2, sceNpCommerce2CreateCtx); - sceNp->AddFunc(0xda8e322d, sceNpCommerce2GetPrice); - sceNp->AddFunc(0xdb19194c, sceNpCommerce2GetGameSkuInfoFromGameProductInfo); - sceNp->AddFunc(0xde7ab33d, sceNpCommerce2DoProductCodeStartAsync); - sceNp->AddFunc(0xe0f90e44, sceNpCommerce2InitGetProductInfoListResult); - sceNp->AddFunc(0xe1e7b5ac, sceNpCommerce2GetProductInfoListCreateReq); - sceNp->AddFunc(0xe51a4944, sceNpCommerce2GetGameProductInfoFromContentInfo); - sceNp->AddFunc(0xec324c8f, sceNpCommerce2GetContentRatingInfoFromGameProductInfo); - sceNp->AddFunc(0xeef51be0, sceNpCommerce2ExecuteStoreBrowse); - sceNp->AddFunc(0xef645654, sceNpCommerce2GetGameProductInfo); - sceNp->AddFunc(0xef8eafcd, sceNpCommerce2DestroyGetProductInfoResult); - sceNp->AddFunc(0xf6139b58, sceNpCommerce2DestroyGetProductInfoListResult); - sceNp->AddFunc(0xf798f5e3, sceNpCommerce2InitGetProductInfoResult); - sceNp->AddFunc(0xfc216890, sceNpCommerce2GetCategoryInfoFromContentInfo); - sceNp->AddFunc(0x01711e81, sceNpTusDeleteMultiSlotDataVUser); - sceNp->AddFunc(0x0423e622, sceNpTusGetMultiSlotVariable); - sceNp->AddFunc(0x065b610d, sceNpTusSetMultiSlotVariableAsync); - sceNp->AddFunc(0x0835deb2, sceNpTusSetDataVUser); - sceNp->AddFunc(0x0d15043b, sceNpTusGetMultiUserVariable); - sceNp->AddFunc(0x17db7aa7, sceNpTusTryAndSetVariableVUserAsync); - sceNp->AddFunc(0x1904435e, sceNpTusCreateTransactionCtx); - sceNp->AddFunc(0x19bce18c, sceNpTusPollAsync); - sceNp->AddFunc(0x1fa5c87d, sceNpTusAddAndGetVariableAsync); - sceNp->AddFunc(0x225aed26, sceNpTusTerm); - sceNp->AddFunc(0x2357ba9e, sceNpTusGetMultiSlotVariableVUser); - sceNp->AddFunc(0x2ab21ea9, sceNpTusGetMultiSlotDataStatusVUserAsync); - sceNp->AddFunc(0x2d1b9f1a, sceNpTusGetMultiUserDataStatusVUser); - sceNp->AddFunc(0x2e162a62, sceNpTusDestroyTitleCtx); - sceNp->AddFunc(0x3175af23, sceNpTusDeleteMultiSlotDataAsync); - sceNp->AddFunc(0x325c6284, sceNpTusAbortTransaction); - sceNp->AddFunc(0x348dbcb4, sceNpTusGetMultiUserDataStatus); - sceNp->AddFunc(0x3602bc80, sceNpTusTryAndSetVariableVUser); - sceNp->AddFunc(0x368fec59, sceNpTusGetMultiUserDataStatusVUserAsync); - sceNp->AddFunc(0x38f364b0, sceNpTusGetDataVUserAsync); - sceNp->AddFunc(0x44eca8b4, sceNpTusDestroyTransactionCtx); - sceNp->AddFunc(0x47e9424a, sceNpTusTryAndSetVariable); - sceNp->AddFunc(0x5175abb9, sceNpTusGetDataAsync); - sceNp->AddFunc(0x59432970, sceNpTusSetTimeout); - sceNp->AddFunc(0x651fd79f, sceNpTusGetMultiSlotDataStatusAsync); - sceNp->AddFunc(0x6c511024, sceNpTusGetMultiUserVariableVUser); - sceNp->AddFunc(0x7caf58ee, sceNpTusCreateTitleCtx); - sceNp->AddFunc(0x7d5f0f0e, sceNpTusSetData); - sceNp->AddFunc(0x8ddd0d85, sceNpTusGetData); - sceNp->AddFunc(0x8f87a06b, sceNpTusInit); - sceNp->AddFunc(0x94989003, sceNpTusAddAndGetVariable); - sceNp->AddFunc(0x9549d22c, sceNpTusGetMultiUserVariableVUserAsync); - sceNp->AddFunc(0x96a06212, sceNpTusSetMultiSlotVariableVUserAsync); - sceNp->AddFunc(0x9cc0cf44, sceNpTusSetDataVUserAsync); - sceNp->AddFunc(0xa3abfadb, sceNpTusGetMultiSlotDataStatusVUser); - sceNp->AddFunc(0xa7993bf3, sceNpTusAddAndGetVariableVUserAsync); - sceNp->AddFunc(0xae4e590e, sceNpTusGetDataVUser); - sceNp->AddFunc(0xaf985783, sceNpTusDeleteMultiSlotVariable); - sceNp->AddFunc(0xb8e8ff22, sceNpTusWaitAsync); - sceNp->AddFunc(0xbb2877f2, sceNpTusGetMultiSlotVariableAsync); - sceNp->AddFunc(0xbbb244b7, sceNpTusTryAndSetVariableAsync); - sceNp->AddFunc(0xc2e18da8, sceNpTusDeleteMultiSlotVariableVUserAsync); - sceNp->AddFunc(0xc4e51fbf, sceNpTusDeleteMultiSlotVariableVUser); - sceNp->AddFunc(0xc66ba67e, sceNpTusGetMultiUserDataStatusAsync); - sceNp->AddFunc(0xc815b219, sceNpTusDeleteMultiSlotDataVUserAsync); - sceNp->AddFunc(0xc848d425, sceNpTusGetMultiSlotDataStatus); - sceNp->AddFunc(0xcc7a31cd, sceNpTusGetMultiUserVariableAsync); - sceNp->AddFunc(0xcc86a8f6, sceNpTusSetMultiSlotVariable); - sceNp->AddFunc(0xe0719847, sceNpTusDeleteMultiSlotData); - sceNp->AddFunc(0xe847341f, sceNpTusSetDataAsync); - sceNp->AddFunc(0xf5363608, sceNpTusDeleteMultiSlotVariableAsync); - sceNp->AddFunc(0xf60be06f, sceNpTusAddAndGetVariableVUser); - sceNp->AddFunc(0xf819be91, sceNpTusSetMultiSlotVariableVUser); - sceNp->AddFunc(0xfc7d346e, sceNpTusGetMultiSlotVariableVUserAsync); sceNp->AddFunc(0x432b3cbf, sceNpUtilBandwidthTestShutdown); sceNp->AddFunc(0xc2ced2b7, sceNpUtilBandwidthTestInitStart); sceNp->AddFunc(0xc880f37d, sceNpUtilBandwidthTestGetStatus); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.h b/rpcs3/Emu/SysCalls/Modules/sceNp.h index da5fd62d34..f8526e476d 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.h +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.h @@ -1,35 +1,37 @@ #pragma once +#include "cellRtc.h" + // Error Codes enum { // NP Manager Utility - SCE_NP_ERROR_NOT_INITIALIZED = 0x8002aa01, - SCE_NP_ERROR_ALREADY_INITIALIZED = 0x8002aa02, - SCE_NP_ERROR_INVALID_ARGUMENT = 0x8002aa03, - SCE_NP_ERROR_OUT_OF_MEMORY = 0x8002aa04, - SCE_NP_ERROR_ID_NO_SPACE = 0x8002aa05, - SCE_NP_ERROR_ID_NOT_FOUND = 0x8002aa06, - SCE_NP_ERROR_SESSION_RUNNING = 0x8002aa07, - SCE_NP_ERROR_LOGINID_ALREADY_EXISTS = 0x8002aa08, - SCE_NP_ERROR_INVALID_TICKET_SIZE = 0x8002aa09, - SCE_NP_ERROR_INVALID_STATE = 0x8002aa0a, - SCE_NP_ERROR_ABORTED = 0x8002aa0b, - SCE_NP_ERROR_OFFLINE = 0x8002aa0c, - SCE_NP_ERROR_VARIANT_ACCOUNT_ID = 0x8002aa0d, - SCE_NP_ERROR_GET_CLOCK = 0x8002aa0e, - SCE_NP_ERROR_INSUFFICIENT_BUFFER = 0x8002aa0f, - SCE_NP_ERROR_EXPIRED_TICKET = 0x8002aa10, - SCE_NP_ERROR_TICKET_PARAM_NOT_FOUND = 0x8002aa11, - SCE_NP_ERROR_UNSUPPORTED_TICKET_VERSION = 0x8002aa12, - SCE_NP_ERROR_TICKET_STATUS_CODE_INVALID = 0x8002aa13, - SCE_NP_ERROR_INVALID_TICKET_VERSION = 0x8002aa14, - SCE_NP_ERROR_ALREADY_USED = 0x8002aa15, - SCE_NP_ERROR_DIFFERENT_USER = 0x8002aa16, - SCE_NP_ERROR_ALREADY_DONE = 0x8002aa17, + SCE_NP_ERROR_NOT_INITIALIZED = 0x8002aa01, + SCE_NP_ERROR_ALREADY_INITIALIZED = 0x8002aa02, + SCE_NP_ERROR_INVALID_ARGUMENT = 0x8002aa03, + SCE_NP_ERROR_OUT_OF_MEMORY = 0x8002aa04, + SCE_NP_ERROR_ID_NO_SPACE = 0x8002aa05, + SCE_NP_ERROR_ID_NOT_FOUND = 0x8002aa06, + SCE_NP_ERROR_SESSION_RUNNING = 0x8002aa07, + SCE_NP_ERROR_LOGINID_ALREADY_EXISTS = 0x8002aa08, + SCE_NP_ERROR_INVALID_TICKET_SIZE = 0x8002aa09, + SCE_NP_ERROR_INVALID_STATE = 0x8002aa0a, + SCE_NP_ERROR_ABORTED = 0x8002aa0b, + SCE_NP_ERROR_OFFLINE = 0x8002aa0c, + SCE_NP_ERROR_VARIANT_ACCOUNT_ID = 0x8002aa0d, + SCE_NP_ERROR_GET_CLOCK = 0x8002aa0e, + SCE_NP_ERROR_INSUFFICIENT_BUFFER = 0x8002aa0f, + SCE_NP_ERROR_EXPIRED_TICKET = 0x8002aa10, + SCE_NP_ERROR_TICKET_PARAM_NOT_FOUND = 0x8002aa11, + SCE_NP_ERROR_UNSUPPORTED_TICKET_VERSION = 0x8002aa12, + SCE_NP_ERROR_TICKET_STATUS_CODE_INVALID = 0x8002aa13, + SCE_NP_ERROR_INVALID_TICKET_VERSION = 0x8002aa14, + SCE_NP_ERROR_ALREADY_USED = 0x8002aa15, + SCE_NP_ERROR_DIFFERENT_USER = 0x8002aa16, + SCE_NP_ERROR_ALREADY_DONE = 0x8002aa17, }; -// NP Manager Utility: Status +// NP Manager Utility statuses enum { SCE_NP_MANAGER_STATUS_OFFLINE = -1, @@ -39,22 +41,1857 @@ enum SCE_NP_MANAGER_STATUS_ONLINE = 3, }; +// IDs for attachment data objects enum { - SCE_NP_COMMUNICATION_SIGNATURE_SIZE = 160, - SCE_NET_NP_COMMUNICATION_PASSPHRASE_SIZE = 128, + SCE_NP_BASIC_INVALID_ATTACHMENT_DATA_ID = 0, + SCE_NP_BASIC_SELECTED_INVITATION_DATA = 1, + SCE_NP_BASIC_SELECTED_MESSAGE_DATA = 2, }; -// Structs +// Actions made in system GUI +enum +{ + SCE_NP_BASIC_MESSAGE_ACTION_UNKNOWN = 0, + SCE_NP_BASIC_MESSAGE_ACTION_USE = 1, + SCE_NP_BASIC_MESSAGE_ACTION_ACCEPT = 2, + SCE_NP_BASIC_MESSAGE_ACTION_DENY = 3, +}; + +// Main types of messages +enum +{ + SCE_NP_BASIC_MESSAGE_MAIN_TYPE_DATA_ATTACHMENT = 0, + SCE_NP_BASIC_MESSAGE_MAIN_TYPE_GENERAL = 1, + SCE_NP_BASIC_MESSAGE_MAIN_TYPE_ADD_FRIEND = 2, + SCE_NP_BASIC_MESSAGE_MAIN_TYPE_INVITE = 3, + SCE_NP_BASIC_MESSAGE_MAIN_TYPE_CUSTOM_DATA = 4, + SCE_NP_BASIC_MESSAGE_MAIN_TYPE_URL_ATTACHMENT = 5, +}; + +// Sub types of messages +enum +{ + SCE_NP_BASIC_MESSAGE_DATA_ATTACHMENT_SUBTYPE_ACTION_USE = 0, + SCE_NP_BASIC_MESSAGE_GENERAL_SUBTYPE_NONE = 0, + SCE_NP_BASIC_MESSAGE_ADD_FRIEND_SUBTYPE_NONE = 0, + SCE_NP_BASIC_MESSAGE_INVITE_SUBTYPE_ACTION_ACCEPT_DENY = 0, + SCE_NP_BASIC_MESSAGE_CUSTOM_DATA_SUBTYPE_ACTION_USE = 0, + SCE_NP_BASIC_MESSAGE_URL_ATTACHMENT_SUBTYPE_ACTION_USE = 0, + SCE_NP_BASIC_MESSAGE_INVITE_SUBTYPE_ACTION_ACCEPT = 1, +}; + +// Applicable features of messages +enum +{ + SCE_NP_BASIC_MESSAGE_FEATURES_MULTI_RECEIPIENTS = 0x00000001, + SCE_NP_BASIC_MESSAGE_FEATURES_BOOTABLE = 0x00000002, + SCE_NP_BASIC_MESSAGE_FEATURES_ASSUME_SEND = 0x00000004, +}; + +// Types of messages +enum +{ + SCE_NP_BASIC_MESSAGE_INFO_TYPE_MESSAGE_ATTACHMENT = 0, + SCE_NP_BASIC_MESSAGE_INFO_TYPE_MATCHING_INVITATION = 1, + SCE_NP_BASIC_MESSAGE_INFO_TYPE_CLAN_MESSAGE = 3, + SCE_NP_BASIC_MESSAGE_INFO_TYPE_CUSTOM_DATA_MESSAGE = 4, + SCE_NP_BASIC_MESSAGE_INFO_TYPE_ANY_UNREAD_MESSAGE = 5, + SCE_NP_BASIC_MESSAGE_INFO_TYPE_BOOTABLE_INVITATION = 6, + SCE_NP_BASIC_MESSAGE_INFO_TYPE_BOOTABLE_CUSTOM_DATA_MESSAGE = 7, +}; + +// Comparison operator specified as the search condition +enum +{ + SCE_NP_MATCHING2_OPERATOR_EQ = 1, + SCE_NP_MATCHING2_OPERATOR_NE = 2, + SCE_NP_MATCHING2_OPERATOR_LT = 3, + SCE_NP_MATCHING2_OPERATOR_LE = 4, + SCE_NP_MATCHING2_OPERATOR_GT = 5, + SCE_NP_MATCHING2_OPERATOR_GE = 6, +}; + +// Message cast type +enum +{ + SCE_NP_MATCHING2_CASTTYPE_BROADCAST = 1, + SCE_NP_MATCHING2_CASTTYPE_UNICAST = 2, + SCE_NP_MATCHING2_CASTTYPE_MULTICAST = 3, + SCE_NP_MATCHING2_CASTTYPE_MULTICAST_TEAM = 4, +}; + +// Session type +enum +{ + SCE_NP_MATCHING2_SESSION_TYPE_LOBBY = 1, + SCE_NP_MATCHING2_SESSION_TYPE_ROOM = 2, +}; + +// Signaling type +enum +{ + SCE_NP_MATCHING2_SIGNALING_TYPE_NONE = 0, + SCE_NP_MATCHING2_SIGNALING_TYPE_MESH = 1, + SCE_NP_MATCHING2_SIGNALING_TYPE_STAR = 2, +}; + +// Event cause +enum +{ + SCE_NP_MATCHING2_EVENT_CAUSE_LEAVE_ACTION = 1, + SCE_NP_MATCHING2_EVENT_CAUSE_KICKOUT_ACTION = 2, + SCE_NP_MATCHING2_EVENT_CAUSE_GRANT_OWNER_ACTION = 3, + SCE_NP_MATCHING2_EVENT_CAUSE_SERVER_OPERATION = 4, + SCE_NP_MATCHING2_EVENT_CAUSE_MEMBER_DISAPPEARED = 5, + SCE_NP_MATCHING2_EVENT_CAUSE_SERVER_INTERNAL = 6, + SCE_NP_MATCHING2_EVENT_CAUSE_CONNECTION_ERROR = 7, + SCE_NP_MATCHING2_EVENT_CAUSE_NP_SIGNED_OUT = 8, + SCE_NP_MATCHING2_EVENT_CAUSE_SYSTEM_ERROR = 9, + SCE_NP_MATCHING2_EVENT_CAUSE_CONTEXT_ERROR = 10, + SCE_NP_MATCHING2_EVENT_CAUSE_CONTEXT_ACTION = 11, +}; + +// Server status +enum +{ + SCE_NP_MATCHING2_SERVER_STATUS_AVAILABLE = 1, + SCE_NP_MATCHING2_SERVER_STATUS_UNAVAILABLE = 2, + SCE_NP_MATCHING2_SERVER_STATUS_BUSY = 3, + SCE_NP_MATCHING2_SERVER_STATUS_MAINTENANCE = 4, +}; + +// Member role +enum +{ + SCE_NP_MATCHING2_ROLE_MEMBER = 1, + SCE_NP_MATCHING2_ROLE_OWNER = 2, +}; + +// Status of kicked-out member with regards to rejoining +enum +{ + SCE_NP_MATCHING2_BLOCKKICKFLAG_OK = 0, + SCE_NP_MATCHING2_BLOCKKICKFLAG_NG = 1, +}; + +// Sort method +enum +{ + SCE_NP_MATCHING2_SORT_METHOD_JOIN_DATE = 0, + SCE_NP_MATCHING2_SORT_METHOD_SLOT_NUMBER = 1, +}; + +// Context options (matching) +enum +{ + SCE_NP_MATCHING2_CONTEXT_OPTION_USE_ONLINENAME = 0x01, + SCE_NP_MATCHING2_CONTEXT_OPTION_USE_AVATARURL = 0x02, +}; + +// User information acquisition option +enum +{ + SCE_NP_MATCHING2_GET_USER_INFO_LIST_OPTION_WITH_ONLINENAME = 0x01, + SCE_NP_MATCHING2_GET_USER_INFO_LIST_OPTION_WITH_AVATARURL = 0x02, +}; + +// Room search options +enum +{ + SCE_NP_MATCHING2_SEARCH_ROOM_OPTION_WITH_NPID = 0x01, + SCE_NP_MATCHING2_SEARCH_ROOM_OPTION_WITH_ONLINENAME = 0x02, + SCE_NP_MATCHING2_SEARCH_ROOM_OPTION_WITH_AVATARURL = 0x04, + SCE_NP_MATCHING2_SEARCH_ROOM_OPTION_NAT_TYPE_FILTER = 0x08, + SCE_NP_MATCHING2_SEARCH_ROOM_OPTION_RANDOM = 0x10, +}; + +// Send options +enum +{ + SCE_NP_MATCHING2_SEND_MSG_OPTION_WITH_NPID = 0x01, + SCE_NP_MATCHING2_SEND_MSG_OPTION_WITH_ONLINENAME = 0x02, + SCE_NP_MATCHING2_SEND_MSG_OPTION_WITH_AVATARURL = 0x04, +}; + +// Flag-type lobby attribute +enum +{ + SCE_NP_MATCHING2_LOBBY_FLAG_ATTR_PERMANENT = 0x80000000, + SCE_NP_MATCHING2_LOBBY_FLAG_ATTR_CLAN = 0x40000000, + SCE_NP_MATCHING2_LOBBY_FLAG_ATTR_MEMBER_NOTIFICATION = 0x20000000, +}; + +// Attribute ID of lobby member internal binary attribute +enum +{ + SCE_NP_MATCHING2_LOBBYMEMBER_BIN_ATTR_INTERNAL_1_ID = 0x0039, +}; + +// Flag-type room attribute +enum +{ + SCE_NP_MATCHING2_ROOM_FLAG_ATTR_OWNER_AUTO_GRANT = 0x80000000, + SCE_NP_MATCHING2_ROOM_FLAG_ATTR_CLOSED = 0x40000000, + SCE_NP_MATCHING2_ROOM_FLAG_ATTR_FULL = 0x20000000, + SCE_NP_MATCHING2_ROOM_FLAG_ATTR_HIDDEN = 0x10000000, + SCE_NP_MATCHING2_ROOM_FLAG_ATTR_NAT_TYPE_RESTRICTION = 0x04000000, + SCE_NP_MATCHING2_ROOM_FLAG_ATTR_PROHIBITIVE_MODE = 0x02000000, +}; + +// Flah-type room member attribute +enum +{ + SCE_NP_MATCHING2_ROOMMEMBER_FLAG_ATTR_OWNER = 0x80000000, +}; + +// ID of external room search integer attribute +enum +{ + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_1_ID = 0x004c, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_2_ID = 0x004d, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_3_ID = 0x004e, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_4_ID = 0x004f, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_5_ID = 0x0050, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_6_ID = 0x0051, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_7_ID = 0x0052, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_8_ID = 0x0053, +}; + +// ID of external room search binary attribute +enum +{ + SCE_NP_MATCHING2_ROOM_SEARCHABLE_BIN_ATTR_EXTERNAL_1_ID = 0x0054, +}; + +// ID of external room binary attribute +enum +{ + SCE_NP_MATCHING2_ROOM_BIN_ATTR_EXTERNAL_1_ID = 0x0055, + SCE_NP_MATCHING2_ROOM_BIN_ATTR_EXTERNAL_2_ID = 0x0056, +}; + +// ID of internal room binary attribute +enum +{ + SCE_NP_MATCHING2_ROOM_BIN_ATTR_INTERNAL_1_ID = 0x0057, + SCE_NP_MATCHING2_ROOM_BIN_ATTR_INTERNAL_2_ID = 0x0058, +}; + +// ID of internal room member binary attribute +enum +{ + SCE_NP_MATCHING2_ROOMMEMBER_BIN_ATTR_INTERNAL_1_ID = 0x0059, +}; + +// Attribute ID of user binary attribute +enum +{ + SCE_NP_MATCHING2_USER_BIN_ATTR_1_ID = 0x005f, +}; + +// Event of request functions +enum +{ + SCE_NP_MATCHING2_REQUEST_EVENT_GetServerInfo = 0x0001, + SCE_NP_MATCHING2_REQUEST_EVENT_GetWorldInfoList = 0x0002, + SCE_NP_MATCHING2_REQUEST_EVENT_GetRoomMemberDataExternalList = 0x0003, + SCE_NP_MATCHING2_REQUEST_EVENT_SetRoomDataExternal = 0x0004, + SCE_NP_MATCHING2_REQUEST_EVENT_GetRoomDataExternalList = 0x0005, + SCE_NP_MATCHING2_REQUEST_EVENT_GetLobbyInfoList = 0x0006, + SCE_NP_MATCHING2_REQUEST_EVENT_SetUserInfo = 0x0007, + SCE_NP_MATCHING2_REQUEST_EVENT_GetUserInfoList = 0x0008, + SCE_NP_MATCHING2_REQUEST_EVENT_CreateServerContext = 0x0009, + SCE_NP_MATCHING2_REQUEST_EVENT_DeleteServerContext = 0x000a, + SCE_NP_MATCHING2_REQUEST_EVENT_CreateJoinRoom = 0x0101, + SCE_NP_MATCHING2_REQUEST_EVENT_JoinRoom = 0x0102, + SCE_NP_MATCHING2_REQUEST_EVENT_LeaveRoom = 0x0103, + SCE_NP_MATCHING2_REQUEST_EVENT_GrantRoomOwner = 0x0104, + SCE_NP_MATCHING2_REQUEST_EVENT_KickoutRoomMember = 0x0105, + SCE_NP_MATCHING2_REQUEST_EVENT_SearchRoom = 0x0106, + SCE_NP_MATCHING2_REQUEST_EVENT_SendRoomChatMessage = 0x0107, + SCE_NP_MATCHING2_REQUEST_EVENT_SendRoomMessage = 0x0108, + SCE_NP_MATCHING2_REQUEST_EVENT_SetRoomDataInternal = 0x0109, + SCE_NP_MATCHING2_REQUEST_EVENT_GetRoomDataInternal = 0x010a, + SCE_NP_MATCHING2_REQUEST_EVENT_SetRoomMemberDataInternal = 0x010b, + SCE_NP_MATCHING2_REQUEST_EVENT_GetRoomMemberDataInternal = 0x010c, + SCE_NP_MATCHING2_REQUEST_EVENT_SetSignalingOptParam = 0x010d, + SCE_NP_MATCHING2_REQUEST_EVENT_JoinLobby = 0x0201, + SCE_NP_MATCHING2_REQUEST_EVENT_LeaveLobby = 0x0202, + SCE_NP_MATCHING2_REQUEST_EVENT_SendLobbyChatMessage = 0x0203, + SCE_NP_MATCHING2_REQUEST_EVENT_SendLobbyInvitation = 0x0204, + SCE_NP_MATCHING2_REQUEST_EVENT_SetLobbyMemberDataInternal = 0x0205, + SCE_NP_MATCHING2_REQUEST_EVENT_GetLobbyMemberDataInternal = 0x0206, + SCE_NP_MATCHING2_REQUEST_EVENT_GetLobbyMemberDataInternalList = 0x0207, + SCE_NP_MATCHING2_REQUEST_EVENT_SignalingGetPingInfo = 0x0e01, +}; + +// Room event +enum +{ + SCE_NP_MATCHING2_ROOM_EVENT_MemberJoined = 0x1101, + SCE_NP_MATCHING2_ROOM_EVENT_MemberLeft = 0x1102, + SCE_NP_MATCHING2_ROOM_EVENT_Kickedout = 0x1103, + SCE_NP_MATCHING2_ROOM_EVENT_RoomDestroyed = 0x1104, + SCE_NP_MATCHING2_ROOM_EVENT_RoomOwnerChanged = 0x1105, + SCE_NP_MATCHING2_ROOM_EVENT_UpdatedRoomDataInternal = 0x1106, + SCE_NP_MATCHING2_ROOM_EVENT_UpdatedRoomMemberDataInternal = 0x1107, + SCE_NP_MATCHING2_ROOM_EVENT_UpdatedSignalingOptParam = 0x1108, +}; + +// Room message event +enum +{ + SCE_NP_MATCHING2_ROOM_MSG_EVENT_ChatMessage = 0x2101, + SCE_NP_MATCHING2_ROOM_MSG_EVENT_Message = 0x2102, +}; + +// Lobby event +enum +{ + SCE_NP_MATCHING2_LOBBY_EVENT_MemberJoined = 0x3201, + SCE_NP_MATCHING2_LOBBY_EVENT_MemberLeft = 0x3202, + SCE_NP_MATCHING2_LOBBY_EVENT_LobbyDestroyed = 0x3203, + SCE_NP_MATCHING2_LOBBY_EVENT_UpdatedLobbyMemberDataInternal = 0x3204, +}; + +// Lobby message event +enum +{ + SCE_NP_MATCHING2_LOBBY_MSG_EVENT_ChatMessage = 0x4201, + SCE_NP_MATCHING2_LOBBY_MSG_EVENT_Invitation = 0x4202, +}; + +// Signaling event +enum +{ + SCE_NP_MATCHING2_SIGNALING_EVENT_Dead = 0x5101, + SCE_NP_MATCHING2_SIGNALING_EVENT_Established = 0x5102, +}; + +// Context event +enum +{ + SCE_NP_MATCHING2_CONTEXT_EVENT_StartOver = 0x6f01, + SCE_NP_MATCHING2_CONTEXT_EVENT_Start = 0x6f02, + SCE_NP_MATCHING2_CONTEXT_EVENT_Stop = 0x6f03, +}; + +// Context options (signaling) +enum +{ + SCE_NP_SIGNALING_CTX_OPT_BANDWIDTH_PROBE_DISABLE = 0, + SCE_NP_SIGNALING_CTX_OPT_BANDWIDTH_PROBE_ENABLE = 1, + SCE_NP_SIGNALING_CTX_OPT_BANDWIDTH_PROBE = 1, +}; + +// Event types (including extended ones) +enum +{ + SCE_NP_SIGNALING_EVENT_DEAD = 0, + SCE_NP_SIGNALING_EVENT_ESTABLISHED = 1, + SCE_NP_SIGNALING_EVENT_NETINFO_ERROR = 2, + SCE_NP_SIGNALING_EVENT_NETINFO_RESULT = 3, + SCE_NP_SIGNALING_EVENT_EXT_PEER_ACTIVATED = 10, + SCE_NP_SIGNALING_EVENT_EXT_PEER_DEACTIVATED = 11, + SCE_NP_SIGNALING_EVENT_EXT_MUTUAL_ACTIVATED = 12, +}; + +// Connection states +enum +{ + SCE_NP_SIGNALING_CONN_STATUS_INACTIVE = 0, + SCE_NP_SIGNALING_CONN_STATUS_PENDING = 1, + SCE_NP_SIGNALING_CONN_STATUS_ACTIVE = 2, +}; + +// Connection information to obtain +enum +{ + SCE_NP_SIGNALING_CONN_INFO_RTT = 1, + SCE_NP_SIGNALING_CONN_INFO_BANDWIDTH = 2, + SCE_NP_SIGNALING_CONN_INFO_PEER_NPID = 3, + SCE_NP_SIGNALING_CONN_INFO_PEER_ADDRESS = 4, + SCE_NP_SIGNALING_CONN_INFO_MAPPED_ADDRESS = 5, + SCE_NP_SIGNALING_CONN_INFO_PACKET_LOSS = 6, +}; + +// NAT status type +enum +{ + SCE_NP_SIGNALING_NETINFO_NAT_STATUS_UNKNOWN = 0, + SCE_NP_SIGNALING_NETINFO_NAT_STATUS_TYPE1 = 1, + SCE_NP_SIGNALING_NETINFO_NAT_STATUS_TYPE2 = 2, + SCE_NP_SIGNALING_NETINFO_NAT_STATUS_TYPE3 = 3, +}; + +// UPnP status +enum +{ + SCE_NP_SIGNALING_NETINFO_UPNP_STATUS_UNKNOWN = 0, + SCE_NP_SIGNALING_NETINFO_UPNP_STATUS_INVALID = 1, + SCE_NP_SIGNALING_NETINFO_UPNP_STATUS_VALID = 2, +}; + +// NP port status +enum +{ + SCE_NP_SIGNALING_NETINFO_NPPORT_STATUS_CLOSED = 0, + SCE_NP_SIGNALING_NETINFO_NPPORT_STATUS_OPEN = 1, +}; + +// Constants for common NP functions and structures +enum +{ + SCE_NET_NP_AVATAR_IMAGE_MAX_SIZE = 204800, + SCE_NET_NP_AVATAR_IMAGE_MAX_SIZE_LARGE = 204800, + SCE_NET_NP_AVATAR_IMAGE_MAX_SIZE_MIDDLE = 102400, + SCE_NET_NP_AVATAR_IMAGE_MAX_SIZE_SMALL = 10240, + SCE_NET_NP_AVATAR_URL_MAX_LENGTH = 127, + SCE_NET_NP_ONLINEID_MIN_LENGTH = 3, + SCE_NET_NP_ONLINEID_MAX_LENGTH = 16, + SCE_NET_NP_ONLINENAME_MAX_LENGTH = 48, + SCE_NET_NP_ABOUT_ME_MAX_LENGTH = 63, + SCE_NP_FRIEND_MAX_NUM = 100, + SCE_NET_NP_COMMUNICATION_PASSPHRASE_SIZE = 128, + SCE_NP_COMMUNICATION_SIGNATURE_SIZE = 160, + SCE_NP_COMMUNICATION_PASSPHRASE_SIZE = SCE_NET_NP_COMMUNICATION_PASSPHRASE_SIZE, +}; + +// Constants for basic NP functions and structures +enum +{ + SCE_NP_BASIC_MAX_MESSAGE_SIZE = 512, + SCE_NP_BASIC_MAX_PRESENCE_SIZE = 128, + SCE_NP_BASIC_MAX_MESSAGE_ATTACHMENT_SIZE = 1048576, + SCE_NP_BASIC_SUBJECT_CHARACTER_MAX = 18, + SCE_NP_BASIC_BODY_CHARACTER_MAX = 512, + SCE_NP_BASIC_DESCRIPTION_CHARACTER_MAX = 341, + SCE_NP_BASIC_SEND_MESSAGE_MAX_RECIPIENTS = 12, + SCE_NP_BASIC_PRESENCE_TITLE_SIZE_MAX = 128, + SCE_NP_BASIC_PRESENCE_STATUS_SIZE_MAX = 64, + SCE_NP_BASIC_PRESENCE_STATUS_CHARACTER_MAX = 21, + SCE_NP_BASIC_PRESENCE_EXTENDED_STATUS_SIZE_MAX = 192, + SCE_NP_BASIC_PRESENCE_EXTENDED_STATUS_CHARACTER_MAX = 63, + SCE_NP_BASIC_PRESENCE_COMMENT_SIZE_MAX = 64, + SCE_NP_BASIC_MAX_INVITATION_DATA_SIZE = 1024, + SCE_NP_BASIC_MAX_URL_ATTACHMENT_SIZE = 2048, + SCE_NP_BASIC_PLAYER_HISTORY_MAX_PLAYERS = 8, +}; + +// Common constants of sceNpClans +enum +{ + SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH = 64, + SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH = 8, + SCE_NP_CLANS_CLAN_DESCRIPTION_MAX_LENGTH = 255, +}; + +// Constants for custom menu functions and structures +enum +{ + SCE_NP_CUSTOM_MENU_ACTION_CHARACTER_MAX = 21, + SCE_NP_CUSTOM_MENU_ACTION_ITEMS_MAX = 7, + SCE_NP_CUSTOM_MENU_ACTION_ITEMS_TOTAL_MAX = 16, + SCE_NP_CUSTOM_MENU_EXCEPTION_ITEMS_MAX = 256, +}; + +// Constants for manager functions and structures +enum +{ + SCE_NP_COOKIE_MAX_SIZE = 1024, + SCE_NP_TICKET_MAX_SIZE = 65536, + SCE_NP_TICKET_PARAM_DATA_LEN = 256, + SCE_NP_ENTITLEMENT_ID_SIZE = 32, +}; + +// Constants for matching functions and structures +enum +{ + SCE_NP_MATCHING2_ALLOWED_USER_MAX = 100, + SCE_NP_MATCHING2_BLOCKED_USER_MAX = 100, + SCE_NP_MATCHING2_CHAT_MSG_MAX_SIZE = 1024, + SCE_NP_MATCHING2_BIN_MSG_MAX_SIZE = 1024, + SCE_NP_MATCHING2_GROUP_LABEL_SIZE = 8, + SCE_NP_MATCHING2_INVITATION_OPTION_DATA_MAX_SIZE = 32, + SCE_NP_MATCHING2_INVITATION_TARGET_SESSION_MAX = 2, + SCE_NP_MATCHING2_LOBBY_MEMBER_DATA_INTERNAL_LIST_MAX = 256, + SCE_NP_MATCHING2_LOBBY_MEMBER_DATA_INTERNAL_EXTENDED_DATA_LIST_MAX = 64, + SCE_NP_MATCHING2_LOBBYMEMBER_BIN_ATTR_INTERNAL_NUM = 1, + SCE_NP_MATCHING2_LOBBYMEMBER_BIN_ATTR_INTERNAL_MAX_SIZE = 64, + SCE_NP_MATCHING2_LOBBY_MAX_SLOT = 256, + SCE_NP_MATCHING2_PRESENCE_OPTION_DATA_SIZE = 16, + SCE_NP_MATCHING2_RANGE_FILTER_START_INDEX_MIN = 1, + SCE_NP_MATCHING2_RANGE_FILTER_MAX = 20, + SCE_NP_MATCHING2_ROOM_MAX_SLOT = 64, + SCE_NP_MATCHING2_ROOM_GROUP_ID_MAX = 15, + SCE_NP_MATCHING2_ROOM_BIN_ATTR_EXTERNAL_NUM = 2, + SCE_NP_MATCHING2_ROOM_BIN_ATTR_EXTERNAL_MAX_SIZE = 256, + SCE_NP_MATCHING2_ROOM_BIN_ATTR_INTERNAL_NUM = 2, + SCE_NP_MATCHING2_ROOM_BIN_ATTR_INTERNAL_MAX_SIZE = 256, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_INT_ATTR_EXTERNAL_NUM = 8, + SCE_NP_MATCHING2_ROOM_SEARCHABLE_BIN_ATTR_EXTERNAL_MAX_SIZE = 64, + SCE_NP_MATCHING2_ROOMMEMBER_BIN_ATTR_INTERNAL_NUM = 1, + SCE_NP_MATCHING2_ROOMMEMBER_BIN_ATTR_INTERNAL_MAX_SIZE = 64, + SCE_NP_MATCHING2_SESSION_PASSWORD_SIZE = 8, + SCE_NP_MATCHING2_USER_BIN_ATTR_NUM = 1, + SCE_NP_MATCHING2_USER_BIN_ATTR_MAX_SIZE = 128, + SCE_NP_MATCHING2_GET_USER_INFO_LIST_NPID_NUM_MAX = 25, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetServerInfo = 4, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetWorldInfoList = 3848, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetRoomMemberDataExternalList = 15624, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetRoomDataExternalList = 25768, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetLobbyInfoList = 1296, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetUserInfoList = 17604, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_CreateJoinRoom = 25224, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_JoinRoom = 25224, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_SearchRoom = 25776, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_SendRoomChatMessage = 1, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetRoomDataInternal = 25224, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetRoomMemberDataInternal = 372, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_JoinLobby = 1124, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_SendLobbyChatMessage = 1, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetLobbyMemberDataInternal = 672, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetLobbyMemberDataInternalList = 42760, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_SignalingGetPingInfo = 40, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomMemberUpdateInfo = 396, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomUpdateInfo = 28, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomOwnerUpdateInfo = 40, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomDataInternalUpdateInfo = 26208, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomMemberDataInternalUpdateInfo = 493, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_SignalingOptParamUpdateInfo = 8, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomMessageInfo = 1407, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_LobbyMemberUpdateInfo = 696, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_LobbyUpdateInfo = 8, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_LobbyMemberDataInternalUpdateInfo = 472, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_LobbyMessageInfo = 1790, + SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_LobbyInvitationInfo = 870, +}; + +// Constants for ranking (score) functions and structures +enum +{ + SCE_NP_SCORE_COMMENT_MAXLEN = 63, + SCE_NP_SCORE_CENSOR_COMMENT_MAXLEN = 255, + SCE_NP_SCORE_SANITIZE_COMMENT_MAXLEN = 255, + SCE_NP_SCORE_GAMEINFO_SIZE = 64, + SCE_NP_SCORE_MAX_CTX_NUM = 32, + SCE_NP_SCORE_MAX_RANGE_NUM_PER_TRANS = 100, + SCE_NP_SCORE_MAX_NPID_NUM_PER_TRANS = 101, + SCE_NP_SCORE_MAX_CLAN_NUM_PER_TRANS = 101, +}; + +// Constants for signaling functions and structures +enum +{ + SCE_NP_SIGNALING_CTX_MAX = 8, +}; + +// NP communication ID structure struct SceNpCommunicationId { - char data[9]; - char term; + s8 data[9]; + s8 term; u8 num; - char dummy; + //s8 dummy; }; +// OnlineId structure +struct SceNpOnlineId +{ + s8 data[16]; + s8 term; + //s8 dummy[3]; +}; + +// NP ID structure +struct SceNpId +{ + SceNpOnlineId handle; + //u8 opt[8]; + //u8 reserved[8]; +}; + +// Online Name structure +struct SceNpOnlineName +{ + s8 data[48]; + s8 term; + s8 padding[3]; +}; + +// Avatar structure +struct SceNpAvatarUrl +{ + s8 data[127]; + s8 term; +}; + +// Avatar image structure +struct SceNpAvatarImage +{ + u8 data[SCE_NET_NP_AVATAR_IMAGE_MAX_SIZE]; + be_t size; + //u8 reserved[12]; +}; + +// Self introduction structure +struct SceNpAboutMe +{ + s8 data[SCE_NET_NP_ABOUT_ME_MAX_LENGTH]; + s8 term; +}; + +// User information structure +struct SceNpUserInfo +{ + SceNpId userId; + SceNpOnlineName name; + SceNpAvatarUrl icon; +}; + +// User information structure (pointer version) +struct SceNpUserInfo2 +{ + SceNpId npId; + SceNpOnlineName onlineName; + SceNpAvatarUrl avatarUrl; +}; + +// Often used languages structure +struct SceNpMyLanguages +{ + be_t language1; + be_t language2; + be_t language3; + u8 padding[4]; +}; + +// NP communication passphrase +struct SceNpCommunicationPassphrase +{ + u8 data[SCE_NP_COMMUNICATION_PASSPHRASE_SIZE]; +}; + +// NP communication signature struct SceNpCommunicationSignature { - uint8_t data[SCE_NP_COMMUNICATION_SIGNATURE_SIZE]; + u8 data[SCE_NP_COMMUNICATION_SIGNATURE_SIZE]; }; + +// NP cache information structure +struct SceNpManagerCacheParam +{ + SceNpOnlineId onlineId; + SceNpId npId; + SceNpOnlineName onlineName; + SceNpAvatarUrl avatarUrl; +}; + +// Message attachment data +struct SceNpBasicAttachmentData +{ + be_t id; + be_t size; +}; + +// Message extended attachment data +struct SceNpBasicExtendedAttachmentData +{ + be_t flags; + be_t msgId; + SceNpBasicAttachmentData data; + be_t userAction; + bool markedAsUsed; + //be_t reserved[3]; +}; + +// Message structure +struct SceNpBasicMessageDetails +{ + be_t msgId; + be_t mainType; + be_t subType; + be_t msgFeatures; + const SceNpId npids; + be_t count; + const s8 subject; + const s8 body; + const be_t data; + be_t size; +}; + +// Presence details of an user +struct SceNpBasicPresenceDetails +{ + s8 title[SCE_NP_BASIC_PRESENCE_TITLE_SIZE_MAX]; + s8 status[SCE_NP_BASIC_PRESENCE_STATUS_SIZE_MAX]; + s8 comment[SCE_NP_BASIC_PRESENCE_COMMENT_SIZE_MAX]; + u8 data[SCE_NP_BASIC_MAX_PRESENCE_SIZE]; + be_t size; + be_t state; +}; + +// Extended presence details of an user +struct SceNpBasicPresenceDetails2 +{ + be_t struct_size; + be_t state; + s8 title[SCE_NP_BASIC_PRESENCE_TITLE_SIZE_MAX]; + s8 status[SCE_NP_BASIC_PRESENCE_EXTENDED_STATUS_SIZE_MAX]; + s8 comment[SCE_NP_BASIC_PRESENCE_COMMENT_SIZE_MAX]; + u8 data[SCE_NP_BASIC_MAX_PRESENCE_SIZE]; + be_t size; +}; + +// Country/region code +struct SceNpCountryCode +{ + s8 data[2]; + s8 term; + s8 padding[1]; +}; + +// Date information +struct SceNpDate +{ + be_t year; + u8 month; + u8 day; +}; + +// Entitlement ID (fixed-length) +struct SceNpEntitlementId +{ + u8 data[SCE_NP_ENTITLEMENT_ID_SIZE]; // Unsigned char? What is the right type...? +}; + +// Callback for getting the connection status +typedef void(SceNpManagerCallback)(s32 event, s32 result, u32 arg_addr); + +// Request callback function +typedef void(*SceNpMatching2RequestCallback)(u16 ctxId, u32 reqId, u16 event, + u32 eventKey, s32 errorCode, u32 dataSize, u32 *arg + ); + +// NOTE: Use SceNpCommunicationPassphrase instead +// Np communication passphrase +//SceNpCommunicationPassphrase SceNpMatching2TitlePassphrase; + +// Session password +struct SceNpMatching2SessionPassword +{ + u8 data[SCE_NP_MATCHING2_SESSION_PASSWORD_SIZE]; +}; + +// Optional presence data +struct SceNpMatching2PresenceOptionData +{ + u8 data[SCE_NP_MATCHING2_PRESENCE_OPTION_DATA_SIZE]; + be_t length; +}; + +// Integer-type attribute +struct SceNpMatching2IntAttr +{ + be_t id; + u8 padding[2]; + be_t num; +}; + +// Binary-type attribute +struct SceNpMatching2BinAttr +{ + be_t id; + u8 padding[2]; + be_t ptr; + be_t size; +}; + +// Range filter +struct SceNpMatching2RangeFilter +{ + be_t startIndex; + be_t max; +}; + +// Integer-type search condition +struct SceNpMatching2IntSearchFilter +{ + u8 searchOperator; + u8 padding[3]; + SceNpMatching2IntAttr attr; +}; + +// Binary-type search condition +struct SceNpMatching2BinSearchFilter +{ + u8 searchOperator; + u8 padding[3]; + SceNpMatching2BinAttr attr; +}; + +// Range of result +struct SceNpMatching2Range +{ + be_t startIndex; + be_t total; + be_t size; +}; + +// Session information about a session joined by the user +struct SceNpMatching2JoinedSessionInfo +{ + u8 sessionType; + u8 padding1[1]; + be_t serverId; + be_t worldId; + be_t lobbyId; + be_t roomId; + CellRtcTick joinDate; +}; + +// User information +struct SceNpMatching2UserInfo +{ + SceNpMatching2UserInfo *next; + SceNpUserInfo2 userInfo; + SceNpMatching2BinAttr *userBinAttr; + be_t userBinAttrNum; + SceNpMatching2JoinedSessionInfo joinedSessionInfo; + be_t joinedSessionInfoNum; +}; + +// Server +struct SceNpMatching2Server +{ + be_t serverId; + u8 status; + u8 padding[1]; +}; + +// World +struct SceNpMatching2World +{ + be_t worldId; + be_t numOfLobby; + be_t maxNumOfTotalLobbyMember; + be_t curNumOfTotalLobbyMember; + be_t curNumOfRoom; + be_t curNumOfTotalRoomMember; + bool withEntitlementId; + SceNpEntitlementId entitlementId; + u8 padding[3]; +}; + +// Lobby member internal binary attribute +struct SceNpMatching2LobbyMemberBinAttrInternal +{ + CellRtcTick updateDate; + SceNpMatching2BinAttr data; + u8 padding[4]; +}; + +// Lobby-internal lobby member information +struct SceNpMatching2LobbyMemberDataInternal +{ + SceNpMatching2LobbyMemberDataInternal *next; + SceNpUserInfo2 userInfo; + CellRtcTick joinDate; + be_t memberId; + u8 padding[2]; + be_t flagAttr; + SceNpMatching2JoinedSessionInfo joinedSessionInfo; + be_t joinedSessionInfoNum; + SceNpMatching2LobbyMemberBinAttrInternal lobbyMemberBinAttrInternal; + be_t lobbyMemberBinAttrInternalNum; // Unsigned ints are be_t not uint, right? +}; + +// Lobby member ID list +struct SceNpMatching2LobbyMemberIdList +{ + be_t memberId; + be_t memberIdNum; + be_t me; + u8 padding[6]; +}; + +// Lobby-internal binary attribute +struct SceNpMatching2LobbyBinAttrInternal +{ + CellRtcTick updateDate; + be_t updateMemberId; + u8 padding[2]; + SceNpMatching2BinAttr data; +}; + +// Lobby-external lobby information +struct SceNpMatching2LobbyDataExternal +{ + SceNpMatching2LobbyDataExternal *next; + be_t serverId; + u8 padding1[2]; + be_t worldId; + u8 padding2[4]; + be_t lobbyId; + be_t maxSlot; + be_t curMemberNum; + be_t flagAttr; + SceNpMatching2IntAttr lobbySearchableIntAttrExternal; + be_t lobbySearchableIntAttrExternalNum; + SceNpMatching2BinAttr lobbySearchableBinAttrExternal; + be_t lobbySearchableBinAttrExternalNum; + SceNpMatching2BinAttr lobbyBinAttrExternal; + be_t lobbyBinAttrExternalNum; + u8 padding3[4]; +}; + +// Lobby-internal lobby information +struct SceNpMatching2LobbyDataInternal +{ + be_t serverId; + u8 padding1[2]; + be_t worldId; + be_t lobbyId; + be_t maxSlot; + SceNpMatching2LobbyMemberIdList memberIdList; + be_t flagAttr; + SceNpMatching2LobbyBinAttrInternal lobbyBinAttrInternal; + be_t lobbyBinAttrInternalNum; +}; + +// Lobby message transmission destination +union SceNpMatching2LobbyMessageDestination +{ + be_t unicastTarget; + struct multicastTarget { + be_t *memberId; + be_t memberIdNum; + }; +}; + +// Group label +struct SceNpMatching2GroupLabel +{ + u8 data[SCE_NP_MATCHING2_GROUP_LABEL_SIZE]; +}; + +// Set groups in a room +struct SceNpMatching2RoomGroupConfig +{ + be_t slotNum; + bool withLabel; + SceNpMatching2GroupLabel label; + bool withPassword; + u8 padding[2]; +}; + +// Set group password +struct SceNpMatching2RoomGroupPasswordConfig +{ + u8 groupId; + bool withPassword; + u8 padding[1]; +}; + +// Group (of slots in a room) +struct SceNpMatching2RoomGroup +{ + u8 groupId; + bool withPassword; + bool withLabel; + u8 padding[1]; + SceNpMatching2GroupLabel label; + be_t slotNum; + be_t curGroupMemberNum; +}; + +// Internal room member binary attribute +struct SceNpMatching2RoomMemberBinAttrInternal +{ + CellRtcTick updateDate; + SceNpMatching2BinAttr data; + u8 padding[4]; +}; + +// External room member data +struct SceNpMatching2RoomMemberDataExternal +{ + SceNpMatching2RoomMemberDataExternal *next; + SceNpUserInfo2 userInfo; + CellRtcTick joinDate; + u8 role; + u8 padding[7]; +}; + +// Internal room member data +struct SceNpMatching2RoomMemberDataInternal +{ + SceNpMatching2RoomMemberDataInternal *next; + SceNpUserInfo2 userInfo; + CellRtcTick joinDate; + be_t memberId; + u8 teamId; + u8 padding1[1]; + SceNpMatching2RoomGroup roomGroup; + u8 natType; + u8 padding2[3]; + be_t flagAttr; + SceNpMatching2RoomMemberBinAttrInternal roomMemberBinAttrInternal; + be_t roomMemberBinAttrInternalNum; +}; + +// Internal room member data list +struct SceNpMatching2RoomMemberDataInternalList +{ + SceNpMatching2RoomMemberDataInternal members; + be_t membersNum; + SceNpMatching2RoomMemberDataInternal me; + SceNpMatching2RoomMemberDataInternal owner; +}; + +// Internal room binary attribute +struct SceNpMatching2RoomBinAttrInternal +{ + CellRtcTick updateDate; + be_t updateMemberId; + u8 padding[2]; + SceNpMatching2BinAttr data; +}; + +// External room data +struct SceNpMatching2RoomDataExternal +{ + SceNpMatching2RoomDataExternal *next; + be_t serverId; + u8 padding1[2]; + be_t worldId; + be_t publicSlotNum; + be_t privateSlotNum; + be_t lobbyId; + be_t roomId; + be_t openPublicSlotNum; + be_t maxSlot; + be_t openPrivateSlotNum; + be_t curMemberNum; + be_t passwordSlotMask; + SceNpUserInfo2 owner; + SceNpMatching2RoomGroup roomGroup; + be_t roomGroupNum; + be_t flagAttr; + SceNpMatching2IntAttr roomSearchableIntAttrExternal; + be_t roomSearchableIntAttrExternalNum; + SceNpMatching2BinAttr roomSearchableBinAttrExternal; + be_t roomSearchableBinAttrExternalNum; + SceNpMatching2BinAttr roomBinAttrExternal; + be_t roomBinAttrExternalNum; +}; + +// Internal room data +struct SceNpMatching2RoomDataInternal +{ + be_t serverId; + u8 padding1[2]; + be_t worldId; + be_t lobbyId; + be_t roomId; + be_t passwordSlotMask; + be_t maxSlot; + SceNpMatching2RoomMemberDataInternalList memberList; + SceNpMatching2RoomGroup *roomGroup; + be_t roomGroupNum; + be_t flagAttr; + SceNpMatching2RoomBinAttrInternal *roomBinAttrInternal; + be_t roomBinAttrInternalNum; +}; + +// Room message recipient +union SceNpMatching2RoomMessageDestination +{ + be_t unicastTarget; + struct multicastTarget { + be_t memberId; + be_t memberIdNum; + }; + u8 multicastTargetTeamId; +}; + +// Invitation data +struct SceNpMatching2InvitationData +{ + SceNpMatching2JoinedSessionInfo targetSession; + be_t targetSessionNum; + be_t optData; + be_t optDataLen; +}; + +// Signaling option parameter +struct SceNpMatching2SignalingOptParam +{ + u8 type; + //u8 reserved1[1]; + be_t hubMemberId; + //u8 reserved2[4]; +}; + +// Option parameters for requests +struct SceNpMatching2RequestOptParam +{ + SceNpMatching2RequestCallback cbFunc; + be_t *cbFuncArg; + be_t timeout; + be_t appReqId; + u8 padding[2]; +}; + +// Room slot information +struct SceNpMatching2RoomSlotInfo +{ + be_t roomId; + be_t joinedSlotMask; + be_t passwordSlotMask; + be_t publicSlotNum; + be_t privateSlotNum; + be_t openPublicSlotNum; + be_t openPrivateSlotNum; +}; + +// Server data request parameter +struct SceNpMatching2GetServerInfoRequest +{ + be_t serverId; +}; + +// Server data request response data +struct SceNpMatching2GetServerInfoResponse +{ + SceNpMatching2Server server; +}; + +// Request parameter for creating a server context +struct SceNpMatching2CreateServerContextRequest +{ + be_t serverId; +}; + +// Request parameter for deleting a server context +struct SceNpMatching2DeleteServerContextRequest +{ + be_t serverId; +}; + +// World data list request parameter +struct SceNpMatching2GetWorldInfoListRequest +{ + be_t serverId; +}; + +// World data list request response data +struct SceNpMatching2GetWorldInfoListResponse +{ + SceNpMatching2World world; + be_t worldNum; +}; + +// User information setting request parameter +struct SceNpMatching2SetUserInfoRequest +{ + be_t serverId; + u8 padding[2]; + SceNpMatching2BinAttr *userBinAttr; + be_t userBinAttrNum; +}; + +// User information list acquisition request parameter +struct SceNpMatching2GetUserInfoListRequest +{ + be_t serverId; + u8 padding[2]; + SceNpId npId; + be_t npIdNum; + be_t attrId; + be_t attrIdNum; + be_t option; // int should be be_t, right? +}; + +// User information list acquisition response data +struct SceNpMatching2GetUserInfoListResponse +{ + SceNpMatching2UserInfo userInfo; + be_t userInfoNum; +}; + +// External room member data list request parameter +struct SceNpMatching2GetRoomMemberDataExternalListRequest +{ + be_t roomId; +}; + +// External room member data list request response data +struct SceNpMatching2GetRoomMemberDataExternalListResponse +{ + SceNpMatching2RoomMemberDataExternal roomMemberDataExternal; + be_t roomMemberDataExternalNum; +}; + +// External room data configuration request parameters +struct SceNpMatching2SetRoomDataExternalRequest +{ + be_t roomId; + SceNpMatching2IntAttr roomSearchableIntAttrExternal; + be_t roomSearchableIntAttrExternalNum; + SceNpMatching2BinAttr roomSearchableBinAttrExternal; + be_t roomSearchableBinAttrExternalNum; + SceNpMatching2BinAttr roomBinAttrExternal; + be_t roomBinAttrExternalNum; +}; + +// External room data list request parameters +struct SceNpMatching2GetRoomDataExternalListRequest +{ + be_t roomId; + be_t roomIdNum; + be_t attrId; + be_t attrIdNum; +}; + +// External room data list request response data +struct SceNpMatching2GetRoomDataExternalListResponse +{ + SceNpMatching2RoomDataExternal roomDataExternal; + be_t roomDataExternalNum; +}; + +// Create-and-join room request parameters +struct SceNpMatching2CreateJoinRoomRequest +{ + be_t worldId; + u8 padding1[4]; + be_t lobbyId; + be_t maxSlot; + be_t flagAttr; + SceNpMatching2BinAttr roomBinAttrInternal; + be_t roomBinAttrInternalNum; + SceNpMatching2IntAttr roomSearchableIntAttrExternal; + be_t roomSearchableIntAttrExternalNum; + SceNpMatching2BinAttr roomSearchableBinAttrExternal; + be_t roomSearchableBinAttrExternalNum; + SceNpMatching2BinAttr roomBinAttrExternal; + be_t roomBinAttrExternalNum; + SceNpMatching2SessionPassword roomPassword; + SceNpMatching2RoomGroupConfig groupConfig; + be_t groupConfigNum; + be_t passwordSlotMask; + SceNpId allowedUser; + be_t allowedUserNum; + SceNpId blockedUser; + be_t blockedUserNum; + SceNpMatching2GroupLabel joinRoomGroupLabel; + SceNpMatching2BinAttr roomMemberBinAttrInternal; + be_t roomMemberBinAttrInternalNum; + u8 teamId; + u8 padding2[3]; + SceNpMatching2SignalingOptParam sigOptParam; + u8 padding3[4]; +}; + +// Create-and-join room request response data +struct SceNpMatching2CreateJoinRoomResponse +{ + SceNpMatching2RoomDataInternal roomDataInternal; +}; + +// Join room request parameters +struct SceNpMatching2JoinRoomRequest +{ + be_t roomId; + SceNpMatching2SessionPassword roomPassword; + SceNpMatching2GroupLabel joinRoomGroupLabel; + SceNpMatching2BinAttr roomMemberBinAttrInternal; + be_t roomMemberBinAttrInternalNum; + SceNpMatching2PresenceOptionData optData; + u8 teamId; + u8 padding[3]; +}; + +// Join room request response data +struct SceNpMatching2JoinRoomResponse +{ + SceNpMatching2RoomDataInternal roomDataInternal; +}; + +// Leave room request parameters +struct SceNpMatching2LeaveRoomRequest +{ + be_t roomId; + SceNpMatching2PresenceOptionData optData; + u8 padding[4]; +}; + +// Room ownership grant request parameters +struct SceNpMatching2GrantRoomOwnerRequest +{ + be_t roomId; + be_t newOwner; + u8 padding[2]; + SceNpMatching2PresenceOptionData optData; +}; + +// Kickout request parameters +struct SceNpMatching2KickoutRoomMemberRequest +{ + be_t roomId; + be_t target; + u8 blockKickFlag; + u8 padding[1]; + SceNpMatching2PresenceOptionData optData; +}; + +// Room search parameters +struct SceNpMatching2SearchRoomRequest +{ + be_t option; + be_t worldId; + be_t lobbyId; + SceNpMatching2RangeFilter rangeFilter; + be_t flagFilter; + be_t flagAttr; + SceNpMatching2IntSearchFilter intFilter; + be_t intFilterNum; + SceNpMatching2BinSearchFilter binFilter; + be_t binFilterNum; + be_t attrId; + be_t attrIdNum; +}; + +// Room search response data +struct SceNpMatching2SearchRoomResponse +{ + SceNpMatching2Range range; + SceNpMatching2RoomDataExternal roomDataExternal; +}; + +// Room message send request parameters +struct SceNpMatching2SendRoomMessageRequest +{ + be_t roomId; + u8 castType; + u8 padding[3]; + SceNpMatching2RoomMessageDestination dst; + be_t msg; // const void = be_t, right? + be_t msgLen; + be_t option; // int = be_t, right? +}; + +// Room chat message send request parameters +struct SceNpMatching2SendRoomChatMessageRequest +{ + be_t roomId; + u8 castType; + u8 padding[3]; + SceNpMatching2RoomMessageDestination dst; + be_t msg; + be_t msgLen; + be_t option; +}; + +// Room chat message send request response data +struct SceNpMatching2SendRoomChatMessageResponse +{ + bool filtered; +}; + +// Internal room data configuration request parameters +struct SceNpMatching2SetRoomDataInternalRequest +{ + be_t roomId; + be_t flagFilter; + be_t flagAttr; + SceNpMatching2BinAttr roomBinAttrInternal; + be_t roomBinAttrInternalNum; + SceNpMatching2RoomGroupPasswordConfig passwordConfig; + be_t passwordConfigNum; + be_t passwordSlotMask; + be_t ownerPrivilegeRank; + be_t ownerPrivilegeRankNum; + u8 padding[4]; +}; + +// Internal room data request parameters +struct SceNpMatching2GetRoomDataInternalRequest +{ + be_t roomId; + be_t attrId; + be_t attrIdNum; +}; + +// Internal room data request response data +struct SceNpMatching2GetRoomDataInternalResponse +{ + SceNpMatching2RoomDataInternal roomDataInternal; +}; + +// Internal room member data configuration request parameters +struct SceNpMatching2SetRoomMemberDataInternalRequest +{ + be_t roomId; + be_t memberId; + u8 teamId; + u8 padding[5]; + be_t flagFilter; + be_t flagAttr; + SceNpMatching2BinAttr roomMemberBinAttrInternal; + be_t roomMemberBinAttrInternalNum; +}; + +// Internal room member data request parameters +struct SceNpMatching2GetRoomMemberDataInternalRequest +{ + be_t roomId; + be_t memberId; + u8 padding[6]; + be_t attrId; + be_t attrIdNum; +}; + +// Internal room member data request response data +struct SceNpMatching2GetRoomMemberDataInternalResponse +{ + SceNpMatching2RoomMemberDataInternal roomMemberDataInternal; +}; + +// Signaling option parameter setting request parameter +struct SceNpMatching2SetSignalingOptParamRequest +{ + be_t roomId; + SceNpMatching2SignalingOptParam sigOptParam; +}; + +// Lobby information list acquisition request parameter +struct SceNpMatching2GetLobbyInfoListRequest +{ + be_t worldId; + SceNpMatching2RangeFilter rangeFilter; + be_t attrId; + be_t attrIdNum; +}; + +// Lobby information list acquisition response data +struct SceNpMatching2GetLobbyInfoListResponse +{ + SceNpMatching2Range range; + SceNpMatching2LobbyDataExternal lobbyDataExternal; +}; + +// Lobby joining request parameter +struct SceNpMatching2JoinLobbyRequest +{ + be_t lobbyId; + SceNpMatching2JoinedSessionInfo joinedSessionInfo; + be_t joinedSessionInfoNum; + SceNpMatching2BinAttr lobbyMemberBinAttrInternal; + be_t lobbyMemberBinAttrInternalNum; + SceNpMatching2PresenceOptionData optData; + u8 padding[4]; +}; + +// Lobby joining response data +struct SceNpMatching2JoinLobbyResponse +{ + SceNpMatching2LobbyDataInternal lobbyDataInternal; +}; + +// Lobby leaving request parameter +struct SceNpMatching2LeaveLobbyRequest +{ + be_t lobbyId; + SceNpMatching2PresenceOptionData optData; + u8 padding[4]; +}; + +// Lobby chat message sending request parameter +struct SceNpMatching2SendLobbyChatMessageRequest +{ + be_t lobbyId; + u8 castType; + u8 padding[3]; + SceNpMatching2LobbyMessageDestination dst; + be_t msg; + be_t msgLen; + be_t option; +}; + +// Lobby chat message sending response data +struct SceNpMatching2SendLobbyChatMessageResponse +{ + bool filtered; +}; + +// Lobby invitation message sending request parameter +struct SceNpMatching2SendLobbyInvitationRequest +{ + be_t lobbyId; + u8 castType; + u8 padding[3]; + SceNpMatching2LobbyMessageDestination dst; + SceNpMatching2InvitationData invitationData; + be_t option; +}; + +// Lobby-internal lobby member information setting request parameter +struct SceNpMatching2SetLobbyMemberDataInternalRequest +{ + be_t lobbyId; + be_t memberId; + u8 padding1[2]; + be_t flagFilter; + be_t flagAttr; + SceNpMatching2JoinedSessionInfo *joinedSessionInfo; + be_t joinedSessionInfoNum; + SceNpMatching2BinAttr lobbyMemberBinAttrInternal; + be_t lobbyMemberBinAttrInternalNum; + u8 padding2[4]; +}; + +// Lobby-internal lobby member information acquisition request parameter +struct SceNpMatching2GetLobbyMemberDataInternalRequest +{ + be_t lobbyId; + be_t memberId; + u8 padding[6]; + be_t attrId; + be_t attrIdNum; +}; + +// Lobby-internal lobby member information acquisition response data +struct SceNpMatching2GetLobbyMemberDataInternalResponse +{ + SceNpMatching2LobbyMemberDataInternal lobbyMemberDataInternal; +}; + +// Request parameters for obtaining a list of lobby-internal lobby member information +struct SceNpMatching2GetLobbyMemberDataInternalListRequest +{ + be_t lobbyId; + be_t memberId; + be_t memberIdNum; + be_t attrId; + be_t attrIdNum; + bool extendedData; + u8 padding[7]; +}; + +// Reponse data for obtaining a list of lobby-internal lobby member information +struct SceNpMatching2GetLobbyMemberDataInternalListResponse +{ + SceNpMatching2LobbyMemberDataInternal lobbyMemberDataInternal; + be_t lobbyMemberDataInternalNum; +}; + +// Request parameters for obtaining Ping information +struct SceNpMatching2SignalingGetPingInfoRequest +{ + be_t roomId; + //u8 reserved[16]; +}; + +// Response data for obtaining Ping information +struct SceNpMatching2SignalingGetPingInfoResponse +{ + be_t serverId; + u8 padding1[2]; + be_t worldId; + be_t roomId; + be_t rtt; + //u8 reserved[20]; +}; + +// Join request parameters for room in prohibitive mode +struct SceNpMatching2JoinProhibitiveRoomRequest +{ + SceNpMatching2JoinRoomRequest joinParam; + SceNpId blockedUser; + be_t blockedUserNum; +}; + +// Room member update information +struct SceNpMatching2RoomMemberUpdateInfo +{ + SceNpMatching2RoomMemberDataInternal roomMemberDataInternal; + u8 eventCause; + u8 padding[3]; + SceNpMatching2PresenceOptionData optData; +}; + +// Room owner update information +struct SceNpMatching2RoomOwnerUpdateInfo +{ + be_t prevOwner; + be_t newOwner; + u8 eventCause; + u8 padding[3]; + SceNpMatching2SessionPassword roomPassword; + SceNpMatching2PresenceOptionData optData; +}; + +// Room update information +struct SceNpMatching2RoomUpdateInfo +{ + u8 eventCause; + u8 padding[3]; + be_t errorCode; + SceNpMatching2PresenceOptionData optData; +}; + +// Internal room data update information +struct SceNpMatching2RoomDataInternalUpdateInfo +{ + SceNpMatching2RoomDataInternal newRoomDataInternal; + be_t newFlagAttr; + be_t prevFlagAttr; + be_t newRoomPasswordSlotMask; + be_t prevRoomPasswordSlotMask; + SceNpMatching2RoomGroup newRoomGroup; + be_t newRoomGroupNum; + SceNpMatching2RoomBinAttrInternal newRoomBinAttrInternal; + be_t newRoomBinAttrInternalNum; +}; + +// Internal room member data update information +struct SceNpMatching2RoomMemberDataInternalUpdateInfo +{ + SceNpMatching2RoomMemberDataInternal newRoomMemberDataInternal; + be_t newFlagAttr; + be_t prevFlagAttr; + u8 newTeamId; + SceNpMatching2RoomMemberBinAttrInternal newRoomMemberBinAttrInternal; + be_t newRoomMemberBinAttrInternalNum; +}; + +// Room message information +struct SceNpMatching2RoomMessageInfo +{ + bool filtered; + u8 castType; + u8 padding[2]; + SceNpMatching2RoomMessageDestination dst; + SceNpUserInfo2 srcMember; + be_t msg; + be_t msgLen; +}; + +// Lobby member update information +struct SceNpMatching2LobbyMemberUpdateInfo +{ + SceNpMatching2LobbyMemberDataInternal *lobbyMemberDataInternal; + u8 eventCause; + u8 padding[3]; + SceNpMatching2PresenceOptionData optData; +}; + +// Lobby update information +struct SceNpMatching2LobbyUpdateInfo +{ + u8 eventCause; + u8 padding[3]; + be_t errorCode; +}; + +// Lobby-internal lobby member information update information +struct SceNpMatching2LobbyMemberDataInternalUpdateInfo +{ + be_t memberId; + u8 padding[2]; + SceNpId npId; + be_t flagFilter; + be_t newFlagAttr; + SceNpMatching2JoinedSessionInfo newJoinedSessionInfo; + be_t newJoinedSessionInfoNum; + SceNpMatching2LobbyMemberBinAttrInternal newLobbyMemberBinAttrInternal; + be_t newLobbyMemberBinAttrInternalNum; +}; + +// Lobby message information +struct SceNpMatching2LobbyMessageInfo +{ + bool filtered; + u8 castType; + u8 padding[2]; + SceNpMatching2LobbyMessageDestination dst; + SceNpUserInfo2 srcMember; + be_t msg; + be_t msgLen; +}; + +// Lobby invitation message information +struct SceNpMatching2LobbyInvitationInfo +{ + u8 castType; + u8 padding[3]; + SceNpMatching2LobbyMessageDestination dst; + SceNpUserInfo2 srcMember; + SceNpMatching2InvitationData invitationData; +}; + +// Update information of the signaling option parameter +struct SceNpMatching2SignalingOptParamUpdateInfo +{ + SceNpMatching2SignalingOptParam newSignalingOptParam; +}; + +// Matching2 utility intilization parameters +struct SceNpMatching2UtilityInitParam +{ + //sys_memory_container_t containerId; //TODO: Uncomment this once sys_memory_container_t is implemented + be_t requestCbQueueLen; + be_t sessionEventCbQueueLen;; + be_t sessionMsgCbQueueLen;; + //u8 reserved[16]; +}; + +// Matching2 memory information +struct SceNpMatching2MemoryInfo +{ + be_t totalMemSize; + be_t curMemUsage;; + be_t maxMemUsage;; + //u8 reserved[12]; +}; + +// Matching2 information on the event data queues in the system +struct SceNpMatching2CbQueueInfo +{ + be_t requestCbQueueLen; + be_t curRequestCbQueueLen;; + be_t maxRequestCbQueueLen;; + be_t sessionEventCbQueueLen;; + be_t curSessionEventCbQueueLen;; + be_t maxSessionEventCbQueueLen;; + be_t sessionMsgCbQueueLen;; + be_t curSessionMsgCbQueueLen;; + be_t maxSessionMsgCbQueueLen;; + //u8 reserved[12]; +}; + +// Score data unique to the application +struct SceNpScoreGameInfo +{ + u8 nativeData[SCE_NP_SCORE_GAMEINFO_SIZE]; +}; + +// Ranking comment structure +struct SceNpScoreComment +{ + s8 data[SCE_NP_SCORE_COMMENT_MAXLEN]; + s8 term[1]; +}; + +// Ranking information structure +struct SceNpScoreRankData +{ + SceNpId npId; + SceNpOnlineName onlineName; + be_t pcId; + be_t serialRank; + be_t rank; + be_t highestRank; + be_t scoreValue; + be_t hasGameData; + //u8 pad0[4]; + CellRtcTick recordDate; +}; + +// Ranking information of a player or a clan member +struct SceNpScorePlayerRankData +{ + be_t hasData; + //u8 pad0[4]; + SceNpScoreRankData rankData; +}; + +// Scoreboard information +struct SceNpScoreBoardInfo +{ + be_t rankLimit; + be_t updateMode; + be_t sortMode; + be_t uploadNumLimit; + be_t uploadSizeLimit; +}; + +// NOTE: Use SceNpCommunicationPassphrase instead +// Authentication information per NP Communication ID for score ranking +// SceNpCommunicationPassphrase SceNpScorePassphrase; + +// NP ID structure with player character ID +struct SceNpScoreNpIdPcId +{ + SceNpId npId; + be_t pcId; + //u8 pad[4]; +}; + +// Basic clan information to be used in raking +struct SceNpScoreClanBasicInfo +{ + s8 clanName[SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH + 1]; + s8 clanTag[SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH + 1]; + //u8 reserved[10]; +}; + +// Clan member information handled in ranking +struct SceNpScoreClansMemberDescription +{ + s8 description[SCE_NP_CLANS_CLAN_DESCRIPTION_MAX_LENGTH + 1]; +}; + +// Clan ranking information +struct SceNpScoreClanRankData +{ + be_t clanId; + SceNpScoreClanBasicInfo clanInfo; + be_t regularMemberCount; + be_t recordMemberCount; + be_t serialRank; + be_t rank; + be_t scoreValue; + CellRtcTick recordDate; + SceNpId npId; + SceNpOnlineName onlineName; + uint8_t reserved[32]; +}; + +// Clan ranking information to be obtained for a specified clan ID +struct SceNpScoreClanIdRankData +{ + be_t hasData; + //u8 pad0[4]; + SceNpScoreClanRankData rankData; +}; + +// Union for connection information +union SceNpSignalingConnectionInfo { + be_t rtt; + be_t bandwidth; + SceNpId npId; + struct address { + be_t addr; // in_addr + //in_port_t port; // TODO: Implement this? + }; + be_t packet_loss; +}; + +// Network information structure +struct SceNpSignalingNetInfo +{ + be_t size; + be_t local_addr; // in_addr + be_t mapped_addr; // in_addr + be_t nat_status; + be_t upnp_status; + be_t npport_status; + be_t npport; +}; + +// NP signaling callback function +typedef void(*SceNpSignalingHandler)(u32 ctx_id, u32 subject_id, s32 event, s32 error_code, u32 arg_addr); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp new file mode 100644 index 0000000000..5a6b204fbf --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -0,0 +1,293 @@ +#include "stdafx.h" +#include "Emu/SysCalls/Modules.h" +#include "Emu/System.h" +#include "cellRtc.h" +#include "sceNp.h" +#include "sceNpClans.h" + +//void sceNpClans_unload(); +//void sceNpClans_init(); +//Module sceNpClans(0x003a, sceNpClans_init, nullptr, sceNpClans_unload); +Module *sceNpClans = nullptr; + +int sceNpClansInit() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansTerm() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansCreateRequest() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansDestroyRequest() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansAbortRequest() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansCreateClan() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansDisbandClan() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansGetClanList() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansGetClanListByNpId() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansSearchByProfile() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansSearchByName() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansGetClanInfo() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansUpdateClanInfo() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansGetMemberList() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansGetMemberInfo() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansUpdateMemberInfo() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansChangeMemberRole() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansGetAutoAcceptStatus() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansUpdateAutoAcceptStatus() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansJoinClan() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansLeaveClan() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansKickMember() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansSendInvitation() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansCancelInvitation() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansSendInvitationResponse() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansSendMembershipRequest() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansCancelMembershipRequest() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansSendMembershipResponse() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansGetBlacklist() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansAddBlacklistEntry() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansRemoveBlacklistEntry() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansRetrieveAnnouncements() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansPostAnnouncement() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansRemoveAnnouncement() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansPostChallenge() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansRetrievePostedChallenges() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansRemovePostedChallenge() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansRetrieveChallenges() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +int sceNpClansRemoveChallenge() +{ + UNIMPLEMENTED_FUNC(sceNpClans); + return CELL_OK; +} + +void sceNpClans_unload() +{ + // TODO: Unload Clans module +} + +void sceNpClans_init() +{ + sceNpClans->AddFunc(0x9b820047, sceNpClansInit); + sceNpClans->AddFunc(0x42332cb7, sceNpClansTerm); + sceNpClans->AddFunc(0x9a72232d, sceNpClansCreateRequest); + sceNpClans->AddFunc(0xd6551cd1, sceNpClansDestroyRequest); + sceNpClans->AddFunc(0xe82969e2, sceNpClansAbortRequest); + sceNpClans->AddFunc(0xa6a31a38, sceNpClansCreateClan); + sceNpClans->AddFunc(0x4826f6d5, sceNpClansDisbandClan); + sceNpClans->AddFunc(0xca4181b4, sceNpClansGetClanList); + sceNpClans->AddFunc(0x672399a8, sceNpClansGetClanListByNpId); + sceNpClans->AddFunc(0x1221a1bf, sceNpClansSearchByProfile); + sceNpClans->AddFunc(0xace0cfba, sceNpClansSearchByName); + sceNpClans->AddFunc(0x487de998, sceNpClansGetClanInfo); + sceNpClans->AddFunc(0x09f9e1a9, sceNpClansUpdateClanInfo); + sceNpClans->AddFunc(0x856ff5c0, sceNpClansGetMemberList); + sceNpClans->AddFunc(0x20472da0, sceNpClansGetMemberInfo); + sceNpClans->AddFunc(0xf4a2d52b, sceNpClansUpdateMemberInfo); + sceNpClans->AddFunc(0x9cac2085, sceNpClansChangeMemberRole); + sceNpClans->AddFunc(0x38dadf1f, sceNpClansGetAutoAcceptStatus); + sceNpClans->AddFunc(0x5da94854, sceNpClansUpdateAutoAcceptStatus); + sceNpClans->AddFunc(0xdbf300ca, sceNpClansJoinClan); + sceNpClans->AddFunc(0x560f717b, sceNpClansLeaveClan); + sceNpClans->AddFunc(0xaa7912b5, sceNpClansKickMember); + sceNpClans->AddFunc(0xbc05ef31, sceNpClansSendInvitation); + sceNpClans->AddFunc(0x726dffd5, sceNpClansCancelInvitation); + sceNpClans->AddFunc(0x095e12c6, sceNpClansSendInvitationResponse); + sceNpClans->AddFunc(0x59743b2b, sceNpClansSendMembershipRequest); + sceNpClans->AddFunc(0x299ccc9b, sceNpClansCancelMembershipRequest); + sceNpClans->AddFunc(0x942dbdc4, sceNpClansSendMembershipResponse); + sceNpClans->AddFunc(0x56bc5a7c, sceNpClansGetBlacklist); + sceNpClans->AddFunc(0x4d06aef7, sceNpClansAddBlacklistEntry); + sceNpClans->AddFunc(0x5bff9da1, sceNpClansRemoveBlacklistEntry); + sceNpClans->AddFunc(0x727aa7f8, sceNpClansRetrieveAnnouncements); + sceNpClans->AddFunc(0xada45b84, sceNpClansPostAnnouncement); + sceNpClans->AddFunc(0xe2590f60, sceNpClansRemoveAnnouncement); + sceNpClans->AddFunc(0x83d65529, sceNpClansPostChallenge); + sceNpClans->AddFunc(0x8e785b97, sceNpClansRetrievePostedChallenges); + sceNpClans->AddFunc(0xd3346dc4, sceNpClansRemovePostedChallenge); + sceNpClans->AddFunc(0x0df25834, sceNpClansRetrieveChallenges); + sceNpClans->AddFunc(0xce6dc0f0, sceNpClansRemoveChallenge); +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.h b/rpcs3/Emu/SysCalls/Modules/sceNpClans.h new file mode 100644 index 0000000000..faf47e3062 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.h @@ -0,0 +1,253 @@ +#pragma once + +// Return codes +enum +{ + SCE_NP_CLANS_ERROR_ALREADY_INITIALIZED = 0x80022701, + SCE_NP_CLANS_ERROR_NOT_INITIALIZED = 0x80022702, + SCE_NP_CLANS_ERROR_NOT_SUPPORTED = 0x80022703, + SCE_NP_CLANS_ERROR_OUT_OF_MEMORY = 0x80022704, + SCE_NP_CLANS_ERROR_INVALID_ARGUMENT = 0x80022705, + SCE_NP_CLANS_ERROR_EXCEEDS_MAX = 0x80022706, + SCE_NP_CLANS_ERROR_BAD_RESPONSE = 0x80022707, + SCE_NP_CLANS_ERROR_BAD_DATA = 0x80022708, + SCE_NP_CLANS_ERROR_BAD_REQUEST = 0x80022709, + SCE_NP_CLANS_ERROR_INVALID_SIGNATURE = 0x8002270a, + SCE_NP_CLANS_ERROR_INSUFFICIENT = 0x8002270b, + SCE_NP_CLANS_ERROR_INTERNAL_BUFFER = 0x8002270c, + SCE_NP_CLANS_ERROR_SERVER_MAINTENANCE = 0x8002270d, + SCE_NP_CLANS_ERROR_SERVER_END_OF_SERVICE = 0x8002270e, + SCE_NP_CLANS_ERROR_SERVER_BEFORE_START_OF_SERVICE = 0x8002270f, + SCE_NP_CLANS_ERROR_ABORTED = 0x80022710, + SCE_NP_CLANS_ERROR_SERVICE_UNAVAILABLE = 0x80022711, + SCE_NP_CLANS_SERVER_ERROR_BAD_REQUEST = 0x80022801, + SCE_NP_CLANS_SERVER_ERROR_INVALID_TICKET = 0x80022802, + SCE_NP_CLANS_SERVER_ERROR_INVALID_SIGNATURE = 0x80022803, + SCE_NP_CLANS_SERVER_ERROR_TICKET_EXPIRED = 0x80022804, + SCE_NP_CLANS_SERVER_ERROR_INVALID_NPID = 0x80022805, + SCE_NP_CLANS_SERVER_ERROR_FORBIDDEN = 0x80022806, + SCE_NP_CLANS_SERVER_ERROR_INTERNAL_SERVER_ERROR = 0x80022807, + SCE_NP_CLANS_SERVER_ERROR_BANNED = 0x8002280a, + SCE_NP_CLANS_SERVER_ERROR_BLACKLISTED = 0x80022811, + SCE_NP_CLANS_SERVER_ERROR_INVALID_ENVIRONMENT = 0x8002281d, + SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_CLAN_SERVICE = 0x8002282f, + SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_CLAN = 0x80022830, + SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_CLAN_MEMBER = 0x80022831, + SCE_NP_CLANS_SERVER_ERROR_BEFORE_HOURS = 0x80022832, + SCE_NP_CLANS_SERVER_ERROR_CLOSED_SERVICE = 0x80022833, + SCE_NP_CLANS_SERVER_ERROR_PERMISSION_DENIED = 0x80022834, + SCE_NP_CLANS_SERVER_ERROR_CLAN_LIMIT_REACHED = 0x80022835, + SCE_NP_CLANS_SERVER_ERROR_CLAN_LEADER_LIMIT_REACHED = 0x80022836, + SCE_NP_CLANS_SERVER_ERROR_CLAN_MEMBER_LIMIT_REACHED = 0x80022837, + SCE_NP_CLANS_SERVER_ERROR_CLAN_JOINED_LIMIT_REACHED = 0x80022838, + SCE_NP_CLANS_SERVER_ERROR_MEMBER_STATUS_INVALID = 0x80022839, + SCE_NP_CLANS_SERVER_ERROR_DUPLICATED_CLAN_NAME = 0x8002283a, + SCE_NP_CLANS_SERVER_ERROR_CLAN_LEADER_CANNOT_LEAVE = 0x8002283b, + SCE_NP_CLANS_SERVER_ERROR_INVALID_ROLE_PRIORITY = 0x8002283c, + SCE_NP_CLANS_SERVER_ERROR_ANNOUNCEMENT_LIMIT_REACHED = 0x8002283d, + SCE_NP_CLANS_SERVER_ERROR_CLAN_CONFIG_MASTER_NOT_FOUND = 0x8002283e, + SCE_NP_CLANS_SERVER_ERROR_DUPLICATED_CLAN_TAG = 0x8002283f, + SCE_NP_CLANS_SERVER_ERROR_EXCEEDS_CREATE_CLAN_FREQUENCY = 0x80022840, + SCE_NP_CLANS_SERVER_ERROR_CLAN_PASSPHRASE_INCORRECT = 0x80022841, + SCE_NP_CLANS_SERVER_ERROR_CANNOT_RECORD_BLACKLIST_ENTRY = 0x80022842, + SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_CLAN_ANNOUNCEMENT = 0x80022843, + SCE_NP_CLANS_SERVER_ERROR_VULGAR_WORDS_POSTED = 0x80022844, + SCE_NP_CLANS_SERVER_ERROR_BLACKLIST_LIMIT_REACHED = 0x80022845, + SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_BLACKLIST_ENTRY = 0x80022846, + SCE_NP_CLANS_SERVER_ERROR_INVALID_NP_MESSAGE_FORMAT = 0x8002284b, + SCE_NP_CLANS_SERVER_ERROR_FAILED_TO_SEND_NP_MESSAGE = 0x8002284c, +}; + +// Clan roles +enum +{ + SCE_NP_CLANS_ROLE_UNKNOWN = 0, + SCE_NP_CLANS_ROLE_NON_MEMBER = 1, + SCE_NP_CLANS_ROLE_MEMBER = 2, + SCE_NP_CLANS_ROLE_SUB_LEADER = 3, + SCE_NP_CLANS_ROLE_LEADER = 4, +}; + +// Clan member status +enum +{ + SCE_NP_CLANS_MEMBER_STATUS_UNKNOWN = 0, + SCE_NP_CLANS_MEMBER_STATUS_NORMAL = 1, + SCE_NP_CLANS_MEMBER_STATUS_INVITED = 2, + SCE_NP_CLANS_MEMBER_STATUS_PENDING = 3, +}; + +// Clan search operators +enum +{ + SCE_NP_CLANS_SEARCH_OPERATOR_EQUAL_TO = 0, + SCE_NP_CLANS_SEARCH_OPERATOR_NOT_EQUAL_TO = 1, + SCE_NP_CLANS_SEARCH_OPERATOR_GREATER_THAN = 2, + SCE_NP_CLANS_SEARCH_OPERATOR_GREATER_THAN_OR_EQUAL_TO = 3, + SCE_NP_CLANS_SEARCH_OPERATOR_LESS_THAN = 4, + SCE_NP_CLANS_SEARCH_OPERATOR_LESS_THAN_OR_EQUAL_TO = 5, + SCE_NP_CLANS_SEARCH_OPERATOR_SIMILAR_TO = 6, +}; + +// Constants for clan functions and structures +enum +{ + SCE_NP_CLANS_ANNOUNCEMENT_MESSAGE_BODY_MAX_LENGTH = 1536, + SCE_NP_CLANS_CLAN_BINARY_ATTRIBUTE1_MAX_SIZE = 190, + SCE_NP_CLANS_CLAN_BINARY_DATA_MAX_SIZE = 10240, + SCE_NP_CLANS_MEMBER_BINARY_ATTRIBUTE1_MAX_SIZE = 16, + SCE_NP_CLANS_MEMBER_DESCRIPTION_MAX_LENGTH = 255, + SCE_NP_CLANS_MEMBER_BINARY_DATA_MAX_SIZE = 1024, + SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH = 1536, + SCE_NP_CLANS_MESSAGE_SUBJECT_MAX_LENGTH = 54, + SCE_NP_CLANS_MESSAGE_BODY_CHARACTER_MAX = 512, + SCE_NP_CLANS_MESSAGE_SUBJECT_CHARACTER_MAX = 18, + SCE_NP_CLANS_MESSAGE_BINARY_DATA_MAX_SIZE = 1024, + SCE_NP_CLANS_PAGING_REQUEST_START_POSITION_MAX = 1000000, + SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX = 100, +}; + +// Request handle for clan API +struct SceNpClansRequest; +typedef SceNpClansRequest* SceNpClansRequestHandle; + +// Paging request structure +struct SceNpClansPagingRequest +{ + be_t startPos; + be_t max; +}; + +// Paging result structure +struct SceNpClansPagingResult +{ + be_t count; + be_t total; +}; + +// Basic clan information +struct SceNpClansClanBasicInfo +{ + be_t clanId; + be_t numMembers; + s8 name[SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH + 1]; + s8 tag[SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH + 1]; + //u8 reserved[2]; +}; + +// Clan entry structure +struct SceNpClansEntry +{ + SceNpClansClanBasicInfo info; + be_t role; + be_t status; + bool allowMsg; + //u8 reserved[3]; +}; + +// Clan search attribute structure +struct SceNpClansSearchableAttr +{ + be_t fields; + be_t intAttr1; + be_t intAttr2; + be_t intAttr3; + u8 binAttr1[SCE_NP_CLANS_CLAN_BINARY_ATTRIBUTE1_MAX_SIZE]; + //u8 reserved[2]; +}; + +// Clan search profile structure +struct SceNpClansSearchableProfile +{ + SceNpClansSearchableAttr attr; + be_t fields; + be_t numMembers; + be_t tagSearchOp; + be_t numMemberSearchOp; + be_t intAttr1SearchOp; + be_t intAttr2SearchOp; + be_t intAttr3SearchOp; + be_t binAttr1SearchOp; + s8 tag[SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH + 1]; + //u8 reserved[3]; +}; + +// Clan search name structure +struct SceNpClansSearchableName +{ + be_t nameSearchOp; + s8 name[SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH + 1]; + //u8 reserved[3]; +}; + +// Updatable clan information structure +struct SceNpClansUpdatableClanInfo +{ + be_t fields; + s8 description[SCE_NP_CLANS_CLAN_DESCRIPTION_MAX_LENGTH + 1]; + SceNpClansSearchableAttr attr; + u8 binData1; + be_t binData1Size; +}; + +// Clan information structure +struct SceNpClansClanInfo +{ + CellRtcTick dateCreated; + SceNpClansClanBasicInfo info; + SceNpClansUpdatableClanInfo updatable; +}; + +// Updatable member information structure +struct SceNpClansUpdatableMemberInfo +{ + be_t fields; + u8 binData1; + be_t binData1Size; + u8 binAttr1[SCE_NP_CLANS_CLAN_BINARY_ATTRIBUTE1_MAX_SIZE + 1]; + s8 description[SCE_NP_CLANS_MEMBER_DESCRIPTION_MAX_LENGTH + 1]; + bool allowMsg; + //u8 reserved[3]; +}; + +// Member entry structure +struct SceNpClansMemberEntry +{ + SceNpId npid; + be_t role; + be_t status; + SceNpClansUpdatableMemberInfo updatable; +}; + +// Clan message structure +struct SceNpClansMessage +{ + s8 subject[SCE_NP_CLANS_MESSAGE_SUBJECT_MAX_LENGTH + 1]; + s8 body[SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH + 1]; + be_t options; +}; + +// Clan message data structure +struct SceNpClansMessageData +{ + u8 binData1; + be_t binData1Size; +}; + +// Clan message entry structure +struct SceNpClansMessageEntry +{ + CellRtcTick postDate; + be_t mId; + SceNpClansMessage message; + SceNpClansMessageData data; + SceNpId npid; + u8 reserved[4]; +}; + +// Blacklist entry structure +struct SceNpClansBlacklistEntry +{ + SceNpId entry; + SceNpId registeredBy; +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp new file mode 100644 index 0000000000..2e0777cdfd --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp @@ -0,0 +1,347 @@ +#include "stdafx.h" +#include "Emu/SysCalls/Modules.h" +#include "cellRtc.h" +#include "sceNpCommerce2.h" + +//void sceNpCommerce2_unload(); +//void sceNpCommerce2_init(); +//Module sceNpCommerce2(0x0044, sceNpCommerce2_init, nullptr, sceNpCommerce2_unload); +Module *sceNpCommerce2 = nullptr; + +int sceNpCommerce2ExecuteStoreBrowse() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetStoreBrowseUserdata() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2Init() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2Term() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2CreateCtx() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DestroyCtx() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2CreateSessionStart() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2CreateSessionAbort() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2CreateSessionFinish() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryContentsCreateReq() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryContentsStart() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryContentsGetResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2InitGetCategoryContentsResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryInfo() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetContentInfo() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetCategoryInfoFromContentInfo() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetGameProductInfoFromContentInfo() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DestroyGetCategoryContentsResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoCreateReq() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoStart() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoGetResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2InitGetProductInfoResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetGameProductInfo() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DestroyGetProductInfoResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoListCreateReq() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoListStart() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetProductInfoListGetResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2InitGetProductInfoListResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DestroyGetProductInfoListResult() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetContentRatingInfoFromGameProductInfo() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetContentRatingInfoFromCategoryInfo() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetContentRatingDescriptor() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetGameSkuInfoFromGameProductInfo() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetPrice() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DoCheckoutStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DoCheckoutFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DoProductBrowseStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DoProductBrowseFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DoDlListStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DoDlListFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DoProductCodeStartAsync() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DoProductCodeFinishAsync() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2GetBGDLAvailability() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2SetBGDLAvailability() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2AbortReq() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +int sceNpCommerce2DestroyReq() +{ + UNIMPLEMENTED_FUNC(sceNpCommerce2); + return CELL_OK; +} + +void sceNpCommerce2_unload() +{ + // TODO: Unload SNS module +} + +void sceNpCommerce2_init() +{ + sceNpCommerce2->AddFunc(0xeef51be0, sceNpCommerce2ExecuteStoreBrowse); + sceNpCommerce2->AddFunc(0x1fa1b312, sceNpCommerce2GetStoreBrowseUserdata); + sceNpCommerce2->AddFunc(0x3539d233, sceNpCommerce2Init); + sceNpCommerce2->AddFunc(0x4d4a094c, sceNpCommerce2Term); + sceNpCommerce2->AddFunc(0xd9fdcec2, sceNpCommerce2CreateCtx); + sceNpCommerce2->AddFunc(0x6f67ea80, sceNpCommerce2DestroyCtx); + sceNpCommerce2->AddFunc(0xcc18cd2c, sceNpCommerce2CreateSessionStart); + sceNpCommerce2->AddFunc(0x62023e98, sceNpCommerce2CreateSessionAbort); + sceNpCommerce2->AddFunc(0x91f8843d, sceNpCommerce2CreateSessionFinish); + sceNpCommerce2->AddFunc(0x7370d8d0, sceNpCommerce2GetCategoryContentsCreateReq); + sceNpCommerce2->AddFunc(0x371a2edd, sceNpCommerce2GetCategoryContentsStart); + sceNpCommerce2->AddFunc(0xca0ea996, sceNpCommerce2GetCategoryContentsGetResult); + sceNpCommerce2->AddFunc(0xd8a473a3, sceNpCommerce2InitGetCategoryContentsResult); + sceNpCommerce2->AddFunc(0xbd49eab2, sceNpCommerce2GetCategoryInfo); + sceNpCommerce2->AddFunc(0x972ab46c, sceNpCommerce2GetContentInfo); + sceNpCommerce2->AddFunc(0xfc216890, sceNpCommerce2GetCategoryInfoFromContentInfo); + sceNpCommerce2->AddFunc(0xe51a4944, sceNpCommerce2GetGameProductInfoFromContentInfo); + sceNpCommerce2->AddFunc(0x9d9cb96b, sceNpCommerce2DestroyGetCategoryContentsResult); + sceNpCommerce2->AddFunc(0xa975ebb4, sceNpCommerce2GetProductInfoCreateReq); + sceNpCommerce2->AddFunc(0x8f46325b, sceNpCommerce2GetProductInfoStart); + sceNpCommerce2->AddFunc(0xbf5f58ea, sceNpCommerce2GetProductInfoGetResult); + sceNpCommerce2->AddFunc(0xf798f5e3, sceNpCommerce2InitGetProductInfoResult); + sceNpCommerce2->AddFunc(0xef645654, sceNpCommerce2GetGameProductInfo); + sceNpCommerce2->AddFunc(0xef8eafcd, sceNpCommerce2DestroyGetProductInfoResult); + sceNpCommerce2->AddFunc(0xe1e7b5ac, sceNpCommerce2GetProductInfoListCreateReq); + sceNpCommerce2->AddFunc(0x9cde07cc, sceNpCommerce2GetProductInfoListStart); + sceNpCommerce2->AddFunc(0x146618df, sceNpCommerce2GetProductInfoListGetResult); + sceNpCommerce2->AddFunc(0xe0f90e44, sceNpCommerce2InitGetProductInfoListResult); + sceNpCommerce2->AddFunc(0xd9956ce7, sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult); + sceNpCommerce2->AddFunc(0xf6139b58, sceNpCommerce2DestroyGetProductInfoListResult); + sceNpCommerce2->AddFunc(0xec324c8f, sceNpCommerce2GetContentRatingInfoFromGameProductInfo); + sceNpCommerce2->AddFunc(0xac78c1f3, sceNpCommerce2GetContentRatingInfoFromCategoryInfo); + sceNpCommerce2->AddFunc(0x150fdca3, sceNpCommerce2GetContentRatingDescriptor); + sceNpCommerce2->AddFunc(0xdb19194c, sceNpCommerce2GetGameSkuInfoFromGameProductInfo); + sceNpCommerce2->AddFunc(0xda8e322d, sceNpCommerce2GetPrice); + sceNpCommerce2->AddFunc(0x104551a6, sceNpCommerce2DoCheckoutStartAsync); + sceNpCommerce2->AddFunc(0xd43a130e, sceNpCommerce2DoCheckoutFinishAsync); + sceNpCommerce2->AddFunc(0x9825a0fc, sceNpCommerce2DoProductBrowseStartAsync); + sceNpCommerce2->AddFunc(0xb23e3bd1, sceNpCommerce2DoProductBrowseFinishAsync); + sceNpCommerce2->AddFunc(0x6ca9efd4, sceNpCommerce2DoDlListStartAsync); + sceNpCommerce2->AddFunc(0x410d42be, sceNpCommerce2DoDlListFinishAsync); + sceNpCommerce2->AddFunc(0xde7ab33d, sceNpCommerce2DoProductCodeStartAsync); + sceNpCommerce2->AddFunc(0xa9f945b3, sceNpCommerce2DoProductCodeFinishAsync); + sceNpCommerce2->AddFunc(0x3d627d81, sceNpCommerce2GetBGDLAvailability); + sceNpCommerce2->AddFunc(0xa5a863fe, sceNpCommerce2SetBGDLAvailability); + sceNpCommerce2->AddFunc(0x8df0057f, sceNpCommerce2AbortReq); + sceNpCommerce2->AddFunc(0x2a910f05, sceNpCommerce2DestroyReq); +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h new file mode 100644 index 0000000000..3dd26730ef --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h @@ -0,0 +1,275 @@ +#pragma once + +// Return codes +enum +{ + SCE_NP_COMMERCE2_ERROR_NOT_INITIALIZED = 0x80023001, + SCE_NP_COMMERCE2_ERROR_ALREADY_INITIALIZED = 0x80023002, + SCE_NP_COMMERCE2_ERROR_INVALID_ARGUMENT = 0x80023003, + SCE_NP_COMMERCE2_ERROR_UNSUPPORTED_VERSION = 0x80023004, + SCE_NP_COMMERCE2_ERROR_CTX_MAX = 0x80023005, + SCE_NP_COMMERCE2_ERROR_INVALID_INDEX = 0x80023006, + SCE_NP_COMMERCE2_ERROR_INVALID_SKUID = 0x80023007, + SCE_NP_COMMERCE2_ERROR_INVALID_SKU_NUM = 0x80023008, + SCE_NP_COMMERCE2_ERROR_INVALID_MEMORY_CONTAINER = 0x80023009, + SCE_NP_COMMERCE2_ERROR_INSUFFICIENT_MEMORY_CONTAINER = 0x8002300a, + SCE_NP_COMMERCE2_ERROR_OUT_OF_MEMORY = 0x8002300b, + SCE_NP_COMMERCE2_ERROR_CTX_NOT_FOUND = 0x8002300c, + SCE_NP_COMMERCE2_ERROR_CTXID_NOT_AVAILABLE = 0x8002300d, + SCE_NP_COMMERCE2_ERROR_REQ_NOT_FOUND = 0x8002300e, + SCE_NP_COMMERCE2_ERROR_REQID_NOT_AVAILABLE = 0x8002300f, + SCE_NP_COMMERCE2_ERROR_ABORTED = 0x80023010, + SCE_NP_COMMERCE2_ERROR_RESPONSE_BUF_TOO_SMALL = 0x80023012, + SCE_NP_COMMERCE2_ERROR_COULD_NOT_RECV_WHOLE_RESPONSE_DATA = 0x80023013, + SCE_NP_COMMERCE2_ERROR_INVALID_RESULT_DATA = 0x80023014, + SCE_NP_COMMERCE2_ERROR_UNKNOWN = 0x80023015, + SCE_NP_COMMERCE2_ERROR_SERVER_MAINTENANCE = 0x80023016, + SCE_NP_COMMERCE2_ERROR_SERVER_UNKNOWN = 0x80023017, + SCE_NP_COMMERCE2_ERROR_INSUFFICIENT_BUF_SIZE = 0x80023018, + SCE_NP_COMMERCE2_ERROR_REQ_MAX = 0x80023019, + SCE_NP_COMMERCE2_ERROR_INVALID_TARGET_TYPE = 0x8002301a, + SCE_NP_COMMERCE2_ERROR_INVALID_TARGET_ID = 0x8002301b, + SCE_NP_COMMERCE2_ERROR_INVALID_SIZE = 0x8002301c, + SCE_NP_COMMERCE2_ERROR_DATA_NOT_FOUND = 0x80023087, + SCE_NP_COMMERCE2_SERVER_ERROR_BAD_REQUEST = 0x80023101, + SCE_NP_COMMERCE2_SERVER_ERROR_UNKNOWN_ERROR = 0x80023102, + SCE_NP_COMMERCE2_SERVER_ERROR_SESSION_EXPIRED = 0x80023105, + SCE_NP_COMMERCE2_SERVER_ERROR_ACCESS_PERMISSION_DENIED = 0x80023107, + SCE_NP_COMMERCE2_SERVER_ERROR_NO_SUCH_CATEGORY = 0x80023110, + SCE_NP_COMMERCE2_SERVER_ERROR_NO_SUCH_PRODUCT = 0x80023111, + SCE_NP_COMMERCE2_SERVER_ERROR_NOT_ELIGIBILITY = 0x80023113, + SCE_NP_COMMERCE2_SERVER_ERROR_INVALID_SKU = 0x8002311a, + SCE_NP_COMMERCE2_SERVER_ERROR_ACCOUNT_SUSPENDED1 = 0x8002311b, + SCE_NP_COMMERCE2_SERVER_ERROR_ACCOUNT_SUSPENDED2 = 0x8002311c, + SCE_NP_COMMERCE2_SERVER_ERROR_OVER_SPENDING_LIMIT = 0x80023120, + SCE_NP_COMMERCE2_SERVER_ERROR_INVALID_VOUCHER = 0x8002312f, + SCE_NP_COMMERCE2_SERVER_ERROR_VOUCHER_ALREADY_CONSUMED = 0x80023130, + SCE_NP_COMMERCE2_SERVER_ERROR_EXCEEDS_AGE_LIMIT_IN_BROWSING = 0x80023139, + SCE_NP_COMMERCE2_SYSTEM_UTIL_ERROR_INVALID_VOUCHER = 0x80024002, + SCE_NP_COMMERCE_ERROR_REQ_BUSY = 0x8002940d, +}; + +// Event types +enum +{ + SCE_NP_COMMERCE2_EVENT_REQUEST_ERROR = 0x0001, + SCE_NP_COMMERCE2_EVENT_CREATE_SESSION_DONE = 0x0011, + SCE_NP_COMMERCE2_EVENT_CREATE_SESSION_ABORT = 0x0012, + SCE_NP_COMMERCE2_EVENT_DO_CHECKOUT_STARTED = 0x0021, + SCE_NP_COMMERCE2_EVENT_DO_CHECKOUT_SUCCESS = 0x0022, + SCE_NP_COMMERCE2_EVENT_DO_CHECKOUT_BACK = 0x0023, + SCE_NP_COMMERCE2_EVENT_DO_CHECKOUT_FINISHED = 0x0024, + SCE_NP_COMMERCE2_EVENT_DO_DL_LIST_STARTED = 0x0031, + SCE_NP_COMMERCE2_EVENT_DO_DL_LIST_SUCCESS = 0x0032, + SCE_NP_COMMERCE2_EVENT_DO_DL_LIST_FINISHED = 0x0034, + SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_STARTED = 0x0041, + SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_SUCCESS = 0x0042, + SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_BACK = 0x0043, + SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_FINISHED = 0x0044, + SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_OPENED = 0x0045, + SCE_NP_COMMERCE2_EVENT_DO_PRODUCT_CODE_STARTED = 0x0051, + SCE_NP_COMMERCE2_EVENT_DO_PRODUCT_CODE_SUCCESS = 0x0052, + SCE_NP_COMMERCE2_EVENT_DO_PRODUCT_CODE_BACK = 0x0053, + SCE_NP_COMMERCE2_EVENT_DO_PRODUCT_CODE_FINISHED = 0x0054, + SCE_NP_COMMERCE2_EVENT_EMPTY_STORE_CHECK_DONE = 0x0061, + SCE_NP_COMMERCE2_EVENT_EMPTY_STORE_CHECK_ABORT = 0x0062, +}; + +// Category data type +enum SceNpCommerce2CategoryDataType +{ + SCE_NP_COMMERCE2_CAT_DATA_TYPE_THIN = 0, + SCE_NP_COMMERCE2_CAT_DATA_TYPE_NORMAL, + SCE_NP_COMMERCE2_CAT_DATA_TYPE_MAX +}; + +// Game product data type +enum SceNpCommerce2GameProductDataType +{ + SCE_NP_COMMERCE2_GAME_PRODUCT_DATA_TYPE_THIN = 0, + SCE_NP_COMMERCE2_GAME_PRODUCT_DATA_TYPE_NORMAL, + SCE_NP_COMMERCE2_GAME_PRODUCT_DATA_TYPE_MAX +}; + +// SKU data type +enum SceNpCommerce2GameSkuDataType +{ + SCE_NP_COMMERCE2_GAME_SKU_DATA_TYPE_THIN = 0, + SCE_NP_COMMERCE2_GAME_SKU_DATA_TYPE_NORMAL, + SCE_NP_COMMERCE2_GAME_SKU_DATA_TYPE_MAX +}; + +// Constanc for commerce functions and structures +enum +{ + SCE_NP_COMMERCE2_CURRENCY_CODE_LEN = 3, + SCE_NP_COMMERCE2_CURRENCY_SYMBOL_LEN = 3, + SCE_NP_COMMERCE2_THOUSAND_SEPARATOR_LEN = 4, + SCE_NP_COMMERCE2_DECIMAL_LETTER_LEN = 4, + SCE_NP_COMMERCE2_SP_NAME_LEN = 256, + SCE_NP_COMMERCE2_CATEGORY_ID_LEN = 56, + SCE_NP_COMMERCE2_CATEGORY_NAME_LEN = 256, + SCE_NP_COMMERCE2_CATEGORY_DESCRIPTION_LEN = 1024, + SCE_NP_COMMERCE2_PRODUCT_ID_LEN = 48, + SCE_NP_COMMERCE2_PRODUCT_NAME_LEN = 256, + SCE_NP_COMMERCE2_PRODUCT_SHORT_DESCRIPTION_LEN = 1024, + SCE_NP_COMMERCE2_PRODUCT_LONG_DESCRIPTION_LEN = 4000, + SCE_NP_COMMERCE2_SKU_ID_LEN = 56, + SCE_NP_COMMERCE2_SKU_NAME_LEN = 180, + SCE_NP_COMMERCE2_URL_LEN = 256, + SCE_NP_COMMERCE2_RATING_SYSTEM_ID_LEN = 16, + SCE_NP_COMMERCE2_RATING_DESCRIPTION_LEN = 60, + SCE_NP_COMMERCE2_RECV_BUF_SIZE = 262144, + SCE_NP_COMMERCE2_PRODUCT_CODE_BLOCK_LEN = 4, + SCE_NP_COMMERCE2_GETCAT_MAX_COUNT = 60, + SCE_NP_COMMERCE2_DO_CHECKOUT_MEMORY_CONTAINER_SIZE = 10485760, + SCE_NP_COMMERCE2_DO_PROD_BROWSE_MEMORY_CONTAINER_SIZE = 16777216, + SCE_NP_COMMERCE2_DO_DL_LIST_MEMORY_CONTAINER_SIZE = 10485760, + SCE_NP_COMMERCE2_DO_PRODUCT_CODE_MEMORY_CONTAINER_SIZE = 16777216, +}; + +// Common structure used when receiving data +struct SceNpCommerce2CommonData +{ + be_t version; + be_t buf_head; + be_t buf_size; + be_t data; + be_t data_size; + be_t data2; + //be_t reserved[4]; +}; + +// Structure indicating the range of results obtained +struct SceNpCommerce2Range +{ + be_t startPosition; + be_t count; + be_t totalCountOfResults; +}; + +// Structure for session information +struct SceNpCommerce2SessionInfo +{ + s8 currencyCode[SCE_NP_COMMERCE2_CURRENCY_CODE_LEN + 1]; + be_t decimals; + s8 currencySymbol[SCE_NP_COMMERCE2_CURRENCY_SYMBOL_LEN + 1]; + be_t symbolPosition; + bool symbolWithSpace; + u8 padding1[3]; + s8 thousandSeparator[SCE_NP_COMMERCE2_THOUSAND_SEPARATOR_LEN + 1]; + s8 decimalLetter[SCE_NP_COMMERCE2_DECIMAL_LETTER_LEN + 1]; + u8 padding2[1]; + //be_t reserved[4]; +}; + +// Structure for category information +struct SceNpCommerce2CategoryInfo +{ + SceNpCommerce2CommonData commonData; + SceNpCommerce2CategoryDataType dataType; + s8 categoryId; + CellRtcTick releaseDate; + s8 categoryName; + s8 categoryDescription; + s8 imageUrl; + s8 spName; + be_t countOfSubCategory; + be_t countOfProduct; +}; + +// Structure for content information within the category +struct SceNpCommerce2ContentInfo +{ + SceNpCommerce2CommonData commonData; + be_t contentType; +}; + +// Structure for initialized product data +struct SceNpCommerce2GetProductInfoResult +{ + SceNpCommerce2CommonData commonData; +}; + +// Structure for game product information +struct SceNpCommerce2GameProductInfo +{ + SceNpCommerce2CommonData commonData; + SceNpCommerce2GameProductDataType dataType; + s8 productId; + be_t countOfSku; + u8 padding[4]; + CellRtcTick releaseDate; + s8 productName; + s8 productShortDescription; + s8 imageUrl; + s8 spName; + s8 productLongDescription; + s8 legalDescription; +}; + +// Structure for initialized product info list +struct SceNpCommerce2GetProductInfoListResult +{ + SceNpCommerce2CommonData commonData; +}; + +// Structure for rating information +struct SceNpCommerce2ContentRatingInfo +{ + SceNpCommerce2CommonData commonData; + s8 ratingSystemId; + s8 imageUrl; + be_t countOfContentRatingDescriptor; +}; + +// Structure for a rating descriptor +struct SceNpCommerce2ContentRatingDescriptor +{ + SceNpCommerce2CommonData commonData; + be_t descriptorType; + s8 imageUrl; + s8 contentRatingDescription; +}; + +// Structure for SKU information +struct SceNpCommerce2GameSkuInfo +{ + SceNpCommerce2CommonData commonData; + SceNpCommerce2GameSkuDataType dataType; + s8 skuId; + be_t skuType; + be_t countUntilExpiration; + be_t timeUntilExpiration; + be_t purchasabilityFlag; + be_t annotation; + bool downloadable; + u8 padding[3]; + be_t price; + s8 skuName; + s8 productId; + s8 contentLinkUrl; + be_t countOfRewardInfo; + //be_t reserved[8]; +}; + +// Structure of parameters for in-game product browsing +struct SceNpCommerce2ProductBrowseParam +{ + be_t size; +}; + +// Structure of parameters for promotion code input +struct SceNpCommerce2ProductCodeParam +{ + be_t size; + be_t inputMode; // Unsigned ints go into be_t, right? + s8 code1[SCE_NP_COMMERCE2_PRODUCT_CODE_BLOCK_LEN + 1]; + //s8 padding1[3]; + s8 code2[SCE_NP_COMMERCE2_PRODUCT_CODE_BLOCK_LEN + 1]; + //s8 padding2[3]; + s8 code3[SCE_NP_COMMERCE2_PRODUCT_CODE_BLOCK_LEN + 1]; + //s8 padding3[3]; +}; + +typedef void(*SceNpCommerce2Handler)(u32 ctx_id, u32 subject_id, s32 event, s32 error_code, u32 arg); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp new file mode 100644 index 0000000000..a5930c192d --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp @@ -0,0 +1,18 @@ +#include "stdafx.h" +#include "Emu/SysCalls/Modules.h" +#include "sceNpSns.h" + +//void sceNpSns_unload(); +//void sceNpSns_init(); +//Module sceNpSns(0x0059, sceNpSns_init, nullptr, sceNpSns_unload); +Module *sceNpSns = nullptr; + +void sceNpSns_unload() +{ + // TODO: Unload SNS module +} + +void sceNpSns_init() +{ + // TODO: Register SNS module functions here +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpSns.h b/rpcs3/Emu/SysCalls/Modules/sceNpSns.h new file mode 100644 index 0000000000..874ea96be1 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpSns.h @@ -0,0 +1,38 @@ +#pragma once + +// Return codes +enum +{ + SCE_NP_SNS_ERROR_UNKNOWN = 0x80024501, + SCE_NP_SNS_ERROR_NOT_SIGN_IN = 0x80024502, + SCE_NP_SNS_ERROR_INVALID_ARGUMENT = 0x80024503, + SCE_NP_SNS_ERROR_OUT_OF_MEMORY = 0x80024504, + SCE_NP_SNS_ERROR_SHUTDOWN = 0x80024505, + SCE_NP_SNS_ERROR_BUSY = 0x80024506, + SCE_NP_SNS_FB_ERROR_ALREADY_INITIALIZED = 0x80024511, + SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED = 0x80024512, + SCE_NP_SNS_FB_ERROR_EXCEEDS_MAX = 0x80024513, + SCE_NP_SNS_FB_ERROR_UNKNOWN_HANDLE = 0x80024514, + SCE_NP_SNS_FB_ERROR_ABORTED = 0x80024515, + SCE_NP_SNS_FB_ERROR_ALREADY_ABORTED = 0x80024516, + SCE_NP_SNS_FB_ERROR_CONFIG_DISABLED = 0x80024517, + SCE_NP_SNS_FB_ERROR_FBSERVER_ERROR_RESPONSE = 0x80024518, + SCE_NP_SNS_FB_ERROR_THROTTLE_CLOSED = 0x80024519, + SCE_NP_SNS_FB_ERROR_OPERATION_INTERVAL_VIOLATION = 0x8002451a, + SCE_NP_SNS_FB_ERROR_UNLOADED_THROTTLE = 0x8002451b, + SCE_NP_SNS_FB_ERROR_ACCESS_NOT_ALLOWED = 0x8002451c, +}; + +// Constants for SNS functions +enum +{ + SCE_NP_SNS_FB_INVALID_HANDLE = 0, + SCE_NP_SNS_FB_HANDLE_SLOT_MAX = 4, +}; + +// Intilization parameters for functionalities coordinated with Facebook +struct SceNpSnsFbInitParams +{ + be_t pool; + be_t poolSize; +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index bcefea5a49..d71ee19a14 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -8,6 +8,7 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/FS/vfsDir.h" +#include "cellRtc.h" #include "sceNp.h" #include "sceNpTrophy.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.h b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.h index 2c9b448127..4fee4d990c 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.h +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.h @@ -1,6 +1,6 @@ #pragma once -#include "cellRtc.h" +// Error codes enum { SCE_NP_TROPHY_ERROR_ALREADY_INITIALIZED = 0x80022901, diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp new file mode 100644 index 0000000000..ddd66df6c9 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp @@ -0,0 +1,397 @@ +#include "stdafx.h" +#include "Emu/SysCalls/Modules.h" +#include "cellRtc.h" +#include "sceNp.h" +#include "sceNpTus.h" + +//void sceNpTus_unload(); +//void sceNpTus_init(); +//Module sceNpTus(0x0045, sceNpTus_init, nullptr, sceNpTus_unload); +Module *sceNpTus = nullptr; + +int sceNpTusInit() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusTerm() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusCreateTitleCtx() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDestroyTitleCtx() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusCreateTransactionCtx() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDestroyTransactionCtx() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetTimeout() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusAbortTransaction() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusWaitAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusPollAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetMultiSlotVariable() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetMultiSlotVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetMultiSlotVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetMultiSlotVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiSlotVariable() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiSlotVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiSlotVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiSlotVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiUserVariable() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiUserVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiUserVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiUserVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusAddAndGetVariable() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusAddAndGetVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusAddAndGetVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusAddAndGetVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusTryAndSetVariable() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusTryAndSetVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusTryAndSetVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusTryAndSetVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotVariable() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotVariableVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotVariableAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotVariableVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetData() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetDataVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusSetDataVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetData() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetDataVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetDataVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiSlotDataStatus() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiSlotDataStatusVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiSlotDataStatusAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiSlotDataStatusVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiUserDataStatus() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiUserDataStatusVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiUserDataStatusAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusGetMultiUserDataStatusVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotData() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotDataVUser() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotDataAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +int sceNpTusDeleteMultiSlotDataVUserAsync() +{ + UNIMPLEMENTED_FUNC(sceNpTus); + return CELL_OK; +} + +void sceNpTus_unload() +{ + // TODO: Unload Tus module +} + +void sceNpTus_init() +{ + sceNpTus->AddFunc(0x8f87a06b, sceNpTusInit); + sceNpTus->AddFunc(0x225aed26, sceNpTusTerm); + sceNpTus->AddFunc(0x7caf58ee, sceNpTusCreateTitleCtx); + sceNpTus->AddFunc(0x2e162a62, sceNpTusDestroyTitleCtx); + sceNpTus->AddFunc(0x1904435e, sceNpTusCreateTransactionCtx); + sceNpTus->AddFunc(0x44eca8b4, sceNpTusDestroyTransactionCtx); + sceNpTus->AddFunc(0x59432970, sceNpTusSetTimeout); + sceNpTus->AddFunc(0x325c6284, sceNpTusAbortTransaction); + sceNpTus->AddFunc(0xb8e8ff22, sceNpTusWaitAsync); + sceNpTus->AddFunc(0x19bce18c, sceNpTusPollAsync); + sceNpTus->AddFunc(0xcc86a8f6, sceNpTusSetMultiSlotVariable); + sceNpTus->AddFunc(0xf819be91, sceNpTusSetMultiSlotVariableVUser); + sceNpTus->AddFunc(0x065b610d, sceNpTusSetMultiSlotVariableAsync); + sceNpTus->AddFunc(0x96a06212, sceNpTusSetMultiSlotVariableVUserAsync); + sceNpTus->AddFunc(0x0423e622, sceNpTusGetMultiSlotVariable); + sceNpTus->AddFunc(0x2357ba9e, sceNpTusGetMultiSlotVariableVUser); + sceNpTus->AddFunc(0xbb2877f2, sceNpTusGetMultiSlotVariableAsync); + sceNpTus->AddFunc(0xfc7d346e, sceNpTusGetMultiSlotVariableVUserAsync); + sceNpTus->AddFunc(0x0d15043b, sceNpTusGetMultiUserVariable); + sceNpTus->AddFunc(0x6c511024, sceNpTusGetMultiUserVariableVUser); + sceNpTus->AddFunc(0xcc7a31cd, sceNpTusGetMultiUserVariableAsync); + sceNpTus->AddFunc(0x9549d22c, sceNpTusGetMultiUserVariableVUserAsync); + sceNpTus->AddFunc(0x94989003, sceNpTusAddAndGetVariable); + sceNpTus->AddFunc(0xf60be06f, sceNpTusAddAndGetVariableVUser); + sceNpTus->AddFunc(0x1fa5c87d, sceNpTusAddAndGetVariableAsync); + sceNpTus->AddFunc(0xa7993bf3, sceNpTusAddAndGetVariableVUserAsync); + sceNpTus->AddFunc(0x47e9424a, sceNpTusTryAndSetVariable); + sceNpTus->AddFunc(0x3602bc80, sceNpTusTryAndSetVariableVUser); + sceNpTus->AddFunc(0xbbb244b7, sceNpTusTryAndSetVariableAsync); + sceNpTus->AddFunc(0x17db7aa7, sceNpTusTryAndSetVariableVUserAsync); + sceNpTus->AddFunc(0xaf985783, sceNpTusDeleteMultiSlotVariable); + sceNpTus->AddFunc(0xc4e51fbf, sceNpTusDeleteMultiSlotVariableVUser); + sceNpTus->AddFunc(0xf5363608, sceNpTusDeleteMultiSlotVariableAsync); + sceNpTus->AddFunc(0xc2e18da8, sceNpTusDeleteMultiSlotVariableVUserAsync); + sceNpTus->AddFunc(0x7d5f0f0e, sceNpTusSetData); + sceNpTus->AddFunc(0x0835deb2, sceNpTusSetDataVUser); + sceNpTus->AddFunc(0xe847341f, sceNpTusSetDataAsync); + sceNpTus->AddFunc(0x9cc0cf44, sceNpTusSetDataVUserAsync); + sceNpTus->AddFunc(0x8ddd0d85, sceNpTusGetData); + sceNpTus->AddFunc(0xae4e590e, sceNpTusGetDataVUser); + sceNpTus->AddFunc(0x5175abb9, sceNpTusGetDataAsync); + sceNpTus->AddFunc(0x38f364b0, sceNpTusGetDataVUserAsync); + sceNpTus->AddFunc(0xc848d425, sceNpTusGetMultiSlotDataStatus); + sceNpTus->AddFunc(0xa3abfadb, sceNpTusGetMultiSlotDataStatusVUser); + sceNpTus->AddFunc(0x651fd79f, sceNpTusGetMultiSlotDataStatusAsync); + sceNpTus->AddFunc(0x2ab21ea9, sceNpTusGetMultiSlotDataStatusVUserAsync); + sceNpTus->AddFunc(0x348dbcb4, sceNpTusGetMultiUserDataStatus); + sceNpTus->AddFunc(0x2d1b9f1a, sceNpTusGetMultiUserDataStatusVUser); + sceNpTus->AddFunc(0xc66ba67e, sceNpTusGetMultiUserDataStatusAsync); + sceNpTus->AddFunc(0x368fec59, sceNpTusGetMultiUserDataStatusVUserAsync); + sceNpTus->AddFunc(0xe0719847, sceNpTusDeleteMultiSlotData); + sceNpTus->AddFunc(0x01711e81, sceNpTusDeleteMultiSlotDataVUser); + sceNpTus->AddFunc(0x3175af23, sceNpTusDeleteMultiSlotDataAsync); + sceNpTus->AddFunc(0xc815b219, sceNpTusDeleteMultiSlotDataVUserAsync); +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTus.h b/rpcs3/Emu/SysCalls/Modules/sceNpTus.h new file mode 100644 index 0000000000..941e9d92b3 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTus.h @@ -0,0 +1,46 @@ +#pragma once + +// Constants for TUS functions and structures +enum +{ + SCE_NP_TUS_DATA_INFO_MAX_SIZE = 384, + SCE_NP_TUS_MAX_CTX_NUM = 32, + SCE_NP_TUS_MAX_SLOT_NUM_PER_TRANS = 64, + SCE_NP_TUS_MAX_USER_NUM_PER_TRANS = 101, +}; + +SceNpOnlineId SceNpTusVirtualUserId; + +// Structure for representing a TUS variable +struct SceNpTusVariable +{ + SceNpId ownerId; + be_t hasData; + //u8 pad[4]; + CellRtcTick lastChangedDate; + SceNpId lastChangedAuthorId; + be_t variable; + be_t oldVariable; + //u8 reserved[16]; +}; + +// Structure for representing the accessory information of a TUS data +struct SceNpTusDataInfo +{ + be_t infoSize; + //u8 pad[4]; + u8 data[SCE_NP_TUS_DATA_INFO_MAX_SIZE]; +}; + +// Structure for respreseting the status of TUS data +struct SceNpTusDataStatus +{ + SceNpId ownerId; + be_t hasData; + CellRtcTick lastChangedDate; + SceNpId lastChangedAuthorId; + be_t data; + be_t dataSize; + //u8 pad[4]; + SceNpTusDataInfo info; +}; \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 81ff0fdffb..a714d2e80c 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -180,7 +180,11 @@ + + + + @@ -372,7 +376,11 @@ + + + + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 034c7a7020..ec32261038 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -212,9 +212,21 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + Emu\SysCalls\Modules + + Emu\SysCalls\Modules + Emu\SysCalls\Modules @@ -700,9 +712,21 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + Emu\SysCalls\Modules + + Emu\SysCalls\Modules + Emu\SysCalls\Modules From e360746265c05e215ce6f665962e8b176ee5d71c Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Sun, 17 Aug 2014 00:03:31 +0800 Subject: [PATCH 348/499] Give Log Console (ConLogFrame) a Context Menu with Copy and Clear actions. --- rpcs3/Gui/ConLogFrame.cpp | 47 +++++++++++++++++++++++++++++++++++++++ rpcs3/Gui/ConLogFrame.h | 4 ++++ 2 files changed, 51 insertions(+) diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index be7f4fc6ef..c1e2c6f370 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include +#include #include #include #include @@ -24,6 +25,12 @@ const int BUFFER_MAX_SIZE = 1024 * 1024; //amount of characters in the TextCtrl text-buffer for the emulation log const int GUI_BUFFER_MAX_SIZE = 1024 * 1024; +enum +{ + id_log_copy, //Copy log to ClipBoard + id_log_clear //Clear log +}; + struct wxWriter : Log::LogListener { wxTextCtrl *m_log; @@ -146,6 +153,10 @@ LogFrame::LogFrame(wxWindow* parent) SetSizer(s_main); Layout(); + m_log->Bind(wxEVT_RIGHT_DOWN, &LogFrame::OnRightClick, this); + Bind(wxEVT_MENU, &LogFrame::OnContextMenu, this, id_log_clear); + Bind(wxEVT_MENU, &LogFrame::OnContextMenu, this, id_log_copy); + Show(); } @@ -162,4 +173,40 @@ bool LogFrame::Close(bool force) void LogFrame::OnQuit(wxCloseEvent& event) { event.Skip(); +} + +//Deals with the RightClick on Log Console, shows up the Context Menu. +void LogFrame::OnRightClick(wxMouseEvent& event) +{ + wxMenu* menu = new wxMenu(); + + menu->Append(id_log_copy, "&Copy Ctrl+C"); + menu->AppendSeparator(); + menu->Append(id_log_clear, "C&lear"); + + PopupMenu(menu); +} +//Well you can bind more than one control to a single handler. +void LogFrame::OnContextMenu(wxCommandEvent& event) +{ + int id = event.GetId(); + switch (id) + { + case id_log_clear: + m_log->Clear(); + break; + case id_log_copy: + if (wxTheClipboard->Open()) + { + m_tdo = new wxTextDataObject(m_log->GetStringSelection()); + if (m_tdo->GetTextLength() > 0) + { + wxTheClipboard->SetData(new wxTextDataObject(m_log->GetStringSelection())); + } + wxTheClipboard->Close(); + } + break; + default: + event.Skip(); + } } \ No newline at end of file diff --git a/rpcs3/Gui/ConLogFrame.h b/rpcs3/Gui/ConLogFrame.h index df5e4d25ff..b9733da8c6 100644 --- a/rpcs3/Gui/ConLogFrame.h +++ b/rpcs3/Gui/ConLogFrame.h @@ -9,6 +9,8 @@ class LogFrame wxAuiNotebook m_tabs; wxTextCtrl *m_log; wxTextCtrl *m_tty; + //Copy Action in Context Menu + wxTextDataObject* m_tdo; public: LogFrame(wxWindow* parent); @@ -21,6 +23,8 @@ private: virtual void Task(){}; void OnQuit(wxCloseEvent& event); + void OnRightClick(wxMouseEvent& event); //Show context menu + void OnContextMenu(wxCommandEvent& event); //After select DECLARE_EVENT_TABLE(); }; \ No newline at end of file From 1e4f95dee3a29e7a1dea02816caedad9e4fd0758 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sat, 16 Aug 2014 19:20:16 +0300 Subject: [PATCH 349/499] Enabled cellGem and added cellGemGetMemorySize --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 12 +- rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 118 +++++++-------- rpcs3/Emu/SysCalls/Modules/cellGem.h | 190 +++++++++++++++++++++++++ rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 5 +- 5 files changed, 257 insertions(+), 69 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellGem.h diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 76df8fb2f7..26c4adbd1b 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -31,14 +31,16 @@ extern void cellFontFT_init(); extern void cellFontFT_load(); extern void cellFontFT_unload(); extern Module *cellFontFT; -extern void cellGifDec_init(); -extern Module *cellGifDec; +extern void cellGame_init(); +extern Module *cellGame; extern void cellGcmSys_init(); extern void cellGcmSys_load(); extern void cellGcmSys_unload(); extern Module *cellGcmSys; -extern void cellGame_init(); -extern Module *cellGame; +extern void cellGem_init(); +extern Module *cellGem; +extern void cellGifDec_init(); +extern Module *cellGifDec; extern void sys_io_init(); extern Module *sys_io; extern void cellL10n_init(); @@ -219,6 +221,8 @@ void ModuleManager::init() m_mod_init.emplace_back(0x0007, cellDmux_init); cellFont = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0019, cellFont_init, cellFont_load, cellFont_unload); + cellGem = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x005a, cellGem_init); sys_net = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back((u16)0x0000, sys_net_init); sceNpTrophy = static_cast (&(m_mod_init.back())) + 1; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index 5133ce51c4..24b5897885 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -1,26 +1,11 @@ #include "stdafx.h" -#if 0 +#include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" +#include "cellGem.h" void cellGem_init(); -Module cellGem(0x005a, cellGem_init); - -// Error Codes -enum -{ - CELL_GEM_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121801, - CELL_GEM_ERROR_ALREADY_INITIALIZED = 0x80121802, - CELL_GEM_ERROR_UNINITIALIZED = 0x80121803, - CELL_GEM_ERROR_INVALID_PARAMETER = 0x80121804, - CELL_GEM_ERROR_INVALID_ALIGNMENT = 0x80121805, - CELL_GEM_ERROR_UPDATE_NOT_FINISHED = 0x80121806, - CELL_GEM_ERROR_UPDATE_NOT_STARTED = 0x80121807, - CELL_GEM_ERROR_CONVERT_NOT_FINISHED = 0x80121808, - CELL_GEM_ERROR_CONVERT_NOT_STARTED = 0x80121809, - CELL_GEM_ERROR_WRITE_NOT_FINISHED = 0x8012180A, - CELL_GEM_ERROR_NOT_A_HUE = 0x8012180B, -}; +//Module cellGem(0x005a, cellGem_init); +Module *cellGem = nullptr; int cellGemCalibrate() { @@ -124,10 +109,16 @@ int cellGemGetInfo() return CELL_OK; } -int cellGemGetMemorySize() +// Should int be used, even when type is int_32t (s32)? +s32 cellGemGetMemorySize(be_t max_connect) { - UNIMPLEMENTED_FUNC(cellGem); - return CELL_OK; + cellGem->Warning("cellGemGetMemorySize(max_connect=%i)", max_connect); + + if (max_connect > CELL_GEM_MAX_NUM) + return CELL_GEM_ERROR_INVALID_PARAMETER; + + // Return in kilobytes, megabytes or something else? (currently kilobytes) + return max_connect * 4000; } int cellGemGetRGB() @@ -240,47 +231,46 @@ int cellGemWriteExternalPort() void cellGem_init() { - //cellGem.AddFunc(, cellGemAttributeInit); - cellGem.AddFunc(0xafa99ead, cellGemCalibrate); - cellGem.AddFunc(0x9b9714a4, cellGemClearStatusFlags); - cellGem.AddFunc(0x1a13d010, cellGemConvertVideoFinish); - cellGem.AddFunc(0x6dce048c, cellGemConvertVideoStart); - cellGem.AddFunc(0x4219de31, cellGemEnableCameraPitchAngleCorrection); - cellGem.AddFunc(0x1a2518a2, cellGemEnableMagnetometer); - cellGem.AddFunc(0xe1f85a80, cellGemEnd); - cellGem.AddFunc(0x6fc4c791, cellGemFilterState); - cellGem.AddFunc(0xce6d7791, cellGemForceRGB); - cellGem.AddFunc(0x6a5b7048, cellGemGetAccelerometerPositionInDevice); - cellGem.AddFunc(0x2d2c2764, cellGemGetAllTrackableHues); - cellGem.AddFunc(0x8befac67, cellGemGetCameraState); - cellGem.AddFunc(0x02eb41bb, cellGemGetEnvironmentLightingColor); - cellGem.AddFunc(0xb8ef56a6, cellGemGetHuePixels); - cellGem.AddFunc(0x92cc4b34, cellGemGetImageState); - cellGem.AddFunc(0xd37b127a, cellGemGetInertialState); - cellGem.AddFunc(0x9e1dff96, cellGemGetInfo); - cellGem.AddFunc(0x2e0a170d, cellGemGetMemorySize); - cellGem.AddFunc(0x1b30cc22, cellGemGetRGB); - cellGem.AddFunc(0x6db6b007, cellGemGetRumble); - cellGem.AddFunc(0x6441d38d, cellGemGetState); - cellGem.AddFunc(0xfee33481, cellGemGetStatusFlags); - cellGem.AddFunc(0x18ea899a, cellGemGetTrackerHue); - //cellGem.AddFunc(, cellGemGetVideoConvertSize); - cellGem.AddFunc(0xc7622586, cellGemHSVtoRGB); - cellGem.AddFunc(0x13ea7c64, cellGemInit); - cellGem.AddFunc(0xe3e4f0d6, cellGemInvalidateCalibration); - cellGem.AddFunc(0xfb5887f9, cellGemIsTrackableHue); - cellGem.AddFunc(0xa03ef587, cellGemPrepareCamera); - cellGem.AddFunc(0xc07896f9, cellGemPrepareVideoConvert); - //cellGem.AddFunc(, cellGemReadExternalPortDeviceInfo); - cellGem.AddFunc(0xde54e2fc, cellGemReset); - cellGem.AddFunc(0x49609306, cellGemSetRumble); - cellGem.AddFunc(0x77e08704, cellGemSetYaw); - cellGem.AddFunc(0x928ac5f8, cellGemTrackHues); - cellGem.AddFunc(0x41ae9c31, cellGemUpdateFinish); - cellGem.AddFunc(0x0ecd2261, cellGemUpdateStart); - //cellGem.AddFunc(, cellGemVideoConvertAttributeInit); - //cellGem.AddFunc(, cellGemVideoConvertAttributeInitRgba); - cellGem.AddFunc(0x1f6328d8, cellGemWriteExternalPort); + //cellGem->AddFunc(, cellGemAttributeInit); + cellGem->AddFunc(0xafa99ead, cellGemCalibrate); + cellGem->AddFunc(0x9b9714a4, cellGemClearStatusFlags); + cellGem->AddFunc(0x1a13d010, cellGemConvertVideoFinish); + cellGem->AddFunc(0x6dce048c, cellGemConvertVideoStart); + cellGem->AddFunc(0x4219de31, cellGemEnableCameraPitchAngleCorrection); + cellGem->AddFunc(0x1a2518a2, cellGemEnableMagnetometer); + cellGem->AddFunc(0xe1f85a80, cellGemEnd); + cellGem->AddFunc(0x6fc4c791, cellGemFilterState); + cellGem->AddFunc(0xce6d7791, cellGemForceRGB); + cellGem->AddFunc(0x6a5b7048, cellGemGetAccelerometerPositionInDevice); + cellGem->AddFunc(0x2d2c2764, cellGemGetAllTrackableHues); + cellGem->AddFunc(0x8befac67, cellGemGetCameraState); + cellGem->AddFunc(0x02eb41bb, cellGemGetEnvironmentLightingColor); + cellGem->AddFunc(0xb8ef56a6, cellGemGetHuePixels); + cellGem->AddFunc(0x92cc4b34, cellGemGetImageState); + cellGem->AddFunc(0xd37b127a, cellGemGetInertialState); + cellGem->AddFunc(0x9e1dff96, cellGemGetInfo); + cellGem->AddFunc(0x2e0a170d, cellGemGetMemorySize); + cellGem->AddFunc(0x1b30cc22, cellGemGetRGB); + cellGem->AddFunc(0x6db6b007, cellGemGetRumble); + cellGem->AddFunc(0x6441d38d, cellGemGetState); + cellGem->AddFunc(0xfee33481, cellGemGetStatusFlags); + cellGem->AddFunc(0x18ea899a, cellGemGetTrackerHue); + //cellGem->AddFunc(, cellGemGetVideoConvertSize); + cellGem->AddFunc(0xc7622586, cellGemHSVtoRGB); + cellGem->AddFunc(0x13ea7c64, cellGemInit); + cellGem->AddFunc(0xe3e4f0d6, cellGemInvalidateCalibration); + cellGem->AddFunc(0xfb5887f9, cellGemIsTrackableHue); + cellGem->AddFunc(0xa03ef587, cellGemPrepareCamera); + cellGem->AddFunc(0xc07896f9, cellGemPrepareVideoConvert); + //cellGem->AddFunc(, cellGemReadExternalPortDeviceInfo); + cellGem->AddFunc(0xde54e2fc, cellGemReset); + cellGem->AddFunc(0x49609306, cellGemSetRumble); + cellGem->AddFunc(0x77e08704, cellGemSetYaw); + cellGem->AddFunc(0x928ac5f8, cellGemTrackHues); + cellGem->AddFunc(0x41ae9c31, cellGemUpdateFinish); + cellGem->AddFunc(0x0ecd2261, cellGemUpdateStart); + //cellGem->AddFunc(, cellGemVideoConvertAttributeInit); + //cellGem->AddFunc(, cellGemVideoConvertAttributeInitRgba); + cellGem->AddFunc(0x1f6328d8, cellGemWriteExternalPort); } -#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.h b/rpcs3/Emu/SysCalls/Modules/cellGem.h new file mode 100644 index 0000000000..f94ea35112 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.h @@ -0,0 +1,190 @@ +#pragma once + +#include "cellSpurs.h" + +// Had to use define, since enum doesn't allow floats +#define CELL_GEM_SPHERE_RADIUS_MM = 22.5f; + +// Error Codes +enum +{ + CELL_GEM_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121801, + CELL_GEM_ERROR_ALREADY_INITIALIZED = 0x80121802, + CELL_GEM_ERROR_UNINITIALIZED = 0x80121803, + CELL_GEM_ERROR_INVALID_PARAMETER = 0x80121804, + CELL_GEM_ERROR_INVALID_ALIGNMENT = 0x80121805, + CELL_GEM_ERROR_UPDATE_NOT_FINISHED = 0x80121806, + CELL_GEM_ERROR_UPDATE_NOT_STARTED = 0x80121807, + CELL_GEM_ERROR_CONVERT_NOT_FINISHED = 0x80121808, + CELL_GEM_ERROR_CONVERT_NOT_STARTED = 0x80121809, + CELL_GEM_ERROR_WRITE_NOT_FINISHED = 0x8012180A, + CELL_GEM_ERROR_NOT_A_HUE = 0x8012180B, +}; + +// Runtime statuses +enum +{ + CELL_GEM_NOT_CONNECTED = 1, + CELL_GEM_SPHERE_NOT_CALIBRATED = 2, + CELL_GEM_SPHERE_CALIBRATING = 3, + CELL_GEM_COMPUTING_AVAILABLE_COLORS = 4, + CELL_GEM_HUE_NOT_SET = 5, + CELL_GEM_NO_VIDEO = 6, + CELL_GEM_TIME_OUT_OF_RANGE = 7, + CELL_GEM_NOT_CALIBRATED = 8, + CELL_GEM_NO_EXTERNAL_PORT_DEVICE = 9, +}; + +// General constents +enum +{ + CELL_GEM_CTRL_CIRCLE = 1 << 5, + CELL_GEM_CTRL_CROSS = 1 << 6, + CELL_GEM_CTRL_MOVE = 1 << 2, + CELL_GEM_CTRL_SELECT = 1 << 0, + CELL_GEM_CTRL_SQUARE = 1 << 7, + CELL_GEM_CTRL_START = 1 << 3, + CELL_GEM_CTRL_T = 1 << 1, + CELL_GEM_CTRL_TRIANGLE = 1 << 4, + CELL_GEM_DONT_CARE_HUE = 4 << 24, + CELL_GEM_DONT_CHANGE_HUE = 8 << 24, + CELL_GEM_DONT_TRACK_HUE = 2 << 24, + CELL_GEM_EXT_CONNECTED = 1 << 0, + CELL_GEM_EXT_EXT0 = 1 << 1, + CELL_GEM_EXT_EXT1 = 1 << 2, + CELL_GEM_EXTERNAL_PORT_DEVICE_INFO_SIZE = 38, + CELL_GEM_EXTERNAL_PORT_OUTPUT_SIZE = 40, + CELL_GEM_FLAG_CALIBRATION_FAILED_BRIGHT_LIGHTING = 1 << 4, + CELL_GEM_FLAG_CALIBRATION_FAILED_CANT_FIND_SPHERE = 1 << 2, + CELL_GEM_FLAG_CALIBRATION_FAILED_MOTION_DETECTED = 1 << 3, + CELL_GEM_FLAG_CALIBRATION_OCCURRED = 1 << 0, + CELL_GEM_FLAG_CALIBRATION_SUCCEEDED = 1 << 1, + CELL_GEM_FLAG_CALIBRATION_WARNING_BRIGHT_LIGHTING = 1 << 6, + ELL_GEM_FLAG_CALIBRATION_WARNING_MOTION_DETECTED = 1 << 5, + CELL_GEM_FLAG_CAMERA_PITCH_ANGLE_CHANGED = 1 << 9, + CELL_GEM_FLAG_CURRENT_HUE_CONFLICTS_WITH_ENVIRONMENT = 1 << 13, + CELL_GEM_FLAG_LIGHTING_CHANGED = 1 << 7, + CELL_GEM_FLAG_VARIABLE_MAGNETIC_FIELD = 1 << 10, + CELL_GEM_FLAG_VERY_COLORFUL_ENVIRONMENT = 1 << 12, + CELL_GEM_FLAG_WEAK_MAGNETIC_FIELD = 1 << 11, + CELL_GEM_FLAG_WRONG_FIELD_OF_VIEW_SETTING = 1 << 8, + CELL_GEM_INERTIAL_STATE_FLAG_LATEST = 0, + CELL_GEM_INERTIAL_STATE_FLAG_NEXT = 2, + CELL_GEM_INERTIAL_STATE_FLAG_PREVIOUS = 1, + CELL_GEM_LATENCY_OFFSET = -22000, + CELL_GEM_MAX_CAMERA_EXPOSURE = 511, + CELL_GEM_MAX_NUM = 4, + CELL_GEM_MIN_CAMERA_EXPOSURE = 40, + CELL_GEM_STATE_FLAG_CURRENT_TIME = 0, + CELL_GEM_STATE_FLAG_LATEST_IMAGE_TIME = 1, + CELL_GEM_STATE_FLAG_TIMESTAMP = 2, + CELL_GEM_STATUS_DISCONNECTED = 0, + CELL_GEM_STATUS_READY = 1, + CELL_GEM_TRACKING_FLAG_POSITION_TRACKED = 1 << 0, + CELL_GEM_TRACKING_FLAG_VISIBLE = 1 << 1, + CELL_GEM_VERSION = 2, +}; + +struct CellGemAttribute +{ + be_t version; + be_t max_connect; + be_t memory_ptr; + CellSpurs spurs; + u8 spu_priorities[8]; +}; + +struct CellGemCameraState +{ + be_t exposure; + float exposure_time; + float gain; + float pitch_angle; + float pitch_angle_estimate; +}; + +struct CellGemExtPortData +{ + be_t status; + be_t digital1; + be_t digital2; + be_t analog_right_x; + be_t analog_right_y; + be_t analog_left_x; + be_t analog_left_y; + u8 custom[5]; +}; + +struct CellGemImageState +{ + //system_time_t frame_timestamp; // TODO: Figure what to use for them + //system_time_t timestamp; + float u; + float v; + float r; + float projectionx; + float projectiony; + float distance; + u8 visible; + u8 r_valid; +}; + +struct CellGemPadData +{ + be_t digitalbuttons; + be_t analog_T; +}; + +struct CellGemInertialState +{ + //vec_float4 accelerometer; // TODO: Figure what to use as replacement for vec_float4 + //vec_float4 gyro; + //vec_float4 accelerometer_bias; + //vec_float4 gyro_bias; + CellGemPadData pad; + CellGemExtPortData ext; + //system_time_t timestamp; + be_t counter; + float temperature; +}; + +struct CellGemInfo +{ + be_t max_connect; + be_t now_connect; + be_t status[CELL_GEM_MAX_NUM]; + be_t port[CELL_GEM_MAX_NUM]; +}; + +struct CellGemState +{ + //vec_float4 pos; + //vec_float4 vel; + //vec_float4 accel; + //vec_float4 quat; + //vec_float4 angvel; + //vec_float4 angaccel; + //vec_float4 handle_pos; + //vec_float4 handle_vel; + //vec_float4 handle_accel; + CellGemPadData pad; + CellGemExtPortData ext; + //system_time_t timestamp; + float temperature; + float camera_pitch_angle; + be_t tracking_flags; +}; + +struct CellGemVideoConvertAttribute +{ + be_t version; + be_t output_format; + be_t conversion_flags; + float gain; + float red_gain; + float green_gain; + float blue_gain; + be_t buffer_memory; + be_t video_data_out; + u8 alpha; +}; \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index a714d2e80c..4aa03b9806 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -356,6 +356,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index ec32261038..f81204a0a9 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -390,7 +390,7 @@ Emu\Cell\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\Modules Emu\Cell\currently_unused @@ -664,6 +664,9 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + Emu\SysCalls\Modules From b82d2caa6bee14366be4806d9e31ee90315a990b Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Sun, 17 Aug 2014 00:33:24 +0800 Subject: [PATCH 350/499] typo fix: added missing header. really sorry for that. --- rpcs3/Gui/ConLogFrame.h | 1 + 1 file changed, 1 insertion(+) diff --git a/rpcs3/Gui/ConLogFrame.h b/rpcs3/Gui/ConLogFrame.h index b9733da8c6..da7749b619 100644 --- a/rpcs3/Gui/ConLogFrame.h +++ b/rpcs3/Gui/ConLogFrame.h @@ -1,4 +1,5 @@ #pragma once +#include #include "Utilities/Log.h" From 50fb51dd0d112055444ae187ba34962a9ecff7b8 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 17 Aug 2014 01:39:01 +0400 Subject: [PATCH 351/499] syncLFQueueGetPushPointer, syncLFQueueCompletePushPointer --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 105 ++++++++++++++++++++---- 1 file changed, 91 insertions(+), 14 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index b5a509e264..42e7e931a3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -10,6 +10,12 @@ //Module cellSync("cellSync", cellSync_init); Module *cellSync = nullptr; +#ifdef PRX_DEBUG +#include "rpcs3.h" +#include "prx_libsre.h" +u32 libsre = 0; +#endif + s32 cellSyncMutexInitialize(mem_ptr_t mutex) { cellSync->Log("cellSyncMutexInitialize(mutex_addr=0x%x)", mutex.GetAddr()); @@ -993,6 +999,15 @@ s32 cellSyncQueueClear(mem_ptr_t queue) // LFQueue functions +void syncLFQueueDump(mem_ptr_t queue) +{ + LOG_NOTICE(HLE, "CellSyncLFQueue dump: addr = 0x%x", queue.GetAddr()); + for (u32 i = 0; i < sizeof(CellSyncLFQueue) / 16; i++) + { + LOG_NOTICE(HLE, "*** 0x%.16llx 0x%.16llx", Memory.Read64(queue.GetAddr() + i * 16), Memory.Read64(queue.GetAddr() + i * 16 + 8)); + } +} + s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) { if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_PPU2SPU)) @@ -1040,14 +1055,14 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 if (var2 < depth) { - pointer = (s16)new_queue.m_h8 + 1; - if (pointer >= depth * 2) + pointer = (s16)new_queue.m_h8; + if (pointer + 1 >= depth * 2) { new_queue.m_h8 = 0; } else { - new_queue.m_h8 = pointer; + new_queue.m_h8++; } res = CELL_OK; } @@ -1157,7 +1172,7 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer var2 += depth * 2; } - s32 var9_ = (15 - var1) & 0x3f; + s32 var9_ = 15 - var1; // calculate (1 slw (15 - var1)) if (var9_ & 0x30) { @@ -1167,7 +1182,7 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer { var9_ = 1 << var9_; } - s32 var9 = ~(u16)var9_ & ~(u16)queue->m_h6; + s32 var9 = ~(var9_ | (u16)queue->m_h6); // count leading zeros in u16 { u16 v = var9; @@ -1248,11 +1263,12 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer { // break; assert(var2 + var4 < 16); - if (var6 == -1) + if (var6 != -1) { if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) { - return CELL_OK; + assert(fpSendSignal); + return fpSendSignal((u64)queue->m_eaSignal, var6); } } else @@ -1262,8 +1278,7 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer { if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) { - assert(fpSendSignal); - return fpSendSignal((u64)queue->m_eaSignal, var6); + return CELL_OK; } } else @@ -1315,18 +1330,37 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, } s32 position; + //syncLFQueueDump(queue); + +#ifdef PRX_DEBUG + MemoryAllocator> position_v; +#endif while (true) { s32 res; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { +#ifdef PRX_DEBUG_XXX + res = GetCurrentPPUThread().FastCall(libsre + 0x24B0, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); + position = position_v->ToLE(); +#else res = syncLFQueueGetPushPointer(queue, position, isBlocking, 0); +#endif } else { +#ifdef PRX_DEBUG + res = GetCurrentPPUThread().FastCall(libsre + 0x3050, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); + position = position_v->ToLE(); +#else res = syncLFQueueGetPushPointer2(queue, position, isBlocking, 0); +#endif } + //LOG_NOTICE(HLE, "... position = %d", position); + //syncLFQueueDump(queue); + if (!isBlocking || res != CELL_SYNC_ERROR_AGAIN) { if (res) @@ -1346,16 +1380,28 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, s32 depth = (u32)queue->m_depth; s32 size = (u32)queue->m_size; - memcpy(Memory + (((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position)), Memory + buffer_addr, size); + memcpy(Memory + (((u64)queue->m_buffer & ~1ull) + size * (position >= depth ? position - depth : position)), Memory + buffer_addr, size); + s32 res; if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { - return syncLFQueueCompletePushPointer(queue, position, nullptr); +#ifdef PRX_DEBUG_XXX + res = GetCurrentPPUThread().FastCall(libsre + 0x26C0, queue.GetAddr(), position, 0); +#else + res = syncLFQueueCompletePushPointer(queue, position, nullptr); +#endif } else { - return syncLFQueueCompletePushPointer2(queue, position, nullptr); +#ifdef PRX_DEBUG + res = GetCurrentPPUThread().FastCall(libsre + 0x355C, queue.GetAddr(), position, 0); +#else + res = syncLFQueueCompletePushPointer2(queue, position, nullptr); +#endif } + + //syncLFQueueDump(queue); + return res; } s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) @@ -1447,16 +1493,29 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u } s32 position; +#ifdef PRX_DEBUG + MemoryAllocator> position_v; +#endif while (true) { s32 res; if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { +#ifdef PRX_DEBUG + res = GetCurrentPPUThread().FastCall(libsre + 0x2A90, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0, 0); + position = position_v->ToLE(); +#else res = syncLFQueueGetPopPointer(queue, position, isBlocking, 0, 0); +#endif } else { +#ifdef PRX_DEBUG + res = GetCurrentPPUThread().FastCall(libsre + 0x39AC, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0, 0); + position = position_v->ToLE(); +#else res = syncLFQueueGetPopPointer2(queue, position, isBlocking, 0, 0); +#endif } if (!isBlocking || res != CELL_SYNC_ERROR_AGAIN) @@ -1478,15 +1537,23 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u s32 depth = (u32)queue->m_depth; s32 size = (u32)queue->m_size; - memcpy(Memory + buffer_addr, Memory + (((u64)queue->m_buffer & ~1ull) + size * (position > depth ? position - depth : position)), size); + memcpy(Memory + buffer_addr, Memory + (((u64)queue->m_buffer & ~1ull) + size * (position >= depth ? position - depth : position)), size); if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall(libsre + 0x2CA8, queue.GetAddr(), position, 0, 0); +#else return syncLFQueueCompletePopPointer(queue, position, nullptr, 0); +#endif } else { +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall(libsre + 0x3EB8, queue.GetAddr(), position, 0, 0); +#else return syncLFQueueCompletePopPointer2(queue, position, nullptr, 0); +#endif } } @@ -1539,7 +1606,7 @@ void syncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u3 s32 cellSyncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) { - cellSync->Todo("cellSyncLFQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", + cellSync->Warning("cellSyncLFQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); if (!queue) @@ -1738,4 +1805,14 @@ void cellSync_init() cellSync->AddFunc(0xe1bc7add, _cellSyncLFQueuePopBody); cellSync->AddFunc(0xe9bf2110, _cellSyncLFQueueGetPushPointer); cellSync->AddFunc(0xfe74e8e7, _cellSyncLFQueueCompletePopPointer); + +#ifdef PRX_DEBUG + wxGetApp().CallAfter([&]() + { + libsre = Memory.PRXMem.AllocAlign(sizeof(libsre_data), 4096); + memcpy(Memory + libsre, libsre_data, sizeof(libsre_data)); + }); +#endif } + +#undef PRX_DEBUG \ No newline at end of file From b7be8b19efb325307dbbe0ddaf84625fcc997c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sat, 16 Aug 2014 23:45:56 +0200 Subject: [PATCH 352/499] Updates in sys_rsx and CellGcmDisplayInfo Thanks a lot to @3141card for all the relevant information about RSX related lv2 syscalls. --- rpcs3/Emu/RSX/GCM.h | 24 ++++-- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 10 +-- rpcs3/Emu/RSX/GSManager.h | 8 -- rpcs3/Emu/RSX/RSXThread.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp | 113 +++++++++++++++++++++++++---- 5 files changed, 121 insertions(+), 36 deletions(-) diff --git a/rpcs3/Emu/RSX/GCM.h b/rpcs3/Emu/RSX/GCM.h index af6d412e96..ac37e04a83 100644 --- a/rpcs3/Emu/RSX/GCM.h +++ b/rpcs3/Emu/RSX/GCM.h @@ -238,17 +238,17 @@ struct CellGcmSurface u8 colorFormat; u8 colorTarget; u8 colorLocation[4]; - u32 colorOffset[4]; - u32 colorPitch[4]; + be_t colorOffset[4]; + be_t colorPitch[4]; u8 depthFormat; u8 depthLocation; u8 _padding[2]; - u32 depthOffset; - u32 depthPitch; - u16 width; - u16 height; - u16 x; - u16 y; + be_t depthOffset; + be_t depthPitch; + be_t width; + be_t height; + be_t x; + be_t y; }; struct CellGcmReportData @@ -268,6 +268,14 @@ struct CellGcmZcullInfo u32 status1; }; +struct CellGcmDisplayInfo +{ + be_t offset; + be_t pitch; + be_t width; + be_t height; +}; + struct CellGcmTileInfo { be_t tile; diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 24e7fb790c..d19aa005cc 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -14,7 +14,7 @@ #define CMD_LOG(...) #endif -gcmBuffer gcmBuffers[8]; +CellGcmDisplayInfo gcmBuffers[8]; GLuint g_flip_tex, g_depth_tex, g_pbo[6]; int last_width = 0, last_height = 0, last_depth_format = 0; @@ -1272,13 +1272,13 @@ void GLGSRender::Flip() if (m_read_buffer) { format = GL_BGRA; - gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(m_gcm_buffers_addr); - u32 addr = GetAddress(re(buffers[m_gcm_current_buffer].offset), CELL_GCM_LOCATION_LOCAL); + CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(m_gcm_buffers_addr); + u32 addr = GetAddress(buffers[m_gcm_current_buffer].offset, CELL_GCM_LOCATION_LOCAL); if (Memory.IsGoodAddr(addr)) { - width = re(buffers[m_gcm_current_buffer].width); - height = re(buffers[m_gcm_current_buffer].height); + width = buffers[m_gcm_current_buffer].width; + height = buffers[m_gcm_current_buffer].height; src_buffer = (u8*)Memory.VirtualToRealAddr(addr); } else diff --git a/rpcs3/Emu/RSX/GSManager.h b/rpcs3/Emu/RSX/GSManager.h index 08f424a9a9..11f7b3917f 100644 --- a/rpcs3/Emu/RSX/GSManager.h +++ b/rpcs3/Emu/RSX/GSManager.h @@ -33,14 +33,6 @@ struct GSInfo } }; -struct gcmBuffer -{ - u32 offset; - u32 pitch; - u32 width; - u32 height; -}; - class GSManager { GSInfo m_info; diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 295768b92a..81b37330e2 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -1320,7 +1320,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case 2: m_surface_pitch_a = ARGS(1); } - gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(m_gcm_buffers_addr); + CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(m_gcm_buffers_addr); m_width = re(buffers[m_gcm_current_buffer].width); m_height = re(buffers[m_gcm_current_buffer].height); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp index 5d92f4205c..2e12f9e4b7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp @@ -19,27 +19,57 @@ s32 sys_rsx_device_close() return CELL_OK; } -s32 sys_rsx_memory_allocate() +/* + * lv2 SysCall 668 (0x29C): sys_rsx_memory_allocate + * @param mem_handle (OUT): Context / ID, which is used by sys_rsx_memory_free to free allocated memory. + * @param mem_addr (OUT): Returns the local memory base address, usually 0xC0000000. + * @param size (IN): Local memory size. E.g. 0x0F900000 (249 MB). + * @param flags (IN): E.g. Immediate value passed in cellGcmSys is 8. + * @param a5 (IN): E.g. Immediate value passed in cellGcmSys is 0x00300000 (3 MB?). + * @param a6 (IN): E.g. Immediate value passed in cellGcmSys is 16. + * @param a7 (IN): E.g. Immediate value passed in cellGcmSys is 8. + */ +s32 sys_rsx_memory_allocate(mem32_t mem_handle, mem32_t mem_addr, u32 size, u64 flags, u64 a5, u64 a6, u64 a7) { - sys_rsx.Todo("sys_rsx_memory_allocate()"); + sys_rsx.Todo("sys_rsx_memory_allocate(mem_handle_addr=0x%x, local_mem_addr=0x%x, size=0x%x, flags=0x%x, a5=%d, a6=%d, a7=%d)", + mem_handle.GetAddr(), mem_addr.GetAddr(), size, flags, a5, a6, a7); return CELL_OK; } -s32 sys_rsx_memory_free() +/* + * lv2 SysCall 669 (0x29D): sys_rsx_memory_free + * @param mem_handle (OUT): Context / ID, for allocated local memory generated by sys_rsx_memory_allocate + */ +s32 sys_rsx_memory_free(u32 mem_handle) { - sys_rsx.Todo("sys_rsx_memory_free()"); + sys_rsx.Todo("sys_rsx_memory_free(mem_handle=%d)", mem_handle); return CELL_OK; } -s32 sys_rsx_context_allocate() +/* + * lv2 SysCall 670 (0x29E): sys_rsx_context_allocate + * @param context_id (OUT): RSX_context, E.g. 0x55555555 (in vsh.self) + * @param lpar_dma_control (OUT): Control register area. E.g. 0x60100000 (in vsh.self) + * @param lpar_driver_info (OUT): RSX data like frequencies, sizes, version... E.g. 0x60200000 (in vsh.self) + * @param lpar_reports (OUT): Report data area. E.g. 0x60300000 (in vsh.self) + * @param mem_ctx (IN): mem_ctx given by sys_rsx_memory_allocate + * @param system_mode (IN): + */ +s32 sys_rsx_context_allocate(mem32_t context_id, mem32_t lpar_dma_control, mem32_t lpar_driver_info, mem32_t lpar_reports, u64 mem_ctx, u64 system_mode) { - sys_rsx.Todo("sys_rsx_context_allocate()"); + sys_rsx.Todo("sys_rsx_context_allocate(context_id_addr=0x%x, lpar_dma_control_addr=0x%x, lpar_driver_info_addr=0x%x, lpar_reports_addr=0x%x, mem_ctx=0x%x, system_mode=0x%x)", + context_id.GetAddr(), lpar_dma_control.GetAddr(), lpar_driver_info.GetAddr(), lpar_reports.GetAddr(), mem_ctx, system_mode); + return CELL_OK; } -s32 sys_rsx_context_free() +/* + * lv2 SysCall 671 (0x29F): sys_rsx_context_free + * @param a1 (IN): RSX_context generated by sys_rsx_context_allocate to free the context. + */ +s32 sys_rsx_context_free(u32 context_id) { - sys_rsx.Todo("sys_rsx_context_free()"); + sys_rsx.Todo("sys_rsx_context_free(context_id=%d)", context_id); return CELL_OK; } @@ -55,21 +85,76 @@ s32 sys_rsx_context_iounmap() return CELL_OK; } -s32 sys_rsx_context_attribute(s32 context_id, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6) +/* + * lv2 SysCall 674 (0x2A2): sys_rsx_context_attribute + * @param context_id (IN): RSX context, e.g. 0x55555555 + * @param package_id (IN): + * @param a3 (IN): + * @param a4 (IN): + * @param a5 (IN): + * @param a6 (IN): + */ +s32 sys_rsx_context_attribute(s32 context_id, u32 package_id, u64 a3, u64 a4, u64 a5, u64 a6) { - sys_rsx.Todo("sys_rsx_context_attribute(context_id=%d, a2=%llu, a3=%llu, a4=%llu, a5=%llu, a6=%llu)", context_id, a2, a3, a4, a5, a6); + sys_rsx.Todo("sys_rsx_context_attribute(context_id=0x%x, package_id=0x%x, a3=%llu, a4=%llu, a5=%llu, a6=%llu)", + context_id, package_id, a3, a4, a5, a6); + + switch(package_id) + { + case 0x001: // ? + break; + + case 0x101: // ? + break; + + case 0x104: // Display buffer + break; + + case 0x10a: // ? + break; + + case 0x300: // Tiles + break; + + case 0x301: // Depth-buffer (Z-cull) + break; + + default: + + } return CELL_OK; } -s32 sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 a3) +/* + * lv2 SysCall 675 (0x2A3): sys_rsx_device_map + * @param a1 (OUT): For example: In vsh.self it is 0x60000000, global semaphore. For a game it is 0x40000000. + * @param a2 (OUT): Unused? + * @param dev_id (IN): An immediate value and always 8. + */ +s32 sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 dev_id) { - sys_rsx.Todo("sys_rsx_device_map(a1_addr=0x%x, a2_addr=0x%x, a3=%d)", a1.GetAddr(), a2.GetAddr(), a3); + sys_rsx.Todo("sys_rsx_device_map(a1_addr=0x%x, a2_addr=0x%x, a3=%d)", a1.GetAddr(), a2.GetAddr(), dev_id); + + if (dev_id > 15) { + // TODO: Throw RSX error + return CELL_EINVAL; + } + + if (dev_id == 0 || dev_id > 8) { + // TODO: lv1 related so we may ignore it. + // if (something) { return CELL_EPERM; } + } + return CELL_OK; } -s32 sys_rsx_device_unmap() +/* + * lv2 SysCall 676 (0x2A4): sys_rsx_device_unmap + * @param dev_id (IN): An immediate value and always 8. + */ +s32 sys_rsx_device_unmap(u32 dev_id) { - sys_rsx.Todo("sys_rsx_device_unmap()"); + sys_rsx.Todo("sys_rsx_device_unmap(a1=%d)", dev_id); return CELL_OK; } From 0489f9c342ba0b540021fd9725d3dd2ab4fabb07 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 17 Aug 2014 09:18:53 +0300 Subject: [PATCH 353/499] Fix sceNpClans, sceNpCommerce2, sceNpSns and sceNpTus functions not being registered --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 100 +++++++++++++++------------ 1 file changed, 54 insertions(+), 46 deletions(-) diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 26c4adbd1b..8c919c7cb3 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -13,20 +13,6 @@ extern void cellFont_init(); extern void cellFont_load(); extern void cellFont_unload(); extern Module *cellFont; -extern void sys_net_init(); -extern Module *sys_net; -extern void cellUserInfo_init(); -extern Module *cellUserInfo; -extern void cellSysutil_init(); -extern Module *cellSysutil; -extern void cellSysutilAp_init(); -extern Module *cellSysutilAp; -extern void cellPngDec_init(); -extern Module *cellPngDec; -extern void cellNetCtl_init(); -extern Module *cellNetCtl; -extern void cellJpgDec_init(); -extern Module *cellJpgDec; extern void cellFontFT_init(); extern void cellFontFT_load(); extern void cellFontFT_unload(); @@ -41,26 +27,36 @@ extern void cellGem_init(); extern Module *cellGem; extern void cellGifDec_init(); extern Module *cellGifDec; -extern void sys_io_init(); -extern Module *sys_io; +extern void cellJpgDec_init(); +extern Module *cellJpgDec; extern void cellL10n_init(); extern Module *cellL10n; +extern void cellNetCtl_init(); +extern Module *cellNetCtl; extern void cellPamf_init(); extern Module *cellPamf; +extern void cellPngDec_init(); +extern Module *cellPngDec; extern void cellResc_init(); extern void cellResc_load(); extern void cellResc_unload(); extern Module *cellResc; -extern void cellSail_init(); -extern Module *cellSail; extern void cellRtc_init(); extern Module *cellRtc; +extern void cellSail_init(); +extern Module *cellSail; extern void cellSpurs_init(); extern Module *cellSpurs; extern void cellSync_init(); extern Module *cellSync; extern void cellSysmodule_init(); extern Module *cellSysmodule; +extern void cellSysutil_init(); +extern Module *cellSysutil; +extern void cellSysutilAp_init(); +extern Module *cellSysutilAp; +extern void cellUserInfo_init(); +extern Module *cellUserInfo; extern void cellVdec_init(); extern Module *cellVdec; extern void cellVpost_init(); @@ -88,6 +84,10 @@ extern void sysPrxForUser_init(); extern Module *sysPrxForUser; extern void sys_fs_init(); extern Module *sys_fs; +extern void sys_io_init(); +extern Module *sys_io; +extern void sys_net_init(); +extern Module *sys_net; struct ModuleInfo { @@ -221,62 +221,70 @@ void ModuleManager::init() m_mod_init.emplace_back(0x0007, cellDmux_init); cellFont = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0019, cellFont_init, cellFont_load, cellFont_unload); - cellGem = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x005a, cellGem_init); - sys_net = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back((u16)0x0000, sys_net_init); - sceNpTrophy = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0xf035, sceNpTrophy_init, nullptr, sceNpTrophy_unload); - sceNp = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x0016, sceNp_init); - cellUserInfo = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x0032, cellUserInfo_init); - cellSysutil = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x0015, cellSysutil_init); - cellSysutilAp = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x0039, cellSysutilAp_init); - cellPngDec = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x0018, cellPngDec_init); - cellNetCtl = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x0014, cellNetCtl_init); - cellJpgDec = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x000f, cellJpgDec_init); cellFontFT = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x001a, cellFontFT_init, cellFontFT_load, cellFontFT_unload); - cellGifDec = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0xf010, cellGifDec_init); - cellGcmSys = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x0010, cellGcmSys_init, cellGcmSys_load, cellGcmSys_unload); cellGame = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x003e, cellGame_init); - sys_io = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x0017, sys_io_init); + cellGcmSys = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0010, cellGcmSys_init, cellGcmSys_load, cellGcmSys_unload); + cellGem = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x005a, cellGem_init); + cellJpgDec = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x000f, cellJpgDec_init); + cellGifDec = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0xf010, cellGifDec_init); cellL10n = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x001e, cellL10n_init); + cellNetCtl = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0014, cellNetCtl_init); cellPamf = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0012, cellPamf_init); - cellSail = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back("cellSail", cellSail_init); + cellPngDec = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0018, cellPngDec_init); cellResc = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x001f, cellResc_init, cellResc_load, cellResc_unload); cellRtc = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0009, cellRtc_init); + cellSail = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back("cellSail", cellSail_init); cellSpurs = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x000a, cellSpurs_init); cellSync = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back("cellSync", cellSync_init); + cellSysutil = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0015, cellSysutil_init); + cellSysutilAp = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0039, cellSysutilAp_init); cellSysmodule = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back("cellSysmodule", cellSysmodule_init); + cellUserInfo = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0032, cellUserInfo_init); cellVdec = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0005, cellVdec_init); cellVpost = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0008, cellVpost_init); libmixer = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back("libmixer", libmixer_init); + sceNp = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0016, sceNp_init); + sceNpClans = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x003a, sceNpClans_init, nullptr, sceNpClans_unload); + sceNpCommerce2 = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0044, sceNpCommerce2_init, nullptr, sceNpCommerce2_unload); + sceNpSns = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0059, sceNpSns_init, nullptr, sceNpSns_unload); + sceNpTrophy = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0xf035, sceNpTrophy_init, nullptr, sceNpTrophy_unload); + sceNpTus = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0045, sceNpTus_init, nullptr, sceNpTus_unload); sysPrxForUser = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back("sysPrxForUser", sysPrxForUser_init); sys_fs = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x000e, sys_fs_init); + sys_io = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0017, sys_io_init); + sys_net = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back((u16)0x0000, sys_net_init); initialized = true; } } From 9b1a2e50f21e6fb8635599acab6753ffdd7c7ed6 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 17 Aug 2014 10:53:09 +0300 Subject: [PATCH 354/499] Fixed some grammatical mistakes --- Utilities/AutoPause.cpp | 14 ++++++------- rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 4 ++-- rpcs3/Emu/SysCalls/SysCalls.cpp | 2 +- rpcs3/Gui/AutoPauseManager.cpp | 14 ++++++------- rpcs3/Gui/ConLogFrame.cpp | 2 +- rpcs3/Gui/MainFrame.cpp | 23 +++++++++++----------- rpcs3/Gui/SaveDataUtility.cpp | 7 +++---- rpcs3/Ini.h | 10 ++++++---- 8 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Utilities/AutoPause.cpp b/Utilities/AutoPause.cpp index 5182d91aad..fc2e26ad6d 100644 --- a/Utilities/AutoPause.cpp +++ b/Utilities/AutoPause.cpp @@ -16,7 +16,7 @@ AutoPause& AutoPause::getInstance(void) return *gAutoPause; } -//Still use binary format. Default Setting should be "disable all auto-pause". +//Still use binary format. Default Setting should be "disable all auto pause". AutoPause::AutoPause(void) { m_pause_function.reserve(16); @@ -36,7 +36,7 @@ AutoPause::~AutoPause(void) m_pause_syscall_enable = false; } -//Load Auto-Pause Configuration from file "pause.bin" +//Load Auto Pause Configuration from file "pause.bin" //This would be able to create in a GUI window. void AutoPause::Reload(void) { @@ -65,19 +65,19 @@ void AutoPause::Reload(void) //Less than 1024 - be regarded as a system call. //emplace_back may not cause reductant move/copy operation. m_pause_syscall.emplace_back(num); - LOG_WARNING(HLE, "Auto-Pause: Find System Call ID %x", num); + LOG_WARNING(HLE, "Auto Pause: Find System Call ID %x", num); } else { m_pause_function.emplace_back(num); - LOG_WARNING(HLE, "Auto-Pause: Find Function Call ID %x", num); + LOG_WARNING(HLE, "Auto Pause: Find Function Call ID %x", num); } } list.Close(); } else { - LOG_WARNING(HLE, "No Pause ID specified in pause.bin, Auto-Pause would not act."); + LOG_WARNING(HLE, "No pause.bin found, Auto Pause will not work."); } m_pause_syscall_enable = Ini.DBGAutoPauseSystemCall.GetValue(); m_pause_function_enable = Ini.DBGAutoPauseFunctionCall.GetValue(); @@ -99,7 +99,7 @@ void AutoPause::TryPause(u32 code) { if (code == m_pause_syscall[i]) { Emu.Pause(); - LOG_ERROR(HLE, "Auto-Pause Triggered: System call %x", code); //Used Error + LOG_ERROR(HLE, "Auto Pause Triggered: System call %x", code); //Used Error } } } @@ -117,7 +117,7 @@ void AutoPause::TryPause(u32 code) { if (code == m_pause_function[i]) { Emu.Pause(); - LOG_ERROR(HLE, "Auto-Pause Triggered: Function call %x", code); //Used Error + LOG_ERROR(HLE, "Auto Pause Triggered: Function call %x", code); //Used Error } } } diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index d71ee19a14..a4f5b9b295 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -33,8 +33,8 @@ struct sceNpTrophyInternalContext std::unique_ptr tropusr; -//TODO: remove the following code when Visual C++ no longer generates -//compiler errors for it. All of this should be auto-generated +// TODO: remove the following code when Visual C++ no longer generates +// compiler errors for it. All of this should be auto-generated #if defined(_MSC_VER) && _MSC_VER <= 1800 sceNpTrophyInternalContext() : trp_stream(), diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index f7ad00f29d..839c5cc3ec 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -920,7 +920,7 @@ void default_syscall() void SysCalls::DoSyscall(u32 code) { - //Auto-Pause using simple singleton. + //Auto Pause using simple singleton. Debug::AutoPause::getInstance().TryPause(code); if(code < 1024) diff --git a/rpcs3/Gui/AutoPauseManager.cpp b/rpcs3/Gui/AutoPauseManager.cpp index 19c96ee06e..98235314fa 100644 --- a/rpcs3/Gui/AutoPauseManager.cpp +++ b/rpcs3/Gui/AutoPauseManager.cpp @@ -11,7 +11,7 @@ enum //TODO::Get the enable configuration from ini. AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) - : wxDialog(parent, wxID_ANY, "Auto-Pause Manager") + : wxDialog(parent, wxID_ANY, "Auto Pause Manager") { SetMinSize(wxSize(400, 360)); @@ -19,8 +19,7 @@ AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent) m_entry_convert.clear(); m_entry_convert.str(""); - m_entry_convert << "To use Auto-Pause: need the IDs of Function call or System call. Need Restart game." - << " Disable/enable using setting Misc."; + m_entry_convert << "To use auto pause: enter the ID(s) of a function or a system call. Restart of the game is required to apply. You can enable/disable this in the settings."; wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(),wxDefaultPosition, wxDefaultSize, 0); s_description->Wrap(400); @@ -197,7 +196,7 @@ void AutoPauseManagerDialog::OnRemove(wxCommandEvent& event) void AutoPauseManagerDialog::OnSave(wxCommandEvent& event) { SaveEntries(); - LOG_SUCCESS(HLE,"Auto-Pause: File pause.bin was updated."); + LOG_SUCCESS(HLE,"Auto Pause: File pause.bin was updated."); //event.Skip(); } @@ -214,7 +213,7 @@ void AutoPauseManagerDialog::OnReload(wxCommandEvent& event) } AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry) - : wxDialog(parent, wxID_ANY, "Auto-Pause Setting") + : wxDialog(parent, wxID_ANY, "Auto Pause Setting") , m_presult(entry) { m_entry = *m_presult; @@ -225,8 +224,7 @@ AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry) m_entry_convert.clear(); m_entry_convert.str(""); - m_entry_convert << "Specify ID of System Call or Function Call below." - << " Please remember give the Hexidemical id."; + m_entry_convert << "Specify ID of System Call or Function Call below. You need to use a Hexadecimal ID."; wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(), wxDefaultPosition, wxDefaultSize, 0); s_description->Wrap(400); @@ -249,7 +247,7 @@ AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry) m_entry_convert << std::hex << std::setw(8) << std::setfill('0') << m_entry; m_id->SetValue(m_entry_convert.str()); - SetTitle("Auto-Pause Setting: "+m_entry_convert.str()); + SetTitle("Auto Pause Setting: "+m_entry_convert.str()); Bind(wxEVT_BUTTON, &AutoPauseSettingsDialog::OnOk, this, wxID_OK); Bind(wxEVT_TEXT, &AutoPauseSettingsDialog::OnUpdateValue, this, wxID_STATIC); diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index c1e2c6f370..0e2ee848e5 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -180,7 +180,7 @@ void LogFrame::OnRightClick(wxMouseEvent& event) { wxMenu* menu = new wxMenu(); - menu->Append(id_log_copy, "&Copy Ctrl+C"); + menu->Append(id_log_copy, "&Copy"); menu->AppendSeparator(); menu->Append(id_log_clear, "C&lear"); diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 6a46ee08bf..69249a2fd8 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -89,7 +89,7 @@ MainFrame::MainFrame() menu_conf->Append(id_config_emu, "Settings"); menu_conf->Append(id_config_pad, "PAD Settings"); menu_conf->AppendSeparator(); - menu_conf->Append(id_config_autopause_manager, "Auto-Pause Settings"); + menu_conf->Append(id_config_autopause_manager, "Auto Pause Settings"); menu_conf->AppendSeparator(); menu_conf->Append(id_config_vfs_manager, "Virtual File System Manager"); menu_conf->Append(id_config_vhdd_manager, "Virtual HDD Manager"); @@ -398,9 +398,10 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_hle_savetty = new wxCheckBox(p_hle, wxID_ANY, "Save TTY output to file"); wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes"); wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot"); - //Auto-Pause related - wxCheckBox* chbox_dbg_ap_systemcall = new wxCheckBox(p_hle, wxID_ANY, "Auto-Pause at System Call"); - wxCheckBox* chbox_dbg_ap_functioncall = new wxCheckBox(p_hle, wxID_ANY, "Auto-Pause at Function Call"); + + //Auto Pause + wxCheckBox* chbox_dbg_ap_systemcall = new wxCheckBox(p_hle, wxID_ANY, "Auto Pause at System Call"); + wxCheckBox* chbox_dbg_ap_functioncall = new wxCheckBox(p_hle, wxID_ANY, "Auto Pause at Function Call"); cbox_cpu_decoder->Append("PPU Interpreter & DisAsm"); cbox_cpu_decoder->Append("PPU Interpreter"); @@ -463,7 +464,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) cbox_sys_lang->Append("Polish"); cbox_sys_lang->Append("English (UK)"); - // Get values from .ini chbox_gs_log_prog ->SetValue(Ini.GSLogPrograms.GetValue()); chbox_gs_dump_depth ->SetValue(Ini.GSDumpDepthBuffer.GetValue()); @@ -476,7 +476,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_hle_savetty ->SetValue(Ini.HLESaveTTY.GetValue()); chbox_hle_exitonstop ->SetValue(Ini.HLEExitOnStop.GetValue()); chbox_hle_always_start ->SetValue(Ini.HLEAlwaysStart.GetValue()); - //Auto-Pause related + + //Auto Pause related chbox_dbg_ap_systemcall ->SetValue(Ini.DBGAutoPauseSystemCall.GetValue()); chbox_dbg_ap_functioncall->SetValue(Ini.DBGAutoPauseFunctionCall.GetValue()); @@ -492,14 +493,12 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) cbox_hle_loglvl ->SetSelection(Ini.HLELogLvl.GetValue()); cbox_sys_lang ->SetSelection(Ini.SysLanguage.GetValue()); - - // Enable / Disable parameters + // Enable/Disable parameters chbox_audio_dump->Enable(Emu.IsStopped()); chbox_audio_conv->Enable(Emu.IsStopped()); chbox_hle_logging->Enable(Emu.IsStopped()); chbox_hle_hook_stfunc->Enable(Emu.IsStopped()); - s_round_cpu_decoder->Add(cbox_cpu_decoder, wxSizerFlags().Border(wxALL, 5).Expand()); s_round_spu_decoder->Add(cbox_spu_decoder, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -547,7 +546,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_hle->Add(chbox_hle_savetty, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_exitonstop, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_always_start, wxSizerFlags().Border(wxALL, 5).Expand()); - //Auto-Pause + + //Auto Pause s_subpanel_hle->Add(chbox_dbg_ap_systemcall, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_dbg_ap_functioncall, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -594,7 +594,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.HLELogLvl.SetValue(cbox_hle_loglvl->GetSelection()); Ini.SysLanguage.SetValue(cbox_sys_lang->GetSelection()); Ini.HLEAlwaysStart.SetValue(chbox_hle_always_start->GetValue()); - //Auto-Pause + + //Auto Pause Ini.DBGAutoPauseFunctionCall.SetValue(chbox_dbg_ap_functioncall->GetValue()); Ini.DBGAutoPauseSystemCall.SetValue(chbox_dbg_ap_systemcall->GetValue()); diff --git a/rpcs3/Gui/SaveDataUtility.cpp b/rpcs3/Gui/SaveDataUtility.cpp index 82ed6a70d2..46ca644106 100644 --- a/rpcs3/Gui/SaveDataUtility.cpp +++ b/rpcs3/Gui/SaveDataUtility.cpp @@ -52,7 +52,7 @@ void SaveDataInfoDialog::UpdateData() m_list->SetItem(3, 1, "Stub it first"); m_list->InsertItem(4, 4); - m_list->SetItem(4, 0, "Copy-Able?"); + m_list->SetItem(4, 0, "Copyable"); m_list->SetItem(4, 1, "1 (Not allowed)"); m_list->InsertItem(5, 5); @@ -105,7 +105,7 @@ SaveDataManageDialog::SaveDataManageDialog(wxWindow* parent, unsigned int* sort_ m_sort_options->SetSelection(*m_sort_type); s_sort->Add(m_sort_options, 1, wxALL | wxEXPAND, 5); - wxButton* s_sort_action = new wxButton(this, wxID_ANY, wxT("&Apply!"), wxDefaultPosition, wxDefaultSize, 0); + wxButton* s_sort_action = new wxButton(this, wxID_ANY, wxT("&Apply"), wxDefaultPosition, wxDefaultSize, 0); s_sort_action->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnApplySort, this); s_sort->Add(s_sort_action, 0, wxALL, 5); @@ -173,8 +173,7 @@ SaveDataListDialog::SaveDataListDialog(wxWindow* parent, bool enable_manage) m_entry_convert.clear(); m_entry_convert.str(""); - m_entry_convert << "This is only a stub now. Don't expect real effect from this." - << "Cause related functions hasn't been implemented yet."; + m_entry_convert << "This is only a stub for now. This doesn't work yet due to related functions not being implemented."; wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(), wxDefaultPosition, wxDefaultSize, 0); s_description->Wrap(400); s_main->Add(s_description, 0, wxALL, 5); diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index f812f6296e..5374ac8fbc 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -152,7 +152,7 @@ public: IniEntry HLELogLvl; IniEntry HLEAlwaysStart; - //Auto-Pause + //Auto Pause IniEntry DBGAutoPauseSystemCall; IniEntry DBGAutoPauseFunctionCall; @@ -221,7 +221,7 @@ public: HLELogLvl.Init("HLE_HLELogLvl", path); HLEAlwaysStart.Init("HLE_HLEAlwaysStart", path); - // Auto-Pause + // Auto Pause DBGAutoPauseFunctionCall.Init("DBG_AutoPauseFunctionCall", path); DBGAutoPauseSystemCall.Init("DBG_AutoPauseSystemCall", path); @@ -285,7 +285,8 @@ public: HLEExitOnStop.Load(false); HLELogLvl.Load(3); HLEAlwaysStart.Load(true); - //Auto-Pause + + //Auto Pause DBGAutoPauseFunctionCall.Load(false); DBGAutoPauseSystemCall.Load(false); @@ -350,7 +351,8 @@ public: HLEExitOnStop.Save(); HLELogLvl.Save(); HLEAlwaysStart.Save(); - //Auto-Pause + + //Auto Pause DBGAutoPauseFunctionCall.Save(); DBGAutoPauseSystemCall.Save(); From bb1749d3dab8ce02aa6dd2cd649e1b05e3d853bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sun, 17 Aug 2014 11:22:36 +0200 Subject: [PATCH 355/499] cellGcmSys changes and minor fixes --- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 1 - rpcs3/Emu/RSX/RSXThread.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 82 +++++++++++++++-------- rpcs3/Emu/SysCalls/Modules/cellGcmSys.h | 4 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 8 +-- rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_rsx.h | 14 ++-- rpcs3/Gui/RSXDebugger.cpp | 16 ++--- 8 files changed, 78 insertions(+), 53 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index d19aa005cc..ac5af7e6c2 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -14,7 +14,6 @@ #define CMD_LOG(...) #endif -CellGcmDisplayInfo gcmBuffers[8]; GLuint g_flip_tex, g_depth_tex, g_pbo[6]; int last_width = 0, last_height = 0, last_depth_format = 0; diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 81b37330e2..ea267f5ad3 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -1321,8 +1321,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 } CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(m_gcm_buffers_addr); - m_width = re(buffers[m_gcm_current_buffer].width); - m_height = re(buffers[m_gcm_current_buffer].height); + m_width = buffers[m_gcm_current_buffer].width; + m_height = buffers[m_gcm_current_buffer].height; // Rescale native resolution to fit 1080p/720p/480p/576p window size nativeRescale((float)m_width, (float)m_height); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 17d34d1610..983e624dda 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -5,6 +5,7 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/RSX/GCM.h" +#include "Emu/SysCalls/lv2/sys_process.h" #include "sysPrxForUser.h" #include "cellGcmSys.h" @@ -37,6 +38,29 @@ gcmInfo gcm_info; u32 map_offset_addr = 0; u32 map_offset_pos = 0; +// Auxiliary functions + +/* + * Get usable local memory size for a specific game SDK version + * Example: For 0x00446000 (FW 4.46) we get a localSize of 0x0F900000 (249MB) + */ +u32 gcmGetLocalMemorySize(u32 sdk_version) +{ + if (sdk_version >= 0x00220000) { + return 0x0F900000; // 249MB + } + if (sdk_version >= 0x00200000) { + return 0x0F200000; // 242MB + } + if (sdk_version >= 0x00190000) { + return 0x0EA00000; // 234MB + } + if (sdk_version >= 0x00180000) { + return 0x0E800000; // 232MB + } + return 0x0E000000; // 224MB +} + //---------------------------------------------------------------------------- // Data Retrieval //---------------------------------------------------------------------------- @@ -273,16 +297,29 @@ u32 cellGcmGetTiledPitchSize(u32 size) return 0; } -int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) +void _cellGcmFunc1() { - cellGcmSys->Warning("cellGcmInit(context_addr=0x%x,cmdSize=0x%x,ioSize=0x%x,ioAddress=0x%x)", context_addr, cmdSize, ioSize, ioAddress); + cellGcmSys->Todo("_cellGcmFunc1()"); + return; +} + +void _cellGcmFunc15(mem_ptr_t context) +{ + cellGcmSys->Todo("_cellGcmFunc15(context_addr=0x%x)", context.GetAddr()); + return; +} + +// Called by cellGcmInit +s32 _cellGcmInitBody(mem_ptr_t context, u32 cmdSize, u32 ioSize, u32 ioAddress) +{ + cellGcmSys->Warning("_cellGcmInitBody(context_addr=0x%x, cmdSize=0x%x, ioSize=0x%x, ioAddress=0x%x)", context.GetAddr(), cmdSize, ioSize, ioAddress); if(!cellGcmSys->IsLoaded()) cellGcmSys->Load(); if(!local_size && !local_addr) { - local_size = 0xf900000; //TODO + local_size = 0xf900000; // TODO: Get sdk_version in _cellGcmFunc15 and pass it to gcmGetLocalMemorySize local_addr = Memory.RSXFBMem.GetStartAddr(); Memory.RSXFBMem.AllocAlign(local_size); } @@ -329,7 +366,7 @@ int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) gcm_info.control_addr = gcm_info.context_addr + 0x40; Memory.WriteData(gcm_info.context_addr, current_context); - Memory.Write32(context_addr, gcm_info.context_addr); + Memory.Write32(context.GetAddr(), gcm_info.context_addr); CellGcmControl& ctrl = (CellGcmControl&)Memory[gcm_info.control_addr]; ctrl.put = 0; @@ -337,8 +374,8 @@ int cellGcmInit(u32 context_addr, u32 cmdSize, u32 ioSize, u32 ioAddress) ctrl.ref = -1; auto& render = Emu.GetGSManager().GetRender(); - render.m_ctxt_addr = context_addr; - render.m_gcm_buffers_addr = Memory.Alloc(sizeof(gcmBuffer) * 8, sizeof(gcmBuffer)); + render.m_ctxt_addr = context.GetAddr(); + render.m_gcm_buffers_addr = Memory.Alloc(sizeof(CellGcmDisplayInfo) * 8, sizeof(CellGcmDisplayInfo)); render.m_zculls_addr = Memory.Alloc(sizeof(CellGcmZcullInfo) * 8, sizeof(CellGcmZcullInfo)); render.m_tiles_addr = Memory.Alloc(sizeof(CellGcmTileInfo) * 15, sizeof(CellGcmTileInfo)); render.m_gcm_buffers_count = 0; @@ -380,21 +417,19 @@ int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height { cellGcmSys->Log("cellGcmSetDisplayBuffer(id=0x%x,offset=0x%x,pitch=%d,width=%d,height=%d)", id, offset, width ? pitch / width : pitch, width, height); - if (id > 7) - { + if (id > 7) { cellGcmSys->Error("cellGcmSetDisplayBuffer : CELL_EINVAL"); return CELL_EINVAL; } - gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(Emu.GetGSManager().GetRender().m_gcm_buffers_addr); + CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(Emu.GetGSManager().GetRender().m_gcm_buffers_addr); - buffers[id].offset = re(offset); - buffers[id].pitch = re(pitch); - buffers[id].width = re(width); - buffers[id].height = re(height); + buffers[id].offset = offset; + buffers[id].pitch = pitch; + buffers[id].width = width; + buffers[id].height = height; - if(id + 1 > Emu.GetGSManager().GetRender().m_gcm_buffers_count) - { + if (id + 1 > Emu.GetGSManager().GetRender().m_gcm_buffers_count) { Emu.GetGSManager().GetRender().m_gcm_buffers_count = id + 1; } @@ -1071,18 +1106,6 @@ int cellGcmSetFlipCommand(u32 ctx, u32 id) return cellGcmSetPrepareFlip(ctx, id); } -s64 cellGcmFunc15(u32 unk_addr) -{ - cellGcmSys->Todo("cellGcmFunc15(unk_addr=0x%x)", unk_addr); - - if (0/*TODO: If what?*/) { - _sys_memset(unk_addr, 0, 0x84); - } - - // TODO - return 0; -} - int cellGcmSetFlipCommandWithWaitLabel(u32 ctx, u32 id, u32 label_index, u32 label_value) { int res = cellGcmSetPrepareFlip(ctx, id); @@ -1201,7 +1224,9 @@ void cellGcmSys_init() cellGcmSys->AddFunc(0x23ae55a3, cellGcmGetLastSecondVTime); cellGcmSys->AddFunc(0x055bd74d, cellGcmGetTiledPitchSize); cellGcmSys->AddFunc(0x723bbc7e, cellGcmGetVBlankCount); - cellGcmSys->AddFunc(0x15bae46b, cellGcmInit); + cellGcmSys->AddFunc(0x5f909b17, _cellGcmFunc1); + cellGcmSys->AddFunc(0x3a33c1fd, _cellGcmFunc15); + cellGcmSys->AddFunc(0x15bae46b, _cellGcmInitBody); cellGcmSys->AddFunc(0xfce9e764, cellGcmInitSystemMode); cellGcmSys->AddFunc(0xb2e761d4, cellGcmResetFlipStatus); cellGcmSys->AddFunc(0x51c9d62b, cellGcmSetDebugOutputLevel); @@ -1263,7 +1288,6 @@ void cellGcmSys_init() // Other cellGcmSys->AddFunc(0x21397818, cellGcmSetFlipCommand); - cellGcmSys->AddFunc(0x3a33c1fd, cellGcmFunc15); cellGcmSys->AddFunc(0xd8f88e1a, cellGcmSetFlipCommandWithWaitLabel); cellGcmSys->AddFunc(0xd0b1d189, cellGcmSetTile); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.h b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.h index 610b177edc..0ae68c3451 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.h +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.h @@ -7,7 +7,7 @@ enum CELL_GCM_ERROR_INVALID_ENUM = 0x80210002, CELL_GCM_ERROR_INVALID_VALUE = 0x80210003, CELL_GCM_ERROR_INVALID_ALIGNMENT = 0x80210004, - CELL_GCM_ERROR_ADDRESS_OVERWRAP = 0x80210005 + CELL_GCM_ERROR_ADDRESS_OVERWRAP = 0x80210005, }; struct gcm_offset @@ -18,6 +18,8 @@ struct gcm_offset // Auxiliary functions void InitOffsetTable(); +u32 gcmGetLocalMemorySize(); + // SysCalls s32 cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id); diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index bf073c0439..9b7a43fa84 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -1026,10 +1026,10 @@ int cellRescGcmSurface2RescSrc(mem_ptr_t gcmSurface, mem_ptr_tformat = textureFormat; - rescSrc->pitch = re(gcmSurface->colorPitch[0]); - rescSrc->width = re(gcmSurface->width) * xW; - rescSrc->height = re(gcmSurface->height) * xH; - rescSrc->offset = re(gcmSurface->colorOffset[0]); + rescSrc->pitch = gcmSurface->colorPitch[0]; + rescSrc->width = gcmSurface->width * xW; + rescSrc->height = gcmSurface->height * xH; + rescSrc->offset = gcmSurface->colorOffset[0]; return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp index 2e12f9e4b7..b1350270c9 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp @@ -120,7 +120,7 @@ s32 sys_rsx_context_attribute(s32 context_id, u32 package_id, u64 a3, u64 a4, u6 break; default: - + break; } return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rsx.h b/rpcs3/Emu/SysCalls/lv2/sys_rsx.h index f51043315a..995aa29952 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rsx.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_rsx.h @@ -3,13 +3,13 @@ // SysCalls s32 sys_rsx_device_open(); s32 sys_rsx_device_close(); -s32 sys_rsx_memory_allocate(); -s32 sys_rsx_memory_free(); -s32 sys_rsx_context_allocate(); -s32 sys_rsx_context_free(); +s32 sys_rsx_memory_allocate(mem32_t mem_handle, mem32_t mem_addr, u32 size, u64 flags, u64 a5, u64 a6, u64 a7); +s32 sys_rsx_memory_free(u32 mem_handle); +s32 sys_rsx_context_allocate(mem32_t context_id, mem32_t lpar_dma_control, mem32_t lpar_driver_info, mem32_t lpar_reports, u64 mem_ctx, u64 system_mode); +s32 sys_rsx_context_free(u32 context_id); s32 sys_rsx_context_iomap(); s32 sys_rsx_context_iounmap(); -s32 sys_rsx_context_attribute(s32 context_id, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6); -s32 sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 a3); -s32 sys_rsx_device_unmap(); +s32 sys_rsx_context_attribute(s32 context_id, u32 package_id, u64 a3, u64 a4, u64 a5, u64 a6); +s32 sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 dev_id); +s32 sys_rsx_device_unmap(u32 dev_id); s32 sys_rsx_attribute(); diff --git a/rpcs3/Gui/RSXDebugger.cpp b/rpcs3/Gui/RSXDebugger.cpp index d3aeb017ae..0a437560be 100644 --- a/rpcs3/Gui/RSXDebugger.cpp +++ b/rpcs3/Gui/RSXDebugger.cpp @@ -292,7 +292,7 @@ void RSXDebugger::OnClickBuffer(wxMouseEvent& event) { if (!RSXReady()) return; const GSRender& render = Emu.GetGSManager().GetRender(); - const mem_ptr_t buffers = render.m_gcm_buffers_addr; + const mem_ptr_t buffers = render.m_gcm_buffers_addr; if(!buffers.IsGood()) return; @@ -300,9 +300,9 @@ void RSXDebugger::OnClickBuffer(wxMouseEvent& event) // TODO: Is there any better way to choose the color buffers #define SHOW_BUFFER(id) \ { \ - u32 addr = render.m_local_mem_addr + re(buffers[id].offset); \ - if(Memory.IsGoodAddr(addr) && buffers[id].width && buffers[id].height) \ - MemoryViewerPanel::ShowImage(this, addr, 3, re(buffers[id].width), re(buffers[id].height), true); \ + u32 addr = render.m_local_mem_addr + buffers[id].offset; \ + if (Memory.IsGoodAddr(addr) && buffers[id].width && buffers[id].height) \ + MemoryViewerPanel::ShowImage(this, addr, 3, buffers[id].width, buffers[id].height, true); \ return; \ } \ @@ -409,16 +409,16 @@ void RSXDebugger::GetBuffers() if(!Memory.IsGoodAddr(render.m_gcm_buffers_addr)) continue; - gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(render.m_gcm_buffers_addr); - u32 RSXbuffer_addr = render.m_local_mem_addr + re(buffers[bufferId].offset); + CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(render.m_gcm_buffers_addr); + u32 RSXbuffer_addr = render.m_local_mem_addr + buffers[bufferId].offset; if(!Memory.IsGoodAddr(RSXbuffer_addr)) continue; unsigned char* RSXbuffer = (unsigned char*)Memory.VirtualToRealAddr(RSXbuffer_addr); - u32 width = re(buffers[bufferId].width); - u32 height = re(buffers[bufferId].height); + u32 width = buffers[bufferId].width; + u32 height = buffers[bufferId].height; unsigned char* buffer = (unsigned char*)malloc(width * height * 3); // ABGR to RGB and flip vertically From e1ac43e1b8097beef01d54f05f989829b081429e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 17 Aug 2014 18:46:21 +0400 Subject: [PATCH 356/499] sys_spu_thread_group_join fix --- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 7298643bc2..0baa1449d1 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -457,6 +457,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) } } + group_info->m_state = SPU_THREAD_GROUP_STATUS_INITIALIZED; group_info->lock = 0; // release lock TODO: this LOCK may be replaced. return CELL_OK; } From db676256d7e9e4a1d30d19fe72cfe80883046fb9 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 17 Aug 2014 18:59:28 +0400 Subject: [PATCH 357/499] cellPadSetPortSetting fix --- rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp index de2aecd3b7..14a80c0660 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp @@ -383,8 +383,6 @@ int cellPadSetPortSetting(u32 port_no, u32 port_setting) { sys_io->Log("cellPadSetPortSetting(port_no=%d, port_setting=0x%x)", port_no, port_setting); if(!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED; - if ((port_setting < CELL_PAD_SETTING_PRESS_ON) || port_setting >(CELL_PAD_SETTING_PRESS_ON | CELL_PAD_SETTING_SENSOR_ON) && port_setting != 0) - return CELL_PAD_ERROR_INVALID_PARAMETER; const PadInfo& rinfo = Emu.GetPadManager().GetInfo(); if (port_no >= rinfo.max_connect) return CELL_PAD_ERROR_INVALID_PARAMETER; if (port_no >= rinfo.now_connect) return CELL_PAD_ERROR_NO_DEVICE; From cf5dbdbdb51b27169462064673c851d39763f219 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 17 Aug 2014 19:08:26 +0400 Subject: [PATCH 358/499] syncLFQueueGetPopPointer + bugfix --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 316 +++++++++++++++++++++--- rpcs3/Emu/SysCalls/Modules/cellSync.h | 15 ++ 2 files changed, 294 insertions(+), 37 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 42e7e931a3..2fb0577d23 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1015,7 +1015,7 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 return CELL_SYNC_ERROR_PERM; } - u32 var0 = 0; + u32 var1 = 0; s32 depth = (u32)queue->m_depth; while (true) { @@ -1030,7 +1030,7 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 CellSyncLFQueue new_queue; new_queue.m_push1() = old_data; - if (var0) + if (var1) { new_queue.m_h7 = 0; } @@ -1041,7 +1041,7 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 s32 var2 = (s32)(s16)new_queue.m_h8; s32 res; - if (isBlocking && ((s32)(u16)new_queue.m_h5 != var2 || new_queue.m_h7.ToBE() != 0)) + if (useEventQueue && ((s32)(u16)new_queue.m_h5 != var2 || new_queue.m_h7.ToBE() != 0)) { res = CELL_SYNC_ERROR_BUSY; } @@ -1068,7 +1068,7 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 } else { - if (!useEventQueue) + if (!isBlocking) { res = CELL_SYNC_ERROR_AGAIN; if (!new_queue.m_h7.ToBE() || res) @@ -1077,7 +1077,7 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 } break; } - else if (!isBlocking) + else if (!useEventQueue) { continue; } @@ -1106,9 +1106,8 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 u32 eq = (u32)queue->m_v3; // 0x7c sys_event_data event; assert(0); - // run sys_event_queue_receive (seems event data is not used) - // assert if error returned (but continue anyway?) - var0 = 1; + // TODO: sys_event_queue_receive (event data is not used), assert if error returned + var1 = 1; } } @@ -1318,7 +1317,7 @@ s32 _cellSyncLFQueueCompletePushPointer2(mem_ptr_t queue, s32 p s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, u32 isBlocking) { // cellSyncLFQueuePush has 1 in isBlocking param, cellSyncLFQueueTryPush has 0 - cellSync->Todo("_cellSyncLFQueuePushBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); + cellSync->Warning("_cellSyncLFQueuePushBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); if (!queue || !buffer_addr) { @@ -1404,27 +1403,121 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, return res; } -s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) +s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32, u32 useEventQueue) { - // TODO - //pointer = 0; - assert(0); - return CELL_OK; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_SPU2PPU)) + { + return CELL_SYNC_ERROR_PERM; + } + + u32 var1 = 0; + s32 depth = (u32)queue->m_depth; + while (true) + { + while (true) + { + if (Emu.IsStopped()) + { + return -1; + } + + const u64 old_data = InterlockedCompareExchange(&queue->m_pop1(), 0, 0); + CellSyncLFQueue new_queue; + new_queue.m_pop1() = old_data; + + if (var1) + { + new_queue.m_h3 = 0; + } + if (isBlocking && useEventQueue && *(u32*)queue->m_bs == -1) + { + return CELL_SYNC_ERROR_STAT; + } + + s32 var2 = (s32)(s16)new_queue.m_h4; + s32 res; + if (useEventQueue && ((s32)(u16)new_queue.m_h1 != var2 || new_queue.m_h3.ToBE() != 0)) + { + res = CELL_SYNC_ERROR_BUSY; + } + else + { + var2 = (s32)(u16)queue->m_h5 - var2; + if (var2 < 0) + { + var2 += depth * 2; + } + + if (var2 > 0) + { + pointer = (s16)new_queue.m_h4; + if (pointer + 1 >= depth * 2) + { + new_queue.m_h4 = 0; + } + else + { + new_queue.m_h4++; + } + res = CELL_OK; + } + else + { + if (!isBlocking) + { + res = CELL_SYNC_ERROR_AGAIN; + if (!new_queue.m_h3.ToBE() || res) + { + return res; + } + break; + } + else if (!useEventQueue) + { + continue; + } + else + { + res = CELL_OK; + new_queue.m_h3 = 3; + if (isBlocking != 3) + { + break; + } + } + } + } + + if (InterlockedCompareExchange(&queue->m_pop1(), new_queue.m_pop1(), old_data) == old_data) + { + if (!new_queue.m_h3.ToBE() || res) + { + return res; + } + break; + } + } + + u32 eq = (u32)queue->m_v3; // 0x7c + sys_event_data event; + assert(0); + // TODO: sys_event_queue_receive (event data is not used), assert if error returned + var1 = 1; + } } -s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 arg4, u32 useEventQueue) { - // arguments copied from _cellSyncLFQueueGetPushPointer (arg4, arg5 not used) - cellSync->Todo("_cellSyncLFQueueGetPopPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", - queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); + cellSync->Todo("_cellSyncLFQueueGetPopPointer(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, useEventQueue=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, useEventQueue); s32 pointer_value; - s32 result = syncLFQueueGetPopPointer(queue, pointer_value, isBlocking, arg4, arg5); + s32 result = syncLFQueueGetPopPointer(queue, pointer_value, isBlocking, arg4, useEventQueue); pointer = pointer_value; return result; } -s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 arg4, u32 arg5) +s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) { // TODO //pointer = 0; @@ -1432,24 +1525,165 @@ s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u3 return CELL_OK; } -s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 arg4, u32 arg5) +s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 useEventQueue) { - // arguments copied from _cellSyncLFQueueGetPushPointer (arg5 not used) - cellSync->Todo("_cellSyncLFQueueGetPopPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, arg4=%d, arg5=%d)", - queue.GetAddr(), pointer.GetAddr(), isBlocking, arg4, arg5); + // arguments copied from _cellSyncLFQueueGetPopPointer + cellSync->Todo("_cellSyncLFQueueGetPopPointer2(queue_addr=0x%x, pointer_addr=0x%x, isBlocking=%d, useEventQueue=%d)", + queue.GetAddr(), pointer.GetAddr(), isBlocking, useEventQueue); s32 pointer_value; - s32 result = syncLFQueueGetPopPointer2(queue, pointer_value, isBlocking, arg4, arg5); + s32 result = syncLFQueueGetPopPointer2(queue, pointer_value, isBlocking, useEventQueue); pointer = pointer_value; return result; } s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal, u32 noQueueFull) { - // TODO - //if (fpSendSignal) fpSendSignal(0, 0); - assert(0); - return CELL_OK; + assert(0); // TODO + + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_PPU2SPU)) + { + return CELL_SYNC_ERROR_PERM; + } + + s32 depth = (u32)queue->m_depth; + + while (true) + { + const u32 old_data = InterlockedCompareExchange(&queue->m_push2(), 0, 0); + CellSyncLFQueue new_queue; + new_queue.m_push2() = old_data; + + const u32 old_data2 = queue->m_push3(); + + s32 var1 = pointer - (u16)queue->m_h5; + if (var1 < 0) + { + var1 += depth * 2; + } + + s32 var2 = (s32)(s16)queue->m_h4 - (s32)(u16)queue->m_h1; + if (var2 < 0) + { + var2 += depth * 2; + } + + s32 var9_ = 15 - var1; + // calculate (1 slw (15 - var1)) + if (var9_ & 0x30) + { + var9_ = 0; + } + else + { + var9_ = 1 << var9_; + } + s32 var9 = ~(var9_ | (u16)queue->m_h6); + // count leading zeros in u16 + { + u16 v = var9; + for (var9 = 0; var9 < 16; var9++) + { + if (v & (1 << (15 - var9))) + { + break; + } + } + } + + s32 var5 = (s32)(u16)queue->m_h6 | var9_; + if (var9 & 0x30) + { + var5 = 0; + } + else + { + var5 <<= var9; + } + + s32 var3 = (u16)queue->m_h5 + var9; + if (var3 >= depth * 2) + { + var3 -= depth * 2; + } + + const u16 pack = new_queue.m_hs[0]; // three packed 5-bit fields + + s32 var4 = ((pack >> 10) & 0x1f) - ((pack >> 5) & 0x1f); + if (var4 < 0) + { + var4 += 0x1e; + } + + u32 var6; + if (var2 + var4 <= 15 && ((pack >> 10) & 0x1f) != (pack & 0x1f)) + { + s32 var8 = (pack & 0x1f) - ((pack >> 10) & 0x1f); + if (var8 < 0) + { + var8 += 0x1e; + } + + if (var9 > 1 && (u32)var8 > 1) + { + assert(16 - var2 <= 1); + } + + s32 var11 = (pack >> 10) & 0x1f; + if (var11 >= 15) + { + var11 -= 15; + } + + u16 var12 = (pack >> 10) & 0x1f; + if (var12 == 0x1d) + { + var12 = 0; + } + else + { + var12 = (var12 + 1) << 10; + } + + new_queue.m_hs[0] = (pack & 0x83ff) | var12; + var6 = (u16)queue->m_hs[1 + 2 * var11]; + } + else + { + var6 = -1; + } + + s32 var7 = (var3 << 16) | (var5 & 0xffff); + + if (InterlockedCompareExchange(&queue->m_push2(), new_queue.m_push2(), old_data) == old_data) + { + // break; + assert(var2 + var4 < 16); + if (var6 != -1) + { + if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) + { + assert(fpSendSignal); + return fpSendSignal((u64)queue->m_eaSignal, var6); + } + } + else + { + const u16 pack2 = queue->m_hs[0]; + if ((pack2 & 0x1f) == ((pack >> 10) & 0x1f)) + { + if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) + { + return CELL_OK; + } + } + else + { + assert(queue->m_push3() == old_data2); + } + } + } + } } s32 _cellSyncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal, u32 noQueueFull) @@ -1481,7 +1715,7 @@ s32 _cellSyncLFQueueCompletePopPointer2(mem_ptr_t queue, s32 po s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u32 isBlocking) { // cellSyncLFQueuePop has 1 in isBlocking param, cellSyncLFQueueTryPop has 0 - cellSync->Todo("_cellSyncLFQueuePopBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); + cellSync->Warning("_cellSyncLFQueuePopBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); if (!queue || !buffer_addr) { @@ -1501,7 +1735,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u s32 res; if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { -#ifdef PRX_DEBUG +#ifdef PRX_DEBUG_XXX res = GetCurrentPPUThread().FastCall(libsre + 0x2A90, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0, 0); position = position_v->ToLE(); #else @@ -1511,10 +1745,10 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u else { #ifdef PRX_DEBUG - res = GetCurrentPPUThread().FastCall(libsre + 0x39AC, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x39AC, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); position = position_v->ToLE(); #else - res = syncLFQueueGetPopPointer2(queue, position, isBlocking, 0, 0); + res = syncLFQueueGetPopPointer2(queue, position, isBlocking, 0); #endif } @@ -1539,22 +1773,25 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u s32 size = (u32)queue->m_size; memcpy(Memory + buffer_addr, Memory + (((u64)queue->m_buffer & ~1ull) + size * (position >= depth ? position - depth : position)), size); + s32 res; if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { #ifdef PRX_DEBUG - return GetCurrentPPUThread().FastCall(libsre + 0x2CA8, queue.GetAddr(), position, 0, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x2CA8, queue.GetAddr(), position, 0, 0); #else - return syncLFQueueCompletePopPointer(queue, position, nullptr, 0); + res = syncLFQueueCompletePopPointer(queue, position, nullptr, 0); #endif } else { #ifdef PRX_DEBUG - return GetCurrentPPUThread().FastCall(libsre + 0x3EB8, queue.GetAddr(), position, 0, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x3EB8, queue.GetAddr(), position, 0, 0); #else - return syncLFQueueCompletePopPointer2(queue, position, nullptr, 0); + res = syncLFQueueCompletePopPointer2(queue, position, nullptr, 0); #endif } + + return res; } void syncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) @@ -1609,6 +1846,10 @@ s32 cellSyncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, cellSync->Warning("cellSyncLFQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); +#ifdef PRX_DEBUG_XXX + return GetCurrentPPUThread().FastCall(libsre + 0x205C, queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); +#else + if (!queue) { return CELL_SYNC_ERROR_NULL_POINTER; @@ -1707,6 +1948,7 @@ s32 cellSyncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, // prx: sync InterlockedCompareExchange(&queue->m_data(), 0, 0); return CELL_OK; +#endif } s32 cellSyncLFQueueGetDirection(mem_ptr_t queue, mem32_t direction) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 9ddea45f02..505e94d5ec 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -136,6 +136,21 @@ struct CellSyncLFQueue { return *reinterpret_cast((u8*)this + 0x8); } + + volatile u64& m_pop1() + { + return *reinterpret_cast((u8*)this + 0x0); + } + + volatile u32& m_pop2() + { + return *reinterpret_cast((u8*)this + 0x50); + } + + volatile u32& m_pop3() + { + return *reinterpret_cast((u8*)this + 0x0); + } }; static_assert(sizeof(CellSyncLFQueue) == 128, "CellSyncLFQueue: wrong size"); \ No newline at end of file From 64935ccee65b164fdcc296dfd696565cfc562033 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 18 Aug 2014 01:35:10 +0400 Subject: [PATCH 359/499] syncLFQueueCompletePopPointer + bugfix --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 149 +++++++++++------------- 1 file changed, 68 insertions(+), 81 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 2fb0577d23..317f829b93 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1066,30 +1066,27 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 } res = CELL_OK; } + else if (!isBlocking) + { + res = CELL_SYNC_ERROR_AGAIN; + if (!new_queue.m_h7.ToBE() || res) + { + return res; + } + break; + } + else if (!useEventQueue) + { + continue; + } else { - if (!isBlocking) + res = CELL_OK; + new_queue.m_h7 = 3; + if (isBlocking != 3) { - res = CELL_SYNC_ERROR_AGAIN; - if (!new_queue.m_h7.ToBE() || res) - { - return res; - } break; } - else if (!useEventQueue) - { - continue; - } - else - { - res = CELL_OK; - new_queue.m_h7 = 3; - if (isBlocking != 3) - { - break; - } - } } } @@ -1158,8 +1155,9 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer new_queue.m_push2() = old_data; const u32 old_data2 = queue->m_push3(); + new_queue.m_push3() = old_data2; - s32 var1 = pointer - (u16)queue->m_h5; + s32 var1 = pointer - (u16)new_queue.m_h5; if (var1 < 0) { var1 += depth * 2; @@ -1181,7 +1179,7 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer { var9_ = 1 << var9_; } - s32 var9 = ~(var9_ | (u16)queue->m_h6); + s32 var9 = ~(var9_ | (u16)new_queue.m_h6); // count leading zeros in u16 { u16 v = var9; @@ -1194,7 +1192,7 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer } } - s32 var5 = (s32)(u16)queue->m_h6 | var9_; + s32 var5 = (s32)(u16)new_queue.m_h6 | var9_; if (var9 & 0x30) { var5 = 0; @@ -1204,13 +1202,13 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer var5 <<= var9; } - s32 var3 = (u16)queue->m_h5 + var9; + s32 var3 = (u16)new_queue.m_h5 + var9; if (var3 >= depth * 2) { var3 -= depth * 2; } - const u16 pack = new_queue.m_hs[0]; // three packed 5-bit fields + u16 pack = new_queue.m_hs[0]; // three packed 5-bit fields s32 var4 = ((pack >> 10) & 0x1f) - ((pack >> 5) & 0x1f); if (var4 < 0) @@ -1260,11 +1258,12 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer if (InterlockedCompareExchange(&queue->m_push2(), new_queue.m_push2(), old_data) == old_data) { - // break; assert(var2 + var4 < 16); if (var6 != -1) { - if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) + bool exch = InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2; + assert(exch); + if (exch) { assert(fpSendSignal); return fpSendSignal((u64)queue->m_eaSignal, var6); @@ -1272,18 +1271,14 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer } else { - const u16 pack2 = queue->m_hs[0]; - if ((pack2 & 0x1f) == ((pack >> 10) & 0x1f)) + pack = queue->m_hs[0]; + if ((pack & 0x1f) == ((pack >> 10) & 0x1f)) { if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) { return CELL_OK; } } - else - { - assert(queue->m_push3() == old_data2); - } } } } @@ -1461,30 +1456,27 @@ s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 } res = CELL_OK; } + else if (!isBlocking) + { + res = CELL_SYNC_ERROR_AGAIN; + if (!new_queue.m_h3.ToBE() || res) + { + return res; + } + break; + } + else if (!useEventQueue) + { + continue; + } else { - if (!isBlocking) + res = CELL_OK; + new_queue.m_h3 = 3; + if (isBlocking != 3) { - res = CELL_SYNC_ERROR_AGAIN; - if (!new_queue.m_h3.ToBE() || res) - { - return res; - } break; } - else if (!useEventQueue) - { - continue; - } - else - { - res = CELL_OK; - new_queue.m_h3 = 3; - if (isBlocking != 3) - { - break; - } - } } } @@ -1539,9 +1531,7 @@ s32 _cellSyncLFQueueGetPopPointer2(mem_ptr_t queue, mem32_t poi s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal, u32 noQueueFull) { - assert(0); // TODO - - if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_PPU2SPU)) + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_SPU2PPU)) { return CELL_SYNC_ERROR_PERM; } @@ -1550,19 +1540,20 @@ s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, while (true) { - const u32 old_data = InterlockedCompareExchange(&queue->m_push2(), 0, 0); + const u32 old_data = InterlockedCompareExchange(&queue->m_pop2(), 0, 0); CellSyncLFQueue new_queue; - new_queue.m_push2() = old_data; + new_queue.m_pop2() = old_data; - const u32 old_data2 = queue->m_push3(); + const u32 old_data2 = queue->m_pop3(); + new_queue.m_pop3() = old_data2; - s32 var1 = pointer - (u16)queue->m_h5; + s32 var1 = pointer - (u16)new_queue.m_h1; if (var1 < 0) { var1 += depth * 2; } - s32 var2 = (s32)(s16)queue->m_h4 - (s32)(u16)queue->m_h1; + s32 var2 = (s32)(s16)queue->m_h8 - (s32)(u16)queue->m_h5; if (var2 < 0) { var2 += depth * 2; @@ -1578,7 +1569,7 @@ s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, { var9_ = 1 << var9_; } - s32 var9 = ~(var9_ | (u16)queue->m_h6); + s32 var9 = ~(var9_ | (u16)new_queue.m_h2); // count leading zeros in u16 { u16 v = var9; @@ -1591,7 +1582,7 @@ s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, } } - s32 var5 = (s32)(u16)queue->m_h6 | var9_; + s32 var5 = (s32)(u16)new_queue.m_h2 | var9_; if (var9 & 0x30) { var5 = 0; @@ -1601,13 +1592,13 @@ s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, var5 <<= var9; } - s32 var3 = (u16)queue->m_h5 + var9; + s32 var3 = (u16)new_queue.m_h1 + var9; if (var3 >= depth * 2) { var3 -= depth * 2; } - const u16 pack = new_queue.m_hs[0]; // three packed 5-bit fields + u16 pack = new_queue.m_hs[16]; // three packed 5-bit fields s32 var4 = ((pack >> 10) & 0x1f) - ((pack >> 5) & 0x1f); if (var4 < 0) @@ -1616,7 +1607,11 @@ s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, } u32 var6; - if (var2 + var4 <= 15 && ((pack >> 10) & 0x1f) != (pack & 0x1f)) + if (noQueueFull || var2 + var4 > 15 || ((pack >> 10) & 0x1f) == (pack & 0x1f)) + { + var6 = -1; + } + else { s32 var8 = (pack & 0x1f) - ((pack >> 10) & 0x1f); if (var8 < 0) @@ -1646,22 +1641,18 @@ s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, } new_queue.m_hs[0] = (pack & 0x83ff) | var12; - var6 = (u16)queue->m_hs[1 + 2 * var11]; - } - else - { - var6 = -1; + var6 = (u16)queue->m_hs[17 + 2 * var11]; } s32 var7 = (var3 << 16) | (var5 & 0xffff); - if (InterlockedCompareExchange(&queue->m_push2(), new_queue.m_push2(), old_data) == old_data) + if (InterlockedCompareExchange(&queue->m_pop2(), new_queue.m_pop2(), old_data) == old_data) { - // break; - assert(var2 + var4 < 16); if (var6 != -1) { - if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) + bool exch = InterlockedCompareExchange(&queue->m_pop3(), re32(var7), old_data2) == old_data2; + assert(exch); + if (exch) { assert(fpSendSignal); return fpSendSignal((u64)queue->m_eaSignal, var6); @@ -1669,18 +1660,14 @@ s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, } else { - const u16 pack2 = queue->m_hs[0]; - if ((pack2 & 0x1f) == ((pack >> 10) & 0x1f)) + pack = queue->m_hs[16]; + if ((pack & 0x1f) == ((pack >> 10) & 0x1f)) { - if (InterlockedCompareExchange(&queue->m_push3(), re32(var7), old_data2) == old_data2) + if (InterlockedCompareExchange(&queue->m_pop3(), re32(var7), old_data2) == old_data2) { return CELL_OK; } } - else - { - assert(queue->m_push3() == old_data2); - } } } } @@ -1776,7 +1763,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u s32 res; if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { -#ifdef PRX_DEBUG +#ifdef PRX_DEBUG_XXX res = GetCurrentPPUThread().FastCall(libsre + 0x2CA8, queue.GetAddr(), position, 0, 0); #else res = syncLFQueueCompletePopPointer(queue, position, nullptr, 0); From 55ee7065beb3f1b45e641cf4b763dc480071de2b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 18 Aug 2014 02:39:25 +0400 Subject: [PATCH 360/499] SPR removed from SPU --- rpcs3/Emu/Cell/SPUInterpreter.h | 17 +---------------- rpcs3/Emu/Cell/SPURecompiler.h | 16 ---------------- rpcs3/Emu/Cell/SPUThread.h | 3 +-- 3 files changed, 2 insertions(+), 34 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index b5d80a691e..8a8ec790a2 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -61,17 +61,6 @@ private: void MFSPR(u32 rt, u32 sa) { UNIMPLEMENTED(); - //If register is a dummy register (register labeled 0x0) - if(sa == 0x0) - { - CPU.GPR[rt]._u128.hi = 0x0; - CPU.GPR[rt]._u128.lo = 0x0; - } - else - { - CPU.GPR[rt]._u128.hi = CPU.SPR[sa]._u128.hi; - CPU.GPR[rt]._u128.lo = CPU.SPR[sa]._u128.lo; - } } void RDCH(u32 rt, u32 ra) { @@ -267,11 +256,7 @@ private: } void MTSPR(u32 rt, u32 sa) { - if(sa != 0) - { - CPU.SPR[sa]._u128.hi = CPU.GPR[rt]._u128.hi; - CPU.SPR[sa]._u128.lo = CPU.GPR[rt]._u128.lo; - } + UNIMPLEMENTED(); } void WRCH(u32 ra, u32 rt) { diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 6bdcddf1cb..e08623ab43 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -471,17 +471,6 @@ private: void MFSPR(u32 rt, u32 sa) { UNIMPLEMENTED(); - //If register is a dummy register (register labeled 0x0) - if(sa == 0x0) - { - CPU.GPR[rt]._u128.hi = 0x0; - CPU.GPR[rt]._u128.lo = 0x0; - } - else - { - CPU.GPR[rt]._u128.hi = CPU.SPR[sa]._u128.hi; - CPU.GPR[rt]._u128.lo = CPU.SPR[sa]._u128.lo; - } } void RDCH(u32 rt, u32 ra) { @@ -1098,11 +1087,6 @@ private: void MTSPR(u32 rt, u32 sa) { UNIMPLEMENTED(); - if(sa != 0) - { - CPU.SPR[sa]._u128.hi = CPU.GPR[rt]._u128.hi; - CPU.SPR[sa]._u128.lo = CPU.GPR[rt]._u128.lo; - } } void WRCH(u32 ra, u32 rt) { diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index e00a086ed5..c794817e6b 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -310,8 +310,7 @@ union SPU_SNRConfig_hdr class SPUThread : public PPCThread { public: - SPU_GPR_hdr GPR[128]; //General-Purpose Register - SPU_SPR_hdr SPR[128]; //Special-Purpose Registers + SPU_GPR_hdr GPR[128]; //General-Purpose Registers //FPSCR FPSCR; SPU_SNRConfig_hdr cfg; //Signal Notification Registers Configuration (OR-mode enabled: 0x1 for SNR1, 0x2 for SNR2) From 8a785fefc28e0173bb356a759dd90e5dd5c9f68d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 18 Aug 2014 02:46:39 +0400 Subject: [PATCH 361/499] SPR are not used --- rpcs3/Emu/Cell/SPUDisAsm.h | 2 +- rpcs3/Emu/Cell/SPUThread.h | 19 ------------------- 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUDisAsm.h b/rpcs3/Emu/Cell/SPUDisAsm.h index 8df572bcf6..f32b4a7cf8 100644 --- a/rpcs3/Emu/Cell/SPUDisAsm.h +++ b/rpcs3/Emu/Cell/SPUDisAsm.h @@ -93,7 +93,7 @@ private: } void MFSPR(u32 rt, u32 sa) { - DisAsm("mfspr", spu_reg_name[rt], spu_reg_name[sa]); // Are SPR mapped on the GPR or are there 128 additional registers ? Yes, there are also 128 SPR making 256 registers total + DisAsm("mfspr", spu_reg_name[rt], spu_reg_name[sa]); } void RDCH(u32 rt, u32 ra) { diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index c794817e6b..1b3386bf06 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -271,25 +271,6 @@ union SPU_GPR_hdr } }; -union SPU_SPR_hdr -{ - u32 _u32[4]; - u128 _u128; - s128 _i128; - - SPU_SPR_hdr() {} - - std::string ToString() const - { - return fmt::Format("%08x%08x%08x%08x", _u32[3], _u32[2], _u32[1], _u32[0]); - } - - void Reset() - { - memset(this, 0, sizeof(*this)); - } -}; - union SPU_SNRConfig_hdr { u64 value; From 07a5720c170d37c918407a4ed542e903320fa533 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 18 Aug 2014 04:23:05 +0400 Subject: [PATCH 362/499] SPU: some instructions removed They can't be used on PS3. Bitfields for interrupt flags added. --- rpcs3/Emu/Cell/SPUDisAsm.h | 14 +-- rpcs3/Emu/Cell/SPUInstrTable.h | 14 +-- rpcs3/Emu/Cell/SPUInterpreter.h | 138 +++++++++++++---------------- rpcs3/Emu/Cell/SPUOpcodes.h | 14 +-- rpcs3/Emu/Cell/SPURecompiler.h | 150 ++++++++++---------------------- 5 files changed, 128 insertions(+), 202 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUDisAsm.h b/rpcs3/Emu/Cell/SPUDisAsm.h index f32b4a7cf8..f070ff78cd 100644 --- a/rpcs3/Emu/Cell/SPUDisAsm.h +++ b/rpcs3/Emu/Cell/SPUDisAsm.h @@ -223,19 +223,19 @@ private: { DisAsm("wrch", spu_ch_name[ra], spu_reg_name[rt]); } - void BIZ(u32 rt, u32 ra) + void BIZ(u32 intr, u32 rt, u32 ra) { DisAsm("biz", spu_reg_name[rt], spu_reg_name[ra]); } - void BINZ(u32 rt, u32 ra) + void BINZ(u32 intr, u32 rt, u32 ra) { DisAsm("binz", spu_reg_name[rt], spu_reg_name[ra]); } - void BIHZ(u32 rt, u32 ra) + void BIHZ(u32 intr, u32 rt, u32 ra) { DisAsm("bihz", spu_reg_name[rt], spu_reg_name[ra]); } - void BIHNZ(u32 rt, u32 ra) + void BIHNZ(u32 intr, u32 rt, u32 ra) { DisAsm("bihnz", spu_reg_name[rt], spu_reg_name[ra]); } @@ -247,11 +247,11 @@ private: { DisAsm("stqx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]); } - void BI(u32 ra) + void BI(u32 intr, u32 ra) { DisAsm("bi", spu_reg_name[ra]); } - void BISL(u32 rt, u32 ra) + void BISL(u32 intr, u32 rt, u32 ra) { DisAsm("bisl", spu_reg_name[rt], spu_reg_name[ra]); } @@ -259,7 +259,7 @@ private: { DisAsm("iret", spu_reg_name[ra]); } - void BISLED(u32 rt, u32 ra) + void BISLED(u32 intr, u32 rt, u32 ra) { DisAsm("bisled", spu_reg_name[rt], spu_reg_name[ra]); } diff --git a/rpcs3/Emu/Cell/SPUInstrTable.h b/rpcs3/Emu/Cell/SPUInstrTable.h index 2349f4aab6..18b4a72b75 100644 --- a/rpcs3/Emu/Cell/SPUInstrTable.h +++ b/rpcs3/Emu/Cell/SPUInstrTable.h @@ -88,16 +88,16 @@ namespace SPU_instr bind_instr(ri7_list, AVGB, RT, RA, RB); bind_instr(ri7_list, MTSPR, RT, RA); bind_instr(ri7_list, WRCH, RA, RT); - bind_instr(ri7_list, BIZ, RT, RA); - bind_instr(ri7_list, BINZ, RT, RA); - bind_instr(ri7_list, BIHZ, RT, RA); - bind_instr(ri7_list, BIHNZ, RT, RA); + bind_instr(ri7_list, BIZ, RB, RT, RA); + bind_instr(ri7_list, BINZ, RB, RT, RA); + bind_instr(ri7_list, BIHZ, RB, RT, RA); + bind_instr(ri7_list, BIHNZ, RB, RT, RA); bind_instr(ri7_list, STOPD, RT, RA, RB); bind_instr(ri7_list, STQX, RT, RA, RB); - bind_instr(ri7_list, BI, RA); - bind_instr(ri7_list, BISL, RT, RA); + bind_instr(ri7_list, BI, RB, RA); + bind_instr(ri7_list, BISL, RB, RT, RA); bind_instr(ri7_list, IRET, RA); - bind_instr(ri7_list, BISLED, RT, RA); + bind_instr(ri7_list, BISLED, RB, RT, RA); bind_instr(ri7_list, HBR, L_11, RO, RA); bind_instr(ri7_list, GB, RT, RA); bind_instr(ri7_list, GBH, RT, RA); diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index 8a8ec790a2..9cae507585 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -60,7 +60,7 @@ private: } void MFSPR(u32 rt, u32 sa) { - UNIMPLEMENTED(); + UNIMPLEMENTED(); // not used } void RDCH(u32 rt, u32 ra) { @@ -256,14 +256,20 @@ private: } void MTSPR(u32 rt, u32 sa) { - UNIMPLEMENTED(); + UNIMPLEMENTED(); // not used } void WRCH(u32 ra, u32 rt) { CPU.WriteChannel(ra, CPU.GPR[rt]); } - void BIZ(u32 rt, u32 ra) + void BIZ(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + u64 target = branchTarget(CPU.GPR[ra]._u32[3], 0); if (CPU.GPR[rt]._u32[3] == 0) { @@ -275,8 +281,14 @@ private: LOG5_OPCODE("not taken (0x%llx)", target); } } - void BINZ(u32 rt, u32 ra) + void BINZ(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + u64 target = branchTarget(CPU.GPR[ra]._u32[3], 0); if (CPU.GPR[rt]._u32[3] != 0) { @@ -288,8 +300,14 @@ private: LOG5_OPCODE("not taken (0x%llx)", target); } } - void BIHZ(u32 rt, u32 ra) + void BIHZ(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + u64 target = branchTarget(CPU.GPR[ra]._u32[3], 0); if (CPU.GPR[rt]._u16[6] == 0) { @@ -301,8 +319,14 @@ private: LOG5_OPCODE("not taken (0x%llx)", target); } } - void BIHNZ(u32 rt, u32 ra) + void BIHNZ(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + u64 target = branchTarget(CPU.GPR[ra]._u32[3], 0); if (CPU.GPR[rt]._u16[6] != 0) { @@ -316,8 +340,7 @@ private: } void STOPD(u32 rc, u32 ra, u32 rb) { - UNIMPLEMENTED(); - Emu.Pause(); + UNIMPLEMENTED(); // not used } void STQX(u32 rt, u32 ra, u32 rb) { @@ -325,14 +348,26 @@ private: CPU.WriteLS128(lsa, CPU.GPR[rt]._u128); } - void BI(u32 ra) + void BI(u32 intr, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + u64 target = branchTarget(CPU.GPR[ra]._u32[3], 0); LOG5_OPCODE("branch (0x%llx)", target); CPU.SetBranch(target); } - void BISL(u32 rt, u32 ra) + void BISL(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + u64 target = branchTarget(CPU.GPR[ra]._u32[3], 0); CPU.GPR[rt].Reset(); CPU.GPR[rt]._u32[3] = CPU.PC + 4; @@ -341,12 +376,11 @@ private: } void IRET(u32 ra) { - UNIMPLEMENTED(); - //SetBranch(SRR0); + UNIMPLEMENTED(); // not used } - void BISLED(u32 rt, u32 ra) + void BISLED(u32 intr, u32 rt, u32 ra) { - UNIMPLEMENTED(); + UNIMPLEMENTED(); // not used } void HBR(u32 p, u32 ro, u32 ra) { @@ -756,8 +790,7 @@ private: } void DFCGT(u32 rt, u32 ra, u32 rb) { - CPU.GPR[rt]._u64[0] = CPU.GPR[ra]._d[0] > CPU.GPR[rb]._d[0] ? 0xffffffffffffffff : 0; - CPU.GPR[rt]._u64[1] = CPU.GPR[ra]._d[1] > CPU.GPR[rb]._d[1] ? 0xffffffffffffffff : 0; + UNIMPLEMENTED(); // cannot be used } void FA(u32 rt, u32 ra, u32 rb) { @@ -802,8 +835,7 @@ private: } void DFCMGT(u32 rt, u32 ra, u32 rb) { - CPU.GPR[rt]._u64[0] = fabs(CPU.GPR[ra]._d[0]) > fabs(CPU.GPR[rb]._d[0]) ? 0xffffffffffffffff : 0; - CPU.GPR[rt]._u64[1] = fabs(CPU.GPR[ra]._d[1]) > fabs(CPU.GPR[rb]._d[1]) ? 0xffffffffffffffff : 0; + UNIMPLEMENTED(); // cannot be used } void DFA(u32 rt, u32 ra, u32 rb) { @@ -875,11 +907,13 @@ private: } void CGX(u32 rt, u32 ra, u32 rb) { + // rarely used for (int w = 0; w < 4; w++) CPU.GPR[rt]._u32[w] = ((u64)CPU.GPR[ra]._u32[w] + (u64)CPU.GPR[rb]._u32[w] + (u64)(CPU.GPR[rt]._u32[w] & 1)) >> 32; } void BGX(u32 rt, u32 ra, u32 rb) { + // rarely used s64 nResult; for (int w = 0; w < 4; w++) @@ -902,10 +936,7 @@ private: void FSCRRD(u32 rt) { - /*CPU.GPR[rt]._u128.lo = - CPU.FPSCR.Exception0 << 20 & - CPU.FPSCR.*/ - UNIMPLEMENTED(); + UNIMPLEMENTED(); // TODO (rarely used) } void FESD(u32 rt, u32 ra) { @@ -921,60 +952,11 @@ private: } void FSCRWR(u32 rt, u32 ra) { - UNIMPLEMENTED(); + UNIMPLEMENTED(); // TODO (rarely used) } void DFTSV(u32 rt, u32 ra, s32 i7) { - const u64 DoubleExpMask = 0x7ff0000000000000; - const u64 DoubleFracMask = 0x000fffffffffffff; - const u64 DoubleSignMask = 0x8000000000000000; - const SPU_GPR_hdr temp = CPU.GPR[ra]; - CPU.GPR[rt].Reset(); - if (i7 & 1) //Negative Denorm Check (-, exp is zero, frac is non-zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] & DoubleFracMask) - if ((temp._u64[i] & (DoubleSignMask | DoubleExpMask)) == DoubleSignMask) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 2) //Positive Denorm Check (+, exp is zero, frac is non-zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] & DoubleFracMask) - if ((temp._u64[i] & (DoubleSignMask | DoubleExpMask)) == 0) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 4) //Negative Zero Check (-, exp is zero, frac is zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] == DoubleSignMask) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 8) //Positive Zero Check (+, exp is zero, frac is zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] == 0) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 16) //Negative Infinity Check (-, exp is 0x7ff, frac is zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] == (DoubleSignMask | DoubleExpMask)) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 32) //Positive Infinity Check (+, exp is 0x7ff, frac is zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] == DoubleExpMask) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 64) //Not-a-Number Check (any sign, exp is 0x7ff, frac is non-zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] & DoubleFracMask) - if ((temp._u64[i] & DoubleExpMask) == DoubleExpMask) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } + UNIMPLEMENTED(); // cannot be used } void FCEQ(u32 rt, u32 ra, u32 rb) { @@ -985,8 +967,7 @@ private: } void DFCEQ(u32 rt, u32 ra, u32 rb) { - CPU.GPR[rt]._u64[0] = CPU.GPR[ra]._d[0] == CPU.GPR[rb]._d[0] ? 0xffffffffffffffff : 0; - CPU.GPR[rt]._u64[1] = CPU.GPR[ra]._d[1] == CPU.GPR[rb]._d[1] ? 0xffffffffffffffff : 0; + UNIMPLEMENTED(); // cannot be used } void MPY(u32 rt, u32 ra, u32 rb) { @@ -1022,8 +1003,7 @@ private: } void DFCMEQ(u32 rt, u32 ra, u32 rb) { - CPU.GPR[rt]._u64[0] = fabs(CPU.GPR[ra]._d[0]) == fabs(CPU.GPR[rb]._d[0]) ? 0xffffffffffffffff : 0; - CPU.GPR[rt]._u64[1] = fabs(CPU.GPR[ra]._d[1]) == fabs(CPU.GPR[rb]._d[1]) ? 0xffffffffffffffff : 0; + UNIMPLEMENTED(); // cannot be used } void MPYU(u32 rt, u32 ra, u32 rb) { @@ -1037,8 +1017,8 @@ private: } void FI(u32 rt, u32 ra, u32 rb) { - //Floating Interpolation: ra will be ignored. - //It should work correctly if result of preceding FREST or FRSQEST is sufficiently exact + // TODO: Floating Interpolation: ra will be ignored. + // It should work correctly if result of preceding FREST or FRSQEST is sufficiently exact CPU.GPR[rt] = CPU.GPR[rb]; } void HEQ(u32 rt, u32 ra, u32 rb) diff --git a/rpcs3/Emu/Cell/SPUOpcodes.h b/rpcs3/Emu/Cell/SPUOpcodes.h index d486ba7495..4c0901f45d 100644 --- a/rpcs3/Emu/Cell/SPUOpcodes.h +++ b/rpcs3/Emu/Cell/SPUOpcodes.h @@ -272,16 +272,16 @@ public: virtual void AVGB(u32 rt, u32 ra, u32 rb) = 0; virtual void MTSPR(u32 rt, u32 sa) = 0; virtual void WRCH(u32 ra, u32 rt) = 0; - virtual void BIZ(u32 rt, u32 ra) = 0; - virtual void BINZ(u32 rt, u32 ra) = 0; - virtual void BIHZ(u32 rt, u32 ra) = 0; - virtual void BIHNZ(u32 rt, u32 ra) = 0; + virtual void BIZ(u32 intr, u32 rt, u32 ra) = 0; + virtual void BINZ(u32 intr, u32 rt, u32 ra) = 0; + virtual void BIHZ(u32 intr, u32 rt, u32 ra) = 0; + virtual void BIHNZ(u32 intr, u32 rt, u32 ra) = 0; virtual void STOPD(u32 rc, u32 ra, u32 rb) = 0; virtual void STQX(u32 rt, u32 ra, u32 rb) = 0; - virtual void BI(u32 ra) = 0; - virtual void BISL(u32 rt, u32 ra) = 0; + virtual void BI(u32 intr, u32 ra) = 0; + virtual void BISL(u32 intr, u32 rt, u32 ra) = 0; virtual void IRET(u32 ra) = 0; - virtual void BISLED(u32 rt, u32 ra) = 0; + virtual void BISLED(u32 intr, u32 rt, u32 ra) = 0; virtual void HBR(u32 p, u32 ro, u32 ra) = 0; virtual void GB(u32 rt, u32 ra) = 0; virtual void GBH(u32 rt, u32 ra) = 0; diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index e08623ab43..4646d747b5 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -1130,8 +1130,14 @@ private: } }*/ } - void BIZ(u32 rt, u32 ra) + void BIZ(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + c.mov(cpu_qword(PC), (u32)CPU.PC); do_finalize = true; @@ -1142,8 +1148,14 @@ private: c.shr(*pos_var, 2); LOG_OPCODE(); } - void BINZ(u32 rt, u32 ra) + void BINZ(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + c.mov(cpu_qword(PC), (u32)CPU.PC); do_finalize = true; @@ -1154,8 +1166,14 @@ private: c.shr(*pos_var, 2); LOG_OPCODE(); } - void BIHZ(u32 rt, u32 ra) + void BIHZ(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + c.mov(cpu_qword(PC), (u32)CPU.PC); do_finalize = true; @@ -1166,8 +1184,14 @@ private: c.shr(*pos_var, 2); LOG_OPCODE(); } - void BIHNZ(u32 rt, u32 ra) + void BIHNZ(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + c.mov(cpu_qword(PC), (u32)CPU.PC); do_finalize = true; @@ -1181,7 +1205,6 @@ private: void STOPD(u32 rc, u32 ra, u32 rb) { UNIMPLEMENTED(); - Emu.Pause(); } void STQX(u32 rt, u32 ra, u32 rb) { @@ -1210,8 +1233,14 @@ private: LOG_OPCODE(); } - void BI(u32 ra) + void BI(u32 intr, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + c.mov(cpu_qword(PC), (u32)CPU.PC); do_finalize = true; @@ -1219,8 +1248,14 @@ private: c.shr(*pos_var, 2); LOG_OPCODE(); } - void BISL(u32 rt, u32 ra) + void BISL(u32 intr, u32 rt, u32 ra) { + if (intr) + { + UNIMPLEMENTED(); + return; + } + XmmInvalidate(rt); c.mov(cpu_qword(PC), (u32)CPU.PC); @@ -1238,9 +1273,8 @@ private: void IRET(u32 ra) { UNIMPLEMENTED(); - //SetBranch(SRR0); } - void BISLED(u32 rt, u32 ra) + void BISLED(u32 intr, u32 rt, u32 ra) { UNIMPLEMENTED(); } @@ -2049,18 +2083,7 @@ private: } void DFCGT(u32 rt, u32 ra, u32 rb) { - // reverted less-than - const XmmLink& vb = XmmGet(rb, rt); - if (const XmmLink* va = XmmRead(ra)) - { - c.cmppd(vb.get(), va->read(), 1); - } - else - { - c.cmppd(vb.get(), cpu_xmm(GPR[ra]), 1); - } - XmmFinalize(vb, rt); - LOG_OPCODE(); + UNIMPLEMENTED(); } void FA(u32 rt, u32 ra, u32 rb) { @@ -2190,15 +2213,7 @@ private: } void DFCMGT(u32 rt, u32 ra, u32 rb) { - // reverted less-than - const XmmLink& vb = XmmGet(rb, rt); - const XmmLink& va = XmmGet(ra); - c.andpd(vb.get(), XmmConst(_mm_set_epi32(0x7fffffff, 0xffffffff, 0x7fffffff, 0xffffffff))); // abs - c.andpd(va.get(), XmmConst(_mm_set_epi32(0x7fffffff, 0xffffffff, 0x7fffffff, 0xffffffff))); // abs - c.cmppd(vb.get(), va.get(), 1); - XmmFinalize(vb, rt); - XmmFinalize(va); - LOG_OPCODE(); + UNIMPLEMENTED(); } void DFA(u32 rt, u32 ra, u32 rb) { @@ -2484,58 +2499,7 @@ private: } void DFTSV(u32 rt, u32 ra, s32 i7) //nf { - WRAPPER_BEGIN(rt, ra, i7, zz); - const u64 DoubleExpMask = 0x7ff0000000000000; - const u64 DoubleFracMask = 0x000fffffffffffff; - const u64 DoubleSignMask = 0x8000000000000000; - const SPU_GPR_hdr temp = CPU.GPR[ra]; - CPU.GPR[rt].Reset(); - if (i7 & 1) //Negative Denorm Check (-, exp is zero, frac is non-zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] & DoubleFracMask) - if ((temp._u64[i] & (DoubleSignMask | DoubleExpMask)) == DoubleSignMask) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 2) //Positive Denorm Check (+, exp is zero, frac is non-zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] & DoubleFracMask) - if ((temp._u64[i] & (DoubleSignMask | DoubleExpMask)) == 0) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 4) //Negative Zero Check (-, exp is zero, frac is zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] == DoubleSignMask) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 8) //Positive Zero Check (+, exp is zero, frac is zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] == 0) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 16) //Negative Infinity Check (-, exp is 0x7ff, frac is zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] == (DoubleSignMask | DoubleExpMask)) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 32) //Positive Infinity Check (+, exp is 0x7ff, frac is zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] == DoubleExpMask) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - if (i7 & 64) //Not-a-Number Check (any sign, exp is 0x7ff, frac is non-zero) - for (int i = 0; i < 2; i++) - { - if (temp._u64[i] & DoubleFracMask) - if ((temp._u64[i] & DoubleExpMask) == DoubleExpMask) - CPU.GPR[rt]._u64[i] = 0xffffffffffffffff; - } - WRAPPER_END(rt, ra, i7, 0); + UNIMPLEMENTED(); } void FCEQ(u32 rt, u32 ra, u32 rb) { @@ -2554,18 +2518,7 @@ private: } void DFCEQ(u32 rt, u32 ra, u32 rb) { - // compare equal - const XmmLink& vb = XmmGet(rb, rt); - if (const XmmLink* va = XmmRead(ra)) - { - c.cmppd(vb.get(), va->read(), 0); - } - else - { - c.cmppd(vb.get(), cpu_xmm(GPR[ra]), 0); - } - XmmFinalize(vb, rt); - LOG_OPCODE(); + UNIMPLEMENTED(); } void MPY(u32 rt, u32 ra, u32 rb) { @@ -2649,14 +2602,7 @@ private: } void DFCMEQ(u32 rt, u32 ra, u32 rb) { - const XmmLink& vb = XmmGet(rb, rt); - const XmmLink& va = XmmGet(ra); - c.andpd(vb.get(), XmmConst(_mm_set_epi32(0x7fffffff, 0xffffffff, 0x7fffffff, 0xffffffff))); // abs - c.andpd(va.get(), XmmConst(_mm_set_epi32(0x7fffffff, 0xffffffff, 0x7fffffff, 0xffffffff))); // abs - c.cmppd(vb.get(), va.get(), 0); // == - XmmFinalize(vb, rt); - XmmFinalize(va); - LOG_OPCODE(); + UNIMPLEMENTED(); } void MPYU(u32 rt, u32 ra, u32 rb) { From 7bbf4bbaebe93d238f2617aee9b2f5a8ecbfe845 Mon Sep 17 00:00:00 2001 From: luxsie <877033040@qq.com> Date: Mon, 18 Aug 2014 17:47:54 +0800 Subject: [PATCH 363/499] Implemented L10nConvertStr as only char* -> char* (type). This may be used in other l10n functions, since it was designed to receive void* pointer. Find sizeof(size_t) is 4 (uint32_t?) in Guided Fate Paradox. Thank @B1ackDaemon for testing. Changed log content for this function. Also fixed many typos.. Need windows sdk for code page transformation on windows. Need iconv to build on Linux/Mac. Original source for char to char codepage transformation is already tested using codeblocks and vs. Noticed l10n_conv_t is omitted in reference, which may be replaced by iconv_t or simply other function. Modified .travis.yml to apt-get install libc6-dev and removed -liconv from CMakeFile.txt. --- .travis.yml | 2 +- rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 318 ++++++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellL10n.h | 86 +++++++ rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 + 5 files changed, 383 insertions(+), 27 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellL10n.h diff --git a/.travis.yml b/.travis.yml index f34b33dfcf..90ddcfd4de 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ before_install: - echo "yes" | sudo apt-add-repository 'deb http://repos.codelite.org/wx3.0/ubuntu/ precise universe' - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt-get update - - sudo apt-get install libwxgtk3.0-dev libopenal-dev freeglut3-dev libglew-dev + - sudo apt-get install libwxgtk3.0-dev libopenal-dev freeglut3-dev libglew-dev libc6-dev - sudo apt-get install aria2 -qq - download_extract() { aria2c -x 16 $1 -o $2 && tar -xf $2; } - if [ "$CXX" = "g++" ]; then sudo apt-get install -qq g++-4.8; export CXX="g++-4.8" CC="gcc-4.8"; else sudo apt-get install libstdc++-4.8-dev; fi diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index 1a70d38543..704570a99c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -3,39 +3,22 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "cellL10n.h" +#include +#include -// Requires GCC 4.10 apparently.. #ifdef _MSC_VER +#include +#include #include +#else +#include #endif //void cellL10n_init(); //Module cellL10n(0x001e, cellL10n_init); Module *cellL10n = nullptr; - -// L10nResult -enum -{ - ConversionOK, - SRCIllegal, - DSTExhausted, - ConverterUnknown, -}; - -// detection result -enum -{ - L10N_STR_UNKNOWN = (1 << 0), - L10N_STR_ASCII = (1 << 1), - L10N_STR_JIS = (1 << 2), - L10N_STR_EUCJP = (1 << 3), - L10N_STR_SJIS = (1 << 4), - L10N_STR_UTF8 = (1 << 5), - L10N_STR_ILLEGAL = (1 << 16), - L10N_STR_ERROR = (1 << 17), -}; - int UTF16stoUTF8s(mem16_ptr_t utf16, mem64_t utf16_len, mem8_ptr_t utf8, mem64_t utf8_len) { cellL10n->Warning("UTF16stoUTF8s(utf16_addr=0x%x, utf16_len_addr=0x%x, utf8_addr=0x%x, utf8_len_addr=0x%x)", @@ -66,6 +49,289 @@ int jstrchk(mem8_ptr_t jstr) return L10N_STR_UTF8; } +//translate code id to code name. some codepage may has another name. +//If this makes your compilation fail, try replace the string code with one in "iconv -l" +bool _L10nCodeParse(int code, std::string& retCode) +{ + if ((code >= _L10N_CODE_) || (code < 0)) return false; + switch (code) + { + //I don't know these Unicode Variants is LB or BE. + case L10N_UTF8: retCode = "UTF-8"; return true; + case L10N_UTF16: retCode = "UTF-16"; return true; + case L10N_UTF32: retCode = "UTF-32"; return true; + case L10N_UCS2: retCode = "UCS-2"; return true; + case L10N_UCS4: retCode = "UCS-4"; return true; + case L10N_ISO_8859_1: retCode = "ISO-8859-1"; return true; + case L10N_ISO_8859_2: retCode = "ISO-8859-2"; return true; + case L10N_ISO_8859_3: retCode = "ISO-8859-3"; return true; + case L10N_ISO_8859_4: retCode = "ISO-8859-4"; return true; + case L10N_ISO_8859_5: retCode = "ISO-8859-5"; return true; + case L10N_ISO_8859_6: retCode = "ISO-8859-6"; return true; + case L10N_ISO_8859_7: retCode = "ISO-8859-7"; return true; + case L10N_ISO_8859_8: retCode = "ISO-8859-8"; return true; + case L10N_ISO_8859_9: retCode = "ISO-8859-9"; return true; + case L10N_ISO_8859_10: retCode = "ISO-8859-10"; return true; + case L10N_ISO_8859_11: retCode = "ISO-8859-11"; return true; + case L10N_ISO_8859_13: retCode = "ISO-8859-13"; return true; //No ISO-8859-12 ha ha. + case L10N_ISO_8859_14: retCode = "ISO-8859-14"; return true; + case L10N_ISO_8859_15: retCode = "ISO-8859-15"; return true; + case L10N_ISO_8859_16: retCode = "ISO-8859-16"; return true; + case L10N_CODEPAGE_437: retCode = "CP437"; return true; + case L10N_CODEPAGE_850: retCode = "CP850"; return true; + case L10N_CODEPAGE_863: retCode = "CP863"; return true; + case L10N_CODEPAGE_866: retCode = "CP866"; return true; + case L10N_CODEPAGE_932: retCode = "CP932"; return true; + case L10N_CODEPAGE_936: retCode = "CP936"; return true; + case L10N_CODEPAGE_949: retCode = "CP949"; return true; + case L10N_CODEPAGE_950: retCode = "CP950"; return true; + case L10N_CODEPAGE_1251:retCode = "CP1251"; return true; //CYRL + case L10N_CODEPAGE_1252:retCode = "CP1252"; return true; //ANSI + case L10N_EUC_CN: retCode = "EUC-CN"; return true; //GB2312 + case L10N_EUC_JP: retCode = "EUC-JP"; return true; + case L10N_EUC_KR: retCode = "EUC-KR"; return true; + case L10N_ISO_2022_JP: retCode = "ISO-2022-JP"; return true; + case L10N_ARIB: retCode = "ARABIC"; return true; //TODO: think that should be ARABIC. + case L10N_HZ: retCode = "HZ"; return true; + case L10N_GB18030: retCode = "GB18030"; return true; + case L10N_RIS_506: retCode = "SHIFT-JIS"; return true; //MusicShiftJIS, MS_KANJI + //These are only supported with FW 3.10 and above + case L10N_CODEPAGE_852: retCode = "CP852"; return true; + case L10N_CODEPAGE_1250:retCode = "CP1250"; return true; //EE + case L10N_CODEPAGE_737: retCode = "CP737"; return true; + case L10N_CODEPAGE_1253:retCode = "CP1253"; return true; //Greek + case L10N_CODEPAGE_857: retCode = "CP857"; return true; + case L10N_CODEPAGE_1254:retCode = "CP1254"; return true; //Turk + case L10N_CODEPAGE_775: retCode = "CP775"; return true; + case L10N_CODEPAGE_1257:retCode = "CP1257"; return true; //WINBALTRIM + case L10N_CODEPAGE_855: retCode = "CP855"; return true; + case L10N_CODEPAGE_858: retCode = "CP858"; return true; + case L10N_CODEPAGE_860: retCode = "CP860"; return true; + case L10N_CODEPAGE_861: retCode = "CP861"; return true; + case L10N_CODEPAGE_865: retCode = "CP865"; return true; + case L10N_CODEPAGE_869: retCode = "CP869"; return true; + default: return false; + } +} + +//translate code id to code name. +//If this makes your compilation fail, try replace the string code with one in "iconv -l" +bool _L10nCodeParse(int code, unsigned int & retCode) +{ + retCode = 0; + if ((code >= _L10N_CODE_) || (code < 0)) return false; + switch (code) + { + case L10N_UTF8: retCode = 65001; return false; + case L10N_UTF16: retCode = 1200; return false; //1200=LE,1201=BE + case L10N_UTF32: retCode = 12000; return false; //12000=LE,12001=BE + case L10N_UCS2: retCode = 1200; return false; //Not in OEM, but just the same as UTF16 + case L10N_UCS4: retCode = 12000; return false; //Not in OEM, but just the same as UTF32 + //All OEM Code Pages are Multi-Byte, not wchar_t,u16,u32. + case L10N_ISO_8859_1: retCode = 28591; return true; + case L10N_ISO_8859_2: retCode = 28592; return true; + case L10N_ISO_8859_3: retCode = 28593; return true; + case L10N_ISO_8859_4: retCode = 28594; return true; + case L10N_ISO_8859_5: retCode = 28595; return true; + case L10N_ISO_8859_6: retCode = 28596; return true; + case L10N_ISO_8859_7: retCode = 28597; return true; + case L10N_ISO_8859_8: retCode = 28598; return true; + case L10N_ISO_8859_9: retCode = 28599; return true; + case L10N_ISO_8859_10: retCode = 28600; return true; + case L10N_ISO_8859_11: retCode = 28601; return true; + case L10N_ISO_8859_13: retCode = 28603; return true; //No ISO-8859-12 ha ha. + case L10N_ISO_8859_14: retCode = 28604; return true; + case L10N_ISO_8859_15: retCode = 28605; return true; + case L10N_ISO_8859_16: retCode = 28606; return true; + case L10N_CODEPAGE_437: retCode = 437; return true; + case L10N_CODEPAGE_850: retCode = 850; return true; + case L10N_CODEPAGE_863: retCode = 863; return true; + case L10N_CODEPAGE_866: retCode = 866; return true; + case L10N_CODEPAGE_932: retCode = 932; return true; + case L10N_CODEPAGE_936: retCode = 936; return true; + case L10N_CODEPAGE_949: retCode = 949; return true; + case L10N_CODEPAGE_950: retCode = 950; return true; + case L10N_CODEPAGE_1251:retCode = 1251; return true; //CYRL + case L10N_CODEPAGE_1252:retCode = 1252; return true; //ANSI + case L10N_EUC_CN: retCode = 51936; return true; //GB2312 + case L10N_EUC_JP: retCode = 51932; return true; + case L10N_EUC_KR: retCode = 51949; return true; + case L10N_ISO_2022_JP: retCode = 50222; return true; + //Maybe 708/720/864/1256/10004/20420/28596/ + case L10N_ARIB: retCode = 20420; return true; //TODO: think that should be ARABIC. + case L10N_HZ: retCode = 52936; return true; + case L10N_GB18030: retCode = 54936; return true; + case L10N_RIS_506: retCode = 932; return true; //MusicShiftJIS, MS_KANJI, TODO: Code page + //These are only supported with FW 3.10 and above + case L10N_CODEPAGE_852: retCode = 852; return true; + case L10N_CODEPAGE_1250:retCode = 1250; return true; //EE + case L10N_CODEPAGE_737: retCode = 737; return true; + case L10N_CODEPAGE_1253:retCode = 1253; return true; //Greek + case L10N_CODEPAGE_857: retCode = 857; return true; + case L10N_CODEPAGE_1254:retCode = 1254; return true; //Turk + case L10N_CODEPAGE_775: retCode = 775; return true; + case L10N_CODEPAGE_1257:retCode = 1257; return true; //WINBALTRIM + case L10N_CODEPAGE_855: retCode = 855; return true; + case L10N_CODEPAGE_858: retCode = 858; return true; + case L10N_CODEPAGE_860: retCode = 860; return true; + case L10N_CODEPAGE_861: retCode = 861; return true; + case L10N_CODEPAGE_865: retCode = 865; return true; + case L10N_CODEPAGE_869: retCode = 869; return true; + default: return false; + } +} + +//TODO: check and complete transforms. note: unicode to/from other Unicode Formats is needed. +#ifdef _MSC_VER + +//Use code page to transform std::string to std::wstring. +int _OEM2Wide(unsigned int oem_code, const std::string src, std::wstring& dst) +{ + //Such length returned should include the '\0' character. + int length = MultiByteToWideChar(oem_code, 0, src.c_str(), -1, NULL, 0); + wchar_t *store = new wchar_t[length]; + memset(store, 0, (length)*sizeof(wchar_t)); + MultiByteToWideChar(oem_code, 0, src.c_str(), -1, (LPWSTR)store, length); + std::wstring result(store); + dst = result; + delete store; store = NULL; + return length - 1; +} + +//Use Code page to transform std::wstring to std::string. +int _Wide2OEM(unsigned int oem_code, const std::wstring src, std::string& dst) +{ + //Such length returned should include the '\0' character. + int length = WideCharToMultiByte(oem_code, 0, src.c_str(), -1, NULL, 0, NULL, NULL); + char *store = new char[length]; + memset(store, 0, (length)*sizeof(char)); + WideCharToMultiByte(oem_code, 0, src.c_str(), -1, store, length, NULL, NULL); + std::string result(store); + dst = result; + delete store; store = NULL; + return length - 1; +} + +//Convert Codepage to Codepage (all char*) +std::string _OemToOem(unsigned int src_code, unsigned int dst_code, const std::string str) +{ + std::wstring wide; std::string result; + _OEM2Wide(src_code, str, wide); + _Wide2OEM(dst_code, wide, result); + return result; +} + +/* +//Original piece of code. and this is for windows using with _OEM2Wide,_Wide2OEM,_OemToOem. +//The Char -> Char Execution of this function has already been tested using VS and CJK text with encoding. +int _L10nConvertStr(int src_code, const void *src, size_t * src_len, int dst_code, void *dst, size_t * dst_len) +{ + unsigned int srcCode = 0, dstCode = 0; //OEM code pages + bool src_page_converted = _L10nCodeParse(src_code, srcCode); //Check if code is in list. + bool dst_page_converted = _L10nCodeParse(dst_code, dstCode); + + if (((!src_page_converted) && (srcCode == 0)) + || ((!dst_page_converted) && (dstCode == 0))) + return ConverterUnknown; + + if (strnlen_s((char*)src, *src_len) != *src_len) return SRCIllegal; + //std::string wrapped_source = (char*)Memory.VirtualToRealAddr(src.GetAddr()); + std::string wrapped_source((char*)src); + //if (wrapped_source.length != src_len.GetValue()) return SRCIllegal; + std::string target = _OemToOem(srcCode, dstCode, wrapped_source); + + if (target.length() > *dst_len) return DSTExhausted; + + Memory.WriteString(dst, target.c_str()); + + return ConversionOK; +} +//This is the one used with iconv library for linux/mac. Also char->char. +//I've tested the code with console apps using codeblocks. +int _L10nConvertStr(int src_code, const void* src, size_t * src_len, int dst_code, void * dst, size_t * dst_len) +{ + std::string srcCode, dstCode; + int retValue = ConversionOK; + if ((_L10nCodeParse(src_code, srcCode)) && (_L10nCodeParse(dst_code, dstCode))) + { + iconv_t ict = iconv_open(srcCode.c_str(), dstCode.c_str()); + //char *srcBuf = (char*)Memory.VirtualToRealAddr(src.GetAddr()); + //char *dstBuf = (char*)Memory.VirtualToRealAddr(dst.GetAddr()); + char *srcBuf = (char*)src, *dstBuf = (char*)dst; + size_t srcLen = *src_len, dstLen = *dst_len; + size_t ictd = iconv(ict, &srcBuf, &srcLen, &dstBuf, &dstLen); + if (ictd != *src_len) + { + if (errno == EILSEQ) + retValue = SRCIllegal; //Invalid multi-byte sequence + else if (errno == E2BIG) + retValue = DSTExhausted;//Not enough space + else if (errno == EINVAL) + retValue = SRCIllegal; + } + iconv_close(ict); + //retValue = ConversionOK; + } + else retValue = ConverterUnknown; + return retValue; +}*/ +#endif + +//TODO: Check the code in emulation. If support for UTF8/UTF16/UTF32/UCS2/UCS4 should use wider chars.. awful. +int L10nConvertStr(int src_code, mem8_ptr_t src, mem64_t src_len, int dst_code, mem8_ptr_t dst, mem64_t dst_len) +{ + LOG_ERROR(HLE, "L10nConvertStr(src_code=%d,src=0x%x,src_len=%ld,dst_code=%d,dst=0x%x,dst_len=%ld)", + src_code, src.GetAddr(), src_len.GetValue(), dst_code, dst.GetAddr(), dst_len.GetValue()); + LOG_ERROR(HLE, "L10nConvertStr: 1st char at dst: %x(Hex)", *((char*)Memory.VirtualToRealAddr(src.GetAddr()))); +#ifdef _MSC_VER + unsigned int srcCode = 0, dstCode = 0; //OEM code pages + bool src_page_converted = _L10nCodeParse(src_code, srcCode); //Check if code is in list. + bool dst_page_converted = _L10nCodeParse(dst_code, dstCode); + + if (((!src_page_converted) && (srcCode == 0)) + || ((!dst_page_converted) && (dstCode == 0))) + return ConverterUnknown; + + //if (strnlen_s((char*)src, *src_len) != *src_len) return SRCIllegal; + std::string wrapped_source = (char*)Memory.VirtualToRealAddr(src.GetAddr()); + //std::string wrapped_source((char*)src); + if (wrapped_source.length() != src_len.GetValue()) return SRCIllegal; + std::string target = _OemToOem(srcCode, dstCode, wrapped_source); + + if (target.length() > dst_len.GetValue()) return DSTExhausted; + + Memory.WriteString(dst, target.c_str()); + + return ConversionOK; +#else + std::string srcCode, dstCode; + int retValue = ConversionOK; + if ((_L10nCodeParse(src_code, srcCode)) && (_L10nCodeParse(dst_code, dstCode))) + { + iconv_t ict = iconv_open(srcCode.c_str(), dstCode.c_str()); + char *srcBuf = (char*)Memory.VirtualToRealAddr(src.GetAddr()); + char *dstBuf = (char*)Memory.VirtualToRealAddr(dst.GetAddr()); + //char *srcBuf = (char*)src, *dstBuf = (char*)dst; + //size_t srcLen = *src_len, dstLen = *dst_len; + size_t srcLen = src_len.GetValue(), dstLen = dst_len.GetValue(); + size_t ictd = iconv(ict, &srcBuf, &srcLen, &dstBuf, &dstLen); + if (ictd != src_len.GetValue())//if (ictd != *src_len) + { + if (errno == EILSEQ) + retValue = SRCIllegal; //Invalid multi-byte sequence + else if (errno == E2BIG) + retValue = DSTExhausted;//Not enough space + else if (errno == EINVAL) + retValue = SRCIllegal; + } + iconv_close(ict); + //retValue = ConversionOK; + } + else retValue = ConverterUnknown; + return retValue; +#endif +} + void cellL10n_init() { // NOTE: I think this module should be LLE'd instead of implementing all its functions @@ -171,7 +437,7 @@ void cellL10n_init() // cellL10n->AddFunc(0x8f472054, UTF8stoEUCCNs); // cellL10n->AddFunc(0x90e9b5d2, EUCJPstoUCS2s); // cellL10n->AddFunc(0x91a99765, UHCtoUCS2); - // cellL10n->AddFunc(0x931ff25a, L10nConvertStr); + cellL10n->AddFunc(0x931ff25a, L10nConvertStr); // cellL10n->AddFunc(0x949bb14c, GBKstoUTF8s); // cellL10n->AddFunc(0x9557ac9b, UTF8toUHC); // cellL10n->AddFunc(0x9768b6d3, UTF32toUTF8); @@ -221,7 +487,7 @@ void cellL10n_init() // cellL10n->AddFunc(0xdefa1c17, UTF8stoHZs); // cellL10n->AddFunc(0xe2eabb32, eucjp2kuten); // cellL10n->AddFunc(0xe6d9e234, UTF8toBIG5); - cellL10n->AddFunc(0xe6f5711b, UTF16stoUTF8s); + // cellL10n->AddFunc(0xe6f5711b, UTF16stoUTF8s); // cellL10n->AddFunc(0xe956dc64, JISstoUCS2s); // cellL10n->AddFunc(0xeabc3d00, GB18030toUTF8); // cellL10n->AddFunc(0xeb3dc670, UTF8toSJIS); diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.h b/rpcs3/Emu/SysCalls/Modules/cellL10n.h new file mode 100644 index 0000000000..512d2a4bcf --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.h @@ -0,0 +1,86 @@ +#include "stdafx.h" + +// Requires GCC 4.10 apparently.. +#ifdef _MSC_VER +#include +#endif + +// L10nResult +enum +{ + ConversionOK, + SRCIllegal, + DSTExhausted, + ConverterUnknown, +}; + +// detection result +enum +{ + L10N_STR_UNKNOWN = (1 << 0), + L10N_STR_ASCII = (1 << 1), + L10N_STR_JIS = (1 << 2), + L10N_STR_EUCJP = (1 << 3), + L10N_STR_SJIS = (1 << 4), + L10N_STR_UTF8 = (1 << 5), + L10N_STR_ILLEGAL = (1 << 16), + L10N_STR_ERROR = (1 << 17), +}; + +//CodePages +enum { + L10N_UTF8 = 0, + L10N_UTF16, + L10N_UTF32, + L10N_UCS2, + L10N_UCS4, + L10N_ISO_8859_1, + L10N_ISO_8859_2, + L10N_ISO_8859_3, + L10N_ISO_8859_4, + L10N_ISO_8859_5, + L10N_ISO_8859_6, + L10N_ISO_8859_7, + L10N_ISO_8859_8, + L10N_ISO_8859_9, + L10N_ISO_8859_10, + L10N_ISO_8859_11, + L10N_ISO_8859_13, + L10N_ISO_8859_14, + L10N_ISO_8859_15, + L10N_ISO_8859_16, + L10N_CODEPAGE_437, + L10N_CODEPAGE_850, + L10N_CODEPAGE_863, + L10N_CODEPAGE_866, + L10N_CODEPAGE_932, + L10N_CODEPAGE_936, + L10N_CODEPAGE_949, + L10N_CODEPAGE_950, + L10N_CODEPAGE_1251, + L10N_CODEPAGE_1252, + L10N_EUC_CN, + L10N_EUC_JP, + L10N_EUC_KR, + L10N_ISO_2022_JP, + L10N_ARIB, + L10N_HZ, + L10N_GB18030, + L10N_RIS_506, + //FW 3.10 and above + L10N_CODEPAGE_852, + L10N_CODEPAGE_1250, + L10N_CODEPAGE_737, + L10N_CODEPAGE_1253, + L10N_CODEPAGE_857, + L10N_CODEPAGE_1254, + L10N_CODEPAGE_775, + L10N_CODEPAGE_1257, + L10N_CODEPAGE_855, + L10N_CODEPAGE_858, + L10N_CODEPAGE_860, + L10N_CODEPAGE_861, + L10N_CODEPAGE_865, + L10N_CODEPAGE_869, + _L10N_CODE_ +}; diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 4aa03b9806..8c74b31988 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -359,6 +359,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index f81204a0a9..db572c65f9 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1156,5 +1156,8 @@ Utilities + + Emu\SysCalls\Modules + \ No newline at end of file From b23a5f231250eec31733a9552f804d91d976b83c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Mon, 18 Aug 2014 16:37:23 +0200 Subject: [PATCH 364/499] RSXVertexData bugs fixed * Some extra info on sys_rsx syscalls * Code cleaned in GLGSRender.cpp --- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 118 ++++++++++++++--------------- rpcs3/Emu/RSX/RSXThread.cpp | 20 ++--- rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp | 30 +++++++- 3 files changed, 96 insertions(+), 72 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index ac5af7e6c2..2cc6aff591 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -188,64 +188,67 @@ void GLGSRender::EnableVertexData(bool indexed_draw) GL_HALF_FLOAT, GL_UNSIGNED_BYTE, GL_SHORT, + GL_FLOAT, // Needs conversion GL_UNSIGNED_BYTE, }; static const bool gl_normalized[] = { - true, - false, - false, - true, - false, - false, + GL_TRUE, + GL_FALSE, + GL_FALSE, + GL_TRUE, + GL_FALSE, + GL_TRUE, + GL_FALSE, }; - if(m_vertex_data[i].type >= 1 && m_vertex_data[i].type <= 7) + if (m_vertex_data[i].type < 1 && m_vertex_data[i].type > 7) { + LOG_ERROR(RSX, "GLGSRender::EnableVertexData: Bad vertex data type (%d)!", m_vertex_data[i].type); + } + + if(!m_vertex_data[i].addr) { - if(!m_vertex_data[i].addr) + switch(m_vertex_data[i].type) { - switch(m_vertex_data[i].type) + case CELL_GCM_VERTEX_S32K: + case CELL_GCM_VERTEX_S1: + switch(m_vertex_data[i].size) { - case CELL_GCM_VERTEX_S32K: - case CELL_GCM_VERTEX_S1: - switch(m_vertex_data[i].size) - { - case 1: glVertexAttrib1s(i, (GLshort&)m_vertex_data[i].data[0]); break; - case 2: glVertexAttrib2sv(i, (GLshort*)&m_vertex_data[i].data[0]); break; - case 3: glVertexAttrib3sv(i, (GLshort*)&m_vertex_data[i].data[0]); break; - case 4: glVertexAttrib4sv(i, (GLshort*)&m_vertex_data[i].data[0]); break; - } - break; - - case CELL_GCM_VERTEX_F: - switch(m_vertex_data[i].size) - { - case 1: glVertexAttrib1f(i, (GLfloat&)m_vertex_data[i].data[0]); break; - case 2: glVertexAttrib2fv(i, (GLfloat*)&m_vertex_data[i].data[0]); break; - case 3: glVertexAttrib3fv(i, (GLfloat*)&m_vertex_data[i].data[0]); break; - case 4: glVertexAttrib4fv(i, (GLfloat*)&m_vertex_data[i].data[0]); break; - } - break; - - case CELL_GCM_VERTEX_CMP: - case CELL_GCM_VERTEX_UB: - glVertexAttrib4ubv(i, (GLubyte*)&m_vertex_data[i].data[0]); - break; + case 1: glVertexAttrib1s(i, (GLshort&)m_vertex_data[i].data[0]); break; + case 2: glVertexAttrib2sv(i, (GLshort*)&m_vertex_data[i].data[0]); break; + case 3: glVertexAttrib3sv(i, (GLshort*)&m_vertex_data[i].data[0]); break; + case 4: glVertexAttrib4sv(i, (GLshort*)&m_vertex_data[i].data[0]); break; } + break; - checkForGlError("glVertexAttrib"); - } - else - { - u32 gltype = gl_types[m_vertex_data[i].type - 1]; - bool normalized = gl_normalized[m_vertex_data[i].type - 1]; + case CELL_GCM_VERTEX_F: + switch(m_vertex_data[i].size) + { + case 1: glVertexAttrib1f(i, (GLfloat&)m_vertex_data[i].data[0]); break; + case 2: glVertexAttrib2fv(i, (GLfloat*)&m_vertex_data[i].data[0]); break; + case 3: glVertexAttrib3fv(i, (GLfloat*)&m_vertex_data[i].data[0]); break; + case 4: glVertexAttrib4fv(i, (GLfloat*)&m_vertex_data[i].data[0]); break; + } + break; - glEnableVertexAttribArray(i); - checkForGlError("glEnableVertexAttribArray"); - glVertexAttribPointer(i, m_vertex_data[i].size, gltype, normalized, 0, reinterpret_cast(offset_list[i])); - checkForGlError("glVertexAttribPointer"); + case CELL_GCM_VERTEX_CMP: + case CELL_GCM_VERTEX_UB: + glVertexAttrib4ubv(i, (GLubyte*)&m_vertex_data[i].data[0]); + break; } + + checkForGlError("glVertexAttrib"); + } + else + { + u32 gltype = gl_types[m_vertex_data[i].type - 1]; + bool normalized = gl_normalized[m_vertex_data[i].type - 1]; + + glEnableVertexAttribArray(i); + checkForGlError("glEnableVertexAttribArray"); + glVertexAttribPointer(i, m_vertex_data[i].size, gltype, normalized, 0, reinterpret_cast(offset_list[i])); + checkForGlError("glVertexAttribPointer"); } } } @@ -264,15 +267,15 @@ void GLGSRender::DisableVertexData() void GLGSRender::InitVertexData() { - GLfloat scaleOffsetMat[16] = {1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f}; int l; + GLfloat scaleOffsetMat[16] = { + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + }; - for(u32 i=0; ioffset; //LOG_WARNING(RSX,"fc%u[0x%x - 0x%x] = (%f, %f, %f, %f)", id, c.id, m_cur_shader_prog->offset, c.x, c.y, c.z, c.w); diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index ea267f5ad3..03a0f7b5bf 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -117,16 +117,18 @@ u32 RSXVertexData::GetTypeSize() { switch (type) { - case 1: return 2; - case 2: return 4; - case 3: return 2; - case 4: return 1; - case 5: return 2; - case 7: return 1; - } + case CELL_GCM_VERTEX_S1: return 2; + case CELL_GCM_VERTEX_F: return 4; + case CELL_GCM_VERTEX_SF: return 2; + case CELL_GCM_VERTEX_UB: return 1; + case CELL_GCM_VERTEX_S32K: return 2; + case CELL_GCM_VERTEX_CMP: return 4; + case CELL_GCM_VERTEX_UB256: return 1; - LOG_ERROR(RSX, "Bad vertex data type! %d", type); - return 1; + default: + LOG_ERROR(RSX, "RSXVertexData::GetTypeSize: Bad vertex data type (%d)!", type); + return 1; + } } #define CMD_DEBUG 0 diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp index b1350270c9..1b65fdd5ea 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp @@ -101,15 +101,27 @@ s32 sys_rsx_context_attribute(s32 context_id, u32 package_id, u64 a3, u64 a4, u6 switch(package_id) { - case 0x001: // ? + case 0x001: // FIFO + break; + + case 0x100: // Display mode set break; - case 0x101: // ? + case 0x101: // Display sync + break; + + case 0x102: // Display flip + break; + + case 0x103: // ? break; case 0x104: // Display buffer break; + case 0x106: // ? (Used by cellGcmInitPerfMon) + break; + case 0x10a: // ? break; @@ -119,9 +131,19 @@ s32 sys_rsx_context_attribute(s32 context_id, u32 package_id, u64 a3, u64 a4, u6 case 0x301: // Depth-buffer (Z-cull) break; - default: + case 0x600: // Framebuffer setup break; + + case 0x601: // Framebuffer blit + break; + + case 0x602: // Framebuffer blit sync + break; + + default: + return CELL_EINVAL; } + return CELL_OK; } @@ -129,7 +151,7 @@ s32 sys_rsx_context_attribute(s32 context_id, u32 package_id, u64 a3, u64 a4, u6 * lv2 SysCall 675 (0x2A3): sys_rsx_device_map * @param a1 (OUT): For example: In vsh.self it is 0x60000000, global semaphore. For a game it is 0x40000000. * @param a2 (OUT): Unused? - * @param dev_id (IN): An immediate value and always 8. + * @param dev_id (IN): An immediate value and always 8. (cellGcmInitPerfMon uses 11, 10, 9, 7, 12 successively). */ s32 sys_rsx_device_map(mem32_t a1, mem32_t a2, u32 dev_id) { From 9ba553643c98d111d8caad6ce8f68fb41ff06786 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 18 Aug 2014 20:12:03 +0400 Subject: [PATCH 365/499] cellSyncLFQueueClear cellSyncLFQueueSize cellSyncLFQueueDepth _cellSyncLFQueueGetSignalAddress cellSyncLFQueueGetDirection cellSyncLFQueueGetEntrySize --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 160 +++++++++++++++++++++--- 1 file changed, 143 insertions(+), 17 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 317f829b93..8a853772c2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1106,6 +1106,8 @@ s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u3 // TODO: sys_event_queue_receive (event data is not used), assert if error returned var1 = 1; } + + assert(0); } s32 _cellSyncLFQueueGetPushPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 useEventQueue) @@ -1282,6 +1284,8 @@ s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer } } } + + assert(0); } s32 _cellSyncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal) @@ -1496,6 +1500,8 @@ s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 // TODO: sys_event_queue_receive (event data is not used), assert if error returned var1 = 1; } + + assert(0); } s32 _cellSyncLFQueueGetPopPointer(mem_ptr_t queue, mem32_t pointer, u32 isBlocking, u32 arg4, u32 useEventQueue) @@ -1671,6 +1677,8 @@ s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, } } } + + assert(0); } s32 _cellSyncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, mem_func_ptr_t fpSendSignal, u32 noQueueFull) @@ -1938,39 +1946,157 @@ s32 cellSyncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, #endif } -s32 cellSyncLFQueueGetDirection(mem_ptr_t queue, mem32_t direction) +s32 cellSyncLFQueueClear(mem_ptr_t queue) { - cellSync->Todo("cellSyncLFQueueGetDirection(queue_addr=0x%x, direction_addr=0x%x)", queue.GetAddr(), direction.GetAddr()); - return CELL_OK; -} + cellSync->Warning("cellSyncLFQueueClear(queue_addr=0x%x)", queue.GetAddr()); -s32 cellSyncLFQueueDepth(mem_ptr_t queue, mem32_t depth) -{ - cellSync->Todo("cellSyncLFQueueDepth(queue_addr=0x%x, depth_addr=0x%x)", queue.GetAddr(), depth.GetAddr()); - return CELL_OK; -} + if (!queue) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 128) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO: optimize if possible + while (true) + { + const u64 old_data = InterlockedCompareExchange(&queue->m_pop1(), 0, 0); + CellSyncLFQueue new_queue; + new_queue.m_pop1() = old_data; + + const u64 new_data = queue->m_push1(); + new_queue.m_push1() = new_data; + + s32 var1, var2; + if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) + { + var1 = var2 = (u16)queue->m_hs[16]; + } + else + { + var1 = (u16)new_queue.m_h7; + var2 = (u16)new_queue.m_h3; + } + + if ((s32)(s16)new_queue.m_h4 != (s32)(u16)new_queue.m_h1 || + (s32)(s16)new_queue.m_h8 != (s32)(u16)new_queue.m_h5 || + ((var2 >> 10) & 0x1f) != (var2 & 0x1f) || + ((var1 >> 10) & 0x1f) != (var1 & 0x1f)) + { + return CELL_SYNC_ERROR_BUSY; + } + + if (InterlockedCompareExchange(&queue->m_pop1(), new_data, old_data) == old_data) break; + } -s32 cellSyncLFQueueGetEntrySize(mem_ptr_t queue, mem32_t entry_size) -{ - cellSync->Todo("cellSyncLFQueueGetEntrySize(queue_addr=0x%x, entry_size_addr=0x%x)", queue.GetAddr(), entry_size.GetAddr()); return CELL_OK; } s32 cellSyncLFQueueSize(mem_ptr_t queue, mem32_t size) { - cellSync->Todo("cellSyncLFQueueSize(queue_addr=0x%x, size_addr=0x%x)", queue.GetAddr(), size.GetAddr()); - return CELL_OK; + cellSync->Warning("cellSyncLFQueueSize(queue_addr=0x%x, size_addr=0x%x)", queue.GetAddr(), size.GetAddr()); + + if (!queue || !size.GetAddr()) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 128) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // TODO: optimize if possible + while (true) + { + const u32 old_data = InterlockedCompareExchange(&queue->m_pop3(), 0, 0); + + u32 var1 = (u16)queue->m_h1; + u32 var2 = (u16)queue->m_h5; + + if (InterlockedCompareExchange(&queue->m_pop3(), old_data, old_data) == old_data) + { + if (var1 <= var2) + { + size = var2 - var1; + } + else + { + size = var2 - var1 + (u32)queue->m_depth * 2; + } + return CELL_OK; + } + } + + assert(0); } -s32 cellSyncLFQueueClear(mem_ptr_t queue) +s32 cellSyncLFQueueDepth(mem_ptr_t queue, mem32_t depth) { - cellSync->Todo("cellSyncLFQueueClear(queue_addr=0x%x)", queue.GetAddr()); + cellSync->Log("cellSyncLFQueueDepth(queue_addr=0x%x, depth_addr=0x%x)", queue.GetAddr(), depth.GetAddr()); + + if (!queue || !depth.GetAddr()) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 128) + { + return CELL_SYNC_ERROR_ALIGN; + } + + depth = queue->m_depth; return CELL_OK; } s32 _cellSyncLFQueueGetSignalAddress(mem_ptr_t queue, mem32_t ppSignal) { - cellSync->Todo("_cellSyncLFQueueGetSignalAddress(queue_addr=0x%x, ppSignal_addr=0x%x)", queue.GetAddr(), ppSignal.GetAddr()); + cellSync->Log("_cellSyncLFQueueGetSignalAddress(queue_addr=0x%x, ppSignal_addr=0x%x)", queue.GetAddr(), ppSignal.GetAddr()); + + if (!queue || !ppSignal.GetAddr()) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 128) + { + return CELL_SYNC_ERROR_ALIGN; + } + + ppSignal = queue->m_eaSignal; + return CELL_OK; +} + +s32 cellSyncLFQueueGetDirection(mem_ptr_t queue, mem32_t direction) +{ + cellSync->Log("cellSyncLFQueueGetDirection(queue_addr=0x%x, direction_addr=0x%x)", queue.GetAddr(), direction.GetAddr()); + + if (!queue || !direction.GetAddr()) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 128) + { + return CELL_SYNC_ERROR_ALIGN; + } + + direction = queue->m_direction; + return CELL_OK; +} + +s32 cellSyncLFQueueGetEntrySize(mem_ptr_t queue, mem32_t entry_size) +{ + cellSync->Log("cellSyncLFQueueGetEntrySize(queue_addr=0x%x, entry_size_addr=0x%x)", queue.GetAddr(), entry_size.GetAddr()); + + if (!queue || !entry_size.GetAddr()) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (queue.GetAddr() % 128) + { + return CELL_SYNC_ERROR_ALIGN; + } + + entry_size = queue->m_size; return CELL_OK; } From cf9769fe654bf5cffcb0110bc87b497308d8dfdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Mon, 18 Aug 2014 22:07:52 +0200 Subject: [PATCH 366/499] Fragment Shader recompiler comments Don't expect changes due to this commit. --- rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp | 157 ++++++++++++------------- rpcs3/Emu/RSX/GL/GLFragmentProgram.h | 23 ++-- rpcs3/Emu/RSX/GL/GLVertexProgram.cpp | 11 +- rpcs3/Emu/RSX/RSXFragmentProgram.h | 73 +++++++++++- 4 files changed, 166 insertions(+), 98 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp index bfb96fd2bb..b36279f580 100644 --- a/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp @@ -267,9 +267,8 @@ std::string GLFragmentDecompilerThread::BuildCode() std::string p; - for (u32 i = 0; i 0 ? exp2($0.w * log2($0.y)) : 0.0), 1.0)"); break; // LIT (compute light coefficients) - case 0x1f: SetDst("($0 * ($1 - $2) + $2)"); break; // LRP (linear interpolation) + case RSX_FP_OPCODE_FRC: SetDst("fract($0)"); break; + case RSX_FP_OPCODE_FLR: SetDst("floor($0)"); break; + case RSX_FP_OPCODE_KIL: SetDst("discard", false); break; + //case RSX_FP_OPCODE_PK4: break; + //case RSX_FP_OPCODE_UP4: break; + case RSX_FP_OPCODE_DDX: SetDst("dFdx($0)"); break; + case RSX_FP_OPCODE_DDY: SetDst("dFdy($0)"); break; + case RSX_FP_OPCODE_TEX: SetDst("texture($t, $0.xy)"); break; + //case RSX_FP_OPCODE_TXP: break; + //case RSX_FP_OPCODE_TXD: break; + case RSX_FP_OPCODE_RCP: SetDst("(1 / $0)"); break; + case RSX_FP_OPCODE_RSQ: SetDst("inversesqrt(abs($0))"); break; + case RSX_FP_OPCODE_EX2: SetDst("exp2($0)"); break; + case RSX_FP_OPCODE_LG2: SetDst("log2($0)"); break; + case RSX_FP_OPCODE_LIT: SetDst("vec4(1.0, $0.x, ($0.x > 0 ? exp2($0.w * log2($0.y)) : 0.0), 1.0)"); break; + case RSX_FP_OPCODE_LRP: SetDst("($0 * ($1 - $2) + $2)"); break; - case 0x20: SetDst("vec4(equal($0, vec4(1.0)))"); break; // STR (set on true) - case 0x21: SetDst("vec4(equal($0, vec4(0.0)))"); break; // SFL (set on false) - case 0x22: SetDst("cos($0)"); break; // COS - case 0x23: SetDst("sin($0)"); break; // SIN - //case 0x24: break; // PK2 (pack two 16-bit floats) - //case 0x25: break; // UP2 (unpack two 16-bit floats) - case 0x26: SetDst("pow($0, $1)"); break; // POW - //case 0x27: break; // PKB - //case 0x28: break; // UPB - //case 0x29: break; // PK16 - //case 0x2a: break; // UP16 - //case 0x2b: break; // BEM - //case 0x2c: break; // PKG - //case 0x2d: break; // UPG - case 0x2e: SetDst("($0.x * $1.x + $0.y * $1.y + $2.x)"); break; // DP2A (2-component dot product and add) - //case 0x2f: break; // TXL (texture lookup with LOD) + case RSX_FP_OPCODE_STR: SetDst("vec4(equal($0, vec4(1.0)))"); break; + case RSX_FP_OPCODE_SFL: SetDst("vec4(equal($0, vec4(0.0)))"); break; + case RSX_FP_OPCODE_COS: SetDst("cos($0)"); break; + case RSX_FP_OPCODE_SIN: SetDst("sin($0)"); break; + //case RSX_FP_OPCODE_PK2: break; + //case RSX_FP_OPCODE_UP2: break; + case RSX_FP_OPCODE_POW: SetDst("pow($0, $1)"); break; + //case RSX_FP_OPCODE_PKB: break; + //case RSX_FP_OPCODE_UPB: break; + //case RSX_FP_OPCODE_PK16: break; + //case RSX_FP_OPCODE_UP16: break; + //case RSX_FP_OPCODE_BEM: break; + //case RSX_FP_OPCODE_PKG: break; + //case RSX_FP_OPCODE_UPG: break; + case RSX_FP_OPCODE_DP2A: SetDst("($0.x * $1.x + $0.y * $1.y + $2.x)"); break; + //case RSX_FP_OPCODE_TXL: break; - //case 0x30: break; - //case 0x31: break; // TXB (texture lookup with bias) - //case 0x33: break; // TEXBEM - //case 0x34: break; // TXPBEM - //case 0x35: break; // BEMLUM - case 0x36: SetDst("($0 - 2.0 * $1 * dot($0, $1))"); break; // RFL (reflection vector) - //case 0x37: break; // TIMESWTEX - case 0x38: SetDst("vec4(dot($0.xy, $1.xy))"); break; // DP2 - case 0x39: SetDst("normalize($0.xyz)"); break; // NRM - case 0x3a: SetDst("($0 / $1)"); break; // DIV - case 0x3b: SetDst("($0 / sqrt($1))"); break; // DIVSQ - case 0x3c: SetDst("vec4(1.0, $0.y, ($0.y > 0 ? pow(2.0, $0.w) : 0.0), 1.0)"); break; // LIF - case 0x3d: break; // FENCT - case 0x3e: break; // FENCB + //case RSX_FP_OPCODE_TXB: break; + //case RSX_FP_OPCODE_TEXBEM: break; + //case RSX_FP_OPCODE_TXPBEM: break; + //case RSX_FP_OPCODE_BEMLUM: break; + case RSX_FP_OPCODE_REFL: SetDst("($0 - 2.0 * $1 * dot($0, $1))"); break; + //case RSX_FP_OPCODE_TIMESWTEX: break; + case RSX_FP_OPCODE_DP2: SetDst("vec4(dot($0.xy, $1.xy))"); break; + case RSX_FP_OPCODE_NRM: SetDst("normalize($0.xyz)"); break; + case RSX_FP_OPCODE_DIV: SetDst("($0 / $1)"); break; + case RSX_FP_OPCODE_DIVSQ: SetDst("($0 / sqrt($1))"); break; + case RSX_FP_OPCODE_LIF: SetDst("vec4(1.0, $0.y, ($0.y > 0 ? pow(2.0, $0.w) : 0.0), 1.0)"); break; + case RSX_FP_OPCODE_FENCT: break; + case RSX_FP_OPCODE_FENCB: break; - case 0x40: SetDst("break"); break; //BRK - //case 0x41: break; //CAL - case 0x42: - AddCode("if($cond)"); //IF + case RSX_FP_OPCODE_BRK: SetDst("break"); break; + //case RSX_FP_OPCODE_CAL: break; + case RSX_FP_OPCODE_IFE: + AddCode("if($cond)"); m_else_offsets.push_back(src1.else_offset << 2); m_end_offsets.push_back(src2.end_offset << 2); AddCode("{"); m_code_level++; break; - case 0x43: //LOOP + case RSX_FP_OPCODE_LOOP: if(!src0.exec_if_eq && !src0.exec_if_gr && !src0.exec_if_lt) { AddCode(fmt::Format("$ifcond for(int i%u = %u; i%u < %u; i%u += %u) {} //-> %u //LOOP", - m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3, src2.end_offset)); + m_loop_count, src1.init_counter, m_loop_count, src1.end_counter, m_loop_count, src1.increment, src2.end_offset)); } else { AddCode(fmt::Format("$ifcond for(int i%u = %u; i%u < %u; i%u += %u) //LOOP", - m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); + m_loop_count, src1.init_counter, m_loop_count, src1.end_counter, m_loop_count, src1.increment)); m_loop_count++; m_end_offsets.push_back(src2.end_offset << 2); AddCode("{"); m_code_level++; } break; - case 0x44: //REP + case RSX_FP_OPCODE_REP: if(!src0.exec_if_eq && !src0.exec_if_gr && !src0.exec_if_lt) { AddCode(fmt::Format("$ifcond for(int i%u = %u; i%u < %u; i%u += %u) {} //-> %u //REP", - m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3, src2.end_offset)); + m_loop_count, src1.init_counter, m_loop_count, src1.end_counter, m_loop_count, src1.increment, src2.end_offset)); } else { AddCode(fmt::Format("if($cond) for(int i%u = %u; i%u < %u; i%u += %u) //REP", - m_loop_count, src1.rep2, m_loop_count, src1.rep1, m_loop_count, src1.rep3)); + m_loop_count, src1.init_counter, m_loop_count, src1.end_counter, m_loop_count, src1.increment)); m_loop_count++; m_end_offsets.push_back(src2.end_offset << 2); AddCode("{"); m_code_level++; } break; - //case 0x45: SetDst("return"); break; //RET + //case RSX_FP_OPCODE_RET: SetDst("return"); break; default: LOG_ERROR(RSX, "Unknown fp opcode 0x%x (inst %d)", opcode, m_size / (4 * 4)); @@ -543,10 +541,9 @@ void GLShaderProgram::Compile() void GLShaderProgram::Delete() { - for (u32 i = 0; i Date: Tue, 19 Aug 2014 01:16:48 +0400 Subject: [PATCH 367/499] Some headers defined --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 381 +++++++++++++----------- rpcs3/Emu/SysCalls/Modules/cellSync.h | 22 +- 2 files changed, 232 insertions(+), 171 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 8a853772c2..00f6c79479 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -16,10 +16,8 @@ Module *cellSync = nullptr; u32 libsre = 0; #endif -s32 cellSyncMutexInitialize(mem_ptr_t mutex) +s32 syncMutexInitialize(mem_ptr_t mutex) { - cellSync->Log("cellSyncMutexInitialize(mutex_addr=0x%x)", mutex.GetAddr()); - if (!mutex) { return CELL_SYNC_ERROR_NULL_POINTER; @@ -35,6 +33,13 @@ s32 cellSyncMutexInitialize(mem_ptr_t mutex) return CELL_OK; } +s32 cellSyncMutexInitialize(mem_ptr_t mutex) +{ + cellSync->Log("cellSyncMutexInitialize(mutex_addr=0x%x)", mutex.GetAddr()); + + return syncMutexInitialize(mutex); +} + s32 cellSyncMutexLock(mem_ptr_t mutex) { cellSync->Log("cellSyncMutexLock(mutex_addr=0x%x)", mutex.GetAddr()); @@ -139,10 +144,8 @@ s32 cellSyncMutexUnlock(mem_ptr_t mutex) return CELL_OK; } -s32 cellSyncBarrierInitialize(mem_ptr_t barrier, u16 total_count) +s32 syncBarrierInitialize(mem_ptr_t barrier, u16 total_count) { - cellSync->Log("cellSyncBarrierInitialize(barrier_addr=0x%x, total_count=%d)", barrier.GetAddr(), total_count); - if (!barrier) { return CELL_SYNC_ERROR_NULL_POINTER; @@ -163,6 +166,13 @@ s32 cellSyncBarrierInitialize(mem_ptr_t barrier, u16 total_coun return CELL_OK; } +s32 cellSyncBarrierInitialize(mem_ptr_t barrier, u16 total_count) +{ + cellSync->Log("cellSyncBarrierInitialize(barrier_addr=0x%x, total_count=%d)", barrier.GetAddr(), total_count); + + return syncBarrierInitialize(barrier, total_count); +} + s32 cellSyncBarrierNotify(mem_ptr_t barrier) { cellSync->Log("cellSyncBarrierNotify(barrier_addr=0x%x)", barrier.GetAddr()); @@ -335,10 +345,8 @@ s32 cellSyncBarrierTryWait(mem_ptr_t barrier) return CELL_OK; } -s32 cellSyncRwmInitialize(mem_ptr_t rwm, u32 buffer_addr, u32 buffer_size) +s32 syncRwmInitialize(mem_ptr_t rwm, u32 buffer_addr, u32 buffer_size) { - cellSync->Log("cellSyncRwmInitialize(rwm_addr=0x%x, buffer_addr=0x%x, buffer_size=0x%x)", rwm.GetAddr(), buffer_addr, buffer_size); - if (!rwm || !buffer_addr) { return CELL_SYNC_ERROR_NULL_POINTER; @@ -360,6 +368,13 @@ s32 cellSyncRwmInitialize(mem_ptr_t rwm, u32 buffer_addr, u32 buffe return CELL_OK; } +s32 cellSyncRwmInitialize(mem_ptr_t rwm, u32 buffer_addr, u32 buffer_size) +{ + cellSync->Log("cellSyncRwmInitialize(rwm_addr=0x%x, buffer_addr=0x%x, buffer_size=0x%x)", rwm.GetAddr(), buffer_addr, buffer_size); + + return syncRwmInitialize(rwm, buffer_addr, buffer_size); +} + s32 cellSyncRwmRead(mem_ptr_t rwm, u32 buffer_addr) { cellSync->Log("cellSyncRwmRead(rwm_addr=0x%x, buffer_addr=0x%x)", rwm.GetAddr(), buffer_addr); @@ -545,10 +560,8 @@ s32 cellSyncRwmTryWrite(mem_ptr_t rwm, u32 buffer_addr) return CELL_OK; } -s32 cellSyncQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth) +s32 syncQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth) { - cellSync->Log("cellSyncQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x)", queue.GetAddr(), buffer_addr, size, depth); - if (!queue) { return CELL_SYNC_ERROR_NULL_POINTER; @@ -575,6 +588,13 @@ s32 cellSyncQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 return CELL_OK; } +s32 cellSyncQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth) +{ + cellSync->Log("cellSyncQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x)", queue.GetAddr(), buffer_addr, size, depth); + + return syncQueueInitialize(queue, buffer_addr, size, depth); +} + s32 cellSyncQueuePush(mem_ptr_t queue, u32 buffer_addr) { cellSync->Log("cellSyncQueuePush(queue_addr=0x%x, buffer_addr=0x%x)", queue.GetAddr(), buffer_addr); @@ -1008,6 +1028,168 @@ void syncLFQueueDump(mem_ptr_t queue) } } +void syncLFQueueInit(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +{ + queue->m_h1 = 0; + queue->m_h2 = 0; + queue->m_h4 = 0; + queue->m_h5 = 0; + queue->m_h6 = 0; + queue->m_h8 = 0; + queue->m_size = size; + queue->m_depth = depth; + queue->m_buffer = (u64)buffer_addr; + queue->m_direction = direction; + for (u32 i = 0; i < sizeof(queue->m_hs) / sizeof(queue->m_hs[0]); i++) + { + queue->m_hs[i] = 0; + } + queue->m_eaSignal = (u64)eaSignal_addr; + + if (direction == CELL_SYNC_QUEUE_ANY2ANY) + { + queue->m_h3 = 0; + queue->m_h7 = 0; + queue->m_buffer = (u64)buffer_addr | 1; + queue->m_bs[0] = -1; + queue->m_bs[1] = -1; + //m_bs[2] + //m_bs[3] + queue->m_v1 = -1; + queue->m_hs[0] = -1; + queue->m_hs[16] = -1; + queue->m_v2 = 0; + queue->m_v3 = 0; + } + else + { + //m_h3 + //m_h7 + queue->m_bs[0] = -1; // written as u32 + queue->m_bs[1] = -1; + queue->m_bs[2] = -1; + queue->m_bs[3] = -1; + queue->m_v1 = 0; + queue->m_v2 = 0; // written as u64 + queue->m_v3 = 0; + } +} + +s32 syncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +{ +#ifdef PRX_DEBUG_XXX + return GetCurrentPPUThread().FastCall(libsre + 0x205C, queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); +#else + + if (!queue) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (size) + { + if (!buffer_addr) + { + return CELL_SYNC_ERROR_NULL_POINTER; + } + if (size > 0x4000 || size % 16) + { + return CELL_SYNC_ERROR_INVAL; + } + } + if (!depth || (depth >> 15) || direction > 3) + { + return CELL_SYNC_ERROR_INVAL; + } + if (queue.GetAddr() % 128 || buffer_addr % 16) + { + return CELL_SYNC_ERROR_ALIGN; + } + + // prx: get sdk version of current process, return non-zero result of sys_process_get_sdk_version + s32 sdk_ver; + s32 ret = process_get_sdk_version(process_getpid(), sdk_ver); + if (ret != CELL_OK) + { + return ret; + } + if (sdk_ver == -1) + { + sdk_ver = 0x460000; + } + + // prx: reserve u32 at 0x2c offset + u32 old_value; + while (true) + { + const u32 old_data = queue->m_data(); + CellSyncLFQueue new_data; + new_data.m_data() = old_data; + + if (old_data) + { + if (sdk_ver > 0x17ffff && old_data != se32(2)) + { + return CELL_SYNC_ERROR_STAT; + } + old_value = old_data; + } + else + { + if (sdk_ver > 0x17ffff) + { + for (u32 i = 0; i < sizeof(CellSyncLFQueue) / sizeof(u64); i++) + { + if ((u64&)Memory[queue.GetAddr() + i * sizeof(u64)]) + { + return CELL_SYNC_ERROR_STAT; + } + } + } + new_data.m_data() = se32(1); + old_value = se32(1); + } + + if (InterlockedCompareExchange(&queue->m_data(), new_data.m_data(), old_data) == old_data) break; + } + + if (old_value == se32(2)) + { + if ((u32)queue->m_size != size || (u32)queue->m_depth != depth || (u64)queue->m_buffer != (u64)buffer_addr) + { + return CELL_SYNC_ERROR_INVAL; + } + if (sdk_ver > 0x17ffff) + { + if ((u64)queue->m_eaSignal != (u64)eaSignal_addr || (u32)queue->m_direction != direction) + { + return CELL_SYNC_ERROR_INVAL; + } + } + } + else + { + // prx: call internal function with same arguments + syncLFQueueInit(queue, buffer_addr, size, depth, direction, eaSignal_addr); + + // prx: sync, zeroize u32 at 0x2c offset + InterlockedCompareExchange(&queue->m_data(), 0, 0); + queue->m_data() = 0; + } + + // prx: sync + InterlockedCompareExchange(&queue->m_data(), 0, 0); + return CELL_OK; +#endif +} + +s32 cellSyncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) +{ + cellSync->Warning("cellSyncLFQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", + queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); + + return syncLFQueueInitialize(queue, buffer_addr, size, depth, direction, eaSignal_addr); +} + s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue) { if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_PPU2SPU)) @@ -1789,163 +1971,6 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u return res; } -void syncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) -{ - queue->m_h1 = 0; - queue->m_h2 = 0; - queue->m_h4 = 0; - queue->m_h5 = 0; - queue->m_h6 = 0; - queue->m_h8 = 0; - queue->m_size = size; - queue->m_depth = depth; - queue->m_buffer = (u64)buffer_addr; - queue->m_direction = direction; - for (u32 i = 0; i < sizeof(queue->m_hs) / sizeof(queue->m_hs[0]); i++) - { - queue->m_hs[i] = 0; - } - queue->m_eaSignal = (u64)eaSignal_addr; - - if (direction == CELL_SYNC_QUEUE_ANY2ANY) - { - queue->m_h3 = 0; - queue->m_h7 = 0; - queue->m_buffer = (u64)buffer_addr | 1; - queue->m_bs[0] = -1; - queue->m_bs[1] = -1; - //m_bs[2] - //m_bs[3] - queue->m_v1 = -1; - queue->m_hs[0] = -1; - queue->m_hs[16] = -1; - queue->m_v2 = 0; - queue->m_v3 = 0; - } - else - { - //m_h3 - //m_h7 - queue->m_bs[0] = -1; // written as u32 - queue->m_bs[1] = -1; - queue->m_bs[2] = -1; - queue->m_bs[3] = -1; - queue->m_v1 = 0; - queue->m_v2 = 0; // written as u64 - queue->m_v3 = 0; - } -} - -s32 cellSyncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) -{ - cellSync->Warning("cellSyncLFQueueInitialize(queue_addr=0x%x, buffer_addr=0x%x, size=0x%x, depth=0x%x, direction=%d, eaSignal_addr=0x%x)", - queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); - -#ifdef PRX_DEBUG_XXX - return GetCurrentPPUThread().FastCall(libsre + 0x205C, queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); -#else - - if (!queue) - { - return CELL_SYNC_ERROR_NULL_POINTER; - } - if (size) - { - if (!buffer_addr) - { - return CELL_SYNC_ERROR_NULL_POINTER; - } - if (size > 0x4000 || size % 16) - { - return CELL_SYNC_ERROR_INVAL; - } - } - if (!depth || (depth >> 15) || direction > 3) - { - return CELL_SYNC_ERROR_INVAL; - } - if (queue.GetAddr() % 128 || buffer_addr % 16) - { - return CELL_SYNC_ERROR_ALIGN; - } - - // prx: get sdk version of current process, return non-zero result of sys_process_get_sdk_version - s32 sdk_ver; - s32 ret = process_get_sdk_version(process_getpid(), sdk_ver); - if (ret != CELL_OK) - { - return ret; - } - if (sdk_ver == -1) - { - sdk_ver = 0x460000; - } - - // prx: reserve u32 at 0x2c offset - u32 old_value; - while (true) - { - const u32 old_data = queue->m_data(); - CellSyncLFQueue new_data; - new_data.m_data() = old_data; - - if (old_data) - { - if (sdk_ver > 0x17ffff && old_data != se32(2)) - { - return CELL_SYNC_ERROR_STAT; - } - old_value = old_data; - } - else - { - if (sdk_ver > 0x17ffff) - { - for (u32 i = 0; i < sizeof(CellSyncLFQueue) / sizeof(u64); i++) - { - if ((u64&)Memory[queue.GetAddr() + i * sizeof(u64)]) - { - return CELL_SYNC_ERROR_STAT; - } - } - } - new_data.m_data() = se32(1); - old_value = se32(1); - } - - if (InterlockedCompareExchange(&queue->m_data(), new_data.m_data(), old_data) == old_data) break; - } - - if (old_value == se32(2)) - { - if ((u32)queue->m_size != size || (u32)queue->m_depth != depth || (u64)queue->m_buffer != (u64)buffer_addr) - { - return CELL_SYNC_ERROR_INVAL; - } - if (sdk_ver > 0x17ffff) - { - if ((u64)queue->m_eaSignal != (u64)eaSignal_addr || (u32)queue->m_direction != direction) - { - return CELL_SYNC_ERROR_INVAL; - } - } - } - else - { - // prx: call internal function with same arguments - syncLFQueueInitialize(queue, buffer_addr, size, depth, direction, eaSignal_addr); - - // prx: sync, zeroize u32 at 0x2c offset - InterlockedCompareExchange(&queue->m_data(), 0, 0); - queue->m_data() = 0; - } - - // prx: sync - InterlockedCompareExchange(&queue->m_data(), 0, 0); - return CELL_OK; -#endif -} - s32 cellSyncLFQueueClear(mem_ptr_t queue) { cellSync->Warning("cellSyncLFQueueClear(queue_addr=0x%x)", queue.GetAddr()); @@ -2100,16 +2125,32 @@ s32 cellSyncLFQueueGetEntrySize(mem_ptr_t queue, mem32_t entry_ return CELL_OK; } +s32 syncLFQueueAttachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue) +{ + // TODO + assert(0); + return CELL_OK; +} + s32 _cellSyncLFQueueAttachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue) { cellSync->Todo("_cellSyncLFQueueAttachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); + + return syncLFQueueAttachLv2EventQueue(spus, num, queue); +} + +s32 syncLFQueueDetachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue) +{ + // TODO + assert(0); return CELL_OK; } s32 _cellSyncLFQueueDetachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue) { cellSync->Todo("_cellSyncLFQueueDetachLv2EventQueue(spus_addr=0x%x, num=%d, queue_addr=0x%x)", spus.GetAddr(), num, queue.GetAddr()); - return CELL_OK; + + return syncLFQueueDetachLv2EventQueue(spus, num, queue); } void cellSync_init() diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 505e94d5ec..70d9c7823d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -153,4 +153,24 @@ struct CellSyncLFQueue } }; -static_assert(sizeof(CellSyncLFQueue) == 128, "CellSyncLFQueue: wrong size"); \ No newline at end of file +static_assert(sizeof(CellSyncLFQueue) == 128, "CellSyncLFQueue: wrong size"); + +s32 syncMutexInitialize(mem_ptr_t mutex); + +s32 syncBarrierInitialize(mem_ptr_t barrier, u16 total_count); + +s32 syncRwmInitialize(mem_ptr_t rwm, u32 buffer_addr, u32 buffer_size); + +s32 syncQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth); + +s32 syncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr); +s32 syncLFQueueGetPushPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue); +s32 syncLFQueueGetPushPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue); +s32 syncLFQueueCompletePushPointer(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal); +s32 syncLFQueueCompletePushPointer2(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal); +s32 syncLFQueueGetPopPointer(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32, u32 useEventQueue); +s32 syncLFQueueGetPopPointer2(mem_ptr_t queue, s32& pointer, u32 isBlocking, u32 useEventQueue); +s32 syncLFQueueCompletePopPointer(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal, u32 noQueueFull); +s32 syncLFQueueCompletePopPointer2(mem_ptr_t queue, s32 pointer, const std::function fpSendSignal, u32 noQueueFull); +s32 syncLFQueueAttachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue); +s32 syncLFQueueDetachLv2EventQueue(mem32_ptr_t spus, u32 num, mem_ptr_t queue); From afe984ca29d29bc36a42da0bc6135b1fe8a47022 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 19 Aug 2014 02:33:21 +0400 Subject: [PATCH 368/499] Small fix --- rpcs3/Emu/Cell/PPUThread.cpp | 5 ++++- rpcs3/Emu/Cell/PPUThread.h | 2 +- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 22 ++++++++++++---------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index c4907dc6e3..9aace5b6d1 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -220,13 +220,15 @@ int FPRdouble::Cmp(PPCdouble a, PPCdouble b) return CR_SO; } -u64 PPUThread::FastCall(u64 addr, u64 arg1, u64 arg2, u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7, u64 arg8) +u64 PPUThread::FastCall(u64 addr, u64 rtoc, u64 arg1, u64 arg2, u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7, u64 arg8) { auto old_status = m_status; auto old_PC = PC; auto old_LR = LR; + auto old_rtoc = GPR[2]; PC = addr; + GPR[2] = rtoc; GPR[3] = arg1; GPR[4] = arg2; GPR[5] = arg3; @@ -239,6 +241,7 @@ u64 PPUThread::FastCall(u64 addr, u64 arg1, u64 arg2, u64 arg3, u64 arg4, u64 ar Task(); + GPR[2] = old_rtoc; LR = old_LR; PC = old_PC; m_status = old_status; diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 7d8cd62197..15c1a95339 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -842,7 +842,7 @@ public: public: virtual void InitRegs(); virtual u64 GetFreeStackSize() const; - u64 FastCall(u64 addr, u64 arg1 = 0, u64 arg2 = 0, u64 arg3 = 0, u64 arg4 = 0, u64 arg5 = 0, u64 arg6 = 0, u64 arg7 = 0, u64 arg8 = 0); + u64 FastCall(u64 addr, u64 rtoc, u64 arg1 = 0, u64 arg2 = 0, u64 arg3 = 0, u64 arg4 = 0, u64 arg5 = 0, u64 arg6 = 0, u64 arg7 = 0, u64 arg8 = 0); void FastStop(); protected: diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 00f6c79479..ab2a31d936 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -13,7 +13,8 @@ Module *cellSync = nullptr; #ifdef PRX_DEBUG #include "rpcs3.h" #include "prx_libsre.h" -u32 libsre = 0; +u32 libsre; +u32 libsre_rtoc; #endif s32 syncMutexInitialize(mem_ptr_t mutex) @@ -1078,7 +1079,7 @@ void syncLFQueueInit(mem_ptr_t queue, u32 buffer_addr, u32 size s32 syncLFQueueInitialize(mem_ptr_t queue, u32 buffer_addr, u32 size, u32 depth, CellSyncQueueDirection direction, u32 eaSignal_addr) { #ifdef PRX_DEBUG_XXX - return GetCurrentPPUThread().FastCall(libsre + 0x205C, queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); + return GetCurrentPPUThread().FastCall(libsre + 0x205C, libsre_rtoc, queue.GetAddr(), buffer_addr, size, depth, direction, eaSignal_addr); #else if (!queue) @@ -1522,7 +1523,7 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { #ifdef PRX_DEBUG_XXX - res = GetCurrentPPUThread().FastCall(libsre + 0x24B0, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x24B0, libsre_rtoc, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); position = position_v->ToLE(); #else res = syncLFQueueGetPushPointer(queue, position, isBlocking, 0); @@ -1531,7 +1532,7 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, else { #ifdef PRX_DEBUG - res = GetCurrentPPUThread().FastCall(libsre + 0x3050, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x3050, libsre_rtoc, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); position = position_v->ToLE(); #else res = syncLFQueueGetPushPointer2(queue, position, isBlocking, 0); @@ -1566,7 +1567,7 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { #ifdef PRX_DEBUG_XXX - res = GetCurrentPPUThread().FastCall(libsre + 0x26C0, queue.GetAddr(), position, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x26C0, libsre_rtoc, queue.GetAddr(), position, 0); #else res = syncLFQueueCompletePushPointer(queue, position, nullptr); #endif @@ -1574,7 +1575,7 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, else { #ifdef PRX_DEBUG - res = GetCurrentPPUThread().FastCall(libsre + 0x355C, queue.GetAddr(), position, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x355C, libsre_rtoc, queue.GetAddr(), position, 0); #else res = syncLFQueueCompletePushPointer2(queue, position, nullptr); #endif @@ -1913,7 +1914,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { #ifdef PRX_DEBUG_XXX - res = GetCurrentPPUThread().FastCall(libsre + 0x2A90, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x2A90, libsre_rtoc, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0, 0); position = position_v->ToLE(); #else res = syncLFQueueGetPopPointer(queue, position, isBlocking, 0, 0); @@ -1922,7 +1923,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u else { #ifdef PRX_DEBUG - res = GetCurrentPPUThread().FastCall(libsre + 0x39AC, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x39AC, libsre_rtoc, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); position = position_v->ToLE(); #else res = syncLFQueueGetPopPointer2(queue, position, isBlocking, 0); @@ -1954,7 +1955,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { #ifdef PRX_DEBUG_XXX - res = GetCurrentPPUThread().FastCall(libsre + 0x2CA8, queue.GetAddr(), position, 0, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x2CA8, libsre_rtoc, queue.GetAddr(), position, 0, 0); #else res = syncLFQueueCompletePopPointer(queue, position, nullptr, 0); #endif @@ -1962,7 +1963,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u else { #ifdef PRX_DEBUG - res = GetCurrentPPUThread().FastCall(libsre + 0x3EB8, queue.GetAddr(), position, 0, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x3EB8, libsre_rtoc, queue.GetAddr(), position, 0, 0); #else res = syncLFQueueCompletePopPointer2(queue, position, nullptr, 0); #endif @@ -2207,6 +2208,7 @@ void cellSync_init() { libsre = Memory.PRXMem.AllocAlign(sizeof(libsre_data), 4096); memcpy(Memory + libsre, libsre_data, sizeof(libsre_data)); + libsre_rtoc = libsre + 0x399B0; }); #endif } From 529d0dbbbe24a2518def6842e564f67eb3e2f919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Tue, 19 Aug 2014 02:10:29 +0200 Subject: [PATCH 369/499] Vertex Data base offset/index Fixed incorrect default value in RSXTexture. --- rpcs3/Emu/RSX/RSXTexture.cpp | 2 +- rpcs3/Emu/RSX/RSXThread.cpp | 19 +++++++++++++++++-- rpcs3/Emu/RSX/RSXThread.h | 13 +++++++++---- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/RSX/RSXTexture.cpp b/rpcs3/Emu/RSX/RSXTexture.cpp index 0c4a8a100f..c23c9499cf 100644 --- a/rpcs3/Emu/RSX/RSXTexture.cpp +++ b/rpcs3/Emu/RSX/RSXTexture.cpp @@ -26,7 +26,7 @@ void RSXTexture::Init() // Address methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*32)] = ((/*wraps*/1) | ((/*anisoBias*/0) << 4) | ((/*wrapt*/1) << 8) | ((/*unsignedRemap*/0) << 12) | - ((/*wrapr*/2) << 16) | ((/*gamma*/0) << 20) |((/*signedRemap*/0) << 24) | ((/*zfunc*/0) << 28)); + ((/*wrapr*/3) << 16) | ((/*gamma*/0) << 20) |((/*signedRemap*/0) << 24) | ((/*zfunc*/0) << 28)); // Control0 methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*32)] = diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 03a0f7b5bf..708a157839 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -73,7 +73,7 @@ void RSXVertexData::Reset() data.clear(); } -void RSXVertexData::Load(u32 start, u32 count) +void RSXVertexData::Load(u32 start, u32 count, u32 baseOffset, u32 baseIndex=0) { if(!addr) return; @@ -83,7 +83,7 @@ void RSXVertexData::Load(u32 start, u32 count) for(u32 i=start; i= 2) { + m_vertex_data_base_index = ARGS(1); + } + } + break; + + case NV4097_SET_VERTEX_DATA_BASE_INDEX: + { + m_vertex_data_base_index = ARGS(0); + } + break; + case NV4097_SET_BEGIN_END: { const u32 a0 = ARGS(0); diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 8e8f592362..eb2c85e246 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -36,7 +36,7 @@ struct RSXVertexData void Reset(); bool IsEnabled() const { return size > 0; } - void Load(u32 start, u32 count); + void Load(u32 start, u32 count, u32 baseOffset, u32 baseIndex); u32 GetTypeSize(); }; @@ -412,6 +412,10 @@ public: u8 m_shader_window_origin; u16 m_shader_window_pixel_centers; + // Vertex Data + u32 m_vertex_data_base_offset; + u32 m_vertex_data_base_index; + // Front face bool m_set_front_face; u32 m_front_face; @@ -505,8 +509,9 @@ protected: m_line_width = 1.0; m_line_stipple_pattern = 0xffff; m_line_stipple_factor = 1; - for (size_t i = 0; i < 32; i++) - { + m_vertex_data_base_offset = 0; + m_vertex_data_base_index = 0; + for (size_t i = 0; i < 32; i++) { m_polygon_stipple_pattern[i] = 0xFFFFFFFF; } @@ -624,7 +629,7 @@ protected: { if(!m_vertex_data[i].IsEnabled()) continue; - m_vertex_data[i].Load(first, count); + m_vertex_data[i].Load(first, count, m_vertex_data_base_offset, m_vertex_data_base_index); } } From 538498f21f95c9b6a1256a0db852ea2253e7d2f5 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 19 Aug 2014 02:48:11 -0400 Subject: [PATCH 370/499] GLGSRender: Fix always false error condition --- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 2cc6aff591..d4c0bfc3c3 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -203,7 +203,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw) GL_FALSE, }; - if (m_vertex_data[i].type < 1 && m_vertex_data[i].type > 7) { + if (m_vertex_data[i].type < 1 || m_vertex_data[i].type > 7) { LOG_ERROR(RSX, "GLGSRender::EnableVertexData: Bad vertex data type (%d)!", m_vertex_data[i].type); } From 2e6ce1c94a9140c32b5f7577d8ea4b4eb42f9daf Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 19 Aug 2014 02:58:26 -0400 Subject: [PATCH 371/499] cellL10n: Fix mismatching delete call, should be delete[] --- rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index 704570a99c..b9eb3f6739 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -189,12 +189,15 @@ int _OEM2Wide(unsigned int oem_code, const std::string src, std::wstring& dst) { //Such length returned should include the '\0' character. int length = MultiByteToWideChar(oem_code, 0, src.c_str(), -1, NULL, 0); - wchar_t *store = new wchar_t[length]; - memset(store, 0, (length)*sizeof(wchar_t)); + wchar_t *store = new wchar_t[length](); + MultiByteToWideChar(oem_code, 0, src.c_str(), -1, (LPWSTR)store, length); std::wstring result(store); dst = result; - delete store; store = NULL; + + delete[] store; + store = nullptr; + return length - 1; } @@ -203,12 +206,15 @@ int _Wide2OEM(unsigned int oem_code, const std::wstring src, std::string& dst) { //Such length returned should include the '\0' character. int length = WideCharToMultiByte(oem_code, 0, src.c_str(), -1, NULL, 0, NULL, NULL); - char *store = new char[length]; - memset(store, 0, (length)*sizeof(char)); + char *store = new char[length](); + WideCharToMultiByte(oem_code, 0, src.c_str(), -1, store, length, NULL, NULL); std::string result(store); dst = result; - delete store; store = NULL; + + delete[] store; + store = nullptr; + return length - 1; } From d53327f8bb47524b27c1c998bf646d635a7c44cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sat, 26 Jul 2014 05:31:46 +0200 Subject: [PATCH 372/499] Updated IDManager ID member m_flags has been replaced with m_type, which stores the type of the object referenced by the ID and added std::set to the ID manager to group relevant IDs in order to use them later in some lv2/sys_process functions and the Kernel Explorer. --- {Utilities => rpcs3/Emu}/IdManager.h | 96 +++++++++++++++++------- rpcs3/Emu/SysCalls/Modules.h | 8 +- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 2 +- rpcs3/Emu/SysCalls/SysCalls.h | 4 +- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 29 +++---- rpcs3/Emu/SysCalls/lv2/sys_cond.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_memory.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 78 +++++++++---------- rpcs3/Emu/SysCalls/lv2/sys_process.h | 28 ------- rpcs3/Emu/SysCalls/lv2/sys_prx.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 6 +- rpcs3/emucore.vcxproj | 2 +- rpcs3/emucore.vcxproj.filters | 6 +- rpcs3/stdafx.h | 2 +- 21 files changed, 154 insertions(+), 131 deletions(-) rename {Utilities => rpcs3/Emu}/IdManager.h (55%) diff --git a/Utilities/IdManager.h b/rpcs3/Emu/IdManager.h similarity index 55% rename from Utilities/IdManager.h rename to rpcs3/Emu/IdManager.h index 9d72c65476..da9174f4b8 100644 --- a/Utilities/IdManager.h +++ b/rpcs3/Emu/IdManager.h @@ -3,7 +3,32 @@ #define rID_ANY -1 // was wxID_ANY -typedef u32 ID_TYPE; +enum IDType +{ + // Special objects + TYPE_MEM, + TYPE_MUTEX, + TYPE_COND, + TYPE_RWLOCK, + TYPE_INTR_TAG, + TYPE_INTR_SERVICE_HANDLE, + TYPE_EVENT_QUEUE, + TYPE_EVENT_PORT, + TYPE_TRACE, + TYPE_SPUIMAGE, + TYPE_PRX, + TYPE_SPUPORT, + TYPE_LWMUTEX, + TYPE_TIMER, + TYPE_SEMAPHORE, + TYPE_FS_FILE, + TYPE_FS_DIR, + TYPE_LWCOND, + TYPE_EVENT_FLAG, + + // Generic + TYPE_OTHER, +}; class IDData { @@ -37,13 +62,13 @@ public: struct ID { std::string m_name; - u32 m_attr; IDData* m_data; + IDType m_type; template - ID(const std::string& name, T* data, const u32 attr) + ID(const std::string& name, T* data, const IDType type) : m_name(name) - , m_attr(attr) + , m_type(type) { m_data = new IDData(data, [](void *ptr) -> void { delete (T*)ptr; }); } @@ -55,14 +80,14 @@ struct ID ID(ID&& other) { m_name = other.m_name; - m_attr = other.m_attr; + m_type = other.m_type; m_data = other.m_data; other.m_data = nullptr; } ID& operator=(ID&& other) { std::swap(m_name,other.m_name); - std::swap(m_attr,other.m_attr); + std::swap(m_type,other.m_type); std::swap(m_data,other.m_data); return *this; } @@ -75,13 +100,14 @@ struct ID class IdManager { - static const ID_TYPE s_first_id = 1; - static const ID_TYPE s_max_id = -1; + static const u32 s_first_id = 1; + static const u32 s_max_id = -1; - std::unordered_map m_id_map; + std::unordered_map m_id_map; + std::set m_types[TYPE_OTHER]; std::mutex m_mtx_main; - ID_TYPE m_cur_id; + u32 m_cur_id; public: IdManager() : m_cur_id(s_first_id) @@ -93,7 +119,7 @@ public: Clear(); } - bool CheckID(const ID_TYPE id) + bool CheckID(const u32 id) { std::lock_guard lock(m_mtx_main); @@ -104,8 +130,7 @@ public: { std::lock_guard lock(m_mtx_main); - for(auto& i : m_id_map) - { + for(auto& i : m_id_map) { i.second.Kill(); } @@ -118,16 +143,19 @@ public: = char #endif > - ID_TYPE GetNewID(const std::string& name = "", T* data = nullptr, const u32 attr = 0) + u32 GetNewID(const std::string& name = "", T* data = nullptr, const IDType type = TYPE_OTHER) { std::lock_guard lock(m_mtx_main); - m_id_map[m_cur_id] = ID(name, data, attr); + m_id_map[m_cur_id] = ID(name, data, type); + if (type < TYPE_OTHER) { + m_types[type].insert(m_cur_id); + } return m_cur_id++; } - ID& GetID(const ID_TYPE id) + ID& GetID(const u32 id) { std::lock_guard lock(m_mtx_main); @@ -135,14 +163,12 @@ public: } template - bool GetIDData(const ID_TYPE id, T*& result) + bool GetIDData(const u32 id, T*& result) { std::lock_guard lock(m_mtx_main); auto f = m_id_map.find(id); - - if(f == m_id_map.end()) - { + if (f == m_id_map.end()) { return false; } @@ -153,27 +179,45 @@ public: bool HasID(const s64 id) { - { - std::lock_guard lock(m_mtx_main); + std::lock_guard lock(m_mtx_main); - if(id == rID_ANY) - return m_id_map.begin() != m_id_map.end(); + if(id == rID_ANY) { + return m_id_map.begin() != m_id_map.end(); } return CheckID(id); } - bool RemoveID(const ID_TYPE id) + bool RemoveID(const u32 id) { std::lock_guard lock(m_mtx_main); auto item = m_id_map.find(id); - if(item == m_id_map.end()) return false; + if (item == m_id_map.end()) { + return false; + } + if (item->second.m_type < TYPE_OTHER) { + m_types[item->second.m_type].erase(id); + } item->second.Kill(); m_id_map.erase(item); return true; } + + u32 GetTypeCount(IDType type) + { + if (type < TYPE_OTHER) { + return m_types[type].size(); + } + return 1; + } + + const std::set& GetTypeIDs(IDType type) + { + assert(type < TYPE_OTHER); + return m_types[type]; + } }; diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index a7835db354..14f0bb3522 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -90,23 +90,23 @@ public: return true; } - template bool CheckId(u32 id, T*& data, u32& attr) + template bool CheckId(u32 id, T*& data, IDType& type) { ID* id_data; if(!CheckID(id, id_data)) return false; data = id_data->m_data->get(); - attr = id_data->m_attr; + type = id_data->m_type; return true; } bool CheckID(u32 id, ID*& _id) const; template - u32 GetNewId(T* data, u8 flags = 0) + u32 GetNewId(T* data, IDType type = TYPE_OTHER) { - return Emu.GetIdManager().GetNewID(GetName(), data, flags); + return Emu.GetIdManager().GetNewID(GetName(), data, type); } template __forceinline void AddFunc(u32 id, T func); diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index eb97c00e58..032da5f98f 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -128,7 +128,7 @@ int cellFsSdataOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) int ret = sdata_unpack(path, unpacked_path); if (ret) return ret; - fd = sys_fs->GetNewId(Emu.GetVFS().OpenFile(unpacked_path, vfsRead), flags); + fd = sys_fs->GetNewId(Emu.GetVFS().OpenFile(unpacked_path, vfsRead), TYPE_FS_FILE); return CELL_OK;*/ diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index ae82066d4e..e7b20635b4 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -78,9 +78,9 @@ public: } template - u32 GetNewId(T* data, u8 flags = 0) + u32 GetNewId(T* data, IDType type = TYPE_OTHER) { - return Emu.GetIdManager().GetNewID(GetName(), data, flags); + return Emu.GetIdManager().GetNewID(GetName(), data, type); } }; diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 8446a195f3..76ab51955f 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -13,12 +13,6 @@ extern Module *sys_fs; -enum -{ - IDFlag_File = 1, - IDFlag_Dir = 2, -}; - struct FsRingBufferConfig { CellFsRingBuffer m_ring_buffer; // Currently unused after assignment @@ -117,7 +111,7 @@ s32 cellFsOpen(u32 path_addr, s32 flags, mem32_t fd, mem32_t arg, u64 size) return CELL_ENOENT; } - fd = sys_fs->GetNewId(stream, IDFlag_File); + fd = sys_fs->GetNewId(stream, TYPE_FS_FILE); LOG_NOTICE(HLE, "\"%s\" opened: fd = %d", path.c_str(), fd.GetValue()); return CELL_OK; @@ -181,7 +175,7 @@ s32 cellFsOpendir(u32 path_addr, mem32_t fd) return CELL_ENOENT; } - fd = sys_fs->GetNewId(dir, IDFlag_Dir); + fd = sys_fs->GetNewId(dir, TYPE_FS_DIR); return CELL_OK; } @@ -263,9 +257,11 @@ s32 cellFsFstat(u32 fd, mem_ptr_t sb) { sys_fs->Log("cellFsFstat(fd=%d, sb_addr: 0x%x)", fd, sb.GetAddr()); - u32 attr; + IDType type; vfsStream* file; - if(!sys_fs->CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; + if(!sys_fs->CheckId(fd, file, type) || type != TYPE_FS_FILE) { + return CELL_ESRCH; + } sb->st_mode = CELL_FS_S_IRUSR | CELL_FS_S_IWUSR | CELL_FS_S_IXUSR | @@ -398,9 +394,11 @@ s32 cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos) return CELL_EINVAL; } - u32 attr; + IDType type; vfsStream* file; - if(!sys_fs->CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; + if (!sys_fs->CheckId(fd, file, type) || type != TYPE_FS_FILE) { + return CELL_ESRCH; + } pos = file->Seek(offset, seek_mode); return CELL_OK; } @@ -408,9 +406,12 @@ s32 cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos) s32 cellFsFtruncate(u32 fd, u64 size) { sys_fs->Log("cellFsFtruncate(fd=%d, size=%lld)", fd, size); - u32 attr; + + IDType type; vfsStream* file; - if(!sys_fs->CheckId(fd, file, attr) || attr != IDFlag_File) return CELL_ESRCH; + if (!sys_fs->CheckId(fd, file, type) || type != TYPE_FS_FILE) { + return CELL_ESRCH; + } u64 initialSize = file->GetSize(); if (initialSize < size) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp index b90ac46e18..e169fcc740 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp @@ -32,7 +32,7 @@ s32 sys_cond_create(mem32_t cond_id, u32 mutex_id, mem_ptr_t } Cond* cond = new Cond(mutex, attr->name_u64); - u32 id = sys_cond.GetNewId(cond); + u32 id = sys_cond.GetNewId(cond, TYPE_COND); cond_id = id; mutex->cond_count++; sys_cond.Warning("*** condition created [%s] (mutex_id=%d): id = %d", std::string(attr->name, 8).c_str(), mutex_id, cond_id.GetValue()); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index 52c4703e6c..bf4b722388 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -50,7 +50,7 @@ s32 sys_event_queue_create(mem32_t equeue_id, mem_ptr_t at return CELL_EAGAIN; } - equeue_id = sys_event.GetNewId(eq); + equeue_id = sys_event.GetNewId(eq, TYPE_EVENT_QUEUE); sys_event.Warning("*** event_queue created [%s] (protocol=0x%x, type=0x%x): id = %d", std::string(attr->name, 8).c_str(), (u32)attr->protocol, (int)attr->type, equeue_id.GetValue()); @@ -237,7 +237,7 @@ s32 sys_event_port_create(mem32_t eport_id, int port_type, u64 name) } EventPort* eport = new EventPort(); - u32 id = sys_event.GetNewId(eport); + u32 id = sys_event.GetNewId(eport, TYPE_EVENT_PORT); eport->name = name ? name : ((u64)sys_process_getpid() << 32) | (u64)id; eport_id = id; sys_event.Warning("*** sys_event_port created: id = %d", id); @@ -360,4 +360,4 @@ s32 sys_event_port_send(u32 eport_id, u64 data1, u64 data2, u64 data3) } return CELL_OK; -} \ No newline at end of file +} diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index e7bdb22458..57943453bb 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -14,7 +14,7 @@ s32 sys_lwcond_create(mem_ptr_t lwcond, mem_ptr_t l sys_lwcond.Log("sys_lwcond_create(lwcond_addr=0x%x, lwmutex_addr=0x%x, attr_addr=0x%x)", lwcond.GetAddr(), lwmutex.GetAddr(), attr.GetAddr()); - u32 id = sys_lwcond.GetNewId(new Lwcond(attr->name_u64)); + u32 id = sys_lwcond.GetNewId(new Lwcond(attr->name_u64), TYPE_LWCOND); lwcond->lwmutex = lwmutex.GetAddr(); lwcond->lwcond_queue = id; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index 958142a75a..267b68a0d0 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -36,7 +36,7 @@ s32 sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_tpad = 0; lwmutex->recursive_count = 0; - u32 sq_id = sc_lwmutex.GetNewId(new SleepQueue(attr->name_u64)); + u32 sq_id = sc_lwmutex.GetNewId(new SleepQueue(attr->name_u64), TYPE_LWMUTEX); lwmutex->sleep_queue = sq_id; sc_lwmutex.Warning("*** lwmutex created [%s] (attribute=0x%x): sq_id = %d", diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp index dd16cae520..936b5ff0ac 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp @@ -122,7 +122,7 @@ s32 sys_memory_container_create(mem32_t cid, u32 yield_size) // Wrap the allocated memory in a memory container. MemoryContainerInfo *ct = new MemoryContainerInfo(addr, yield_size); - cid = sc_mem.GetNewId(ct); + cid = sc_mem.GetNewId(ct, TYPE_MEM); sc_mem.Warning("*** memory_container created(addr=0x%llx): id = %d", addr, cid.GetValue()); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp index 3a041eb0a7..7555a5da0e 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp @@ -121,7 +121,7 @@ s32 sys_mmapper_allocate_memory_from_container(u32 size, u32 cid, u64 flags, mem ct->size = size; // Generate a new mem ID. - mem_id = sys_mmapper.GetNewId(new mmapper_info(ct->addr, ct->size, flags)); + mem_id = sys_mmapper.GetNewId(new mmapper_info(ct->addr, ct->size, flags), TYPE_MEM); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index fed9b6d3cd..e9817bd0dd 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -38,7 +38,7 @@ s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) u32 tid = GetCurrentPPUThread().GetId(); Mutex* mutex = new Mutex((u32)attr->protocol, is_recursive, attr->name_u64); - u32 id = sys_mtx.GetNewId(mutex); + u32 id = sys_mtx.GetNewId(mutex, TYPE_MUTEX); mutex->m_mutex.lock(tid); mutex->id = id; mutex_id = id; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp index f36e417ec2..02ff2174b6 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -8,8 +8,6 @@ SysCallBase sc_p("Process"); -sysProcessObjects_t procObjects; - s32 process_getpid() { // TODO: get current process id @@ -147,23 +145,26 @@ s32 sys_process_get_number_of_object(u32 object, mem32_t nump) switch(object) { - case SYS_MEM_OBJECT: nump = procObjects.mem_objects.size(); break; - case SYS_MUTEX_OBJECT: nump = procObjects.mutex_objects.size(); break; - case SYS_COND_OBJECT: nump = procObjects.cond_objects.size(); break; - case SYS_RWLOCK_OBJECT: nump = procObjects.rwlock_objects.size(); break; - case SYS_INTR_TAG_OBJECT: nump = procObjects.intr_tag_objects.size(); break; - case SYS_INTR_SERVICE_HANDLE_OBJECT: nump = procObjects.intr_service_handle_objects.size(); break; - case SYS_EVENT_QUEUE_OBJECT: nump = procObjects.event_queue_objects.size(); break; - case SYS_EVENT_PORT_OBJECT: nump = procObjects.event_port_objects.size(); break; - case SYS_TRACE_OBJECT: nump = procObjects.trace_objects.size(); break; - case SYS_SPUIMAGE_OBJECT: nump = procObjects.spuimage_objects.size(); break; - case SYS_PRX_OBJECT: nump = procObjects.prx_objects.size(); break; - case SYS_SPUPORT_OBJECT: nump = procObjects.spuport_objects.size(); break; - case SYS_LWMUTEX_OBJECT: nump = procObjects.lwmutex_objects.size(); break; - case SYS_TIMER_OBJECT: nump = procObjects.timer_objects.size(); break; - case SYS_SEMAPHORE_OBJECT: nump = procObjects.semaphore_objects.size(); break; - case SYS_FS_FD_OBJECT: nump = procObjects.fs_fd_objects.size(); break; - case SYS_LWCOND_OBJECT: nump = procObjects.lwcond_objects.size(); break; + case SYS_MEM_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_MEM); break; + case SYS_MUTEX_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_MUTEX); break; + case SYS_COND_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_COND); break; + case SYS_RWLOCK_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_RWLOCK); break; + case SYS_INTR_TAG_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_INTR_TAG); break; + case SYS_INTR_SERVICE_HANDLE_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_INTR_SERVICE_HANDLE); break; + case SYS_EVENT_QUEUE_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_EVENT_QUEUE); break; + case SYS_EVENT_PORT_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_EVENT_PORT); break; + case SYS_TRACE_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_TRACE); break; + case SYS_SPUIMAGE_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_SPUIMAGE); break; + case SYS_PRX_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_PRX); break; + case SYS_SPUPORT_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_SPUPORT); break; + case SYS_LWMUTEX_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_LWMUTEX); break; + case SYS_TIMER_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_TIMER); break; + case SYS_SEMAPHORE_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_SEMAPHORE); break; + case SYS_LWCOND_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_LWCOND); break; + case SYS_EVENT_FLAG_OBJECT: nump = Emu.GetIdManager().GetTypeCount(TYPE_EVENT_FLAG); break; + case SYS_FS_FD_OBJECT: + nump = Emu.GetIdManager().GetTypeCount(TYPE_FS_FILE) + Emu.GetIdManager().GetTypeCount(TYPE_FS_DIR); + break; default: return CELL_EINVAL; @@ -180,31 +181,32 @@ s32 sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_siz switch(object) { -#define ADD_OBJECTS(objects) { \ +#define ADD_OBJECTS(type) { \ u32 i=0; \ + const auto& objects = Emu.GetIdManager().GetTypeIDs(type); \ for(auto id=objects.begin(); i mem_objects; - std::set mutex_objects; - std::set cond_objects; - std::set rwlock_objects; - std::set intr_tag_objects; - std::set intr_service_handle_objects; - std::set event_queue_objects; - std::set event_port_objects; - std::set trace_objects; - std::set spuimage_objects; - std::set prx_objects; - std::set spuport_objects; - std::set lwmutex_objects; - std::set timer_objects; - std::set semaphore_objects; - std::set fs_fd_objects; - std::set lwcond_objects; - std::set event_flag_objects; -}; - -// Extern -extern sysProcessObjects_t procObjects; - // Auxiliary functions s32 process_getpid(); s32 process_get_sdk_version(u32 pid, s32& ver); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index 2abbc26226..2d46a178fb 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -25,7 +25,7 @@ s32 sys_prx_load_module(u32 path_addr, u64 flags, mem_ptr_t attr return CELL_EINVAL; } - rw_lock_id = sys_rwlock.GetNewId(new RWLock((u32)attr->attr_protocol, attr->name_u64)); + rw_lock_id = sys_rwlock.GetNewId(new RWLock((u32)attr->attr_protocol, attr->name_u64), TYPE_RWLOCK); sys_rwlock.Warning("*** rwlock created [%s] (protocol=0x%x): id = %d", std::string(attr->name, 8).c_str(), (u32)attr->attr_protocol, rw_lock_id.GetValue()); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index 243f578076..d402105eee 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -35,7 +35,7 @@ s32 sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i default: sys_sem.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; } - sem = sys_sem.GetNewId(new Semaphore(initial_count, max_count, attr->protocol, attr->name_u64)); + sem = sys_sem.GetNewId(new Semaphore(initial_count, max_count, attr->protocol, attr->name_u64), TYPE_SEMAPHORE); LOG_NOTICE(HLE, "*** semaphore created [%s] (protocol=0x%x): id = %d", std::string(attr->name, 8).c_str(), (u32)attr->protocol, sem.GetValue()); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index b479783bfa..01f8ec7526 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -11,7 +11,11 @@ s32 sys_timer_create(mem32_t timer_id) { sys_timer.Warning("sys_timer_create(timer_id_addr=0x%x)", timer_id.GetAddr()); - timer_id = sys_timer.GetNewId(new timer); + if (!timer_id.IsGood()) { + return CELL_EFAULT; + } + + timer_id = sys_timer.GetNewId(new timer, TYPE_TIMER); return CELL_OK; } diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 8c74b31988..7ce030b02a 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -218,7 +218,6 @@ - @@ -291,6 +290,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index db572c65f9..271fa80725 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -937,9 +937,6 @@ Utilities - - Utilities - Utilities @@ -1158,6 +1155,9 @@ Emu\SysCalls\Modules + + + Emu \ No newline at end of file diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 0b5741fae2..ff93662fa2 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -63,7 +63,7 @@ typedef int64_t s64; #include "Utilities/rMsgBox.h" #include "Utilities/Thread.h" #include "Utilities/Timer.h" -#include "Utilities/IdManager.h" +#include "Emu/IdManager.h" #define _PRGNAME_ "RPCS3" #define _PRGVER_ "0.0.0.5" From d3e9e1296ca852abad04936a6eff33037b367cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Sat, 26 Jul 2014 07:51:45 +0200 Subject: [PATCH 373/499] Kernel Explorer implemented --- rpcs3/Emu/IdManager.h | 13 +-- rpcs3/Gui/KernelExplorer.cpp | 167 +++++++++++++++++++++++++++++++++++ rpcs3/Gui/KernelExplorer.h | 15 ++++ rpcs3/Gui/MainFrame.cpp | 24 +++-- rpcs3/Gui/MainFrame.h | 1 + rpcs3/rpcs3.vcxproj | 2 + rpcs3/rpcs3.vcxproj.filters | 6 ++ 7 files changed, 216 insertions(+), 12 deletions(-) create mode 100644 rpcs3/Gui/KernelExplorer.cpp create mode 100644 rpcs3/Gui/KernelExplorer.h diff --git a/rpcs3/Emu/IdManager.h b/rpcs3/Emu/IdManager.h index da9174f4b8..b1170cce04 100644 --- a/rpcs3/Emu/IdManager.h +++ b/rpcs3/Emu/IdManager.h @@ -26,7 +26,7 @@ enum IDType TYPE_LWCOND, TYPE_EVENT_FLAG, - // Generic + // Any other objects TYPE_OTHER, }; @@ -104,7 +104,7 @@ class IdManager static const u32 s_max_id = -1; std::unordered_map m_id_map; - std::set m_types[TYPE_OTHER]; + std::set m_types[TYPE_OTHER]; std::mutex m_mtx_main; u32 m_cur_id; @@ -179,12 +179,13 @@ public: bool HasID(const s64 id) { - std::lock_guard lock(m_mtx_main); + { + std::lock_guard lock(m_mtx_main); - if(id == rID_ANY) { - return m_id_map.begin() != m_id_map.end(); + if(id == rID_ANY) { + return m_id_map.begin() != m_id_map.end(); + } } - return CheckID(id); } diff --git a/rpcs3/Gui/KernelExplorer.cpp b/rpcs3/Gui/KernelExplorer.cpp new file mode 100644 index 0000000000..711e3f4df5 --- /dev/null +++ b/rpcs3/Gui/KernelExplorer.cpp @@ -0,0 +1,167 @@ +#include "stdafx.h" +#include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" + +#include "KernelExplorer.h" + +KernelExplorer::KernelExplorer(wxWindow* parent) + : wxFrame(parent, wxID_ANY, "Kernel Explorer", wxDefaultPosition, wxSize(700, 450)) +{ + this->SetBackgroundColour(wxColour(240,240,240)); //This fix the ugly background color under Windows + wxBoxSizer* s_panel = new wxBoxSizer(wxVERTICAL); + + // Buttons + wxBoxSizer* box_buttons = new wxBoxSizer(wxHORIZONTAL); + wxButton* b_refresh = new wxButton(this, wxID_ANY, "Refresh"); + box_buttons->AddSpacer(10); + box_buttons->Add(b_refresh); + box_buttons->AddSpacer(10); + + wxStaticBoxSizer* box_tree = new wxStaticBoxSizer(wxHORIZONTAL, this, "Kernel"); + m_tree = new wxTreeCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(600,300)); + box_tree->Add(m_tree); + + // Merge and display everything + s_panel->AddSpacer(10); + s_panel->Add(box_buttons); + s_panel->AddSpacer(10); + s_panel->Add(box_tree, 0, 0, 100); + s_panel->AddSpacer(10); + SetSizerAndFit(s_panel); + + // Events + b_refresh->Bind(wxEVT_BUTTON, &KernelExplorer::OnRefresh, this); + + // Fill the wxTreeCtrl + Update(); +}; + +void KernelExplorer::Update() +{ + int count; + char name[4096]; + + m_tree->DeleteAllItems(); + auto& root = m_tree->AddRoot("Process, ID = 0x00000001, Total Memory Usage = 0x0C8A9000 (200.7 MB)"); + + // TODO: PPU Threads + // TODO: SPU/RawSPU Threads + // TODO: FileSystem + + // Semaphores + count = Emu.GetIdManager().GetTypeCount(TYPE_SEMAPHORE); + if (count) { + sprintf(name, "Semaphores (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_SEMAPHORE); + for (const auto& id : objects) { + sprintf(name, "Semaphore: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + + // Mutexes + count = Emu.GetIdManager().GetTypeCount(TYPE_MUTEX); + if (count) { + sprintf(name, "Mutexes (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_MUTEX); + for (const auto& id : objects) { + sprintf(name, "Mutex: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + + // Light Weight Mutexes + count = Emu.GetIdManager().GetTypeCount(TYPE_LWMUTEX); + if (count) { + sprintf(name, "Light Weight Mutexes (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_LWMUTEX); + for (const auto& id : objects) { + sprintf(name, "LW Mutex: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + + // Condition Variables + count = Emu.GetIdManager().GetTypeCount(TYPE_COND); + if (count) { + sprintf(name, "Condition Variables (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_COND); + for (const auto& id : objects) { + sprintf(name, "Condition Variable: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + + // Light Weight Condition Variables + count = Emu.GetIdManager().GetTypeCount(TYPE_LWCOND); + if (count) { + sprintf(name, "Light Weight Condition Variables (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_LWCOND); + for (const auto& id : objects) { + sprintf(name, "LW Condition Variable: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + + // Event Queues + count = Emu.GetIdManager().GetTypeCount(TYPE_EVENT_QUEUE); + if (count) { + sprintf(name, "Event Queues (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_EVENT_QUEUE); + for (const auto& id : objects) { + sprintf(name, "Event Queue: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + + // Modules + count = Emu.GetIdManager().GetTypeCount(TYPE_PRX); + if (count) { + sprintf(name, "Modules (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_PRX); + sprintf(name, "Segment List (%d)", 2 * objects.size()); // TODO: Assuming 2 segments per PRX file is not good + m_tree->AppendItem(node, name); + for (const auto& id : objects) { + sprintf(name, "PRX: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + + // Memory Containers + count = Emu.GetIdManager().GetTypeCount(TYPE_MEM); + if (count) { + sprintf(name, "Memory Containers (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_MEM); + for (const auto& id : objects) { + sprintf(name, "Memory Container: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + // Event Flags + count = Emu.GetIdManager().GetTypeCount(TYPE_EVENT_FLAG); + if (count) { + sprintf(name, "Event Flags (%d)", count); + auto& node = m_tree->AppendItem(root, name); + auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_EVENT_FLAG); + for (const auto& id : objects) { + sprintf(name, "Event Flag: ID = 0x%08x", id); + m_tree->AppendItem(node, name); + } + } + + m_tree->Expand(root); +} + +void KernelExplorer::OnRefresh(wxCommandEvent& WXUNUSED(event)) +{ + Update(); +} diff --git a/rpcs3/Gui/KernelExplorer.h b/rpcs3/Gui/KernelExplorer.h new file mode 100644 index 0000000000..06b65eeeed --- /dev/null +++ b/rpcs3/Gui/KernelExplorer.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +class KernelExplorer : public wxFrame +{ + wxTreeCtrl* m_tree; + +public: + KernelExplorer(wxWindow* parent); + void Update(); + + void OnRefresh(wxCommandEvent& WXUNUSED(event)); +}; diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 69249a2fd8..fc79993072 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -4,20 +4,22 @@ #include "Emu/System.h" #include "rpcs3.h" #include "MainFrame.h" -#include "CompilerELF.h" -#include "MemoryViewer.h" -#include "RSXDebugger.h" -#include "PADManager.h" #include "git-version.h" #include "Ini.h" #include "Emu/RSX/sysutil_video.h" +#include "Gui/PADManager.h" #include "Gui/VHDDManager.h" #include "Gui/VFSManager.h" #include "Gui/AboutDialog.h" #include "Gui/GameViewer.h" +#include "Gui/CompilerELF.h" #include "Gui/AutoPauseManager.h" #include "Gui/SaveDataUtility.h" +#include "Gui/KernelExplorer.h" +#include "Gui/MemoryViewer.h" +#include "Gui/RSXDebugger.h" + #include #include "Loader/PKG.h" @@ -42,6 +44,7 @@ enum IDs id_config_autopause_manager, id_config_savedata_manager, id_tools_compiler, + id_tools_kernel_explorer, id_tools_memory_viewer, id_tools_rsx_debugger, id_help_about, @@ -98,6 +101,7 @@ MainFrame::MainFrame() wxMenu* menu_tools = new wxMenu(); menubar->Append(menu_tools, "Tools"); menu_tools->Append(id_tools_compiler, "ELF Compiler"); + menu_tools->Append(id_tools_kernel_explorer, "Kernel Explorer")->Enable(false); menu_tools->Append(id_tools_memory_viewer, "Memory Viewer")->Enable(false); menu_tools->Append(id_tools_rsx_debugger, "RSX Debugger")->Enable(false); @@ -134,6 +138,7 @@ MainFrame::MainFrame() Bind(wxEVT_MENU, &MainFrame::ConfigSaveData, this, id_config_savedata_manager); Bind(wxEVT_MENU, &MainFrame::OpenELFCompiler, this, id_tools_compiler); + Bind(wxEVT_MENU, &MainFrame::OpenKernelExplorer, this, id_tools_kernel_explorer); Bind(wxEVT_MENU, &MainFrame::OpenMemoryViewer, this, id_tools_memory_viewer); Bind(wxEVT_MENU, &MainFrame::OpenRSXDebugger, this, id_tools_rsx_debugger); @@ -635,6 +640,11 @@ void MainFrame::OpenELFCompiler(wxCommandEvent& WXUNUSED(event)) (new CompilerELF(this)) -> Show(); } +void MainFrame::OpenKernelExplorer(wxCommandEvent& WXUNUSED(event)) +{ + (new KernelExplorer(this)) -> Show(); +} + void MainFrame::OpenMemoryViewer(wxCommandEvent& WXUNUSED(event)) { (new MemoryViewerPanel(this)) -> Show(); @@ -732,8 +742,10 @@ void MainFrame::UpdateUI(wxCommandEvent& event) send_exit.Enable(enable_commands); // Tools - wxMenuItem& memory_viewer = *menubar.FindItem( id_tools_memory_viewer ); - wxMenuItem& rsx_debugger = *menubar.FindItem( id_tools_rsx_debugger); + wxMenuItem& kernel_explorer = *menubar.FindItem(id_tools_kernel_explorer); + wxMenuItem& memory_viewer = *menubar.FindItem(id_tools_memory_viewer); + wxMenuItem& rsx_debugger = *menubar.FindItem(id_tools_rsx_debugger); + kernel_explorer.Enable(!is_stopped); memory_viewer.Enable(!is_stopped); rsx_debugger.Enable(!is_stopped); diff --git a/rpcs3/Gui/MainFrame.h b/rpcs3/Gui/MainFrame.h index 604e68e97c..3e1b625048 100644 --- a/rpcs3/Gui/MainFrame.h +++ b/rpcs3/Gui/MainFrame.h @@ -41,6 +41,7 @@ private: void ConfigAutoPause(wxCommandEvent& event); void ConfigSaveData(wxCommandEvent& event); void OpenELFCompiler(wxCommandEvent& evt); + void OpenKernelExplorer(wxCommandEvent& evt); void OpenMemoryViewer(wxCommandEvent& evt); void OpenRSXDebugger(wxCommandEvent& evt); void OpenFnIdGenerator(wxCommandEvent& evt); diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 9b4424a1db..bdd38e73eb 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -173,6 +173,7 @@ + @@ -218,6 +219,7 @@ + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 7043c6c0f1..d01670ad84 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -101,6 +101,9 @@ Gui + + + Gui @@ -214,6 +217,9 @@ Gui + + + Gui \ No newline at end of file From c273c0e42b1511c1e7efd467fca2031055176b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Tue, 19 Aug 2014 12:14:26 +0200 Subject: [PATCH 374/499] Minor sys_prx update --- rpcs3/Emu/SysCalls/lv2/sys_prx.cpp | 25 +++++++++++++++++++------ rpcs3/Emu/SysCalls/lv2/sys_prx.h | 10 +++++----- rpcs3/Gui/KernelExplorer.cpp | 2 +- rpcs3/Gui/KernelExplorer.h | 1 - rpcs3/Loader/ELF64.cpp | 3 +-- 5 files changed, 26 insertions(+), 15 deletions(-) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index 2d46a178fb..5e8370b730 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -4,6 +4,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/FS/vfsFile.h" +#include "Crypto/unself.h" #include "sys_prx.h" SysCallBase sys_prx("sys_prx"); @@ -13,18 +14,30 @@ s32 sys_prx_load_module(u32 path_addr, u64 flags, mem_ptr_tsize = f.GetSize(); + prx->address = Memory.Alloc(prx->size, 4); + prx->path = path; + + // Load the PRX into memory + f.Read(Memory.VirtualToRealAddr(prx->address), prx->size); + u32 id = sys_prx.GetNewId(prx, TYPE_PRX); return id; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.h b/rpcs3/Emu/SysCalls/lv2/sys_prx.h index 523ccc82cc..5c09a7c475 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.h @@ -51,15 +51,15 @@ struct sys_prx_unload_module_option_t }; // Auxiliary data types -struct sys_prx_t { +struct sys_prx_t +{ u32 size; u32 address; + std::string path; bool isStarted; - sys_prx_t(u32 prx_size, u32 prx_address) - : size(prx_size) - , address(prx_address) - , isStarted(false) + sys_prx_t() + : isStarted(false) { } }; diff --git a/rpcs3/Gui/KernelExplorer.cpp b/rpcs3/Gui/KernelExplorer.cpp index 711e3f4df5..a3b159e3f7 100644 --- a/rpcs3/Gui/KernelExplorer.cpp +++ b/rpcs3/Gui/KernelExplorer.cpp @@ -43,7 +43,7 @@ void KernelExplorer::Update() char name[4096]; m_tree->DeleteAllItems(); - auto& root = m_tree->AddRoot("Process, ID = 0x00000001, Total Memory Usage = 0x0C8A9000 (200.7 MB)"); + auto& root = m_tree->AddRoot("Process, ID = 0x00000001, Total Memory Usage = 0x???????? (???.? MB)"); // TODO: PPU Threads // TODO: SPU/RawSPU Threads diff --git a/rpcs3/Gui/KernelExplorer.h b/rpcs3/Gui/KernelExplorer.h index 06b65eeeed..85316badf4 100644 --- a/rpcs3/Gui/KernelExplorer.h +++ b/rpcs3/Gui/KernelExplorer.h @@ -1,6 +1,5 @@ #pragma once -#include #include class KernelExplorer : public wxFrame diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index e949ae56d3..f32697a716 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -5,10 +5,9 @@ #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" -#include "ELF64.h" #include "Emu/Cell/PPUInstrTable.h" -#include "Emu/System.h" #include "Emu/SysCalls/ModuleManager.h" +#include "ELF64.h" using namespace PPU_instr; From a010f802cacd0be89b1c36e8d934fd81959a5727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Tue, 19 Aug 2014 13:57:05 +0200 Subject: [PATCH 375/499] Linux compilation fixes --- rpcs3/Gui/KernelExplorer.cpp | 38 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/rpcs3/Gui/KernelExplorer.cpp b/rpcs3/Gui/KernelExplorer.cpp index a3b159e3f7..d54a33fcc5 100644 --- a/rpcs3/Gui/KernelExplorer.cpp +++ b/rpcs3/Gui/KernelExplorer.cpp @@ -43,7 +43,7 @@ void KernelExplorer::Update() char name[4096]; m_tree->DeleteAllItems(); - auto& root = m_tree->AddRoot("Process, ID = 0x00000001, Total Memory Usage = 0x???????? (???.? MB)"); + const auto& root = m_tree->AddRoot("Process, ID = 0x00000001, Total Memory Usage = 0x???????? (???.? MB)"); // TODO: PPU Threads // TODO: SPU/RawSPU Threads @@ -53,8 +53,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_SEMAPHORE); if (count) { sprintf(name, "Semaphores (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_SEMAPHORE); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_SEMAPHORE); for (const auto& id : objects) { sprintf(name, "Semaphore: ID = 0x%08x", id); m_tree->AppendItem(node, name); @@ -65,8 +65,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_MUTEX); if (count) { sprintf(name, "Mutexes (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_MUTEX); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_MUTEX); for (const auto& id : objects) { sprintf(name, "Mutex: ID = 0x%08x", id); m_tree->AppendItem(node, name); @@ -77,8 +77,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_LWMUTEX); if (count) { sprintf(name, "Light Weight Mutexes (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_LWMUTEX); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_LWMUTEX); for (const auto& id : objects) { sprintf(name, "LW Mutex: ID = 0x%08x", id); m_tree->AppendItem(node, name); @@ -89,8 +89,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_COND); if (count) { sprintf(name, "Condition Variables (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_COND); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_COND); for (const auto& id : objects) { sprintf(name, "Condition Variable: ID = 0x%08x", id); m_tree->AppendItem(node, name); @@ -101,8 +101,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_LWCOND); if (count) { sprintf(name, "Light Weight Condition Variables (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_LWCOND); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_LWCOND); for (const auto& id : objects) { sprintf(name, "LW Condition Variable: ID = 0x%08x", id); m_tree->AppendItem(node, name); @@ -113,8 +113,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_EVENT_QUEUE); if (count) { sprintf(name, "Event Queues (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_EVENT_QUEUE); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_EVENT_QUEUE); for (const auto& id : objects) { sprintf(name, "Event Queue: ID = 0x%08x", id); m_tree->AppendItem(node, name); @@ -125,8 +125,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_PRX); if (count) { sprintf(name, "Modules (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_PRX); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_PRX); sprintf(name, "Segment List (%d)", 2 * objects.size()); // TODO: Assuming 2 segments per PRX file is not good m_tree->AppendItem(node, name); for (const auto& id : objects) { @@ -139,8 +139,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_MEM); if (count) { sprintf(name, "Memory Containers (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_MEM); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_MEM); for (const auto& id : objects) { sprintf(name, "Memory Container: ID = 0x%08x", id); m_tree->AppendItem(node, name); @@ -150,8 +150,8 @@ void KernelExplorer::Update() count = Emu.GetIdManager().GetTypeCount(TYPE_EVENT_FLAG); if (count) { sprintf(name, "Event Flags (%d)", count); - auto& node = m_tree->AppendItem(root, name); - auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_EVENT_FLAG); + const auto& node = m_tree->AppendItem(root, name); + const auto& objects = Emu.GetIdManager().GetTypeIDs(TYPE_EVENT_FLAG); for (const auto& id : objects) { sprintf(name, "Event Flag: ID = 0x%08x", id); m_tree->AppendItem(node, name); From 46a472acf9a44862abbe01a958874d0cfc9d6751 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 19 Aug 2014 10:25:13 -0400 Subject: [PATCH 376/499] Ini: Remove dead code --- rpcs3/Ini.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index ad54b0dca8..d6dfbc497a 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -141,29 +141,24 @@ void Ini::Save(const std::string& section, const std::string& key, WindowInfo va int Ini::Load(const std::string& section, const std::string& key, const int def_value) { return m_Config->GetLongValue(section.c_str(), key.c_str(), def_value); - saveIniFile(); } bool Ini::Load(const std::string& section, const std::string& key, const bool def_value) { return StringToBool(m_Config->GetValue(section.c_str(), key.c_str(), BoolToString(def_value).c_str())); - saveIniFile(); } std::pair Ini::Load(const std::string& section, const std::string& key, const std::pair def_value) { return StringToSize(m_Config->GetValue(section.c_str(), key.c_str(), SizeToString(def_value).c_str())); - saveIniFile(); } std::string Ini::Load(const std::string& section, const std::string& key, const std::string& def_value) { return std::string(m_Config->GetValue(section.c_str(), key.c_str(), def_value.c_str())); - saveIniFile(); } WindowInfo Ini::Load(const std::string& section, const std::string& key, const WindowInfo& def_value) { return StringToWindowInfo(m_Config->GetValue(section.c_str(), key.c_str(), WindowInfoToString(def_value).c_str())); - saveIniFile(); } From 89b944c397046745adc0e05b63ba1bbcead1f522 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 19 Aug 2014 22:17:20 +0400 Subject: [PATCH 377/499] REG_FUNC macros And some auxiliary changes --- rpcs3/Emu/Cell/PPUThread.cpp | 21 ++++ rpcs3/Emu/Cell/PPUThread.h | 1 + rpcs3/Emu/Memory/Memory.h | 1 + rpcs3/Emu/SysCalls/Modules.cpp | 14 ++- rpcs3/Emu/SysCalls/Modules.h | 6 +- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 9 ++ rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 100 +++++++++++++++---- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h | 3 - rpcs3/Emu/SysCalls/SysCalls.h | 2 + 9 files changed, 129 insertions(+), 28 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 9aace5b6d1..474b603c9f 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -249,6 +249,27 @@ u64 PPUThread::FastCall(u64 addr, u64 rtoc, u64 arg1, u64 arg2, u64 arg3, u64 ar return GPR[3]; } +u64 PPUThread::FastCall2(u64 addr, u64 rtoc) +{ + auto old_status = m_status; + auto old_PC = PC; + auto old_LR = LR; + auto old_rtoc = GPR[2]; + + PC = addr; + GPR[2] = rtoc; + LR = Emu.m_ppu_thr_stop; + + Task(); + + GPR[2] = old_rtoc; + LR = old_LR; + PC = old_PC; + m_status = old_status; + + return GPR[3]; +} + void PPUThread::FastStop() { m_status = Stopped; diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 15c1a95339..5a5e0bbf58 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -843,6 +843,7 @@ public: virtual void InitRegs(); virtual u64 GetFreeStackSize() const; u64 FastCall(u64 addr, u64 rtoc, u64 arg1 = 0, u64 arg2 = 0, u64 arg3 = 0, u64 arg4 = 0, u64 arg5 = 0, u64 arg6 = 0, u64 arg7 = 0, u64 arg8 = 0); + u64 FastCall2(u64 addr, u64 rtoc); void FastStop(); protected: diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 4df6ff55a3..9fe3523fb2 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -210,6 +210,7 @@ public: } else { + assert(!addr); return 0; } } diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 78b5d4ba8d..4df65edb73 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -6,13 +6,19 @@ #include #include "ModuleManager.h" -u32 getFunctionId(const std::string& name) +u32 getFunctionId(const char* name) { const char* suffix = "\x67\x59\x65\x99\x04\x25\x04\x90\x56\x64\x27\x49\x94\x89\x74\x1A"; // Symbol name suffix - std::string input = name + suffix; - unsigned char output[20]; + u8 output[20]; + + // Compute SHA-1 hash + sha1_context ctx; + + sha1_starts(&ctx); + sha1_update(&ctx, (const u8*)name, strlen(name)); + sha1_update(&ctx, (const u8*)suffix, strlen(suffix)); + sha1_finish(&ctx, output); - sha1((unsigned char*)input.c_str(), input.length(), output); // Compute SHA-1 hash return (u32&)output[0]; } diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index a7835db354..3d610a0e7f 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -110,11 +110,11 @@ public: } template __forceinline void AddFunc(u32 id, T func); - template __forceinline void AddFunc(const std::string& name, T func); + template __forceinline void AddFunc(const char* name, T func); template __forceinline void AddFuncSub(const char group[8], const u64 ops[], const char* name, T func); }; -u32 getFunctionId(const std::string& name); +u32 getFunctionId(const char* name); template __forceinline void Module::AddFunc(u32 id, T func) @@ -123,7 +123,7 @@ __forceinline void Module::AddFunc(u32 id, T func) } template -__forceinline void Module::AddFunc(const std::string& name, T func) +__forceinline void Module::AddFunc(const char* name, T func) { AddFunc(getFunctionId(name), func); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index ab2a31d936..22d2ba3586 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -2209,6 +2209,15 @@ void cellSync_init() libsre = Memory.PRXMem.AllocAlign(sizeof(libsre_data), 4096); memcpy(Memory + libsre, libsre_data, sizeof(libsre_data)); libsre_rtoc = libsre + 0x399B0; + +#define FIX_IMPORT(addr, func) \ + Memory.Write32((addr), 0x3d600000 | (getFunctionId(#func) >> 16)); /* lis r11, (func_id >> 16) */\ + Memory.Write32((addr), 0x616b0000 | (getFunctionId(#func) & 0xffff)); /* ori r11, (func_id & 0xffff) */\ + Memory.Write64((addr), 0x440000024e800020ull) /* sc + blr */ + + + +#undef FIX_IMPORT }); #endif } diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index e962354efe..4dfa98be25 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -82,13 +82,6 @@ s64 sys_prx_exitspawn_with_level() return CELL_OK; } -s64 sys_strlen(u32 addr) -{ - const std::string& str = Memory.ReadString(addr); - sysPrxForUser->Log("sys_strlen(0x%x - \"%s\")", addr, str.c_str()); - return str.length(); -} - int sys_spu_elf_get_information(u32 elf_img, mem32_t entry, mem32_t nseg) { sysPrxForUser->Warning("sys_spu_elf_get_information(elf_img=0x%x, entry_addr=0x%x, nseg_addr=0x%x", elf_img, entry.GetAddr(), nseg.GetAddr()); @@ -155,23 +148,89 @@ int sys_raw_spu_image_load(int id, mem_ptr_t img) return CELL_OK; } -s32 _sys_memset(u32 addr, s32 value, u32 size) +u32 _sys_memset(u32 addr, s32 value, u32 size) { sysPrxForUser->Log("_sys_memset(addr=0x%x, value=%d, size=%d)", addr, value, size); memset(Memory + addr, value, size); - return CELL_OK; + return addr; +} + +u32 _sys_memcpy(u32 dest, u32 source, u32 size) +{ + sysPrxForUser->Log("_sys_memcpy(dest=0x%x, source=0x%x, size=%d)", dest, source, size); + + memcpy(Memory + dest, Memory + source, size); + return dest; +} + +s32 _sys_memcmp(u32 addr1, u32 addr2, u32 size) +{ + sysPrxForUser->Log("_sys_memcmp(addr1=0x%x, addr2=0x%x, size=%d)", addr1, addr2, size); + + return memcmp(Memory + addr1, Memory + addr2, size); +} + +s32 _sys_strlen(u32 addr) +{ + sysPrxForUser->Log("_sys_strlen(addr=0x%x)", addr); + + return strlen((char*)(Memory + addr)); +} + +s32 _sys_strncmp(u32 str1, u32 str2, s32 max) +{ + sysPrxForUser->Log("_sys_strncmp(str1=0x%x, str2=0x%x, max=%d)", str1, str2, max); + + return strncmp((char*)(Memory + str1), (char*)(Memory + str2), max); +} + +u32 _sys_strcat(u32 dest, u32 source) +{ + sysPrxForUser->Log("_sys_strcat(dest=0x%x, source=0x%x)", dest, source); + + assert(Memory.RealToVirtualAddr(strcat((char*)(Memory + dest), (char*)(Memory + source))) == dest); + return dest; +} + +u32 _sys_strncat(u32 dest, u32 source, u32 len) +{ + sysPrxForUser->Log("_sys_strncat(dest=0x%x, source=0x%x, len=%d)", dest, source, len); + + assert(Memory.RealToVirtualAddr(strncat((char*)(Memory + dest), (char*)(Memory + source), len)) == dest); + return dest; +} + +u32 _sys_strcpy(u32 dest, u32 source) +{ + sysPrxForUser->Log("_sys_strcpy(dest=0x%x, source=0x%x)", dest, source); + + assert(Memory.RealToVirtualAddr(strcpy((char*)(Memory + dest), (char*)(Memory + source))) == dest); + return dest; +} + +u32 _sys_strncpy(u32 dest, u32 source, u32 len) +{ + sysPrxForUser->Log("_sys_strncpy(dest=0x%x, source=0x%x, len=%d)", dest, source, len); + + if (!dest || !source) + { + return 0; + } + + assert(Memory.RealToVirtualAddr(strncpy((char*)(Memory + dest), (char*)(Memory + source), len)) == dest); + return dest; } void sysPrxForUser_init() { - sysPrxForUser->AddFunc(0x744680a2, sys_initialize_tls); + REG_FUNC(sysPrxForUser, sys_initialize_tls); - sysPrxForUser->AddFunc(0x2f85c0ef, sys_lwmutex_create); - sysPrxForUser->AddFunc(0xc3476d0c, sys_lwmutex_destroy); - sysPrxForUser->AddFunc(0x1573dc3f, sys_lwmutex_lock); - sysPrxForUser->AddFunc(0xaeb78725, sys_lwmutex_trylock); - sysPrxForUser->AddFunc(0x1bc200f4, sys_lwmutex_unlock); + REG_FUNC(sysPrxForUser, sys_lwmutex_create); + REG_FUNC(sysPrxForUser, sys_lwmutex_destroy); + REG_FUNC(sysPrxForUser, sys_lwmutex_lock); + REG_FUNC(sysPrxForUser, sys_lwmutex_trylock); + REG_FUNC(sysPrxForUser, sys_lwmutex_unlock); sysPrxForUser->AddFunc(0x8461e528, sys_time_get_system_time); @@ -199,8 +258,6 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0xaa6d9bff, sys_prx_load_module_on_memcontainer); sysPrxForUser->AddFunc(0xa2c7ba64, sys_prx_exitspawn_with_level); - sysPrxForUser->AddFunc(0x2d36462b, sys_strlen); - sysPrxForUser->AddFunc(0x35168520, sys_heap_malloc); //sysPrxForUser->AddFunc(0xaede4b03, sys_heap_free); //sysPrxForUser->AddFunc(0x8a561d92, sys_heap_delete_heap); @@ -236,5 +293,12 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0x67f9fedb, sys_game_process_exitspawn2); sysPrxForUser->AddFunc(0xfc52a7a9, sys_game_process_exitspawn); - sysPrxForUser->AddFunc(0x68b9b011, _sys_memset); + REG_FUNC(sysPrxForUser, _sys_memset); + REG_FUNC(sysPrxForUser, _sys_memcpy); + REG_FUNC(sysPrxForUser, _sys_memcmp); + REG_FUNC(sysPrxForUser, _sys_strlen); + REG_FUNC(sysPrxForUser, _sys_strncmp); + REG_FUNC(sysPrxForUser, _sys_strcat); + REG_FUNC(sysPrxForUser, _sys_strncat); + REG_FUNC(sysPrxForUser, _sys_strncpy); } diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h index d32efb69c5..3dc3697ce9 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.h @@ -13,6 +13,3 @@ struct HeapInfo { } }; - -// SysCalls -s32 _sys_memset(u32 addr, s32 value, u32 num); diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index ae82066d4e..19668aaba0 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -132,3 +132,5 @@ public: #define REG_SUB(module, group, name, ...) \ static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ module->AddFuncSub(group, name ## _table, #name, name) + +#define REG_FUNC(module, name) module->AddFunc(getFunctionId(#name), name) \ No newline at end of file From 0a0ccb54bf96e43bc3f7dbd58ed39fa77ad19531 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 19 Aug 2014 23:28:50 +0400 Subject: [PATCH 378/499] Small fix --- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 55 +++++++++++++++++++++---- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 22d2ba3586..4598057f82 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -15,6 +15,18 @@ Module *cellSync = nullptr; #include "prx_libsre.h" u32 libsre; u32 libsre_rtoc; + +void fix_import(Module* module, u32 func, u32 addr) +{ + Memory.Write32((addr), 0x3d600000 | (func >> 16)); /* lis r11, (func_id >> 16) */ + Memory.Write32((addr) + 4, 0x616b0000 | (func & 0xffff)); /* ori r11, (func_id & 0xffff) */ + Memory.Write64((addr) + 8, 0x440000024e800020ull); /* sc + blr */ + + module->Load(func); +} + +#define FIX_IMPORT(module, func, addr) fix_import(module, getFunctionId(#func), addr) + #endif s32 syncMutexInitialize(mem_ptr_t mutex) @@ -1501,6 +1513,8 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, // cellSyncLFQueuePush has 1 in isBlocking param, cellSyncLFQueueTryPush has 0 cellSync->Warning("_cellSyncLFQueuePushBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); + //return GetCurrentPPUThread().FastCall2(libsre + 0x1674, libsre_rtoc); // test + if (!queue || !buffer_addr) { return CELL_SYNC_ERROR_NULL_POINTER; @@ -2210,16 +2224,41 @@ void cellSync_init() memcpy(Memory + libsre, libsre_data, sizeof(libsre_data)); libsre_rtoc = libsre + 0x399B0; -#define FIX_IMPORT(addr, func) \ - Memory.Write32((addr), 0x3d600000 | (getFunctionId(#func) >> 16)); /* lis r11, (func_id >> 16) */\ - Memory.Write32((addr), 0x616b0000 | (getFunctionId(#func) & 0xffff)); /* ori r11, (func_id & 0xffff) */\ - Memory.Write64((addr), 0x440000024e800020ull) /* sc + blr */ + extern Module* sysPrxForUser; - - -#undef FIX_IMPORT + FIX_IMPORT(sysPrxForUser, _sys_strncmp , libsre + 0x1D5FC); + FIX_IMPORT(sysPrxForUser, _sys_strcat , libsre + 0x1D61C); + FIX_IMPORT(sysPrxForUser, _sys_vsnprintf , libsre + 0x1D63C); + FIX_IMPORT(sysPrxForUser, _sys_snprintf , libsre + 0x1D65C); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_lock , libsre + 0x1D67C); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_unlock , libsre + 0x1D69C); + FIX_IMPORT(sysPrxForUser, sys_lwcond_destroy , libsre + 0x1D6BC); + FIX_IMPORT(sysPrxForUser, sys_ppu_thread_create , libsre + 0x1D6DC); + FIX_IMPORT(sysPrxForUser, sys_lwcond_wait , libsre + 0x1D6FC); + FIX_IMPORT(sysPrxForUser, _sys_strlen , libsre + 0x1D71C); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_create , libsre + 0x1D73C); + FIX_IMPORT(sysPrxForUser, _sys_spu_printf_detach_group , libsre + 0x1D75C); + FIX_IMPORT(sysPrxForUser, _sys_memset , libsre + 0x1D77C); + FIX_IMPORT(sysPrxForUser, _sys_memcpy , libsre + 0x1D79C); + FIX_IMPORT(sysPrxForUser, _sys_strncat , libsre + 0x1D7BC); + FIX_IMPORT(sysPrxForUser, _sys_strcpy , libsre + 0x1D7DC); + FIX_IMPORT(sysPrxForUser, _sys_printf , libsre + 0x1D7FC); + fix_import(sysPrxForUser, 0x9FB6228E , libsre + 0x1D81C); + FIX_IMPORT(sysPrxForUser, sys_ppu_thread_exit , libsre + 0x1D83C); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_destroy , libsre + 0x1D85C); + FIX_IMPORT(sysPrxForUser, _sys_strncpy , libsre + 0x1D87C); + FIX_IMPORT(sysPrxForUser, sys_lwcond_create , libsre + 0x1D89C); + FIX_IMPORT(sysPrxForUser, _sys_spu_printf_attach_group , libsre + 0x1D8BC); + FIX_IMPORT(sysPrxForUser, sys_prx_get_module_id_by_name , libsre + 0x1D8DC); + FIX_IMPORT(sysPrxForUser, sys_spu_image_close , libsre + 0x1D8FC); + fix_import(sysPrxForUser, 0xE75C40F2 , libsre + 0x1D91C); + FIX_IMPORT(sysPrxForUser, sys_spu_image_import , libsre + 0x1D93C); + FIX_IMPORT(sysPrxForUser, sys_lwcond_signal , libsre + 0x1D95C); + FIX_IMPORT(sysPrxForUser, _sys_vprintf , libsre + 0x1D97C); + FIX_IMPORT(sysPrxForUser, _sys_memcmp , libsre + 0x1D99C); }); #endif } -#undef PRX_DEBUG \ No newline at end of file +#undef PRX_DEBUG +#undef FIX_IMPORT \ No newline at end of file From ffa258d334253fdb9668237f57c9b7129e569b3a Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 20 Aug 2014 04:32:25 +0400 Subject: [PATCH 379/499] Some fixes --- rpcs3/Emu/CPU/CPUThread.h | 5 +- rpcs3/Emu/Cell/SPUThread.h | 65 +++++++------------- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 20 ++++-- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 35 ++++++----- 4 files changed, 56 insertions(+), 69 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 2ecd40ad4a..0ee177d9e0 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -13,10 +13,7 @@ struct reservation_struct // and doesn't give a chance to finish some work before losing the reservation u32 owner; // id of thread that got reservation u64 addr; - u32 size; - u32 data32; - u64 data64; - u128 data[8]; + u64 data[16]; __forceinline void clear() { diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 1b3386bf06..3e2df02763 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -778,68 +778,48 @@ public: SMutexLockerR lock(reservation.mutex); reservation.owner = lock.tid; reservation.addr = ea; - reservation.size = 128; - for (u32 i = 0; i < 8; i++) + for (u32 i = 0; i < 16; i++) { - reservation.data[i] = *(u128*)&Memory[(u32)ea + i * 16]; - *(u128*)&Memory[dmac.ls_offset + lsa + i * 16] = reservation.data[i]; + reservation.data[i] = *(u64*)&Memory[(u32)ea + i * 8]; + *(u64*)&Memory[dmac.ls_offset + lsa + i * 8] = reservation.data[i]; } MFCArgs.AtomicStat.PushUncond(MFC_GETLLAR_SUCCESS); } else if (op == MFC_PUTLLC_CMD) // store conditional { SMutexLockerR lock(reservation.mutex); + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); + if (reservation.owner == lock.tid) // succeeded { - if (reservation.addr == ea && reservation.size == 128) + if (reservation.addr == ea) { - u128 buf[8]; // data being written newly + u64 buf[16]; // data being written newly u32 changed = 0, mask = 0, last = 0; - for (u32 i = 0; i < 8; i++) + for (u32 i = 0; i < 16; i++) { - buf[i] = *(u128*)&Memory[dmac.ls_offset + lsa + i * 16]; + buf[i] = *(u64*)&Memory[dmac.ls_offset + lsa + i * 8]; if (buf[i] != reservation.data[i]) { changed++; last = i; - mask |= (0xf << (i * 4)); - } - } - if (changed == 0) // nothing changed? - { - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); - } - else if (changed == 1) - { - if (buf[last].hi != reservation.data[last].hi && buf[last].lo != reservation.data[last].lo) - { - LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: TODO: 128bit compare and swap"); - Emu.Pause(); - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); - } - else - { - const u32 last_q = (buf[last].hi == reservation.data[last].hi); + mask |= (0x3 << (i * 2)); - if (InterlockedCompareExchange64((volatile long long*)(Memory + ((u32)ea + last * 16 + last_q * 8)), - buf[last]._u64[last_q], reservation.data[last]._u64[last_q]) == reservation.data[last]._u64[last_q]) - { - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); - } - else + if (InterlockedCompareExchange64((volatile long long*)(Memory + ((u32)ea + last * 8)), buf[last], reservation.data[last]) != reservation.data[last]) { MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + + if (changed > 1) + { + LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Reservation Error: impossibru (~ 8x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + changed, mask, op, cmd, lsa, ea, tag, size); + Emu.Pause(); + } + + break; } } } - else - { - ProcessCmd(MFC_PUT_CMD, tag, lsa, ea, 128); - LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Reservation Error: impossibru (~ 16x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", - changed, mask, op, cmd, lsa, ea, tag, size); - Emu.Pause(); - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); - } } else { @@ -860,8 +840,7 @@ public: { MFCArgs.AtomicStat.PushUncond(MFC_PUTLLUC_SUCCESS); } - if ((reservation.addr + reservation.size > ea && reservation.addr <= ea + size) || - (ea + size > reservation.addr && ea <= reservation.addr + reservation.size)) + if (reservation.addr == ea) { reservation.clear(); } @@ -1135,7 +1114,7 @@ public: default: { - LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); + LOG_ERROR(Log::SPU, "%s error (v=0x%x): unknown/illegal channel (%d [%s]).", __FUNCTION__, v, ch, spu_ch_name[ch]); break; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 4598057f82..db11e00f77 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -18,9 +18,12 @@ u32 libsre_rtoc; void fix_import(Module* module, u32 func, u32 addr) { - Memory.Write32((addr), 0x3d600000 | (func >> 16)); /* lis r11, (func_id >> 16) */ - Memory.Write32((addr) + 4, 0x616b0000 | (func & 0xffff)); /* ori r11, (func_id & 0xffff) */ - Memory.Write64((addr) + 8, 0x440000024e800020ull); /* sc + blr */ + Memory.Write32(addr + 0x0, 0x3d600000 | (func >> 16)); /* lis r11, (func_id >> 16) */ + Memory.Write32(addr + 0x4, 0x616b0000 | (func & 0xffff)); /* ori r11, (func_id & 0xffff) */ + Memory.Write32(addr + 0x8, 0x60000000); /* nop */ + // leave rtoc saving at 0xC + Memory.Write64(addr + 0x10, 0x440000024e800020ull); /* sc + blr */ + Memory.Write64(addr + 0x18, 0x6000000060000000ull); /* nop + nop */ module->Load(func); } @@ -1513,8 +1516,6 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, // cellSyncLFQueuePush has 1 in isBlocking param, cellSyncLFQueueTryPush has 0 cellSync->Warning("_cellSyncLFQueuePushBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking); - //return GetCurrentPPUThread().FastCall2(libsre + 0x1674, libsre_rtoc); // test - if (!queue || !buffer_addr) { return CELL_SYNC_ERROR_NULL_POINTER; @@ -2226,6 +2227,9 @@ void cellSync_init() extern Module* sysPrxForUser; + FIX_IMPORT(sysPrxForUser, cellUserTraceRegister , libsre + 0x1D5BC); // ??? + FIX_IMPORT(sysPrxForUser, cellUserTraceUnregister , libsre + 0x1D5DC); // ??? + FIX_IMPORT(sysPrxForUser, _sys_strncmp , libsre + 0x1D5FC); FIX_IMPORT(sysPrxForUser, _sys_strcat , libsre + 0x1D61C); FIX_IMPORT(sysPrxForUser, _sys_vsnprintf , libsre + 0x1D63C); @@ -2256,6 +2260,12 @@ void cellSync_init() FIX_IMPORT(sysPrxForUser, sys_lwcond_signal , libsre + 0x1D95C); FIX_IMPORT(sysPrxForUser, _sys_vprintf , libsre + 0x1D97C); FIX_IMPORT(sysPrxForUser, _sys_memcmp , libsre + 0x1D99C); + + // fix xrefs + for (u32 i = libsre + 0x30EAC; i < libsre + 0x31EE0; i += 4) + { + Memory.Write32(i, Memory.Read32(i) + libsre); + } }); #endif } diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 4dfa98be25..c93f029405 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -16,18 +16,18 @@ //Module sysPrxForUser("sysPrxForUser", sysPrxForUser_init); Module *sysPrxForUser = nullptr; -int sys_heap_create_heap(const u32 heap_addr, const u32 align, const u32 size) +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); + 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)); sysPrxForUser->Warning("*** sys_heap created: id = %d", heap_id); return heap_id; } -int sys_heap_malloc(const u32 heap_id, const u32 size) +int _sys_heap_malloc(const u32 heap_id, const u32 size) { - sysPrxForUser->Warning("sys_heap_malloc(heap_id=%d, size=0x%x)", heap_id, size); + sysPrxForUser->Warning("_sys_heap_malloc(heap_id=%d, size=0x%x)", heap_id, size); HeapInfo* heap; if(!sysPrxForUser->CheckId(heap_id, heap)) return CELL_ESRCH; @@ -50,15 +50,15 @@ void sys_initialize_tls() sysPrxForUser->Log("sys_initialize_tls()"); } -s64 sys_process_atexitspawn() +s64 _sys_process_atexitspawn() { - sysPrxForUser->Log("sys_process_atexitspawn()"); + sysPrxForUser->Log("_sys_process_atexitspawn()"); return CELL_OK; } -s64 sys_process_at_Exitspawn() +s64 _sys_process_at_Exitspawn() { - sysPrxForUser->Log("sys_process_at_Exitspawn"); + sysPrxForUser->Log("_sys_process_at_Exitspawn"); return CELL_OK; } @@ -70,9 +70,9 @@ int sys_process_is_stack(u32 p) return (int)(bool)(p >= Memory.StackMem.GetStartAddr() && p <= Memory.StackMem.GetEndAddr()); } -int sys_spu_printf_initialize(int a1, int a2, int a3, int a4, int a5) +int _sys_spu_printf_initialize(int a1, int a2, int a3, int a4, int a5) { - sysPrxForUser->Warning("sys_spu_printf_initialize(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)", a1, a2, a3, a4, a5); + sysPrxForUser->Todo("_sys_spu_printf_initialize(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)", a1, a2, a3, a4, a5); return CELL_OK; } @@ -235,8 +235,8 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0x8461e528, sys_time_get_system_time); sysPrxForUser->AddFunc(0xe6f2c1e7, sys_process_exit); - sysPrxForUser->AddFunc(0x2c847572, sys_process_atexitspawn); - sysPrxForUser->AddFunc(0x96328741, sys_process_at_Exitspawn); + sysPrxForUser->AddFunc(0x2c847572, _sys_process_atexitspawn); + sysPrxForUser->AddFunc(0x96328741, _sys_process_at_Exitspawn); sysPrxForUser->AddFunc(0x4f7172c9, sys_process_is_stack); sysPrxForUser->AddFunc(0x24a1ea07, sys_ppu_thread_create); @@ -244,7 +244,7 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0xaff080a4, sys_ppu_thread_exit); sysPrxForUser->AddFunc(0xa3e3be68, sys_ppu_thread_once); - sysPrxForUser->AddFunc(0x45fe2fce, sys_spu_printf_initialize); + sysPrxForUser->AddFunc(0x45fe2fce, _sys_spu_printf_initialize); sysPrxForUser->AddFunc(0x26090058, sys_prx_load_module); sysPrxForUser->AddFunc(0x9f18429d, sys_prx_start_module); @@ -258,10 +258,10 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0xaa6d9bff, sys_prx_load_module_on_memcontainer); sysPrxForUser->AddFunc(0xa2c7ba64, sys_prx_exitspawn_with_level); - sysPrxForUser->AddFunc(0x35168520, sys_heap_malloc); - //sysPrxForUser->AddFunc(0xaede4b03, sys_heap_free); - //sysPrxForUser->AddFunc(0x8a561d92, sys_heap_delete_heap); - sysPrxForUser->AddFunc(0xb2fcf2c8, sys_heap_create_heap); + sysPrxForUser->AddFunc(0x35168520, _sys_heap_malloc); + //sysPrxForUser->AddFunc(0xaede4b03, _sys_heap_free); + //sysPrxForUser->AddFunc(0x8a561d92, _sys_heap_delete_heap); + sysPrxForUser->AddFunc(0xb2fcf2c8, _sys_heap_create_heap); sysPrxForUser->AddFunc(0x44265c08, _sys_heap_memalign); sysPrxForUser->AddFunc(0xb257540b, sys_mmapper_allocate_memory); @@ -300,5 +300,6 @@ void sysPrxForUser_init() REG_FUNC(sysPrxForUser, _sys_strncmp); REG_FUNC(sysPrxForUser, _sys_strcat); REG_FUNC(sysPrxForUser, _sys_strncat); + REG_FUNC(sysPrxForUser, _sys_strcpy); REG_FUNC(sysPrxForUser, _sys_strncpy); } From dd9df4f36ff5362032afd99602fadb3528b74559 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 20 Aug 2014 14:21:39 +0400 Subject: [PATCH 380/499] _sys_spu_printf_initialize _sys_spu_printf_finalize _sys_spu_printf_attach_group _sys_spu_printf_detach_group _sys_spu_printf_attach_thread _sys_spu_printf_detach_thread --- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 95 ++++++++++++++++++-- 1 file changed, 87 insertions(+), 8 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index c93f029405..a40eccdb51 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -70,12 +70,6 @@ int sys_process_is_stack(u32 p) return (int)(bool)(p >= Memory.StackMem.GetStartAddr() && p <= Memory.StackMem.GetEndAddr()); } -int _sys_spu_printf_initialize(int a1, int a2, int a3, int a4, int a5) -{ - sysPrxForUser->Todo("_sys_spu_printf_initialize(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)", a1, a2, a3, a4, a5); - return CELL_OK; -} - s64 sys_prx_exitspawn_with_level() { sysPrxForUser->Log("sys_prx_exitspawn_with_level()"); @@ -222,6 +216,81 @@ u32 _sys_strncpy(u32 dest, u32 source, u32 len) return dest; } +u32 spu_printf_agcb; +u32 spu_printf_dgcb; +u32 spu_printf_atcb; +u32 spu_printf_dtcb; + +s32 _sys_spu_printf_initialize(u32 agcb, u32 dgcb, u32 atcb, u32 dtcb) +{ + sysPrxForUser->Warning("_sys_spu_printf_initialize(agcb=0x%x, dgcb=0x%x, atcb=0x%x, dtcb=0x%x)", agcb, dgcb, atcb, dtcb); + + spu_printf_agcb = agcb; + spu_printf_dgcb = atcb; + spu_printf_atcb = atcb; + spu_printf_dtcb = dtcb; + return CELL_OK; +} + +s32 _sys_spu_printf_finalize() +{ + sysPrxForUser->Warning("_sys_spu_printf_finalize()"); + + spu_printf_agcb = 0; + spu_printf_dgcb = 0; + spu_printf_atcb = 0; + spu_printf_dtcb = 0; + return CELL_OK; +} + +s32 _sys_spu_printf_attach_group(u32 arg) +{ + sysPrxForUser->Warning("_sys_spu_printf_attach_group(arg=0x%x)", arg); + + if (!spu_printf_agcb) + { + return CELL_ESTAT; + } + + return GetCurrentPPUThread().FastCall(Memory.Read32(spu_printf_agcb), Memory.Read32(spu_printf_agcb + 4), arg); +} + +s32 _sys_spu_printf_detach_group(u32 arg) +{ + sysPrxForUser->Warning("_sys_spu_printf_detach_group(arg=0x%x)", arg); + + if (!spu_printf_dgcb) + { + return CELL_ESTAT; + } + + return GetCurrentPPUThread().FastCall(Memory.Read32(spu_printf_dgcb), Memory.Read32(spu_printf_dgcb + 4), arg); +} + +s32 _sys_spu_printf_attach_thread(u32 arg) +{ + sysPrxForUser->Warning("_sys_spu_printf_attach_thread(arg=0x%x)", arg); + + if (!spu_printf_atcb) + { + return CELL_ESTAT; + } + + return GetCurrentPPUThread().FastCall(Memory.Read32(spu_printf_atcb), Memory.Read32(spu_printf_atcb + 4), arg); +} + +s32 _sys_spu_printf_detach_thread(u32 arg) +{ + sysPrxForUser->Warning("_sys_spu_printf_detach_thread(arg=0x%x)", arg); + + if (!spu_printf_dtcb) + { + return CELL_ESTAT; + } + + return GetCurrentPPUThread().FastCall(Memory.Read32(spu_printf_dtcb), Memory.Read32(spu_printf_dtcb + 4), arg); +} + void sysPrxForUser_init() { REG_FUNC(sysPrxForUser, sys_initialize_tls); @@ -244,8 +313,6 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0xaff080a4, sys_ppu_thread_exit); sysPrxForUser->AddFunc(0xa3e3be68, sys_ppu_thread_once); - sysPrxForUser->AddFunc(0x45fe2fce, _sys_spu_printf_initialize); - sysPrxForUser->AddFunc(0x26090058, sys_prx_load_module); sysPrxForUser->AddFunc(0x9f18429d, sys_prx_start_module); sysPrxForUser->AddFunc(0x80fb0c19, sys_prx_stop_module); @@ -302,4 +369,16 @@ void sysPrxForUser_init() REG_FUNC(sysPrxForUser, _sys_strncat); REG_FUNC(sysPrxForUser, _sys_strcpy); REG_FUNC(sysPrxForUser, _sys_strncpy); + + spu_printf_agcb = 0; + spu_printf_dgcb = 0; + spu_printf_atcb = 0; + spu_printf_dtcb = 0; + + REG_FUNC(sysPrxForUser, _sys_spu_printf_initialize); + REG_FUNC(sysPrxForUser, _sys_spu_printf_finalize); + REG_FUNC(sysPrxForUser, _sys_spu_printf_attach_group); + REG_FUNC(sysPrxForUser, _sys_spu_printf_detach_group); + REG_FUNC(sysPrxForUser, _sys_spu_printf_attach_thread); + REG_FUNC(sysPrxForUser, _sys_spu_printf_detach_thread); } From 9eb280c3676154dd6a7b3b03af1ed442bb8466e4 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 20 Aug 2014 18:23:48 +0400 Subject: [PATCH 381/499] SetCurrentNamedThread() --- Utilities/Thread.cpp | 50 ++++++++++---------- Utilities/Thread.h | 1 + rpcs3/Emu/Cell/PPUThread.cpp | 29 ++++-------- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 15 +++++- 4 files changed, 49 insertions(+), 46 deletions(-) diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index a98d8c6b63..5eedcc0fcd 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -12,6 +12,11 @@ NamedThreadBase* GetCurrentNamedThread() return g_tls_this_thread; } +void SetCurrentNamedThread(NamedThreadBase* value) +{ + g_tls_this_thread = value; +} + std::string NamedThreadBase::GetThreadName() const { return m_name; @@ -47,32 +52,27 @@ void ThreadBase::Start() m_destroy = false; m_alive = true; - m_executor = new std::thread( - [this]() + m_executor = new std::thread([this]() + { + SetCurrentNamedThread(this); + g_thread_count++; + + try { - g_tls_this_thread = this; - g_thread_count++; + Task(); + } + catch (const std::string& e) + { + LOG_ERROR(GENERAL, "Exception: %s", e.c_str()); + } + catch (const char* e) + { + LOG_ERROR(GENERAL, "Exception: %s", e); + } - try - { - Task(); - } - catch (const std::string& e) - { - LOG_ERROR(GENERAL, "Exception: %s", e.c_str()); - } - catch (const char* e) - { - LOG_ERROR(GENERAL, "Exception: %s", e); - } - catch (int exitcode) - { - LOG_SUCCESS(GENERAL, "Exit Code: %d", exitcode); - } - - m_alive = false; - g_thread_count--; - }); + m_alive = false; + g_thread_count--; + }); } void ThreadBase::Stop(bool wait, bool send_destroy) @@ -141,7 +141,7 @@ void thread::start(std::function func) m_thr = std::thread([func, name]() { NamedThreadBase info(name); - g_tls_this_thread = &info; + SetCurrentNamedThread(&info); g_thread_count++; try diff --git a/Utilities/Thread.h b/Utilities/Thread.h index f38ff73162..b2b7637265 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -48,6 +48,7 @@ public: }; NamedThreadBase* GetCurrentNamedThread(); +void SetCurrentNamedThread(NamedThreadBase* value); class ThreadBase : public NamedThreadBase { diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 474b603c9f..47d09f6090 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -222,13 +222,6 @@ int FPRdouble::Cmp(PPCdouble a, PPCdouble b) u64 PPUThread::FastCall(u64 addr, u64 rtoc, u64 arg1, u64 arg2, u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7, u64 arg8) { - auto old_status = m_status; - auto old_PC = PC; - auto old_LR = LR; - auto old_rtoc = GPR[2]; - - PC = addr; - GPR[2] = rtoc; GPR[3] = arg1; GPR[4] = arg2; GPR[5] = arg3; @@ -237,35 +230,31 @@ u64 PPUThread::FastCall(u64 addr, u64 rtoc, u64 arg1, u64 arg2, u64 arg3, u64 ar GPR[8] = arg6; GPR[9] = arg7; GPR[10] = arg8; - LR = Emu.m_ppu_thr_stop; - - Task(); - - GPR[2] = old_rtoc; - LR = old_LR; - PC = old_PC; - m_status = old_status; - - return GPR[3]; + + return FastCall2(addr, rtoc); } u64 PPUThread::FastCall2(u64 addr, u64 rtoc) { auto old_status = m_status; auto old_PC = PC; - auto old_LR = LR; auto old_rtoc = GPR[2]; + auto old_LR = LR; + auto old_thread = GetCurrentNamedThread(); + m_status = Running; PC = addr; GPR[2] = rtoc; LR = Emu.m_ppu_thr_stop; + SetCurrentNamedThread(this); Task(); + m_status = old_status; + PC = old_PC; GPR[2] = old_rtoc; LR = old_LR; - PC = old_PC; - m_status = old_status; + SetCurrentNamedThread(old_thread); return GPR[3]; } diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index a40eccdb51..86adba31be 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -225,8 +225,9 @@ s32 _sys_spu_printf_initialize(u32 agcb, u32 dgcb, u32 atcb, u32 dtcb) { sysPrxForUser->Warning("_sys_spu_printf_initialize(agcb=0x%x, dgcb=0x%x, atcb=0x%x, dtcb=0x%x)", agcb, dgcb, atcb, dtcb); + // prx: register some callbacks spu_printf_agcb = agcb; - spu_printf_dgcb = atcb; + spu_printf_dgcb = dgcb; spu_printf_atcb = atcb; spu_printf_dtcb = dtcb; return CELL_OK; @@ -291,6 +292,16 @@ s32 _sys_spu_printf_detach_thread(u32 arg) return GetCurrentPPUThread().FastCall(Memory.Read32(spu_printf_dtcb), Memory.Read32(spu_printf_dtcb + 4), arg); } +s32 _sys_printf(u32 arg1) +{ + sysPrxForUser->Todo("_sys_printf(arg1=0x%x)", arg1); + + // probably, assertion failed + LOG_WARNING(TTY, "%s", (char*)(Memory + arg1)); + Emu.Pause(); + return CELL_OK; +} + void sysPrxForUser_init() { REG_FUNC(sysPrxForUser, sys_initialize_tls); @@ -381,4 +392,6 @@ void sysPrxForUser_init() REG_FUNC(sysPrxForUser, _sys_spu_printf_detach_group); REG_FUNC(sysPrxForUser, _sys_spu_printf_attach_thread); REG_FUNC(sysPrxForUser, _sys_spu_printf_detach_thread); + + REG_FUNC(sysPrxForUser, _sys_printf); } From 126b636edf61a11c0994d5213528c519a0d21e14 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 21 Aug 2014 02:12:56 +0400 Subject: [PATCH 382/499] Light hack for FSCRRD and FSCRWR SPU_*Event* channels implemented for LR event MFC_RdTagMask implemented --- rpcs3/Emu/Cell/SPUInterpreter.h | 10 +++- rpcs3/Emu/Cell/SPUThread.cpp | 3 + rpcs3/Emu/Cell/SPUThread.h | 80 +++++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 50 +++++++++++++++- 4 files changed, 138 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index 9cae507585..1955137b5c 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -936,7 +936,8 @@ private: void FSCRRD(u32 rt) { - UNIMPLEMENTED(); // TODO (rarely used) + // TODO (rarely used) + CPU.GPR[rt].Reset(); } void FESD(u32 rt, u32 ra) { @@ -952,7 +953,12 @@ private: } void FSCRWR(u32 rt, u32 ra) { - UNIMPLEMENTED(); // TODO (rarely used) + // TODO (rarely used) + if (CPU.GPR[ra]._u128) + { + LOG_ERROR(SPU, "FSCRWR(%d,%d): value = %s", rt, ra, CPU.GPR[ra].ToString().c_str()); + UNIMPLEMENTED(); + } } void DFTSV(u32 rt, u32 ra, s32 i7) { diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 559861ddd3..b7a0c6787b 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -81,6 +81,9 @@ void SPUThread::InitRegs() MFC1.TagStatus.SetValue(0); MFC2.TagStatus.SetValue(0); //PC = SPU.NPC.GetValue(); + + m_event_mask = 0; + m_events = 0; } u64 SPUThread::GetFreeStackSize() const diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 3e2df02763..b883feb9e6 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -106,6 +106,24 @@ enum MFCchannels MFC_RdAtomicStat = 27, //Read completion status of last completed immediate MFC atomic update command }; +enum SPUEvents +{ + SPU_EVENT_MS = 0x1000, // multisource synchronization event + SPU_EVENT_A = 0x800, // privileged attention event + SPU_EVENT_LR = 0x400, // lock line reservation lost event + SPU_EVENT_S1 = 0x200, // signal notification register 1 available + SPU_EVENT_S2 = 0x100, // signal notification register 2 available + SPU_EVENT_LE = 0x80, // SPU outbound mailbox available + SPU_EVENT_ME = 0x40, // SPU outbound interrupt mailbox available + SPU_EVENT_TM = 0x20, // SPU decrementer became negative (?) + SPU_EVENT_MB = 0x10, // SPU inbound mailbox available + SPU_EVENT_QV = 0x4, // MFC SPU command queue available + SPU_EVENT_SN = 0x2, // MFC list command stall-and-notify event + SPU_EVENT_TG = 0x1, // MFC tag-group status update event + + SPU_EVENT_IMPLEMENTED = SPU_EVENT_LR, +}; + enum { SPU_RUNCNTL_STOP = 0, @@ -302,6 +320,9 @@ public: u64 m_dec_start; // timestamp of writing decrementer value u32 m_dec_value; // written decrementer value + u32 m_event_mask; + u32 m_events; + struct IntrTag { u32 enabled; // 1 == true @@ -855,6 +876,32 @@ public: } } + bool CheckEvents() // checks events + { + // SPU_EVENT_LR: + { + SMutexLockerR lock(reservation.mutex); + + if (reservation.owner == lock.tid) + { + for (u32 i = 0; i < 16; i++) + { + if (*(u64*)&Memory[reservation.addr + i * 8] != reservation.data[i]) + { + m_events |= SPU_EVENT_LR; + reservation.clear(); + } + } + } + else + { + m_events |= SPU_EVENT_LR; // ??? + } + } + + return (m_events & m_event_mask) != 0; + } + u32 GetChannelCount(u32 ch) { switch(ch) @@ -868,6 +915,7 @@ public: case SPU_RdSigNotify1: return SPU.SNR[0].GetCount(); case SPU_RdSigNotify2: return SPU.SNR[1].GetCount(); case MFC_RdAtomicStat: return MFC1.AtomicStat.GetCount(); + case SPU_RdEventStat: return CheckEvents() ? 1 : 0; default: { @@ -1112,6 +1160,19 @@ public: break; } + case SPU_WrEventMask: + { + m_event_mask = v; + if (v & ~(SPU_EVENT_IMPLEMENTED)) LOG_ERROR(Log::SPU, "SPU_WrEventMask: unsupported event masked (0x%x)"); + break; + } + + case SPU_WrEventAck: + { + m_events &= ~v; + break; + } + default: { LOG_ERROR(Log::SPU, "%s error (v=0x%x): unknown/illegal channel (%d [%s]).", __FUNCTION__, v, ch, spu_ch_name[ch]); @@ -1141,6 +1202,12 @@ public: break; } + case MFC_RdTagMask: + { + v = MFC1.QueryMask.GetValue(); + break; + } + case SPU_RdSigNotify1: { while (!SPU.SNR[0].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -1171,6 +1238,19 @@ public: break; } + case SPU_RdEventMask: + { + v = m_event_mask; + break; + } + + case SPU_RdEventStat: + { + while (!CheckEvents() && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + v = m_events & m_event_mask; + break; + } + default: { LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index db11e00f77..0f44d19821 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -2261,10 +2261,54 @@ void cellSync_init() FIX_IMPORT(sysPrxForUser, _sys_vprintf , libsre + 0x1D97C); FIX_IMPORT(sysPrxForUser, _sys_memcmp , libsre + 0x1D99C); - // fix xrefs - for (u32 i = libsre + 0x30EAC; i < libsre + 0x31EE0; i += 4) + const u32 seg2 = 0x2DF00; + // start of table: + // addr = (u64) addr - seg2, (u32) 1, (u32) 1, (u64) ptr + // addr = (u64) addr - seg2, (u32) 0x101, (u32) 1, (u64) ptr - seg2 (???) + // addr = (u64) addr, (u32) 0x100, (u32) 1, (u64) ptr - seg2 (???) + // addr = (u64) addr, (u32) 0, (u32) 1, (u64) ptr (???) + + for (u32 i = libsre + 0x31EE0; i < libsre + 0x3A4F0; i += 24) { - Memory.Write32(i, Memory.Read32(i) + libsre); + u64 addr = Memory.Read64(i); + const u64 flag = Memory.Read64(i + 8); + + if (flag == 0x10100000001ull) + { + addr = addr + seg2 + libsre; + u32 value = Memory.Read32(addr); + assert(value == Memory.Read64(i + 16) + seg2); + Memory.Write32(addr, value + libsre); + } + else if (flag == 0x100000001ull) + { + addr = addr + seg2 + libsre; + u32 value = Memory.Read32(addr); + assert(value == Memory.Read64(i + 16)); + Memory.Write32(addr, value + libsre); + } + else if (flag == 0x10000000001ull) + { + addr = addr + libsre; + u32 value = Memory.Read32(addr); + assert(value == Memory.Read64(i + 16) + seg2); + Memory.Write32(addr, value + libsre); + } + else if (flag == 1) + { + addr = addr + libsre; + u32 value = Memory.Read32(addr); + assert(value == Memory.Read64(i + 16)); + Memory.Write32(addr, value + libsre); + } + else if (flag == 0x10000000004ull || flag == 0x10000000006ull) + { + // seems to be instruction modifiers for imports (done in other way in FIX_IMPORT) + } + else + { + LOG_NOTICE(HLE, "libsre: 0x%x : 0x%llx", i - libsre, flag); + } } }); #endif From 1941f3d916364d3d3aee660ade80538e4561aa36 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 21 Aug 2014 05:02:55 +0400 Subject: [PATCH 383/499] Interrupt handling changed --- rpcs3/Emu/Cell/SPUThread.h | 22 +++++++++------------- rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp | 2 +- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index b883feb9e6..527a1bbdf0 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -1,5 +1,5 @@ #pragma once -#include "PPCThread.h" +#include "PPUThread.h" #include "Emu/Event.h" #include "Emu/SysCalls/lv2/sys_spu.h" #include "Emu/SysCalls/lv2/sys_event_flag.h" @@ -889,7 +889,8 @@ public: if (*(u64*)&Memory[reservation.addr + i * 8] != reservation.data[i]) { m_events |= SPU_EVENT_LR; - reservation.clear(); + //reservation.clear(); // ??? + break; } } } @@ -942,25 +943,20 @@ public: std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { - LOG_WARNING(Log::SPU, "%s(%s) aborted (I)", __FUNCTION__, spu_ch_name[ch]); + LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); return; } } m_intrtag[2].stat |= 1; if (CPUThread* t = Emu.GetCPU().GetThread(m_intrtag[2].thread)) { - while (t->IsAlive()) // TODO: ??? + if (t->GetType() == CPU_THREAD_PPU && !t->IsAlive()) { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - if (Emu.IsStopped()) - { - LOG_WARNING(Log::SPU, "%s(%s) aborted (II)", __FUNCTION__, spu_ch_name[ch]); - return; - } + PPUThread& ppu = *(PPUThread*)t; + ppu.FastStop(); + ppu.Run(); + ppu.FastCall(ppu.PC, ppu.GPR[2], ppu.m_interrupt_arg); } - t->SetArg(0, t->m_interrupt_arg); - t->Run(); - t->Exec(); } } else diff --git a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp index 36f5839975..9588d06526 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp @@ -100,6 +100,6 @@ void sys_interrupt_thread_eoi() { sc_int.Log("sys_interrupt_thread_eoi()"); - GetCurrentPPUThread().Stop(); + GetCurrentPPUThread().FastStop(); return; } From 1f3f6f46648cdecd86d3dcdf552922377e3a3a8f Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 21 Aug 2014 05:31:45 +0400 Subject: [PATCH 384/499] sys_event_flag_set_bit_impatient --- rpcs3/Emu/Cell/SPUThread.h | 69 ++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 527a1bbdf0..bae99599e2 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -815,18 +815,26 @@ public: { if (reservation.addr == ea) { - u64 buf[16]; // data being written newly - u32 changed = 0, mask = 0, last = 0; for (u32 i = 0; i < 16; i++) { - buf[i] = *(u64*)&Memory[dmac.ls_offset + lsa + i * 8]; - if (buf[i] != reservation.data[i]) + if (*(u64*)&Memory[reservation.addr + i * 8] != reservation.data[i]) + { + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + reservation.clear(); + return; + } + } + + u32 changed = 0, mask = 0; + for (u32 i = 0; i < 16; i++) + { + u64 buf = *(u64*)&Memory[dmac.ls_offset + lsa + i * 8]; + if (buf != reservation.data[i]) { changed++; - last = i; mask |= (0x3 << (i * 2)); - if (InterlockedCompareExchange64((volatile long long*)(Memory + ((u32)ea + last * 8)), buf[last], reservation.data[last]) != reservation.data[last]) + if (InterlockedCompareExchange64((volatile long long*)(Memory + ((u32)ea + i * 8)), buf, reservation.data[i]) != reservation.data[i]) { MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); @@ -889,7 +897,7 @@ public: if (*(u64*)&Memory[reservation.addr + i * 8] != reservation.data[i]) { m_events |= SPU_EVENT_LR; - //reservation.clear(); // ??? + reservation.clear(); // ??? break; } } @@ -1057,6 +1065,53 @@ public: SPU.In_MBox.PushUncond(CELL_OK); return; } + else if (code == 192) + { + /* ===== sys_event_flag_set_bit_impatient ===== */ + u32 flag = v & 0xffffff; + + u32 data; + if (!SPU.Out_MBox.Pop(data)) + { + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit_impatient(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); + return; + } + + if (flag > 63) + { + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x): flag > 63", data, v, flag); + return; + } + + //if (Ini.HLELogging.GetValue()) + { + LOG_WARNING(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x (flag=%d))", data, v, flag); + } + + EventFlag* ef; + if (!Emu.GetIdManager().GetIDData(data, ef)) + { + LOG_WARNING(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); + return; + } + + u32 tid = GetCurrentCPUThread()->GetId(); + + ef->m_mutex.lock(tid); + ef->flags |= (u64)1 << flag; + if (u32 target = ef->check()) + { + // if signal, leave both mutexes locked... + ef->signal.lock(target); + ef->m_mutex.unlock(tid, target); + } + else + { + ef->m_mutex.unlock(tid); + } + + return; + } else { u32 data; From f153143c9d928caf39c9c95e69908adfa20918f4 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 21 Aug 2014 06:20:41 +0400 Subject: [PATCH 385/499] still FSCRRD --- rpcs3/Emu/Cell/SPURecompiler.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 4646d747b5..da49ef20db 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -2475,7 +2475,11 @@ private: } void FSCRRD(u32 rt) { - UNIMPLEMENTED(); + // zero (hack) + const XmmLink& v0 = XmmAlloc(rt); + c.pxor(v0.get(), v0.get()); + XmmFinalize(v0, rt); + LOG_OPCODE(); } void FESD(u32 rt, u32 ra) { @@ -2495,9 +2499,10 @@ private: } void FSCRWR(u32 rt, u32 ra) { - UNIMPLEMENTED(); + // nop (not implemented) + LOG_OPCODE(); } - void DFTSV(u32 rt, u32 ra, s32 i7) //nf + void DFTSV(u32 rt, u32 ra, s32 i7) { UNIMPLEMENTED(); } From 4760ec63e2d300f25472f4955e5e97800ab7afff Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 21 Aug 2014 13:56:02 +0400 Subject: [PATCH 386/499] cellSpurs: debug preparations Almost all functions registered --- rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 1643 +++++++++++++++------- 1 file changed, 1107 insertions(+), 536 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 76a8f423ca..d8af04b127 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -10,108 +10,98 @@ //Module cellSpurs(0x000a, cellSpurs_init); Module *cellSpurs = nullptr; -int cellSpursInitialize(mem_ptr_t spurs, int nSpus, int spuPriority, - int ppuPriority, bool exitIfNoWork) +#ifdef PRX_DEBUG +extern u32 libsre; +extern u32 libsre_rtoc; +#endif + +s32 cellSpursInitialize(mem_ptr_t spurs, s32 nSpus, s32 spuPriority, s32 ppuPriority, bool exitIfNoWork) { - cellSpurs->Warning("cellSpursInitialize(spurs_addr=0x%x, nSpus=%u, spuPriority=%u, ppuPriority=%u, exitIfNoWork=%u)", spurs.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursInitialize : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursInitialize(spurs_addr=0x%x, nSpus=%d, spuPriority=%d, ppuPriority=%d, exitIfNoWork=%d)", spurs.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x8480, libsre_rtoc); +#else SPURSManagerAttribute *attr = new SPURSManagerAttribute(nSpus, spuPriority, ppuPriority, exitIfNoWork); spurs->spurs = new SPURSManager(attr); return CELL_OK; +#endif } -int cellSpursFinalize(mem_ptr_t spurs) +s32 cellSpursFinalize(mem_ptr_t spurs) { cellSpurs->Warning("cellSpursFinalize(spurs_addr=0x%x)", spurs.GetAddr()); - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursFinalize : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } - +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x8568, libsre_rtoc); +#else spurs->spurs->Finalize(); return CELL_OK; +#endif } -int cellSpursInitializeWithAttribute(mem_ptr_t spurs, const mem_ptr_t attr) +s32 cellSpursInitializeWithAttribute(mem_ptr_t spurs, const mem_ptr_t attr) { cellSpurs->Warning("cellSpursInitializeWithAttribute(spurs_addr=0x%x, spurs_addr=0x%x)", spurs.GetAddr(), attr.GetAddr()); - if ((spurs.GetAddr() % 128 != 0) || (attr.GetAddr() % 8 != 0)) - { - cellSpurs->Error("cellSpursInitializeWithAttribute : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } - +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x839C, libsre_rtoc); +#else spurs->spurs = new SPURSManager(attr->attr); return CELL_OK; +#endif } -int cellSpursInitializeWithAttribute2(mem_ptr_t spurs, const mem_ptr_t attr) +s32 cellSpursInitializeWithAttribute2(mem_ptr_t spurs, const mem_ptr_t attr) { cellSpurs->Warning("cellSpursInitializeWithAttribute2(spurs_addr=0x%x, spurs_addr=0x%x)", spurs.GetAddr(), attr.GetAddr()); - if ((spurs.GetAddr() % 128 != 0) || (attr.GetAddr() % 8 != 0)) - { - cellSpurs->Error("cellSpursInitializeWithAttribute2 : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } - +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x82B4, libsre_rtoc); +#else spurs->spurs = new SPURSManager(attr->attr); return CELL_OK; +#endif } -int _cellSpursAttributeInitialize(mem_ptr_t attr, int nSpus, int spuPriority, int ppuPriority, bool exitIfNoWork) +s32 _cellSpursAttributeInitialize(mem_ptr_t attr, s32 nSpus, s32 spuPriority, s32 ppuPriority, bool exitIfNoWork) { - cellSpurs->Warning("_cellSpursAttributeInitialize(attr_addr=0x%x, nSpus=%u, spuPriority=%u, ppuPriority=%u, exitIfNoWork=%u)", attr.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork); - - if (attr.GetAddr() % 8 != 0) - { - cellSpurs->Error("_cellSpursAttributeInitialize : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("_cellSpursAttributeInitialize(attr_addr=0x%x, nSpus=%d, spuPriority=%d, ppuPriority=%d, exitIfNoWork=%d)", + attr.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x72CC, libsre_rtoc); +#else attr->attr = new SPURSManagerAttribute(nSpus, spuPriority, ppuPriority, exitIfNoWork); return CELL_OK; +#endif } -int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_t attr, u32 container) +s32 cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_t attr, u32 container) { cellSpurs->Warning("cellSpursAttributeSetMemoryContainerForSpuThread(attr_addr=0x%x, container=0x%x)", attr.GetAddr(), container); - if (attr.GetAddr() % 8 != 0) - { - cellSpurs->Error("cellSpursAttributeSetMemoryContainerForSpuThread : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } - +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x6FF8, libsre_rtoc); +#else attr->attr->_setMemoryContainerForSpuThread(container); return CELL_OK; +#endif } -int cellSpursAttributeSetNamePrefix(mem_ptr_t attr, const mem8_t prefix, u32 size) +s32 cellSpursAttributeSetNamePrefix(mem_ptr_t attr, const mem8_t prefix, u32 size) { cellSpurs->Warning("cellSpursAttributeSetNamePrefix(attr_addr=0x%x, prefix_addr=0x%x, size=0x%x)", attr.GetAddr(), prefix.GetAddr(), size); - if (attr.GetAddr() % 8 != 0) - { - cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } - +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x7234, libsre_rtoc); +#else if (size > CELL_SPURS_NAME_MAX_LENGTH) { cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_INVAL"); @@ -121,48 +111,42 @@ int cellSpursAttributeSetNamePrefix(mem_ptr_t attr, const me attr->attr->_setNamePrefix(Memory.ReadString(prefix.GetAddr(), size).c_str(), size); return CELL_OK; +#endif } -int cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t attr) +s32 cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t attr) { - cellSpurs->Todo("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr()); - - if (attr.GetAddr() % 8 != 0) - { - cellSpurs->Error("cellSpursAttributeEnableSpuPrintfIfAvailable : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x7150, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t attr, int type) +s32 cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t attr, s32 type) { - cellSpurs->Warning("cellSpursAttributeSetSpuThreadGroupType(attr_addr=0x%x, type=%u)", attr.GetAddr(), type); - - if (attr.GetAddr() % 8 != 0) - { - cellSpurs->Error("cellSpursAttributeSetNamePrefix : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursAttributeSetSpuThreadGroupType(attr_addr=0x%x, type=%d)", attr.GetAddr(), type); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x70C8, libsre_rtoc); +#else attr->attr->_setSpuThreadGroupType(type); return CELL_OK; +#endif } -int cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, const u8 priority[CELL_SPURS_MAX_SPU], - u32 maxSpu, const bool isPreemptible[CELL_SPURS_MAX_SPU]) +s32 cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, mem8_ptr_t priority, u32 maxSpu, mem8_ptr_t isPreemptible) { - cellSpurs->Todo("cellSpursAttributeEnableSystemWorkload(attr_addr=0x%x, priority[%u], maxSpu=%u, isPreemptible[%u])", attr.GetAddr(), priority, maxSpu, isPreemptible); + cellSpurs->Warning("cellSpursAttributeEnableSystemWorkload(attr_addr=0x%x, priority_addr=0x%x, maxSpu=%d, isPreemptible_addr=0x%x)", + attr.GetAddr(), priority.GetAddr(), maxSpu, isPreemptible.GetAddr()); - if (attr.GetAddr() % 8 != 0) - { - cellSpurs->Error("cellSpursAttributeEnableSystemWorkload : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } - - for (int i = 0; i < CELL_SPURS_MAX_SPU; i++) +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xF410, libsre_rtoc); +#else + for (s32 i = 0; i < CELL_SPURS_MAX_SPU; i++) { if (priority[i] != 1 || maxSpu == 0) { @@ -171,560 +155,658 @@ int cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, c } } return CELL_OK; +#endif } -int cellSpursGetSpuThreadGroupId(mem_ptr_t spurs, mem32_t group) +s32 cellSpursGetSpuThreadGroupId(mem_ptr_t spurs, mem32_t group) { - cellSpurs->Todo("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)", spurs.GetAddr(), group.GetAddr()); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursGetSpuThreadGroupId : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)", spurs.GetAddr(), group.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x8B30, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursGetNumSpuThread(mem_ptr_t spurs, mem32_t nThreads) +s32 cellSpursGetNumSpuThread(mem_ptr_t spurs, mem32_t nThreads) { - cellSpurs->Todo("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), nThreads.GetAddr()); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursGetNumSpuThread : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), nThreads.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x8B78, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursGetSpuThreadId(mem_ptr_t spurs, mem32_t thread, mem32_t nThreads) +s32 cellSpursGetSpuThreadId(mem_ptr_t spurs, mem32_t thread, mem32_t nThreads) { - cellSpurs->Todo("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr()); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursGetSpuThreadId : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x8A98, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursSetMaxContention(mem_ptr_t spurs, u32 workloadId, u32 maxContention) +s32 cellSpursSetMaxContention(mem_ptr_t spurs, u32 workloadId, u32 maxContention) { - cellSpurs->Todo("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%u, maxContention=%u)", spurs.GetAddr(), workloadId, maxContention); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursSetMaxContention : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%d, maxContention=%d)", spurs.GetAddr(), workloadId, maxContention); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x8E90, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursSetPriorities(mem_ptr_t spurs, u32 workloadId, const u8 priorities[CELL_SPURS_MAX_SPU]) +s32 cellSpursSetPriorities(mem_ptr_t spurs, u32 workloadId, const mem8_ptr_t priorities) { - cellSpurs->Todo("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%u, priorities[%u])", spurs.GetAddr(), workloadId, priorities); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursSetPriorities : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%d, priorities_addr=0x%x)", spurs.GetAddr(), workloadId, priorities.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x8BC0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursSetPriority(mem_ptr_t spurs, u32 workloadId, u32 spuId, u32 priority) +s32 cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, mem8_ptr_t isPreemptible) { - cellSpurs->Todo("cellSpursSetPriority(spurs_addr=0x%x, workloadId=%u, spuId=%u, priority=%u)", spurs.GetAddr(), workloadId, spuId, priority); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursSetPriority : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible_addr=0x%x)", spurs.GetAddr(), isPreemptible.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xF5A4, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, const bool isPreemptible[CELL_SPURS_MAX_SPU]) +s32 cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t port, s32 isDynamic) { - cellSpurs->Todo("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible[%u])", spurs.GetAddr(), isPreemptible); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursSetPreemptionVictimHints : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=%d, port_addr=0x%x, isDynamic=%d)", + spurs.GetAddr(), queue, port.GetAddr(), isDynamic); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xAFE0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t port, int isDynamic) -{ - cellSpurs->Warning("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)", spurs.GetAddr(), queue, port.GetAddr(), isDynamic); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursAttachLv2EventQueue : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } - - spurs->spurs->AttachLv2EventQueue(queue, port, isDynamic); - - return CELL_OK; -} - -int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) +s32 cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) { cellSpurs->Warning("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursDetachLv2EventQueue : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } - - spurs->spurs->DetachLv2EventQueue(port); - +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xB144, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) +s32 cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) { - cellSpurs->Todo("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%u)", spurs.GetAddr(), flag); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEnableExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%d)", spurs.GetAddr(), flag); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xDCC0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, mem_func_ptr_t eaHandler, mem_ptr_t arg) +s32 cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, mem_func_ptr_t eaHandler, u32 arg_addr) { - cellSpurs->Todo("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)", spurs.GetAddr(), eaHandler.GetAddr(), arg.GetAddr()); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursSetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)", + spurs.GetAddr(), eaHandler.GetAddr(), arg_addr); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xD6D0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t spurs) +s32 cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t spurs) { - cellSpurs->Todo("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr()); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursUnsetGlobalExceptionEventHandler : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xD674, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) +s32 cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) { - cellSpurs->Todo("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr()); - - if (spurs.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursGetInfo : CELL_SPURS_CORE_ERROR_ALIGN"); - return CELL_SPURS_CORE_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xE540, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t taskset, mem_ptr_t eventFlag, u32 flagClearMode, u32 flagDirection) +s32 _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t taskset, mem_ptr_t eventFlag, u32 flagClearMode, u32 flagDirection) { - cellSpurs->Warning("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%u, flagDirection=%u)", spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); - - if ((taskset.GetAddr() % 128 != 0) || (eventFlag.GetAddr() % 128 != 0)) - { - cellSpurs->Error("_cellSpursEventFlagInitialize : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } - - eventFlag->eventFlag = new SPURSManagerEventFlag(flagClearMode, flagDirection); + cellSpurs->Warning("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%d, flagDirection=%d)", + spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1564C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagAttachLv2EventQueue(mem_ptr_t eventFlag) +s32 cellSpursEventFlagAttachLv2EventQueue(mem_ptr_t eventFlag) { - cellSpurs->Todo("cellSpursEventFlagAttachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagAttachLv2EventQueue : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursEventFlagAttachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x157B8, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagDetachLv2EventQueue(mem_ptr_t eventFlag) +s32 cellSpursEventFlagDetachLv2EventQueue(mem_ptr_t eventFlag) { - cellSpurs->Todo("cellSpursEventFlagDetachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagDetachLv2EventQueue : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursEventFlagDetachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x15998, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) +s32 cellSpursEventFlagWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) { - cellSpurs->Todo("cellSpursEventFlagWait(eventFlag_addr=0x%x, mask=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagWait : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursEventFlagWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=%d)", eventFlag.GetAddr(), mask.GetAddr(), mode); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x15E68, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagClear(mem_ptr_t eventFlag, u16 bits) +s32 cellSpursEventFlagClear(mem_ptr_t eventFlag, u16 bits) { - cellSpurs->Todo("cellSpursEventFlagClear(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagClear : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursEventFlagClear(eventFlag_addr=0x%x, bits=0x%x)", eventFlag.GetAddr(), bits); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x15E9C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagSet(mem_ptr_t eventFlag, u16 bits) +s32 cellSpursEventFlagSet(mem_ptr_t eventFlag, u16 bits) { - cellSpurs->Todo("cellSpursEventFlagSet(eventFlag_addr=0x%x, bits=%u)", eventFlag.GetAddr(), bits); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagSet : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursEventFlagSet(eventFlag_addr=0x%x, bits=0x%x)", eventFlag.GetAddr(), bits); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x15F04, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) +s32 cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) { - cellSpurs->Todo("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=%u)", eventFlag.GetAddr(), mask.GetAddr(), mode); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=0x%x)", eventFlag.GetAddr(), mask.GetAddr(), mode); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x15E70, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem32_t direction) +s32 cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem32_t direction) { - cellSpurs->Warning("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=%u)", eventFlag.GetAddr(), direction.GetAddr()); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagGetDirection : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } - - direction = eventFlag->eventFlag->_getDirection(); + cellSpurs->Warning("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=0x%x)", eventFlag.GetAddr(), direction.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x162C4, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem32_t clear_mode) +s32 cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem32_t clear_mode) { - cellSpurs->Warning("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=%u)", eventFlag.GetAddr(), clear_mode.GetAddr()); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagGetClearMode : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } - - clear_mode = eventFlag->eventFlag->_getClearMode(); + cellSpurs->Warning("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=0x%x)", eventFlag.GetAddr(), clear_mode.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x16310, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursEventFlagGetTasksetAddress(mem_ptr_t eventFlag, mem_ptr_t taskset) +s32 cellSpursEventFlagGetTasksetAddress(mem_ptr_t eventFlag, mem_ptr_t taskset) { - cellSpurs->Todo("cellSpursEventFlagGetTasksetAddress(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); - - if (eventFlag.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursEventFlagTryWait : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursEventFlagGetTasksetAddress(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1635C, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursLFQueueInitialize() +s32 _cellSpursLFQueueInitialize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17028, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursLFQueuePushBody() +s32 _cellSpursLFQueuePushBody() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x170AC, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursLFQueueDetachLv2EventQueue() +s32 cellSpursLFQueueDetachLv2EventQueue() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x177CC, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursLFQueueAttachLv2EventQueue() +s32 cellSpursLFQueueAttachLv2EventQueue() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x173EC, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursLFQueuePopBody() +s32 _cellSpursLFQueuePopBody() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17238, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursLFQueueGetTasksetAddress() +s32 cellSpursLFQueueGetTasksetAddress() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17C34, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursQueueInitialize() +s32 _cellSpursQueueInitialize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x163B4, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueuePopBody() +s32 cellSpursQueuePopBody() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x16BF0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueuePushBody() +s32 cellSpursQueuePushBody() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x168C4, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueueAttachLv2EventQueue() +s32 cellSpursQueueAttachLv2EventQueue() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1666C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueueDetachLv2EventQueue() +s32 cellSpursQueueDetachLv2EventQueue() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x16524, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueueGetTasksetAddress() +s32 cellSpursQueueGetTasksetAddress() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x16F50, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueueClear() +s32 cellSpursQueueClear() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1675C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueueDepth() +s32 cellSpursQueueDepth() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1687C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueueGetEntrySize() +s32 cellSpursQueueGetEntrySize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x16FE0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueueSize() +s32 cellSpursQueueSize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x167F0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursQueueGetDirection() +s32 cellSpursQueueGetDirection() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x16F98, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateJobChainWithAttribute() +s32 cellSpursCreateJobChainWithAttribute() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1898C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateJobChain() +s32 cellSpursCreateJobChain() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x18B84, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJoinJobChain() +s32 cellSpursJoinJobChain() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x18DB0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursKickJobChain() +s32 cellSpursKickJobChain() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x18E8C, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursJobChainAttributeInitialize() +s32 _cellSpursJobChainAttributeInitialize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1845C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateTasksetWithAttribute() +s32 cellSpursGetJobChainId() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x19064, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_t taskset, u64 args, mem8_t priority, u32 maxContention) +s32 cellSpursJobChainSetExceptionEventHandler() { - cellSpurs->Todo("cellSpursCreateTaskset(spurs_addr=0x%x, taskset_addr=0x%x, args=0x%x, priority_addr=0x%x, maxContention=%u)", spurs.GetAddr(), taskset.GetAddr(), args, priority.GetAddr(), maxContention); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1A5A0, libsre_rtoc); +#else + return CELL_OK; +#endif +} - if ((spurs.GetAddr() % 128 != 0) || (taskset.GetAddr() % 128 != 0)) - { - cellSpurs->Error("cellSpursCreateTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } +s32 cellSpursJobChainUnsetExceptionEventHandler() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1A614, libsre_rtoc); +#else + return CELL_OK; +#endif +} +s32 cellSpursGetJobChainInfo() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1A7A0, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursJobChainGetSpursAddress() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1A900, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursCreateTasksetWithAttribute() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x14BEC, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_t taskset, u64 args, mem8_t priority, u32 maxContention) +{ + cellSpurs->Warning("cellSpursCreateTaskset(spurs_addr=0x%x, taskset_addr=0x%x, args=0x%llx, priority_addr=0x%x, maxContention=%d)", + spurs.GetAddr(), taskset.GetAddr(), args, priority.GetAddr(), maxContention); + +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x14CB8, libsre_rtoc); +#else SPURSManagerTasksetAttribute *tattr = new SPURSManagerTasksetAttribute(args, priority, maxContention); taskset->taskset = new SPURSManagerTaskset(taskset.GetAddr(), tattr); return CELL_OK; +#endif } -int cellSpursJoinTaskset(mem_ptr_t taskset) +s32 cellSpursJoinTaskset(mem_ptr_t taskset) { - cellSpurs->Todo("cellSpursJoinTaskset(taskset_addr=0x%x)", taskset.GetAddr()); - - if (taskset.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursJoinTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursJoinTaskset(taskset_addr=0x%x)", taskset.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x152F8, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursGetTasksetId(mem_ptr_t taskset, mem32_t workloadId) +s32 cellSpursGetTasksetId(mem_ptr_t taskset, mem32_t workloadId) { - cellSpurs->Todo("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr()); - - if (taskset.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursGetTasksetId : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x14EA0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursShutdownTaskset(mem_ptr_t taskset) +s32 cellSpursShutdownTaskset(mem_ptr_t taskset) { - cellSpurs->Todo("cellSpursShutdownTaskset(taskset_addr=0x%x)", taskset.GetAddr()); - - if (taskset.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursShutdownTaskset : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursShutdownTaskset(taskset_addr=0x%x)", taskset.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x14868, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateTask(mem_ptr_t taskset, mem32_t taskID, mem_ptr_t elf_addr, - mem_ptr_t context_addr, u32 context_size, mem_ptr_t lsPattern, +s32 cellSpursCreateTask(mem_ptr_t taskset, mem32_t taskID, u32 elf_addr, u32 context_addr, u32 context_size, mem_ptr_t lsPattern, mem_ptr_t argument) { - cellSpurs->Todo("cellSpursCreateTask(taskset_addr=0x%x, taskID_addr=0x%x, elf_addr_addr=0x%x, context_addr_addr=0x%x, context_size=%u, lsPattern_addr=0x%x, argument_addr=0x%x)", - taskset.GetAddr(), taskID.GetAddr(), elf_addr.GetAddr(), context_addr.GetAddr(), context_size, lsPattern.GetAddr(), argument.GetAddr()); - - if (taskset.GetAddr() % 128 != 0) - { - cellSpurs->Error("cellSpursCreateTask : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("cellSpursCreateTask(taskset_addr=0x%x, taskID_addr=0x%x, elf_addr_addr=0x%x, context_addr_addr=0x%x, context_size=%d, lsPattern_addr=0x%x, argument_addr=0x%x)", + taskset.GetAddr(), taskID.GetAddr(), elf_addr, context_addr, context_size, lsPattern.GetAddr(), argument.GetAddr()); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x12414, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursSendSignal(mem_ptr_t taskset, u32 taskID) +s32 _cellSpursSendSignal(mem_ptr_t taskset, u32 taskID) { - cellSpurs->Todo("_cellSpursSendSignal(taskset_addr=0x%x, taskID=%u)", taskset.GetAddr(), taskID); - - if (taskset.GetAddr() % 128 != 0) - { - cellSpurs->Error("_cellSpursSendSignal : CELL_SPURS_TASK_ERROR_ALIGN"); - return CELL_SPURS_TASK_ERROR_ALIGN; - } + cellSpurs->Warning("_cellSpursSendSignal(taskset_addr=0x%x, taskID=%d)", taskset.GetAddr(), taskID); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x124CC, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateTaskWithAttribute() +s32 cellSpursCreateTaskWithAttribute() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x12204, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTasksetAttributeSetName() +s32 cellSpursTasksetAttributeSetName() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x14210, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursTasksetAttribute2Initialize(mem_ptr_t attribute, u32 revision) +s32 cellSpursTasksetAttributeSetTasksetSize() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x14254, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursTasksetAttributeEnableClearLS() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x142AC, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 _cellSpursTasksetAttribute2Initialize(mem_ptr_t attribute, u32 revision) { cellSpurs->Warning("_cellSpursTasksetAttribute2Initialize(attribute_addr=0x%x, revision=%d)", attribute.GetAddr(), revision); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1474C, libsre_rtoc); +#else attribute->revision = revision; attribute->name_addr = NULL; attribute->argTaskset = 0; - for (int i = 0; i < 8; i++) + for (s32 i = 0; i < 8; i++) { attribute->priority[i] = 1; } @@ -734,70 +816,106 @@ int _cellSpursTasksetAttribute2Initialize(mem_ptr_t attribute->CellSpursTaskNameBuffer_addr = 0; return CELL_OK; +#endif } -int cellSpursTaskExitCodeGet() +s32 cellSpursTaskExitCodeGet() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1397C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTaskExitCodeInitialize() +s32 cellSpursTaskExitCodeInitialize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1352C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTaskExitCodeTryGet() +s32 cellSpursTaskExitCodeTryGet() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x13974, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTaskGetLoadableSegmentPattern() +s32 cellSpursTaskGetLoadableSegmentPattern() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x13ED4, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTaskGetReadOnlyAreaPattern() +s32 cellSpursTaskGetReadOnlyAreaPattern() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x13CFC, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTaskGenerateLsPattern() +s32 cellSpursTaskGenerateLsPattern() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x13B78, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTaskAttributeInitialize() +s32 _cellSpursTaskAttributeInitialize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x10C30, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTaskAttributeSetExitCodeContainer() +s32 cellSpursTaskAttributeSetExitCodeContainer() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x10A98, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursTaskAttribute2Initialize(mem_ptr_t attribute, u32 revision) +s32 _cellSpursTaskAttribute2Initialize(mem_ptr_t attribute, u32 revision) { cellSpurs->Warning("_cellSpursTaskAttribute2Initialize(attribute_addr=0x%x, revision=%d)", attribute.GetAddr(), revision); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x10B00, libsre_rtoc); +#else attribute->revision = revision; attribute->sizeContext = 0; attribute->eaContext = NULL; - for (int c = 0; c < 4; c++) + for (s32 c = 0; c < 4; c++) { attribute->lsPattern.u32[c] = 0; } - for (int i = 0; i < 2; i++) + for (s32 i = 0; i < 2; i++) { attribute->lsPattern.u64[i] = 0; } @@ -805,250 +923,703 @@ int _cellSpursTaskAttribute2Initialize(mem_ptr_t attrib attribute->name_addr = 0; return CELL_OK; +#endif } -int cellSpursTaskGetContextSaveAreaSize() +s32 cellSpursTaskGetContextSaveAreaSize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1409C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateTaskset2() +s32 cellSpursCreateTaskset2() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x15108, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateTask2() +s32 cellSpursCreateTask2() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x11E54, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJoinTask2() +s32 cellSpursJoinTask2() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x11378, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTryJoinTask2() +s32 cellSpursTryJoinTask2() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x11748, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursDestroyTaskset2() +s32 cellSpursDestroyTaskset2() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x14EE8, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursCreateTask2WithBinInfo() +s32 cellSpursCreateTask2WithBinInfo() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x120E0, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursLookUpTasksetAddress() +s32 cellSpursTasksetSetExceptionEventHandler() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x13124, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursTasksetGetSpursAddress() +s32 cellSpursTasksetUnsetExceptionEventHandler() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x13194, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpurssetExceptionEventHandler() +s32 cellSpursLookUpTasksetAddress() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x133AC, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursUnsetExceptionEventHandler() +s32 cellSpursTasksetGetSpursAddress() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x14408, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursGetTasksetInfo() +s32 cellSpursSetExceptionEventHandler() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xDB54, libsre_rtoc); +#else return CELL_OK; +#endif } -int _cellSpursTasksetAttributeInitialize() +s32 cellSpursUnsetExceptionEventHandler() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xD77C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJobGuardInitialize() +s32 cellSpursGetTasksetInfo() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1445C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJobChainAttributeSetName() +s32 _cellSpursTasksetAttributeInitialize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x142FC, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursShutdownJobChain() +s32 cellSpursJobGuardInitialize() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1807C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJobChainAttributeSetHaltOnError() +s32 cellSpursJobChainAttributeSetName() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1861C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJobChainAttributesetJobTypeMemoryCheck() +s32 cellSpursShutdownJobChain() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x18D2C, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJobGuardNotify() +s32 cellSpursJobChainAttributeSetHaltOnError() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x18660, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJobGuardReset() +s32 cellSpursJobChainAttributeSetJobTypeMemoryCheck() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x186A4, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursRunJobChain() +s32 cellSpursJobGuardNotify() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17FA4, libsre_rtoc); +#else return CELL_OK; +#endif } -int cellSpursJobChainGetError() +s32 cellSpursJobGuardReset() { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17F60, libsre_rtoc); +#else return CELL_OK; +#endif +} + +s32 cellSpursRunJobChain() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x18F94, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursJobChainGetError() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x190AC, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursWorkloadAttributeSetName() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x9664, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursWorkloadAttributeSetShutdownCompletionEventHook() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x96A4, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursAddWorkloadWithAttribute() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x9E14, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursRemoveWorkload() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xA414, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursWaitForWorkloadShutdown() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xA20C, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursAddWorkload() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x9ED0, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursWakeUp() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x84D8, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursShutdownWorkload() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xA060, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 _cellSpursWorkloadFlagReceiver() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xF158, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursGetWorkloadFlag() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xEC00, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursReadyCountStore() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xAB2C, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 _cellSpursWorkloadAttributeInitialize() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x9F08, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursSendWorkloadSignal() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xA658, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursGetWorkloadData() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xA78C, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursReadyCountAdd() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xA868, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursReadyCountCompareAndSwap() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xA9CC, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursReadyCountSwap() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xAC34, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursRequestIdleSpu() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xAD88, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursGetWorkloadInfo() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xE70C, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursGetSpuGuid() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xEFB0, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 _cellSpursWorkloadFlagReceiver2() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0xF298, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursGetJobPipelineInfo() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1A954, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursJobSetMaxGrab() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1AC88, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursJobHeaderSetJobbin2Param() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1AD58, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursAddUrgentCommand() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x18160, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursAddUrgentCall() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x1823C, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursBarrierInitialize() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17CD8, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursBarrierGetTasksetAddress() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17DB0, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 _cellSpursSemaphoreInitialize() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17DF8, libsre_rtoc); +#else + return CELL_OK; +#endif +} + +s32 cellSpursSemaphoreGetTasksetAddress() +{ + cellSpurs->Warning("%s()", __FUNCTION__); +#ifdef PRX_DEBUG + return GetCurrentPPUThread().FastCall2(libsre + 0x17F18, libsre_rtoc); +#else + return CELL_OK; +#endif } void cellSpurs_init() { // Core - cellSpurs->AddFunc(0xacfc8dbc, cellSpursInitialize); - cellSpurs->AddFunc(0xaa6269a8, cellSpursInitializeWithAttribute); - cellSpurs->AddFunc(0x30aa96c4, cellSpursInitializeWithAttribute2); - cellSpurs->AddFunc(0xca4c4600, cellSpursFinalize); - cellSpurs->AddFunc(0x95180230, _cellSpursAttributeInitialize); - cellSpurs->AddFunc(0x82275c1c, cellSpursAttributeSetMemoryContainerForSpuThread); - cellSpurs->AddFunc(0x07529113, cellSpursAttributeSetNamePrefix); - cellSpurs->AddFunc(0x1051d134, cellSpursAttributeEnableSpuPrintfIfAvailable); - cellSpurs->AddFunc(0xa839a4d9, cellSpursAttributeSetSpuThreadGroupType); - cellSpurs->AddFunc(0x9dcbcb5d, cellSpursAttributeEnableSystemWorkload); - cellSpurs->AddFunc(0x39c173fb, cellSpursGetSpuThreadGroupId); - cellSpurs->AddFunc(0xc56defb5, cellSpursGetNumSpuThread); - cellSpurs->AddFunc(0x6c960f6d, cellSpursGetSpuThreadId); - cellSpurs->AddFunc(0x1f402f8f, cellSpursGetInfo); - cellSpurs->AddFunc(0x84d2f6d5, cellSpursSetMaxContention); - cellSpurs->AddFunc(0x80a29e27, cellSpursSetPriorities); - // cellSpurs->AddFunc(, cellSpursSetPriority); - cellSpurs->AddFunc(0x4de203e2, cellSpursSetPreemptionVictimHints); - cellSpurs->AddFunc(0xb9bc6207, cellSpursAttachLv2EventQueue); - cellSpurs->AddFunc(0x4e66d483, cellSpursDetachLv2EventQueue); - cellSpurs->AddFunc(0x32b94add, cellSpursEnableExceptionEventHandler); - cellSpurs->AddFunc(0x7517724a, cellSpursSetGlobalExceptionEventHandler); - cellSpurs->AddFunc(0x861237f8, cellSpursUnsetGlobalExceptionEventHandler); + REG_FUNC(cellSpurs, cellSpursInitialize); + REG_FUNC(cellSpurs, cellSpursInitializeWithAttribute); + REG_FUNC(cellSpurs, cellSpursInitializeWithAttribute2); + REG_FUNC(cellSpurs, cellSpursFinalize); + REG_FUNC(cellSpurs, _cellSpursAttributeInitialize); + REG_FUNC(cellSpurs, cellSpursAttributeSetMemoryContainerForSpuThread); + REG_FUNC(cellSpurs, cellSpursAttributeSetNamePrefix); + REG_FUNC(cellSpurs, cellSpursAttributeEnableSpuPrintfIfAvailable); + REG_FUNC(cellSpurs, cellSpursAttributeSetSpuThreadGroupType); + REG_FUNC(cellSpurs, cellSpursAttributeEnableSystemWorkload); + REG_FUNC(cellSpurs, cellSpursGetSpuThreadGroupId); + REG_FUNC(cellSpurs, cellSpursGetNumSpuThread); + REG_FUNC(cellSpurs, cellSpursGetSpuThreadId); + REG_FUNC(cellSpurs, cellSpursGetInfo); + REG_FUNC(cellSpurs, cellSpursSetMaxContention); + REG_FUNC(cellSpurs, cellSpursSetPriorities); + REG_FUNC(cellSpurs, cellSpursSetPreemptionVictimHints); + REG_FUNC(cellSpurs, cellSpursAttachLv2EventQueue); + REG_FUNC(cellSpurs, cellSpursDetachLv2EventQueue); + REG_FUNC(cellSpurs, cellSpursEnableExceptionEventHandler); + REG_FUNC(cellSpurs, cellSpursSetGlobalExceptionEventHandler); + REG_FUNC(cellSpurs, cellSpursUnsetGlobalExceptionEventHandler); // Event flag - cellSpurs->AddFunc(0x5ef96465, _cellSpursEventFlagInitialize); - cellSpurs->AddFunc(0x87630976, cellSpursEventFlagAttachLv2EventQueue); - cellSpurs->AddFunc(0x22aab31d, cellSpursEventFlagDetachLv2EventQueue); - cellSpurs->AddFunc(0x373523d4, cellSpursEventFlagWait); - cellSpurs->AddFunc(0x4ac7bae4, cellSpursEventFlagClear); - cellSpurs->AddFunc(0xf5507729, cellSpursEventFlagSet); - cellSpurs->AddFunc(0x6d2d9339, cellSpursEventFlagTryWait); - cellSpurs->AddFunc(0x890f9e5a, cellSpursEventFlagGetDirection); - cellSpurs->AddFunc(0x4d1e9373, cellSpursEventFlagGetClearMode); - cellSpurs->AddFunc(0x947efb0b, cellSpursEventFlagGetTasksetAddress); + REG_FUNC(cellSpurs, _cellSpursEventFlagInitialize); + REG_FUNC(cellSpurs, cellSpursEventFlagAttachLv2EventQueue); + REG_FUNC(cellSpurs, cellSpursEventFlagDetachLv2EventQueue); + REG_FUNC(cellSpurs, cellSpursEventFlagWait); + REG_FUNC(cellSpurs, cellSpursEventFlagClear); + REG_FUNC(cellSpurs, cellSpursEventFlagSet); + REG_FUNC(cellSpurs, cellSpursEventFlagTryWait); + REG_FUNC(cellSpurs, cellSpursEventFlagGetDirection); + REG_FUNC(cellSpurs, cellSpursEventFlagGetClearMode); + REG_FUNC(cellSpurs, cellSpursEventFlagGetTasksetAddress); // Taskset - cellSpurs->AddFunc(0x52cc6c82, cellSpursCreateTaskset); - cellSpurs->AddFunc(0xc10931cb, cellSpursCreateTasksetWithAttribute); - cellSpurs->AddFunc(0x16394a4e, _cellSpursTasksetAttributeInitialize); - cellSpurs->AddFunc(0xc2acdf43, _cellSpursTasksetAttribute2Initialize); - cellSpurs->AddFunc(0x652b70e2, cellSpursTasksetAttributeSetName); - cellSpurs->AddFunc(0x9f72add3, cellSpursJoinTaskset); - cellSpurs->AddFunc(0xe7dd87e1, cellSpursGetTasksetId); - cellSpurs->AddFunc(0xa789e631, cellSpursShutdownTaskset); - cellSpurs->AddFunc(0xbeb600ac, cellSpursCreateTask); - cellSpurs->AddFunc(0x1d46fedf, cellSpursCreateTaskWithAttribute); - cellSpurs->AddFunc(0xb8474eff, cellSpursTaskAttributeInitialize); - cellSpurs->AddFunc(0x8adadf65, _cellSpursTaskAttribute2Initialize); - cellSpurs->AddFunc(0xa121a224, cellSpursTaskAttributeSetExitCodeContainer); - cellSpurs->AddFunc(0x13ae18f3, cellSpursTaskExitCodeGet); - cellSpurs->AddFunc(0x34552fa6, cellSpursTaskExitCodeInitialize); - cellSpurs->AddFunc(0xe717ac73, cellSpursTaskExitCodeTryGet); - cellSpurs->AddFunc(0x1d344406, cellSpursTaskGetLoadableSegmentPattern); - cellSpurs->AddFunc(0x7cb33c2e, cellSpursTaskGetReadOnlyAreaPattern); - cellSpurs->AddFunc(0x9197915f, cellSpursTaskGenerateLsPattern); - cellSpurs->AddFunc(0x9034e538, cellSpursTaskGetContextSaveAreaSize); - cellSpurs->AddFunc(0xe0a6dbe4, _cellSpursSendSignal); - cellSpurs->AddFunc(0x4a6465e3, cellSpursCreateTaskset2); - cellSpurs->AddFunc(0xe14ca62d, cellSpursCreateTask2); - cellSpurs->AddFunc(0xa7a94892, cellSpursJoinTask2); - cellSpurs->AddFunc(0x838fa4f0, cellSpursTryJoinTask2); - cellSpurs->AddFunc(0x1ebcf459, cellSpursDestroyTaskset2); - cellSpurs->AddFunc(0xe4944a1c, cellSpursCreateTask2WithBinInfo); - cellSpurs->AddFunc(0x4cce88a9, cellSpursLookUpTasksetAddress); - cellSpurs->AddFunc(0x58d58fcf, cellSpursTasksetGetSpursAddress); - cellSpurs->AddFunc(0xd2e23fa9, cellSpurssetExceptionEventHandler); - cellSpurs->AddFunc(0x4c75deb8, cellSpursUnsetExceptionEventHandler); - cellSpurs->AddFunc(0x9fcb567b, cellSpursGetTasksetInfo); + REG_FUNC(cellSpurs, cellSpursCreateTaskset); + REG_FUNC(cellSpurs, cellSpursCreateTasksetWithAttribute); + REG_FUNC(cellSpurs, _cellSpursTasksetAttributeInitialize); + REG_FUNC(cellSpurs, _cellSpursTasksetAttribute2Initialize); + REG_FUNC(cellSpurs, cellSpursTasksetAttributeSetName); + REG_FUNC(cellSpurs, cellSpursTasksetAttributeSetTasksetSize); + REG_FUNC(cellSpurs, cellSpursTasksetAttributeEnableClearLS); + REG_FUNC(cellSpurs, cellSpursJoinTaskset); + REG_FUNC(cellSpurs, cellSpursGetTasksetId); + REG_FUNC(cellSpurs, cellSpursShutdownTaskset); + REG_FUNC(cellSpurs, cellSpursCreateTask); + REG_FUNC(cellSpurs, cellSpursCreateTaskWithAttribute); + REG_FUNC(cellSpurs, _cellSpursTaskAttributeInitialize); + REG_FUNC(cellSpurs, _cellSpursTaskAttribute2Initialize); + REG_FUNC(cellSpurs, cellSpursTaskAttributeSetExitCodeContainer); + REG_FUNC(cellSpurs, cellSpursTaskExitCodeGet); + REG_FUNC(cellSpurs, cellSpursTaskExitCodeInitialize); + REG_FUNC(cellSpurs, cellSpursTaskExitCodeTryGet); + REG_FUNC(cellSpurs, cellSpursTaskGetLoadableSegmentPattern); + REG_FUNC(cellSpurs, cellSpursTaskGetReadOnlyAreaPattern); + REG_FUNC(cellSpurs, cellSpursTaskGenerateLsPattern); + REG_FUNC(cellSpurs, cellSpursTaskGetContextSaveAreaSize); + REG_FUNC(cellSpurs, _cellSpursSendSignal); + REG_FUNC(cellSpurs, cellSpursCreateTaskset2); + REG_FUNC(cellSpurs, cellSpursCreateTask2); + REG_FUNC(cellSpurs, cellSpursJoinTask2); + REG_FUNC(cellSpurs, cellSpursTryJoinTask2); + REG_FUNC(cellSpurs, cellSpursDestroyTaskset2); + REG_FUNC(cellSpurs, cellSpursCreateTask2WithBinInfo); + REG_FUNC(cellSpurs, cellSpursLookUpTasksetAddress); + REG_FUNC(cellSpurs, cellSpursTasksetGetSpursAddress); + REG_FUNC(cellSpurs, cellSpursSetExceptionEventHandler); + REG_FUNC(cellSpurs, cellSpursUnsetExceptionEventHandler); + REG_FUNC(cellSpurs, cellSpursGetTasksetInfo); + REG_FUNC(cellSpurs, cellSpursTasksetSetExceptionEventHandler); + REG_FUNC(cellSpurs, cellSpursTasksetUnsetExceptionEventHandler); // Job Chain - cellSpurs->AddFunc(0x60eb2dec, cellSpursCreateJobChain); - cellSpurs->AddFunc(0x303c19cd, cellSpursCreateJobChainWithAttribute); - cellSpurs->AddFunc(0x738e40e6, cellSpursShutdownJobChain); - cellSpurs->AddFunc(0xa7c066de, cellSpursJoinJobChain); - cellSpurs->AddFunc(0xbfea60fa, cellSpursKickJobChain); - cellSpurs->AddFunc(0xf31731bb, cellSpursRunJobChain); - cellSpurs->AddFunc(0x161da6a7, cellSpursJobChainGetError); - cellSpurs->AddFunc(0x3548f483, _cellSpursJobChainAttributeInitialize); - cellSpurs->AddFunc(0x9fef70c2, cellSpursJobChainAttributeSetName); - cellSpurs->AddFunc(0xbb68d76e, cellSpursJobChainAttributeSetHaltOnError); - cellSpurs->AddFunc(0x2cfccb99, cellSpursJobChainAttributesetJobTypeMemoryCheck); + REG_FUNC(cellSpurs, cellSpursCreateJobChain); + REG_FUNC(cellSpurs, cellSpursCreateJobChainWithAttribute); + REG_FUNC(cellSpurs, cellSpursShutdownJobChain); + REG_FUNC(cellSpurs, cellSpursJoinJobChain); + REG_FUNC(cellSpurs, cellSpursKickJobChain); + REG_FUNC(cellSpurs, cellSpursRunJobChain); + REG_FUNC(cellSpurs, cellSpursJobChainGetError); + REG_FUNC(cellSpurs, _cellSpursJobChainAttributeInitialize); + REG_FUNC(cellSpurs, cellSpursJobChainAttributeSetName); + REG_FUNC(cellSpurs, cellSpursJobChainAttributeSetHaltOnError); + REG_FUNC(cellSpurs, cellSpursJobChainAttributeSetJobTypeMemoryCheck); + REG_FUNC(cellSpurs, cellSpursGetJobChainId); + REG_FUNC(cellSpurs, cellSpursJobChainSetExceptionEventHandler); + REG_FUNC(cellSpurs, cellSpursJobChainUnsetExceptionEventHandler); + REG_FUNC(cellSpurs, cellSpursGetJobChainInfo); + REG_FUNC(cellSpurs, cellSpursJobChainGetSpursAddress); // Job Guard - cellSpurs->AddFunc(0x68aaeba9, cellSpursJobGuardInitialize); - cellSpurs->AddFunc(0xd5d0b256, cellSpursJobGuardNotify); - cellSpurs->AddFunc(0x00af2519, cellSpursJobGuardReset); + REG_FUNC(cellSpurs, cellSpursJobGuardInitialize); + REG_FUNC(cellSpurs, cellSpursJobGuardNotify); + REG_FUNC(cellSpurs, cellSpursJobGuardReset); // LFQueue - cellSpurs->AddFunc(0x011ee38b, _cellSpursLFQueueInitialize); - cellSpurs->AddFunc(0x8a85674d, _cellSpursLFQueuePushBody); - cellSpurs->AddFunc(0x1656d49f, cellSpursLFQueueAttachLv2EventQueue); - cellSpurs->AddFunc(0x73e06f91, cellSpursLFQueueDetachLv2EventQueue); - cellSpurs->AddFunc(0x35dae22b, _cellSpursLFQueuePopBody); - cellSpurs->AddFunc(0xb792ca1a, cellSpursLFQueueGetTasksetAddress); + REG_FUNC(cellSpurs, _cellSpursLFQueueInitialize); + REG_FUNC(cellSpurs, _cellSpursLFQueuePushBody); + REG_FUNC(cellSpurs, cellSpursLFQueueAttachLv2EventQueue); + REG_FUNC(cellSpurs, cellSpursLFQueueDetachLv2EventQueue); + REG_FUNC(cellSpurs, _cellSpursLFQueuePopBody); + REG_FUNC(cellSpurs, cellSpursLFQueueGetTasksetAddress); // Queue - cellSpurs->AddFunc(0x082bfb09, _cellSpursQueueInitialize); - cellSpurs->AddFunc(0x91066667, cellSpursQueuePopBody); - cellSpurs->AddFunc(0x92cff6ed, cellSpursQueuePushBody); - cellSpurs->AddFunc(0xe5443be7, cellSpursQueueAttachLv2EventQueue); - cellSpurs->AddFunc(0x039d70b7, cellSpursQueueDetachLv2EventQueue); - cellSpurs->AddFunc(0x2093252b, cellSpursQueueGetTasksetAddress); - cellSpurs->AddFunc(0x247414d0, cellSpursQueueClear); - cellSpurs->AddFunc(0x35f02287, cellSpursQueueDepth); - cellSpurs->AddFunc(0x369fe03d, cellSpursQueueGetEntrySize); - cellSpurs->AddFunc(0x54876603, cellSpursQueueSize); - cellSpurs->AddFunc(0xec68442c, cellSpursQueueGetDirection); + REG_FUNC(cellSpurs, _cellSpursQueueInitialize); + REG_FUNC(cellSpurs, cellSpursQueuePopBody); + REG_FUNC(cellSpurs, cellSpursQueuePushBody); + REG_FUNC(cellSpurs, cellSpursQueueAttachLv2EventQueue); + REG_FUNC(cellSpurs, cellSpursQueueDetachLv2EventQueue); + REG_FUNC(cellSpurs, cellSpursQueueGetTasksetAddress); + REG_FUNC(cellSpurs, cellSpursQueueClear); + REG_FUNC(cellSpurs, cellSpursQueueDepth); + REG_FUNC(cellSpurs, cellSpursQueueGetEntrySize); + REG_FUNC(cellSpurs, cellSpursQueueSize); + REG_FUNC(cellSpurs, cellSpursQueueGetDirection); + + // Workload + REG_FUNC(cellSpurs, cellSpursWorkloadAttributeSetName); + REG_FUNC(cellSpurs, cellSpursWorkloadAttributeSetShutdownCompletionEventHook); + REG_FUNC(cellSpurs, cellSpursAddWorkloadWithAttribute); + REG_FUNC(cellSpurs, cellSpursAddWorkload); + REG_FUNC(cellSpurs, cellSpursShutdownWorkload); + REG_FUNC(cellSpurs, cellSpursWaitForWorkloadShutdown); + REG_FUNC(cellSpurs, cellSpursRemoveWorkload); + REG_FUNC(cellSpurs, cellSpursReadyCountStore); + REG_FUNC(cellSpurs, cellSpursGetWorkloadFlag); + REG_FUNC(cellSpurs, _cellSpursWorkloadFlagReceiver); + REG_FUNC(cellSpurs, _cellSpursWorkloadAttributeInitialize); + REG_FUNC(cellSpurs, cellSpursSendWorkloadSignal); + REG_FUNC(cellSpurs, cellSpursGetWorkloadData); + REG_FUNC(cellSpurs, cellSpursReadyCountAdd); + REG_FUNC(cellSpurs, cellSpursReadyCountCompareAndSwap); + REG_FUNC(cellSpurs, cellSpursReadyCountSwap); + REG_FUNC(cellSpurs, cellSpursRequestIdleSpu); + REG_FUNC(cellSpurs, cellSpursGetWorkloadInfo); + REG_FUNC(cellSpurs, cellSpursGetSpuGuid); + REG_FUNC(cellSpurs, _cellSpursWorkloadFlagReceiver2); + REG_FUNC(cellSpurs, cellSpursGetJobPipelineInfo); + REG_FUNC(cellSpurs, cellSpursJobSetMaxGrab); + REG_FUNC(cellSpurs, cellSpursJobHeaderSetJobbin2Param); + + REG_FUNC(cellSpurs, cellSpursWakeUp); + REG_FUNC(cellSpurs, cellSpursAddUrgentCommand); + REG_FUNC(cellSpurs, cellSpursAddUrgentCall); + + REG_FUNC(cellSpurs, cellSpursBarrierInitialize); + REG_FUNC(cellSpurs, cellSpursBarrierGetTasksetAddress); + + REG_FUNC(cellSpurs, _cellSpursSemaphoreInitialize); + REG_FUNC(cellSpurs, cellSpursSemaphoreGetTasksetAddress); } +#undef PRX_DEBUG \ No newline at end of file From 184007e1e00b3fd68f092760b2154704e9e40239 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 21 Aug 2014 16:55:28 +0400 Subject: [PATCH 387/499] sys_spu_thread_throw_event --- rpcs3/Emu/Cell/SPUThread.h | 44 ++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 10 +++++ rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 1 + 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index bae99599e2..6ccfc574be 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -969,10 +969,10 @@ public: } else { - u8 code = v >> 24; + const u8 code = v >> 24; if (code < 64) { - /* ===== sys_spu_thread_send_event ===== */ + /* ===== sys_spu_thread_send_event (used by spu_printf) ===== */ u8 spup = code & 63; @@ -1001,13 +1001,12 @@ public: if (!port.eq) { - // spu_printf fails there LOG_WARNING(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); SPU.In_MBox.PushUncond(CELL_ENOTCONN); // TODO: check error passing return; } - if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, GetCurrentCPUThread()->GetId(), ((u64)code << 32) | (v & 0x00ffffff), data)) + if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, GetCurrentCPUThread()->GetId(), ((u64)spup << 32) | (v & 0x00ffffff), data)) { SPU.In_MBox.PushUncond(CELL_EBUSY); return; @@ -1016,6 +1015,43 @@ public: SPU.In_MBox.PushUncond(CELL_OK); return; } + else if (code < 128) + { + /* ===== sys_spu_thread_throw_event ===== */ + + const u8 spup = code & 63; + + u32 data; + if (!SPU.Out_MBox.Pop(data)) + { + LOG_ERROR(Log::SPU, "sys_spu_thread_throw_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); + return; + } + + //if (Ini.HLELogging.GetValue()) + { + LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); + } + + EventPort& port = SPUPs[spup]; + + std::lock_guard lock(port.m_mutex); + + if (!port.eq) + { + LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); + return; + } + + // TODO: check passing spup value + if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, GetCurrentCPUThread()->GetId(), ((u64)spup << 32) | (v & 0x00ffffff), data)) + { + LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x) failed (queue is full)", spup, (v & 0x00ffffff), data); + return; + } + + return; + } else if (code == 128) { /* ===== sys_event_flag_set_bit ===== */ diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 86adba31be..57ddfa1626 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -302,6 +302,15 @@ s32 _sys_printf(u32 arg1) return CELL_OK; } +s32 _unnamed_E75C40F2(u32 dest) +{ + sysPrxForUser->Todo("Unnamed function 0xE75C40F2 (dest=0x%x) -> CELL_ENOENT", dest); + + // prx: load some data (0x40 bytes) previously set by sys_process_get_paramsfo + //memset(Memory + dest, 0, 0x40); + return CELL_ENOENT; +} + void sysPrxForUser_init() { REG_FUNC(sysPrxForUser, sys_initialize_tls); @@ -380,6 +389,7 @@ void sysPrxForUser_init() REG_FUNC(sysPrxForUser, _sys_strncat); REG_FUNC(sysPrxForUser, _sys_strcpy); REG_FUNC(sysPrxForUser, _sys_strncpy); + sysPrxForUser->AddFunc(0xe75c40f2, _unnamed_E75C40F2); // real name is unknown spu_printf_agcb = 0; spu_printf_dgcb = 0; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 0baa1449d1..7fe220130b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -842,6 +842,7 @@ s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, m eq->ports.add(&(t->SPUPs[i])); t->SPUPs[i].eq = eq; } + LOG_NOTICE(HLE, "*** spup -> %d", i); spup = (u8)i; } From a169c5bcacb3b2b28cbd282f1bfc44793166cbec Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 22 Aug 2014 01:37:45 +0400 Subject: [PATCH 388/499] Reservation global struct removed It wasn't solving anything, unfortunately. --- rpcs3/Emu/CPU/CPUThread.cpp | 2 - rpcs3/Emu/CPU/CPUThread.h | 20 ------- rpcs3/Emu/Cell/SPUThread.h | 114 +++++++++++++++++++----------------- 3 files changed, 61 insertions(+), 75 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 1f318b8abc..cd23b42d1c 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -9,8 +9,6 @@ #include "CPUThread.h" -reservation_struct reservation; - CPUThread* GetCurrentCPUThread() { return (CPUThread*)GetCurrentNamedThread(); diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 0ee177d9e0..466295df8a 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -3,26 +3,6 @@ #include "Emu/CPU/CPUDecoder.h" #include "Utilities/SMutex.h" -typedef SMutexBase SMutexR; -typedef SMutexLockerBase SMutexLockerR; - -struct reservation_struct -{ - SMutexR mutex; // mutex for updating reservation_owner and data - // std::mutex doesn't work because it probably wakes up waiting threads in the most unwanted order - // and doesn't give a chance to finish some work before losing the reservation - u32 owner; // id of thread that got reservation - u64 addr; - u64 data[16]; - - __forceinline void clear() - { - owner = 0; - } -}; - -extern reservation_struct reservation; - enum CPUThreadType :unsigned char { CPU_THREAD_PPU, diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 6ccfc574be..76a804348d 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -309,9 +309,12 @@ union SPU_SNRConfig_hdr class SPUThread : public PPCThread { public: - SPU_GPR_hdr GPR[128]; //General-Purpose Registers + SPU_GPR_hdr GPR[128]; // General-Purpose Registers //FPSCR FPSCR; - SPU_SNRConfig_hdr cfg; //Signal Notification Registers Configuration (OR-mode enabled: 0x1 for SNR1, 0x2 for SNR2) + SPU_SNRConfig_hdr cfg; // Signal Notification Registers Configuration (OR-mode enabled: 0x1 for SNR1, 0x2 for SNR2) + + u64 R_ADDR; // reservation address + u64 R_DATA[16]; // lock line data (BE) EventPort SPUPs[64]; // SPU Thread Event Ports EventManager SPUQs; // SPU Queue Mapping @@ -796,83 +799,90 @@ public: if (op == MFC_GETLLAR_CMD) // get reservation { - SMutexLockerR lock(reservation.mutex); - reservation.owner = lock.tid; - reservation.addr = ea; + if (R_ADDR) + { + m_events |= SPU_EVENT_LR; + } + + R_ADDR = ea; for (u32 i = 0; i < 16; i++) { - reservation.data[i] = *(u64*)&Memory[(u32)ea + i * 8]; - *(u64*)&Memory[dmac.ls_offset + lsa + i * 8] = reservation.data[i]; + R_DATA[i] = *(u64*)&Memory[R_ADDR + i * 8]; + *(u64*)&Memory[dmac.ls_offset + lsa + i * 8] = R_DATA[i]; } MFCArgs.AtomicStat.PushUncond(MFC_GETLLAR_SUCCESS); } else if (op == MFC_PUTLLC_CMD) // store conditional { - SMutexLockerR lock(reservation.mutex); MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); - if (reservation.owner == lock.tid) // succeeded + if (R_ADDR == ea) { - if (reservation.addr == ea) + u32 changed = 0, mask = 0; + u64 buf[16]; + for (u32 i = 0; i < 16; i++) { - for (u32 i = 0; i < 16; i++) + buf[i] = *(u64*)&Memory[dmac.ls_offset + lsa + i * 8]; + if (buf[i] != R_DATA[i]) { - if (*(u64*)&Memory[reservation.addr + i * 8] != reservation.data[i]) + changed++; + mask |= (0x3 << (i * 2)); + if (*(u64*)&Memory[R_ADDR + i * 8] != R_DATA[i]) { + m_events |= SPU_EVENT_LR; MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); - reservation.clear(); + R_ADDR = 0; return; } } + } - u32 changed = 0, mask = 0; - for (u32 i = 0; i < 16; i++) + for (u32 i = 0; i < 16; i++) + { + if (buf[i] != R_DATA[i]) { - u64 buf = *(u64*)&Memory[dmac.ls_offset + lsa + i * 8]; - if (buf != reservation.data[i]) + if (InterlockedCompareExchange64((volatile long long*)(Memory + (ea + i * 8)), buf[i], R_DATA[i]) != R_DATA[i]) { - changed++; - mask |= (0x3 << (i * 2)); + m_events |= SPU_EVENT_LR; + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); - if (InterlockedCompareExchange64((volatile long long*)(Memory + ((u32)ea + i * 8)), buf, reservation.data[i]) != reservation.data[i]) + if (changed > 1) { - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); - - if (changed > 1) - { - LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Reservation Error: impossibru (~ 8x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", - changed, mask, op, cmd, lsa, ea, tag, size); - Emu.Pause(); - } - - break; + LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Memory corrupted (~x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + changed, mask, op, cmd, lsa, ea, tag, size); + Emu.Pause(); } + + break; } } } - else + + if (changed > 1) { - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + LOG_WARNING(Log::SPU, "MFC_PUTLLC_CMD: Reservation impossibru (~x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + changed, mask, op, cmd, lsa, ea, tag, size); } - reservation.clear(); } - else // failed + else { MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); } + R_ADDR = 0; } else // store unconditional { - SMutexLockerR lock(reservation.mutex); + if (R_ADDR) + { + m_events |= SPU_EVENT_LR; + } + ProcessCmd(MFC_PUT_CMD, tag, lsa, ea, 128); if (op == MFC_PUTLLUC_CMD) { MFCArgs.AtomicStat.PushUncond(MFC_PUTLLUC_SUCCESS); } - if (reservation.addr == ea) - { - reservation.clear(); - } + R_ADDR = 0; } } break; @@ -888,24 +898,15 @@ public: { // SPU_EVENT_LR: { - SMutexLockerR lock(reservation.mutex); - - if (reservation.owner == lock.tid) + for (u32 i = 0; i < 16; i++) { - for (u32 i = 0; i < 16; i++) + if (*(u64*)&Memory[R_ADDR + i * 8] != R_DATA[i]) { - if (*(u64*)&Memory[reservation.addr + i * 8] != reservation.data[i]) - { - m_events |= SPU_EVENT_LR; - reservation.clear(); // ??? - break; - } + m_events |= SPU_EVENT_LR; + R_ADDR = 0; + break; } } - else - { - m_events |= SPU_EVENT_LR; // ??? - } } return (m_events & m_event_mask) != 0; @@ -1338,6 +1339,13 @@ public: break; } + case SPU_RdMachStat: + { + v = 1; // hack (not isolated, interrupts enabled) + // TODO: check value + break; + } + default: { LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); From 5abd3fabfa78d8ed9da4f00f5f37334e6eee422e Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 22 Aug 2014 18:21:55 +0400 Subject: [PATCH 389/499] Attempt to remove some includes --- Utilities/AutoPause.cpp | 2 + Utilities/AutoPause.h | 3 - Utilities/BEType.h | 2 - Utilities/GNU.h | 4 +- Utilities/Log.cpp | 1 + Utilities/rFile.cpp | 1 + Utilities/rMsgBox.cpp | 1 + Utilities/rTime.cpp | 1 + rpcs3/Emu/CPU/CPUDisAsm.h | 20 +- rpcs3/Emu/Cell/MFC.h | 1 - rpcs3/Emu/Cell/PPCDisAsm.h | 1 - rpcs3/Emu/Cell/PPCThread.cpp | 3 - rpcs3/Emu/Cell/PPCThread.h | 3 +- rpcs3/Emu/Cell/PPUDisAsm.h | 3 - rpcs3/Emu/Cell/SPUDisAsm.h | 45 +++- rpcs3/Emu/Cell/SPUInterpreter.h | 2 +- rpcs3/Emu/Cell/SPURecompiler.h | 6 +- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 34 +-- rpcs3/Emu/Cell/SPUThread.h | 86 ++------ rpcs3/Emu/Memory/DynamicMemoryBlockBase.h | 15 +- rpcs3/Emu/Memory/Memory.cpp | 201 +++++++++++++++++ rpcs3/Emu/Memory/Memory.h | 206 +----------------- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellRtc.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp | 17 ++ rpcs3/Emu/SysCalls/lv2/sys_mutex.h | 17 +- rpcs3/Gui/AutoPauseManager.cpp | 5 + rpcs3/Gui/AutoPauseManager.h | 5 - rpcs3/Gui/CompilerELF.cpp | 1 + rpcs3/Gui/ConLogFrame.cpp | 6 - rpcs3/Gui/GLGSFrame.cpp | 1 + rpcs3/Gui/InterpreterDisAsm.cpp | 2 +- rpcs3/Gui/SaveDataUtility.cpp | 5 + rpcs3/Gui/SaveDataUtility.h | 5 - rpcs3/Loader/PKG.cpp | 1 + rpcs3/rpcs3.cpp | 2 - rpcs3/stdafx.h | 5 +- 43 files changed, 359 insertions(+), 362 deletions(-) diff --git a/Utilities/AutoPause.cpp b/Utilities/AutoPause.cpp index fc2e26ad6d..bab3881e33 100644 --- a/Utilities/AutoPause.cpp +++ b/Utilities/AutoPause.cpp @@ -1,5 +1,7 @@ #include "stdafx.h" #include "AutoPause.h" +#include "Utilities/Log.h" +#include "Emu/System.h" using namespace Debug; diff --git a/Utilities/AutoPause.h b/Utilities/AutoPause.h index 208097a55d..cf871b46cb 100644 --- a/Utilities/AutoPause.h +++ b/Utilities/AutoPause.h @@ -1,7 +1,4 @@ #pragma once -#include "Utilities/Log.h" -#include "Utilities/rFile.h" -#include "Emu/System.h" //Regarded as a Debugger Enchantment namespace Debug { diff --git a/Utilities/BEType.h b/Utilities/BEType.h index 8c2880c71b..e87e62379a 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -1,7 +1,5 @@ #pragma once -#include "Utilities/GNU.h" - #include using std::min; diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 89cb3a1cfa..58074f9835 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -7,9 +7,9 @@ #endif #ifdef _WIN32 -#define noinline __declspec(noinline) +#define __noinline __declspec(noinline) #else -#define noinline __attribute__((noinline)) +#define __noinline __attribute__((noinline)) #endif template diff --git a/Utilities/Log.cpp b/Utilities/Log.cpp index 4613e39e8a..4d0749426e 100644 --- a/Utilities/Log.cpp +++ b/Utilities/Log.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "rPlatform.h" #include "Log.h" +#include "rMsgBox.h" #include #include #include diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 83cad71cd0..6fcd4b4066 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Log.h" #include #ifdef _WIN32 diff --git a/Utilities/rMsgBox.cpp b/Utilities/rMsgBox.cpp index 716464a156..cabb309e19 100644 --- a/Utilities/rMsgBox.cpp +++ b/Utilities/rMsgBox.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rMsgBox.h" #ifndef QT_UI rMessageDialog::rMessageDialog(void *parent, const std::string& msg, const std::string& title , long style ) diff --git a/Utilities/rTime.cpp b/Utilities/rTime.cpp index 21aba77740..a550516501 100644 --- a/Utilities/rTime.cpp +++ b/Utilities/rTime.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rTime.h" #include diff --git a/rpcs3/Emu/CPU/CPUDisAsm.h b/rpcs3/Emu/CPU/CPUDisAsm.h index f15a1c6258..4a7eca77c0 100644 --- a/rpcs3/Emu/CPU/CPUDisAsm.h +++ b/rpcs3/Emu/CPU/CPUDisAsm.h @@ -1,7 +1,5 @@ #pragma once -#include "Emu/Memory/Memory.h" - enum CPUDisAsmMode { CPUDisAsm_DumpMode, @@ -21,18 +19,18 @@ protected: { case CPUDisAsm_DumpMode: last_opcode = fmt::Format("\t%08llx:\t%02x %02x %02x %02x\t%s\n", dump_pc, - Memory.Read8(offset + dump_pc), - Memory.Read8(offset + dump_pc + 1), - Memory.Read8(offset + dump_pc + 2), - Memory.Read8(offset + dump_pc + 3), value.c_str()); + offset[dump_pc], + offset[dump_pc + 1], + offset[dump_pc + 2], + offset[dump_pc + 3], value.c_str()); break; case CPUDisAsm_InterpreterMode: last_opcode = fmt::Format("[%08llx] %02x %02x %02x %02x: %s", dump_pc, - Memory.Read8(offset + dump_pc), - Memory.Read8(offset + dump_pc + 1), - Memory.Read8(offset + dump_pc + 2), - Memory.Read8(offset + dump_pc + 3), value.c_str()); + offset[dump_pc], + offset[dump_pc + 1], + offset[dump_pc + 2], + offset[dump_pc + 3], value.c_str()); break; case CPUDisAsm_CompilerElfMode: @@ -44,7 +42,7 @@ protected: public: std::string last_opcode; u64 dump_pc; - u64 offset; + u8* offset; protected: CPUDisAsm(CPUDisAsmMode mode) diff --git a/rpcs3/Emu/Cell/MFC.h b/rpcs3/Emu/Cell/MFC.h index 9f93ce6104..7bd4281f7c 100644 --- a/rpcs3/Emu/Cell/MFC.h +++ b/rpcs3/Emu/Cell/MFC.h @@ -1,5 +1,4 @@ #pragma once -#include enum { diff --git a/rpcs3/Emu/Cell/PPCDisAsm.h b/rpcs3/Emu/Cell/PPCDisAsm.h index 39541d28ca..2666033919 100644 --- a/rpcs3/Emu/Cell/PPCDisAsm.h +++ b/rpcs3/Emu/Cell/PPCDisAsm.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/CPU/CPUDisAsm.h" -#include "Emu/Memory/Memory.h" class PPCDisAsm : public CPUDisAsm { diff --git a/rpcs3/Emu/Cell/PPCThread.cpp b/rpcs3/Emu/Cell/PPCThread.cpp index c8f5411432..86fdb951c0 100644 --- a/rpcs3/Emu/Cell/PPCThread.cpp +++ b/rpcs3/Emu/Cell/PPCThread.cpp @@ -1,7 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "PPCThread.h" PPCThread* GetCurrentPPCThread() diff --git a/rpcs3/Emu/Cell/PPCThread.h b/rpcs3/Emu/Cell/PPCThread.h index e7bc4ddbe1..e5dd118a9e 100644 --- a/rpcs3/Emu/Cell/PPCThread.h +++ b/rpcs3/Emu/Cell/PPCThread.h @@ -1,7 +1,6 @@ #pragma once -#include "Emu/Memory/MemoryBlock.h" + #include "Emu/CPU/CPUThread.h" -#include "Emu/Cell/PPCDecoder.h" class PPCThread : public CPUThread { diff --git a/rpcs3/Emu/Cell/PPUDisAsm.h b/rpcs3/Emu/Cell/PPUDisAsm.h index 5fafd6b474..34e51f7fb2 100644 --- a/rpcs3/Emu/Cell/PPUDisAsm.h +++ b/rpcs3/Emu/Cell/PPUDisAsm.h @@ -1,9 +1,6 @@ #pragma once -#include "Emu/Cell/PPUOpcodes.h" #include "Emu/Cell/PPCDisAsm.h" -#include "Emu/Cell/PPCThread.h" -#include "Emu/Memory/Memory.h" class PPUDisAsm : public PPUOpcodes diff --git a/rpcs3/Emu/Cell/SPUDisAsm.h b/rpcs3/Emu/Cell/SPUDisAsm.h index f070ff78cd..5998eb693a 100644 --- a/rpcs3/Emu/Cell/SPUDisAsm.h +++ b/rpcs3/Emu/Cell/SPUDisAsm.h @@ -2,8 +2,49 @@ #include "Emu/Cell/SPUOpcodes.h" #include "Emu/Cell/PPCDisAsm.h" -#include "Emu/Cell/SPUThread.h" -#include "Emu/Memory/Memory.h" + +static const char* spu_reg_name[128] = +{ + "$LR", "$SP", "$2", "$3", "$4", "$5", "$6", "$7", + "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", + "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", + "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31", + "$32", "$33", "$34", "$35", "$36", "$37", "$38", "$39", + "$40", "$41", "$42", "$43", "$44", "$45", "$46", "$47", + "$48", "$49", "$50", "$51", "$52", "$53", "$54", "$55", + "$56", "$57", "$58", "$59", "$60", "$61", "$62", "$63", + "$64", "$65", "$66", "$67", "$68", "$69", "$70", "$71", + "$72", "$73", "$74", "$75", "$76", "$77", "$78", "$79", + "$80", "$81", "$82", "$83", "$84", "$85", "$86", "$87", + "$88", "$89", "$90", "$91", "$92", "$93", "$94", "$95", + "$96", "$97", "$98", "$99", "$100", "$101", "$102", "$103", + "$104", "$105", "$106", "$107", "$108", "$109", "$110", "$111", + "$112", "$113", "$114", "$115", "$116", "$117", "$118", "$119", + "$120", "$121", "$122", "$123", "$124", "$125", "$126", "$127", +}; + +static const char* spu_ch_name[128] = +{ + "$SPU_RdEventStat", "$SPU_WrEventMask", "$SPU_WrEventAck", "$SPU_RdSigNotify1", + "$SPU_RdSigNotify2", "$ch5", "$ch6", "$SPU_WrDec", "$SPU_RdDec", + "$MFC_WrMSSyncReq", "$ch10", "$SPU_RdEventMask", "$MFC_RdTagMask", "$SPU_RdMachStat", + "$SPU_WrSRR0", "$SPU_RdSRR0", "$MFC_LSA", "$MFC_EAH", "$MFC_EAL", "$MFC_Size", + "$MFC_TagID", "$MFC_Cmd", "$MFC_WrTagMask", "$MFC_WrTagUpdate", "$MFC_RdTagStat", + "$MFC_RdListStallStat", "$MFC_WrListStallAck", "$MFC_RdAtomicStat", + "$SPU_WrOutMbox", "$SPU_RdInMbox", "$SPU_WrOutIntrMbox", "$ch31", "$ch32", + "$ch33", "$ch34", "$ch35", "$ch36", "$ch37", "$ch38", "$ch39", "$ch40", + "$ch41", "$ch42", "$ch43", "$ch44", "$ch45", "$ch46", "$ch47", "$ch48", + "$ch49", "$ch50", "$ch51", "$ch52", "$ch53", "$ch54", "$ch55", "$ch56", + "$ch57", "$ch58", "$ch59", "$ch60", "$ch61", "$ch62", "$ch63", "$ch64", + "$ch65", "$ch66", "$ch67", "$ch68", "$ch69", "$ch70", "$ch71", "$ch72", + "$ch73", "$ch74", "$ch75", "$ch76", "$ch77", "$ch78", "$ch79", "$ch80", + "$ch81", "$ch82", "$ch83", "$ch84", "$ch85", "$ch86", "$ch87", "$ch88", + "$ch89", "$ch90", "$ch91", "$ch92", "$ch93", "$ch94", "$ch95", "$ch96", + "$ch97", "$ch98", "$ch99", "$ch100", "$ch101", "$ch102", "$ch103", "$ch104", + "$ch105", "$ch106", "$ch107", "$ch108", "$ch109", "$ch110", "$ch111", "$ch112", + "$ch113", "$ch114", "$ch115", "$ch116", "$ch117", "$ch118", "$ch119", "$ch120", + "$ch121", "$ch122", "$ch123", "$ch124", "$ch125", "$ch126", "$ch127", +}; class SPUDisAsm : public SPUOpcodes diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index 1955137b5c..78d8b9a280 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -42,7 +42,7 @@ private: //0 - 10 void STOP(u32 code) { - CPU.DoStop(code); + CPU.StopAndSignal(code); LOG2_OPCODE(); } void LNOP() diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index da49ef20db..2fc927b6f5 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -1,8 +1,4 @@ #pragma once -#include "Emu/Cell/SPUOpcodes.h" -#include "Emu/Memory/Memory.h" -#include "Emu/Cell/SPUThread.h" -#include "Emu/SysCalls/SysCalls.h" #define ASMJIT_STATIC @@ -438,7 +434,7 @@ private: static void STOP(u32 code) { SPUThread& CPU = *(SPUThread*)GetCurrentCPUThread(); - CPU.DoStop(code); + CPU.StopAndSignal(code); LOG2_OPCODE(); } }; diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 72a59dc6cf..5d9524475b 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -43,6 +43,7 @@ void SPURecompilerCore::Compile(u16 pos) u64 time0 = 0; SPUDisAsm dis_asm(CPUDisAsm_InterpreterMode); + dis_asm.offset = Memory.GetMemFromAddr(CPU.dmac.ls_offset); StringLogger stringLogger; stringLogger.setOption(kLoggerOptionBinaryForm, true); @@ -102,7 +103,7 @@ void SPURecompilerCore::Compile(u16 pos) { const u64 stamp1 = get_system_time(); // disasm for logging: - dis_asm.dump_pc = CPU.dmac.ls_offset + pos * 4; + dis_asm.dump_pc = pos * 4; (*SPU_instr::rrr_list)(&dis_asm, opcode); compiler.addComment(fmt::Format("SPU data: PC=0x%05x %s", pos * 4, dis_asm.last_opcode.c_str()).c_str()); // compile single opcode: @@ -171,21 +172,28 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address) { // check data (hard way) bool is_valid = true; - /*for (u32 i = pos; i < (u32)(entry[pos].count + pos); i++) - { - if (entry[i].valid != ls[i]) - { - is_valid = false; - break; - } - }*/ + //for (u32 i = pos; i < (u32)(entry[pos].count + pos); i++) + //{ + // if (entry[i].valid != ls[i]) + // { + // is_valid = false; + // break; + // } + //} // invalidate if necessary if (!is_valid) { - // TODO - LOG_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(ls_addr=0x%x): code has changed", pos * sizeof(u32)); - Emu.Pause(); - return 0; + for (u32 i = 0; i < 0x10000; i++) + { + if (entry[i].pointer && + i + (u32)entry[i].count > (u32)pos && + i < (u32)pos + (u32)entry[pos].count) + { + runtime.release(entry[i].pointer); + entry[i].pointer = nullptr; + } + } + //LOG_ERROR(Log::SPU, "SPURecompilerCore::DecodeMemory(ls_addr=0x%x): code has changed", pos * sizeof(u32)); } } diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 76a804348d..1b9e4555db 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -1,5 +1,7 @@ #pragma once #include "PPUThread.h" +#include "SPUInstrTable.h" +#include "SPUDisAsm.h" #include "Emu/Event.h" #include "Emu/SysCalls/lv2/sys_spu.h" #include "Emu/SysCalls/lv2/sys_event_flag.h" @@ -8,68 +10,6 @@ #include "Emu/SysCalls/ErrorCodes.h" #include -static const char* spu_reg_name[128] = -{ - "$LR", "$SP", "$2", "$3", "$4", "$5", "$6", "$7", - "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", - "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", - "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31", - "$32", "$33", "$34", "$35", "$36", "$37", "$38", "$39", - "$40", "$41", "$42", "$43", "$44", "$45", "$46", "$47", - "$48", "$49", "$50", "$51", "$52", "$53", "$54", "$55", - "$56", "$57", "$58", "$59", "$60", "$61", "$62", "$63", - "$64", "$65", "$66", "$67", "$68", "$69", "$70", "$71", - "$72", "$73", "$74", "$75", "$76", "$77", "$78", "$79", - "$80", "$81", "$82", "$83", "$84", "$85", "$86", "$87", - "$88", "$89", "$90", "$91", "$92", "$93", "$94", "$95", - "$96", "$97", "$98", "$99", "$100", "$101", "$102", "$103", - "$104", "$105", "$106", "$107", "$108", "$109", "$110", "$111", - "$112", "$113", "$114", "$115", "$116", "$117", "$118", "$119", - "$120", "$121", "$122", "$123", "$124", "$125", "$126", "$127", -}; -//SPU reg $0 is a dummy reg, and is used for certain instructions. -static const char* spu_specialreg_name[128] = { - "$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7", - "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", - "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", - "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31", - "$32", "$33", "$34", "$35", "$36", "$37", "$38", "$39", - "$40", "$41", "$42", "$43", "$44", "$45", "$46", "$47", - "$48", "$49", "$50", "$51", "$52", "$53", "$54", "$55", - "$56", "$57", "$58", "$59", "$60", "$61", "$62", "$63", - "$64", "$65", "$66", "$67", "$68", "$69", "$70", "$71", - "$72", "$73", "$74", "$75", "$76", "$77", "$78", "$79", - "$80", "$81", "$82", "$83", "$84", "$85", "$86", "$87", - "$88", "$89", "$90", "$91", "$92", "$93", "$94", "$95", - "$96", "$97", "$98", "$99", "$100", "$101", "$102", "$103", - "$104", "$105", "$106", "$107", "$108", "$109", "$110", "$111", - "$112", "$113", "$114", "$115", "$116", "$117", "$118", "$119", - "$120", "$121", "$122", "$123", "$124", "$125", "$126", "$127", -}; - -static const char* spu_ch_name[128] = -{ - "$SPU_RdEventStat", "$SPU_WrEventMask", "$SPU_WrEventAck", "$SPU_RdSigNotify1", - "$SPU_RdSigNotify2", "$ch5", "$ch6", "$SPU_WrDec", "$SPU_RdDec", - "$MFC_WrMSSyncReq", "$ch10", "$SPU_RdEventMask", "$MFC_RdTagMask", "$SPU_RdMachStat", - "$SPU_WrSRR0", "$SPU_RdSRR0", "$MFC_LSA", "$MFC_EAH", "$MFC_EAL", "$MFC_Size", - "$MFC_TagID", "$MFC_Cmd", "$MFC_WrTagMask", "$MFC_WrTagUpdate", "$MFC_RdTagStat", - "$MFC_RdListStallStat", "$MFC_WrListStallAck", "$MFC_RdAtomicStat", - "$SPU_WrOutMbox", "$SPU_RdInMbox", "$SPU_WrOutIntrMbox", "$ch31", "$ch32", - "$ch33", "$ch34", "$ch35", "$ch36", "$ch37", "$ch38", "$ch39", "$ch40", - "$ch41", "$ch42", "$ch43", "$ch44", "$ch45", "$ch46", "$ch47", "$ch48", - "$ch49", "$ch50", "$ch51", "$ch52", "$ch53", "$ch54", "$ch55", "$ch56", - "$ch57", "$ch58", "$ch59", "$ch60", "$ch61", "$ch62", "$ch63", "$ch64", - "$ch65", "$ch66", "$ch67", "$ch68", "$ch69", "$ch70", "$ch71", "$ch72", - "$ch73", "$ch74", "$ch75", "$ch76", "$ch77", "$ch78", "$ch79", "$ch80", - "$ch81", "$ch82", "$ch83", "$ch84", "$ch85", "$ch86", "$ch87", "$ch88", - "$ch89", "$ch90", "$ch91", "$ch92", "$ch93", "$ch94", "$ch95", "$ch96", - "$ch97", "$ch98", "$ch99", "$ch100", "$ch101", "$ch102", "$ch103", "$ch104", - "$ch105", "$ch106", "$ch107", "$ch108", "$ch109", "$ch110", "$ch111", "$ch112", - "$ch113", "$ch114", "$ch115", "$ch116", "$ch117", "$ch118", "$ch119", "$ch120", - "$ch121", "$ch122", "$ch123", "$ch124", "$ch125", "$ch126", "$ch127", -}; - enum SPUchannels { SPU_RdEventStat = 0, //Read event status with mask applied @@ -862,6 +802,19 @@ public: { LOG_WARNING(Log::SPU, "MFC_PUTLLC_CMD: Reservation impossibru (~x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", changed, mask, op, cmd, lsa, ea, tag, size); + + SPUDisAsm dis_asm(CPUDisAsm_InterpreterMode); + for (s32 i = PC; i < PC + 4 * 7; i += 4) + { + dis_asm.dump_pc = i; + dis_asm.offset = Memory.GetMemFromAddr(dmac.ls_offset); + const u32 opcode = Memory.Read32(i + dmac.ls_offset); + (*SPU_instr::rrr_list)(&dis_asm, opcode); + if (i >= 0 && i < 0x40000) + { + LOG_NOTICE(Log::SPU, "*** %s", dis_asm.last_opcode.c_str()); + } + } } } else @@ -984,13 +937,6 @@ public: return; } - if (SPU.In_MBox.GetCount()) - { - LOG_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): In_MBox is not empty", v, spup); - SPU.In_MBox.PushUncond(CELL_EBUSY); // ??? - return; - } - if (Ini.HLELogging.GetValue()) { LOG_NOTICE(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); @@ -1356,7 +1302,7 @@ public: if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); } - void DoStop(u32 code) + void StopAndSignal(u32 code) { SetExitStatus(code); // exit code (not status) diff --git a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h index 053f28086c..edd1280808 100644 --- a/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h +++ b/rpcs3/Emu/Memory/DynamicMemoryBlockBase.h @@ -170,12 +170,12 @@ bool DynamicMemoryBlockBase::Free(u64 addr) } } - LOG_ERROR(MEMORY, "DynamicMemoryBlock::Free(addr=0x%llx): failed", addr); - for (u32 i = 0; i < m_allocated.size(); i++) - { - LOG_NOTICE(MEMORY, "*** Memory Block: addr = 0x%llx, size = 0x%x", m_allocated[i].addr, m_allocated[i].size); - } - assert(0); + //LOG_ERROR(MEMORY, "DynamicMemoryBlock::Free(addr=0x%llx): failed", addr); + //for (u32 i = 0; i < m_allocated.size(); i++) + //{ + // LOG_NOTICE(MEMORY, "*** Memory Block: addr = 0x%llx, size = 0x%x", m_allocated[i].addr, m_allocated[i].size); + //} + assert(!"DynamicMemoryBlock::Free() failed"); return false; } @@ -189,7 +189,6 @@ template bool DynamicMemoryBlockBase::IsLocked(u64 addr) { // TODO - LOG_ERROR(MEMORY, "IsLocked(0x%llx) not implemented", addr); assert(0); return false; } @@ -198,7 +197,6 @@ template bool DynamicMemoryBlockBase::Lock(u64 addr, u32 size) { // TODO - LOG_ERROR(MEMORY, "Lock(0x%llx, 0x%x) not implemented", addr, size); assert(0); return false; } @@ -207,7 +205,6 @@ template bool DynamicMemoryBlockBase::Unlock(u64 addr, u32 size) { // TODO - LOG_ERROR(MEMORY, "Unlock(0x%llx, 0x%x) not implemented", addr, size); assert(0); return false; } diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 8fbae6c536..c60abe9f7c 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -8,6 +8,207 @@ MemoryBase Memory; +void MemoryBase::InvalidAddress(const char* func, const u64 addr) +{ + LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", func, addr); +} + +void MemoryBase::RegisterPages(u64 addr, u32 size) +{ + std::lock_guard lock(m_mutex); + + //LOG_NOTICE(MEMORY, "RegisterPages(addr=0x%llx, size=0x%x)", addr, size); + for (u64 i = addr / 4096; i < (addr + size) / 4096; i++) + { + if (i >= sizeof(m_pages) / sizeof(m_pages[0])) + { + InvalidAddress(__FUNCTION__, i * 4096); + break; + } + if (m_pages[i]) + { + LOG_ERROR(MEMORY, "Page already registered (addr=0x%llx)", i * 4096); + } + m_pages[i] = 1; // TODO: define page parameters + } +} + +void MemoryBase::UnregisterPages(u64 addr, u32 size) +{ + std::lock_guard lock(m_mutex); + + //LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size); + for (u64 i = addr / 4096; i < (addr + size) / 4096; i++) + { + if (i >= sizeof(m_pages) / sizeof(m_pages[0])) + { + InvalidAddress(__FUNCTION__, i * 4096); + break; + } + if (!m_pages[i]) + { + LOG_ERROR(MEMORY, "Page not registered (addr=0x%llx)", i * 4096); + } + m_pages[i] = 0; // TODO: define page parameters + } +} + +u32 MemoryBase::InitRawSPU(MemoryBlock* raw_spu) +{ + std::lock_guard lock(m_mutex); + + u32 index; + for (index = 0; index < sizeof(RawSPUMem) / sizeof(RawSPUMem[0]); index++) + { + if (!RawSPUMem[index]) + { + RawSPUMem[index] = raw_spu; + break; + } + } + + MemoryBlocks.push_back(raw_spu->SetRange(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * index, RAW_SPU_PROB_OFFSET)); + return index; +} + +void MemoryBase::CloseRawSPU(MemoryBlock* raw_spu, const u32 num) +{ + std::lock_guard lock(m_mutex); + + for (int i = 0; i < MemoryBlocks.size(); ++i) + { + if (MemoryBlocks[i] == raw_spu) + { + MemoryBlocks.erase(MemoryBlocks.begin() + i); + break; + } + } + if (num < sizeof(RawSPUMem) / sizeof(RawSPUMem[0])) RawSPUMem[num] = nullptr; +} + +void MemoryBase::Init(MemoryType type) +{ + std::lock_guard lock(m_mutex); + + if (m_inited) return; + m_inited = true; + + memset(m_pages, 0, sizeof(m_pages)); + memset(RawSPUMem, 0, sizeof(RawSPUMem)); + +#ifdef _WIN32 + m_base_addr = VirtualAlloc(nullptr, 0x100000000, MEM_RESERVE, PAGE_NOACCESS); + if (!m_base_addr) +#else + m_base_addr = ::mmap(nullptr, 0x100000000, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); + if (m_base_addr == (void*)-1) +#endif + { + m_base_addr = nullptr; + LOG_ERROR(MEMORY, "Initializing memory failed"); + assert(0); + return; + } + else + { + LOG_NOTICE(MEMORY, "Initializing memory: m_base_addr = 0x%llx", (u64)m_base_addr); + } + + switch (type) + { + case Memory_PS3: + MemoryBlocks.push_back(MainMem.SetRange(0x00010000, 0x2FFF0000)); + MemoryBlocks.push_back(UserMemory = PRXMem.SetRange(0x30000000, 0x10000000)); + MemoryBlocks.push_back(RSXCMDMem.SetRange(0x40000000, 0x10000000)); + MemoryBlocks.push_back(MmaperMem.SetRange(0xB0000000, 0x10000000)); + MemoryBlocks.push_back(RSXFBMem.SetRange(0xC0000000, 0x10000000)); + MemoryBlocks.push_back(StackMem.SetRange(0xD0000000, 0x10000000)); + break; + + case Memory_PSV: + MemoryBlocks.push_back(PSV.RAM.SetRange(0x81000000, 0x10000000)); + MemoryBlocks.push_back(UserMemory = PSV.Userspace.SetRange(0x91000000, 0x10000000)); + PSV.Init(GetBaseAddr()); + break; + + case Memory_PSP: + MemoryBlocks.push_back(PSP.Scratchpad.SetRange(0x00010000, 0x00004000)); + MemoryBlocks.push_back(PSP.VRAM.SetRange(0x04000000, 0x00200000)); + MemoryBlocks.push_back(PSP.RAM.SetRange(0x08000000, 0x02000000)); + MemoryBlocks.push_back(PSP.Kernel.SetRange(0x88000000, 0x00800000)); + MemoryBlocks.push_back(UserMemory = PSP.Userspace.SetRange(0x08800000, 0x01800000)); + PSP.Init(GetBaseAddr()); + break; + } + + LOG_NOTICE(MEMORY, "Memory initialized."); +} + +void MemoryBase::Close() +{ + std::lock_guard lock(m_mutex); + + if (!m_inited) return; + m_inited = false; + + LOG_NOTICE(MEMORY, "Closing memory..."); + + for (auto block : MemoryBlocks) + { + block->Delete(); + } + + RSXIOMem.Delete(); + + MemoryBlocks.clear(); + +#ifdef _WIN32 + if (!VirtualFree(m_base_addr, 0, MEM_RELEASE)) + { + LOG_ERROR(MEMORY, "VirtualFree(0x%llx) failed", (u64)m_base_addr); + } +#else + if (::munmap(m_base_addr, 0x100000000)) + { + LOG_ERROR(MEMORY, "::munmap(0x%llx) failed", (u64)m_base_addr); + } +#endif +} + +bool MemoryBase::Map(const u64 dst_addr, const u64 src_addr, const u32 size) +{ + std::lock_guard lock(m_mutex); + + if (IsGoodAddr(dst_addr) || !IsGoodAddr(src_addr)) + { + return false; + } + + MemoryBlocks.push_back((new MemoryMirror())->SetRange(GetMemFromAddr(src_addr), dst_addr, size)); + LOG_WARNING(MEMORY, "memory mapped 0x%llx to 0x%llx size=0x%x", src_addr, dst_addr, size); + return true; +} + +bool MemoryBase::Unmap(const u64 addr) +{ + std::lock_guard lock(m_mutex); + + bool result = false; + for (uint i = 0; iIsMirror()) + { + if (MemoryBlocks[i]->GetStartAddr() == addr) + { + delete MemoryBlocks[i]; + MemoryBlocks.erase(MemoryBlocks.begin() + i); + return true; + } + } + } + return false; +} + MemBlockInfo::MemBlockInfo(u64 _addr, u32 _size) : MemInfo(_addr, PAGE_4K(_size)) { diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 9fe3523fb2..8f09a50869 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -6,7 +6,6 @@ #include "MemoryBlock.h" #include "Emu/SysCalls/Callback.h" -#include /* OS X uses MAP_ANON instead of MAP_ANONYMOUS */ #ifndef MAP_ANONYMOUS @@ -107,50 +106,11 @@ public: return m_base_addr; } - noinline void InvalidAddress(const char* func, const u64 addr) - { - LOG_ERROR(MEMORY, "%s(): invalid address (0x%llx)", func, addr); - } + __noinline void InvalidAddress(const char* func, const u64 addr); - void RegisterPages(u64 addr, u32 size) - { - std::lock_guard lock(m_mutex); + void RegisterPages(u64 addr, u32 size); - //LOG_NOTICE(MEMORY, "RegisterPages(addr=0x%llx, size=0x%x)", addr, size); - for (u64 i = addr / 4096; i < (addr + size) / 4096; i++) - { - if (i >= sizeof(m_pages) / sizeof(m_pages[0])) - { - InvalidAddress(__FUNCTION__, i * 4096); - break; - } - if (m_pages[i]) - { - LOG_ERROR(MEMORY, "Page already registered (addr=0x%llx)", i * 4096); - } - m_pages[i] = 1; // TODO: define page parameters - } - } - - void UnregisterPages(u64 addr, u32 size) - { - std::lock_guard lock(m_mutex); - - //LOG_NOTICE(MEMORY, "UnregisterPages(addr=0x%llx, size=0x%x)", addr, size); - for (u64 i = addr / 4096; i < (addr + size) / 4096; i++) - { - if (i >= sizeof(m_pages) / sizeof(m_pages[0])) - { - InvalidAddress(__FUNCTION__, i * 4096); - break; - } - if (!m_pages[i]) - { - LOG_ERROR(MEMORY, "Page not registered (addr=0x%llx)", i * 4096); - } - m_pages[i] = 0; // TODO: define page parameters - } - } + void UnregisterPages(u64 addr, u32 size); static __forceinline u16 Reverse16(const u16 val) { @@ -215,96 +175,11 @@ public: } } - u32 InitRawSPU(MemoryBlock* raw_spu) - { - std::lock_guard lock(m_mutex); + u32 InitRawSPU(MemoryBlock* raw_spu); - u32 index; - for (index = 0; index < sizeof(RawSPUMem) / sizeof(RawSPUMem[0]); index++) - { - if (!RawSPUMem[index]) - { - RawSPUMem[index] = raw_spu; - break; - } - } + void CloseRawSPU(MemoryBlock* raw_spu, const u32 num); - MemoryBlocks.push_back(raw_spu->SetRange(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * index, RAW_SPU_PROB_OFFSET)); - return index; - } - - void CloseRawSPU(MemoryBlock* raw_spu, const u32 num) - { - std::lock_guard lock(m_mutex); - - for (int i = 0; i < MemoryBlocks.size(); ++i) - { - if (MemoryBlocks[i] == raw_spu) - { - MemoryBlocks.erase(MemoryBlocks.begin() + i); - break; - } - } - if (num < sizeof(RawSPUMem) / sizeof(RawSPUMem[0])) RawSPUMem[num] = nullptr; - } - - void Init(MemoryType type) - { - std::lock_guard lock(m_mutex); - - if(m_inited) return; - m_inited = true; - - memset(m_pages, 0, sizeof(m_pages)); - memset(RawSPUMem, 0, sizeof(RawSPUMem)); - -#ifdef _WIN32 - m_base_addr = VirtualAlloc(nullptr, 0x100000000, MEM_RESERVE, PAGE_NOACCESS); - if (!m_base_addr) -#else - m_base_addr = ::mmap(nullptr, 0x100000000, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); - if (m_base_addr == (void*)-1) -#endif - { - m_base_addr = nullptr; - LOG_ERROR(MEMORY, "Initializing memory failed"); - assert(0); - return; - } - else - { - LOG_NOTICE(MEMORY, "Initializing memory: m_base_addr = 0x%llx", (u64)m_base_addr); - } - - switch(type) - { - case Memory_PS3: - MemoryBlocks.push_back(MainMem.SetRange(0x00010000, 0x2FFF0000)); - MemoryBlocks.push_back(UserMemory = PRXMem.SetRange(0x30000000, 0x10000000)); - MemoryBlocks.push_back(RSXCMDMem.SetRange(0x40000000, 0x10000000)); - MemoryBlocks.push_back(MmaperMem.SetRange(0xB0000000, 0x10000000)); - MemoryBlocks.push_back(RSXFBMem.SetRange(0xC0000000, 0x10000000)); - MemoryBlocks.push_back(StackMem.SetRange(0xD0000000, 0x10000000)); - break; - - case Memory_PSV: - MemoryBlocks.push_back(PSV.RAM.SetRange(0x81000000, 0x10000000)); - MemoryBlocks.push_back(UserMemory = PSV.Userspace.SetRange(0x91000000, 0x10000000)); - PSV.Init(GetBaseAddr()); - break; - - case Memory_PSP: - MemoryBlocks.push_back(PSP.Scratchpad.SetRange(0x00010000, 0x00004000)); - MemoryBlocks.push_back(PSP.VRAM.SetRange(0x04000000, 0x00200000)); - MemoryBlocks.push_back(PSP.RAM.SetRange(0x08000000, 0x02000000)); - MemoryBlocks.push_back(PSP.Kernel.SetRange(0x88000000, 0x00800000)); - MemoryBlocks.push_back(UserMemory = PSP.Userspace.SetRange(0x08800000, 0x01800000)); - PSP.Init(GetBaseAddr()); - break; - } - - LOG_NOTICE(MEMORY, "Memory initialized."); - } + void Init(MemoryType type); template bool IsGoodAddr(const T addr) { @@ -334,36 +209,7 @@ public: } } - void Close() - { - std::lock_guard lock(m_mutex); - - if(!m_inited) return; - m_inited = false; - - LOG_NOTICE(MEMORY, "Closing memory..."); - - for (auto block : MemoryBlocks) - { - block->Delete(); - } - - RSXIOMem.Delete(); - - MemoryBlocks.clear(); - -#ifdef _WIN32 - if (!VirtualFree(m_base_addr, 0, MEM_RELEASE)) - { - LOG_ERROR(MEMORY, "VirtualFree(0x%llx) failed", (u64)m_base_addr); - } -#else - if (::munmap(m_base_addr, 0x100000000)) - { - LOG_ERROR(MEMORY, "::munmap(0x%llx) failed", (u64)m_base_addr); - } -#endif - } + void Close(); //MemoryBase template void Write8(T addr, const u8 data) @@ -392,7 +238,7 @@ public: } } - noinline void WriteMMIO32(u32 addr, const u32 data) + __noinline void WriteMMIO32(u32 addr, const u32 data) { { std::lock_guard lock(m_mutex); @@ -479,7 +325,7 @@ public: } } - noinline u32 ReadMMIO32(u32 addr) + __noinline u32 ReadMMIO32(u32 addr) { u32 res; { @@ -624,39 +470,9 @@ public: return UserMemory->Unlock(addr, size); } - bool Map(const u64 dst_addr, const u64 src_addr, const u32 size) - { - std::lock_guard lock(m_mutex); + bool Map(const u64 dst_addr, const u64 src_addr, const u32 size); - if(IsGoodAddr(dst_addr) || !IsGoodAddr(src_addr)) - { - return false; - } - - MemoryBlocks.push_back((new MemoryMirror())->SetRange(GetMemFromAddr(src_addr), dst_addr, size)); - LOG_WARNING(MEMORY, "memory mapped 0x%llx to 0x%llx size=0x%x", src_addr, dst_addr, size); - return true; - } - - bool Unmap(const u64 addr) - { - std::lock_guard lock(m_mutex); - - bool result = false; - for(uint i=0; iIsMirror()) - { - if(MemoryBlocks[i]->GetStartAddr() == addr) - { - delete MemoryBlocks[i]; - MemoryBlocks.erase(MemoryBlocks.begin() + i); - return true; - } - } - } - return false; - } + bool Unmap(const u64 addr); template void* operator + (const T vaddr) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 86611c8edb..085cadb5b0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rMsgBox.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SC_FUNC.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index 24b5897885..9eba668afa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Utilities/Log.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" #include "cellGem.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 21d1d4515a..130efd009c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rMsgBox.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp index f16dc3752f..529a62f129 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rTime.h" #include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp index 5a6b204fbf..ba6d779920 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Utilities/Log.h" #include "Emu/SysCalls/Modules.h" #include "Emu/System.h" #include "cellRtc.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp index 2e0777cdfd..db17213a60 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Utilities/Log.h" #include "Emu/SysCalls/Modules.h" #include "cellRtc.h" #include "sceNpCommerce2.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp index a5930c192d..bb7e7ba139 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Utilities/Log.h" #include "Emu/SysCalls/Modules.h" #include "sceNpSns.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp index ddd66df6c9..dccdecf547 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Utilities/Log.h" #include "Emu/SysCalls/Modules.h" #include "cellRtc.h" #include "sceNp.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index fed9b6d3cd..76aea8b150 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -9,6 +9,23 @@ SysCallBase sys_mtx("sys_mutex"); +Mutex::~Mutex() +{ + if (u32 owner = m_mutex.GetOwner()) + { + LOG_NOTICE(HLE, "Mutex(%d) was owned by thread %d (recursive=%d)", id, owner, recursive); + } + + if (!m_queue.m_mutex.try_lock()) return; + + for (u32 i = 0; i < m_queue.list.size(); i++) + { + if (u32 owner = m_queue.list[i]) LOG_NOTICE(HLE, "Mutex(%d) was waited by thread %d", id, owner); + } + + m_queue.m_mutex.unlock(); +} + s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) { sys_mtx.Log("sys_mutex_create(mutex_id_addr=0x%x, attr_addr=0x%x)", mutex_id.GetAddr(), attr.GetAddr()); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.h b/rpcs3/Emu/SysCalls/lv2/sys_mutex.h index fb91773145..b2813e41d2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.h @@ -36,22 +36,7 @@ struct Mutex { } - ~Mutex() - { - if (u32 owner = m_mutex.GetOwner()) - { - LOG_NOTICE(HLE, "Mutex(%d) was owned by thread %d (recursive=%d)", id, owner, recursive); - } - - if (!m_queue.m_mutex.try_lock()) return; - - for (u32 i = 0; i < m_queue.list.size(); i++) - { - if (u32 owner = m_queue.list[i]) LOG_NOTICE(HLE, "Mutex(%d) was waited by thread %d", id, owner); - } - - m_queue.m_mutex.unlock(); - } + ~Mutex(); }; // SysCalls diff --git a/rpcs3/Gui/AutoPauseManager.cpp b/rpcs3/Gui/AutoPauseManager.cpp index 98235314fa..67a43f2817 100644 --- a/rpcs3/Gui/AutoPauseManager.cpp +++ b/rpcs3/Gui/AutoPauseManager.cpp @@ -1,6 +1,11 @@ #include "stdafx.h" #include "Emu/System.h" #include "AutoPauseManager.h" +#include "stdafx.h" +#include +#include +#include "Utilities/Log.h" +#include "Utilities/rFile.h" enum { diff --git a/rpcs3/Gui/AutoPauseManager.h b/rpcs3/Gui/AutoPauseManager.h index a1b8f00450..c3b207b237 100644 --- a/rpcs3/Gui/AutoPauseManager.h +++ b/rpcs3/Gui/AutoPauseManager.h @@ -1,9 +1,4 @@ #pragma once -#include "stdafx.h" -#include -#include -#include "Utilities/Log.h" -#include "Utilities/rFile.h" class AutoPauseManagerDialog : public wxDialog { diff --git a/rpcs3/Gui/CompilerELF.cpp b/rpcs3/Gui/CompilerELF.cpp index c67dfe0703..c4b388283b 100644 --- a/rpcs3/Gui/CompilerELF.cpp +++ b/rpcs3/Gui/CompilerELF.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rMsgBox.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "CompilerELF.h" diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index 0e2ee848e5..f219b0e114 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -7,14 +7,8 @@ #include #include "Ini.h" -#include "Utilities/Thread.h" -#include "Utilities/StrFmt.h" -#include "Utilities/Log.h" -#include "Utilities/Log.h" #include "Gui/ConLogFrame.h" -#include "Utilities/BEType.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" wxDEFINE_EVENT(EVT_LOG_COMMAND, wxCommandEvent); diff --git a/rpcs3/Gui/GLGSFrame.cpp b/rpcs3/Gui/GLGSFrame.cpp index d5205f029e..50c7c8a2db 100644 --- a/rpcs3/Gui/GLGSFrame.cpp +++ b/rpcs3/Gui/GLGSFrame.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "GLGSFrame.h" +#include "Utilities/Timer.h" GLGSFrame::GLGSFrame() : GSFrame(nullptr, "GSFrame[OpenGL]") diff --git a/rpcs3/Gui/InterpreterDisAsm.cpp b/rpcs3/Gui/InterpreterDisAsm.cpp index ee1ffdb535..b856d1f0cc 100644 --- a/rpcs3/Gui/InterpreterDisAsm.cpp +++ b/rpcs3/Gui/InterpreterDisAsm.cpp @@ -249,7 +249,7 @@ void InterpreterDisAsmFrame::ShowAddr(const u64 addr) } else { - disasm->offset = CPU->GetOffset(); + disasm->offset = Memory.GetMemFromAddr(CPU->GetOffset()); for(uint i=0, count = 4; iGetOffset() + PC, 4)) diff --git a/rpcs3/Gui/SaveDataUtility.cpp b/rpcs3/Gui/SaveDataUtility.cpp index 46ca644106..2bebd478ad 100644 --- a/rpcs3/Gui/SaveDataUtility.cpp +++ b/rpcs3/Gui/SaveDataUtility.cpp @@ -1,5 +1,10 @@ #include "stdafx.h" #include "SaveDataUtility.h" +#include "stdafx.h" +#include +#include +#include "Utilities/Log.h" +#include "Utilities/rFile.h" //Cause i can not decide what struct to be used to fill those. Just use no real data now. //Currently variable info isn't used. it supposed to be a container for the information passed by other. diff --git a/rpcs3/Gui/SaveDataUtility.h b/rpcs3/Gui/SaveDataUtility.h index 88037add29..38a9bbbd1b 100644 --- a/rpcs3/Gui/SaveDataUtility.h +++ b/rpcs3/Gui/SaveDataUtility.h @@ -1,9 +1,4 @@ #pragma once -#include "stdafx.h" -#include -#include -#include "Utilities/Log.h" -#include "Utilities/rFile.h" //TODO: Implement function calls related to Save Data List. //Those function calls may be needed to use this GUI. diff --git a/rpcs3/Loader/PKG.cpp b/rpcs3/Loader/PKG.cpp index c07e43a5fa..11fa014e20 100644 --- a/rpcs3/Loader/PKG.cpp +++ b/rpcs3/Loader/PKG.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rMsgBox.h" #include "PKG.h" #include "../Crypto/unpkg.h" diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index 4ea8af5587..f6190d5a82 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -1,6 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" #include "Ini.h" diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 0b5741fae2..87b832626f 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -56,13 +56,10 @@ typedef int32_t s32; typedef int64_t s64; #include "Utilities/StrFmt.h" -#include "Utilities/Log.h" +#include "Utilities/GNU.h" #include "Utilities/BEType.h" #include "Utilities/rFile.h" -#include "Utilities/rTime.h" -#include "Utilities/rMsgBox.h" #include "Utilities/Thread.h" -#include "Utilities/Timer.h" #include "Utilities/IdManager.h" #define _PRGNAME_ "RPCS3" From 52cf911c60468524e57cb0bfb48dda146a411c32 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 22 Aug 2014 18:58:50 +0400 Subject: [PATCH 390/499] Compilation fix --- Utilities/SMutex.h | 3 +-- rpcs3/Emu/IdManager.h | 1 + rpcs3/Emu/SysCalls/LogBase.cpp | 18 ++++++++++++++++++ rpcs3/Emu/SysCalls/LogBase.h | 30 ++++++++++++++---------------- rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 5 ++++- 6 files changed, 39 insertions(+), 19 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/LogBase.cpp diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index c67578d7b2..f4bdc7dff9 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -150,8 +150,7 @@ public: { if (!Emu.IsStopped()) { - LOG_ERROR(HLE, "SMutexLockerBase: thread id == 0"); - Emu.Pause(); + assert(!"SMutexLockerBase: thread id == 0"); } return; } diff --git a/rpcs3/Emu/IdManager.h b/rpcs3/Emu/IdManager.h index b1170cce04..b985f886cc 100644 --- a/rpcs3/Emu/IdManager.h +++ b/rpcs3/Emu/IdManager.h @@ -1,5 +1,6 @@ #pragma once #include +#include #define rID_ANY -1 // was wxID_ANY diff --git a/rpcs3/Emu/SysCalls/LogBase.cpp b/rpcs3/Emu/SysCalls/LogBase.cpp new file mode 100644 index 0000000000..d74364e589 --- /dev/null +++ b/rpcs3/Emu/SysCalls/LogBase.cpp @@ -0,0 +1,18 @@ +#include "stdafx.h" +#include "Utilities/Log.h" +#include "LogBase.h" + +void LogBase::LogNotice(const std::string& text) +{ + LOG_NOTICE(HLE, "%s", text.c_str()); +} + +void LogBase::LogWarning(const std::string& text) +{ + LOG_WARNING(HLE, "%s", text.c_str()); +} + +void LogBase::LogError(const std::string& text) +{ + LOG_ERROR(HLE, "%s", text.c_str()); +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/LogBase.h b/rpcs3/Emu/SysCalls/LogBase.h index 3c583aa8e6..317e999273 100644 --- a/rpcs3/Emu/SysCalls/LogBase.h +++ b/rpcs3/Emu/SysCalls/LogBase.h @@ -4,18 +4,16 @@ class LogBase { bool m_logging; + void LogNotice(const std::string& text); + void LogWarning(const std::string& text); + void LogError(const std::string& text); + public: void SetLogging(bool value) { m_logging = value; } - bool GetLogging() - { - //return m_logging; // TODO - return Ini.HLELogging.GetValue(); - } - LogBase() { SetLogging(false); @@ -25,17 +23,17 @@ public: template void Notice(const u32 id, const char* fmt, Targs... args) { - LOG_NOTICE(HLE, GetName() + fmt::Format("[%d]: ", id) + fmt::Format(fmt, args...)); + LogNotice(GetName() + fmt::Format("[%d]: ", id) + fmt::Format(fmt, args...)); } template void Notice(const char* fmt, Targs... args) { - LOG_NOTICE(HLE, GetName() + ": " + fmt::Format(fmt, args...)); + LogNotice(GetName() + ": " + fmt::Format(fmt, args...)); } template __forceinline void Log(const char* fmt, Targs... args) { - if (GetLogging()) + if (m_logging) { Notice(fmt, args...); } @@ -43,7 +41,7 @@ public: template __forceinline void Log(const u32 id, const char* fmt, Targs... args) { - if (GetLogging()) + if (m_logging) { Notice(id, fmt, args...); } @@ -51,31 +49,31 @@ public: template void Warning(const u32 id, const char* fmt, Targs... args) { - LOG_WARNING(HLE, GetName() + fmt::Format("[%d] warning: ", id) + fmt::Format(fmt, args...)); + LogWarning(GetName() + fmt::Format("[%d] warning: ", id) + fmt::Format(fmt, args...)); } template void Warning(const char* fmt, Targs... args) { - LOG_WARNING(HLE, GetName() + " warning: " + fmt::Format(fmt, args...)); + LogWarning(GetName() + " warning: " + fmt::Format(fmt, args...)); } template void Error(const u32 id, const char* fmt, Targs... args) { - LOG_ERROR(HLE, GetName() + fmt::Format("[%d] error: ", id) + fmt::Format(fmt, args...)); + LogError(GetName() + fmt::Format("[%d] error: ", id) + fmt::Format(fmt, args...)); } template void Error(const char* fmt, Targs... args) { - LOG_ERROR(HLE, GetName() + " error: " + fmt::Format(fmt, args...)); + LogError(GetName() + " error: " + fmt::Format(fmt, args...)); } template void Todo(const u32 id, const char* fmt, Targs... args) { - LOG_ERROR(HLE, GetName() + fmt::Format("[%d] TODO: ", id) + fmt::Format(fmt, args...)); + LogError(GetName() + fmt::Format("[%d] TODO: ", id) + fmt::Format(fmt, args...)); } template void Todo(const char* fmt, Targs... args) { - LOG_ERROR(HLE, GetName() + " TODO: " + fmt::Format(fmt, args...)); + LogError(GetName() + " TODO: " + fmt::Format(fmt, args...)); } }; \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 7ce030b02a..142f07ce89 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -93,6 +93,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 271fa80725..7f758f7a2b 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -605,6 +605,9 @@ Utilities + + Emu\SysCalls + @@ -1155,7 +1158,7 @@ Emu\SysCalls\Modules - + Emu From a8b591234003e8becd43c78e8bb97164c08cbda5 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 22 Aug 2014 19:33:01 +0400 Subject: [PATCH 391/499] Compilation fix 2 (not sure) --- rpcs3/Gui/ConLogFrame.cpp | 1 + rpcs3/Gui/ConLogFrame.h | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index f219b0e114..e2c354e0e5 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -7,6 +7,7 @@ #include #include "Ini.h" +#include "Utilities/Log.h" #include "Gui/ConLogFrame.h" #include "Emu/System.h" diff --git a/rpcs3/Gui/ConLogFrame.h b/rpcs3/Gui/ConLogFrame.h index da7749b619..911d4f313e 100644 --- a/rpcs3/Gui/ConLogFrame.h +++ b/rpcs3/Gui/ConLogFrame.h @@ -1,7 +1,11 @@ #pragma once #include -#include "Utilities/Log.h" +#include +namespace Log +{ + struct LogListener; +} class LogFrame : public wxPanel From 652c5901f84ff956a700fbe63ab927c58207f637 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 22 Aug 2014 20:36:27 +0400 Subject: [PATCH 392/499] Another try --- Utilities/SMutex.cpp | 13 +- Utilities/SMutex.h | 17 +- rpcs3/Emu/CPU/CPUThread.cpp | 4 + rpcs3/Emu/CPU/CPUThread.h | 12 +- rpcs3/Emu/Cell/PPCThread.cpp | 1 + rpcs3/Emu/Memory/MemoryBlock.h | 184 ------------------- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 2 + rpcs3/Emu/SysCalls/SysCalls.cpp | 5 + rpcs3/Emu/SysCalls/SysCalls.h | 5 +- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_spu.h | 2 - rpcs3/stdafx.h | 183 ++++++++++++++++++ 12 files changed, 221 insertions(+), 208 deletions(-) diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index fe853c191e..1803095f9d 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -6,7 +6,12 @@ #include "Utilities/SMutex.h" -__forceinline void SM_Sleep() +bool SM_IsAborted() +{ + return Emu.IsStopped(); +} + +void SM_Sleep() { if (NamedThreadBase* t = GetCurrentNamedThread()) { @@ -20,12 +25,12 @@ __forceinline void SM_Sleep() thread_local size_t g_this_thread_id = 0; -__forceinline size_t SM_GetCurrentThreadId() +size_t SM_GetCurrentThreadId() { return g_this_thread_id ? g_this_thread_id : g_this_thread_id = std::hash()(std::this_thread::get_id()); } -__forceinline u32 SM_GetCurrentCPUThreadId() +u32 SM_GetCurrentCPUThreadId() { if (CPUThread* t = GetCurrentCPUThread()) { @@ -34,7 +39,7 @@ __forceinline u32 SM_GetCurrentCPUThreadId() return 0; } -__forceinline be_t SM_GetCurrentCPUThreadIdBE() +be_t SM_GetCurrentCPUThreadIdBE() { return be_t::MakeFromLE(SM_GetCurrentCPUThreadId()); } diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index f4bdc7dff9..efd99b840f 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -1,11 +1,10 @@ #pragma once -#include "BEType.h" -#include "Emu/System.h" -extern void SM_Sleep(); -extern size_t SM_GetCurrentThreadId(); -extern u32 SM_GetCurrentCPUThreadId(); -extern be_t SM_GetCurrentCPUThreadIdBE(); +bool SM_IsAborted(); +void SM_Sleep(); +size_t SM_GetCurrentThreadId(); +u32 SM_GetCurrentCPUThreadId(); +be_t SM_GetCurrentCPUThreadIdBE(); enum SMutexResult { @@ -66,7 +65,7 @@ public: SMutexResult trylock(T tid) { - if (Emu.IsStopped()) + if (SM_IsAborted()) { return SMR_ABORT; } @@ -90,7 +89,7 @@ public: SMutexResult unlock(T tid, T to = GetFreeValue()) { - if (Emu.IsStopped()) + if (SM_IsAborted()) { return SMR_ABORT; } @@ -148,7 +147,7 @@ public: { if (!tid) { - if (!Emu.IsStopped()) + if (!SM_IsAborted()) { assert(!"SMutexLockerBase: thread id == 0"); } diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index cd23b42d1c..9cfa145da7 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -36,6 +36,10 @@ CPUThread::~CPUThread() safe_delete(m_dec); } +bool CPUThread::IsRunning() const { return m_status == Running; } +bool CPUThread::IsPaused() const { return m_status == Paused; } +bool CPUThread::IsStopped() const { return m_status == Stopped; } + void CPUThread::Close() { ThreadBase::Stop(m_sync_wait); diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 466295df8a..2a8ea78f2c 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -1,7 +1,5 @@ #pragma once -#include "Emu/Memory/MemoryBlock.h" #include "Emu/CPU/CPUDecoder.h" -#include "Utilities/SMutex.h" enum CPUThreadType :unsigned char { @@ -147,13 +145,13 @@ public: static std::vector ErrorToString(const u32 error); std::vector ErrorToString() { return ErrorToString(m_error); } - bool IsOk() const { return m_error == 0; } - bool IsRunning() const { return m_status == Running; } - bool IsPaused() const { return m_status == Paused; } - bool IsStopped() const { return m_status == Stopped; } + bool IsOk() const { return m_error == 0; } + bool IsRunning() const; + bool IsPaused() const; + bool IsStopped() const; bool IsJoinable() const { return m_joinable; } - bool IsJoining() const { return m_joining; } + bool IsJoining() const { return m_joining; } void SetJoinable(bool joinable) { m_joinable = joinable; } void SetJoining(bool joining) { m_joining = joining; } diff --git a/rpcs3/Emu/Cell/PPCThread.cpp b/rpcs3/Emu/Cell/PPCThread.cpp index 86fdb951c0..96d9b732a2 100644 --- a/rpcs3/Emu/Cell/PPCThread.cpp +++ b/rpcs3/Emu/Cell/PPCThread.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "PPCThread.h" +#include "Emu/Memory/Memory.h" PPCThread* GetCurrentPPCThread() { diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index fa5b913797..43c36df710 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -2,193 +2,9 @@ #define PAGE_4K(x) (x + 4095) & ~(4095) -union u128 -{ - struct - { - u64 hi; - u64 lo; - }; - - u64 _u64[2]; - u32 _u32[4]; - u16 _u16[8]; - u8 _u8[16]; - - operator u64() const { return _u64[0]; } - operator u32() const { return _u32[0]; } - operator u16() const { return _u16[0]; } - operator u8() const { return _u8[0]; } - - operator bool() const { return _u64[0] != 0 || _u64[1] != 0; } - - static u128 From128( u64 hi, u64 lo ) - { - u128 ret = {hi, lo}; - return ret; - } - - static u128 From64( u64 src ) - { - u128 ret = {0, src}; - return ret; - } - - static u128 From32( u32 src ) - { - u128 ret; - ret._u32[0] = src; - ret._u32[1] = 0; - ret._u32[2] = 0; - ret._u32[3] = 0; - return ret; - } - - static u128 FromBit ( u32 bit ) - { - u128 ret; - if (bit < 64) - { - ret.hi = 0; - ret.lo = (u64)1 << bit; - } - else if (bit < 128) - { - ret.hi = (u64)1 << (bit - 64); - ret.lo = 0; - } - else - { - ret.hi = 0; - ret.lo = 0; - } - return ret; - } - - bool operator == ( const u128& right ) const - { - return (lo == right.lo) && (hi == right.hi); - } - - bool operator != ( const u128& right ) const - { - return (lo != right.lo) || (hi != right.hi); - } - - u128 operator | ( const u128& right ) const - { - return From128(hi | right.hi, lo | right.lo); - } - - u128 operator & ( const u128& right ) const - { - return From128(hi & right.hi, lo & right.lo); - } - - u128 operator ^ ( const u128& right ) const - { - return From128(hi ^ right.hi, lo ^ right.lo); - } - - u128 operator ~ () const - { - return From128(~hi, ~lo); - } -}; - -union s128 -{ - struct - { - s64 hi; - s64 lo; - }; - - u64 _i64[2]; - u32 _i32[4]; - u16 _i16[8]; - u8 _i8[16]; - - operator s64() const { return _i64[0]; } - operator s32() const { return _i32[0]; } - operator s16() const { return _i16[0]; } - operator s8() const { return _i8[0]; } - - operator bool() const { return _i64[0] != 0 || _i64[1] != 0; } - - static s128 From64( s64 src ) - { - s128 ret = {src, 0}; - return ret; - } - - static s128 From32( s32 src ) - { - s128 ret; - ret._i32[0] = src; - ret._i32[1] = 0; - ret.hi = 0; - return ret; - } - - bool operator == ( const s128& right ) const - { - return (lo == right.lo) && (hi == right.hi); - } - - bool operator != ( const s128& right ) const - { - return (lo != right.lo) || (hi != right.hi); - } -}; - #include #include -//TODO: SSE style -/* -struct u128 -{ - __m128 m_val; - - u128 GetValue128() - { - u128 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } - - u64 GetValue64() - { - u64 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } - - u32 GetValue32() - { - u32 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } - - u16 GetValue16() - { - u16 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } - - u8 GetValue8() - { - u8 ret; - _mm_store_ps( (float*)&ret, m_val ); - return ret; - } -}; -*/ - - struct MemInfo { u64 addr; diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 57ddfa1626..d09df13b83 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -16,6 +16,8 @@ //Module sysPrxForUser("sysPrxForUser", sysPrxForUser_init); 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); diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 024f39cea6..3c5e3fdd26 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -939,3 +939,8 @@ void SysCalls::DoSyscall(u32 code) declCPU(); RESULT(0); } + +IdManager& SysCallBase::GetIdManager() const +{ + return Emu.GetIdManager(); +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 51ba7168e0..3a5c3534be 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -54,6 +54,7 @@ class SysCallBase : public LogBase private: std::string m_module_name; //u32 m_id; + IdManager& GetIdManager() const; public: SysCallBase(const std::string& name/*, u32 id*/) @@ -69,7 +70,7 @@ public: bool CheckId(u32 id) const { - return Emu.GetIdManager().CheckID(id) && Emu.GetIdManager().GetID(id).m_name == GetName(); + return GetIdManager().CheckID(id) && GetIdManager().GetID(id).m_name == GetName(); } template bool CheckId(u32 id, T*& data) @@ -80,7 +81,7 @@ public: template u32 GetNewId(T* data, IDType type = TYPE_OTHER) { - return Emu.GetIdManager().GetNewID(GetName(), data, type); + return GetIdManager().GetNewID(GetName(), data, type); } }; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 28a7d61d21..593b0ad532 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Emu/Cell/PPUThread.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" #include "sys_rwlock.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.h b/rpcs3/Emu/SysCalls/lv2/sys_spu.h index 7f6399aa7b..e050703dd4 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.h @@ -1,7 +1,5 @@ #pragma once -u32 LoadSpuImage(vfsStream& stream, u32& spu_ep); - enum { SYS_SPU_THREAD_GROUP_TYPE_NORMAL = 0x00, diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 4304cf8f5b..374e4b14a4 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -55,6 +55,189 @@ typedef int16_t s16; typedef int32_t s32; typedef int64_t s64; +union u128 +{ + struct + { + u64 hi; + u64 lo; + }; + + u64 _u64[2]; + u32 _u32[4]; + u16 _u16[8]; + u8 _u8[16]; + + operator u64() const { return _u64[0]; } + operator u32() const { return _u32[0]; } + operator u16() const { return _u16[0]; } + operator u8() const { return _u8[0]; } + + operator bool() const { return _u64[0] != 0 || _u64[1] != 0; } + + static u128 From128(u64 hi, u64 lo) + { + u128 ret = { hi, lo }; + return ret; + } + + static u128 From64(u64 src) + { + u128 ret = { 0, src }; + return ret; + } + + static u128 From32(u32 src) + { + u128 ret; + ret._u32[0] = src; + ret._u32[1] = 0; + ret._u32[2] = 0; + ret._u32[3] = 0; + return ret; + } + + static u128 FromBit(u32 bit) + { + u128 ret; + if (bit < 64) + { + ret.hi = 0; + ret.lo = (u64)1 << bit; + } + else if (bit < 128) + { + ret.hi = (u64)1 << (bit - 64); + ret.lo = 0; + } + else + { + ret.hi = 0; + ret.lo = 0; + } + return ret; + } + + bool operator == (const u128& right) const + { + return (lo == right.lo) && (hi == right.hi); + } + + bool operator != (const u128& right) const + { + return (lo != right.lo) || (hi != right.hi); + } + + u128 operator | (const u128& right) const + { + return From128(hi | right.hi, lo | right.lo); + } + + u128 operator & (const u128& right) const + { + return From128(hi & right.hi, lo & right.lo); + } + + u128 operator ^ (const u128& right) const + { + return From128(hi ^ right.hi, lo ^ right.lo); + } + + u128 operator ~ () const + { + return From128(~hi, ~lo); + } +}; + +union s128 +{ + struct + { + s64 hi; + s64 lo; + }; + + u64 _i64[2]; + u32 _i32[4]; + u16 _i16[8]; + u8 _i8[16]; + + operator s64() const { return _i64[0]; } + operator s32() const { return _i32[0]; } + operator s16() const { return _i16[0]; } + operator s8() const { return _i8[0]; } + + operator bool() const { return _i64[0] != 0 || _i64[1] != 0; } + + static s128 From64(s64 src) + { + s128 ret = { src, 0 }; + return ret; + } + + static s128 From32(s32 src) + { + s128 ret; + ret._i32[0] = src; + ret._i32[1] = 0; + ret.hi = 0; + return ret; + } + + bool operator == (const s128& right) const + { + return (lo == right.lo) && (hi == right.hi); + } + + bool operator != (const s128& right) const + { + return (lo != right.lo) || (hi != right.hi); + } +}; + +//TODO: SSE style +/* +struct u128 +{ + __m128 m_val; + + u128 GetValue128() + { + u128 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } + + u64 GetValue64() + { + u64 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } + + u32 GetValue32() + { + u32 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } + + u16 GetValue16() + { + u16 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } + + u8 GetValue8() + { + u8 ret; + _mm_store_ps( (float*)&ret, m_val ); + return ret; + } +}; +*/ + #include "Utilities/StrFmt.h" #include "Utilities/GNU.h" #include "Utilities/BEType.h" From 102f8cf9935eee090459cf82756eef39ac2c05c7 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 22 Aug 2014 20:54:53 +0400 Subject: [PATCH 393/499] Compilation fix --- rpcs3/Emu/SysCalls/Modules.cpp | 10 ++++++++++ rpcs3/Emu/SysCalls/Modules.h | 7 +++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 4df65edb73..31b2b6b45a 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -173,3 +173,13 @@ bool Module::CheckID(u32 id, ID*& _id) const { return Emu.GetIdManager().CheckID(id) && (_id = &Emu.GetIdManager().GetID(id))->m_name == GetName(); } + +IdManager& Module::GetIdManager() const +{ + return Emu.GetIdManager(); +} + +StaticFuncManager& Module::GetSFuncManager() const +{ + return Emu.GetSFuncManager(); +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index ca3d529328..18623031ce 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -50,6 +50,9 @@ class Module : public LogBase void (*m_load_func)(); void (*m_unload_func)(); + IdManager& GetIdManager() const; + StaticFuncManager& GetSFuncManager() const; + public: std::vector m_funcs_list; @@ -106,7 +109,7 @@ public: template u32 GetNewId(T* data, IDType type = TYPE_OTHER) { - return Emu.GetIdManager().GetNewID(GetName(), data, type); + return GetIdManager().GetNewID(GetName(), data, type); } template __forceinline void AddFunc(u32 id, T func); @@ -152,5 +155,5 @@ __forceinline void Module::AddFuncSub(const char group[8], const u64 ops[], cons op.crc = re(op.crc); sf->ops.push_back(op); } - Emu.GetSFuncManager().push_back(sf); + GetSFuncManager().push_back(sf); } From 9c6b935770be1f0d5860851db2fe6f5a1f2112ea Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Fri, 22 Aug 2014 22:34:43 +0300 Subject: [PATCH 394/499] Added Added cellSaveDataListAutoSave and AutoLoad Also fixed logging of container argument for all other save data functions. --- rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 4 +- .../SysCalls/Modules/cellSysutil_SaveData.cpp | 186 +++++++++++++++++- .../SysCalls/Modules/cellSysutil_SaveData.h | 6 + 3 files changed, 184 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 5bacd9f287..390a6939e2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -889,8 +889,8 @@ void cellSysutil_init() cellSysutil->AddFunc(0x2a8eada2, cellSaveDataFixedLoad2); cellSysutil->AddFunc(0x8b7ed64b, cellSaveDataAutoSave2); cellSysutil->AddFunc(0xfbd5c856, cellSaveDataAutoLoad2); - //cellSysutil->AddFunc(0x4dd03a4e, cellSaveDataListAutoSave); - //cellSysutil->AddFunc(0x21425307, cellSaveDataListAutoLoad); + cellSysutil->AddFunc(0x4dd03a4e, cellSaveDataListAutoSave); + cellSysutil->AddFunc(0x21425307, cellSaveDataListAutoLoad); //cellSysutil->AddFunc(0xedadd797, cellSaveDataDelete2); //cellSysutil->AddFunc(0x0f03cfb0, cellSaveDataUserListSave); //cellSysutil->AddFunc(0x39dd8425, cellSaveDataUserListLoad); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index fbc06e6693..341ed6c4ef 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -292,7 +292,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m mem_func_ptr_t funcList, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil->Warning("cellSaveDataListSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataListSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=0x%x, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcList.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); MemoryAllocator result; @@ -308,6 +308,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m std::string dirNamePrefix = Memory.ReadString(setList->dirNamePrefix_addr); std::vector saveEntries; + for(const DirEntryInfo* entry = dir.Read(); entry; entry = dir.Read()) { if (entry->flags & DirEntry_TypeDir && entry->name.substr(0,dirNamePrefix.size()) == dirNamePrefix) @@ -327,12 +328,14 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList.SetAddr(setBuf->buf_addr); CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.GetAddr()); + for (u32 i=0; iresult < 0) { LOG_ERROR(HLE, "cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; @@ -358,6 +361,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } + /*if (statSet->setParam.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); // TODO: This *is* wrong */ @@ -372,7 +376,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m mem_func_ptr_t funcList, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil->Warning("cellSaveDataListLoad2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataListLoad2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=0x%x, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcList.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); MemoryAllocator result; @@ -383,11 +387,13 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user vfsDir dir(saveBaseDir); + if(!dir.IsOpened()) return CELL_SAVEDATA_ERROR_INTERNAL; std::string dirNamePrefix = Memory.ReadString(setList->dirNamePrefix_addr); std::vector saveEntries; + for(const DirEntryInfo* entry = dir.Read(); entry; entry = dir.Read()) { if (entry->flags & DirEntry_TypeDir && entry->name.substr(0,dirNamePrefix.size()) == dirNamePrefix) @@ -407,12 +413,14 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList.SetAddr(setBuf->buf_addr); CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.GetAddr()); + for (u32 i=0; iresult < 0) { LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; @@ -438,6 +446,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } + /*if (statSet->setParam.GetAddr()) // TODO: Write PARAM.SFO file */ @@ -452,7 +461,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, mem_func_ptr_t funcFixed, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil->Warning("cellSaveDataFixedSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcFixed_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataFixedSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcFixed_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=0x%x, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); MemoryAllocator result; @@ -521,7 +530,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, mem_func_ptr_t funcFixed, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil->Warning("cellSaveDataFixedLoad2(version=%d, setList_addr=0x%x, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataFixedLoad2(version=%d, setList_addr=0x%x, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); MemoryAllocator result; @@ -590,7 +599,7 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil->Warning("cellSaveDataAutoSave2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataAutoSave2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); MemoryAllocator result; @@ -643,7 +652,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - cellSysutil->Warning("cellSaveDataAutoLoad2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=%d, userdata_addr=0x%x)", + cellSysutil->Warning("cellSaveDataAutoLoad2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); MemoryAllocator result; @@ -689,15 +698,172 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ return CELL_SAVEDATA_RET_OK; } -int cellSaveDataListAutoSave() //u32 version, u32 errDialog, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile,sys_memory_container_t container, void *userdata +int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, mem_func_ptr_t funcFixed, + mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - UNIMPLEMENTED_FUNC(cellSysutil); + cellSysutil->Warning("cellSaveDataListAutoSave(version=%d, errDialog=%d, setBuf=0x%x, funcFixed=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", + version, errDialog, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + + MemoryAllocator result; + MemoryAllocator listGet; + MemoryAllocator listSet; + MemoryAllocator statGet; + MemoryAllocator statSet; + + std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user + vfsDir dir(saveBaseDir); + + if (!dir.IsOpened()) + return CELL_SAVEDATA_ERROR_INTERNAL; + + std::string dirNamePrefix = Memory.ReadString(setList->dirNamePrefix_addr); + std::vector saveEntries; + + for (const DirEntryInfo* entry = dir.Read(); entry; entry = dir.Read()) + { + if (entry->flags & DirEntry_TypeDir && entry->name.substr(0, dirNamePrefix.size()) == dirNamePrefix) + { + // Count the amount of matches and the amount of listed directories + listGet->dirListNum++; + if (listGet->dirListNum > setBuf->dirListMax) + continue; + listGet->dirNum++; + + std::string saveDir = saveBaseDir + entry->name; + addSaveDataEntry(saveEntries, saveDir); + } + } + + // Sort the entries and fill the listGet->dirList array + std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); + listGet->dirList.SetAddr(setBuf->buf_addr); + CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.GetAddr()); + + for (u32 i = 0; iresult < 0) { + LOG_ERROR(HLE, "cellSaveDataListAutoSave: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + return CELL_SAVEDATA_ERROR_CBRESULT; + } + + setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); + if (listSet->newData.GetAddr()) + addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); + if (saveEntries.size() == 0) { + LOG_WARNING(HLE, "cellSaveDataListAutoSave: No save entries found!"); // TODO: Find a better way to handle this error + return CELL_SAVEDATA_RET_OK; + } + + u32 focusIndex = focusSaveDataEntry(saveEntries, listSet->focusPosition); + // TODO: Display the dialog here + u32 selectedIndex = focusIndex; // TODO: Until the dialog is implemented, select always the focused entry + getSaveDataStat(saveEntries[selectedIndex], statGet.GetAddr()); + result->userdata_addr = userdata_addr; + + funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); + Memory.Free(statGet->fileList.GetAddr()); + if (result->result < 0) { + LOG_ERROR(HLE, "cellSaveDataListAutoSave: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + return CELL_SAVEDATA_ERROR_CBRESULT; + } + + /*if (statSet->setParam.GetAddr()) + addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); // TODO: This *is* wrong + */ + + // Enter the loop where the save files are read/created/deleted. + s32 ret = modifySaveDataFiles(funcFile, result.GetAddr(), saveBaseDir + (char*)statGet->dir.dirName); + return CELL_SAVEDATA_RET_OK; } -int cellSaveDataListAutoLoad() //u32 version, u32 errDialog, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata +int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, mem_func_ptr_t funcFixed, + mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) { - UNIMPLEMENTED_FUNC(cellSysutil); + cellSysutil->Warning("cellSaveDataListAutoLoad(version=%d, errDialog=%d, setBuf=0x%x, funcFixed=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", + version, errDialog, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + + MemoryAllocator result; + MemoryAllocator listGet; + MemoryAllocator listSet; + MemoryAllocator statGet; + MemoryAllocator statSet; + + std::string saveBaseDir = "/dev_hdd0/home/00000001/savedata/"; // TODO: Get the path of the current user + vfsDir dir(saveBaseDir); + + if (!dir.IsOpened()) + return CELL_SAVEDATA_ERROR_INTERNAL; + + std::string dirNamePrefix = Memory.ReadString(setList->dirNamePrefix_addr); + std::vector saveEntries; + + for (const DirEntryInfo* entry = dir.Read(); entry; entry = dir.Read()) + { + if (entry->flags & DirEntry_TypeDir && entry->name.substr(0, dirNamePrefix.size()) == dirNamePrefix) + { + // Count the amount of matches and the amount of listed directories + listGet->dirListNum++; + if (listGet->dirListNum > setBuf->dirListMax) + continue; + listGet->dirNum++; + + std::string saveDir = saveBaseDir + entry->name; + addSaveDataEntry(saveEntries, saveDir); + } + } + + // Sort the entries and fill the listGet->dirList array + std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); + listGet->dirList.SetAddr(setBuf->buf_addr); + CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.GetAddr()); + + for (u32 i = 0; iresult < 0) { + LOG_ERROR(HLE, "cellSaveDataListAutoLoad: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + return CELL_SAVEDATA_ERROR_CBRESULT; + } + + setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); + if (listSet->newData.GetAddr()) + addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); + if (saveEntries.size() == 0) { + LOG_WARNING(HLE, "cellSaveDataListAutoLoad: No save entries found!"); // TODO: Find a better way to handle this error + return CELL_SAVEDATA_RET_OK; + } + + u32 focusIndex = focusSaveDataEntry(saveEntries, listSet->focusPosition); + // TODO: Display the dialog here + u32 selectedIndex = focusIndex; // TODO: Until the dialog is implemented, select always the focused entry + getSaveDataStat(saveEntries[selectedIndex], statGet.GetAddr()); + result->userdata_addr = userdata_addr; + + funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); + Memory.Free(statGet->fileList.GetAddr()); + + if (result->result < 0) { + LOG_ERROR(HLE, "cellSaveDataListAutoLoad: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + return CELL_SAVEDATA_ERROR_CBRESULT; + } + + /*if (statSet->setParam.GetAddr()) + // TODO: Write PARAM.SFO file + */ + + // Enter the loop where the save files are read/created/deleted. + s32 ret = modifySaveDataFiles(funcFile, result.GetAddr(), saveBaseDir + (char*)statGet->dir.dirName); + return CELL_SAVEDATA_RET_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.h b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.h index b3a12116be..6dc680cf92 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.h @@ -296,3 +296,9 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_t setBuf, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr); + +int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, mem_func_ptr_t funcFixed, + mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr); + +int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, mem_func_ptr_t funcFixed, + mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr); \ No newline at end of file From 861ce9e7334596db72c3e071c2f5e7a7e1927e3c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 23 Aug 2014 01:15:02 +0400 Subject: [PATCH 395/499] include clearing --- Utilities/BEType.h | 9 +- rpcs3/Emu/ARMv7/ARMv7DisAsm.h | 1 - rpcs3/Emu/ARMv7/ARMv7Thread.cpp | 1 - rpcs3/Emu/CPU/CPUThread.cpp | 1 - rpcs3/Emu/CPU/CPUThreadManager.cpp | 1 - rpcs3/Emu/Cell/PPCDecoder.cpp | 1 - rpcs3/Emu/Cell/PPUInterpreter.h | 4 +- rpcs3/Emu/Cell/PPUProgramCompiler.cpp | 35 +- rpcs3/Emu/Cell/PPUThread.cpp | 5 +- rpcs3/Emu/Cell/RawSPUThread.cpp | 3 +- rpcs3/Emu/Cell/RawSPUThread.h | 5 - rpcs3/Emu/Cell/SPUInstrTable.h | 1 - rpcs3/Emu/Cell/SPUInterpreter.h | 13 - rpcs3/Emu/Cell/SPURecompilerCore.cpp | 4 + rpcs3/Emu/Cell/SPUThread.cpp | 912 +++++++++++++++++++++++ rpcs3/Emu/Cell/SPUThread.h | 916 +----------------------- rpcs3/Emu/FS/VFS.cpp | 2 +- rpcs3/Emu/FS/vfsDir.cpp | 1 - rpcs3/Emu/FS/vfsFile.cpp | 1 - rpcs3/Emu/FS/vfsStreamMemory.cpp | 1 - rpcs3/Emu/HDD/HDD.cpp | 766 ++++++++++++++++++++ rpcs3/Emu/HDD/HDD.h | 767 ++------------------ rpcs3/Emu/Io/Keyboard.cpp | 1 - rpcs3/Emu/Io/Mouse.cpp | 1 - rpcs3/Emu/Io/Pad.cpp | 1 - rpcs3/Emu/Memory/Memory.cpp | 16 +- rpcs3/Emu/Memory/Memory.h | 44 -- rpcs3/Emu/SysCalls/LogBase.cpp | 6 + rpcs3/Emu/SysCalls/LogBase.h | 5 +- rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/sys_event_flag.h | 2 + rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 8 +- rpcs3/Emu/System.h | 1 + rpcs3/stdafx.h | 10 + 35 files changed, 1803 insertions(+), 1754 deletions(-) diff --git a/Utilities/BEType.h b/Utilities/BEType.h index e87e62379a..8322b804f8 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -5,11 +5,10 @@ using std::min; using std::max; -//#define re(val) MemoryBase::Reverse(val) -#define re64(val) MemoryBase::Reverse64(val) -#define re32(val) MemoryBase::Reverse32(val) -#define re16(val) MemoryBase::Reverse16(val) -#define re128(val) MemoryBase::Reverse128(val) +#define re16(val) _byteswap_ushort(val) +#define re32(val) _byteswap_ulong(val) +#define re64(val) _byteswap_uint64(val) +#define re128(val) u128::byteswap(val) template struct se_t; template struct se_t { static __forceinline void func(T& dst, const T src) { (u8&)dst = (u8&)src; } }; diff --git a/rpcs3/Emu/ARMv7/ARMv7DisAsm.h b/rpcs3/Emu/ARMv7/ARMv7DisAsm.h index 03f99be552..ba59fc0a26 100644 --- a/rpcs3/Emu/ARMv7/ARMv7DisAsm.h +++ b/rpcs3/Emu/ARMv7/ARMv7DisAsm.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/ARMv7/ARMv7Opcodes.h" #include "Emu/CPU/CPUDisAsm.h" -#include "Emu/Memory/Memory.h" static const char* g_arm_cond_name[16] = { diff --git a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp index d4cdddc2c9..95b355b0e4 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp +++ b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp @@ -2,7 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPCThread.h" #include "ARMv7Thread.h" #include "ARMv7Decoder.h" diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 9cfa145da7..0f04d99f9d 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -5,7 +5,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/DbgCommand.h" -#include "rpcs3/Ini.h" #include "CPUThread.h" diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index d162bc493b..7d8c5c6072 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/DbgCommand.h" diff --git a/rpcs3/Emu/Cell/PPCDecoder.cpp b/rpcs3/Emu/Cell/PPCDecoder.cpp index 3b60ece5a2..a5df4c7f8c 100644 --- a/rpcs3/Emu/Cell/PPCDecoder.cpp +++ b/rpcs3/Emu/Cell/PPCDecoder.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "PPCDecoder.h" diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 94cc1cde92..89524cfd27 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -1,9 +1,7 @@ #pragma once #include "Emu/Cell/PPUOpcodes.h" -#include "Emu/Memory/Memory.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SysCalls.h" + #include #ifdef _MSC_VER #include diff --git a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp index 6c239fe1cc..5e64958d0b 100644 --- a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp +++ b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp @@ -1,7 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" - #include "PPUProgramCompiler.h" using namespace PPU_instr; @@ -83,7 +80,7 @@ SectionInfo::SectionInfo(const std::string& _name) void SectionInfo::SetDataSize(u32 size, u32 align) { if(align) shdr.sh_addralign = align; - if(shdr.sh_addralign) size = Memory.AlignAddr(size, shdr.sh_addralign); + if(shdr.sh_addralign) size = AlignAddr(size, shdr.sh_addralign); if(!code.empty()) { @@ -987,7 +984,7 @@ void CompilePPUProgram::Compile() elf_info.e_shnum = 15; elf_info.e_shstrndx = elf_info.e_shnum - 1; elf_info.e_phoff = elf_info.e_ehsize; - u32 section_offset = Memory.AlignAddr(elf_info.e_phoff + elf_info.e_phnum * elf_info.e_phentsize, 0x100); + u32 section_offset = AlignAddr(elf_info.e_phoff + elf_info.e_phnum * elf_info.e_phentsize, 0x100); static const u32 sceStub_text_block = 8 * 4; @@ -1145,7 +1142,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_sceStub_text; memset(&s_sceStub_text, 0, sizeof(Elf64_Shdr)); s_sceStub_text.sh_addralign = 4; - section_offset = Memory.AlignAddr(section_offset, s_sceStub_text.sh_addralign); + section_offset = AlignAddr(section_offset, s_sceStub_text.sh_addralign); s_sceStub_text.sh_type = 1; s_sceStub_text.sh_offset = section_offset; s_sceStub_text.sh_addr = section_offset + 0x10000; @@ -1169,7 +1166,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_lib_stub_top; memset(&s_lib_stub_top, 0, sizeof(Elf64_Shdr)); s_lib_stub_top.sh_addralign = 4; - section_offset = Memory.AlignAddr(section_offset, s_lib_stub_top.sh_addralign); + section_offset = AlignAddr(section_offset, s_lib_stub_top.sh_addralign); s_lib_stub_top.sh_type = 1; s_lib_stub_top.sh_name = section_name_offset; s_lib_stub_top.sh_offset = section_offset; @@ -1209,7 +1206,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_rodata_sceFNID; memset(&s_rodata_sceFNID, 0, sizeof(Elf64_Shdr)); s_rodata_sceFNID.sh_addralign = 4; - section_offset = Memory.AlignAddr(section_offset, s_rodata_sceFNID.sh_addralign); + section_offset = AlignAddr(section_offset, s_rodata_sceFNID.sh_addralign); s_rodata_sceFNID.sh_type = 1; s_rodata_sceFNID.sh_name = section_name_offset; s_rodata_sceFNID.sh_offset = section_offset; @@ -1223,7 +1220,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_rodata_sceResident; memset(&s_rodata_sceResident, 0, sizeof(Elf64_Shdr)); s_rodata_sceResident.sh_addralign = 4; - section_offset = Memory.AlignAddr(section_offset, s_rodata_sceResident.sh_addralign); + section_offset = AlignAddr(section_offset, s_rodata_sceResident.sh_addralign); s_rodata_sceResident.sh_type = 1; s_rodata_sceResident.sh_name = section_name_offset; s_rodata_sceResident.sh_offset = section_offset; @@ -1234,7 +1231,7 @@ void CompilePPUProgram::Compile() { s_rodata_sceResident.sh_size += module.m_name.length() + 1; } - s_rodata_sceResident.sh_size = Memory.AlignAddr(s_rodata_sceResident.sh_size, s_rodata_sceResident.sh_addralign); + s_rodata_sceResident.sh_size = AlignAddr(s_rodata_sceResident.sh_size, s_rodata_sceResident.sh_addralign); sections_names.push_back(".rodata.sceResident"); section_name_offset += std::string(".rodata.sceResident").length() + 1; section_offset += s_rodata_sceResident.sh_size; @@ -1242,7 +1239,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_lib_ent_top; memset(&s_lib_ent_top, 0, sizeof(Elf64_Shdr)); s_lib_ent_top.sh_addralign = 4; - section_offset = Memory.AlignAddr(section_offset, s_lib_ent_top.sh_addralign); + section_offset = AlignAddr(section_offset, s_lib_ent_top.sh_addralign); s_lib_ent_top.sh_size = 4; s_lib_ent_top.sh_flags = 2; s_lib_ent_top.sh_type = 1; @@ -1269,7 +1266,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_sys_proc_prx_param; memset(&s_sys_proc_prx_param, 0, sizeof(Elf64_Shdr)); s_sys_proc_prx_param.sh_addralign = 4; - section_offset = Memory.AlignAddr(section_offset, s_sys_proc_prx_param.sh_addralign); + section_offset = AlignAddr(section_offset, s_sys_proc_prx_param.sh_addralign); s_sys_proc_prx_param.sh_type = 1; s_sys_proc_prx_param.sh_size = sizeof(sys_proc_prx_param); s_sys_proc_prx_param.sh_name = section_name_offset; @@ -1282,14 +1279,14 @@ void CompilePPUProgram::Compile() const u32 prog_load_0_end = section_offset; - section_offset = Memory.AlignAddr(section_offset + 0x10000, 0x10000); + section_offset = AlignAddr(section_offset + 0x10000, 0x10000); const u32 prog_load_1_start = section_offset; Elf64_Shdr s_data_sceFStub; memset(&s_data_sceFStub, 0, sizeof(Elf64_Shdr)); s_data_sceFStub.sh_name = section_name_offset; s_data_sceFStub.sh_addralign = 4; - section_offset = Memory.AlignAddr(section_offset, s_data_sceFStub.sh_addralign); + section_offset = AlignAddr(section_offset, s_data_sceFStub.sh_addralign); s_data_sceFStub.sh_flags = 3; s_data_sceFStub.sh_type = 1; s_data_sceFStub.sh_offset = section_offset; @@ -1302,7 +1299,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_tbss; memset(&s_tbss, 0, sizeof(Elf64_Shdr)); s_tbss.sh_addralign = 4; - section_offset = Memory.AlignAddr(section_offset, s_tbss.sh_addralign); + section_offset = AlignAddr(section_offset, s_tbss.sh_addralign); s_tbss.sh_size = 4; s_tbss.sh_flags = 0x403; s_tbss.sh_type = 8; @@ -1316,7 +1313,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_opd; memset(&s_opd, 0, sizeof(Elf64_Shdr)); s_opd.sh_addralign = 8; - section_offset = Memory.AlignAddr(section_offset, s_opd.sh_addralign); + section_offset = AlignAddr(section_offset, s_opd.sh_addralign); s_opd.sh_size = 2*4; s_opd.sh_type = 1; s_opd.sh_offset = section_offset; @@ -1477,7 +1474,7 @@ void CompilePPUProgram::Compile() if(!m_file_path.empty() && !m_analyze && !m_error) { - s_opd.sh_size = Memory.AlignAddr(s_opd.sh_size, s_opd.sh_addralign); + s_opd.sh_size = AlignAddr(s_opd.sh_size, s_opd.sh_addralign); section_offset += s_opd.sh_size; const u32 prog_load_1_end = section_offset; @@ -1485,7 +1482,7 @@ void CompilePPUProgram::Compile() Elf64_Shdr s_shstrtab; memset(&s_shstrtab, 0, sizeof(Elf64_Shdr)); s_shstrtab.sh_addralign = 1; - section_offset = Memory.AlignAddr(section_offset, s_shstrtab.sh_addralign); + section_offset = AlignAddr(section_offset, s_shstrtab.sh_addralign); s_shstrtab.sh_name = section_name_offset; s_shstrtab.sh_type = 3; s_shstrtab.sh_offset = section_offset; @@ -1507,7 +1504,7 @@ void CompilePPUProgram::Compile() elf_info.e_machine = MACHINE_PPC64; //PowerPC64 elf_info.e_version = 1; //ver 1 elf_info.e_flags = 0x0; - elf_info.e_shoff = Memory.AlignAddr(section_offset, 4); + elf_info.e_shoff = AlignAddr(section_offset, 4); u8* opd_data = new u8[s_opd.sh_size]; u32 entry_point = s_text.sh_addr; diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 47d09f6090..8996dad702 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -6,7 +6,6 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUInterpreter.h" -#include "Emu/Cell/PPUDisAsm.h" #include #include @@ -57,7 +56,7 @@ void PPUThread::DoReset() void PPUThread::AddArgv(const std::string& arg) { m_stack_point -= arg.length() + 1; - m_stack_point = Memory.AlignAddr(m_stack_point, 0x10) - 0x10; + m_stack_point = AlignAddr(m_stack_point, 0x10) - 0x10; m_argv_addr.push_back(m_stack_point); Memory.WriteString(m_stack_point, arg); } @@ -94,7 +93,7 @@ void PPUThread::InitRegs() } */ - m_stack_point = Memory.AlignAddr(m_stack_point, 0x200) - 0x200; + m_stack_point = AlignAddr(m_stack_point, 0x200) - 0x200; GPR[1] = m_stack_point; GPR[2] = rtoc; diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index a1ad6c258a..023a946ea7 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -1,7 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/Cell/RawSPUThread.h" @@ -149,7 +148,7 @@ bool RawSPUThread::Write32(const u64 addr, const u32 value) else { LOG_ERROR(Log::SPU, "RawSPUThread[%d]: Write32(SPU_RunCtrl, 0x%x): unknown value", m_index, value); - Emu.Pause(); + return false; } break; } diff --git a/rpcs3/Emu/Cell/RawSPUThread.h b/rpcs3/Emu/Cell/RawSPUThread.h index ec40d69ab4..cfea40b0bf 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.h +++ b/rpcs3/Emu/Cell/RawSPUThread.h @@ -6,11 +6,6 @@ __forceinline static u32 GetRawSPURegAddrByNum(int num, int offset) return RAW_SPU_OFFSET * num + RAW_SPU_BASE_ADDR + RAW_SPU_PROB_OFFSET + offset; } -__forceinline static u32 GetRawSPURegAddrById(int id, int offset) -{ - return GetRawSPURegAddrByNum(Emu.GetCPU().GetThreadNumById(CPU_THREAD_RAW_SPU, id), offset); -} - class RawSPUThread : public SPUThread , public MemoryBlock diff --git a/rpcs3/Emu/Cell/SPUInstrTable.h b/rpcs3/Emu/Cell/SPUInstrTable.h index 18b4a72b75..267db8df8d 100644 --- a/rpcs3/Emu/Cell/SPUInstrTable.h +++ b/rpcs3/Emu/Cell/SPUInstrTable.h @@ -1,5 +1,4 @@ #pragma once -#include "PPCInstrTable.h" #include "PPCDecoder.h" #include "SPUOpcodes.h" diff --git a/rpcs3/Emu/Cell/SPUInterpreter.h b/rpcs3/Emu/Cell/SPUInterpreter.h index 78d8b9a280..be42be1d3e 100644 --- a/rpcs3/Emu/Cell/SPUInterpreter.h +++ b/rpcs3/Emu/Cell/SPUInterpreter.h @@ -1,20 +1,7 @@ #pragma once -#include "Emu/Cell/SPUOpcodes.h" -#include "Emu/Memory/Memory.h" -#include "Emu/Cell/SPUThread.h" -#include "Emu/SysCalls/SysCalls.h" -#include "Crypto/sha1.h" - #define UNIMPLEMENTED() UNK(__FUNCTION__) -/* typedef union _CRT_ALIGN(16) __u32x4 { - u32 _u32[4]; - __m128i m128i; - __m128 m128; - __m128d m128d; - } __u32x4; */ - #define MEM_AND_REG_HASH() \ unsigned char mem_h[20]; sha1(&Memory[CPU.dmac.ls_offset], 256*1024, mem_h); \ unsigned char reg_h[20]; sha1((const unsigned char*)CPU.GPR, sizeof(CPU.GPR), reg_h); \ diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 5d9524475b..04997c8c39 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -3,8 +3,12 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Emu/SysCalls/lv2/sys_time.h" + #include "SPUInstrTable.h" #include "SPUDisAsm.h" + +#include "SPUThread.h" #include "SPUInterpreter.h" #include "SPURecompiler.h" diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index b7a0c6787b..fbaf6805d3 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -2,6 +2,13 @@ #include "Utilities/Log.h" #include "Emu/System.h" +#include "Emu/SysCalls/ErrorCodes.h" +#include "Emu/SysCalls/lv2/sys_spu.h" +#include "Emu/SysCalls/lv2/sys_event_flag.h" +#include "Emu/SysCalls/lv2/sys_time.h" +#include "Emu/Event.h" + +#include "Emu/Cell/PPUThread.h" #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/SPUDecoder.h" #include "Emu/Cell/SPUInterpreter.h" @@ -140,3 +147,908 @@ void SPUThread::DoClose() } } } + +void SPUThread::WriteSNR(bool number, u32 value) +{ + if (cfg.value & ((u64)1 << (u64)number)) + { + SPU.SNR[number].PushUncond_OR(value); // logical OR + } + else + { + SPU.SNR[number].PushUncond(value); // overwrite + } +} + +#define LOG_DMAC(type, text) type(Log::SPU, "DMAC::ProcessCmd(cmd=0x%x, tag=0x%x, lsa=0x%x, ea=0x%llx, size=0x%x): " text, cmd, tag, lsa, ea, size) + +void SPUThread::ProcessCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) +{ + if (cmd & (MFC_BARRIER_MASK | MFC_FENCE_MASK)) _mm_mfence(); + + if (ea >= SYS_SPU_THREAD_BASE_LOW) + { + if (ea >= 0x100000000) + { + LOG_DMAC(LOG_ERROR, "Invalid external address"); + Emu.Pause(); + return; + } + else if (group) + { + // SPU Thread Group MMIO (LS and SNR) + u32 num = (ea & SYS_SPU_THREAD_BASE_MASK) / SYS_SPU_THREAD_OFFSET; // thread number in group + if (num >= group->list.size() || !group->list[num]) + { + LOG_DMAC(LOG_ERROR, "Invalid thread (SPU Thread Group MMIO)"); + Emu.Pause(); + return; + } + + SPUThread* spu = (SPUThread*)Emu.GetCPU().GetThread(group->list[num]); + + u32 addr = (ea & SYS_SPU_THREAD_BASE_MASK) % SYS_SPU_THREAD_OFFSET; + if ((addr <= 0x3ffff) && (addr + size <= 0x40000)) + { + // LS access + ea = spu->dmac.ls_offset + addr; + } + else if ((cmd & MFC_PUT_CMD) && size == 4 && (addr == SYS_SPU_THREAD_SNR1 || addr == SYS_SPU_THREAD_SNR2)) + { + spu->WriteSNR(SYS_SPU_THREAD_SNR2 == addr, Memory.Read32(dmac.ls_offset + lsa)); + return; + } + else + { + LOG_DMAC(LOG_ERROR, "Invalid register (SPU Thread Group MMIO)"); + Emu.Pause(); + return; + } + } + else + { + LOG_DMAC(LOG_ERROR, "Thread group not set (SPU Thread Group MMIO)"); + Emu.Pause(); + return; + } + } + else if (ea >= RAW_SPU_BASE_ADDR && size == 4) + { + switch (cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK | MFC_RESULT_MASK)) + { + case MFC_PUT_CMD: + { + Memory.Write32(ea, ReadLS32(lsa)); + return; + } + + case MFC_GET_CMD: + { + WriteLS32(lsa, Memory.Read32(ea)); + return; + } + + default: + { + LOG_DMAC(LOG_ERROR, "Unknown DMA command"); + Emu.Pause(); + return; + } + } + } + + switch (cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK | MFC_RESULT_MASK)) + { + case MFC_PUT_CMD: + { + memcpy(Memory + ea, Memory + (dmac.ls_offset + lsa), size); + return; + } + + case MFC_GET_CMD: + { + memcpy(Memory + (dmac.ls_offset + lsa), Memory + ea, size); + return; + } + + default: + { + LOG_DMAC(LOG_ERROR, "Unknown DMA command"); + Emu.Pause(); + return; + } + } +} + +#undef LOG_CMD + +void SPUThread::ListCmd(u32 lsa, u64 ea, u16 tag, u16 size, u32 cmd, MFCReg& MFCArgs) +{ + u32 list_addr = ea & 0x3ffff; + u32 list_size = size / 8; + lsa &= 0x3fff0; + + struct list_element + { + be_t s; // Stall-and-Notify bit (0x8000) + be_t ts; // List Transfer Size + be_t ea; // External Address Low + }; + + u32 result = MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL; + + for (u32 i = 0; i < list_size; i++) + { + mem_ptr_t rec(dmac.ls_offset + list_addr + i * 8); + + u32 size = rec->ts; + if (size < 16 && size != 1 && size != 2 && size != 4 && size != 8) + { + LOG_ERROR(Log::SPU, "DMA List: invalid transfer size(%d)", size); + result = MFC_PPU_DMA_CMD_SEQUENCE_ERROR; + break; + } + + u32 addr = rec->ea; + ProcessCmd(cmd, tag, lsa | (addr & 0xf), addr, size); + + if (Ini.HLELogging.GetValue() || rec->s) + LOG_NOTICE(Log::SPU, "*** list element(%d/%d): s = 0x%x, ts = 0x%x, low ea = 0x%x (lsa = 0x%x)", + i, list_size, (u16)rec->s, (u16)rec->ts, (u32)rec->ea, lsa | (addr & 0xf)); + + lsa += std::max(size, (u32)16); + + if (rec->s & se16(0x8000)) + { + StallStat.PushUncond_OR(1 << tag); + + if (StallList[tag].MFCArgs) + { + LOG_ERROR(Log::SPU, "DMA List: existing stalled list found (tag=%d)", tag); + result = MFC_PPU_DMA_CMD_SEQUENCE_ERROR; + break; + } + StallList[tag].MFCArgs = &MFCArgs; + StallList[tag].cmd = cmd; + StallList[tag].ea = (ea & ~0xffffffff) | (list_addr + (i + 1) * 8); + StallList[tag].lsa = lsa; + StallList[tag].size = (list_size - i - 1) * 8; + + break; + } + } + + MFCArgs.CMDStatus.SetValue(result); +} + +void SPUThread::EnqMfcCmd(MFCReg& MFCArgs) +{ + u32 cmd = MFCArgs.CMDStatus.GetValue(); + u16 op = cmd & MFC_MASK_CMD; + + u32 lsa = MFCArgs.LSA.GetValue(); + u64 ea = (u64)MFCArgs.EAL.GetValue() | ((u64)MFCArgs.EAH.GetValue() << 32); + u32 size_tag = MFCArgs.Size_Tag.GetValue(); + u16 tag = (u16)size_tag; + u16 size = size_tag >> 16; + + switch (op & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK)) + { + case MFC_PUT_CMD: + case MFC_PUTR_CMD: // ??? + case MFC_GET_CMD: + { + if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", + (op & MFC_PUT_CMD ? "PUT" : "GET"), + (op & MFC_RESULT_MASK ? "R" : ""), + (op & MFC_BARRIER_MASK ? "B" : ""), + (op & MFC_FENCE_MASK ? "F" : ""), + lsa, ea, tag, size, cmd); + + ProcessCmd(cmd, tag, lsa, ea, size); + MFCArgs.CMDStatus.SetValue(MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL); + } + break; + + case MFC_PUTL_CMD: + case MFC_PUTRL_CMD: // ??? + case MFC_GETL_CMD: + { + if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, list = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", + (op & MFC_PUT_CMD ? "PUT" : "GET"), + (op & MFC_RESULT_MASK ? "RL" : "L"), + (op & MFC_BARRIER_MASK ? "B" : ""), + (op & MFC_FENCE_MASK ? "F" : ""), + lsa, ea, tag, size, cmd); + + ListCmd(lsa, ea, tag, size, cmd, MFCArgs); + } + break; + + case MFC_GETLLAR_CMD: + case MFC_PUTLLC_CMD: + case MFC_PUTLLUC_CMD: + case MFC_PUTQLLUC_CMD: + { + if (Ini.HLELogging.GetValue() || size != 128) LOG_NOTICE(Log::SPU, "DMA %s: lsa=0x%x, ea = 0x%llx, (tag) = 0x%x, (size) = 0x%x, cmd = 0x%x", + (op == MFC_GETLLAR_CMD ? "GETLLAR" : + op == MFC_PUTLLC_CMD ? "PUTLLC" : + op == MFC_PUTLLUC_CMD ? "PUTLLUC" : "PUTQLLUC"), + lsa, ea, tag, size, cmd); + + if (op == MFC_GETLLAR_CMD) // get reservation + { + if (R_ADDR) + { + m_events |= SPU_EVENT_LR; + } + + R_ADDR = ea; + for (u32 i = 0; i < 16; i++) + { + R_DATA[i] = *(u64*)&Memory[R_ADDR + i * 8]; + *(u64*)&Memory[dmac.ls_offset + lsa + i * 8] = R_DATA[i]; + } + MFCArgs.AtomicStat.PushUncond(MFC_GETLLAR_SUCCESS); + } + else if (op == MFC_PUTLLC_CMD) // store conditional + { + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); + + if (R_ADDR == ea) + { + u32 changed = 0, mask = 0; + u64 buf[16]; + for (u32 i = 0; i < 16; i++) + { + buf[i] = *(u64*)&Memory[dmac.ls_offset + lsa + i * 8]; + if (buf[i] != R_DATA[i]) + { + changed++; + mask |= (0x3 << (i * 2)); + if (*(u64*)&Memory[R_ADDR + i * 8] != R_DATA[i]) + { + m_events |= SPU_EVENT_LR; + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + R_ADDR = 0; + return; + } + } + } + + for (u32 i = 0; i < 16; i++) + { + if (buf[i] != R_DATA[i]) + { + if (InterlockedCompareExchange64((volatile long long*)(Memory + (ea + i * 8)), buf[i], R_DATA[i]) != R_DATA[i]) + { + m_events |= SPU_EVENT_LR; + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + + if (changed > 1) + { + LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Memory corrupted (~x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + changed, mask, op, cmd, lsa, ea, tag, size); + Emu.Pause(); + } + + break; + } + } + } + + if (changed > 1) + { + LOG_WARNING(Log::SPU, "MFC_PUTLLC_CMD: Reservation impossibru (~x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + changed, mask, op, cmd, lsa, ea, tag, size); + + SPUDisAsm dis_asm(CPUDisAsm_InterpreterMode); + for (s32 i = PC; i < PC + 4 * 7; i += 4) + { + dis_asm.dump_pc = i; + dis_asm.offset = Memory.GetMemFromAddr(dmac.ls_offset); + const u32 opcode = Memory.Read32(i + dmac.ls_offset); + (*SPU_instr::rrr_list)(&dis_asm, opcode); + if (i >= 0 && i < 0x40000) + { + LOG_NOTICE(Log::SPU, "*** %s", dis_asm.last_opcode.c_str()); + } + } + } + } + else + { + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); + } + R_ADDR = 0; + } + else // store unconditional + { + if (R_ADDR) + { + m_events |= SPU_EVENT_LR; + } + + ProcessCmd(MFC_PUT_CMD, tag, lsa, ea, 128); + if (op == MFC_PUTLLUC_CMD) + { + MFCArgs.AtomicStat.PushUncond(MFC_PUTLLUC_SUCCESS); + } + R_ADDR = 0; + } + } + break; + + default: + LOG_ERROR(Log::SPU, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", + op, cmd, lsa, ea, tag, size); + break; + } +} + +bool SPUThread::CheckEvents() +{ + // checks events: + // SPU_EVENT_LR: + { + for (u32 i = 0; i < 16; i++) + { + if (*(u64*)&Memory[R_ADDR + i * 8] != R_DATA[i]) + { + m_events |= SPU_EVENT_LR; + R_ADDR = 0; + break; + } + } + } + + return (m_events & m_event_mask) != 0; +} + +u32 SPUThread::GetChannelCount(u32 ch) +{ + switch (ch) + { + case SPU_WrOutMbox: return SPU.Out_MBox.GetFreeCount(); + case SPU_WrOutIntrMbox: return SPU.Out_IntrMBox.GetFreeCount(); + case SPU_RdInMbox: return SPU.In_MBox.GetCount(); + case MFC_RdTagStat: return MFC1.TagStatus.GetCount(); + case MFC_RdListStallStat: return StallStat.GetCount(); + case MFC_WrTagUpdate: return MFC1.TagStatus.GetCount(); // hack + case SPU_RdSigNotify1: return SPU.SNR[0].GetCount(); + case SPU_RdSigNotify2: return SPU.SNR[1].GetCount(); + case MFC_RdAtomicStat: return MFC1.AtomicStat.GetCount(); + case SPU_RdEventStat: return CheckEvents() ? 1 : 0; + + default: + { + LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", + __FUNCTION__, ch, spu_ch_name[ch]); + return 0; + } + } +} + +void SPUThread::WriteChannel(u32 ch, const SPU_GPR_hdr& r) +{ + const u32 v = r._u32[3]; + + switch (ch) + { + case SPU_WrOutIntrMbox: + { + if (!group) // if RawSPU + { + if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); + while (!SPU.Out_IntrMBox.Push(v)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + if (Emu.IsStopped()) + { + LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); + return; + } + } + m_intrtag[2].stat |= 1; + if (CPUThread* t = Emu.GetCPU().GetThread(m_intrtag[2].thread)) + { + if (t->GetType() == CPU_THREAD_PPU && !t->IsAlive()) + { + PPUThread& ppu = *(PPUThread*)t; + ppu.FastStop(); + ppu.Run(); + ppu.FastCall(ppu.PC, ppu.GPR[2], ppu.m_interrupt_arg); + } + } + } + else + { + const u8 code = v >> 24; + if (code < 64) + { + /* ===== sys_spu_thread_send_event (used by spu_printf) ===== */ + + u8 spup = code & 63; + + u32 data; + if (!SPU.Out_MBox.Pop(data)) + { + LOG_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); + return; + } + + if (Ini.HLELogging.GetValue()) + { + LOG_NOTICE(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); + } + + EventPort& port = SPUPs[spup]; + + std::lock_guard lock(port.m_mutex); + + if (!port.eq) + { + LOG_WARNING(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); + SPU.In_MBox.PushUncond(CELL_ENOTCONN); // TODO: check error passing + return; + } + + if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, GetCurrentCPUThread()->GetId(), ((u64)spup << 32) | (v & 0x00ffffff), data)) + { + SPU.In_MBox.PushUncond(CELL_EBUSY); + return; + } + + SPU.In_MBox.PushUncond(CELL_OK); + return; + } + else if (code < 128) + { + /* ===== sys_spu_thread_throw_event ===== */ + + const u8 spup = code & 63; + + u32 data; + if (!SPU.Out_MBox.Pop(data)) + { + LOG_ERROR(Log::SPU, "sys_spu_thread_throw_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); + return; + } + + //if (Ini.HLELogging.GetValue()) + { + LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); + } + + EventPort& port = SPUPs[spup]; + + std::lock_guard lock(port.m_mutex); + + if (!port.eq) + { + LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); + return; + } + + // TODO: check passing spup value + if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, GetCurrentCPUThread()->GetId(), ((u64)spup << 32) | (v & 0x00ffffff), data)) + { + LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x) failed (queue is full)", spup, (v & 0x00ffffff), data); + return; + } + + return; + } + else if (code == 128) + { + /* ===== sys_event_flag_set_bit ===== */ + u32 flag = v & 0xffffff; + + u32 data; + if (!SPU.Out_MBox.Pop(data)) + { + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); + return; + } + + if (flag > 63) + { + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x): flag > 63", data, v, flag); + return; + } + + //if (Ini.HLELogging.GetValue()) + { + LOG_WARNING(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d))", data, v, flag); + } + + EventFlag* ef; + if (!Emu.GetIdManager().GetIDData(data, ef)) + { + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); + SPU.In_MBox.PushUncond(CELL_ESRCH); + return; + } + + u32 tid = GetCurrentCPUThread()->GetId(); + + ef->m_mutex.lock(tid); + ef->flags |= (u64)1 << flag; + if (u32 target = ef->check()) + { + // if signal, leave both mutexes locked... + ef->signal.lock(target); + ef->m_mutex.unlock(tid, target); + } + else + { + ef->m_mutex.unlock(tid); + } + + SPU.In_MBox.PushUncond(CELL_OK); + return; + } + else if (code == 192) + { + /* ===== sys_event_flag_set_bit_impatient ===== */ + u32 flag = v & 0xffffff; + + u32 data; + if (!SPU.Out_MBox.Pop(data)) + { + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit_impatient(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); + return; + } + + if (flag > 63) + { + LOG_ERROR(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x): flag > 63", data, v, flag); + return; + } + + //if (Ini.HLELogging.GetValue()) + { + LOG_WARNING(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x (flag=%d))", data, v, flag); + } + + EventFlag* ef; + if (!Emu.GetIdManager().GetIDData(data, ef)) + { + LOG_WARNING(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); + return; + } + + u32 tid = GetCurrentCPUThread()->GetId(); + + ef->m_mutex.lock(tid); + ef->flags |= (u64)1 << flag; + if (u32 target = ef->check()) + { + // if signal, leave both mutexes locked... + ef->signal.lock(target); + ef->m_mutex.unlock(tid, target); + } + else + { + ef->m_mutex.unlock(tid); + } + + return; + } + else + { + u32 data; + if (SPU.Out_MBox.Pop(data)) + { + LOG_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x); Out_MBox = 0x%x", v, data); + } + else + { + LOG_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x)", v); + } + SPU.In_MBox.PushUncond(CELL_EINVAL); // ??? + return; + } + } + break; + } + + case SPU_WrOutMbox: + { + while (!SPU.Out_MBox.Push(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + break; + } + + case MFC_WrTagMask: + { + MFC1.QueryMask.SetValue(v); + break; + } + + case MFC_WrTagUpdate: + { + MFC1.TagStatus.PushUncond(MFC1.QueryMask.GetValue()); + break; + } + + case MFC_LSA: + { + MFC1.LSA.SetValue(v); + break; + } + + case MFC_EAH: + { + MFC1.EAH.SetValue(v); + break; + } + + case MFC_EAL: + { + MFC1.EAL.SetValue(v); + break; + } + + case MFC_Size: + { + MFC1.Size_Tag.SetValue((MFC1.Size_Tag.GetValue() & 0xffff) | (v << 16)); + break; + } + + case MFC_TagID: + { + MFC1.Size_Tag.SetValue((MFC1.Size_Tag.GetValue() & ~0xffff) | (v & 0xffff)); + break; + } + + + case MFC_Cmd: + { + MFC1.CMDStatus.SetValue(v); + EnqMfcCmd(MFC1); + break; + } + + case MFC_WrListStallAck: + { + if (v >= 32) + { + LOG_ERROR(Log::SPU, "MFC_WrListStallAck error: invalid tag(%d)", v); + return; + } + StalledList temp = StallList[v]; + if (!temp.MFCArgs) + { + LOG_ERROR(Log::SPU, "MFC_WrListStallAck error: empty tag(%d)", v); + return; + } + StallList[v].MFCArgs = nullptr; + ListCmd(temp.lsa, temp.ea, temp.tag, temp.size, temp.cmd, *temp.MFCArgs); + break; + } + + case SPU_WrDec: + { + m_dec_start = get_time(); + m_dec_value = v; + break; + } + + case SPU_WrEventMask: + { + m_event_mask = v; + if (v & ~(SPU_EVENT_IMPLEMENTED)) LOG_ERROR(Log::SPU, "SPU_WrEventMask: unsupported event masked (0x%x)"); + break; + } + + case SPU_WrEventAck: + { + m_events &= ~v; + break; + } + + default: + { + LOG_ERROR(Log::SPU, "%s error (v=0x%x): unknown/illegal channel (%d [%s]).", __FUNCTION__, v, ch, spu_ch_name[ch]); + break; + } + } + + if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); +} + +void SPUThread::ReadChannel(SPU_GPR_hdr& r, u32 ch) +{ + r.Reset(); + u32& v = r._u32[3]; + + switch (ch) + { + case SPU_RdInMbox: + { + while (!SPU.In_MBox.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + break; + } + + case MFC_RdTagStat: + { + while (!MFC1.TagStatus.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + break; + } + + case MFC_RdTagMask: + { + v = MFC1.QueryMask.GetValue(); + break; + } + + case SPU_RdSigNotify1: + { + while (!SPU.SNR[0].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + break; + } + + case SPU_RdSigNotify2: + { + while (!SPU.SNR[1].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + break; + } + + case MFC_RdAtomicStat: + { + while (!MFC1.AtomicStat.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + break; + } + + case MFC_RdListStallStat: + { + while (!StallStat.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + break; + } + + case SPU_RdDec: + { + v = m_dec_value - (u32)(get_time() - m_dec_start); + break; + } + + case SPU_RdEventMask: + { + v = m_event_mask; + break; + } + + case SPU_RdEventStat: + { + while (!CheckEvents() && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); + v = m_events & m_event_mask; + break; + } + + case SPU_RdMachStat: + { + v = 1; // hack (not isolated, interrupts enabled) + // TODO: check value + break; + } + + default: + { + LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); + break; + } + } + + if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); +} + +void SPUThread::StopAndSignal(u32 code) +{ + SetExitStatus(code); // exit code (not status) + + switch (code) + { + case 0x110: /* ===== sys_spu_thread_receive_event ===== */ + { + u32 spuq = 0; + if (!SPU.Out_MBox.Pop(spuq)) + { + LOG_ERROR(Log::SPU, "sys_spu_thread_receive_event: cannot read Out_MBox"); + SPU.In_MBox.PushUncond(CELL_EINVAL); // ??? + return; + } + + if (SPU.In_MBox.GetCount()) + { + LOG_ERROR(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x): In_MBox is not empty", spuq); + SPU.In_MBox.PushUncond(CELL_EBUSY); // ??? + return; + } + + if (Ini.HLELogging.GetValue()) + { + LOG_NOTICE(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x)", spuq); + } + + EventQueue* eq; + if (!SPUQs.GetEventQueue(FIX_SPUQ(spuq), eq)) + { + SPU.In_MBox.PushUncond(CELL_EINVAL); // TODO: check error value + return; + } + + u32 tid = GetId(); + + eq->sq.push(tid); // add thread to sleep queue + + while (true) + { + switch (eq->owner.trylock(tid)) + { + case SMR_OK: + if (!eq->events.count()) + { + eq->owner.unlock(tid); + break; + } + else + { + u32 next = (eq->protocol == SYS_SYNC_FIFO) ? eq->sq.pop() : eq->sq.pop_prio(); + if (next != tid) + { + eq->owner.unlock(tid, next); + break; + } + } + case SMR_SIGNAL: + { + sys_event_data event; + eq->events.pop(event); + eq->owner.unlock(tid); + SPU.In_MBox.PushUncond(CELL_OK); + SPU.In_MBox.PushUncond(event.data1); + SPU.In_MBox.PushUncond(event.data2); + SPU.In_MBox.PushUncond(event.data3); + return; + } + case SMR_FAILED: break; + default: eq->sq.invalidate(tid); SPU.In_MBox.PushUncond(CELL_ECANCELED); return; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + if (Emu.IsStopped()) + { + LOG_WARNING(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x) aborted", spuq); + eq->sq.invalidate(tid); + return; + } + } + } + break; + case 0x102: + if (!SPU.Out_MBox.GetCount()) + { + LOG_ERROR(Log::SPU, "sys_spu_thread_exit (no status, code 0x102)"); + } + else if (Ini.HLELogging.GetValue()) + { + // the real exit status + LOG_NOTICE(Log::SPU, "sys_spu_thread_exit (status=0x%x)", SPU.Out_MBox.GetValue()); + } + SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); + Stop(); + break; + default: + if (!SPU.Out_MBox.GetCount()) + { + LOG_ERROR(Log::SPU, "Unknown STOP code: 0x%x (no message)", code); + } + else + { + LOG_ERROR(Log::SPU, "Unknown STOP code: 0x%x (message=0x%x)", code, SPU.Out_MBox.GetValue()); + } + SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); + Stop(); + break; + } +} \ No newline at end of file diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 1b9e4555db..3829db3c65 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -1,13 +1,7 @@ #pragma once -#include "PPUThread.h" -#include "SPUInstrTable.h" -#include "SPUDisAsm.h" +#include "PPCThread.h" #include "Emu/Event.h" -#include "Emu/SysCalls/lv2/sys_spu.h" -#include "Emu/SysCalls/lv2/sys_event_flag.h" -#include "Emu/SysCalls/lv2/sys_time.h" #include "MFC.h" -#include "Emu/SysCalls/ErrorCodes.h" #include enum SPUchannels @@ -163,7 +157,7 @@ public: return this->low >> 22 & 0x3; default: - LOG_ERROR(SPU, "Unexpected slice value in FPSCR::checkSliceRounding(): %d", slice); + throw fmt::Format("Unexpected slice value in FPSCR::checkSliceRounding(): %d", slice); return 0; } } @@ -246,6 +240,8 @@ union SPU_SNRConfig_hdr } }; +struct SpuGroupInfo; + class SPUThread : public PPCThread { public: @@ -499,17 +495,7 @@ public: Channel<1> SNR[2]; } SPU; - void WriteSNR(bool number, u32 value) - { - if (cfg.value & ((u64)1 << (u64)number)) - { - SPU.SNR[number].PushUncond_OR(value); // logical OR - } - else - { - SPU.SNR[number].PushUncond(value); // overwrite - } - } + void WriteSNR(bool number, u32 value); u32 LSA; @@ -521,897 +507,21 @@ public: DMAC dmac; -#define LOG_DMAC(type, text) type(Log::SPU, "DMAC::ProcessCmd(cmd=0x%x, tag=0x%x, lsa=0x%x, ea=0x%llx, size=0x%x): " text, cmd, tag, lsa, ea, size) + void ProcessCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size); - void ProcessCmd(u32 cmd, u32 tag, u32 lsa, u64 ea, u32 size) - { - if (cmd & (MFC_BARRIER_MASK | MFC_FENCE_MASK)) _mm_mfence(); + void ListCmd(u32 lsa, u64 ea, u16 tag, u16 size, u32 cmd, MFCReg& MFCArgs); - if (ea >= SYS_SPU_THREAD_BASE_LOW) - { - if (ea >= 0x100000000) - { - LOG_DMAC(LOG_ERROR, "Invalid external address"); - Emu.Pause(); - return; - } - else if (group) - { - // SPU Thread Group MMIO (LS and SNR) - u32 num = (ea & SYS_SPU_THREAD_BASE_MASK) / SYS_SPU_THREAD_OFFSET; // thread number in group - if (num >= group->list.size() || !group->list[num]) - { - LOG_DMAC(LOG_ERROR, "Invalid thread (SPU Thread Group MMIO)"); - Emu.Pause(); - return; - } + void EnqMfcCmd(MFCReg& MFCArgs); - SPUThread* spu = (SPUThread*)Emu.GetCPU().GetThread(group->list[num]); + bool CheckEvents(); - u32 addr = (ea & SYS_SPU_THREAD_BASE_MASK) % SYS_SPU_THREAD_OFFSET; - if ((addr <= 0x3ffff) && (addr + size <= 0x40000)) - { - // LS access - ea = spu->dmac.ls_offset + addr; - } - else if ((cmd & MFC_PUT_CMD) && size == 4 && (addr == SYS_SPU_THREAD_SNR1 || addr == SYS_SPU_THREAD_SNR2)) - { - spu->WriteSNR(SYS_SPU_THREAD_SNR2 == addr, Memory.Read32(dmac.ls_offset + lsa)); - return; - } - else - { - LOG_DMAC(LOG_ERROR, "Invalid register (SPU Thread Group MMIO)"); - Emu.Pause(); - return; - } - } - else - { - LOG_DMAC(LOG_ERROR, "Thread group not set (SPU Thread Group MMIO)"); - Emu.Pause(); - return; - } - } - else if (ea >= RAW_SPU_BASE_ADDR && size == 4) - { - switch (cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK | MFC_RESULT_MASK)) - { - case MFC_PUT_CMD: - { - Memory.Write32(ea, ReadLS32(lsa)); - return; - } + u32 GetChannelCount(u32 ch); - case MFC_GET_CMD: - { - WriteLS32(lsa, Memory.Read32(ea)); - return; - } + void WriteChannel(u32 ch, const SPU_GPR_hdr& r); - default: - { - LOG_DMAC(LOG_ERROR, "Unknown DMA command"); - Emu.Pause(); - return; - } - } - } + void ReadChannel(SPU_GPR_hdr& r, u32 ch); - switch (cmd & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK | MFC_LIST_MASK | MFC_RESULT_MASK)) - { - case MFC_PUT_CMD: - { - memcpy(Memory + ea, Memory + (dmac.ls_offset + lsa), size); - return; - } - - case MFC_GET_CMD: - { - memcpy(Memory + (dmac.ls_offset + lsa), Memory + ea, size); - return; - } - - default: - { - LOG_DMAC(LOG_ERROR, "Unknown DMA command"); - Emu.Pause(); - return; - } - } - } - -#undef LOG_CMD - - void ListCmd(u32 lsa, u64 ea, u16 tag, u16 size, u32 cmd, MFCReg& MFCArgs) - { - u32 list_addr = ea & 0x3ffff; - u32 list_size = size / 8; - lsa &= 0x3fff0; - - struct list_element - { - be_t s; // Stall-and-Notify bit (0x8000) - be_t ts; // List Transfer Size - be_t ea; // External Address Low - }; - - u32 result = MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL; - - for (u32 i = 0; i < list_size; i++) - { - mem_ptr_t rec(dmac.ls_offset + list_addr + i * 8); - - u32 size = rec->ts; - if (size < 16 && size != 1 && size != 2 && size != 4 && size != 8) - { - LOG_ERROR(Log::SPU, "DMA List: invalid transfer size(%d)", size); - result = MFC_PPU_DMA_CMD_SEQUENCE_ERROR; - break; - } - - u32 addr = rec->ea; - ProcessCmd(cmd, tag, lsa | (addr & 0xf), addr, size); - - if (Ini.HLELogging.GetValue() || rec->s) - LOG_NOTICE(Log::SPU, "*** list element(%d/%d): s = 0x%x, ts = 0x%x, low ea = 0x%x (lsa = 0x%x)", - i, list_size, (u16)rec->s, (u16)rec->ts, (u32)rec->ea, lsa | (addr & 0xf)); - - lsa += std::max(size, (u32)16); - - if (rec->s & se16(0x8000)) - { - StallStat.PushUncond_OR(1 << tag); - - if (StallList[tag].MFCArgs) - { - LOG_ERROR(Log::SPU, "DMA List: existing stalled list found (tag=%d)", tag); - result = MFC_PPU_DMA_CMD_SEQUENCE_ERROR; - break; - } - StallList[tag].MFCArgs = &MFCArgs; - StallList[tag].cmd = cmd; - StallList[tag].ea = (ea & ~0xffffffff) | (list_addr + (i + 1) * 8); - StallList[tag].lsa = lsa; - StallList[tag].size = (list_size - i - 1) * 8; - - break; - } - } - - MFCArgs.CMDStatus.SetValue(result); - } - - void EnqMfcCmd(MFCReg& MFCArgs) - { - u32 cmd = MFCArgs.CMDStatus.GetValue(); - u16 op = cmd & MFC_MASK_CMD; - - u32 lsa = MFCArgs.LSA.GetValue(); - u64 ea = (u64)MFCArgs.EAL.GetValue() | ((u64)MFCArgs.EAH.GetValue() << 32); - u32 size_tag = MFCArgs.Size_Tag.GetValue(); - u16 tag = (u16)size_tag; - u16 size = size_tag >> 16; - - switch(op & ~(MFC_BARRIER_MASK | MFC_FENCE_MASK)) - { - case MFC_PUT_CMD: - case MFC_PUTR_CMD: // ??? - case MFC_GET_CMD: - { - if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", - (op & MFC_PUT_CMD ? "PUT" : "GET"), - (op & MFC_RESULT_MASK ? "R" : ""), - (op & MFC_BARRIER_MASK ? "B" : ""), - (op & MFC_FENCE_MASK ? "F" : ""), - lsa, ea, tag, size, cmd); - - ProcessCmd(cmd, tag, lsa, ea, size); - MFCArgs.CMDStatus.SetValue(MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL); - } - break; - - case MFC_PUTL_CMD: - case MFC_PUTRL_CMD: // ??? - case MFC_GETL_CMD: - { - if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "DMA %s%s%s%s: lsa = 0x%x, list = 0x%llx, tag = 0x%x, size = 0x%x, cmd = 0x%x", - (op & MFC_PUT_CMD ? "PUT" : "GET"), - (op & MFC_RESULT_MASK ? "RL" : "L"), - (op & MFC_BARRIER_MASK ? "B" : ""), - (op & MFC_FENCE_MASK ? "F" : ""), - lsa, ea, tag, size, cmd); - - ListCmd(lsa, ea, tag, size, cmd, MFCArgs); - } - break; - - case MFC_GETLLAR_CMD: - case MFC_PUTLLC_CMD: - case MFC_PUTLLUC_CMD: - case MFC_PUTQLLUC_CMD: - { - if (Ini.HLELogging.GetValue() || size != 128) LOG_NOTICE(Log::SPU, "DMA %s: lsa=0x%x, ea = 0x%llx, (tag) = 0x%x, (size) = 0x%x, cmd = 0x%x", - (op == MFC_GETLLAR_CMD ? "GETLLAR" : - op == MFC_PUTLLC_CMD ? "PUTLLC" : - op == MFC_PUTLLUC_CMD ? "PUTLLUC" : "PUTQLLUC"), - lsa, ea, tag, size, cmd); - - if (op == MFC_GETLLAR_CMD) // get reservation - { - if (R_ADDR) - { - m_events |= SPU_EVENT_LR; - } - - R_ADDR = ea; - for (u32 i = 0; i < 16; i++) - { - R_DATA[i] = *(u64*)&Memory[R_ADDR + i * 8]; - *(u64*)&Memory[dmac.ls_offset + lsa + i * 8] = R_DATA[i]; - } - MFCArgs.AtomicStat.PushUncond(MFC_GETLLAR_SUCCESS); - } - else if (op == MFC_PUTLLC_CMD) // store conditional - { - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_SUCCESS); - - if (R_ADDR == ea) - { - u32 changed = 0, mask = 0; - u64 buf[16]; - for (u32 i = 0; i < 16; i++) - { - buf[i] = *(u64*)&Memory[dmac.ls_offset + lsa + i * 8]; - if (buf[i] != R_DATA[i]) - { - changed++; - mask |= (0x3 << (i * 2)); - if (*(u64*)&Memory[R_ADDR + i * 8] != R_DATA[i]) - { - m_events |= SPU_EVENT_LR; - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); - R_ADDR = 0; - return; - } - } - } - - for (u32 i = 0; i < 16; i++) - { - if (buf[i] != R_DATA[i]) - { - if (InterlockedCompareExchange64((volatile long long*)(Memory + (ea + i * 8)), buf[i], R_DATA[i]) != R_DATA[i]) - { - m_events |= SPU_EVENT_LR; - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); - - if (changed > 1) - { - LOG_ERROR(Log::SPU, "MFC_PUTLLC_CMD: Memory corrupted (~x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", - changed, mask, op, cmd, lsa, ea, tag, size); - Emu.Pause(); - } - - break; - } - } - } - - if (changed > 1) - { - LOG_WARNING(Log::SPU, "MFC_PUTLLC_CMD: Reservation impossibru (~x%d (mask=0x%x)) (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", - changed, mask, op, cmd, lsa, ea, tag, size); - - SPUDisAsm dis_asm(CPUDisAsm_InterpreterMode); - for (s32 i = PC; i < PC + 4 * 7; i += 4) - { - dis_asm.dump_pc = i; - dis_asm.offset = Memory.GetMemFromAddr(dmac.ls_offset); - const u32 opcode = Memory.Read32(i + dmac.ls_offset); - (*SPU_instr::rrr_list)(&dis_asm, opcode); - if (i >= 0 && i < 0x40000) - { - LOG_NOTICE(Log::SPU, "*** %s", dis_asm.last_opcode.c_str()); - } - } - } - } - else - { - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); - } - R_ADDR = 0; - } - else // store unconditional - { - if (R_ADDR) - { - m_events |= SPU_EVENT_LR; - } - - ProcessCmd(MFC_PUT_CMD, tag, lsa, ea, 128); - if (op == MFC_PUTLLUC_CMD) - { - MFCArgs.AtomicStat.PushUncond(MFC_PUTLLUC_SUCCESS); - } - R_ADDR = 0; - } - } - break; - - default: - LOG_ERROR( Log::SPU, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", - op, cmd, lsa, ea, tag, size); - break; - } - } - - bool CheckEvents() // checks events - { - // SPU_EVENT_LR: - { - for (u32 i = 0; i < 16; i++) - { - if (*(u64*)&Memory[R_ADDR + i * 8] != R_DATA[i]) - { - m_events |= SPU_EVENT_LR; - R_ADDR = 0; - break; - } - } - } - - return (m_events & m_event_mask) != 0; - } - - u32 GetChannelCount(u32 ch) - { - switch(ch) - { - case SPU_WrOutMbox: return SPU.Out_MBox.GetFreeCount(); - case SPU_WrOutIntrMbox: return SPU.Out_IntrMBox.GetFreeCount(); - case SPU_RdInMbox: return SPU.In_MBox.GetCount(); - case MFC_RdTagStat: return MFC1.TagStatus.GetCount(); - case MFC_RdListStallStat: return StallStat.GetCount(); - case MFC_WrTagUpdate: return MFC1.TagStatus.GetCount(); // hack - case SPU_RdSigNotify1: return SPU.SNR[0].GetCount(); - case SPU_RdSigNotify2: return SPU.SNR[1].GetCount(); - case MFC_RdAtomicStat: return MFC1.AtomicStat.GetCount(); - case SPU_RdEventStat: return CheckEvents() ? 1 : 0; - - default: - { - LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", - __FUNCTION__, ch, spu_ch_name[ch]); - return 0; - } - } - } - - void WriteChannel(u32 ch, const SPU_GPR_hdr& r) - { - const u32 v = r._u32[3]; - - switch(ch) - { - case SPU_WrOutIntrMbox: - { - if (!group) // if RawSPU - { - if (Ini.HLELogging.GetValue()) LOG_NOTICE(Log::SPU, "SPU_WrOutIntrMbox: interrupt(v=0x%x)", v); - while (!SPU.Out_IntrMBox.Push(v)) - { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - if (Emu.IsStopped()) - { - LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); - return; - } - } - m_intrtag[2].stat |= 1; - if (CPUThread* t = Emu.GetCPU().GetThread(m_intrtag[2].thread)) - { - if (t->GetType() == CPU_THREAD_PPU && !t->IsAlive()) - { - PPUThread& ppu = *(PPUThread*)t; - ppu.FastStop(); - ppu.Run(); - ppu.FastCall(ppu.PC, ppu.GPR[2], ppu.m_interrupt_arg); - } - } - } - else - { - const u8 code = v >> 24; - if (code < 64) - { - /* ===== sys_spu_thread_send_event (used by spu_printf) ===== */ - - u8 spup = code & 63; - - u32 data; - if (!SPU.Out_MBox.Pop(data)) - { - LOG_ERROR(Log::SPU, "sys_spu_thread_send_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); - return; - } - - if (Ini.HLELogging.GetValue()) - { - LOG_NOTICE(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); - } - - EventPort& port = SPUPs[spup]; - - std::lock_guard lock(port.m_mutex); - - if (!port.eq) - { - LOG_WARNING(Log::SPU, "sys_spu_thread_send_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); - SPU.In_MBox.PushUncond(CELL_ENOTCONN); // TODO: check error passing - return; - } - - if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, GetCurrentCPUThread()->GetId(), ((u64)spup << 32) | (v & 0x00ffffff), data)) - { - SPU.In_MBox.PushUncond(CELL_EBUSY); - return; - } - - SPU.In_MBox.PushUncond(CELL_OK); - return; - } - else if (code < 128) - { - /* ===== sys_spu_thread_throw_event ===== */ - - const u8 spup = code & 63; - - u32 data; - if (!SPU.Out_MBox.Pop(data)) - { - LOG_ERROR(Log::SPU, "sys_spu_thread_throw_event(v=0x%x, spup=%d): Out_MBox is empty", v, spup); - return; - } - - //if (Ini.HLELogging.GetValue()) - { - LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x)", spup, v & 0x00ffffff, data); - } - - EventPort& port = SPUPs[spup]; - - std::lock_guard lock(port.m_mutex); - - if (!port.eq) - { - LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x): event queue not connected", spup, (v & 0x00ffffff), data); - return; - } - - // TODO: check passing spup value - if (!port.eq->events.push(SYS_SPU_THREAD_EVENT_USER_KEY, GetCurrentCPUThread()->GetId(), ((u64)spup << 32) | (v & 0x00ffffff), data)) - { - LOG_WARNING(Log::SPU, "sys_spu_thread_throw_event(spup=%d, data0=0x%x, data1=0x%x) failed (queue is full)", spup, (v & 0x00ffffff), data); - return; - } - - return; - } - else if (code == 128) - { - /* ===== sys_event_flag_set_bit ===== */ - u32 flag = v & 0xffffff; - - u32 data; - if (!SPU.Out_MBox.Pop(data)) - { - LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); - return; - } - - if (flag > 63) - { - LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x): flag > 63", data, v, flag); - return; - } - - //if (Ini.HLELogging.GetValue()) - { - LOG_WARNING(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d))", data, v, flag); - } - - EventFlag* ef; - if (!Emu.GetIdManager().GetIDData(data, ef)) - { - LOG_ERROR(Log::SPU, "sys_event_flag_set_bit(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); - SPU.In_MBox.PushUncond(CELL_ESRCH); - return; - } - - u32 tid = GetCurrentCPUThread()->GetId(); - - ef->m_mutex.lock(tid); - ef->flags |= (u64)1 << flag; - if (u32 target = ef->check()) - { - // if signal, leave both mutexes locked... - ef->signal.lock(target); - ef->m_mutex.unlock(tid, target); - } - else - { - ef->m_mutex.unlock(tid); - } - - SPU.In_MBox.PushUncond(CELL_OK); - return; - } - else if (code == 192) - { - /* ===== sys_event_flag_set_bit_impatient ===== */ - u32 flag = v & 0xffffff; - - u32 data; - if (!SPU.Out_MBox.Pop(data)) - { - LOG_ERROR(Log::SPU, "sys_event_flag_set_bit_impatient(v=0x%x (flag=%d)): Out_MBox is empty", v, flag); - return; - } - - if (flag > 63) - { - LOG_ERROR(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x): flag > 63", data, v, flag); - return; - } - - //if (Ini.HLELogging.GetValue()) - { - LOG_WARNING(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x (flag=%d))", data, v, flag); - } - - EventFlag* ef; - if (!Emu.GetIdManager().GetIDData(data, ef)) - { - LOG_WARNING(Log::SPU, "sys_event_flag_set_bit_impatient(id=%d, v=0x%x (flag=%d)): EventFlag not found", data, v, flag); - return; - } - - u32 tid = GetCurrentCPUThread()->GetId(); - - ef->m_mutex.lock(tid); - ef->flags |= (u64)1 << flag; - if (u32 target = ef->check()) - { - // if signal, leave both mutexes locked... - ef->signal.lock(target); - ef->m_mutex.unlock(tid, target); - } - else - { - ef->m_mutex.unlock(tid); - } - - return; - } - else - { - u32 data; - if (SPU.Out_MBox.Pop(data)) - { - LOG_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x); Out_MBox = 0x%x", v, data); - } - else - { - LOG_ERROR(Log::SPU, "SPU_WrOutIntrMbox: unknown data (v=0x%x)", v); - } - SPU.In_MBox.PushUncond(CELL_EINVAL); // ??? - return; - } - } - break; - } - - case SPU_WrOutMbox: - { - while (!SPU.Out_MBox.Push(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - break; - } - - case MFC_WrTagMask: - { - MFC1.QueryMask.SetValue(v); - break; - } - - case MFC_WrTagUpdate: - { - MFC1.TagStatus.PushUncond(MFC1.QueryMask.GetValue()); - break; - } - - case MFC_LSA: - { - MFC1.LSA.SetValue(v); - break; - } - - case MFC_EAH: - { - MFC1.EAH.SetValue(v); - break; - } - - case MFC_EAL: - { - MFC1.EAL.SetValue(v); - break; - } - - case MFC_Size: - { - MFC1.Size_Tag.SetValue((MFC1.Size_Tag.GetValue() & 0xffff) | (v << 16)); - break; - } - - case MFC_TagID: - { - MFC1.Size_Tag.SetValue((MFC1.Size_Tag.GetValue() & ~0xffff) | (v & 0xffff)); - break; - } - - - case MFC_Cmd: - { - MFC1.CMDStatus.SetValue(v); - EnqMfcCmd(MFC1); - break; - } - - case MFC_WrListStallAck: - { - if (v >= 32) - { - LOG_ERROR(Log::SPU, "MFC_WrListStallAck error: invalid tag(%d)", v); - return; - } - StalledList temp = StallList[v]; - if (!temp.MFCArgs) - { - LOG_ERROR(Log::SPU, "MFC_WrListStallAck error: empty tag(%d)", v); - return; - } - StallList[v].MFCArgs = nullptr; - ListCmd(temp.lsa, temp.ea, temp.tag, temp.size, temp.cmd, *temp.MFCArgs); - break; - } - - case SPU_WrDec: - { - m_dec_start = get_time(); - m_dec_value = v; - break; - } - - case SPU_WrEventMask: - { - m_event_mask = v; - if (v & ~(SPU_EVENT_IMPLEMENTED)) LOG_ERROR(Log::SPU, "SPU_WrEventMask: unsupported event masked (0x%x)"); - break; - } - - case SPU_WrEventAck: - { - m_events &= ~v; - break; - } - - default: - { - LOG_ERROR(Log::SPU, "%s error (v=0x%x): unknown/illegal channel (%d [%s]).", __FUNCTION__, v, ch, spu_ch_name[ch]); - break; - } - } - - if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); - } - - void ReadChannel(SPU_GPR_hdr& r, u32 ch) - { - r.Reset(); - u32& v = r._u32[3]; - - switch(ch) - { - case SPU_RdInMbox: - { - while (!SPU.In_MBox.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - break; - } - - case MFC_RdTagStat: - { - while (!MFC1.TagStatus.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - break; - } - - case MFC_RdTagMask: - { - v = MFC1.QueryMask.GetValue(); - break; - } - - case SPU_RdSigNotify1: - { - while (!SPU.SNR[0].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - break; - } - - case SPU_RdSigNotify2: - { - while (!SPU.SNR[1].Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - break; - } - - case MFC_RdAtomicStat: - { - while (!MFC1.AtomicStat.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - break; - } - - case MFC_RdListStallStat: - { - while (!StallStat.Pop(v) && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - break; - } - - case SPU_RdDec: - { - v = m_dec_value - (u32)(get_time() - m_dec_start); - break; - } - - case SPU_RdEventMask: - { - v = m_event_mask; - break; - } - - case SPU_RdEventStat: - { - while (!CheckEvents() && !Emu.IsStopped()) std::this_thread::sleep_for(std::chrono::milliseconds(1)); - v = m_events & m_event_mask; - break; - } - - case SPU_RdMachStat: - { - v = 1; // hack (not isolated, interrupts enabled) - // TODO: check value - break; - } - - default: - { - LOG_ERROR(Log::SPU, "%s error: unknown/illegal channel (%d [%s]).", __FUNCTION__, ch, spu_ch_name[ch]); - break; - } - } - - if (Emu.IsStopped()) LOG_WARNING(Log::SPU, "%s(%s) aborted", __FUNCTION__, spu_ch_name[ch]); - } - - void StopAndSignal(u32 code) - { - SetExitStatus(code); // exit code (not status) - - switch (code) - { - case 0x110: /* ===== sys_spu_thread_receive_event ===== */ - { - u32 spuq = 0; - if (!SPU.Out_MBox.Pop(spuq)) - { - LOG_ERROR(Log::SPU, "sys_spu_thread_receive_event: cannot read Out_MBox"); - SPU.In_MBox.PushUncond(CELL_EINVAL); // ??? - return; - } - - if (SPU.In_MBox.GetCount()) - { - LOG_ERROR(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x): In_MBox is not empty", spuq); - SPU.In_MBox.PushUncond(CELL_EBUSY); // ??? - return; - } - - if (Ini.HLELogging.GetValue()) - { - LOG_NOTICE(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x)", spuq); - } - - EventQueue* eq; - if (!SPUQs.GetEventQueue(FIX_SPUQ(spuq), eq)) - { - SPU.In_MBox.PushUncond(CELL_EINVAL); // TODO: check error value - return; - } - - u32 tid = GetId(); - - eq->sq.push(tid); // add thread to sleep queue - - while (true) - { - switch (eq->owner.trylock(tid)) - { - case SMR_OK: - if (!eq->events.count()) - { - eq->owner.unlock(tid); - break; - } - else - { - u32 next = (eq->protocol == SYS_SYNC_FIFO) ? eq->sq.pop() : eq->sq.pop_prio(); - if (next != tid) - { - eq->owner.unlock(tid, next); - break; - } - } - case SMR_SIGNAL: - { - sys_event_data event; - eq->events.pop(event); - eq->owner.unlock(tid); - SPU.In_MBox.PushUncond(CELL_OK); - SPU.In_MBox.PushUncond(event.data1); - SPU.In_MBox.PushUncond(event.data2); - SPU.In_MBox.PushUncond(event.data3); - return; - } - case SMR_FAILED: break; - default: eq->sq.invalidate(tid); SPU.In_MBox.PushUncond(CELL_ECANCELED); return; - } - - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - if (Emu.IsStopped()) - { - LOG_WARNING(Log::SPU, "sys_spu_thread_receive_event(spuq=0x%x) aborted", spuq); - eq->sq.invalidate(tid); - return; - } - } - } - break; - case 0x102: - if (!SPU.Out_MBox.GetCount()) - { - LOG_ERROR(Log::SPU, "sys_spu_thread_exit (no status, code 0x102)"); - } - else if (Ini.HLELogging.GetValue()) - { - // the real exit status - LOG_NOTICE(Log::SPU, "sys_spu_thread_exit (status=0x%x)", SPU.Out_MBox.GetValue()); - } - SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); - Stop(); - break; - default: - if (!SPU.Out_MBox.GetCount()) - { - LOG_ERROR(Log::SPU, "Unknown STOP code: 0x%x (no message)", code); - } - else - { - LOG_ERROR(Log::SPU, "Unknown STOP code: 0x%x (message=0x%x)", code, SPU.Out_MBox.GetValue()); - } - SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); - Stop(); - break; - } - } + void StopAndSignal(u32 code); virtual u8 ReadLS8 (const u32 lsa) const { return Memory.Read8 (lsa + m_offset); } virtual u16 ReadLS16 (const u32 lsa) const { return Memory.Read16 (lsa + m_offset); } diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index 1776343ce8..8263fa1acb 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "Utilities/Log.h" +#include #include "VFS.h" #include "Emu/HDD/HDD.h" diff --git a/rpcs3/Emu/FS/vfsDir.cpp b/rpcs3/Emu/FS/vfsDir.cpp index e648745fe8..aaec50c1ff 100644 --- a/rpcs3/Emu/FS/vfsDir.cpp +++ b/rpcs3/Emu/FS/vfsDir.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/System.h" #include "vfsDir.h" diff --git a/rpcs3/Emu/FS/vfsFile.cpp b/rpcs3/Emu/FS/vfsFile.cpp index f30a2de9a5..a44d0f63f2 100644 --- a/rpcs3/Emu/FS/vfsFile.cpp +++ b/rpcs3/Emu/FS/vfsFile.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/System.h" #include "vfsFile.h" diff --git a/rpcs3/Emu/FS/vfsStreamMemory.cpp b/rpcs3/Emu/FS/vfsStreamMemory.cpp index 03a71b5d38..102f4b3f8c 100644 --- a/rpcs3/Emu/FS/vfsStreamMemory.cpp +++ b/rpcs3/Emu/FS/vfsStreamMemory.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "vfsStreamMemory.h" diff --git a/rpcs3/Emu/HDD/HDD.cpp b/rpcs3/Emu/HDD/HDD.cpp index 27927c3218..80eda63429 100644 --- a/rpcs3/Emu/HDD/HDD.cpp +++ b/rpcs3/Emu/HDD/HDD.cpp @@ -2,6 +2,337 @@ #include "Utilities/Log.h" #include "HDD.h" +void vfsHDDManager::CreateBlock(vfsHDD_Block& block) +{ + block.is_used = true; + block.next_block = 0; +} + +void vfsHDDManager::CreateEntry(vfsHDD_Entry& entry) +{ + memset(&entry, 0, sizeof(vfsHDD_Entry)); + u64 ctime = time(nullptr); + entry.atime = ctime; + entry.ctime = ctime; + entry.mtime = ctime; + entry.access = vfsReadWrite; + CreateBlock(entry); +} + +void vfsHDDManager::CreateHDD(const std::string& path, u64 size, u64 block_size) +{ + rFile f(path, rFile::write); + + static const u64 cur_dir_block = 1; + + vfsHDD_Hdr hdr; + CreateBlock(hdr); + hdr.next_block = cur_dir_block; + hdr.magic = g_hdd_magic; + hdr.version = g_hdd_version; + hdr.block_count = (size + block_size) / block_size; + hdr.block_size = block_size; + f.Write(&hdr, sizeof(vfsHDD_Hdr)); + + { + vfsHDD_Entry entry; + CreateEntry(entry); + entry.type = vfsHDD_Entry_Dir; + entry.data_block = hdr.next_block; + entry.next_block = 0; + + f.Seek(cur_dir_block * hdr.block_size); + f.Write(&entry, sizeof(vfsHDD_Entry)); + f.Write("."); + } + + u8 null = 0; + f.Seek(hdr.block_count * hdr.block_size - sizeof(null)); + f.Write(&null, sizeof(null)); +} + +void vfsHDDManager::Format() +{ +} + +void vfsHDDManager::AppendEntry(vfsHDD_Entry entry) +{ +} + +bool vfsHDDFile::goto_block(u64 n) +{ + vfsHDD_Block block_info; + + if (m_info.data_block >= m_hdd_info.block_count) + { + return false; + } + + m_hdd.Seek(m_info.data_block * m_hdd_info.block_size); + block_info.next_block = m_info.data_block; + + for (u64 i = 0; i= m_hdd_info.block_count) + { + return false; + } + + m_hdd.Seek(block_info.next_block * m_hdd_info.block_size); + m_hdd.Read(&block_info, sizeof(vfsHDD_Block)); + } + + return true; +} + +void vfsHDDFile::RemoveBlocks(u64 start_block) +{ + vfsHDD_Block block_info; + block_info.next_block = start_block; + + while (block_info.next_block && block_info.is_used) + { + u64 offset = block_info.next_block * m_hdd_info.block_size; + + ReadBlock(offset, block_info); + WriteBlock(offset, g_null_block); + } +} + +void vfsHDDFile::WriteBlock(u64 block, const vfsHDD_Block& data) +{ + m_hdd.Seek(block * m_hdd_info.block_size); + m_hdd.Write(&data, sizeof(vfsHDD_Block)); +} + +void vfsHDDFile::ReadBlock(u64 block, vfsHDD_Block& data) +{ + m_hdd.Seek(block * m_hdd_info.block_size); + m_hdd.Read(&data, sizeof(vfsHDD_Block)); +} + +void vfsHDDFile::WriteEntry(u64 block, const vfsHDD_Entry& data) +{ + m_hdd.Seek(block * m_hdd_info.block_size); + m_hdd.Write(&data, sizeof(vfsHDD_Entry)); +} + +void vfsHDDFile::ReadEntry(u64 block, vfsHDD_Entry& data) +{ + m_hdd.Seek(block * m_hdd_info.block_size); + m_hdd.Read(&data, sizeof(vfsHDD_Entry)); +} + +void vfsHDDFile::ReadEntry(u64 block, vfsHDD_Entry& data, std::string& name) +{ + m_hdd.Seek(block * m_hdd_info.block_size); + m_hdd.Read(&data, sizeof(vfsHDD_Entry)); + name.resize(GetMaxNameLen()); + m_hdd.Read(&name.front(), GetMaxNameLen()); +} + +void vfsHDDFile::ReadEntry(u64 block, std::string& name) +{ + m_hdd.Seek(block * m_hdd_info.block_size + sizeof(vfsHDD_Entry)); + name.resize(GetMaxNameLen()); + m_hdd.Read(&name.front(), GetMaxNameLen()); +} + +void vfsHDDFile::WriteEntry(u64 block, const vfsHDD_Entry& data, const std::string& name) +{ + m_hdd.Seek(block * m_hdd_info.block_size); + m_hdd.Write(&data, sizeof(vfsHDD_Entry)); + m_hdd.Write(name.c_str(), std::min(GetMaxNameLen() - 1, name.length() + 1)); +} + +void vfsHDDFile::Open(u64 info_block) +{ + m_info_block = info_block; + ReadEntry(m_info_block, m_info); + m_position = 0; + m_cur_block = m_info.data_block; +} + +u64 vfsHDDFile::FindFreeBlock() +{ + vfsHDD_Block block_info; + + for (u64 i = 0; i(block_size - m_position, size); + + vfsHDD_Block cur_block_info; + m_hdd.Seek(m_cur_block * m_hdd_info.block_size); + m_hdd.Read(&cur_block_info, sizeof(vfsHDD_Block)); + m_hdd.Seek(m_cur_block * m_hdd_info.block_size + sizeof(vfsHDD_Block)+m_position); + m_hdd.Read(dst, rsize); + size -= rsize; + m_position += rsize; + if (!size) + { + return rsize; + } + + u64 offset = rsize; + + for (; size; size -= rsize, offset += rsize) + { + if (!cur_block_info.is_used || !cur_block_info.next_block || cur_block_info.next_block >= m_hdd_info.block_count) + { + return offset; + } + + m_cur_block = cur_block_info.next_block; + rsize = std::min(block_size, size); + + m_hdd.Seek(cur_block_info.next_block * m_hdd_info.block_size); + m_hdd.Read(&cur_block_info, sizeof(vfsHDD_Block)); + + if (m_hdd.Read((u8*)dst + offset, rsize) != rsize) + { + return offset; + } + } + + m_position = rsize; + + return offset; +} + +u64 vfsHDDFile::Write(const void* src, u64 size) +{ + if (!size) + return 0; + + //vfsDeviceLocker lock(m_hdd); + + const u32 block_size = m_hdd_info.block_size - sizeof(vfsHDD_Block); + + if (!m_cur_block) + { + if (!m_info.data_block) + { + u64 new_block = FindFreeBlock(); + + if (!new_block) + { + return 0; + } + + WriteBlock(new_block, g_used_block); + m_info.data_block = new_block; + m_info.size = 0; + SaveInfo(); + } + + m_cur_block = m_info.data_block; + m_position = 0; + } + + u64 wsize = std::min(block_size - m_position, size); + + vfsHDD_Block block_info; + ReadBlock(m_cur_block, block_info); + + if (wsize) + { + m_hdd.Seek(m_cur_block * m_hdd_info.block_size + sizeof(vfsHDD_Block)+m_position); + m_hdd.Write(src, wsize); + size -= wsize; + m_info.size += wsize; + m_position += wsize; + SaveInfo(); + + if (!size) + return wsize; + } + + u64 last_block = m_cur_block; + block_info.is_used = true; + u64 offset = wsize; + + for (; size; size -= wsize, offset += wsize, m_info.size += wsize) + { + u64 new_block = FindFreeBlock(); + + if (!new_block) + { + m_position = 0; + SaveInfo(); + return offset; + } + + m_cur_block = new_block; + wsize = std::min(block_size, size); + + block_info.next_block = m_cur_block; + m_hdd.Seek(last_block * m_hdd_info.block_size); + if (m_hdd.Write(&block_info, sizeof(vfsHDD_Block)) != sizeof(vfsHDD_Block)) + { + m_position = 0; + SaveInfo(); + return offset; + } + + block_info.next_block = 0; + m_hdd.Seek(m_cur_block * m_hdd_info.block_size); + if (m_hdd.Write(&block_info, sizeof(vfsHDD_Block)) != sizeof(vfsHDD_Block)) + { + m_position = 0; + SaveInfo(); + return offset; + } + if ((m_position = m_hdd.Write((u8*)src + offset, wsize)) != wsize) + { + m_info.size += wsize; + SaveInfo(); + return offset; + } + + last_block = m_cur_block; + } + + SaveInfo(); + m_position = wsize; + return offset; +} + vfsDeviceHDD::vfsDeviceHDD(const std::string& hdd_path) : m_hdd_path(hdd_path) { } @@ -15,3 +346,438 @@ vfsDirBase* vfsDeviceHDD::GetNewDirStream() { return nullptr; } + +vfsHDD::vfsHDD(vfsDevice* device, const std::string& hdd_path) + : m_hdd_file(device) + , m_file(m_hdd_file, m_hdd_info) + , m_hdd_path(hdd_path) + , vfsFileBase(device) +{ + m_hdd_file.Open(hdd_path, vfsReadWrite); + m_hdd_file.Read(&m_hdd_info, sizeof(vfsHDD_Hdr)); + m_cur_dir_block = m_hdd_info.next_block; + if (!m_hdd_info.block_size) + { + LOG_ERROR(HLE, "Bad block size!"); + m_hdd_info.block_size = 2048; + } + m_hdd_file.Seek(m_cur_dir_block * m_hdd_info.block_size); + m_hdd_file.Read(&m_cur_dir, sizeof(vfsHDD_Entry)); +} + +bool vfsHDD::SearchEntry(const std::string& name, u64& entry_block, u64* parent_block) +{ + u64 last_block = 0; + u64 block = m_cur_dir_block; + vfsHDD_Entry entry; + std::string buf; + + while (block) + { + ReadEntry(block, entry, buf); + + if (fmt::CmpNoCase(name, buf) == 0) + { + entry_block = block; + if (parent_block) + *parent_block = last_block; + + return true; + } + + last_block = block; + block = entry.is_used ? entry.next_block : 0ULL; + } + + return false; +} + +int vfsHDD::OpenDir(const std::string& name) +{ + LOG_WARNING(HLE, "OpenDir(%s)", name.c_str()); + u64 entry_block; + if (!SearchEntry(name, entry_block)) + return -1; + + m_hdd_file.Seek(entry_block * m_hdd_info.block_size); + vfsHDD_Entry entry; + m_hdd_file.Read(&entry, sizeof(vfsHDD_Entry)); + if (entry.type == vfsHDD_Entry_File) + return 1; + + m_cur_dir_block = entry.data_block; + ReadEntry(m_cur_dir_block, m_cur_dir); + + return 0; +} + +bool vfsHDD::Rename(const std::string& from, const std::string& to) +{ + u64 entry_block; + if (!SearchEntry(from, entry_block)) + { + return false; + } + + vfsHDD_Entry entry; + ReadEntry(entry_block, entry); + WriteEntry(entry_block, entry, to); + + return true; +} + +u64 vfsHDD::FindFreeBlock() +{ + vfsHDD_Block block_info; + + for (u64 i = 0; i(GetMaxNameLen() - 1, name.length() + 1)); +} + +bool vfsHDD::Create(vfsHDD_EntryType type, const std::string& name) +{ + if (HasEntry(name)) + { + return false; + } + + u64 new_block = FindFreeBlock(); + if (!new_block) + { + return false; + } + + LOG_NOTICE(HLE, "CREATING ENTRY AT 0x%llx", new_block); + WriteBlock(new_block, g_used_block); + + { + vfsHDD_Entry new_entry; + vfsHDDManager::CreateEntry(new_entry); + new_entry.next_block = 0; + new_entry.type = type; + + if (type == vfsHDD_Entry_Dir) + { + u64 block_cur = FindFreeBlock(); + + if (!block_cur) + { + return false; + } + + WriteBlock(block_cur, g_used_block); + + u64 block_last = FindFreeBlock(); + + if (!block_last) + { + return false; + } + + WriteBlock(block_last, g_used_block); + + vfsHDD_Entry entry_cur, entry_last; + vfsHDDManager::CreateEntry(entry_cur); + vfsHDDManager::CreateEntry(entry_last); + + entry_cur.type = vfsHDD_Entry_Dir; + entry_cur.data_block = block_cur; + entry_cur.next_block = block_last; + + entry_last.type = vfsHDD_Entry_Dir; + entry_last.data_block = m_cur_dir_block; + entry_last.next_block = 0; + + new_entry.data_block = block_cur; + + WriteEntry(block_cur, entry_cur, "."); + WriteEntry(block_last, entry_last, ".."); + } + + WriteEntry(new_block, new_entry, name); + } + + { + u64 block = m_cur_dir_block; + + vfsHDD_Block tmp; + while (block) + { + ReadBlock(block, tmp); + + if (!tmp.next_block) + break; + + block = tmp.next_block; + } + + tmp.next_block = new_block; + WriteBlock(block, tmp); + } + + return true; +} + +bool vfsHDD::GetFirstEntry(u64& block, vfsHDD_Entry& entry, std::string& name) +{ + if (!m_cur_dir_block) + { + return false; + } + + ReadEntry(m_cur_dir_block, entry, name); + block = entry.is_used ? entry.next_block : 0; + + return true; +} + +bool vfsHDD::GetNextEntry(u64& block, vfsHDD_Entry& entry, std::string& name) +{ + if (!block) + { + return false; + } + + ReadEntry(block, entry, name); + + block = entry.is_used ? entry.next_block : 0; + return true; +} + +bool vfsHDD::Open(const std::string& path, vfsOpenMode mode) +{ + const char* s = path.c_str(); + u64 from = 0; + u64 pos = 0; + u64 file_pos = -1; + + do + { + if (s[pos] == '\\' || s[pos] == '/' || s[pos] == '\0') // ??? + { + if (file_pos != -1) + { + return false; + } + + if (from != -1) + { + if (pos - from > 1) + { + int res = OpenDir(std::string(s + from, pos)); + if (res == -1) + { + return false; + } + + if (res == 1) + { + file_pos = from; + } + } + + from = pos; + } + else + { + from = pos; + } + } + } while (s[pos++] != '\0'); + + if (file_pos == -1) + { + return false; + } + + u64 file_block; + if (!SearchEntry(std::string(s + file_pos), file_block)) + { + return false; + } + + LOG_NOTICE(HLE, "ENTRY FOUND AT 0x%llx", file_block); + m_file.Open(file_block); + + return vfsFileBase::Open(path, mode); +} + +bool vfsHDD::HasEntry(const std::string& name) +{ + u64 file_block; + if (!SearchEntry(name, file_block)) + { + return false; + } + + return true; +} + +void vfsHDD::RemoveBlocksDir(u64 start_block) +{ + std::string name; + u64 block = start_block; + vfsHDD_Entry entry; + + while (block) + { + ReadEntry(block, entry, name); + WriteBlock(block, g_null_block); + + if (entry.type == vfsHDD_Entry_Dir && name != "." && name != "..") + { + LOG_WARNING(HLE, "Removing sub folder '%s'", name.c_str()); + RemoveBlocksDir(entry.data_block); + } + else if (entry.type == vfsHDD_Entry_File) + { + RemoveBlocksFile(entry.data_block); + } + + block = entry.next_block; + } +} + +void vfsHDD::RemoveBlocksFile(u64 start_block) +{ + u64 block = start_block; + vfsHDD_Block block_data; + + while (block) + { + ReadBlock(block, block_data); + WriteBlock(block, g_null_block); + + block = block_data.next_block; + } +} + +bool vfsHDD::RemoveEntry(const std::string& name) +{ + u64 entry_block, parent_entry; + if (!SearchEntry(name, entry_block, &parent_entry)) + { + return false; + } + + vfsHDD_Entry entry; + ReadEntry(entry_block, entry); + if (entry.type == vfsHDD_Entry_Dir) + { + RemoveBlocksDir(entry.data_block); + } + else if (entry.type == vfsHDD_Entry_File) + { + RemoveBlocksFile(entry.data_block); + } + + if (parent_entry) + { + u64 next = entry.next_block; + ReadEntry(parent_entry, entry); + entry.next_block = next; + WriteEntry(parent_entry, entry); + } + WriteBlock(entry_block, g_null_block); + return true; +} + +bool vfsHDD::Create(const std::string& path) +{ + return false; +} + +u32 vfsHDD::Write(const void* src, u32 size) +{ + return vfsFileBase::Write(src, m_file.Write(src, size)); +} + +u32 vfsHDD::Read(void* dst, u32 size) +{ + return vfsFileBase::Read(dst, m_file.Read(dst, size)); +} + +u64 vfsHDD::Seek(s64 offset, vfsSeekMode mode) +{ + switch (mode) + { + case vfsSeekCur: + m_file.Seek(Tell() + offset); + break; + + case vfsSeekSet: + m_file.Seek(offset); + break; + + case vfsSeekEnd: + m_file.Seek(m_file.GetSize() + offset); + break; + } + + return vfsFileBase::Seek(offset, mode); +} + +bool vfsHDD::Eof() +{ + return m_file.Eof(); +} + +u64 vfsHDD::GetSize() +{ + return m_file.GetSize(); +} \ No newline at end of file diff --git a/rpcs3/Emu/HDD/HDD.h b/rpcs3/Emu/HDD/HDD.h index d68f8dbbfc..1c7cba7c5f 100644 --- a/rpcs3/Emu/HDD/HDD.h +++ b/rpcs3/Emu/HDD/HDD.h @@ -44,62 +44,15 @@ struct vfsHDD_Entry : public vfsHDD_Block class vfsHDDManager { public: - static void CreateBlock(vfsHDD_Block& block) - { - block.is_used = true; - block.next_block = 0; - } + static void CreateBlock(vfsHDD_Block& block); - static void CreateEntry(vfsHDD_Entry& entry) - { - memset(&entry, 0, sizeof(vfsHDD_Entry)); - u64 ctime = time(nullptr); - entry.atime = ctime; - entry.ctime = ctime; - entry.mtime = ctime; - entry.access = vfsReadWrite; - CreateBlock(entry); - } + static void CreateEntry(vfsHDD_Entry& entry); - static void CreateHDD(const std::string& path, u64 size, u64 block_size) - { - rFile f(path, rFile::write); + static void CreateHDD(const std::string& path, u64 size, u64 block_size); - static const u64 cur_dir_block = 1; + void Format(); - vfsHDD_Hdr hdr; - CreateBlock(hdr); - hdr.next_block = cur_dir_block; - hdr.magic = g_hdd_magic; - hdr.version = g_hdd_version; - hdr.block_count = (size + block_size) / block_size; - hdr.block_size = block_size; - f.Write(&hdr, sizeof(vfsHDD_Hdr)); - - { - vfsHDD_Entry entry; - CreateEntry(entry); - entry.type = vfsHDD_Entry_Dir; - entry.data_block = hdr.next_block; - entry.next_block = 0; - - f.Seek(cur_dir_block * hdr.block_size); - f.Write(&entry, sizeof(vfsHDD_Entry)); - f.Write("."); - } - - u8 null = 0; - f.Seek(hdr.block_count * hdr.block_size - sizeof(null)); - f.Write(&null, sizeof(null)); - } - - void Format() - { - } - - void AppendEntry(vfsHDD_Entry entry) - { - } + void AppendEntry(vfsHDD_Entry entry); }; @@ -112,91 +65,23 @@ class vfsHDDFile u32 m_position; u64 m_cur_block; - bool goto_block(u64 n) - { - vfsHDD_Block block_info; + bool goto_block(u64 n); - if(m_info.data_block >= m_hdd_info.block_count) - { - return false; - } + void RemoveBlocks(u64 start_block); - m_hdd.Seek(m_info.data_block * m_hdd_info.block_size); - block_info.next_block = m_info.data_block; + void WriteBlock(u64 block, const vfsHDD_Block& data); - for(u64 i=0; i= m_hdd_info.block_count) - { - return false; - } + void ReadBlock(u64 block, vfsHDD_Block& data); - m_hdd.Seek(block_info.next_block * m_hdd_info.block_size); - m_hdd.Read(&block_info, sizeof(vfsHDD_Block)); - } + void WriteEntry(u64 block, const vfsHDD_Entry& data); - return true; - } + void ReadEntry(u64 block, vfsHDD_Entry& data); - void RemoveBlocks(u64 start_block) - { - vfsHDD_Block block_info; - block_info.next_block = start_block; + void ReadEntry(u64 block, vfsHDD_Entry& data, std::string& name); - while(block_info.next_block && block_info.is_used) - { - u64 offset = block_info.next_block * m_hdd_info.block_size; + void ReadEntry(u64 block, std::string& name); - ReadBlock(offset, block_info); - WriteBlock(offset, g_null_block); - } - } - - void WriteBlock(u64 block, const vfsHDD_Block& data) - { - m_hdd.Seek(block * m_hdd_info.block_size); - m_hdd.Write(&data, sizeof(vfsHDD_Block)); - } - - void ReadBlock(u64 block, vfsHDD_Block& data) - { - m_hdd.Seek(block * m_hdd_info.block_size); - m_hdd.Read(&data, sizeof(vfsHDD_Block)); - } - - void WriteEntry(u64 block, const vfsHDD_Entry& data) - { - m_hdd.Seek(block * m_hdd_info.block_size); - m_hdd.Write(&data, sizeof(vfsHDD_Entry)); - } - - void ReadEntry(u64 block, vfsHDD_Entry& data) - { - m_hdd.Seek(block * m_hdd_info.block_size); - m_hdd.Read(&data, sizeof(vfsHDD_Entry)); - } - - void ReadEntry(u64 block, vfsHDD_Entry& data, std::string& name) - { - m_hdd.Seek(block * m_hdd_info.block_size); - m_hdd.Read(&data, sizeof(vfsHDD_Entry)); - name.resize(GetMaxNameLen()); - m_hdd.Read(&name.front(), GetMaxNameLen()); - } - - void ReadEntry(u64 block, std::string& name) - { - m_hdd.Seek(block * m_hdd_info.block_size + sizeof(vfsHDD_Entry)); - name.resize(GetMaxNameLen()); - m_hdd.Read(&name.front(), GetMaxNameLen()); - } - - void WriteEntry(u64 block, const vfsHDD_Entry& data, const std::string& name) - { - m_hdd.Seek(block * m_hdd_info.block_size); - m_hdd.Write(&data, sizeof(vfsHDD_Entry)); - m_hdd.Write(name.c_str(), std::min(GetMaxNameLen() - 1, name.length() + 1)); - } + void WriteEntry(u64 block, const vfsHDD_Entry& data, const std::string& name); __forceinline u32 GetMaxNameLen() const { @@ -214,198 +99,22 @@ public: { } - void Open(u64 info_block) - { - m_info_block = info_block; - ReadEntry(m_info_block, m_info); - m_position = 0; - m_cur_block = m_info.data_block; - } + void Open(u64 info_block); - u64 FindFreeBlock() - { - vfsHDD_Block block_info; - - for(u64 i = 0; i(block_size - m_position, size); - - vfsHDD_Block cur_block_info; - m_hdd.Seek(m_cur_block * m_hdd_info.block_size); - m_hdd.Read(&cur_block_info, sizeof(vfsHDD_Block)); - m_hdd.Seek(m_cur_block * m_hdd_info.block_size + sizeof(vfsHDD_Block) + m_position); - m_hdd.Read(dst, rsize); - size -= rsize; - m_position += rsize; - if(!size) - { - return rsize; - } - - u64 offset = rsize; - - for(; size; size -= rsize, offset += rsize) - { - if(!cur_block_info.is_used || !cur_block_info.next_block || cur_block_info.next_block >= m_hdd_info.block_count) - { - return offset; - } - - m_cur_block = cur_block_info.next_block; - rsize = std::min(block_size, size); - - m_hdd.Seek(cur_block_info.next_block * m_hdd_info.block_size); - m_hdd.Read(&cur_block_info, sizeof(vfsHDD_Block)); - - if(m_hdd.Read((u8*)dst + offset, rsize) != rsize) - { - return offset; - } - } - - m_position = rsize; - - return offset; - } - - u64 Write(const void* src, u64 size) - { - if(!size) - return 0; - - //vfsDeviceLocker lock(m_hdd); - - const u32 block_size = m_hdd_info.block_size - sizeof(vfsHDD_Block); - - if(!m_cur_block) - { - if(!m_info.data_block) - { - u64 new_block = FindFreeBlock(); - - if(!new_block) - { - return 0; - } - - WriteBlock(new_block, g_used_block); - m_info.data_block = new_block; - m_info.size = 0; - SaveInfo(); - } - - m_cur_block = m_info.data_block; - m_position = 0; - } - - u64 wsize = std::min(block_size - m_position, size); - - vfsHDD_Block block_info; - ReadBlock(m_cur_block, block_info); - - if(wsize) - { - m_hdd.Seek(m_cur_block * m_hdd_info.block_size + sizeof(vfsHDD_Block) + m_position); - m_hdd.Write(src, wsize); - size -= wsize; - m_info.size += wsize; - m_position += wsize; - SaveInfo(); - - if(!size) - return wsize; - } - - u64 last_block = m_cur_block; - block_info.is_used = true; - u64 offset = wsize; - - for(; size; size -= wsize, offset += wsize, m_info.size += wsize) - { - u64 new_block = FindFreeBlock(); - - if(!new_block) - { - m_position = 0; - SaveInfo(); - return offset; - } - - m_cur_block = new_block; - wsize = std::min(block_size, size); - - block_info.next_block = m_cur_block; - m_hdd.Seek(last_block * m_hdd_info.block_size); - if(m_hdd.Write(&block_info, sizeof(vfsHDD_Block)) != sizeof(vfsHDD_Block)) - { - m_position = 0; - SaveInfo(); - return offset; - } - - block_info.next_block = 0; - m_hdd.Seek(m_cur_block * m_hdd_info.block_size); - if(m_hdd.Write(&block_info, sizeof(vfsHDD_Block)) != sizeof(vfsHDD_Block)) - { - m_position = 0; - SaveInfo(); - return offset; - } - if((m_position = m_hdd.Write((u8*)src + offset, wsize)) != wsize) - { - m_info.size += wsize; - SaveInfo(); - return offset; - } - - last_block = m_cur_block; - } - - SaveInfo(); - m_position = wsize; - return offset; - } + u64 Write(const void* src, u64 size); bool Eof() const { @@ -434,444 +143,60 @@ class vfsHDD : public vfsFileBase vfsHDDFile m_file; public: - vfsHDD(vfsDevice* device, const std::string& hdd_path) - : m_hdd_file(device) - , m_file(m_hdd_file, m_hdd_info) - , m_hdd_path(hdd_path) - , vfsFileBase(device) - { - m_hdd_file.Open(hdd_path, vfsReadWrite); - m_hdd_file.Read(&m_hdd_info, sizeof(vfsHDD_Hdr)); - m_cur_dir_block = m_hdd_info.next_block; - if(!m_hdd_info.block_size) - { - LOG_ERROR(HLE, "Bad block size!"); - m_hdd_info.block_size = 2048; - } - m_hdd_file.Seek(m_cur_dir_block * m_hdd_info.block_size); - m_hdd_file.Read(&m_cur_dir, sizeof(vfsHDD_Entry)); - } + vfsHDD(vfsDevice* device, const std::string& hdd_path); __forceinline u32 GetMaxNameLen() const { return m_hdd_info.block_size - sizeof(vfsHDD_Entry); } - bool SearchEntry(const std::string& name, u64& entry_block, u64* parent_block = nullptr) - { - u64 last_block = 0; - u64 block = m_cur_dir_block; - vfsHDD_Entry entry; - std::string buf; + bool SearchEntry(const std::string& name, u64& entry_block, u64* parent_block = nullptr); - while(block) - { - ReadEntry(block, entry, buf); + int OpenDir(const std::string& name); - if (fmt::CmpNoCase(name,buf) == 0) - { - entry_block = block; - if(parent_block) - *parent_block = last_block; + bool Rename(const std::string& from, const std::string& to); - return true; - } + u64 FindFreeBlock(); - last_block = block; - block = entry.is_used ? entry.next_block : 0ULL; - } + void WriteBlock(u64 block, const vfsHDD_Block& data); - return false; - } + void ReadBlock(u64 block, vfsHDD_Block& data); - int OpenDir(const std::string& name) - { - LOG_WARNING(HLE, "OpenDir(%s)", name.c_str()); - u64 entry_block; - if(!SearchEntry(name, entry_block)) - return -1; + void WriteEntry(u64 block, const vfsHDD_Entry& data); - m_hdd_file.Seek(entry_block * m_hdd_info.block_size); - vfsHDD_Entry entry; - m_hdd_file.Read(&entry, sizeof(vfsHDD_Entry)); - if(entry.type == vfsHDD_Entry_File) - return 1; + void ReadEntry(u64 block, vfsHDD_Entry& data); - m_cur_dir_block = entry.data_block; - ReadEntry(m_cur_dir_block, m_cur_dir); + void ReadEntry(u64 block, vfsHDD_Entry& data, std::string& name); - return 0; - } + void ReadEntry(u64 block, std::string& name); - bool Rename(const std::string& from, const std::string& to) - { - u64 entry_block; - if(!SearchEntry(from, entry_block)) - { - return false; - } + void WriteEntry(u64 block, const vfsHDD_Entry& data, const std::string& name); - vfsHDD_Entry entry; - ReadEntry(entry_block, entry); - WriteEntry(entry_block, entry, to); + bool Create(vfsHDD_EntryType type, const std::string& name); - return true; - } + bool GetFirstEntry(u64& block, vfsHDD_Entry& entry, std::string& name); - u64 FindFreeBlock() - { - vfsHDD_Block block_info; + bool GetNextEntry(u64& block, vfsHDD_Entry& entry, std::string& name); - for(u64 i = 0; i(GetMaxNameLen() - 1, name.length() + 1)); - } + virtual bool Eof(); - bool Create(vfsHDD_EntryType type, const std::string& name) - { - if(HasEntry(name)) - { - return false; - } - - u64 new_block = FindFreeBlock(); - if(!new_block) - { - return false; - } - - LOG_NOTICE(HLE, "CREATING ENTRY AT 0x%llx", new_block); - WriteBlock(new_block, g_used_block); - - { - vfsHDD_Entry new_entry; - vfsHDDManager::CreateEntry(new_entry); - new_entry.next_block = 0; - new_entry.type = type; - - if(type == vfsHDD_Entry_Dir) - { - u64 block_cur = FindFreeBlock(); - - if(!block_cur) - { - return false; - } - - WriteBlock(block_cur, g_used_block); - - u64 block_last = FindFreeBlock(); - - if(!block_last) - { - return false; - } - - WriteBlock(block_last, g_used_block); - - vfsHDD_Entry entry_cur, entry_last; - vfsHDDManager::CreateEntry(entry_cur); - vfsHDDManager::CreateEntry(entry_last); - - entry_cur.type = vfsHDD_Entry_Dir; - entry_cur.data_block = block_cur; - entry_cur.next_block = block_last; - - entry_last.type = vfsHDD_Entry_Dir; - entry_last.data_block = m_cur_dir_block; - entry_last.next_block = 0; - - new_entry.data_block = block_cur; - - WriteEntry(block_cur, entry_cur, "."); - WriteEntry(block_last, entry_last, ".."); - } - - WriteEntry(new_block, new_entry, name); - } - - { - u64 block = m_cur_dir_block; - - vfsHDD_Block tmp; - while(block) - { - ReadBlock(block, tmp); - - if(!tmp.next_block) - break; - - block = tmp.next_block; - } - - tmp.next_block = new_block; - WriteBlock(block, tmp); - } - - return true; - } - - bool GetFirstEntry(u64& block, vfsHDD_Entry& entry, std::string& name) - { - if(!m_cur_dir_block) - { - return false; - } - - ReadEntry(m_cur_dir_block, entry, name); - block = entry.is_used ? entry.next_block : 0; - - return true; - } - - bool GetNextEntry(u64& block, vfsHDD_Entry& entry, std::string& name) - { - if(!block) - { - return false; - } - - ReadEntry(block, entry, name); - - block = entry.is_used ? entry.next_block : 0; - return true; - } - - virtual bool Open(const std::string& path, vfsOpenMode mode = vfsRead) - { - const char* s = path.c_str(); - u64 from = 0; - u64 pos = 0; - u64 file_pos = -1; - - do - { - if(s[pos] == '\\' || s[pos] == '/' || s[pos] == '\0') // ??? - { - if(file_pos != -1) - { - return false; - } - - if(from != -1) - { - if(pos - from > 1) - { - int res = OpenDir(std::string(s + from, pos)); - if(res == -1) - { - return false; - } - - if(res == 1) - { - file_pos = from; - } - } - - from = pos; - } - else - { - from = pos; - } - } - } - while(s[pos++] != '\0'); - - if(file_pos == -1) - { - return false; - } - - u64 file_block; - if(!SearchEntry(std::string(s + file_pos), file_block)) - { - return false; - } - - LOG_NOTICE(HLE, "ENTRY FOUND AT 0x%llx", file_block); - m_file.Open(file_block); - - return vfsFileBase::Open(path, mode); - } - - bool HasEntry(const std::string& name) - { - u64 file_block; - if(!SearchEntry(name, file_block)) - { - return false; - } - - return true; - } - - void RemoveBlocksDir(u64 start_block) - { - std::string name; - u64 block = start_block; - vfsHDD_Entry entry; - - while(block) - { - ReadEntry(block, entry, name); - WriteBlock(block, g_null_block); - - if(entry.type == vfsHDD_Entry_Dir && name != "." && name != "..") - { - LOG_WARNING(HLE, "Removing sub folder '%s'", name.c_str()); - RemoveBlocksDir(entry.data_block); - } - else if(entry.type == vfsHDD_Entry_File) - { - RemoveBlocksFile(entry.data_block); - } - - block = entry.next_block; - } - } - - void RemoveBlocksFile(u64 start_block) - { - u64 block = start_block; - vfsHDD_Block block_data; - - while(block) - { - ReadBlock(block, block_data); - WriteBlock(block, g_null_block); - - block = block_data.next_block; - } - } - - bool RemoveEntry(const std::string& name) - { - u64 entry_block, parent_entry; - if(!SearchEntry(name, entry_block, &parent_entry)) - { - return false; - } - - vfsHDD_Entry entry; - ReadEntry(entry_block, entry); - if(entry.type == vfsHDD_Entry_Dir) - { - RemoveBlocksDir(entry.data_block); - } - else if(entry.type == vfsHDD_Entry_File) - { - RemoveBlocksFile(entry.data_block); - } - - if(parent_entry) - { - u64 next = entry.next_block; - ReadEntry(parent_entry, entry); - entry.next_block = next; - WriteEntry(parent_entry, entry); - } - WriteBlock(entry_block, g_null_block); - return true; - } - - virtual bool Create(const std::string& path) - { - return false; - } - - virtual u32 Write(const void* src, u32 size) - { - return vfsFileBase::Write(src, m_file.Write(src, size)); - } - - virtual u32 Read(void* dst, u32 size) - { - return vfsFileBase::Read(dst, m_file.Read(dst, size)); - } - - virtual u64 Seek(s64 offset, vfsSeekMode mode = vfsSeekSet) - { - switch(mode) - { - case vfsSeekCur: - m_file.Seek(Tell() + offset); - break; - - case vfsSeekSet: - m_file.Seek(offset); - break; - - case vfsSeekEnd: - m_file.Seek(m_file.GetSize() + offset); - break; - } - - return vfsFileBase::Seek(offset, mode); - } - - virtual bool Eof() - { - return m_file.Eof(); - } - - virtual u64 GetSize() - { - return m_file.GetSize(); - } + virtual u64 GetSize(); }; diff --git a/rpcs3/Emu/Io/Keyboard.cpp b/rpcs3/Emu/Io/Keyboard.cpp index 03b0a72a50..f63c5530ca 100644 --- a/rpcs3/Emu/Io/Keyboard.cpp +++ b/rpcs3/Emu/Io/Keyboard.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "rpcs3/Ini.h" #include "Keyboard.h" #include "Null/NullKeyboardHandler.h" diff --git a/rpcs3/Emu/Io/Mouse.cpp b/rpcs3/Emu/Io/Mouse.cpp index 3c9d569125..fc0112e5e0 100644 --- a/rpcs3/Emu/Io/Mouse.cpp +++ b/rpcs3/Emu/Io/Mouse.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "rpcs3/Ini.h" #include "Mouse.h" #include "Null/NullMouseHandler.h" diff --git a/rpcs3/Emu/Io/Pad.cpp b/rpcs3/Emu/Io/Pad.cpp index 0e29f5a85b..55cdbf0e91 100644 --- a/rpcs3/Emu/Io/Pad.cpp +++ b/rpcs3/Emu/Io/Pad.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "rpcs3/Ini.h" #include "Pad.h" #include "Null/NullPadHandler.h" diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index c60abe9f7c..79c6f293cb 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -4,7 +4,15 @@ #include "Utilities/Log.h" #include "Memory.h" #include "Emu/System.h" -#include "Ini.h" + +#ifndef _WIN32 +#include +#endif + +/* OS X uses MAP_ANON instead of MAP_ANONYMOUS */ +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif MemoryBase Memory; @@ -535,12 +543,6 @@ bool MemoryBlockLE::Write128(const u64 addr, const u128 value) return true; } -// MemoryBase -template<> __forceinline u64 MemoryBase::ReverseData<1>(u64 val) { return val; } -template<> __forceinline u64 MemoryBase::ReverseData<2>(u64 val) { return Reverse16(val); } -template<> __forceinline u64 MemoryBase::ReverseData<4>(u64 val) { return Reverse32(val); } -template<> __forceinline u64 MemoryBase::ReverseData<8>(u64 val) { return Reverse64(val); } - VirtualMemoryBlock::VirtualMemoryBlock() : MemoryBlock(), m_reserve_size(0) { } diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 8f09a50869..61f2e7ed73 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -1,17 +1,8 @@ #pragma once -#ifndef _WIN32 -#include -#endif - #include "MemoryBlock.h" #include "Emu/SysCalls/Callback.h" -/* OS X uses MAP_ANON instead of MAP_ANONYMOUS */ -#ifndef MAP_ANONYMOUS - #define MAP_ANONYMOUS MAP_ANON -#endif - using std::nullptr_t; #define safe_delete(x) do {delete (x);(x)=nullptr;} while(0) @@ -112,36 +103,6 @@ public: void UnregisterPages(u64 addr, u32 size); - static __forceinline u16 Reverse16(const u16 val) - { - return _byteswap_ushort(val); - } - - static __forceinline u32 Reverse32(const u32 val) - { - return _byteswap_ulong(val); - } - - static __forceinline u64 Reverse64(const u64 val) - { - return _byteswap_uint64(val); - } - - static __forceinline u128 Reverse128(const u128 val) - { - u128 ret; - ret.lo = _byteswap_uint64(val.hi); - ret.hi = _byteswap_uint64(val.lo); - return ret; - } - - template static __forceinline u64 ReverseData(u64 val); - - template static __forceinline T Reverse(T val) - { - return (T)ReverseData(val); - }; - template u8* GetMemFromAddr(const T addr) { if ((u32)addr == addr) @@ -435,11 +396,6 @@ public: strcpy((char*)GetMemFromAddr(addr), str.c_str()); } - static u64 AlignAddr(const u64 addr, const u64 align) - { - return (addr + (align-1)) & ~(align-1); - } - u32 GetUserMemTotalSize() { return UserMemory->GetSize(); diff --git a/rpcs3/Emu/SysCalls/LogBase.cpp b/rpcs3/Emu/SysCalls/LogBase.cpp index d74364e589..fa79f90ceb 100644 --- a/rpcs3/Emu/SysCalls/LogBase.cpp +++ b/rpcs3/Emu/SysCalls/LogBase.cpp @@ -1,7 +1,13 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Emu/System.h" #include "LogBase.h" +bool LogBase::CheckLogging() const +{ + return Ini.HLELogging.GetValue(); +} + void LogBase::LogNotice(const std::string& text) { LOG_NOTICE(HLE, "%s", text.c_str()); diff --git a/rpcs3/Emu/SysCalls/LogBase.h b/rpcs3/Emu/SysCalls/LogBase.h index 317e999273..dac704e974 100644 --- a/rpcs3/Emu/SysCalls/LogBase.h +++ b/rpcs3/Emu/SysCalls/LogBase.h @@ -4,6 +4,7 @@ class LogBase { bool m_logging; + bool CheckLogging() const; void LogNotice(const std::string& text); void LogWarning(const std::string& text); void LogError(const std::string& text); @@ -33,7 +34,7 @@ public: template __forceinline void Log(const char* fmt, Targs... args) { - if (m_logging) + if (CheckLogging()) { Notice(fmt, args...); } @@ -41,7 +42,7 @@ public: template __forceinline void Log(const u32 id, const char* fmt, Targs... args) { - if (m_logging) + if (CheckLogging()) { Notice(id, fmt, args...); } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index bf4b722388..9d4f423182 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -1,11 +1,7 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" - #include "Emu/SysCalls/SysCalls.h" -#include "Emu/Cell/SPUThread.h" #include "sys_event.h" @@ -90,7 +86,7 @@ s32 sys_event_queue_destroy(u32 equeue_id, int mode) std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_event_queue_destroy(equeue=%d) aborted", equeue_id); + sys_event.Warning("sys_event_queue_destroy(equeue=%d) aborted", equeue_id); break; } } @@ -203,7 +199,7 @@ s32 sys_event_queue_receive(u32 equeue_id, mem_ptr_t event, u64 std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (counter++ > timeout || Emu.IsStopped()) { - if (Emu.IsStopped()) LOG_WARNING(HLE, "sys_event_queue_receive(equeue=%d) aborted", equeue_id); + if (Emu.IsStopped()) sys_event.Warning("sys_event_queue_receive(equeue=%d) aborted", equeue_id); eq->sq.invalidate(tid); return CELL_ETIMEDOUT; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h index 48901ba572..3e5c502150 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h @@ -1,5 +1,7 @@ #pragma once +#include "Utilities/SMutex.h" + enum { SYS_SYNC_WAITER_SINGLE = 0x10000, diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp index 7555a5da0e..170c063fdc 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp @@ -25,13 +25,13 @@ s32 sys_mmapper_allocate_address(u32 size, u64 flags, u32 alignment, u32 alloc_a { default: case SYS_MEMORY_PAGE_SIZE_1M: - if(Memory.AlignAddr(size, alignment) & 0xfffff) + if(AlignAddr(size, alignment) & 0xfffff) return CELL_EALIGN; addr = Memory.Alloc(size, 0x100000); break; case SYS_MEMORY_PAGE_SIZE_64K: - if(Memory.AlignAddr(size, alignment) & 0xffff) + if(AlignAddr(size, alignment) & 0xffff) return CELL_EALIGN; addr = Memory.Alloc(size, 0x10000); break; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 7fe220130b..bd73e0a18e 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -1,12 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/FS/vfsFile.h" #include "sys_spu.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Loader/ELF.h" #include "Emu/Cell/RawSPUThread.h" #include @@ -450,7 +446,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) } if (Emu.IsStopped()) { - LOG_WARNING(Log::SPU, "sys_spu_thread_group_join(id=%d) aborted", id); + sc_spu.Warning("sys_spu_thread_group_join(id=%d) aborted", id); return CELL_OK; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -842,7 +838,7 @@ s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, m eq->ports.add(&(t->SPUPs[i])); t->SPUPs[i].eq = eq; } - LOG_NOTICE(HLE, "*** spup -> %d", i); + sc_spu.Warning("*** spup -> %d", i); spup = (u8)i; } diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 66a087589e..30fcd619db 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -8,6 +8,7 @@ #include "Emu/RSX/GSManager.h" #include "Emu/Audio/AudioManager.h" #include "Emu/FS/VFS.h" +#include "Emu/Event.h" #include "Loader/Loader.h" enum Status diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 374e4b14a4..74bfb2141f 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -147,6 +147,14 @@ union u128 { return From128(~hi, ~lo); } + + static __forceinline u128 byteswap(const u128 val) + { + u128 ret; + ret.lo = _byteswap_uint64(val.hi); + ret.hi = _byteswap_uint64(val.lo); + return ret; + } }; union s128 @@ -238,6 +246,8 @@ struct u128 }; */ +#define AlignAddr(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1)) + #include "Utilities/StrFmt.h" #include "Utilities/GNU.h" #include "Utilities/BEType.h" From 0d15fc35d74941e5b2364af469c83da1b6973dea Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 23 Aug 2014 01:31:39 +0400 Subject: [PATCH 396/499] Compilation fix --- rpcs3/stdafx.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 74bfb2141f..35cd772d9c 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -43,6 +43,8 @@ #include #include +#include "Utilities/GNU.h" + typedef unsigned int uint; typedef uint8_t u8; @@ -249,7 +251,6 @@ struct u128 #define AlignAddr(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1)) #include "Utilities/StrFmt.h" -#include "Utilities/GNU.h" #include "Utilities/BEType.h" #include "Utilities/rFile.h" #include "Utilities/Thread.h" From efa538f9d762babfe8d480ef544c97f3eb1de305 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 23 Aug 2014 04:16:54 +0400 Subject: [PATCH 397/499] include clearing --- Utilities/AutoPause.cpp | 1 + rpcs3/Emu/ARMv7/ARMv7Thread.cpp | 1 + rpcs3/Emu/CPU/CPUThread.cpp | 1 + rpcs3/Emu/Cell/PPUThread.cpp | 1 + rpcs3/Emu/Cell/SPUThread.cpp | 2 + rpcs3/Emu/RSX/GL/GLBuffers.cpp | 3 - rpcs3/Emu/RSX/GL/GLGSRender.cpp | 727 ++++++++++++++++++++- rpcs3/Emu/RSX/GL/GLGSRender.h | 726 +------------------- rpcs3/Emu/RSX/GL/GLProgram.cpp | 1 - rpcs3/Emu/RSX/GL/GLVertexProgram.cpp | 1 - rpcs3/Emu/RSX/GSManager.cpp | 15 +- rpcs3/Emu/RSX/GSManager.h | 13 +- rpcs3/Emu/RSX/GSRender.cpp | 24 +- rpcs3/Emu/RSX/GSRender.h | 23 +- rpcs3/Emu/RSX/RSXTexture.cpp | 3 - rpcs3/Emu/RSX/RSXThread.cpp | 42 +- rpcs3/Emu/RSX/RSXThread.h | 35 +- rpcs3/Emu/SysCalls/LogBase.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 2 + rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 1 + rpcs3/Emu/SysCalls/Static.cpp | 1 + rpcs3/Emu/SysCalls/SysCalls.cpp | 1 + rpcs3/Emu/SysCalls/SysCalls.h | 1 - rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp | 28 + rpcs3/Emu/SysCalls/lv2/sys_event_flag.h | 28 +- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 1 + rpcs3/Emu/System.h | 1 - rpcs3/Gui/DisAsmFrame.cpp | 2 - rpcs3/Gui/GSFrame.cpp | 1 + rpcs3/Gui/GameViewer.h | 1 + rpcs3/Gui/InterpreterDisAsm.cpp | 2 - rpcs3/Gui/RSXDebugger.cpp | 1 + 36 files changed, 872 insertions(+), 823 deletions(-) diff --git a/Utilities/AutoPause.cpp b/Utilities/AutoPause.cpp index bab3881e33..5a604f0749 100644 --- a/Utilities/AutoPause.cpp +++ b/Utilities/AutoPause.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "AutoPause.h" #include "Utilities/Log.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp index 95b355b0e4..118857dc5e 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp +++ b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 0f04d99f9d..b9c26d49cd 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Emu/SysCalls/ErrorCodes.h" #include "Emu/SysCalls/SysCalls.h" #include "Utilities/Log.h" diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 8996dad702..b4700bc5fd 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index fbaf6805d3..0f87f2238f 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1,5 +1,7 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/ErrorCodes.h" diff --git a/rpcs3/Emu/RSX/GL/GLBuffers.cpp b/rpcs3/Emu/RSX/GL/GLBuffers.cpp index 9dd2d35f76..c2fbd354b2 100644 --- a/rpcs3/Emu/RSX/GL/GLBuffers.cpp +++ b/rpcs3/Emu/RSX/GL/GLBuffers.cpp @@ -1,8 +1,5 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "GLBuffers.h" -#include "GLGSRender.h" GLBufferObject::GLBufferObject() { diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index d4c0bfc3c3..23e72117cc 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -1,9 +1,9 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "GLGSRender.h" -#include "Emu/Cell/PPCInstrTable.h" #define CMD_DEBUG 0 #define DUMP_VERTEX_DATA 0 @@ -35,6 +35,731 @@ void printGlError(GLenum err, const std::string& situation) #define checkForGlError(x) /*x*/ #endif +void GLTexture::Create() +{ + if (m_id) + { + Delete(); + } + + if (!m_id) + { + glGenTextures(1, &m_id); + checkForGlError("GLTexture::Init() -> glGenTextures"); + Bind(); + } +} + +int GLTexture::GetGlWrap(int wrap) +{ + switch (wrap) + { + case CELL_GCM_TEXTURE_WRAP: return GL_REPEAT; + case CELL_GCM_TEXTURE_MIRROR: return GL_MIRRORED_REPEAT; + case CELL_GCM_TEXTURE_CLAMP_TO_EDGE: return GL_CLAMP_TO_EDGE; + case CELL_GCM_TEXTURE_BORDER: return GL_CLAMP_TO_BORDER; + case CELL_GCM_TEXTURE_CLAMP: return GL_CLAMP_TO_EDGE; + case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP_TO_EDGE: return GL_MIRROR_CLAMP_TO_EDGE_EXT; + case CELL_GCM_TEXTURE_MIRROR_ONCE_BORDER: return GL_MIRROR_CLAMP_TO_BORDER_EXT; + case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP: return GL_MIRROR_CLAMP_EXT; + } + + LOG_ERROR(RSX, "Texture wrap error: bad wrap (%d).", wrap); + return GL_REPEAT; +} + +float GLTexture::GetMaxAniso(int aniso) +{ + switch (aniso) + { + case CELL_GCM_TEXTURE_MAX_ANISO_1: return 1.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_2: return 2.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_4: return 4.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_6: return 6.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_8: return 8.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_10: return 10.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_12: return 12.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_16: return 16.0f; + } + + LOG_ERROR(RSX, "Texture anisotropy error: bad max aniso (%d).", aniso); + return 1.0f; +} + +void GLTexture::Init(RSXTexture& tex) +{ + if (tex.GetLocation() > 1) + return; + + Bind(); + + const u64 texaddr = GetAddress(tex.GetOffset(), tex.GetLocation()); + if (!Memory.IsGoodAddr(texaddr)) + { + LOG_ERROR(RSX, "Bad texture address=0x%x", texaddr); + return; + } + //ConLog.Warning("texture addr = 0x%x, width = %d, height = %d, max_aniso=%d, mipmap=%d, remap=0x%x, zfunc=0x%x, wraps=0x%x, wrapt=0x%x, wrapr=0x%x, minlod=0x%x, maxlod=0x%x", + // m_offset, m_width, m_height, m_maxaniso, m_mipmap, m_remap, m_zfunc, m_wraps, m_wrapt, m_wrapr, m_minlod, m_maxlod); + //TODO: safe init + checkForGlError("GLTexture::Init() -> glBindTexture"); + + int format = tex.GetFormat() & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN); + bool is_swizzled = !(tex.GetFormat() & CELL_GCM_TEXTURE_LN); + + const u8 *pixels = const_cast(Memory.GetMemFromAddr(texaddr)); + u8 *unswizzledPixels; + static const GLint glRemapStandard[4] = { GL_ALPHA, GL_RED, GL_GREEN, GL_BLUE }; + // NOTE: This must be in ARGB order in all forms below. + const GLint *glRemap = glRemapStandard; + + switch (format) + { + case CELL_GCM_TEXTURE_B8: // One 8-bit fixed-point number + { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BLUE, GL_UNSIGNED_BYTE, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_B8)"); + + static const GLint swizzleMaskB8[] = { GL_BLUE, GL_BLUE, GL_BLUE, GL_BLUE }; + glRemap = swizzleMaskB8; + } + break; + + case CELL_GCM_TEXTURE_A1R5G5B5: + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); + checkForGlError("GLTexture::Init() -> glPixelStorei"); + + // TODO: texture swizzling + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A1R5G5B5)"); + + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_A1R5G5B5)"); + break; + + case CELL_GCM_TEXTURE_A4R4G4B4: + { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A4R4G4B4)"); + + // We read it in as R4G4B4A4, so we need to remap each component. + static const GLint swizzleMaskA4R4G4B4[] = { GL_BLUE, GL_ALPHA, GL_RED, GL_GREEN }; + glRemap = swizzleMaskA4R4G4B4; + } + break; + + case CELL_GCM_TEXTURE_R5G6B5: + { + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G6B5)"); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex.GetWidth(), tex.GetHeight(), 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R5G6B5)"); + + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G6B5)"); + } + break; + + case CELL_GCM_TEXTURE_A8R8G8B8: + if (is_swizzled) + { + u32 *src, *dst; + u32 log2width, log2height; + + unswizzledPixels = (u8*)malloc(tex.GetWidth() * tex.GetHeight() * 4); + src = (u32*)pixels; + dst = (u32*)unswizzledPixels; + + log2width = log(tex.GetWidth()) / log(2); + log2height = log(tex.GetHeight()) / log(2); + + for (int i = 0; i glTexImage2D(CELL_GCM_TEXTURE_A8R8G8B8)"); + break; + + case CELL_GCM_TEXTURE_COMPRESSED_DXT1: // Compressed 4x4 pixels into 8 bytes + { + u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 8; + + glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT1)"); + } + break; + + case CELL_GCM_TEXTURE_COMPRESSED_DXT23: // Compressed 4x4 pixels into 16 bytes + { + u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; + + glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT23)"); + } + break; + + case CELL_GCM_TEXTURE_COMPRESSED_DXT45: // Compressed 4x4 pixels into 16 bytes + { + u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; + + glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT45)"); + } + break; + + case CELL_GCM_TEXTURE_G8B8: + { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_UNSIGNED_BYTE, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_G8B8)"); + + static const GLint swizzleMaskG8B8[] = { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; + glRemap = swizzleMaskG8B8; + } + break; + + case CELL_GCM_TEXTURE_R6G5B5: + { + // TODO: Probably need to actually unswizzle if is_swizzled. + const u32 numPixels = tex.GetWidth() * tex.GetHeight(); + unswizzledPixels = (u8 *)malloc(numPixels * 4); + // TODO: Speed. + for (u32 i = 0; i < numPixels; ++i) { + u16 c = reinterpret_cast *>(pixels)[i]; + unswizzledPixels[i * 4 + 0] = Convert6To8((c >> 10) & 0x3F); + unswizzledPixels[i * 4 + 1] = Convert5To8((c >> 5) & 0x1F); + unswizzledPixels[i * 4 + 2] = Convert5To8((c >> 0) & 0x1F); + unswizzledPixels[i * 4 + 3] = 255; + } + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R6G5B5)"); + + free(unswizzledPixels); + } + break; + + case CELL_GCM_TEXTURE_DEPTH24_D8: // 24-bit unsigned fixed-point number and 8 bits of garbage + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH24_D8)"); + break; + + case CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT: // 24-bit unsigned float and 8 bits of garbage + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT)"); + break; + + case CELL_GCM_TEXTURE_DEPTH16: // 16-bit unsigned fixed-point number + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_SHORT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH16)"); + break; + + case CELL_GCM_TEXTURE_DEPTH16_FLOAT: // 16-bit unsigned float + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH16_FLOAT)"); + break; + + case CELL_GCM_TEXTURE_X16: // A 16-bit fixed-point number + { + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_X16)"); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_UNSIGNED_SHORT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_X16)"); + + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_X16)"); + + static const GLint swizzleMaskX16[] = { GL_RED, GL_ONE, GL_RED, GL_ONE }; + glRemap = swizzleMaskX16; + } + break; + + case CELL_GCM_TEXTURE_Y16_X16: // Two 16-bit fixed-point numbers + { + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16)"); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_UNSIGNED_SHORT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_Y16_X16)"); + + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16)"); + + static const GLint swizzleMaskX32_Y16_X16[] = { GL_GREEN, GL_RED, GL_GREEN, GL_RED }; + glRemap = swizzleMaskX32_Y16_X16; + } + break; + + case CELL_GCM_TEXTURE_R5G5B5A1: + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G5B5A1)"); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R5G5B5A1)"); + + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G5B5A1)"); + break; + + case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: // Four fp16 values + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_HALF_FLOAT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); + + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); + break; + + case CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT: // Four fp32 values + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_FLOAT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT)"); + break; + + case CELL_GCM_TEXTURE_X32_FLOAT: // One 32-bit floating-point number + { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_FLOAT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_X32_FLOAT)"); + + static const GLint swizzleMaskX32_FLOAT[] = { GL_RED, GL_ONE, GL_ONE, GL_ONE }; + glRemap = swizzleMaskX32_FLOAT; + } + break; + + case CELL_GCM_TEXTURE_D1R5G5B5: + { + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_D1R5G5B5)"); + + // TODO: Texture swizzling + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_D1R5G5B5)"); + + static const GLint swizzleMaskX32_D1R5G5B5[] = { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; + glRemap = swizzleMaskX32_D1R5G5B5; + + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_D1R5G5B5)"); + } + break; + + case CELL_GCM_TEXTURE_D8R8G8B8: // 8 bits of garbage and three unsigned 8-bit fixed-point numbers + { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_D8R8G8B8)"); + + static const GLint swizzleMaskX32_D8R8G8B8[] = { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; + glRemap = swizzleMaskX32_D8R8G8B8; + } + break; + + case CELL_GCM_TEXTURE_Y16_X16_FLOAT: // Two fp16 values + { + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_HALF_FLOAT, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); + + glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); + + static const GLint swizzleMaskX32_Y16_X16_FLOAT[] = { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; + glRemap = swizzleMaskX32_Y16_X16_FLOAT; + } + break; + + case CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN) : + { + const u32 numPixels = tex.GetWidth() * tex.GetHeight(); + unswizzledPixels = (u8 *)malloc(numPixels * 4); + // TODO: Speed. + for (u32 i = 0; i < numPixels; i += 2) { + unswizzledPixels[i * 4 + 0 + 0] = pixels[i * 2 + 3]; + unswizzledPixels[i * 4 + 0 + 1] = pixels[i * 2 + 2]; + unswizzledPixels[i * 4 + 0 + 2] = pixels[i * 2 + 0]; + unswizzledPixels[i * 4 + 0 + 3] = 255; + + // The second pixel is the same, except for red. + unswizzledPixels[i * 4 + 4 + 0] = pixels[i * 2 + 1]; + unswizzledPixels[i * 4 + 4 + 1] = pixels[i * 2 + 2]; + unswizzledPixels[i * 4 + 4 + 2] = pixels[i * 2 + 0]; + unswizzledPixels[i * 4 + 4 + 3] = 255; + } + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)"); + + free(unswizzledPixels); + } + break; + + case CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN) : + { + const u32 numPixels = tex.GetWidth() * tex.GetHeight(); + unswizzledPixels = (u8 *)malloc(numPixels * 4); + // TODO: Speed. + for (u32 i = 0; i < numPixels; i += 2) { + unswizzledPixels[i * 4 + 0 + 0] = pixels[i * 2 + 2]; + unswizzledPixels[i * 4 + 0 + 1] = pixels[i * 2 + 3]; + unswizzledPixels[i * 4 + 0 + 2] = pixels[i * 2 + 1]; + unswizzledPixels[i * 4 + 0 + 3] = 255; + + // The second pixel is the same, except for red. + unswizzledPixels[i * 4 + 4 + 0] = pixels[i * 2 + 0]; + unswizzledPixels[i * 4 + 4 + 1] = pixels[i * 2 + 3]; + unswizzledPixels[i * 4 + 4 + 2] = pixels[i * 2 + 1]; + unswizzledPixels[i * 4 + 4 + 3] = 255; + } + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)"); + + free(unswizzledPixels); + } + break; + + default: LOG_ERROR(RSX, "Init tex error: Bad tex format (0x%x | %s | 0x%x)", format, + (is_swizzled ? "swizzled" : "linear"), tex.GetFormat() & 0x40); break; + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, tex.GetMipmap() - 1); + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, tex.GetMipmap() > 1); + + if (format != CELL_GCM_TEXTURE_B8 && format != CELL_GCM_TEXTURE_X16 && format != CELL_GCM_TEXTURE_X32_FLOAT) + { + u8 remap_a = tex.GetRemap() & 0x3; + u8 remap_r = (tex.GetRemap() >> 2) & 0x3; + u8 remap_g = (tex.GetRemap() >> 4) & 0x3; + u8 remap_b = (tex.GetRemap() >> 6) & 0x3; + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, glRemap[remap_a]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, glRemap[remap_r]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, glRemap[remap_g]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, glRemap[remap_b]); + } + else + { + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, glRemap[0]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, glRemap[1]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, glRemap[2]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, glRemap[3]); + } + + checkForGlError("GLTexture::Init() -> remap"); + + static const int gl_tex_zfunc[] = + { + GL_NEVER, + GL_LESS, + GL_EQUAL, + GL_LEQUAL, + GL_GREATER, + GL_NOTEQUAL, + GL_GEQUAL, + GL_ALWAYS, + }; + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GetGlWrap(tex.GetWrapS())); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GetGlWrap(tex.GetWrapT())); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GetGlWrap(tex.GetWrapR())); + + checkForGlError("GLTexture::Init() -> wrap"); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, gl_tex_zfunc[tex.GetZfunc()]); + + checkForGlError("GLTexture::Init() -> compare"); + + glTexEnvi(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, tex.GetBias()); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, (tex.GetMinLOD() >> 8)); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (tex.GetMaxLOD() >> 8)); + + checkForGlError("GLTexture::Init() -> lod"); + + static const int gl_tex_min_filter[] = + { + GL_NEAREST, // unused + GL_NEAREST, + GL_LINEAR, + GL_NEAREST_MIPMAP_NEAREST, + GL_LINEAR_MIPMAP_NEAREST, + GL_NEAREST_MIPMAP_LINEAR, + GL_LINEAR_MIPMAP_LINEAR, + GL_NEAREST, // CELL_GCM_TEXTURE_CONVOLUTION_MIN + }; + + static const int gl_tex_mag_filter[] = { + GL_NEAREST, // unused + GL_NEAREST, + GL_LINEAR, + GL_NEAREST, // unused + GL_LINEAR // CELL_GCM_TEXTURE_CONVOLUTION_MAG + }; + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_tex_min_filter[tex.GetMinFilter()]); + + checkForGlError("GLTexture::Init() -> min filters"); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_tex_mag_filter[tex.GetMagFilter()]); + + checkForGlError("GLTexture::Init() -> mag filters"); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, GetMaxAniso(tex.GetMaxAniso())); + + checkForGlError("GLTexture::Init() -> max anisotropy"); + + //Unbind(); + + if (is_swizzled && format == CELL_GCM_TEXTURE_A8R8G8B8) + { + free(unswizzledPixels); + } +} + +void GLTexture::Save(RSXTexture& tex, const std::string& name) +{ + if (!m_id || !tex.GetOffset() || !tex.GetWidth() || !tex.GetHeight()) return; + + const u32 texPixelCount = tex.GetWidth() * tex.GetHeight(); + + u32* alldata = new u32[texPixelCount]; + + Bind(); + + switch (tex.GetFormat() & ~(0x20 | 0x40)) + { + case CELL_GCM_TEXTURE_B8: + glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, alldata); + break; + + case CELL_GCM_TEXTURE_A8R8G8B8: + glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, alldata); + break; + + default: + delete[] alldata; + return; + } + + { + rFile f(name + ".raw", rFile::write); + f.Write(alldata, texPixelCount * 4); + } + u8* data = new u8[texPixelCount * 3]; + u8* alpha = new u8[texPixelCount]; + + u8* src = (u8*)alldata; + u8* dst_d = data; + u8* dst_a = alpha; + for (u32 i = 0; i < texPixelCount; i++) + { + *dst_d++ = *src++; + *dst_d++ = *src++; + *dst_d++ = *src++; + *dst_a++ = *src++; + } + + rImage out; + out.Create(tex.GetWidth(), tex.GetHeight(), data, alpha); + out.SaveFile(name, rBITMAP_TYPE_PNG); + + delete[] alldata; + //free(data); + //free(alpha); +} + +void GLTexture::Save(RSXTexture& tex) +{ + static const std::string& dir_path = "textures"; + static const std::string& file_fmt = dir_path + "/" + "tex[%d].png"; + + if (!rExists(dir_path)) rMkdir(dir_path); + + u32 count = 0; + while (rExists(fmt::Format(file_fmt, count))) count++; + Save(tex, fmt::Format(file_fmt, count)); +} + +void GLTexture::Bind() +{ + glBindTexture(GL_TEXTURE_2D, m_id); +} + +void GLTexture::Unbind() +{ + glBindTexture(GL_TEXTURE_2D, 0); +} + +void GLTexture::Delete() +{ + if (m_id) + { + glDeleteTextures(1, &m_id); + m_id = 0; + } +} + +void PostDrawObj::Draw() +{ + static bool s_is_initialized = false; + + if (!s_is_initialized) + { + s_is_initialized = true; + Initialize(); + } + else + { + m_program.Use(); + } +} + +void PostDrawObj::Initialize() +{ + InitializeShaders(); + m_fp.Compile(); + m_vp.Compile(); + m_program.Create(m_vp.id, m_fp.GetId()); + m_program.Use(); + InitializeLocations(); +} + +void DrawCursorObj::Draw() +{ + checkForGlError("PostDrawObj : Unknown error."); + + PostDrawObj::Draw(); + checkForGlError("PostDrawObj::Draw"); + + if (!m_fbo.IsCreated()) + { + m_fbo.Create(); + checkForGlError("DrawCursorObj : m_fbo.Create"); + m_fbo.Bind(); + checkForGlError("DrawCursorObj : m_fbo.Bind"); + + m_rbo.Create(); + checkForGlError("DrawCursorObj : m_rbo.Create"); + m_rbo.Bind(); + checkForGlError("DrawCursorObj : m_rbo.Bind"); + m_rbo.Storage(GL_RGBA, m_width, m_height); + checkForGlError("DrawCursorObj : m_rbo.Storage"); + + m_fbo.Renderbuffer(GL_COLOR_ATTACHMENT0, m_rbo.GetId()); + checkForGlError("DrawCursorObj : m_fbo.Renderbuffer"); + } + + m_fbo.Bind(); + checkForGlError("DrawCursorObj : m_fbo.Bind"); + glDrawBuffer(GL_COLOR_ATTACHMENT0); + checkForGlError("DrawCursorObj : glDrawBuffer"); + + m_program.Use(); + checkForGlError("DrawCursorObj : m_program.Use"); + + if (m_update_texture) + { + //m_update_texture = false; + + glUniform2f(m_program.GetLocation("in_tc"), m_width, m_height); + checkForGlError("DrawCursorObj : glUniform2f"); + if (!m_tex_id) + { + glGenTextures(1, &m_tex_id); + checkForGlError("DrawCursorObj : glGenTextures"); + } + + glActiveTexture(GL_TEXTURE0); + checkForGlError("DrawCursorObj : glActiveTexture"); + glBindTexture(GL_TEXTURE_2D, m_tex_id); + checkForGlError("DrawCursorObj : glBindTexture"); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_pixels); + checkForGlError("DrawCursorObj : glTexImage2D"); + m_program.SetTex(0); + } + + if (m_update_pos) + { + //m_update_pos = false; + + glUniform4f(m_program.GetLocation("in_pos"), m_pos_x, m_pos_y, m_pos_z, 1.0f); + checkForGlError("DrawCursorObj : glUniform4f"); + } + + glDrawArrays(GL_QUADS, 0, 4); + checkForGlError("DrawCursorObj : glDrawArrays"); + + m_fbo.Bind(GL_READ_FRAMEBUFFER); + checkForGlError("DrawCursorObj : m_fbo.Bind(GL_READ_FRAMEBUFFER)"); + GLfbo::Bind(GL_DRAW_FRAMEBUFFER, 0); + checkForGlError("DrawCursorObj : GLfbo::Bind(GL_DRAW_FRAMEBUFFER, 0)"); + GLfbo::Blit( + 0, 0, m_width, m_height, + 0, 0, m_width, m_height, + GL_COLOR_BUFFER_BIT, GL_NEAREST); + checkForGlError("DrawCursorObj : GLfbo::Blit"); + m_fbo.Bind(); + checkForGlError("DrawCursorObj : m_fbo.Bind"); +} + +void DrawCursorObj::InitializeShaders() +{ + m_vp.shader = + "#version 330\n" + "\n" + "uniform vec4 in_pos;\n" + "uniform vec2 in_tc;\n" + "out vec2 tc;\n" + "\n" + "void main()\n" + "{\n" + " tc = in_tc;\n" + " gl_Position = in_pos;\n" + "}\n"; + + m_fp.SetShaderText( + "#version 330\n" + "\n" + "in vec2 tc;\n" + "uniform sampler2D tex0;\n" + "layout (location = 0) out vec4 res;\n" + "\n" + "void main()\n" + "{\n" + " res = texture(tex0, tc);\n" + "}\n"); +} + +void DrawCursorObj::SetTexture(void* pixels, int width, int height) +{ + m_pixels = pixels; + m_width = width; + m_height = height; + + m_update_texture = true; +} + +void DrawCursorObj::SetPosition(float x, float y, float z) +{ + m_pos_x = x; + m_pos_y = y; + m_pos_z = z; + m_update_pos = true; +} + +void DrawCursorObj::InitializeLocations() +{ + //ConLog.Warning("tex0 location = 0x%x", m_program.GetLocation("tex0")); +} + GLGSRender::GLGSRender() : GSRender() , m_frame(nullptr) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.h b/rpcs3/Emu/RSX/GL/GLGSRender.h index e2cf5f9d6f..1a26aeaa13 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.h +++ b/rpcs3/Emu/RSX/GL/GLGSRender.h @@ -1,6 +1,5 @@ #pragma once #include "Emu/RSX/GSRender.h" -#include "Emu/RSX/RSXThread.h" #include "Utilities/rPlatform.h" #include "GLBuffers.h" #include "GLProgramBuffer.h" @@ -29,56 +28,11 @@ public: { } - void Create() - { - if(m_id) - { - Delete(); - } + void Create(); - if(!m_id) - { - glGenTextures(1, &m_id); - checkForGlError("GLTexture::Init() -> glGenTextures"); - Bind(); - } - } + int GetGlWrap(int wrap); - int GetGlWrap(int wrap) - { - switch(wrap) - { - case CELL_GCM_TEXTURE_WRAP: return GL_REPEAT; - case CELL_GCM_TEXTURE_MIRROR: return GL_MIRRORED_REPEAT; - case CELL_GCM_TEXTURE_CLAMP_TO_EDGE: return GL_CLAMP_TO_EDGE; - case CELL_GCM_TEXTURE_BORDER: return GL_CLAMP_TO_BORDER; - case CELL_GCM_TEXTURE_CLAMP: return GL_CLAMP_TO_EDGE; - case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP_TO_EDGE: return GL_MIRROR_CLAMP_TO_EDGE_EXT; - case CELL_GCM_TEXTURE_MIRROR_ONCE_BORDER: return GL_MIRROR_CLAMP_TO_BORDER_EXT; - case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP: return GL_MIRROR_CLAMP_EXT; - } - - LOG_ERROR(RSX, "Texture wrap error: bad wrap (%d).", wrap); - return GL_REPEAT; - } - - float GetMaxAniso(int aniso) - { - switch (aniso) - { - case CELL_GCM_TEXTURE_MAX_ANISO_1: return 1.0f; - case CELL_GCM_TEXTURE_MAX_ANISO_2: return 2.0f; - case CELL_GCM_TEXTURE_MAX_ANISO_4: return 4.0f; - case CELL_GCM_TEXTURE_MAX_ANISO_6: return 6.0f; - case CELL_GCM_TEXTURE_MAX_ANISO_8: return 8.0f; - case CELL_GCM_TEXTURE_MAX_ANISO_10: return 10.0f; - case CELL_GCM_TEXTURE_MAX_ANISO_12: return 12.0f; - case CELL_GCM_TEXTURE_MAX_ANISO_16: return 16.0f; - } - - LOG_ERROR(RSX, "Texture anisotropy error: bad max aniso (%d).", aniso); - return 1.0f; - } + float GetMaxAniso(int aniso); inline static u8 Convert4To8(u8 v) { @@ -98,526 +52,17 @@ public: return (v << 2) | (v >> 4); } - void Init(RSXTexture& tex) - { - if (tex.GetLocation() > 1) - return; + void Init(RSXTexture& tex); - Bind(); + void Save(RSXTexture& tex, const std::string& name); - const u64 texaddr = GetAddress(tex.GetOffset(), tex.GetLocation()); - if (!Memory.IsGoodAddr(texaddr)) - { - LOG_ERROR(RSX, "Bad texture address=0x%x", texaddr); - return; - } - //ConLog.Warning("texture addr = 0x%x, width = %d, height = %d, max_aniso=%d, mipmap=%d, remap=0x%x, zfunc=0x%x, wraps=0x%x, wrapt=0x%x, wrapr=0x%x, minlod=0x%x, maxlod=0x%x", - // m_offset, m_width, m_height, m_maxaniso, m_mipmap, m_remap, m_zfunc, m_wraps, m_wrapt, m_wrapr, m_minlod, m_maxlod); - //TODO: safe init - checkForGlError("GLTexture::Init() -> glBindTexture"); + void Save(RSXTexture& tex); - int format = tex.GetFormat() & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN); - bool is_swizzled = !(tex.GetFormat() & CELL_GCM_TEXTURE_LN); + void Bind(); - const u8 *pixels = const_cast(Memory.GetMemFromAddr(texaddr)); - u8 *unswizzledPixels; - static const GLint glRemapStandard[4] = {GL_ALPHA, GL_RED, GL_GREEN, GL_BLUE}; - // NOTE: This must be in ARGB order in all forms below. - const GLint *glRemap = glRemapStandard; + void Unbind(); - switch(format) - { - case CELL_GCM_TEXTURE_B8: // One 8-bit fixed-point number - { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BLUE, GL_UNSIGNED_BYTE, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_B8)"); - - static const GLint swizzleMaskB8[] = { GL_BLUE, GL_BLUE, GL_BLUE, GL_BLUE }; - glRemap = swizzleMaskB8; - } - break; - - case CELL_GCM_TEXTURE_A1R5G5B5: - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); - - // TODO: texture swizzling - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A1R5G5B5)"); - - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_A1R5G5B5)"); - break; - - case CELL_GCM_TEXTURE_A4R4G4B4: - { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A4R4G4B4)"); - - // We read it in as R4G4B4A4, so we need to remap each component. - static const GLint swizzleMaskA4R4G4B4[] = { GL_BLUE, GL_ALPHA, GL_RED, GL_GREEN }; - glRemap = swizzleMaskA4R4G4B4; - } - break; - - case CELL_GCM_TEXTURE_R5G6B5: - { - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G6B5)"); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex.GetWidth(), tex.GetHeight(), 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R5G6B5)"); - - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G6B5)"); - } - break; - - case CELL_GCM_TEXTURE_A8R8G8B8: - if(is_swizzled) - { - u32 *src, *dst; - u32 log2width, log2height; - - unswizzledPixels = (u8*)malloc(tex.GetWidth() * tex.GetHeight() * 4); - src = (u32*)pixels; - dst = (u32*)unswizzledPixels; - - log2width = log(tex.GetWidth())/log(2); - log2height = log(tex.GetHeight())/log(2); - - for(int i=0; i glTexImage2D(CELL_GCM_TEXTURE_A8R8G8B8)"); - break; - - case CELL_GCM_TEXTURE_COMPRESSED_DXT1: // Compressed 4x4 pixels into 8 bytes - { - u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 8; - - glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT1)"); - } - break; - - case CELL_GCM_TEXTURE_COMPRESSED_DXT23: // Compressed 4x4 pixels into 16 bytes - { - u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; - - glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT23)"); - } - break; - - case CELL_GCM_TEXTURE_COMPRESSED_DXT45: // Compressed 4x4 pixels into 16 bytes - { - u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; - - glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT45)"); - } - break; - - case CELL_GCM_TEXTURE_G8B8: - { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_UNSIGNED_BYTE, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_G8B8)"); - - static const GLint swizzleMaskG8B8[] = { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; - glRemap = swizzleMaskG8B8; - } - break; - - case CELL_GCM_TEXTURE_R6G5B5: - { - // TODO: Probably need to actually unswizzle if is_swizzled. - const u32 numPixels = tex.GetWidth() * tex.GetHeight(); - unswizzledPixels = (u8 *)malloc(numPixels * 4); - // TODO: Speed. - for (u32 i = 0; i < numPixels; ++i) { - u16 c = reinterpret_cast *>(pixels)[i]; - unswizzledPixels[i * 4 + 0] = Convert6To8((c >> 10) & 0x3F); - unswizzledPixels[i * 4 + 1] = Convert5To8((c >> 5) & 0x1F); - unswizzledPixels[i * 4 + 2] = Convert5To8((c >> 0) & 0x1F); - unswizzledPixels[i * 4 + 3] = 255; - } - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R6G5B5)"); - - free(unswizzledPixels); - } - break; - - case CELL_GCM_TEXTURE_DEPTH24_D8: // 24-bit unsigned fixed-point number and 8 bits of garbage - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH24_D8)"); - break; - - case CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT: // 24-bit unsigned float and 8 bits of garbage - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT)"); - break; - - case CELL_GCM_TEXTURE_DEPTH16: // 16-bit unsigned fixed-point number - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH16)"); - break; - - case CELL_GCM_TEXTURE_DEPTH16_FLOAT: // 16-bit unsigned float - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH16_FLOAT)"); - break; - - case CELL_GCM_TEXTURE_X16: // A 16-bit fixed-point number - { - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_X16)"); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_UNSIGNED_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_X16)"); - - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_X16)"); - - static const GLint swizzleMaskX16[] = { GL_RED, GL_ONE, GL_RED, GL_ONE }; - glRemap = swizzleMaskX16; - } - break; - - case CELL_GCM_TEXTURE_Y16_X16: // Two 16-bit fixed-point numbers - { - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16)"); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_UNSIGNED_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_Y16_X16)"); - - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16)"); - - static const GLint swizzleMaskX32_Y16_X16[] = { GL_GREEN, GL_RED, GL_GREEN, GL_RED }; - glRemap = swizzleMaskX32_Y16_X16; - } - break; - - case CELL_GCM_TEXTURE_R5G5B5A1: - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G5B5A1)"); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R5G5B5A1)"); - - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G5B5A1)"); - break; - - case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: // Four fp16 values - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_HALF_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); - - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); - break; - - case CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT: // Four fp32 values - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT)"); - break; - - case CELL_GCM_TEXTURE_X32_FLOAT: // One 32-bit floating-point number - { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_X32_FLOAT)"); - - static const GLint swizzleMaskX32_FLOAT[] = { GL_RED, GL_ONE, GL_ONE, GL_ONE }; - glRemap = swizzleMaskX32_FLOAT; - } - break; - - case CELL_GCM_TEXTURE_D1R5G5B5: - { - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_D1R5G5B5)"); - - // TODO: Texture swizzling - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_D1R5G5B5)"); - - static const GLint swizzleMaskX32_D1R5G5B5[] = { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; - glRemap = swizzleMaskX32_D1R5G5B5; - - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_D1R5G5B5)"); - } - break; - - case CELL_GCM_TEXTURE_D8R8G8B8: // 8 bits of garbage and three unsigned 8-bit fixed-point numbers - { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_D8R8G8B8)"); - - static const GLint swizzleMaskX32_D8R8G8B8[] = { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; - glRemap = swizzleMaskX32_D8R8G8B8; - } - break; - - case CELL_GCM_TEXTURE_Y16_X16_FLOAT: // Two fp16 values - { - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_HALF_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); - - glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); - - static const GLint swizzleMaskX32_Y16_X16_FLOAT[] = { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; - glRemap = swizzleMaskX32_Y16_X16_FLOAT; - } - break; - - case CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN): - { - const u32 numPixels = tex.GetWidth() * tex.GetHeight(); - unswizzledPixels = (u8 *)malloc(numPixels * 4); - // TODO: Speed. - for (u32 i = 0; i < numPixels; i += 2) { - unswizzledPixels[i * 4 + 0 + 0] = pixels[i * 2 + 3]; - unswizzledPixels[i * 4 + 0 + 1] = pixels[i * 2 + 2]; - unswizzledPixels[i * 4 + 0 + 2] = pixels[i * 2 + 0]; - unswizzledPixels[i * 4 + 0 + 3] = 255; - - // The second pixel is the same, except for red. - unswizzledPixels[i * 4 + 4 + 0] = pixels[i * 2 + 1]; - unswizzledPixels[i * 4 + 4 + 1] = pixels[i * 2 + 2]; - unswizzledPixels[i * 4 + 4 + 2] = pixels[i * 2 + 0]; - unswizzledPixels[i * 4 + 4 + 3] = 255; - } - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)"); - - free(unswizzledPixels); - } - break; - - case CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN): - { - const u32 numPixels = tex.GetWidth() * tex.GetHeight(); - unswizzledPixels = (u8 *)malloc(numPixels * 4); - // TODO: Speed. - for (u32 i = 0; i < numPixels; i += 2) { - unswizzledPixels[i * 4 + 0 + 0] = pixels[i * 2 + 2]; - unswizzledPixels[i * 4 + 0 + 1] = pixels[i * 2 + 3]; - unswizzledPixels[i * 4 + 0 + 2] = pixels[i * 2 + 1]; - unswizzledPixels[i * 4 + 0 + 3] = 255; - - // The second pixel is the same, except for red. - unswizzledPixels[i * 4 + 4 + 0] = pixels[i * 2 + 0]; - unswizzledPixels[i * 4 + 4 + 1] = pixels[i * 2 + 3]; - unswizzledPixels[i * 4 + 4 + 2] = pixels[i * 2 + 1]; - unswizzledPixels[i * 4 + 4 + 3] = 255; - } - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)"); - - free(unswizzledPixels); - } - break; - - default: LOG_ERROR(RSX, "Init tex error: Bad tex format (0x%x | %s | 0x%x)", format, - (is_swizzled ? "swizzled" : "linear"), tex.GetFormat() & 0x40); break; - } - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, tex.GetMipmap() - 1); - glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, tex.GetMipmap() > 1); - - if (format != CELL_GCM_TEXTURE_B8 && format != CELL_GCM_TEXTURE_X16 && format != CELL_GCM_TEXTURE_X32_FLOAT) - { - u8 remap_a = tex.GetRemap() & 0x3; - u8 remap_r = (tex.GetRemap() >> 2) & 0x3; - u8 remap_g = (tex.GetRemap() >> 4) & 0x3; - u8 remap_b = (tex.GetRemap() >> 6) & 0x3; - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, glRemap[remap_a]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, glRemap[remap_r]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, glRemap[remap_g]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, glRemap[remap_b]); - } - else - { - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, glRemap[0]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, glRemap[1]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, glRemap[2]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, glRemap[3]); - } - - checkForGlError("GLTexture::Init() -> remap"); - - static const int gl_tex_zfunc[] = - { - GL_NEVER, - GL_LESS, - GL_EQUAL, - GL_LEQUAL, - GL_GREATER, - GL_NOTEQUAL, - GL_GEQUAL, - GL_ALWAYS, - }; - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GetGlWrap(tex.GetWrapS())); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GetGlWrap(tex.GetWrapT())); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GetGlWrap(tex.GetWrapR())); - - checkForGlError("GLTexture::Init() -> wrap"); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, gl_tex_zfunc[tex.GetZfunc()]); - - checkForGlError("GLTexture::Init() -> compare"); - - glTexEnvi(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, tex.GetBias()); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, (tex.GetMinLOD() >> 8)); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (tex.GetMaxLOD() >> 8)); - - checkForGlError("GLTexture::Init() -> lod"); - - static const int gl_tex_min_filter[] = - { - GL_NEAREST, // unused - GL_NEAREST, - GL_LINEAR, - GL_NEAREST_MIPMAP_NEAREST, - GL_LINEAR_MIPMAP_NEAREST, - GL_NEAREST_MIPMAP_LINEAR, - GL_LINEAR_MIPMAP_LINEAR, - GL_NEAREST, // CELL_GCM_TEXTURE_CONVOLUTION_MIN - }; - - static const int gl_tex_mag_filter[] = { - GL_NEAREST, // unused - GL_NEAREST, - GL_LINEAR, - GL_NEAREST, // unused - GL_LINEAR // CELL_GCM_TEXTURE_CONVOLUTION_MAG - }; - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_tex_min_filter[tex.GetMinFilter()]); - - checkForGlError("GLTexture::Init() -> min filters"); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_tex_mag_filter[tex.GetMagFilter()]); - - checkForGlError("GLTexture::Init() -> mag filters"); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, GetMaxAniso(tex.GetMaxAniso())); - - checkForGlError("GLTexture::Init() -> max anisotropy"); - - //Unbind(); - - if(is_swizzled && format == CELL_GCM_TEXTURE_A8R8G8B8) - { - free(unswizzledPixels); - } - } - - void Save(RSXTexture& tex, const std::string& name) - { - if(!m_id || !tex.GetOffset() || !tex.GetWidth() || !tex.GetHeight()) return; - - const u32 texPixelCount = tex.GetWidth() * tex.GetHeight(); - - u32* alldata = new u32[texPixelCount]; - - Bind(); - - switch(tex.GetFormat() & ~(0x20 | 0x40)) - { - case CELL_GCM_TEXTURE_B8: - glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, alldata); - break; - - case CELL_GCM_TEXTURE_A8R8G8B8: - glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, alldata); - break; - - default: - delete[] alldata; - return; - } - - { - rFile f(name + ".raw", rFile::write); - f.Write(alldata, texPixelCount * 4); - } - u8* data = new u8[texPixelCount * 3]; - u8* alpha = new u8[texPixelCount]; - - u8* src = (u8*)alldata; - u8* dst_d = data; - u8* dst_a = alpha; - for (u32 i = 0; i < texPixelCount; i++) - { - *dst_d++ = *src++; - *dst_d++ = *src++; - *dst_d++ = *src++; - *dst_a++ = *src++; - } - - rImage out; - out.Create(tex.GetWidth(), tex.GetHeight(), data, alpha); - out.SaveFile(name, rBITMAP_TYPE_PNG); - - delete[] alldata; - //free(data); - //free(alpha); - } - - void Save(RSXTexture& tex) - { - static const std::string& dir_path = "textures"; - static const std::string& file_fmt = dir_path + "/" + "tex[%d].png"; - - if(!rExists(dir_path)) rMkdir(dir_path); - - u32 count = 0; - while(rExists(fmt::Format(file_fmt, count))) count++; - Save(tex, fmt::Format(file_fmt, count)); - } - - void Bind() - { - glBindTexture(GL_TEXTURE_2D, m_id); - } - - void Unbind() - { - glBindTexture(GL_TEXTURE_2D, 0); - } - - void Delete() - { - if(m_id) - { - glDeleteTextures(1, &m_id); - m_id = 0; - } - } + void Delete(); }; class PostDrawObj @@ -630,33 +75,12 @@ protected: GLrbo m_rbo; public: - virtual void Draw() - { - static bool s_is_initialized = false; - - if(!s_is_initialized) - { - s_is_initialized = true; - Initialize(); - } - else - { - m_program.Use(); - } - } + virtual void Draw(); virtual void InitializeShaders() = 0; virtual void InitializeLocations() = 0; - void Initialize() - { - InitializeShaders(); - m_fp.Compile(); - m_vp.Compile(); - m_program.Create(m_vp.id, m_fp.GetId()); - m_program.Use(); - InitializeLocations(); - } + void Initialize(); }; class DrawCursorObj : public PostDrawObj @@ -675,133 +99,15 @@ public: { } - virtual void Draw() - { - checkForGlError("PostDrawObj : Unknown error."); + virtual void Draw(); - PostDrawObj::Draw(); - checkForGlError("PostDrawObj::Draw"); + virtual void InitializeShaders(); - if(!m_fbo.IsCreated()) - { - m_fbo.Create(); - checkForGlError("DrawCursorObj : m_fbo.Create"); - m_fbo.Bind(); - checkForGlError("DrawCursorObj : m_fbo.Bind"); + void SetTexture(void* pixels, int width, int height); - m_rbo.Create(); - checkForGlError("DrawCursorObj : m_rbo.Create"); - m_rbo.Bind(); - checkForGlError("DrawCursorObj : m_rbo.Bind"); - m_rbo.Storage(GL_RGBA, m_width, m_height); - checkForGlError("DrawCursorObj : m_rbo.Storage"); + void SetPosition(float x, float y, float z = 0.0f); - m_fbo.Renderbuffer(GL_COLOR_ATTACHMENT0, m_rbo.GetId()); - checkForGlError("DrawCursorObj : m_fbo.Renderbuffer"); - } - - m_fbo.Bind(); - checkForGlError("DrawCursorObj : m_fbo.Bind"); - glDrawBuffer(GL_COLOR_ATTACHMENT0); - checkForGlError("DrawCursorObj : glDrawBuffer"); - - m_program.Use(); - checkForGlError("DrawCursorObj : m_program.Use"); - - if(m_update_texture) - { - //m_update_texture = false; - - glUniform2f(m_program.GetLocation("in_tc"), m_width, m_height); - checkForGlError("DrawCursorObj : glUniform2f"); - if(!m_tex_id) - { - glGenTextures(1, &m_tex_id); - checkForGlError("DrawCursorObj : glGenTextures"); - } - - glActiveTexture(GL_TEXTURE0); - checkForGlError("DrawCursorObj : glActiveTexture"); - glBindTexture(GL_TEXTURE_2D, m_tex_id); - checkForGlError("DrawCursorObj : glBindTexture"); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_pixels); - checkForGlError("DrawCursorObj : glTexImage2D"); - m_program.SetTex(0); - } - - if(m_update_pos) - { - //m_update_pos = false; - - glUniform4f(m_program.GetLocation("in_pos"), m_pos_x, m_pos_y, m_pos_z, 1.0f); - checkForGlError("DrawCursorObj : glUniform4f"); - } - - glDrawArrays(GL_QUADS, 0, 4); - checkForGlError("DrawCursorObj : glDrawArrays"); - - m_fbo.Bind(GL_READ_FRAMEBUFFER); - checkForGlError("DrawCursorObj : m_fbo.Bind(GL_READ_FRAMEBUFFER)"); - GLfbo::Bind(GL_DRAW_FRAMEBUFFER, 0); - checkForGlError("DrawCursorObj : GLfbo::Bind(GL_DRAW_FRAMEBUFFER, 0)"); - GLfbo::Blit( - 0, 0, m_width, m_height, - 0, 0, m_width, m_height, - GL_COLOR_BUFFER_BIT, GL_NEAREST); - checkForGlError("DrawCursorObj : GLfbo::Blit"); - m_fbo.Bind(); - checkForGlError("DrawCursorObj : m_fbo.Bind"); - } - - virtual void InitializeShaders() - { - m_vp.shader = - "#version 330\n" - "\n" - "uniform vec4 in_pos;\n" - "uniform vec2 in_tc;\n" - "out vec2 tc;\n" - "\n" - "void main()\n" - "{\n" - " tc = in_tc;\n" - " gl_Position = in_pos;\n" - "}\n"; - - m_fp.SetShaderText( - "#version 330\n" - "\n" - "in vec2 tc;\n" - "uniform sampler2D tex0;\n" - "layout (location = 0) out vec4 res;\n" - "\n" - "void main()\n" - "{\n" - " res = texture(tex0, tc);\n" - "}\n"); - } - - void SetTexture(void* pixels, int width, int height) - { - m_pixels = pixels; - m_width = width; - m_height = height; - - m_update_texture = true; - } - - void SetPosition(float x, float y, float z = 0.0f) - { - m_pos_x = x; - m_pos_y = y; - m_pos_z = z; - m_update_pos = true; - } - - void InitializeLocations() - { - //ConLog.Warning("tex0 location = 0x%x", m_program.GetLocation("tex0")); - } + void InitializeLocations(); }; class GLGSRender //TODO: find out why this used to inherit from wxWindow diff --git a/rpcs3/Emu/RSX/GL/GLProgram.cpp b/rpcs3/Emu/RSX/GL/GLProgram.cpp index e7e7fdaa0a..96e32f6be4 100644 --- a/rpcs3/Emu/RSX/GL/GLProgram.cpp +++ b/rpcs3/Emu/RSX/GL/GLProgram.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "GLProgram.h" #include "GLGSRender.h" diff --git a/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp b/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp index 22d666cf6b..e460b06f35 100644 --- a/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "GLVertexProgram.h" diff --git a/rpcs3/Emu/RSX/GSManager.cpp b/rpcs3/Emu/RSX/GSManager.cpp index 0e24117f5b..17155bbbb3 100644 --- a/rpcs3/Emu/RSX/GSManager.cpp +++ b/rpcs3/Emu/RSX/GSManager.cpp @@ -1,12 +1,23 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "rpcs3/Ini.h" +#include "sysutil_video.h" + #include "GSManager.h" #include "Null/NullGSRender.h" #include "GL/GLGSRender.h" +void GSInfo::Init() +{ + mode.resolutionId = Ini.GSResolution.GetValue(); + mode.scanMode = CELL_VIDEO_OUT_SCAN_MODE_INTERLACE; + mode.conversion = CELL_VIDEO_OUT_DISPLAY_CONVERSION_NONE; + mode.aspect = Ini.GSAspectRatio.GetValue(); + mode.refreshRates = CELL_VIDEO_OUT_REFRESH_RATE_50HZ; + mode.format = CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_X8R8G8B8; + mode.pitch = 4; +} + GSManager::GSManager() : m_render(nullptr) { } diff --git a/rpcs3/Emu/RSX/GSManager.h b/rpcs3/Emu/RSX/GSManager.h index 11f7b3917f..68d9db987a 100644 --- a/rpcs3/Emu/RSX/GSManager.h +++ b/rpcs3/Emu/RSX/GSManager.h @@ -1,7 +1,5 @@ #pragma once -#include "sysutil_video.h" #include "GSRender.h" -#include "rpcs3/Ini.h" struct GSInfo { @@ -21,16 +19,7 @@ struct GSInfo { } - void Init() - { - mode.resolutionId = Ini.GSResolution.GetValue(); - mode.scanMode = CELL_VIDEO_OUT_SCAN_MODE_INTERLACE; - mode.conversion = CELL_VIDEO_OUT_DISPLAY_CONVERSION_NONE; - mode.aspect = Ini.GSAspectRatio.GetValue(); - mode.refreshRates = CELL_VIDEO_OUT_REFRESH_RATE_50HZ; - mode.format = CELL_VIDEO_OUT_BUFFER_COLOR_FORMAT_X8R8G8B8; - mode.pitch = 4; - } + void Init(); }; class GSManager diff --git a/rpcs3/Emu/RSX/GSRender.cpp b/rpcs3/Emu/RSX/GSRender.cpp index 6290d09893..b1111c19d7 100644 --- a/rpcs3/Emu/RSX/GSRender.cpp +++ b/rpcs3/Emu/RSX/GSRender.cpp @@ -1,10 +1,30 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "GSRender.h" +GSLock::GSLock(GSRender& renderer, GSLockType type) + : m_renderer(renderer) + , m_type(type) +{ + switch (m_type) + { + case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.lock(); break; + case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.wait(); break; + case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.wait(); break; + } +} + +GSLock::~GSLock() +{ + switch (m_type) + { + case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.unlock(); break; + case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.post(); break; + case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.post(); break; + } +} + GSLockCurrent::GSLockCurrent(GSLockType type) : GSLock(Emu.GetGSManager().GetRender(), type) { } diff --git a/rpcs3/Emu/RSX/GSRender.h b/rpcs3/Emu/RSX/GSRender.h index f1b6b74082..2a58e463a1 100644 --- a/rpcs3/Emu/RSX/GSRender.h +++ b/rpcs3/Emu/RSX/GSRender.h @@ -1,5 +1,4 @@ #pragma once -#include "Emu/RSX/GCM.h" #include "Emu/RSX/RSXThread.h" struct GSRender : public RSXThread @@ -25,27 +24,9 @@ private: GSLockType m_type; public: - GSLock(GSRender& renderer, GSLockType type) - : m_renderer(renderer) - , m_type(type) - { - switch(m_type) - { - case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.lock(); break; - case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.wait(); break; - case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.wait(); break; - } - } + GSLock(GSRender& renderer, GSLockType type); - ~GSLock() - { - switch(m_type) - { - case GS_LOCK_NOT_WAIT: m_renderer.m_cs_main.unlock(); break; - case GS_LOCK_WAIT_FLUSH: m_renderer.m_sem_flush.post(); break; - case GS_LOCK_WAIT_FLIP: m_renderer.m_sem_flip.post(); break; - } - } + ~GSLock(); }; struct GSLockCurrent : GSLock diff --git a/rpcs3/Emu/RSX/RSXTexture.cpp b/rpcs3/Emu/RSX/RSXTexture.cpp index c23c9499cf..c7d4d0bb8d 100644 --- a/rpcs3/Emu/RSX/RSXTexture.cpp +++ b/rpcs3/Emu/RSX/RSXTexture.cpp @@ -1,7 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "RSXThread.h" #include "RSXThread.h" #include "RSXTexture.h" diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 708a157839..bc261ca671 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -1,11 +1,12 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "RSXThread.h" #include "Emu/SysCalls/lv2/sys_time.h" -#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count, args) : args[x].ToLE()) +#define ARGS(x) (x >= count ? OutOfArgsCount(x, cmd, count, args.GetAddr()) : args[x].ToLE()) u32 methodRegisters[0xffff]; @@ -139,8 +140,9 @@ u32 RSXVertexData::GetTypeSize() #define CMD_LOG(...) #endif -u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count, mem32_ptr_t args) +u32 RSXThread::OutOfArgsCount(const uint x, const u32 cmd, const u32 count, const u32 args_addr) { + mem32_ptr_t args(args_addr); std::string debug = GetMethodName(cmd); debug += "("; for(u32 i=0; iget = get + (count + 1) * 4; //memset(Memory.GetMemFromAddr(p.m_ioAddress + get), 0, (count + 1) * 4); @@ -2252,3 +2256,33 @@ void RSXThread::Task() OnExitThread(); } + +void RSXThread::Init(const u32 ioAddress, const u32 ioSize, const u32 ctrlAddress, const u32 localAddress) +{ + m_ctrl = (CellGcmControl*)&Memory[ctrlAddress]; + m_ioAddress = ioAddress; + m_ioSize = ioSize; + m_ctrlAddress = ctrlAddress; + m_local_mem_addr = localAddress; + + m_cur_vertex_prog = nullptr; + m_cur_shader_prog = nullptr; + m_cur_shader_prog_num = 0; + + m_used_gcm_commands.clear(); + + OnInit(); + ThreadBase::Start(); +} + +u32 RSXThread::ReadIO32(u32 addr) +{ + u32 value; + Memory.RSXIOMem.Read32(Memory.RSXIOMem.GetStartAddr() + addr, &value); + return value; +} + +void RSXThread::WriteIO32(u32 addr, u32 value) +{ + Memory.RSXIOMem.Write32(Memory.RSXIOMem.GetStartAddr() + addr, value); +} \ No newline at end of file diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index eb2c85e246..75aa31ffbe 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -4,7 +4,6 @@ #include "RSXVertexProgram.h" #include "RSXFragmentProgram.h" #include "Emu/SysCalls/Callback.h" -#include "Emu/Memory/Memory.h" #include #include // For tracking a list of used gcm commands @@ -611,8 +610,8 @@ protected: void Begin(u32 draw_mode); void End(); - u32 OutOfArgsCount(const uint x, const u32 cmd, const u32 count, mem32_ptr_t args); - void DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 count); + u32 OutOfArgsCount(const uint x, const u32 cmd, const u32 count, const u32 args_addr); + void DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const u32 count); void nativeRescale(float width, float height); virtual void OnInit() = 0; @@ -636,33 +635,9 @@ protected: virtual void Task(); public: - void Init(const u32 ioAddress, const u32 ioSize, const u32 ctrlAddress, const u32 localAddress) - { - m_ctrl = (CellGcmControl*)&Memory[ctrlAddress]; - m_ioAddress = ioAddress; - m_ioSize = ioSize; - m_ctrlAddress = ctrlAddress; - m_local_mem_addr = localAddress; + void Init(const u32 ioAddress, const u32 ioSize, const u32 ctrlAddress, const u32 localAddress); - m_cur_vertex_prog = nullptr; - m_cur_shader_prog = nullptr; - m_cur_shader_prog_num = 0; + u32 ReadIO32(u32 addr); - m_used_gcm_commands.clear(); - - OnInit(); - ThreadBase::Start(); - } - - u32 ReadIO32(u32 addr) - { - u32 value; - Memory.RSXIOMem.Read32(Memory.RSXIOMem.GetStartAddr() + addr, &value); - return value; - } - - void WriteIO32(u32 addr, u32 value) - { - Memory.RSXIOMem.Write32(Memory.RSXIOMem.GetStartAddr() + addr, value); - } + void WriteIO32(u32 addr, u32 value); }; diff --git a/rpcs3/Emu/SysCalls/LogBase.cpp b/rpcs3/Emu/SysCalls/LogBase.cpp index fa79f90ceb..9e11179d4b 100644 --- a/rpcs3/Emu/SysCalls/LogBase.cpp +++ b/rpcs3/Emu/SysCalls/LogBase.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/System.h" #include "LogBase.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 57d9e7a47c..29bb8389e6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 3809643ad6..cdc2a27488 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -4,6 +4,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" #include "cellSysutil.h" +#include "Emu/RSX/sysutil_video.h" #include "cellResc.h" Module *cellResc = nullptr; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index e3e538286d..5490e172be 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" @@ -9,6 +10,7 @@ #include "cellSysutil.h" #include "cellSysutil_SaveData.h" +#include "Emu/RSX/sysutil_video.h" #include "cellMsgDialog.h" #include "cellGame.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index a4f5b9b295..51c092b9da 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Utilities/rXml.h" #include "Emu/Memory/Memory.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 032da5f98f..494354f181 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/SysCalls/Static.cpp b/rpcs3/Emu/SysCalls/Static.cpp index 7a0bf9f784..81d6e52802 100644 --- a/rpcs3/Emu/SysCalls/Static.cpp +++ b/rpcs3/Emu/SysCalls/Static.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 3c5e3fdd26..c00e6b63f3 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Utilities/AutoPause.h" #include "Emu/Memory/Memory.h" diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 3a5c3534be..193d364c53 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -28,7 +28,6 @@ #include "lv2/sys_tty.h" #include "lv2/sys_vm.h" -#include "rpcs3/Ini.h" #include "LogBase.h" //#define SYSCALLS_DEBUG diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index 9d4f423182..b4d5dd2500 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -3,6 +3,7 @@ #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/Event.h" #include "sys_event.h" SysCallBase sys_event("sys_event"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp index a9e06e2a60..ef7bd9ff64 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp @@ -10,6 +10,34 @@ SysCallBase sys_event_flag("sys_event_flag"); +u32 EventFlag::check() +{ + SleepQueue sq; // TODO: implement without SleepQueue + + u32 target = 0; + + for (u32 i = 0; i < waiters.size(); i++) + { + if (((waiters[i].mode & SYS_EVENT_FLAG_WAIT_AND) && (flags & waiters[i].bitptn) == waiters[i].bitptn) || + ((waiters[i].mode & SYS_EVENT_FLAG_WAIT_OR) && (flags & waiters[i].bitptn))) + { + if (m_protocol == SYS_SYNC_FIFO) + { + target = waiters[i].tid; + break; + } + sq.list.push_back(waiters[i].tid); + } + } + + if (m_protocol == SYS_SYNC_PRIORITY) + { + target = sq.pop_prio(); + } + + return target; +} + s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init) { sys_event_flag.Warning("sys_event_flag_create(eflag_id_addr=0x%x, attr_addr=0x%x, init=0x%llx)", diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h index 3e5c502150..f31b04a57f 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.h @@ -47,33 +47,7 @@ struct EventFlag { } - u32 check() - { - SleepQueue sq; // TODO: implement without SleepQueue - - u32 target = 0; - - for (u32 i = 0; i < waiters.size(); i++) - { - if (((waiters[i].mode & SYS_EVENT_FLAG_WAIT_AND) && (flags & waiters[i].bitptn) == waiters[i].bitptn) || - ((waiters[i].mode & SYS_EVENT_FLAG_WAIT_OR) && (flags & waiters[i].bitptn))) - { - if (m_protocol == SYS_SYNC_FIFO) - { - target = waiters[i].tid; - break; - } - sq.list.push_back(waiters[i].tid); - } - } - - if (m_protocol == SYS_SYNC_PRIORITY) - { - target = sq.pop_prio(); - } - - return target; - } + u32 check(); }; s32 sys_event_flag_create(mem32_t eflag_id, mem_ptr_t attr, u64 init); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index bd73e0a18e..e14a3948b1 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Emu/System.h" +#include "Emu/Memory/Memory.h" #include "Emu/FS/vfsFile.h" #include "sys_spu.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 30fcd619db..66a087589e 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -8,7 +8,6 @@ #include "Emu/RSX/GSManager.h" #include "Emu/Audio/AudioManager.h" #include "Emu/FS/VFS.h" -#include "Emu/Event.h" #include "Loader/Loader.h" enum Status diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index 66852a2f83..1d87901943 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -2,8 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/lv2/sys_lwmutex.h" -#include "Emu/SysCalls/lv2/sys_event.h" #include "DisAsmFrame.h" #include "Emu/FS/vfsLocalFile.h" #include "Emu/Cell/PPCThread.h" diff --git a/rpcs3/Gui/GSFrame.cpp b/rpcs3/Gui/GSFrame.cpp index d1361c9832..fde662b2db 100644 --- a/rpcs3/Gui/GSFrame.cpp +++ b/rpcs3/Gui/GSFrame.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "GSFrame.h" #include "Emu/System.h" +#include "Emu/RSX/sysutil_video.h" #include "rpcs3.h" BEGIN_EVENT_TABLE(GSFrame, wxFrame) diff --git a/rpcs3/Gui/GameViewer.h b/rpcs3/Gui/GameViewer.h index 463f7ee4b0..80c007fff0 100644 --- a/rpcs3/Gui/GameViewer.h +++ b/rpcs3/Gui/GameViewer.h @@ -1,5 +1,6 @@ #pragma once #include +#include "rpcs3/Ini.h" #include "Emu/GameInfo.h" struct Column diff --git a/rpcs3/Gui/InterpreterDisAsm.cpp b/rpcs3/Gui/InterpreterDisAsm.cpp index b856d1f0cc..b0eff5c67f 100644 --- a/rpcs3/Gui/InterpreterDisAsm.cpp +++ b/rpcs3/Gui/InterpreterDisAsm.cpp @@ -3,8 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" -#include "Emu/SysCalls/lv2/sys_lwmutex.h" -#include "Emu/SysCalls/lv2/sys_event.h" #include "InterpreterDisAsm.h" #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUDisAsm.h" diff --git a/rpcs3/Gui/RSXDebugger.cpp b/rpcs3/Gui/RSXDebugger.cpp index 0a437560be..0d28888914 100644 --- a/rpcs3/Gui/RSXDebugger.cpp +++ b/rpcs3/Gui/RSXDebugger.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "rpcs3/Ini.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" From ae47cdaad8a3e3269693514ee5515b75e32f474a Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sat, 23 Aug 2014 10:30:26 +0300 Subject: [PATCH 398/499] Fix overwriting, when installing PKG files Now properly removes the directory and tries to continue installation. --- rpcs3/Loader/PKG.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/rpcs3/Loader/PKG.cpp b/rpcs3/Loader/PKG.cpp index c07e43a5fa..2282c7541b 100644 --- a/rpcs3/Loader/PKG.cpp +++ b/rpcs3/Loader/PKG.cpp @@ -25,17 +25,16 @@ bool PKGLoader::Install(std::string dest) std::string titleID = std::string(title_id).substr(7, 9); - if (rExists(dest+titleID)) { + if (rExists(dest + titleID)) { rMessageDialog d_overwrite(NULL, "Another installation was found. Do you want to overwrite it?", "PKG Decrypter / Installer", rYES_NO|rCENTRE); if (d_overwrite.ShowModal() != rID_YES) { LOG_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); return false; } - // TODO: Remove the following two lines and remove the folder dest+titleID - LOG_ERROR(LOADER, "PKG Loader: Another installation found in: %s", titleID.c_str()); - return false; + + rRmdir(dest + titleID); } - if (!rMkdir(dest+titleID)) { + if (!rMkdir(dest + titleID)) { LOG_ERROR(LOADER, "PKG Loader: Could not make the installation directory: %s", titleID.c_str()); return false; } From 7a7264db330c1b5097a1a23fd7554cc0b5586fc9 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sat, 23 Aug 2014 10:50:34 +0300 Subject: [PATCH 399/499] Use std::string for installing PKG files Also now only refreshes, when it could open the PKG file. --- rpcs3/Gui/MainFrame.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index fc79993072..af9e5d180a 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -233,18 +233,18 @@ void MainFrame::InstallPkg(wxCommandEvent& WXUNUSED(event)) Emu.Stop(); // Open and install PKG file - wxString filePath = ctrl.GetPath(); - rFile pkg_f(filePath.ToStdString(), rFile::read); // TODO: Use VFS to install PKG files + std::string filePath = ctrl.GetPath().ToStdString(); + rFile pkg_f(filePath, rFile::read); // TODO: Use VFS to install PKG files if (pkg_f.IsOpened()) { PKGLoader pkg(pkg_f); pkg.Install("/dev_hdd0/game/"); pkg.Close(); - } - // Refresh game list - m_game_viewer->Refresh(); + // Refresh game list + m_game_viewer->Refresh(); + } } void MainFrame::BootElf(wxCommandEvent& WXUNUSED(event)) From 9d2fd7a27f1ca55f9885d26be295e2b0dc027778 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sat, 23 Aug 2014 16:27:25 +0300 Subject: [PATCH 400/499] More improvements and small additions to cellNetCtl --- rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 19 ++++++++++++------- rpcs3/Emu/SysCalls/Modules/cellNetCtl.h | 6 ++++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index ad1b6d5e41..f7d4a2b81c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -27,24 +27,28 @@ int cellNetCtlGetState(mem32_t state) cellNetCtl->Log("cellNetCtlGetState(state_addr=0x%x)", state.GetAddr()); state = CELL_NET_CTL_STATE_Disconnected; // TODO: Allow other states + return CELL_OK; } -int cellNetCtlAddHandler() +int cellNetCtlAddHandler(mem_ptr_t handler, mem32_t arg, s32 hid) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlAddHandler(handler_addr=0x%x, arg_addr=0x%x, hid=%x)", handler.GetAddr(), arg.GetAddr(), hid); + return CELL_OK; } -int cellNetCtlDelHandler() +int cellNetCtlDelHandler(s32 hid) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlDelHandler(hid=%x)", hid); + return CELL_OK; } -int cellNetCtlGetInfo() +int cellNetCtlGetInfo(s32 code, mem_ptr_t info) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlGetInfo(code=%x, info_addr=0x%x)", code, info.GetAddr()); + return CELL_OK; } @@ -57,7 +61,8 @@ int cellNetCtlNetStartDialogLoadAsync(mem_ptr_t p int cellNetCtlNetStartDialogAbortAsync() { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlNetStartDialogAbortAsync()"); + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h index 6a2786eb73..fc25822aaa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h @@ -207,7 +207,7 @@ struct CellNetCtlSSID u8 padding[3]; }; -struct CellNetCtlInfo +union CellNetCtlInfo { be_t device; CellNetCtlEtherAddr ether_addr; @@ -255,4 +255,6 @@ struct CellNetCtlNatInfo be_t stun_status; be_t nat_type; be_t mapped_addr; -}; \ No newline at end of file +}; + +typedef void(cellNetCtlHandler)(s32 prev_state, s32 new_state, s32 event, s32 error_code, mem32_t arg); \ No newline at end of file From b005ee3cdaa5e52cd8ab35fa94d6a5c56e6f4c59 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 23 Aug 2014 18:51:51 +0400 Subject: [PATCH 401/499] Log include fixes --- Utilities/SQueue.h | 2 + rpcs3/Crypto/key_vault.cpp | 14 + rpcs3/Crypto/key_vault.h | 13 +- rpcs3/Crypto/unedat.cpp | 2 + rpcs3/Crypto/unedat.h | 2 - rpcs3/Crypto/unpkg.cpp | 4 + rpcs3/Crypto/unpkg.h | 2 - rpcs3/Crypto/unself.cpp | 309 +++++++++++++++++ rpcs3/Crypto/unself.h | 311 ++---------------- rpcs3/Crypto/utils.cpp | 2 + rpcs3/Crypto/utils.h | 2 - rpcs3/Emu/CPU/CPUThread.cpp | 1 - rpcs3/Emu/Cell/PPUThread.cpp | 7 + rpcs3/Emu/Cell/PPUThread.h | 2 + rpcs3/Emu/SysCalls/FuncList.cpp | 4 - rpcs3/Emu/SysCalls/LogBase.cpp | 25 +- rpcs3/Emu/SysCalls/LogBase.h | 41 ++- rpcs3/Emu/SysCalls/Modules.cpp | 5 +- rpcs3/Emu/SysCalls/Modules.h | 20 +- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellCamera.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp | 3 - rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellFiber.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellFont.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellImejp.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellMic.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 1 + .../Emu/SysCalls/Modules/cellMusicDecode.cpp | 2 - .../Emu/SysCalls/Modules/cellMusicExport.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellOvis.cpp | 2 - .../Emu/SysCalls/Modules/cellPhotoDecode.cpp | 2 - .../Emu/SysCalls/Modules/cellPhotoExport.cpp | 2 - .../Emu/SysCalls/Modules/cellPhotoImport.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellPrint.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellRudp.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellSearch.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellSheap.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellSsl.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 2 + rpcs3/Emu/SysCalls/Modules/cellSync2.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellVoice.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/libsnd3.cpp | 2 - rpcs3/Emu/SysCalls/Modules/libsynth2.cpp | 2 - rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 1 - rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 1 - rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 9 +- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 3 +- rpcs3/Emu/SysCalls/Modules/sys_http.cpp | 2 - rpcs3/Emu/SysCalls/Modules/sys_io.cpp | 1 - rpcs3/Emu/SysCalls/Modules/sys_net.cpp | 1 - rpcs3/Emu/SysCalls/SC_FUNC.h | 12 +- rpcs3/Emu/SysCalls/Static.cpp | 1 - rpcs3/Emu/SysCalls/SysCalls.cpp | 29 +- rpcs3/Emu/SysCalls/SysCalls.h | 72 ---- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 9 +- rpcs3/Emu/SysCalls/lv2/sys_cond.cpp | 21 +- rpcs3/Emu/SysCalls/lv2/sys_event.cpp | 6 +- rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp | 9 +- rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp | 15 +- rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp | 12 +- rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp | 34 +- rpcs3/Emu/SysCalls/lv2/sys_memory.cpp | 34 +- rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp | 43 ++- rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp | 51 ++- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 70 ++-- rpcs3/Emu/SysCalls/lv2/sys_prx.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp | 10 +- rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp | 35 +- rpcs3/Emu/SysCalls/lv2/sys_semaphore.h | 2 + rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 114 +++---- rpcs3/Emu/SysCalls/lv2/sys_time.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 3 +- rpcs3/Emu/SysCalls/lv2/sys_trace.cpp | 2 +- rpcs3/Emu/SysCalls/lv2/sys_tty.cpp | 8 +- rpcs3/Emu/SysCalls/lv2/sys_vm.cpp | 35 +- rpcs3/Loader/ELF64.cpp | 3 +- rpcs3/Loader/SELF.cpp | 50 +++ rpcs3/Loader/SELF.h | 50 +-- 108 files changed, 811 insertions(+), 825 deletions(-) diff --git a/Utilities/SQueue.h b/Utilities/SQueue.h index 9aa7e58356..83d7adc3dd 100644 --- a/Utilities/SQueue.h +++ b/Utilities/SQueue.h @@ -1,5 +1,7 @@ #pragma once +#include "Utilities/SMutex.h" + template class SQueue { diff --git a/rpcs3/Crypto/key_vault.cpp b/rpcs3/Crypto/key_vault.cpp index 8565addb4d..90bd043a09 100644 --- a/rpcs3/Crypto/key_vault.cpp +++ b/rpcs3/Crypto/key_vault.cpp @@ -1,6 +1,20 @@ #include "stdafx.h" +#include "utils.h" +#include "aes.h" #include "key_vault.h" +SELF_KEY::SELF_KEY(u64 ver, u16 rev, u32 type, const std::string& e, const std::string& r, const std::string& pb, const std::string& pr, u32 ct) +{ + version = ver; + revision = rev; + self_type = type; + hex_to_bytes(erk, e.c_str()); + hex_to_bytes(riv, r.c_str()); + hex_to_bytes(pub, pb.c_str()); + hex_to_bytes(priv, pr.c_str()); + curve_type = ct; +} + KeyVault::KeyVault() { } diff --git a/rpcs3/Crypto/key_vault.h b/rpcs3/Crypto/key_vault.h index 3f78228e9e..d5fabaf829 100644 --- a/rpcs3/Crypto/key_vault.h +++ b/rpcs3/Crypto/key_vault.h @@ -1,5 +1,4 @@ #pragma once -#include "utils.h" enum SELF_KEY_TYPE { KEY_LV0 = 1, @@ -22,17 +21,7 @@ struct SELF_KEY { u8 priv[0x15]; u32 curve_type; - SELF_KEY(u64 ver, u16 rev, u32 type, const std::string& e, const std::string& r, const std::string& pb, const std::string& pr, u32 ct) - { - version = ver; - revision = rev; - self_type = type; - hex_to_bytes(erk, e.c_str()); - hex_to_bytes(riv, r.c_str()); - hex_to_bytes(pub, pb.c_str()); - hex_to_bytes(priv, pr.c_str()); - curve_type = ct; - } + SELF_KEY(u64 ver, u16 rev, u32 type, const std::string& e, const std::string& r, const std::string& pb, const std::string& pr, u32 ct); }; static u8 PKG_AES_KEY[0x10] = { diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index 94c997e745..9c4c96414e 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "utils.h" +#include "key_vault.h" #include "unedat.h" #include "Utilities/Log.h" diff --git a/rpcs3/Crypto/unedat.h b/rpcs3/Crypto/unedat.h index 990f8deca3..7efc8b3808 100644 --- a/rpcs3/Crypto/unedat.h +++ b/rpcs3/Crypto/unedat.h @@ -1,6 +1,4 @@ #pragma once -#include "utils.h" -#include "key_vault.h" #define SDAT_FLAG 0x01000000 #define EDAT_COMPRESSED_FLAG 0x00000001 diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index c08a3b5eab..f762f35804 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -1,4 +1,8 @@ #include "stdafx.h" +#include "utils.h" +#include "aes.h" +#include "sha1.h" +#include "key_vault.h" #include "unpkg.h" #include diff --git a/rpcs3/Crypto/unpkg.h b/rpcs3/Crypto/unpkg.h index 6a0e7bda28..886ffe3216 100644 --- a/rpcs3/Crypto/unpkg.h +++ b/rpcs3/Crypto/unpkg.h @@ -1,6 +1,4 @@ #pragma once -#include "utils.h" -#include "key_vault.h" // Constants #define PKG_HEADER_SIZE 0xC0 //sizeof(pkg_header) + sizeof(pkg_unk_checksum) diff --git a/rpcs3/Crypto/unself.cpp b/rpcs3/Crypto/unself.cpp index d03091dae1..10cc0200c7 100644 --- a/rpcs3/Crypto/unself.cpp +++ b/rpcs3/Crypto/unself.cpp @@ -1,8 +1,317 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "aes.h" +#include "sha1.h" +#include "utils.h" #include "Emu/FS/vfsLocalFile.h" #include "unself.h" +#include +#include + +void AppInfo::Load(vfsStream& f) +{ + authid = Read64(f); + vendor_id = Read32(f); + self_type = Read32(f); + version = Read64(f); + padding = Read64(f); +} + +void AppInfo::Show() +{ + LOG_NOTICE(LOADER, "AuthID: 0x%llx", authid); + LOG_NOTICE(LOADER, "VendorID: 0x%08x", vendor_id); + LOG_NOTICE(LOADER, "SELF type: 0x%08x", self_type); + LOG_NOTICE(LOADER, "Version: 0x%llx", version); +} + +void SectionInfo::Load(vfsStream& f) +{ + offset = Read64(f); + size = Read64(f); + compressed = Read32(f); + unknown1 = Read32(f); + unknown2 = Read32(f); + encrypted = Read32(f); +} + +void SectionInfo::Show() +{ + LOG_NOTICE(LOADER, "Offset: 0x%llx", offset); + LOG_NOTICE(LOADER, "Size: 0x%llx", size); + LOG_NOTICE(LOADER, "Compressed: 0x%08x", compressed); + LOG_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); + LOG_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); + LOG_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); +} + +void SCEVersionInfo::Load(vfsStream& f) +{ + subheader_type = Read32(f); + present = Read32(f); + size = Read32(f); + unknown = Read32(f); +} + +void SCEVersionInfo::Show() +{ + LOG_NOTICE(LOADER, "Sub-header type: 0x%08x", subheader_type); + LOG_NOTICE(LOADER, "Present: 0x%08x", present); + LOG_NOTICE(LOADER, "Size: 0x%08x", size); + LOG_NOTICE(LOADER, "Unknown: 0x%08x", unknown); +} + +void ControlInfo::Load(vfsStream& f) +{ + type = Read32(f); + size = Read32(f); + next = Read64(f); + + if (type == 1) + { + control_flags.ctrl_flag1 = Read32(f); + control_flags.unknown1 = Read32(f); + control_flags.unknown2 = Read32(f); + control_flags.unknown3 = Read32(f); + control_flags.unknown4 = Read32(f); + control_flags.unknown5 = Read32(f); + control_flags.unknown6 = Read32(f); + control_flags.unknown7 = Read32(f); + } + else if (type == 2) + { + if (size == 0x30) + { + f.Read(file_digest_30.digest, 20); + file_digest_30.unknown = Read64(f); + } + else if (size == 0x40) + { + f.Read(file_digest_40.digest1, 20); + f.Read(file_digest_40.digest2, 20); + file_digest_40.unknown = Read64(f); + } + } + else if (type == 3) + { + npdrm.magic = Read32(f); + npdrm.unknown1 = Read32(f); + npdrm.license = Read32(f); + npdrm.type = Read32(f); + f.Read(npdrm.content_id, 48); + f.Read(npdrm.digest, 16); + f.Read(npdrm.invdigest, 16); + f.Read(npdrm.xordigest, 16); + npdrm.unknown2 = Read64(f); + npdrm.unknown3 = Read64(f); + } +} + +void ControlInfo::Show() +{ + LOG_NOTICE(LOADER, "Type: 0x%08x", type); + LOG_NOTICE(LOADER, "Size: 0x%08x", size); + LOG_NOTICE(LOADER, "Next: 0x%llx", next); + + if (type == 1) + { + LOG_NOTICE(LOADER, "Control flag 1: 0x%08x", control_flags.ctrl_flag1); + LOG_NOTICE(LOADER, "Unknown1: 0x%08x", control_flags.unknown1); + LOG_NOTICE(LOADER, "Unknown2: 0x%08x", control_flags.unknown2); + LOG_NOTICE(LOADER, "Unknown3: 0x%08x", control_flags.unknown3); + LOG_NOTICE(LOADER, "Unknown4: 0x%08x", control_flags.unknown4); + LOG_NOTICE(LOADER, "Unknown5: 0x%08x", control_flags.unknown5); + LOG_NOTICE(LOADER, "Unknown6: 0x%08x", control_flags.unknown6); + LOG_NOTICE(LOADER, "Unknown7: 0x%08x", control_flags.unknown7); + } + else if (type == 2) + { + if (size == 0x30) + { + std::string digest_str; + for (int i = 0; i < 20; i++) + digest_str += fmt::Format("%02x", file_digest_30.digest[i]); + + LOG_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); + LOG_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_30.unknown); + } + else if (size == 0x40) + { + std::string digest_str1; + std::string digest_str2; + for (int i = 0; i < 20; i++) + { + digest_str1 += fmt::Format("%02x", file_digest_40.digest1[i]); + digest_str2 += fmt::Format("%02x", file_digest_40.digest2[i]); + } + + LOG_NOTICE(LOADER, "Digest1: %s", digest_str1.c_str()); + LOG_NOTICE(LOADER, "Digest2: %s", digest_str2.c_str()); + LOG_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_40.unknown); + } + } + else if (type == 3) + { + std::string contentid_str; + std::string digest_str; + std::string invdigest_str; + std::string xordigest_str; + for (int i = 0; i < 48; i++) + contentid_str += fmt::Format("%02x", npdrm.content_id[i]); + for (int i = 0; i < 16; i++) + { + digest_str += fmt::Format("%02x", npdrm.digest[i]); + invdigest_str += fmt::Format("%02x", npdrm.invdigest[i]); + xordigest_str += fmt::Format("%02x", npdrm.xordigest[i]); + } + + LOG_NOTICE(LOADER, "Magic: 0x%08x", npdrm.magic); + LOG_NOTICE(LOADER, "Unknown1: 0x%08x", npdrm.unknown1); + LOG_NOTICE(LOADER, "License: 0x%08x", npdrm.license); + LOG_NOTICE(LOADER, "Type: 0x%08x", npdrm.type); + LOG_NOTICE(LOADER, "ContentID: %s", contentid_str.c_str()); + LOG_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); + LOG_NOTICE(LOADER, "Inverse digest: %s", invdigest_str.c_str()); + LOG_NOTICE(LOADER, "XOR digest: %s", xordigest_str.c_str()); + LOG_NOTICE(LOADER, "Unknown2: 0x%llx", npdrm.unknown2); + LOG_NOTICE(LOADER, "Unknown3: 0x%llx", npdrm.unknown3); + } +} + +void MetadataInfo::Load(u8* in) +{ + memcpy(key, in, 0x10); + memcpy(key_pad, in + 0x10, 0x10); + memcpy(iv, in + 0x20, 0x10); + memcpy(iv_pad, in + 0x30, 0x10); +} + +void MetadataInfo::Show() +{ + std::string key_str; + std::string key_pad_str; + std::string iv_str; + std::string iv_pad_str; + for (int i = 0; i < 0x10; i++) + { + key_str += fmt::Format("%02x", key[i]); + key_pad_str += fmt::Format("%02x", key_pad[i]); + iv_str += fmt::Format("%02x", iv[i]); + iv_pad_str += fmt::Format("%02x", iv_pad[i]); + } + + LOG_NOTICE(LOADER, "Key: %s", key_str.c_str()); + LOG_NOTICE(LOADER, "Key pad: %s", key_pad_str.c_str()); + LOG_NOTICE(LOADER, "IV: %s", iv_str.c_str()); + LOG_NOTICE(LOADER, "IV pad: %s", iv_pad_str.c_str()); +} + +void MetadataHeader::Load(u8* in) +{ + memcpy(&signature_input_length, in, 8); + memcpy(&unknown1, in + 8, 4); + memcpy(§ion_count, in + 12, 4); + memcpy(&key_count, in + 16, 4); + memcpy(&opt_header_size, in + 20, 4); + memcpy(&unknown2, in + 24, 4); + memcpy(&unknown3, in + 28, 4); + + // Endian swap. + signature_input_length = swap64(signature_input_length); + unknown1 = swap32(unknown1); + section_count = swap32(section_count); + key_count = swap32(key_count); + opt_header_size = swap32(opt_header_size); + unknown2 = swap32(unknown2); + unknown3 = swap32(unknown3); +} + +void MetadataHeader::Show() +{ + LOG_NOTICE(LOADER, "Signature input length: 0x%llx", signature_input_length); + LOG_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); + LOG_NOTICE(LOADER, "Section count: 0x%08x", section_count); + LOG_NOTICE(LOADER, "Key count: 0x%08x", key_count); + LOG_NOTICE(LOADER, "Optional header size: 0x%08x", opt_header_size); + LOG_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); + LOG_NOTICE(LOADER, "Unknown3: 0x%08x", unknown3); +} + +void MetadataSectionHeader::Load(u8* in) +{ + memcpy(&data_offset, in, 8); + memcpy(&data_size, in + 8, 8); + memcpy(&type, in + 16, 4); + memcpy(&program_idx, in + 20, 4); + memcpy(&hashed, in + 24, 4); + memcpy(&sha1_idx, in + 28, 4); + memcpy(&encrypted, in + 32, 4); + memcpy(&key_idx, in + 36, 4); + memcpy(&iv_idx, in + 40, 4); + memcpy(&compressed, in + 44, 4); + + // Endian swap. + data_offset = swap64(data_offset); + data_size = swap64(data_size); + type = swap32(type); + program_idx = swap32(program_idx); + hashed = swap32(hashed); + sha1_idx = swap32(sha1_idx); + encrypted = swap32(encrypted); + key_idx = swap32(key_idx); + iv_idx = swap32(iv_idx); + compressed = swap32(compressed); +} + +void MetadataSectionHeader::Show() +{ + LOG_NOTICE(LOADER, "Data offset: 0x%llx", data_offset); + LOG_NOTICE(LOADER, "Data size: 0x%llx", data_size); + LOG_NOTICE(LOADER, "Type: 0x%08x", type); + LOG_NOTICE(LOADER, "Program index: 0x%08x", program_idx); + LOG_NOTICE(LOADER, "Hashed: 0x%08x", hashed); + LOG_NOTICE(LOADER, "SHA1 index: 0x%08x", sha1_idx); + LOG_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); + LOG_NOTICE(LOADER, "Key index: 0x%08x", key_idx); + LOG_NOTICE(LOADER, "IV index: 0x%08x", iv_idx); + LOG_NOTICE(LOADER, "Compressed: 0x%08x", compressed); +} + +void SectionHash::Load(vfsStream& f) +{ + f.Read(sha1, 20); + f.Read(padding, 12); + f.Read(hmac_key, 64); +} + +void CapabilitiesInfo::Load(vfsStream& f) +{ + type = Read32(f); + capabilities_size = Read32(f); + next = Read32(f); + unknown1 = Read32(f); + unknown2 = Read64(f); + unknown3 = Read64(f); + flags = Read64(f); + unknown4 = Read32(f); + unknown5 = Read32(f); +} + +void Signature::Load(vfsStream& f) +{ + f.Read(r, 21); + f.Read(s, 21); + f.Read(padding, 6); +} + +void SelfSection::Load(vfsStream& f) +{ + *data = Read32(f); + size = Read64(f); + offset = Read64(f); +} + SELFDecrypter::SELFDecrypter(vfsStream& s) : self_f(s), key_v(), data_buf_length(0) { diff --git a/rpcs3/Crypto/unself.h b/rpcs3/Crypto/unself.h index 860d71e826..947904e13a 100644 --- a/rpcs3/Crypto/unself.h +++ b/rpcs3/Crypto/unself.h @@ -1,10 +1,8 @@ #pragma once -#include "utils.h" -#include "key_vault.h" -#include "Loader/ELF.h" + #include "Loader/SELF.h" -#include -#include +#include "Loader/ELF.h" +#include "key_vault.h" struct AppInfo { @@ -14,22 +12,9 @@ struct AppInfo u64 version; u64 padding; - void Load(vfsStream& f) - { - authid = Read64(f); - vendor_id = Read32(f); - self_type = Read32(f); - version = Read64(f); - padding = Read64(f); - } + void Load(vfsStream& f); - void Show() - { - LOG_NOTICE(LOADER, "AuthID: 0x%llx", authid); - LOG_NOTICE(LOADER, "VendorID: 0x%08x", vendor_id); - LOG_NOTICE(LOADER, "SELF type: 0x%08x", self_type); - LOG_NOTICE(LOADER, "Version: 0x%llx", version); - } + void Show(); }; struct SectionInfo @@ -41,25 +26,9 @@ struct SectionInfo u32 unknown2; u32 encrypted; - void Load(vfsStream& f) - { - offset = Read64(f); - size = Read64(f); - compressed = Read32(f); - unknown1 = Read32(f); - unknown2 = Read32(f); - encrypted = Read32(f); - } + void Load(vfsStream& f); - void Show() - { - LOG_NOTICE(LOADER, "Offset: 0x%llx", offset); - LOG_NOTICE(LOADER, "Size: 0x%llx", size); - LOG_NOTICE(LOADER, "Compressed: 0x%08x", compressed); - LOG_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); - LOG_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); - LOG_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); - } + void Show(); }; struct SCEVersionInfo @@ -69,21 +38,9 @@ struct SCEVersionInfo u32 size; u32 unknown; - void Load(vfsStream& f) - { - subheader_type = Read32(f); - present = Read32(f); - size = Read32(f); - unknown = Read32(f); - } + void Load(vfsStream& f); - void Show() - { - LOG_NOTICE(LOADER, "Sub-header type: 0x%08x", subheader_type); - LOG_NOTICE(LOADER, "Present: 0x%08x", present); - LOG_NOTICE(LOADER, "Size: 0x%08x", size); - LOG_NOTICE(LOADER, "Unknown: 0x%08x", unknown); - } + void Show(); }; struct ControlInfo @@ -133,122 +90,9 @@ struct ControlInfo } npdrm; }; - void Load(vfsStream& f) - { - type = Read32(f); - size = Read32(f); - next = Read64(f); + void Load(vfsStream& f); - if (type == 1) - { - control_flags.ctrl_flag1 = Read32(f); - control_flags.unknown1 = Read32(f); - control_flags.unknown2 = Read32(f); - control_flags.unknown3 = Read32(f); - control_flags.unknown4 = Read32(f); - control_flags.unknown5 = Read32(f); - control_flags.unknown6 = Read32(f); - control_flags.unknown7 = Read32(f); - } - else if (type == 2) - { - if (size == 0x30) - { - f.Read(file_digest_30.digest, 20); - file_digest_30.unknown = Read64(f); - } - else if (size == 0x40) - { - f.Read(file_digest_40.digest1, 20); - f.Read(file_digest_40.digest2, 20); - file_digest_40.unknown = Read64(f); - } - } - else if (type == 3) - { - npdrm.magic = Read32(f); - npdrm.unknown1 = Read32(f); - npdrm.license = Read32(f); - npdrm.type = Read32(f); - f.Read(npdrm.content_id, 48); - f.Read(npdrm.digest, 16); - f.Read(npdrm.invdigest, 16); - f.Read(npdrm.xordigest, 16); - npdrm.unknown2 = Read64(f); - npdrm.unknown3 = Read64(f); - } - } - - void Show() - { - LOG_NOTICE(LOADER, "Type: 0x%08x", type); - LOG_NOTICE(LOADER, "Size: 0x%08x", size); - LOG_NOTICE(LOADER, "Next: 0x%llx", next); - - if (type == 1) - { - LOG_NOTICE(LOADER, "Control flag 1: 0x%08x", control_flags.ctrl_flag1); - LOG_NOTICE(LOADER, "Unknown1: 0x%08x", control_flags.unknown1); - LOG_NOTICE(LOADER, "Unknown2: 0x%08x", control_flags.unknown2); - LOG_NOTICE(LOADER, "Unknown3: 0x%08x", control_flags.unknown3); - LOG_NOTICE(LOADER, "Unknown4: 0x%08x", control_flags.unknown4); - LOG_NOTICE(LOADER, "Unknown5: 0x%08x", control_flags.unknown5); - LOG_NOTICE(LOADER, "Unknown6: 0x%08x", control_flags.unknown6); - LOG_NOTICE(LOADER, "Unknown7: 0x%08x", control_flags.unknown7); - } - else if (type == 2) - { - if (size == 0x30) - { - std::string digest_str; - for (int i = 0; i < 20; i++) - digest_str += fmt::Format("%02x", file_digest_30.digest[i]); - - LOG_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); - LOG_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_30.unknown); - } - else if (size == 0x40) - { - std::string digest_str1; - std::string digest_str2; - for (int i = 0; i < 20; i++) - { - digest_str1 += fmt::Format("%02x", file_digest_40.digest1[i]); - digest_str2 += fmt::Format("%02x", file_digest_40.digest2[i]); - } - - LOG_NOTICE(LOADER, "Digest1: %s", digest_str1.c_str()); - LOG_NOTICE(LOADER, "Digest2: %s", digest_str2.c_str()); - LOG_NOTICE(LOADER, "Unknown: 0x%llx", file_digest_40.unknown); - } - } - else if (type == 3) - { - std::string contentid_str; - std::string digest_str; - std::string invdigest_str; - std::string xordigest_str; - for (int i = 0; i < 48; i++) - contentid_str += fmt::Format("%02x", npdrm.content_id[i]); - for (int i = 0; i < 16; i++) - { - digest_str += fmt::Format("%02x", npdrm.digest[i]); - invdigest_str += fmt::Format("%02x", npdrm.invdigest[i]); - xordigest_str += fmt::Format("%02x", npdrm.xordigest[i]); - } - - LOG_NOTICE(LOADER, "Magic: 0x%08x", npdrm.magic); - LOG_NOTICE(LOADER, "Unknown1: 0x%08x", npdrm.unknown1); - LOG_NOTICE(LOADER, "License: 0x%08x", npdrm.license); - LOG_NOTICE(LOADER, "Type: 0x%08x", npdrm.type); - LOG_NOTICE(LOADER, "ContentID: %s", contentid_str.c_str()); - LOG_NOTICE(LOADER, "Digest: %s", digest_str.c_str()); - LOG_NOTICE(LOADER, "Inverse digest: %s", invdigest_str.c_str()); - LOG_NOTICE(LOADER, "XOR digest: %s", xordigest_str.c_str()); - LOG_NOTICE(LOADER, "Unknown2: 0x%llx", npdrm.unknown2); - LOG_NOTICE(LOADER, "Unknown3: 0x%llx", npdrm.unknown3); - } - } + void Show(); }; @@ -259,33 +103,9 @@ struct MetadataInfo u8 iv[0x10]; u8 iv_pad[0x10]; - void Load(u8* in) - { - memcpy(key, in, 0x10); - memcpy(key_pad, in + 0x10, 0x10); - memcpy(iv, in + 0x20, 0x10); - memcpy(iv_pad, in + 0x30, 0x10); - } + void Load(u8* in); - void Show() - { - std::string key_str; - std::string key_pad_str; - std::string iv_str; - std::string iv_pad_str; - for (int i = 0; i < 0x10; i++) - { - key_str += fmt::Format("%02x", key[i]); - key_pad_str += fmt::Format("%02x", key_pad[i]); - iv_str += fmt::Format("%02x", iv[i]); - iv_pad_str += fmt::Format("%02x", iv_pad[i]); - } - - LOG_NOTICE(LOADER, "Key: %s", key_str.c_str()); - LOG_NOTICE(LOADER, "Key pad: %s", key_pad_str.c_str()); - LOG_NOTICE(LOADER, "IV: %s", iv_str.c_str()); - LOG_NOTICE(LOADER, "IV pad: %s", iv_pad_str.c_str()); - } + void Show(); }; struct MetadataHeader @@ -298,36 +118,9 @@ struct MetadataHeader u32 unknown2; u32 unknown3; - void Load(u8* in) - { - memcpy(&signature_input_length, in, 8); - memcpy(&unknown1, in + 8, 4); - memcpy(§ion_count, in + 12, 4); - memcpy(&key_count, in + 16, 4); - memcpy(&opt_header_size, in + 20, 4); - memcpy(&unknown2, in + 24, 4); - memcpy(&unknown3, in + 28, 4); + void Load(u8* in); - // Endian swap. - signature_input_length = swap64(signature_input_length); - unknown1 = swap32(unknown1); - section_count = swap32(section_count); - key_count = swap32(key_count); - opt_header_size = swap32(opt_header_size); - unknown2 = swap32(unknown2); - unknown3 = swap32(unknown3); - } - - void Show() - { - LOG_NOTICE(LOADER, "Signature input length: 0x%llx", signature_input_length); - LOG_NOTICE(LOADER, "Unknown1: 0x%08x", unknown1); - LOG_NOTICE(LOADER, "Section count: 0x%08x", section_count); - LOG_NOTICE(LOADER, "Key count: 0x%08x", key_count); - LOG_NOTICE(LOADER, "Optional header size: 0x%08x", opt_header_size); - LOG_NOTICE(LOADER, "Unknown2: 0x%08x", unknown2); - LOG_NOTICE(LOADER, "Unknown3: 0x%08x", unknown3); - } + void Show(); }; struct MetadataSectionHeader @@ -343,45 +136,9 @@ struct MetadataSectionHeader u32 iv_idx; u32 compressed; - void Load(u8* in) - { - memcpy(&data_offset, in, 8); - memcpy(&data_size, in + 8, 8); - memcpy(&type, in + 16, 4); - memcpy(&program_idx, in + 20, 4); - memcpy(&hashed, in + 24, 4); - memcpy(&sha1_idx, in + 28, 4); - memcpy(&encrypted, in + 32, 4); - memcpy(&key_idx, in + 36, 4); - memcpy(&iv_idx, in + 40, 4); - memcpy(&compressed, in + 44, 4); + void Load(u8* in); - // Endian swap. - data_offset = swap64(data_offset); - data_size = swap64(data_size); - type = swap32(type); - program_idx = swap32(program_idx); - hashed = swap32(hashed); - sha1_idx = swap32(sha1_idx); - encrypted = swap32(encrypted); - key_idx = swap32(key_idx); - iv_idx = swap32(iv_idx); - compressed = swap32(compressed); - } - - void Show() - { - LOG_NOTICE(LOADER, "Data offset: 0x%llx", data_offset); - LOG_NOTICE(LOADER, "Data size: 0x%llx", data_size); - LOG_NOTICE(LOADER, "Type: 0x%08x", type); - LOG_NOTICE(LOADER, "Program index: 0x%08x", program_idx); - LOG_NOTICE(LOADER, "Hashed: 0x%08x", hashed); - LOG_NOTICE(LOADER, "SHA1 index: 0x%08x", sha1_idx); - LOG_NOTICE(LOADER, "Encrypted: 0x%08x", encrypted); - LOG_NOTICE(LOADER, "Key index: 0x%08x", key_idx); - LOG_NOTICE(LOADER, "IV index: 0x%08x", iv_idx); - LOG_NOTICE(LOADER, "Compressed: 0x%08x", compressed); - } + void Show(); }; struct SectionHash { @@ -389,12 +146,7 @@ struct SectionHash { u8 padding[12]; u8 hmac_key[64]; - void Load(vfsStream& f) - { - f.Read(sha1, 20); - f.Read(padding, 12); - f.Read(hmac_key, 64); - } + void Load(vfsStream& f); }; struct CapabilitiesInfo @@ -409,18 +161,7 @@ struct CapabilitiesInfo u32 unknown4; u32 unknown5; - void Load(vfsStream& f) - { - type = Read32(f); - capabilities_size = Read32(f); - next = Read32(f); - unknown1 = Read32(f); - unknown2 = Read64(f); - unknown3 = Read64(f); - flags = Read64(f); - unknown4 = Read32(f); - unknown5 = Read32(f); - } + void Load(vfsStream& f); }; struct Signature @@ -429,12 +170,7 @@ struct Signature u8 s[21]; u8 padding[6]; - void Load(vfsStream& f) - { - f.Read(r, 21); - f.Read(s, 21); - f.Read(padding, 6); - } + void Load(vfsStream& f); }; struct SelfSection @@ -443,12 +179,7 @@ struct SelfSection u64 size; u64 offset; - void Load(vfsStream& f) - { - *data = Read32(f); - size = Read64(f); - offset = Read64(f); - } + void Load(vfsStream& f); }; class SELFDecrypter diff --git a/rpcs3/Crypto/utils.cpp b/rpcs3/Crypto/utils.cpp index a17013cda9..b395643f20 100644 --- a/rpcs3/Crypto/utils.cpp +++ b/rpcs3/Crypto/utils.cpp @@ -1,4 +1,6 @@ #include "stdafx.h" +#include "aes.h" +#include "sha1.h" #include "utils.h" // Endian swap auxiliary functions. diff --git a/rpcs3/Crypto/utils.h b/rpcs3/Crypto/utils.h index 17ec4e8f5a..4ae1466607 100644 --- a/rpcs3/Crypto/utils.h +++ b/rpcs3/Crypto/utils.h @@ -1,6 +1,4 @@ #pragma once -#include "aes.h" -#include "sha1.h" // Auxiliary functions (endian swap and xor). u16 swap16(u16 i); diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index b9c26d49cd..507e589b51 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "rpcs3/Ini.h" -#include "Emu/SysCalls/ErrorCodes.h" #include "Emu/SysCalls/SysCalls.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index b4700bc5fd..c76ffbb4d9 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -4,7 +4,9 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" +#include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/Static.h" #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUInterpreter.h" @@ -220,6 +222,11 @@ int FPRdouble::Cmp(PPCdouble a, PPCdouble b) return CR_SO; } +u64 PPUThread::GetStackArg(s32 i) +{ + return Memory.Read64(GPR[1] + 0x70 + 0x8 * (i - 9)); +} + u64 PPUThread::FastCall(u64 addr, u64 rtoc, u64 arg1, u64 arg2, u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7, u64 arg8) { GPR[3] = arg1; diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 5a5e0bbf58..0e8ff47869 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -842,6 +842,7 @@ public: public: virtual void InitRegs(); virtual u64 GetFreeStackSize() const; + u64 GetStackArg(s32 i); u64 FastCall(u64 addr, u64 rtoc, u64 arg1 = 0, u64 arg2 = 0, u64 arg3 = 0, u64 arg4 = 0, u64 arg5 = 0, u64 arg6 = 0, u64 arg7 = 0, u64 arg8 = 0); u64 FastCall2(u64 addr, u64 rtoc); void FastStop(); @@ -866,3 +867,4 @@ protected: PPUThread& GetCurrentPPUThread(); +#define declCPU PPUThread& CPU = GetCurrentPPUThread diff --git a/rpcs3/Emu/SysCalls/FuncList.cpp b/rpcs3/Emu/SysCalls/FuncList.cpp index c4760519c0..c2fc7cd378 100644 --- a/rpcs3/Emu/SysCalls/FuncList.cpp +++ b/rpcs3/Emu/SysCalls/FuncList.cpp @@ -1,10 +1,6 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "SysCalls.h" -#define FUNC_LOG_ERROR(x) LOG_ERROR(HLE, x); return 0 std::string SysCalls::GetHLEFuncName(const u32 fid) { switch(fid) diff --git a/rpcs3/Emu/SysCalls/LogBase.cpp b/rpcs3/Emu/SysCalls/LogBase.cpp index 9e11179d4b..6a8f4a6bed 100644 --- a/rpcs3/Emu/SysCalls/LogBase.cpp +++ b/rpcs3/Emu/SysCalls/LogBase.cpp @@ -9,17 +9,24 @@ bool LogBase::CheckLogging() const return Ini.HLELogging.GetValue(); } -void LogBase::LogNotice(const std::string& text) +void LogBase::LogOutput(LogType type, const char* info, const std::string& text) { - LOG_NOTICE(HLE, "%s", text.c_str()); + switch (type) + { + case LogNotice: LOG_NOTICE(HLE, "%s%s%s", GetName().c_str(), info, text.c_str()); break; + case LogSuccess: LOG_SUCCESS(HLE, "%s%s%s", GetName().c_str(), info, text.c_str()); break; + case LogWarning: LOG_WARNING(HLE, "%s%s%s", GetName().c_str(), info, text.c_str()); break; + case LogError: LOG_ERROR(HLE, "%s%s%s", GetName().c_str(), info, text.c_str()); break; + } } -void LogBase::LogWarning(const std::string& text) +void LogBase::LogOutput(LogType type, const u32 id, const char* info, const std::string& text) { - LOG_WARNING(HLE, "%s", text.c_str()); -} - -void LogBase::LogError(const std::string& text) -{ - LOG_ERROR(HLE, "%s", text.c_str()); + switch (type) + { + case LogNotice: LOG_NOTICE(HLE, "%s[%d]%s%s", GetName().c_str(), id, info, text.c_str()); break; + case LogSuccess: LOG_SUCCESS(HLE, "%s[%d]%s%s", GetName().c_str(), id, info, text.c_str()); break; + case LogWarning: LOG_WARNING(HLE, "%s[%d]%s%s", GetName().c_str(), id, info, text.c_str()); break; + case LogError: LOG_ERROR(HLE, "%s[%d]%s%s", GetName().c_str(), id, info, text.c_str()); break; + } } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/LogBase.h b/rpcs3/Emu/SysCalls/LogBase.h index dac704e974..dc3d280d43 100644 --- a/rpcs3/Emu/SysCalls/LogBase.h +++ b/rpcs3/Emu/SysCalls/LogBase.h @@ -3,11 +3,18 @@ class LogBase { bool m_logging; - bool CheckLogging() const; - void LogNotice(const std::string& text); - void LogWarning(const std::string& text); - void LogError(const std::string& text); + + enum LogType + { + LogNotice, + LogSuccess, + LogWarning, + LogError, + }; + + void LogOutput(LogType type, const char* info, const std::string& text); + void LogOutput(LogType type, const u32 id, const char* info, const std::string& text); public: void SetLogging(bool value) @@ -24,12 +31,12 @@ public: template void Notice(const u32 id, const char* fmt, Targs... args) { - LogNotice(GetName() + fmt::Format("[%d]: ", id) + fmt::Format(fmt, args...)); + LogOutput(LogNotice, id, ": ", fmt::Format(fmt, args...)); } template void Notice(const char* fmt, Targs... args) { - LogNotice(GetName() + ": " + fmt::Format(fmt, args...)); + LogOutput(LogNotice, ": ", fmt::Format(fmt, args...)); } template __forceinline void Log(const char* fmt, Targs... args) @@ -48,33 +55,43 @@ public: } } + template void Success(const u32 id, const char* fmt, Targs... args) + { + LogOutput(LogSuccess, id, ": ", fmt::Format(fmt, args...)); + } + + template void Success(const char* fmt, Targs... args) + { + LogOutput(LogSuccess, ": ", fmt::Format(fmt, args...)); + } + template void Warning(const u32 id, const char* fmt, Targs... args) { - LogWarning(GetName() + fmt::Format("[%d] warning: ", id) + fmt::Format(fmt, args...)); + LogOutput(LogWarning, id, " warning: ", fmt::Format(fmt, args...)); } template void Warning(const char* fmt, Targs... args) { - LogWarning(GetName() + " warning: " + fmt::Format(fmt, args...)); + LogOutput(LogWarning, " warning: ", fmt::Format(fmt, args...)); } template void Error(const u32 id, const char* fmt, Targs... args) { - LogError(GetName() + fmt::Format("[%d] error: ", id) + fmt::Format(fmt, args...)); + LogOutput(LogError, id, " error: ", fmt::Format(fmt, args...)); } template void Error(const char* fmt, Targs... args) { - LogError(GetName() + " error: " + fmt::Format(fmt, args...)); + LogOutput(LogError, " error: ", fmt::Format(fmt, args...)); } template void Todo(const u32 id, const char* fmt, Targs... args) { - LogError(GetName() + fmt::Format("[%d] TODO: ", id) + fmt::Format(fmt, args...)); + LogOutput(LogError, id, " TODO: ", fmt::Format(fmt, args...)); } template void Todo(const char* fmt, Targs... args) { - LogError(GetName() + " TODO: " + fmt::Format(fmt, args...)); + LogOutput(LogError, " TODO: ", fmt::Format(fmt, args...)); } }; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 31b2b6b45a..60427fc380 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -2,6 +2,7 @@ #include "Utilities/Log.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/Static.h" #include "Crypto/sha1.h" #include #include "ModuleManager.h" @@ -179,7 +180,7 @@ IdManager& Module::GetIdManager() const return Emu.GetIdManager(); } -StaticFuncManager& Module::GetSFuncManager() const +void Module::PushNewFuncSub(SFunc* func) { - return Emu.GetSFuncManager(); + Emu.GetSFuncManager().push_back(func); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index 18623031ce..722fadaafd 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -1,6 +1,6 @@ #pragma once - #include "Emu/SysCalls/SC_FUNC.h" +#include "ErrorCodes.h" #include "LogBase.h" //TODO @@ -17,7 +17,7 @@ struct ModuleFunc ~ModuleFunc() { - safe_delete(func); + delete func; } }; @@ -38,10 +38,12 @@ struct SFunc ~SFunc() { - safe_delete(func); + delete func; } }; +class StaticFuncManager; + class Module : public LogBase { std::string m_name; @@ -51,7 +53,7 @@ class Module : public LogBase void (*m_unload_func)(); IdManager& GetIdManager() const; - StaticFuncManager& GetSFuncManager() const; + void PushNewFuncSub(SFunc* func); public: std::vector m_funcs_list; @@ -155,5 +157,13 @@ __forceinline void Module::AddFuncSub(const char group[8], const u64 ops[], cons op.crc = re(op.crc); sf->ops.push_back(op); } - GetSFuncManager().push_back(sf); + PushNewFuncSub(sf); } + +#define REG_SUB(module, group, name, ...) \ + static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ + module->AddFuncSub(group, name ## _table, #name, name) + +#define REG_FUNC(module, name) module->AddFunc(getFunctionId(#name), name) + +#define UNIMPLEMENTED_FUNC(module) module->Todo("%s", __FUNCTION__) \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 23e30c4efc..4203a77338 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "cellPamf.h" extern std::mutex g_mutex_avcodec_open2; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp index fea80fdb1c..ddc1c1bf56 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp @@ -2,7 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" Module *cellAtrac = nullptr; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index 29bb8389e6..f9239b7f81 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -4,9 +4,9 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "Utilities/SQueue.h" #include "Emu/Event.h" +#include "Emu/SysCalls/lv2/sys_time.h" #include "Emu/Audio/cellAudio.h" #include "Emu/Audio/AudioManager.h" #include "Emu/Audio/AudioDumper.h" @@ -359,7 +359,7 @@ int cellAudioInit() } } - const u64 stamp1 = get_system_time(); + //const u64 stamp1 = get_system_time(); if (first_mix) { @@ -381,7 +381,7 @@ int cellAudioInit() oal_buffer_offset = 0; } - const u64 stamp2 = get_system_time(); + //const u64 stamp2 = get_system_time(); // send aftermix event (normal audio event) { @@ -409,7 +409,7 @@ int cellAudioInit() Emu.GetEventManager().SendEvent(keys[i], 0x10103000e010e07, 0, 0, 0); } - const u64 stamp3 = get_system_time(); + //const u64 stamp3 = get_system_time(); if (do_dump && !first_mix) { diff --git a/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp b/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp index 72879e8d3b..15b7f773e0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellBgdl.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellBgdl_init(); Module cellBgdl(0x003f, cellBgdl_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp index ee00c683fa..c2237352bf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellCamera_init(); Module cellCamera(0x0023, cellCamera_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp index 70109e224a..83473a902c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelp8Enc.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellCelp8Enc_init(); Module cellCelp8Enc(0x0048, cellCelp8Enc_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp index 6541f6ae76..03be6b4957 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCelpEnc.cpp @@ -1,8 +1,5 @@ - #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellCelpEnc_init(); Module cellCelpEnc(0xf00a, cellCelpEnc_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 13f23a10a3..e1bb563179 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -4,7 +4,6 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "cellPamf.h" #include "cellDmux.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp index a64a9a914f..eadca3d19f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellFiber_init(); Module cellFiber(0x0043, cellFiber_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index 8629065669..c9b94eea86 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -4,7 +4,6 @@ #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "Emu/FS/vfsFile.h" #include "cellFont.h" #include "stblib/stb_truetype.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp index cf33200cb3..ed1a50092b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "cellFont.h" //void cellFontFT_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 085cadb5b0..cec371afba 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -3,9 +3,7 @@ #include "Utilities/rMsgBox.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "Emu/FS/vfsFile.h" #include "Loader/PSF.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 1642691032..688db567f8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "Emu/RSX/GCM.h" #include "Emu/SysCalls/lv2/sys_process.h" #include "sysPrxForUser.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index 9eba668afa..f70893af79 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -1,7 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "cellGem.h" void cellGem_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index c29d15c44c..9662ba0417 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -3,9 +3,9 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "cellGifDec.h" +#include "Emu/SysCalls/lv2/lv2Fs.h" #include "stblib/stb_image.h" #include "stblib/stb_image.c" // (TODO: Should we put this elsewhere?) diff --git a/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp b/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp index 97f94de794..0548c9bf16 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellHttpUtil.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellHttpUtil_init(); Module cellHttpUtil(0x0002, cellHttpUtil_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp index b3dc1bd5da..3a8ba92062 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellImejp.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellImejp_init(); Module cellImejp(0xf023, cellImejp_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index be776e7456..64eb0696d6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -5,6 +5,7 @@ #include "Emu/SysCalls/Modules.h" #include "cellJpgDec.h" #include "stblib/stb_image.h" +#include "Emu/SysCalls/lv2/lv2Fs.h" //void cellJpgDec_init(); //Module cellJpgDec(0x000f, cellJpgDec_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp index e8aa461f29..c138f37697 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgEnc.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellJpgEnc_init(); Module cellJpgEnc(0x003d, cellJpgEnc_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp b/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp index eef9eb72f7..4b1e6d7a10 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellKey2char.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellKey2char_init(); Module cellKey2char(0x0021, cellKey2char_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp b/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp index 01dd518bba..06bd8d77fa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellLv2dbg.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellLv2dbg_init(); Module cellLv2dbg(0x002e, cellLv2dbg_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp index 23b2a9f61a..a3a665f55e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellMic_init(); Module cellMic(0x0022, cellMic_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 130efd009c..dc958afdc9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -4,6 +4,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/lv2/sys_time.h" #include "rpcs3.h" #include "cellSysutil.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp index 14c64aefd0..82acd368b8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMusicDecode.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellMusicDecode_init(); Module cellMusicDecode(0x004f, cellMusicDecode_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp index 7ded73fc72..d8699348c6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMusicExport.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellMusicExport_init(); Module cellMusicExport(0xf02c, cellMusicExport_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp index 25907207e1..f580c41608 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellOvis.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellOvis_init(); Module cellOvis(0x000b, cellOvis_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp index 9281f3c17b..40c68a32b2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoDecode.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellPhotoDecode_init(); Module cellPhotoDecode(0xf02e, cellPhotoDecode_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp index 71dd6f5bc9..4dd37501d0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoExport.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellPhotoExport_init(); Module cellPhotoExport(0xf029, cellPhotoExport_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp b/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp index c5815b9f5b..3427169d02 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPhotoImport.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellPhotoImport_init(); Module cellPhotoImport(0xf02b, cellPhotoImport_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index d7a03013e7..988cd09c82 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -5,6 +5,7 @@ #include "Emu/SysCalls/Modules.h" #include "cellPngDec.h" #include "stblib/stb_image.h" +#include "Emu/SysCalls/lv2/lv2Fs.h" #include //void cellPngDec_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp index 4b59e80a26..e77f231ad1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngEnc.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellPngEnc_init(); Module cellPngEnc(0x0052, cellPngEnc_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp b/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp index 191c53c1d8..1848a277be 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPrint.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellPrint_init(); Module cellPrint(0xf02a, cellPrint_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp index 6cef6bbf08..c7b59517ed 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellRudp_init(); Module cellRudp(0x0057, cellRudp_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp b/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp index dce0b36acb..ba88dd083c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSailRec.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellSailRec_init(); Module cellSailRec(0xf034, cellSailRec_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp index bcc77d5466..14959e3d0b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellScreenshot_init(); Module cellScreenshot(0x004e, cellScreenshot_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp index 8ba73eba86..d56f44ce2a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellSearch_init(); Module cellSearch(0xf02f, cellSearch_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp b/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp index ea15f3819f..c29c7e6781 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSheap.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellSheap_init(); Module cellSheap(0x000c, cellSheap_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp b/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp index c0a30dc9f7..cd6d3b7e45 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSsl.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellSsl_init(); Module cellSsl(0x0003, cellSsl_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp b/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp index 467f82d29d..ff0612316b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSubdisplay.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellSubdisplay_init(); Module cellSubdisplay(0x0034, cellSubdisplay_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 0f44d19821..be77ae600f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -3,6 +3,8 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/lv2/sys_process.h" +#include "Emu/Event.h" #include "cellSync.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index 1817f3c1b6..1a7017de43 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellSync2_init(); Module cellSync2(0x0055, cellSync2_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp index fa4323a05e..07759a9cb4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellUsbd_init(); Module cellUsbd(0x001c, cellUsbd_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp index 9ce3671f2d..e4bb35bcc1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbpspcm.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellUsbpspcm_init(); Module cellUsbpspcm(0x0030, cellUsbpspcm_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp index 63dc1763d3..1b568231fd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVoice.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void cellVoice_init(); Module cellVoice(0x0046, cellVoice_init); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index ad594ad883..a2ac4e5beb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -127,16 +127,16 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_treserved1 = 0; picInfo->reserved2 = 0; - u64 stamp0 = get_system_time(); + //u64 stamp0 = get_system_time(); std::unique_ptr pA(new u8[w*h]); memset(pA.get(), (const u8)ctrlParam->outAlpha, w*h); - u64 stamp1 = get_system_time(); + //u64 stamp1 = get_system_time(); SwsContext* sws = sws_getContext(w, h, AV_PIX_FMT_YUVA420P, ow, oh, AV_PIX_FMT_RGBA, SWS_BILINEAR, NULL, NULL, NULL); - u64 stamp2 = get_system_time(); + //u64 stamp2 = get_system_time(); u8* in_data[4] = { Memory.GetMemFromAddr(inPicBuff_addr), Memory.GetMemFromAddr(inPicBuff_addr + w*h), Memory.GetMemFromAddr(inPicBuff_addr + w*h + w*h / 4), pA.get() }; int in_line[4] = { w, w/2, w/2, w }; @@ -145,7 +145,7 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_t config) if (port.m_is_audio_port_started) { - u64 stamp0 = get_system_time(); + //u64 stamp0 = get_system_time(); memset(mixdata, 0, sizeof(mixdata)); if (surMixerCb) mixerCb->ExecAsCallback(surMixerCb, true, surMixerCbArg, mixcount, 256); - u64 stamp1 = get_system_time(); + //u64 stamp1 = get_system_time(); { std::lock_guard lock(mixer_mutex); @@ -435,7 +435,7 @@ int cellSurMixerCreate(const mem_ptr_t config) } } - u64 stamp2 = get_system_time(); + //u64 stamp2 = get_system_time(); auto buf = (be_t*)&Memory[m_config.m_buffer + (128 * 1024 * SUR_PORT) + (mixcount % port.block) * port.channel * 256 * sizeof(float)]; @@ -445,7 +445,7 @@ int cellSurMixerCreate(const mem_ptr_t config) buf[i] = mixdata[i]; } - u64 stamp3 = get_system_time(); + //u64 stamp3 = get_system_time(); //ConLog.Write("Libmixer perf: start=%lld (cb=%lld, ssp=%lld, finalize=%lld)", stamp0 - m_config.start_time, stamp1 - stamp0, stamp2 - stamp1, stamp3 - stamp2); } diff --git a/rpcs3/Emu/SysCalls/Modules/libsnd3.cpp b/rpcs3/Emu/SysCalls/Modules/libsnd3.cpp index 4e1c84d384..d386b5e709 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsnd3.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libsnd3.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void libsnd3_init(); Module libsnd3("libsnd3", libsnd3_init); diff --git a/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp b/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp index 340d586e24..5f335b1e58 100644 --- a/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libsynth2.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void libsynth2_init(); Module libsynth2("libsynth2", libsynth2_init); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 253001353c..4e3038fb3c 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/FS/vfsDir.h" #include "Crypto/unedat.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp index ba6d779920..3297717004 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" #include "Emu/System.h" #include "cellRtc.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp index db17213a60..8b6dbc76a7 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" #include "cellRtc.h" #include "sceNpCommerce2.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 51c092b9da..3185e257e0 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -5,7 +5,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/FS/vfsDir.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp index dccdecf547..d0f20a9864 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" #include "cellRtc.h" #include "sceNp.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index d09df13b83..2c06cbc7f1 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -3,11 +3,18 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsStreamMemory.h" #include "Emu/SysCalls/lv2/sys_spu.h" +#include "Emu/SysCalls/lv2/sys_lwmutex.h" +#include "Emu/SysCalls/lv2/sys_spinlock.h" +#include "Emu/SysCalls/lv2/sys_prx.h" +#include "Emu/SysCalls/lv2/sys_ppu_thread.h" +#include "Emu/SysCalls/lv2/sys_process.h" +#include "Emu/SysCalls/lv2/sys_time.h" +#include "Emu/SysCalls/lv2/sys_mmapper.h" +#include "Emu/SysCalls/lv2/sys_lwcond.h" #include "Loader/ELF.h" #include "Emu/Cell/RawSPUThread.h" #include "sysPrxForUser.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 494354f181..87b8fe99b8 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -4,9 +4,10 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/lv2/lv2Fs.h" + Module *sys_fs = nullptr; bool sdata_check(u32 version, u32 flags, u64 filesizeInput, u64 filesizeTmp) diff --git a/rpcs3/Emu/SysCalls/Modules/sys_http.cpp b/rpcs3/Emu/SysCalls/Modules/sys_http.cpp index e28671989a..b96bbebafa 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_http.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_http.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" #if 0 -#include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/SC_FUNC.h" void sys_http_init(); Module sys_http(0x0001, sys_http_init); diff --git a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp index 60cd11c39b..37fc397e85 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" //void sys_io_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp index 7885312aae..9923a619cd 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp @@ -3,7 +3,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "sys_net.h" diff --git a/rpcs3/Emu/SysCalls/SC_FUNC.h b/rpcs3/Emu/SysCalls/SC_FUNC.h index 6b9fde794a..413f1a6d7a 100644 --- a/rpcs3/Emu/SysCalls/SC_FUNC.h +++ b/rpcs3/Emu/SysCalls/SC_FUNC.h @@ -1,10 +1,8 @@ #pragma once -#include "Emu/Memory/Memory.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SysCalls.h" -#define RESULT(x) SC_ARGS_1 = (x) +#define RESULT(x) CPU.GPR[3] = (x) class func_caller { @@ -25,7 +23,8 @@ struct get_arg // not fp, not ptr, 1..8 template struct get_arg // ptr, 1..8 { - static __forceinline T func(PPUThread& CPU) { return CPU.GPR[i + 2] ? (T)&Memory[CPU.GPR[i + 2]] : nullptr; } + static_assert(i == 0, "Invalid function argument type: pointer"); + static __forceinline T func(PPUThread& CPU) { return nullptr; } }; template @@ -37,13 +36,14 @@ struct get_arg // fp, 1..12 template struct get_arg // not fp, not ptr, 9..12 { - static __forceinline T func(PPUThread& CPU) { u64 res = Memory.Read64(CPU.GPR[1] + 0x70 + 0x8 * (i - 9)); return (T&)res; } + static __forceinline T func(PPUThread& CPU) { u64 res = CPU.GetStackArg(i); return (T&)res; } }; template struct get_arg // ptr, 9..12 { - static __forceinline T func(PPUThread& CPU) { u64 addr = Memory.Read64(CPU.GPR[1] + 0x70 + 0x8 * (i - 9)); return addr ? (T)&Memory[addr] : nullptr; } + static_assert(i == 0, "Invalid function argument type: pointer"); + static __forceinline T func(PPUThread& CPU) { return nullptr; } }; #define ARG(n) get_arg<((n) > 8), std::is_floating_point::value, std::is_pointer::value, T##n, n>::func(CPU) diff --git a/rpcs3/Emu/SysCalls/Static.cpp b/rpcs3/Emu/SysCalls/Static.cpp index 81d6e52802..e1d206f769 100644 --- a/rpcs3/Emu/SysCalls/Static.cpp +++ b/rpcs3/Emu/SysCalls/Static.cpp @@ -4,7 +4,6 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "Emu/SysCalls/Modules.h" #include "Static.h" diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index c00e6b63f3..ef8a18b00b 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -5,9 +5,34 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/SC_FUNC.h" #include "ModuleManager.h" +#include "lv2/lv2Fs.h" +#include "lv2/sys_cond.h" +#include "lv2/sys_event.h" +#include "lv2/sys_event_flag.h" +#include "lv2/sys_interrupt.h" +#include "lv2/sys_lwcond.h" +#include "lv2/sys_lwmutex.h" +#include "lv2/sys_memory.h" +#include "lv2/sys_mmapper.h" +#include "lv2/sys_ppu_thread.h" +#include "lv2/sys_process.h" +#include "lv2/sys_prx.h" +#include "lv2/sys_rsx.h" +#include "lv2/sys_rwlock.h" +#include "lv2/sys_semaphore.h" +#include "lv2/sys_spinlock.h" +#include "lv2/sys_spu.h" +#include "lv2/sys_time.h" +#include "lv2/sys_timer.h" +#include "lv2/sys_trace.h" +#include "lv2/sys_tty.h" +#include "lv2/sys_vm.h" + +#include "SysCalls.h" + namespace detail{ template<> bool CheckId(u32 id, ID*& _id,const std::string &name) { @@ -20,6 +45,8 @@ static func_caller *null_func = bind_func(default_syscall); static const int kSyscallTableLength = 1024; +extern int cellGcmCallback(u32 context_addr, u32 count); + // UNS = Unused // ROOT = Root // DBG = Debug diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 193d364c53..76d6e80214 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -1,39 +1,9 @@ #pragma once #include "ErrorCodes.h" -#include "Static.h" - -#include "Emu/Memory/Memory.h" - -// Most of the headers below rely on Memory.h -#include "lv2/lv2Fs.h" -#include "lv2/sys_cond.h" -#include "lv2/sys_event.h" -#include "lv2/sys_event_flag.h" -#include "lv2/sys_interrupt.h" -#include "lv2/sys_lwcond.h" -#include "lv2/sys_lwmutex.h" -#include "lv2/sys_memory.h" -#include "lv2/sys_mmapper.h" -#include "lv2/sys_ppu_thread.h" -#include "lv2/sys_process.h" -#include "lv2/sys_prx.h" -#include "lv2/sys_rsx.h" -#include "lv2/sys_rwlock.h" -#include "lv2/sys_semaphore.h" -#include "lv2/sys_spinlock.h" -#include "lv2/sys_spu.h" -#include "lv2/sys_time.h" -#include "lv2/sys_timer.h" -#include "lv2/sys_trace.h" -#include "lv2/sys_tty.h" -#include "lv2/sys_vm.h" - #include "LogBase.h" //#define SYSCALLS_DEBUG -#define declCPU PPUThread& CPU = GetCurrentPPUThread - class SysCallBase; namespace detail{ @@ -84,42 +54,6 @@ public: } }; -//cellGcm (used as lv2 syscall #1023) -extern int cellGcmCallback(u32 context_addr, u32 count); - - -#define UNIMPLEMENTED_FUNC(module) module->Todo("%s", __FUNCTION__) - -#define SC_ARG_0 CPU.GPR[3] -#define SC_ARG_1 CPU.GPR[4] -#define SC_ARG_2 CPU.GPR[5] -#define SC_ARG_3 CPU.GPR[6] -#define SC_ARG_4 CPU.GPR[7] -#define SC_ARG_5 CPU.GPR[8] -#define SC_ARG_6 CPU.GPR[9] -#define SC_ARG_7 CPU.GPR[10] -/* // these definitions are wrong: -#define SC_ARG_8 CPU.GPR[11] -#define SC_ARG_9 CPU.GPR[12] -#define SC_ARG_10 CPU.GPR[13] -#define SC_ARG_11 CPU.GPR[14] -*/ - -#define SC_ARGS_1 SC_ARG_0 -#define SC_ARGS_2 SC_ARGS_1,SC_ARG_1 -#define SC_ARGS_3 SC_ARGS_2,SC_ARG_2 -#define SC_ARGS_4 SC_ARGS_3,SC_ARG_3 -#define SC_ARGS_5 SC_ARGS_4,SC_ARG_4 -#define SC_ARGS_6 SC_ARGS_5,SC_ARG_5 -#define SC_ARGS_7 SC_ARGS_6,SC_ARG_6 -#define SC_ARGS_8 SC_ARGS_7,SC_ARG_7 -/* -#define SC_ARGS_9 SC_ARGS_8,SC_ARG_8 -#define SC_ARGS_10 SC_ARGS_9,SC_ARG_9 -#define SC_ARGS_11 SC_ARGS_10,SC_ARG_10 -#define SC_ARGS_12 SC_ARGS_11,SC_ARG_11 -*/ - extern bool dump_enable; class SysCalls @@ -128,9 +62,3 @@ public: static void DoSyscall(u32 code); static std::string GetHLEFuncName(const u32 fid); }; - -#define REG_SUB(module, group, name, ...) \ - static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ - module->AddFuncSub(group, name ## _table, #name, name) - -#define REG_FUNC(module, name) module->AddFunc(getFunctionId(#name), name) diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 76ab51955f..15f1ee826d 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -1,15 +1,12 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" +//#include "Emu/SysCalls/SysCalls.h" + #include "Emu/SysCalls/Modules.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" - #include "lv2Fs.h" -#include "Emu/SysCalls/SysCalls.h" extern Module *sys_fs; @@ -112,7 +109,7 @@ s32 cellFsOpen(u32 path_addr, s32 flags, mem32_t fd, mem32_t arg, u64 size) } fd = sys_fs->GetNewId(stream, TYPE_FS_FILE); - LOG_NOTICE(HLE, "\"%s\" opened: fd = %d", path.c_str(), fd.GetValue()); + sys_fs->Notice("\"%s\" opened: fd = %d", path.c_str(), fd.GetValue()); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp index e169fcc740..8a99ac7f25 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp @@ -1,10 +1,9 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" - #include "Emu/SysCalls/SysCalls.h" + +#include "Emu/Cell/PPUThread.h" #include "sys_cond.h" SysCallBase sys_cond("sys_cond"); @@ -74,13 +73,13 @@ s32 sys_cond_signal(u32 cond_id) if (u32 target = (mutex->protocol == SYS_SYNC_PRIORITY ? cond->m_queue.pop_prio() : cond->m_queue.pop())) { - cond->signal_stamp = get_system_time(); + //cond->signal_stamp = get_system_time(); cond->signal.lock(target); Emu.GetCPU().NotifyThread(target); if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_cond_signal(id=%d) aborted", cond_id); + sys_cond.Warning("sys_cond_signal(id=%d) aborted", cond_id); } } @@ -102,13 +101,13 @@ s32 sys_cond_signal_all(u32 cond_id) while (u32 target = (mutex->protocol == SYS_SYNC_PRIORITY ? cond->m_queue.pop_prio() : cond->m_queue.pop())) { cond->signaler = GetCurrentCPUThread()->GetId(); - cond->signal_stamp = get_system_time(); + //cond->signal_stamp = get_system_time(); cond->signal.lock(target); Emu.GetCPU().NotifyThread(target); if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_cond_signal_all(id=%d) aborted", cond_id); + sys_cond.Warning("sys_cond_signal_all(id=%d) aborted", cond_id); break; } } @@ -141,14 +140,14 @@ s32 sys_cond_signal_to(u32 cond_id, u32 thread_id) u32 target = thread_id; { - cond->signal_stamp = get_system_time(); + //cond->signal_stamp = get_system_time(); cond->signal.lock(target); Emu.GetCPU().NotifyThread(target); } if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_cond_signal_to(id=%d, to=%d) aborted", cond_id, thread_id); + sys_cond.Warning("sys_cond_signal_to(id=%d, to=%d) aborted", cond_id, thread_id); } return CELL_OK; @@ -189,7 +188,7 @@ s32 sys_cond_wait(u32 cond_id, u64 timeout) { if (cond->signal.unlock(tid, tid) == SMR_OK) { - const u64 stamp2 = get_system_time(); + //const u64 stamp2 = get_system_time(); if (SMutexResult res = mutex->m_mutex.trylock(tid)) { if (res != SMR_FAILED) @@ -231,6 +230,6 @@ s32 sys_cond_wait(u32 cond_id, u64 timeout) } abort: - LOG_WARNING(HLE, "sys_cond_wait(id=%d) aborted", cond_id); + sys_cond.Warning("sys_cond_wait(id=%d) aborted", cond_id); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp index b4d5dd2500..953538decd 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event.cpp @@ -1,9 +1,11 @@ #include "stdafx.h" +#include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/Event.h" +#include "sys_process.h" #include "sys_event.h" SysCallBase sys_event("sys_event"); @@ -235,7 +237,7 @@ s32 sys_event_port_create(mem32_t eport_id, int port_type, u64 name) EventPort* eport = new EventPort(); u32 id = sys_event.GetNewId(eport, TYPE_EVENT_PORT); - eport->name = name ? name : ((u64)sys_process_getpid() << 32) | (u64)id; + eport->name = name ? name : ((u64)process_getpid() << 32) | (u64)id; eport_id = id; sys_event.Warning("*** sys_event_port created: id = %d", id); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp index ef7bd9ff64..2e5a0e479f 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_event_flag.cpp @@ -1,11 +1,10 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" - #include "Emu/SysCalls/SysCalls.h" +#include "Emu/Cell/PPUThread.h" +#include "sys_lwmutex.h" #include "sys_event_flag.h" SysCallBase sys_event_flag("sys_event_flag"); @@ -215,7 +214,7 @@ s32 sys_event_flag_wait(u32 eflag_id, u64 bitptn, u32 mode, mem64_t result, u64 } if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_event_flag_wait(id=%d) aborted", eflag_id); + sys_event_flag.Warning("sys_event_flag_wait(id=%d) aborted", eflag_id); return CELL_OK; } } @@ -334,7 +333,7 @@ s32 sys_event_flag_cancel(u32 eflag_id, mem32_t num) if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_event_flag_cancel(id=%d) aborted", eflag_id); + sys_event_flag.Warning("sys_event_flag_cancel(id=%d) aborted", eflag_id); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp index 9588d06526..5ab4e2caac 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp @@ -1,18 +1,17 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Emu/SysCalls/SysCalls.h" + #include "Emu/Cell/PPUThread.h" #include "Emu/Cell/RawSPUThread.h" -#include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/SysCalls.h" #include "sys_interrupt.h" -static SysCallBase sc_int("sys_interrupt"); +static SysCallBase sys_interrupt("sys_interrupt"); s32 sys_interrupt_tag_destroy(u32 intrtag) { - sc_int.Warning("sys_interrupt_tag_destroy(intrtag=%d)", intrtag); + sys_interrupt.Warning("sys_interrupt_tag_destroy(intrtag=%d)", intrtag); u32 id = intrtag & 0xff; u32 class_id = intrtag >> 8; @@ -39,7 +38,7 @@ s32 sys_interrupt_tag_destroy(u32 intrtag) s32 sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 arg) { - sc_int.Warning("sys_interrupt_thread_establish(ih_addr=0x%x, intrtag=%d, intrthread=%lld, arg=0x%llx)", ih.GetAddr(), intrtag, intrthread, arg); + sys_interrupt.Warning("sys_interrupt_thread_establish(ih_addr=0x%x, intrtag=%d, intrthread=%lld, arg=0x%llx)", ih.GetAddr(), intrtag, intrthread, arg); u32 id = intrtag & 0xff; u32 class_id = intrtag >> 8; @@ -78,7 +77,7 @@ s32 sys_interrupt_thread_establish(mem32_t ih, u32 intrtag, u64 intrthread, u64 s32 sys_interrupt_thread_disestablish(u32 ih) { - sc_int.Todo("sys_interrupt_thread_disestablish(ih=%d)", ih); + sys_interrupt.Todo("sys_interrupt_thread_disestablish(ih=%d)", ih); CPUThread* it = Emu.GetCPU().GetThread(ih); if (!it) @@ -98,7 +97,7 @@ s32 sys_interrupt_thread_disestablish(u32 ih) void sys_interrupt_thread_eoi() { - sc_int.Log("sys_interrupt_thread_eoi()"); + sys_interrupt.Log("sys_interrupt_thread_eoi()"); GetCurrentPPUThread().FastStop(); return; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index 57943453bb..4e368f9ed7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -1,9 +1,9 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" + +#include "Emu/Cell/PPUThread.h" #include "sys_lwmutex.h" #include "sys_lwcond.h" @@ -63,7 +63,7 @@ s32 sys_lwcond_signal(mem_ptr_t lwcond) if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_lwcond_signal(id=%d) aborted", (u32)lwcond->lwcond_queue); + sys_lwcond.Warning("sys_lwcond_signal(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } } @@ -89,7 +89,7 @@ s32 sys_lwcond_signal_all(mem_ptr_t lwcond) if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_lwcond_signal_all(id=%d) aborted", (u32)lwcond->lwcond_queue); + sys_lwcond.Warning("sys_lwcond_signal_all(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } } @@ -123,7 +123,7 @@ s32 sys_lwcond_signal_to(mem_ptr_t lwcond, u32 ppu_thread_id) if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_lwcond_signal_to(id=%d, to=%d) aborted", (u32)lwcond->lwcond_queue, ppu_thread_id); + sys_lwcond.Warning("sys_lwcond_signal_to(id=%d, to=%d) aborted", (u32)lwcond->lwcond_queue, ppu_thread_id); return CELL_OK; } } @@ -213,6 +213,6 @@ s32 sys_lwcond_wait(mem_ptr_t lwcond, u64 timeout) } abort: - LOG_WARNING(HLE, "sys_lwcond_wait(id=%d) aborted", (u32)lwcond->lwcond_queue); + sys_lwcond.Warning("sys_lwcond_wait(id=%d) aborted", (u32)lwcond->lwcond_queue); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index 267b68a0d0..61fb1141c5 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -1,32 +1,34 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" + +#include "Emu/Cell/PPUThread.h" #include "sys_lwmutex.h" -SysCallBase sc_lwmutex("sys_lwmutex"); +SysCallBase sys_lwmutex("sys_lwmutex"); + +// TODO: move SleepQueue somewhere s32 sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_t attr) { - sc_lwmutex.Log("sys_lwmutex_create(lwmutex_addr=0x%x, lwmutex_attr_addr=0x%x)", + sys_lwmutex.Log("sys_lwmutex_create(lwmutex_addr=0x%x, lwmutex_attr_addr=0x%x)", lwmutex.GetAddr(), attr.GetAddr()); switch (attr->attr_recursive.ToBE()) { case se32(SYS_SYNC_RECURSIVE): break; case se32(SYS_SYNC_NOT_RECURSIVE): break; - default: sc_lwmutex.Error("Unknown recursive attribute(0x%x)", (u32)attr->attr_recursive); return CELL_EINVAL; + default: sys_lwmutex.Error("Unknown recursive attribute(0x%x)", (u32)attr->attr_recursive); return CELL_EINVAL; } switch (attr->attr_protocol.ToBE()) { case se32(SYS_SYNC_PRIORITY): break; case se32(SYS_SYNC_RETRY): break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sc_lwmutex.Error("Invalid SYS_SYNC_PRIORITY_INHERIT protocol attr"); return CELL_EINVAL; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_lwmutex.Error("Invalid SYS_SYNC_PRIORITY_INHERIT protocol attr"); return CELL_EINVAL; case se32(SYS_SYNC_FIFO): break; - default: sc_lwmutex.Error("Unknown protocol attribute(0x%x)", (u32)attr->attr_protocol); return CELL_EINVAL; + default: sys_lwmutex.Error("Unknown protocol attribute(0x%x)", (u32)attr->attr_protocol); return CELL_EINVAL; } lwmutex->attribute = attr->attr_protocol | attr->attr_recursive; @@ -36,10 +38,10 @@ s32 sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_tpad = 0; lwmutex->recursive_count = 0; - u32 sq_id = sc_lwmutex.GetNewId(new SleepQueue(attr->name_u64), TYPE_LWMUTEX); + u32 sq_id = sys_lwmutex.GetNewId(new SleepQueue(attr->name_u64), TYPE_LWMUTEX); lwmutex->sleep_queue = sq_id; - sc_lwmutex.Warning("*** lwmutex created [%s] (attribute=0x%x): sq_id = %d", + sys_lwmutex.Warning("*** lwmutex created [%s] (attribute=0x%x): sq_id = %d", std::string(attr->name, 8).c_str(), (u32) lwmutex->attribute, sq_id); return CELL_OK; @@ -47,7 +49,7 @@ s32 sys_lwmutex_create(mem_ptr_t lwmutex, mem_ptr_t lwmutex) { - sc_lwmutex.Warning("sys_lwmutex_destroy(lwmutex_addr=0x%x)", lwmutex.GetAddr()); + sys_lwmutex.Warning("sys_lwmutex_destroy(lwmutex_addr=0x%x)", lwmutex.GetAddr()); u32 sq_id = lwmutex->sleep_queue; if (!Emu.GetIdManager().CheckID(sq_id)) return CELL_ESRCH; @@ -66,7 +68,7 @@ s32 sys_lwmutex_destroy(mem_ptr_t lwmutex) s32 sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout) { - sc_lwmutex.Log("sys_lwmutex_lock(lwmutex_addr=0x%x, timeout=%lld)", lwmutex.GetAddr(), timeout); + sys_lwmutex.Log("sys_lwmutex_lock(lwmutex_addr=0x%x, timeout=%lld)", lwmutex.GetAddr(), timeout); //ConLog.Write("*** lock mutex (addr=0x%x, attr=0x%x, Nrec=%d, owner=%d, waiter=%d)", //lwmutex.GetAddr(), (u32)lwmutex->attribute, (u32)lwmutex->recursive_count, lwmutex->vars.parts.owner.GetOwner(), (u32)lwmutex->waiter); @@ -76,14 +78,14 @@ s32 sys_lwmutex_lock(mem_ptr_t lwmutex, u64 timeout) s32 sys_lwmutex_trylock(mem_ptr_t lwmutex) { - sc_lwmutex.Log("sys_lwmutex_trylock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); + sys_lwmutex.Log("sys_lwmutex_trylock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); return lwmutex->trylock(be_t::MakeFromLE(GetCurrentPPUThread().GetId())); } s32 sys_lwmutex_unlock(mem_ptr_t lwmutex) { - sc_lwmutex.Log("sys_lwmutex_unlock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); + sys_lwmutex.Log("sys_lwmutex_unlock(lwmutex_addr=0x%x)", lwmutex.GetAddr()); //ConLog.Write("*** unlocking mutex (addr=0x%x, attr=0x%x, Nrec=%d, owner=%d, waiter=%d)", //lwmutex.GetAddr(), (u32)lwmutex->attribute, (u32)lwmutex->recursive_count, (u32)lwmutex->vars.parts.owner.GetOwner(), (u32)lwmutex->waiter); @@ -158,7 +160,7 @@ u32 SleepQueue::pop_prio() // SYS_SYNC_PRIORITY u32 SleepQueue::pop_prio_inherit() // (TODO) { - LOG_ERROR(HLE, "TODO: SleepQueue::pop_prio_inherit()"); + sys_lwmutex.Error("TODO: SleepQueue::pop_prio_inherit()"); Emu.Pause(); return 0; } @@ -278,7 +280,7 @@ int sys_lwmutex_t::unlock(be_t tid) { if (!recursive_count || (recursive_count.ToBE() != se32(1) && (attribute.ToBE() & se32(SYS_SYNC_NOT_RECURSIVE)))) { - sc_lwmutex.Error("sys_lwmutex_t::unlock(%d): wrong recursive value fixed (%d)", (u32)sleep_queue, (u32)recursive_count); + sys_lwmutex.Error("sys_lwmutex_t::unlock(%d): wrong recursive value fixed (%d)", (u32)sleep_queue, (u32)recursive_count); recursive_count = 1; } recursive_count -= 1; @@ -329,7 +331,7 @@ int sys_lwmutex_t::lock(be_t tid, u64 timeout) case SMR_TIMEOUT: sq->invalidate(tid); return CELL_ETIMEDOUT; case SMR_ABORT: - if (Emu.IsStopped()) LOG_WARNING(HLE, "sys_lwmutex_t::lock(sq=%d) aborted", (u32)sleep_queue); + if (Emu.IsStopped()) sys_lwmutex.Warning("sys_lwmutex_t::lock(sq=%d) aborted", (u32)sleep_queue); default: sq->invalidate(tid); return CELL_EINVAL; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp index 936b5ff0ac..30035fe135 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp @@ -1,16 +1,16 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "sys_memory.h" #include -SysCallBase sc_mem("memory"); +SysCallBase sys_memory("sys_memory"); s32 sys_memory_allocate(u32 size, u32 flags, u32 alloc_addr_addr) { - sc_mem.Log("sys_memory_allocate(size=0x%x, flags=0x%x)", size, flags); + sys_memory.Log("sys_memory_allocate(size=0x%x, flags=0x%x)", size, flags); // Check page size. u32 addr; @@ -33,7 +33,7 @@ s32 sys_memory_allocate(u32 size, u32 flags, u32 alloc_addr_addr) return CELL_ENOMEM; // Write back the start address of the allocated area. - sc_mem.Log("Memory allocated! [addr: 0x%x, size: 0x%x]", addr, size); + sys_memory.Log("Memory allocated! [addr: 0x%x, size: 0x%x]", addr, size); Memory.Write32(alloc_addr_addr, addr); return CELL_OK; @@ -41,11 +41,11 @@ s32 sys_memory_allocate(u32 size, u32 flags, u32 alloc_addr_addr) s32 sys_memory_allocate_from_container(u32 size, u32 cid, u32 flags, u32 alloc_addr_addr) { - sc_mem.Log("sys_memory_allocate_from_container(size=0x%x, cid=0x%x, flags=0x%x)", size, cid, flags); + sys_memory.Log("sys_memory_allocate_from_container(size=0x%x, cid=0x%x, flags=0x%x)", size, cid, flags); // Check if this container ID is valid. MemoryContainerInfo* ct; - if(!sc_mem.CheckId(cid, ct)) + if (!sys_memory.CheckId(cid, ct)) return CELL_ESRCH; // Check page size. @@ -70,7 +70,7 @@ s32 sys_memory_allocate_from_container(u32 size, u32 cid, u32 flags, u32 alloc_a ct->size = size; // Write back the start address of the allocated area. - sc_mem.Log("Memory allocated! [addr: 0x%x, size: 0x%x]", ct->addr, ct->size); + sys_memory.Log("Memory allocated! [addr: 0x%x, size: 0x%x]", ct->addr, ct->size); Memory.Write32(alloc_addr_addr, ct->addr); return CELL_OK; @@ -78,7 +78,7 @@ s32 sys_memory_allocate_from_container(u32 size, u32 cid, u32 flags, u32 alloc_a s32 sys_memory_free(u32 start_addr) { - sc_mem.Log("sys_memory_free(start_addr=0x%x)", start_addr); + sys_memory.Log("sys_memory_free(start_addr=0x%x)", start_addr); // Release the allocated memory. if(!Memory.Free(start_addr)) @@ -89,7 +89,7 @@ s32 sys_memory_free(u32 start_addr) s32 sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr) { - sc_mem.Warning("sys_memory_get_page_attribute(addr=0x%x, attr_addr=0x%x)", addr, attr.GetAddr()); + sys_memory.Warning("sys_memory_get_page_attribute(addr=0x%x, attr_addr=0x%x)", addr, attr.GetAddr()); // TODO: Implement per thread page attribute setting. attr->attribute = 0; @@ -102,7 +102,7 @@ s32 sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr) s32 sys_memory_get_user_memory_size(mem_ptr_t mem_info) { - sc_mem.Warning("sys_memory_get_user_memory_size(mem_info_addr=0x%x)", mem_info.GetAddr()); + sys_memory.Warning("sys_memory_get_user_memory_size(mem_info_addr=0x%x)", mem_info.GetAddr()); // Fetch the user memory available. mem_info->total_user_memory = Memory.GetUserMemTotalSize(); @@ -112,7 +112,7 @@ s32 sys_memory_get_user_memory_size(mem_ptr_t mem_info) s32 sys_memory_container_create(mem32_t cid, u32 yield_size) { - sc_mem.Warning("sys_memory_container_create(cid_addr=0x%x, yield_size=0x%x)", cid.GetAddr(), yield_size); + sys_memory.Warning("sys_memory_container_create(cid_addr=0x%x, yield_size=0x%x)", cid.GetAddr(), yield_size); yield_size &= ~0xfffff; //round down to 1 MB granularity u64 addr = Memory.Alloc(yield_size, 0x100000); //1 MB alignment @@ -122,20 +122,20 @@ s32 sys_memory_container_create(mem32_t cid, u32 yield_size) // Wrap the allocated memory in a memory container. MemoryContainerInfo *ct = new MemoryContainerInfo(addr, yield_size); - cid = sc_mem.GetNewId(ct, TYPE_MEM); + cid = sys_memory.GetNewId(ct, TYPE_MEM); - sc_mem.Warning("*** memory_container created(addr=0x%llx): id = %d", addr, cid.GetValue()); + sys_memory.Warning("*** memory_container created(addr=0x%llx): id = %d", addr, cid.GetValue()); return CELL_OK; } s32 sys_memory_container_destroy(u32 cid) { - sc_mem.Warning("sys_memory_container_destroy(cid=%d)", cid); + sys_memory.Warning("sys_memory_container_destroy(cid=%d)", cid); // Check if this container ID is valid. MemoryContainerInfo* ct; - if(!sc_mem.CheckId(cid, ct)) + if (!sys_memory.CheckId(cid, ct)) return CELL_ESRCH; // Release the allocated memory and remove the ID. @@ -147,11 +147,11 @@ s32 sys_memory_container_destroy(u32 cid) s32 sys_memory_container_get_size(mem_ptr_t mem_info, u32 cid) { - sc_mem.Warning("sys_memory_container_get_size(mem_info_addr=0x%x, cid=%d)", mem_info.GetAddr(), cid); + sys_memory.Warning("sys_memory_container_get_size(mem_info_addr=0x%x, cid=%d)", mem_info.GetAddr(), cid); // Check if this container ID is valid. MemoryContainerInfo* ct; - if(!sc_mem.CheckId(cid, ct)) + if (!sys_memory.CheckId(cid, ct)) return CELL_ESRCH; // HACK: Return all memory. diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp index 170c063fdc..603e17b6a3 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "sys_memory.h" #include "sys_mmapper.h" #include diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index f07601ae9b..b9e4e57371 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -1,26 +1,25 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -#include "Utilities/SMutex.h" + +#include "Emu/Cell/PPUThread.h" #include "sys_mutex.h" -SysCallBase sys_mtx("sys_mutex"); +SysCallBase sys_mutex("sys_mutex"); Mutex::~Mutex() { if (u32 owner = m_mutex.GetOwner()) { - LOG_NOTICE(HLE, "Mutex(%d) was owned by thread %d (recursive=%d)", id, owner, recursive); + sys_mutex.Notice("Mutex(%d) was owned by thread %d (recursive=%d)", id, owner, recursive); } if (!m_queue.m_mutex.try_lock()) return; for (u32 i = 0; i < m_queue.list.size(); i++) { - if (u32 owner = m_queue.list[i]) LOG_NOTICE(HLE, "Mutex(%d) was waited by thread %d", id, owner); + if (u32 owner = m_queue.list[i]) sys_mutex.Notice("Mutex(%d) was waited by thread %d", id, owner); } m_queue.m_mutex.unlock(); @@ -28,15 +27,15 @@ Mutex::~Mutex() s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) { - sys_mtx.Log("sys_mutex_create(mutex_id_addr=0x%x, attr_addr=0x%x)", mutex_id.GetAddr(), attr.GetAddr()); + sys_mutex.Log("sys_mutex_create(mutex_id_addr=0x%x, attr_addr=0x%x)", mutex_id.GetAddr(), attr.GetAddr()); switch (attr->protocol.ToBE()) { case se32(SYS_SYNC_FIFO): break; case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_mtx.Todo("sys_mutex_create(): SYS_SYNC_PRIORITY_INHERIT"); break; - case se32(SYS_SYNC_RETRY): sys_mtx.Error("sys_mutex_create(): SYS_SYNC_RETRY"); return CELL_EINVAL; - default: sys_mtx.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_mutex.Todo("sys_mutex_create(): SYS_SYNC_PRIORITY_INHERIT"); break; + case se32(SYS_SYNC_RETRY): sys_mutex.Error("sys_mutex_create(): SYS_SYNC_RETRY"); return CELL_EINVAL; + default: sys_mutex.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; } bool is_recursive; @@ -44,23 +43,23 @@ s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) { case se32(SYS_SYNC_RECURSIVE): is_recursive = true; break; case se32(SYS_SYNC_NOT_RECURSIVE): is_recursive = false; break; - default: sys_mtx.Error("Unknown recursive attribute(0x%x)", (u32)attr->recursive); return CELL_EINVAL; + default: sys_mutex.Error("Unknown recursive attribute(0x%x)", (u32)attr->recursive); return CELL_EINVAL; } if (attr->pshared.ToBE() != se32(0x200)) { - sys_mtx.Error("Unknown pshared attribute(0x%x)", (u32)attr->pshared); + sys_mutex.Error("Unknown pshared attribute(0x%x)", (u32)attr->pshared); return CELL_EINVAL; } u32 tid = GetCurrentPPUThread().GetId(); Mutex* mutex = new Mutex((u32)attr->protocol, is_recursive, attr->name_u64); - u32 id = sys_mtx.GetNewId(mutex, TYPE_MUTEX); + u32 id = sys_mutex.GetNewId(mutex, TYPE_MUTEX); mutex->m_mutex.lock(tid); mutex->id = id; mutex_id = id; mutex->m_mutex.unlock(tid); - sys_mtx.Warning("*** mutex created [%s] (protocol=0x%x, recursive=%s): id = %d", + sys_mutex.Warning("*** mutex created [%s] (protocol=0x%x, recursive=%s): id = %d", std::string(attr->name, 8).c_str(), (u32) attr->protocol, (is_recursive ? "true" : "false"), mutex_id.GetValue()); @@ -71,7 +70,7 @@ s32 sys_mutex_create(mem32_t mutex_id, mem_ptr_t attr) s32 sys_mutex_destroy(u32 mutex_id) { - sys_mtx.Warning("sys_mutex_destroy(mutex_id=%d)", mutex_id); + sys_mutex.Warning("sys_mutex_destroy(mutex_id=%d)", mutex_id); Mutex* mutex; if (!Emu.GetIdManager().GetIDData(mutex_id, mutex)) @@ -104,7 +103,7 @@ s32 sys_mutex_destroy(u32 mutex_id) s32 sys_mutex_lock(u32 mutex_id, u64 timeout) { - sys_mtx.Log("sys_mutex_lock(mutex_id=%d, timeout=%lld)", mutex_id, timeout); + sys_mutex.Log("sys_mutex_lock(mutex_id=%d, timeout=%lld)", mutex_id, timeout); Mutex* mutex; if (!Emu.GetIdManager().GetIDData(mutex_id, mutex)) @@ -137,7 +136,7 @@ s32 sys_mutex_lock(u32 mutex_id, u64 timeout) } else { - sys_mtx.Error("sys_mutex_lock(%d): deadlock on invalid thread(%d)", mutex_id, owner); + sys_mutex.Error("sys_mutex_lock(%d): deadlock on invalid thread(%d)", mutex_id, owner); } } @@ -165,7 +164,7 @@ s32 sys_mutex_lock(u32 mutex_id, u64 timeout) abort: if (Emu.IsStopped()) { - sys_mtx.Warning("sys_mutex_lock(id=%d) aborted", mutex_id); + sys_mutex.Warning("sys_mutex_lock(id=%d) aborted", mutex_id); return CELL_OK; } return CELL_ESRCH; @@ -173,7 +172,7 @@ abort: s32 sys_mutex_trylock(u32 mutex_id) { - sys_mtx.Log("sys_mutex_trylock(mutex_id=%d)", mutex_id); + sys_mutex.Log("sys_mutex_trylock(mutex_id=%d)", mutex_id); Mutex* mutex; if (!Emu.GetIdManager().GetIDData(mutex_id, mutex)) @@ -206,7 +205,7 @@ s32 sys_mutex_trylock(u32 mutex_id) } else { - sys_mtx.Error("sys_mutex_trylock(%d): deadlock on invalid thread(%d)", mutex_id, owner); + sys_mutex.Error("sys_mutex_trylock(%d): deadlock on invalid thread(%d)", mutex_id, owner); } } @@ -220,7 +219,7 @@ s32 sys_mutex_trylock(u32 mutex_id) s32 sys_mutex_unlock(u32 mutex_id) { - sys_mtx.Log("sys_mutex_unlock(mutex_id=%d)", mutex_id); + sys_mutex.Log("sys_mutex_unlock(mutex_id=%d)", mutex_id); Mutex* mutex; if (!Emu.GetIdManager().GetIDData(mutex_id, mutex)) @@ -235,7 +234,7 @@ s32 sys_mutex_unlock(u32 mutex_id) { if (!mutex->recursive || (mutex->recursive != 1 && !mutex->is_recursive)) { - sys_mtx.Error("sys_mutex_unlock(%d): wrong recursive value fixed (%d)", mutex_id, mutex->recursive); + sys_mutex.Error("sys_mutex_unlock(%d): wrong recursive value fixed (%d)", mutex_id, mutex->recursive); mutex->recursive = 1; } mutex->recursive--; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index 9a69b5b4b5..7dfba3b29c 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -1,14 +1,12 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" -#include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/SysCalls.h" + +#include "Emu/Cell/PPUThread.h" #include "sys_ppu_thread.h" -extern Module *sysPrxForUser; +static SysCallBase sys_ppu_thread("sys_ppu_thread"); static const u32 PPU_THREAD_ID_INVALID = 0xFFFFFFFFU/*UUUUUUUUUUuuuuuuuuuu~~~~~~~~*/; @@ -19,7 +17,7 @@ void ppu_thread_exit(u64 errorcode) if (thr.owned_mutexes) { - LOG_ERROR(PPU, "Owned mutexes found (%d)", thr.owned_mutexes); + sys_ppu_thread.Error("Owned mutexes found (%d)", thr.owned_mutexes); thr.owned_mutexes = 0; } @@ -29,21 +27,21 @@ void ppu_thread_exit(u64 errorcode) void sys_ppu_thread_exit(u64 errorcode) { - sysPrxForUser->Log("sys_ppu_thread_exit(0x%llx)", errorcode); + sys_ppu_thread.Log("sys_ppu_thread_exit(0x%llx)", errorcode); ppu_thread_exit(errorcode); } void sys_internal_ppu_thread_exit(u64 errorcode) { - sysPrxForUser->Log("sys_internal_ppu_thread_exit(0x%llx)", errorcode); + sys_ppu_thread.Log("sys_internal_ppu_thread_exit(0x%llx)", errorcode); ppu_thread_exit(errorcode); } s32 sys_ppu_thread_yield() { - sysPrxForUser->Log("sys_ppu_thread_yield()"); + sys_ppu_thread.Log("sys_ppu_thread_yield()"); // Note: Or do we actually want to yield? std::this_thread::sleep_for(std::chrono::milliseconds(1)); return CELL_OK; @@ -51,7 +49,7 @@ s32 sys_ppu_thread_yield() s32 sys_ppu_thread_join(u64 thread_id, mem64_t vptr) { - sysPrxForUser->Warning("sys_ppu_thread_join(thread_id=%lld, vptr_addr=0x%x)", thread_id, vptr.GetAddr()); + sys_ppu_thread.Warning("sys_ppu_thread_join(thread_id=%lld, vptr_addr=0x%x)", thread_id, vptr.GetAddr()); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -60,7 +58,7 @@ s32 sys_ppu_thread_join(u64 thread_id, mem64_t vptr) { if (Emu.IsStopped()) { - LOG_WARNING(PPU, "sys_ppu_thread_join(%d) aborted", thread_id); + sys_ppu_thread.Warning("sys_ppu_thread_join(%d) aborted", thread_id); return CELL_OK; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -72,7 +70,7 @@ s32 sys_ppu_thread_join(u64 thread_id, mem64_t vptr) s32 sys_ppu_thread_detach(u64 thread_id) { - sysPrxForUser->Todo("sys_ppu_thread_detach(thread_id=%lld)", thread_id); + sys_ppu_thread.Todo("sys_ppu_thread_detach(thread_id=%lld)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -86,13 +84,13 @@ s32 sys_ppu_thread_detach(u64 thread_id) void sys_ppu_thread_get_join_state(u32 isjoinable_addr) { - sysPrxForUser->Warning("sys_ppu_thread_get_join_state(isjoinable_addr=0x%x)", isjoinable_addr); + sys_ppu_thread.Warning("sys_ppu_thread_get_join_state(isjoinable_addr=0x%x)", isjoinable_addr); Memory.Write32(isjoinable_addr, GetCurrentPPUThread().IsJoinable()); } s32 sys_ppu_thread_set_priority(u64 thread_id, s32 prio) { - sysPrxForUser->Log("sys_ppu_thread_set_priority(thread_id=%lld, prio=%d)", thread_id, prio); + sys_ppu_thread.Log("sys_ppu_thread_set_priority(thread_id=%lld, prio=%d)", thread_id, prio); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -104,7 +102,7 @@ s32 sys_ppu_thread_set_priority(u64 thread_id, s32 prio) s32 sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr) { - sysPrxForUser->Log("sys_ppu_thread_get_priority(thread_id=%lld, prio_addr=0x%x)", thread_id, prio_addr); + sys_ppu_thread.Log("sys_ppu_thread_get_priority(thread_id=%lld, prio_addr=0x%x)", thread_id, prio_addr); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -116,7 +114,7 @@ s32 sys_ppu_thread_get_priority(u64 thread_id, u32 prio_addr) s32 sys_ppu_thread_get_stack_information(u32 info_addr) { - sysPrxForUser->Log("sys_ppu_thread_get_stack_information(info_addr=0x%x)", info_addr); + sys_ppu_thread.Log("sys_ppu_thread_get_stack_information(info_addr=0x%x)", info_addr); declCPU(); @@ -128,7 +126,7 @@ s32 sys_ppu_thread_get_stack_information(u32 info_addr) s32 sys_ppu_thread_stop(u64 thread_id) { - sysPrxForUser->Warning("sys_ppu_thread_stop(thread_id=%lld)", thread_id); + sys_ppu_thread.Warning("sys_ppu_thread_stop(thread_id=%lld)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -140,7 +138,7 @@ s32 sys_ppu_thread_stop(u64 thread_id) s32 sys_ppu_thread_restart(u64 thread_id) { - sysPrxForUser->Warning("sys_ppu_thread_restart(thread_id=%lld)", thread_id); + sys_ppu_thread.Warning("sys_ppu_thread_restart(thread_id=%lld)", thread_id); CPUThread* thr = Emu.GetCPU().GetThread(thread_id); if(!thr) return CELL_ESRCH; @@ -156,7 +154,7 @@ s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 s std::string threadname = ""; if (threadname_addr) threadname = Memory.ReadString(threadname_addr); - sysPrxForUser->Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", + sys_ppu_thread.Log("sys_ppu_thread_create(thread_id_addr=0x%x, entry=0x%x, arg=0x%llx, prio=%d, stacksize=0x%x, flags=0x%llx, threadname_addr=0x%x('%s'))", thread_id.GetAddr(), entry, arg, prio, stacksize, flags, threadname_addr, threadname.c_str()); bool is_joinable = false; @@ -175,7 +173,7 @@ s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 s is_interrupt = true; break; } - default: sysPrxForUser->Error("sys_ppu_thread_create(): unknown flags value (0x%llx)", flags); return CELL_EPERM; + default: sys_ppu_thread.Error("sys_ppu_thread_create(): unknown flags value (0x%llx)", flags); return CELL_EPERM; } CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_PPU); @@ -190,7 +188,7 @@ s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 s new_thread.m_is_interrupt = is_interrupt; new_thread.SetName(threadname); - LOG_NOTICE(PPU, "*** New PPU Thread [%s] (flags=0x%llx, entry=0x%x): id = %d", new_thread.GetName().c_str(), flags, entry, new_thread.GetId()); + sys_ppu_thread.Notice("*** New PPU Thread [%s] (flags=0x%llx, entry=0x%x): id = %d", new_thread.GetName().c_str(), flags, entry, new_thread.GetId()); if (!is_interrupt) { @@ -203,23 +201,18 @@ s32 sys_ppu_thread_create(mem64_t thread_id, u32 entry, u64 arg, s32 prio, u32 s void sys_ppu_thread_once(mem_ptr_t>> once_ctrl, u32 entry) { - sysPrxForUser->Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, entry=0x%x)", once_ctrl.GetAddr(), entry); + sys_ppu_thread.Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, entry=0x%x)", once_ctrl.GetAddr(), entry); be_t old = be_t::MakeFromBE(se32(SYS_PPU_THREAD_ONCE_INIT)); if (once_ctrl->compare_exchange_weak(old, be_t::MakeFromBE(se32(SYS_PPU_THREAD_DONE_INIT)))) { - CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_PPU); - new_thread.SetEntry(entry); - new_thread.Run(); - new_thread.Exec(); - - while (new_thread.IsAlive()) SM_Sleep(); + GetCurrentPPUThread().FastCall2(Memory.Read32(entry), Memory.Read32(entry + 4)); } } s32 sys_ppu_thread_get_id(const u32 id_addr) { - sysPrxForUser->Log("sys_ppu_thread_get_id(id_addr=0x%x)", id_addr); + sys_ppu_thread.Log("sys_ppu_thread_get_id(id_addr=0x%x)", id_addr); Memory.Write64(id_addr, GetCurrentPPUThread().GetId()); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp index 02ff2174b6..0f0c4d0d54 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_process.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_process.cpp @@ -1,12 +1,12 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "sys_process.h" #include "rpcs3.h" -SysCallBase sc_p("Process"); +SysCallBase sys_process("sys_process"); s32 process_getpid() { @@ -16,21 +16,21 @@ s32 process_getpid() s32 sys_process_getpid() { - sc_p.Log("sys_process_getpid() -> 1"); + sys_process.Log("sys_process_getpid() -> 1"); return process_getpid(); } s32 sys_process_getppid() { - sc_p.Todo("sys_process_getppid() -> 0"); + sys_process.Todo("sys_process_getppid() -> 0"); return 0; } s32 sys_process_exit(s32 errorcode) { - sc_p.Warning("sys_process_exit(%d)", errorcode); + sys_process.Warning("sys_process_exit(%d)", errorcode); Emu.Pause(); - LOG_SUCCESS(HLE, "Process finished"); + sys_process.Success("Process finished"); wxGetApp().CallAfter([]() { Emu.Stop(); @@ -51,14 +51,14 @@ void sys_game_process_exitspawn( u32 prio, u64 flags ) { - sc_p.Todo("sys_game_process_exitspawn()"); - sc_p.Warning("path: %s", Memory.ReadString(path_addr).c_str()); - sc_p.Warning("argv: 0x%x", argv_addr); - sc_p.Warning("envp: 0x%x", envp_addr); - sc_p.Warning("data: 0x%x", data_addr); - sc_p.Warning("data_size: 0x%x", data_size); - sc_p.Warning("prio: %d", prio); - sc_p.Warning("flags: %d", flags); + sys_process.Todo("sys_game_process_exitspawn()"); + sys_process.Warning("path: %s", Memory.ReadString(path_addr).c_str()); + sys_process.Warning("argv: 0x%x", argv_addr); + sys_process.Warning("envp: 0x%x", envp_addr); + sys_process.Warning("data: 0x%x", data_addr); + sys_process.Warning("data_size: 0x%x", data_size); + sys_process.Warning("prio: %d", prio); + sys_process.Warning("flags: %d", flags); std::string path = Memory.ReadString(path_addr); std::vector argv; @@ -78,10 +78,10 @@ void sys_game_process_exitspawn( } for (auto &arg : argv){ - sc_p.Log("argument: %s", arg.c_str()); + sys_process.Log("argument: %s", arg.c_str()); } for (auto &en : env){ - sc_p.Log("env_argument: %s", en.c_str()); + sys_process.Log("env_argument: %s", en.c_str()); } //TODO: execute the file in with the args in argv //and the environment parameters in envp and copy the data @@ -99,14 +99,14 @@ void sys_game_process_exitspawn2( u32 prio, u64 flags) { - sc_p.Todo("sys_game_process_exitspawn2"); - sc_p.Warning("path: %s", Memory.ReadString(path_addr).c_str()); - sc_p.Warning("argv: 0x%x", argv_addr); - sc_p.Warning("envp: 0x%x", envp_addr); - sc_p.Warning("data: 0x%x", data_addr); - sc_p.Warning("data_size: 0x%x", data_size); - sc_p.Warning("prio: %d", prio); - sc_p.Warning("flags: %d", flags); + sys_process.Todo("sys_game_process_exitspawn2"); + sys_process.Warning("path: %s", Memory.ReadString(path_addr).c_str()); + sys_process.Warning("argv: 0x%x", argv_addr); + sys_process.Warning("envp: 0x%x", envp_addr); + sys_process.Warning("data: 0x%x", data_addr); + sys_process.Warning("data_size: 0x%x", data_size); + sys_process.Warning("prio: %d", prio); + sys_process.Warning("flags: %d", flags); std::string path = Memory.ReadString(path_addr); std::vector argv; @@ -126,10 +126,10 @@ void sys_game_process_exitspawn2( } for (auto &arg : argv){ - sc_p.Log("argument: %s", arg.c_str()); + sys_process.Log("argument: %s", arg.c_str()); } for (auto &en : env){ - sc_p.Log("env_argument: %s", en.c_str()); + sys_process.Log("env_argument: %s", en.c_str()); } //TODO: execute the file in with the args in argv //and the environment parameters in envp and copy the data @@ -140,7 +140,7 @@ void sys_game_process_exitspawn2( s32 sys_process_get_number_of_object(u32 object, mem32_t nump) { - sc_p.Warning("sys_process_get_number_of_object(object=%d, nump_addr=0x%x)", + sys_process.Warning("sys_process_get_number_of_object(object=%d, nump_addr=0x%x)", object, nump.GetAddr()); switch(object) @@ -175,7 +175,7 @@ s32 sys_process_get_number_of_object(u32 object, mem32_t nump) s32 sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_size) { - sc_p.Todo("sys_process_get_id(object=%d, buffer_addr=0x%x, size=%d, set_size_addr=0x%x)", + sys_process.Todo("sys_process_get_id(object=%d, buffer_addr=0x%x, size=%d, set_size_addr=0x%x)", object, buffer.GetAddr(), size, set_size.GetAddr()); switch(object) @@ -219,7 +219,7 @@ s32 sys_process_get_id(u32 object, mem32_ptr_t buffer, u32 size, mem32_t set_siz s32 sys_process_get_paramsfo(mem8_ptr_t buffer) { - sc_p.Todo("sys_process_get_paramsfo(buffer_addr=0x%x) -> CELL_ENOENT", buffer.GetAddr()); + sys_process.Todo("sys_process_get_paramsfo(buffer_addr=0x%x) -> CELL_ENOENT", buffer.GetAddr()); return CELL_ENOENT; /*//Before uncommenting this code, we should check if it is actually working. @@ -246,7 +246,7 @@ s32 process_get_sdk_version(u32 pid, s32& ver) s32 sys_process_get_sdk_version(u32 pid, mem32_t version) { - sc_p.Warning("sys_process_get_sdk_version(pid=%d, version_addr=0x%x)", pid, version.GetAddr()); + sys_process.Warning("sys_process_get_sdk_version(pid=%d, version_addr=0x%x)", pid, version.GetAddr()); s32 sdk_ver; s32 ret = process_get_sdk_version(pid, sdk_ver); @@ -263,33 +263,33 @@ s32 sys_process_get_sdk_version(u32 pid, mem32_t version) s32 sys_process_kill(u32 pid) { - sc_p.Todo("sys_process_kill(pid=%d)", pid); + sys_process.Todo("sys_process_kill(pid=%d)", pid); return CELL_OK; } s32 sys_process_wait_for_child(u32 pid, mem32_t status, u64 unk) { - sc_p.Todo("sys_process_wait_for_child(pid=%d, status_addr=0x%x, unk=0x%llx", + sys_process.Todo("sys_process_wait_for_child(pid=%d, status_addr=0x%x, unk=0x%llx", pid, status.GetAddr(), unk); return CELL_OK; } s32 sys_process_wait_for_child2(u64 unk1, u64 unk2, u64 unk3, u64 unk4, u64 unk5, u64 unk6) { - sc_p.Todo("sys_process_wait_for_child2(unk1=0x%llx, unk2=0x%llx, unk3=0x%llx, unk4=0x%llx, unk5=0x%llx, unk6=0x%llx)", + sys_process.Todo("sys_process_wait_for_child2(unk1=0x%llx, unk2=0x%llx, unk3=0x%llx, unk4=0x%llx, unk5=0x%llx, unk6=0x%llx)", unk1, unk2, unk3, unk4, unk5, unk6); return CELL_OK; } s32 sys_process_get_status(u64 unk) { - sc_p.Todo("sys_process_get_status(unk=0x%llx)", unk); + sys_process.Todo("sys_process_get_status(unk=0x%llx)", unk); //Memory.Write32(CPU.GPR[4], GetPPUThreadStatus(CPU)); return CELL_OK; } s32 sys_process_detach_child(u64 unk) { - sc_p.Todo("sys_process_detach_child(unk=0x%llx)", unk); + sys_process.Todo("sys_process_detach_child(unk=0x%llx)", unk); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index 5e8370b730..1da8a4cf0b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "Emu/FS/vfsFile.h" #include "Crypto/unself.h" #include "sys_prx.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp index 1b65fdd5ea..7ffba5fd2c 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rsx.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "sys_rsx.h" SysCallBase sys_rsx("sys_rsx"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp index 593b0ad532..187349b5a2 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_rwlock.cpp @@ -1,8 +1,10 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Cell/PPUThread.h" +#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + +#include "Emu/Cell/PPUThread.h" +#include "sys_lwmutex.h" #include "sys_rwlock.h" SysCallBase sys_rwlock("sys_rwlock"); @@ -69,7 +71,7 @@ s32 sys_rwlock_rlock(u32 rw_lock_id, u64 timeout) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_rwlock_rlock(rw_lock_id=%d, ...) aborted", rw_lock_id); + sys_rwlock.Warning("sys_rwlock_rlock(rw_lock_id=%d, ...) aborted", rw_lock_id); return CELL_ETIMEDOUT; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -132,7 +134,7 @@ s32 sys_rwlock_wlock(u32 rw_lock_id, u64 timeout) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_rwlock_wlock(rw_lock_id=%d, ...) aborted", rw_lock_id); + sys_rwlock.Warning("sys_rwlock_wlock(rw_lock_id=%d, ...) aborted", rw_lock_id); return CELL_ETIMEDOUT; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index d402105eee..aebb57dff7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -1,28 +1,29 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "Emu/Cell/PPUThread.h" #include "sys_semaphore.h" #include "sys_time.h" +//#include "Utilities/SMutex.h" -SysCallBase sys_sem("sys_semaphore"); +SysCallBase sys_semaphore("sys_semaphore"); s32 sys_semaphore_create(mem32_t sem, mem_ptr_t attr, int initial_count, int max_count) { - sys_sem.Warning("sys_semaphore_create(sem_addr=0x%x, attr_addr=0x%x, initial_count=%d, max_count=%d)", + sys_semaphore.Warning("sys_semaphore_create(sem_addr=0x%x, attr_addr=0x%x, initial_count=%d, max_count=%d)", sem.GetAddr(), attr.GetAddr(), initial_count, max_count); if (max_count <= 0 || initial_count > max_count || initial_count < 0) { - sys_sem.Error("sys_semaphore_create(): invalid parameters (initial_count=%d, max_count=%d)", initial_count, max_count); + sys_semaphore.Error("sys_semaphore_create(): invalid parameters (initial_count=%d, max_count=%d)", initial_count, max_count); return CELL_EINVAL; } if (attr->pshared.ToBE() != se32(0x200)) { - sys_sem.Error("sys_semaphore_create(): invalid pshared value(0x%x)", (u32)attr->pshared); + sys_semaphore.Error("sys_semaphore_create(): invalid pshared value(0x%x)", (u32)attr->pshared); return CELL_EINVAL; } @@ -30,13 +31,13 @@ s32 sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i { case se32(SYS_SYNC_FIFO): break; case se32(SYS_SYNC_PRIORITY): break; - case se32(SYS_SYNC_PRIORITY_INHERIT): sys_sem.Todo("SYS_SYNC_PRIORITY_INHERIT"); break; - case se32(SYS_SYNC_RETRY): sys_sem.Error("SYS_SYNC_RETRY"); return CELL_EINVAL; - default: sys_sem.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; + case se32(SYS_SYNC_PRIORITY_INHERIT): sys_semaphore.Todo("SYS_SYNC_PRIORITY_INHERIT"); break; + case se32(SYS_SYNC_RETRY): sys_semaphore.Error("SYS_SYNC_RETRY"); return CELL_EINVAL; + default: sys_semaphore.Error("Unknown protocol attribute(0x%x)", (u32)attr->protocol); return CELL_EINVAL; } - sem = sys_sem.GetNewId(new Semaphore(initial_count, max_count, attr->protocol, attr->name_u64), TYPE_SEMAPHORE); - LOG_NOTICE(HLE, "*** semaphore created [%s] (protocol=0x%x): id = %d", + sem = sys_semaphore.GetNewId(new Semaphore(initial_count, max_count, attr->protocol, attr->name_u64), TYPE_SEMAPHORE); + sys_semaphore.Notice("*** semaphore created [%s] (protocol=0x%x): id = %d", std::string(attr->name, 8).c_str(), (u32)attr->protocol, sem.GetValue()); return CELL_OK; @@ -44,7 +45,7 @@ s32 sys_semaphore_create(mem32_t sem, mem_ptr_t attr, i s32 sys_semaphore_destroy(u32 sem_id) { - sys_sem.Warning("sys_semaphore_destroy(sem_id=%d)", sem_id); + sys_semaphore.Warning("sys_semaphore_destroy(sem_id=%d)", sem_id); Semaphore* sem; if (!Emu.GetIdManager().GetIDData(sem_id, sem)) @@ -63,7 +64,7 @@ s32 sys_semaphore_destroy(u32 sem_id) s32 sys_semaphore_wait(u32 sem_id, u64 timeout) { - sys_sem.Log("sys_semaphore_wait(sem_id=%d, timeout=%lld)", sem_id, timeout); + sys_semaphore.Log("sys_semaphore_wait(sem_id=%d, timeout=%lld)", sem_id, timeout); Semaphore* sem; if (!Emu.GetIdManager().GetIDData(sem_id, sem)) @@ -88,7 +89,7 @@ s32 sys_semaphore_wait(u32 sem_id, u64 timeout) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_semaphore_wait(%d) aborted", sem_id); + sys_semaphore.Warning("sys_semaphore_wait(%d) aborted", sem_id); return CELL_OK; } @@ -117,7 +118,7 @@ s32 sys_semaphore_wait(u32 sem_id, u64 timeout) s32 sys_semaphore_trywait(u32 sem_id) { - sys_sem.Log("sys_semaphore_trywait(sem_id=%d)", sem_id); + sys_semaphore.Log("sys_semaphore_trywait(sem_id=%d)", sem_id); Semaphore* sem; if (!Emu.GetIdManager().GetIDData(sem_id, sem)) @@ -140,7 +141,7 @@ s32 sys_semaphore_trywait(u32 sem_id) s32 sys_semaphore_post(u32 sem_id, int count) { - sys_sem.Log("sys_semaphore_post(sem_id=%d, count=%d)", sem_id, count); + sys_semaphore.Log("sys_semaphore_post(sem_id=%d, count=%d)", sem_id, count); Semaphore* sem; if (!Emu.GetIdManager().GetIDData(sem_id, sem)) @@ -162,7 +163,7 @@ s32 sys_semaphore_post(u32 sem_id, int count) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_semaphore_post(%d) aborted", sem_id); + sys_semaphore.Warning("sys_semaphore_post(%d) aborted", sem_id); return CELL_OK; } @@ -192,7 +193,7 @@ s32 sys_semaphore_post(u32 sem_id, int count) s32 sys_semaphore_get_value(u32 sem_id, mem32_t count) { - sys_sem.Log("sys_semaphore_get_value(sem_id=%d, count_addr=0x%x)", sem_id, count.GetAddr()); + sys_semaphore.Log("sys_semaphore_get_value(sem_id=%d, count_addr=0x%x)", sem_id, count.GetAddr()); Semaphore* sem; if (!Emu.GetIdManager().GetIDData(sem_id, sem)) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.h b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.h index 653f46502a..e78165d989 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.h @@ -1,5 +1,7 @@ #pragma once +#include "sys_lwmutex.h" + struct sys_semaphore_attribute { be_t protocol; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp index 26462efd71..454b23572b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp @@ -1,8 +1,6 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" #include "sys_spinlock.h" @@ -35,7 +33,7 @@ void sys_spinlock_lock(mem_ptr_t>> lock) if (Emu.IsStopped()) { - LOG_WARNING(HLE, "sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); + sys_spinlock.Warning("sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); break; } } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index e14a3948b1..ddc53e80e7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -1,15 +1,15 @@ #include "stdafx.h" -#include "Emu/System.h" #include "Emu/Memory/Memory.h" -#include "Emu/FS/vfsFile.h" -#include "sys_spu.h" +#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "Loader/ELF.h" + #include "Emu/Cell/RawSPUThread.h" +#include "Emu/FS/vfsFile.h" +#include "Loader/ELF.h" +#include "sys_spu.h" #include -static SysCallBase sc_spu("sys_spu"); -extern SysCallBase sys_event; +static SysCallBase sys_spu("sys_spu"); u32 LoadSpuImage(vfsStream& stream, u32& spu_ep) { @@ -26,12 +26,12 @@ u32 LoadSpuImage(vfsStream& stream, u32& spu_ep) s32 sys_spu_image_open(mem_ptr_t img, u32 path_addr) { const std::string path = Memory.ReadString(path_addr); - sc_spu.Warning("sys_spu_image_open(img_addr=0x%x, path_addr=0x%x [%s])", img.GetAddr(), path_addr, path.c_str()); + sys_spu.Warning("sys_spu_image_open(img_addr=0x%x, path_addr=0x%x [%s])", img.GetAddr(), path_addr, path.c_str()); vfsFile f(path); if(!f.IsOpened()) { - sc_spu.Error("sys_spu_image_open error: '%s' not found!", path.c_str()); + sys_spu.Error("sys_spu_image_open error: '%s' not found!", path.c_str()); return CELL_ENOENT; } @@ -49,7 +49,7 @@ s32 sys_spu_image_open(mem_ptr_t img, u32 path_addr) //172 s32 sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t img, mem_ptr_t attr, mem_ptr_t arg) { - sc_spu.Warning("sys_spu_thread_initialize(thread_addr=0x%x, group=0x%x, spu_num=%d, img_addr=0x%x, attr_addr=0x%x, arg_addr=0x%x)", + sys_spu.Warning("sys_spu_thread_initialize(thread_addr=0x%x, group=0x%x, spu_num=%d, img_addr=0x%x, attr_addr=0x%x, arg_addr=0x%x)", thread.GetAddr(), group, spu_num, img.GetAddr(), attr.GetAddr(), arg.GetAddr()); SpuGroupInfo* group_info; @@ -99,7 +99,7 @@ s32 sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t< thread = group_info->list[spu_num] = new_thread.GetId(); (*(SPUThread*)&new_thread).group = group_info; - sc_spu.Warning("*** New SPU Thread [%s] (img_offset=0x%x, ls_offset=0x%x, ep=0x%x, a1=0x%llx, a2=0x%llx, a3=0x%llx, a4=0x%llx): id=%d", + sys_spu.Warning("*** New SPU Thread [%s] (img_offset=0x%x, ls_offset=0x%x, ep=0x%x, a1=0x%llx, a2=0x%llx, a3=0x%llx, a4=0x%llx): id=%d", (attr->name_addr ? name.c_str() : ""), (u32) img->segs_addr, ((SPUThread&) new_thread).dmac.ls_offset, spu_ep, a1, a2, a3, a4, thread.GetValue()); return CELL_OK; @@ -108,7 +108,7 @@ s32 sys_spu_thread_initialize(mem32_t thread, u32 group, u32 spu_num, mem_ptr_t< //166 s32 sys_spu_thread_set_argument(u32 id, mem_ptr_t arg) { - sc_spu.Warning("sys_spu_thread_set_argument(id=%d, arg_addr=0x%x)", id, arg.GetAddr()); + sys_spu.Warning("sys_spu_thread_set_argument(id=%d, arg_addr=0x%x)", id, arg.GetAddr()); CPUThread* thr = Emu.GetCPU().GetThread(id); if(!thr || thr->GetType() != CPU_THREAD_SPU) @@ -127,7 +127,7 @@ s32 sys_spu_thread_set_argument(u32 id, mem_ptr_t arg) //165 s32 sys_spu_thread_get_exit_status(u32 id, mem32_t status) { - sc_spu.Warning("sys_spu_thread_get_exit_status(id=%d, status_addr=0x%x)", id, status.GetAddr()); + sys_spu.Warning("sys_spu_thread_get_exit_status(id=%d, status_addr=0x%x)", id, status.GetAddr()); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -149,7 +149,7 @@ s32 sys_spu_thread_get_exit_status(u32 id, mem32_t status) //171 s32 sys_spu_thread_group_destroy(u32 id) { - sc_spu.Warning("sys_spu_thread_group_destroy(id=%d)", id); + sys_spu.Warning("sys_spu_thread_group_destroy(id=%d)", id); SpuGroupInfo* group_info; if(!Emu.GetIdManager().GetIDData(id, group_info)) @@ -165,7 +165,7 @@ s32 sys_spu_thread_group_destroy(u32 id) if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_INITIALIZED) && (group_info->m_state != SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED)) { - sc_spu.Error("sys_spu_thread_group_destroy(id=%d) is not in NOT_INITIALIZED / INITIALIZED, state=%d", id, group_info->m_state); + sys_spu.Error("sys_spu_thread_group_destroy(id=%d) is not in NOT_INITIALIZED / INITIALIZED, state=%d", id, group_info->m_state); return CELL_ESTAT; //Indeed this should not be encountered. If program itself all right. } //SET BUSY @@ -188,7 +188,7 @@ s32 sys_spu_thread_group_destroy(u32 id) //173 s32 sys_spu_thread_group_start(u32 id) { - sc_spu.Warning("sys_spu_thread_group_start(id=%d)", id); + sys_spu.Warning("sys_spu_thread_group_start(id=%d)", id); SpuGroupInfo* group_info; if(!Emu.GetIdManager().GetIDData(id, group_info)) @@ -224,7 +224,7 @@ s32 sys_spu_thread_group_start(u32 id) //174 s32 sys_spu_thread_group_suspend(u32 id) { - sc_spu.Log("sys_spu_thread_group_suspend(id=%d)", id); + sys_spu.Log("sys_spu_thread_group_suspend(id=%d)", id); SpuGroupInfo* group_info; if(!Emu.GetIdManager().GetIDData(id, group_info)) @@ -271,7 +271,7 @@ s32 sys_spu_thread_group_suspend(u32 id) //175 s32 sys_spu_thread_group_resume(u32 id) { - sc_spu.Log("sys_spu_thread_group_resume(id=%d)", id); + sys_spu.Log("sys_spu_thread_group_resume(id=%d)", id); SpuGroupInfo* group_info; if(!Emu.GetIdManager().GetIDData(id, group_info)) @@ -319,7 +319,7 @@ s32 sys_spu_thread_group_resume(u32 id) //176: Left doing nothing, indeed s32 sys_spu_thread_group_yield(u32 id) { - sc_spu.Error("sys_spu_thread_group_yield(id=%d)", id); + sys_spu.Error("sys_spu_thread_group_yield(id=%d)", id); SpuGroupInfo* group_info; if (!Emu.GetIdManager().GetIDData(id, group_info)) @@ -362,7 +362,7 @@ s32 sys_spu_thread_group_yield(u32 id) //177: Left omit the EPERM check. s32 sys_spu_thread_group_terminate(u32 id, int value) { - sc_spu.Error("sys_spu_thread_group_terminate(id=%d, value=%d)", id, value); + sys_spu.Error("sys_spu_thread_group_terminate(id=%d, value=%d)", id, value); SpuGroupInfo* group_info; if (!Emu.GetIdManager().GetIDData(id, group_info)) @@ -401,7 +401,7 @@ s32 sys_spu_thread_group_terminate(u32 id, int value) //170 s32 sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t attr) { - sc_spu.Warning("sys_spu_thread_group_create(id_addr=0x%x, num=%d, prio=%d, attr_addr=0x%x)", + sys_spu.Warning("sys_spu_thread_group_create(id_addr=0x%x, num=%d, prio=%d, attr_addr=0x%x)", id.GetAddr(), num, prio, attr.GetAddr()); if (num > 256) return CELL_EINVAL; @@ -410,9 +410,9 @@ s32 sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_tname_addr, attr->name_len); - id = sc_spu.GetNewId(new SpuGroupInfo(name, num, prio, attr->type, attr->ct)); + id = sys_spu.GetNewId(new SpuGroupInfo(name, num, prio, attr->type, attr->ct)); - sc_spu.Warning("*** SPU Thread Group created [%s] (type=0x%x, option.ct=0x%x): id=%d", + sys_spu.Warning("*** SPU Thread Group created [%s] (type=0x%x, option.ct=0x%x): id=%d", name.c_str(), (int)attr->type, (u32)attr->ct, id.GetValue()); return CELL_OK; @@ -421,7 +421,7 @@ s32 sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t 5) { @@ -482,7 +482,7 @@ s32 sys_spu_initialize(u32 max_usable_spu, u32 max_raw_spu) //181 s32 sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type) { - sc_spu.Log("sys_spu_thread_write_ls(id=%d, address=0x%x, value=0x%llx, type=0x%x)", + sys_spu.Log("sys_spu_thread_write_ls(id=%d, address=0x%x, value=0x%llx, type=0x%x)", id, address, value, type); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -515,7 +515,7 @@ s32 sys_spu_thread_write_ls(u32 id, u32 address, u64 value, u32 type) //182 s32 sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type) { - sc_spu.Log("sys_spu_thread_read_ls(id=%d, address=0x%x, value_addr=0x%x, type=0x%x)", + sys_spu.Log("sys_spu_thread_read_ls(id=%d, address=0x%x, value_addr=0x%x, type=0x%x)", id, address, value.GetAddr(), type); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -548,7 +548,7 @@ s32 sys_spu_thread_read_ls(u32 id, u32 address, mem64_t value, u32 type) //190 s32 sys_spu_thread_write_spu_mb(u32 id, u32 value) { - sc_spu.Log("sys_spu_thread_write_spu_mb(id=%d, value=0x%x)", id, value); + sys_spu.Log("sys_spu_thread_write_spu_mb(id=%d, value=0x%x)", id, value); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -565,7 +565,7 @@ s32 sys_spu_thread_write_spu_mb(u32 id, u32 value) //187 s32 sys_spu_thread_set_spu_cfg(u32 id, u64 value) { - sc_spu.Warning("sys_spu_thread_set_spu_cfg(id=%d, value=0x%x)", id, value); + sys_spu.Warning("sys_spu_thread_set_spu_cfg(id=%d, value=0x%x)", id, value); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -587,7 +587,7 @@ s32 sys_spu_thread_set_spu_cfg(u32 id, u64 value) //188 s32 sys_spu_thread_get_spu_cfg(u32 id, mem64_t value) { - sc_spu.Warning("sys_spu_thread_get_spu_cfg(id=%d, value_addr=0x%x)", id, value.GetAddr()); + sys_spu.Warning("sys_spu_thread_get_spu_cfg(id=%d, value_addr=0x%x)", id, value.GetAddr()); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -604,7 +604,7 @@ s32 sys_spu_thread_get_spu_cfg(u32 id, mem64_t value) //184 s32 sys_spu_thread_write_snr(u32 id, u32 number, u32 value) { - sc_spu.Log("sys_spu_thread_write_snr(id=%d, number=%d, value=0x%x)", id, number, value); + sys_spu.Log("sys_spu_thread_write_snr(id=%d, number=%d, value=0x%x)", id, number, value); CPUThread* thr = Emu.GetCPU().GetThread(id); if(!thr || thr->GetType() != CPU_THREAD_SPU) @@ -624,14 +624,14 @@ s32 sys_spu_thread_write_snr(u32 id, u32 number, u32 value) s32 sys_spu_thread_group_connect_event(u32 id, u32 eq, u32 et) { - sc_spu.Todo("sys_spu_thread_group_connect_event(id=%d, eq=%d, et=0x%x)", id, eq, et); + sys_spu.Todo("sys_spu_thread_group_connect_event(id=%d, eq=%d, et=0x%x)", id, eq, et); return CELL_OK; } s32 sys_spu_thread_group_disconnect_event(u32 id, u32 et) { - sc_spu.Todo("sys_spu_thread_group_disconnect_event(id=%d, et=0x%x)", id, et); + sys_spu.Todo("sys_spu_thread_group_disconnect_event(id=%d, et=0x%x)", id, et); return CELL_OK; } @@ -646,7 +646,7 @@ s32 sys_spu_thread_tryreceive_event(u32 spuq_num, mem32_t d1, mem32_t d2, mem32_ s32 sys_spu_thread_connect_event(u32 id, u32 eq_id, u32 et, u8 spup) { - sc_spu.Warning("sys_spu_thread_connect_event(id=%d, eq_id=%d, event_type=0x%x, spup=%d)", id, eq_id, et, spup); + sys_spu.Warning("sys_spu_thread_connect_event(id=%d, eq_id=%d, event_type=0x%x, spup=%d)", id, eq_id, et, spup); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -663,13 +663,13 @@ s32 sys_spu_thread_connect_event(u32 id, u32 eq_id, u32 et, u8 spup) if (spup > 63) { - sc_spu.Error("sys_spu_thread_connect_event: invalid spup (%d)", spup); + sys_spu.Error("sys_spu_thread_connect_event: invalid spup (%d)", spup); return CELL_EINVAL; } if (et != SYS_SPU_THREAD_EVENT_USER) { - sc_spu.Error("sys_spu_thread_connect_event: unsupported event type (0x%x)", et); + sys_spu.Error("sys_spu_thread_connect_event: unsupported event type (0x%x)", et); return CELL_EINVAL; } @@ -695,7 +695,7 @@ s32 sys_spu_thread_connect_event(u32 id, u32 eq_id, u32 et, u8 spup) // s32 sys_spu_thread_disconnect_event(u32 id, u32 et, u8 spup) { - sc_spu.Warning("sys_spu_thread_disconnect_event(id=%d, event_type=0x%x, spup=%d)", id, et, spup); + sys_spu.Warning("sys_spu_thread_disconnect_event(id=%d, event_type=0x%x, spup=%d)", id, et, spup); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -706,13 +706,13 @@ s32 sys_spu_thread_disconnect_event(u32 id, u32 et, u8 spup) if (spup > 63) { - sc_spu.Error("sys_spu_thread_connect_event: invalid spup (%d)", spup); + sys_spu.Error("sys_spu_thread_connect_event: invalid spup (%d)", spup); return CELL_EINVAL; } if (et != SYS_SPU_THREAD_EVENT_USER) { - sc_spu.Error("sys_spu_thread_connect_event: unsupported event type (0x%x)", et); + sys_spu.Error("sys_spu_thread_connect_event: unsupported event type (0x%x)", et); return CELL_EINVAL; } @@ -735,7 +735,7 @@ s32 sys_spu_thread_disconnect_event(u32 id, u32 et, u8 spup) s32 sys_spu_thread_bind_queue(u32 id, u32 eq_id, u32 spuq_num) { - sc_spu.Warning("sys_spu_thread_bind_queue(id=%d, equeue_id=%d, spuq_num=0x%x)", id, eq_id, spuq_num); + sys_spu.Warning("sys_spu_thread_bind_queue(id=%d, equeue_id=%d, spuq_num=0x%x)", id, eq_id, spuq_num); EventQueue* eq; if (!Emu.GetIdManager().GetIDData(eq_id, eq)) @@ -765,7 +765,7 @@ s32 sys_spu_thread_bind_queue(u32 id, u32 eq_id, u32 spuq_num) s32 sys_spu_thread_unbind_queue(u32 id, u32 spuq_num) { - sc_spu.Warning("sys_spu_thread_unbind_queue(id=0x%x, spuq_num=0x%x)", id, spuq_num); + sys_spu.Warning("sys_spu_thread_unbind_queue(id=0x%x, spuq_num=0x%x)", id, spuq_num); CPUThread* thr = Emu.GetCPU().GetThread(id); @@ -784,7 +784,7 @@ s32 sys_spu_thread_unbind_queue(u32 id, u32 spuq_num) s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, mem8_t spup) { - sc_spu.Warning("sys_spu_thread_group_connect_event_all_threads(id=%d, eq_id=%d, req=0x%llx, spup_addr=0x%x)", + sys_spu.Warning("sys_spu_thread_group_connect_event_all_threads(id=%d, eq_id=%d, req=0x%llx, spup_addr=0x%x)", id, eq_id, req, spup.GetAddr()); EventQueue* eq; @@ -811,7 +811,7 @@ s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, m CPUThread* thr = Emu.GetCPU().GetThread(v); if (thr->GetType() != CPU_THREAD_SPU) { - sc_spu.Error("sys_spu_thread_group_connect_event_all_threads(): CELL_ESTAT (wrong thread type)"); + sys_spu.Error("sys_spu_thread_group_connect_event_all_threads(): CELL_ESTAT (wrong thread type)"); return CELL_ESTAT; } threads.push_back((SPUThread*)thr); @@ -819,7 +819,7 @@ s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, m if (threads.size() != group->m_count) { - sc_spu.Error("sys_spu_thread_group_connect_event_all_threads(): CELL_ESTAT (%d from %d)", (u32)threads.size(), group->m_count); + sys_spu.Error("sys_spu_thread_group_connect_event_all_threads(): CELL_ESTAT (%d from %d)", (u32)threads.size(), group->m_count); return CELL_ESTAT; } @@ -839,7 +839,7 @@ s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, m eq->ports.add(&(t->SPUPs[i])); t->SPUPs[i].eq = eq; } - sc_spu.Warning("*** spup -> %d", i); + sys_spu.Warning("*** spup -> %d", i); spup = (u8)i; } @@ -858,7 +858,7 @@ s32 sys_spu_thread_group_connect_event_all_threads(u32 id, u32 eq_id, u64 req, m s32 sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup) { - sc_spu.Todo("sys_spu_thread_group_disconnect_event_all_threads(id=%d, spup=%d)", id, spup); + sys_spu.Todo("sys_spu_thread_group_disconnect_event_all_threads(id=%d, spup=%d)", id, spup); return CELL_OK; } @@ -866,7 +866,7 @@ s32 sys_spu_thread_group_disconnect_event_all_threads(u32 id, u8 spup) //160 s32 sys_raw_spu_create(mem32_t id, u32 attr_addr) { - sc_spu.Warning("sys_raw_spu_create(id_addr=0x%x, attr_addr=0x%x)", id.GetAddr(), attr_addr); + sys_spu.Warning("sys_raw_spu_create(id_addr=0x%x, attr_addr=0x%x)", id.GetAddr(), attr_addr); CPUThread& new_thread = Emu.GetCPU().AddThread(CPU_THREAD_RAW_SPU); if (((RawSPUThread&)new_thread).GetIndex() >= 5) @@ -882,7 +882,7 @@ s32 sys_raw_spu_create(mem32_t id, u32 attr_addr) s32 sys_raw_spu_destroy(u32 id) { - sc_spu.Warning("sys_raw_spu_destroy(id=%d)", id); + sys_spu.Warning("sys_raw_spu_destroy(id=%d)", id); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); @@ -899,7 +899,7 @@ s32 sys_raw_spu_destroy(u32 id) s32 sys_raw_spu_create_interrupt_tag(u32 id, u32 class_id, u32 hwthread, mem32_t intrtag) { - sc_spu.Warning("sys_raw_spu_create_interrupt_tag(id=%d, class_id=%d, hwthread=0x%x, intrtag_addr=0x%x)", id, class_id, hwthread, intrtag.GetAddr()); + sys_spu.Warning("sys_raw_spu_create_interrupt_tag(id=%d, class_id=%d, hwthread=0x%x, intrtag_addr=0x%x)", id, class_id, hwthread, intrtag.GetAddr()); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); @@ -926,7 +926,7 @@ s32 sys_raw_spu_create_interrupt_tag(u32 id, u32 class_id, u32 hwthread, mem32_t s32 sys_raw_spu_set_int_mask(u32 id, u32 class_id, u64 mask) { - sc_spu.Warning("sys_raw_spu_set_int_mask(id=%d, class_id=%d, mask=0x%llx)", id, class_id, mask); + sys_spu.Warning("sys_raw_spu_set_int_mask(id=%d, class_id=%d, mask=0x%llx)", id, class_id, mask); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) @@ -945,7 +945,7 @@ s32 sys_raw_spu_set_int_mask(u32 id, u32 class_id, u64 mask) s32 sys_raw_spu_get_int_mask(u32 id, u32 class_id, mem64_t mask) { - sc_spu.Log("sys_raw_spu_get_int_mask(id=%d, class_id=%d, mask_addr=0x%x)", id, class_id, mask.GetAddr()); + sys_spu.Log("sys_raw_spu_get_int_mask(id=%d, class_id=%d, mask_addr=0x%x)", id, class_id, mask.GetAddr()); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) @@ -964,7 +964,7 @@ s32 sys_raw_spu_get_int_mask(u32 id, u32 class_id, mem64_t mask) s32 sys_raw_spu_set_int_stat(u32 id, u32 class_id, u64 stat) { - sc_spu.Log("sys_raw_spu_set_int_stat(id=%d, class_id=%d, stat=0x%llx)", id, class_id, stat); + sys_spu.Log("sys_raw_spu_set_int_stat(id=%d, class_id=%d, stat=0x%llx)", id, class_id, stat); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) @@ -983,7 +983,7 @@ s32 sys_raw_spu_set_int_stat(u32 id, u32 class_id, u64 stat) s32 sys_raw_spu_get_int_stat(u32 id, u32 class_id, mem64_t stat) { - sc_spu.Log("sys_raw_spu_get_int_stat(id=%d, class_id=%d, stat_addr=0xx)", id, class_id, stat.GetAddr()); + sys_spu.Log("sys_raw_spu_get_int_stat(id=%d, class_id=%d, stat_addr=0xx)", id, class_id, stat.GetAddr()); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) @@ -1002,7 +1002,7 @@ s32 sys_raw_spu_get_int_stat(u32 id, u32 class_id, mem64_t stat) s32 sys_raw_spu_read_puint_mb(u32 id, mem32_t value) { - sc_spu.Log("sys_raw_spu_read_puint_mb(id=%d, value_addr=0x%x)", id, value.GetAddr()); + sys_spu.Log("sys_raw_spu_read_puint_mb(id=%d, value_addr=0x%x)", id, value.GetAddr()); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) @@ -1018,7 +1018,7 @@ s32 sys_raw_spu_read_puint_mb(u32 id, mem32_t value) s32 sys_raw_spu_set_spu_cfg(u32 id, u32 value) { - sc_spu.Log("sys_raw_spu_set_spu_cfg(id=%d, value=0x%x)", id, value); + sys_spu.Log("sys_raw_spu_set_spu_cfg(id=%d, value=0x%x)", id, value); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) @@ -1032,7 +1032,7 @@ s32 sys_raw_spu_set_spu_cfg(u32 id, u32 value) s32 sys_raw_spu_get_spu_cfg(u32 id, mem32_t value) { - sc_spu.Log("sys_raw_spu_get_spu_afg(id=%d, value_addr=0x%x)", id, value.GetAddr()); + sys_spu.Log("sys_raw_spu_get_spu_afg(id=%d, value_addr=0x%x)", id, value.GetAddr()); RawSPUThread* t = Emu.GetCPU().GetRawSPUThread(id); if (!t) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_time.cpp b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp index 69292b5fed..90be5d2122 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_time.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_time.cpp @@ -6,10 +6,10 @@ * GNU LGPL 2.1 license * */ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "sys_time.h" SysCallBase sys_time("sys_time"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 1597c098ee..7250394698 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -1,8 +1,9 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + +#include "Emu/Event.h" #include "sys_timer.h" SysCallBase sys_timer("sys_timer"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp b/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp index 725cb49338..7e6b76e7d1 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_trace.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "sys_trace.h" SysCallBase sys_trace("sys_trace"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp index a570630de0..86548b31e4 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_tty.cpp @@ -3,12 +3,16 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" + #include "sys_tty.h" +SysCallBase sys_tty("sys_tty"); + s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) { + sys_tty.Error("sys_tty_read(ch=%d, buf_addr=%llx, len=%d, preadlen_addr=0x%llx)", ch, buf_addr, len, preadlen_addr); + // We currently do not support reading from the Console - LOG_WARNING(HLE, "sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); Memory.Write32(preadlen_addr, len); Emu.Pause(); @@ -17,6 +21,8 @@ s32 sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) s32 sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) { + sys_tty.Log("sys_tty_write(ch=%d, buf_addr=%llx, len=%d, preadlen_addr=0x%llx)", ch, buf_addr, len, pwritelen_addr); + if(ch > 15 || (s32)len <= 0) return CELL_EINVAL; if (ch == SYS_TTYP_PPU_STDOUT || ch == SYS_TTYP_SPU_STDOUT || (ch >= SYS_TTYP_USER1 && ch <= SYS_TTYP_USER13)) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp b/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp index 3c1de7c437..9fd3e39b2d 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_vm.cpp @@ -1,16 +1,17 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include "sys_memory.h" -SysCallBase sc_vm("vm"); +#include "sys_memory.h" +#include "sys_vm.h" + +SysCallBase sys_vm("vm"); MemoryContainerInfo* current_ct; s32 sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 addr) { - sc_vm.Warning("sys_vm_memory_map(vsize=0x%x,psize=0x%x,cidr=0x%x,flags=0x%llx,policy=0x%llx,addr=0x%x)", + sys_vm.Warning("sys_vm_memory_map(vsize=0x%x,psize=0x%x,cidr=0x%x,flags=0x%llx,policy=0x%llx,addr=0x%x)", vsize, psize, cid, flag, policy, addr); // Check virtual size. @@ -51,7 +52,7 @@ s32 sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 a { // Check memory container. MemoryContainerInfo* ct; - if(!sc_vm.CheckId(cid, ct)) return CELL_ESRCH; + if(!sys_vm.CheckId(cid, ct)) return CELL_ESRCH; current_ct = ct; } @@ -64,7 +65,7 @@ s32 sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy, u32 a s32 sys_vm_unmap(u32 addr) { - sc_vm.Warning("sys_vm_unmap(addr=0x%x)", addr); + sys_vm.Warning("sys_vm_unmap(addr=0x%x)", addr); // Simply free the memory to unmap. if(!Memory.Free(addr)) return CELL_EINVAL; @@ -74,7 +75,7 @@ s32 sys_vm_unmap(u32 addr) s32 sys_vm_append_memory(u32 addr, u32 size) { - sc_vm.Warning("sys_vm_append_memory(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Warning("sys_vm_append_memory(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (size <= 0)) @@ -96,7 +97,7 @@ s32 sys_vm_append_memory(u32 addr, u32 size) s32 sys_vm_return_memory(u32 addr, u32 size) { - sc_vm.Warning("sys_vm_return_memory(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Warning("sys_vm_return_memory(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (size <= 0)) @@ -118,7 +119,7 @@ s32 sys_vm_return_memory(u32 addr, u32 size) s32 sys_vm_lock(u32 addr, u32 size) { - sc_vm.Warning("sys_vm_lock(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Warning("sys_vm_lock(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -140,7 +141,7 @@ s32 sys_vm_lock(u32 addr, u32 size) s32 sys_vm_unlock(u32 addr, u32 size) { - sc_vm.Warning("sys_vm_unlock(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Warning("sys_vm_unlock(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -155,7 +156,7 @@ s32 sys_vm_unlock(u32 addr, u32 size) s32 sys_vm_touch(u32 addr, u32 size) { - sc_vm.Todo("sys_vm_touch(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Todo("sys_vm_touch(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -172,7 +173,7 @@ s32 sys_vm_touch(u32 addr, u32 size) s32 sys_vm_flush(u32 addr, u32 size) { - sc_vm.Todo("sys_vm_flush(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Todo("sys_vm_flush(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -189,7 +190,7 @@ s32 sys_vm_flush(u32 addr, u32 size) s32 sys_vm_invalidate(u32 addr, u32 size) { - sc_vm.Todo("sys_vm_invalidate(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Todo("sys_vm_invalidate(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -206,7 +207,7 @@ s32 sys_vm_invalidate(u32 addr, u32 size) s32 sys_vm_store(u32 addr, u32 size) { - sc_vm.Todo("sys_vm_store(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Todo("sys_vm_store(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -223,7 +224,7 @@ s32 sys_vm_store(u32 addr, u32 size) s32 sys_vm_sync(u32 addr, u32 size) { - sc_vm.Todo("sys_vm_sync(addr=0x%x,size=0x%x)", addr, size); + sys_vm.Todo("sys_vm_sync(addr=0x%x,size=0x%x)", addr, size); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -239,7 +240,7 @@ s32 sys_vm_sync(u32 addr, u32 size) s32 sys_vm_test(u32 addr, u32 size, u32 result_addr) { - sc_vm.Todo("sys_vm_test(addr=0x%x,size=0x%x,result_addr=0x%x)", addr, size, result_addr); + sys_vm.Todo("sys_vm_test(addr=0x%x,size=0x%x,result_addr=0x%x)", addr, size, result_addr); // Check address and size. if((current_ct->addr != addr) || (current_ct->size < size) || (size <= 0)) @@ -258,7 +259,7 @@ s32 sys_vm_test(u32 addr, u32 size, u32 result_addr) s32 sys_vm_get_statistics(u32 addr, u32 stat_addr) { - sc_vm.Todo("sys_vm_get_statistics(addr=0x%x,stat_addr=0x%x)", addr, stat_addr); + sys_vm.Todo("sys_vm_get_statistics(addr=0x%x,stat_addr=0x%x)", addr, stat_addr); // Check address. if(current_ct->addr != addr) diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index f32697a716..07693354a5 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -3,8 +3,9 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/SysCalls/Static.h" #include "Emu/Cell/PPUInstrTable.h" #include "Emu/SysCalls/ModuleManager.h" #include "ELF64.h" diff --git a/rpcs3/Loader/SELF.cpp b/rpcs3/Loader/SELF.cpp index b614267bb2..2357d6e2d7 100644 --- a/rpcs3/Loader/SELF.cpp +++ b/rpcs3/Loader/SELF.cpp @@ -3,6 +3,56 @@ #include "SELF.h" #include "ELF64.h" +void SceHeader::Load(vfsStream& f) +{ + se_magic = Read32(f); + se_hver = Read32(f); + se_flags = Read16(f); + se_type = Read16(f); + se_meta = Read32(f); + se_hsize = Read64(f); + se_esize = Read64(f); +} + +void SceHeader::Show() +{ + LOG_NOTICE(LOADER, "Magic: %08x", se_magic); + LOG_NOTICE(LOADER, "Class: %s", "SELF"); + LOG_NOTICE(LOADER, "hver: 0x%08x", se_hver); + LOG_NOTICE(LOADER, "flags: 0x%04x", se_flags); + LOG_NOTICE(LOADER, "type: 0x%04x", se_type); + LOG_NOTICE(LOADER, "meta: 0x%08x", se_meta); + LOG_NOTICE(LOADER, "hsize: 0x%llx", se_hsize); + LOG_NOTICE(LOADER, "esize: 0x%llx", se_esize); +} + +void SelfHeader::Load(vfsStream& f) +{ + se_htype = Read64(f); + se_appinfooff = Read64(f); + se_elfoff = Read64(f); + se_phdroff = Read64(f); + se_shdroff = Read64(f); + se_secinfoff = Read64(f); + se_sceveroff = Read64(f); + se_controloff = Read64(f); + se_controlsize = Read64(f); + pad = Read64(f); +} + +void SelfHeader::Show() +{ + LOG_NOTICE(LOADER, "header type: 0x%llx", se_htype); + LOG_NOTICE(LOADER, "app info offset: 0x%llx", se_appinfooff); + LOG_NOTICE(LOADER, "elf offset: 0x%llx", se_elfoff); + LOG_NOTICE(LOADER, "program header offset: 0x%llx", se_phdroff); + LOG_NOTICE(LOADER, "section header offset: 0x%llx", se_shdroff); + LOG_NOTICE(LOADER, "section info offset: 0x%llx", se_secinfoff); + LOG_NOTICE(LOADER, "sce version offset: 0x%llx", se_sceveroff); + LOG_NOTICE(LOADER, "control info offset: 0x%llx", se_controloff); + LOG_NOTICE(LOADER, "control info size: 0x%llx", se_controlsize); +} + SELFLoader::SELFLoader(vfsStream& f) : self_f(f) , LoaderBase() diff --git a/rpcs3/Loader/SELF.h b/rpcs3/Loader/SELF.h index 6058456026..8c3cb70d51 100644 --- a/rpcs3/Loader/SELF.h +++ b/rpcs3/Loader/SELF.h @@ -11,28 +11,9 @@ struct SceHeader u64 se_hsize; u64 se_esize; - void Load(vfsStream& f) - { - se_magic = Read32(f); - se_hver = Read32(f); - se_flags = Read16(f); - se_type = Read16(f); - se_meta = Read32(f); - se_hsize = Read64(f); - se_esize = Read64(f); - } + void Load(vfsStream& f); - void Show() - { - LOG_NOTICE(LOADER, "Magic: %08x", se_magic); - LOG_NOTICE(LOADER, "Class: %s", "SELF"); - LOG_NOTICE(LOADER, "hver: 0x%08x", se_hver); - LOG_NOTICE(LOADER, "flags: 0x%04x", se_flags); - LOG_NOTICE(LOADER, "type: 0x%04x", se_type); - LOG_NOTICE(LOADER, "meta: 0x%08x", se_meta); - LOG_NOTICE(LOADER, "hsize: 0x%llx", se_hsize); - LOG_NOTICE(LOADER, "esize: 0x%llx", se_esize); - } + void Show(); bool CheckMagic() const { return se_magic == 0x53434500; } }; @@ -50,32 +31,9 @@ struct SelfHeader u64 se_controlsize; u64 pad; - void Load(vfsStream& f) - { - se_htype = Read64(f); - se_appinfooff = Read64(f); - se_elfoff = Read64(f); - se_phdroff = Read64(f); - se_shdroff = Read64(f); - se_secinfoff = Read64(f); - se_sceveroff = Read64(f); - se_controloff = Read64(f); - se_controlsize = Read64(f); - pad = Read64(f); - } + void Load(vfsStream& f); - void Show() - { - LOG_NOTICE(LOADER, "header type: 0x%llx", se_htype); - LOG_NOTICE(LOADER, "app info offset: 0x%llx", se_appinfooff); - LOG_NOTICE(LOADER, "elf offset: 0x%llx", se_elfoff); - LOG_NOTICE(LOADER, "program header offset: 0x%llx", se_phdroff); - LOG_NOTICE(LOADER, "section header offset: 0x%llx", se_shdroff); - LOG_NOTICE(LOADER, "section info offset: 0x%llx", se_secinfoff); - LOG_NOTICE(LOADER, "sce version offset: 0x%llx", se_sceveroff); - LOG_NOTICE(LOADER, "control info offset: 0x%llx", se_controloff); - LOG_NOTICE(LOADER, "control info size: 0x%llx", se_controlsize); - } + void Show(); }; class SELFLoader : public LoaderBase From 31131c17efa29e6b42bbb4a797c6927faaf9e2c6 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sat, 23 Aug 2014 22:41:22 +0300 Subject: [PATCH 402/499] Added cellSail structures and callbacks --- rpcs3/Emu/SysCalls/Modules/cellSail.cpp | 4 +- rpcs3/Emu/SysCalls/Modules/cellSail.h | 583 +++++++++++++++++++++++- 2 files changed, 576 insertions(+), 11 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp index e191eea5e0..b354b86f5e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp @@ -3,7 +3,9 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" - +#include "Emu/SysCalls/lv2/sys_cond.h" +#include "Emu/SysCalls/lv2/sys_mutex.h" +#include "cellSpurs.h" #include "cellSail.h" Module *cellSail = nullptr; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.h b/rpcs3/Emu/SysCalls/Modules/cellSail.h index 924567b65b..89a3155e7b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.h @@ -3,16 +3,579 @@ // Error Codes enum { - CELL_SAIL_ERROR_INVALID_ARG = 0x80610701, - CELL_SAIL_ERROR_INVALID_STATE = 0x80610702, + CELL_SAIL_ERROR_INVALID_ARG = 0x80610701, + CELL_SAIL_ERROR_INVALID_STATE = 0x80610702, CELL_SAIL_ERROR_UNSUPPORTED_STREAM = 0x80610703, CELL_SAIL_ERROR_INDEX_OUT_OF_RANGE = 0x80610704, - CELL_SAIL_ERROR_EMPTY = 0x80610705, - CELL_SAIL_ERROR_FULLED = 0x80610706, - CELL_SAIL_ERROR_USING = 0x80610707, - CELL_SAIL_ERROR_NOT_AVAILABLE = 0x80610708, - CELL_SAIL_ERROR_CANCEL = 0x80610709, - CELL_SAIL_ERROR_MEMORY = 0x806107F0, - CELL_SAIL_ERROR_INVALID_FD = 0x806107F1, - CELL_SAIL_ERROR_FATAL = 0x806107FF, + CELL_SAIL_ERROR_EMPTY = 0x80610705, + CELL_SAIL_ERROR_FULLED = 0x80610706, + CELL_SAIL_ERROR_USING = 0x80610707, + CELL_SAIL_ERROR_NOT_AVAILABLE = 0x80610708, + CELL_SAIL_ERROR_CANCEL = 0x80610709, + CELL_SAIL_ERROR_MEMORY = 0x806107F0, + CELL_SAIL_ERROR_INVALID_FD = 0x806107F1, + CELL_SAIL_ERROR_FATAL = 0x806107FF, }; + +struct CellSailAudioFormat +{ + s8 coding; + s8 chNum; + be_t sampleNum; + be_t fs; + be_t chLayout; + be_t reserved0; // Specify both -1 + be_t reserved1; +}; + +struct CellSailAudioFrameInfo +{ + be_t pPcm; + be_t status; + be_t pts; + be_t reserved; // Specify 0 +}; + +struct CellSailVideoFormat +{ + s8 coding; + s8 scan; + s8 bitsPerColor; + s8 frameRate; + be_t width; + be_t height; + be_t pitch; + be_t alpha; + s8 colorMatrix; + s8 aspectRatio; + s8 colorRange; + s8 reserved1; // Specify all three -1 + be_t reserved2; + be_t reserved3; +}; + +struct CellSailVideoFrameInfo +{ + be_t pPic; + be_t status; + be_t pts; + be_t reserved; // Specify both 0 + be_t interval; + u8 structure; + s8 repeatNum; + u8 reserved2[4]; +}; + +struct CellSailSourceBufferItem +{ + u8 pBuf; + be_t size; + be_t sessionId; + be_t reserved; // Specify 0 +}; + +struct CellSailSourceStartCommand +{ + be_t startFlags; + be_t startArg; + be_t lengthArg; + be_t optionalArg0; + be_t optionalArg1; +}; + +struct CellSailSourceStreamingProfile +{ + be_t reserved0; // Specify 0 + be_t numItems; + be_t maxBitrate; + be_t reserved1; // Specify 0 + be_t duration; + be_t streamSize; +}; + +union CellSailEvent +{ + struct u32x2 { + be_t major; + be_t minor; + }; + + struct ui64 { + be_t value; + }; +}; + +typedef void(*CellSailMemAllocatorFuncAlloc)(u32 pArg, u32 boundary, u32 size); +typedef void(*CellSailMemAllocatorFuncFree)(u32 pArg, u32 boundary, u32 pMemory); + +typedef int(*CellSailSoundAdapterFuncMakeup)(u32 pArg); +typedef int(*CellSailSoundAdapterFuncCleanup)(u32 pArg); +typedef void(*CellSailSoundAdapterFuncFormatChanged)(u32 pArg, mem_ptr_t pFormat, u32 sessionId); + +typedef int(*CellSailGraphicsAdapterFuncMakeup)(u32 pArg); +typedef int(*CellSailGraphicsAdapterFuncCleanup)(u32 pArg); +typedef void(*CellSailGraphicsAdapterFuncFormatChanged)(u32 pArg, mem_ptr_t pFormat, u32 sessionId); +typedef int(*CellSailGraphicsAdapterFuncAllocFrame)(u32 pArg, u32 size, s32 num, u8 ppFrame); +typedef int(*CellSailGraphicsAdapterFuncFreeFrame)(u32 pArg, s32 num, u8 ppFrame); + +typedef int(*CellSailSourceFuncMakeup)(u32 pArg, s8 pProtocolNames); +typedef int(*CellSailSourceFuncCleanup)(u32 pArg); +typedef void(*CellSailSourceFuncOpen)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, mem_ptr_t pProfile); +typedef void(*CellSailSourceFuncClose)(u32 pArg); +typedef void(*CellSailSourceFuncStart)(u32 pArg, mem_ptr_t pCommand, u32 sessionId); +typedef void(*CellSailSourceFuncStop)(u32 pArg); +typedef void(*CellSailSourceFuncCancel)(u32 pArg); +typedef int(*CellSailSourceFuncCheckout)(u32 pArg, mem_ptr_t ppItem); +typedef int(*CellSailSourceFuncCheckin)(u32 pArg, mem_ptr_t pItem); +typedef int(*CellSailSourceFuncClear)(u32 pArg); +typedef int(*CellSailSourceFuncRead)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize); +typedef int(*CellSailSourceFuncReadSync)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize); +typedef int(*CellSailSourceFuncGetCapabilities)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 pCapabilities); +typedef int(*CellSailSourceFuncInquireCapability)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, mem_ptr_t pCommand); +typedef void(*CellSailSourceCheckFuncError)(u32 pArg, s8 pMsg, s32 line); + +typedef int(*CellSailFsFuncOpen)(s8 pPath, s32 flag, s32 pFd, u32 pArg, u64 size); +typedef int(*CellSailFsFuncOpenSecond)(s8 pPath, s32 flag, s32 fd, u32 pArg, u64 size); +typedef int(*CellSailFsFuncClose)(s32 fd); +typedef int(*CellSailFsFuncFstat)(s32 fd, mem_ptr_t pStat); +typedef int(*CellSailFsFuncRead)(s32 fd, u32 pBuf, u64 numBytes, u64 pNumRead); +typedef int(*CellSailFsFuncLseek)(s32 fd, s64 offset, s32 whence, u64 pPosition); +typedef int(*CellSailFsFuncCancel)(s32 fd); + +typedef int(*CellSailRendererAudioFuncMakeup)(u32 pArg); +typedef int(*CellSailRendererAudioFuncCleanup)(u32 pArg); +typedef void(*CellSailRendererAudioFuncOpen)(u32 pArg, mem_ptr_t pInfo, u32 frameNum); +typedef void(*CellSailRendererAudioFuncClose)(u32 pArg); +typedef void(*CellSailRendererAudioFuncStart)(u32 pArg, bool buffering); +typedef void(*CellSailRendererAudioFuncStop)(u32 pArg, bool flush); +typedef void(*CellSailRendererAudioFuncCancel)(u32 pArg); +typedef int(*CellSailRendererAudioFuncCheckout)(u32 pArg, mem_ptr_t ppInfo); +typedef int(*CellSailRendererAudioFuncCheckin)(u32 pArg, mem_ptr_t pInfo); + +typedef int(*CellSailRendererVideoFuncMakeup)(u32 pArg); +typedef int(*CellSailRendererVideoFuncCleanup)(u32 pArg); +typedef void(*CellSailRendererVideoFuncOpen)(u32 pArg, mem_ptr_t pInfo, u32 frameNum, u32 minFrameNum); +typedef void(*CellSailRendererVideoFuncClose)(u32 pArg); +typedef void(*CellSailRendererVideoFuncStart)(u32 pArg, bool buffering); +typedef void(*CellSailRendererVideoFuncStop)(u32 pArg, bool flush, bool keepRendering); +typedef void(*CellSailRendererVideoFuncCancel)(u32 pArg); +typedef int(*CellSailRendererVideoFuncCheckout)(u32 pArg, mem_ptr_t ppInfo); +typedef int(*CellSailRendererVideoFuncCheckin)(u32 pArg, mem_ptr_t pInfo); + +typedef void(*CellSailPlayerFuncNotified)(u32 pArg, mem_ptr_t event, u64 arg0, u64 arg1); + +struct CellSailMemAllocatorFuncs +{ + CellSailMemAllocatorFuncAlloc pAlloc; + CellSailMemAllocatorFuncFree pFree; +}; + +struct CellSailMemAllocator +{ + CellSailMemAllocatorFuncs callbacks; + be_t pArg; +}; + +struct CellSailFuture +{ + u32 mutex_id; + u32 cond_id; + volatile be_t flags; + be_t result; + be_t userParam; +}; + +struct CellSailSoundAdapterFuncs +{ + CellSailSoundAdapterFuncMakeup pMakeup; + CellSailSoundAdapterFuncCleanup pCleanup; + CellSailSoundAdapterFuncFormatChanged pFormatChanged; +}; + +struct CellSailSoundFrameInfo +{ + be_t pBuffer; + be_t sessionId; + be_t tag; + be_t status; + be_t pts; +}; + +struct CellSailSoundAdapter +{ + be_t internalData[32]; +}; + +struct CellSailGraphicsAdapterFuncs +{ + CellSailGraphicsAdapterFuncMakeup pMakeup; + CellSailGraphicsAdapterFuncCleanup pCleanup; + CellSailGraphicsAdapterFuncFormatChanged pFormatChanged; + CellSailGraphicsAdapterFuncAllocFrame pAlloc; + CellSailGraphicsAdapterFuncFreeFrame pFree; +}; + +struct CellSailGraphicsFrameInfo +{ + be_t pBuffer; + be_t sessionId; + be_t tag; + be_t status; + be_t pts; +}; + +struct CellSailGraphicsAdapter +{ + be_t internalData[32]; +}; + +struct CellSailAuInfo +{ + be_t pAu; + be_t size; + be_t status; + be_t sessionId; + be_t pts; + be_t dts; + be_t reserved; // Specify 0 +}; + +struct CellSailAuReceiver +{ + be_t internalData[64]; +}; + +struct CellSailRendererAudioFuncs +{ + CellSailRendererAudioFuncMakeup pMakeup; + CellSailRendererAudioFuncCleanup pCleanup; + CellSailRendererAudioFuncOpen pOpen; + CellSailRendererAudioFuncClose pClose; + CellSailRendererAudioFuncStart pStart; + CellSailRendererAudioFuncStop pStop; + CellSailRendererAudioFuncCancel pCancel; + CellSailRendererAudioFuncCheckout pCheckout; + CellSailRendererAudioFuncCheckin pCheckin; +}; + +struct CellSailRendererAudioAttribute +{ + be_t thisSize; + CellSailAudioFormat pPreferredFormat; +}; + +struct CellSailRendererAudio +{ + be_t internalData[32]; +}; + +struct CellSailRendererVideoFuncs +{ + CellSailRendererVideoFuncMakeup pMakeup; + CellSailRendererVideoFuncCleanup pCleanup; + CellSailRendererVideoFuncOpen pOpen; + CellSailRendererVideoFuncClose pClose; + CellSailRendererVideoFuncStart pStart; + CellSailRendererVideoFuncStop pStop; + CellSailRendererVideoFuncCancel pCancel; + CellSailRendererVideoFuncCheckout pCheckout; + CellSailRendererVideoFuncCheckin pCheckin; +}; + +struct CellSailRendererVideoAttribute +{ + be_t thisSize; + CellSailVideoFormat *pPreferredFormat; +}; + +struct CellSailRendererVideo +{ + be_t internalData[32]; +}; + +struct CellSailSourceFuncs +{ + CellSailSourceFuncMakeup pMakeup; + CellSailSourceFuncCleanup pCleanup; + CellSailSourceFuncOpen pOpen; + CellSailSourceFuncClose pClose; + CellSailSourceFuncStart pStart; + CellSailSourceFuncStop pStop; + CellSailSourceFuncCancel pCancel; + CellSailSourceFuncCheckout pCheckout; + CellSailSourceFuncCheckin pCheckin; + CellSailSourceFuncClear pClear; + CellSailSourceFuncRead pRead; + CellSailSourceFuncReadSync pReadSync; + CellSailSourceFuncGetCapabilities pGetCapabilities; + CellSailSourceFuncInquireCapability pInquireCapability; +}; + +struct CellSailSource +{ + be_t internalData[20]; +}; + +struct CellSailSourceCheckStream +{ + be_t streamType; + be_t pMediaInfo; + s8 pUri; +}; + +struct CellSailSourceCheckResource +{ + CellSailSourceCheckStream ok; + CellSailSourceCheckStream readError; + CellSailSourceCheckStream openError; + CellSailSourceCheckStream startError; + CellSailSourceCheckStream runningError; +}; + +struct CellSailMp4DateTime +{ + be_t second; + be_t minute; + be_t hour; + be_t day; + be_t month; + be_t year; + //be_t reserved0; + //be_t reserved1; +}; + +struct CellSailMp4Movie +{ + be_t internalData[16]; +}; + +struct CellSailMp4MovieInfo +{ + CellSailMp4DateTime creationDateTime; + CellSailMp4DateTime modificationDateTime; + be_t trackCount; + be_t movieTimeScale; + be_t movieDuration; + //be_t reserved[16]; +}; + +struct CellSailMp4Track +{ + be_t internalData[6]; +}; + +struct CellSailMp4TrackInfo +{ + bool isTrackEnabled; + u8 reserved0[3]; + be_t trackId; + be_t trackDuration; + be_t layer; + be_t alternateGroup; + be_t reserved1[2]; + be_t trackWidth; + be_t trackHeight; + be_t language; + be_t reserved2; + be_t mediaType; + //be_t reserved3[3]; +}; + +struct CellSailAviMovie +{ + be_t internalData[16]; +}; + +struct CellSailAviMovieInfo +{ + be_t maxBytesPerSec; + be_t flags; + be_t reserved0; + be_t streams; + be_t suggestedBufferSize; + be_t width; + be_t height; + be_t scale; + be_t rate; + be_t length; + //be_t reserved1; + //be_t reserved2; +}; + +struct CellSailAviMainHeader +{ + be_t microSecPerFrame; + be_t maxBytesPerSec; + be_t paddingGranularity; + be_t flags; + be_t totalFrames; + be_t initialFrames; + be_t streams; + be_t suggestedBufferSize; + be_t width; + be_t height; + //be_t reserved[4]; +}; + +struct CellSailAviExtendedHeader +{ + be_t totalFrames; +}; + +struct CellSailAviStream +{ + be_t internalData[2]; +}; + +struct CellSailAviMediaType +{ + be_t fccType; + be_t fccHandler; + union u { + struct audio { + be_t formatTag; + be_t reserved; // Specify 0 + union u { + struct mpeg { + be_t headLayer; // Specify 0 + be_t reserved; // Specify 0 + }; + }; + }; + struct video { + be_t compression; + be_t reserved; // Specify 0 + }; + }; +}; + +struct CellSailAviStreamHeader +{ + be_t fccType; + be_t fccHandler; + be_t flags; + be_t priority; + be_t initialFrames; + be_t scale; + be_t rate; + be_t start; + be_t length; + be_t suggestedBufferSize; + be_t quality; + be_t sampleSize; + struct frame { + be_t left; + be_t top; + be_t right; + be_t bottom; + }; +}; + +struct CellSailBitmapInfoHeader +{ + be_t size; + be_t width; + be_t height; + be_t planes; + be_t bitCount; + be_t compression; + be_t sizeImage; + be_t xPelsPerMeter; + be_t yPelsPerMeter; + be_t clrUsed; + be_t clrImportant; +}; + +struct CellSailWaveFormatEx +{ + be_t formatTag; + be_t channels; + be_t samplesPerSec; + be_t avgBytesPerSec; + be_t blockAlign; + be_t bitsPerSample; + be_t cbSize; +}; + +struct CellSailMpeg1WaveFormat +{ + CellSailWaveFormatEx wfx; + be_t headLayer; + be_t headBitrate; + be_t headMode; + be_t headModeExt; + be_t headEmphasis; + be_t headFlags; + be_t PTSLow; + be_t PTSHigh; +}; + +struct CellSailMpegLayer3WaveFormat +{ + CellSailWaveFormatEx wfx; + be_t ID; + be_t flags; + be_t blockSize; + be_t framesPerBlock; + be_t codecDelay; +}; + +struct CellSailDescriptor +{ + be_t internalData[32]; +}; + +struct CellSailStartCommand +{ + be_t startType; + be_t seekType; + be_t terminusType; + be_t flags; + be_t startArg; + be_t reserved; + be_t seekArg; + be_t terminusArg; +}; + +struct CellSailFsReadFuncs +{ + CellSailFsFuncOpen pOpen; + CellSailFsFuncOpenSecond pOpenSecond; + CellSailFsFuncClose pClose; + CellSailFsFuncFstat pFstat; + CellSailFsFuncRead pRead; + CellSailFsFuncLseek pLseek; + CellSailFsFuncCancel pCancel; + be_t reserved[2]; // Specify 0 +}; + +struct CellSailFsRead +{ + be_t capability; + CellSailFsReadFuncs funcs; +}; + +struct CellSailPlayerAttribute +{ + be_t preset; + be_t maxAudioStreamNum; + be_t maxVideoStreamNum; + be_t maxUserStreamNum; + be_t queueDepth; + be_t reserved0; // All three specify 0 + be_t reserved1; + be_t reserved2; +}; + +struct CellSailPlayerResource +{ + CellSpurs pSpurs; + be_t reserved0; // All three specify 0 + be_t reserved1; + be_t reserved2; +}; + +struct CellSailPlayer +{ + be_t internalData[128]; +}; \ No newline at end of file From 4ffd03fe3e028814836b8b4a58f1bf72f2b580a4 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 24 Aug 2014 00:40:04 +0400 Subject: [PATCH 403/499] Include clearing --- Utilities/SMutex.cpp | 2 - Utilities/Thread.h | 2 +- rpcs3/Emu/CPU/CPUThread.cpp | 1 + rpcs3/Emu/CPU/CPUThread.h | 3 +- rpcs3/Emu/Cell/PPCThread.h | 1 - rpcs3/Emu/Cell/SPURSManager.cpp | 48 +- rpcs3/Emu/Cell/SPURSManager.h | 89 +-- rpcs3/Emu/Event.cpp | 3 +- rpcs3/Emu/SysCalls/Callback.cpp | 5 +- rpcs3/Emu/SysCalls/Modules.cpp | 6 +- rpcs3/Emu/SysCalls/Modules.h | 2 + rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 573 ++++++++++-------- rpcs3/Emu/SysCalls/Modules/cellAdec.h | 64 +- rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 26 +- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 331 +++++++++- rpcs3/Emu/SysCalls/Modules/cellDmux.h | 294 +-------- rpcs3/Emu/SysCalls/Modules/cellFont.cpp | 244 +------- rpcs3/Emu/SysCalls/Modules/cellFont.h | 221 +++++++ rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp | 31 +- rpcs3/Emu/SysCalls/Modules/cellFontFT.h | 28 + rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 9 +- rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp | 8 +- rpcs3/Emu/SysCalls/Modules/cellGifDec.h | 1 - rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellL10n.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 17 +- rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 3 +- rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellRtc.cpp | 3 +- rpcs3/Emu/SysCalls/Modules/cellSail.cpp | 2 - rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 9 +- rpcs3/Emu/SysCalls/Modules/cellSpurs.h | 62 +- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 15 +- rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 16 +- rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp | 2 - .../SysCalls/Modules/cellSysutil_SaveData.cpp | 41 +- rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 1 - rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 513 +++++++++------- rpcs3/Emu/SysCalls/Modules/cellVdec.h | 64 +- rpcs3/Emu/SysCalls/Modules/cellVpost.cpp | 19 +- rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 5 +- rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 3 +- rpcs3/Emu/SysCalls/Modules/sceNp.h | 1 - rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp | 5 +- rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp | 3 +- rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h | 1 + rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp | 1 - rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 17 +- rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp | 3 +- rpcs3/Emu/SysCalls/Modules/sceNpTus.h | 1 + rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 7 +- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 10 +- rpcs3/Emu/SysCalls/Modules/sys_io.cpp | 3 - rpcs3/Emu/SysCalls/Modules/sys_net.cpp | 7 +- rpcs3/Emu/SysCalls/SC_FUNC.h | 1 - rpcs3/Emu/SysCalls/Static.cpp | 3 - rpcs3/Emu/SysCalls/SysCalls.cpp | 7 +- rpcs3/Emu/SysCalls/SysCalls.h | 2 + rpcs3/Emu/SysCalls/lv2/sys_memory.cpp | 3 +- rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp | 3 +- rpcs3/Emu/System.cpp | 1 - rpcs3/Loader/ELF.cpp | 11 +- rpcs3/Loader/ELF.h | 11 +- rpcs3/Loader/ELF32.cpp | 201 ++++++ rpcs3/Loader/ELF32.h | 201 +----- rpcs3/Loader/ELF64.cpp | 106 +++- rpcs3/Loader/ELF64.h | 104 +--- rpcs3/Loader/TROPUSR.cpp | 4 +- rpcs3/Loader/TRP.cpp | 1 - rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 + 80 files changed, 1785 insertions(+), 1745 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellFontFT.h diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index 1803095f9d..efee7801f2 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -1,6 +1,4 @@ #include -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/CPU/CPUThread.h" diff --git a/Utilities/Thread.h b/Utilities/Thread.h index b2b7637265..83401da110 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -5,7 +5,7 @@ #include #include #include -#include +//#include static std::thread::id main_thread; diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 507e589b51..6cc990b777 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -6,6 +6,7 @@ #include "Emu/System.h" #include "Emu/DbgCommand.h" +#include "CPUDecoder.h" #include "CPUThread.h" CPUThread* GetCurrentCPUThread() diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 2a8ea78f2c..e827ca77f2 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -1,5 +1,4 @@ #pragma once -#include "Emu/CPU/CPUDecoder.h" enum CPUThreadType :unsigned char { @@ -20,6 +19,8 @@ enum CPUThreadStatus CPUThread_Step, }; +class CPUDecoder; + class CPUThread : public ThreadBase { protected: diff --git a/rpcs3/Emu/Cell/PPCThread.h b/rpcs3/Emu/Cell/PPCThread.h index e5dd118a9e..e0fbd5888c 100644 --- a/rpcs3/Emu/Cell/PPCThread.h +++ b/rpcs3/Emu/Cell/PPCThread.h @@ -1,5 +1,4 @@ #pragma once - #include "Emu/CPU/CPUThread.h" class PPCThread : public CPUThread diff --git a/rpcs3/Emu/Cell/SPURSManager.cpp b/rpcs3/Emu/Cell/SPURSManager.cpp index ab61442cb9..2e547dce37 100644 --- a/rpcs3/Emu/Cell/SPURSManager.cpp +++ b/rpcs3/Emu/Cell/SPURSManager.cpp @@ -1,7 +1,51 @@ #include "stdafx.h" -#include "SPURSManager.h" #include "Emu/Memory/Memory.h" +#include "SPURSManager.h" + +SPURSManagerAttribute::SPURSManagerAttribute(int nSpus, int spuPriority, int ppuPriority, bool exitIfNoWork) +{ + this->nSpus = nSpus; + this->spuThreadGroupPriority = spuPriority; + this->ppuThreadPriority = ppuPriority; + this->exitIfNoWork = exitIfNoWork; + + memset(this->namePrefix, 0, CELL_SPURS_NAME_MAX_LENGTH + 1); + this->threadGroupType = 0; + this->container = 0; +} + +int SPURSManagerAttribute::_setNamePrefix(const char *name, u32 size) +{ + strncpy(this->namePrefix, name, size); + this->namePrefix[0] = 0; + return 0; +} + +int SPURSManagerAttribute::_setSpuThreadGroupType(int type) +{ + this->threadGroupType = type; + return 0; +} + +int SPURSManagerAttribute::_setMemoryContainerForSpuThread(u32 container) +{ + this->container = container; + return 0; +} + +SPURSManagerEventFlag::SPURSManagerEventFlag(u32 flagClearMode, u32 flagDirection) +{ + this->flagClearMode = flagClearMode; + this->flagDirection = flagDirection; +} + +SPURSManagerTasksetAttribute::SPURSManagerTasksetAttribute(u64 args, mem8_t priority, u32 maxContention) +{ + this->args = args; + this->maxContention = maxContention; +} + SPURSManager::SPURSManager(SPURSManagerAttribute *attr) { this->attr = attr; @@ -26,4 +70,4 @@ SPURSManagerTaskset::SPURSManagerTaskset(u32 address, SPURSManagerTasksetAttribu { this->tattr = tattr; this->address = address; -} +} \ No newline at end of file diff --git a/rpcs3/Emu/Cell/SPURSManager.h b/rpcs3/Emu/Cell/SPURSManager.h index ff7a2b7ff5..210eda74cc 100644 --- a/rpcs3/Emu/Cell/SPURSManager.h +++ b/rpcs3/Emu/Cell/SPURSManager.h @@ -1,85 +1,18 @@ #pragma once -#include "Emu/Memory/Memory.h" - -// SPURS defines. -enum SPURSKernelInterfaces -{ - CELL_SPURS_MAX_SPU = 8, - CELL_SPURS_MAX_WORKLOAD = 16, - CELL_SPURS_MAX_WORKLOAD2 = 32, - CELL_SPURS_MAX_PRIORITY = 16, - CELL_SPURS_NAME_MAX_LENGTH = 15, - CELL_SPURS_SIZE = 4096, - CELL_SPURS_SIZE2 = 8192, - CELL_SPURS_ALIGN = 128, - CELL_SPURS_ATTRIBUTE_SIZE = 512, - CELL_SPURS_ATTRIBUTE_ALIGN = 8, - CELL_SPURS_INTERRUPT_VECTOR = 0x0, - CELL_SPURS_LOCK_LINE = 0x80, - CELL_SPURS_KERNEL_DMA_TAG_ID = 31, -}; - -enum RangeofEventQueuePortNumbers -{ - CELL_SPURS_STATIC_PORT_RANGE_BOTTOM = 15, - CELL_SPURS_DYNAMIC_PORT_RANGE_TOP = 16, - CELL_SPURS_DYNAMIC_PORT_RANGE_BOTTOM = 63, -}; - -enum SPURSTraceTypes -{ - CELL_SPURS_TRACE_TAG_LOAD = 0x2a, - CELL_SPURS_TRACE_TAG_MAP = 0x2b, - CELL_SPURS_TRACE_TAG_START = 0x2c, - CELL_SPURS_TRACE_TAG_STOP = 0x2d, - CELL_SPURS_TRACE_TAG_USER = 0x2e, - CELL_SPURS_TRACE_TAG_GUID = 0x2f, -}; - -// SPURS task defines. -enum TaskConstants -{ - CELL_SPURS_MAX_TASK = 128, - CELL_SPURS_TASK_TOP = 0x3000, - CELL_SPURS_TASK_BOTTOM = 0x40000, - CELL_SPURS_MAX_TASK_NAME_LENGTH = 32, -}; +#include "Emu/SysCalls/Modules/cellSpurs.h" // Internal class to shape a SPURS attribute. class SPURSManagerAttribute { public: - SPURSManagerAttribute(int nSpus, int spuPriority, int ppuPriority, bool exitIfNoWork) - { - this->nSpus = nSpus; - this->spuThreadGroupPriority = spuPriority; - this->ppuThreadPriority = ppuPriority; - this->exitIfNoWork = exitIfNoWork; + SPURSManagerAttribute(int nSpus, int spuPriority, int ppuPriority, bool exitIfNoWork); - memset(this->namePrefix, 0, CELL_SPURS_NAME_MAX_LENGTH + 1); - this->threadGroupType = 0; - this->container = 0; - } + int _setNamePrefix(const char *name, u32 size); - int _setNamePrefix(const char *name, u32 size) - { - strncpy(this->namePrefix, name, size); - this->namePrefix[0] = 0; - return 0; - } + int _setSpuThreadGroupType(int type); - int _setSpuThreadGroupType(int type) - { - this->threadGroupType = type; - return 0; - } - - int _setMemoryContainerForSpuThread(u32 container) - { - this->container = container; - return 0; - } + int _setMemoryContainerForSpuThread(u32 container); protected: be_t nSpus; @@ -94,11 +27,7 @@ protected: class SPURSManagerEventFlag { public: - SPURSManagerEventFlag(u32 flagClearMode, u32 flagDirection) - { - this->flagClearMode = flagClearMode; - this->flagDirection = flagDirection; - } + SPURSManagerEventFlag(u32 flagClearMode, u32 flagDirection); u32 _getDirection() { @@ -118,11 +47,7 @@ protected: class SPURSManagerTasksetAttribute { public: - SPURSManagerTasksetAttribute(u64 args, mem8_t priority, u32 maxContention) - { - this->args = args; - this->maxContention = maxContention; - } + SPURSManagerTasksetAttribute(u64 args, mem8_t priority, u32 maxContention); protected: be_t args; diff --git a/rpcs3/Emu/Event.cpp b/rpcs3/Emu/Event.cpp index d5065e2a98..5dce5b6884 100644 --- a/rpcs3/Emu/Event.cpp +++ b/rpcs3/Emu/Event.cpp @@ -1,7 +1,6 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" +//#include "Emu/System.h" #include "Event.h" void EventManager::Init() diff --git a/rpcs3/Emu/SysCalls/Callback.cpp b/rpcs3/Emu/SysCalls/Callback.cpp index 69fa0e8033..f3af71d9b8 100644 --- a/rpcs3/Emu/SysCalls/Callback.cpp +++ b/rpcs3/Emu/SysCalls/Callback.cpp @@ -2,10 +2,9 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Callback.h" - #include "Emu/Cell/PPUThread.h" -#include "Emu/Cell/PPCThread.h" + +#include "Callback.h" Callback::Callback(u32 slot, u64 addr) : m_addr(addr) diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 60427fc380..64d1bda99d 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/Static.h" @@ -175,6 +174,11 @@ bool Module::CheckID(u32 id, ID*& _id) const return Emu.GetIdManager().CheckID(id) && (_id = &Emu.GetIdManager().GetID(id))->m_name == GetName(); } +bool Module::RemoveId(u32 id) +{ + return Emu.GetIdManager().RemoveID(id); +} + IdManager& Module::GetIdManager() const { return Emu.GetIdManager(); diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index 722fadaafd..9472d235dd 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -114,6 +114,8 @@ public: return GetIdManager().GetNewID(GetName(), data, type); } + bool RemoveId(u32 id); + template __forceinline void AddFunc(u32 id, T func); template __forceinline void AddFunc(const char* name, T func); template __forceinline void AddFuncSub(const char group[8], const u64 ops[], const char* name, T func); diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp index c71dac97ad..8f529f6e17 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "Emu/Io/Keyboard.h" extern Module *sys_io; diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp index b4cee94fdb..99648ea32c 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "Emu/Io/Mouse.h" extern Module *sys_io; diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp index 14a80c0660..c04cd67a01 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Pad.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "Emu/Io/Pad.h" extern Module *sys_io; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 4203a77338..1e1b661111 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -1,9 +1,7 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "cellPamf.h" extern std::mutex g_mutex_avcodec_open2; @@ -14,12 +12,77 @@ extern "C" #include "libswresample/swresample.h" } +#include "cellPamf.h" #include "cellAdec.h" //void cellAdec_init(); //Module cellAdec(0x0006, cellAdec_init); Module *cellAdec = nullptr; +AudioDecoder::AudioDecoder(AudioCodecType type, u32 addr, u32 size, u32 func, u32 arg) + : type(type) + , memAddr(addr) + , memSize(size) + , memBias(0) + , cbFunc(func) + , cbArg(arg) + , adecCb(nullptr) + , is_running(false) + , is_finished(false) + , just_started(false) + , just_finished(false) + , ctx(nullptr) + , fmt(nullptr) +{ + AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); + if (!codec) + { + cellAdec->Error("AudioDecoder(): avcodec_find_decoder(ATRAC3P) failed"); + Emu.Pause(); + return; + } + fmt = avformat_alloc_context(); + if (!fmt) + { + cellAdec->Error("AudioDecoder(): avformat_alloc_context failed"); + Emu.Pause(); + return; + } + io_buf = (u8*)av_malloc(4096); + fmt->pb = avio_alloc_context(io_buf, 4096, 0, this, adecRead, NULL, NULL); + if (!fmt->pb) + { + cellAdec->Error("AudioDecoder(): avio_alloc_context failed"); + Emu.Pause(); + return; + } +} + +AudioDecoder::~AudioDecoder() +{ + // TODO: check finalization + if (ctx) + { + for (u32 i = frames.GetCount() - 1; ~i; i--) + { + AdecFrame& af = frames.Peek(i); + av_frame_unref(af.data); + av_frame_free(&af.data); + } + avcodec_close(ctx); + avformat_close_input(&fmt); + } + if (fmt) + { + if (io_buf) + { + av_free(io_buf); + } + if (fmt->pb) av_free(fmt->pb); + avformat_free_context(fmt); + } +} + int adecRawRead(void* opaque, u8* buf, int buf_size) { AudioDecoder& adec = *(AudioDecoder*)opaque; @@ -33,7 +96,7 @@ next: { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "adecRawRead(): aborted"); + cellAdec->Warning("adecRawRead(): aborted"); return 0; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -65,7 +128,7 @@ next: } break; default: - LOG_ERROR(HLE, "adecRawRead(): sequence error (task %d)", adec.job.Peek().type); + cellAdec->Error("adecRawRead(): sequence error (task %d)", adec.job.Peek().type); return -1; } @@ -100,7 +163,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) { if (buf_size < (int)adec.reader.rem_size) { - LOG_ERROR(HLE, "adecRead(): too small buf_size (rem_size = %d, buf_size = %d)", adec.reader.rem_size, buf_size); + cellAdec->Error("adecRead(): too small buf_size (rem_size = %d, buf_size = %d)", adec.reader.rem_size, buf_size); Emu.Pause(); return 0; } @@ -120,7 +183,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) if (adecRawRead(opaque, header, 8) < 8) break; if (header[0] != 0x0f || header[1] != 0xd0) { - LOG_ERROR(HLE, "adecRead(): 0x0FD0 header not found"); + cellAdec->Error("adecRead(): 0x0FD0 header not found"); Emu.Pause(); return -1; } @@ -130,7 +193,7 @@ int adecRead(void* opaque, u8* buf, int buf_size) OMAHeader oma(1 /* atrac3p id */, header[2], header[3]); if (buf_size < sizeof(oma) + 8) { - LOG_ERROR(HLE, "adecRead(): OMAHeader writing failed"); + cellAdec->Error("adecRead(): OMAHeader writing failed"); Emu.Pause(); return 0; } @@ -187,7 +250,7 @@ u32 adecOpen(AudioDecoder* data) thread t("Audio Decoder[" + std::to_string(adec_id) + "] Thread", [&]() { - LOG_NOTICE(HLE, "Audio Decoder thread started"); + cellAdec->Notice("Audio Decoder thread started"); AdecTask& task = adec.task; @@ -218,288 +281,288 @@ u32 adecOpen(AudioDecoder* data) switch (task.type) { case adecStartSeq: - { - // TODO: reset data - LOG_WARNING(HLE, "adecStartSeq:"); + { + // TODO: reset data + cellAdec->Warning("adecStartSeq:"); - adec.reader.addr = 0; - adec.reader.size = 0; - adec.reader.init = false; - if (adec.reader.rem) free(adec.reader.rem); - adec.reader.rem = nullptr; - adec.reader.rem_size = 0; - adec.is_running = true; - adec.just_started = true; - } - break; + adec.reader.addr = 0; + adec.reader.size = 0; + adec.reader.init = false; + if (adec.reader.rem) free(adec.reader.rem); + adec.reader.rem = nullptr; + adec.reader.rem_size = 0; + adec.is_running = true; + adec.just_started = true; + } + break; case adecEndSeq: - { - // TODO: finalize - LOG_WARNING(HLE, "adecEndSeq:"); + { + // TODO: finalize + cellAdec->Warning("adecEndSeq:"); - /*Callback cb; - cb.SetAddr(adec.cbFunc); - cb.Handle(adec.id, CELL_ADEC_MSG_TYPE_SEQDONE, CELL_OK, adec.cbArg); - cb.Branch(true); // ???*/ - adec.adecCb->ExecAsCallback(adec.cbFunc, true, adec.id, CELL_ADEC_MSG_TYPE_SEQDONE, CELL_OK, adec.cbArg); + /*Callback cb; + cb.SetAddr(adec.cbFunc); + cb.Handle(adec.id, CELL_ADEC_MSG_TYPE_SEQDONE, CELL_OK, adec.cbArg); + cb.Branch(true); // ???*/ + adec.adecCb->ExecAsCallback(adec.cbFunc, true, adec.id, CELL_ADEC_MSG_TYPE_SEQDONE, CELL_OK, adec.cbArg); - adec.is_running = false; - adec.just_finished = true; - } - break; + adec.is_running = false; + adec.just_finished = true; + } + break; case adecDecodeAu: + { + int err = 0; + + adec.reader.addr = task.au.addr; + adec.reader.size = task.au.size; + //LOG_NOTICE(HLE, "Audio AU: size = 0x%x, pts = 0x%llx", task.au.size, task.au.pts); + + if (adec.just_started) { - int err = 0; + adec.first_pts = task.au.pts; + adec.last_pts = task.au.pts - 0x10000; // hack + } - adec.reader.addr = task.au.addr; - adec.reader.size = task.au.size; - //LOG_NOTICE(HLE, "Audio AU: size = 0x%x, pts = 0x%llx", task.au.size, task.au.pts); - - if (adec.just_started) + struct AVPacketHolder : AVPacket + { + AVPacketHolder(u32 size) { - adec.first_pts = task.au.pts; - adec.last_pts = task.au.pts - 0x10000; // hack + av_init_packet(this); + + if (size) + { + data = (u8*)av_calloc(1, size + FF_INPUT_BUFFER_PADDING_SIZE); + this->size = size + FF_INPUT_BUFFER_PADDING_SIZE; + } + else + { + data = NULL; + size = 0; + } } - struct AVPacketHolder : AVPacket + ~AVPacketHolder() { - AVPacketHolder(u32 size) - { - av_init_packet(this); + av_free(data); + //av_free_packet(this); + } - if (size) - { - data = (u8*)av_calloc(1, size + FF_INPUT_BUFFER_PADDING_SIZE); - this->size = size + FF_INPUT_BUFFER_PADDING_SIZE; - } - else - { - data = NULL; - size = 0; - } - } + } au(0); - ~AVPacketHolder() - { - av_free(data); - //av_free_packet(this); - } + /*{ + wxFile dump; + dump.Open(wxString::Format("audio pts-0x%llx.dump", task.au.pts), wxFile::write); + u8* buf = (u8*)malloc(task.au.size); + if (Memory.CopyToReal(buf, task.au.addr, task.au.size)) dump.Write(buf, task.au.size); + free(buf); + dump.Close(); + }*/ - } au(0); + if (adec.just_started && adec.just_finished) + { + avcodec_flush_buffers(adec.ctx); + adec.reader.init = true; + adec.just_finished = false; + adec.just_started = false; + } + else if (adec.just_started) // deferred initialization + { + err = avformat_open_input(&adec.fmt, NULL, av_find_input_format("oma"), NULL); + if (err) + { + cellAdec->Error("adecDecodeAu: avformat_open_input() failed"); + Emu.Pause(); + break; + } + AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); // ??? + if (!codec) + { + cellAdec->Error("adecDecodeAu: avcodec_find_decoder() failed"); + Emu.Pause(); + break; + } + //err = avformat_find_stream_info(adec.fmt, NULL); + //if (err) + //{ + // cellAdec->Error("adecDecodeAu: avformat_find_stream_info() failed"); + // Emu.Pause(); + // break; + //} + //if (!adec.fmt->nb_streams) + //{ + // cellAdec->Error("adecDecodeAu: no stream found"); + // Emu.Pause(); + // break; + //} + if (!avformat_new_stream(adec.fmt, codec)) + { + cellAdec->Error("adecDecodeAu: avformat_new_stream() failed"); + Emu.Pause(); + break; + } + adec.ctx = adec.fmt->streams[0]->codec; // TODO: check data - /*{ - wxFile dump; - dump.Open(wxString::Format("audio pts-0x%llx.dump", task.au.pts), wxFile::write); - u8* buf = (u8*)malloc(task.au.size); - if (Memory.CopyToReal(buf, task.au.addr, task.au.size)) dump.Write(buf, task.au.size); - free(buf); - dump.Close(); + AVDictionary* opts = nullptr; + av_dict_set(&opts, "refcounted_frames", "1", 0); + { + std::lock_guard lock(g_mutex_avcodec_open2); + // not multithread-safe (???) + err = avcodec_open2(adec.ctx, codec, &opts); + } + if (err) + { + cellAdec->Error("adecDecodeAu: avcodec_open2() failed"); + Emu.Pause(); + break; + } + adec.just_started = false; + } + + bool last_frame = false; + + while (true) + { + if (Emu.IsStopped()) + { + cellAdec->Warning("adecDecodeAu: aborted"); + return; + } + + /*if (!adec.ctx) // fake + { + AdecFrame frame; + frame.pts = task.au.pts; + frame.auAddr = task.au.addr; + frame.auSize = task.au.size; + frame.userdata = task.au.userdata; + frame.size = 4096; + frame.data = nullptr; + adec.frames.Push(frame); + + adec.adecCb->ExecAsCallback(adec.cbFunc, false, adec.id, CELL_ADEC_MSG_TYPE_PCMOUT, CELL_OK, adec.cbArg); + + break; }*/ - if (adec.just_started && adec.just_finished) + last_frame = av_read_frame(adec.fmt, &au) < 0; + if (last_frame) { - avcodec_flush_buffers(adec.ctx); - adec.reader.init = true; - adec.just_finished = false; - adec.just_started = false; - } - else if (adec.just_started) // deferred initialization - { - err = avformat_open_input(&adec.fmt, NULL, av_find_input_format("oma"), NULL); - if (err) - { - LOG_ERROR(HLE, "adecDecodeAu: avformat_open_input() failed"); - Emu.Pause(); - break; - } - AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); // ??? - if (!codec) - { - LOG_ERROR(HLE, "adecDecodeAu: avcodec_find_decoder() failed"); - Emu.Pause(); - break; - } - /*err = avformat_find_stream_info(adec.fmt, NULL); - if (err) - { - LOG_ERROR(HLE, "adecDecodeAu: avformat_find_stream_info() failed"); - Emu.Pause(); - break; - } - if (!adec.fmt->nb_streams) - { - LOG_ERROR(HLE, "adecDecodeAu: no stream found"); - Emu.Pause(); - break; - }*/ - if (!avformat_new_stream(adec.fmt, codec)) - { - LOG_ERROR(HLE, "adecDecodeAu: avformat_new_stream() failed"); - Emu.Pause(); - break; - } - adec.ctx = adec.fmt->streams[0]->codec; // TODO: check data - - AVDictionary* opts = nullptr; - av_dict_set(&opts, "refcounted_frames", "1", 0); - { - std::lock_guard lock(g_mutex_avcodec_open2); - // not multithread-safe (???) - err = avcodec_open2(adec.ctx, codec, &opts); - } - if (err) - { - LOG_ERROR(HLE, "adecDecodeAu: avcodec_open2() failed"); - Emu.Pause(); - break; - } - adec.just_started = false; + //break; + av_free(au.data); + au.data = NULL; + au.size = 0; } - bool last_frame = false; - - while (true) + struct AdecFrameHolder : AdecFrame { - if (Emu.IsStopped()) + AdecFrameHolder() { - LOG_WARNING(HLE, "adecDecodeAu: aborted"); - return; + data = av_frame_alloc(); } - /*if (!adec.ctx) // fake + ~AdecFrameHolder() { - AdecFrame frame; - frame.pts = task.au.pts; - frame.auAddr = task.au.addr; - frame.auSize = task.au.size; - frame.userdata = task.au.userdata; - frame.size = 4096; - frame.data = nullptr; - adec.frames.Push(frame); + if (data) + { + av_frame_unref(data); + av_frame_free(&data); + } + } - adec.adecCb->ExecAsCallback(adec.cbFunc, false, adec.id, CELL_ADEC_MSG_TYPE_PCMOUT, CELL_OK, adec.cbArg); + } frame; + if (!frame.data) + { + cellAdec->Error("adecDecodeAu: av_frame_alloc() failed"); + Emu.Pause(); + break; + } + + int got_frame = 0; + + int decode = avcodec_decode_audio4(adec.ctx, frame.data, &got_frame, &au); + + if (decode <= 0) + { + if (!last_frame && decode < 0) + { + cellAdec->Error("adecDecodeAu: AU decoding error(0x%x)", decode); + } + if (!got_frame && adec.reader.size == 0) break; + } + + if (got_frame) + { + u64 ts = av_frame_get_best_effort_timestamp(frame.data); + if (ts != AV_NOPTS_VALUE) + { + frame.pts = ts/* - adec.first_pts*/; + adec.last_pts = frame.pts; + } + else + { + adec.last_pts += ((u64)frame.data->nb_samples) * 90000 / 48000; + frame.pts = adec.last_pts; + } + //frame.pts = adec.last_pts; + //adec.last_pts += ((u64)frame.data->nb_samples) * 90000 / 48000; // ??? + frame.auAddr = task.au.addr; + frame.auSize = task.au.size; + frame.userdata = task.au.userdata; + frame.size = frame.data->nb_samples * frame.data->channels * sizeof(float); + + if (frame.data->format != AV_SAMPLE_FMT_FLTP) + { + cellAdec->Error("adecDecodeaAu: unsupported frame format(%d)", frame.data->format); + Emu.Pause(); break; - }*/ - - last_frame = av_read_frame(adec.fmt, &au) < 0; - if (last_frame) - { - //break; - av_free(au.data); - au.data = NULL; - au.size = 0; } - - struct AdecFrameHolder : AdecFrame + if (frame.data->channels != 2) { - AdecFrameHolder() - { - data = av_frame_alloc(); - } - - ~AdecFrameHolder() - { - if (data) - { - av_frame_unref(data); - av_frame_free(&data); - } - } - - } frame; - - if (!frame.data) - { - LOG_ERROR(HLE, "adecDecodeAu: av_frame_alloc() failed"); + cellAdec->Error("adecDecodeAu: unsupported channel count (%d)", frame.data->channels); Emu.Pause(); break; } - int got_frame = 0; + //LOG_NOTICE(HLE, "got audio frame (pts=0x%llx, nb_samples=%d, ch=%d, sample_rate=%d, nbps=%d)", + //frame.pts, frame.data->nb_samples, frame.data->channels, frame.data->sample_rate, + //av_get_bytes_per_sample((AVSampleFormat)frame.data->format)); - int decode = avcodec_decode_audio4(adec.ctx, frame.data, &got_frame, &au); + adec.frames.Push(frame); + frame.data = nullptr; // to prevent destruction - if (decode <= 0) - { - if (!last_frame && decode < 0) - { - LOG_ERROR(HLE, "adecDecodeAu: AU decoding error(0x%x)", decode); - } - if (!got_frame && adec.reader.size == 0) break; - } - - if (got_frame) - { - u64 ts = av_frame_get_best_effort_timestamp(frame.data); - if (ts != AV_NOPTS_VALUE) - { - frame.pts = ts/* - adec.first_pts*/; - adec.last_pts = frame.pts; - } - else - { - adec.last_pts += ((u64)frame.data->nb_samples) * 90000 / 48000; - frame.pts = adec.last_pts; - } - //frame.pts = adec.last_pts; - //adec.last_pts += ((u64)frame.data->nb_samples) * 90000 / 48000; // ??? - frame.auAddr = task.au.addr; - frame.auSize = task.au.size; - frame.userdata = task.au.userdata; - frame.size = frame.data->nb_samples * frame.data->channels * sizeof(float); - - if (frame.data->format != AV_SAMPLE_FMT_FLTP) - { - LOG_ERROR(HLE, "adecDecodeaAu: unsupported frame format(%d)", frame.data->format); - Emu.Pause(); - break; - } - if (frame.data->channels != 2) - { - LOG_ERROR(HLE, "adecDecodeAu: unsupported channel count (%d)", frame.data->channels); - Emu.Pause(); - break; - } - - //LOG_NOTICE(HLE, "got audio frame (pts=0x%llx, nb_samples=%d, ch=%d, sample_rate=%d, nbps=%d)", - //frame.pts, frame.data->nb_samples, frame.data->channels, frame.data->sample_rate, - //av_get_bytes_per_sample((AVSampleFormat)frame.data->format)); - - adec.frames.Push(frame); - frame.data = nullptr; // to prevent destruction - - /*Callback cb; - cb.SetAddr(adec.cbFunc); - cb.Handle(adec.id, CELL_ADEC_MSG_TYPE_PCMOUT, CELL_OK, adec.cbArg); - cb.Branch(false);*/ - adec.adecCb->ExecAsCallback(adec.cbFunc, false, adec.id, CELL_ADEC_MSG_TYPE_PCMOUT, CELL_OK, adec.cbArg); - } + /*Callback cb; + cb.SetAddr(adec.cbFunc); + cb.Handle(adec.id, CELL_ADEC_MSG_TYPE_PCMOUT, CELL_OK, adec.cbArg); + cb.Branch(false);*/ + adec.adecCb->ExecAsCallback(adec.cbFunc, false, adec.id, CELL_ADEC_MSG_TYPE_PCMOUT, CELL_OK, adec.cbArg); } - - /*Callback cb; - cb.SetAddr(adec.cbFunc); - cb.Handle(adec.id, CELL_ADEC_MSG_TYPE_AUDONE, task.au.auInfo_addr, adec.cbArg); - cb.Branch(false);*/ - adec.adecCb->ExecAsCallback(adec.cbFunc, false, adec.id, CELL_ADEC_MSG_TYPE_AUDONE, task.au.auInfo_addr, adec.cbArg); } - break; + + /*Callback cb; + cb.SetAddr(adec.cbFunc); + cb.Handle(adec.id, CELL_ADEC_MSG_TYPE_AUDONE, task.au.auInfo_addr, adec.cbArg); + cb.Branch(false);*/ + adec.adecCb->ExecAsCallback(adec.cbFunc, false, adec.id, CELL_ADEC_MSG_TYPE_AUDONE, task.au.auInfo_addr, adec.cbArg); + } + break; case adecClose: - { - adec.is_finished = true; - LOG_NOTICE(HLE, "Audio Decoder thread ended"); - return; - } + { + adec.is_finished = true; + cellAdec->Notice("Audio Decoder thread ended"); + return; + } default: - LOG_ERROR(HLE, "Audio Decoder thread error: unknown task(%d)", task.type); + cellAdec->Error("Audio Decoder thread error: unknown task(%d)", task.type); } } adec.is_finished = true; - LOG_WARNING(HLE, "Audio Decoder thread aborted"); + cellAdec->Warning("Audio Decoder thread aborted"); }); t.detach(); @@ -511,8 +574,8 @@ bool adecCheckType(AudioCodecType type) { switch (type) { - case CELL_ADEC_TYPE_ATRACX: LOG_NOTICE(HLE, "adecCheckType: ATRAC3plus"); break; - case CELL_ADEC_TYPE_ATRACX_2CH: LOG_NOTICE(HLE, "adecCheckType: ATRAC3plus 2ch"); break; + case CELL_ADEC_TYPE_ATRACX: cellAdec->Notice("adecCheckType: ATRAC3plus"); break; + case CELL_ADEC_TYPE_ATRACX_2CH: cellAdec->Notice("adecCheckType: ATRAC3plus 2ch"); break; case CELL_ADEC_TYPE_ATRACX_6CH: case CELL_ADEC_TYPE_ATRACX_8CH: @@ -587,7 +650,7 @@ int cellAdecClose(u32 handle) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellAdecClose(%d) aborted", handle); + cellAdec->Warning("cellAdecClose(%d) aborted", handle); break; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -751,15 +814,15 @@ int cellAdecGetPcmItem(u32 handle, mem32_t pcmItem_ptr) void cellAdec_init() { - cellAdec->AddFunc(0x7e4a4a49, cellAdecQueryAttr); - cellAdec->AddFunc(0xd00a6988, cellAdecOpen); - cellAdec->AddFunc(0x8b5551a4, cellAdecOpenEx); - cellAdec->AddFunc(0x847d2380, cellAdecClose); - cellAdec->AddFunc(0x487b613e, cellAdecStartSeq); - cellAdec->AddFunc(0xe2ea549b, cellAdecEndSeq); - cellAdec->AddFunc(0x1529e506, cellAdecDecodeAu); - cellAdec->AddFunc(0x97ff2af1, cellAdecGetPcm); - cellAdec->AddFunc(0xbd75f78b, cellAdecGetPcmItem); + REG_FUNC(cellAdec, cellAdecQueryAttr); + REG_FUNC(cellAdec, cellAdecOpen); + REG_FUNC(cellAdec, cellAdecOpenEx); + REG_FUNC(cellAdec, cellAdecClose); + REG_FUNC(cellAdec, cellAdecStartSeq); + REG_FUNC(cellAdec, cellAdecEndSeq); + REG_FUNC(cellAdec, cellAdecDecodeAu); + REG_FUNC(cellAdec, cellAdecGetPcm); + REG_FUNC(cellAdec, cellAdecGetPcmItem); av_register_all(); avcodec_register_all(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.h b/rpcs3/Emu/SysCalls/Modules/cellAdec.h index 108844f22c..a72c126094 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.h @@ -1117,67 +1117,7 @@ public: CPUThread* adecCb; - AudioDecoder(AudioCodecType type, u32 addr, u32 size, u32 func, u32 arg) - : type(type) - , memAddr(addr) - , memSize(size) - , memBias(0) - , cbFunc(func) - , cbArg(arg) - , adecCb(nullptr) - , is_running(false) - , is_finished(false) - , just_started(false) - , just_finished(false) - , ctx(nullptr) - , fmt(nullptr) - { - AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); - if (!codec) - { - LOG_ERROR(HLE, "AudioDecoder(): avcodec_find_decoder(ATRAC3P) failed"); - Emu.Pause(); - return; - } - fmt = avformat_alloc_context(); - if (!fmt) - { - LOG_ERROR(HLE, "AudioDecoder(): avformat_alloc_context failed"); - Emu.Pause(); - return; - } - io_buf = (u8*)av_malloc(4096); - fmt->pb = avio_alloc_context(io_buf, 4096, 0, this, adecRead, NULL, NULL); - if (!fmt->pb) - { - LOG_ERROR(HLE, "AudioDecoder(): avio_alloc_context failed"); - Emu.Pause(); - return; - } - } + AudioDecoder(AudioCodecType type, u32 addr, u32 size, u32 func, u32 arg); - ~AudioDecoder() - { - // TODO: check finalization - if (ctx) - { - for (u32 i = frames.GetCount() - 1; ~i; i--) - { - AdecFrame& af = frames.Peek(i); - av_frame_unref(af.data); - av_frame_free(&af.data); - } - avcodec_close(ctx); - avformat_close_input(&fmt); - } - if (fmt) - { - if (io_buf) - { - av_free(io_buf); - } - if (fmt->pb) av_free(fmt->pb); - avformat_free_context(fmt); - } - } + ~AudioDecoder(); }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp index ddc1c1bf56..7967075062 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAtrac.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index f9239b7f81..b370717eb3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -1,15 +1,15 @@ #include "stdafx.h" -#include "rpcs3/Ini.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + +#include "rpcs3/Ini.h" #include "Utilities/SQueue.h" #include "Emu/Event.h" #include "Emu/SysCalls/lv2/sys_time.h" -#include "Emu/Audio/cellAudio.h" -#include "Emu/Audio/AudioManager.h" +//#include "Emu/Audio/AudioManager.h" #include "Emu/Audio/AudioDumper.h" +#include "Emu/Audio/cellAudio.h" //void cellAudio_init(); //Module cellAudio(0x0011, cellAudio_init); @@ -52,11 +52,11 @@ int cellAudioInit() if (do_dump && !m_dump.Init()) { - LOG_ERROR(HLE, "cellAudioInit(): AudioDumper::Init() failed"); + cellAudio->Error("cellAudioInit(): AudioDumper::Init() failed"); return; } - LOG_NOTICE(HLE, "Audio thread started"); + cellAudio->Notice("Audio thread started"); if (Ini.AudioDumpToFile.GetValue()) m_dump.WriteHeader(); @@ -137,7 +137,7 @@ int cellAudioInit() { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "Audio thread aborted"); + cellAudio->Warning("Audio thread aborted"); goto abort; } @@ -417,7 +417,7 @@ int cellAudioInit() { if (m_dump.WriteData(&buf8ch, sizeof(buf8ch)) != sizeof(buf8ch)) // write file data { - LOG_ERROR(HLE, "cellAudioInit(): AudioDumper::WriteData() failed"); + cellAudio->Error("cellAudioInit(): AudioDumper::WriteData() failed"); goto abort; } } @@ -425,13 +425,13 @@ int cellAudioInit() { if (m_dump.WriteData(&buf2ch, sizeof(buf2ch)) != sizeof(buf2ch)) // write file data { - LOG_ERROR(HLE, "cellAudioInit(): AudioDumper::WriteData() failed"); + cellAudio->Error("cellAudioInit(): AudioDumper::WriteData() failed"); goto abort; } } else { - LOG_ERROR(HLE, "cellAudioInit(): unknown AudioDumper::GetCh() value (%d)", m_dump.GetCh()); + cellAudio->Error("cellAudioInit(): unknown AudioDumper::GetCh() value (%d)", m_dump.GetCh()); goto abort; } } @@ -439,7 +439,7 @@ int cellAudioInit() //LOG_NOTICE(HLE, "Audio perf: start=%d (access=%d, AddData=%d, events=%d, dump=%d)", //stamp0 - m_config.start_time, stamp1 - stamp0, stamp2 - stamp1, stamp3 - stamp2, get_system_time() - stamp3); } - LOG_NOTICE(HLE, "Audio thread ended"); + cellAudio->Notice("Audio thread ended"); abort: queue.Push(nullptr); queue_float.Push(nullptr); @@ -471,7 +471,7 @@ abort: { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellAudioInit() aborted"); + cellAudio->Warning("cellAudioInit() aborted"); return CELL_OK; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -496,7 +496,7 @@ int cellAudioQuit() std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellAudioQuit(): aborted"); + cellAudio->Warning("cellAudioQuit(): aborted"); return CELL_OK; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index e1bb563179..8b99c8098b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -1,9 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" + #include "cellPamf.h" #include "cellDmux.h" @@ -11,6 +10,300 @@ //Module cellDmux(0x0007, cellDmux_init); Module *cellDmux = nullptr; +PesHeader::PesHeader(DemuxerStream& stream) + : pts(0xffffffffffffffffull) + , dts(0xffffffffffffffffull) + , size(0) + , new_au(false) +{ + u16 header; + stream.get(header); + stream.get(size); + if (size) + { + u8 empty = 0; + u8 v; + while (true) + { + stream.get(v); + if (v != 0xFF) break; // skip padding bytes + empty++; + if (empty == size) return; + }; + + if ((v & 0xF0) == 0x20 && (size - empty) >= 5) // pts only + { + new_au = true; + pts = stream.get_ts(v); + stream.skip(size - empty - 5); + } + else + { + new_au = true; + if ((v & 0xF0) != 0x30 || (size - empty) < 10) + { + cellDmux->Error("PesHeader(): pts not found"); + Emu.Pause(); + } + pts = stream.get_ts(v); + stream.get(v); + if ((v & 0xF0) != 0x10) + { + cellDmux->Error("PesHeader(): dts not found"); + Emu.Pause(); + } + dts = stream.get_ts(v); + stream.skip(size - empty - 10); + } + } +} + +bool ElementaryStream::is_full() +{ + if (released < put_count) + { + u32 first = entries.Peek(); + if (first >= put) + { + return (first - put) < GetMaxAU(); + } + else + { + // probably, always false + return (put + GetMaxAU()) > (memAddr + memSize); + } + } + else + { + return false; + } +} + +const u32 ElementaryStream::GetMaxAU() const +{ + return (fidMajor == 0xbd) ? 4096 : 640 * 1024 + 128; // TODO +} + +u32 ElementaryStream::freespace() +{ + if (size > GetMaxAU()) + { + cellDmux->Error("es::freespace(): last_size too big (size=0x%x, max_au=0x%x)", size, GetMaxAU()); + Emu.Pause(); + return 0; + } + return GetMaxAU() - size; +} + +bool ElementaryStream::hasunseen() +{ + std::lock_guard lock(m_mutex); + return peek_count < put_count; +} + +bool ElementaryStream::hasdata() +{ + std::lock_guard lock(m_mutex); + return size != 0; +} + +bool ElementaryStream::isfull() +{ + std::lock_guard lock(m_mutex); + return is_full(); +} + +void ElementaryStream::finish(DemuxerStream& stream) // not multithread-safe +{ + u32 addr; + { + std::lock_guard lock(m_mutex); + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + + addr = put; + /*if (!first) + { + first = put; + } + if (!peek) + { + peek = put; + }*/ + + mem_ptr_t info(put); + //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::finish(): (%s) size = 0x%x, info_addr=0x%x, pts = 0x%x", + //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), + //(u32)info->auSize, put, (u32)info->ptsLower); + + u32 new_addr = a128(put + 128 + size); + put = ((new_addr + GetMaxAU()) > (memAddr + memSize)) + ? memAddr : new_addr; + + size = 0; + + put_count++; + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + } + if (!entries.Push(addr)) + { + cellDmux->Error("es::finish() aborted (no space)"); + } +} + +void ElementaryStream::push(DemuxerStream& stream, u32 sz, PesHeader& pes) +{ + std::lock_guard lock(m_mutex); + + if (is_full()) + { + cellDmux->Error("es::push(): buffer is full"); + Emu.Pause(); + return; + } + + u32 data_addr = put + 128 + size; + size += sz; + memcpy(Memory + data_addr, Memory + stream.addr, sz); + stream.skip(sz); + + mem_ptr_t info(put); + info->auAddr = put + 128; + info->auSize = size; + if (pes.new_au) + { + info->dts.lower = (u32)pes.dts; + info->dts.upper = (u32)(pes.dts >> 32); + info->pts.lower = (u32)pes.pts; + info->pts.upper = (u32)(pes.pts >> 32); + info->isRap = false; // TODO: set valid value + info->reserved = 0; + info->userData = stream.userdata; + } + + mem_ptr_t tail(put + sizeof(CellDmuxAuInfoEx)); + tail->reserved1 = 0; + + mem_ptr_t inf(put + 64); + inf->auAddr = put + 128; + inf->auSize = size; + if (pes.new_au) + { + inf->dtsLower = (u32)pes.dts; + inf->dtsUpper = (u32)(pes.dts >> 32); + inf->ptsLower = (u32)pes.pts; + inf->ptsUpper = (u32)(pes.pts >> 32); + inf->auMaxSize = 0; // ????? + inf->userData = stream.userdata; + } +} + +bool ElementaryStream::release() +{ + std::lock_guard lock(m_mutex); + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + if (released >= put_count) + { + cellDmux->Error("es::release(): buffer is empty"); + return false; + } + + u32 addr = entries.Peek(); + + mem_ptr_t info(addr); + //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::release(): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", + //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), (u32)info->auSize, first, (u32)info->ptsLower); + + if (released >= peek_count) + { + cellDmux->Error("es::release(): buffer has not been seen yet"); + return false; + } + + /*u32 new_addr = a128(info.GetAddr() + 128 + info->auSize); + + if (new_addr == put) + { + first = 0; + } + else if ((new_addr + GetMaxAU()) > (memAddr + memSize)) + { + first = memAddr; + } + else + { + first = new_addr; + }*/ + + released++; + if (!entries.Pop(addr)) + { + cellDmux->Error("es::release(): entries.Pop() aborted (no entries found)"); + return false; + } + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + return true; +} + +bool ElementaryStream::peek(u32& out_data, bool no_ex, u32& out_spec, bool update_index) +{ + std::lock_guard lock(m_mutex); + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), + //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); + if (peek_count >= put_count) return false; + + if (peek_count < released) + { + cellDmux->Error("es::peek(): sequence error: peek_count < released (peek_count=%d, released=%d)", peek_count, released); + Emu.Pause(); + return false; + } + + u32 addr = entries.Peek(peek_count - released); + mem_ptr_t info(addr); + //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::peek(%sAu(Ex)): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", + //wxString(update_index ? "Get" : "Peek").wx_str(), + //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), (u32)info->auSize, peek, (u32)info->ptsLower); + + out_data = addr; + out_spec = out_data + sizeof(CellDmuxAuInfoEx); + if (no_ex) out_data += 64; + + if (update_index) + { + /*u32 new_addr = a128(peek + 128 + info->auSize); + if (new_addr == put) + { + peek = 0; + } + else if ((new_addr + GetMaxAU()) > (memAddr + memSize)) + { + peek = memAddr; + } + else + { + peek = new_addr; + }*/ + peek_count++; + } + + //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), + //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); + return true; +} + +void ElementaryStream::reset() +{ + std::lock_guard lock(m_mutex); + //first = 0; + //peek = 0; + put = memAddr; + size = 0; + entries.Clear(); + put_count = 0; + released = 0; + peek_count = 0; +} + void dmuxQueryAttr(u32 info_addr /* may be 0 */, mem_ptr_t attr) { attr->demuxerVerLower = 0x280000; // TODO: check values @@ -44,7 +337,7 @@ u32 dmuxOpen(Demuxer* data) thread t("Demuxer[" + std::to_string(dmux_id) + "] Thread", [&]() { - LOG_NOTICE(HLE, "Demuxer thread started (mem=0x%x, size=0x%x, cb=0x%x, arg=0x%x)", dmux.memAddr, dmux.memSize, dmux.cbFunc, dmux.cbArg); + cellDmux->Notice("Demuxer thread started (mem=0x%x, size=0x%x, cb=0x%x, arg=0x%x)", dmux.memAddr, dmux.memSize, dmux.cbFunc, dmux.cbArg); DemuxerTask task; DemuxerStream stream; @@ -131,7 +424,7 @@ u32 dmuxOpen(Demuxer* data) if (!pes.new_au) // temporarily { - LOG_ERROR(HLE, "No pts info found"); + cellDmux->Error("No pts info found"); } // read additional header: @@ -261,7 +554,7 @@ u32 dmuxOpen(Demuxer* data) case 0x1dc: case 0x1dd: case 0x1de: case 0x1df: { // unknown - LOG_WARNING(HLE, "Unknown MPEG stream found"); + cellDmux->Warning("Unknown MPEG stream found"); stream.skip(4); stream.get(len); stream.skip(len); @@ -270,7 +563,7 @@ u32 dmuxOpen(Demuxer* data) case USER_DATA_START_CODE: { - LOG_ERROR(HLE, "USER_DATA_START_CODE found"); + cellDmux->Error("USER_DATA_START_CODE found"); return; } @@ -297,7 +590,7 @@ u32 dmuxOpen(Demuxer* data) { if (task.stream.discontinuity) { - LOG_WARNING(HLE, "dmuxSetStream (beginning)"); + cellDmux->Warning("dmuxSetStream (beginning)"); for (u32 i = 0; i < 192; i++) { if (esALL[i]) @@ -311,7 +604,7 @@ u32 dmuxOpen(Demuxer* data) if (updates_count != updates_signaled) { - LOG_ERROR(HLE, "dmuxSetStream: stream update inconsistency (input=%d, signaled=%d)", updates_count, updates_signaled); + cellDmux->Error("dmuxSetStream: stream update inconsistency (input=%d, signaled=%d)", updates_count, updates_signaled); return; } @@ -350,7 +643,7 @@ u32 dmuxOpen(Demuxer* data) case dmuxClose: { dmux.is_finished = true; - LOG_NOTICE(HLE, "Demuxer thread ended"); + cellDmux->Notice("Demuxer thread ended"); return; } @@ -374,7 +667,7 @@ u32 dmuxOpen(Demuxer* data) } else { - LOG_WARNING(HLE, "dmuxEnableEs: (TODO) unsupported filter (0x%x, 0x%x, 0x%x, 0x%x)", es.fidMajor, es.fidMinor, es.sup1, es.sup2); + cellDmux->Warning("dmuxEnableEs: (TODO) unsupported filter (0x%x, 0x%x, 0x%x, 0x%x)", es.fidMajor, es.fidMinor, es.sup1, es.sup2); } es.dmux = &dmux; } @@ -385,7 +678,7 @@ u32 dmuxOpen(Demuxer* data) ElementaryStream& es = *task.es.es_ptr; if (es.dmux != &dmux) { - LOG_WARNING(HLE, "dmuxDisableEs: invalid elementary stream"); + cellDmux->Warning("dmuxDisableEs: invalid elementary stream"); break; } for (u32 i = 0; i < 192; i++) @@ -443,11 +736,11 @@ u32 dmuxOpen(Demuxer* data) break; default: - LOG_ERROR(HLE, "Demuxer thread error: unknown task(%d)", task.type); + cellDmux->Error("Demuxer thread error: unknown task(%d)", task.type); return; } } - LOG_WARNING(HLE, "Demuxer thread aborted"); + cellDmux->Warning("Demuxer thread aborted"); }); t.detach(); @@ -551,7 +844,7 @@ int cellDmuxClose(u32 demuxerHandle) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellDmuxClose(%d) aborted", demuxerHandle); + cellDmux->Warning("cellDmuxClose(%d) aborted", demuxerHandle); return CELL_OK; } @@ -578,7 +871,7 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellDmuxSetStream(%d) aborted (waiting)", demuxerHandle); + cellDmux->Warning("cellDmuxSetStream(%d) aborted (waiting)", demuxerHandle); return CELL_OK; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -597,12 +890,12 @@ int cellDmuxSetStream(u32 demuxerHandle, const u32 streamAddress, u32 streamSize u32 addr; if (!dmux->fbSetStream.Pop(addr)) { - LOG_WARNING(HLE, "cellDmuxSetStream(%d) aborted (fbSetStream.Pop())", demuxerHandle); + cellDmux->Warning("cellDmuxSetStream(%d) aborted (fbSetStream.Pop())", demuxerHandle); return CELL_OK; } if (addr != info.addr) { - LOG_ERROR(HLE, "cellDmuxSetStream(%d): wrong stream queued (right=0x%x, queued=0x%x)", demuxerHandle, info.addr, addr); + cellDmux->Error("cellDmuxSetStream(%d): wrong stream queued (right=0x%x, queued=0x%x)", demuxerHandle, info.addr, addr); Emu.Pause(); } return CELL_OK; @@ -638,12 +931,12 @@ int cellDmuxResetStreamAndWaitDone(u32 demuxerHandle) u32 addr; if (!dmux->fbSetStream.Pop(addr)) { - LOG_WARNING(HLE, "cellDmuxResetStreamAndWaitDone(%d) aborted (fbSetStream.Pop())", demuxerHandle); + cellDmux->Warning("cellDmuxResetStreamAndWaitDone(%d) aborted (fbSetStream.Pop())", demuxerHandle); return CELL_OK; } if (addr != 0) { - LOG_ERROR(HLE, "cellDmuxResetStreamAndWaitDone(%d): wrong stream queued (0x%x)", demuxerHandle, addr); + cellDmux->Error("cellDmuxResetStreamAndWaitDone(%d): wrong stream queued (0x%x)", demuxerHandle, addr); Emu.Pause(); } return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.h b/rpcs3/Emu/SysCalls/Modules/cellDmux.h index db6e39b5c8..cd0e5c6af7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.h +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.h @@ -362,53 +362,7 @@ struct PesHeader u8 size; bool new_au; - PesHeader(DemuxerStream& stream) - : pts(0xffffffffffffffff) - , dts(0xffffffffffffffff) - , size(0) - , new_au(false) - { - u16 header; - stream.get(header); - stream.get(size); - if (size) - { - u8 empty = 0; - u8 v; - while (true) - { - stream.get(v); - if (v != 0xFF) break; // skip padding bytes - empty++; - if (empty == size) return; - }; - - if ((v & 0xF0) == 0x20 && (size - empty) >= 5) // pts only - { - new_au = true; - pts = stream.get_ts(v); - stream.skip(size - empty - 5); - } - else - { - new_au = true; - if ((v & 0xF0) != 0x30 || (size - empty) < 10) - { - LOG_ERROR(HLE, "PesHeader(): pts not found"); - Emu.Pause(); - } - pts = stream.get_ts(v); - stream.get(v); - if ((v & 0xF0) != 0x10) - { - LOG_ERROR(HLE, "PesHeader(): dts not found"); - Emu.Pause(); - } - dts = stream.get_ts(v); - stream.skip(size - empty - 10); - } - } - } + PesHeader(DemuxerStream& stream); }; class ElementaryStream; @@ -493,26 +447,7 @@ class ElementaryStream //u32 first; // AU that will be released //u32 peek; // AU that will be obtained by GetAu(Ex)/PeekAu(Ex) - bool is_full() - { - if (released < put_count) - { - u32 first = entries.Peek(); - if (first >= put) - { - return (first - put) < GetMaxAU(); - } - else - { - // probably, always false - return (put + GetMaxAU()) > (memAddr + memSize); - } - } - else - { - return false; - } - } + bool is_full(); public: Demuxer* dmux; @@ -548,228 +483,23 @@ public: { } - const u32 GetMaxAU() const - { - return (fidMajor == 0xbd) ? 4096 : 640 * 1024 + 128; // TODO - } + const u32 GetMaxAU() const; - u32 freespace() - { - if (size > GetMaxAU()) - { - LOG_ERROR(HLE, "es::freespace(): last_size too big (size=0x%x, max_au=0x%x)", size, GetMaxAU()); - Emu.Pause(); - return 0; - } - return GetMaxAU() - size; - } + u32 freespace(); - bool hasunseen() - { - std::lock_guard lock(m_mutex); - return peek_count < put_count; - } + bool hasunseen(); - bool hasdata() - { - std::lock_guard lock(m_mutex); - return size; - } + bool hasdata(); - bool isfull() - { - std::lock_guard lock(m_mutex); - return is_full(); - } + bool isfull(); - void finish(DemuxerStream& stream) // not multithread-safe - { - u32 addr; - { - std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); + void finish(DemuxerStream& stream); - addr = put; - /*if (!first) - { - first = put; - } - if (!peek) - { - peek = put; - }*/ + void push(DemuxerStream& stream, u32 sz, PesHeader& pes); - mem_ptr_t info(put); - //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::finish(): (%s) size = 0x%x, info_addr=0x%x, pts = 0x%x", - //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), - //(u32)info->auSize, put, (u32)info->ptsLower); + bool release(); - u32 new_addr = a128(put + 128 + size); - put = ((new_addr + GetMaxAU()) > (memAddr + memSize)) - ? memAddr : new_addr; + bool peek(u32& out_data, bool no_ex, u32& out_spec, bool update_index); - size = 0; - - put_count++; - //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::finish(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); - } - if (!entries.Push(addr)) - { - LOG_ERROR(HLE, "es::finish() aborted (no space)"); - } - } - - void push(DemuxerStream& stream, u32 sz, PesHeader& pes) - { - std::lock_guard lock(m_mutex); - - if (is_full()) - { - LOG_ERROR(HLE, "es::push(): buffer is full"); - Emu.Pause(); - return; - } - - u32 data_addr = put + 128 + size; - size += sz; - memcpy(Memory + data_addr, Memory + stream.addr, sz); - stream.skip(sz); - - mem_ptr_t info(put); - info->auAddr = put + 128; - info->auSize = size; - if (pes.new_au) - { - info->dts.lower = (u32)pes.dts; - info->dts.upper = (u32)(pes.dts >> 32); - info->pts.lower = (u32)pes.pts; - info->pts.upper = (u32)(pes.pts >> 32); - info->isRap = false; // TODO: set valid value - info->reserved = 0; - info->userData = stream.userdata; - } - - mem_ptr_t tail(put + sizeof(CellDmuxAuInfoEx)); - tail->reserved1 = 0; - - mem_ptr_t inf(put + 64); - inf->auAddr = put + 128; - inf->auSize = size; - if (pes.new_au) - { - inf->dtsLower = (u32)pes.dts; - inf->dtsUpper = (u32)(pes.dts >> 32); - inf->ptsLower = (u32)pes.pts; - inf->ptsUpper = (u32)(pes.pts >> 32); - inf->auMaxSize = 0; // ????? - inf->userData = stream.userdata; - } - } - - bool release() - { - std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); - if (released >= put_count) - { - LOG_ERROR(HLE, "es::release(): buffer is empty"); - return false; - } - - u32 addr = entries.Peek(); - - mem_ptr_t info(addr); - //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::release(): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", - //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), (u32)info->auSize, first, (u32)info->ptsLower); - - if (released >= peek_count) - { - LOG_ERROR(HLE, "es::release(): buffer has not been seen yet"); - return false; - } - - /*u32 new_addr = a128(info.GetAddr() + 128 + info->auSize); - - if (new_addr == put) - { - first = 0; - } - else if ((new_addr + GetMaxAU()) > (memAddr + memSize)) - { - first = memAddr; - } - else - { - first = new_addr; - }*/ - - released++; - if (!entries.Pop(addr)) - { - LOG_ERROR(HLE, "es::release(): entries.Pop() aborted (no entries found)"); - return false; - } - //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::release(): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", peek, first, put, size); - return true; - } - - bool peek(u32& out_data, bool no_ex, u32& out_spec, bool update_index) - { - std::lock_guard lock(m_mutex); - //if (fidMajor != 0xbd) LOG_NOTICE(HLE, ">>> es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), - //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); - if (peek_count >= put_count) return false; - - if (peek_count < released) - { - LOG_ERROR(HLE, "es::peek(): sequence error: peek_count < released (peek_count=%d, released=%d)", peek_count, released); - Emu.Pause(); - return false; - } - - u32 addr = entries.Peek(peek_count - released); - mem_ptr_t info(addr); - //if (fidMajor != 0xbd) LOG_WARNING(HLE, "es::peek(%sAu(Ex)): (%s) size = 0x%x, info = 0x%x, pts = 0x%x", - //wxString(update_index ? "Get" : "Peek").wx_str(), - //wxString(fidMajor == 0xbd ? "ATRAC3P Audio" : "Video AVC").wx_str(), (u32)info->auSize, peek, (u32)info->ptsLower); - - out_data = addr; - out_spec = out_data + sizeof(CellDmuxAuInfoEx); - if (no_ex) out_data += 64; - - if (update_index) - { - /*u32 new_addr = a128(peek + 128 + info->auSize); - if (new_addr == put) - { - peek = 0; - } - else if ((new_addr + GetMaxAU()) > (memAddr + memSize)) - { - peek = memAddr; - } - else - { - peek = new_addr; - }*/ - peek_count++; - } - - //if (fidMajor != 0xbd) LOG_NOTICE(HLE, "<<< es::peek(%sAu%s): peek=0x%x, first=0x%x, put=0x%x, size=0x%x", wxString(update_index ? "Get" : "Peek").wx_str(), - //wxString(no_ex ? "" : "Ex").wx_str(), peek, first, put, size); - return true; - } - - void reset() - { - std::lock_guard lock(m_mutex); - //first = 0; - //peek = 0; - put = memAddr; - size = 0; - entries.Clear(); - put_count = 0; - released = 0; - peek_count = 0; - } + void reset(); }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index c9b94eea86..5987358ef3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -1,12 +1,10 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" + +#include "stblib/stb_truetype.h" #include "Emu/FS/vfsFile.h" #include "cellFont.h" -#include "stblib/stb_truetype.h" //void cellFont_init(); //void cellFont_load(); @@ -14,224 +12,6 @@ //Module cellFont(0x0019, cellFont_init, cellFont_load, cellFont_unload); Module *cellFont = nullptr; -// Font Set Types -enum -{ - CELL_FONT_TYPE_RODIN_SANS_SERIF_LATIN = 0x00000000, - CELL_FONT_TYPE_RODIN_SANS_SERIF_LIGHT_LATIN = 0x00000001, - CELL_FONT_TYPE_RODIN_SANS_SERIF_BOLD_LATIN = 0x00000002, - CELL_FONT_TYPE_RODIN_SANS_SERIF_LATIN2 = 0x00000018, - CELL_FONT_TYPE_RODIN_SANS_SERIF_LIGHT_LATIN2 = 0x00000019, - CELL_FONT_TYPE_RODIN_SANS_SERIF_BOLD_LATIN2 = 0x0000001a, - CELL_FONT_TYPE_MATISSE_SERIF_LATIN = 0x00000020, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_JAPANESE = 0x00000008, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_LIGHT_JAPANESE = 0x00000009, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_BOLD_JAPANESE = 0x0000000a, - CELL_FONT_TYPE_YD_GOTHIC_KOREAN = 0x0000000c, - CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_LATIN = 0x00000040, - CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_LATIN2 = 0x00000041, - CELL_FONT_TYPE_VAGR_SANS_SERIF_ROUND = 0x00000043, - CELL_FONT_TYPE_VAGR_SANS_SERIF_ROUND_LATIN2 = 0x00000044, - CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_JAPANESE = 0x00000048, - - CELL_FONT_TYPE_NEWRODIN_GOTHIC_JP_SET = 0x00000100, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_LATIN_SET = 0x00000101, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN_SET = 0x00000104, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN2_SET = 0x00000204, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN2_SET = 0x00000201, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_DFHEI5_SET = 0x00000108, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_DFHEI5_RODIN_SET = 0x00000109, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_DFHEI5_RODIN2_SET = 0x00000209, - CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_TCH_SET = 0x0000010a, - CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_RODIN_TCH_SET = 0x0000010b, - CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_RODIN2_TCH_SET = 0x0000020b, - CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_SCH_SET = 0x0000010c, - CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_RODIN_SCH_SET = 0x0000010d, - CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_RODIN2_SCH_SET = 0x0000020d, - - CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_RSANS_SET = 0x00300104, - CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_RSANS_SET = 0x00300105, - CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_JP_SET = 0x00300107, - CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_YG_DFHEI5_RSANS_SET = 0x00300109, - CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_YG_DFHEI5_RSANS_SET = 0x0030010F, - CELL_FONT_TYPE_VAGR_SEURAT_CAPIE_MARU_GOTHIC_RSANS_SET = 0x00300124, - CELL_FONT_TYPE_VAGR_SEURAT_CAPIE_MARU_GOTHIC_YG_DFHEI5_RSANS_SET = 0x00300129, - - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_LIGHT_SET = 0x00040100, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN_LIGHT_SET = 0x00040101, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN2_LIGHT_SET = 0x00040201, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN_LIGHT_SET = 0x00040104, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN2_LIGHT_SET = 0x00040204, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_BOLD_SET = 0x00070100, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN_BOLD_SET = 0x00070101, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN2_BOLD_SET = 0x00070201, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN_BOLD_SET = 0x00070104, - CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN2_BOLD_SET = 0x00070204, - - CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_RSANS2_SET = 0x00300204, - CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_RSANS2_SET = 0x00300205, - CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_YG_DFHEI5_RSANS2_SET = 0x00300209, - CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_YG_DFHEI5_RSANS2_SET = 0x0030020F, - CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_YG_DFHEI5_VAGR2_SET = 0x00300229, - CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_VAGR2_SET = 0x00300224, -}; - -enum -{ - CELL_FONT_MAP_FONT = 0, - CELL_FONT_MAP_UNICODE = 1, -}; - -struct CellFontConfig -{ - struct { - be_t buffer_addr; - be_t size; - } FileCache; - - be_t userFontEntryMax; - be_t userFontEntrys_addr; - be_t flags; -}; - -struct CellFontRenderer -{ - void *systemReserved[64]; -}; - -//Custom enum to determine the origin of a CellFont object -enum -{ - CELL_FONT_OPEN_FONTSET, - CELL_FONT_OPEN_FONT_FILE, - CELL_FONT_OPEN_FONT_INSTANCE, - CELL_FONT_OPEN_MEMORY, -}; - -struct CellFont -{ - //void* SystemReserved[64]; - be_t scale_x; - be_t scale_y; - be_t slant; - be_t renderer_addr; - - stbtt_fontinfo stbfont; - be_t fontdata_addr; - be_t origin; -}; - -struct CellFontType -{ - be_t type; - be_t map; -}; - -struct CellFontInitGraphicsConfigGcm -{ - be_t configType; - struct { - be_t address; - be_t size; - } GraphicsMemory; - struct { - be_t address; - be_t size; - } MappedMainMemory; - struct { - be_t slotNumber; - be_t slotCount; - } VertexShader; -}; - -struct CellFontGraphics -{ - u32 graphicsType; - u32 SystemClosed_addr; -}; - -struct CellFontHorizontalLayout -{ - be_t baseLineY; - be_t lineHeight; - be_t effectHeight; -}; - -struct CellFontVerticalLayout -{ - be_t baseLineX; - be_t lineWidth; - be_t effectWidth; -}; - -struct CellFontGlyphMetrics -{ - be_t width; - be_t height; - struct { - be_t bearingX; - be_t bearingY; - be_t advance; - } Horizontal; - struct { - be_t bearingX; - be_t bearingY; - be_t advance; - } Vertical; -}; - -struct CellFontImageTransInfo -{ - be_t Image_addr; - be_t imageWidthByte; - be_t imageWidth; - be_t imageHeight; - be_t Surface_addr; - be_t surfWidthByte; -}; - -struct CellFontRendererConfig -{ - struct BufferingPolicy - { - be_t buffer; - be_t initSize; - be_t maxSize; - be_t expandSize; - be_t resetSize; - }; -}; - -struct CellFontRenderSurface -{ - be_t buffer_addr; - be_t widthByte; - be_t pixelSizeByte; - be_t width, height; - struct { - be_t x0, y0; - be_t x1, y1; - } Scissor; -}; - -// Internal Datatypes -struct CCellFontInternal //Module cellFont -{ - u32 m_buffer_addr, m_buffer_size; - u32 m_userFontEntrys_addr, m_userFontEntryMax; - - bool m_bInitialized; - bool m_bFontGcmInitialized; - - CCellFontInternal() - : m_buffer_addr(0) - , m_buffer_size(0) - , m_bInitialized(false) - , m_bFontGcmInitialized(false) - { - } -}; - CCellFontInternal* s_fontInternalInstance = nullptr; // Functions @@ -295,7 +75,9 @@ int cellFontOpenFontMemory(mem_ptr_t library, u32 fontAddr, u32 if (!s_fontInternalInstance->m_bInitialized) return CELL_FONT_ERROR_UNINITIALIZED; - if (!stbtt_InitFont(&(font->stbfont), (unsigned char*)Memory.VirtualToRealAddr(fontAddr), 0)) + font->stbfont = (stbtt_fontinfo*)((u8*)&(font->stbfont) + sizeof(void*)); // hack: use next bytes of the struct + + if (!stbtt_InitFont(font->stbfont, (unsigned char*)Memory.VirtualToRealAddr(fontAddr), 0)) return CELL_FONT_ERROR_FONT_OPEN_FAILED; font->renderer_addr = 0; @@ -483,8 +265,8 @@ int cellFontGetHorizontalLayout(mem_ptr_t font, mem_ptr_tstbfont), font->scale_y); - stbtt_GetFontVMetrics(&(font->stbfont), &ascent, &descent, &lineGap); + float scale = stbtt_ScaleForPixelHeight(font->stbfont, font->scale_y); + stbtt_GetFontVMetrics(font->stbfont, &ascent, &descent, &lineGap); layout->baseLineY = ascent * scale; layout->lineHeight = (ascent-descent+lineGap) * scale; @@ -558,14 +340,14 @@ int cellFontRenderCharGlyphImage(mem_ptr_t font, u32 code, mem_ptr_tstbfont), font->scale_y); - unsigned char* box = stbtt_GetCodepointBitmap(&(font->stbfont), scale, scale, code, &width, &height, &xoff, &yoff); + float scale = stbtt_ScaleForPixelHeight(font->stbfont, font->scale_y); + unsigned char* box = stbtt_GetCodepointBitmap(font->stbfont, scale, scale, code, &width, &height, &xoff, &yoff); if (!box) return CELL_OK; // Get the baseLineY value int baseLineY; int ascent, descent, lineGap; - stbtt_GetFontVMetrics(&(font->stbfont), &ascent, &descent, &lineGap); + stbtt_GetFontVMetrics(font->stbfont, &ascent, &descent, &lineGap); baseLineY = ascent * scale; // Move the rendered character to the surface @@ -640,9 +422,9 @@ int cellFontGetCharGlyphMetrics(mem_ptr_t font, u32 code, mem_ptr_tstbfont), font->scale_y); - stbtt_GetCodepointBox(&(font->stbfont), code, &x0, &y0, &x1, &y1); - stbtt_GetCodepointHMetrics(&(font->stbfont), code, &advanceWidth, &leftSideBearing); + float scale = stbtt_ScaleForPixelHeight(font->stbfont, font->scale_y); + stbtt_GetCodepointBox(font->stbfont, code, &x0, &y0, &x1, &y1); + stbtt_GetCodepointHMetrics(font->stbfont, code, &advanceWidth, &leftSideBearing); // TODO: Add the rest of the information metrics->width = (x1-x0) * scale; diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.h b/rpcs3/Emu/SysCalls/Modules/cellFont.h index f2cf9f1321..2f4dee8410 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.h +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.h @@ -44,4 +44,225 @@ struct CellFontMemoryInterface //CellFontFreeCallback Free; //CellFontReallocCallback Realloc; //CellFontCallocCallback Calloc; +}; + +// Font Set Types +enum +{ + CELL_FONT_TYPE_RODIN_SANS_SERIF_LATIN = 0x00000000, + CELL_FONT_TYPE_RODIN_SANS_SERIF_LIGHT_LATIN = 0x00000001, + CELL_FONT_TYPE_RODIN_SANS_SERIF_BOLD_LATIN = 0x00000002, + CELL_FONT_TYPE_RODIN_SANS_SERIF_LATIN2 = 0x00000018, + CELL_FONT_TYPE_RODIN_SANS_SERIF_LIGHT_LATIN2 = 0x00000019, + CELL_FONT_TYPE_RODIN_SANS_SERIF_BOLD_LATIN2 = 0x0000001a, + CELL_FONT_TYPE_MATISSE_SERIF_LATIN = 0x00000020, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_JAPANESE = 0x00000008, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_LIGHT_JAPANESE = 0x00000009, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_BOLD_JAPANESE = 0x0000000a, + CELL_FONT_TYPE_YD_GOTHIC_KOREAN = 0x0000000c, + CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_LATIN = 0x00000040, + CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_LATIN2 = 0x00000041, + CELL_FONT_TYPE_VAGR_SANS_SERIF_ROUND = 0x00000043, + CELL_FONT_TYPE_VAGR_SANS_SERIF_ROUND_LATIN2 = 0x00000044, + CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_JAPANESE = 0x00000048, + + CELL_FONT_TYPE_NEWRODIN_GOTHIC_JP_SET = 0x00000100, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_LATIN_SET = 0x00000101, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN_SET = 0x00000104, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN2_SET = 0x00000204, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN2_SET = 0x00000201, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_DFHEI5_SET = 0x00000108, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_DFHEI5_RODIN_SET = 0x00000109, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_DFHEI5_RODIN2_SET = 0x00000209, + CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_TCH_SET = 0x0000010a, + CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_RODIN_TCH_SET = 0x0000010b, + CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_RODIN2_TCH_SET = 0x0000020b, + CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_SCH_SET = 0x0000010c, + CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_RODIN_SCH_SET = 0x0000010d, + CELL_FONT_TYPE_DFHEI5_GOTHIC_YG_NEWRODIN_RODIN2_SCH_SET = 0x0000020d, + + CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_RSANS_SET = 0x00300104, + CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_RSANS_SET = 0x00300105, + CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_JP_SET = 0x00300107, + CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_YG_DFHEI5_RSANS_SET = 0x00300109, + CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_YG_DFHEI5_RSANS_SET = 0x0030010F, + CELL_FONT_TYPE_VAGR_SEURAT_CAPIE_MARU_GOTHIC_RSANS_SET = 0x00300124, + CELL_FONT_TYPE_VAGR_SEURAT_CAPIE_MARU_GOTHIC_YG_DFHEI5_RSANS_SET = 0x00300129, + + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_LIGHT_SET = 0x00040100, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN_LIGHT_SET = 0x00040101, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN2_LIGHT_SET = 0x00040201, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN_LIGHT_SET = 0x00040104, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN2_LIGHT_SET = 0x00040204, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_BOLD_SET = 0x00070100, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN_BOLD_SET = 0x00070101, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_YG_RODIN2_BOLD_SET = 0x00070201, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN_BOLD_SET = 0x00070104, + CELL_FONT_TYPE_NEWRODIN_GOTHIC_RODIN2_BOLD_SET = 0x00070204, + + CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_RSANS2_SET = 0x00300204, + CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_RSANS2_SET = 0x00300205, + CELL_FONT_TYPE_SEURAT_MARU_GOTHIC_YG_DFHEI5_RSANS2_SET = 0x00300209, + CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_YG_DFHEI5_RSANS2_SET = 0x0030020F, + CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_YG_DFHEI5_VAGR2_SET = 0x00300229, + CELL_FONT_TYPE_SEURAT_CAPIE_MARU_GOTHIC_VAGR2_SET = 0x00300224, +}; + +enum +{ + CELL_FONT_MAP_FONT = 0, + CELL_FONT_MAP_UNICODE = 1, +}; + +struct CellFontConfig +{ + struct { + be_t buffer_addr; + be_t size; + } FileCache; + + be_t userFontEntryMax; + be_t userFontEntrys_addr; + be_t flags; +}; + +struct CellFontRenderer +{ + void *systemReserved[64]; +}; + +//Custom enum to determine the origin of a CellFont object +enum +{ + CELL_FONT_OPEN_FONTSET, + CELL_FONT_OPEN_FONT_FILE, + CELL_FONT_OPEN_FONT_INSTANCE, + CELL_FONT_OPEN_MEMORY, +}; + +struct stbtt_fontinfo; + +struct CellFont +{ + //void* SystemReserved[64]; + be_t scale_x; + be_t scale_y; + be_t slant; + be_t renderer_addr; + + be_t fontdata_addr; + be_t origin; + stbtt_fontinfo* stbfont; + // hack: don't place anything after pointer +}; + +struct CellFontType +{ + be_t type; + be_t map; +}; + +struct CellFontInitGraphicsConfigGcm +{ + be_t configType; + struct { + be_t address; + be_t size; + } GraphicsMemory; + struct { + be_t address; + be_t size; + } MappedMainMemory; + struct { + be_t slotNumber; + be_t slotCount; + } VertexShader; +}; + +struct CellFontGraphics +{ + u32 graphicsType; + u32 SystemClosed_addr; +}; + +struct CellFontHorizontalLayout +{ + be_t baseLineY; + be_t lineHeight; + be_t effectHeight; +}; + +struct CellFontVerticalLayout +{ + be_t baseLineX; + be_t lineWidth; + be_t effectWidth; +}; + +struct CellFontGlyphMetrics +{ + be_t width; + be_t height; + struct { + be_t bearingX; + be_t bearingY; + be_t advance; + } Horizontal; + struct { + be_t bearingX; + be_t bearingY; + be_t advance; + } Vertical; +}; + +struct CellFontImageTransInfo +{ + be_t Image_addr; + be_t imageWidthByte; + be_t imageWidth; + be_t imageHeight; + be_t Surface_addr; + be_t surfWidthByte; +}; + +struct CellFontRendererConfig +{ + struct BufferingPolicy + { + be_t buffer; + be_t initSize; + be_t maxSize; + be_t expandSize; + be_t resetSize; + }; +}; + +struct CellFontRenderSurface +{ + be_t buffer_addr; + be_t widthByte; + be_t pixelSizeByte; + be_t width, height; + struct { + be_t x0, y0; + be_t x1, y1; + } Scissor; +}; + +// Internal Datatypes +struct CCellFontInternal //Module cellFont +{ + u32 m_buffer_addr, m_buffer_size; + u32 m_userFontEntrys_addr, m_userFontEntryMax; + + bool m_bInitialized; + bool m_bFontGcmInitialized; + + CCellFontInternal() + : m_buffer_addr(0) + , m_buffer_size(0) + , m_bInitialized(false) + , m_bFontGcmInitialized(false) + { + } }; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp index ed1a50092b..7b42bf90fd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.cpp @@ -1,9 +1,9 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "cellFont.h" +#include "cellFontFT.h" //void cellFontFT_init(); //void cellFontFT_load(); @@ -11,33 +11,6 @@ //Module cellFontFT(0x001a, cellFontFT_init, cellFontFT_load, cellFontFT_unload); Module *cellFontFT = nullptr; -struct CellFontLibraryConfigFT -{ - u32 library_addr; //void* - CellFontMemoryInterface MemoryIF; -}; - -struct CellFontRendererConfigFT -{ - struct { - u32 buffer_addr; //void* - u32 initSize; - u32 maxSize; - u32 expandSize; - u32 resetSize; - } BufferingPolicy; -}; - -struct CCellFontFTInternal -{ - bool m_bInitialized; - - CCellFontFTInternal() - : m_bInitialized(false) - { - } -}; - CCellFontFTInternal* s_fontFtInternalInstance = nullptr; int cellFontInitLibraryFreeTypeWithRevision(u64 revisionFlags, mem_ptr_t config, u32 lib_addr_addr) diff --git a/rpcs3/Emu/SysCalls/Modules/cellFontFT.h b/rpcs3/Emu/SysCalls/Modules/cellFontFT.h new file mode 100644 index 0000000000..fb8a0c109f --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellFontFT.h @@ -0,0 +1,28 @@ +#pragma once + +struct CellFontLibraryConfigFT +{ + u32 library_addr; //void* + CellFontMemoryInterface MemoryIF; +}; + +struct CellFontRendererConfigFT +{ + struct { + u32 buffer_addr; //void* + u32 initSize; + u32 maxSize; + u32 expandSize; + u32 resetSize; + } BufferingPolicy; +}; + +struct CCellFontFTInternal +{ + bool m_bInitialized; + + CCellFontFTInternal() + : m_bInitialized(false) + { + } +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index cec371afba..95d8bff3f2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -1,13 +1,11 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Utilities/rMsgBox.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + +#include "Utilities/rMsgBox.h" #include "Emu/FS/vfsFile.h" - #include "Loader/PSF.h" - #include "cellGame.h" //void cellGame_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 688db567f8..5c994b3baf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -1,11 +1,10 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/RSX/GCM.h" -#include "Emu/SysCalls/lv2/sys_process.h" -#include "sysPrxForUser.h" + +//#include "Emu/RSX/GCM.h" +//#include "Emu/SysCalls/lv2/sys_process.h" #include "cellGcmSys.h" //void cellGcmSys_init(); @@ -487,7 +486,7 @@ s32 cellGcmSetPrepareFlip(mem_ptr_t ctxt, u32 id) if(current + 8 >= end) { - LOG_WARNING(HLE, "bad flip!"); + cellGcmSys->Error("bad flip!"); //cellGcmCallback(ctxt.GetAddr(), current + 8 - end); //copied: diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index f70893af79..96ebff239e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -1,6 +1,6 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/SysCalls/Modules.h" + #include "cellGem.h" void cellGem_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index 9662ba0417..b684204a00 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -1,13 +1,11 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "cellGifDec.h" -#include "Emu/SysCalls/lv2/lv2Fs.h" #include "stblib/stb_image.h" #include "stblib/stb_image.c" // (TODO: Should we put this elsewhere?) +#include "Emu/SysCalls/lv2/lv2Fs.h" +#include "cellGifDec.h" //void cellGifDec_init(); //Module cellGifDec(0xf010, cellGifDec_init); @@ -269,7 +267,7 @@ int cellGifDecClose(u32 mainHandle, u32 subHandle) return CELL_GIFDEC_ERROR_FATAL; cellFsClose(subHandle_data->fd); - Emu.GetIdManager().RemoveID(subHandle); + cellGifDec->RemoveId(subHandle); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.h b/rpcs3/Emu/SysCalls/Modules/cellGifDec.h index 7ed3160b27..7783855306 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.h @@ -1,6 +1,5 @@ #pragma once - //Return Codes enum { diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index 64eb0696d6..43fd50ca63 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -1,11 +1,10 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "cellJpgDec.h" + #include "stblib/stb_image.h" #include "Emu/SysCalls/lv2/lv2Fs.h" +#include "cellJpgDec.h" //void cellJpgDec_init(); //Module cellJpgDec(0x000f, cellJpgDec_init); @@ -76,7 +75,7 @@ int cellJpgDecClose(u32 mainHandle, u32 subHandle) return CELL_JPGDEC_ERROR_FATAL; cellFsClose(subHandle_data->fd); - Emu.GetIdManager().RemoveID(subHandle); + cellJpgDec->RemoveId(subHandle); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp index b9eb3f6739..3f4db02ebd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellL10n.cpp @@ -1,8 +1,7 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "cellL10n.h" #include #include @@ -286,9 +285,9 @@ int _L10nConvertStr(int src_code, const void* src, size_t * src_len, int dst_cod //TODO: Check the code in emulation. If support for UTF8/UTF16/UTF32/UCS2/UCS4 should use wider chars.. awful. int L10nConvertStr(int src_code, mem8_ptr_t src, mem64_t src_len, int dst_code, mem8_ptr_t dst, mem64_t dst_len) { - LOG_ERROR(HLE, "L10nConvertStr(src_code=%d,src=0x%x,src_len=%ld,dst_code=%d,dst=0x%x,dst_len=%ld)", + cellL10n->Todo("L10nConvertStr(src_code=%d,src=0x%x,src_len=%ld,dst_code=%d,dst=0x%x,dst_len=%ld)", src_code, src.GetAddr(), src_len.GetValue(), dst_code, dst.GetAddr(), dst_len.GetValue()); - LOG_ERROR(HLE, "L10nConvertStr: 1st char at dst: %x(Hex)", *((char*)Memory.VirtualToRealAddr(src.GetAddr()))); + cellL10n->Todo("L10nConvertStr: 1st char at dst: %x(Hex)", *((char*)Memory.VirtualToRealAddr(src.GetAddr()))); #ifdef _MSC_VER unsigned int srcCode = 0, dstCode = 0; //OEM code pages bool src_page_converted = _L10nCodeParse(src_code, srcCode); //Check if code is in list. diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index dc958afdc9..76b43b0643 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -1,12 +1,11 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Utilities/rMsgBox.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/lv2/sys_time.h" -#include "rpcs3.h" +#include "rpcs3.h" +#include "Utilities/rMsgBox.h" +#include "Emu/SysCalls/lv2/sys_time.h" #include "cellSysutil.h" #include "cellMsgDialog.h" @@ -46,8 +45,8 @@ int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_tWarning("Message: \n%s", msgString.GetString()); break; + case CELL_MSGDIALOG_TYPE_SE_TYPE_ERROR: cellSysutil->Error("Message: \n%s", msgString.GetString()); break; } switch (type & CELL_MSGDIALOG_TYPE_SE_MUTE) // TODO @@ -361,7 +360,7 @@ int cellMsgDialogProgressBarSetMsg(u32 progressBarIndex, mem_list_ptr_t msgS return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; } - if (progressBarIndex >= (u32)(bool)m_gauge1 + (u32)(bool)m_gauge2) + if (progressBarIndex >= (m_gauge1 ? 1u : 0u) + (m_gauge2 ? 1u : 0u)) { return CELL_MSGDIALOG_ERROR_PARAM; } @@ -390,7 +389,7 @@ int cellMsgDialogProgressBarReset(u32 progressBarIndex) return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; } - if (progressBarIndex >= (u32)(bool)m_gauge1 + (u32)(bool)m_gauge2) + if (progressBarIndex >= (m_gauge1 ? 1u : 0u) + (m_gauge2 ? 1u : 0u)) { return CELL_MSGDIALOG_ERROR_PARAM; } @@ -415,7 +414,7 @@ int cellMsgDialogProgressBarInc(u32 progressBarIndex, u32 delta) return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; } - if (progressBarIndex >= (u32)(bool)m_gauge1 + (u32)(bool)m_gauge2) + if (progressBarIndex >= (m_gauge1 ? 1u : 0u) + (m_gauge2 ? 1u : 0u)) { return CELL_MSGDIALOG_ERROR_PARAM; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index ad1b6d5e41..e4c2df02b9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" #include "cellNetCtl.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 7332696116..1ea9c785a0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -1,8 +1,7 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "cellPamf.h" Module *cellPamf = nullptr; diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 988cd09c82..e94e3369c8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -1,11 +1,10 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "cellPngDec.h" + #include "stblib/stb_image.h" #include "Emu/SysCalls/lv2/lv2Fs.h" +#include "cellPngDec.h" #include //void cellPngDec_init(); @@ -114,7 +113,7 @@ int cellPngDecClose(u32 mainHandle, u32 subHandle) return CELL_PNGDEC_ERROR_FATAL; cellFsClose(subHandle_data->fd); - Emu.GetIdManager().RemoveID(subHandle); + cellPngDec->RemoveId(subHandle); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index cdc2a27488..e27532d895 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "cellSysutil.h" #include "Emu/RSX/sysutil_video.h" #include "cellResc.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp index 529a62f129..fbb110e40b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRtc.cpp @@ -1,9 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Utilities/rTime.h" #include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" +#include "Utilities/rTime.h" #include "cellRtc.h" //void cellRtc_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp index e191eea5e0..6859c20edf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" #include "cellSail.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index d8af04b127..16860d49a4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -1,9 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/Cell/SPURSManager.h" #include "cellSpurs.h" //void cellSpurs_init(); @@ -258,10 +257,10 @@ s32 cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) #endif } -s32 cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, mem_func_ptr_t eaHandler, u32 arg_addr) +s32 cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, u32 eaHandler_addr, u32 arg_addr) { - cellSpurs->Warning("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)", - spurs.GetAddr(), eaHandler.GetAddr(), arg_addr); + cellSpurs->Warning("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x)", + spurs.GetAddr(), eaHandler_addr, arg_addr); #ifdef PRX_DEBUG return GetCurrentPPUThread().FastCall2(libsre + 0xD6D0, libsre_rtoc); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h index 13d56dfaef..b23fea8496 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h @@ -1,5 +1,4 @@ #pragma once -#include "Emu/Cell/SPURSManager.h" // Core return codes. enum @@ -33,6 +32,55 @@ enum CELL_SPURS_TASK_ERROR_SHUTDOWN = 0x80410920, }; +// SPURS defines. +enum SPURSKernelInterfaces +{ + CELL_SPURS_MAX_SPU = 8, + CELL_SPURS_MAX_WORKLOAD = 16, + CELL_SPURS_MAX_WORKLOAD2 = 32, + CELL_SPURS_MAX_PRIORITY = 16, + CELL_SPURS_NAME_MAX_LENGTH = 15, + CELL_SPURS_SIZE = 4096, + CELL_SPURS_SIZE2 = 8192, + CELL_SPURS_ALIGN = 128, + CELL_SPURS_ATTRIBUTE_SIZE = 512, + CELL_SPURS_ATTRIBUTE_ALIGN = 8, + CELL_SPURS_INTERRUPT_VECTOR = 0x0, + CELL_SPURS_LOCK_LINE = 0x80, + CELL_SPURS_KERNEL_DMA_TAG_ID = 31, +}; + +enum RangeofEventQueuePortNumbers +{ + CELL_SPURS_STATIC_PORT_RANGE_BOTTOM = 15, + CELL_SPURS_DYNAMIC_PORT_RANGE_TOP = 16, + CELL_SPURS_DYNAMIC_PORT_RANGE_BOTTOM = 63, +}; + +enum SPURSTraceTypes +{ + CELL_SPURS_TRACE_TAG_LOAD = 0x2a, + CELL_SPURS_TRACE_TAG_MAP = 0x2b, + CELL_SPURS_TRACE_TAG_START = 0x2c, + CELL_SPURS_TRACE_TAG_STOP = 0x2d, + CELL_SPURS_TRACE_TAG_USER = 0x2e, + CELL_SPURS_TRACE_TAG_GUID = 0x2f, +}; + +// SPURS task defines. +enum TaskConstants +{ + CELL_SPURS_MAX_TASK = 128, + CELL_SPURS_TASK_TOP = 0x3000, + CELL_SPURS_TASK_BOTTOM = 0x40000, + CELL_SPURS_MAX_TASK_NAME_LENGTH = 32, +}; + +class SPURSManager; +class SPURSManagerAttribute; +class SPURSManagerEventFlag; +class SPURSManagerTaskset; + // Core CellSpurs structures. struct CellSpurs { @@ -146,11 +194,11 @@ struct CellSpursTracePacket }; // Exception handlers. -typedef void (*CellSpursGlobalExceptionEventHandler)(mem_ptr_t spurs, const mem_ptr_t info, - u32 id, mem_ptr_t arg); - -typedef void (*CellSpursTasksetExceptionEventHandler)(mem_ptr_t spurs, mem_ptr_t taskset, - u32 idTask, const mem_ptr_t info, mem_ptr_t arg); +//typedef void (*CellSpursGlobalExceptionEventHandler)(mem_ptr_t spurs, const mem_ptr_t info, +// u32 id, mem_ptr_t arg); +// +//typedef void (*CellSpursTasksetExceptionEventHandler)(mem_ptr_t spurs, mem_ptr_t taskset, +// u32 idTask, const mem_ptr_t info, mem_ptr_t arg); struct CellSpursTasksetInfo { @@ -159,7 +207,7 @@ struct CellSpursTasksetInfo be_t idWorkload; be_t idLastScheduledTask; //typedef unsigned CellSpursTaskId be_t name_addr; - CellSpursTasksetExceptionEventHandler exceptionEventHandler; + be_t exceptionEventHandler_addr; be_t exceptionEventHandlerArgument_addr; //void *exceptionEventHandlerArgument be_t sizeTaskset; //be_t reserved[]; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index be77ae600f..e8f2908d89 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -1,11 +1,10 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "Emu/SysCalls/lv2/sys_process.h" #include "Emu/Event.h" - #include "cellSync.h" //void cellSync_init(); @@ -90,7 +89,7 @@ s32 cellSyncMutexLock(mem_ptr_t mutex) std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellSyncMutexLock(mutex_addr=0x%x) aborted", mutex.GetAddr()); + cellSync->Warning("cellSyncMutexLock(mutex_addr=0x%x) aborted", mutex.GetAddr()); break; } } @@ -219,7 +218,7 @@ s32 cellSyncBarrierNotify(mem_ptr_t barrier) std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellSyncBarrierNotify(barrier_addr=0x%x) aborted", barrier.GetAddr()); + cellSync->Warning("cellSyncBarrierNotify(barrier_addr=0x%x) aborted", barrier.GetAddr()); return CELL_OK; } continue; @@ -306,7 +305,7 @@ s32 cellSyncBarrierWait(mem_ptr_t barrier) std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellSyncBarrierWait(barrier_addr=0x%x) aborted", barrier.GetAddr()); + cellSync->Warning("cellSyncBarrierWait(barrier_addr=0x%x) aborted", barrier.GetAddr()); return CELL_OK; } continue; @@ -1039,10 +1038,10 @@ s32 cellSyncQueueClear(mem_ptr_t queue) void syncLFQueueDump(mem_ptr_t queue) { - LOG_NOTICE(HLE, "CellSyncLFQueue dump: addr = 0x%x", queue.GetAddr()); + cellSync->Notice("CellSyncLFQueue dump: addr = 0x%x", queue.GetAddr()); for (u32 i = 0; i < sizeof(CellSyncLFQueue) / 16; i++) { - LOG_NOTICE(HLE, "*** 0x%.16llx 0x%.16llx", Memory.Read64(queue.GetAddr() + i * 16), Memory.Read64(queue.GetAddr() + i * 16 + 8)); + cellSync->Notice("*** 0x%.16llx 0x%.16llx", Memory.Read64(queue.GetAddr() + i * 16), Memory.Read64(queue.GetAddr() + i * 16 + 8)); } } @@ -2309,7 +2308,7 @@ void cellSync_init() } else { - LOG_NOTICE(HLE, "libsre: 0x%x : 0x%llx", i - libsre, flag); + cellSync->Notice("libsre: 0x%x : 0x%llx", i - libsre, flag); } } }); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp index c470d28e36..89b1b9333d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysmodule.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/ModuleManager.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 5490e172be..343637046f 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -1,20 +1,18 @@ #include "stdafx.h" -#include "rpcs3/Ini.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" #include "Emu/DbgCommand.h" -#include "Emu/FS/vfsFile.h" -#include "Emu/Audio/sysutil_audio.h" -#include "cellSysutil.h" -#include "cellSysutil_SaveData.h" +#include "rpcs3/Ini.h" +#include "Emu/FS/vfsFile.h" +#include "Loader/PSF.h" +#include "Emu/Audio/sysutil_audio.h" #include "Emu/RSX/sysutil_video.h" #include "cellMsgDialog.h" #include "cellGame.h" - -#include "Loader/PSF.h" +#include "cellSysutil.h" +#include "cellSysutil_SaveData.h" typedef void (*CellHddGameStatCallback)(mem_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set); @@ -329,7 +327,7 @@ int cellSysutilCheckCallback() std::this_thread::sleep_for(std::chrono::milliseconds(1)); if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellSysutilCheckCallback() aborted"); + cellSysutil->Warning("cellSysutilCheckCallback() aborted"); break; } } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp index 2c2ddb95b3..0eb532cfed 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp @@ -1,7 +1,5 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/Modules.h" //void cellSysutilAp_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index fbc06e6693..d3b465417c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -1,14 +1,13 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" + #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" -#include - -#include "cellSysutil_SaveData.h" #include "Loader/PSF.h" +#include "cellSysutil_SaveData.h" +#include extern Module *cellSysutil; @@ -228,7 +227,7 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ { funcFile(result.GetAddr(), fileGet.GetAddr(), fileSet.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "modifySaveDataFiles: CellSaveDataFileCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("modifySaveDataFiles: CellSaveDataFileCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } if (result->result == CELL_SAVEDATA_CBRESULT_OK_LAST) { @@ -249,7 +248,7 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ case CELL_SAVEDATA_FILETYPE_CONTENT_SND0: filepath += "SND0.AT3"; break; default: - LOG_ERROR(HLE, "modifySaveDataFiles: Unknown fileType! Aborting..."); + cellSysutil->Error("modifySaveDataFiles: Unknown fileType! Aborting..."); return CELL_SAVEDATA_ERROR_PARAM; } @@ -272,11 +271,11 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ break; case CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC: - LOG_WARNING(HLE, "modifySaveDataFiles: File operation CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC not yet implemented"); + cellSysutil->Warning("modifySaveDataFiles: File operation CELL_SAVEDATA_FILEOP_WRITE_NOTRUNC not yet implemented"); break; default: - LOG_ERROR(HLE, "modifySaveDataFiles: Unknown fileOperation! Aborting..."); + cellSysutil->Error("modifySaveDataFiles: Unknown fileOperation! Aborting..."); return CELL_SAVEDATA_ERROR_PARAM; } @@ -334,7 +333,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m funcList(result.GetAddr(), listGet.GetAddr(), listSet.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -342,7 +341,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m if (listSet->newData.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { - LOG_WARNING(HLE, "cellSaveDataListSave2: No save entries found!"); // TODO: Find a better way to handle this error + cellSysutil->Warning("cellSaveDataListSave2: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -355,7 +354,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.GetAddr()) @@ -414,7 +413,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m funcList(result.GetAddr(), listGet.GetAddr(), listSet.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -422,7 +421,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m if (listSet->newData.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { - LOG_WARNING(HLE, "cellSaveDataListLoad2: No save entries found!"); // TODO: Find a better way to handle this error + cellSysutil->Warning("cellSaveDataListLoad2: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -435,7 +434,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.GetAddr()) @@ -493,7 +492,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, } funcFixed(result.GetAddr(), listGet.GetAddr(), fixedSet.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataFixedSave2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } setSaveDataFixed(saveEntries, fixedSet.GetAddr()); @@ -504,7 +503,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.GetAddr()) @@ -562,7 +561,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, } funcFixed(result.GetAddr(), listGet.GetAddr(), fixedSet.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataFixedLoad2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } setSaveDataFixed(saveEntries, fixedSet.GetAddr()); @@ -573,7 +572,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, funcStat(result.GetAddr(), statGet.GetAddr(), statSet.GetAddr()); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.GetAddr()) @@ -626,7 +625,7 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataAutoSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataAutoSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.GetAddr()) @@ -666,7 +665,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ // The target entry does not exist if (saveEntries.size() == 0) { - LOG_WARNING(HLE, "cellSaveDataAutoLoad2: Couldn't find save entry (%s)", dirName.c_str()); + cellSysutil->Warning("cellSaveDataAutoLoad2: Couldn't find save entry (%s)", dirName.c_str()); return CELL_OK; // TODO: Can anyone check the actual behaviour of a PS3 when saves are not found? } @@ -676,7 +675,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataAutoLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataAutoLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } /*if (statSet->setParam.GetAddr()) diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index a8325f6082..c549d2fada 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 9cb6efa0bf..73da9bb124 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -1,9 +1,7 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include "cellPamf.h" std::mutex g_mutex_avcodec_open2; @@ -14,12 +12,77 @@ extern "C" #include "libavutil/imgutils.h" } +#include "cellPamf.h" #include "cellVdec.h" //void cellVdec_init(); //Module cellVdec(0x0005, cellVdec_init); Module *cellVdec = nullptr; +VideoDecoder::VideoDecoder(CellVdecCodecType type, u32 profile, u32 addr, u32 size, u32 func, u32 arg) + : type(type) + , profile(profile) + , memAddr(addr) + , memSize(size) + , memBias(0) + , cbFunc(func) + , cbArg(arg) + , is_finished(false) + , is_running(false) + , just_started(false) + , just_finished(false) + , ctx(nullptr) + , vdecCb(nullptr) +{ + AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); + if (!codec) + { + cellVdec->Error("VideoDecoder(): avcodec_find_decoder(H264) failed"); + Emu.Pause(); + return; + } + fmt = avformat_alloc_context(); + if (!fmt) + { + cellVdec->Error("VideoDecoder(): avformat_alloc_context failed"); + Emu.Pause(); + return; + } + io_buf = (u8*)av_malloc(4096); + fmt->pb = avio_alloc_context(io_buf, 4096, 0, this, vdecRead, NULL, NULL); + if (!fmt->pb) + { + cellVdec->Error("VideoDecoder(): avio_alloc_context failed"); + Emu.Pause(); + return; + } +} + +VideoDecoder::~VideoDecoder() +{ + // TODO: check finalization + if (ctx) + { + for (u32 i = frames.GetCount() - 1; ~i; i--) + { + VdecFrame& vf = frames.Peek(i); + av_frame_unref(vf.data); + av_frame_free(&vf.data); + } + avcodec_close(ctx); + avformat_close_input(&fmt); + } + if (fmt) + { + if (io_buf) + { + av_free(io_buf); + } + if (fmt->pb) av_free(fmt->pb); + avformat_free_context(fmt); + } +} + int vdecRead(void* opaque, u8* buf, int buf_size) { VideoDecoder& vdec = *(VideoDecoder*)opaque; @@ -33,7 +96,7 @@ next: { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "vdecRead(): aborted"); + cellVdec->Warning("vdecRead(): aborted"); return 0; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -69,7 +132,7 @@ next: } break; default: - LOG_ERROR(HLE, "vdecRead(): sequence error (task %d)", vdec.job.Peek().type); + cellVdec->Error("vdecRead(): sequence error (task %d)", vdec.job.Peek().type); return 0; } @@ -126,7 +189,7 @@ u32 vdecOpen(VideoDecoder* data) thread t("Video Decoder[" + std::to_string(vdec_id) + "] Thread", [&]() { - LOG_NOTICE(HLE, "Video Decoder thread started"); + cellVdec->Notice("Video Decoder thread started"); VdecTask& task = vdec.task; @@ -157,257 +220,257 @@ u32 vdecOpen(VideoDecoder* data) switch (task.type) { case vdecStartSeq: - { - // TODO: reset data - LOG_WARNING(HLE, "vdecStartSeq:"); + { + // TODO: reset data + cellVdec->Warning("vdecStartSeq:"); - vdec.reader.addr = 0; - vdec.reader.size = 0; - vdec.is_running = true; - vdec.just_started = true; - } - break; + vdec.reader.addr = 0; + vdec.reader.size = 0; + vdec.is_running = true; + vdec.just_started = true; + } + break; case vdecEndSeq: - { - // TODO: finalize - LOG_WARNING(HLE, "vdecEndSeq:"); + { + // TODO: finalize + cellVdec->Warning("vdecEndSeq:"); - vdec.vdecCb->ExecAsCallback(vdec.cbFunc, false, vdec.id, CELL_VDEC_MSG_TYPE_SEQDONE, CELL_OK, vdec.cbArg); - /*Callback cb; - cb.SetAddr(vdec.cbFunc); - cb.Handle(vdec.id, CELL_VDEC_MSG_TYPE_SEQDONE, CELL_OK, vdec.cbArg); - cb.Branch(true); // ???*/ + vdec.vdecCb->ExecAsCallback(vdec.cbFunc, false, vdec.id, CELL_VDEC_MSG_TYPE_SEQDONE, CELL_OK, vdec.cbArg); + /*Callback cb; + cb.SetAddr(vdec.cbFunc); + cb.Handle(vdec.id, CELL_VDEC_MSG_TYPE_SEQDONE, CELL_OK, vdec.cbArg); + cb.Branch(true); // ???*/ - vdec.is_running = false; - vdec.just_finished = true; - } - break; + vdec.is_running = false; + vdec.just_finished = true; + } + break; case vdecDecodeAu: - { - int err; + { + int err; - if (task.mode != CELL_VDEC_DEC_MODE_NORMAL) + if (task.mode != CELL_VDEC_DEC_MODE_NORMAL) + { + cellVdec->Error("vdecDecodeAu: unsupported decoding mode(%d)", task.mode); + break; + } + + vdec.reader.addr = task.addr; + vdec.reader.size = task.size; + //LOG_NOTICE(HLE, "Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", task.size, task.pts, task.dts); + + if (vdec.just_started) + { + vdec.first_pts = task.pts; + vdec.last_pts = task.pts; + vdec.first_dts = task.dts; + } + + struct AVPacketHolder : AVPacket + { + AVPacketHolder(u32 size) { - LOG_ERROR(HLE, "vdecDecodeAu: unsupported decoding mode(%d)", task.mode); + av_init_packet(this); + + if (size) + { + data = (u8*)av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); + memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + this->size = size + FF_INPUT_BUFFER_PADDING_SIZE; + } + else + { + data = NULL; + size = 0; + } + } + + ~AVPacketHolder() + { + av_free(data); + //av_free_packet(this); + } + + } au(0); + + if (vdec.just_started && vdec.just_finished) + { + avcodec_flush_buffers(vdec.ctx); + vdec.just_started = false; + vdec.just_finished = false; + } + else if (vdec.just_started) // deferred initialization + { + err = avformat_open_input(&vdec.fmt, NULL, av_find_input_format("mpeg"), NULL); + if (err) + { + cellVdec->Error("vdecDecodeAu: avformat_open_input() failed"); + Emu.Pause(); + break; + } + AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); // ??? + if (!codec) + { + cellVdec->Error("vdecDecodeAu: avcodec_find_decoder() failed"); + Emu.Pause(); + break; + } + /*err = avformat_find_stream_info(vdec.fmt, NULL); + if (err) + { + LOG_ERROR(HLE, "vdecDecodeAu: avformat_find_stream_info() failed"); + Emu.Pause(); + break; + } + if (!vdec.fmt->nb_streams) + { + LOG_ERROR(HLE, "vdecDecodeAu: no stream found"); + Emu.Pause(); + break; + }*/ + if (!avformat_new_stream(vdec.fmt, codec)) + { + cellVdec->Error("vdecDecodeAu: avformat_new_stream() failed"); + Emu.Pause(); + break; + } + vdec.ctx = vdec.fmt->streams[0]->codec; // TODO: check data + + AVDictionary* opts = nullptr; + av_dict_set(&opts, "refcounted_frames", "1", 0); + { + std::lock_guard lock(g_mutex_avcodec_open2); + // not multithread-safe (???) + err = avcodec_open2(vdec.ctx, codec, &opts); + } + if (err) + { + cellVdec->Error("vdecDecodeAu: avcodec_open2() failed"); + Emu.Pause(); + break; + } + vdec.just_started = false; + } + + bool last_frame = false; + + while (true) + { + if (Emu.IsStopped() || vdec.job.PeekIfExist().type == vdecClose) + { + vdec.is_finished = true; + cellVdec->Warning("vdecDecodeAu: aborted"); + return; + } + + last_frame = av_read_frame(vdec.fmt, &au) < 0; + if (last_frame) + { + //break; + av_free(au.data); + au.data = NULL; + au.size = 0; + } + + struct VdecFrameHolder : VdecFrame + { + VdecFrameHolder() + { + data = av_frame_alloc(); + } + + ~VdecFrameHolder() + { + if (data) + { + av_frame_unref(data); + av_frame_free(&data); + } + } + + } frame; + + if (!frame.data) + { + cellVdec->Error("vdecDecodeAu: av_frame_alloc() failed"); + Emu.Pause(); break; } - vdec.reader.addr = task.addr; - vdec.reader.size = task.size; - //LOG_NOTICE(HLE, "Video AU: size = 0x%x, pts = 0x%llx, dts = 0x%llx", task.size, task.pts, task.dts); + int got_picture = 0; - if (vdec.just_started) + int decode = avcodec_decode_video2(vdec.ctx, frame.data, &got_picture, &au); + + if (decode <= 0) { - vdec.first_pts = task.pts; - vdec.last_pts = task.pts; - vdec.first_dts = task.dts; + if (!last_frame && decode < 0) + { + cellVdec->Error("vdecDecodeAu: AU decoding error(0x%x)", decode); + } + if (!got_picture && vdec.reader.size == 0) break; // video end? } - struct AVPacketHolder : AVPacket + if (got_picture) { - AVPacketHolder(u32 size) + u64 ts = av_frame_get_best_effort_timestamp(frame.data); + if (ts != AV_NOPTS_VALUE) { - av_init_packet(this); - - if (size) - { - data = (u8*)av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); - memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); - this->size = size + FF_INPUT_BUFFER_PADDING_SIZE; - } - else - { - data = NULL; - size = 0; - } + frame.pts = ts/* - vdec.first_pts*/; // ??? + vdec.last_pts = frame.pts; } - - ~AVPacketHolder() + else { - av_free(data); - //av_free_packet(this); + vdec.last_pts += vdec.ctx->time_base.num * 90000 / (vdec.ctx->time_base.den / vdec.ctx->ticks_per_frame); + frame.pts = vdec.last_pts; } + //frame.pts = vdec.last_pts; + //vdec.last_pts += 3754; + frame.dts = (frame.pts - vdec.first_pts) + vdec.first_dts; + frame.userdata = task.userData; - } au(0); + //LOG_NOTICE(HLE, "got picture (pts=0x%llx, dts=0x%llx)", frame.pts, frame.dts); - if (vdec.just_started && vdec.just_finished) - { - avcodec_flush_buffers(vdec.ctx); - vdec.just_started = false; - vdec.just_finished = false; + vdec.frames.Push(frame); // !!!!!!!! + frame.data = nullptr; // to prevent destruction + + vdec.vdecCb->ExecAsCallback(vdec.cbFunc, false, vdec.id, CELL_VDEC_MSG_TYPE_PICOUT, CELL_OK, vdec.cbArg); + /*Callback cb; + cb.SetAddr(vdec.cbFunc); + cb.Handle(vdec.id, CELL_VDEC_MSG_TYPE_PICOUT, CELL_OK, vdec.cbArg); + cb.Branch(false);*/ } - else if (vdec.just_started) // deferred initialization - { - err = avformat_open_input(&vdec.fmt, NULL, av_find_input_format("mpeg"), NULL); - if (err) - { - LOG_ERROR(HLE, "vdecDecodeAu: avformat_open_input() failed"); - Emu.Pause(); - break; - } - AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); // ??? - if (!codec) - { - LOG_ERROR(HLE, "vdecDecodeAu: avcodec_find_decoder() failed"); - Emu.Pause(); - break; - } - /*err = avformat_find_stream_info(vdec.fmt, NULL); - if (err) - { - LOG_ERROR(HLE, "vdecDecodeAu: avformat_find_stream_info() failed"); - Emu.Pause(); - break; - } - if (!vdec.fmt->nb_streams) - { - LOG_ERROR(HLE, "vdecDecodeAu: no stream found"); - Emu.Pause(); - break; - }*/ - if (!avformat_new_stream(vdec.fmt, codec)) - { - LOG_ERROR(HLE, "vdecDecodeAu: avformat_new_stream() failed"); - Emu.Pause(); - break; - } - vdec.ctx = vdec.fmt->streams[0]->codec; // TODO: check data - - AVDictionary* opts = nullptr; - av_dict_set(&opts, "refcounted_frames", "1", 0); - { - std::lock_guard lock(g_mutex_avcodec_open2); - // not multithread-safe (???) - err = avcodec_open2(vdec.ctx, codec, &opts); - } - if (err) - { - LOG_ERROR(HLE, "vdecDecodeAu: avcodec_open2() failed"); - Emu.Pause(); - break; - } - vdec.just_started = false; - } - - bool last_frame = false; - - while (true) - { - if (Emu.IsStopped() || vdec.job.PeekIfExist().type == vdecClose) - { - vdec.is_finished = true; - LOG_WARNING(HLE, "vdecDecodeAu: aborted"); - return; - } - - last_frame = av_read_frame(vdec.fmt, &au) < 0; - if (last_frame) - { - //break; - av_free(au.data); - au.data = NULL; - au.size = 0; - } - - struct VdecFrameHolder : VdecFrame - { - VdecFrameHolder() - { - data = av_frame_alloc(); - } - - ~VdecFrameHolder() - { - if (data) - { - av_frame_unref(data); - av_frame_free(&data); - } - } - - } frame; - - if (!frame.data) - { - LOG_ERROR(HLE, "vdecDecodeAu: av_frame_alloc() failed"); - Emu.Pause(); - break; - } - - int got_picture = 0; - - int decode = avcodec_decode_video2(vdec.ctx, frame.data, &got_picture, &au); - - if (decode <= 0) - { - if (!last_frame && decode < 0) - { - LOG_ERROR(HLE, "vdecDecodeAu: AU decoding error(0x%x)", decode); - } - if (!got_picture && vdec.reader.size == 0) break; // video end? - } - - if (got_picture) - { - u64 ts = av_frame_get_best_effort_timestamp(frame.data); - if (ts != AV_NOPTS_VALUE) - { - frame.pts = ts/* - vdec.first_pts*/; // ??? - vdec.last_pts = frame.pts; - } - else - { - vdec.last_pts += vdec.ctx->time_base.num * 90000 / (vdec.ctx->time_base.den / vdec.ctx->ticks_per_frame); - frame.pts = vdec.last_pts; - } - //frame.pts = vdec.last_pts; - //vdec.last_pts += 3754; - frame.dts = (frame.pts - vdec.first_pts) + vdec.first_dts; - frame.userdata = task.userData; - - //LOG_NOTICE(HLE, "got picture (pts=0x%llx, dts=0x%llx)", frame.pts, frame.dts); - - vdec.frames.Push(frame); // !!!!!!!! - frame.data = nullptr; // to prevent destruction - - vdec.vdecCb->ExecAsCallback(vdec.cbFunc, false, vdec.id, CELL_VDEC_MSG_TYPE_PICOUT, CELL_OK, vdec.cbArg); - /*Callback cb; - cb.SetAddr(vdec.cbFunc); - cb.Handle(vdec.id, CELL_VDEC_MSG_TYPE_PICOUT, CELL_OK, vdec.cbArg); - cb.Branch(false);*/ - } - } - - vdec.vdecCb->ExecAsCallback(vdec.cbFunc, false, vdec.id, CELL_VDEC_MSG_TYPE_AUDONE, CELL_OK, vdec.cbArg); - /*Callback cb; - cb.SetAddr(vdec.cbFunc); - cb.Handle(vdec.id, CELL_VDEC_MSG_TYPE_AUDONE, CELL_OK, vdec.cbArg); - cb.Branch(false);*/ } - break; + + vdec.vdecCb->ExecAsCallback(vdec.cbFunc, false, vdec.id, CELL_VDEC_MSG_TYPE_AUDONE, CELL_OK, vdec.cbArg); + /*Callback cb; + cb.SetAddr(vdec.cbFunc); + cb.Handle(vdec.id, CELL_VDEC_MSG_TYPE_AUDONE, CELL_OK, vdec.cbArg); + cb.Branch(false);*/ + } + break; case vdecClose: - { - vdec.is_finished = true; - LOG_NOTICE(HLE, "Video Decoder thread ended"); - return; - } + { + vdec.is_finished = true; + cellVdec->Notice("Video Decoder thread ended"); + return; + } case vdecSetFrameRate: - { - LOG_ERROR(HLE, "TODO: vdecSetFrameRate(%d)", task.frc); - } - break; + { + cellVdec->Error("TODO: vdecSetFrameRate(%d)", task.frc); + } + break; default: - LOG_ERROR(HLE, "Video Decoder thread error: unknown task(%d)", task.type); + cellVdec->Error("Video Decoder thread error: unknown task(%d)", task.type); } } vdec.is_finished = true; - LOG_WARNING(HLE, "Video Decoder thread aborted"); + cellVdec->Warning("Video Decoder thread aborted"); }); t.detach(); @@ -465,7 +528,7 @@ int cellVdecClose(u32 handle) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellVdecClose(%d) aborted", handle); + cellVdec->Warning("cellVdecClose(%d) aborted", handle); break; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -516,7 +579,7 @@ int cellVdecEndSeq(u32 handle) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "cellVdecEndSeq(%d) aborted", handle); + cellVdec->Warning("cellVdecEndSeq(%d) aborted", handle); return CELL_OK; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); @@ -690,13 +753,13 @@ int cellVdecGetPicItem(u32 handle, mem32_t picItem_ptr) } else { - LOG_ERROR(HLE, "cellVdecGetPicItem: unsupported time_base.den (%d)", vdec->ctx->time_base.den); + cellVdec->Error("cellVdecGetPicItem: unsupported time_base.den (%d)", vdec->ctx->time_base.den); Emu.Pause(); } } else { - LOG_ERROR(HLE, "cellVdecGetPicItem: unsupported time_base.num (%d)", vdec->ctx->time_base.num); + cellVdec->Error("cellVdecGetPicItem: unsupported time_base.num (%d)", vdec->ctx->time_base.num); Emu.Pause(); } avc->fixed_frame_rate_flag = true; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.h b/rpcs3/Emu/SysCalls/Modules/cellVdec.h index 5b6a5633d2..10fb65a16e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.h @@ -727,67 +727,7 @@ public: CPUThread* vdecCb; - VideoDecoder(CellVdecCodecType type, u32 profile, u32 addr, u32 size, u32 func, u32 arg) - : type(type) - , profile(profile) - , memAddr(addr) - , memSize(size) - , memBias(0) - , cbFunc(func) - , cbArg(arg) - , is_finished(false) - , is_running(false) - , just_started(false) - , just_finished(false) - , ctx(nullptr) - , vdecCb(nullptr) - { - AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); - if (!codec) - { - LOG_ERROR(HLE, "VideoDecoder(): avcodec_find_decoder(H264) failed"); - Emu.Pause(); - return; - } - fmt = avformat_alloc_context(); - if (!fmt) - { - LOG_ERROR(HLE, "VideoDecoder(): avformat_alloc_context failed"); - Emu.Pause(); - return; - } - io_buf = (u8*)av_malloc(4096); - fmt->pb = avio_alloc_context(io_buf, 4096, 0, this, vdecRead, NULL, NULL); - if (!fmt->pb) - { - LOG_ERROR(HLE, "VideoDecoder(): avio_alloc_context failed"); - Emu.Pause(); - return; - } - } + VideoDecoder(CellVdecCodecType type, u32 profile, u32 addr, u32 size, u32 func, u32 arg); - ~VideoDecoder() - { - // TODO: check finalization - if (ctx) - { - for (u32 i = frames.GetCount() - 1; ~i; i--) - { - VdecFrame& vf = frames.Peek(i); - av_frame_unref(vf.data); - av_frame_free(&vf.data); - } - avcodec_close(ctx); - avformat_close_input(&fmt); - } - if (fmt) - { - if (io_buf) - { - av_free(io_buf); - } - if (fmt->pb) av_free(fmt->pb); - avformat_free_context(fmt); - } - } + ~VideoDecoder(); }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index a2ac4e5beb..038fb4b891 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" @@ -33,7 +32,7 @@ u32 vpostOpen(VpostInstance* data) { u32 id = cellVpost->GetNewId(data); - LOG_NOTICE(HLE, "*** Vpost instance created (to_rgba=%d): id = %d", data->to_rgba, id); + cellVpost->Notice("*** Vpost instance created (to_rgba=%d): id = %d", data->to_rgba, id); return id; } @@ -90,15 +89,15 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const mem_ptr_toutHeight; ctrlParam->inWindow; // ignored - if (ctrlParam->inWindow.x) LOG_WARNING(HLE, "*** inWindow.x = %d", (u32)ctrlParam->inWindow.x); - if (ctrlParam->inWindow.y) LOG_WARNING(HLE, "*** inWindow.y = %d", (u32)ctrlParam->inWindow.y); - if (ctrlParam->inWindow.width != w) LOG_WARNING(HLE, "*** inWindow.width = %d", (u32)ctrlParam->inWindow.width); - if (ctrlParam->inWindow.height != h) LOG_WARNING(HLE, "*** inWindow.height = %d", (u32)ctrlParam->inWindow.height); + if (ctrlParam->inWindow.x) cellVpost->Notice("*** inWindow.x = %d", (u32)ctrlParam->inWindow.x); + if (ctrlParam->inWindow.y) cellVpost->Notice("*** inWindow.y = %d", (u32)ctrlParam->inWindow.y); + if (ctrlParam->inWindow.width != w) cellVpost->Notice("*** inWindow.width = %d", (u32)ctrlParam->inWindow.width); + if (ctrlParam->inWindow.height != h) cellVpost->Notice("*** inWindow.height = %d", (u32)ctrlParam->inWindow.height); ctrlParam->outWindow; // ignored - if (ctrlParam->outWindow.x) LOG_WARNING(HLE, "*** outWindow.x = %d", (u32)ctrlParam->outWindow.x); - if (ctrlParam->outWindow.y) LOG_WARNING(HLE, "*** outWindow.y = %d", (u32)ctrlParam->outWindow.y); - if (ctrlParam->outWindow.width != ow) LOG_WARNING(HLE, "*** outWindow.width = %d", (u32)ctrlParam->outWindow.width); - if (ctrlParam->outWindow.height != oh) LOG_WARNING(HLE, "*** outWindow.height = %d", (u32)ctrlParam->outWindow.height); + if (ctrlParam->outWindow.x) cellVpost->Notice("*** outWindow.x = %d", (u32)ctrlParam->outWindow.x); + if (ctrlParam->outWindow.y) cellVpost->Notice("*** outWindow.y = %d", (u32)ctrlParam->outWindow.y); + if (ctrlParam->outWindow.width != ow) cellVpost->Notice("*** outWindow.width = %d", (u32)ctrlParam->outWindow.width); + if (ctrlParam->outWindow.height != oh) cellVpost->Notice("*** outWindow.height = %d", (u32)ctrlParam->outWindow.height); ctrlParam->execType; // ignored ctrlParam->scalerType; // ignored ctrlParam->ipcType; // ignored diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index 028592ba62..ce707c74c6 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -1,9 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" + #include "Emu/Audio/cellAudio.h" #include "libmixer.h" @@ -337,7 +336,7 @@ int cellSurMixerCreate(const mem_ptr_t config) { if (Emu.IsStopped()) { - LOG_WARNING(HLE, "Surmixer aborted"); + libmixer->Warning("Surmixer aborted"); break; } diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 4e3038fb3c..4135045b0b 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -1,9 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" + #include "Emu/FS/vfsDir.h" #include "Crypto/unedat.h" #include "sceNp.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.h b/rpcs3/Emu/SysCalls/Modules/sceNp.h index f8526e476d..0ac739cab0 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.h +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.h @@ -1,5 +1,4 @@ #pragma once - #include "cellRtc.h" // Error Codes diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp index 3297717004..d0528c0334 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -1,9 +1,8 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/SysCalls/Modules.h" #include "Emu/System.h" -#include "cellRtc.h" +#include "Emu/SysCalls/Modules.h" + #include "sceNp.h" #include "sceNpClans.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp index 8b6dbc76a7..c6e29023b0 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp @@ -1,8 +1,7 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" -#include "cellRtc.h" + #include "sceNpCommerce2.h" //void sceNpCommerce2_unload(); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h index 3dd26730ef..90e30569d7 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h +++ b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.h @@ -1,4 +1,5 @@ #pragma once +#include "cellRtc.h" // Return codes enum diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp index bb7e7ba139..a5930c192d 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/SysCalls/Modules.h" #include "sceNpSns.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 3185e257e0..24a5360065 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -1,21 +1,16 @@ #include "stdafx.h" -#include "rpcs3/Ini.h" -#include "Utilities/Log.h" -#include "Utilities/rXml.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/FS/vfsDir.h" - -#include "cellRtc.h" -#include "sceNp.h" -#include "sceNpTrophy.h" +#include "rpcs3/Ini.h" +#include "Utilities/rXml.h" #include "Loader/TRP.h" #include "Loader/TROPUSR.h" +#include "Emu/FS/vfsDir.h" #include "Emu/SysCalls/lv2/sys_time.h" - +#include "sceNp.h" +#include "sceNpTrophy.h" #include #include @@ -350,7 +345,7 @@ int sceNpTrophyGetTrophyUnlockState(u32 context, u32 handle, mem_ptr_tGetTrophiesCount(); if (count.GetValue() > 128) - LOG_WARNING(HLE, "sceNpTrophyGetTrophyUnlockState: More than 128 trophies detected!"); + sceNpTrophy->Warning("sceNpTrophyGetTrophyUnlockState: More than 128 trophies detected!"); // Pack up to 128 bools in u32 flag_bits[4] for (u32 id=0; idTodo("_sys_printf(arg1=0x%x)", arg1); // probably, assertion failed - LOG_WARNING(TTY, "%s", (char*)(Memory + arg1)); - Emu.Pause(); + sysPrxForUser->Warning("_sys_printf: \n%s", (char*)(Memory + arg1)); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 87b8fe99b8..b99a75b804 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -1,9 +1,6 @@ #include "stdafx.h" -#include "rpcs3/Ini.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/lv2/lv2Fs.h" @@ -157,7 +154,7 @@ void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_tWarning("fsAioRead() aborted"); return; } } @@ -188,9 +185,8 @@ void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_toffset, buf_addr, (u64)aio->size, error, res, xid, orig_file->GetPath().c_str()); + sys_fs->Log("*** fsAioRead(fd=%d, offset=0x%llx, buf_addr=0x%x, size=0x%x, error=0x%x, res=0x%x, xid=0x%x [%s])", + fd, (u64)aio->offset, buf_addr, (u64)aio->size, error, res, xid, orig_file->GetPath().c_str()); if (func) // start callback thread { diff --git a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp index 37fc397e85..1eca9381a1 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp @@ -1,8 +1,5 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" //void sys_io_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp index 9923a619cd..40332c7240 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp @@ -1,12 +1,7 @@ #include "stdafx.h" -#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" -#include "sys_net.h" - #ifdef _WIN32 #include #else @@ -19,6 +14,8 @@ extern "C" } #endif +#include "sys_net.h" + //void sys_net_init(); //Module sys_net((u16)0x0000, sys_net_init); Module *sys_net = nullptr; diff --git a/rpcs3/Emu/SysCalls/SC_FUNC.h b/rpcs3/Emu/SysCalls/SC_FUNC.h index 413f1a6d7a..7e3ecc41ad 100644 --- a/rpcs3/Emu/SysCalls/SC_FUNC.h +++ b/rpcs3/Emu/SysCalls/SC_FUNC.h @@ -1,5 +1,4 @@ #pragma once - #include "Emu/Cell/PPUThread.h" #define RESULT(x) CPU.GPR[3] = (x) diff --git a/rpcs3/Emu/SysCalls/Static.cpp b/rpcs3/Emu/SysCalls/Static.cpp index e1d206f769..866f50fe6e 100644 --- a/rpcs3/Emu/SysCalls/Static.cpp +++ b/rpcs3/Emu/SysCalls/Static.cpp @@ -1,9 +1,6 @@ #include "stdafx.h" #include "rpcs3/Ini.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" -#include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/Modules.h" #include "Static.h" diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index ef8a18b00b..54ce826b74 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -4,8 +4,6 @@ #include "Utilities/AutoPause.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" -#include "Emu/SysCalls/SC_FUNC.h" #include "ModuleManager.h" #include "lv2/lv2Fs.h" @@ -971,4 +969,9 @@ void SysCalls::DoSyscall(u32 code) IdManager& SysCallBase::GetIdManager() const { return Emu.GetIdManager(); +} + +bool SysCallBase::RemoveId(u32 id) +{ + return Emu.GetIdManager().RemoveID(id); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 76d6e80214..c96cbfcfb7 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -52,6 +52,8 @@ public: { return GetIdManager().GetNewID(GetName(), data, type); } + + bool RemoveId(u32 id); }; extern bool dump_enable; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp index 30035fe135..082f933bdc 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" #include "sys_memory.h" @@ -140,7 +139,7 @@ s32 sys_memory_container_destroy(u32 cid) // Release the allocated memory and remove the ID. Memory.Free(ct->addr); - Emu.GetIdManager().RemoveID(cid); + sys_memory.RemoveId(cid); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp index 603e17b6a3..3c580f1721 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mmapper.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Emu/Memory/Memory.h" -#include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" #include "sys_memory.h" @@ -155,7 +154,7 @@ s32 sys_mmapper_free_memory(u32 mem_id) // Release the allocated memory and remove the ID. Memory.Free(info->addr); - Emu.GetIdManager().RemoveID(mem_id); + sys_mmapper.RemoveId(mem_id); return CELL_OK; } diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index ec21d85dbd..4f48d787df 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -2,7 +2,6 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -//#include "Ini.h" #include "Emu/GameInfo.h" #include "Emu/SysCalls/Static.h" diff --git a/rpcs3/Loader/ELF.cpp b/rpcs3/Loader/ELF.cpp index d967e4583e..aaa7af4c65 100644 --- a/rpcs3/Loader/ELF.cpp +++ b/rpcs3/Loader/ELF.cpp @@ -1,7 +1,16 @@ #include "stdafx.h" -#include "Loader.h" #include "ELF.h" +void Elf_Ehdr::Show() +{ +} + +void Elf_Ehdr::Load(vfsStream& f) +{ + e_magic = Read32(f); + e_class = Read8(f); +} + ELFLoader::ELFLoader(vfsStream& f) : elf_f(f) , LoaderBase() diff --git a/rpcs3/Loader/ELF.h b/rpcs3/Loader/ELF.h index cbb9d88473..3ff9e34224 100644 --- a/rpcs3/Loader/ELF.h +++ b/rpcs3/Loader/ELF.h @@ -1,7 +1,6 @@ #pragma once #include "ELF64.h" #include "ELF32.h" -#include "Emu/FS/vfsStream.h" enum ElfClass { @@ -15,15 +14,9 @@ struct Elf_Ehdr u32 e_magic; u8 e_class; - virtual void Show() - { - } + virtual void Show(); - virtual void Load(vfsStream& f) - { - e_magic = Read32(f); - e_class = Read8(f); - } + virtual void Load(vfsStream& f); bool CheckMagic() const { return e_magic == 0x7F454C46; } diff --git a/rpcs3/Loader/ELF32.cpp b/rpcs3/Loader/ELF32.cpp index 2c3c4f4fac..6c327e0494 100644 --- a/rpcs3/Loader/ELF32.cpp +++ b/rpcs3/Loader/ELF32.cpp @@ -3,6 +3,207 @@ #include "Emu/Memory/Memory.h" #include "ELF32.h" +void Elf32_Ehdr::Show() +{ +#ifdef LOADER_DEBUG + LOG_NOTICE(LOADER, "Magic: %08x", e_magic); + LOG_NOTICE(LOADER, "Class: %s", "ELF32"); + LOG_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); + LOG_NOTICE(LOADER, "Current Version: %d", e_curver); + LOG_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); + LOG_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); + LOG_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); + LOG_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); + LOG_NOTICE(LOADER, "Version: %d", e_version); + LOG_NOTICE(LOADER, "Entry point address: 0x%x", e_entry); + LOG_NOTICE(LOADER, "Program headers offset: 0x%08x", e_phoff); + LOG_NOTICE(LOADER, "Section headers offset: 0x%08x", e_shoff); + LOG_NOTICE(LOADER, "Flags: 0x%x", e_flags); + LOG_NOTICE(LOADER, "Size of this header: %d", e_ehsize); + LOG_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); + LOG_NOTICE(LOADER, "Number of program headers: %d", e_phnum); + LOG_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); + LOG_NOTICE(LOADER, "Number of section headers: %d", e_shnum); + LOG_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); +#endif +} + +void Elf32_Ehdr::Load(vfsStream& f) +{ + e_magic = Read32(f); + e_class = Read8(f); + e_data = Read8(f); + e_curver = Read8(f); + e_os_abi = Read8(f); + + if(IsLittleEndian()) + { + e_abi_ver = Read64LE(f); + e_type = Read16LE(f); + e_machine = Read16LE(f); + e_version = Read32LE(f); + e_entry = Read32LE(f); + e_phoff = Read32LE(f); + e_shoff = Read32LE(f); + e_flags = Read32LE(f); + e_ehsize = Read16LE(f); + e_phentsize = Read16LE(f); + e_phnum = Read16LE(f); + e_shentsize = Read16LE(f); + e_shnum = Read16LE(f); + e_shstrndx = Read16LE(f); + } + else + { + e_abi_ver = Read64(f); + e_type = Read16(f); + e_machine = Read16(f); + e_version = Read32(f); + e_entry = Read32(f); + e_phoff = Read32(f); + e_shoff = Read32(f); + e_flags = Read32(f); + e_ehsize = Read16(f); + e_phentsize = Read16(f); + e_phnum = Read16(f); + e_shentsize = Read16(f); + e_shnum = Read16(f); + e_shstrndx = Read16(f); + } +} + +void Elf32_Desc::Load(vfsStream& f) +{ + revision = Read32(f); + ls_size = Read32(f); + stack_size = Read32(f); + flags = Read32(f); +} + +void Elf32_Desc::LoadLE(vfsStream& f) +{ + revision = Read32LE(f); + ls_size = Read32LE(f); + stack_size = Read32LE(f); + flags = Read32LE(f); +} + +void Elf32_Note::Load(vfsStream& f) +{ + namesz = Read32(f); + descsz = Read32(f); + type = Read32(f); + f.Read(name, 8); + + if (descsz == 32) + { + f.Read(desc_text, descsz); + } + else + { + desc.Load(f); + } +} + +void Elf32_Note::LoadLE(vfsStream& f) +{ + namesz = Read32LE(f); + descsz = Read32LE(f); + type = Read32LE(f); + f.Read(name, 8); + + if (descsz == 32) + { + f.Read(desc_text, descsz); + } + else + { + desc.Load(f); + } +} + +void Elf32_Shdr::Load(vfsStream& f) +{ + sh_name = Read32(f); + sh_type = Read32(f); + sh_flags = Read32(f); + sh_addr = Read32(f); + sh_offset = Read32(f); + sh_size = Read32(f); + sh_link = Read32(f); + sh_info = Read32(f); + sh_addralign = Read32(f); + sh_entsize = Read32(f); +} + +void Elf32_Shdr::LoadLE(vfsStream& f) +{ + sh_name = Read32LE(f); + sh_type = Read32LE(f); + sh_flags = Read32LE(f); + sh_addr = Read32LE(f); + sh_offset = Read32LE(f); + sh_size = Read32LE(f); + sh_link = Read32LE(f); + sh_info = Read32LE(f); + sh_addralign = Read32LE(f); + sh_entsize = Read32LE(f); +} + +void Elf32_Shdr::Show() +{ +#ifdef LOADER_DEBUG + LOG_NOTICE(LOADER, "Name offset: %x", sh_name); + LOG_NOTICE(LOADER, "Type: %d", sh_type); + LOG_NOTICE(LOADER, "Addr: %x", sh_addr); + LOG_NOTICE(LOADER, "Offset: %x", sh_offset); + LOG_NOTICE(LOADER, "Size: %x", sh_size); + LOG_NOTICE(LOADER, "EntSize: %d", sh_entsize); + LOG_NOTICE(LOADER, "Flags: %x", sh_flags); + LOG_NOTICE(LOADER, "Link: %x", sh_link); + LOG_NOTICE(LOADER, "Info: %d", sh_info); + LOG_NOTICE(LOADER, "Address align: %x", sh_addralign); +#endif +} + +void Elf32_Phdr::Load(vfsStream& f) +{ + p_type = Read32(f); + p_offset = Read32(f); + p_vaddr = Read32(f); + p_paddr = Read32(f); + p_filesz = Read32(f); + p_memsz = Read32(f); + p_flags = Read32(f); + p_align = Read32(f); +} + +void Elf32_Phdr::LoadLE(vfsStream& f) +{ + p_type = Read32LE(f); + p_offset = Read32LE(f); + p_vaddr = Read32LE(f); + p_paddr = Read32LE(f); + p_filesz = Read32LE(f); + p_memsz = Read32LE(f); + p_flags = Read32LE(f); + p_align = Read32LE(f); +} + +void Elf32_Phdr::Show() +{ +#ifdef LOADER_DEBUG + LOG_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); + LOG_NOTICE(LOADER, "Offset: 0x%08x", p_offset); + LOG_NOTICE(LOADER, "Virtual address: 0x%08x", p_vaddr); + LOG_NOTICE(LOADER, "Physical address: 0x%08x", p_paddr); + LOG_NOTICE(LOADER, "File size: 0x%08x", p_filesz); + LOG_NOTICE(LOADER, "Memory size: 0x%08x", p_memsz); + LOG_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); + LOG_NOTICE(LOADER, "Align: 0x%x", p_align); +#endif +} + void WriteEhdr(rFile& f, Elf32_Ehdr& ehdr) { Write32(f, ehdr.e_magic); diff --git a/rpcs3/Loader/ELF32.h b/rpcs3/Loader/ELF32.h index 50b5c6bd66..6d600fd82c 100644 --- a/rpcs3/Loader/ELF32.h +++ b/rpcs3/Loader/ELF32.h @@ -23,79 +23,14 @@ struct Elf32_Ehdr u16 e_shnum; u16 e_shstrndx; - void Show() - { -#ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "Magic: %08x", e_magic); - LOG_NOTICE(LOADER, "Class: %s", "ELF32"); - LOG_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); - LOG_NOTICE(LOADER, "Current Version: %d", e_curver); - LOG_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); - LOG_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); - LOG_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); - LOG_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); - LOG_NOTICE(LOADER, "Version: %d", e_version); - LOG_NOTICE(LOADER, "Entry point address: 0x%x", e_entry); - LOG_NOTICE(LOADER, "Program headers offset: 0x%08x", e_phoff); - LOG_NOTICE(LOADER, "Section headers offset: 0x%08x", e_shoff); - LOG_NOTICE(LOADER, "Flags: 0x%x", e_flags); - LOG_NOTICE(LOADER, "Size of this header: %d", e_ehsize); - LOG_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); - LOG_NOTICE(LOADER, "Number of program headers: %d", e_phnum); - LOG_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); - LOG_NOTICE(LOADER, "Number of section headers: %d", e_shnum); - LOG_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); -#endif - } + void Show(); bool IsLittleEndian() const { return e_data == 1; } - void Load(vfsStream& f) - { - e_magic = Read32(f); - e_class = Read8(f); - e_data = Read8(f); - e_curver = Read8(f); - e_os_abi = Read8(f); - - if(IsLittleEndian()) - { - e_abi_ver = Read64LE(f); - e_type = Read16LE(f); - e_machine = Read16LE(f); - e_version = Read32LE(f); - e_entry = Read32LE(f); - e_phoff = Read32LE(f); - e_shoff = Read32LE(f); - e_flags = Read32LE(f); - e_ehsize = Read16LE(f); - e_phentsize = Read16LE(f); - e_phnum = Read16LE(f); - e_shentsize = Read16LE(f); - e_shnum = Read16LE(f); - e_shstrndx = Read16LE(f); - } - else - { - e_abi_ver = Read64(f); - e_type = Read16(f); - e_machine = Read16(f); - e_version = Read32(f); - e_entry = Read32(f); - e_phoff = Read32(f); - e_shoff = Read32(f); - e_flags = Read32(f); - e_ehsize = Read16(f); - e_phentsize = Read16(f); - e_phnum = Read16(f); - e_shentsize = Read16(f); - e_shnum = Read16(f); - e_shstrndx = Read16(f); - } - } + void Load(vfsStream& f); bool CheckMagic() const { return e_magic == 0x7F454C46; } u32 GetEntry() const { return e_entry; } @@ -108,21 +43,9 @@ struct Elf32_Desc u32 stack_size; u32 flags; - void Load(vfsStream& f) - { - revision = Read32(f); - ls_size = Read32(f); - stack_size = Read32(f); - flags = Read32(f); - } + void Load(vfsStream& f); - void LoadLE(vfsStream& f) - { - revision = Read32LE(f); - ls_size = Read32LE(f); - stack_size = Read32LE(f); - flags = Read32LE(f); - } + void LoadLE(vfsStream& f); }; struct Elf32_Note @@ -137,39 +60,9 @@ struct Elf32_Note char desc_text[32]; }; - void Load(vfsStream& f) - { - namesz = Read32(f); - descsz = Read32(f); - type = Read32(f); - f.Read(name, 8); + void Load(vfsStream& f); - if(descsz == 32) - { - f.Read(desc_text, descsz); - } - else - { - desc.Load(f); - } - } - - void LoadLE(vfsStream& f) - { - namesz = Read32LE(f); - descsz = Read32LE(f); - type = Read32LE(f); - f.Read(name, 8); - - if(descsz == 32) - { - f.Read(desc_text, descsz); - } - else - { - desc.Load(f); - } - } + void LoadLE(vfsStream& f); }; struct Elf32_Shdr @@ -185,49 +78,11 @@ struct Elf32_Shdr u32 sh_addralign; u32 sh_entsize; - void Load(vfsStream& f) - { - sh_name = Read32(f); - sh_type = Read32(f); - sh_flags = Read32(f); - sh_addr = Read32(f); - sh_offset = Read32(f); - sh_size = Read32(f); - sh_link = Read32(f); - sh_info = Read32(f); - sh_addralign = Read32(f); - sh_entsize = Read32(f); - } + void Load(vfsStream& f); - void LoadLE(vfsStream& f) - { - sh_name = Read32LE(f); - sh_type = Read32LE(f); - sh_flags = Read32LE(f); - sh_addr = Read32LE(f); - sh_offset = Read32LE(f); - sh_size = Read32LE(f); - sh_link = Read32LE(f); - sh_info = Read32LE(f); - sh_addralign = Read32LE(f); - sh_entsize = Read32LE(f); - } + void LoadLE(vfsStream& f); - void Show() - { -#ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "Name offset: %x", sh_name); - LOG_NOTICE(LOADER, "Type: %d", sh_type); - LOG_NOTICE(LOADER, "Addr: %x", sh_addr); - LOG_NOTICE(LOADER, "Offset: %x", sh_offset); - LOG_NOTICE(LOADER, "Size: %x", sh_size); - LOG_NOTICE(LOADER, "EntSize: %d", sh_entsize); - LOG_NOTICE(LOADER, "Flags: %x", sh_flags); - LOG_NOTICE(LOADER, "Link: %x", sh_link); - LOG_NOTICE(LOADER, "Info: %d", sh_info); - LOG_NOTICE(LOADER, "Address align: %x", sh_addralign); -#endif - } + void Show(); }; struct Elf32_Phdr @@ -241,43 +96,11 @@ struct Elf32_Phdr u32 p_flags; u32 p_align; - void Load(vfsStream& f) - { - p_type = Read32(f); - p_offset = Read32(f); - p_vaddr = Read32(f); - p_paddr = Read32(f); - p_filesz = Read32(f); - p_memsz = Read32(f); - p_flags = Read32(f); - p_align = Read32(f); - } + void Load(vfsStream& f); - void LoadLE(vfsStream& f) - { - p_type = Read32LE(f); - p_offset = Read32LE(f); - p_vaddr = Read32LE(f); - p_paddr = Read32LE(f); - p_filesz = Read32LE(f); - p_memsz = Read32LE(f); - p_flags = Read32LE(f); - p_align = Read32LE(f); - } + void LoadLE(vfsStream& f); - void Show() - { -#ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); - LOG_NOTICE(LOADER, "Offset: 0x%08x", p_offset); - LOG_NOTICE(LOADER, "Virtual address: 0x%08x", p_vaddr); - LOG_NOTICE(LOADER, "Physical address: 0x%08x", p_paddr); - LOG_NOTICE(LOADER, "File size: 0x%08x", p_filesz); - LOG_NOTICE(LOADER, "Memory size: 0x%08x", p_memsz); - LOG_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); - LOG_NOTICE(LOADER, "Align: 0x%x", p_align); -#endif - } + void Show(); }; class ELF32Loader : public LoaderBase diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 07693354a5..42c7a12042 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -2,9 +2,7 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" -#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/SysCalls.h" -#include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/Static.h" #include "Emu/Cell/PPUInstrTable.h" #include "Emu/SysCalls/ModuleManager.h" @@ -12,6 +10,110 @@ using namespace PPU_instr; +void Elf64_Ehdr::Load(vfsStream& f) +{ + e_magic = Read32(f); + e_class = Read8(f); + e_data = Read8(f); + e_curver = Read8(f); + e_os_abi = Read8(f); + e_abi_ver = Read64(f); + e_type = Read16(f); + e_machine = Read16(f); + e_version = Read32(f); + e_entry = Read64(f); + e_phoff = Read64(f); + e_shoff = Read64(f); + e_flags = Read32(f); + e_ehsize = Read16(f); + e_phentsize = Read16(f); + e_phnum = Read16(f); + e_shentsize = Read16(f); + e_shnum = Read16(f); + e_shstrndx = Read16(f); +} + +void Elf64_Ehdr::Show() +{ +#ifdef LOADER_DEBUG + LOG_NOTICE(LOADER, "Magic: %08x", e_magic); + LOG_NOTICE(LOADER, "Class: %s", "ELF64"); + LOG_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); + LOG_NOTICE(LOADER, "Current Version: %d", e_curver); + LOG_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); + LOG_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); + LOG_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); + LOG_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); + LOG_NOTICE(LOADER, "Version: %d", e_version); + LOG_NOTICE(LOADER, "Entry point address: 0x%08llx", e_entry); + LOG_NOTICE(LOADER, "Program headers offset: 0x%08llx", e_phoff); + LOG_NOTICE(LOADER, "Section headers offset: 0x%08llx", e_shoff); + LOG_NOTICE(LOADER, "Flags: 0x%x", e_flags); + LOG_NOTICE(LOADER, "Size of this header: %d", e_ehsize); + LOG_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); + LOG_NOTICE(LOADER, "Number of program headers: %d", e_phnum); + LOG_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); + LOG_NOTICE(LOADER, "Number of section headers: %d", e_shnum); + LOG_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); +#endif +} + +void Elf64_Shdr::Load(vfsStream& f) +{ + sh_name = Read32(f); + sh_type = Read32(f); + sh_flags = Read64(f); + sh_addr = Read64(f); + sh_offset = Read64(f); + sh_size = Read64(f); + sh_link = Read32(f); + sh_info = Read32(f); + sh_addralign = Read64(f); + sh_entsize = Read64(f); +} + +void Elf64_Shdr::Show() +{ +#ifdef LOADER_DEBUG + LOG_NOTICE(LOADER, "Name offset: %x", sh_name); + LOG_NOTICE(LOADER, "Type: %d", sh_type); + LOG_NOTICE(LOADER, "Addr: %llx", sh_addr); + LOG_NOTICE(LOADER, "Offset: %llx", sh_offset); + LOG_NOTICE(LOADER, "Size: %llx", sh_size); + LOG_NOTICE(LOADER, "EntSize: %lld", sh_entsize); + LOG_NOTICE(LOADER, "Flags: %llx", sh_flags); + LOG_NOTICE(LOADER, "Link: %x", sh_link); + LOG_NOTICE(LOADER, "Info: %x", sh_info); + LOG_NOTICE(LOADER, "Address align: %llx", sh_addralign); +#endif +} + +void Elf64_Phdr::Load(vfsStream& f) +{ + p_type = Read32(f); + p_flags = Read32(f); + p_offset = Read64(f); + p_vaddr = Read64(f); + p_paddr = Read64(f); + p_filesz = Read64(f); + p_memsz = Read64(f); + p_align = Read64(f); +} + +void Elf64_Phdr::Show() +{ +#ifdef LOADER_DEBUG + LOG_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); + LOG_NOTICE(LOADER, "Offset: 0x%08llx", p_offset); + LOG_NOTICE(LOADER, "Virtual address: 0x%08llx", p_vaddr); + LOG_NOTICE(LOADER, "Physical address: 0x%08llx", p_paddr); + LOG_NOTICE(LOADER, "File size: 0x%08llx", p_filesz); + LOG_NOTICE(LOADER, "Memory size: 0x%08llx", p_memsz); + LOG_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); + LOG_NOTICE(LOADER, "Align: 0x%llx", p_align); +#endif +} + void WriteEhdr(rFile& f, Elf64_Ehdr& ehdr) { Write32(f, ehdr.e_magic); diff --git a/rpcs3/Loader/ELF64.h b/rpcs3/Loader/ELF64.h index f6f6792922..162d153fb7 100644 --- a/rpcs3/Loader/ELF64.h +++ b/rpcs3/Loader/ELF64.h @@ -23,53 +23,9 @@ struct Elf64_Ehdr u16 e_shnum; u16 e_shstrndx; - void Load(vfsStream& f) - { - e_magic = Read32(f); - e_class = Read8(f); - e_data = Read8(f); - e_curver = Read8(f); - e_os_abi = Read8(f); - e_abi_ver = Read64(f); - e_type = Read16(f); - e_machine = Read16(f); - e_version = Read32(f); - e_entry = Read64(f); - e_phoff = Read64(f); - e_shoff = Read64(f); - e_flags = Read32(f); - e_ehsize = Read16(f); - e_phentsize = Read16(f); - e_phnum = Read16(f); - e_shentsize = Read16(f); - e_shnum = Read16(f); - e_shstrndx = Read16(f); - } + void Load(vfsStream& f); - void Show() - { -#ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "Magic: %08x", e_magic); - LOG_NOTICE(LOADER, "Class: %s", "ELF64"); - LOG_NOTICE(LOADER, "Data: %s", Ehdr_DataToString(e_data).c_str()); - LOG_NOTICE(LOADER, "Current Version: %d", e_curver); - LOG_NOTICE(LOADER, "OS/ABI: %s", Ehdr_OS_ABIToString(e_os_abi).c_str()); - LOG_NOTICE(LOADER, "ABI version: %lld", e_abi_ver); - LOG_NOTICE(LOADER, "Type: %s", Ehdr_TypeToString(e_type).c_str()); - LOG_NOTICE(LOADER, "Machine: %s", Ehdr_MachineToString(e_machine).c_str()); - LOG_NOTICE(LOADER, "Version: %d", e_version); - LOG_NOTICE(LOADER, "Entry point address: 0x%08llx", e_entry); - LOG_NOTICE(LOADER, "Program headers offset: 0x%08llx", e_phoff); - LOG_NOTICE(LOADER, "Section headers offset: 0x%08llx", e_shoff); - LOG_NOTICE(LOADER, "Flags: 0x%x", e_flags); - LOG_NOTICE(LOADER, "Size of this header: %d", e_ehsize); - LOG_NOTICE(LOADER, "Size of program headers: %d", e_phentsize); - LOG_NOTICE(LOADER, "Number of program headers: %d", e_phnum); - LOG_NOTICE(LOADER, "Size of section headers: %d", e_shentsize); - LOG_NOTICE(LOADER, "Number of section headers: %d", e_shnum); - LOG_NOTICE(LOADER, "Section header string table index: %d", e_shstrndx); -#endif - } + void Show(); bool CheckMagic() const { return e_magic == 0x7F454C46; } u32 GetEntry() const { return e_entry; } @@ -88,35 +44,9 @@ struct Elf64_Shdr u64 sh_addralign; u64 sh_entsize; - void Load(vfsStream& f) - { - sh_name = Read32(f); - sh_type = Read32(f); - sh_flags = Read64(f); - sh_addr = Read64(f); - sh_offset = Read64(f); - sh_size = Read64(f); - sh_link = Read32(f); - sh_info = Read32(f); - sh_addralign = Read64(f); - sh_entsize = Read64(f); - } + void Load(vfsStream& f); - void Show() - { -#ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "Name offset: %x", sh_name); - LOG_NOTICE(LOADER, "Type: %d", sh_type); - LOG_NOTICE(LOADER, "Addr: %llx", sh_addr); - LOG_NOTICE(LOADER, "Offset: %llx", sh_offset); - LOG_NOTICE(LOADER, "Size: %llx", sh_size); - LOG_NOTICE(LOADER, "EntSize: %lld", sh_entsize); - LOG_NOTICE(LOADER, "Flags: %llx", sh_flags); - LOG_NOTICE(LOADER, "Link: %x", sh_link); - LOG_NOTICE(LOADER, "Info: %x", sh_info); - LOG_NOTICE(LOADER, "Address align: %llx", sh_addralign); -#endif - } + void Show(); }; struct Elf64_Phdr @@ -130,31 +60,9 @@ struct Elf64_Phdr u64 p_memsz; u64 p_align; - void Load(vfsStream& f) - { - p_type = Read32(f); - p_flags = Read32(f); - p_offset = Read64(f); - p_vaddr = Read64(f); - p_paddr = Read64(f); - p_filesz = Read64(f); - p_memsz = Read64(f); - p_align = Read64(f); - } + void Load(vfsStream& f); - void Show() - { -#ifdef LOADER_DEBUG - LOG_NOTICE(LOADER, "Type: %s", Phdr_TypeToString(p_type).c_str()); - LOG_NOTICE(LOADER, "Offset: 0x%08llx", p_offset); - LOG_NOTICE(LOADER, "Virtual address: 0x%08llx", p_vaddr); - LOG_NOTICE(LOADER, "Physical address: 0x%08llx", p_paddr); - LOG_NOTICE(LOADER, "File size: 0x%08llx", p_filesz); - LOG_NOTICE(LOADER, "Memory size: 0x%08llx", p_memsz); - LOG_NOTICE(LOADER, "Flags: %s", Phdr_FlagsToString(p_flags).c_str()); - LOG_NOTICE(LOADER, "Align: 0x%llx", p_align); -#endif - } + void Show(); }; class ELF64Loader : public LoaderBase diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index b19f0016d7..35e3b7bda0 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -1,7 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Utilities/rXml.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "TROPUSR.h" @@ -212,7 +211,8 @@ bool TROPUSRLoader::Close() { if (m_file && m_file->Close()) { - safe_delete(m_file); + delete m_file; + m_file = nullptr; return true; } return false; diff --git a/rpcs3/Loader/TRP.cpp b/rpcs3/Loader/TRP.cpp index 87427a4326..2127e4acf6 100644 --- a/rpcs3/Loader/TRP.cpp +++ b/rpcs3/Loader/TRP.cpp @@ -1,6 +1,5 @@ #include "stdafx.h" #include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/FS/vfsFile.h" #include "TRP.h" diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 142f07ce89..3ed057f908 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -355,6 +355,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 7f758f7a2b..b4afa1ee91 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1162,5 +1162,8 @@ Emu + + Emu\SysCalls\Modules + \ No newline at end of file From e353c3952216b8f091c78cc32441ab9468b31860 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 24 Aug 2014 00:42:49 +0400 Subject: [PATCH 404/499] cellGem bug fixed --- rpcs3/Emu/SysCalls/Modules/cellGem.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.h b/rpcs3/Emu/SysCalls/Modules/cellGem.h index f94ea35112..712e406998 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.h +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.h @@ -1,7 +1,5 @@ #pragma once -#include "cellSpurs.h" - // Had to use define, since enum doesn't allow floats #define CELL_GEM_SPHERE_RADIUS_MM = 22.5f; @@ -90,7 +88,7 @@ struct CellGemAttribute be_t version; be_t max_connect; be_t memory_ptr; - CellSpurs spurs; + be_t spurs_addr; u8 spu_priorities[8]; }; From 11f618fdeff2ddf7fac543ea799a0dd8f77eef59 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 24 Aug 2014 02:34:04 +0400 Subject: [PATCH 405/499] Compilation fix --- rpcs3/Emu/SysCalls/Modules/cellSail.cpp | 4 +--- rpcs3/Emu/SysCalls/Modules/cellSail.h | 4 ++-- rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp | 12 ++++++------ 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp index a624ce8267..6859c20edf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.cpp @@ -1,9 +1,7 @@ #include "stdafx.h" #include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" -#include "Emu/SysCalls/lv2/sys_cond.h" -#include "Emu/SysCalls/lv2/sys_mutex.h" -#include "cellSpurs.h" + #include "cellSail.h" Module *cellSail = nullptr; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.h b/rpcs3/Emu/SysCalls/Modules/cellSail.h index 89a3155e7b..9361081976 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.h @@ -137,7 +137,7 @@ typedef void(*CellSailSourceCheckFuncError)(u32 pArg, s8 pMsg, s32 line); typedef int(*CellSailFsFuncOpen)(s8 pPath, s32 flag, s32 pFd, u32 pArg, u64 size); typedef int(*CellSailFsFuncOpenSecond)(s8 pPath, s32 flag, s32 fd, u32 pArg, u64 size); typedef int(*CellSailFsFuncClose)(s32 fd); -typedef int(*CellSailFsFuncFstat)(s32 fd, mem_ptr_t pStat); +typedef int(*CellSailFsFuncFstat)(s32 fd, u32 pStat_addr); typedef int(*CellSailFsFuncRead)(s32 fd, u32 pBuf, u64 numBytes, u64 pNumRead); typedef int(*CellSailFsFuncLseek)(s32 fd, s64 offset, s32 whence, u64 pPosition); typedef int(*CellSailFsFuncCancel)(s32 fd); @@ -569,7 +569,7 @@ struct CellSailPlayerAttribute struct CellSailPlayerResource { - CellSpurs pSpurs; + be_t pSpurs; be_t reserved0; // All three specify 0 be_t reserved1; be_t reserved2; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index 29805f3b39..9a52f1b1ab 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -746,7 +746,7 @@ int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_tresult < 0) { - LOG_ERROR(HLE, "cellSaveDataListAutoSave: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataListAutoSave: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -754,7 +754,7 @@ int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_tnewData.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { - LOG_WARNING(HLE, "cellSaveDataListAutoSave: No save entries found!"); // TODO: Find a better way to handle this error + cellSysutil->Warning("cellSaveDataListAutoSave: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -767,7 +767,7 @@ int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_tfileList.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataListAutoSave: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataListAutoSave: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -830,7 +830,7 @@ int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_tresult < 0) { - LOG_ERROR(HLE, "cellSaveDataListAutoLoad: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataListAutoLoad: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } @@ -838,7 +838,7 @@ int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_tnewData.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { - LOG_WARNING(HLE, "cellSaveDataListAutoLoad: No save entries found!"); // TODO: Find a better way to handle this error + cellSysutil->Warning("cellSaveDataListAutoLoad: No save entries found!"); // TODO: Find a better way to handle this error return CELL_SAVEDATA_RET_OK; } @@ -852,7 +852,7 @@ int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_tfileList.GetAddr()); if (result->result < 0) { - LOG_ERROR(HLE, "cellSaveDataListAutoLoad: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. + cellSysutil->Error("cellSaveDataListAutoLoad: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } From 50b5d72bb2627bbf9eec09bb26c842cd5c0c5afd Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 24 Aug 2014 21:42:19 +0400 Subject: [PATCH 406/499] Include cleaning --- Utilities/rPlatform.cpp | 86 +----------------- Utilities/rPlatform.h | 11 --- rpcs3/Emu/Cell/SPUThread.cpp | 8 +- rpcs3/Emu/DbgCommand.cpp | 13 ++- rpcs3/Emu/DbgCommand.h | 4 + rpcs3/Emu/Io/Keyboard.cpp | 26 +++++- rpcs3/Emu/Io/Keyboard.h | 12 +-- rpcs3/Emu/Io/Mouse.cpp | 26 +++++- rpcs3/Emu/Io/Mouse.h | 12 +-- rpcs3/Emu/Io/Pad.cpp | 26 +++++- rpcs3/Emu/Io/Pad.h | 12 +-- rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h | 1 - rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 11 ++- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 3 +- rpcs3/Emu/SysCalls/lv2/sys_process.cpp | 7 +- rpcs3/Emu/System.cpp | 14 ++- rpcs3/Emu/System.h | 8 +- rpcs3/Gui/AutoPauseManager.cpp | 1 - rpcs3/Gui/CompilerELF.cpp | 6 +- rpcs3/Gui/CompilerELF.h | 4 - rpcs3/Gui/ConLogFrame.cpp | 2 - rpcs3/Gui/Debugger.cpp | 1 - rpcs3/Gui/MainFrame.cpp | 8 ++ rpcs3/Gui/RSXDebugger.cpp | 1 + rpcs3/Ini.cpp | 4 +- rpcs3/Ini.h | 1 - rpcs3/emucore.vcxproj | 10 +-- rpcs3/emucore.vcxproj.filters | 48 +++++----- rpcs3/rpcs3.cpp | 89 +++++++++++++++++-- rpcs3/rpcs3.vcxproj | 8 +- rpcs3/rpcs3.vcxproj.filters | 44 +++++---- 31 files changed, 291 insertions(+), 216 deletions(-) diff --git a/Utilities/rPlatform.cpp b/Utilities/rPlatform.cpp index d6729c718b..2ae7340583 100644 --- a/Utilities/rPlatform.cpp +++ b/Utilities/rPlatform.cpp @@ -3,22 +3,11 @@ #include #include "Gui/GLGSFrame.h" -#include "Emu/Io/Null/NullKeyboardHandler.h" -#include "Emu/Io/Windows/WindowsKeyboardHandler.h" - -#include "Emu/Io/Null/NullMouseHandler.h" -#include "Emu/Io/Windows/WindowsMouseHandler.h" - -#include "Emu/Io/Null/NullPadHandler.h" -#include "Emu/Io/Windows/WindowsPadHandler.h" -#if defined(_WIN32) -#include "Emu/Io/XInput/XInputPadHandler.h" -#endif - #ifndef _WIN32 #include #endif +#include "rPlatform.h" rCanvas::rCanvas(void *parent) { @@ -36,8 +25,6 @@ bool rCanvas::SetCurrent(void *ctx) } - - rGLFrame::rGLFrame() { handle = static_cast(new GLGSFrame()); @@ -114,31 +101,6 @@ void rImage::SaveFile(const std::string& name, rImageType type) } } -int rPlatform::getKeyboardHandlerCount() -{ - return 2; -} - -KeyboardHandlerBase *rPlatform::getKeyboardHandler(int i) -{ - switch (i) - { - case 0: - return new NullKeyboardHandler(); - break; - case 1: - return new WindowsKeyboardHandler(); - break; - default: - return new NullKeyboardHandler(); - } -} - -int rPlatform::getMouseHandlerCount() -{ - return 2; -} - std::string rPlatform::getConfigDir() { static std::string dir = "."; @@ -159,49 +121,3 @@ std::string rPlatform::getConfigDir() } return dir; } - - -MouseHandlerBase *rPlatform::getMouseHandler(int i) -{ - switch (i) - { - case 0: - return new NullMouseHandler(); - break; - case 1: - return new WindowsMouseHandler(); - break; - default: - return new NullMouseHandler(); - } -} - -int rPlatform::getPadHandlerCount() -{ -#if defined(_WIN32) - return 3; -#else - return 2; -#endif -} - - -PadHandlerBase *rPlatform::getPadHandler(int i) -{ - switch (i) - { - case 0: - return new NullPadHandler(); - break; - case 1: - return new WindowsPadHandler(); - break; -#if defined(_WIN32) - case 2: - return new XInputPadHandler(); - break; -#endif - default: - return new NullPadHandler(); - } -} diff --git a/Utilities/rPlatform.h b/Utilities/rPlatform.h index c5b1beab3f..32c6256291 100644 --- a/Utilities/rPlatform.h +++ b/Utilities/rPlatform.h @@ -2,10 +2,6 @@ #include #include -#include "Emu/Io/Null/NullKeyboardHandler.h" -#include "Emu/Io/Null/NullMouseHandler.h" -#include "Emu/Io/Null/NullPadHandler.h" - struct rCanvas { rCanvas(void *parent); @@ -39,13 +35,6 @@ struct rPlatform { rGLFrame *getGLGSFrame(); static rPlatform &getPlatform(); - - static int getKeyboardHandlerCount(); - static KeyboardHandlerBase *getKeyboardHandler(int i); - static int getMouseHandlerCount(); - static MouseHandlerBase *getMouseHandler(int i); - static int getPadHandlerCount(); - static PadHandlerBase *getPadHandler(int i); static std::string getConfigDir(); }; diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 0f87f2238f..b52f9cb0ba 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -349,8 +349,8 @@ void SPUThread::EnqMfcCmd(MFCReg& MFCArgs) ProcessCmd(cmd, tag, lsa, ea, size); MFCArgs.CMDStatus.SetValue(MFC_PPU_DMA_CMD_ENQUEUE_SUCCESSFUL); - } break; + } case MFC_PUTL_CMD: case MFC_PUTRL_CMD: // ??? @@ -364,8 +364,8 @@ void SPUThread::EnqMfcCmd(MFCReg& MFCArgs) lsa, ea, tag, size, cmd); ListCmd(lsa, ea, tag, size, cmd, MFCArgs); - } break; + } case MFC_GETLLAR_CMD: case MFC_PUTLLC_CMD: @@ -433,7 +433,7 @@ void SPUThread::EnqMfcCmd(MFCReg& MFCArgs) changed, mask, op, cmd, lsa, ea, tag, size); Emu.Pause(); } - + break; } } @@ -478,8 +478,8 @@ void SPUThread::EnqMfcCmd(MFCReg& MFCArgs) } R_ADDR = 0; } - } break; + } default: LOG_ERROR(Log::SPU, "Unknown MFC cmd. (opcode=0x%x, cmd=0x%x, lsa = 0x%x, ea = 0x%llx, tag = 0x%x, size = 0x%x)", diff --git a/rpcs3/Emu/DbgCommand.cpp b/rpcs3/Emu/DbgCommand.cpp index adc4b58bfe..8be005e73c 100644 --- a/rpcs3/Emu/DbgCommand.cpp +++ b/rpcs3/Emu/DbgCommand.cpp @@ -1,7 +1,14 @@ #include "stdafx.h" -#include "rpcs3.h" +#include "DbgCommand.h" -void SendDbgCommand(DbgCommand id, CPUThread* thr ) +SendDbgCommandCb SendDbgCommandFunc = nullptr; + +void SendDbgCommand(DbgCommand id, CPUThread* t) { - wxGetApp().SendDbgCommand(id, thr); + SendDbgCommandFunc(id, t); } + +void SetSendDbgCommandCallback(SendDbgCommandCb cb) +{ + SendDbgCommandFunc = cb; +} \ No newline at end of file diff --git a/rpcs3/Emu/DbgCommand.h b/rpcs3/Emu/DbgCommand.h index 88daa6b821..f3e7f03943 100644 --- a/rpcs3/Emu/DbgCommand.h +++ b/rpcs3/Emu/DbgCommand.h @@ -37,4 +37,8 @@ enum DbgCommand DID_LAST_COMMAND, }; +typedef void(*SendDbgCommandCb)(DbgCommand id, CPUThread* t); + +void SetSendDbgCommandCallback(SendDbgCommandCb value); + void SendDbgCommand(DbgCommand id, CPUThread* thr = nullptr); \ No newline at end of file diff --git a/rpcs3/Emu/Io/Keyboard.cpp b/rpcs3/Emu/Io/Keyboard.cpp index f63c5530ca..e23f325b87 100644 --- a/rpcs3/Emu/Io/Keyboard.cpp +++ b/rpcs3/Emu/Io/Keyboard.cpp @@ -1,7 +1,27 @@ #include "stdafx.h" #include "rpcs3/Ini.h" -#include "Keyboard.h" #include "Null/NullKeyboardHandler.h" +#include "Keyboard.h" + +GetKeyboardHandlerCountCb GetKeyboardHandlerCount = []() +{ + return 1; +}; + +GetKeyboardHandlerCb GetKeyboardHandler = [](int i) -> KeyboardHandlerBase* +{ + return new NullKeyboardHandler; +}; + +void SetGetKeyboardHandlerCountCallback(GetKeyboardHandlerCountCb cb) +{ + GetKeyboardHandlerCount = cb; +} + +void SetGetKeyboardHandlerCallback(GetKeyboardHandlerCb cb) +{ + GetKeyboardHandler = cb; +} KeyboardManager::KeyboardManager() : m_keyboard_handler(nullptr) @@ -19,13 +39,13 @@ void KeyboardManager::Init(const u32 max_connect) return; // NOTE: Change these to std::make_unique assignments when C++14 comes out. - int numHandlers = rPlatform::getKeyboardHandlerCount(); + int numHandlers = GetKeyboardHandlerCount(); int selectedHandler = Ini.KeyboardHandlerMode.GetValue(); if (selectedHandler > numHandlers) { selectedHandler = 0; } - m_keyboard_handler.reset(rPlatform::getKeyboardHandler(selectedHandler)); + m_keyboard_handler.reset(GetKeyboardHandler(selectedHandler)); m_keyboard_handler->Init(max_connect); m_inited = true; diff --git a/rpcs3/Emu/Io/Keyboard.h b/rpcs3/Emu/Io/Keyboard.h index 1674b185de..241913f72d 100644 --- a/rpcs3/Emu/Io/Keyboard.h +++ b/rpcs3/Emu/Io/Keyboard.h @@ -1,10 +1,9 @@ #pragma once #include -#include #include "KeyboardHandler.h" -class KeyboardManager //: public wxWindow +class KeyboardManager { bool m_inited; std::unique_ptr m_keyboard_handler; @@ -23,7 +22,10 @@ public: CellKbConfig& GetConfig(const u32 keyboard) { return m_keyboard_handler->GetConfig(keyboard); } bool IsInited() const { return m_inited; } +}; -//private: - //DECLARE_EVENT_TABLE(); -}; \ No newline at end of file +typedef int(*GetKeyboardHandlerCountCb)(); +typedef KeyboardHandlerBase*(*GetKeyboardHandlerCb)(int i); + +void SetGetKeyboardHandlerCountCallback(GetKeyboardHandlerCountCb cb); +void SetGetKeyboardHandlerCallback(GetKeyboardHandlerCb cb); \ No newline at end of file diff --git a/rpcs3/Emu/Io/Mouse.cpp b/rpcs3/Emu/Io/Mouse.cpp index fc0112e5e0..5a0f191dae 100644 --- a/rpcs3/Emu/Io/Mouse.cpp +++ b/rpcs3/Emu/Io/Mouse.cpp @@ -1,7 +1,27 @@ #include "stdafx.h" #include "rpcs3/Ini.h" -#include "Mouse.h" #include "Null/NullMouseHandler.h" +#include "Mouse.h" + +GetMouseHandlerCountCb GetMouseHandlerCount = []() +{ + return 1; +}; + +GetMouseHandlerCb GetMouseHandler = [](int i) -> MouseHandlerBase* +{ + return new NullMouseHandler; +}; + +void SetGetMouseHandlerCountCallback(GetMouseHandlerCountCb cb) +{ + GetMouseHandlerCount = cb; +} + +void SetGetMouseHandlerCallback(GetMouseHandlerCb cb) +{ + GetMouseHandler = cb; +} MouseManager::MouseManager() : m_mouse_handler(nullptr) @@ -19,13 +39,13 @@ void MouseManager::Init(const u32 max_connect) return; // NOTE: Change these to std::make_unique assignments when C++14 is available. - int numHandlers = rPlatform::getMouseHandlerCount(); + int numHandlers = GetMouseHandlerCount(); int selectedHandler = Ini.MouseHandlerMode.GetValue(); if (selectedHandler > numHandlers) { selectedHandler = 0; } - m_mouse_handler.reset(rPlatform::getMouseHandler(selectedHandler)); + m_mouse_handler.reset(GetMouseHandler(selectedHandler)); m_mouse_handler->Init(max_connect); m_inited = true; diff --git a/rpcs3/Emu/Io/Mouse.h b/rpcs3/Emu/Io/Mouse.h index aa3c546117..405155ac93 100644 --- a/rpcs3/Emu/Io/Mouse.h +++ b/rpcs3/Emu/Io/Mouse.h @@ -1,10 +1,9 @@ #pragma once #include -#include #include "MouseHandler.h" -class MouseManager //: public wxWindow +class MouseManager { bool m_inited; std::unique_ptr m_mouse_handler; @@ -22,7 +21,10 @@ public: CellMouseRawData& GetRawData(const u32 mouse) { return m_mouse_handler->GetRawData(mouse); } bool IsInited() const { return m_inited; } +}; -//private: - //DECLARE_EVENT_TABLE(); -}; \ No newline at end of file +typedef int(*GetMouseHandlerCountCb)(); +typedef MouseHandlerBase*(*GetMouseHandlerCb)(int i); + +void SetGetMouseHandlerCountCallback(GetMouseHandlerCountCb cb); +void SetGetMouseHandlerCallback(GetMouseHandlerCb cb); \ No newline at end of file diff --git a/rpcs3/Emu/Io/Pad.cpp b/rpcs3/Emu/Io/Pad.cpp index 55cdbf0e91..72efc937bd 100644 --- a/rpcs3/Emu/Io/Pad.cpp +++ b/rpcs3/Emu/Io/Pad.cpp @@ -1,7 +1,27 @@ #include "stdafx.h" #include "rpcs3/Ini.h" -#include "Pad.h" #include "Null/NullPadHandler.h" +#include "Pad.h" + +GetPadHandlerCountCb GetPadHandlerCount = []() +{ + return 1; +}; + +GetPadHandlerCb GetPadHandler = [](int i) -> PadHandlerBase* +{ + return new NullPadHandler; +}; + +void SetGetPadHandlerCountCallback(GetPadHandlerCountCb cb) +{ + GetPadHandlerCount = cb; +} + +void SetGetPadHandlerCallback(GetPadHandlerCb cb) +{ + GetPadHandler = cb; +} PadManager::PadManager() : m_pad_handler(nullptr) @@ -19,13 +39,13 @@ void PadManager::Init(const u32 max_connect) return; // NOTE: Change these to std::make_unique assignments when C++14 is available. - int numHandlers = rPlatform::getPadHandlerCount(); + int numHandlers = GetPadHandlerCount(); int selectedHandler = Ini.PadHandlerMode.GetValue(); if (selectedHandler > numHandlers) { selectedHandler = 0; } - m_pad_handler.reset(rPlatform::getPadHandler(selectedHandler)); + m_pad_handler.reset(GetPadHandler(selectedHandler)); m_pad_handler->Init(max_connect); m_inited = true; diff --git a/rpcs3/Emu/Io/Pad.h b/rpcs3/Emu/Io/Pad.h index 27b049cea4..f9758beb8a 100644 --- a/rpcs3/Emu/Io/Pad.h +++ b/rpcs3/Emu/Io/Pad.h @@ -1,10 +1,9 @@ #pragma once #include -#include #include "PadHandler.h" -class PadManager //: public wxWindow +class PadManager { bool m_inited; std::unique_ptr m_pad_handler; @@ -21,7 +20,10 @@ public: std::vector