Add DVDLowOpenPartition

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3070 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Shawn Hoffman 2009-04-25 07:49:48 +00:00
parent a8c224023c
commit 72febe7b8a
3 changed files with 242 additions and 110 deletions

View File

@ -15,10 +15,6 @@
// Official SVN repository and contact information can be found at // Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/ // http://code.google.com/p/dolphin-emu/
//////////////////////////////////////////////////////////////////////////////////////////
// Include
// ¯¯¯¯¯¯¯¯¯¯
#include "Common.h" #include "Common.h"
#include "WII_IPC_HLE_Device_DI.h" #include "WII_IPC_HLE_Device_DI.h"
@ -31,17 +27,13 @@
#include "VolumeCreator.h" #include "VolumeCreator.h"
#include "Filesystem.h" #include "Filesystem.h"
///////////////////////////////////
//////////////////////////////////////////////////
// Music mod // Music mod
// ¯¯¯¯¯¯¯¯¯¯
#include "Setup.h" // Define MUSICMOD here #include "Setup.h" // Define MUSICMOD here
#ifdef MUSICMOD #ifdef MUSICMOD
#include "../../../../Externals/MusicMod/Main/Src/Main.h" #include "../../../../Externals/MusicMod/Main/Src/Main.h"
#endif #endif
///////////////////////
CWII_IPC_HLE_Device_di::CWII_IPC_HLE_Device_di(u32 _DeviceID, const std::string& _rDeviceName ) CWII_IPC_HLE_Device_di::CWII_IPC_HLE_Device_di(u32 _DeviceID, const std::string& _rDeviceName )
@ -56,10 +48,14 @@ CWII_IPC_HLE_Device_di::CWII_IPC_HLE_Device_di(u32 _DeviceID, const std::string&
CWII_IPC_HLE_Device_di::~CWII_IPC_HLE_Device_di() CWII_IPC_HLE_Device_di::~CWII_IPC_HLE_Device_di()
{ {
if(m_pFileSystem) { delete m_pFileSystem; m_pFileSystem = NULL; } if (m_pFileSystem)
/* This caused the crash in VolumeHandler.cpp, setting m_pVolume = NULL; didn't help {
it still makes VolumeHandler.cpp have a non-NULL pointer with no content so that delete m_pFileSystem;
delete crashes */ m_pFileSystem = NULL;
}
// This caused the crash in VolumeHandler.cpp, setting m_pVolume = NULL; didn't help
// it still makes VolumeHandler.cpp have a non-NULL pointer with no content so that
// delete crashes
//if(m_pVolume) { delete m_pVolume; m_pVolume = NULL; } //if(m_pVolume) { delete m_pVolume; m_pVolume = NULL; }
} }
@ -88,7 +84,8 @@ bool CWII_IPC_HLE_Device_di::IOCtl(u32 _CommandAddress)
u32 BufferOutSize = Memory::Read_U32(_CommandAddress + 0x1C); u32 BufferOutSize = Memory::Read_U32(_CommandAddress + 0x1C);
u32 Command = Memory::Read_U32(BufferIn) >> 24; u32 Command = Memory::Read_U32(BufferIn) >> 24;
DEBUG_LOG(WII_IPC_DVD, "%s - Command(0x%08x) BufferIn(0x%08x, 0x%x) BufferOut(0x%08x, 0x%x)", GetDeviceName().c_str(), Command, BufferIn, BufferInSize, BufferOut, BufferOutSize); DEBUG_LOG(WII_IPC_DVD, "%s - Command(0x%08x) BufferIn(0x%08x, 0x%x) BufferOut(0x%08x, 0x%x)",
GetDeviceName().c_str(), Command, BufferIn, BufferInSize, BufferOut, BufferOutSize);
u32 ReturnValue = ExecuteCommand(BufferIn, BufferInSize, BufferOut, BufferOutSize); u32 ReturnValue = ExecuteCommand(BufferIn, BufferInSize, BufferOut, BufferOutSize);
Memory::Write_U32(ReturnValue, _CommandAddress + 0x4); Memory::Write_U32(ReturnValue, _CommandAddress + 0x4);
@ -98,28 +95,61 @@ bool CWII_IPC_HLE_Device_di::IOCtl(u32 _CommandAddress)
bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress) bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress)
{ {
// PanicAlert("CWII_IPC_HLE_Device_di::IOCtlV() unknown"); INFO_LOG(WII_IPC_DVD, "*******************************");
// DumpCommands(_CommandAddress); INFO_LOG(WII_IPC_DVD, "CWII_IPC_DVD_Device_di::IOCtlV");
u32 ReturnValue = 0; INFO_LOG(WII_IPC_DVD, "*******************************");
SIOCtlVBuffer CommandBuffer(_CommandAddress); SIOCtlVBuffer CommandBuffer(_CommandAddress);
// Prepare the out buffer(s) with zeros as a safety precaution
// to avoid returning bad values
for(u32 i = 0; i < CommandBuffer.NumberPayloadBuffer; i++)
{
Memory::Memset(CommandBuffer.PayloadBuffer[i].m_Address, 0,
CommandBuffer.PayloadBuffer[i].m_Size);
}
u32 ReturnValue = 0;
switch (CommandBuffer.Parameter) switch (CommandBuffer.Parameter)
{ {
// DVDLowOpenPartition??? // DVDLowOpenPartition
case 0x8b: case 0x8b:
{ {
INFO_LOG(WII_IPC_DVD, "DVD IOCtlV: DVDLowOpenPartition"); _dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[1].m_Address == 0, "DVDLowOpenPartition with ticket");
_dbg_assert_msg_(WII_IPC_DVD, 0, "DVD IOCtlV: DVDLowOpenPartition"); _dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[2].m_Address == 0, "DVDLowOpenPartition with cert chain");
u8 partition = Memory::Read_U32(CommandBuffer.m_Address + 4);
INFO_LOG(WII_IPC_DVD, "DVD IOCtlV: DVDLowOpenPartition %i", partition);
bool readOK = false;
// Get the info table
u8 pInfoTableOffset[4];
readOK |= VolumeHandler::RAWReadToPtr(pInfoTableOffset, 0x40004, 4);
u64 InfoTableOffset = (u32)(pInfoTableOffset[3] | pInfoTableOffset[2] << 8 | pInfoTableOffset[1] << 16 | pInfoTableOffset[0] << 24) << 2;
// Get the offset of the partition
u8 pInfoTableEntryOffset[4];
readOK |= VolumeHandler::RAWReadToPtr(pInfoTableEntryOffset, InfoTableOffset + (partition << 2) + 4, 4);
u64 PartitionOffset = (u32)(pInfoTableEntryOffset[3] | pInfoTableEntryOffset[2] << 8 | pInfoTableEntryOffset[1] << 16 | pInfoTableEntryOffset[0] << 24) << 2;
// Read TMD to the buffer
readOK |= VolumeHandler::RAWReadToPtr(Memory::GetPointer(CommandBuffer.PayloadBuffer[0].m_Address),
PartitionOffset + 0x2c0, CommandBuffer.PayloadBuffer[0].m_Size);
// Second outbuffer is error, we can ignore it
ReturnValue = readOK ? 1 : 0;
} }
break; break;
default: default:
INFO_LOG(WII_IPC_DVD, "DVD IOCtlV: %i", CommandBuffer.Parameter); ERROR_LOG(WII_IPC_DVD, "DVD IOCtlV: %i", CommandBuffer.Parameter);
_dbg_assert_msg_(WII_IPC_DVD, 0, "DVD: %i", CommandBuffer.Parameter); _dbg_assert_msg_(WII_IPC_DVD, 0, "DVD IOCtlV: %i", CommandBuffer.Parameter);
break; break;
} }
Memory::Write_U32(ReturnValue, _CommandAddress+4); Memory::Write_U32(ReturnValue, _CommandAddress + 4);
return true; return true;
} }
@ -127,11 +157,11 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32
{ {
u32 Command = Memory::Read_U32(_BufferIn) >> 24; u32 Command = Memory::Read_U32(_BufferIn) >> 24;
/* Set out buffer to zeroes as a safety precaution to avoid answering // TATSUNOKO VS CAPCOM: Gets here with _BufferOut == 0!!!
nonsense values */ if (_BufferOut != 0)
{
// TATSUNOKO VS CAPCOM: Gets here with _BufferOut == 0x0!!! // Set out buffer to zeroes as a safety precaution to avoid answering
if (_BufferOut != 0) { // nonsense values
Memory::Memset(_BufferOut, 0, _BufferOutSize); Memory::Memset(_BufferOut, 0, _BufferOutSize);
} }
@ -150,94 +180,98 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32
0x0000, 0x0002, 0x20060526, I tried it in Balls of Fury that gives a DVD error 0x0000, 0x0002, 0x20060526, I tried it in Balls of Fury that gives a DVD error
message after the DVDLowInquiry, but that did't change anything, it must be message after the DVDLowInquiry, but that did't change anything, it must be
something else. */ something else. */
buffer[0] = 0x01; // rev // buffer[0] = 0x01; // rev
buffer[1] = 0x02; // buffer[1] = 0x02;
buffer[2] = 0x03; // dev code // buffer[2] = 0x03; // dev code
buffer[3] = 0x04; // buffer[3] = 0x04;
buffer[4] = 0x20; // firmware date // buffer[4] = 0x20; // firmware date
buffer[5] = 0x08; // buffer[5] = 0x08;
buffer[6] = 0x08; // buffer[6] = 0x08;
buffer[7] = 0x29; // buffer[7] = 0x29;
DEBUG_LOG(WII_IPC_DVD, "%s executes DVDLowInquiry (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize); buffer[4] = 0x20; // firmware date
buffer[5] = 0x02;
return 0x1; buffer[6] = 0x04;
buffer[7] = 0x02;
buffer[8] = 0x61; // version
DEBUG_LOG(WII_IPC_DVD, "%s executes DVDLowInquiry (Buffer 0x%08x, 0x%x)",
GetDeviceName().c_str(), _BufferOut, _BufferOutSize);
return 1;
} }
break; break;
// DVDLowReadDiskID // DVDLowReadDiskID
case 0x70: case 0x70:
{ {
// TODO - verify that this is correct VolumeHandler::RAWReadToPtr(Memory::GetPointer(_BufferOut), 0, _BufferOutSize);
VolumeHandler::ReadToPtr(Memory::GetPointer(_BufferOut), 0, _BufferOutSize);
DEBUG_LOG(WII_IPC_DVD, "%s executes DVDLowReadDiskID (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize); DEBUG_LOG(WII_IPC_DVD, "%s executes DVDLowReadDiskID 0x%08x",
GetDeviceName().c_str(), Memory::Read_U64(_BufferOut));
return 0x1;
return 1;
} }
break; break;
// DVDLowRead // DVDLowRead
case 0x71: case 0x71:
{ {
if (_BufferOut == 0) if (_BufferOut == 0)
{ {
PanicAlert("DVDLowRead : _BufferOut == 0"); PanicAlert("DVDLowRead : _BufferOut == 0");
return 0; return 0;
} }
u32 Size = Memory::Read_U32(_BufferIn + 0x04); u32 Size = Memory::Read_U32(_BufferIn + 0x04);
u64 DVDAddress = (u64)Memory::Read_U32(_BufferIn + 0x08) << 2; u64 DVDAddress = (u64)Memory::Read_U32(_BufferIn + 0x08) << 2;
const char *pFilename = m_pFileSystem->GetFileName(DVDAddress); const char *pFilename = m_pFileSystem->GetFileName(DVDAddress);
if (pFilename != NULL) if (pFilename != NULL)
{ {
INFO_LOG(WII_IPC_DVD, " DVDLowRead: %s (0x%x) - (DVDAddr: 0x%x, Size: 0x%x)", pFilename, m_pFileSystem->GetFileSize(pFilename), DVDAddress, Size); INFO_LOG(WII_IPC_DVD, " DVDLowRead: %s (0x%x) - (DVDAddr: 0x%x, Size: 0x%x)",
} pFilename, m_pFileSystem->GetFileSize(pFilename), DVDAddress, Size);
else }
{ else
INFO_LOG(WII_IPC_DVD, " DVDLowRead: file unkw - (DVDAddr: 0x%x, Size: 0x%x)", GetDeviceName().c_str(), DVDAddress, Size); {
} INFO_LOG(WII_IPC_DVD, " DVDLowRead: file unkw - (DVDAddr: 0x%x, Size: 0x%x)",
GetDeviceName().c_str(), DVDAddress, Size);
}
if (Size > _BufferOutSize) if (Size > _BufferOutSize)
{ {
PanicAlert("Detected attempt to read more data from the DVD than fit inside the out buffer. Clamp."); PanicAlert("Detected attempt to read more data from the DVD than fit inside the out buffer. Clamp.");
Size = _BufferOutSize; Size = _BufferOutSize;
} }
if (VolumeHandler::ReadToPtr(Memory::GetPointer(_BufferOut), DVDAddress, Size) != true) if (!VolumeHandler::ReadToPtr(Memory::GetPointer(_BufferOut), DVDAddress, Size))
{ {
PanicAlert("Cant read from DVD_Plugin - DVD-Interface: Fatal Error"); PanicAlert("Cant read from DVD_Plugin - DVD-Interface: Fatal Error");
} }
//////////////////////////////////////////////////
// Music mod
// ¯¯¯¯¯¯¯¯¯¯
#ifdef MUSICMOD #ifdef MUSICMOD
std::string Tmp = pFilename; std::string Tmp = pFilename;
MusicMod::CheckFile(Tmp); MusicMod::CheckFile(Tmp);
#endif #endif
///////////////////////
return 0x1; return 1;
} }
break; break;
// DVDLowWaitForCoverClose // DVDLowWaitForCoverClose
case 0x79: case 0x79:
{ {
Memory::Memset(_BufferOut, 0, _BufferOutSize); INFO_LOG(WII_IPC_DVD, "%s executes DVDLowWaitForCoverClose (Buffer 0x%08x, 0x%x)",
INFO_LOG(WII_IPC_DVD, "%s executes DVDLowWaitForCoverClose (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize); GetDeviceName().c_str(), _BufferOut, _BufferOutSize);
return 4; return 4;
} }
break; break;
// DVDLowPrepareCoverRegister
// DVDLowGetCoverReg - Called by "Legend of Spyro" and MP3 // DVDLowGetCoverReg - Called by "Legend of Spyro" and MP3
case 0x7a: case 0x7a:
{ {
INFO_LOG(WII_IPC_DVD, "%s executes DVDLowGetCoverReg (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize); INFO_LOG(WII_IPC_DVD, "%s executes DVDLowGetCoverReg (Buffer 0x%08x, 0x%x)",
GetDeviceName().c_str(), _BufferOut, _BufferOutSize);
// Write zeroes to the out buffer just in case there is some nonsense data there
Memory::Memset(_BufferOut, 0, _BufferOutSize);
// -------------------------------------------------------------------- // --------------------------------------------------------------------
/* Hack for Legend of Spyro. Switching the 4th byte between 0 and 1 gets /* Hack for Legend of Spyro. Switching the 4th byte between 0 and 1 gets
@ -262,19 +296,40 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32
} }
break; break;
// DVDLowNotifyReset
case 0x7e:
PanicAlert("DVDLowNotifyReset");
break;
// DVDLowReadDvdPhysical
case 0x80:
PanicAlert("DVDLowReadDvdPhysical");
break;
// DVDLowReadDvdCopyright
case 0x81:
PanicAlert("DVDLowReadDvdCopyright");
break;
// DVDLowReadDvdDiscKey
case 0x82:
PanicAlert("DVDLowReadDvdDiscKey");
break;
// DVDLowClearCoverInterrupt // DVDLowClearCoverInterrupt
case 0x86: case 0x86:
{ {
Memory::Memset(_BufferOut, 0, _BufferOutSize); INFO_LOG(WII_IPC_DVD, "%s executes DVDLowClearCoverInterrupt (Buffer 0x%08x, 0x%x)",
INFO_LOG(WII_IPC_DVD, "%s executes DVDLowClearCoverInterrupt (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize); GetDeviceName().c_str(), _BufferOut, _BufferOutSize);
return 1;
} }
break; break;
// DVDLowGetCoverStatus // DVDLowGetCoverStatus
case 0x88: case 0x88:
{ {
Memory::Memset(_BufferOut, 0, _BufferOutSize); INFO_LOG(WII_IPC_DVD, "%s executes DVDLowGetCoverStatus (Buffer 0x%08x, 0x%x)",
INFO_LOG(WII_IPC_DVD, "%s executes DVDLowGetCoverStatus (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize); GetDeviceName().c_str(), _BufferOut, _BufferOutSize);
return 1; return 1;
} }
break; break;
@ -282,24 +337,27 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32
// DVDLowReset // DVDLowReset
case 0x8a: case 0x8a:
{ {
Memory::Memset(_BufferOut, 0, _BufferOutSize); INFO_LOG(WII_IPC_DVD, "%s executes DVDLowReset (Buffer 0x%08x, 0x%x)",
INFO_LOG(WII_IPC_DVD, "%s executes DVDLowReset (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize); GetDeviceName().c_str(), _BufferOut, _BufferOutSize);
return 1; return 1;
} }
break; break;
// DVDLowOpenPartition // DVDLowOpenPartition
case 0x8b: case 0x8b:
PanicAlert("DVDLowOpenPartition", Command); PanicAlert("DVDLowOpenPartition");
return 1;
break; break;
// DVDLowClosePartition
case 0x8c: case 0x8c:
//PanicAlert("DVDLowClosePartition"); DEBUG_LOG(WII_IPC_DVD, "DVDLowClosePartition");
return 1;
break; break;
// DVDLowUnencryptedRead // DVDLowUnencryptedRead
case 0x8d: case 0x8d:
//PanicAlert("DVDLowUnencryptedRead"); DEBUG_LOG(WII_IPC_DVD, "DVDLowUnencryptedRead");
{ {
if (_BufferOut == 0) if (_BufferOut == 0)
{ {
@ -315,40 +373,106 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32
Size = _BufferOutSize; Size = _BufferOutSize;
} }
if (VolumeHandler::RAWReadToPtr(Memory::GetPointer(_BufferOut), DVDAddress, Size) != true) if (!VolumeHandler::RAWReadToPtr(Memory::GetPointer(_BufferOut), DVDAddress, Size))
{ {
PanicAlert("Cant read from DVD_Plugin - DVD-Interface: Fatal Error"); PanicAlert("Cant read from DVD_Plugin - DVD-Interface: Fatal Error");
} }
return 1;
} }
break; break;
// DVDLowSeek // DVDLowEnableDvdVideo
case 0xab: case 0x8e:
//PanicAlert("DVDLowSeek"); PanicAlert("DVDLowEnableDvdVideo");
break;
case 0xe0:
PanicAlert("DVD unknown command 0xe0, so far only seen in Tatsunoko. Don't know what to do, things will probably go wrong.");
break; break;
// DVDLowReportKey
case 0xa4:
PanicAlert("DVDLowReportKey");
break;
// DVDLowSeek
case 0xab:
PanicAlert("DVDLowSeek");
break;
// Apparently Dx commands have never been seen in dolphin? *shrug*
// DVDLowReadDvd
case 0xd0:
PanicAlert("DVDLowReadDvd");
break;
// DVDLowReadDvdConfig
case 0xd1:
PanicAlert("DVDLowReadDvdConfig");
break;
// DVDLowStopLaser
case 0xd2:
PanicAlert("DVDLowStopLaser");
break;
// DVDLowOffset
case 0xd9:
PanicAlert("DVDLowOffset");
break;
// DVDLowReadDiskBca
case 0xda:
PanicAlert("DVDLowReadDiskBca");
break;
// DVDLowRequestDiscStatus
case 0xdb:
PanicAlert("DVDLowRequestDiscStatus");
break;
// DVDLowRequestRetryNumber
case 0xdc:
PanicAlert("DVDLowRequestRetryNumber");
break;
// DVDLowSetMaximumRotation
case 0xdd:
PanicAlert("DVDLowSetMaximumRotation");
break;
// DVDLowSerMeasControl
case 0xdf:
PanicAlert("DVDLowSerMeasControl");
break;
// DVDLowRequestError
case 0xe0:
// Identical to the error codes found in yagcd section 5.7.3.5.1 (so far)
PanicAlert("DVDLowRequestError");
break;
// Ex commands are immediate and respond with 4 bytes
// DVDLowStopMotor // DVDLowStopMotor
case 0xe3: case 0xe3:
{ {
Memory::Memset(_BufferOut, 0, _BufferOutSize);
u32 eject = Memory::Read_U32(_BufferIn + 0x04); u32 eject = Memory::Read_U32(_BufferIn + 0x04);
INFO_LOG(WII_IPC_DVD, "%s executes DVDLowStopMotor (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize); INFO_LOG(WII_IPC_DVD, "%s executes DVDLowStopMotor eject = %s",
GetDeviceName().c_str(), eject ? "true" : "false");
if(eject) if (eject)
{ {
INFO_LOG(WII_IPC_DVD, "Eject disc", GetDeviceName().c_str(), _BufferOut, _BufferOutSize);
// TODO: eject the disc // TODO: eject the disc
} }
} }
break; break;
// DVDLowAudioBufferConfig
case 0xe4:
PanicAlert("DVDLowAudioBufferConfig");
break;
default: default:
ERROR_LOG(WII_IPC_DVD, "%s executes unknown cmd 0x%08x (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), Command, _BufferOut, _BufferOutSize); ERROR_LOG(WII_IPC_DVD, "%s executes unknown cmd 0x%08x (Buffer 0x%08x, 0x%x)",
GetDeviceName().c_str(), Command, _BufferOut, _BufferOutSize);
PanicAlert("%s executes unknown cmd 0x%08x", GetDeviceName().c_str(), Command); PanicAlert("%s executes unknown cmd 0x%08x", GetDeviceName().c_str(), Command);
break; break;

View File

@ -389,10 +389,17 @@ u32 CWII_IPC_HLE_Device_sdio_slot0::ExecuteCommand(u32 _BufferIn, u32 _BufferInS
Memory::Write_U32(0x900, _BufferOut); Memory::Write_U32(0x900, _BufferOut);
break; break;
case CRAZY_BIGN: case CRAZY_BIGN64:
DEBUG_LOG(WII_IPC_SD, "CMD64, wtf"); WARN_LOG(WII_IPC_SD, "CMD64, wtf");
// <svpe> shuffle2_: try returning -4 for cmd x'40. // <svpe> shuffle2_: try returning -4 for cmd x'40.
Memory::Write_U32(-0x4, _BufferOut); Memory::Write_U32(-0x04, _BufferOut);
_dbg_assert_msg_(WII_IPC_SD, req.arg == 2, "cmd64 odd arg value 0x%08x", req.arg);
break;
case CRAZY_BIGN65:
ERROR_LOG(WII_IPC_SD, "CMD65, wtf");
break; break;
default: default:

View File

@ -94,7 +94,8 @@ private:
ACMD_SENDOPCOND = 0x29, ACMD_SENDOPCOND = 0x29,
ACMD_SENDSCR = 0x33, ACMD_SENDSCR = 0x33,
CRAZY_BIGN = 0x40, CRAZY_BIGN64 = 0x40,
CRAZY_BIGN65 = 0x41,
}; };
u32 m_Status; u32 m_Status;