mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-03-30 04:21:16 +00:00
added fake values for "ISFS_GetStats()". Hopefully some more games are able to save now.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2656 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
56ec588c49
commit
c27e82fe03
@ -74,10 +74,6 @@ bool CWII_IPC_HLE_Device_fs::Open(u32 _CommandAddress, u32 _Mode)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// =======================================================
|
|
||||||
// IOCtlV calls begin here
|
|
||||||
// -------------
|
|
||||||
bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress)
|
bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress)
|
||||||
{
|
{
|
||||||
u32 ReturnValue = FS_RESULT_OK;
|
u32 ReturnValue = FS_RESULT_OK;
|
||||||
@ -93,7 +89,7 @@ bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress)
|
|||||||
|
|
||||||
switch(CommandBuffer.Parameter)
|
switch(CommandBuffer.Parameter)
|
||||||
{
|
{
|
||||||
case IOCTL_READ_DIR:
|
case IOCTLV_READ_DIR:
|
||||||
{
|
{
|
||||||
// the wii uses this function to define the type (dir or file)
|
// the wii uses this function to define the type (dir or file)
|
||||||
std::string Filename(HLE_IPC_BuildFilename((const char*)Memory::GetPointer(
|
std::string Filename(HLE_IPC_BuildFilename((const char*)Memory::GetPointer(
|
||||||
@ -179,7 +175,7 @@ bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IOCTL_GETUSAGE:
|
case IOCTLV_GETUSAGE:
|
||||||
{
|
{
|
||||||
// check buffer sizes
|
// check buffer sizes
|
||||||
_dbg_assert_(WII_IPC_FILEIO, CommandBuffer.PayloadBuffer.size() == 2);
|
_dbg_assert_(WII_IPC_FILEIO, CommandBuffer.PayloadBuffer.size() == 2);
|
||||||
@ -245,10 +241,6 @@ bool CWII_IPC_HLE_Device_fs::IOCtlV(u32 _CommandAddress)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// =======================================================
|
|
||||||
// IOCtl calls begin here
|
|
||||||
// -------------
|
|
||||||
bool CWII_IPC_HLE_Device_fs::IOCtl(u32 _CommandAddress)
|
bool CWII_IPC_HLE_Device_fs::IOCtl(u32 _CommandAddress)
|
||||||
{
|
{
|
||||||
//u32 DeviceID = Memory::Read_U32(_CommandAddress + 8);
|
//u32 DeviceID = Memory::Read_U32(_CommandAddress + 8);
|
||||||
@ -271,37 +263,34 @@ bool CWII_IPC_HLE_Device_fs::IOCtl(u32 _CommandAddress)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// =======================================================
|
|
||||||
// Execute IOCtl commands
|
|
||||||
// -------------
|
|
||||||
s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _BufferInSize, u32 _BufferOut, u32 _BufferOutSize)
|
s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _BufferInSize, u32 _BufferOut, u32 _BufferOutSize)
|
||||||
{
|
{
|
||||||
switch(_Parameter)
|
switch(_Parameter)
|
||||||
{
|
{
|
||||||
case GET_STATS:
|
case IOCTL_GET_STATS:
|
||||||
{
|
{
|
||||||
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 28);
|
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 28);
|
||||||
|
|
||||||
WARN_LOG(WII_IPC_FILEIO, "FS: GET STATS - no idea what we have to return here, prolly the free memory etc:)");
|
WARN_LOG(WII_IPC_FILEIO, "FS: GET STATS - no idea what we have to return here, prolly the free memory etc:)");
|
||||||
WARN_LOG(WII_IPC_FILEIO, " InBufferSize: %i OutBufferSize: %i", _BufferInSize, _BufferOutSize);
|
WARN_LOG(WII_IPC_FILEIO, " InBufferSize: %i OutBufferSize: %i", _BufferInSize, _BufferOutSize);
|
||||||
|
|
||||||
// This happens in Tatsonuko vs Capcom.
|
// This happens in Tatsonuko vs Capcom., Transformers
|
||||||
//PanicAlert("GET_STATS");
|
// The buffer out values are ripped form a real WII and i dont know the meaning
|
||||||
|
// of them. Prolly it is some kind of small statistic like number of iblocks, free iblocks etc
|
||||||
|
u32 Addr = _BufferOut;
|
||||||
|
Memory::Write_U32(0x00004000, Addr); Addr += 4;
|
||||||
|
Memory::Write_U32(0x00005717, Addr); Addr += 4;
|
||||||
|
Memory::Write_U32(0x000024a9, Addr); Addr += 4;
|
||||||
|
Memory::Write_U32(0x00000000, Addr); Addr += 4;
|
||||||
|
Memory::Write_U32(0x00000300, Addr); Addr += 4;
|
||||||
|
Memory::Write_U32(0x0000163e, Addr); Addr += 4;
|
||||||
|
Memory::Write_U32(0x000001c1, Addr);
|
||||||
|
|
||||||
/* Memory::Write_U32(Addr, a); Addr += 4;
|
|
||||||
Memory::Write_U32(Addr, b); Addr += 4;
|
|
||||||
Memory::Write_U32(Addr, c); Addr += 4;
|
|
||||||
Memory::Write_U32(Addr, d); Addr += 4;
|
|
||||||
Memory::Write_U32(Addr, e); Addr += 4;
|
|
||||||
Memory::Write_U32(Addr, f); Addr += 4;
|
|
||||||
Memory::Write_U32(Addr, g); Addr += 4;
|
|
||||||
*/
|
|
||||||
return FS_RESULT_OK;
|
return FS_RESULT_OK;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CREATE_DIR:
|
case IOCTL_CREATE_DIR:
|
||||||
{
|
{
|
||||||
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 0);
|
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 0);
|
||||||
u32 Addr = _BufferIn;
|
u32 Addr = _BufferIn;
|
||||||
@ -322,7 +311,7 @@ s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _B
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SET_ATTR:
|
case IOCTL_SET_ATTR:
|
||||||
{
|
{
|
||||||
u32 Addr = _BufferIn;
|
u32 Addr = _BufferIn;
|
||||||
|
|
||||||
@ -346,7 +335,7 @@ s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _B
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GET_ATTR:
|
case IOCTL_GET_ATTR:
|
||||||
{
|
{
|
||||||
_dbg_assert_msg_(WII_IPC_FILEIO, _BufferOutSize == 76,
|
_dbg_assert_msg_(WII_IPC_FILEIO, _BufferOutSize == 76,
|
||||||
" GET_ATTR needs an 76 bytes large output buffer but it is %i bytes large",
|
" GET_ATTR needs an 76 bytes large output buffer but it is %i bytes large",
|
||||||
@ -394,7 +383,7 @@ s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _B
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case DELETE_FILE:
|
case IOCTL_DELETE_FILE:
|
||||||
{
|
{
|
||||||
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 0);
|
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 0);
|
||||||
int Offset = 0;
|
int Offset = 0;
|
||||||
@ -418,7 +407,7 @@ s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _B
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RENAME_FILE:
|
case IOCTL_RENAME_FILE:
|
||||||
{
|
{
|
||||||
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 0);
|
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 0);
|
||||||
int Offset = 0;
|
int Offset = 0;
|
||||||
@ -453,7 +442,7 @@ s32 CWII_IPC_HLE_Device_fs::ExecuteCommand(u32 _Parameter, u32 _BufferIn, u32 _B
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CREATE_FILE:
|
case IOCTL_CREATE_FILE:
|
||||||
{
|
{
|
||||||
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 0);
|
_dbg_assert_(WII_IPC_FILEIO, _BufferOutSize == 0);
|
||||||
|
|
||||||
|
@ -28,13 +28,6 @@ public:
|
|||||||
|
|
||||||
virtual bool Open(u32 _CommandAddress, u32 _Mode);
|
virtual bool Open(u32 _CommandAddress, u32 _Mode);
|
||||||
|
|
||||||
#if 0
|
|
||||||
virtual bool Close(u32 _CommandAddress) { _dbg_assert_msg_(WII_IPC_HLE, 0, "%s is not able to run Close()", m_Name.c_str()); return true; }
|
|
||||||
virtual bool Seek(u32 _CommandAddress) { _dbg_assert_msg_(WII_IPC_HLE, 0, "%s is not able to run Seek()", m_Name.c_str()); return true; }
|
|
||||||
virtual bool Read(u32 _CommandAddress) { _dbg_assert_msg_(WII_IPC_HLE, 0, "%s is not able to run Read()", m_Name.c_str()); return true; }
|
|
||||||
virtual bool Write(u32 _CommandAddress) { _dbg_assert_msg_(WII_IPC_HLE, 0, "%s is not able to run Write()", m_Name.c_str()); return true; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
virtual bool IOCtl(u32 _CommandAddress);
|
virtual bool IOCtl(u32 _CommandAddress);
|
||||||
|
|
||||||
virtual bool IOCtlV(u32 _CommandAddress);
|
virtual bool IOCtlV(u32 _CommandAddress);
|
||||||
@ -43,15 +36,15 @@ private:
|
|||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
GET_STATS = 0x02,
|
IOCTL_GET_STATS = 0x02,
|
||||||
CREATE_DIR = 0x03,
|
IOCTL_CREATE_DIR = 0x03,
|
||||||
IOCTL_READ_DIR = 0x04,
|
IOCTLV_READ_DIR = 0x04,
|
||||||
SET_ATTR = 0x05,
|
IOCTL_SET_ATTR = 0x05,
|
||||||
GET_ATTR = 0x06,
|
IOCTL_GET_ATTR = 0x06,
|
||||||
DELETE_FILE = 0x07,
|
IOCTL_DELETE_FILE = 0x07,
|
||||||
RENAME_FILE = 0x08,
|
IOCTL_RENAME_FILE = 0x08,
|
||||||
CREATE_FILE = 0x09,
|
IOCTL_CREATE_FILE = 0x09,
|
||||||
IOCTL_GETUSAGE = 0x0C
|
IOCTLV_GETUSAGE = 0x0C
|
||||||
};
|
};
|
||||||
|
|
||||||
s32 ExecuteCommand(u32 Parameter, u32 _BufferIn, u32 _BufferInSize, u32 _BufferOut, u32 _BufferOutSize);
|
s32 ExecuteCommand(u32 Parameter, u32 _BufferIn, u32 _BufferInSize, u32 _BufferOut, u32 _BufferOutSize);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user