From ae96537b8d313fa4f1e716c676de98313c826352 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 9 Aug 2014 14:52:50 +0800 Subject: [PATCH 1/4] 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 2/4] 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 3/4] 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 4/4] 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);