prime/asm/Dolphin/GBA/GBA.s

252 lines
10 KiB
ArmAsm

.include "macros.inc"
.section .bss
.balign 8
.global SecParams
SecParams:
.skip 0x100
.global __GBA
__GBA:
.skip 0x400
.section .sbss, "wa"
.balign 8
.global __GBAReset
__GBAReset:
.skip 0x4
.section .data, "wa"
.balign 8
ResetFunctionInfo:
.4byte OnReset
.4byte 127
.4byte 0
.4byte 0
.section .text, "ax"
.global ShortCommandProc
ShortCommandProc:
/* 803C95F8 003C6558 3C 80 80 57 */ lis r4, __GBA@ha
/* 803C95FC 003C655C 54 63 40 2E */ slwi r3, r3, 8
/* 803C9600 003C6560 38 04 A1 A0 */ addi r0, r4, __GBA@l
/* 803C9604 003C6564 7C 60 1A 14 */ add r3, r0, r3
/* 803C9608 003C6568 80 03 00 20 */ lwz r0, 0x20(r3)
/* 803C960C 003C656C 2C 00 00 00 */ cmpwi r0, 0
/* 803C9610 003C6570 4C 82 00 20 */ bnelr
/* 803C9614 003C6574 88 03 00 05 */ lbz r0, 5(r3)
/* 803C9618 003C6578 28 00 00 00 */ cmplwi r0, 0
/* 803C961C 003C657C 40 82 00 10 */ bne lbl_803C962C
/* 803C9620 003C6580 88 03 00 06 */ lbz r0, 6(r3)
/* 803C9624 003C6584 28 00 00 04 */ cmplwi r0, 4
/* 803C9628 003C6588 41 82 00 10 */ beq lbl_803C9638
lbl_803C962C:
/* 803C962C 003C658C 38 00 00 01 */ li r0, 1
/* 803C9630 003C6590 90 03 00 20 */ stw r0, 0x20(r3)
/* 803C9634 003C6594 4E 80 00 20 */ blr
lbl_803C9638:
/* 803C9638 003C6598 88 03 00 07 */ lbz r0, 7(r3)
/* 803C963C 003C659C 80 63 00 14 */ lwz r3, 0x14(r3)
/* 803C9640 003C65A0 70 00 00 3A */ andi. r0, r0, 0x3a
/* 803C9644 003C65A4 98 03 00 00 */ stb r0, 0(r3)
/* 803C9648 003C65A8 4E 80 00 20 */ blr
.global GBAInit
GBAInit:
/* 803C964C 003C65AC 7C 08 02 A6 */ mflr r0
/* 803C9650 003C65B0 3C 60 80 00 */ lis r3, 0x800000F8@ha
/* 803C9654 003C65B4 90 01 00 04 */ stw r0, 4(r1)
/* 803C9658 003C65B8 3C 80 80 57 */ lis r4, __GBA@ha
/* 803C965C 003C65BC 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 803C9660 003C65C0 BF 61 00 0C */ stmw r27, 0xc(r1)
/* 803C9664 003C65C4 3B A4 A1 A0 */ addi r29, r4, __GBA@l
/* 803C9668 003C65C8 3B 60 00 00 */ li r27, 0
/* 803C966C 003C65CC 3B E0 00 00 */ li r31, 0
/* 803C9670 003C65D0 80 03 00 F8 */ lwz r0, 0x800000F8@l(r3)
/* 803C9674 003C65D4 3C 60 43 1C */ lis r3, 0x431BDE83@ha
/* 803C9678 003C65D8 38 63 DE 83 */ addi r3, r3, 0x431BDE83@l
/* 803C967C 003C65DC 54 00 F0 BE */ srwi r0, r0, 2
/* 803C9680 003C65E0 7C 03 00 16 */ mulhwu r0, r3, r0
/* 803C9684 003C65E4 54 00 8B FE */ srwi r0, r0, 0xf
/* 803C9688 003C65E8 1C 00 00 3C */ mulli r0, r0, 0x3c
/* 803C968C 003C65EC 3C 60 80 57 */ lis r3, SecParams@ha
/* 803C9690 003C65F0 3B 83 A0 A0 */ addi r28, r3, SecParams@l
/* 803C9694 003C65F4 54 1E E8 FE */ srwi r30, r0, 3
lbl_803C9698:
/* 803C9698 003C65F8 93 DD 00 34 */ stw r30, 0x34(r29)
/* 803C969C 003C65FC 38 7D 00 24 */ addi r3, r29, 0x24
/* 803C96A0 003C6600 93 FD 00 30 */ stw r31, 0x30(r29)
/* 803C96A4 003C6604 4B FB AF 21 */ bl OSInitThreadQueue
/* 803C96A8 003C6608 3B 7B 00 01 */ addi r27, r27, 1
/* 803C96AC 003C660C 93 9D 00 F8 */ stw r28, 0xf8(r29)
/* 803C96B0 003C6610 2C 1B 00 04 */ cmpwi r27, 4
/* 803C96B4 003C6614 3B BD 01 00 */ addi r29, r29, 0x100
/* 803C96B8 003C6618 3B 9C 00 40 */ addi r28, r28, 0x40
/* 803C96BC 003C661C 41 80 FF DC */ blt lbl_803C9698
/* 803C96C0 003C6620 4B FB 49 A5 */ bl OSInitAlarm
/* 803C96C4 003C6624 4B FA 63 41 */ bl DSPInit
/* 803C96C8 003C6628 38 00 00 00 */ li r0, 0
/* 803C96CC 003C662C 3C 60 80 3F */ lis r3, ResetFunctionInfo@ha
/* 803C96D0 003C6630 90 0D B1 58 */ stw r0, __GBAReset@sda21(r13)
/* 803C96D4 003C6634 38 63 71 60 */ addi r3, r3, ResetFunctionInfo@l
/* 803C96D8 003C6638 4B FB 99 55 */ bl OSRegisterResetFunction
/* 803C96DC 003C663C BB 61 00 0C */ lmw r27, 0xc(r1)
/* 803C96E0 003C6640 80 01 00 24 */ lwz r0, 0x24(r1)
/* 803C96E4 003C6644 38 21 00 20 */ addi r1, r1, 0x20
/* 803C96E8 003C6648 7C 08 03 A6 */ mtlr r0
/* 803C96EC 003C664C 4E 80 00 20 */ blr
.global GBAGetStatusAsync
GBAGetStatusAsync:
/* 803C96F0 003C6650 7C 08 02 A6 */ mflr r0
/* 803C96F4 003C6654 3C C0 80 57 */ lis r6, __GBA@ha
/* 803C96F8 003C6658 90 01 00 04 */ stw r0, 4(r1)
/* 803C96FC 003C665C 54 67 40 2E */ slwi r7, r3, 8
/* 803C9700 003C6660 38 06 A1 A0 */ addi r0, r6, __GBA@l
/* 803C9704 003C6664 94 21 FF F8 */ stwu r1, -8(r1)
/* 803C9708 003C6668 7C E0 3A 14 */ add r7, r0, r7
/* 803C970C 003C666C 80 07 00 1C */ lwz r0, 0x1c(r7)
/* 803C9710 003C6670 28 00 00 00 */ cmplwi r0, 0
/* 803C9714 003C6674 41 82 00 0C */ beq lbl_803C9720
/* 803C9718 003C6678 38 60 00 02 */ li r3, 2
/* 803C971C 003C667C 48 00 00 28 */ b lbl_803C9744
lbl_803C9720:
/* 803C9720 003C6680 38 00 00 00 */ li r0, 0
/* 803C9724 003C6684 98 07 00 00 */ stb r0, 0(r7)
/* 803C9728 003C6688 3C C0 80 3D */ lis r6, ShortCommandProc@ha
/* 803C972C 003C668C 38 C6 95 F8 */ addi r6, r6, ShortCommandProc@l
/* 803C9730 003C6690 90 87 00 14 */ stw r4, 0x14(r7)
/* 803C9734 003C6694 38 80 00 01 */ li r4, 1
/* 803C9738 003C6698 90 A7 00 1C */ stw r5, 0x1c(r7)
/* 803C973C 003C669C 38 A0 00 03 */ li r5, 3
/* 803C9740 003C66A0 48 00 17 69 */ bl __GBATransfer
lbl_803C9744:
/* 803C9744 003C66A4 80 01 00 0C */ lwz r0, 0xc(r1)
/* 803C9748 003C66A8 38 21 00 08 */ addi r1, r1, 8
/* 803C974C 003C66AC 7C 08 03 A6 */ mtlr r0
/* 803C9750 003C66B0 4E 80 00 20 */ blr
.global GBAGetStatus
GBAGetStatus:
/* 803C9754 003C66B4 7C 08 02 A6 */ mflr r0
/* 803C9758 003C66B8 90 01 00 04 */ stw r0, 4(r1)
/* 803C975C 003C66BC 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 803C9760 003C66C0 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 803C9764 003C66C4 3B E3 00 00 */ addi r31, r3, 0
/* 803C9768 003C66C8 3C 60 80 57 */ lis r3, __GBA@ha
/* 803C976C 003C66CC 57 E5 40 2E */ slwi r5, r31, 8
/* 803C9770 003C66D0 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803C9774 003C66D4 7C E0 2A 14 */ add r7, r0, r5
/* 803C9778 003C66D8 80 07 00 1C */ lwz r0, 0x1c(r7)
/* 803C977C 003C66DC 28 00 00 00 */ cmplwi r0, 0
/* 803C9780 003C66E0 41 82 00 0C */ beq lbl_803C978C
/* 803C9784 003C66E4 38 60 00 02 */ li r3, 2
/* 803C9788 003C66E8 48 00 00 34 */ b lbl_803C97BC
lbl_803C978C:
/* 803C978C 003C66EC 38 00 00 00 */ li r0, 0
/* 803C9790 003C66F0 98 07 00 00 */ stb r0, 0(r7)
/* 803C9794 003C66F4 3C A0 80 3D */ lis r5, __GBASyncCallback@ha
/* 803C9798 003C66F8 38 05 AC E4 */ addi r0, r5, __GBASyncCallback@l
/* 803C979C 003C66FC 90 87 00 14 */ stw r4, 0x14(r7)
/* 803C97A0 003C6700 3C 60 80 3D */ lis r3, ShortCommandProc@ha
/* 803C97A4 003C6704 38 C3 95 F8 */ addi r6, r3, ShortCommandProc@l
/* 803C97A8 003C6708 90 07 00 1C */ stw r0, 0x1c(r7)
/* 803C97AC 003C670C 38 7F 00 00 */ addi r3, r31, 0
/* 803C97B0 003C6710 38 80 00 01 */ li r4, 1
/* 803C97B4 003C6714 38 A0 00 03 */ li r5, 3
/* 803C97B8 003C6718 48 00 16 F1 */ bl __GBATransfer
lbl_803C97BC:
/* 803C97BC 003C671C 2C 03 00 00 */ cmpwi r3, 0
/* 803C97C0 003C6720 41 82 00 08 */ beq lbl_803C97C8
/* 803C97C4 003C6724 48 00 00 0C */ b lbl_803C97D0
lbl_803C97C8:
/* 803C97C8 003C6728 7F E3 FB 78 */ mr r3, r31
/* 803C97CC 003C672C 48 00 15 4D */ bl __GBASync
lbl_803C97D0:
/* 803C97D0 003C6730 80 01 00 24 */ lwz r0, 0x24(r1)
/* 803C97D4 003C6734 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 803C97D8 003C6738 38 21 00 20 */ addi r1, r1, 0x20
/* 803C97DC 003C673C 7C 08 03 A6 */ mtlr r0
/* 803C97E0 003C6740 4E 80 00 20 */ blr
.global GBAResetAsync
GBAResetAsync:
/* 803C97E4 003C6744 7C 08 02 A6 */ mflr r0
/* 803C97E8 003C6748 3C C0 80 57 */ lis r6, __GBA@ha
/* 803C97EC 003C674C 90 01 00 04 */ stw r0, 4(r1)
/* 803C97F0 003C6750 54 67 40 2E */ slwi r7, r3, 8
/* 803C97F4 003C6754 38 06 A1 A0 */ addi r0, r6, __GBA@l
/* 803C97F8 003C6758 94 21 FF F8 */ stwu r1, -8(r1)
/* 803C97FC 003C675C 7C E0 3A 14 */ add r7, r0, r7
/* 803C9800 003C6760 80 07 00 1C */ lwz r0, 0x1c(r7)
/* 803C9804 003C6764 28 00 00 00 */ cmplwi r0, 0
/* 803C9808 003C6768 41 82 00 0C */ beq lbl_803C9814
/* 803C980C 003C676C 38 60 00 02 */ li r3, 2
/* 803C9810 003C6770 48 00 00 28 */ b lbl_803C9838
lbl_803C9814:
/* 803C9814 003C6774 38 00 00 FF */ li r0, 0xff
/* 803C9818 003C6778 98 07 00 00 */ stb r0, 0(r7)
/* 803C981C 003C677C 3C C0 80 3D */ lis r6, ShortCommandProc@ha
/* 803C9820 003C6780 38 C6 95 F8 */ addi r6, r6, ShortCommandProc@l
/* 803C9824 003C6784 90 87 00 14 */ stw r4, 0x14(r7)
/* 803C9828 003C6788 38 80 00 01 */ li r4, 1
/* 803C982C 003C678C 90 A7 00 1C */ stw r5, 0x1c(r7)
/* 803C9830 003C6790 38 A0 00 03 */ li r5, 3
/* 803C9834 003C6794 48 00 16 75 */ bl __GBATransfer
lbl_803C9838:
/* 803C9838 003C6798 80 01 00 0C */ lwz r0, 0xc(r1)
/* 803C983C 003C679C 38 21 00 08 */ addi r1, r1, 8
/* 803C9840 003C67A0 7C 08 03 A6 */ mtlr r0
/* 803C9844 003C67A4 4E 80 00 20 */ blr
.global GBAReset
GBAReset:
/* 803C9848 003C67A8 7C 08 02 A6 */ mflr r0
/* 803C984C 003C67AC 90 01 00 04 */ stw r0, 4(r1)
/* 803C9850 003C67B0 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 803C9854 003C67B4 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 803C9858 003C67B8 3B E3 00 00 */ addi r31, r3, 0
/* 803C985C 003C67BC 3C 60 80 57 */ lis r3, __GBA@ha
/* 803C9860 003C67C0 57 E5 40 2E */ slwi r5, r31, 8
/* 803C9864 003C67C4 38 03 A1 A0 */ addi r0, r3, __GBA@l
/* 803C9868 003C67C8 7C E0 2A 14 */ add r7, r0, r5
/* 803C986C 003C67CC 80 07 00 1C */ lwz r0, 0x1c(r7)
/* 803C9870 003C67D0 28 00 00 00 */ cmplwi r0, 0
/* 803C9874 003C67D4 41 82 00 0C */ beq lbl_803C9880
/* 803C9878 003C67D8 38 60 00 02 */ li r3, 2
/* 803C987C 003C67DC 48 00 00 34 */ b lbl_803C98B0
lbl_803C9880:
/* 803C9880 003C67E0 38 00 00 FF */ li r0, 0xff
/* 803C9884 003C67E4 98 07 00 00 */ stb r0, 0(r7)
/* 803C9888 003C67E8 3C A0 80 3D */ lis r5, __GBASyncCallback@ha
/* 803C988C 003C67EC 38 05 AC E4 */ addi r0, r5, __GBASyncCallback@l
/* 803C9890 003C67F0 90 87 00 14 */ stw r4, 0x14(r7)
/* 803C9894 003C67F4 3C 60 80 3D */ lis r3, ShortCommandProc@ha
/* 803C9898 003C67F8 38 C3 95 F8 */ addi r6, r3, ShortCommandProc@l
/* 803C989C 003C67FC 90 07 00 1C */ stw r0, 0x1c(r7)
/* 803C98A0 003C6800 38 7F 00 00 */ addi r3, r31, 0
/* 803C98A4 003C6804 38 80 00 01 */ li r4, 1
/* 803C98A8 003C6808 38 A0 00 03 */ li r5, 3
/* 803C98AC 003C680C 48 00 15 FD */ bl __GBATransfer
lbl_803C98B0:
/* 803C98B0 003C6810 2C 03 00 00 */ cmpwi r3, 0
/* 803C98B4 003C6814 41 82 00 08 */ beq lbl_803C98BC
/* 803C98B8 003C6818 48 00 00 0C */ b lbl_803C98C4
lbl_803C98BC:
/* 803C98BC 003C681C 7F E3 FB 78 */ mr r3, r31
/* 803C98C0 003C6820 48 00 14 59 */ bl __GBASync
lbl_803C98C4:
/* 803C98C4 003C6824 80 01 00 24 */ lwz r0, 0x24(r1)
/* 803C98C8 003C6828 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 803C98CC 003C682C 38 21 00 20 */ addi r1, r1, 0x20
/* 803C98D0 003C6830 7C 08 03 A6 */ mtlr r0
/* 803C98D4 003C6834 4E 80 00 20 */ blr
OnReset:
/* 803C98D8 003C6838 38 00 00 01 */ li r0, 1
/* 803C98DC 003C683C 90 0D B1 58 */ stw r0, __GBAReset@sda21(r13)
/* 803C98E0 003C6840 38 60 00 01 */ li r3, 1
/* 803C98E4 003C6844 4E 80 00 20 */ blr