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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
|
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start OS_SetIrqStackChecker
OS_SetIrqStackChecker: ; 0x020C9DAC
ldr ip, _020C9DD0 ; =0x027E0000
ldr r3, _020C9DD4 ; =0xFDDB597D
add r0, r12, #0x3000
ldr r2, _020C9DD8 ; =0x7BF9DD5B
ldr r1, _020C9DDC ; =0x00000400
str r3, [r0, #0xf7c]
add r0, r12, #0x3f80
str r2, [r0, -r1]
bx lr
.balign 4
_020C9DD0: .word 0x027E0000
_020C9DD4: .word 0xFDDB597D
_020C9DD8: .word 0x7BF9DD5B
_020C9DDC: .word 0x00000400
arm_func_start OS_ResetRequestIrqMask
OS_ResetRequestIrqMask: ; 0x020C9DE0
ldr ip, _020C9E0C ; =0x04000208
mov r1, #0x0
ldrh r3, [r12, #0x0]
ldr r2, _020C9E10 ; =0x04000214
strh r1, [r12, #0x0]
ldr r1, [r2, #0x0]
str r0, [r2, #0x0]
ldrh r0, [r12, #0x0]
mov r0, r1
strh r3, [r12, #0x0]
bx lr
.balign 4
_020C9E0C: .word 0x04000208
_020C9E10: .word 0x04000214
arm_func_start OS_DisableIrqMask
OS_DisableIrqMask: ; 0x020C9E14
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr lr, _020C9E54 ; =0x04000208
mov r3, #0x0
ldrh r12, [lr, #0x0]
ldr r2, _020C9E58 ; =0x04000210
mvn r1, r0
strh r3, [lr, #0x0]
ldr r0, [r2, #0x0]
and r1, r0, r1
str r1, [r2, #0x0]
ldrh r1, [lr, #0x0]
strh r12, [lr, #0x0]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020C9E54: .word 0x04000208
_020C9E58: .word 0x04000210
arm_func_start OS_EnableIrqMask
OS_EnableIrqMask: ; 0x020C9E5C
ldr ip, _020C9E8C ; =0x04000208
mov r1, #0x0
ldrh r3, [r12, #0x0]
ldr r2, _020C9E90 ; =0x04000210
strh r1, [r12, #0x0]
ldr r1, [r2, #0x0]
orr r0, r1, r0
str r0, [r2, #0x0]
ldrh r0, [r12, #0x0]
mov r0, r1
strh r3, [r12, #0x0]
bx lr
.balign 4
_020C9E8C: .word 0x04000208
_020C9E90: .word 0x04000210
arm_func_start OS_SetIrqMask
OS_SetIrqMask: ; 0x020C9E94
ldr ip, _020C9EC0 ; =0x04000208
mov r1, #0x0
ldrh r3, [r12, #0x0]
ldr r2, _020C9EC4 ; =0x04000210
strh r1, [r12, #0x0]
ldr r1, [r2, #0x0]
str r0, [r2, #0x0]
ldrh r0, [r12, #0x0]
mov r0, r1
strh r3, [r12, #0x0]
bx lr
.balign 4
_020C9EC0: .word 0x04000208
_020C9EC4: .word 0x04000210
arm_func_start OSi_EnterTimerCallback
OSi_EnterTimerCallback: ; 0x020C9EC8
stmdb sp!, {r4,lr}
mov r3, #0xc
mul r4, r0, r3
ldr ip, _020C9F08 ; =0x021D344C
add r0, r0, #0x3
mov r3, #0x1
mov r0, r3, lsl r0
ldr r3, _020C9F0C ; =0x021D3454
str r1, [r12, r4]
str r2, [r3, r4]
bl OS_EnableIrqMask
ldr r0, _020C9F10 ; =0x021D3450
mov r1, #0x1
str r1, [r0, r4]
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020C9F08: .word OSi_IrqCallbackInfo+0x30
_020C9F0C: .word OSi_IrqCallbackInfo+0x38
_020C9F10: .word OSi_IrqCallbackInfo+0x34
arm_func_start OSi_EnterDmaCallback
OSi_EnterDmaCallback: ; 0x020C9F14
stmdb sp!, {r4-r6,lr}
mov r3, #0xc
mul r6, r0, r3
ldr ip, _020C9F54 ; =OSi_IrqCallbackInfo
add r4, r0, #0x8
mov r5, #0x1
mov r0, r5, lsl r4
ldr r3, _020C9F58 ; =0x021D3424
str r1, [r12, r6]
str r2, [r3, r6]
bl OS_EnableIrqMask
and r1, r0, r5, lsl r4
ldr r0, _020C9F5C ; =0x021D3420
str r1, [r0, r6]
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020C9F54: .word OSi_IrqCallbackInfo
_020C9F58: .word OSi_IrqCallbackInfo + 8
_020C9F5C: .word OSi_IrqCallbackInfo + 4
arm_func_start OS_GetIrqFunction
OS_GetIrqFunction: ; 0x020C9F60
ldr r2, _020C9FE4 ; =0x027E0000
mov r3, #0x0
_020C9F68:
ands r1, r0, #0x1
beq _020C9FC8
cmp r3, #0x8
blt _020C9F98
cmp r3, #0xb
bgt _020C9F98
sub r1, r3, #0x8
mov r0, #0xc
mul r2, r1, r0
ldr r0, _020C9FE8 ; =OSi_IrqCallbackInfo
ldr r0, [r0, r2]
bx lr
_020C9F98:
cmp r3, #0x3
blt _020C9FC0
cmp r3, #0x6
bgt _020C9FC0
add r1, r3, #0x1
mov r0, #0xc
mul r2, r1, r0
ldr r0, _020C9FE8 ; =OSi_IrqCallbackInfo
ldr r0, [r0, r2]
bx lr
_020C9FC0:
ldr r0, [r2, #0x0]
bx lr
_020C9FC8:
add r3, r3, #0x1
cmp r3, #0x16
mov r0, r0, lsr #0x1
add r2, r2, #0x4
blt _020C9F68
mov r0, #0x0
bx lr
.balign 4
_020C9FE4: .word 0x027E0000
_020C9FE8: .word OSi_IrqCallbackInfo
arm_func_start OS_SetIrqFunction
OS_SetIrqFunction: ; 0x020C9FEC
stmdb sp!, {r4-r8,lr}
mov r8, #0x0
ldr lr, _020CA074 ; =0x027E0000
ldr r5, _020CA078 ; =OSi_IrqCallbackInfo
mov r6, r8
mov r12, r8
mov r3, #0x1
mov r2, #0xc
_020CA00C:
ands r4, r0, #0x1
beq _020CA05C
mov r7, r6
cmp r8, #0x8
blt _020CA030
cmp r8, #0xb
suble r4, r8, #0x8
mlale r7, r4, r2, r5
ble _020CA04C
_020CA030:
cmp r8, #0x3
blt _020CA048
cmp r8, #0x6
addle r4, r8, #0x1
mlale r7, r4, r2, r5
ble _020CA04C
_020CA048:
str r1, [lr, r8, lsl #0x2]
_020CA04C:
cmp r7, #0x0
strne r1, [r7, #0x0]
strne r12, [r7, #0x8]
strne r3, [r7, #0x4]
_020CA05C:
add r8, r8, #0x1
cmp r8, #0x16
mov r0, r0, lsr #0x1
blt _020CA00C
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
_020CA074: .word 0x027E0000
_020CA078: .word OSi_IrqCallbackInfo
arm_func_start OS_InitIrqTable
OS_InitIrqTable: ; 0x020CA07C
ldr r0, _020CA090 ; =0x027E0060
mov r1, #0x0
str r1, [r0, #0x4]
str r1, [r0, #0x0]
bx lr
.balign 4
_020CA090: .word 0x027E0060
|