prime/asm/Dolphin/GBAXfer.s

414 lines
19 KiB
ArmAsm

.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