From dc44aad0ecfbf653ef49c66469d997c5ada47a00 Mon Sep 17 00:00:00 2001 From: tomas <93524600+TommiRommi@users.noreply.github.com> Date: Sun, 2 Jul 2023 19:00:51 +0000 Subject: [PATCH] Matched func_800B5B94 (#329) * Matched func_800B5B94 --- .../code_80091750/add_8018D9E0_entry.s | 6 +- asm/non_matchings/menus/func_800B5B94.s | 148 ------------------ src/code_80091750.c | 8 +- src/code_800B45E0.c | 124 ++++++--------- src/code_800B45E0.h | 2 +- src/menus.c | 2 +- 6 files changed, 60 insertions(+), 230 deletions(-) delete mode 100644 asm/non_matchings/menus/func_800B5B94.s diff --git a/asm/non_matchings/code_80091750/add_8018D9E0_entry.s b/asm/non_matchings/code_80091750/add_8018D9E0_entry.s index f464c51d3..cd1dbf21c 100644 --- a/asm/non_matchings/code_80091750/add_8018D9E0_entry.s +++ b/asm/non_matchings/code_80091750/add_8018D9E0_entry.s @@ -701,7 +701,7 @@ glabel L8009F094 /* 09FCA0 8009F0A0 00402025 */ move $a0, $v0 /* 09FCA4 8009F0A4 0C0265AF */ jal func_800996BC /* 09FCA8 8009F0A8 00002825 */ move $a1, $zero -/* 09FCAC 8009F0AC 0C02D6E5 */ jal func_800B5B94 +/* 09FCAC 8009F0AC 0C02D6E5 */ jal controller_pak_status /* 09FCB0 8009F0B0 00000000 */ nop /* 09FCB4 8009F0B4 14400005 */ bnez $v0, .L8009F0CC /* 09FCB8 8009F0B8 00000000 */ nop @@ -734,7 +734,7 @@ glabel L8009F10C /* 09FD18 8009F118 00402025 */ move $a0, $v0 /* 09FD1C 8009F11C 0C0265AF */ jal func_800996BC /* 09FD20 8009F120 00002825 */ move $a1, $zero -/* 09FD24 8009F124 0C02D6E5 */ jal func_800B5B94 +/* 09FD24 8009F124 0C02D6E5 */ jal controller_pak_status /* 09FD28 8009F128 00000000 */ nop /* 09FD2C 8009F12C 14400005 */ bnez $v0, .L8009F144 /* 09FD30 8009F130 00000000 */ nop @@ -988,7 +988,7 @@ glabel L8009F430 /* 0A00C0 8009F4C0 00002825 */ move $a1, $zero /* 0A00C4 8009F4C4 0C01BBD8 */ jal func_8006EF60 /* 0A00C8 8009F4C8 00000000 */ nop -/* 0A00CC 8009F4CC 0C02D6E5 */ jal func_800B5B94 +/* 0A00CC 8009F4CC 0C02D6E5 */ jal controller_pak_status /* 0A00D0 8009F4D0 00000000 */ nop /* 0A00D4 8009F4D4 14400005 */ bnez $v0, .L8009F4EC /* 0A00D8 8009F4D8 00000000 */ nop diff --git a/asm/non_matchings/menus/func_800B5B94.s b/asm/non_matchings/menus/func_800B5B94.s deleted file mode 100644 index 933f4e930..000000000 --- a/asm/non_matchings/menus/func_800B5B94.s +++ /dev/null @@ -1,148 +0,0 @@ -glabel func_800B5B94 -/* 0B6794 800B5B94 3C02800F */ lui $v0, %hi(D_800E86F8) # $v0, 0x800f -/* 0B6798 800B5B98 804286F8 */ lb $v0, %lo(D_800E86F8)($v0) -/* 0B679C 800B5B9C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0B67A0 800B5BA0 AFBF001C */ sw $ra, 0x1c($sp) -/* 0B67A4 800B5BA4 10400020 */ beqz $v0, .L800B5C28 -/* 0B67A8 800B5BA8 3C048019 */ lui $a0, %hi(D_8018E868) # $a0, 0x8019 -/* 0B67AC 800B5BAC 3C0E800F */ lui $t6, %hi(D_800F2E74) # $t6, 0x800f -/* 0B67B0 800B5BB0 3C0F8019 */ lui $t7, %hi(D_8018EB84) # $t7, 0x8019 -/* 0B67B4 800B5BB4 25EFEB84 */ addiu $t7, %lo(D_8018EB84) # addiu $t7, $t7, -0x147c -/* 0B67B8 800B5BB8 25CE2E74 */ addiu $t6, %lo(D_800F2E74) # addiu $t6, $t6, 0x2e74 -/* 0B67BC 800B5BBC 3C05800F */ lui $a1, %hi(D_800E86F0) # $a1, 0x800f -/* 0B67C0 800B5BC0 3C06800F */ lui $a2, %hi(D_800E86F4) # $a2, 0x800f -/* 0B67C4 800B5BC4 3C07800F */ lui $a3, %hi(D_800F2E64) # $a3, 0x800f -/* 0B67C8 800B5BC8 24E72E64 */ addiu $a3, %lo(D_800F2E64) # addiu $a3, $a3, 0x2e64 -/* 0B67CC 800B5BCC 8CC686F4 */ lw $a2, %lo(D_800E86F4)($a2) -/* 0B67D0 800B5BD0 94A586F0 */ lhu $a1, %lo(D_800E86F0)($a1) -/* 0B67D4 800B5BD4 AFAE0010 */ sw $t6, 0x10($sp) -/* 0B67D8 800B5BD8 AFAF0014 */ sw $t7, 0x14($sp) -/* 0B67DC 800B5BDC 0C033E20 */ jal osPfsFindFile -/* 0B67E0 800B5BE0 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 -/* 0B67E4 800B5BE4 10400008 */ beqz $v0, .L800B5C08 -/* 0B67E8 800B5BE8 24010002 */ li $at, 2 -/* 0B67EC 800B5BEC 1041000B */ beq $v0, $at, .L800B5C1C -/* 0B67F0 800B5BF0 24010005 */ li $at, 5 -/* 0B67F4 800B5BF4 10410006 */ beq $v0, $at, .L800B5C10 -/* 0B67F8 800B5BF8 3C01800F */ lui $at, %hi(D_800E86F8) # $at, 0x800f -/* 0B67FC 800B5BFC A02086F8 */ sb $zero, %lo(D_800E86F8)($at) -/* 0B6800 800B5C00 10000009 */ b .L800B5C28 -/* 0B6804 800B5C04 00001025 */ move $v0, $zero -.L800B5C08: -/* 0B6808 800B5C08 10000062 */ b .L800B5D94 -/* 0B680C 800B5C0C 00001025 */ move $v0, $zero -.L800B5C10: -/* 0B6810 800B5C10 3C02800F */ lui $v0, %hi(D_800E86F8) # $v0, 0x800f -/* 0B6814 800B5C14 10000004 */ b .L800B5C28 -/* 0B6818 800B5C18 804286F8 */ lb $v0, %lo(D_800E86F8)($v0) -.L800B5C1C: -/* 0B681C 800B5C1C 3C01800F */ lui $at, %hi(D_800E86F8) # $at, 0x800f -/* 0B6820 800B5C20 A02086F8 */ sb $zero, %lo(D_800E86F8)($at) -/* 0B6824 800B5C24 00001025 */ move $v0, $zero -.L800B5C28: -/* 0B6828 800B5C28 14400048 */ bnez $v0, .L800B5D4C -/* 0B682C 800B5C2C 00000000 */ nop -/* 0B6830 800B5C30 0C02D6CB */ jal check_for_controller_pak -/* 0B6834 800B5C34 00002025 */ move $a0, $zero -/* 0B6838 800B5C38 14400003 */ bnez $v0, .L800B5C48 -/* 0B683C 800B5C3C 3C048015 */ lui $a0, %hi(gSIEventMesgQueue) # $a0, 0x8015 -/* 0B6840 800B5C40 10000054 */ b .L800B5D94 -/* 0B6844 800B5C44 24020001 */ li $v0, 1 -.L800B5C48: -/* 0B6848 800B5C48 3C058019 */ lui $a1, %hi(D_8018E868) # $a1, 0x8019 -/* 0B684C 800B5C4C 24A5E868 */ addiu $a1, %lo(D_8018E868) # addiu $a1, $a1, -0x1798 -/* 0B6850 800B5C50 2484F0B8 */ addiu $a0, %lo(gSIEventMesgQueue) # addiu $a0, $a0, -0xf48 -/* 0B6854 800B5C54 0C0339C8 */ jal osPfsInit -/* 0B6858 800B5C58 00003025 */ move $a2, $zero -/* 0B685C 800B5C5C 10400010 */ beqz $v0, .L800B5CA0 -/* 0B6860 800B5C60 24180001 */ li $t8, 1 -/* 0B6864 800B5C64 24010001 */ li $at, 1 -/* 0B6868 800B5C68 10410007 */ beq $v0, $at, .L800B5C88 -/* 0B686C 800B5C6C 24010004 */ li $at, 4 -/* 0B6870 800B5C70 10410009 */ beq $v0, $at, .L800B5C98 -/* 0B6874 800B5C74 2401000A */ li $at, 10 -/* 0B6878 800B5C78 10410005 */ beq $v0, $at, .L800B5C90 -/* 0B687C 800B5C7C 2401000B */ li $at, 11 -/* 0B6880 800B5C80 14410005 */ bne $v0, $at, .L800B5C98 -/* 0B6884 800B5C84 00000000 */ nop -.L800B5C88: -/* 0B6888 800B5C88 10000042 */ b .L800B5D94 -/* 0B688C 800B5C8C 24020001 */ li $v0, 1 -.L800B5C90: -/* 0B6890 800B5C90 10000040 */ b .L800B5D94 -/* 0B6894 800B5C94 24020002 */ li $v0, 2 -.L800B5C98: -/* 0B6898 800B5C98 1000003E */ b .L800B5D94 -/* 0B689C 800B5C9C 24020002 */ li $v0, 2 -.L800B5CA0: -/* 0B68A0 800B5CA0 3C19800F */ lui $t9, %hi(D_800F2E74) # $t9, 0x800f -/* 0B68A4 800B5CA4 3C088019 */ lui $t0, %hi(D_8018EB84) # $t0, 0x8019 -/* 0B68A8 800B5CA8 3C01800F */ lui $at, %hi(D_800E86F8) # $at, 0x800f -/* 0B68AC 800B5CAC 2508EB84 */ addiu $t0, %lo(D_8018EB84) # addiu $t0, $t0, -0x147c -/* 0B68B0 800B5CB0 27392E74 */ addiu $t9, %lo(D_800F2E74) # addiu $t9, $t9, 0x2e74 -/* 0B68B4 800B5CB4 3C048019 */ lui $a0, %hi(D_8018E868) # $a0, 0x8019 -/* 0B68B8 800B5CB8 3C05800F */ lui $a1, %hi(D_800E86F0) # $a1, 0x800f -/* 0B68BC 800B5CBC 3C06800F */ lui $a2, %hi(D_800E86F4) # $a2, 0x800f -/* 0B68C0 800B5CC0 3C07800F */ lui $a3, %hi(D_800F2E64) # $a3, 0x800f -/* 0B68C4 800B5CC4 A03886F8 */ sb $t8, %lo(D_800E86F8)($at) -/* 0B68C8 800B5CC8 24E72E64 */ addiu $a3, %lo(D_800F2E64) # addiu $a3, $a3, 0x2e64 -/* 0B68CC 800B5CCC 8CC686F4 */ lw $a2, %lo(D_800E86F4)($a2) -/* 0B68D0 800B5CD0 94A586F0 */ lhu $a1, %lo(D_800E86F0)($a1) -/* 0B68D4 800B5CD4 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 -/* 0B68D8 800B5CD8 AFB90010 */ sw $t9, 0x10($sp) -/* 0B68DC 800B5CDC 0C033E20 */ jal osPfsFindFile -/* 0B68E0 800B5CE0 AFA80014 */ sw $t0, 0x14($sp) -/* 0B68E4 800B5CE4 14400003 */ bnez $v0, .L800B5CF4 -/* 0B68E8 800B5CE8 3C048019 */ lui $a0, %hi(D_8018E868) # $a0, 0x8019 -/* 0B68EC 800B5CEC 10000029 */ b .L800B5D94 -/* 0B68F0 800B5CF0 00001025 */ move $v0, $zero -.L800B5CF4: -/* 0B68F4 800B5CF4 3C058019 */ lui $a1, %hi(D_8018EB78) # $a1, 0x8019 -/* 0B68F8 800B5CF8 3C068019 */ lui $a2, %hi(D_8018EB7C) # $a2, 0x8019 -/* 0B68FC 800B5CFC 24C6EB7C */ addiu $a2, %lo(D_8018EB7C) # addiu $a2, $a2, -0x1484 -/* 0B6900 800B5D00 24A5EB78 */ addiu $a1, %lo(D_8018EB78) # addiu $a1, $a1, -0x1488 -/* 0B6904 800B5D04 0C033A38 */ jal osPfsNumFiles -/* 0B6908 800B5D08 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 -/* 0B690C 800B5D0C 10400003 */ beqz $v0, .L800B5D1C -/* 0B6910 800B5D10 3C048019 */ lui $a0, %hi(D_8018E868) # $a0, 0x8019 -/* 0B6914 800B5D14 1000001F */ b .L800B5D94 -/* 0B6918 800B5D18 24020002 */ li $v0, 2 -.L800B5D1C: -/* 0B691C 800B5D1C 3C058019 */ lui $a1, %hi(gControllerPakNumPagesFree) # $a1, 0x8019 -/* 0B6920 800B5D20 24A5EB80 */ addiu $a1, %lo(gControllerPakNumPagesFree) # addiu $a1, $a1, -0x1480 -/* 0B6924 800B5D24 0C033B48 */ jal osPfsFreeBlocks -/* 0B6928 800B5D28 2484E868 */ addiu $a0, %lo(D_8018E868) # addiu $a0, $a0, -0x1798 -/* 0B692C 800B5D2C 3C038019 */ lui $v1, %hi(gControllerPakNumPagesFree) # $v1, 0x8019 -/* 0B6930 800B5D30 10400003 */ beqz $v0, .L800B5D40 -/* 0B6934 800B5D34 2463EB80 */ addiu $v1, %lo(gControllerPakNumPagesFree) # addiu $v1, $v1, -0x1480 -/* 0B6938 800B5D38 10000016 */ b .L800B5D94 -/* 0B693C 800B5D3C 24020002 */ li $v0, 2 -.L800B5D40: -/* 0B6940 800B5D40 8C690000 */ lw $t1, ($v1) -/* 0B6944 800B5D44 00095203 */ sra $t2, $t1, 8 -/* 0B6948 800B5D48 AC6A0000 */ sw $t2, ($v1) -.L800B5D4C: -/* 0B694C 800B5D4C 3C0B8019 */ lui $t3, %hi(D_8018EB7C) # $t3, 0x8019 -/* 0B6950 800B5D50 3C0C8019 */ lui $t4, %hi(D_8018EB78) # $t4, 0x8019 -/* 0B6954 800B5D54 8D8CEB78 */ lw $t4, %lo(D_8018EB78)($t4) -/* 0B6958 800B5D58 8D6BEB7C */ lw $t3, %lo(D_8018EB7C)($t3) -/* 0B695C 800B5D5C 3C038019 */ lui $v1, %hi(gControllerPakNumPagesFree) # $v1, 0x8019 -/* 0B6960 800B5D60 2463EB80 */ addiu $v1, %lo(gControllerPakNumPagesFree) # addiu $v1, $v1, -0x1480 -/* 0B6964 800B5D64 016C082A */ slt $at, $t3, $t4 -/* 0B6968 800B5D68 54200004 */ bnel $at, $zero, .L800B5D7C -/* 0B696C 800B5D6C 8C6D0000 */ lw $t5, ($v1) -/* 0B6970 800B5D70 10000008 */ b .L800B5D94 -/* 0B6974 800B5D74 24020004 */ li $v0, 4 -/* 0B6978 800B5D78 8C6D0000 */ lw $t5, ($v1) -.L800B5D7C: -/* 0B697C 800B5D7C 24020004 */ li $v0, 4 -/* 0B6980 800B5D80 29A10079 */ slti $at, $t5, 0x79 -/* 0B6984 800B5D84 14200003 */ bnez $at, .L800B5D94 -/* 0B6988 800B5D88 00000000 */ nop -/* 0B698C 800B5D8C 10000001 */ b .L800B5D94 -/* 0B6990 800B5D90 2402FFFF */ li $v0, -1 -.L800B5D94: -/* 0B6994 800B5D94 8FBF001C */ lw $ra, 0x1c($sp) -/* 0B6998 800B5D98 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0B699C 800B5D9C 03E00008 */ jr $ra -/* 0B69A0 800B5DA0 00000000 */ nop diff --git a/src/code_80091750.c b/src/code_80091750.c index e61088f45..510408ea6 100644 --- a/src/code_80091750.c +++ b/src/code_80091750.c @@ -6947,7 +6947,7 @@ loop_3: return; case 0x69: func_800996BC(segmented_to_virtual_dupe(D_02004A0C), 0); - if (func_800B5B94() == 0) { + if (controller_pak_status() == 0) { func_800B6708(); return; } @@ -6962,7 +6962,7 @@ loop_3: return; case 0x8C: func_800996BC(segmented_to_virtual_dupe(D_02004A34), 0); - if (func_800B5B94() == 0) { + if (controller_pak_status() == 0) { func_800B6708(); return; } @@ -7054,7 +7054,7 @@ block_63: var_ra->unk1C = (s32) gTimeTrialDataCourseIndex; func_800996BC(segmented_to_virtual_dupe(D_02004A0C), 0); func_8006EF60(); - if (func_800B5B94() == 0) { + if (controller_pak_status) == 0) { func_800B6708(); return; } @@ -15598,7 +15598,7 @@ void func_800AEDBC(struct_8018D9E0_entry *arg0) { if (arg0->unk1C != gTimeTrialDataCourseIndex) { arg0->unk1C = (s32) gTimeTrialDataCourseIndex; func_8009A594(arg0->D_8018DEE0_index, 0, segmented_to_virtual_dupe_2(D_800E7E34[gCupCourseOrder[gTimeTrialDataCourseIndex / 4][gTimeTrialDataCourseIndex % 4]])); - if (func_800B5B94() == 0) { + if (controller_pak_status() == 0) { func_800B6708(); } else { D_8018EE10[0].ghostDataSaved = 0; diff --git a/src/code_800B45E0.c b/src/code_800B45E0.c index 2cf8387e3..55fa69005 100644 --- a/src/code_800B45E0.c +++ b/src/code_800B45E0.c @@ -720,85 +720,63 @@ s32 check_for_controller_pak(s32 controller) { return 0; } -#ifdef MIPS_TO_C -//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-11-2022 -s32 check_for_controller_pak(?); /* extern */ - -s32 func_800B5B94(void) { - s32 temp_v0; - s32 temp_v0_2; - s32 var_v0; - s8 var_v0_2; - - var_v0_2 = D_800E86F8; - if (var_v0_2 != 0) { - temp_v0 = osPfsFindFile(&D_8018E868, D_800E86F0, D_800E86F4, D_800F2E64, D_800F2E74, &D_8018EB84); - switch (temp_v0) { /* irregular */ - default: - D_800E86F8 = 0; -block_8: - var_v0_2 = 0; - goto block_9; - case 0: - return 0; - case 5: - var_v0_2 = D_800E86F8; - goto block_9; - case 2: - D_800E86F8 = 0; - goto block_8; - } - } else { -block_9: - if (var_v0_2 == 0) { - if (check_for_controller_pak(0) == 0) { - return 1; - } - temp_v0_2 = osPfsInit(&gSIEventMesgQueue, &D_8018E868, 0); - if (temp_v0_2 != 0) { - if (temp_v0_2 != 1) { - if (temp_v0_2 != 4) { - if (temp_v0_2 != 0x0000000A) { - if (temp_v0_2 == 0x0000000B) { - goto block_17; - } - goto block_19; - } - return 2; - } -block_19: - return 2; - } -block_17: - return 1; - } - D_800E86F8 = 1; - if (osPfsFindFile(&D_8018E868, D_800E86F0, D_800E86F4, D_800F2E64, D_800F2E74, &D_8018EB84) == 0) { +s32 controller_pak_status(void) { + if (D_800E86F8 != 0) { + switch (osPfsFindFile(&D_8018E868, D_800E86F0, D_800E86F4, D_800F2E64, D_800F2E74, &D_8018EB84)) { + case PFS_READ: return 0; - } - if (osPfsNumFiles(&D_8018E868, &D_8018EB78, &D_8018EB7C) != 0) { - return 2; - } - if (osPfsFreeBlocks(&D_8018E868, &gControllerPakNumPagesFree) != 0) { - return 2; - } - gControllerPakNumPagesFree = (s32) gControllerPakNumPagesFree >> 8; - goto block_27; + case PFS_ERR_INVALID: + break; + case PFS_ERR_NEW_PACK: + D_800E86F8 = 0; + break; + default: + D_800E86F8 = 0; + break; } -block_27: - if (D_8018EB7C >= D_8018EB78) { - return 4; + } + + if (D_800E86F8 == 0) { + s32 ret; + if (check_for_controller_pak(0) == 0) { + return 1; } - var_v0 = 4; - if (gControllerPakNumPagesFree >= 0x79) { - var_v0 = -1; + ret = osPfsInit(&gSIEventMesgQueue, &D_8018E868, 0); + + if (ret) { + switch(ret) { + case PFS_ERR_NOPACK: + case PFS_ERR_DEVICE: + return 1; + case PFS_ERR_ID_FATAL: + return 2; + default: + case PFS_ERR_CONTRFAIL: + return 2; + } } - return var_v0; + + D_800E86F8 = 1; + if (osPfsFindFile(&D_8018E868, D_800E86F0, D_800E86F4, D_800F2E64, D_800F2E74, &D_8018EB84) == 0) { + return 0; + } + if (osPfsNumFiles(&D_8018E868, &D_8018EB78, &D_8018EB7C) != 0) { + return 2; + } + if (osPfsFreeBlocks(&D_8018E868, &gControllerPakNumPagesFree) != 0) { + return 2; + } + gControllerPakNumPagesFree = (s32) gControllerPakNumPagesFree >> 8; } + + if (D_8018EB7C >= D_8018EB78) { + return 4; + } + if (gControllerPakNumPagesFree >= 0x79) { + return -1; + } + return 4; } -#else -GLOBAL_ASM("asm/non_matchings/menus/func_800B5B94.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-11-2022 diff --git a/src/code_800B45E0.h b/src/code_800B45E0.h index 10b5350d3..7a52b2580 100644 --- a/src/code_800B45E0.h +++ b/src/code_800B45E0.h @@ -46,7 +46,7 @@ u8 compute_save_data_checksum_backup_1(void); u8 compute_save_data_checksum_backup_2(void); s32 validate_save_data_checksum_backup(); s32 func_800B5B2C(s32); -s32 func_800B5B94(void); +s32 controller_pak_status(void); s32 func_800B5DA4(void); s32 func_800B5F30(); s32 func_800B6014(); diff --git a/src/menus.c b/src/menus.c index 18b31e9b8..c7e8518bd 100644 --- a/src/menus.c +++ b/src/menus.c @@ -310,7 +310,7 @@ void options_menu_act(struct Controller *controller, u16 arg1) { return; case 0: func_800B6798(); - sp2C = func_800B5B94(); + sp2C = controller_pak_status(); switch (sp2C) { case -1: D_8018EDEC = 0x46;