summaryrefslogtreecommitdiff
path: root/arm9/asm/WM_dcf.s
blob: 779bb2ec77890a9be866e9baa88ef1e2c0a964c5 (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
153
154
155
156
157
158
159
160
	.include "asm/macros.inc"
	.include "global.inc"

	.text

	arm_func_start WM_EndDCF
WM_EndDCF: ; 0x020D9DDC
	stmdb sp!, {r4-r5,lr}
	sub sp, sp, #0x4
	mov r5, r0
	bl WMi_GetSystemWork
	mov r4, r0
	mov r0, #0x1
	mov r1, #0xb
	bl WMi_CheckStateEx
_020D9DFC: ; 0x020D9DFC
	cmp r0, #0x0
	addne sp, sp, #0x4
	ldmneia sp!, {r4-r5,lr}
	bxne lr
	ldr r0, [r4, #0x4]
	mov r1, #0x4
	add r0, r0, #0x10
	bl DC_InvalidateRange
	ldr r0, [r4, #0x4]
	ldr r0, [r0, #0x10]
	cmp r0, #0x0
	addeq sp, sp, #0x4
	moveq r0, #0x3
	ldmeqia sp!, {r4-r5,lr}
	bxeq lr
	mov r1, r5
	mov r0, #0x13
	bl WMi_SetCallbackTable
	mov r0, #0x13
	mov r1, #0x0
	bl WMi_SendCommand
_020D9E50: ; 0x020D9E50
	cmp r0, #0x0
	moveq r0, #0x2
	add sp, sp, #0x4
	ldmia sp!, {r4-r5,lr}
	bx lr

	arm_func_start WM_SetDCFData
WM_SetDCFData: ; 0x020D9E64
	stmdb sp!, {r4-r8,lr}
	sub sp, sp, #0x10
	mov r7, r0
	mov r6, r1
	mov r5, r2
	mov r4, r3
	bl WMi_GetSystemWork
	mov r8, r0
	mov r0, #0x1
	mov r1, #0xb
	bl WMi_CheckStateEx
_020D9E90: ; 0x020D9E90
	cmp r0, #0x0
	addne sp, sp, #0x10
	ldmneia sp!, {r4-r8,lr}
	bxne lr
	ldr r0, [r8, #0x4]
	mov r1, #0x4
	add r0, r0, #0x10
	bl DC_InvalidateRange
	ldr r0, [r8, #0x4]
	ldr r0, [r0, #0x10]
	cmp r0, #0x0
	addeq sp, sp, #0x10
	moveq r0, #0x3
	ldmeqia sp!, {r4-r8,lr}
	bxeq lr
	ldr r0, _020D9F3C ; =0x000005E4
	cmp r4, r0
	addhi sp, sp, #0x10
	movhi r0, #0x6
	ldmhiia sp!, {r4-r8,lr}
	bxhi lr
	mov r0, r5
	mov r1, r4
	bl DC_StoreRange
	mov r1, r7
	mov r0, #0x12
	bl WMi_SetCallbackTable
	add r1, sp, #0x8
	mov r0, r6
	mov r2, #0x6
	bl MI_CpuCopy8
	str r5, [sp, #0x0]
	str r4, [sp, #0x4]
	ldr r2, [sp, #0x8]
	ldr r3, [sp, #0xc]
	mov r0, #0x12
	mov r1, #0x4
	bl WMi_SendCommand
_020D9F28: ; 0x020D9F28
	cmp r0, #0x0
	moveq r0, #0x2
	add sp, sp, #0x10
	ldmia sp!, {r4-r8,lr}
	bx lr
	.balign 4
_020D9F3C: .word 0x000005E4

	arm_func_start WM_StartDCF
WM_StartDCF: ; 0x020D9F40
	stmdb sp!, {r4-r7,lr}
	sub sp, sp, #0x4
	mov r7, r0
	mov r6, r1
	mov r5, r2
	bl WMi_GetSystemWork
	mov r4, r0
	mov r0, #0x1
	mov r1, #0x8
	bl WMi_CheckStateEx
_020D9F68: ; 0x020D9F68
	cmp r0, #0x0
	addne sp, sp, #0x4
	ldmneia sp!, {r4-r7,lr}
	bxne lr
	ldr r0, [r4, #0x4]
	mov r1, #0x4
	add r0, r0, #0x10
	bl DC_InvalidateRange
	ldr r0, [r4, #0x4]
	ldr r0, [r0, #0x10]
	cmp r0, #0x1
	addeq sp, sp, #0x4
	moveq r0, #0x3
	ldmeqia sp!, {r4-r7,lr}
	bxeq lr
	cmp r5, #0x10
	addcc sp, sp, #0x4
	movcc r0, #0x6
	ldmccia sp!, {r4-r7,lr}
	bxcc lr
	cmp r6, #0x0
	addeq sp, sp, #0x4
	moveq r0, #0x6
	ldmeqia sp!, {r4-r7,lr}
	bxeq lr
	mov r0, r6
	mov r1, r5
	bl DC_StoreRange
	mov r1, r7
	mov r0, #0x11
	bl WMi_SetCallbackTable
	mov r2, r6
	mov r3, r5
	mov r0, #0x11
	mov r1, #0x2
	bl WMi_SendCommand
_020D9FF8: ; 0x020D9FF8
	cmp r0, #0x0
	moveq r0, #0x2
	add sp, sp, #0x4
	ldmia sp!, {r4-r7,lr}
	bx lr