From 3218c6bd2f8079e886a90ec62345452aa26c4ff0 Mon Sep 17 00:00:00 2001 From: Henrique Gemignani Passos Lima Date: Tue, 11 Oct 2022 12:41:19 +0300 Subject: [PATCH] Add CMemoryCardDriver::UpdateCardProbe Former-commit-id: 0a7858ac6b95d62f80241e22a30734fbeb49d4ca --- include/Kyoto/CMemoryCardSys.hpp | 4 +-- src/MetroidPrime/CMemoryCardDriver.cpp | 41 +++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) 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() {}