diff --git a/asm/J2DGraph/J2DPrint.s b/asm/J2DGraph/J2DPrint.s index df7f07a8b7d..e9705c19d85 100644 --- a/asm/J2DGraph/J2DPrint.s +++ b/asm/J2DGraph/J2DPrint.s @@ -412,7 +412,7 @@ J2DPrint_NS_printReturn: /* 802F48A8 002F17E8 C0 1A 00 30 */ lfs f0, 0x30(r26) /* 802F48AC 002F17EC D0 1A 00 28 */ stfs f0, 0x28(r26) /* 802F48B0 002F17F0 7F 63 DB 78 */ mr r3, r27 -/* 802F48B4 002F17F4 48 07 43 31 */ bl func_80368BE4 +/* 802F48B4 002F17F4 48 07 43 31 */ bl strlen /* 802F48B8 002F17F8 7C 65 1B 78 */ mr r5, r3 /* 802F48BC 002F17FC 80 6D 90 08 */ lwz r3, lbl_80451588-_SDA_BASE_(r13) /* 802F48C0 002F1800 7C 05 18 40 */ cmplw r5, r3 diff --git a/asm/J2DGraph/J2DTextBox.s b/asm/J2DGraph/J2DTextBox.s index 2c89cbd20c9..d16d170b635 100644 --- a/asm/J2DGraph/J2DTextBox.s +++ b/asm/J2DGraph/J2DTextBox.s @@ -461,7 +461,7 @@ lbl_802FFCAC: /* 802FFD20 002FCC60 7F A0 07 35 */ extsh. r0, r29 /* 802FFD24 002FCC64 41 82 00 74 */ beq lbl_802FFD98 /* 802FFD28 002FCC68 7F 83 E3 78 */ mr r3, r28 -/* 802FFD2C 002FCC6C 48 06 8E B9 */ bl func_80368BE4 +/* 802FFD2C 002FCC6C 48 06 8E B9 */ bl strlen /* 802FFD30 002FCC70 57 BE 04 3E */ clrlwi r30, r29, 0x10 /* 802FFD34 002FCC74 7F A0 07 34 */ extsh r0, r29 /* 802FFD38 002FCC78 2C 00 FF FF */ cmpwi r0, -1 @@ -1130,7 +1130,7 @@ lbl_803006A0: /* 803006D8 002FD618 80 7D 01 24 */ lwz r3, 0x124(r29) /* 803006DC 002FD61C 4B FC E6 85 */ bl __dla__FPv /* 803006E0 002FD620 7F C3 F3 78 */ mr r3, r30 -/* 803006E4 002FD624 48 06 85 01 */ bl func_80368BE4 +/* 803006E4 002FD624 48 06 85 01 */ bl strlen /* 803006E8 002FD628 7C 7F 1B 78 */ mr r31, r3 /* 803006EC 002FD62C 28 1F FF FF */ cmplwi r31, 0xffff /* 803006F0 002FD630 41 80 00 0C */ blt lbl_803006FC @@ -1198,7 +1198,7 @@ lbl_80300790: /* 803007D0 002FD710 38 00 00 00 */ li r0, 0 /* 803007D4 002FD714 90 1F 01 24 */ stw r0, 0x124(r31) /* 803007D8 002FD718 7F C3 F3 78 */ mr r3, r30 -/* 803007DC 002FD71C 48 06 84 09 */ bl func_80368BE4 +/* 803007DC 002FD71C 48 06 84 09 */ bl strlen /* 803007E0 002FD720 7C 7D 1B 78 */ mr r29, r3 /* 803007E4 002FD724 57 7C 04 3E */ clrlwi r28, r27, 0x10 /* 803007E8 002FD728 7F 60 07 34 */ extsh r0, r27 diff --git a/asm/JAudio2/JASWaveArcLoader.s b/asm/JAudio2/JASWaveArcLoader.s index 2ea0c73309b..dd9d7d45fb8 100644 --- a/asm/JAudio2/JASWaveArcLoader.s +++ b/asm/JAudio2/JASWaveArcLoader.s @@ -31,7 +31,7 @@ JASWaveArcLoader_NS_setCurrentDir: /* 8029A0E8 00297028 48 0C EA 45 */ bl strcpy /* 8029A0EC 0029702C 3C 60 80 3C */ lis r3, lbl_803C77E0@ha /* 8029A0F0 00297030 38 63 77 E0 */ addi r3, r3, lbl_803C77E0@l -/* 8029A0F4 00297034 48 0C EA F1 */ bl func_80368BE4 +/* 8029A0F4 00297034 48 0C EA F1 */ bl strlen /* 8029A0F8 00297038 3C 80 80 3C */ lis r4, lbl_803C77E0@ha /* 8029A0FC 0029703C 38 A4 77 E0 */ addi r5, r4, lbl_803C77E0@l /* 8029A100 00297040 7C 85 1A 14 */ add r4, r5, r3 @@ -493,10 +493,10 @@ JASWaveArc_NS_setFileName: /* 8029A724 00297664 7C 9C 23 78 */ mr r28, r4 /* 8029A728 00297668 4B FF FA 09 */ bl JASWaveArcLoader_NS_getCurrentDir /* 8029A72C 0029766C 7C 7E 1B 78 */ mr r30, r3 -/* 8029A730 00297670 48 0C E4 B5 */ bl func_80368BE4 +/* 8029A730 00297670 48 0C E4 B5 */ bl strlen /* 8029A734 00297674 7C 7F 1B 78 */ mr r31, r3 /* 8029A738 00297678 7F 83 E3 78 */ mr r3, r28 -/* 8029A73C 0029767C 48 0C E4 A9 */ bl func_80368BE4 +/* 8029A73C 0029767C 48 0C E4 A9 */ bl strlen /* 8029A740 00297680 7F FF 1A 14 */ add r31, r31, r3 /* 8029A744 00297684 4B FF 63 7D */ bl JASKernel_NS_getSystemHeap /* 8029A748 00297688 7C 64 1B 78 */ mr r4, r3 @@ -508,7 +508,7 @@ JASWaveArc_NS_setFileName: /* 8029A760 002976A0 48 0C E3 CD */ bl strcpy /* 8029A764 002976A4 7F A3 EB 78 */ mr r3, r29 /* 8029A768 002976A8 7F 84 E3 78 */ mr r4, r28 -/* 8029A76C 002976AC 48 0C E3 51 */ bl func_80368ABC +/* 8029A76C 002976AC 48 0C E3 51 */ bl strcat /* 8029A770 002976B0 38 00 00 00 */ li r0, 0 /* 8029A774 002976B4 7C 1D F9 AE */ stbx r0, r29, r31 /* 8029A778 002976B8 7F A3 EB 78 */ mr r3, r29 diff --git a/asm/JUtility/JUTAssert.s b/asm/JUtility/JUTAssert.s index cd16a770c4c..06969847a67 100644 --- a/asm/JUtility/JUTAssert.s +++ b/asm/JUtility/JUTAssert.s @@ -119,7 +119,7 @@ JUTAssertion_NS_flushMessage_dbPrint: /* 802E4AE8 002E1A28 4B FF A2 89 */ bl setCharColor__7JUTFontF6TColor /* 802E4AEC 002E1A2C 3C 60 80 43 */ lis r3, lbl_80434870@ha /* 802E4AF0 002E1A30 38 63 48 70 */ addi r3, r3, lbl_80434870@l -/* 802E4AF4 002E1A34 48 08 40 F1 */ bl func_80368BE4 +/* 802E4AF4 002E1A34 48 08 40 F1 */ bl strlen /* 802E4AF8 002E1A38 7C 7E 1B 78 */ mr r30, r3 /* 802E4AFC 002E1A3C 7F E3 FB 78 */ mr r3, r31 /* 802E4B00 002E1A40 81 9F 00 00 */ lwz r12, 0(r31) @@ -156,7 +156,7 @@ JUTAssertion_NS_flushMessage_dbPrint: /* 802E4B7C 002E1ABC 4B FF A2 AD */ bl drawString_size_scale__7JUTFontFffffPcUlb /* 802E4B80 002E1AC0 3C 60 80 43 */ lis r3, lbl_804348B0@ha /* 802E4B84 002E1AC4 38 63 48 B0 */ addi r3, r3, lbl_804348B0@l -/* 802E4B88 002E1AC8 48 08 40 5D */ bl func_80368BE4 +/* 802E4B88 002E1AC8 48 08 40 5D */ bl strlen /* 802E4B8C 002E1ACC 7C 7E 1B 78 */ mr r30, r3 /* 802E4B90 002E1AD0 7F E3 FB 78 */ mr r3, r31 /* 802E4B94 002E1AD4 81 9F 00 00 */ lwz r12, 0(r31) diff --git a/asm/JUtility/JUTConsole.s b/asm/JUtility/JUTConsole.s index dc9338b830e..b2940717c70 100644 --- a/asm/JUtility/JUTConsole.s +++ b/asm/JUtility/JUTConsole.s @@ -518,7 +518,7 @@ lbl_802E7A40: /* 802E7AB8 002E49F8 EF C0 10 28 */ fsubs f30, f0, f2 /* 802E7ABC 002E49FC 82 99 00 4C */ lwz r20, 0x4c(r25) /* 802E7AC0 002E4A00 7F A3 EB 78 */ mr r3, r29 -/* 802E7AC4 002E4A04 48 08 11 21 */ bl func_80368BE4 +/* 802E7AC4 002E4A04 48 08 11 21 */ bl strlen /* 802E7AC8 002E4A08 7C 65 1B 78 */ mr r5, r3 /* 802E7ACC 002E4A0C 7E 83 A3 78 */ mr r3, r20 /* 802E7AD0 002E4A10 FC 20 F0 90 */ fmr f1, f30 diff --git a/asm/JUtility/JUTException.s b/asm/JUtility/JUTException.s index baa570dc8fb..538d231bb4a 100644 --- a/asm/JUtility/JUTException.s +++ b/asm/JUtility/JUTException.s @@ -2224,7 +2224,7 @@ JUTException_NS_queryMapAddress: /* 802E3BEC 002E0B2C 3C 80 80 3A */ lis r4, lbl_8039D490@ha /* 802E3BF0 002E0B30 38 84 D4 90 */ addi r4, r4, lbl_8039D490@l /* 802E3BF4 002E0B34 38 84 04 E9 */ addi r4, r4, 0x4e9 -/* 802E3BF8 002E0B38 48 08 4E C5 */ bl func_80368ABC +/* 802E3BF8 002E0B38 48 08 4E C5 */ bl strcat /* 802E3BFC 002E0B3C 93 E1 00 08 */ stw r31, 8(r1) /* 802E3C00 002E0B40 38 61 00 10 */ addi r3, r1, 0x10 /* 802E3C04 002E0B44 7F 04 C3 78 */ mr r4, r24 diff --git a/asm/card/CARDCreate.s b/asm/card/CARDCreate.s index b1de4a2ccb3..80250f21eb3 100644 --- a/asm/card/CARDCreate.s +++ b/asm/card/CARDCreate.s @@ -96,7 +96,7 @@ CARDCreateAsync: /* 80358254 00355194 3B 86 00 00 */ addi r28, r6, 0 /* 80358258 00355198 3B A7 00 00 */ addi r29, r7, 0 /* 8035825C 0035519C 38 7A 00 00 */ addi r3, r26, 0 -/* 80358260 003551A0 48 01 09 85 */ bl func_80368BE4 +/* 80358260 003551A0 48 01 09 85 */ bl strlen /* 80358264 003551A4 28 03 00 20 */ cmplwi r3, 0x20 /* 80358268 003551A8 40 81 00 0C */ ble lbl_80358274 /* 8035826C 003551AC 38 60 FF F4 */ li r3, -12 diff --git a/asm/clib.s b/asm/clib.s index 0fead46f65d..61afe7c6396 100644 --- a/asm/clib.s +++ b/asm/clib.s @@ -6024,7 +6024,7 @@ lbl_80366A60: /* 80366A6C 003639AC 7C 79 1B 79 */ or. r25, r3, r3 /* 80366A70 003639B0 40 82 00 3C */ bne lbl_80366AAC /* 80366A74 003639B4 7F 43 D3 78 */ mr r3, r26 -/* 80366A78 003639B8 48 00 21 6D */ bl func_80368BE4 +/* 80366A78 003639B8 48 00 21 6D */ bl strlen /* 80366A7C 003639BC 7C 65 1B 79 */ or. r5, r3, r3 /* 80366A80 003639C0 7F 7B 2A 14 */ add r27, r27, r5 /* 80366A84 003639C4 41 82 07 00 */ beq lbl_80367184 @@ -6373,7 +6373,7 @@ lbl_80366F20: /* 80366F4C 00363E8C 48 00 00 EC */ b lbl_80367038 lbl_80366F50: /* 80366F50 00363E90 7E 83 A3 78 */ mr r3, r20 -/* 80366F54 00363E94 48 00 1C 91 */ bl func_80368BE4 +/* 80366F54 00363E94 48 00 1C 91 */ bl strlen /* 80366F58 00363E98 7C 79 1B 78 */ mr r25, r3 /* 80366F5C 00363E9C 48 00 00 DC */ b lbl_80367038 lbl_80366F60: @@ -6424,7 +6424,7 @@ lbl_80366FE4: /* 80366FF4 00363F34 48 00 00 44 */ b lbl_80367038 lbl_80366FF8: /* 80366FF8 00363F38 7F 23 CB 78 */ mr r3, r25 -/* 80366FFC 00363F3C 48 00 1B E9 */ bl func_80368BE4 +/* 80366FFC 00363F3C 48 00 1B E9 */ bl strlen /* 80367000 00363F40 7C 65 1B 79 */ or. r5, r3, r3 /* 80367004 00363F44 7F 7B 2A 14 */ add r27, r27, r5 /* 80367008 00363F48 41 82 00 28 */ beq lbl_80367030 @@ -8259,8 +8259,8 @@ lbl_803688C4: /* 803688D4 00365814 38 21 00 10 */ addi r1, r1, 0x10 /* 803688D8 00365818 4E 80 00 20 */ blr -.global func_803688DC -func_803688DC: +.global strrchr +strrchr: /* 803688DC 0036581C 38 A3 FF FF */ addi r5, r3, -1 /* 803688E0 00365820 54 80 06 3E */ clrlwi r0, r4, 0x18 /* 803688E4 00365824 38 60 00 00 */ li r3, 0 @@ -8413,8 +8413,8 @@ lbl_80368AAC: /* 80368AB4 003659F4 38 60 00 00 */ li r3, 0 /* 80368AB8 003659F8 4E 80 00 20 */ blr -.global func_80368ABC -func_80368ABC: +.global strcat +strcat: /* 80368ABC 003659FC 38 84 FF FF */ addi r4, r4, -1 /* 80368AC0 00365A00 38 A3 FF FF */ addi r5, r3, -1 lbl_80368AC4: @@ -8508,8 +8508,8 @@ lbl_80368BD0: /* 80368BDC 00365B1C 40 82 FF F4 */ bne lbl_80368BD0 /* 80368BE0 00365B20 4E 80 00 20 */ blr -.global func_80368BE4 -func_80368BE4: +.global strlen +strlen: /* 80368BE4 00365B24 38 83 FF FF */ addi r4, r3, -1 /* 80368BE8 00365B28 38 60 FF FF */ li r3, -1 lbl_80368BEC: @@ -15781,12 +15781,12 @@ func_8036EF7C: /* 8036EFB4 0036BEF4 90 7C 00 00 */ stw r3, 0(r28) /* 8036EFB8 0036BEF8 7F 63 DB 78 */ mr r3, r27 /* 8036EFBC 0036BEFC 98 01 00 18 */ stb r0, 0x18(r1) -/* 8036EFC0 0036BF00 4B FF 9C 25 */ bl func_80368BE4 +/* 8036EFC0 0036BF00 4B FF 9C 25 */ bl strlen /* 8036EFC4 0036BF04 38 03 00 41 */ addi r0, r3, 0x41 /* 8036EFC8 0036BF08 9B E1 00 1C */ stb r31, 0x1c(r1) /* 8036EFCC 0036BF0C 7F 63 DB 78 */ mr r3, r27 /* 8036EFD0 0036BF10 90 01 00 14 */ stw r0, 0x14(r1) -/* 8036EFD4 0036BF14 4B FF 9C 11 */ bl func_80368BE4 +/* 8036EFD4 0036BF14 4B FF 9C 11 */ bl strlen /* 8036EFD8 0036BF18 38 03 00 01 */ addi r0, r3, 1 /* 8036EFDC 0036BF1C 38 61 00 0C */ addi r3, r1, 0xc /* 8036EFE0 0036BF20 B0 01 00 20 */ sth r0, 0x20(r1) @@ -15799,7 +15799,7 @@ func_8036EF7C: /* 8036EFFC 0036BF3C 7C 7F 1B 79 */ or. r31, r3, r3 /* 8036F000 0036BF40 40 82 00 24 */ bne lbl_8036F024 /* 8036F004 0036BF44 7F 63 DB 78 */ mr r3, r27 -/* 8036F008 0036BF48 4B FF 9B DD */ bl func_80368BE4 +/* 8036F008 0036BF48 4B FF 9B DD */ bl strlen /* 8036F00C 0036BF4C 7C 65 1B 78 */ mr r5, r3 /* 8036F010 0036BF50 80 61 00 08 */ lwz r3, 8(r1) /* 8036F014 0036BF54 7F 64 DB 78 */ mr r4, r27 diff --git a/asm/d/a/d_a_npc.s b/asm/d/a/d_a_npc.s index ee6a9d75629..7ca3dd6bbbc 100644 --- a/asm/d/a/d_a_npc.s +++ b/asm/d/a/d_a_npc.s @@ -5084,7 +5084,7 @@ lbl_8014A0A0: /* 8014A0C8 00147008 A0 1F 0E 30 */ lhz r0, 0xe30(r31) /* 8014A0CC 0014700C 54 00 18 38 */ slwi r0, r0, 3 /* 8014A0D0 00147010 7C 63 00 2E */ lwzx r3, r3, r0 -/* 8014A0D4 00147014 48 21 EB 11 */ bl func_80368BE4 +/* 8014A0D4 00147014 48 21 EB 11 */ bl strlen /* 8014A0D8 00147018 28 03 00 00 */ cmplwi r3, 0 /* 8014A0DC 0014701C 41 82 00 B8 */ beq lbl_8014A194 /* 8014A0E0 00147020 80 9F 05 74 */ lwz r4, 0x574(r31) @@ -5095,7 +5095,7 @@ lbl_8014A0A0: /* 8014A0F4 00147034 80 03 00 04 */ lwz r0, 4(r3) /* 8014A0F8 00147038 54 00 10 3A */ slwi r0, r0, 2 /* 8014A0FC 0014703C 7C 64 00 2E */ lwzx r3, r4, r0 -/* 8014A100 00147040 48 21 EA E5 */ bl func_80368BE4 +/* 8014A100 00147040 48 21 EA E5 */ bl strlen /* 8014A104 00147044 28 03 00 00 */ cmplwi r3, 0 /* 8014A108 00147048 41 82 00 3C */ beq lbl_8014A144 /* 8014A10C 0014704C 80 9F 05 74 */ lwz r4, 0x574(r31) @@ -5187,7 +5187,7 @@ daNpcT_c_NS_evtChange: /* 8014A240 00147180 A0 1F 0E 30 */ lhz r0, 0xe30(r31) /* 8014A244 00147184 54 00 18 38 */ slwi r0, r0, 3 /* 8014A248 00147188 7C 63 00 2E */ lwzx r3, r3, r0 -/* 8014A24C 0014718C 48 21 E9 99 */ bl func_80368BE4 +/* 8014A24C 0014718C 48 21 E9 99 */ bl strlen /* 8014A250 00147190 28 03 00 00 */ cmplwi r3, 0 /* 8014A254 00147194 41 82 00 B8 */ beq lbl_8014A30C /* 8014A258 00147198 80 9F 05 74 */ lwz r4, 0x574(r31) @@ -5198,7 +5198,7 @@ daNpcT_c_NS_evtChange: /* 8014A26C 001471AC 80 03 00 04 */ lwz r0, 4(r3) /* 8014A270 001471B0 54 00 10 3A */ slwi r0, r0, 2 /* 8014A274 001471B4 7C 64 00 2E */ lwzx r3, r4, r0 -/* 8014A278 001471B8 48 21 E9 6D */ bl func_80368BE4 +/* 8014A278 001471B8 48 21 E9 6D */ bl strlen /* 8014A27C 001471BC 28 03 00 00 */ cmplwi r3, 0 /* 8014A280 001471C0 41 82 00 3C */ beq lbl_8014A2BC /* 8014A284 001471C4 80 9F 05 74 */ lwz r4, 0x574(r31) diff --git a/asm/d/d_demo.s b/asm/d/d_demo.s index 6b6da0e2b91..cd781fd47f2 100644 --- a/asm/d/d_demo.s +++ b/asm/d/d_demo.s @@ -771,7 +771,7 @@ lbl_80038860: /* 80038880 000357C0 48 00 00 18 */ b lbl_80038898 lbl_80038884: /* 80038884 000357C4 7F E3 FB 78 */ mr r3, r31 -/* 80038888 000357C8 48 33 03 5D */ bl func_80368BE4 +/* 80038888 000357C8 48 33 03 5D */ bl strlen /* 8003888C 000357CC 7F E3 FA 14 */ add r31, r3, r31 /* 80038890 000357D0 3B FF 00 01 */ addi r31, r31, 1 /* 80038894 000357D4 3B DE 00 01 */ addi r30, r30, 1 diff --git a/asm/d/d_event.s b/asm/d/d_event.s index d3664233f6d..31f1b266609 100644 --- a/asm/d/d_event.s +++ b/asm/d/d_event.s @@ -1334,7 +1334,7 @@ lbl_80042698: /* 800426A8 0003F5E8 3C 80 80 38 */ lis r4, lbl_80379D80@ha /* 800426AC 0003F5EC 38 84 9D 80 */ addi r4, r4, lbl_80379D80@l /* 800426B0 0003F5F0 38 84 00 43 */ addi r4, r4, 0x43 -/* 800426B4 0003F5F4 48 32 64 09 */ bl func_80368ABC +/* 800426B4 0003F5F4 48 32 64 09 */ bl strcat /* 800426B8 0003F5F8 38 7E 4F F8 */ addi r3, r30, 0x4ff8 /* 800426BC 0003F5FC 38 81 00 08 */ addi r4, r1, 8 /* 800426C0 0003F600 38 A0 00 FF */ li r5, 0xff @@ -1431,7 +1431,7 @@ lbl_800427F4: /* 80042804 0003F744 3C 80 80 38 */ lis r4, lbl_80379D80@ha /* 80042808 0003F748 38 84 9D 80 */ addi r4, r4, lbl_80379D80@l /* 8004280C 0003F74C 38 84 00 43 */ addi r4, r4, 0x43 -/* 80042810 0003F750 48 32 62 AD */ bl func_80368ABC +/* 80042810 0003F750 48 32 62 AD */ bl strcat /* 80042814 0003F754 38 7E 4F F8 */ addi r3, r30, 0x4ff8 /* 80042818 0003F758 38 81 00 08 */ addi r4, r1, 8 /* 8004281C 0003F75C 38 A0 00 FF */ li r5, 0xff diff --git a/asm/d/d_name.s b/asm/d/d_name.s index 5e6b7d0add4..bcb33bab455 100644 --- a/asm/d/d_name.s +++ b/asm/d/d_name.s @@ -2125,13 +2125,13 @@ lbl_8025021C: /* 80250224 0024D164 48 11 89 09 */ bl strcpy /* 80250228 0024D168 38 61 00 08 */ addi r3, r1, 8 /* 8025022C 0024D16C 7C 9D F8 2E */ lwzx r4, r29, r31 -/* 80250230 0024D170 48 11 88 8D */ bl func_80368ABC +/* 80250230 0024D170 48 11 88 8D */ bl strcat /* 80250234 0024D174 38 61 00 08 */ addi r3, r1, 8 /* 80250238 0024D178 38 9E 02 BC */ addi r4, r30, 0x2bc -/* 8025023C 0024D17C 48 11 88 81 */ bl func_80368ABC +/* 8025023C 0024D17C 48 11 88 81 */ bl strcat /* 80250240 0024D180 38 61 00 08 */ addi r3, r1, 8 /* 80250244 0024D184 7C 9D F8 2E */ lwzx r4, r29, r31 -/* 80250248 0024D188 48 11 88 75 */ bl func_80368ABC +/* 80250248 0024D188 48 11 88 75 */ bl strcat /* 8025024C 0024D18C 38 1F 01 78 */ addi r0, r31, 0x178 /* 80250250 0024D190 7C 7B 00 2E */ lwzx r3, r27, r0 /* 80250254 0024D194 38 81 00 08 */ addi r4, r1, 8 diff --git a/asm/d/d_resorce.s b/asm/d/d_resorce.s index 300fa87cd34..ce60b0b3143 100644 --- a/asm/d/d_resorce.s +++ b/asm/d/d_resorce.s @@ -1286,7 +1286,7 @@ lbl_8003B420: /* 8003B448 00038388 54 00 02 3E */ clrlwi r0, r0, 8 /* 8003B44C 0003838C 7F 43 02 14 */ add r26, r3, r0 /* 8003B450 00038390 7F 43 D3 78 */ mr r3, r26 -/* 8003B454 00038394 48 32 D7 91 */ bl func_80368BE4 +/* 8003B454 00038394 48 32 D7 91 */ bl strlen /* 8003B458 00038398 3B 63 FF FC */ addi r27, r3, -4 /* 8003B45C 0003839C 38 61 00 08 */ addi r3, r1, 8 /* 8003B460 000383A0 7F 44 D3 78 */ mr r4, r26 @@ -1718,7 +1718,7 @@ lbl_8003B9EC: /* 8003BA18 00038958 80 03 00 54 */ lwz r0, 0x54(r3) /* 8003BA1C 0003895C 7F 20 22 14 */ add r25, r0, r4 /* 8003BA20 00038960 7F 23 CB 78 */ mr r3, r25 -/* 8003BA24 00038964 48 32 D1 C1 */ bl func_80368BE4 +/* 8003BA24 00038964 48 32 D1 C1 */ bl strlen /* 8003BA28 00038968 3B 03 FF FC */ addi r24, r3, -4 /* 8003BA2C 0003896C 38 61 00 08 */ addi r3, r1, 8 /* 8003BA30 00038970 7F 24 CB 78 */ mr r4, r25 diff --git a/asm/d/menu/d_menu_insect.s b/asm/d/menu/d_menu_insect.s index 958f95fc9f7..d70550fac1f 100644 --- a/asm/d/menu/d_menu_insect.s +++ b/asm/d/menu/d_menu_insect.s @@ -1084,7 +1084,7 @@ lbl_801D909C: /* 801D90CC 001D600C 48 18 D4 F1 */ bl func_803665BC /* 801D90D0 001D6010 38 61 00 38 */ addi r3, r1, 0x38 /* 801D90D4 001D6014 38 81 00 78 */ addi r4, r1, 0x78 -/* 801D90D8 001D6018 48 18 F9 E5 */ bl func_80368ABC +/* 801D90D8 001D6018 48 18 F9 E5 */ bl strcat /* 801D90DC 001D601C 38 61 00 18 */ addi r3, r1, 0x18 /* 801D90E0 001D6020 38 80 00 20 */ li r4, 0x20 /* 801D90E4 001D6024 3C A0 80 39 */ lis r5, lbl_803968C0@ha @@ -1100,7 +1100,7 @@ lbl_801D909C: /* 801D910C 001D604C 48 18 D4 B1 */ bl func_803665BC /* 801D9110 001D6050 38 61 00 18 */ addi r3, r1, 0x18 /* 801D9114 001D6054 38 81 00 58 */ addi r4, r1, 0x58 -/* 801D9118 001D6058 48 18 F9 A5 */ bl func_80368ABC +/* 801D9118 001D6058 48 18 F9 A5 */ bl strcat /* 801D911C 001D605C 80 7F 00 1C */ lwz r3, 0x1c(r31) /* 801D9120 001D6060 3C 80 80 39 */ lis r4, lbl_803968C0@ha /* 801D9124 001D6064 38 84 68 C0 */ addi r4, r4, lbl_803968C0@l diff --git a/asm/d/menu/item/d_menu_item_explain.s b/asm/d/menu/item/d_menu_item_explain.s index 3f87ffb7f53..f4e1fbdc5c8 100644 --- a/asm/d/menu/item/d_menu_item_explain.s +++ b/asm/d/menu/item/d_menu_item_explain.s @@ -1599,7 +1599,7 @@ lbl_801DBE2C: /* 801DBE5C 001D8D9C 48 18 A7 61 */ bl func_803665BC /* 801DBE60 001D8DA0 38 61 00 2C */ addi r3, r1, 0x2c /* 801DBE64 001D8DA4 38 81 00 10 */ addi r4, r1, 0x10 -/* 801DBE68 001D8DA8 48 18 CC 55 */ bl func_80368ABC +/* 801DBE68 001D8DA8 48 18 CC 55 */ bl strcat /* 801DBE6C 001D8DAC 38 61 00 18 */ addi r3, r1, 0x18 /* 801DBE70 001D8DB0 38 80 00 14 */ li r4, 0x14 /* 801DBE74 001D8DB4 3C A0 80 39 */ lis r5, lbl_80396990@ha @@ -1615,7 +1615,7 @@ lbl_801DBE2C: /* 801DBE9C 001D8DDC 48 18 A7 21 */ bl func_803665BC /* 801DBEA0 001D8DE0 38 61 00 18 */ addi r3, r1, 0x18 /* 801DBEA4 001D8DE4 38 81 00 08 */ addi r4, r1, 8 -/* 801DBEA8 001D8DE8 48 18 CC 15 */ bl func_80368ABC +/* 801DBEA8 001D8DE8 48 18 CC 15 */ bl strcat /* 801DBEAC 001D8DEC 80 7F 00 9C */ lwz r3, 0x9c(r31) /* 801DBEB0 001D8DF0 3C 80 80 39 */ lis r4, lbl_80396990@ha /* 801DBEB4 001D8DF4 38 84 69 90 */ addi r4, r4, lbl_80396990@l diff --git a/asm/d/msg/d_msg_class.s b/asm/d/msg/d_msg_class.s index b8ec0a7cb37..69c9d95b125 100644 --- a/asm/d/msg/d_msg_class.s +++ b/asm/d/msg/d_msg_class.s @@ -5285,7 +5285,7 @@ lbl_8022D008: /* 8022D030 00229F70 38 63 10 1C */ addi r3, r3, 0x101c /* 8022D034 00229F74 7C 7E 1A 14 */ add r3, r30, r3 /* 8022D038 00229F78 38 81 00 08 */ addi r4, r1, 8 -/* 8022D03C 00229F7C 48 13 BA 81 */ bl func_80368ABC +/* 8022D03C 00229F7C 48 13 BA 81 */ bl strcat /* 8022D040 00229F80 48 00 00 1C */ b lbl_8022D05C lbl_8022D044: /* 8022D044 00229F84 28 00 00 03 */ cmplwi r0, 3 @@ -5293,7 +5293,7 @@ lbl_8022D044: /* 8022D04C 00229F8C 38 7F 10 1C */ addi r3, r31, 0x101c /* 8022D050 00229F90 7C 7E 1A 14 */ add r3, r30, r3 /* 8022D054 00229F94 38 81 00 08 */ addi r4, r1, 8 -/* 8022D058 00229F98 48 13 BA 65 */ bl func_80368ABC +/* 8022D058 00229F98 48 13 BA 65 */ bl strcat lbl_8022D05C: /* 8022D05C 00229F9C 3B BD 00 01 */ addi r29, r29, 1 /* 8022D060 00229FA0 3B FF 00 32 */ addi r31, r31, 0x32 @@ -7386,7 +7386,7 @@ jmessage_tRenderingProcessor_NS_do_strcat: /* 8022EF40 0022BE80 40 82 01 F0 */ bne lbl_8022F130 lbl_8022EF44: /* 8022EF44 0022BE84 7F A3 EB 78 */ mr r3, r29 -/* 8022EF48 0022BE88 48 13 9C 9D */ bl func_80368BE4 +/* 8022EF48 0022BE88 48 13 9C 9D */ bl strlen /* 8022EF4C 0022BE8C 80 1C 01 1C */ lwz r0, 0x11c(r28) /* 8022EF50 0022BE90 7C 00 1A 14 */ add r0, r0, r3 /* 8022EF54 0022BE94 90 1C 01 1C */ stw r0, 0x11c(r28) @@ -7401,7 +7401,7 @@ lbl_8022EF44: /* 8022EF78 0022BEB8 38 63 10 1C */ addi r3, r3, 0x101c /* 8022EF7C 0022BEBC 7C 7F 1A 14 */ add r3, r31, r3 /* 8022EF80 0022BEC0 7F A4 EB 78 */ mr r4, r29 -/* 8022EF84 0022BEC4 48 13 9B 39 */ bl func_80368ABC +/* 8022EF84 0022BEC4 48 13 9B 39 */ bl strcat /* 8022EF88 0022BEC8 48 00 01 A8 */ b lbl_8022F130 lbl_8022EF8C: /* 8022EF8C 0022BECC 80 1C 01 1C */ lwz r0, 0x11c(r28) @@ -7455,7 +7455,7 @@ lbl_8022F02C: /* 8022F03C 0022BF7C 38 00 00 00 */ li r0, 0 /* 8022F040 0022BF80 7C 03 21 AE */ stbx r0, r3, r4 /* 8022F044 0022BF84 38 9C 01 84 */ addi r4, r28, 0x184 -/* 8022F048 0022BF88 48 13 9A 75 */ bl func_80368ABC +/* 8022F048 0022BF88 48 13 9A 75 */ bl strcat lbl_8022F04C: /* 8022F04C 0022BF8C A0 9C 01 4A */ lhz r4, 0x14a(r28) /* 8022F050 0022BF90 28 04 00 00 */ cmplwi r4, 0 @@ -7464,7 +7464,7 @@ lbl_8022F04C: /* 8022F05C 0022BF9C 38 00 00 00 */ li r0, 0 /* 8022F060 0022BFA0 7C 03 21 AE */ stbx r0, r3, r4 /* 8022F064 0022BFA4 38 9C 01 84 */ addi r4, r28, 0x184 -/* 8022F068 0022BFA8 48 13 9A 55 */ bl func_80368ABC +/* 8022F068 0022BFA8 48 13 9A 55 */ bl strcat lbl_8022F06C: /* 8022F06C 0022BFAC C0 1F 04 64 */ lfs f0, 0x464(r31) /* 8022F070 0022BFB0 FC 00 00 1E */ fctiwz f0, f0 @@ -7481,26 +7481,26 @@ lbl_8022F06C: /* 8022F09C 0022BFDC 4C C6 31 82 */ crclr 6 /* 8022F0A0 0022BFE0 48 13 74 3D */ bl func_803664DC /* 8022F0A4 0022BFE4 38 61 00 08 */ addi r3, r1, 8 -/* 8022F0A8 0022BFE8 48 13 9B 3D */ bl func_80368BE4 +/* 8022F0A8 0022BFE8 48 13 9B 3D */ bl strlen /* 8022F0AC 0022BFEC 80 1C 01 1C */ lwz r0, 0x11c(r28) /* 8022F0B0 0022BFF0 7C 00 1A 14 */ add r0, r0, r3 /* 8022F0B4 0022BFF4 2C 00 02 00 */ cmpwi r0, 0x200 /* 8022F0B8 0022BFF8 40 80 00 58 */ bge lbl_8022F110 /* 8022F0BC 0022BFFC 38 7F 0A 1C */ addi r3, r31, 0xa1c -/* 8022F0C0 0022C000 48 13 9B 25 */ bl func_80368BE4 +/* 8022F0C0 0022C000 48 13 9B 25 */ bl strlen /* 8022F0C4 0022C004 B0 7C 01 48 */ sth r3, 0x148(r28) /* 8022F0C8 0022C008 38 7F 0C 1C */ addi r3, r31, 0xc1c -/* 8022F0CC 0022C00C 48 13 9B 19 */ bl func_80368BE4 +/* 8022F0CC 0022C00C 48 13 9B 19 */ bl strlen /* 8022F0D0 0022C010 B0 7C 01 4A */ sth r3, 0x14a(r28) /* 8022F0D4 0022C014 38 7C 01 84 */ addi r3, r28, 0x184 /* 8022F0D8 0022C018 7F A4 EB 78 */ mr r4, r29 /* 8022F0DC 0022C01C 48 13 9A 51 */ bl strcpy /* 8022F0E0 0022C020 38 7F 0A 1C */ addi r3, r31, 0xa1c /* 8022F0E4 0022C024 38 81 00 08 */ addi r4, r1, 8 -/* 8022F0E8 0022C028 48 13 99 D5 */ bl func_80368ABC +/* 8022F0E8 0022C028 48 13 99 D5 */ bl strcat /* 8022F0EC 0022C02C 38 7F 0C 1C */ addi r3, r31, 0xc1c /* 8022F0F0 0022C030 38 81 00 08 */ addi r4, r1, 8 -/* 8022F0F4 0022C034 48 13 99 C9 */ bl func_80368ABC +/* 8022F0F4 0022C034 48 13 99 C9 */ bl strcat /* 8022F0F8 0022C038 48 00 00 18 */ b lbl_8022F110 lbl_8022F0FC: /* 8022F0FC 0022C03C 57 60 06 3F */ clrlwi. r0, r27, 0x18 @@ -7511,12 +7511,12 @@ lbl_8022F0FC: lbl_8022F110: /* 8022F110 0022C050 38 7F 0A 1C */ addi r3, r31, 0xa1c /* 8022F114 0022C054 7F A4 EB 78 */ mr r4, r29 -/* 8022F118 0022C058 48 13 99 A5 */ bl func_80368ABC +/* 8022F118 0022C058 48 13 99 A5 */ bl strcat /* 8022F11C 0022C05C 57 C0 06 3F */ clrlwi. r0, r30, 0x18 /* 8022F120 0022C060 41 82 00 10 */ beq lbl_8022F130 /* 8022F124 0022C064 38 7F 0C 1C */ addi r3, r31, 0xc1c /* 8022F128 0022C068 7F A4 EB 78 */ mr r4, r29 -/* 8022F12C 0022C06C 48 13 99 91 */ bl func_80368ABC +/* 8022F12C 0022C06C 48 13 99 91 */ bl strcat lbl_8022F130: /* 8022F130 0022C070 39 61 00 50 */ addi r11, r1, 0x50 /* 8022F134 0022C074 48 13 30 E9 */ bl _restgpr_26 @@ -7562,7 +7562,7 @@ lbl_8022F1A4: /* 8022F1C4 0022C104 38 7A 01 52 */ addi r3, r26, 0x152 /* 8022F1C8 0022C108 38 81 00 10 */ addi r4, r1, 0x10 /* 8022F1CC 0022C10C 3B 9C 00 02 */ addi r28, r28, 2 -/* 8022F1D0 0022C110 48 13 98 ED */ bl func_80368ABC +/* 8022F1D0 0022C110 48 13 98 ED */ bl strcat /* 8022F1D4 0022C114 88 01 00 10 */ lbz r0, 0x10(r1) /* 8022F1D8 0022C118 7C 03 07 74 */ extsb r3, r0 /* 8022F1DC 0022C11C 88 01 00 11 */ lbz r0, 0x11(r1) @@ -7727,7 +7727,7 @@ jmessage_tRenderingProcessor_NS_do_rubystrcat: /* 8022F43C 0022C37C 48 13 71 81 */ bl func_803665BC /* 8022F440 0022C380 7F C3 F3 78 */ mr r3, r30 /* 8022F444 0022C384 38 81 00 18 */ addi r4, r1, 0x18 -/* 8022F448 0022C388 48 13 96 75 */ bl func_80368ABC +/* 8022F448 0022C388 48 13 96 75 */ bl strcat /* 8022F44C 0022C38C C0 5C 01 2C */ lfs f2, 0x12c(r28) /* 8022F450 0022C390 C8 22 B0 70 */ lfd f1, lbl_80454A70-_SDA2_BASE_(r2) /* 8022F454 0022C394 6F E0 80 00 */ xoris r0, r31, 0x8000 @@ -7757,7 +7757,7 @@ lbl_8022F478: /* 8022F4B0 0022C3F0 48 13 71 0D */ bl func_803665BC /* 8022F4B4 0022C3F4 7F C3 F3 78 */ mr r3, r30 /* 8022F4B8 0022C3F8 38 81 00 08 */ addi r4, r1, 8 -/* 8022F4BC 0022C3FC 48 13 96 01 */ bl func_80368ABC +/* 8022F4BC 0022C3FC 48 13 96 01 */ bl strcat /* 8022F4C0 0022C400 C0 5C 01 2C */ lfs f2, 0x12c(r28) /* 8022F4C4 0022C404 FC 00 F0 1E */ fctiwz f0, f30 /* 8022F4C8 0022C408 D8 01 00 28 */ stfd f0, 0x28(r1) @@ -7780,7 +7780,7 @@ lbl_8022F4F4: lbl_8022F508: /* 8022F508 0022C448 7F C3 F3 78 */ mr r3, r30 /* 8022F50C 0022C44C 7F A4 EB 78 */ mr r4, r29 -/* 8022F510 0022C450 48 13 95 AD */ bl func_80368ABC +/* 8022F510 0022C450 48 13 95 AD */ bl strcat lbl_8022F514: /* 8022F514 0022C454 E3 E1 00 68 */ psq_l f31, 104(r1), 0, qr0 /* 8022F518 0022C458 CB E1 00 60 */ lfd f31, 0x60(r1) @@ -10752,7 +10752,7 @@ jmessage_string_tRenderingProcessor_NS_do_strcat: /* 80232064 0022EFA4 7C 60 07 35 */ extsh. r0, r3 /* 80232068 0022EFA8 41 80 00 30 */ blt lbl_80232098 /* 8023206C 0022EFAC 7F E3 FB 78 */ mr r3, r31 -/* 80232070 0022EFB0 48 13 6B 75 */ bl func_80368BE4 +/* 80232070 0022EFB0 48 13 6B 75 */ bl strlen /* 80232074 0022EFB4 A8 1E 05 4E */ lha r0, 0x54e(r30) /* 80232078 0022EFB8 7C 00 1A 14 */ add r0, r0, r3 /* 8023207C 0022EFBC B0 1E 05 4E */ sth r0, 0x54e(r30) @@ -10761,7 +10761,7 @@ jmessage_string_tRenderingProcessor_NS_do_strcat: /* 80232088 0022EFC8 40 80 00 10 */ bge lbl_80232098 /* 8023208C 0022EFCC 38 7E 00 54 */ addi r3, r30, 0x54 /* 80232090 0022EFD0 7F E4 FB 78 */ mr r4, r31 -/* 80232094 0022EFD4 48 13 6A 29 */ bl func_80368ABC +/* 80232094 0022EFD4 48 13 6A 29 */ bl strcat lbl_80232098: /* 80232098 0022EFD8 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8023209C 0022EFDC 83 C1 00 08 */ lwz r30, 8(r1) @@ -10820,7 +10820,7 @@ lbl_80232140: /* 80232160 0022F0A0 38 7B 04 54 */ addi r3, r27, 0x454 /* 80232164 0022F0A4 38 81 00 0C */ addi r4, r1, 0xc /* 80232168 0022F0A8 3B BD 00 02 */ addi r29, r29, 2 -/* 8023216C 0022F0AC 48 13 69 51 */ bl func_80368ABC +/* 8023216C 0022F0AC 48 13 69 51 */ bl strcat /* 80232170 0022F0B0 88 01 00 0C */ lbz r0, 0xc(r1) /* 80232174 0022F0B4 7C 03 07 74 */ extsb r3, r0 /* 80232178 0022F0B8 88 01 00 0D */ lbz r0, 0xd(r1) @@ -10897,7 +10897,7 @@ jmessage_string_tRenderingProcessor_NS_do_rubystrcat: /* 80232280 0022F1C0 7C 60 07 35 */ extsh. r0, r3 /* 80232284 0022F1C4 41 80 00 30 */ blt lbl_802322B4 /* 80232288 0022F1C8 7F E3 FB 78 */ mr r3, r31 -/* 8023228C 0022F1CC 48 13 69 59 */ bl func_80368BE4 +/* 8023228C 0022F1CC 48 13 69 59 */ bl strlen /* 80232290 0022F1D0 A8 1E 05 50 */ lha r0, 0x550(r30) /* 80232294 0022F1D4 7C 00 1A 14 */ add r0, r0, r3 /* 80232298 0022F1D8 B0 1E 05 50 */ sth r0, 0x550(r30) @@ -10906,7 +10906,7 @@ jmessage_string_tRenderingProcessor_NS_do_rubystrcat: /* 802322A4 0022F1E4 40 80 00 10 */ bge lbl_802322B4 /* 802322A8 0022F1E8 38 7E 02 54 */ addi r3, r30, 0x254 /* 802322AC 0022F1EC 7F E4 FB 78 */ mr r4, r31 -/* 802322B0 0022F1F0 48 13 68 0D */ bl func_80368ABC +/* 802322B0 0022F1F0 48 13 68 0D */ bl strcat lbl_802322B4: /* 802322B4 0022F1F4 83 E1 00 0C */ lwz r31, 0xc(r1) /* 802322B8 0022F1F8 83 C1 00 08 */ lwz r30, 8(r1) diff --git a/asm/d/msg/d_msg_unit.s b/asm/d/msg/d_msg_unit.s index 917a9b984b0..324d71f9d74 100644 --- a/asm/d/msg/d_msg_unit.s +++ b/asm/d/msg/d_msg_unit.s @@ -257,7 +257,7 @@ lbl_80238FF4: /* 8023901C 00235F5C 4B FF FC D1 */ bl dMsgUnit_c_NS_setTag /* 80239020 00235F60 7F C3 F3 78 */ mr r3, r30 /* 80239024 00235F64 38 81 00 1C */ addi r4, r1, 0x1c -/* 80239028 00235F68 48 12 FA 95 */ bl func_80368ABC +/* 80239028 00235F68 48 12 FA 95 */ bl strcat lbl_8023902C: /* 8023902C 00235F6C 2C 1C 00 04 */ cmpwi r28, 4 /* 80239030 00235F70 40 82 00 34 */ bne lbl_80239064 @@ -272,7 +272,7 @@ lbl_8023902C: /* 80239054 00235F94 4B FF FC 99 */ bl dMsgUnit_c_NS_setTag /* 80239058 00235F98 7F C3 F3 78 */ mr r3, r30 /* 8023905C 00235F9C 38 81 00 08 */ addi r4, r1, 8 -/* 80239060 00235FA0 48 12 FA 5D */ bl func_80368ABC +/* 80239060 00235FA0 48 12 FA 5D */ bl strcat lbl_80239064: /* 80239064 00235FA4 39 61 00 70 */ addi r11, r1, 0x70 /* 80239068 00235FA8 48 12 91 B5 */ bl _restgpr_26 diff --git a/asm/d/msg/scrn/d_msg_scrn_explain.s b/asm/d/msg/scrn/d_msg_scrn_explain.s index 98708623b8e..f8c61a5a929 100644 --- a/asm/d/msg/scrn/d_msg_scrn_explain.s +++ b/asm/d/msg/scrn/d_msg_scrn_explain.s @@ -1341,7 +1341,7 @@ lbl_8023DFE4: /* 8023E014 0023AF54 48 12 85 A9 */ bl func_803665BC /* 8023E018 0023AF58 38 61 00 2C */ addi r3, r1, 0x2c /* 8023E01C 0023AF5C 38 81 00 10 */ addi r4, r1, 0x10 -/* 8023E020 0023AF60 48 12 AA 9D */ bl func_80368ABC +/* 8023E020 0023AF60 48 12 AA 9D */ bl strcat /* 8023E024 0023AF64 38 61 00 18 */ addi r3, r1, 0x18 /* 8023E028 0023AF68 38 80 00 14 */ li r4, 0x14 /* 8023E02C 0023AF6C 3C A0 80 3A */ lis r5, lbl_80399910@ha @@ -1357,7 +1357,7 @@ lbl_8023DFE4: /* 8023E054 0023AF94 48 12 85 69 */ bl func_803665BC /* 8023E058 0023AF98 38 61 00 18 */ addi r3, r1, 0x18 /* 8023E05C 0023AF9C 38 81 00 08 */ addi r4, r1, 8 -/* 8023E060 0023AFA0 48 12 AA 5D */ bl func_80368ABC +/* 8023E060 0023AFA0 48 12 AA 5D */ bl strcat /* 8023E064 0023AFA4 80 7F 00 38 */ lwz r3, 0x38(r31) /* 8023E068 0023AFA8 3C 80 80 3A */ lis r4, lbl_80399910@ha /* 8023E06C 0023AFAC 38 84 99 10 */ addi r4, r4, lbl_80399910@l diff --git a/asm/os/OSExec.s b/asm/os/OSExec.s index 7622de9ab89..2d851950d23 100644 --- a/asm/os/OSExec.s +++ b/asm/os/OSExec.s @@ -28,7 +28,7 @@ lbl_8033CABC: /* 8033CACC 00339A0C 48 00 00 28 */ b lbl_8033CAF4 lbl_8033CAD0: /* 8033CAD0 00339A10 80 7C 00 00 */ lwz r3, 0(r28) -/* 8033CAD4 00339A14 48 02 C1 11 */ bl func_80368BE4 +/* 8033CAD4 00339A14 48 02 C1 11 */ bl strlen /* 8033CAD8 00339A18 38 03 00 01 */ addi r0, r3, 1 /* 8033CADC 00339A1C 80 9C 00 00 */ lwz r4, 0(r28) /* 8033CAE0 00339A20 7F 60 D8 50 */ subf r27, r0, r27 diff --git a/include/JSystem/JKernel/JKRArchive/JKRArchive.h b/include/JSystem/JKernel/JKRArchive/JKRArchive.h index bc8c61ab0f7..e51ae95d9c3 100644 --- a/include/JSystem/JKernel/JKRArchive/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive/JKRArchive.h @@ -144,7 +144,7 @@ public: /* vt[11] */ virtual bool detachResource(void*); /* override */ /* vt[12] */ virtual u32 getResSize(const void*) const; /* override */ /* vt[13] */ virtual u32 countFile(const char*) const; /* override */ - /* vt[14] */ virtual JKRArcFinder* getFirstFile(const char*) const; /* override */ + /* vt[14] */ virtual JKRFileFinder* getFirstFile(const char*) const; /* override */ /* vt[15] */ virtual u32 getExpandedResSize(const void*) const; /* vt[16] */ virtual void* fetchResource(SDIFileEntry*, u32*) = 0; /* vt[17] */ virtual void* fetchResource(void*, u32, SDIFileEntry*, u32*) = 0; diff --git a/include/JSystem/JKernel/JKRDvdFile/JKRDvdFile.h b/include/JSystem/JKernel/JKRDvdFile/JKRDvdFile.h index c2d80066910..99fe0fad5ae 100644 --- a/include/JSystem/JKernel/JKRDvdFile/JKRDvdFile.h +++ b/include/JSystem/JKernel/JKRDvdFile/JKRDvdFile.h @@ -18,19 +18,17 @@ public: void initiate(void); s32 sync(void); - int getFileID() const { return mFileInfo.start_address << 2; } - + u32 getFileID() const { return mFileInfo.start_address; } const DVDFileInfo& getFileInfo() const { return mFileInfo; } - int getStatus() { return DVDGetCommandBlockStatus(&mFileInfo.block); } public: - /* vt[03] */ virtual bool open(const char*); /* override */ - /* vt[04] */ virtual void close(void); /* override */ - /* vt[05] */ virtual s32 readData(void*, long, long); /* override */ - /* vt[06] */ virtual s32 writeData(const void*, long, long); /* override */ - /* vt[07] */ virtual s32 getFileSize(void) const; /* override */ - /* vt[08] */ virtual bool open(long); + /* vt[03] */ virtual bool open(const char*); /* override */ + /* vt[04] */ virtual void close(void); /* override */ + /* vt[05] */ virtual s32 readData(void*, s32, s32); /* override */ + /* vt[06] */ virtual s32 writeData(const void*, s32, s32); /* override */ + /* vt[07] */ virtual s32 getFileSize(void) const; /* override */ + /* vt[08] */ virtual bool open(s32); private: /* 0x00 */ // vtable diff --git a/include/JSystem/JKernel/JKRFile/JKRFile.h b/include/JSystem/JKernel/JKRFile/JKRFile.h index 6e38eb001c0..8566139d8ef 100644 --- a/include/JSystem/JKernel/JKRFile/JKRFile.h +++ b/include/JSystem/JKernel/JKRFile/JKRFile.h @@ -11,7 +11,7 @@ public: s32 read(void*, long, long); - bool isAvailable() const { return this->mIsAvailable; } + bool isAvailable() const { return mIsAvailable; } public: /* vt[03] */ virtual bool open(const char*) = 0; diff --git a/include/JSystem/JKernel/JKRFileCache/JKRFileCache.h b/include/JSystem/JKernel/JKRFileCache/JKRFileCache.h index 298b698ac48..7e582c5255d 100644 --- a/include/JSystem/JKernel/JKRFileCache/JKRFileCache.h +++ b/include/JSystem/JKernel/JKRFileCache/JKRFileCache.h @@ -9,52 +9,55 @@ class JKRFileCache : public JKRFileLoader { public: class CCacheBlock { public: - CCacheBlock(u32, u32, void const*); + CCacheBlock(u32, u32, const void*); + ~CCacheBlock() {} - private: - JSULink mLink; - u32 field_0x10; - u32 mFileId; - u32 mFileSize; - void const* mMemoryPtr; + public: + /* 0x00 */ JSULink mCacheBlockLink; + /* 0x10 */ u32 mReferenceCount; + /* 0x14 */ u32 mFileId; + /* 0x18 */ u32 mFileSize; + /* 0x1C */ void* mMemoryPtr; }; protected: - JKRFileCache(char const*, char const*); + JKRFileCache(const char*, const char*); virtual ~JKRFileCache(); - void findCacheBlock(void const*) const; - void findCacheBlock(u32) const; - void findFile(char*, char const*) const; - void getDvdPathName(char const*) const; + CCacheBlock* findCacheBlock(const void*) const; + CCacheBlock* findCacheBlock(u32) const; + bool findFile(char*, const char*) const; + char* getDvdPathName(const char*) const; void convStrLower(char*) const; public: - /* vt[04] */ virtual void becomeCurrent(char const*); /* override */ - /* vt[05] */ virtual void* getResource(char const*); /* override */ - /* vt[06] */ virtual void* getResource(u32, char const*); /* override */ - /* vt[07] */ virtual void readResource(void*, u32, char const*); /* override */ - /* vt[08] */ virtual void readResource(void*, u32, u32, char const*); /* override */ - /* vt[09] */ virtual void removeResourceAll(void); /* override */ - /* vt[10] */ virtual bool removeResource(void*); /* override */ - /* vt[11] */ virtual bool detachResource(void*); /* override */ - /* vt[12] */ virtual void getResSize(void const*) const; /* override */ - /* vt[13] */ virtual void countFile(char const*) const; /* override */ - /* vt[14] */ virtual void getFirstFile(char const*) const; /* override */ - /* vt[15] */ virtual void getFsResource(char const*); - /* vt[16] */ virtual void getNameResource(u32, char const*); - /* vt[17] */ virtual void readFsResource(void*, u32, char const*); - /* vt[18] */ virtual void readNameResource(void*, u32, u32, char const*); + /* vt[04] */ virtual bool becomeCurrent(const char*); /* override */ + /* vt[05] */ virtual void* getResource(const char*); /* override */ + /* vt[06] */ virtual void* getResource(u32, const char*); /* override */ + /* vt[07] */ virtual u32 readResource(void*, u32, const char*); /* override */ + /* vt[08] */ virtual u32 readResource(void*, u32, u32, const char*); /* override */ + /* vt[09] */ virtual void removeResourceAll(void); /* override */ + /* vt[10] */ virtual bool removeResource(void*); /* override */ + /* vt[11] */ virtual bool detachResource(void*); /* override */ + /* vt[12] */ virtual u32 getResSize(const void*) const; /* override */ + /* vt[13] */ virtual u32 countFile(const char*) const; /* override */ + /* vt[14] */ virtual JKRFileFinder* getFirstFile(const char*) const; /* override */ + /* vt[15] */ virtual void* getFsResource(const char*); + /* vt[16] */ virtual void* getNameResource(u32, const char*); + /* vt[17] */ virtual u32 readFsResource(void*, u32, const char*); + /* vt[18] */ virtual u32 readNameResource(void*, u32, u32, const char*); private: - JKRHeap* mParentHeap; - JSUList mCacheBlockList; - char* field_0x40; - char* field_0x4c; - char* field_0x50; + /* 0x00 */ // vtable + /* 0x04 */ // JKRFileLoader + /* 0x38 */ JKRHeap* mParentHeap; + /* 0x3C */ JSUList mCacheBlockList; + /* 0x48 */ char* mRootPath; + /* 0x4C */ char* mCurrentPath; + /* 0x50 */ char* mVolumePath; public: - static void mount(char const*, JKRHeap*, char const*); + static JKRFileCache* mount(const char*, JKRHeap*, const char*); }; #endif diff --git a/include/JSystem/JKernel/JKRFileCache/asm/func_802D49B4.s b/include/JSystem/JKernel/JKRFileCache/asm/func_802D49B4.s index 4275efb3078..7b376d52870 100644 --- a/include/JSystem/JKernel/JKRFileCache/asm/func_802D49B4.s +++ b/include/JSystem/JKernel/JKRFileCache/asm/func_802D49B4.s @@ -15,7 +15,7 @@ lbl_802D49E4: /* 802D49E4 002D1924 38 60 00 00 */ li r3, 0 /* 802D49E8 002D1928 48 00 00 B4 */ b lbl_802D4A9C lbl_802D49EC: -/* 802D49EC 002D192C 48 09 41 F9 */ bl func_80368BE4 +/* 802D49EC 002D192C 48 09 41 F9 */ bl strlen /* 802D49F0 002D1930 28 03 00 01 */ cmplwi r3, 1 /* 802D49F4 002D1934 41 82 00 1C */ beq lbl_802D4A10 /* 802D49F8 002D1938 7C 7E 1A 14 */ add r3, r30, r3 diff --git a/include/JSystem/JKernel/JKRFileCache/asm/func_802D4AB4.s b/include/JSystem/JKernel/JKRFileCache/asm/func_802D4AB4.s index 03aacb0e2e0..91ec854b103 100644 --- a/include/JSystem/JKernel/JKRFileCache/asm/func_802D4AB4.s +++ b/include/JSystem/JKernel/JKRFileCache/asm/func_802D4AB4.s @@ -23,7 +23,7 @@ /* 802D4B04 002D1A44 38 03 53 48 */ addi r0, r3, 0x43415348@l /* 802D4B08 002D1A48 90 1F 00 2C */ stw r0, 0x2c(r31) /* 802D4B0C 002D1A4C 7F 83 E3 78 */ mr r3, r28 -/* 802D4B10 002D1A50 48 09 40 D5 */ bl func_80368BE4 +/* 802D4B10 002D1A50 48 09 40 D5 */ bl strlen /* 802D4B14 002D1A54 7C 7E 1B 78 */ mr r30, r3 /* 802D4B18 002D1A58 38 7E 00 01 */ addi r3, r30, 1 /* 802D4B1C 002D1A5C 38 80 00 01 */ li r4, 1 @@ -53,17 +53,17 @@ /* 802D4B7C 002D1ABC 80 7F 00 4C */ lwz r3, 0x4c(r31) /* 802D4B80 002D1AC0 3C 80 80 3A */ lis r4, lbl_8039D158@ha /* 802D4B84 002D1AC4 38 84 D1 58 */ addi r4, r4, lbl_8039D158@l -/* 802D4B88 002D1AC8 48 09 3F 35 */ bl func_80368ABC +/* 802D4B88 002D1AC8 48 09 3F 35 */ bl strcat /* 802D4B8C 002D1ACC 7F BE EB 78 */ mr r30, r29 /* 802D4B90 002D1AD0 28 1D 00 00 */ cmplwi r29, 0 /* 802D4B94 002D1AD4 40 82 00 14 */ bne lbl_802D4BA8 /* 802D4B98 002D1AD8 80 7F 00 48 */ lwz r3, 0x48(r31) /* 802D4B9C 002D1ADC 38 80 00 2F */ li r4, 0x2f -/* 802D4BA0 002D1AE0 48 09 3D 3D */ bl func_803688DC +/* 802D4BA0 002D1AE0 48 09 3D 3D */ bl strrchr /* 802D4BA4 002D1AE4 3B C3 00 01 */ addi r30, r3, 1 lbl_802D4BA8: /* 802D4BA8 002D1AE8 7F C3 F3 78 */ mr r3, r30 -/* 802D4BAC 002D1AEC 48 09 40 39 */ bl func_80368BE4 +/* 802D4BAC 002D1AEC 48 09 40 39 */ bl strlen /* 802D4BB0 002D1AF0 38 83 00 01 */ addi r4, r3, 1 /* 802D4BB4 002D1AF4 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13) /* 802D4BB8 002D1AF8 38 A0 00 00 */ li r5, 0 @@ -87,7 +87,7 @@ lbl_802D4BE8: /* 802D4BFC 002D1B3C 3B C3 00 02 */ addi r30, r3, 2 lbl_802D4C00: /* 802D4C00 002D1B40 7F C3 F3 78 */ mr r3, r30 -/* 802D4C04 002D1B44 48 09 3F E1 */ bl func_80368BE4 +/* 802D4C04 002D1B44 48 09 3F E1 */ bl strlen /* 802D4C08 002D1B48 38 83 00 01 */ addi r4, r3, 1 /* 802D4C0C 002D1B4C 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13) /* 802D4C10 002D1B50 38 A0 00 00 */ li r5, 0 diff --git a/include/JSystem/JKernel/JKRFileCache/asm/func_802D4D44.s b/include/JSystem/JKernel/JKRFileCache/asm/func_802D4D44.s index 1ec0f9ae31a..006719984f3 100644 --- a/include/JSystem/JKernel/JKRFileCache/asm/func_802D4D44.s +++ b/include/JSystem/JKernel/JKRFileCache/asm/func_802D4D44.s @@ -25,7 +25,7 @@ /* 802D4D9C 002D1CDC 41 82 00 20 */ beq lbl_802D4DBC /* 802D4DA0 002D1CE0 3C 80 80 3A */ lis r4, lbl_8039D158@ha /* 802D4DA4 002D1CE4 38 84 D1 58 */ addi r4, r4, lbl_8039D158@l -/* 802D4DA8 002D1CE8 48 09 3D 15 */ bl func_80368ABC +/* 802D4DA8 002D1CE8 48 09 3D 15 */ bl strcat /* 802D4DAC 002D1CEC 48 00 00 10 */ b lbl_802D4DBC lbl_802D4DB0: /* 802D4DB0 002D1CF0 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13) diff --git a/include/JSystem/JKernel/JKRFileCache/asm/func_802D4EDC.s b/include/JSystem/JKernel/JKRFileCache/asm/func_802D4EDC.s index 432a31d0bb3..4c78feec3b4 100644 --- a/include/JSystem/JKernel/JKRFileCache/asm/func_802D4EDC.s +++ b/include/JSystem/JKernel/JKRFileCache/asm/func_802D4EDC.s @@ -8,7 +8,7 @@ /* 802D4EF0 002D1E30 7C 7D 1B 78 */ mr r29, r3 /* 802D4EF4 002D1E34 7C BE 2B 78 */ mr r30, r5 /* 802D4EF8 002D1E38 80 63 00 48 */ lwz r3, 0x48(r3) -/* 802D4EFC 002D1E3C 48 09 3C E9 */ bl func_80368BE4 +/* 802D4EFC 002D1E3C 48 09 3C E9 */ bl strlen /* 802D4F00 002D1E40 3B E1 00 08 */ addi r31, r1, 8 /* 802D4F04 002D1E44 7F FF 1A 14 */ add r31, r31, r3 /* 802D4F08 002D1E48 38 61 00 08 */ addi r3, r1, 8 diff --git a/include/JSystem/JKernel/JKRFileCache/asm/func_802D503C.s b/include/JSystem/JKernel/JKRFileCache/asm/func_802D503C.s index dd3d3701062..5b2d4321288 100644 --- a/include/JSystem/JKernel/JKRFileCache/asm/func_802D503C.s +++ b/include/JSystem/JKernel/JKRFileCache/asm/func_802D503C.s @@ -10,7 +10,7 @@ /* 802D5058 002D1F98 7C BD 2B 78 */ mr r29, r5 /* 802D505C 002D1F9C 7C FE 3B 78 */ mr r30, r7 /* 802D5060 002D1FA0 80 63 00 48 */ lwz r3, 0x48(r3) -/* 802D5064 002D1FA4 48 09 3B 81 */ bl func_80368BE4 +/* 802D5064 002D1FA4 48 09 3B 81 */ bl strlen /* 802D5068 002D1FA8 3B E1 00 08 */ addi r31, r1, 8 /* 802D506C 002D1FAC 7F FF 1A 14 */ add r31, r31, r3 /* 802D5070 002D1FB0 38 61 00 08 */ addi r3, r1, 8 diff --git a/include/JSystem/JKernel/JKRFileCache/asm/func_802D5410.s b/include/JSystem/JKernel/JKRFileCache/asm/func_802D5410.s index b386838b512..c8cde1ba823 100644 --- a/include/JSystem/JKernel/JKRFileCache/asm/func_802D5410.s +++ b/include/JSystem/JKernel/JKRFileCache/asm/func_802D5410.s @@ -10,7 +10,7 @@ /* 802D542C 002D236C 7C BC 2B 78 */ mr r28, r5 /* 802D5430 002D2370 3B A0 00 00 */ li r29, 0 /* 802D5434 002D2374 7F 63 DB 78 */ mr r3, r27 -/* 802D5438 002D2378 48 09 37 AD */ bl func_80368BE4 +/* 802D5438 002D2378 48 09 37 AD */ bl strlen /* 802D543C 002D237C 7C 7F 1B 78 */ mr r31, r3 /* 802D5440 002D2380 7F 63 DB 78 */ mr r3, r27 /* 802D5444 002D2384 38 81 00 14 */ addi r4, r1, 0x14 @@ -50,10 +50,10 @@ lbl_802D54A8: /* 802D54C4 002D2404 7F 63 DB 78 */ mr r3, r27 /* 802D54C8 002D2408 3C 80 80 3A */ lis r4, lbl_8039D158@ha /* 802D54CC 002D240C 38 84 D1 58 */ addi r4, r4, lbl_8039D158@l -/* 802D54D0 002D2410 48 09 35 ED */ bl func_80368ABC +/* 802D54D0 002D2410 48 09 35 ED */ bl strcat /* 802D54D4 002D2414 7F 63 DB 78 */ mr r3, r27 /* 802D54D8 002D2418 7F 84 E3 78 */ mr r4, r28 -/* 802D54DC 002D241C 48 09 35 E1 */ bl func_80368ABC +/* 802D54DC 002D241C 48 09 35 E1 */ bl strcat /* 802D54E0 002D2420 48 00 00 18 */ b lbl_802D54F8 lbl_802D54E4: /* 802D54E4 002D2424 38 61 00 14 */ addi r3, r1, 0x14 diff --git a/include/JSystem/JKernel/JKRFileCache/asm/func_802D551C.s b/include/JSystem/JKernel/JKRFileCache/asm/func_802D551C.s index cb57966d04e..35be8380459 100644 --- a/include/JSystem/JKernel/JKRFileCache/asm/func_802D551C.s +++ b/include/JSystem/JKernel/JKRFileCache/asm/func_802D551C.s @@ -11,10 +11,10 @@ /* 802D553C 002D247C 2C 00 00 2F */ cmpwi r0, 0x2f /* 802D5540 002D2480 40 82 00 78 */ bne lbl_802D55B8 /* 802D5544 002D2484 7F C3 F3 78 */ mr r3, r30 -/* 802D5548 002D2488 48 09 36 9D */ bl func_80368BE4 +/* 802D5548 002D2488 48 09 36 9D */ bl strlen /* 802D554C 002D248C 7C 7F 1B 78 */ mr r31, r3 /* 802D5550 002D2490 80 7D 00 48 */ lwz r3, 0x48(r29) -/* 802D5554 002D2494 48 09 36 91 */ bl func_80368BE4 +/* 802D5554 002D2494 48 09 36 91 */ bl strlen /* 802D5558 002D2498 38 9F 00 02 */ addi r4, r31, 2 /* 802D555C 002D249C 7C 83 22 14 */ add r4, r3, r4 /* 802D5560 002D24A0 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13) @@ -33,19 +33,19 @@ /* 802D5594 002D24D4 40 82 00 14 */ bne lbl_802D55A8 /* 802D5598 002D24D8 7F E3 FB 78 */ mr r3, r31 /* 802D559C 002D24DC 38 9E 00 01 */ addi r4, r30, 1 -/* 802D55A0 002D24E0 48 09 35 1D */ bl func_80368ABC +/* 802D55A0 002D24E0 48 09 35 1D */ bl strcat /* 802D55A4 002D24E4 48 00 00 58 */ b lbl_802D55FC lbl_802D55A8: /* 802D55A8 002D24E8 7F E3 FB 78 */ mr r3, r31 /* 802D55AC 002D24EC 7F C4 F3 78 */ mr r4, r30 -/* 802D55B0 002D24F0 48 09 35 0D */ bl func_80368ABC +/* 802D55B0 002D24F0 48 09 35 0D */ bl strcat /* 802D55B4 002D24F4 48 00 00 48 */ b lbl_802D55FC lbl_802D55B8: /* 802D55B8 002D24F8 7F C3 F3 78 */ mr r3, r30 -/* 802D55BC 002D24FC 48 09 36 29 */ bl func_80368BE4 +/* 802D55BC 002D24FC 48 09 36 29 */ bl strlen /* 802D55C0 002D2500 7C 7F 1B 78 */ mr r31, r3 /* 802D55C4 002D2504 80 7D 00 4C */ lwz r3, 0x4c(r29) -/* 802D55C8 002D2508 48 09 36 1D */ bl func_80368BE4 +/* 802D55C8 002D2508 48 09 36 1D */ bl strlen /* 802D55CC 002D250C 38 9F 00 02 */ addi r4, r31, 2 /* 802D55D0 002D2510 7C 83 22 14 */ add r4, r3, r4 /* 802D55D4 002D2514 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13) @@ -57,7 +57,7 @@ lbl_802D55B8: /* 802D55EC 002D252C 48 09 35 41 */ bl strcpy /* 802D55F0 002D2530 7F E3 FB 78 */ mr r3, r31 /* 802D55F4 002D2534 7F C4 F3 78 */ mr r4, r30 -/* 802D55F8 002D2538 48 09 34 C5 */ bl func_80368ABC +/* 802D55F8 002D2538 48 09 34 C5 */ bl strcat lbl_802D55FC: /* 802D55FC 002D253C 7F A3 EB 78 */ mr r3, r29 /* 802D5600 002D2540 7F E4 FB 78 */ mr r4, r31 diff --git a/include/JSystem/JKernel/JKRFileLoader/JKRFileLoader.h b/include/JSystem/JKernel/JKRFileLoader/JKRFileLoader.h index e5d2b8e6b5b..654f08c8b8b 100644 --- a/include/JSystem/JKernel/JKRFileLoader/JKRFileLoader.h +++ b/include/JSystem/JKernel/JKRFileLoader/JKRFileLoader.h @@ -8,14 +8,13 @@ class JKRFileLoader; extern JKRFileLoader* lbl_80451418; // JKRFileLoader::sCurrentVolume extern JSUList lbl_80434354; // JKRFileLoader::sVolumeList -class JKRArcFinder; +class JKRFileFinder; class JKRFileLoader : public JKRDisposer { public: JKRFileLoader(void); virtual ~JKRFileLoader(); bool isMounted() const { return this->mIsMounted; } - u32 getVolumeType() const { return this->mVolumeType; } public: @@ -30,7 +29,7 @@ public: /* vt[11] */ virtual bool detachResource(void*) = 0; /* vt[12] */ virtual u32 getResSize(const void*) const = 0; /* vt[13] */ virtual u32 countFile(const char*) const = 0; - /* vt[14] */ virtual JKRArcFinder* getFirstFile(const char*) const = 0; + /* vt[14] */ virtual JKRFileFinder* getFirstFile(const char*) const = 0; protected: /* 0x00 */ // vtable diff --git a/include/JSystem/JKernel/JKRHeap/JKRHeap.h b/include/JSystem/JKernel/JKRHeap/JKRHeap.h index 7e7cf2770ce..183f0d4c4ca 100644 --- a/include/JSystem/JKernel/JKRHeap/JKRHeap.h +++ b/include/JSystem/JKernel/JKRHeap/JKRHeap.h @@ -156,10 +156,20 @@ inline void* JKRAllocFromHeap(JKRHeap* heap, u32 size, int alignment) { return JKRHeap::alloc(size, alignment, heap); } +inline void* JKRAllocFromSysHeap(u32 size, int alignment) { + JKRHeap* systemHeap = JKRHeap::getSystemHeap(); + return systemHeap->alloc(size, alignment); +} + inline void JKRFreeToHeap(JKRHeap* heap, void* ptr) { JKRHeap::free(ptr, heap); } +inline void JKRFreeToSysHeap(void* ptr) { + JKRHeap* systemHeap = JKRHeap::getSystemHeap(); + systemHeap->free(ptr); +} + inline void JKRFree(void* ptr) { JKRHeap::free(ptr, NULL); } diff --git a/include/d/d_a/d_a_alink/asm/func_800B7D4C.s b/include/d/d_a/d_a_alink/asm/func_800B7D4C.s index a9a745030cb..92d8247b2ae 100644 --- a/include/d/d_a/d_a_alink/asm/func_800B7D4C.s +++ b/include/d/d_a/d_a_alink/asm/func_800B7D4C.s @@ -97,7 +97,7 @@ lbl_800B7EA0: /* 800B7EA8 000B4DE8 40 80 00 B0 */ bge lbl_800B7F58 /* 800B7EAC 000B4DEC 80 7F 05 70 */ lwz r3, 0x570(r31) /* 800B7EB0 000B4DF0 80 63 00 28 */ lwz r3, 0x28(r3) -/* 800B7EB4 000B4DF4 48 2B 0D 31 */ bl func_80368BE4 +/* 800B7EB4 000B4DF4 48 2B 0D 31 */ bl strlen /* 800B7EB8 000B4DF8 28 03 00 00 */ cmplwi r3, 0 /* 800B7EBC 000B4DFC 41 82 00 9C */ beq lbl_800B7F58 /* 800B7EC0 000B4E00 80 9F 05 74 */ lwz r4, 0x574(r31) @@ -105,7 +105,7 @@ lbl_800B7EA0: /* 800B7EC8 000B4E08 80 03 00 2C */ lwz r0, 0x2c(r3) /* 800B7ECC 000B4E0C 54 00 10 3A */ slwi r0, r0, 2 /* 800B7ED0 000B4E10 7C 64 00 2E */ lwzx r3, r4, r0 -/* 800B7ED4 000B4E14 48 2B 0D 11 */ bl func_80368BE4 +/* 800B7ED4 000B4E14 48 2B 0D 11 */ bl strlen /* 800B7ED8 000B4E18 28 03 00 00 */ cmplwi r3, 0 /* 800B7EDC 000B4E1C 41 82 00 30 */ beq lbl_800B7F0C /* 800B7EE0 000B4E20 80 9F 05 74 */ lwz r4, 0x574(r31) diff --git a/include/d/d_a/d_a_alink/asm/func_800B7F84.s b/include/d/d_a/d_a_alink/asm/func_800B7F84.s index 08b5138cc45..056d3e67098 100644 --- a/include/d/d_a/d_a_alink/asm/func_800B7F84.s +++ b/include/d/d_a/d_a_alink/asm/func_800B7F84.s @@ -24,7 +24,7 @@ lbl_800B7FDC: /* 800B7FDC 000B4F1C 80 7E 05 70 */ lwz r3, 0x570(r30) /* 800B7FE0 000B4F20 54 9F 18 38 */ slwi r31, r4, 3 /* 800B7FE4 000B4F24 7C 63 F8 2E */ lwzx r3, r3, r31 -/* 800B7FE8 000B4F28 48 2B 0B FD */ bl func_80368BE4 +/* 800B7FE8 000B4F28 48 2B 0B FD */ bl strlen /* 800B7FEC 000B4F2C 28 03 00 00 */ cmplwi r3, 0 /* 800B7FF0 000B4F30 41 82 00 A4 */ beq lbl_800B8094 /* 800B7FF4 000B4F34 80 9E 05 74 */ lwz r4, 0x574(r30) @@ -33,7 +33,7 @@ lbl_800B7FDC: /* 800B8000 000B4F40 80 03 00 04 */ lwz r0, 4(r3) /* 800B8004 000B4F44 54 00 10 3A */ slwi r0, r0, 2 /* 800B8008 000B4F48 7C 64 00 2E */ lwzx r3, r4, r0 -/* 800B800C 000B4F4C 48 2B 0B D9 */ bl func_80368BE4 +/* 800B800C 000B4F4C 48 2B 0B D9 */ bl strlen /* 800B8010 000B4F50 28 03 00 00 */ cmplwi r3, 0 /* 800B8014 000B4F54 41 82 00 34 */ beq lbl_800B8048 /* 800B8018 000B4F58 80 9E 05 74 */ lwz r4, 0x574(r30) diff --git a/include/dvd/dvd.h b/include/dvd/dvd.h index 292046f770d..2ee6a943e10 100644 --- a/include/dvd/dvd.h +++ b/include/dvd/dvd.h @@ -81,7 +81,7 @@ s32 DVDConvertPathToEntrynum(const char*); DVDState DVDGetDriveStatus(void); s32 DVDCheckDisk(void); -void DVDChangeDir(void); +BOOL DVDChangeDir(const char*); BOOL DVDCloseDir(DVDDirectory*); BOOL DVDOpenDir(const char*, DVDDirectory*); BOOL DVDReadDir(DVDDirectory*, DVDDirectoryEntry*); diff --git a/include/functions.h b/include/functions.h index 755474c9e43..e4f9b5c3ffb 100644 --- a/include/functions.h +++ b/include/functions.h @@ -154,11 +154,11 @@ void JUTWarningConsole(void); void JUTWarningConsole_f(void); void VIWaitForRetrace(void); void func_80361C24(void); -void memcpy(void*, void*, int); +void memcpy(void*, const void*, int); int tolower(int); -void func_803688DC(void); -void func_80368ABC(void); -void func_80368BE4(void); +char* strrchr(char*, int); +char* strcat(char*, const char*); +u32 strlen(const char*); void JKRArchive_NS_getDirEntry(void); void func_80361C24(void); void JKRArchive_NS_findDirectory(void); @@ -366,14 +366,8 @@ void JUTConsole_NS_clear(void); void JUTReportConsole_f(void); void JUTWarningConsole(void); void JUTWarningConsole_f(void); - void func_80361C24(void); - -void func_803688DC(void); -void func_80368ABC(void); -void func_80368BE4(void); void JKRArchive_NS_getDirEntry(void); - void func_80361C24(void); // void JKRAramArchive(void); diff --git a/include/variables.h b/include/variables.h index a54119c8add..fc26b4957c7 100644 --- a/include/variables.h +++ b/include/variables.h @@ -214,7 +214,7 @@ extern u8 lbl_803CC328; // JKRFile::__vt class JKRFileLoader; extern JKRFileLoader* lbl_80451418; // JKRFileLoader::sCurrentVolume -extern u8 lbl_8039D158; // "/" +extern char lbl_8039D158[16]; // "/" extern u8 lbl_803CC238; // JKRFileCache::__vt extern JSUList lbl_80434354; // JKRFileLoader::sVolumeList extern u8 lbl_803CC218; // JKRArcFinder::__vt diff --git a/libs/JSystem/JKernel/JKRArchivePub.cpp b/libs/JSystem/JKernel/JKRArchivePub.cpp index 4916b92b779..4d850c4d399 100644 --- a/libs/JSystem/JKernel/JKRArchivePub.cpp +++ b/libs/JSystem/JKernel/JKRArchivePub.cpp @@ -315,7 +315,7 @@ u32 JKRArchive::countFile(const char* path) const { return 0; } -JKRArcFinder* JKRArchive::getFirstFile(const char* path) const { +JKRFileFinder* JKRArchive::getFirstFile(const char* path) const { SDirEntry* dirEntry; if (*path == '/') { path++; diff --git a/libs/JSystem/JKernel/JKRFileCache.cpp b/libs/JSystem/JKernel/JKRFileCache.cpp index b434d5ca808..7df37a11dd9 100644 --- a/libs/JSystem/JKernel/JKRFileCache.cpp +++ b/libs/JSystem/JKernel/JKRFileCache.cpp @@ -1,123 +1,414 @@ #include "JSystem/JKernel/JKRFileCache/JKRFileCache.h" +#include "JSystem/JKernel/JKRDvdFile/JKRDvdFile.h" +#include "JSystem/JKernel/JKRFileFinder/JKRFileFinder.h" +#include "JSystem/JKernel/JKRHeap/JKRHeap.h" #include "dvd/dvd.h" #include "global.h" -asm void JKRFileCache::mount(char const*, JKRHeap*, char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D49B4.s" +JKRFileCache* JKRFileCache::mount(const char* path, JKRHeap* heap, const char* param_3) { + if (!path || *path != '/') { + return NULL; + } + + u32 pathLength = strlen(path); + if (pathLength != 1 && path[pathLength - 1] == '/') { + return NULL; + } + + JSUList& volumeList = getVolumeList(); + JSUListIterator iterator; + for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) { + if (iterator->getVolumeType() == 'CASH') { + JKRFileCache* fileCache = (JKRFileCache*)iterator.getObject(); + if (fileCache->mRootPath) { + if (strcmp(fileCache->mRootPath, path) == 0) { + fileCache->mMountCount++; + return fileCache; + } + } + } + } + + return new (heap, 0) JKRFileCache(path, param_3); } -asm JKRFileCache::JKRFileCache(char const*, char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D4AB4.s" +JKRFileCache::JKRFileCache(const char* path, const char* volume) : mCacheBlockList() { + mParentHeap = JKRHeap::findFromRoot(this); + mMountCount = 1; + mVolumeType = 'CASH'; + + u32 pathLength = strlen(path); + mRootPath = (char*)JKRAllocFromHeap(mParentHeap, pathLength + 1, 1); + mCurrentPath = (char*)JKRAllocFromSysHeap(pathLength + 2, 1); + strcpy(mRootPath, path); + strcpy(mCurrentPath, path); + + if (path[1] != '\0') { + convStrLower(mRootPath); + convStrLower(mCurrentPath); + strcat(mCurrentPath, lbl_8039D158); // "/" + + const char* volumePath = volume; + if (!volume) { + volumePath = strrchr(mRootPath, '/'); + volumePath++; + } + + u32 volumeLength = strlen(volumePath) + 1; + mVolumePath = (char*)JKRAllocFromSysHeap(volumeLength, 0); + strcpy(mVolumePath, volumePath); + convStrLower(mVolumePath); + mVolumeName = mVolumePath; + } else { + const char* volumePath = volume; + if (!volume) { + volumePath = lbl_8039D158 + 0x2; // "dvd" + } + + u32 volumeLength = strlen(volumePath) + 1; + mVolumePath = (char*)JKRAllocFromSysHeap(volumeLength, 0); + strcpy(mVolumePath, volumePath); + convStrLower(mVolumePath); + mVolumeName = mVolumePath; + } + + getVolumeList().prepend(&mFileLoaderLink); + mIsMounted = true; } -asm JKRFileCache::~JKRFileCache() { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D4C70.s" +JKRFileCache::~JKRFileCache() { + removeResourceAll(); + if (mRootPath) + JKRFreeToHeap(mParentHeap, mRootPath); + if (mCurrentPath) + JKRFreeToSysHeap(mCurrentPath); + if (mVolumePath) + JKRFreeToSysHeap(mVolumePath); + + getVolumeList().remove(&mFileLoaderLink); } -asm void JKRFileCache::becomeCurrent(char const*) { +// full match, except wrong use of one register +#ifdef NONMATCHING +bool JKRFileCache::becomeCurrent(const char* path) { + char* name = getDvdPathName(path); + BOOL result = DVDChangeDir(name); + bool didChangeDir = (result != 0); + if (didChangeDir) { + setCurrentVolume(this); + JKRFreeToSysHeap(mCurrentPath); + + mCurrentPath = name; + if (mCurrentPath[1]) { + strcat(mCurrentPath, lbl_8039D158); // "/" + } + } else { + JKRFreeToSysHeap(name); + } + + return didChangeDir; +} +#else +asm bool JKRFileCache::becomeCurrent(const char* path) { nofralloc #include "JSystem/JKernel/JKRFileCache/asm/func_802D4D44.s" } +#endif -asm void* JKRFileCache::getResource(char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D4DD8.s" +void* JKRFileCache::getResource(const char* path) { + ASSERT(isMounted()); + + void* buffer = NULL; + char* name = getDvdPathName(path); + JKRDvdFile dvdFile(name); + if (dvdFile.isAvailable()) { + CCacheBlock* cacheBlock = findCacheBlock(dvdFile.getFileID()); + if (!cacheBlock) { + // dvdFile.getFileSize() not inlined + u32 fileSize = dvdFile.getFileInfo().length; + u32 alignedSize = ALIGN_NEXT(fileSize, 0x20); + buffer = JKRAllocFromHeap(mParentHeap, alignedSize, 0x20); + if (buffer) { + dvdFile.read(buffer, alignedSize, 0); + + cacheBlock = new (JKRHeap::getSystemHeap(), 0) + CCacheBlock(dvdFile.getFileID(), dvdFile.getFileInfo().length, buffer); + mCacheBlockList.append(&cacheBlock->mCacheBlockLink); + } + } else { + cacheBlock->mReferenceCount++; + buffer = cacheBlock->mMemoryPtr; + } + } + + JKRFreeToSysHeap(name); + return buffer; } -asm void* JKRFileCache::getResource(unsigned long, char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D4EDC.s" +void* JKRFileCache::getResource(u32, const char* path) { + ASSERT(isMounted()); + + char finalPath[256]; + u32 rootLength = strlen(mRootPath); + char* filePath = finalPath + rootLength; + strcpy(finalPath, mRootPath); + + bool found = findFile(finalPath, path); + if (!found) + return NULL; + + return getResource(filePath); } -asm void JKRFileCache::readResource(void*, unsigned long, char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D4F64.s" +u32 JKRFileCache::readResource(void* dst, u32 dstLength, const char* path) { + ASSERT(isMounted()); + + char* name = getDvdPathName(path); + JKRDvdFile dvdFile(name); + + u32 resourceSize = 0; + +// !@bug: (maybe?) Infinite Loop: Because dvdFile.isAvailable() is never updated in the loop-body +// will would never exit the loop. +loop: + if (dvdFile.isAvailable()) { + // dvdFile.getFileSize() not inlined + u32 fileSize = dvdFile.getFileInfo().length; + resourceSize = ALIGN_NEXT(fileSize, 0x20); + dstLength = ALIGN_PREV(dstLength, 0x20); + if (resourceSize > dstLength) { + resourceSize = dstLength; + } + + CCacheBlock* cacheBlock = findCacheBlock(dvdFile.getFileID()); + if (!cacheBlock) { + dvdFile.read(dst, resourceSize, 0); + } else { + memcpy(dst, cacheBlock->mMemoryPtr, resourceSize); + } + goto loop; + } + + JKRFreeToSysHeap(name); + return resourceSize; } -asm void JKRFileCache::readResource(void*, unsigned long, unsigned long, char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D503C.s" +u32 JKRFileCache::readResource(void* dst, u32 dstLength, u32, const char* path) { + ASSERT(isMounted()); + + char finalPath[256]; + u32 rootLength = strlen(mRootPath); + char* filePath = finalPath + rootLength; + strcpy(finalPath, mRootPath); + + bool found = findFile(finalPath, path); + if (!found) + return NULL; + + return readResource(dst, dstLength, filePath); } +#ifdef NONMATCHING +void JKRFileCache::removeResourceAll(void) { + ASSERT(isMounted()); + + JSUListIterator iterator; + iterator = mCacheBlockList.getFirst(); + while (iterator != mCacheBlockList.getEnd()) { + JKRFreeToHeap(mParentHeap, iterator->mMemoryPtr); + mCacheBlockList.remove(&iterator->mLink); + JSUListIterator next = iterator++; + CCacheBlock* cacheBlock = next.getObject(); + delete cacheBlock; + } +} +#else asm void JKRFileCache::removeResourceAll(void) { nofralloc #include "JSystem/JKernel/JKRFileCache/asm/func_802D50D4.s" } +#endif -asm bool JKRFileCache::removeResource(void*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D5164.s" +bool JKRFileCache::removeResource(void* resource) { + ASSERT(isMounted()); + + CCacheBlock* cacheBlock = findCacheBlock(resource); + if (!cacheBlock) + return false; + + u32 referenceCount = cacheBlock->mReferenceCount - 1; + cacheBlock->mReferenceCount = referenceCount; + if (referenceCount == 0) { + JKRFreeToHeap(mParentHeap, resource); + mCacheBlockList.remove(&cacheBlock->mCacheBlockLink); + delete cacheBlock; + } + + return true; } -asm bool JKRFileCache::detachResource(void*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D51F8.s" +bool JKRFileCache::detachResource(void* resource) { + ASSERT(isMounted()); + + CCacheBlock* cacheBlock = findCacheBlock(resource); + if (!cacheBlock) + return false; + + mCacheBlockList.remove(&cacheBlock->mCacheBlockLink); + delete cacheBlock; + return true; } -asm void JKRFileCache::getResSize(void const*) const { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D526C.s" +u32 JKRFileCache::getResSize(const void* resource) const { + ASSERT(isMounted()); + + CCacheBlock* cacheBlock = findCacheBlock(resource); + if (cacheBlock == NULL) { + return -1; + } else { + return cacheBlock->mFileSize; + } } -asm void JKRFileCache::countFile(char const*) const { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D52A0.s" +u32 JKRFileCache::countFile(const char* path) const { + ASSERT(isMounted()); + + DVDDirectory dir; + DVDDirectoryEntry dirEntry; + + u32 count = 0; + char* name = getDvdPathName(path); + BOOL result = DVDOpenDir(name, &dir); + if (result != 0) { + while (result = DVDReadDir(&dir, &dirEntry), result != FALSE) { + count = count + 1; + } + + DVDCloseDir(&dir); + } + + JKRFreeToSysHeap(name); + return count; } -asm void JKRFileCache::getFirstFile(char const*) const { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D531C.s" +JKRFileFinder* JKRFileCache::getFirstFile(const char* path) const { + char* name = getDvdPathName(path); + JKRHeap* systemHeap = JKRHeap::getSystemHeap(); + JKRDvdFinder* finder = new (systemHeap, 0) JKRDvdFinder(name); + JKRFreeToSysHeap(name); + + if (finder->isAvailable() != true) { + delete finder; + return NULL; + } + + return finder; } -asm void JKRFileCache::findCacheBlock(void const*) const { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D53B8.s" +JKRFileCache::CCacheBlock* JKRFileCache::findCacheBlock(const void* resource) const { + JSUListIterator iterator; + for (iterator = mCacheBlockList.getFirst(); iterator != mCacheBlockList.getEnd(); ++iterator) { + if (iterator->mMemoryPtr == resource) { + return iterator.getObject(); + } + } + + return NULL; } -asm void JKRFileCache::findCacheBlock(unsigned long) const { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D53E4.s" +JKRFileCache::CCacheBlock* JKRFileCache::findCacheBlock(u32 fileID) const { + JSUListIterator iterator; + for (iterator = mCacheBlockList.getFirst(); iterator != mCacheBlockList.getEnd(); ++iterator) { + if (iterator->mFileId == fileID) { + return iterator.getObject(); + } + } + + return NULL; } -asm void JKRFileCache::findFile(char*, char const*) const { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D5410.s" +bool JKRFileCache::findFile(char* path, const char* fileName) const { + DVDDirectory dir; + DVDDirectoryEntry dirEntry; + + bool result = false; + u32 pathLength = strlen(path); + if (DVDOpenDir(path, &dir)) { + while (DVDReadDir(&dir, &dirEntry)) { + if (dirEntry.is_directory) { + char* endOfPath = path + pathLength; + *endOfPath = '/'; + strcpy(path + pathLength + 1, dirEntry.name); + result = findFile(path, fileName); + if (result) + break; + *endOfPath = '\0'; + } else { + result = (strcmp(fileName, dirEntry.name) == 0); + if (result) { + strcat(path, lbl_8039D158); // "/" + strcat(path, fileName); + break; + } + } + } + + DVDCloseDir(&dir); + } + + return result; } -asm void JKRFileCache::getDvdPathName(char const*) const { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D551C.s" +char* JKRFileCache::getDvdPathName(const char* path) const { + char* newPath; + if (path[0] == '/') { + u32 length = strlen(mRootPath) + strlen(path) + 2; + newPath = (char*)JKRAllocFromSysHeap(length, 1); + strcpy(newPath, mRootPath); + if (path[1]) { + if (mRootPath[1] == 0) { + strcat(newPath, path + 1); + } else { + strcat(newPath, path); + } + } + } else { + u32 length = strlen(mCurrentPath) + strlen(path) + 2; + newPath = (char*)JKRAllocFromSysHeap(length, 1); + strcpy(newPath, mCurrentPath); + strcat(newPath, path); + } + + convStrLower(newPath); + return newPath; } -asm void JKRFileCache::convStrLower(char*) const { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D5624.s" +void JKRFileCache::convStrLower(char* buffer) const { + while (*buffer) { + *buffer++ = tolower(*buffer); + } } -asm JKRFileCache::CCacheBlock::CCacheBlock(unsigned long, unsigned long, void const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D566C.s" +JKRFileCache::CCacheBlock::CCacheBlock(u32 fileId, u32 fileSize, const void* resource) + : mCacheBlockLink(this) { + mReferenceCount = 1; + mFileId = fileId; + mFileSize = fileSize; + mMemoryPtr = (void*)resource; // todo: don't cast away const } -asm void JKRFileCache::getFsResource(char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D56C8.s" +void* JKRFileCache::getFsResource(const char* path) { + return getResource(path); } -asm void JKRFileCache::getNameResource(unsigned long, char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D56F4.s" +void* JKRFileCache::getNameResource(u32 type, const char* path) { + return getResource(type, path); } -asm void JKRFileCache::readFsResource(void*, unsigned long, char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D5720.s" +u32 JKRFileCache::readFsResource(void* dst, u32 dstLength, const char* path) { + return readResource(dst, dstLength, path); } -asm void JKRFileCache::readNameResource(void*, unsigned long, unsigned long, char const*) { - nofralloc -#include "JSystem/JKernel/JKRFileCache/asm/func_802D574C.s" +u32 JKRFileCache::readNameResource(void* dst, u32 dstLength, u32 type, const char* path) { + return readResource(dst, dstLength, type, path); }