Various matches and improvements (#299)

* Various matches and improvements

* Remove unnecessary comment
This commit is contained in:
hatal175
2023-02-23 17:41:05 +02:00
committed by GitHub
parent fa1f47f7a1
commit 4df6e8edea
10 changed files with 129 additions and 227 deletions
+48 -28
View File
@@ -49,40 +49,60 @@ s32 mDoMemCdRWm_Store(CARDFileInfo* file, void* data, u32 length) {
mDoMemCdRWm_BuildHeader((mDoMemCdRWm_HeaderData*)sTmpBuf);
s32 card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf), 0);
if (card_state != CARD_ERROR_READY) {
if (!mDoMemCdRWm_CheckCardStat(file)) {
memset(sTmpBuf, 0, sizeof(sTmpBuf));
if (card_state != CARD_RESULT_READY) {
return card_state;
}
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state == CARD_ERROR_READY) {
return;
}
if (!mDoMemCdRWm_CheckCardStat(file)) {
memset(sTmpBuf, 0, sizeof(sTmpBuf));
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state == CARD_ERROR_READY) {
return;
}
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state != CARD_RESULT_READY) {
return card_state;
}
memset(sTmpBuf, 0, sizeof(sTmpBuf));
*(int*)(sTmpBuf + 4) = 6;
memcpy(sTmpBuf + 8, data, length);
*(int*)(sTmpBuf) = 0;
u32 checksum = mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC);
*(u32*)(sTmpBuf + 0x1FFC) = checksum;
if (CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000) == CARD_ERROR_READY &&
CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000) == CARD_ERROR_READY) {
if (checksum == mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) {
if (CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000) == CARD_ERROR_READY &&
CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000) == CARD_ERROR_READY) {
if (checksum == mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) {
mDoMemCdRWm_SetCardStat(file);
}
}
}
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state != CARD_RESULT_READY) {
return card_state;
}
}
memset(sTmpBuf, 0, sizeof(sTmpBuf));
*(int*)(sTmpBuf + 4) = 6;
memcpy(sTmpBuf + 8, data, length);
*(int*)(sTmpBuf) = 0;
u32 checksum = mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC);
*(u32*)(sTmpBuf + 0x1FFC) = checksum;
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state != CARD_RESULT_READY) {
return card_state;
}
card_state = CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state != CARD_RESULT_READY) {
return card_state;
}
if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) {
return card_state;
}
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state != CARD_RESULT_READY) {
return card_state;
}
card_state = CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state != CARD_RESULT_READY) {
return card_state;
}
if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) {
return card_state;
}
mDoMemCdRWm_SetCardStat(file);
return card_state;
}
#else
#pragma push