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:
fires.gc 2009-03-14 20:10:10 +00:00
parent 56ec588c49
commit c27e82fe03
2 changed files with 29 additions and 47 deletions

View File

@ -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);

View File

@ -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);