summaryrefslogtreecommitdiff
path: root/arm9/asm/arm9_itcm.s
blob: 5c3dc240cb704605a5704f217938ac52efb4efbb (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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
	.include "asm/macros.inc"
	.include "global.inc"
	.section .text

	; MI
	arm_func_start MIi_DmaSetParams_wait_noInt
MIi_DmaSetParams_wait_noInt: ; 0x01FF84E4
	stmdb sp!,	{r4, lr}
	mov	ip, #12
	mul	r4, r0, ip
	add	ip, r4, #67108864	; 0x4000000
	ldr	lr, [pc, #64]	; 0x10b4dc
	str	r1, [ip, #176]	; 0xb0
	add	r4, r4, lr
	str	r2, [r4, #4]
	str	r3, [r4, #8]
	ldr	r1, [lr]
	cmp	r0, #0
	ldr	r0, [lr]
	moveq	r1, #0
	streq	r1, [r4]
	streq	r1, [r4, #4]
	ldreq	r0, _01FF8540
	ldr	r1, _01FF853C
	streq	r0, [r4, #8]
	ldr	r0, [r1]
	ldr	r0, [r1]
	ldmia sp!,	{r4, lr}
	bx	lr
_01FF853C:	.word 0x040000B0
_01FF8540:	.word 0x81400001

	arm_func_start MIi_DmaSetParams_noInt
MIi_DmaSetParams_noInt: ; 01FF8544
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	mov	ip, #12
	mul	lr, r0, ip
	ldr	r0, _01FF8578
	add	ip, lr, #67108864	; 0x4000000
	str	r1, [ip, #176]	; 0xb0
	add	r0, lr, r0
	str	r2, [r0, #4]
	str	r3, [r0, #8]
	add	sp, sp, #4
	ldmfd	sp!, {lr}
	bx	lr
_01FF8578:	.word 0x040000B0

	arm_func_start MIi_DmaSetParams_wait
MIi_DmaSetParams_wait: ; 01FF857C
	stmdb sp!,	{r4, r5, r6, r7, lr}
	sub	sp, sp, #4
	mov	r7, r0
	mov	r6, r1
	mov	r5, r2
	mov	r4, r3
	bl	OS_DisableInterrupts
	mov	r1, #12
	mul	r3, r7, r1
	add	r1, r3, #67108864	; 0x4000000
	ldr	r2, _01FF85E8
	str	r6, [r1, #176]	; 0xb0
	add	r3, r3, r2
	str	r5, [r3, #4]
	str	r4, [r3, #8]
	ldr	r1, [r2]
	cmp	r7, #0
	ldr	r1, [r2]
	moveq	r2, #0
	streq	r2, [r3]
	ldreq	r1, _01FF85EC
	streq	r2, [r3, #4]
	streq	r1, [r3, #8]
	bl	OS_RestoreInterrupts
	add	sp, sp, #4
	ldmia sp!,	{r4, r5, r6, r7, lr}
	bx	lr
_01FF85E8:	.word 0x040000B0
_01FF85EC:	.word 0x81400001

	arm_func_start MIi_DmaSetParams
MIi_DmaSetParams: ; 01FF85F0
	stmdb sp!,	{r4, r5, r6, r7, lr}
	sub	sp, sp, #4
	mov	r7, r0
	mov	r6, r1
	mov	r5, r2
	mov	r4, r3
	bl	OS_DisableInterrupts
	mov	r1, #12
	mul	r3, r7, r1
	ldr	r1, _01FF863C
	add	r2, r3, #67108864	; 0x4000000
	str	r6, [r2, #176]	; 0xb0
	add	r1, r3, r1
	str	r5, [r1, #4]
	str	r4, [r1, #8]
	bl	OS_RestoreInterrupts
	add	sp, sp, #4
	ldmia sp!,	{r4, r5, r6, r7, lr}
	bx	lr
_01FF863C:	.word 0x040000B0

	arm_func_start MI_SendGXCommand
MI_SendGXCommand: ; 0x01FF8640
	stmdb sp!,	{r4, r5, r6, r7, r8, r9, sl, fp, lr}
	sub	sp, sp, #4
	movs	r8, r2
	mov	sl, r0
	mov	r9, r1
	addeq	sp, sp, #4
	ldmeqia sp!,	{r4, r5, r6, r7, r8, r9, sl, fp, lr}
	bxeq	lr
	mov	r3, #0
	bl	MIi_CheckDma0SourceAddress
	mov	r0, #3
	mul	r1, sl, r0
	ldr	r0, [pc, #104]	; 0x10b680
	add	r1, r1, #2
	add	r7, r0, r1, lsl #2
_01FF867C:
	ldr	r0, [r7]
	ands	r0, r0, #-2147483648	; 0x80000000
	bne	_01FF867C
	cmp	r8, #0
	beq	_01FF86C8
	ldr	fp, [pc, #76]	; 0x10b684
	mov	r5, #472	; 0x1d8
	ldr	r4, [pc, #72]	; 0x10b688
_01FF869C:
	cmp	r8, #472	; 0x1d8
	movhi	r6, r5
	movls	r6, r8
	mov	r0, sl
	mov	r1, r9
	mov	r2, fp
	orr	r3, r4, r6, lsr #2
	bl	MIi_DmaSetParams
	subs	r8, r8, r6
	add	r9, r9, r6
	bne	_01FF869C
_01FF86C8:
	ldr	r0, [r7]
	ands	r0, r0, #-2147483648	; 0x80000000
	bne	_01FF86C8
	add	sp, sp, #4
	ldmia sp!,	{r4, r5, r6, r7, r8, r9, sl, fp, lr}
	bx	lr
_01FF86E0:	.word 0x040000B0
_01FF86E4:	.word 0x04000400
_01FF86E8:	.word 0x84400000