Now Mario Kart Wii can create/read/write save file correctly.

BTW: I doubt "Zelda Twilight Princess" save file might be broken since r4704, anyone who has got this game please have a test.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4708 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
ayuanx 2009-12-18 08:54:45 +00:00
parent e39b844af6
commit 077768501b
3 changed files with 30 additions and 8 deletions

View file

@ -326,11 +326,24 @@ void ExecuteCommand(u32 _Address)
if(pDevice->IsHardware())
{
// We have already opened this device, return -6
if(pDevice->IsOpened())
Memory::Write_U32(/*u32(-6)*/DeviceID, _Address + 4);
{
if (pDevice->GetDeviceName().find("/dev/net/") != std::string::npos)
// AyuanX: /dev/net/XXX are more like events which don't need close so they can be reopened
// At least it is so for /dev/net/kd/request & /dev/net/ncd/manage
pDevice->Open(_Address, Mode);
else
// We have already opened this hardware, return -6
// AyuanX: TO_BE_VERIFIED
// -6 seems to be a bad number as in NET it means "Retry Again"(?)
// I guess -4 stands for "Already Opened"(?)
Memory::Write_U32(u32(-6), _Address + 4);
}
else
{
pDevice->Open(_Address, Mode);
}
}
else
{

View file

@ -59,15 +59,18 @@ it failed)
extern std::queue<std::pair<u32,std::string> > g_ReplyQueueLater;
// **********************************************************************************
// Handle /dev/net/kd/request requests
CWII_IPC_HLE_Device_net_kd_request::CWII_IPC_HLE_Device_net_kd_request(u32 _DeviceID, const std::string& _rDeviceName)
: IWII_IPC_HLE_Device(_DeviceID, _rDeviceName)
{}
, m_UserID("Dolphin-EMU")
// TODO: Dump the true ID from real Wii
{
}
CWII_IPC_HLE_Device_net_kd_request::~CWII_IPC_HLE_Device_net_kd_request()
{}
{
}
bool CWII_IPC_HLE_Device_net_kd_request::Open(u32 _CommandAddress, u32 _Mode)
{
@ -123,7 +126,8 @@ bool CWII_IPC_HLE_Device_net_kd_request::IOCtl(u32 _CommandAddress)
break;
case IOCTL_NWC24_REQUEST_GENERATED_USER_ID: // (Input: none, Output: 32 bytes)
PanicAlert("IOCTL_NWC24_REQUEST_GENERATED_USER_ID");
INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_REQUEST_GENERATED_USER_ID");
memcpy(Memory::GetPointer(BufferOut), m_UserID.c_str(), m_UserID.length() + 1);
break;
case IOCTL_NWC24_GET_SCHEDULAR_STAT:
@ -156,10 +160,12 @@ bool CWII_IPC_HLE_Device_net_kd_request::IOCtl(u32 _CommandAddress)
// Handle /dev/net/ncd/manage requests
CWII_IPC_HLE_Device_net_ncd_manage::CWII_IPC_HLE_Device_net_ncd_manage(u32 _DeviceID, const std::string& _rDeviceName)
: IWII_IPC_HLE_Device(_DeviceID, _rDeviceName)
{}
{
}
CWII_IPC_HLE_Device_net_ncd_manage::~CWII_IPC_HLE_Device_net_ncd_manage()
{}
{
}
bool CWII_IPC_HLE_Device_net_ncd_manage::Open(u32 _CommandAddress, u32 _Mode)
{

View file

@ -61,6 +61,9 @@ private:
IOCTL_NWC24_SET_SCRIPT_MODE = 0x22,
IOCTL_NWC24_REQUEST_SHUTDOWN = 0x28,
};
// Max size 32 Bytes
std::string m_UserID;
};
// **********************************************************************************