mirror of https://github.com/RPCS3/rpcs3.git
Merge pull request #731 from raven02/patch-1
FS: add cellFsChmod/SdataOpenByFd/Fsync & cellFsAioWrite
This commit is contained in:
commit
228c33d44d
|
@ -512,8 +512,8 @@ bool adecCheckType(AudioCodecType type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case CELL_ADEC_TYPE_ATRACX: LOG_NOTICE(HLE, "*** (?) type: ATRAC3plus"); break;
|
case CELL_ADEC_TYPE_ATRACX: LOG_NOTICE(HLE, "adecCheckType: ATRAC3plus"); break;
|
||||||
case CELL_ADEC_TYPE_ATRACX_2CH: LOG_NOTICE(HLE, "*** type: ATRAC3plus 2ch"); 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_6CH:
|
||||||
case CELL_ADEC_TYPE_ATRACX_8CH:
|
case CELL_ADEC_TYPE_ATRACX_8CH:
|
||||||
|
|
|
@ -5,11 +5,8 @@
|
||||||
#include "Emu/SysCalls/Modules.h"
|
#include "Emu/SysCalls/Modules.h"
|
||||||
#include "cellPamf.h"
|
#include "cellPamf.h"
|
||||||
|
|
||||||
//void cellPamf_init();
|
|
||||||
//Module cellPamf(0x0012, cellPamf_init);
|
|
||||||
Module *cellPamf = nullptr;
|
Module *cellPamf = nullptr;
|
||||||
|
|
||||||
|
|
||||||
int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t<CellCodecEsFilterId> pEsFilterId)
|
int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t<CellCodecEsFilterId> pEsFilterId)
|
||||||
{
|
{
|
||||||
//TODO: convert type and ch to EsFilterId
|
//TODO: convert type and ch to EsFilterId
|
||||||
|
@ -42,7 +39,7 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t<CellCodecEsFilterId> pE
|
||||||
pEsFilterId->supplementalInfo2 = 0;
|
pEsFilterId->supplementalInfo2 = 0;
|
||||||
}
|
}
|
||||||
else
|
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;
|
break;
|
||||||
case CELL_PAMF_STREAM_TYPE_PAMF_LPCM:
|
case CELL_PAMF_STREAM_TYPE_PAMF_LPCM:
|
||||||
if (ch == 0)
|
if (ch == 0)
|
||||||
|
@ -53,7 +50,7 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t<CellCodecEsFilterId> pE
|
||||||
pEsFilterId->supplementalInfo2 = 0;
|
pEsFilterId->supplementalInfo2 = 0;
|
||||||
}
|
}
|
||||||
else
|
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;
|
break;
|
||||||
case CELL_PAMF_STREAM_TYPE_USER_DATA:
|
case CELL_PAMF_STREAM_TYPE_USER_DATA:
|
||||||
if (ch == 0)
|
if (ch == 0)
|
||||||
|
@ -64,13 +61,13 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, mem_ptr_t<CellCodecEsFilterId> pE
|
||||||
pEsFilterId->supplementalInfo2 = 0;
|
pEsFilterId->supplementalInfo2 = 0;
|
||||||
}
|
}
|
||||||
else
|
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;
|
break;
|
||||||
case CELL_PAMF_STREAM_TYPE_AC3:
|
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;
|
break;
|
||||||
case CELL_PAMF_STREAM_TYPE_M2V:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
return CELL_PAMF_ERROR_INVALID_ARG;
|
return CELL_PAMF_ERROR_INVALID_ARG;
|
||||||
|
@ -90,7 +87,7 @@ u8 pamfGetStreamType(mem_ptr_t<CellPamfReader> pSelf, u8 stream)
|
||||||
case 0x80: return CELL_PAMF_STREAM_TYPE_PAMF_LPCM;
|
case 0x80: return CELL_PAMF_STREAM_TYPE_PAMF_LPCM;
|
||||||
case 0xdd: return CELL_PAMF_STREAM_TYPE_USER_DATA;
|
case 0xdd: return CELL_PAMF_STREAM_TYPE_USER_DATA;
|
||||||
default:
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,16 +110,16 @@ u8 pamfGetStreamChannel(mem_ptr_t<CellPamfReader> pSelf, u8 stream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case 0xdc:
|
case 0xdc:
|
||||||
cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS");
|
cellPamf->Todo("pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_ATRAC3PLUS");
|
||||||
return 0;
|
return 0;
|
||||||
case 0x80:
|
case 0x80:
|
||||||
cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_PAMF_LPCM");
|
cellPamf->Todo("pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_PAMF_LPCM");
|
||||||
return 0;
|
return 0;
|
||||||
case 0xdd:
|
case 0xdd:
|
||||||
cellPamf->Error("*** TODO: pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_USER_DATA");
|
cellPamf->Todo("pamfGetStreamChannel: CELL_PAMF_STREAM_TYPE_USER_DATA");
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,118 +6,14 @@
|
||||||
#include "cellSysutil.h"
|
#include "cellSysutil.h"
|
||||||
#include "cellResc.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;
|
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
|
static const float
|
||||||
PICTURE_SIZE = (1.0f),
|
PICTURE_SIZE = (1.0f),
|
||||||
UV_DELTA_PS = (1.f / 8.f),
|
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);
|
XY_DELTA_LB = (1.f / 8.f);
|
||||||
|
|
||||||
struct RescVertex_t
|
|
||||||
{
|
|
||||||
be_t<float> Px, Py;
|
|
||||||
be_t<float> u, v;
|
|
||||||
be_t<float> 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<CellGcmContextData> 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(); }
|
|
||||||
|
|
||||||
void BuildupVertexBufferNR()
|
void BuildupVertexBufferNR()
|
||||||
{
|
{
|
||||||
const float PX_FS = PICTURE_SIZE;
|
const float PX_FS = PICTURE_SIZE;
|
||||||
|
|
|
@ -1,5 +1,31 @@
|
||||||
#pragma once
|
#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
|
enum CellRescBufferMode
|
||||||
{
|
{
|
||||||
CELL_RESC_720x480 = 0x1,
|
CELL_RESC_720x480 = 0x1,
|
||||||
|
@ -79,3 +105,79 @@ struct CellRescSrc
|
||||||
be_t<u16> height;
|
be_t<u16> height;
|
||||||
be_t<u32> offset;
|
be_t<u32> offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct RescVertex_t
|
||||||
|
{
|
||||||
|
be_t<float> Px, Py;
|
||||||
|
be_t<float> u, v;
|
||||||
|
be_t<float> 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<CellGcmContextData> 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(); }
|
|
@ -6,8 +6,6 @@
|
||||||
#include "Emu/SysCalls/SC_FUNC.h"
|
#include "Emu/SysCalls/SC_FUNC.h"
|
||||||
#include "Emu/SysCalls/Modules.h"
|
#include "Emu/SysCalls/Modules.h"
|
||||||
|
|
||||||
//void sys_fs_init();
|
|
||||||
//Module sys_fs(0x000e, sys_fs_init);
|
|
||||||
Module *sys_fs = nullptr;
|
Module *sys_fs = nullptr;
|
||||||
|
|
||||||
bool sdata_check(u32 version, u32 flags, u64 filesizeInput, u64 filesizeTmp)
|
bool sdata_check(u32 version, u32 flags, u64 filesizeInput, u64 filesizeTmp)
|
||||||
|
@ -137,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);
|
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<u32> g_FsAioReadID( 0 );
|
std::atomic<u32> g_FsAioReadID( 0 );
|
||||||
std::atomic<u32> g_FsAioReadCur( 0 );
|
std::atomic<u32> g_FsAioReadCur( 0 );
|
||||||
bool aio_init = false;
|
bool aio_init = false;
|
||||||
|
@ -202,7 +209,11 @@ int cellFsAioRead(mem_ptr_t<CellFsAio> aio, mem32_t aio_id, mem_func_ptr_t<void
|
||||||
|
|
||||||
vfsFileBase* orig_file;
|
vfsFileBase* orig_file;
|
||||||
u32 fd = aio->fd;
|
u32 fd = aio->fd;
|
||||||
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)
|
//get a unique id for the callback (may be used by cellFsAioCancel)
|
||||||
const u32 xid = g_FsAioReadID++;
|
const u32 xid = g_FsAioReadID++;
|
||||||
|
@ -216,6 +227,15 @@ int cellFsAioRead(mem_ptr_t<CellFsAio> aio, mem32_t aio_id, mem_func_ptr_t<void
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cellFsAioWrite(mem_ptr_t<CellFsAio> aio, mem32_t aio_id, mem_func_ptr_t<void(*)(mem_ptr_t<CellFsAio> 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)
|
int cellFsAioInit(mem8_ptr_t mount_point)
|
||||||
{
|
{
|
||||||
std::string mp = Memory.ReadString(mount_point.GetAddr());
|
std::string mp = Memory.ReadString(mount_point.GetAddr());
|
||||||
|
@ -255,6 +275,7 @@ void sys_fs_init()
|
||||||
{
|
{
|
||||||
sys_fs->AddFunc(0x718bf5f8, cellFsOpen);
|
sys_fs->AddFunc(0x718bf5f8, cellFsOpen);
|
||||||
sys_fs->AddFunc(0xb1840b53, cellFsSdataOpen);
|
sys_fs->AddFunc(0xb1840b53, cellFsSdataOpen);
|
||||||
|
sys_fs->AddFunc(0x6d3bb15b, cellFsSdataOpenByFd);
|
||||||
sys_fs->AddFunc(0x4d5ff8e2, cellFsRead);
|
sys_fs->AddFunc(0x4d5ff8e2, cellFsRead);
|
||||||
sys_fs->AddFunc(0xecdcf2ab, cellFsWrite);
|
sys_fs->AddFunc(0xecdcf2ab, cellFsWrite);
|
||||||
sys_fs->AddFunc(0x2cb51f0d, cellFsClose);
|
sys_fs->AddFunc(0x2cb51f0d, cellFsClose);
|
||||||
|
@ -265,6 +286,8 @@ void sys_fs_init()
|
||||||
sys_fs->AddFunc(0xef3efa34, cellFsFstat);
|
sys_fs->AddFunc(0xef3efa34, cellFsFstat);
|
||||||
sys_fs->AddFunc(0xba901fe6, cellFsMkdir);
|
sys_fs->AddFunc(0xba901fe6, cellFsMkdir);
|
||||||
sys_fs->AddFunc(0xf12eecc8, cellFsRename);
|
sys_fs->AddFunc(0xf12eecc8, cellFsRename);
|
||||||
|
sys_fs->AddFunc(0x99406d0b, cellFsChmod);
|
||||||
|
sys_fs->AddFunc(0x967a162b, cellFsFsync);
|
||||||
sys_fs->AddFunc(0x2796fdf3, cellFsRmdir);
|
sys_fs->AddFunc(0x2796fdf3, cellFsRmdir);
|
||||||
sys_fs->AddFunc(0x7f4677a8, cellFsUnlink);
|
sys_fs->AddFunc(0x7f4677a8, cellFsUnlink);
|
||||||
sys_fs->AddFunc(0xa397d042, cellFsLseek);
|
sys_fs->AddFunc(0xa397d042, cellFsLseek);
|
||||||
|
@ -272,6 +295,7 @@ void sys_fs_init()
|
||||||
sys_fs->AddFunc(0xc9dc3ac5, cellFsTruncate);
|
sys_fs->AddFunc(0xc9dc3ac5, cellFsTruncate);
|
||||||
sys_fs->AddFunc(0xcb588dba, cellFsFGetBlockSize);
|
sys_fs->AddFunc(0xcb588dba, cellFsFGetBlockSize);
|
||||||
sys_fs->AddFunc(0xc1c507e7, cellFsAioRead);
|
sys_fs->AddFunc(0xc1c507e7, cellFsAioRead);
|
||||||
|
sys_fs->AddFunc(0x4cef342e, cellFsAioWrite);
|
||||||
sys_fs->AddFunc(0xdb869f20, cellFsAioInit);
|
sys_fs->AddFunc(0xdb869f20, cellFsAioInit);
|
||||||
sys_fs->AddFunc(0x9f951810, cellFsAioFinish);
|
sys_fs->AddFunc(0x9f951810, cellFsAioFinish);
|
||||||
sys_fs->AddFunc(0x1a108ab7, cellFsGetBlockSize);
|
sys_fs->AddFunc(0x1a108ab7, cellFsGetBlockSize);
|
||||||
|
|
|
@ -333,6 +333,24 @@ s32 cellFsRename(u32 from_addr, u32 to_addr)
|
||||||
|
|
||||||
return CELL_ENOENT;
|
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 cellFsFsync(u32 fd)
|
||||||
|
{
|
||||||
|
sys_fs->Todo("cellFsFsync(fd=0x%x)", fd);
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
|
||||||
|
return CELL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
s32 cellFsRmdir(u32 path_addr)
|
s32 cellFsRmdir(u32 path_addr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -135,6 +135,8 @@ s32 cellFsStat(u32 path_addr, mem_ptr_t<CellFsStat> sb);
|
||||||
s32 cellFsFstat(u32 fd, mem_ptr_t<CellFsStat> sb);
|
s32 cellFsFstat(u32 fd, mem_ptr_t<CellFsStat> sb);
|
||||||
s32 cellFsMkdir(u32 path_addr, u32 mode);
|
s32 cellFsMkdir(u32 path_addr, u32 mode);
|
||||||
s32 cellFsRename(u32 from_addr, u32 to_addr);
|
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 cellFsRmdir(u32 path_addr);
|
||||||
s32 cellFsUnlink(u32 path_addr);
|
s32 cellFsUnlink(u32 path_addr);
|
||||||
s32 cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos);
|
s32 cellFsLseek(u32 fd, s64 offset, u32 whence, mem64_t pos);
|
||||||
|
|
Loading…
Reference in New Issue