progress script and begin splitting text (#1)

modularized flavor portion of calcprog and split/labeled gba and thp dolphin library funcs/data. data has not been split.

Former-commit-id: 406baa142a
This commit is contained in:
EpochFlame 2022-03-28 17:10:24 -04:00 committed by GitHub
parent 60986a2154
commit adf7cb8357
12 changed files with 10542 additions and 28 deletions

1370
asm/Dolphin/GBA.s Normal file

File diff suppressed because it is too large Load Diff

107
asm/Dolphin/GBARead.s Normal file
View File

@ -0,0 +1,107 @@
.include "macros.inc"
.section .text, "ax" # 0x80003640 - 0x803CB1C0
.global ReadProc
ReadProc:
/* 803CA920 003C7880 7C 08 02 A6 */ mflr r0
/* 803CA924 003C7884 3C 80 80 57 */ lis r4, __GBA@ha
/* 803CA928 003C7888 90 01 00 04 */ stw r0, 4(r1)
/* 803CA92C 003C788C 54 63 40 2E */ slwi r3, r3, 8
/* 803CA930 003C7890 38 04 A1 A0 */ addi r0, r4, __GBA@l
/* 803CA934 003C7894 94 21 FF E8 */ stwu r1, -0x18(r1)
/* 803CA938 003C7898 93 E1 00 14 */ stw r31, 0x14(r1)
/* 803CA93C 003C789C 7F E0 1A 14 */ add r31, r0, r3
/* 803CA940 003C78A0 80 1F 00 20 */ lwz r0, 0x20(r31)
/* 803CA944 003C78A4 2C 00 00 00 */ cmpwi r0, 0
/* 803CA948 003C78A8 40 82 00 24 */ bne lbl_803CA96C
/* 803CA94C 003C78AC 80 7F 00 18 */ lwz r3, 0x18(r31)
/* 803CA950 003C78B0 38 9F 00 05 */ addi r4, r31, 5
/* 803CA954 003C78B4 38 A0 00 04 */ li r5, 4
/* 803CA958 003C78B8 4B C3 8B 39 */ bl memcpy
/* 803CA95C 003C78BC 88 1F 00 09 */ lbz r0, 9(r31)
/* 803CA960 003C78C0 80 7F 00 14 */ lwz r3, 0x14(r31)
/* 803CA964 003C78C4 70 00 00 3A */ andi. r0, r0, 0x3a
/* 803CA968 003C78C8 98 03 00 00 */ stb r0, 0(r3)
lbl_803CA96C:
/* 803CA96C 003C78CC 80 01 00 1C */ lwz r0, 0x1c(r1)
/* 803CA970 003C78D0 83 E1 00 14 */ lwz r31, 0x14(r1)
/* 803CA974 003C78D4 38 21 00 18 */ addi r1, r1, 0x18
/* 803CA978 003C78D8 7C 08 03 A6 */ mtlr r0
/* 803CA97C 003C78DC 4E 80 00 20 */ blr
.global GBAReadAsync
GBAReadAsync:
/* 803CA980 003C78E0 7C 08 02 A6 */ mflr r0
/* 803CA984 003C78E4 3C E0 80 57 */ lis r7, __GBA@ha
/* 803CA988 003C78E8 90 01 00 04 */ stw r0, 4(r1)
/* 803CA98C 003C78EC 54 68 40 2E */ slwi r8, r3, 8
/* 803CA990 003C78F0 38 07 A1 A0 */ addi r0, r7, __GBA@l
/* 803CA994 003C78F4 94 21 FF F8 */ stwu r1, -8(r1)
/* 803CA998 003C78F8 7D 00 42 14 */ add r8, r0, r8
/* 803CA99C 003C78FC 80 08 00 1C */ lwz r0, 0x1c(r8)
/* 803CA9A0 003C7900 28 00 00 00 */ cmplwi r0, 0
/* 803CA9A4 003C7904 41 82 00 0C */ beq lbl_803CA9B0
/* 803CA9A8 003C7908 38 60 00 02 */ li r3, 2
/* 803CA9AC 003C790C 48 00 00 30 */ b lbl_803CA9DC
lbl_803CA9B0:
/* 803CA9B0 003C7910 38 00 00 14 */ li r0, 0x14
/* 803CA9B4 003C7914 98 08 00 00 */ stb r0, 0(r8)
/* 803CA9B8 003C7918 3C E0 80 3D */ lis r7, ReadProc@ha
/* 803CA9BC 003C791C 38 07 A9 20 */ addi r0, r7, ReadProc@l
/* 803CA9C0 003C7920 90 88 00 18 */ stw r4, 0x18(r8)
/* 803CA9C4 003C7924 38 80 00 01 */ li r4, 1
/* 803CA9C8 003C7928 90 A8 00 14 */ stw r5, 0x14(r8)
/* 803CA9CC 003C792C 38 A0 00 05 */ li r5, 5
/* 803CA9D0 003C7930 90 C8 00 1C */ stw r6, 0x1c(r8)
/* 803CA9D4 003C7934 7C 06 03 78 */ mr r6, r0
/* 803CA9D8 003C7938 48 00 04 D1 */ bl __GBATransfer
lbl_803CA9DC:
/* 803CA9DC 003C793C 80 01 00 0C */ lwz r0, 0xc(r1)
/* 803CA9E0 003C7940 38 21 00 08 */ addi r1, r1, 8
/* 803CA9E4 003C7944 7C 08 03 A6 */ mtlr r0
/* 803CA9E8 003C7948 4E 80 00 20 */ blr
.global GBARead
GBARead:
/* 803CA9EC 003C794C 7C 08 02 A6 */ mflr r0
/* 803CA9F0 003C7950 90 01 00 04 */ stw r0, 4(r1)
/* 803CA9F4 003C7954 94 21 FF D8 */ stwu r1, -0x28(r1)
/* 803CA9F8 003C7958 93 E1 00 24 */ stw r31, 0x24(r1)
/* 803CA9FC 003C795C 3B E3 00 00 */ addi r31, r3, 0
/* 803CAA00 003C7960 3C 60 80 57 */ lis r3, __GBA@ha
/* 803CAA04 003C7964 57 E6 40 2E */ slwi r6, r31, 8
/* 803CAA08 003C7968 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803CAA0C 003C796C 7D 00 32 14 */ add r8, r0, r6
/* 803CAA10 003C7970 80 08 00 1C */ lwz r0, 0x1c(r8)
/* 803CAA14 003C7974 28 00 00 00 */ cmplwi r0, 0
/* 803CAA18 003C7978 41 82 00 0C */ beq lbl_803CAA24
/* 803CAA1C 003C797C 38 60 00 02 */ li r3, 2
/* 803CAA20 003C7980 48 00 00 38 */ b lbl_803CAA58
lbl_803CAA24:
/* 803CAA24 003C7984 38 00 00 14 */ li r0, 0x14
/* 803CAA28 003C7988 98 08 00 00 */ stb r0, 0(r8)
/* 803CAA2C 003C798C 3C E0 80 3D */ lis r7, __GBASyncCallback@ha
/* 803CAA30 003C7990 3C 60 80 3D */ lis r3, ReadProc@ha
/* 803CAA34 003C7994 90 88 00 18 */ stw r4, 0x18(r8)
/* 803CAA38 003C7998 38 C3 A9 20 */ addi r6, r3, ReadProc@l
/* 803CAA3C 003C799C 38 07 AC E4 */ addi r0, r7, __GBASyncCallback@l
/* 803CAA40 003C79A0 90 A8 00 14 */ stw r5, 0x14(r8)
/* 803CAA44 003C79A4 7F E3 FB 78 */ mr r3, r31
/* 803CAA48 003C79A8 38 80 00 01 */ li r4, 1
/* 803CAA4C 003C79AC 90 08 00 1C */ stw r0, 0x1c(r8)
/* 803CAA50 003C79B0 38 A0 00 05 */ li r5, 5
/* 803CAA54 003C79B4 48 00 04 55 */ bl __GBATransfer
lbl_803CAA58:
/* 803CAA58 003C79B8 2C 03 00 00 */ cmpwi r3, 0
/* 803CAA5C 003C79BC 41 82 00 08 */ beq lbl_803CAA64
/* 803CAA60 003C79C0 48 00 00 0C */ b lbl_803CAA6C
lbl_803CAA64:
/* 803CAA64 003C79C4 7F E3 FB 78 */ mr r3, r31
/* 803CAA68 003C79C8 48 00 02 B1 */ bl __GBASync
lbl_803CAA6C:
/* 803CAA6C 003C79CC 80 01 00 2C */ lwz r0, 0x2c(r1)
/* 803CAA70 003C79D0 83 E1 00 24 */ lwz r31, 0x24(r1)
/* 803CAA74 003C79D4 38 21 00 28 */ addi r1, r1, 0x28
/* 803CAA78 003C79D8 7C 08 03 A6 */ mtlr r0
/* 803CAA7C 003C79DC 4E 80 00 20 */ blr

116
asm/Dolphin/GBAWrite.s Normal file
View File

@ -0,0 +1,116 @@
.include "macros.inc"
.section .text, "ax" # 0x80003640 - 0x803CB1C0
.global WriteProc
WriteProc:
/* 803CAA80 003C79E0 3C 80 80 57 */ lis r4, __GBA@ha
/* 803CAA84 003C79E4 54 63 40 2E */ slwi r3, r3, 8
/* 803CAA88 003C79E8 38 04 A1 A0 */ addi r0, r4, __GBA@l
/* 803CAA8C 003C79EC 7C 60 1A 14 */ add r3, r0, r3
/* 803CAA90 003C79F0 80 03 00 20 */ lwz r0, 0x20(r3)
/* 803CAA94 003C79F4 2C 00 00 00 */ cmpwi r0, 0
/* 803CAA98 003C79F8 4C 82 00 20 */ bnelr
/* 803CAA9C 003C79FC 88 03 00 05 */ lbz r0, 5(r3)
/* 803CAAA0 003C7A00 80 63 00 14 */ lwz r3, 0x14(r3)
/* 803CAAA4 003C7A04 70 00 00 3A */ andi. r0, r0, 0x3a
/* 803CAAA8 003C7A08 98 03 00 00 */ stb r0, 0(r3)
/* 803CAAAC 003C7A0C 4E 80 00 20 */ blr
.global GBAWriteAsync
GBAWriteAsync:
/* 803CAAB0 003C7A10 7C 08 02 A6 */ mflr r0
/* 803CAAB4 003C7A14 90 01 00 04 */ stw r0, 4(r1)
/* 803CAAB8 003C7A18 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 803CAABC 003C7A1C BF 61 00 1C */ stmw r27, 0x1c(r1)
/* 803CAAC0 003C7A20 3B 63 00 00 */ addi r27, r3, 0
/* 803CAAC4 003C7A24 3C 60 80 57 */ lis r3, __GBA@ha
/* 803CAAC8 003C7A28 57 67 40 2E */ slwi r7, r27, 8
/* 803CAACC 003C7A2C 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803CAAD0 003C7A30 7F E0 3A 14 */ add r31, r0, r7
/* 803CAAD4 003C7A34 3B 84 00 00 */ addi r28, r4, 0
/* 803CAAD8 003C7A38 3B A5 00 00 */ addi r29, r5, 0
/* 803CAADC 003C7A3C 80 1F 00 1C */ lwz r0, 0x1c(r31)
/* 803CAAE0 003C7A40 3B C6 00 00 */ addi r30, r6, 0
/* 803CAAE4 003C7A44 28 00 00 00 */ cmplwi r0, 0
/* 803CAAE8 003C7A48 41 82 00 0C */ beq lbl_803CAAF4
/* 803CAAEC 003C7A4C 38 60 00 02 */ li r3, 2
/* 803CAAF0 003C7A50 48 00 00 40 */ b lbl_803CAB30
lbl_803CAAF4:
/* 803CAAF4 003C7A54 38 00 00 15 */ li r0, 0x15
/* 803CAAF8 003C7A58 98 1F 00 00 */ stb r0, 0(r31)
/* 803CAAFC 003C7A5C 38 9C 00 00 */ addi r4, r28, 0
/* 803CAB00 003C7A60 38 7F 00 01 */ addi r3, r31, 1
/* 803CAB04 003C7A64 38 A0 00 04 */ li r5, 4
/* 803CAB08 003C7A68 4B C3 89 89 */ bl memcpy
/* 803CAB0C 003C7A6C 93 9F 00 18 */ stw r28, 0x18(r31)
/* 803CAB10 003C7A70 3C 60 80 3D */ lis r3, WriteProc@ha
/* 803CAB14 003C7A74 38 C3 AA 80 */ addi r6, r3, WriteProc@l
/* 803CAB18 003C7A78 93 BF 00 14 */ stw r29, 0x14(r31)
/* 803CAB1C 003C7A7C 7F 63 DB 78 */ mr r3, r27
/* 803CAB20 003C7A80 38 80 00 05 */ li r4, 5
/* 803CAB24 003C7A84 93 DF 00 1C */ stw r30, 0x1c(r31)
/* 803CAB28 003C7A88 38 A0 00 01 */ li r5, 1
/* 803CAB2C 003C7A8C 48 00 03 7D */ bl __GBATransfer
lbl_803CAB30:
/* 803CAB30 003C7A90 BB 61 00 1C */ lmw r27, 0x1c(r1)
/* 803CAB34 003C7A94 80 01 00 34 */ lwz r0, 0x34(r1)
/* 803CAB38 003C7A98 38 21 00 30 */ addi r1, r1, 0x30
/* 803CAB3C 003C7A9C 7C 08 03 A6 */ mtlr r0
/* 803CAB40 003C7AA0 4E 80 00 20 */ blr
.global GBAWrite
GBAWrite:
/* 803CAB44 003C7AA4 7C 08 02 A6 */ mflr r0
/* 803CAB48 003C7AA8 90 01 00 04 */ stw r0, 4(r1)
/* 803CAB4C 003C7AAC 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 803CAB50 003C7AB0 93 E1 00 2C */ stw r31, 0x2c(r1)
/* 803CAB54 003C7AB4 93 C1 00 28 */ stw r30, 0x28(r1)
/* 803CAB58 003C7AB8 3B C5 00 00 */ addi r30, r5, 0
/* 803CAB5C 003C7ABC 93 A1 00 24 */ stw r29, 0x24(r1)
/* 803CAB60 003C7AC0 3B A4 00 00 */ addi r29, r4, 0
/* 803CAB64 003C7AC4 93 81 00 20 */ stw r28, 0x20(r1)
/* 803CAB68 003C7AC8 3B 83 00 00 */ addi r28, r3, 0
/* 803CAB6C 003C7ACC 3C 60 80 57 */ lis r3, __GBA@ha
/* 803CAB70 003C7AD0 57 86 40 2E */ slwi r6, r28, 8
/* 803CAB74 003C7AD4 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803CAB78 003C7AD8 7F E0 32 14 */ add r31, r0, r6
/* 803CAB7C 003C7ADC 80 1F 00 1C */ lwz r0, 0x1c(r31)
/* 803CAB80 003C7AE0 28 00 00 00 */ cmplwi r0, 0
/* 803CAB84 003C7AE4 41 82 00 0C */ beq lbl_803CAB90
/* 803CAB88 003C7AE8 38 60 00 02 */ li r3, 2
/* 803CAB8C 003C7AEC 48 00 00 48 */ b lbl_803CABD4
lbl_803CAB90:
/* 803CAB90 003C7AF0 38 00 00 15 */ li r0, 0x15
/* 803CAB94 003C7AF4 98 1F 00 00 */ stb r0, 0(r31)
/* 803CAB98 003C7AF8 38 9D 00 00 */ addi r4, r29, 0
/* 803CAB9C 003C7AFC 38 7F 00 01 */ addi r3, r31, 1
/* 803CABA0 003C7B00 38 A0 00 04 */ li r5, 4
/* 803CABA4 003C7B04 4B C3 88 ED */ bl memcpy
/* 803CABA8 003C7B08 93 BF 00 18 */ stw r29, 0x18(r31)
/* 803CABAC 003C7B0C 3C 80 80 3D */ lis r4, __GBASyncCallback@ha
/* 803CABB0 003C7B10 38 04 AC E4 */ addi r0, r4, __GBASyncCallback@l
/* 803CABB4 003C7B14 93 DF 00 14 */ stw r30, 0x14(r31)
/* 803CABB8 003C7B18 3C 60 80 3D */ lis r3, WriteProc@ha
/* 803CABBC 003C7B1C 38 C3 AA 80 */ addi r6, r3, WriteProc@l
/* 803CABC0 003C7B20 90 1F 00 1C */ stw r0, 0x1c(r31)
/* 803CABC4 003C7B24 38 7C 00 00 */ addi r3, r28, 0
/* 803CABC8 003C7B28 38 80 00 05 */ li r4, 5
/* 803CABCC 003C7B2C 38 A0 00 01 */ li r5, 1
/* 803CABD0 003C7B30 48 00 02 D9 */ bl __GBATransfer
lbl_803CABD4:
/* 803CABD4 003C7B34 2C 03 00 00 */ cmpwi r3, 0
/* 803CABD8 003C7B38 41 82 00 08 */ beq lbl_803CABE0
/* 803CABDC 003C7B3C 48 00 00 0C */ b lbl_803CABE8
lbl_803CABE0:
/* 803CABE0 003C7B40 7F 83 E3 78 */ mr r3, r28
/* 803CABE4 003C7B44 48 00 01 35 */ bl __GBASync
lbl_803CABE8:
/* 803CABE8 003C7B48 80 01 00 34 */ lwz r0, 0x34(r1)
/* 803CABEC 003C7B4C 83 E1 00 2C */ lwz r31, 0x2c(r1)
/* 803CABF0 003C7B50 83 C1 00 28 */ lwz r30, 0x28(r1)
/* 803CABF4 003C7B54 83 A1 00 24 */ lwz r29, 0x24(r1)
/* 803CABF8 003C7B58 83 81 00 20 */ lwz r28, 0x20(r1)
/* 803CABFC 003C7B5C 38 21 00 30 */ addi r1, r1, 0x30
/* 803CAC00 003C7B60 7C 08 03 A6 */ mtlr r0
/* 803CAC04 003C7B64 4E 80 00 20 */ blr

413
asm/Dolphin/GBAXfer.s Normal file
View File

@ -0,0 +1,413 @@
.include "macros.inc"
.section .text, "ax" # 0x80003640 - 0x803CB1C0
.global __GBAHandler
__GBAHandler:
/* 803CAC08 003C7B68 7C 08 02 A6 */ mflr r0
/* 803CAC0C 003C7B6C 90 01 00 04 */ stw r0, 4(r1)
/* 803CAC10 003C7B70 94 21 FD 08 */ stwu r1, -0x2f8(r1)
/* 803CAC14 003C7B74 93 E1 02 F4 */ stw r31, 0x2f4(r1)
/* 803CAC18 003C7B78 93 C1 02 F0 */ stw r30, 0x2f0(r1)
/* 803CAC1C 003C7B7C 3B C5 00 00 */ addi r30, r5, 0
/* 803CAC20 003C7B80 93 A1 02 EC */ stw r29, 0x2ec(r1)
/* 803CAC24 003C7B84 3B A3 00 00 */ addi r29, r3, 0
/* 803CAC28 003C7B88 3C 60 80 57 */ lis r3, __GBA@ha
/* 803CAC2C 003C7B8C 80 0D B1 58 */ lwz r0, __GBAReset@sda21(r13)
/* 803CAC30 003C7B90 57 A6 40 2E */ slwi r6, r29, 8
/* 803CAC34 003C7B94 2C 00 00 00 */ cmpwi r0, 0
/* 803CAC38 003C7B98 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803CAC3C 003C7B9C 7F E0 32 14 */ add r31, r0, r6
/* 803CAC40 003C7BA0 40 82 00 88 */ bne lbl_803CACC8
/* 803CAC44 003C7BA4 54 80 07 3F */ clrlwi. r0, r4, 0x1c
/* 803CAC48 003C7BA8 41 82 00 10 */ beq lbl_803CAC58
/* 803CAC4C 003C7BAC 38 00 00 01 */ li r0, 1
/* 803CAC50 003C7BB0 90 1F 00 20 */ stw r0, 0x20(r31)
/* 803CAC54 003C7BB4 48 00 00 0C */ b lbl_803CAC60
lbl_803CAC58:
/* 803CAC58 003C7BB8 38 00 00 00 */ li r0, 0
/* 803CAC5C 003C7BBC 90 1F 00 20 */ stw r0, 0x20(r31)
lbl_803CAC60:
/* 803CAC60 003C7BC0 81 9F 00 38 */ lwz r12, 0x38(r31)
/* 803CAC64 003C7BC4 28 0C 00 00 */ cmplwi r12, 0
/* 803CAC68 003C7BC8 41 82 00 18 */ beq lbl_803CAC80
/* 803CAC6C 003C7BCC 38 00 00 00 */ li r0, 0
/* 803CAC70 003C7BD0 7D 88 03 A6 */ mtlr r12
/* 803CAC74 003C7BD4 90 1F 00 38 */ stw r0, 0x38(r31)
/* 803CAC78 003C7BD8 7F A3 EB 78 */ mr r3, r29
/* 803CAC7C 003C7BDC 4E 80 00 21 */ blrl
lbl_803CAC80:
/* 803CAC80 003C7BE0 80 1F 00 1C */ lwz r0, 0x1c(r31)
/* 803CAC84 003C7BE4 28 00 00 00 */ cmplwi r0, 0
/* 803CAC88 003C7BE8 41 82 00 40 */ beq lbl_803CACC8
/* 803CAC8C 003C7BEC 38 61 00 18 */ addi r3, r1, 0x18
/* 803CAC90 003C7BF0 4B FB 49 85 */ bl OSClearContext
/* 803CAC94 003C7BF4 38 61 00 18 */ addi r3, r1, 0x18
/* 803CAC98 003C7BF8 4B FB 47 85 */ bl OSSetCurrentContext
/* 803CAC9C 003C7BFC 81 9F 00 1C */ lwz r12, 0x1c(r31)
/* 803CACA0 003C7C00 38 00 00 00 */ li r0, 0
/* 803CACA4 003C7C04 38 7D 00 00 */ addi r3, r29, 0
/* 803CACA8 003C7C08 90 1F 00 1C */ stw r0, 0x1c(r31)
/* 803CACAC 003C7C0C 7D 88 03 A6 */ mtlr r12
/* 803CACB0 003C7C10 80 9F 00 20 */ lwz r4, 0x20(r31)
/* 803CACB4 003C7C14 4E 80 00 21 */ blrl
/* 803CACB8 003C7C18 38 61 00 18 */ addi r3, r1, 0x18
/* 803CACBC 003C7C1C 4B FB 49 59 */ bl OSClearContext
/* 803CACC0 003C7C20 7F C3 F3 78 */ mr r3, r30
/* 803CACC4 003C7C24 4B FB 47 59 */ bl OSSetCurrentContext
lbl_803CACC8:
/* 803CACC8 003C7C28 80 01 02 FC */ lwz r0, 0x2fc(r1)
/* 803CACCC 003C7C2C 83 E1 02 F4 */ lwz r31, 0x2f4(r1)
/* 803CACD0 003C7C30 83 C1 02 F0 */ lwz r30, 0x2f0(r1)
/* 803CACD4 003C7C34 83 A1 02 EC */ lwz r29, 0x2ec(r1)
/* 803CACD8 003C7C38 38 21 02 F8 */ addi r1, r1, 0x2f8
/* 803CACDC 003C7C3C 7C 08 03 A6 */ mtlr r0
/* 803CACE0 003C7C40 4E 80 00 20 */ blr
.global __GBASyncCallback
__GBASyncCallback:
/* 803CACE4 003C7C44 7C 08 02 A6 */ mflr r0
/* 803CACE8 003C7C48 3C 80 80 57 */ lis r4, __GBA@ha
/* 803CACEC 003C7C4C 90 01 00 04 */ stw r0, 4(r1)
/* 803CACF0 003C7C50 54 63 40 2E */ slwi r3, r3, 8
/* 803CACF4 003C7C54 38 04 A1 A0 */ addi r0, r4, __GBA@l
/* 803CACF8 003C7C58 7C 60 1A 14 */ add r3, r0, r3
/* 803CACFC 003C7C5C 94 21 FF F8 */ stwu r1, -8(r1)
/* 803CAD00 003C7C60 38 63 00 24 */ addi r3, r3, 0x24
/* 803CAD04 003C7C64 4B FB A4 F5 */ bl OSWakeupThread
/* 803CAD08 003C7C68 80 01 00 0C */ lwz r0, 0xc(r1)
/* 803CAD0C 003C7C6C 38 21 00 08 */ addi r1, r1, 8
/* 803CAD10 003C7C70 7C 08 03 A6 */ mtlr r0
/* 803CAD14 003C7C74 4E 80 00 20 */ blr
.global __GBASync
__GBASync:
/* 803CAD18 003C7C78 7C 08 02 A6 */ mflr r0
/* 803CAD1C 003C7C7C 3C 80 80 57 */ lis r4, __GBA@ha
/* 803CAD20 003C7C80 90 01 00 04 */ stw r0, 4(r1)
/* 803CAD24 003C7C84 54 63 40 2E */ slwi r3, r3, 8
/* 803CAD28 003C7C88 38 04 A1 A0 */ addi r0, r4, __GBA@l
/* 803CAD2C 003C7C8C 94 21 FF E8 */ stwu r1, -0x18(r1)
/* 803CAD30 003C7C90 93 E1 00 14 */ stw r31, 0x14(r1)
/* 803CAD34 003C7C94 7F E0 1A 14 */ add r31, r0, r3
/* 803CAD38 003C7C98 93 C1 00 10 */ stw r30, 0x10(r1)
/* 803CAD3C 003C7C9C 4B FB 69 25 */ bl OSDisableInterrupts
/* 803CAD40 003C7CA0 7C 7E 1B 78 */ mr r30, r3
/* 803CAD44 003C7CA4 48 00 00 0C */ b lbl_803CAD50
lbl_803CAD48:
/* 803CAD48 003C7CA8 38 7F 00 24 */ addi r3, r31, 0x24
/* 803CAD4C 003C7CAC 4B FB A3 C1 */ bl OSSleepThread
lbl_803CAD50:
/* 803CAD50 003C7CB0 80 1F 00 1C */ lwz r0, 0x1c(r31)
/* 803CAD54 003C7CB4 28 00 00 00 */ cmplwi r0, 0
/* 803CAD58 003C7CB8 40 82 FF F0 */ bne lbl_803CAD48
/* 803CAD5C 003C7CBC 83 FF 00 20 */ lwz r31, 0x20(r31)
/* 803CAD60 003C7CC0 7F C3 F3 78 */ mr r3, r30
/* 803CAD64 003C7CC4 4B FB 69 25 */ bl OSRestoreInterrupts
/* 803CAD68 003C7CC8 7F E3 FB 78 */ mr r3, r31
/* 803CAD6C 003C7CCC 80 01 00 1C */ lwz r0, 0x1c(r1)
/* 803CAD70 003C7CD0 83 E1 00 14 */ lwz r31, 0x14(r1)
/* 803CAD74 003C7CD4 83 C1 00 10 */ lwz r30, 0x10(r1)
/* 803CAD78 003C7CD8 38 21 00 18 */ addi r1, r1, 0x18
/* 803CAD7C 003C7CDC 7C 08 03 A6 */ mtlr r0
/* 803CAD80 003C7CE0 4E 80 00 20 */ blr
.global TypeAndStatusCallback
TypeAndStatusCallback:
/* 803CAD84 003C7CE4 7C 08 02 A6 */ mflr r0
/* 803CAD88 003C7CE8 90 01 00 04 */ stw r0, 4(r1)
/* 803CAD8C 003C7CEC 94 21 FD 10 */ stwu r1, -0x2f0(r1)
/* 803CAD90 003C7CF0 93 E1 02 EC */ stw r31, 0x2ec(r1)
/* 803CAD94 003C7CF4 3B E3 00 00 */ addi r31, r3, 0
/* 803CAD98 003C7CF8 3C 60 80 57 */ lis r3, __GBA@ha
/* 803CAD9C 003C7CFC 93 C1 02 E8 */ stw r30, 0x2e8(r1)
/* 803CADA0 003C7D00 57 E5 40 2E */ slwi r5, r31, 8
/* 803CADA4 003C7D04 93 A1 02 E4 */ stw r29, 0x2e4(r1)
/* 803CADA8 003C7D08 80 0D B1 58 */ lwz r0, __GBAReset@sda21(r13)
/* 803CADAC 003C7D0C 2C 00 00 00 */ cmpwi r0, 0
/* 803CADB0 003C7D10 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803CADB4 003C7D14 7F C0 2A 14 */ add r30, r0, r5
/* 803CADB8 003C7D18 40 82 00 D4 */ bne lbl_803CAE8C
/* 803CADBC 003C7D1C 54 80 06 3F */ clrlwi. r0, r4, 0x18
/* 803CADC0 003C7D20 40 82 00 14 */ bne lbl_803CADD4
/* 803CADC4 003C7D24 54 83 00 1E */ rlwinm r3, r4, 0, 0, 0xf
/* 803CADC8 003C7D28 3C 03 FF FC */ addis r0, r3, 0xfffc
/* 803CADCC 003C7D2C 28 00 00 00 */ cmplwi r0, 0
/* 803CADD0 003C7D30 41 82 00 10 */ beq lbl_803CADE0
lbl_803CADD4:
/* 803CADD4 003C7D34 38 00 00 01 */ li r0, 1
/* 803CADD8 003C7D38 90 1E 00 20 */ stw r0, 0x20(r30)
/* 803CADDC 003C7D3C 48 00 00 3C */ b lbl_803CAE18
lbl_803CADE0:
/* 803CADE0 003C7D40 3C 60 80 3D */ lis r3, __GBAHandler@ha
/* 803CADE4 003C7D44 80 BE 00 0C */ lwz r5, 0xc(r30)
/* 803CADE8 003C7D48 39 03 AC 08 */ addi r8, r3, __GBAHandler@l
/* 803CADEC 003C7D4C 80 FE 00 10 */ lwz r7, 0x10(r30)
/* 803CADF0 003C7D50 81 3E 00 30 */ lwz r9, 0x30(r30)
/* 803CADF4 003C7D54 7F E3 FB 78 */ mr r3, r31
/* 803CADF8 003C7D58 81 5E 00 34 */ lwz r10, 0x34(r30)
/* 803CADFC 003C7D5C 38 9E 00 00 */ addi r4, r30, 0
/* 803CAE00 003C7D60 38 DE 00 05 */ addi r6, r30, 5
/* 803CAE04 003C7D64 4B FF 48 95 */ bl SITransfer
/* 803CAE08 003C7D68 2C 03 00 00 */ cmpwi r3, 0
/* 803CAE0C 003C7D6C 40 82 00 80 */ bne lbl_803CAE8C
/* 803CAE10 003C7D70 38 00 00 02 */ li r0, 2
/* 803CAE14 003C7D74 90 1E 00 20 */ stw r0, 0x20(r30)
lbl_803CAE18:
/* 803CAE18 003C7D78 81 9E 00 38 */ lwz r12, 0x38(r30)
/* 803CAE1C 003C7D7C 28 0C 00 00 */ cmplwi r12, 0
/* 803CAE20 003C7D80 41 82 00 18 */ beq lbl_803CAE38
/* 803CAE24 003C7D84 38 00 00 00 */ li r0, 0
/* 803CAE28 003C7D88 7D 88 03 A6 */ mtlr r12
/* 803CAE2C 003C7D8C 90 1E 00 38 */ stw r0, 0x38(r30)
/* 803CAE30 003C7D90 7F E3 FB 78 */ mr r3, r31
/* 803CAE34 003C7D94 4E 80 00 21 */ blrl
lbl_803CAE38:
/* 803CAE38 003C7D98 80 1E 00 1C */ lwz r0, 0x1c(r30)
/* 803CAE3C 003C7D9C 28 00 00 00 */ cmplwi r0, 0
/* 803CAE40 003C7DA0 41 82 00 4C */ beq lbl_803CAE8C
/* 803CAE44 003C7DA4 4B FB 46 35 */ bl OSGetCurrentContext
/* 803CAE48 003C7DA8 3B A3 00 00 */ addi r29, r3, 0
/* 803CAE4C 003C7DAC 38 61 00 10 */ addi r3, r1, 0x10
/* 803CAE50 003C7DB0 4B FB 47 C5 */ bl OSClearContext
/* 803CAE54 003C7DB4 38 61 00 10 */ addi r3, r1, 0x10
/* 803CAE58 003C7DB8 4B FB 45 C5 */ bl OSSetCurrentContext
/* 803CAE5C 003C7DBC 81 9E 00 1C */ lwz r12, 0x1c(r30)
/* 803CAE60 003C7DC0 38 00 00 00 */ li r0, 0
/* 803CAE64 003C7DC4 38 7F 00 00 */ addi r3, r31, 0
/* 803CAE68 003C7DC8 90 1E 00 1C */ stw r0, 0x1c(r30)
/* 803CAE6C 003C7DCC 7D 88 03 A6 */ mtlr r12
/* 803CAE70 003C7DD0 80 9E 00 20 */ lwz r4, 0x20(r30)
/* 803CAE74 003C7DD4 4E 80 00 21 */ blrl
/* 803CAE78 003C7DD8 38 61 00 10 */ addi r3, r1, 0x10
/* 803CAE7C 003C7DDC 4B FB 47 99 */ bl OSClearContext
/* 803CAE80 003C7DE0 7F A3 EB 78 */ mr r3, r29
/* 803CAE84 003C7DE4 4B FB 45 99 */ bl OSSetCurrentContext
/* 803CAE88 003C7DE8 4B FB 9C 65 */ bl __OSReschedule
lbl_803CAE8C:
/* 803CAE8C 003C7DEC 80 01 02 F4 */ lwz r0, 0x2f4(r1)
/* 803CAE90 003C7DF0 83 E1 02 EC */ lwz r31, 0x2ec(r1)
/* 803CAE94 003C7DF4 83 C1 02 E8 */ lwz r30, 0x2e8(r1)
/* 803CAE98 003C7DF8 83 A1 02 E4 */ lwz r29, 0x2e4(r1)
/* 803CAE9C 003C7DFC 38 21 02 F0 */ addi r1, r1, 0x2f0
/* 803CAEA0 003C7E00 7C 08 03 A6 */ mtlr r0
/* 803CAEA4 003C7E04 4E 80 00 20 */ blr
.global __GBATransfer
__GBATransfer:
/* 803CAEA8 003C7E08 7C 08 02 A6 */ mflr r0
/* 803CAEAC 003C7E0C 90 01 00 04 */ stw r0, 4(r1)
/* 803CAEB0 003C7E10 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 803CAEB4 003C7E14 BF 61 00 1C */ stmw r27, 0x1c(r1)
/* 803CAEB8 003C7E18 3B 63 00 00 */ addi r27, r3, 0
/* 803CAEBC 003C7E1C 3C 60 80 57 */ lis r3, __GBA@ha
/* 803CAEC0 003C7E20 57 67 40 2E */ slwi r7, r27, 8
/* 803CAEC4 003C7E24 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803CAEC8 003C7E28 3B 84 00 00 */ addi r28, r4, 0
/* 803CAECC 003C7E2C 3B A5 00 00 */ addi r29, r5, 0
/* 803CAED0 003C7E30 3B E6 00 00 */ addi r31, r6, 0
/* 803CAED4 003C7E34 7F C0 3A 14 */ add r30, r0, r7
/* 803CAED8 003C7E38 4B FB 67 89 */ bl OSDisableInterrupts
/* 803CAEDC 003C7E3C 93 FE 00 38 */ stw r31, 0x38(r30)
/* 803CAEE0 003C7E40 3C 80 80 3D */ lis r4, TypeAndStatusCallback@ha
/* 803CAEE4 003C7E44 3B E3 00 00 */ addi r31, r3, 0
/* 803CAEE8 003C7E48 93 9E 00 0C */ stw r28, 0xc(r30)
/* 803CAEEC 003C7E4C 38 84 AD 84 */ addi r4, r4, TypeAndStatusCallback@l
/* 803CAEF0 003C7E50 7F 63 DB 78 */ mr r3, r27
/* 803CAEF4 003C7E54 93 BE 00 10 */ stw r29, 0x10(r30)
/* 803CAEF8 003C7E58 4B FF 4D 69 */ bl SIGetTypeAsync
/* 803CAEFC 003C7E5C 7F E3 FB 78 */ mr r3, r31
/* 803CAF00 003C7E60 4B FB 67 89 */ bl OSRestoreInterrupts
/* 803CAF04 003C7E64 BB 61 00 1C */ lmw r27, 0x1c(r1)
/* 803CAF08 003C7E68 38 60 00 00 */ li r3, 0
/* 803CAF0C 003C7E6C 80 01 00 34 */ lwz r0, 0x34(r1)
/* 803CAF10 003C7E70 38 21 00 30 */ addi r1, r1, 0x30
/* 803CAF14 003C7E74 7C 08 03 A6 */ mtlr r0
/* 803CAF18 003C7E78 4E 80 00 20 */ blr
.global __GBASetDelay
__GBASetDelay:
/* 803CAF1C 003C7E7C 3C 80 80 57 */ lis r4, __GBA@ha
/* 803CAF20 003C7E80 54 63 40 2E */ slwi r3, r3, 8
/* 803CAF24 003C7E84 38 04 A1 A0 */ addi r0, r4, __GBA@l
/* 803CAF28 003C7E88 7C E0 1A 14 */ add r7, r0, r3
/* 803CAF2C 003C7E8C 80 67 00 30 */ lwz r3, 0x30(r7)
/* 803CAF30 003C7E90 80 87 00 34 */ lwz r4, 0x34(r7)
/* 803CAF34 003C7E94 90 C7 00 34 */ stw r6, 0x34(r7)
/* 803CAF38 003C7E98 90 A7 00 30 */ stw r5, 0x30(r7)
/* 803CAF3C 003C7E9C 4E 80 00 20 */ blr
.global __GBADSPTaskInit
__GBADSPTaskInit:
/* 803CAF40 003C7EA0 7C 08 02 A6 */ mflr r0
/* 803CAF44 003C7EA4 3C 80 80 57 */ lis r4, __GBA@ha
/* 803CAF48 003C7EA8 90 01 00 04 */ stw r0, 4(r1)
/* 803CAF4C 003C7EAC 38 84 A1 A0 */ addi r4, r4, __GBA@l
/* 803CAF50 003C7EB0 38 04 00 A8 */ addi r0, r4, 0xa8
/* 803CAF54 003C7EB4 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 803CAF58 003C7EB8 7C 00 18 40 */ cmplw r0, r3
/* 803CAF5C 003C7EBC 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 803CAF60 003C7EC0 40 82 00 0C */ bne lbl_803CAF6C
/* 803CAF64 003C7EC4 38 00 00 00 */ li r0, 0
/* 803CAF68 003C7EC8 48 00 00 68 */ b lbl_803CAFD0
lbl_803CAF6C:
/* 803CAF6C 003C7ECC 38 84 01 00 */ addi r4, r4, 0x100
/* 803CAF70 003C7ED0 38 04 00 A8 */ addi r0, r4, 0xa8
/* 803CAF74 003C7ED4 7C 00 18 40 */ cmplw r0, r3
/* 803CAF78 003C7ED8 40 82 00 0C */ bne lbl_803CAF84
/* 803CAF7C 003C7EDC 38 00 00 01 */ li r0, 1
/* 803CAF80 003C7EE0 48 00 00 50 */ b lbl_803CAFD0
lbl_803CAF84:
/* 803CAF84 003C7EE4 38 04 01 A8 */ addi r0, r4, 0x1a8
/* 803CAF88 003C7EE8 7C 00 18 40 */ cmplw r0, r3
/* 803CAF8C 003C7EEC 38 84 01 00 */ addi r4, r4, 0x100
/* 803CAF90 003C7EF0 40 82 00 0C */ bne lbl_803CAF9C
/* 803CAF94 003C7EF4 38 00 00 02 */ li r0, 2
/* 803CAF98 003C7EF8 48 00 00 38 */ b lbl_803CAFD0
lbl_803CAF9C:
/* 803CAF9C 003C7EFC 38 04 01 A8 */ addi r0, r4, 0x1a8
/* 803CAFA0 003C7F00 7C 00 18 40 */ cmplw r0, r3
/* 803CAFA4 003C7F04 40 82 00 0C */ bne lbl_803CAFB0
/* 803CAFA8 003C7F08 38 00 00 03 */ li r0, 3
/* 803CAFAC 003C7F0C 48 00 00 24 */ b lbl_803CAFD0
lbl_803CAFB0:
/* 803CAFB0 003C7F10 3C 60 80 3F */ lis r3, lbl_803F7520@ha
/* 803CAFB4 003C7F14 4C C6 31 82 */ crclr 6
/* 803CAFB8 003C7F18 3C 80 80 3F */ lis r4, lbl_803F752C@ha
/* 803CAFBC 003C7F1C 38 A4 75 2C */ addi r5, r4, lbl_803F752C@l
/* 803CAFC0 003C7F20 38 63 75 20 */ addi r3, r3, lbl_803F7520@l
/* 803CAFC4 003C7F24 38 80 00 A9 */ li r4, 0xa9
/* 803CAFC8 003C7F28 4B FB 4A 65 */ bl OSPanic
/* 803CAFCC 003C7F2C 38 00 FF FF */ li r0, -1
lbl_803CAFD0:
/* 803CAFD0 003C7F30 3C 60 80 57 */ lis r3, __GBA@ha
/* 803CAFD4 003C7F34 54 04 40 2E */ slwi r4, r0, 8
/* 803CAFD8 003C7F38 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803CAFDC 003C7F3C 7F E0 22 14 */ add r31, r0, r4
/* 803CAFE0 003C7F40 3C 60 AB BA */ lis r3, 0xabba
/* 803CAFE4 003C7F44 4B FA 4A 0D */ bl DSPSendMailToDSP
lbl_803CAFE8:
/* 803CAFE8 003C7F48 4B FA 49 D1 */ bl DSPCheckMailToDSP
/* 803CAFEC 003C7F4C 28 03 00 00 */ cmplwi r3, 0
/* 803CAFF0 003C7F50 40 82 FF F8 */ bne lbl_803CAFE8
/* 803CAFF4 003C7F54 80 7F 00 F8 */ lwz r3, 0xf8(r31)
/* 803CAFF8 003C7F58 4B FA 49 F9 */ bl DSPSendMailToDSP
lbl_803CAFFC:
/* 803CAFFC 003C7F5C 4B FA 49 BD */ bl DSPCheckMailToDSP
/* 803CB000 003C7F60 28 03 00 00 */ cmplwi r3, 0
/* 803CB004 003C7F64 40 82 FF F8 */ bne lbl_803CAFFC
/* 803CB008 003C7F68 80 01 00 24 */ lwz r0, 0x24(r1)
/* 803CB00C 003C7F6C 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 803CB010 003C7F70 38 21 00 20 */ addi r1, r1, 0x20
/* 803CB014 003C7F74 7C 08 03 A6 */ mtlr r0
/* 803CB018 003C7F78 4E 80 00 20 */ blr
.global __GBADSPTaskDone
__GBADSPTaskDone:
/* 803CB01C 003C7F7C 3C 80 80 57 */ lis r4, __GBA@ha
/* 803CB020 003C7F80 7C 08 02 A6 */ mflr r0
/* 803CB024 003C7F84 38 84 A1 A0 */ addi r4, r4, __GBA@l
/* 803CB028 003C7F88 90 01 00 04 */ stw r0, 4(r1)
/* 803CB02C 003C7F8C 38 04 00 A8 */ addi r0, r4, 0xa8
/* 803CB030 003C7F90 7C 00 18 40 */ cmplw r0, r3
/* 803CB034 003C7F94 94 21 FF F8 */ stwu r1, -8(r1)
/* 803CB038 003C7F98 40 82 00 0C */ bne lbl_803CB044
/* 803CB03C 003C7F9C 38 00 00 00 */ li r0, 0
/* 803CB040 003C7FA0 48 00 00 68 */ b lbl_803CB0A8
lbl_803CB044:
/* 803CB044 003C7FA4 38 84 01 00 */ addi r4, r4, 0x100
/* 803CB048 003C7FA8 38 04 00 A8 */ addi r0, r4, 0xa8
/* 803CB04C 003C7FAC 7C 00 18 40 */ cmplw r0, r3
/* 803CB050 003C7FB0 40 82 00 0C */ bne lbl_803CB05C
/* 803CB054 003C7FB4 38 00 00 01 */ li r0, 1
/* 803CB058 003C7FB8 48 00 00 50 */ b lbl_803CB0A8
lbl_803CB05C:
/* 803CB05C 003C7FBC 38 04 01 A8 */ addi r0, r4, 0x1a8
/* 803CB060 003C7FC0 7C 00 18 40 */ cmplw r0, r3
/* 803CB064 003C7FC4 38 84 01 00 */ addi r4, r4, 0x100
/* 803CB068 003C7FC8 40 82 00 0C */ bne lbl_803CB074
/* 803CB06C 003C7FCC 38 00 00 02 */ li r0, 2
/* 803CB070 003C7FD0 48 00 00 38 */ b lbl_803CB0A8
lbl_803CB074:
/* 803CB074 003C7FD4 38 04 01 A8 */ addi r0, r4, 0x1a8
/* 803CB078 003C7FD8 7C 00 18 40 */ cmplw r0, r3
/* 803CB07C 003C7FDC 40 82 00 0C */ bne lbl_803CB088
/* 803CB080 003C7FE0 38 00 00 03 */ li r0, 3
/* 803CB084 003C7FE4 48 00 00 24 */ b lbl_803CB0A8
lbl_803CB088:
/* 803CB088 003C7FE8 3C 60 80 3F */ lis r3, lbl_803F7520@ha
/* 803CB08C 003C7FEC 4C C6 31 82 */ crclr 6
/* 803CB090 003C7FF0 3C 80 80 3F */ lis r4, lbl_803F752C@ha
/* 803CB094 003C7FF4 38 A4 75 2C */ addi r5, r4, lbl_803F752C@l
/* 803CB098 003C7FF8 38 63 75 20 */ addi r3, r3, lbl_803F7520@l
/* 803CB09C 003C7FFC 38 80 00 A9 */ li r4, 0xa9
/* 803CB0A0 003C8000 4B FB 49 8D */ bl OSPanic
/* 803CB0A4 003C8004 38 00 FF FF */ li r0, -1
lbl_803CB0A8:
/* 803CB0A8 003C8008 7C 03 03 78 */ mr r3, r0
/* 803CB0AC 003C800C 38 80 00 00 */ li r4, 0
/* 803CB0B0 003C8010 4B FF ED B1 */ bl __GBAX01
/* 803CB0B4 003C8014 80 01 00 0C */ lwz r0, 0xc(r1)
/* 803CB0B8 003C8018 38 21 00 08 */ addi r1, r1, 8
/* 803CB0BC 003C801C 7C 08 03 A6 */ mtlr r0
/* 803CB0C0 003C8020 4E 80 00 20 */ blr
.global __GBAX02
__GBAX02:
/* 803CB0C4 003C8024 7C 08 02 A6 */ mflr r0
/* 803CB0C8 003C8028 3C A0 80 57 */ lis r5, __GBA@ha
/* 803CB0CC 003C802C 90 01 00 04 */ stw r0, 4(r1)
/* 803CB0D0 003C8030 38 05 A1 A0 */ addi r0, r5, __GBA@l
/* 803CB0D4 003C8034 54 63 40 2E */ slwi r3, r3, 8
/* 803CB0D8 003C8038 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 803CB0DC 003C803C 38 A0 00 04 */ li r5, 4
/* 803CB0E0 003C8040 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 803CB0E4 003C8044 7F E0 1A 14 */ add r31, r0, r3
/* 803CB0E8 003C8048 93 C1 00 18 */ stw r30, 0x18(r1)
/* 803CB0EC 003C804C 3B DF 00 40 */ addi r30, r31, 0x40
/* 803CB0F0 003C8050 93 A1 00 14 */ stw r29, 0x14(r1)
/* 803CB0F4 003C8054 83 BF 00 F8 */ lwz r29, 0xf8(r31)
/* 803CB0F8 003C8058 38 7D 00 00 */ addi r3, r29, 0
/* 803CB0FC 003C805C 4B C3 83 95 */ bl memcpy
/* 803CB100 003C8060 80 1E 00 00 */ lwz r0, 0(r30)
/* 803CB104 003C8064 38 7D 00 20 */ addi r3, r29, 0x20
/* 803CB108 003C8068 38 80 00 20 */ li r4, 0x20
/* 803CB10C 003C806C 90 1D 00 04 */ stw r0, 4(r29)
/* 803CB110 003C8070 80 1E 00 04 */ lwz r0, 4(r30)
/* 803CB114 003C8074 90 1D 00 08 */ stw r0, 8(r29)
/* 803CB118 003C8078 80 1E 00 0C */ lwz r0, 0xc(r30)
/* 803CB11C 003C807C 90 1D 00 0C */ stw r0, 0xc(r29)
/* 803CB120 003C8080 90 7D 00 10 */ stw r3, 0x10(r29)
/* 803CB124 003C8084 4B FB 39 61 */ bl DCInvalidateRange
/* 803CB128 003C8088 38 7D 00 00 */ addi r3, r29, 0
/* 803CB12C 003C808C 38 80 00 20 */ li r4, 0x20
/* 803CB130 003C8090 4B FB 39 81 */ bl DCFlushRange
/* 803CB134 003C8094 38 00 00 FF */ li r0, 0xff
/* 803CB138 003C8098 3C 80 80 3F */ lis r4, lbl_803F71A0@ha
/* 803CB13C 003C809C 90 1F 00 AC */ stw r0, 0xac(r31)
/* 803CB140 003C80A0 38 84 71 A0 */ addi r4, r4, lbl_803F71A0@l
/* 803CB144 003C80A4 3C 04 80 00 */ addis r0, r4, 0x8000
/* 803CB148 003C80A8 90 1F 00 B4 */ stw r0, 0xb4(r31)
/* 803CB14C 003C80AC 38 00 03 80 */ li r0, 0x380
/* 803CB150 003C80B0 3C A0 80 3D */ lis r5, __GBADSPTaskInit@ha
/* 803CB154 003C80B4 90 1F 00 B8 */ stw r0, 0xb8(r31)
/* 803CB158 003C80B8 38 C0 00 00 */ li r6, 0
/* 803CB15C 003C80BC 38 00 00 10 */ li r0, 0x10
/* 803CB160 003C80C0 90 DF 00 BC */ stw r6, 0xbc(r31)
/* 803CB164 003C80C4 38 A5 AF 40 */ addi r5, r5, __GBADSPTaskInit@l
/* 803CB168 003C80C8 3C 80 80 3D */ lis r4, __GBADSPTaskDone@ha
/* 803CB16C 003C80CC B0 1F 00 CC */ sth r0, 0xcc(r31)
/* 803CB170 003C80D0 38 04 B0 1C */ addi r0, r4, __GBADSPTaskDone@l
/* 803CB174 003C80D4 38 7F 00 A8 */ addi r3, r31, 0xa8
/* 803CB178 003C80D8 90 BF 00 D0 */ stw r5, 0xd0(r31)
/* 803CB17C 003C80DC 90 DF 00 D4 */ stw r6, 0xd4(r31)
/* 803CB180 003C80E0 90 1F 00 D8 */ stw r0, 0xd8(r31)
/* 803CB184 003C80E4 90 DF 00 DC */ stw r6, 0xdc(r31)
/* 803CB188 003C80E8 4B FA 49 D9 */ bl DSPAddTask
/* 803CB18C 003C80EC 80 01 00 24 */ lwz r0, 0x24(r1)
/* 803CB190 003C80F0 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 803CB194 003C80F4 83 C1 00 18 */ lwz r30, 0x18(r1)
/* 803CB198 003C80F8 83 A1 00 14 */ lwz r29, 0x14(r1)
/* 803CB19C 003C80FC 38 21 00 20 */ addi r1, r1, 0x20
/* 803CB1A0 003C8100 7C 08 03 A6 */ mtlr r0
/* 803CB1A4 003C8104 4E 80 00 20 */ blr

372
asm/Dolphin/THPAudio.s Normal file
View File

@ -0,0 +1,372 @@
.include "macros.inc"
.section .text, "ax" # 0x80003640 - 0x803CB1C0
.global THPAudioDecode
THPAudioDecode:
/* 803C90C8 003C6028 7C 08 02 A6 */ mflr r0
/* 803C90CC 003C602C 28 03 00 00 */ cmplwi r3, 0
/* 803C90D0 003C6030 90 01 00 04 */ stw r0, 4(r1)
/* 803C90D4 003C6034 94 21 FF A8 */ stwu r1, -0x58(r1)
/* 803C90D8 003C6038 BE 81 00 28 */ stmw r20, 0x28(r1)
/* 803C90DC 003C603C 3B E4 00 00 */ addi r31, r4, 0
/* 803C90E0 003C6040 41 82 00 0C */ beq lbl_803C90EC
/* 803C90E4 003C6044 28 1F 00 00 */ cmplwi r31, 0
/* 803C90E8 003C6048 40 82 00 0C */ bne lbl_803C90F4
lbl_803C90EC:
/* 803C90EC 003C604C 38 60 00 00 */ li r3, 0
/* 803C90F0 003C6050 48 00 04 28 */ b lbl_803C9518
lbl_803C90F4:
/* 803C90F4 003C6054 80 1F 00 00 */ lwz r0, 0(r31)
/* 803C90F8 003C6058 2C 05 00 01 */ cmpwi r5, 1
/* 803C90FC 003C605C 38 9F 00 50 */ addi r4, r31, 0x50
/* 803C9100 003C6060 7F 7F 02 14 */ add r27, r31, r0
/* 803C9104 003C6064 3B 7B 00 50 */ addi r27, r27, 0x50
/* 803C9108 003C6068 40 82 00 1C */ bne lbl_803C9124
/* 803C910C 003C606C 80 1F 00 04 */ lwz r0, 4(r31)
/* 803C9110 003C6070 3B C3 00 00 */ addi r30, r3, 0
/* 803C9114 003C6074 3B 40 00 01 */ li r26, 1
/* 803C9118 003C6078 54 00 08 3C */ slwi r0, r0, 1
/* 803C911C 003C607C 7F A3 02 14 */ add r29, r3, r0
/* 803C9120 003C6080 48 00 00 10 */ b lbl_803C9130
lbl_803C9124:
/* 803C9124 003C6084 3B C3 00 00 */ addi r30, r3, 0
/* 803C9128 003C6088 3B A3 00 02 */ addi r29, r3, 2
/* 803C912C 003C608C 3B 40 00 02 */ li r26, 2
lbl_803C9130:
/* 803C9130 003C6090 80 1F 00 00 */ lwz r0, 0(r31)
/* 803C9134 003C6094 28 00 00 00 */ cmplwi r0, 0
/* 803C9138 003C6098 40 82 01 54 */ bne lbl_803C928C
/* 803C913C 003C609C 38 61 00 14 */ addi r3, r1, 0x14
/* 803C9140 003C60A0 48 00 04 7D */ bl __THPAudioInitialize
/* 803C9144 003C60A4 3F 20 00 01 */ lis r25, 0x0000FFFF@ha
/* 803C9148 003C60A8 AA BF 00 48 */ lha r21, 0x48(r31)
/* 803C914C 003C60AC 3E E0 80 00 */ lis r23, 0x7FFFFFFF@ha
/* 803C9150 003C60B0 AA 9F 00 4A */ lha r20, 0x4a(r31)
/* 803C9154 003C60B4 57 5B 08 3C */ slwi r27, r26, 1
/* 803C9158 003C60B8 3B 59 FF FF */ addi r26, r25, 0x0000FFFF@l
/* 803C915C 003C60BC 3B 17 FF FF */ addi r24, r23, 0x7FFFFFFF@l
/* 803C9160 003C60C0 3A C0 00 00 */ li r22, 0
/* 803C9164 003C60C4 48 00 01 18 */ b lbl_803C927C
lbl_803C9168:
/* 803C9168 003C60C8 38 61 00 14 */ addi r3, r1, 0x14
/* 803C916C 003C60CC 48 00 03 C1 */ bl __THPAudioGetNewSample
/* 803C9170 003C60D0 88 A1 00 1C */ lbz r5, 0x1c(r1)
/* 803C9174 003C60D4 7E 86 07 34 */ extsh r6, r20
/* 803C9178 003C60D8 88 01 00 1D */ lbz r0, 0x1d(r1)
/* 803C917C 003C60DC 7E A4 07 34 */ extsh r4, r21
/* 803C9180 003C60E0 54 A5 10 3A */ slwi r5, r5, 2
/* 803C9184 003C60E4 7C BF 2A 14 */ add r5, r31, r5
/* 803C9188 003C60E8 A8 E5 00 0A */ lha r7, 0xa(r5)
/* 803C918C 003C60EC 7C 60 00 30 */ slw r0, r3, r0
/* 803C9190 003C60F0 A8 65 00 08 */ lha r3, 8(r5)
/* 803C9194 003C60F4 54 05 58 28 */ slwi r5, r0, 0xb
/* 803C9198 003C60F8 7C C7 31 D6 */ mullw r6, r7, r6
/* 803C919C 003C60FC 7C 83 21 D6 */ mullw r4, r3, r4
/* 803C91A0 003C6100 7C C3 FE 70 */ srawi r3, r6, 0x1f
/* 803C91A4 003C6104 7C 80 FE 70 */ srawi r0, r4, 0x1f
/* 803C91A8 003C6108 7C 86 20 14 */ addc r4, r6, r4
/* 803C91AC 003C610C 7C 63 01 14 */ adde r3, r3, r0
/* 803C91B0 003C6110 7C A0 FE 70 */ srawi r0, r5, 0x1f
/* 803C91B4 003C6114 7C 84 28 14 */ addc r4, r4, r5
/* 803C91B8 003C6118 7C 63 01 14 */ adde r3, r3, r0
/* 803C91BC 003C611C 38 A0 00 05 */ li r5, 5
/* 803C91C0 003C6120 4B FC 0D 35 */ bl __shl2i
/* 803C91C4 003C6124 7C 80 D0 38 */ and r0, r4, r26
/* 803C91C8 003C6128 54 00 04 3E */ clrlwi r0, r0, 0x10
/* 803C91CC 003C612C 28 00 80 00 */ cmplwi r0, 0x8000
/* 803C91D0 003C6130 38 C0 00 00 */ li r6, 0
/* 803C91D4 003C6134 7C 67 30 38 */ and r7, r3, r6
/* 803C91D8 003C6138 40 81 00 10 */ ble lbl_803C91E8
/* 803C91DC 003C613C 7C 84 C8 14 */ addc r4, r4, r25
/* 803C91E0 003C6140 7C 63 31 14 */ adde r3, r3, r6
/* 803C91E4 003C6144 48 00 00 24 */ b lbl_803C9208
lbl_803C91E8:
/* 803C91E8 003C6148 40 82 00 20 */ bne lbl_803C9208
/* 803C91EC 003C614C 7C 80 C8 38 */ and r0, r4, r25
/* 803C91F0 003C6150 7C 05 32 78 */ xor r5, r0, r6
/* 803C91F4 003C6154 7C E0 32 78 */ xor r0, r7, r6
/* 803C91F8 003C6158 7C A0 03 79 */ or. r0, r5, r0
/* 803C91FC 003C615C 41 82 00 0C */ beq lbl_803C9208
/* 803C9200 003C6160 7C 84 C8 14 */ addc r4, r4, r25
/* 803C9204 003C6164 7C 63 31 14 */ adde r3, r3, r6
lbl_803C9208:
/* 803C9208 003C6168 38 00 00 00 */ li r0, 0
/* 803C920C 003C616C 6C 06 80 00 */ xoris r6, r0, 0x8000
/* 803C9210 003C6170 6C 65 80 00 */ xoris r5, r3, 0x8000
/* 803C9214 003C6174 7C 04 C0 10 */ subfc r0, r4, r24
/* 803C9218 003C6178 7C A5 31 10 */ subfe r5, r5, r6
/* 803C921C 003C617C 7C A6 31 10 */ subfe r5, r6, r6
/* 803C9220 003C6180 7C A5 00 D1 */ neg. r5, r5
/* 803C9224 003C6184 41 82 00 0C */ beq lbl_803C9230
/* 803C9228 003C6188 38 97 FF FF */ addi r4, r23, -1
/* 803C922C 003C618C 38 60 00 00 */ li r3, 0
lbl_803C9230:
/* 803C9230 003C6190 38 00 FF FF */ li r0, -1
/* 803C9234 003C6194 6C 05 80 00 */ xoris r5, r0, 0x8000
/* 803C9238 003C6198 6C 66 80 00 */ xoris r6, r3, 0x8000
/* 803C923C 003C619C 7C 17 20 10 */ subfc r0, r23, r4
/* 803C9240 003C61A0 7C A5 31 10 */ subfe r5, r5, r6
/* 803C9244 003C61A4 7C A6 31 10 */ subfe r5, r6, r6
/* 803C9248 003C61A8 7C A5 00 D1 */ neg. r5, r5
/* 803C924C 003C61AC 41 82 00 0C */ beq lbl_803C9258
/* 803C9250 003C61B0 3C 80 80 00 */ lis r4, 0x8000
/* 803C9254 003C61B4 38 60 FF FF */ li r3, -1
lbl_803C9258:
/* 803C9258 003C61B8 38 A0 00 10 */ li r5, 0x10
/* 803C925C 003C61BC 4B FC 0C E1 */ bl __shr2i
/* 803C9260 003C61C0 B0 9D 00 00 */ sth r4, 0(r29)
/* 803C9264 003C61C4 7E B4 AB 78 */ mr r20, r21
/* 803C9268 003C61C8 3A A4 00 00 */ addi r21, r4, 0
/* 803C926C 003C61CC B0 9E 00 00 */ sth r4, 0(r30)
/* 803C9270 003C61D0 7F BD DA 14 */ add r29, r29, r27
/* 803C9274 003C61D4 7F DE DA 14 */ add r30, r30, r27
/* 803C9278 003C61D8 3A D6 00 01 */ addi r22, r22, 1
lbl_803C927C:
/* 803C927C 003C61DC 80 1F 00 04 */ lwz r0, 4(r31)
/* 803C9280 003C61E0 7C 16 00 40 */ cmplw r22, r0
/* 803C9284 003C61E4 41 80 FE E4 */ blt lbl_803C9168
/* 803C9288 003C61E8 48 00 02 8C */ b lbl_803C9514
lbl_803C928C:
/* 803C928C 003C61EC 38 61 00 14 */ addi r3, r1, 0x14
/* 803C9290 003C61F0 48 00 03 2D */ bl __THPAudioInitialize
/* 803C9294 003C61F4 3F 00 00 01 */ lis r24, 0x0000FFFF@ha
/* 803C9298 003C61F8 AA DF 00 48 */ lha r22, 0x48(r31)
/* 803C929C 003C61FC 3F 20 80 00 */ lis r25, 0x7FFFFFFF@ha
/* 803C92A0 003C6200 AA 9F 00 4A */ lha r20, 0x4a(r31)
/* 803C92A4 003C6204 57 5C 08 3C */ slwi r28, r26, 1
/* 803C92A8 003C6208 3A F8 FF FF */ addi r23, r24, 0x0000FFFF@l
/* 803C92AC 003C620C 3B 59 FF FF */ addi r26, r25, 0x7FFFFFFF@l
/* 803C92B0 003C6210 3A A0 00 00 */ li r21, 0
/* 803C92B4 003C6214 48 00 01 10 */ b lbl_803C93C4
lbl_803C92B8:
/* 803C92B8 003C6218 38 61 00 14 */ addi r3, r1, 0x14
/* 803C92BC 003C621C 48 00 02 71 */ bl __THPAudioGetNewSample
/* 803C92C0 003C6220 88 A1 00 1C */ lbz r5, 0x1c(r1)
/* 803C92C4 003C6224 7E 86 07 34 */ extsh r6, r20
/* 803C92C8 003C6228 88 01 00 1D */ lbz r0, 0x1d(r1)
/* 803C92CC 003C622C 7E C4 07 34 */ extsh r4, r22
/* 803C92D0 003C6230 54 A5 10 3A */ slwi r5, r5, 2
/* 803C92D4 003C6234 7C BF 2A 14 */ add r5, r31, r5
/* 803C92D8 003C6238 A8 E5 00 0A */ lha r7, 0xa(r5)
/* 803C92DC 003C623C 7C 60 00 30 */ slw r0, r3, r0
/* 803C92E0 003C6240 A8 65 00 08 */ lha r3, 8(r5)
/* 803C92E4 003C6244 54 05 58 28 */ slwi r5, r0, 0xb
/* 803C92E8 003C6248 7C C7 31 D6 */ mullw r6, r7, r6
/* 803C92EC 003C624C 7C 83 21 D6 */ mullw r4, r3, r4
/* 803C92F0 003C6250 7C C3 FE 70 */ srawi r3, r6, 0x1f
/* 803C92F4 003C6254 7C 80 FE 70 */ srawi r0, r4, 0x1f
/* 803C92F8 003C6258 7C 86 20 14 */ addc r4, r6, r4
/* 803C92FC 003C625C 7C 63 01 14 */ adde r3, r3, r0
/* 803C9300 003C6260 7C A0 FE 70 */ srawi r0, r5, 0x1f
/* 803C9304 003C6264 7C 84 28 14 */ addc r4, r4, r5
/* 803C9308 003C6268 7C 63 01 14 */ adde r3, r3, r0
/* 803C930C 003C626C 38 A0 00 05 */ li r5, 5
/* 803C9310 003C6270 4B FC 0B E5 */ bl __shl2i
/* 803C9314 003C6274 7C 80 B8 38 */ and r0, r4, r23
/* 803C9318 003C6278 54 00 04 3E */ clrlwi r0, r0, 0x10
/* 803C931C 003C627C 28 00 80 00 */ cmplwi r0, 0x8000
/* 803C9320 003C6280 38 C0 00 00 */ li r6, 0
/* 803C9324 003C6284 7C 67 30 38 */ and r7, r3, r6
/* 803C9328 003C6288 40 81 00 10 */ ble lbl_803C9338
/* 803C932C 003C628C 7C 84 C0 14 */ addc r4, r4, r24
/* 803C9330 003C6290 7C 63 31 14 */ adde r3, r3, r6
/* 803C9334 003C6294 48 00 00 24 */ b lbl_803C9358
lbl_803C9338:
/* 803C9338 003C6298 40 82 00 20 */ bne lbl_803C9358
/* 803C933C 003C629C 7C 80 C0 38 */ and r0, r4, r24
/* 803C9340 003C62A0 7C 05 32 78 */ xor r5, r0, r6
/* 803C9344 003C62A4 7C E0 32 78 */ xor r0, r7, r6
/* 803C9348 003C62A8 7C A0 03 79 */ or. r0, r5, r0
/* 803C934C 003C62AC 41 82 00 0C */ beq lbl_803C9358
/* 803C9350 003C62B0 7C 84 C0 14 */ addc r4, r4, r24
/* 803C9354 003C62B4 7C 63 31 14 */ adde r3, r3, r6
lbl_803C9358:
/* 803C9358 003C62B8 38 E0 00 00 */ li r7, 0
/* 803C935C 003C62BC 6C E6 80 00 */ xoris r6, r7, 0x8000
/* 803C9360 003C62C0 6C 65 80 00 */ xoris r5, r3, 0x8000
/* 803C9364 003C62C4 7C 04 D0 10 */ subfc r0, r4, r26
/* 803C9368 003C62C8 7C A5 31 10 */ subfe r5, r5, r6
/* 803C936C 003C62CC 7C A6 31 10 */ subfe r5, r6, r6
/* 803C9370 003C62D0 7C A5 00 D1 */ neg. r5, r5
/* 803C9374 003C62D4 41 82 00 0C */ beq lbl_803C9380
/* 803C9378 003C62D8 38 99 FF FF */ addi r4, r25, -1
/* 803C937C 003C62DC 38 67 00 00 */ addi r3, r7, 0
lbl_803C9380:
/* 803C9380 003C62E0 38 E0 FF FF */ li r7, -1
/* 803C9384 003C62E4 6C 66 80 00 */ xoris r6, r3, 0x8000
/* 803C9388 003C62E8 6C E5 80 00 */ xoris r5, r7, 0x8000
/* 803C938C 003C62EC 7C 19 20 10 */ subfc r0, r25, r4
/* 803C9390 003C62F0 7C A5 31 10 */ subfe r5, r5, r6
/* 803C9394 003C62F4 7C A6 31 10 */ subfe r5, r6, r6
/* 803C9398 003C62F8 7C A5 00 D1 */ neg. r5, r5
/* 803C939C 003C62FC 41 82 00 0C */ beq lbl_803C93A8
/* 803C93A0 003C6300 3C 80 80 00 */ lis r4, 0x8000
/* 803C93A4 003C6304 38 67 00 00 */ addi r3, r7, 0
lbl_803C93A8:
/* 803C93A8 003C6308 38 A0 00 10 */ li r5, 0x10
/* 803C93AC 003C630C 4B FC 0B 91 */ bl __shr2i
/* 803C93B0 003C6310 B0 9D 00 00 */ sth r4, 0(r29)
/* 803C93B4 003C6314 3A 96 00 00 */ addi r20, r22, 0
/* 803C93B8 003C6318 3A C4 00 00 */ addi r22, r4, 0
/* 803C93BC 003C631C 7F BD E2 14 */ add r29, r29, r28
/* 803C93C0 003C6320 3A B5 00 01 */ addi r21, r21, 1
lbl_803C93C4:
/* 803C93C4 003C6324 80 1F 00 04 */ lwz r0, 4(r31)
/* 803C93C8 003C6328 7C 15 00 40 */ cmplw r21, r0
/* 803C93CC 003C632C 41 80 FE EC */ blt lbl_803C92B8
/* 803C93D0 003C6330 38 61 00 14 */ addi r3, r1, 0x14
/* 803C93D4 003C6334 38 9B 00 00 */ addi r4, r27, 0
/* 803C93D8 003C6338 48 00 01 E5 */ bl __THPAudioInitialize
/* 803C93DC 003C633C 3F 40 00 01 */ lis r26, 0x0000FFFF@ha
/* 803C93E0 003C6340 AA FF 00 4C */ lha r23, 0x4c(r31)
/* 803C93E4 003C6344 3F 60 80 00 */ lis r27, 0x7FFFFFFF@ha
/* 803C93E8 003C6348 AA BF 00 4E */ lha r21, 0x4e(r31)
/* 803C93EC 003C634C 3B 3A FF FF */ addi r25, r26, 0x0000FFFF@l
/* 803C93F0 003C6350 3B BB FF FF */ addi r29, r27, 0x7FFFFFFF@l
/* 803C93F4 003C6354 3A C0 00 00 */ li r22, 0
/* 803C93F8 003C6358 48 00 01 10 */ b lbl_803C9508
lbl_803C93FC:
/* 803C93FC 003C635C 38 61 00 14 */ addi r3, r1, 0x14
/* 803C9400 003C6360 48 00 01 2D */ bl __THPAudioGetNewSample
/* 803C9404 003C6364 88 A1 00 1C */ lbz r5, 0x1c(r1)
/* 803C9408 003C6368 7E A6 07 34 */ extsh r6, r21
/* 803C940C 003C636C 88 01 00 1D */ lbz r0, 0x1d(r1)
/* 803C9410 003C6370 7E E4 07 34 */ extsh r4, r23
/* 803C9414 003C6374 54 A5 10 3A */ slwi r5, r5, 2
/* 803C9418 003C6378 7C BF 2A 14 */ add r5, r31, r5
/* 803C941C 003C637C A8 E5 00 2A */ lha r7, 0x2a(r5)
/* 803C9420 003C6380 7C 60 00 30 */ slw r0, r3, r0
/* 803C9424 003C6384 A8 65 00 28 */ lha r3, 0x28(r5)
/* 803C9428 003C6388 54 05 58 28 */ slwi r5, r0, 0xb
/* 803C942C 003C638C 7C C7 31 D6 */ mullw r6, r7, r6
/* 803C9430 003C6390 7C 83 21 D6 */ mullw r4, r3, r4
/* 803C9434 003C6394 7C C3 FE 70 */ srawi r3, r6, 0x1f
/* 803C9438 003C6398 7C 80 FE 70 */ srawi r0, r4, 0x1f
/* 803C943C 003C639C 7C 86 20 14 */ addc r4, r6, r4
/* 803C9440 003C63A0 7C 63 01 14 */ adde r3, r3, r0
/* 803C9444 003C63A4 7C A0 FE 70 */ srawi r0, r5, 0x1f
/* 803C9448 003C63A8 7C 84 28 14 */ addc r4, r4, r5
/* 803C944C 003C63AC 7C 63 01 14 */ adde r3, r3, r0
/* 803C9450 003C63B0 38 A0 00 05 */ li r5, 5
/* 803C9454 003C63B4 4B FC 0A A1 */ bl __shl2i
/* 803C9458 003C63B8 7C 80 C8 38 */ and r0, r4, r25
/* 803C945C 003C63BC 54 00 04 3E */ clrlwi r0, r0, 0x10
/* 803C9460 003C63C0 28 00 80 00 */ cmplwi r0, 0x8000
/* 803C9464 003C63C4 38 C0 00 00 */ li r6, 0
/* 803C9468 003C63C8 7C 67 30 38 */ and r7, r3, r6
/* 803C946C 003C63CC 40 81 00 10 */ ble lbl_803C947C
/* 803C9470 003C63D0 7C 84 D0 14 */ addc r4, r4, r26
/* 803C9474 003C63D4 7C 63 31 14 */ adde r3, r3, r6
/* 803C9478 003C63D8 48 00 00 24 */ b lbl_803C949C
lbl_803C947C:
/* 803C947C 003C63DC 40 82 00 20 */ bne lbl_803C949C
/* 803C9480 003C63E0 7C 80 D0 38 */ and r0, r4, r26
/* 803C9484 003C63E4 7C 05 32 78 */ xor r5, r0, r6
/* 803C9488 003C63E8 7C E0 32 78 */ xor r0, r7, r6
/* 803C948C 003C63EC 7C A0 03 79 */ or. r0, r5, r0
/* 803C9490 003C63F0 41 82 00 0C */ beq lbl_803C949C
/* 803C9494 003C63F4 7C 84 D0 14 */ addc r4, r4, r26
/* 803C9498 003C63F8 7C 63 31 14 */ adde r3, r3, r6
lbl_803C949C:
/* 803C949C 003C63FC 38 E0 00 00 */ li r7, 0
/* 803C94A0 003C6400 6C E6 80 00 */ xoris r6, r7, 0x8000
/* 803C94A4 003C6404 6C 65 80 00 */ xoris r5, r3, 0x8000
/* 803C94A8 003C6408 7C 04 E8 10 */ subfc r0, r4, r29
/* 803C94AC 003C640C 7C A5 31 10 */ subfe r5, r5, r6
/* 803C94B0 003C6410 7C A6 31 10 */ subfe r5, r6, r6
/* 803C94B4 003C6414 7C A5 00 D1 */ neg. r5, r5
/* 803C94B8 003C6418 41 82 00 0C */ beq lbl_803C94C4
/* 803C94BC 003C641C 38 9B FF FF */ addi r4, r27, -1
/* 803C94C0 003C6420 38 67 00 00 */ addi r3, r7, 0
lbl_803C94C4:
/* 803C94C4 003C6424 38 E0 FF FF */ li r7, -1
/* 803C94C8 003C6428 6C 66 80 00 */ xoris r6, r3, 0x8000
/* 803C94CC 003C642C 6C E5 80 00 */ xoris r5, r7, 0x8000
/* 803C94D0 003C6430 7C 1B 20 10 */ subfc r0, r27, r4
/* 803C94D4 003C6434 7C A5 31 10 */ subfe r5, r5, r6
/* 803C94D8 003C6438 7C A6 31 10 */ subfe r5, r6, r6
/* 803C94DC 003C643C 7C A5 00 D1 */ neg. r5, r5
/* 803C94E0 003C6440 41 82 00 0C */ beq lbl_803C94EC
/* 803C94E4 003C6444 3C 80 80 00 */ lis r4, 0x8000
/* 803C94E8 003C6448 38 67 00 00 */ addi r3, r7, 0
lbl_803C94EC:
/* 803C94EC 003C644C 38 A0 00 10 */ li r5, 0x10
/* 803C94F0 003C6450 4B FC 0A 4D */ bl __shr2i
/* 803C94F4 003C6454 B0 9E 00 00 */ sth r4, 0(r30)
/* 803C94F8 003C6458 3A B7 00 00 */ addi r21, r23, 0
/* 803C94FC 003C645C 3A E4 00 00 */ addi r23, r4, 0
/* 803C9500 003C6460 7F DE E2 14 */ add r30, r30, r28
/* 803C9504 003C6464 3A D6 00 01 */ addi r22, r22, 1
lbl_803C9508:
/* 803C9508 003C6468 80 1F 00 04 */ lwz r0, 4(r31)
/* 803C950C 003C646C 7C 16 00 40 */ cmplw r22, r0
/* 803C9510 003C6470 41 80 FE EC */ blt lbl_803C93FC
lbl_803C9514:
/* 803C9514 003C6474 80 7F 00 04 */ lwz r3, 4(r31)
lbl_803C9518:
/* 803C9518 003C6478 BA 81 00 28 */ lmw r20, 0x28(r1)
/* 803C951C 003C647C 80 01 00 5C */ lwz r0, 0x5c(r1)
/* 803C9520 003C6480 38 21 00 58 */ addi r1, r1, 0x58
/* 803C9524 003C6484 7C 08 03 A6 */ mtlr r0
/* 803C9528 003C6488 4E 80 00 20 */ blr
.global __THPAudioGetNewSample
__THPAudioGetNewSample:
/* 803C952C 003C648C 80 03 00 04 */ lwz r0, 4(r3)
/* 803C9530 003C6490 54 00 07 3F */ clrlwi. r0, r0, 0x1c
/* 803C9534 003C6494 40 82 00 3C */ bne lbl_803C9570
/* 803C9538 003C6498 80 83 00 00 */ lwz r4, 0(r3)
/* 803C953C 003C649C 88 04 00 00 */ lbz r0, 0(r4)
/* 803C9540 003C64A0 54 00 E7 7E */ rlwinm r0, r0, 0x1c, 0x1d, 0x1f
/* 803C9544 003C64A4 98 03 00 08 */ stb r0, 8(r3)
/* 803C9548 003C64A8 80 83 00 00 */ lwz r4, 0(r3)
/* 803C954C 003C64AC 88 04 00 00 */ lbz r0, 0(r4)
/* 803C9550 003C64B0 54 00 07 3E */ clrlwi r0, r0, 0x1c
/* 803C9554 003C64B4 98 03 00 09 */ stb r0, 9(r3)
/* 803C9558 003C64B8 80 83 00 00 */ lwz r4, 0(r3)
/* 803C955C 003C64BC 38 04 00 01 */ addi r0, r4, 1
/* 803C9560 003C64C0 90 03 00 00 */ stw r0, 0(r3)
/* 803C9564 003C64C4 80 83 00 04 */ lwz r4, 4(r3)
/* 803C9568 003C64C8 38 04 00 02 */ addi r0, r4, 2
/* 803C956C 003C64CC 90 03 00 04 */ stw r0, 4(r3)
lbl_803C9570:
/* 803C9570 003C64D0 80 03 00 04 */ lwz r0, 4(r3)
/* 803C9574 003C64D4 54 00 07 FF */ clrlwi. r0, r0, 0x1f
/* 803C9578 003C64D8 41 82 00 20 */ beq lbl_803C9598
/* 803C957C 003C64DC 80 A3 00 00 */ lwz r5, 0(r3)
/* 803C9580 003C64E0 88 85 00 00 */ lbz r4, 0(r5)
/* 803C9584 003C64E4 38 05 00 01 */ addi r0, r5, 1
/* 803C9588 003C64E8 90 03 00 00 */ stw r0, 0(r3)
/* 803C958C 003C64EC 54 80 E0 06 */ slwi r0, r4, 0x1c
/* 803C9590 003C64F0 7C 05 E6 70 */ srawi r5, r0, 0x1c
/* 803C9594 003C64F4 48 00 00 14 */ b lbl_803C95A8
lbl_803C9598:
/* 803C9598 003C64F8 80 83 00 00 */ lwz r4, 0(r3)
/* 803C959C 003C64FC 88 04 00 00 */ lbz r0, 0(r4)
/* 803C95A0 003C6500 54 00 C0 06 */ rlwinm r0, r0, 0x18, 0, 3
/* 803C95A4 003C6504 7C 05 E6 70 */ srawi r5, r0, 0x1c
lbl_803C95A8:
/* 803C95A8 003C6508 80 83 00 04 */ lwz r4, 4(r3)
/* 803C95AC 003C650C 38 04 00 01 */ addi r0, r4, 1
/* 803C95B0 003C6510 90 03 00 04 */ stw r0, 4(r3)
/* 803C95B4 003C6514 7C A3 2B 78 */ mr r3, r5
/* 803C95B8 003C6518 4E 80 00 20 */ blr
.global __THPAudioInitialize
__THPAudioInitialize:
/* 803C95BC 003C651C 90 83 00 00 */ stw r4, 0(r3)
/* 803C95C0 003C6520 38 00 00 02 */ li r0, 2
/* 803C95C4 003C6524 90 03 00 04 */ stw r0, 4(r3)
/* 803C95C8 003C6528 80 83 00 00 */ lwz r4, 0(r3)
/* 803C95CC 003C652C 88 04 00 00 */ lbz r0, 0(r4)
/* 803C95D0 003C6530 54 00 E7 7E */ rlwinm r0, r0, 0x1c, 0x1d, 0x1f
/* 803C95D4 003C6534 98 03 00 08 */ stb r0, 8(r3)
/* 803C95D8 003C6538 80 83 00 00 */ lwz r4, 0(r3)
/* 803C95DC 003C653C 88 04 00 00 */ lbz r0, 0(r4)
/* 803C95E0 003C6540 54 00 07 3E */ clrlwi r0, r0, 0x1c
/* 803C95E4 003C6544 98 03 00 09 */ stb r0, 9(r3)
/* 803C95E8 003C6548 80 83 00 00 */ lwz r4, 0(r3)
/* 803C95EC 003C654C 38 04 00 01 */ addi r0, r4, 1
/* 803C95F0 003C6550 90 03 00 00 */ stw r0, 0(r3)
/* 803C95F4 003C6554 4E 80 00 20 */ blr

7933
asm/Dolphin/THPDec.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -694,14 +694,14 @@ lbl_80569E98:
.global lbl_80569F60
lbl_80569F60:
.skip 0x118
.global lbl_8056A078
lbl_8056A078:
.global __THPMCUBuffer
__THPMCUBuffer:
.skip 0x28
.global lbl_8056A0A0
lbl_8056A0A0:
.skip 0x100
.global lbl_8056A1A0
lbl_8056A1A0:
.global __GBA
__GBA:
.skip 0x400
.global lbl_8056A5A0
lbl_8056A5A0:

View File

@ -1777,6 +1777,6 @@ lbl_803D8B48:
.global lbl_803D8BD0
lbl_803D8BD0:
.incbin "baserom.dol", 0x3D5BD0, 0x100
.global lbl_803D8CD0
lbl_803D8CD0:
.global __THPJpegNaturalOrder
__THPJpegNaturalOrder:
.incbin "baserom.dol", 0x3D5CD0, 0x90

View File

@ -2933,23 +2933,23 @@ lbl_805A9BF0:
.global lbl_805A9BF4
lbl_805A9BF4:
.skip 0xC
.global lbl_805A9C00
lbl_805A9C00:
.global Ydchuff
Ydchuff:
.skip 0x20
.global lbl_805A9C20
lbl_805A9C20:
.global Udchuff
Udchuff:
.skip 0x20
.global lbl_805A9C40
lbl_805A9C40:
.global Vdchuff
Vdchuff:
.skip 0x20
.global lbl_805A9C60
lbl_805A9C60:
.global Yachuff
Yachuff:
.skip 0x20
.global lbl_805A9C80
lbl_805A9C80:
.global Uachuff
Uachuff:
.skip 0x20
.global lbl_805A9CA0
lbl_805A9CA0:
.global Vachuff
Vachuff:
.skip 0x4
.global lbl_805A9CA4
lbl_805A9CA4:
@ -2975,15 +2975,15 @@ lbl_805A9D04:
.global lbl_805A9D08
lbl_805A9D08:
.skip 0x4
.global lbl_805A9D0C
lbl_805A9D0C:
.global __THPWorkArea
__THPWorkArea:
.skip 0x4
.global lbl_805A9D10
lbl_805A9D10:
.global __THPInfo
__THPInfo:
.skip 0x4
.global lbl_805A9D14
lbl_805A9D14:
.global __THPInitFlag
__THPInitFlag:
.skip 0x4
.global lbl_805A9D18
lbl_805A9D18:
.global __GBAReset
__GBAReset:
.skip 0x4

View File

@ -1 +1 @@
82faa4a1d1547ce49d71e3fb669e91c2b7cd2778
f7514df3bf7616fd34e2f7b3bb6fba602783c65b

View File

@ -4,7 +4,13 @@ INIT_O_FILES :=\
$(BUILD_DIR)/asm/Runtime/PPCEABI/H/__mem.o
TEXT_O_FILES :=\
$(BUILD_DIR)/asm/text.o
$(BUILD_DIR)/asm/text.o\
$(BUILD_DIR)/asm/Dolphin/THPDec.o\
$(BUILD_DIR)/asm/Dolphin/THPAudio.o\
$(BUILD_DIR)/asm/Dolphin/GBA.o\
$(BUILD_DIR)/asm/Dolphin/GBARead.o\
$(BUILD_DIR)/asm/Dolphin/GBAWrite.o\
$(BUILD_DIR)/asm/Dolphin/GBAXfer.o
EXTAB_O_FILES :=\
$(BUILD_DIR)/asm/extab.o

197
tools/calcprogress.py Normal file
View File

@ -0,0 +1,197 @@
#!/usr/bin/env python3
################################################################################
# Description #
################################################################################
# calcprogress: Used to calculate the progress of the Metroid Prime decomp. #
# Prints to stdout for now, but eventually will have some form of storage, #
# i.e. CSV, so that it can be used for a webpage display. #
# #
# Usage: No arguments needed #
################################################################################
###############################################
# #
# Imports #
# #
###############################################
import os
import sys
import struct
import re
import math
###############################################
# #
# Constants #
# #
###############################################
DOL_PATH = "baserom.dol"
MAP_PATH = "build/mp1.0/MetroidPrime.MAP"
MEM1_HI = 0x81200000
MEM1_LO = 0x80004000
MW_WII_SYMBOL_REGEX = r"^\s*"\
r"(?P<SectOfs>\w{8})\s+"\
r"(?P<Size>\w{6})\s+"\
r"(?P<VirtOfs>\w{8})\s+"\
r"(?P<FileOfs>\w{8})\s+"\
r"(\w{1,2})\s+"\
r"(?P<Symbol>[0-9A-Za-z_<>$@.*]*)\s*"\
r"(?P<Object>\S*)"
MW_GC_SYMBOL_REGEX = r"^\s*"\
r"(?P<SectOfs>\w{8})\s+"\
r"(?P<Size>\w{6})\s+"\
r"(?P<VirtOfs>\w{8})\s+"\
r"(\w{1,2})\s+"\
r"(?P<Symbol>[0-9A-Za-z_<>$@.*]*)\s*"\
r"(?P<Object>\S*)"
REGEX_TO_USE = MW_GC_SYMBOL_REGEX
TEXT_SECTIONS = ["init", "text"]
DATA_SECTIONS = [
"rodata", "data", "bss", "sdata", "sbss", "sdata2", "sbss2",
"ctors", "_ctors", "dtors", "ctors$99", "_ctors$99", "ctors$00", "dtors$99",
"extab_", "extabindex_", "_extab", "_exidx"
]
# DOL info
TEXT_SECTION_COUNT = 7
DATA_SECTION_COUNT = 11
SECTION_TEXT = 0
SECTION_DATA = 1
###############################################
# #
# Entrypoint #
# #
###############################################
if __name__ == "__main__":
# Sum up DOL section sizes
dol_handle = open(DOL_PATH, "rb")
# Seek to virtual addresses
dol_handle.seek(0x48)
# Read virtual addresses
text_starts = list()
for i in range(TEXT_SECTION_COUNT):
text_starts.append(int.from_bytes(dol_handle.read(4), byteorder='big'))
data_starts = list()
for i in range(DATA_SECTION_COUNT):
data_starts.append(int.from_bytes(dol_handle.read(4), byteorder='big'))
# Read lengths
text_sizes = list()
for i in range(TEXT_SECTION_COUNT):
text_sizes.append(int.from_bytes(dol_handle.read(4), byteorder='big'))
data_sizes = list()
for i in range(DATA_SECTION_COUNT):
data_sizes.append(int.from_bytes(dol_handle.read(4), byteorder='big'))
# BSS address + length
bss_start = int.from_bytes(dol_handle.read(4), byteorder='big')
bss_size = int.from_bytes(dol_handle.read(4), byteorder='big')
bss_end = bss_start + bss_size
dol_code_size = 0
dol_data_size = 0
for i in range(DATA_SECTION_COUNT):
# Ignore sections inside BSS
if (data_starts[i] >= bss_start) and (data_starts[i] + data_sizes[i] <= bss_end): continue
dol_data_size += data_sizes[i]
dol_data_size += bss_size
for i in text_sizes:
dol_code_size += i
# Open map file
mapfile = open(MAP_PATH, "r")
symbols = mapfile.readlines()
decomp_code_size = 0
decomp_data_size = 0
section_type = None
# Find first section
first_section = 0
while (symbols[first_section].startswith(".") == False and "section layout" not in symbols[first_section]): first_section += 1
assert(first_section < len(symbols)), "Map file contains no sections!!!"
cur_object = None
cur_size = 0
j = 0
for i in range(first_section, len(symbols)):
# New section
if (symbols[i].startswith(".") == True or "section layout" in symbols[i]):
# Grab section name (i.e. ".init section layout" -> "init")
sectionName = re.search(r"\.*(?P<Name>\w+)\s", symbols[i]).group("Name")
# Determine type of section
section_type = SECTION_DATA if (sectionName in DATA_SECTIONS) else SECTION_TEXT
# Parse symbols until we hit the next section declaration
else:
if "UNUSED" in symbols[i]: continue
if "entry of" in symbols[i]:
if j == i - 1:
if section_type == SECTION_TEXT:
decomp_code_size -= cur_size
else:
decomp_data_size -= cur_size
cur_size = 0
#print(f"Line* {j}: {symbols[j]}")
#print(f"Line {i}: {symbols[i]}")
continue
assert(section_type != None), f"Symbol found outside of a section!!!\n{symbols[i]}"
match_obj = re.search(REGEX_TO_USE, symbols[i])
# Should be a symbol in ASM (so we discard it)
if (match_obj == None):
#print(f"Line {i}: {symbols[i]}")
continue
# Has the object file changed?
last_object = cur_object
cur_object = match_obj.group("Object").strip()
if last_object != cur_object: continue
# Is the symbol a file-wide section?
symb = match_obj.group("Symbol")
if (symb.startswith("*fill*")) or (symb.startswith(".") and symb[1:] in TEXT_SECTIONS or symb[1:] in DATA_SECTIONS): continue
# For sections that don't start with "."
if (symb in DATA_SECTIONS): continue
# If not, we accumulate the file size
cur_size = int(match_obj.group("Size"), 16)
j = i
if (section_type == SECTION_TEXT):
decomp_code_size += cur_size
else:
decomp_data_size += cur_size
# Calculate percentages
codeFrac = 1500 # total code "item" amount
dataFrac = 250 # total data "item" amount
codeItem = "energy" # code flavor item
dataItem = "missiles" # data flavor item
codeCompletionPcnt = (decomp_code_size / dol_code_size) # code completion percent
dataCompletionPcnt = (decomp_data_size / dol_data_size) # data completion percent
bytesPerCodeItem = dol_code_size / codeFrac # bytes per code item
bytesPerDataItem = dol_data_size / dataFrac # bytes per data item
codeCount = math.floor(decomp_code_size / bytesPerCodeItem)
dataCount = math.floor(decomp_data_size / bytesPerDataItem)
print("Progress:")
print(f"\tCode sections: {decomp_code_size} / {dol_code_size}\tbytes in src ({codeCompletionPcnt:%})")
print(f"\tData sections: {decomp_data_size} / {dol_data_size}\tbytes in src ({dataCompletionPcnt:%})")
print("\nYou have {} out of {} {} and collected {} out of {} {}.".format(codeCount, codeFrac, codeItem, dataCount, dataFrac, dataItem))