| 875 | } |
| 876 | |
| 877 | void waitRead() |
| 878 | { |
| 879 | s32 chan = msChan; |
| 880 | CardMgr::TaskStatus taskStatus = CardMgr::msaCardData[chan].mTaskStatus; |
| 881 | if (taskStatus != CardMgr::mcTaskDone) |
| 882 | return; |
| 883 | |
| 884 | if (taskStatus == CardMgr::mcTaskDone) |
| 885 | CardMgr::msaCardData[chan].mTaskStatus = CardMgr::mcNoTask; |
| 886 | |
| 887 | switch (CardMgr::msaCardData[msChan].mCardStatus) |
| 888 | { |
| 889 | case CARD_RESULT_READY: |
| 890 | mspSaveFile->checkData(); |
| 891 | switch (msCommand) |
| 892 | { |
| 893 | case mcCommand2: |
| 894 | msFlags |= 1; |
| 895 | if (mspSystemFile->mSectionCount == 0 || CardMgr::areOffsetsOk(msChan)) |
| 896 | { |
| 897 | msState = 3; |
| 898 | msButtonAt = 6; |
| 899 | mspPrintMemoryCard->init(PrintMemoryCard::mcBrokenNoLoad); |
| 900 | } |
| 901 | else |
| 902 | { |
| 903 | mspSystemFile->setDataChecksums(); |
| 904 | mspSystemFile->store(); |
| 905 | msState = 0xe; |
| 906 | } |
| 907 | break; |
| 908 | case mcCommand3: |
| 909 | if (mspSystemFile->isSavable() || CardMgr::areOffsetsOk(msChan)) |
| 910 | { |
| 911 | if (FLAG_ON(mspSystemFile->mValidSections, 4)) // check if header is valid/active |
| 912 | CardMgr::write(msChan, SaveFile::mcHeader); |
| 913 | else if (mspSystemFile->mSectionCount == 0) |
| 914 | CardMgr::write(msChan, SaveFile::mcData1); |
| 915 | else |
| 916 | CardMgr::write(msChan, SaveFile::mcData2); |
| 917 | |
| 918 | msState = 9; |
| 919 | mspPrintMemoryCard->init(PrintMemoryCard::mcGameSavingNoTouch); |
| 920 | msMessageTimer.set(); |
| 921 | break; |
| 922 | } |
| 923 | |
| 924 | msState = 4; |
| 925 | msSelectAt = 6; |
| 926 | mspPrintMemoryCard->init(PrintMemoryCard::mcNoFileNoSave); |
| 927 | break; |
| 928 | |
| 929 | break; |
| 930 | case mcCommand4: |
| 931 | switch (mspGhostFile->mGhostType) |
| 932 | { |
| 933 | case 2: |
| 934 | msState = 2; |
no test coverage detected