diff --git a/asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 372aeb6fea3..00000000000 --- a/asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,41 +0,0 @@ -lbl_80016F2C: -/* 80016F2C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016F30 7C 08 02 A6 */ mflr r0 -/* 80016F34 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016F38 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016F3C 93 C1 00 08 */ stw r30, 8(r1) -/* 80016F40 7C 7E 1B 78 */ mr r30, r3 -/* 80016F44 3B E0 00 00 */ li r31, 0 -/* 80016F48 80 03 1F C8 */ lwz r0, 0x1fc8(r3) -/* 80016F4C 2C 00 00 00 */ cmpwi r0, 0 -/* 80016F50 40 82 00 0C */ bne lbl_80016F5C -/* 80016F54 38 60 00 00 */ li r3, 0 -/* 80016F58 48 00 00 48 */ b lbl_80016FA0 -lbl_80016F5C: -/* 80016F5C 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016F60 48 32 82 F5 */ bl OSTryLockMutex -/* 80016F64 2C 03 00 00 */ cmpwi r3, 0 -/* 80016F68 41 82 00 34 */ beq lbl_80016F9C -/* 80016F6C 80 1E 1F C4 */ lwz r0, 0x1fc4(r30) -/* 80016F70 2C 00 00 0D */ cmpwi r0, 0xd -/* 80016F74 41 82 00 20 */ beq lbl_80016F94 -/* 80016F78 2C 00 00 05 */ cmpwi r0, 5 -/* 80016F7C 40 82 00 14 */ bne lbl_80016F90 -/* 80016F80 38 00 00 02 */ li r0, 2 -/* 80016F84 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016F88 3B E0 00 01 */ li r31, 1 -/* 80016F8C 48 00 00 08 */ b lbl_80016F94 -lbl_80016F90: -/* 80016F90 3B E0 00 02 */ li r31, 2 -lbl_80016F94: -/* 80016F94 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016F98 48 32 81 85 */ bl OSUnlockMutex -lbl_80016F9C: -/* 80016F9C 7F E3 FB 78 */ mr r3, r31 -lbl_80016FA0: -/* 80016FA0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016FA4 83 C1 00 08 */ lwz r30, 8(r1) -/* 80016FA8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016FAC 7C 08 03 A6 */ mtlr r0 -/* 80016FB0 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016FB4 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s b/asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s deleted file mode 100644 index 0057509f888..00000000000 --- a/asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s +++ /dev/null @@ -1,48 +0,0 @@ -lbl_80016AB0: -/* 80016AB0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80016AB4 7C 08 02 A6 */ mflr r0 -/* 80016AB8 90 01 00 24 */ stw r0, 0x24(r1) -/* 80016ABC 39 61 00 20 */ addi r11, r1, 0x20 -/* 80016AC0 48 34 B7 15 */ bl _savegpr_27 -/* 80016AC4 7C 7B 1B 78 */ mr r27, r3 -/* 80016AC8 7C 9C 23 78 */ mr r28, r4 -/* 80016ACC 7C BD 2B 78 */ mr r29, r5 -/* 80016AD0 7C DE 33 78 */ mr r30, r6 -/* 80016AD4 3B E0 00 00 */ li r31, 0 -/* 80016AD8 80 03 1F C8 */ lwz r0, 0x1fc8(r3) -/* 80016ADC 2C 00 00 00 */ cmpwi r0, 0 -/* 80016AE0 40 82 00 0C */ bne lbl_80016AEC -/* 80016AE4 38 60 00 00 */ li r3, 0 -/* 80016AE8 48 00 00 58 */ b lbl_80016B40 -lbl_80016AEC: -/* 80016AEC 38 7B 1F CC */ addi r3, r27, 0x1fcc -/* 80016AF0 48 32 87 65 */ bl OSTryLockMutex -/* 80016AF4 2C 03 00 00 */ cmpwi r3, 0 -/* 80016AF8 41 82 00 44 */ beq lbl_80016B3C -/* 80016AFC 80 1B 1F C4 */ lwz r0, 0x1fc4(r27) -/* 80016B00 2C 00 00 03 */ cmpwi r0, 3 -/* 80016B04 40 82 00 24 */ bne lbl_80016B28 -/* 80016B08 7F 83 E3 78 */ mr r3, r28 -/* 80016B0C 7C 9B F2 14 */ add r4, r27, r30 -/* 80016B10 7F A5 EB 78 */ mr r5, r29 -/* 80016B14 4B FE CA 2D */ bl memcpy -/* 80016B18 38 00 00 01 */ li r0, 1 -/* 80016B1C 90 1B 1F C4 */ stw r0, 0x1fc4(r27) -/* 80016B20 3B E0 00 01 */ li r31, 1 -/* 80016B24 48 00 00 10 */ b lbl_80016B34 -lbl_80016B28: -/* 80016B28 38 00 00 02 */ li r0, 2 -/* 80016B2C 90 1B 1F C4 */ stw r0, 0x1fc4(r27) -/* 80016B30 3B E0 00 02 */ li r31, 2 -lbl_80016B34: -/* 80016B34 38 7B 1F CC */ addi r3, r27, 0x1fcc -/* 80016B38 48 32 85 E5 */ bl OSUnlockMutex -lbl_80016B3C: -/* 80016B3C 7F E3 FB 78 */ mr r3, r31 -lbl_80016B40: -/* 80016B40 39 61 00 20 */ addi r11, r1, 0x20 -/* 80016B44 48 34 B6 DD */ bl _restgpr_27 -/* 80016B48 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80016B4C 7C 08 03 A6 */ mtlr r0 -/* 80016B50 38 21 00 20 */ addi r1, r1, 0x20 -/* 80016B54 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 9e3150d393e..00000000000 --- a/asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,44 +0,0 @@ -lbl_80016CE0: -/* 80016CE0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016CE4 7C 08 02 A6 */ mflr r0 -/* 80016CE8 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016CEC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016CF0 93 C1 00 08 */ stw r30, 8(r1) -/* 80016CF4 7C 7E 1B 78 */ mr r30, r3 -/* 80016CF8 3B E0 00 00 */ li r31, 0 -/* 80016CFC 80 03 1F C8 */ lwz r0, 0x1fc8(r3) -/* 80016D00 2C 00 00 00 */ cmpwi r0, 0 -/* 80016D04 40 82 00 0C */ bne lbl_80016D10 -/* 80016D08 38 60 00 00 */ li r3, 0 -/* 80016D0C 48 00 00 50 */ b lbl_80016D5C -lbl_80016D10: -/* 80016D10 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016D14 48 32 85 41 */ bl OSTryLockMutex -/* 80016D18 2C 03 00 00 */ cmpwi r3, 0 -/* 80016D1C 41 82 00 3C */ beq lbl_80016D58 -/* 80016D20 80 1E 1F C4 */ lwz r0, 0x1fc4(r30) -/* 80016D24 2C 00 00 04 */ cmpwi r0, 4 -/* 80016D28 40 82 00 14 */ bne lbl_80016D3C -/* 80016D2C 38 00 00 01 */ li r0, 1 -/* 80016D30 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016D34 3B E0 00 01 */ li r31, 1 -/* 80016D38 48 00 00 18 */ b lbl_80016D50 -lbl_80016D3C: -/* 80016D3C 2C 00 00 01 */ cmpwi r0, 1 -/* 80016D40 40 82 00 0C */ bne lbl_80016D4C -/* 80016D44 3B E0 00 00 */ li r31, 0 -/* 80016D48 48 00 00 08 */ b lbl_80016D50 -lbl_80016D4C: -/* 80016D4C 3B E0 00 02 */ li r31, 2 -lbl_80016D50: -/* 80016D50 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016D54 48 32 83 C9 */ bl OSUnlockMutex -lbl_80016D58: -/* 80016D58 7F E3 FB 78 */ mr r3, r31 -lbl_80016D5C: -/* 80016D5C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016D60 83 C1 00 08 */ lwz r30, 8(r1) -/* 80016D64 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016D68 7C 08 03 A6 */ mtlr r0 -/* 80016D6C 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016D70 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index dc967ac9322..00000000000 --- a/asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,41 +0,0 @@ -lbl_80016730: -/* 80016730 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016734 7C 08 02 A6 */ mflr r0 -/* 80016738 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001673C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016740 7C 7F 1B 78 */ mr r31, r3 -/* 80016744 48 33 D3 85 */ bl CARDInit -/* 80016748 38 60 00 00 */ li r3, 0 -/* 8001674C 98 7F 1F BD */ stb r3, 0x1fbd(r31) -/* 80016750 38 00 00 02 */ li r0, 2 -/* 80016754 98 1F 1F BE */ stb r0, 0x1fbe(r31) -/* 80016758 90 7F 1F C4 */ stw r3, 0x1fc4(r31) -/* 8001675C 90 7F 1F C0 */ stw r3, 0x1fc0(r31) -/* 80016760 98 7F 1F BC */ stb r3, 0x1fbc(r31) -/* 80016764 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016768 48 32 88 A1 */ bl OSInitMutex -/* 8001676C 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 80016770 48 32 8B A1 */ bl OSInitCond -/* 80016774 48 32 A5 11 */ bl OSGetCurrentThread -/* 80016778 48 32 B6 E5 */ bl OSGetThreadPriority -/* 8001677C 7C 68 1B 78 */ mr r8, r3 -/* 80016780 3C 60 80 3E */ lis r3, MemCardThread@ha /* 0x803E0C20@ha */ -/* 80016784 38 63 0C 20 */ addi r3, r3, MemCardThread@l /* 0x803E0C20@l */ -/* 80016788 3C 80 80 01 */ lis r4, mDoMemCd_main__FPv@ha /* 0x8001741C@ha */ -/* 8001678C 38 84 74 1C */ addi r4, r4, mDoMemCd_main__FPv@l /* 0x8001741C@l */ -/* 80016790 38 A0 00 00 */ li r5, 0 -/* 80016794 3C C0 80 3E */ lis r6, MemCardStack@ha /* 0x803DFC20@ha */ -/* 80016798 38 C6 FC 20 */ addi r6, r6, MemCardStack@l /* 0x803DFC20@l */ -/* 8001679C 38 C6 10 00 */ addi r6, r6, 0x1000 -/* 800167A0 38 E0 10 00 */ li r7, 0x1000 -/* 800167A4 39 08 00 01 */ addi r8, r8, 1 -/* 800167A8 39 20 00 01 */ li r9, 1 -/* 800167AC 48 32 AA E1 */ bl OSCreateThread -/* 800167B0 3C 60 80 3E */ lis r3, MemCardThread@ha /* 0x803E0C20@ha */ -/* 800167B4 38 63 0C 20 */ addi r3, r3, MemCardThread@l /* 0x803E0C20@l */ -/* 800167B8 48 32 AF FD */ bl OSResumeThread -/* 800167BC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800167C0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800167C4 7C 08 03 A6 */ mtlr r0 -/* 800167C8 38 21 00 10 */ addi r1, r1, 0x10 -/* 800167CC 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index d29d891ff33..00000000000 --- a/asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_800170B8: -/* 800170B8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800170BC 7C 08 02 A6 */ mflr r0 -/* 800170C0 90 01 00 14 */ stw r0, 0x14(r1) -/* 800170C4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800170C8 7C 7F 1B 78 */ mr r31, r3 -/* 800170CC 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800170D0 48 32 81 85 */ bl OSTryLockMutex -/* 800170D4 2C 03 00 00 */ cmpwi r3, 0 -/* 800170D8 41 82 00 24 */ beq lbl_800170FC -/* 800170DC 38 00 00 0D */ li r0, 0xd -/* 800170E0 90 1F 1F C4 */ stw r0, 0x1fc4(r31) -/* 800170E4 38 00 00 04 */ li r0, 4 -/* 800170E8 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 800170EC 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800170F0 48 32 80 2D */ bl OSUnlockMutex -/* 800170F4 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 800170F8 48 32 83 0D */ bl OSSignalCond -lbl_800170FC: -/* 800170FC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80017100 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80017104 7C 08 03 A6 */ mtlr r0 -/* 80017108 38 21 00 10 */ addi r1, r1, 0x10 -/* 8001710C 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 1cde52c3cad..00000000000 --- a/asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_80016E58: -/* 80016E58 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016E5C 7C 08 02 A6 */ mflr r0 -/* 80016E60 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016E64 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016E68 7C 7F 1B 78 */ mr r31, r3 -/* 80016E6C 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016E70 48 32 83 E5 */ bl OSTryLockMutex -/* 80016E74 2C 03 00 00 */ cmpwi r3, 0 -/* 80016E78 41 82 00 1C */ beq lbl_80016E94 -/* 80016E7C 38 00 00 03 */ li r0, 3 -/* 80016E80 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 80016E84 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016E88 48 32 82 95 */ bl OSUnlockMutex -/* 80016E8C 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 80016E90 48 32 85 75 */ bl OSSignalCond -lbl_80016E94: -/* 80016E94 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016E98 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016E9C 7C 08 03 A6 */ mtlr r0 -/* 80016EA0 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016EA4 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 8898b99c755..00000000000 --- a/asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_80017110: -/* 80017110 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80017114 7C 08 02 A6 */ mflr r0 -/* 80017118 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001711C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80017120 7C 7F 1B 78 */ mr r31, r3 -/* 80017124 88 63 1F BC */ lbz r3, 0x1fbc(r3) -/* 80017128 48 34 02 B1 */ bl CARDUnmount -/* 8001712C 38 00 00 00 */ li r0, 0 -/* 80017130 90 1F 1F C4 */ stw r0, 0x1fc4(r31) -/* 80017134 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80017138 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8001713C 7C 08 03 A6 */ mtlr r0 -/* 80017140 38 21 00 10 */ addi r1, r1, 0x10 -/* 80017144 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 2fcca809de7..00000000000 --- a/asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,37 +0,0 @@ -lbl_80016EA8: -/* 80016EA8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016EAC 7C 08 02 A6 */ mflr r0 -/* 80016EB0 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016EB4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016EB8 93 C1 00 08 */ stw r30, 8(r1) -/* 80016EBC 7C 7E 1B 78 */ mr r30, r3 -/* 80016EC0 38 00 00 00 */ li r0, 0 -/* 80016EC4 90 03 1F C8 */ stw r0, 0x1fc8(r3) -/* 80016EC8 88 63 1F BC */ lbz r3, 0x1fbc(r3) -/* 80016ECC 48 34 0D 55 */ bl CARDFormat -/* 80016ED0 7C 7F 1B 78 */ mr r31, r3 -/* 80016ED4 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016ED8 48 32 83 7D */ bl OSTryLockMutex -/* 80016EDC 2C 03 00 00 */ cmpwi r3, 0 -/* 80016EE0 41 82 00 34 */ beq lbl_80016F14 -/* 80016EE4 2C 1F 00 00 */ cmpwi r31, 0 -/* 80016EE8 40 82 00 10 */ bne lbl_80016EF8 -/* 80016EEC 38 00 00 05 */ li r0, 5 -/* 80016EF0 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016EF4 48 00 00 10 */ b lbl_80016F04 -lbl_80016EF8: -/* 80016EF8 7F C3 F3 78 */ mr r3, r30 -/* 80016EFC 7F E4 FB 78 */ mr r4, r31 -/* 80016F00 48 00 04 61 */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016F04: -/* 80016F04 38 00 00 01 */ li r0, 1 -/* 80016F08 90 1E 1F C8 */ stw r0, 0x1fc8(r30) -/* 80016F0C 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016F10 48 32 82 0D */ bl OSUnlockMutex -lbl_80016F14: -/* 80016F14 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016F18 83 C1 00 08 */ lwz r30, 8(r1) -/* 80016F1C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016F20 7C 08 03 A6 */ mtlr r0 -/* 80016F24 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016F28 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s b/asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s deleted file mode 100644 index 617f1ab8b33..00000000000 --- a/asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s +++ /dev/null @@ -1,61 +0,0 @@ -lbl_80016D74: -/* 80016D74 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016D78 7C 08 02 A6 */ mflr r0 -/* 80016D7C 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016D80 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016D84 93 C1 00 08 */ stw r30, 8(r1) -/* 80016D88 7C 7E 1B 78 */ mr r30, r3 -/* 80016D8C 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016D90 48 32 84 C5 */ bl OSTryLockMutex -/* 80016D94 2C 03 00 00 */ cmpwi r3, 0 -/* 80016D98 41 82 00 A4 */ beq lbl_80016E3C -/* 80016D9C 80 1E 1F C4 */ lwz r0, 0x1fc4(r30) -/* 80016DA0 28 00 00 0D */ cmplwi r0, 0xd -/* 80016DA4 41 81 00 88 */ bgt lbl_80016E2C -/* 80016DA8 3C 60 80 3A */ lis r3, lit_3770@ha /* 0x803A34F8@ha */ -/* 80016DAC 38 63 34 F8 */ addi r3, r3, lit_3770@l /* 0x803A34F8@l */ -/* 80016DB0 54 00 10 3A */ slwi r0, r0, 2 -/* 80016DB4 7C 03 00 2E */ lwzx r0, r3, r0 -/* 80016DB8 7C 09 03 A6 */ mtctr r0 -/* 80016DBC 4E 80 04 20 */ bctr -/* 80016DC0 3B E0 00 02 */ li r31, 2 -/* 80016DC4 48 00 00 68 */ b lbl_80016E2C -/* 80016DC8 3B E0 00 01 */ li r31, 1 -/* 80016DCC 48 00 00 60 */ b lbl_80016E2C -/* 80016DD0 3B E0 00 03 */ li r31, 3 -/* 80016DD4 48 00 00 58 */ b lbl_80016E2C -/* 80016DD8 3B E0 00 04 */ li r31, 4 -/* 80016DDC 48 00 00 50 */ b lbl_80016E2C -/* 80016DE0 3B E0 00 05 */ li r31, 5 -/* 80016DE4 48 00 00 48 */ b lbl_80016E2C -/* 80016DE8 3B E0 00 00 */ li r31, 0 -/* 80016DEC 48 00 00 40 */ b lbl_80016E2C -/* 80016DF0 3B E0 00 07 */ li r31, 7 -/* 80016DF4 48 00 00 38 */ b lbl_80016E2C -/* 80016DF8 3B E0 00 06 */ li r31, 6 -/* 80016DFC 48 00 00 30 */ b lbl_80016E2C -/* 80016E00 3B E0 00 0B */ li r31, 0xb -/* 80016E04 48 00 00 28 */ b lbl_80016E2C -/* 80016E08 3B E0 00 0C */ li r31, 0xc -/* 80016E0C 48 00 00 20 */ b lbl_80016E2C -/* 80016E10 3B E0 00 09 */ li r31, 9 -/* 80016E14 48 00 00 18 */ b lbl_80016E2C -/* 80016E18 3B E0 00 0A */ li r31, 0xa -/* 80016E1C 48 00 00 10 */ b lbl_80016E2C -/* 80016E20 3B E0 00 08 */ li r31, 8 -/* 80016E24 48 00 00 08 */ b lbl_80016E2C -/* 80016E28 3B E0 00 0E */ li r31, 0xe -lbl_80016E2C: -/* 80016E2C 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016E30 48 32 82 ED */ bl OSUnlockMutex -/* 80016E34 7F E3 FB 78 */ mr r3, r31 -/* 80016E38 48 00 00 08 */ b lbl_80016E40 -lbl_80016E3C: -/* 80016E3C 38 60 00 0E */ li r3, 0xe -lbl_80016E40: -/* 80016E40 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016E44 83 C1 00 08 */ lwz r30, 8(r1) -/* 80016E48 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016E4C 7C 08 03 A6 */ mtlr r0 -/* 80016E50 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016E54 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index fd340074e88..00000000000 --- a/asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_800169B4: -/* 800169B4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800169B8 7C 08 02 A6 */ mflr r0 -/* 800169BC 90 01 00 14 */ stw r0, 0x14(r1) -/* 800169C0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800169C4 7C 7F 1B 78 */ mr r31, r3 -/* 800169C8 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800169CC 48 32 88 89 */ bl OSTryLockMutex -/* 800169D0 2C 03 00 00 */ cmpwi r3, 0 -/* 800169D4 41 82 00 24 */ beq lbl_800169F8 -/* 800169D8 38 00 00 00 */ li r0, 0 -/* 800169DC 90 1F 1F C8 */ stw r0, 0x1fc8(r31) -/* 800169E0 38 00 00 01 */ li r0, 1 -/* 800169E4 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 800169E8 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800169EC 48 32 87 31 */ bl OSUnlockMutex -/* 800169F0 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 800169F4 48 32 8A 11 */ bl OSSignalCond -lbl_800169F8: -/* 800169F8 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800169FC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016A00 7C 08 03 A6 */ mtlr r0 -/* 80016A04 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016A08 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index a814af9ce44..00000000000 --- a/asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,27 +0,0 @@ -lbl_80017274: -/* 80017274 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80017278 7C 08 02 A6 */ mflr r0 -/* 8001727C 90 01 00 34 */ stw r0, 0x34(r1) -/* 80017280 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 80017284 7C 7F 1B 78 */ mr r31, r3 -/* 80017288 88 63 1F BC */ lbz r3, 0x1fbc(r3) -/* 8001728C 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCard__stringBase0@ha /* 0x803743F8@ha */ -/* 80017290 38 84 43 F8 */ addi r4, r4, m_Do_m_Do_MemCard__stringBase0@l /* 0x803743F8@l */ -/* 80017294 38 A1 00 08 */ addi r5, r1, 8 -/* 80017298 48 34 0D 01 */ bl CARDOpen -/* 8001729C 7C 64 1B 79 */ or. r4, r3, r3 -/* 800172A0 40 82 00 14 */ bne lbl_800172B4 -/* 800172A4 38 61 00 08 */ addi r3, r1, 8 -/* 800172A8 48 34 0E 0D */ bl CARDClose -/* 800172AC 38 60 00 01 */ li r3, 1 -/* 800172B0 48 00 00 10 */ b lbl_800172C0 -lbl_800172B4: -/* 800172B4 7F E3 FB 78 */ mr r3, r31 -/* 800172B8 48 00 00 A9 */ bl setCardState__15mDoMemCd_Ctrl_cFl -/* 800172BC 38 60 00 00 */ li r3, 0 -lbl_800172C0: -/* 800172C0 83 E1 00 2C */ lwz r31, 0x2c(r1) -/* 800172C4 80 01 00 34 */ lwz r0, 0x34(r1) -/* 800172C8 7C 08 03 A6 */ mtlr r0 -/* 800172CC 38 21 00 30 */ addi r1, r1, 0x30 -/* 800172D0 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s b/asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s deleted file mode 100644 index d7e36606c51..00000000000 --- a/asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_8001741C: -/* 8001741C 94 21 FF 70 */ stwu r1, -0x90(r1) -/* 80017420 7C 08 02 A6 */ mflr r0 -/* 80017424 90 01 00 94 */ stw r0, 0x94(r1) -/* 80017428 48 32 98 5D */ bl OSGetCurrentThread -/* 8001742C 7C 64 1B 78 */ mr r4, r3 -/* 80017430 38 61 00 08 */ addi r3, r1, 8 -/* 80017434 38 A0 00 00 */ li r5, 0 -/* 80017438 48 2B A2 81 */ bl __ct__9JKRThreadFP8OSThreadi -/* 8001743C 38 61 00 08 */ addi r3, r1, 8 -/* 80017440 38 80 FF FF */ li r4, -1 -/* 80017444 48 2B A3 15 */ bl __dt__9JKRThreadFv -/* 80017448 4B FF 78 9D */ bl mDoExt_getAssertHeap__Fv -/* 8001744C 48 2B 6F ED */ bl becomeCurrentHeap__7JKRHeapFv -/* 80017450 3C 60 80 3F */ lis r3, g_mDoMemCd_control@ha /* 0x803EAF40@ha */ -/* 80017454 38 63 AF 40 */ addi r3, r3, g_mDoMemCd_control@l /* 0x803EAF40@l */ -/* 80017458 4B FF F3 79 */ bl main__15mDoMemCd_Ctrl_cFv -/* 8001745C 38 60 00 00 */ li r3, 0 -/* 80017460 80 01 00 94 */ lwz r0, 0x94(r1) -/* 80017464 7C 08 03 A6 */ mtlr r0 -/* 80017468 38 21 00 90 */ addi r1, r1, 0x90 -/* 8001746C 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index ce5a4fe75b6..00000000000 --- a/asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,60 +0,0 @@ -lbl_800167D0: -/* 800167D0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800167D4 7C 08 02 A6 */ mflr r0 -/* 800167D8 90 01 00 14 */ stw r0, 0x14(r1) -/* 800167DC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800167E0 7C 7F 1B 78 */ mr r31, r3 -lbl_800167E4: -/* 800167E4 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800167E8 48 32 88 59 */ bl OSLockMutex -/* 800167EC 48 00 00 10 */ b lbl_800167FC -lbl_800167F0: -/* 800167F0 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 800167F4 38 9F 1F CC */ addi r4, r31, 0x1fcc -/* 800167F8 48 32 8B 39 */ bl OSWaitCond -lbl_800167FC: -/* 800167FC 80 1F 1F C0 */ lwz r0, 0x1fc0(r31) -/* 80016800 2C 00 00 00 */ cmpwi r0, 0 -/* 80016804 41 82 FF EC */ beq lbl_800167F0 -/* 80016808 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001680C 48 32 89 11 */ bl OSUnlockMutex -/* 80016810 80 1F 1F C0 */ lwz r0, 0x1fc0(r31) -/* 80016814 2C 00 00 03 */ cmpwi r0, 3 -/* 80016818 41 82 00 40 */ beq lbl_80016858 -/* 8001681C 40 80 00 14 */ bge lbl_80016830 -/* 80016820 2C 00 00 01 */ cmpwi r0, 1 -/* 80016824 41 82 00 1C */ beq lbl_80016840 -/* 80016828 40 80 00 24 */ bge lbl_8001684C -/* 8001682C 48 00 00 4C */ b lbl_80016878 -lbl_80016830: -/* 80016830 2C 00 00 05 */ cmpwi r0, 5 -/* 80016834 41 82 00 3C */ beq lbl_80016870 -/* 80016838 40 80 00 40 */ bge lbl_80016878 -/* 8001683C 48 00 00 28 */ b lbl_80016864 -lbl_80016840: -/* 80016840 7F E3 FB 78 */ mr r3, r31 -/* 80016844 48 00 01 C9 */ bl restore__15mDoMemCd_Ctrl_cFv -/* 80016848 48 00 00 30 */ b lbl_80016878 -lbl_8001684C: -/* 8001684C 7F E3 FB 78 */ mr r3, r31 -/* 80016850 48 00 03 85 */ bl store__15mDoMemCd_Ctrl_cFv -/* 80016854 48 00 00 24 */ b lbl_80016878 -lbl_80016858: -/* 80016858 7F E3 FB 78 */ mr r3, r31 -/* 8001685C 48 00 06 4D */ bl format__15mDoMemCd_Ctrl_cFv -/* 80016860 48 00 00 18 */ b lbl_80016878 -lbl_80016864: -/* 80016864 7F E3 FB 78 */ mr r3, r31 -/* 80016868 48 00 07 51 */ bl attach__15mDoMemCd_Ctrl_cFv -/* 8001686C 48 00 00 0C */ b lbl_80016878 -lbl_80016870: -/* 80016870 7F E3 FB 78 */ mr r3, r31 -/* 80016874 48 00 08 9D */ bl detach__15mDoMemCd_Ctrl_cFv -lbl_80016878: -/* 80016878 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001687C 48 32 87 C5 */ bl OSLockMutex -/* 80016880 38 00 00 00 */ li r0, 0 -/* 80016884 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 80016888 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001688C 48 32 88 91 */ bl OSUnlockMutex -/* 80016890 4B FF FF 54 */ b lbl_800167E4 diff --git a/asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 2615719c8b3..00000000000 --- a/asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,46 +0,0 @@ -lbl_80016A0C: -/* 80016A0C 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80016A10 7C 08 02 A6 */ mflr r0 -/* 80016A14 90 01 00 34 */ stw r0, 0x34(r1) -/* 80016A18 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 80016A1C 93 C1 00 28 */ stw r30, 0x28(r1) -/* 80016A20 7C 7E 1B 78 */ mr r30, r3 -/* 80016A24 38 00 00 00 */ li r0, 0 -/* 80016A28 90 03 1F C8 */ stw r0, 0x1fc8(r3) -/* 80016A2C 88 63 1F BC */ lbz r3, 0x1fbc(r3) -/* 80016A30 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCard__stringBase0@ha /* 0x803743F8@ha */ -/* 80016A34 38 84 43 F8 */ addi r4, r4, m_Do_m_Do_MemCard__stringBase0@l /* 0x803743F8@l */ -/* 80016A38 38 A1 00 08 */ addi r5, r1, 8 -/* 80016A3C 48 34 15 5D */ bl CARDOpen -/* 80016A40 7C 7F 1B 79 */ or. r31, r3, r3 -/* 80016A44 40 82 00 40 */ bne lbl_80016A84 -/* 80016A48 38 61 00 08 */ addi r3, r1, 8 -/* 80016A4C 7F C4 F3 78 */ mr r4, r30 -/* 80016A50 38 A0 1F BC */ li r5, 0x1fbc -/* 80016A54 48 00 0C 49 */ bl mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl -/* 80016A58 2C 03 00 00 */ cmpwi r3, 0 -/* 80016A5C 40 82 00 10 */ bne lbl_80016A6C -/* 80016A60 38 00 00 03 */ li r0, 3 -/* 80016A64 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016A68 48 00 00 10 */ b lbl_80016A78 -lbl_80016A6C: -/* 80016A6C 7F C3 F3 78 */ mr r3, r30 -/* 80016A70 7F E4 FB 78 */ mr r4, r31 -/* 80016A74 48 00 08 ED */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016A78: -/* 80016A78 38 61 00 08 */ addi r3, r1, 8 -/* 80016A7C 48 34 16 39 */ bl CARDClose -/* 80016A80 48 00 00 10 */ b lbl_80016A90 -lbl_80016A84: -/* 80016A84 7F C3 F3 78 */ mr r3, r30 -/* 80016A88 7F E4 FB 78 */ mr r4, r31 -/* 80016A8C 48 00 08 D5 */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016A90: -/* 80016A90 38 00 00 01 */ li r0, 1 -/* 80016A94 90 1E 1F C8 */ stw r0, 0x1fc8(r30) -/* 80016A98 83 E1 00 2C */ lwz r31, 0x2c(r1) -/* 80016A9C 83 C1 00 28 */ lwz r30, 0x28(r1) -/* 80016AA0 80 01 00 34 */ lwz r0, 0x34(r1) -/* 80016AA4 7C 08 03 A6 */ mtlr r0 -/* 80016AA8 38 21 00 30 */ addi r1, r1, 0x30 -/* 80016AAC 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s b/asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s deleted file mode 100644 index c33d12c6548..00000000000 --- a/asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s +++ /dev/null @@ -1,33 +0,0 @@ -lbl_80016B58: -/* 80016B58 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80016B5C 7C 08 02 A6 */ mflr r0 -/* 80016B60 90 01 00 24 */ stw r0, 0x24(r1) -/* 80016B64 39 61 00 20 */ addi r11, r1, 0x20 -/* 80016B68 48 34 B6 71 */ bl _savegpr_28 -/* 80016B6C 7C 7C 1B 78 */ mr r28, r3 -/* 80016B70 7C 9D 23 78 */ mr r29, r4 -/* 80016B74 7C BE 2B 78 */ mr r30, r5 -/* 80016B78 7C DF 33 78 */ mr r31, r6 -/* 80016B7C 38 7C 1F CC */ addi r3, r28, 0x1fcc -/* 80016B80 48 32 86 D5 */ bl OSTryLockMutex -/* 80016B84 2C 03 00 00 */ cmpwi r3, 0 -/* 80016B88 41 82 00 34 */ beq lbl_80016BBC -/* 80016B8C 7C 7C FA 14 */ add r3, r28, r31 -/* 80016B90 7F A4 EB 78 */ mr r4, r29 -/* 80016B94 7F C5 F3 78 */ mr r5, r30 -/* 80016B98 4B FE C9 A9 */ bl memcpy -/* 80016B9C 38 00 00 00 */ li r0, 0 -/* 80016BA0 90 1C 1F C8 */ stw r0, 0x1fc8(r28) -/* 80016BA4 38 00 00 02 */ li r0, 2 -/* 80016BA8 90 1C 1F C0 */ stw r0, 0x1fc0(r28) -/* 80016BAC 38 7C 1F CC */ addi r3, r28, 0x1fcc -/* 80016BB0 48 32 85 6D */ bl OSUnlockMutex -/* 80016BB4 38 7C 1F E4 */ addi r3, r28, 0x1fe4 -/* 80016BB8 48 32 88 4D */ bl OSSignalCond -lbl_80016BBC: -/* 80016BBC 39 61 00 20 */ addi r11, r1, 0x20 -/* 80016BC0 48 34 B6 65 */ bl _restgpr_28 -/* 80016BC4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80016BC8 7C 08 03 A6 */ mtlr r0 -/* 80016BCC 38 21 00 20 */ addi r1, r1, 0x20 -/* 80016BD0 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 2cdb8685890..00000000000 --- a/asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,76 +0,0 @@ -lbl_80016BD4: -/* 80016BD4 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80016BD8 7C 08 02 A6 */ mflr r0 -/* 80016BDC 90 01 00 34 */ stw r0, 0x34(r1) -/* 80016BE0 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 80016BE4 93 C1 00 28 */ stw r30, 0x28(r1) -/* 80016BE8 7C 7E 1B 78 */ mr r30, r3 -/* 80016BEC 38 00 00 00 */ li r0, 0 -/* 80016BF0 90 03 1F C8 */ stw r0, 0x1fc8(r3) -/* 80016BF4 80 03 1F C4 */ lwz r0, 0x1fc4(r3) -/* 80016BF8 2C 00 00 02 */ cmpwi r0, 2 -/* 80016BFC 40 82 00 48 */ bne lbl_80016C44 -/* 80016C00 88 7E 1F BC */ lbz r3, 0x1fbc(r30) -/* 80016C04 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCard__stringBase0@ha /* 0x803743F8@ha */ -/* 80016C08 38 84 43 F8 */ addi r4, r4, m_Do_m_Do_MemCard__stringBase0@l /* 0x803743F8@l */ -/* 80016C0C 3C A0 00 01 */ lis r5, 0x0001 /* 0x00008000@ha */ -/* 80016C10 38 A5 80 00 */ addi r5, r5, 0x8000 /* 0x00008000@l */ -/* 80016C14 38 C1 00 08 */ addi r6, r1, 8 -/* 80016C18 48 34 18 41 */ bl CARDCreate -/* 80016C1C 7C 7F 1B 79 */ or. r31, r3, r3 -/* 80016C20 41 82 00 0C */ beq lbl_80016C2C -/* 80016C24 2C 1F FF F9 */ cmpwi r31, -7 -/* 80016C28 40 82 00 10 */ bne lbl_80016C38 -lbl_80016C2C: -/* 80016C2C 38 00 00 01 */ li r0, 1 -/* 80016C30 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016C34 48 00 00 10 */ b lbl_80016C44 -lbl_80016C38: -/* 80016C38 7F C3 F3 78 */ mr r3, r30 -/* 80016C3C 7F E4 FB 78 */ mr r4, r31 -/* 80016C40 48 00 07 21 */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016C44: -/* 80016C44 80 1E 1F C4 */ lwz r0, 0x1fc4(r30) -/* 80016C48 2C 00 00 01 */ cmpwi r0, 1 -/* 80016C4C 40 82 00 68 */ bne lbl_80016CB4 -/* 80016C50 88 7E 1F BC */ lbz r3, 0x1fbc(r30) -/* 80016C54 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCard__stringBase0@ha /* 0x803743F8@ha */ -/* 80016C58 38 84 43 F8 */ addi r4, r4, m_Do_m_Do_MemCard__stringBase0@l /* 0x803743F8@l */ -/* 80016C5C 38 A1 00 08 */ addi r5, r1, 8 -/* 80016C60 48 34 13 39 */ bl CARDOpen -/* 80016C64 7C 7F 1B 79 */ or. r31, r3, r3 -/* 80016C68 40 82 00 3C */ bne lbl_80016CA4 -/* 80016C6C 38 61 00 08 */ addi r3, r1, 8 -/* 80016C70 7F C4 F3 78 */ mr r4, r30 -/* 80016C74 38 A0 1F BC */ li r5, 0x1fbc -/* 80016C78 48 00 08 21 */ bl mDoMemCdRWm_Store__FP12CARDFileInfoPvUl -/* 80016C7C 7C 64 1B 79 */ or. r4, r3, r3 -/* 80016C80 41 82 00 10 */ beq lbl_80016C90 -/* 80016C84 7F C3 F3 78 */ mr r3, r30 -/* 80016C88 48 00 06 D9 */ bl setCardState__15mDoMemCd_Ctrl_cFl -/* 80016C8C 48 00 00 0C */ b lbl_80016C98 -lbl_80016C90: -/* 80016C90 38 00 00 04 */ li r0, 4 -/* 80016C94 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -lbl_80016C98: -/* 80016C98 38 61 00 08 */ addi r3, r1, 8 -/* 80016C9C 48 34 14 19 */ bl CARDClose -/* 80016CA0 48 00 00 20 */ b lbl_80016CC0 -lbl_80016CA4: -/* 80016CA4 7F C3 F3 78 */ mr r3, r30 -/* 80016CA8 7F E4 FB 78 */ mr r4, r31 -/* 80016CAC 48 00 06 B5 */ bl setCardState__15mDoMemCd_Ctrl_cFl -/* 80016CB0 48 00 00 10 */ b lbl_80016CC0 -lbl_80016CB4: -/* 80016CB4 7F C3 F3 78 */ mr r3, r30 -/* 80016CB8 7F E4 FB 78 */ mr r4, r31 -/* 80016CBC 48 00 06 A5 */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016CC0: -/* 80016CC0 38 00 00 01 */ li r0, 1 -/* 80016CC4 90 1E 1F C8 */ stw r0, 0x1fc8(r30) -/* 80016CC8 83 E1 00 2C */ lwz r31, 0x2c(r1) -/* 80016CCC 83 C1 00 28 */ lwz r30, 0x28(r1) -/* 80016CD0 80 01 00 34 */ lwz r0, 0x34(r1) -/* 80016CD4 7C 08 03 A6 */ mtlr r0 -/* 80016CD8 38 21 00 30 */ addi r1, r1, 0x30 -/* 80016CDC 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 1c82cbe017f..00000000000 --- a/asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,76 +0,0 @@ -lbl_80016894: -/* 80016894 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016898 7C 08 02 A6 */ mflr r0 -/* 8001689C 90 01 00 14 */ stw r0, 0x14(r1) -/* 800168A0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800168A4 7C 7F 1B 78 */ mr r31, r3 -/* 800168A8 80 8D 86 F8 */ lwz r4, mResetData__6mDoRst(r13) -/* 800168AC 80 04 00 00 */ lwz r0, 0(r4) -/* 800168B0 2C 00 00 00 */ cmpwi r0, 0 -/* 800168B4 41 82 00 30 */ beq lbl_800168E4 -/* 800168B8 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800168BC 48 32 87 85 */ bl OSLockMutex -/* 800168C0 38 00 00 05 */ li r0, 5 -/* 800168C4 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 800168C8 38 00 00 03 */ li r0, 3 -/* 800168CC 98 1F 1F BE */ stb r0, 0x1fbe(r31) -/* 800168D0 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800168D4 48 32 88 49 */ bl OSUnlockMutex -/* 800168D8 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 800168DC 48 32 8B 29 */ bl OSSignalCond -/* 800168E0 48 00 00 C0 */ b lbl_800169A0 -lbl_800168E4: -/* 800168E4 38 80 00 00 */ li r4, 0 -/* 800168E8 48 00 04 8D */ bl getStatus__15mDoMemCd_Ctrl_cFUl -/* 800168EC 28 03 00 0E */ cmplwi r3, 0xe -/* 800168F0 41 82 00 B0 */ beq lbl_800169A0 -/* 800168F4 38 60 00 00 */ li r3, 0 -/* 800168F8 48 34 01 1D */ bl CARDProbe -/* 800168FC 2C 03 00 00 */ cmpwi r3, 0 -/* 80016900 41 82 00 4C */ beq lbl_8001694C -/* 80016904 7F E3 FB 78 */ mr r3, r31 -/* 80016908 38 80 00 00 */ li r4, 0 -/* 8001690C 48 00 04 69 */ bl getStatus__15mDoMemCd_Ctrl_cFUl -/* 80016910 28 03 00 00 */ cmplwi r3, 0 -/* 80016914 40 82 00 38 */ bne lbl_8001694C -/* 80016918 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001691C 48 32 87 25 */ bl OSLockMutex -/* 80016920 38 00 00 00 */ li r0, 0 -/* 80016924 98 1F 1F BE */ stb r0, 0x1fbe(r31) -/* 80016928 38 00 00 0D */ li r0, 0xd -/* 8001692C 90 1F 1F C4 */ stw r0, 0x1fc4(r31) -/* 80016930 38 00 00 04 */ li r0, 4 -/* 80016934 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 80016938 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001693C 48 32 87 E1 */ bl OSUnlockMutex -/* 80016940 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 80016944 48 32 8A C1 */ bl OSSignalCond -/* 80016948 48 00 00 58 */ b lbl_800169A0 -lbl_8001694C: -/* 8001694C 38 60 00 00 */ li r3, 0 -/* 80016950 48 34 00 C5 */ bl CARDProbe -/* 80016954 2C 03 00 00 */ cmpwi r3, 0 -/* 80016958 40 82 00 48 */ bne lbl_800169A0 -/* 8001695C 7F E3 FB 78 */ mr r3, r31 -/* 80016960 38 80 00 00 */ li r4, 0 -/* 80016964 48 00 04 11 */ bl getStatus__15mDoMemCd_Ctrl_cFUl -/* 80016968 28 03 00 00 */ cmplwi r3, 0 -/* 8001696C 41 82 00 34 */ beq lbl_800169A0 -/* 80016970 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016974 48 32 86 CD */ bl OSLockMutex -/* 80016978 38 00 00 01 */ li r0, 1 -/* 8001697C 98 1F 1F BE */ stb r0, 0x1fbe(r31) -/* 80016980 38 00 00 0D */ li r0, 0xd -/* 80016984 90 1F 1F C4 */ stw r0, 0x1fc4(r31) -/* 80016988 38 00 00 05 */ li r0, 5 -/* 8001698C 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 80016990 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016994 48 32 87 89 */ bl OSUnlockMutex -/* 80016998 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 8001699C 48 32 8A 69 */ bl OSSignalCond -lbl_800169A0: -/* 800169A0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800169A4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800169A8 7C 08 03 A6 */ mtlr r0 -/* 800169AC 38 21 00 10 */ addi r1, r1, 0x10 -/* 800169B0 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s b/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s deleted file mode 100644 index 51fd86f348e..00000000000 --- a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s +++ /dev/null @@ -1,91 +0,0 @@ -lbl_8001787C: -/* 8001787C 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 80017880 7C 08 02 A6 */ mflr r0 -/* 80017884 90 01 00 44 */ stw r0, 0x44(r1) -/* 80017888 39 61 00 40 */ addi r11, r1, 0x40 -/* 8001788C 48 34 A9 4D */ bl _savegpr_28 -/* 80017890 7C 7F 1B 78 */ mr r31, r3 -/* 80017894 38 7F 24 00 */ addi r3, r31, 0x2400 -/* 80017898 38 80 00 20 */ li r4, 0x20 -/* 8001789C 3C A0 80 37 */ lis r5, m_Do_m_Do_MemCardRWmng__stringBase0@ha /* 0x80374408@ha */ -/* 800178A0 38 A5 44 08 */ addi r5, r5, m_Do_m_Do_MemCardRWmng__stringBase0@l /* 0x80374408@l */ -/* 800178A4 4C C6 31 82 */ crclr 6 -/* 800178A8 48 34 ED 15 */ bl snprintf -/* 800178AC 48 32 AE 51 */ bl OSGetTime -/* 800178B0 38 A1 00 08 */ addi r5, r1, 8 -/* 800178B4 48 32 B0 C1 */ bl OSTicksToCalendarTime -/* 800178B8 38 7F 24 20 */ addi r3, r31, 0x2420 -/* 800178BC 38 80 00 20 */ li r4, 0x20 -/* 800178C0 3C A0 80 37 */ lis r5, m_Do_m_Do_MemCardRWmng__stringBase0@ha /* 0x80374408@ha */ -/* 800178C4 38 A5 44 08 */ addi r5, r5, m_Do_m_Do_MemCardRWmng__stringBase0@l /* 0x80374408@l */ -/* 800178C8 38 A5 00 19 */ addi r5, r5, 0x19 -/* 800178CC 80 C1 00 18 */ lwz r6, 0x18(r1) -/* 800178D0 38 C6 00 01 */ addi r6, r6, 1 -/* 800178D4 80 E1 00 14 */ lwz r7, 0x14(r1) -/* 800178D8 4C C6 31 82 */ crclr 6 -/* 800178DC 48 34 EC E1 */ bl snprintf -/* 800178E0 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 800178E4 3B 83 61 C0 */ addi r28, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 800178E8 80 7C 5C F0 */ lwz r3, 0x5cf0(r28) -/* 800178EC 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCardRWmng__stringBase0@ha /* 0x80374408@ha */ -/* 800178F0 38 84 44 08 */ addi r4, r4, m_Do_m_Do_MemCardRWmng__stringBase0@l /* 0x80374408@l */ -/* 800178F4 38 84 00 29 */ addi r4, r4, 0x29 -/* 800178F8 81 83 00 00 */ lwz r12, 0(r3) -/* 800178FC 81 8C 00 14 */ lwz r12, 0x14(r12) -/* 80017900 7D 89 03 A6 */ mtctr r12 -/* 80017904 4E 80 04 21 */ bctrl -/* 80017908 7C 7D 1B 78 */ mr r29, r3 -/* 8001790C 80 7C 5C F0 */ lwz r3, 0x5cf0(r28) -/* 80017910 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCardRWmng__stringBase0@ha /* 0x80374408@ha */ -/* 80017914 38 84 44 08 */ addi r4, r4, m_Do_m_Do_MemCardRWmng__stringBase0@l /* 0x80374408@l */ -/* 80017918 38 84 00 3E */ addi r4, r4, 0x3e -/* 8001791C 81 83 00 00 */ lwz r12, 0(r3) -/* 80017920 81 8C 00 14 */ lwz r12, 0x14(r12) -/* 80017924 7D 89 03 A6 */ mtctr r12 -/* 80017928 4E 80 04 21 */ bctrl -/* 8001792C 7C 7E 1B 78 */ mr r30, r3 -/* 80017930 7F E3 FB 78 */ mr r3, r31 -/* 80017934 80 1D 00 1C */ lwz r0, 0x1c(r29) -/* 80017938 7C 9D 02 14 */ add r4, r29, r0 -/* 8001793C A0 1D 00 0A */ lhz r0, 0xa(r29) -/* 80017940 54 05 08 3C */ slwi r5, r0, 1 -/* 80017944 38 A5 0C 00 */ addi r5, r5, 0xc00 -/* 80017948 4B FE BB F9 */ bl memcpy -/* 8001794C 38 7F 0E 00 */ addi r3, r31, 0xe00 -/* 80017950 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 80017954 7C 9E 02 14 */ add r4, r30, r0 -/* 80017958 38 A0 04 00 */ li r5, 0x400 -/* 8001795C 4B FE BB E5 */ bl memcpy -/* 80017960 38 7F 12 00 */ addi r3, r31, 0x1200 -/* 80017964 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 80017968 7C 9E 02 14 */ add r4, r30, r0 -/* 8001796C 38 A0 04 00 */ li r5, 0x400 -/* 80017970 4B FE BB D1 */ bl memcpy -/* 80017974 38 7F 16 00 */ addi r3, r31, 0x1600 -/* 80017978 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 8001797C 7C 9E 02 14 */ add r4, r30, r0 -/* 80017980 38 A0 04 00 */ li r5, 0x400 -/* 80017984 4B FE BB BD */ bl memcpy -/* 80017988 38 7F 1A 00 */ addi r3, r31, 0x1a00 -/* 8001798C 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 80017990 7C 9E 02 14 */ add r4, r30, r0 -/* 80017994 38 A0 04 00 */ li r5, 0x400 -/* 80017998 4B FE BB A9 */ bl memcpy -/* 8001799C 38 7F 1E 00 */ addi r3, r31, 0x1e00 -/* 800179A0 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 800179A4 7C 9E 02 14 */ add r4, r30, r0 -/* 800179A8 A0 1E 00 0A */ lhz r0, 0xa(r30) -/* 800179AC 54 05 08 3C */ slwi r5, r0, 1 -/* 800179B0 38 A5 04 00 */ addi r5, r5, 0x400 -/* 800179B4 4B FE BB 8D */ bl memcpy -/* 800179B8 80 7C 5C F0 */ lwz r3, 0x5cf0(r28) -/* 800179BC 81 83 00 00 */ lwz r12, 0(r3) -/* 800179C0 81 8C 00 24 */ lwz r12, 0x24(r12) -/* 800179C4 7D 89 03 A6 */ mtctr r12 -/* 800179C8 4E 80 04 21 */ bctrl -/* 800179CC 39 61 00 40 */ addi r11, r1, 0x40 -/* 800179D0 48 34 A8 55 */ bl _restgpr_28 -/* 800179D4 80 01 00 44 */ lwz r0, 0x44(r1) -/* 800179D8 7C 08 03 A6 */ mtlr r0 -/* 800179DC 38 21 00 40 */ addi r1, r1, 0x40 -/* 800179E0 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s b/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s deleted file mode 100644 index b5a13597cda..00000000000 --- a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_80017D38: -/* 80017D38 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80017D3C 7C 08 02 A6 */ mflr r0 -/* 80017D40 90 01 00 14 */ stw r0, 0x14(r1) -/* 80017D44 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80017D48 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 80017D4C 1C 00 0A 94 */ mulli r0, r0, 0xa94 -/* 80017D50 7F E3 02 14 */ add r31, r3, r0 -/* 80017D54 7F E3 FB 78 */ mr r3, r31 -/* 80017D58 38 80 0A 8C */ li r4, 0xa8c -/* 80017D5C 4B FF FF 59 */ bl mDoMemCdRWm_CalcCheckSumGameData__FPvUl -/* 80017D60 90 9F 0A 90 */ stw r4, 0xa90(r31) -/* 80017D64 90 7F 0A 8C */ stw r3, 0xa8c(r31) -/* 80017D68 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80017D6C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80017D70 7C 08 03 A6 */ mtlr r0 -/* 80017D74 38 21 00 10 */ addi r1, r1, 0x10 -/* 80017D78 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s b/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s deleted file mode 100644 index f5cd97de9d6..00000000000 --- a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s +++ /dev/null @@ -1,20 +0,0 @@ -lbl_80017CEC: -/* 80017CEC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80017CF0 7C 08 02 A6 */ mflr r0 -/* 80017CF4 90 01 00 14 */ stw r0, 0x14(r1) -/* 80017CF8 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80017CFC 7C 7F 1B 78 */ mr r31, r3 -/* 80017D00 38 80 0A 8C */ li r4, 0xa8c -/* 80017D04 4B FF FF B1 */ bl mDoMemCdRWm_CalcCheckSumGameData__FPvUl -/* 80017D08 80 1F 0A 8C */ lwz r0, 0xa8c(r31) -/* 80017D0C 80 BF 0A 90 */ lwz r5, 0xa90(r31) -/* 80017D10 7C 84 2A 78 */ xor r4, r4, r5 -/* 80017D14 7C 60 02 78 */ xor r0, r3, r0 -/* 80017D18 7C 80 03 78 */ or r0, r4, r0 -/* 80017D1C 7C 00 00 34 */ cntlzw r0, r0 -/* 80017D20 54 03 DE 3E */ rlwinm r3, r0, 0x1b, 0x18, 0x1f -/* 80017D24 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80017D28 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80017D2C 7C 08 03 A6 */ mtlr r0 -/* 80017D30 38 21 00 10 */ addi r1, r1, 0x10 -/* 80017D34 4E 80 00 20 */ blr diff --git a/include/JSystem/JUtility/JUTTexture.h b/include/JSystem/JUtility/JUTTexture.h index 901503df7e2..d2832d81d72 100644 --- a/include/JSystem/JUtility/JUTTexture.h +++ b/include/JSystem/JUtility/JUTTexture.h @@ -28,8 +28,8 @@ struct ResTIMG { /* Acts as the header to image data. Usually texture data immed /* 0x18 */ u8 mipmapCount; /* 0x19 */ u8 unknown; /* 0x1A */ s16 LODBias; - /* 0x1B */ u32 texDataOffset; -}; // Size: 0x1C + /* 0x1C */ u32 texDataOffset; +}; // Size: 0x20 class JUTTexture { public: diff --git a/include/dolphin/card/card.h b/include/dolphin/card/card.h new file mode 100644 index 00000000000..04fa0f03eb2 --- /dev/null +++ b/include/dolphin/card/card.h @@ -0,0 +1,74 @@ +#ifndef CARD_H +#define CARD_H + +#include "dolphin/types.h" + +#define CARD_ERROR_UNLOCKED 1 +#define CARD_ERROR_READY 0 +#define CARD_ERROR_BUSY -1 +#define CARD_ERROR_WRONGDEVICE -2 +#define CARD_ERROR_NOCARD -3 +#define CARD_ERROR_NOFILE -4 +#define CARD_ERROR_IOERROR -5 +#define CARD_ERROR_BROKEN -6 +#define CARD_ERROR_EXIST -7 +#define CARD_ERROR_NOENT -8 +#define CARD_ERROR_INSSPACE -9 +#define CARD_ERROR_NOPERM -10 +#define CARD_ERROR_LIMIT -11 +#define CARD_ERROR_NAMETOOLONG -12 +#define CARD_ERROR_ENCODING -13 +#define CARD_ERROR_CANCELED -14 +#define CARD_ERROR_FATAL_ERROR -128 + +struct CARDFileInfo { + /* 0x00 */ s32 channel; + /* 0x04 */ s32 fileNo; + /* 0x08 */ u32 offset; + /* 0x0C */ u16 iconIndex; + /* 0x0E */ u16 commentIndex; + /* 0x10 */ u16 field_0x10; +}; // Size: 0x10 + +struct CARDStat { + /* 0x00 */ char filename[32]; + /* 0x20 */ u32 length; + /* 0x24 */ u32 time; + /* 0x28 */ char gamecode[4]; + /* 0x2C */ char company[2]; + /* 0x2E */ u8 gameVersion; + /* 0x2F */ u8 bannerFormat; + /* 0x30 */ u32 iconAddress; + /* 0x34 */ u16 iconFormat; + /* 0x36 */ u16 iconSpeed; + /* 0x38 */ u32 commentAddress; + /* 0x3C */ u32 bannerOffset; + /* 0x40 */ u32 bannerPalOffset; + /* 0x44 */ u32 iconOffset[8]; + /* 0x64 */ u32 iconPalOffset; + /* 0x68 */ u32 dataOffset; +}; // Size: 0x6C + +typedef void (*CARDCallback)(s32 channel, s32 result); + +extern "C" { +s32 CARDInit(void); +s32 CARDFreeBlocks(s32 channel, s32* free_bytes, s32* free_files); +s32 CARDCheck(s32 channel); +s32 CARDProbe(s32 channel); +s32 CARDProbeEx(s32 channel, s32* mem_size, s32* sect_size); +s32 CARDMount(s32 channel, void* buffer, CARDCallback callback); +s32 CARDUnmount(s32 channel); +s32 CARDFormat(s32 channel); +s32 CARDOpen(s32 channel, const char* filename, CARDFileInfo* file); +s32 CARDClose(CARDFileInfo* file); +s32 CARDCreate(s32 channel, const char* filename, u32 size, CARDFileInfo* file); +s32 CARDRead(CARDFileInfo* file, void* buffer, u32 size, u32 offset); +s32 CARDWrite(CARDFileInfo* file, void* buffer, u32 size, u32 offset); +s32 CARDGetStatus(s32 channel, s32 fileNo, CARDStat* stat); +s32 CARDSetStatus(s32 channel, s32 fileNo, CARDStat* stat); +s32 CARDGetSerialNo(s32 channel, u32* serial1, u32* serial2); +}; + + +#endif /* CARD_H */ diff --git a/include/dolphin/mtx/mtx.h b/include/dolphin/mtx/mtx.h index 721d861cb3e..0cf5da75ff7 100644 --- a/include/dolphin/mtx/mtx.h +++ b/include/dolphin/mtx/mtx.h @@ -1,38 +1,43 @@ #ifndef MTX_H #define MTX_H +#include "dolphin/mtx/mtx44.h" #include "dolphin/mtx/quat.h" #include "dolphin/mtx/vec.h" #include "dolphin/types.h" -typedef float Mtx[3][4]; -typedef float Mtx33[3][3]; -typedef float Mtx23[2][3]; +typedef f32 Mtx[3][4]; +typedef f32 Mtx33[3][3]; +typedef f32 Mtx23[2][3]; typedef f32 (*MtxP)[4]; typedef const f32 (*CMtxP)[4]; // Change name later? extern "C" { -void PSMTXIdentity(Mtx matrix); +void PSMTXIdentity(Mtx m); void PSMTXCopy(const Mtx src, Mtx dst); -void PSMTXConcat(const Mtx src_a, const Mtx src_b, Mtx dst); -u32 PSMTXInverse(const Mtx src, Mtx dst); -void PSMTXRotRad(Mtx matrix, u8 axis, float rad); -void PSMTXRotTrig(Mtx matrix, u8 axis, float sin, float cos); -double __PSMTXRotAxisRadInternal(double param_1, double param_2, int param_3, int param_4); -void PSMTXRotAxisRad(Mtx matrix, const Vec* axis, float rad); -void PSMTXTrans(Mtx matrix, float x_trans, float y_trans, float z_trans); -void PSMTXTransApply(const Mtx src, Mtx dst, float x, float y, float z); -void PSMTXScale(Mtx matrix, float x_scale, float y_scale, float z_scale); -void PSMTXScaleApply(const Mtx src, Mtx dst, float x_scale, float y_scale, float z_scale); -void PSMTXQuat(Mtx matrix, const Quaternion* quat); -void PSMTXMultVec(const Mtx matrix, const Vec* src, Vec* dst); -void PSMTXMultVecSR(const Mtx matrix, const Vec* src, Vec* dst); +void PSMTXConcat(const Mtx a, const Mtx b, Mtx ab); +u32 PSMTXInverse(const Mtx src, Mtx inv); +void PSMTXRotRad(Mtx m, u8 axis, f32 rad); +void PSMTXRotTrig(Mtx m, u8 axis, f32 sin, f32 cos); +f64 __PSMTXRotAxisRadInternal(f64 param_1, f64 param_2, int param_3, int param_4); +void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad); +void PSMTXTrans(Mtx m, f32 x_trans, f32 y_trans, f32 z_trans); +void PSMTXTransApply(const Mtx src, Mtx dst, f32 x, f32 y, f32 z); +void PSMTXScale(Mtx m, f32 x_scale, f32 y_scale, f32 z_scale); +void PSMTXScaleApply(const Mtx src, Mtx dst, f32 x_scale, f32 y_scale, f32 z_scale); +void PSMTXQuat(Mtx m, const Quaternion* q); +void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVecSR(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); +void PSMTXMultVecSR(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); -void C_MTXLookAt(Mtx param_1, const Vec* param_2, const Vec* param_3, const Vec* param_4); -void C_MTXLightPerspective(Mtx matrix, float fov_y, float aspect, float scale_s, float scale_t, - float trans_s, float trans_t); -void C_MTXLightOrtho(Mtx matrix, float top, float bottom, float left, float right, float scale_s, - float scale_t, float trans_s, float trans_t); +void C_MTXLookAt(Mtx m, const Vec* camPos, const Vec* camUp, const Vec* target); +void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scale_s, f32 scale_t, f32 trans_s, + f32 trans_t); +void C_MTXLightOrtho(Mtx m, f32 top, f32 bottom, f32 left, f32 right, f32 scale_s, f32 scale_t, + f32 trans_s, f32 trans_t); } #endif /* MTX_H */ diff --git a/include/dolphin/mtx/mtx44.h b/include/dolphin/mtx/mtx44.h index 12fd1b93390..69e2cc84f78 100644 --- a/include/dolphin/mtx/mtx44.h +++ b/include/dolphin/mtx/mtx44.h @@ -6,10 +6,8 @@ typedef float Mtx44[4][4]; extern "C" { - -void C_MTXPerspective(Mtx44 matrix, float fov_y, float aspect, float near, float far); -void C_MTXOrtho(Mtx44 matrix, float top, float bottom, float left, float right, float near, - float far); +void C_MTXPerspective(Mtx44 m, f32 fovy, f32 aspect, f32 near, f32 far); +void C_MTXOrtho(Mtx44 m, f32 top, f32 bottom, f32 left, f32 right, f32 near, f32 far); } #endif /* MTX44_H */ diff --git a/include/dolphin/mtx/quat.h b/include/dolphin/mtx/quat.h index 7cb4f0abe32..832c04eef11 100644 --- a/include/dolphin/mtx/quat.h +++ b/include/dolphin/mtx/quat.h @@ -5,13 +5,13 @@ #include "dolphin/types.h" struct Quaternion { - float x, y, z, w; + f32 x, y, z, w; }; extern "C" { void PSQUATMultiply(const Quaternion* src_a, const Quaternion* src_b, Quaternion* dst); -void C_QUATRotAxisRad(Quaternion* quat, const Vec* axis, float rad); -void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, float t); +void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad); +void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t); } #endif /* QUAT_H */ diff --git a/include/dolphin/mtx/vec.h b/include/dolphin/mtx/vec.h index a1accce9bcd..2b8091fb5a5 100644 --- a/include/dolphin/mtx/vec.h +++ b/include/dolphin/mtx/vec.h @@ -4,13 +4,13 @@ #include "dolphin/types.h" struct Vec { - float x, y, z; - float GetX() const { return x; } - float GetY() const { return y; } - float GetZ() const { return z; } - float getXDiff(const Vec* other) const { return x - other->x; } - float getYDiff(const Vec* other) const { return y - other->y; } - float getZDiff(const Vec* other) const { return z - other->z; } + f32 x, y, z; + f32 GetX() const { return x; } + f32 GetY() const { return y; } + f32 GetZ() const { return z; } + f32 getXDiff(const Vec* other) const { return x - other->x; } + f32 getYDiff(const Vec* other) const { return y - other->y; } + f32 getZDiff(const Vec* other) const { return z - other->z; } void set(f32 pX, f32 pY, f32 pZ) { x = pX; y = pY; @@ -23,6 +23,10 @@ struct Vec { } }; +typedef Vec* VecPtr; +typedef Vec Point3d; +typedef Vec* Point3dPtr; + struct SVec { s16 x, y, z; @@ -34,18 +38,19 @@ struct SVec { }; extern "C" { -void PSVECAdd(const Vec* src_a, const Vec* src_b, Vec* dst); -void PSVECSubtract(const Vec* a, const Vec* b, Vec* dst); -void PSVECScale(const Vec* src, Vec* dst, float scale); -void PSVECNormalize(const Vec* src, Vec* dst); -float PSVECSquareMag(const Vec* vec); -float PSVECMag(const Vec* data); -float PSVECDotProduct(const Vec* a, const Vec* b); -void PSVECCrossProduct(const Vec* src_a, const Vec* src_b, Vec* dst); -void C_VECHalfAngle(const Vec* incident, const Vec* line_of_sight, Vec* out_half); -void C_VECReflect(const Vec* src, const Vec* surface_normal, Vec* dst); -float PSVECSquareDistance(const Vec* a, const Vec* b); -float PSVECDistance(const Vec* a, const Vec* b); +void PSVECAdd(const Vec* a, const Vec* b, Vec* ab); +void PSVECSubtract(const Vec* a, const Vec* b, Vec* a_b); +void PSVECScale(const Vec* src, Vec* dst, f32 scale); +void PSVECNormalize(const Vec* src, Vec* unit); +f32 PSVECSquareMag(const Vec* v); +f32 PSVECMag(const Vec* v); +f32 PSVECDotProduct(const Vec* a, const Vec* b); +void PSVECCrossProduct(const Vec* a, const Vec* b, Vec* axb); +f32 PSVECSquareDistance(const Vec* a, const Vec* b); +f32 PSVECDistance(const Vec* a, const Vec* b); + +void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half); +void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst); } #endif /* VEC_H */ diff --git a/include/dolphin/os/OS.h b/include/dolphin/os/OS.h index eab991f6250..51aff6b9cf4 100644 --- a/include/dolphin/os/OS.h +++ b/include/dolphin/os/OS.h @@ -137,7 +137,7 @@ struct OSAlarmLink { /* 0x4 */ OSAlarm* next; }; -typedef void (*OSAlarmHandler)(OSAlarm*, OSContext*); +typedef void (*OSAlarmHandler)(OSAlarm* alarm, OSContext* context); struct OSAlarm { /* 0x00 */ OSAlarmHandler handler; @@ -157,13 +157,13 @@ OSThread* OSGetCurrentThread(void); s32 OSSuspendThread(OSThread* thread); s32 OSSetThreadPriority(OSThread* thread, u32 pri); s32 OSGetThreadPriority(OSThread* thread); -s32 OSCreateThread(OSThread* thread, void* func, void* param, void* stack, u32 stackSize, - int param_6, int param_7); +BOOL OSCreateThread(OSThread* thread, void* func, void* param, void* stack, u32 stackSize, + int priority, int attr); void OSCancelThread(OSThread* thread); void OSDetachThread(OSThread* thread); s32 OSResumeThread(OSThread* thread); void OSExitThread(void* exit_val); -bool OSIsThreadSuspended(OSThread* thread); +BOOL OSIsThreadSuspended(OSThread* thread); BOOL OSIsThreadTerminated(OSThread* thread); OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback callback); @@ -197,21 +197,19 @@ OSTick OSGetTick(void); u32 OSGetArenaLo(); u32 OSGetArenaHi(); -u32 OSInitAlloc(u32 low, u32 high, int param_3); -void OSSetArenaLo(u32 param_1); -void OSSetArenaHi(u32 param_1); +u32 OSInitAlloc(u32 low, u32 high, int maxHeaps); +void OSSetArenaLo(u32 newLo); +void OSSetArenaHi(u32 newHi); void* OSAllocFromArenaLo(u32 size, int alignment); -// void OSCancelAlarm(OSAlarm *alarm); - void OSInitMutex(OSMutex* mutex); void OSLockMutex(OSMutex* mutex); -void OSTryLockMutex(OSMutex* mutex); +BOOL OSTryLockMutex(OSMutex* mutex); void OSUnlockMutex(OSMutex* mutex); -s32 OSDisableInterrupts(); -s32 OSEnableInterrupts(); -s32 OSRestoreInterrupts(s32 level); +BOOL OSDisableInterrupts(); +BOOL OSEnableInterrupts(); +BOOL OSRestoreInterrupts(s32 level); void OSResetSystem(s32 param_1, u32 param_2, s32 param_3); @@ -223,9 +221,13 @@ void OSReportInit__Fv(void); // needed for inline asm u8* OSGetStackPointer(void); -void OSCreateAlarm(OSAlarm*); -void OSCancelAlarm(OSAlarm*); -void OSSetAlarm(OSAlarm*, OSTime, OSAlarmHandler); +void OSCreateAlarm(OSAlarm* alarm); +void OSCancelAlarm(OSAlarm* alarm); +void OSSetAlarm(OSAlarm* alarm, OSTime time, OSAlarmHandler handler); + +void OSInitCond(OSCond* cond); +void OSWaitCond(OSCond* cond, OSMutex* mutex); +void OSSignalCond(OSCond* cond); inline s16 __OSf32tos16(register f32 inF) { register s16 out; diff --git a/include/m_Do/m_Do_MemCard.h b/include/m_Do/m_Do_MemCard.h index e432e003025..b91cb63326e 100644 --- a/include/m_Do/m_Do_MemCard.h +++ b/include/m_Do/m_Do_MemCard.h @@ -4,47 +4,59 @@ #include "dolphin/os/OS.h" #include "dolphin/types.h" #include "global.h" +#include "m_Do/m_Do_MemCardRWmng.h" class mDoMemCd_Ctrl_c { public: + enum CardCommand { + CARD_NO_COMMAND, + CARD_RESTORE, + CARD_STORE, + CARD_FORMAT, + CARD_ATTACH, + CARD_DETACH, + }; + /* 8001672C */ mDoMemCd_Ctrl_c(); /* 80016730 */ void ThdInit(); /* 800167D0 */ void main(); /* 80016894 */ void update(); /* 800169B4 */ void load(); /* 80016A0C */ void restore(); - /* 80016AB0 */ void LoadSync(void*, u32, u32); + /* 80016AB0 */ s32 LoadSync(void*, u32, u32); /* 80016B58 */ void save(void*, u32, u32); /* 80016BD4 */ void store(); - /* 80016CE0 */ void SaveSync(); - /* 80016D74 */ void getStatus(u32); + /* 80016CE0 */ s32 SaveSync(); + /* 80016D74 */ u32 getStatus(u32); /* 80016E58 */ void command_format(); /* 80016EA8 */ void format(); - /* 80016F2C */ void FormatSync(); + /* 80016F2C */ s32 FormatSync(); /* 80016FB8 */ void attach(); /* 800170B8 */ void command_attach(); /* 80017110 */ void detach(); - /* 80017148 */ void mount(); - /* 80017274 */ void loadfile(); - /* 800172D4 */ void checkspace(); + /* 80017148 */ s32 mount(); + /* 80017274 */ s32 loadfile(); + /* 800172D4 */ s32 checkspace(); /* 80017360 */ void setCardState(s32); - /* 0x0000 */ u8 field_0x0[0x1FBC]; - /* 0x1FBC */ u8 field_0x1fbc; + /* 0x0000 */ u8 mData[0x1FBC]; + /* 0x1FBC */ u8 mChannel; /* 0x1FBD */ u8 mCopyToPos; /* 0x1FBE */ u8 mProbeStat; - /* 0x1FC0 */ u32 field_0x1fc0; - /* 0x1FC4 */ u32 field_0x1fc4; - /* 0x1FC8 */ u32 field_0x1fc8; - /* 0x1FCC */ OSMutex field_0x1fcc; - /* 0x1FE4 */ OSCond field_0x1fe4; + /* 0x1FC0 */ s32 mCardCommand; + /* 0x1FC4 */ s32 mCardState; + /* 0x1FC8 */ s32 field_0x1fc8; + /* 0x1FCC */ OSMutex mMutex; + /* 0x1FE4 */ OSCond mCond; /* 0x1FEC */ u32 mNandState; - /* 0x1FF0 */ u64 field_0x1ff0; + /* 0x1FF0 */ u64 mSerialNo; /* 0x1FF8 */ u32 mDataVersion; }; // Size: 0x2000 STATIC_ASSERT(sizeof(mDoMemCd_Ctrl_c) == 8192); +static int mDoMemCd_main(void*); + extern mDoMemCd_Ctrl_c g_mDoMemCd_control; #endif /* M_DO_M_DO_MEMCARD_H */ diff --git a/include/m_Do/m_Do_MemCardRWmng.h b/include/m_Do/m_Do_MemCardRWmng.h index eb8b1082669..935ef9dd4ac 100644 --- a/include/m_Do/m_Do_MemCardRWmng.h +++ b/include/m_Do/m_Do_MemCardRWmng.h @@ -1,6 +1,30 @@ #ifndef M_DO_M_DO_MEMCARDRWMNG_H #define M_DO_M_DO_MEMCARDRWMNG_H +#include "dolphin/card/card.h" #include "dolphin/types.h" +struct mDoMemCdRWm_HeaderData { + /* 0x0000 */ u8 mBannerTexData[0xC00]; + /* 0x0C00 */ u8 mBannerPalData[0x200]; + /* 0x0E00 */ u8 mIconTexData0[0x400]; + /* 0x1200 */ u8 mIconTexData1[0x400]; + /* 0x1600 */ u8 mIconTexData2[0x400]; + /* 0x1A00 */ u8 mIconTexData3[0x400]; + /* 0x1E00 */ u8 mIconTexData4[0x400]; + /* 0x2200 */ u8 mIconPalData[0x200]; + /* 0x2400 */ char mTitle[0x20]; + /* 0x2420 */ char mComment[0x20]; +}; + +s32 mDoMemCdRWm_Restore(CARDFileInfo* param_0, void* param_1, u32 param_2); +s32 mDoMemCdRWm_Store(CARDFileInfo* param_0, void* param_1, u32 param_2); +static void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* header); +static void mDoMemCdRWm_SetCardStat(CARDFileInfo* file); +static BOOL mDoMemCdRWm_CheckCardStat(CARDFileInfo* file); +static u32 mDoMemCdRWm_CalcCheckSum(void* data, u32 size); +static u64 mDoMemCdRWm_CalcCheckSumGameData(void* data, u32 size); +BOOL mDoMemCdRWm_TestCheckSumGameData(void* data); +void mDoMemCdRWm_SetCheckSumGameData(u8* data, u8 dataNum); + #endif /* M_DO_M_DO_MEMCARDRWMNG_H */ diff --git a/libs/JSystem/JParticle/JPABaseShape.cpp b/libs/JSystem/JParticle/JPABaseShape.cpp index 158ac11b4fe..1f28bc8c1c2 100644 --- a/libs/JSystem/JParticle/JPABaseShape.cpp +++ b/libs/JSystem/JParticle/JPABaseShape.cpp @@ -114,7 +114,6 @@ extern "C" void setGX__12JPABaseShapeCFP18JPAEmitterWorkData(); extern "C" void func_8027EEB0(); extern "C" void alloc__7JKRHeapFUliP7JKRHeap(); extern "C" void load__10JUTTextureF11_GXTexMapID(); -extern "C" void PSMTXMultVecArraySR(); extern "C" void _savegpr_22(); extern "C" void _savegpr_24(); extern "C" void _savegpr_28(); diff --git a/src/m_Do/m_Do_MemCard.cpp b/src/m_Do/m_Do_MemCard.cpp index 329695f0fff..55dfb43baab 100644 --- a/src/m_Do/m_Do_MemCard.cpp +++ b/src/m_Do/m_Do_MemCard.cpp @@ -4,27 +4,12 @@ // #include "m_Do/m_Do_MemCard.h" +#include "JSystem/JKernel/JKRThread.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" #include "dolphin/types.h" - -// -// Types: -// - -struct mDoRst { - static u8 mResetData[4 + 4 /* padding */]; -}; - -struct JKRThread { - /* 802D16B8 */ JKRThread(OSThread*, int); - /* 802D1758 */ ~JKRThread(); -}; - -struct JKRHeap { - /* 802CE438 */ void becomeCurrentHeap(); -}; - -struct CARDFileInfo {}; +#include "m_Do/m_Do_Ext.h" +#include "m_Do/m_Do_Reset.h" // // Forward References: @@ -59,27 +44,12 @@ extern "C" extern char const* const m_Do_m_Do_MemCard__stringBase0; // External References: // -SECTION_INIT void memcpy(); extern "C" void mDoExt_getAssertHeap__Fv(); extern "C" void mDoMemCdRWm_Store__FP12CARDFileInfoPvUl(); extern "C" void mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl(); extern "C" void becomeCurrentHeap__7JKRHeapFv(); extern "C" void __ct__9JKRThreadFP8OSThreadi(); extern "C" void __dt__9JKRThreadFv(); -extern "C" void OSInitCond(); -extern "C" void OSWaitCond(); -extern "C" void OSSignalCond(); -extern "C" void CARDInit(); -extern "C" void CARDFreeBlocks(); -extern "C" void CARDCheck(); -extern "C" void CARDProbe(); -extern "C" void CARDProbeEx(); -extern "C" void CARDMount(); -extern "C" void CARDUnmount(); -extern "C" void CARDFormat(); -extern "C" void CARDOpen(); -extern "C" void CARDClose(); -extern "C" void CARDCreate(); extern "C" void _savegpr_27(); extern "C" void _savegpr_28(); extern "C" void _restgpr_27(); @@ -91,178 +61,359 @@ extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */]; // /* 8001672C-80016730 01106C 0004+00 1/1 0/0 0/0 .text __ct__15mDoMemCd_Ctrl_cFv */ -mDoMemCd_Ctrl_c::mDoMemCd_Ctrl_c() { - /* empty function */ -} +mDoMemCd_Ctrl_c::mDoMemCd_Ctrl_c() {} /* ############################################################################################## */ /* 803DFC20-803E0C20 00C940 1000+00 1/1 0/0 0/0 .bss MemCardStack */ static u8 MemCardStack[4096]; /* 803E0C20-803E0F40 00D940 0318+08 1/1 0/0 0/0 .bss MemCardThread */ -static u8 MemCardThread[792 + 8 /* padding */]; +static OSThread MemCardThread; /* 80016730-800167D0 011070 00A0+00 0/0 1/1 0/0 .text ThdInit__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::ThdInit() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::ThdInit() { + CARDInit(); + mCopyToPos = 0; + mProbeStat = 2; + mCardState = 0; + mCardCommand = CARD_NO_COMMAND; + mChannel = 0; + + OSInitMutex(&mMutex); + OSInitCond(&mCond); + + int priority = OSGetThreadPriority(OSGetCurrentThread()); + OSCreateThread(&MemCardThread, mDoMemCd_main, NULL, MemCardStack + sizeof(MemCardStack), + sizeof(MemCardStack), priority + 1, 1); + OSResumeThread(&MemCardThread); } -#pragma pop /* 800167D0-80016894 011110 00C4+00 1/1 0/0 0/0 .text main__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::main() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::main() { + do { + OSLockMutex(&mMutex); + while (mCardCommand == CARD_NO_COMMAND) { + OSWaitCond(&mCond, &mMutex); + } + OSUnlockMutex(&mMutex); + + switch (mCardCommand) { + case CARD_RESTORE: + restore(); + break; + case CARD_STORE: + store(); + break; + case CARD_FORMAT: + format(); + break; + case CARD_ATTACH: + attach(); + break; + case CARD_DETACH: + detach(); + break; + } + + OSLockMutex(&mMutex); + mCardCommand = CARD_NO_COMMAND; + OSUnlockMutex(&mMutex); + } while (true); } -#pragma pop /* 80016894-800169B4 0111D4 0120+00 0/0 1/1 0/0 .text update__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::update() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::update() { + if (mDoRst::isReset()) { + OSLockMutex(&mMutex); + mCardCommand = CARD_DETACH; + mProbeStat = 3; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } else if (getStatus(0) != 14) { + if (CARDProbe(0) && getStatus(0) == 0) { + OSLockMutex(&mMutex); + mProbeStat = 0; + mCardState = 13; + mCardCommand = CARD_ATTACH; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } else if (!CARDProbe(0) && getStatus(0) != 0) { + OSLockMutex(&mMutex); + mProbeStat = 1; + mCardState = 13; + mCardCommand = CARD_DETACH; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } + } } -#pragma pop /* 800169B4-80016A0C 0112F4 0058+00 0/0 2/2 0/0 .text load__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::load() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::load() { + if (OSTryLockMutex(&mMutex)) { + field_0x1fc8 = 0; + mCardCommand = CARD_RESTORE; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } } -#pragma pop - -/* ############################################################################################## */ -/* 803743F8-803743F8 000A58 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_803743F8 = "gczelda2"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_80374401 = "\0\0\0\0\0\0"; -#pragma pop /* 80016A0C-80016AB0 01134C 00A4+00 1/1 0/0 0/0 .text restore__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::restore() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::restore() { + CARDFileInfo file; + field_0x1fc8 = 0; + + s32 card_state = CARDOpen(mChannel, "gczelda2", &file); + if (card_state == CARD_ERROR_READY) { + if (!mDoMemCdRWm_Restore(&file, this, sizeof(mData))) { + mCardState = 3; + } else { + setCardState(card_state); + } + CARDClose(&file); + } else { + setCardState(card_state); + } + + field_0x1fc8 = 1; } -#pragma pop /* 80016AB0-80016B58 0113F0 00A8+00 0/0 2/2 0/0 .text LoadSync__15mDoMemCd_Ctrl_cFPvUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::LoadSync(void* param_0, u32 param_1, u32 param_2) { - nofralloc -#include "asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s" +s32 mDoMemCd_Ctrl_c::LoadSync(void* buffer, u32 size, u32 index) { + int ret = 0; + + if (field_0x1fc8 == 0) { + return 0; + } + + if (OSTryLockMutex(&mMutex)) { + if (mCardState == 3) { + memcpy(buffer, &mData[index], size); + mCardState = 1; + ret = 1; + } else { + mCardState = 2; + ret = 2; + } + OSUnlockMutex(&mMutex); + } + + return ret; } -#pragma pop /* 80016B58-80016BD4 011498 007C+00 0/0 2/2 0/0 .text save__15mDoMemCd_Ctrl_cFPvUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::save(void* param_0, u32 param_1, u32 param_2) { - nofralloc -#include "asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s" +void mDoMemCd_Ctrl_c::save(void* buffer, u32 size, u32 index) { + if (OSTryLockMutex(&mMutex)) { + memcpy(&mData[index], buffer, size); + field_0x1fc8 = 0; + mCardCommand = CARD_STORE; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } } -#pragma pop /* 80016BD4-80016CE0 011514 010C+00 1/1 0/0 0/0 .text store__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::store() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::store() { + CARDFileInfo file; + s32 card_state; + field_0x1fc8 = 0; + + if (mCardState == 2) { + card_state = CARDCreate(mChannel, "gczelda2", 0x8000, &file); + if (card_state == CARD_ERROR_READY || card_state == CARD_ERROR_EXIST) { + mCardState = 1; + } else { + setCardState(card_state); + } + } + + if (mCardState == 1) { + card_state = CARDOpen(mChannel, "gczelda2", &file); + if (card_state == CARD_ERROR_READY) { + card_state = mDoMemCdRWm_Store(&file, this, sizeof(mData)); + if (card_state != CARD_ERROR_READY) { + setCardState(card_state); + } else { + mCardState = 4; + } + CARDClose(&file); + } else { + setCardState(card_state); + } + } else { + setCardState(card_state); + } + + field_0x1fc8 = 1; } -#pragma pop /* 80016CE0-80016D74 011620 0094+00 0/0 6/6 0/0 .text SaveSync__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::SaveSync() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s" -} -#pragma pop +s32 mDoMemCd_Ctrl_c::SaveSync() { + int ret = 0; -/* ############################################################################################## */ -/* 803A34F8-803A3530 -00001 0038+00 1/1 0/0 0/0 .data @3770 */ -SECTION_DATA static void* lit_3770[14] = { - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x74), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x4C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x54), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x5C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x64), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x6C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x7C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x84), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x8C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x94), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x9C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0xA4), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0xAC), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0xB4), -}; + if (field_0x1fc8 == 0) { + return 0; + } + + if (OSTryLockMutex(&mMutex)) { + if (mCardState == 4) { + mCardState = 1; + ret = 1; + } else if (mCardState == 1) { + ret = 0; + } else { + ret = 2; + } + OSUnlockMutex(&mMutex); + } + + return ret; +} /* 80016D74-80016E58 0116B4 00E4+00 2/1 2/2 0/0 .text getStatus__15mDoMemCd_Ctrl_cFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::getStatus(u32 param_0) { - nofralloc -#include "asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s" +u32 mDoMemCd_Ctrl_c::getStatus(u32) { + u32 status; + if (OSTryLockMutex(&mMutex)) { + switch (mCardState) { + case 1: + status = 2; + break; + case 2: + status = 1; + break; + case 3: + status = 3; + break; + case 4: + status = 4; + break; + case 5: + status = 5; + break; + case 0: + status = 0; + break; + case 6: + status = 7; + break; + case 7: + status = 6; + break; + case 8: + status = 11; + break; + case 9: + status = 12; + break; + case 10: + status = 9; + break; + case 11: + status = 10; + break; + case 12: + status = 8; + break; + case 13: + status = 14; + break; + } + + OSUnlockMutex(&mMutex); + return status; + } + + return 14; } -#pragma pop /* 80016E58-80016EA8 011798 0050+00 0/0 2/2 0/0 .text command_format__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::command_format() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::command_format() { + if (OSTryLockMutex(&mMutex)) { + mCardCommand = CARD_FORMAT; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } } -#pragma pop /* 80016EA8-80016F2C 0117E8 0084+00 1/1 0/0 0/0 .text format__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::format() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::format() { + field_0x1fc8 = 0; + + s32 card_state = CARDFormat(mChannel); + if (OSTryLockMutex(&mMutex)) { + if (card_state == CARD_ERROR_READY) { + mCardState = 5; + } else { + setCardState(card_state); + } + + field_0x1fc8 = 1; + OSUnlockMutex(&mMutex); + } } -#pragma pop /* 80016F2C-80016FB8 01186C 008C+00 0/0 2/2 0/0 .text FormatSync__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::FormatSync() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s" +s32 mDoMemCd_Ctrl_c::FormatSync() { + int ret = 0; + + if (field_0x1fc8 == 0) { + return 0; + } + + if (OSTryLockMutex(&mMutex)) { + if (mCardState != 13) { + if (mCardState == 5) { + mCardState = 2; + ret = 1; + } else { + ret = 2; + } + } + OSUnlockMutex(&mMutex); + } + + return ret; } -#pragma pop /* 80016FB8-800170B8 0118F8 0100+00 1/1 0/0 0/0 .text attach__15mDoMemCd_Ctrl_cFv */ +// switch has case issues +#ifdef NONMATCHING +void mDoMemCd_Ctrl_c::attach() { + s32 mem_size; + s32 sect_size; + + s32 card_state = CARDProbeEx(mChannel, &mem_size, §_size); + if (card_state == CARD_ERROR_NOCARD) { + mCardState = 0; + } else if (card_state == CARD_ERROR_FATAL_ERROR) { + mCardState = 12; + } else if (card_state == CARD_ERROR_WRONGDEVICE) { + mCardState = 10; + } else if (sect_size != 0x2000) { + mCardState = 11; + } else { + if (mount()) { + if (loadfile()) { + mCardState = 1; + } else { + switch (checkspace()) { + case 0: + mCardState = 2; + break; + case 1: + mCardState = 8; + break; + case 2: + mCardState = 9; + break; + } + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -271,27 +422,24 @@ asm void mDoMemCd_Ctrl_c::attach() { #include "asm/m_Do/m_Do_MemCard/attach__15mDoMemCd_Ctrl_cFv.s" } #pragma pop +#endif /* 800170B8-80017110 0119F8 0058+00 0/0 1/1 0/0 .text command_attach__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::command_attach() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::command_attach() { + if (OSTryLockMutex(&mMutex)) { + mCardState = 13; + mCardCommand = CARD_ATTACH; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } } -#pragma pop /* 80017110-80017148 011A50 0038+00 1/1 0/0 0/0 .text detach__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::detach() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::detach() { + CARDUnmount(mChannel); + mCardState = 0; } -#pragma pop /* ############################################################################################## */ /* 803A3530-803A3568 -00001 0038+00 1/1 0/0 0/0 .data @3850 */ @@ -313,33 +461,37 @@ SECTION_DATA static void* lit_3850[14] = { }; /* 803E0F40-803EAF40 00DC60 A000+00 1/1 0/0 0/0 .bss MemCardWorkArea0 */ -static u8 MemCardWorkArea0[40960]; +static u8 MemCardWorkArea0[5 * 8 * 1024] ALIGN_DECL(32); /* 80017148-80017274 011A88 012C+00 2/1 0/0 0/0 .text mount__15mDoMemCd_Ctrl_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::mount() { +asm s32 mDoMemCd_Ctrl_c::mount() { nofralloc #include "asm/m_Do/m_Do_MemCard/mount__15mDoMemCd_Ctrl_cFv.s" } #pragma pop /* 80017274-800172D4 011BB4 0060+00 1/1 0/0 0/0 .text loadfile__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::loadfile() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s" +s32 mDoMemCd_Ctrl_c::loadfile() { + CARDFileInfo file; + + s32 card_state = CARDOpen(mChannel, "gczelda2", &file); + if (card_state == CARD_ERROR_READY) { + CARDClose(&file); + return CARD_ERROR_UNLOCKED; + } else { + setCardState(card_state); + return CARD_ERROR_READY; + } } -#pragma pop /* 800172D4-80017360 011C14 008C+00 1/1 0/0 0/0 .text checkspace__15mDoMemCd_Ctrl_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::checkspace() { +asm s32 mDoMemCd_Ctrl_c::checkspace() { nofralloc #include "asm/m_Do/m_Do_MemCard/checkspace__15mDoMemCd_Ctrl_cFv.s" } @@ -347,6 +499,31 @@ asm void mDoMemCd_Ctrl_c::checkspace() { /* 80017360-8001741C 011CA0 00BC+00 5/5 0/0 0/0 .text setCardState__15mDoMemCd_Ctrl_cFl */ +// cases aren't fully correct +#ifdef NONMATCHING +void mDoMemCd_Ctrl_c::setCardState(s32 param_0) { + switch (param_0) { + case CARD_ERROR_IOERROR: + case CARD_ERROR_FATAL_ERROR: + mCardState = 12; + break; + case CARD_ERROR_NOCARD: + mCardState = 0; + break; + case CARD_ERROR_READY: + if (CARDCheck(mChannel) != 0) { + mCardState = 7; + } + break; + case CARD_ERROR_ENCODING: + mCardState = 6; + break; + case CARD_ERROR_BROKEN: + mCardState = 2; + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -355,19 +532,20 @@ asm void mDoMemCd_Ctrl_c::setCardState(s32 param_0) { #include "asm/m_Do/m_Do_MemCard/setCardState__15mDoMemCd_Ctrl_cFl.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803EAF40-803ECF40 017C60 2000+00 2/2 27/27 0/0 .bss g_mDoMemCd_control */ mDoMemCd_Ctrl_c g_mDoMemCd_control; /* 8001741C-80017470 011D5C 0054+00 1/1 0/0 0/0 .text mDoMemCd_main__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void mDoMemCd_main(void* param_0) { - nofralloc -#include "asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s" +static int mDoMemCd_main(void*) { + { JKRThread thread(OSGetCurrentThread(), 0); } + + mDoExt_getAssertHeap()->becomeCurrentHeap(); + + g_mDoMemCd_control.main(); + return 0; } -#pragma pop /* 803743F8-803743F8 000A58 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/m_Do/m_Do_MemCardRWmng.cpp b/src/m_Do/m_Do_MemCardRWmng.cpp index 4b54218bd36..8f656bd41e4 100644 --- a/src/m_Do/m_Do_MemCardRWmng.cpp +++ b/src/m_Do/m_Do_MemCardRWmng.cpp @@ -4,16 +4,12 @@ // #include "m_Do/m_Do_MemCardRWmng.h" +#include "MSL_C/MSL_Common/Src/printf.h" +#include "MSL_C/MSL_Common/Src/string.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" #include "dolphin/types.h" - -// -// Types: -// - -struct mDoMemCdRWm_HeaderData {}; - -struct CARDFileInfo {}; +#include "m_Do/m_Do_MemCard.h" // // Forward References: @@ -34,22 +30,10 @@ extern "C" extern char const* const m_Do_m_Do_MemCardRWmng__stringBase0; // External References: // -SECTION_INIT void memset(); -SECTION_INIT void memcpy(); -extern "C" void OSGetTime(); -extern "C" void OSTicksToCalendarTime(); -extern "C" void CARDRead(); -extern "C" void CARDWrite(); -extern "C" void CARDGetStatus(); -extern "C" void CARDSetStatus(); -extern "C" void CARDGetSerialNo(); extern "C" void _savegpr_20(); extern "C" void _savegpr_28(); extern "C" void _restgpr_20(); extern "C" void _restgpr_28(); -extern "C" void snprintf(); -extern "C" extern u8 g_mDoMemCd_control[8192]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; // // Declarations: @@ -57,50 +41,95 @@ extern "C" extern u8 g_dComIfG_gameInfo[122384]; /* ############################################################################################## */ /* 803ECF40-803F0F40 019C60 4000+00 2/2 0/0 0/0 .bss sTmpBuf */ -static u8 sTmpBuf[16384]; +static u8 sTmpBuf[0x4000]; /* 80017498-8001769C 011DD8 0204+00 0/0 1/1 0/0 .text mDoMemCdRWm_Store__FP12CARDFileInfoPvUl */ +#ifdef NONMATCHING +void 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)); + + card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000); + if (card_state == CARD_ERROR_READY) { + return; + } + + card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000); + if (card_state == CARD_ERROR_READY) { + return; + } + } + + 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); + } + } + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoMemCdRWm_Store(CARDFileInfo* param_0, void* param_1, u32 param_2) { +asm s32 mDoMemCdRWm_Store(CARDFileInfo* param_0, void* param_1, u32 param_2) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_Store__FP12CARDFileInfoPvUl.s" } #pragma pop +#endif /* 8001769C-8001787C 011FDC 01E0+00 0/0 1/1 0/0 .text mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoMemCdRWm_Restore(CARDFileInfo* param_0, void* param_1, u32 param_2) { +asm s32 mDoMemCdRWm_Restore(CARDFileInfo* param_0, void* param_1, u32 param_2) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl.s" } #pragma pop -/* ############################################################################################## */ -/* 80374408-80374408 000A68 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80374408 = "Zelda: Twilight Princess"; -SECTION_DEAD static char const* const stringBase_80374421 = "%d/%d Save Data"; -SECTION_DEAD static char const* const stringBase_80374431 = "zelda2_gc_banner.bti"; -SECTION_DEAD static char const* const stringBase_80374446 = "zelda2_gc_icon.bti"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_80374459 = "\0\0\0\0\0\0"; -#pragma pop - /* 8001787C-800179E4 0121BC 0168+00 1/1 0/0 0/0 .text * mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* param_0) { - nofralloc -#include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s" +static void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* header) { + snprintf(header->mTitle, sizeof(header->mTitle), "Zelda: Twilight Princess"); + + OSCalendarTime time; + OSTicksToCalendarTime(OSGetTime(), &time); + snprintf(header->mComment, sizeof(header->mComment), "%d/%d Save Data", time.month + 1, + time.day_of_month); + + ResTIMG* banner_data = + (ResTIMG*)g_dComIfG_gameInfo.play.mCardIconResArchive->getResource("zelda2_gc_banner.bti"); + ResTIMG* icon_data = + (ResTIMG*)g_dComIfG_gameInfo.play.mCardIconResArchive->getResource("zelda2_gc_icon.bti"); + + memcpy(header->mBannerTexData, (u8*)banner_data + banner_data->texDataOffset, + (banner_data->paletteCount * 2) + 0xC00); + memcpy(header->mIconTexData0, (u8*)icon_data + icon_data->texDataOffset, 0x400); + memcpy(header->mIconTexData1, (u8*)icon_data + icon_data->texDataOffset, 0x400); + memcpy(header->mIconTexData2, (u8*)icon_data + icon_data->texDataOffset, 0x400); + memcpy(header->mIconTexData3, (u8*)icon_data + icon_data->texDataOffset, 0x400); + memcpy(header->mIconTexData4, (u8*)icon_data + icon_data->texDataOffset, + (icon_data->paletteCount * 2) + 0x400); + g_dComIfG_gameInfo.play.mCardIconResArchive->removeResourceAll(); } -#pragma pop /* 800179E4-80017B4C 012324 0168+00 1/1 0/0 0/0 .text mDoMemCdRWm_SetCardStat__FP12CARDFileInfo */ #pragma push @@ -117,50 +146,77 @@ static asm void mDoMemCdRWm_SetCardStat(CARDFileInfo* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void mDoMemCdRWm_CheckCardStat(CARDFileInfo* param_0) { +static asm BOOL mDoMemCdRWm_CheckCardStat(CARDFileInfo* param_0) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_CheckCardStat__FP12CARDFileInfo.s" } #pragma pop /* 80017C74-80017CB4 0125B4 0040+00 1/1 0/0 0/0 .text mDoMemCdRWm_CalcCheckSum__FPvUl */ +// matches except regalloc in the beginning +#ifdef NONMATCHING +static u32 mDoMemCdRWm_CalcCheckSum(void* data, u32 size) { + u16 high = 0; + u16 low = 0; + + u16* d = (u16*)data; + for (int i = 0; i < size / 2; i++) { + high += *d; + low += ~*d; + d++; + } + + return high << 16 | low; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void mDoMemCdRWm_CalcCheckSum(void* param_0, u32 param_1) { +static asm u32 mDoMemCdRWm_CalcCheckSum(void* param_0, u32 param_1) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_CalcCheckSum__FPvUl.s" } #pragma pop +#endif /* 80017CB4-80017CEC 0125F4 0038+00 2/2 0/0 0/0 .text mDoMemCdRWm_CalcCheckSumGameData__FPvUl */ +// same beginning regalloc issue +#ifdef NONMATCHING +static u64 mDoMemCdRWm_CalcCheckSumGameData(void* data, u32 size) { + u32 high = 0; + u32 low = 0; + + u8* d = (u8*)data; + for (int i = 0; i < size; i++) { + high += *d; + low += ~*d; + d++; + } + + return (u64)high << 32 | low; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void mDoMemCdRWm_CalcCheckSumGameData(void* param_0, u32 param_1) { +static asm u64 mDoMemCdRWm_CalcCheckSumGameData(void* param_0, u32 param_1) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_CalcCheckSumGameData__FPvUl.s" } #pragma pop +#endif /* 80017CEC-80017D38 01262C 004C+00 1/1 4/4 0/0 .text mDoMemCdRWm_TestCheckSumGameData__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCdRWm_TestCheckSumGameData(void* param_0) { - nofralloc -#include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s" +BOOL mDoMemCdRWm_TestCheckSumGameData(void* data) { + u64 checksum = mDoMemCdRWm_CalcCheckSumGameData(data, 0xA8C); + return checksum == *(u64*)((u8*)data + 0xA8C); } -#pragma pop /* 80017D38-80017D7C 012678 0044+00 0/0 4/4 0/0 .text mDoMemCdRWm_SetCheckSumGameData__FPUcUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCdRWm_SetCheckSumGameData(u8* param_0, u8 param_1) { - nofralloc -#include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s" +void mDoMemCdRWm_SetCheckSumGameData(u8* data, u8 dataNum) { + u8* file_ptr = data + (dataNum * 0xA94); + + *(u64*)(file_ptr + 0xA8C) = mDoMemCdRWm_CalcCheckSumGameData(file_ptr, 0xA8C); } -#pragma pop /* 80374408-80374408 000A68 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */