summaryrefslogtreecommitdiff
path: root/asm/SDK/EXI/EXICommon.s
blob: d5d95954b45d78395c45fa2806e4888dd057d1d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global EXIWriteReg
EXIWriteReg:
/* 80276120 00271D80  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80276124 00271D84  7C 08 02 A6 */	mflr r0
/* 80276128 00271D88  2C 07 00 02 */	cmpwi r7, 2
/* 8027612C 00271D8C  90 01 00 24 */	stw r0, 0x24(r1)
/* 80276130 00271D90  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 80276134 00271D94  7C 7F 1B 78 */	mr r31, r3
/* 80276138 00271D98  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8027613C 00271D9C  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80276140 00271DA0  7C 9D 23 78 */	mr r29, r4
/* 80276144 00271DA4  90 A1 00 08 */	stw r5, 8(r1)
/* 80276148 00271DA8  41 82 00 24 */	beq lbl_8027616C
/* 8027614C 00271DAC  40 80 00 34 */	bge lbl_80276180
/* 80276150 00271DB0  2C 07 00 01 */	cmpwi r7, 1
/* 80276154 00271DB4  40 80 00 08 */	bge lbl_8027615C
/* 80276158 00271DB8  48 00 00 28 */	b lbl_80276180
lbl_8027615C:
/* 8027615C 00271DBC  88 06 00 00 */	lbz r0, 0(r6)
/* 80276160 00271DC0  54 00 C0 0E */	slwi r0, r0, 0x18
/* 80276164 00271DC4  90 01 00 0C */	stw r0, 0xc(r1)
/* 80276168 00271DC8  48 00 00 34 */	b lbl_8027619C
lbl_8027616C:
/* 8027616C 00271DCC  A0 66 00 00 */	lhz r3, 0(r6)
/* 80276170 00271DD0  54 60 42 1E */	rlwinm r0, r3, 8, 8, 0xf
/* 80276174 00271DD4  50 60 C0 0E */	rlwimi r0, r3, 0x18, 0, 7
/* 80276178 00271DD8  90 01 00 0C */	stw r0, 0xc(r1)
/* 8027617C 00271DDC  48 00 00 20 */	b lbl_8027619C
lbl_80276180:
/* 80276180 00271DE0  80 86 00 00 */	lwz r4, 0(r6)
/* 80276184 00271DE4  54 83 42 1E */	rlwinm r3, r4, 8, 8, 0xf
/* 80276188 00271DE8  54 80 C4 2E */	rlwinm r0, r4, 0x18, 0x10, 0x17
/* 8027618C 00271DEC  50 83 C0 0E */	rlwimi r3, r4, 0x18, 0, 7
/* 80276190 00271DF0  50 80 46 3E */	rlwimi r0, r4, 8, 0x18, 0x1f
/* 80276194 00271DF4  7C 60 03 78 */	or r0, r3, r0
/* 80276198 00271DF8  90 01 00 0C */	stw r0, 0xc(r1)
lbl_8027619C:
/* 8027619C 00271DFC  7F E3 FB 78 */	mr r3, r31
/* 802761A0 00271E00  7F A4 EB 78 */	mr r4, r29
/* 802761A4 00271E04  38 A0 00 00 */	li r5, 0
/* 802761A8 00271E08  4B FF F6 9D */	bl EXILock
/* 802761AC 00271E0C  7C 60 00 34 */	cntlzw r0, r3
/* 802761B0 00271E10  54 1E D9 7F */	rlwinm. r30, r0, 0x1b, 5, 0x1f
/* 802761B4 00271E14  41 82 00 0C */	beq lbl_802761C0
/* 802761B8 00271E18  38 60 00 00 */	li r3, 0
/* 802761BC 00271E1C  48 00 00 D4 */	b lbl_80276290
lbl_802761C0:
/* 802761C0 00271E20  7F E3 FB 78 */	mr r3, r31
/* 802761C4 00271E24  7F A4 EB 78 */	mr r4, r29
/* 802761C8 00271E28  38 A0 00 04 */	li r5, 4
/* 802761CC 00271E2C  4B FF EE E5 */	bl EXISelect
/* 802761D0 00271E30  7C 60 00 34 */	cntlzw r0, r3
/* 802761D4 00271E34  54 00 D9 7E */	srwi r0, r0, 5
/* 802761D8 00271E38  7F DE 03 79 */	or. r30, r30, r0
/* 802761DC 00271E3C  41 82 00 14 */	beq lbl_802761F0
/* 802761E0 00271E40  7F E3 FB 78 */	mr r3, r31
/* 802761E4 00271E44  4B FF F7 5D */	bl EXIUnlock
/* 802761E8 00271E48  38 60 00 00 */	li r3, 0
/* 802761EC 00271E4C  48 00 00 A4 */	b lbl_80276290
lbl_802761F0:
/* 802761F0 00271E50  7F E3 FB 78 */	mr r3, r31
/* 802761F4 00271E54  38 81 00 08 */	addi r4, r1, 8
/* 802761F8 00271E58  38 A0 00 04 */	li r5, 4
/* 802761FC 00271E5C  38 C0 00 01 */	li r6, 1
/* 80276200 00271E60  38 E0 00 00 */	li r7, 0
/* 80276204 00271E64  4B FF E4 45 */	bl EXIImm
/* 80276208 00271E68  7C 60 00 34 */	cntlzw r0, r3
/* 8027620C 00271E6C  7F E3 FB 78 */	mr r3, r31
/* 80276210 00271E70  54 00 D9 7E */	srwi r0, r0, 5
/* 80276214 00271E74  7F DE 03 78 */	or r30, r30, r0
/* 80276218 00271E78  4B FF E8 49 */	bl EXISync
/* 8027621C 00271E7C  7C 60 00 34 */	cntlzw r0, r3
/* 80276220 00271E80  7F E3 FB 78 */	mr r3, r31
/* 80276224 00271E84  54 00 D9 7E */	srwi r0, r0, 5
/* 80276228 00271E88  38 81 00 0C */	addi r4, r1, 0xc
/* 8027622C 00271E8C  7F DE 03 78 */	or r30, r30, r0
/* 80276230 00271E90  38 A0 00 04 */	li r5, 4
/* 80276234 00271E94  38 C0 00 01 */	li r6, 1
/* 80276238 00271E98  38 E0 00 00 */	li r7, 0
/* 8027623C 00271E9C  4B FF E4 0D */	bl EXIImm
/* 80276240 00271EA0  7C 60 00 34 */	cntlzw r0, r3
/* 80276244 00271EA4  7F E3 FB 78 */	mr r3, r31
/* 80276248 00271EA8  54 00 D9 7E */	srwi r0, r0, 5
/* 8027624C 00271EAC  7F DE 03 78 */	or r30, r30, r0
/* 80276250 00271EB0  4B FF E8 11 */	bl EXISync
/* 80276254 00271EB4  7C 60 00 34 */	cntlzw r0, r3
/* 80276258 00271EB8  7F E3 FB 78 */	mr r3, r31
/* 8027625C 00271EBC  54 00 D9 7E */	srwi r0, r0, 5
/* 80276260 00271EC0  7F DE 03 78 */	or r30, r30, r0
/* 80276264 00271EC4  4B FF EF 7D */	bl EXIDeselect
/* 80276268 00271EC8  7C 60 00 34 */	cntlzw r0, r3
/* 8027626C 00271ECC  7F E3 FB 78 */	mr r3, r31
/* 80276270 00271ED0  54 00 D9 7E */	srwi r0, r0, 5
/* 80276274 00271ED4  7F DE 03 78 */	or r30, r30, r0
/* 80276278 00271ED8  4B FF F6 C9 */	bl EXIUnlock
/* 8027627C 00271EDC  7C 60 00 34 */	cntlzw r0, r3
/* 80276280 00271EE0  54 00 D9 7E */	srwi r0, r0, 5
/* 80276284 00271EE4  7F DE 03 78 */	or r30, r30, r0
/* 80276288 00271EE8  7F C0 00 34 */	cntlzw r0, r30
/* 8027628C 00271EEC  54 03 D9 7E */	srwi r3, r0, 5
lbl_80276290:
/* 80276290 00271EF0  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80276294 00271EF4  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80276298 00271EF8  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8027629C 00271EFC  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 802762A0 00271F00  7C 08 03 A6 */	mtlr r0
/* 802762A4 00271F04  38 21 00 20 */	addi r1, r1, 0x20
/* 802762A8 00271F08  4E 80 00 20 */	blr