diff --git a/include/Kyoto/CMemoryCardSys.hpp b/include/Kyoto/CMemoryCardSys.hpp index eac3961a..9dde62ee 100644 --- a/include/Kyoto/CMemoryCardSys.hpp +++ b/include/Kyoto/CMemoryCardSys.hpp @@ -26,8 +26,8 @@ struct FileHandle { struct ProbeResults { ECardResult x0_error; - uint x4_cardSize; /* in megabits */ - uint x8_sectorSize; /* in bytes */ + int x4_cardSize; /* in megabits */ + int x8_sectorSize; /* in bytes */ }; class CMemoryCardSys { diff --git a/src/MetroidPrime/CMemoryCardDriver.cpp b/src/MetroidPrime/CMemoryCardDriver.cpp index 59b03757..03d9ce13 100644 --- a/src/MetroidPrime/CMemoryCardDriver.cpp +++ b/src/MetroidPrime/CMemoryCardDriver.cpp @@ -370,7 +370,46 @@ void CMemoryCardDriver::StartCardProbe() { UpdateCardProbe(); } -void CMemoryCardDriver::UpdateCardProbe() {} +void CMemoryCardDriver::UpdateCardProbe() { + ProbeResults result = CMemoryCardSys::IsMemoryCardInserted(x0_cardPort); + ECardResult error = result.x0_error; + + if (error == kCR_READY && result.x8_sectorSize != 0x2000) { + x10_state = kS_CardProbeFailed; + x14_error = kE_CardNon8KSectors; + } else if (error != kCR_BUSY) { + if (error == kCR_WRONGDEVICE) { + x10_state = kS_CardProbeFailed; + x14_error = kE_CardWrongDevice; + } else if (error != kCR_READY) { + NoCardFound(); + } else { + x10_state = kS_CardProbeDone; + StartMountCard(); + } + } + + // switch (result.x0_error) { + // case kCR_READY: + // if (result.x8_sectorSize != 0x2000) { + // x10_state = kS_CardProbeFailed; + // x14_error = kE_CardNon8KSectors; + // } else { + // x10_state = kS_CardProbeDone; + // StartMountCard(); + // } + // break; + // case kCR_BUSY: + // break; + // case kCR_WRONGDEVICE: + // x10_state = kS_CardProbeFailed; + // x14_error = kE_CardWrongDevice; + // break; + // default: + // NoCardFound(); + // break; + // } +} void CMemoryCardDriver::StartMountCard() {}