.include "macros.inc"

.section .text, "ax"

.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