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
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
|
.include "asm/macros.inc"
.include "global.inc"
.extern UNK_02106A1C
.extern UNK_02106A20
.section .data
.global UNK_02106A1C
UNK_02106A1C: ; 0x02106A1C
.word 0
.global UNK_02106A20
UNK_02106A20: ; 0x02106A20
.word 0 ; Jan
.word 31 ; Feb
.word 59 ; Mar
.word 90 ; Apr
.word 120 ; May
.word 151 ; Jun
.word 181 ; Jul
.word 212 ; Aug
.word 243 ; Sep
.word 273 ; Oct
.word 304 ; Nov
.word 334 ; Dec
.text
arm_func_start RTC_GetDayOfWeek
RTC_GetDayOfWeek: ; 0x020D6248
stmdb sp!, {r4-r6,lr}
ldr r1, [r0, #0x4]
ldr r2, [r0, #0x0]
sub r3, r1, #0x2
cmp r3, #0x1
add lr, r2, #0x7d0
ldr r4, _020D630C ; =0x51EB851F
sublt lr, lr, #0x1
ldr r12, [r0, #0x8]
smull r0, r2, r4, lr
addlt r3, r3, #0xc
mov r1, #0x1a
mul r0, r3, r1
smull r1, r3, r4, lr
ldr r5, _020D6310 ; =0x66666667
sub r0, r0, #0x2
smull r4, r1, r5, r0
mov r4, lr, lsr #0x1f
mov r2, r2, asr #0x5
mov r3, r3, asr #0x5
add r3, r4, r3
ldr r5, _020D6314 ; =0x00000064
add r2, r4, r2
smull r2, r4, r5, r2
sub r2, lr, r2
mov r1, r1, asr #0x2
mov r0, r0, lsr #0x1f
add r1, r0, r1
mov r4, r2, asr #0x1
add r0, r12, r1
add r1, r2, r4, lsr #0x1e
add r2, r2, r0
mov r6, r3, asr #0x1
add r0, r3, r6, lsr #0x1e
add r1, r2, r1, asr #0x2
add r1, r1, r0, asr #0x2
mov r0, #0x5
mla r4, r3, r0, r1
ldr r3, _020D6318 ; =0x92492493
mov r1, r4, lsr #0x1f
smull r2, r0, r3, r4
add r0, r4, r0
mov r0, r0, asr #0x2
ldr r2, _020D631C ; =0x00000007
add r0, r1, r0
smull r0, r1, r2, r0
sub r0, r4, r0
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020D630C: .word 0x51EB851F
_020D6310: .word 0x66666667
_020D6314: .word 0x00000064
_020D6318: .word 0x92492493
_020D631C: .word 0x00000007
arm_func_start RTC_ConvertSecondToDateTime
RTC_ConvertSecondToDateTime: ; 0x020D6320
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r2
mov r12, #0x0
mov r4, r3
subs r2, r5, r12
sbcs r2, r4, r12
mov r7, r0
mov r6, r1
movlt r5, r12
movlt r4, r12
blt _020D6364
ldr r1, _020D63B0 ; =0xBC19137F
subs r0, r1, r5
sbcs r0, r12, r4
movlt r5, r1
movlt r4, r12
_020D6364:
ldr r2, _020D63B4 ; =0x00015180
mov r0, r5
mov r1, r4
mov r3, #0x0
bl _ll_mod
mov r1, r0
mov r0, r6
bl RTCi_ConvertSecondToTime
ldr r2, _020D63B4 ; =0x00015180
mov r0, r5
mov r1, r4
mov r3, #0x0
bl _ll_sdiv
mov r1, r0
mov r0, r7
bl RTC_ConvertDayToDate
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020D63B0: .word 0xBC19137F
_020D63B4: .word 0x00015180
arm_func_start RTCi_ConvertSecondToTime
RTCi_ConvertSecondToTime: ; 0x020D63B8
stmdb sp!, {r4-r6,lr}
ldr r2, _020D6448 ; =0x0001517F
cmp r1, #0x0
movlt r1, #0x0
cmp r1, r2
ldr ip, _020D644C ; =0x88888889
movgt r1, r2
smull r2, r3, r12, r1
smull r2, lr, r12, r1
ldr r5, _020D6450 ; =0x91A2B3C5
add r3, r1, r3
smull r4, r2, r5, r1
mov r5, r1, lsr #0x1f
mov r3, r3, asr #0x5
add r3, r5, r3
smull r4, r6, r12, r3
add lr, r1, lr
mov lr, lr, asr #0x5
add r6, r3, r6
add r2, r1, r2
ldr r4, _020D6454 ; =0x0000003C
add lr, r5, lr
smull r12, lr, r4, lr
sub lr, r1, r12
mov r2, r2, asr #0xb
mov r6, r6, asr #0x5
mov r1, r3, lsr #0x1f
add r6, r1, r6
smull r1, r12, r4, r6
str lr, [r0, #0x8]
sub r6, r3, r1
str r6, [r0, #0x4]
add r2, r5, r2
str r2, [r0, #0x0]
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020D6448: .word 0x0001517F
_020D644C: .word 0x88888889
_020D6450: .word 0x91A2B3C5
_020D6454: .word 0x0000003C
arm_func_start RTC_ConvertDayToDate
RTC_ConvertDayToDate: ; 0x020D6458
stmdb sp!, {r4,lr}
ldr r2, _020D6560 ; =0x00008EAC
cmp r1, #0x0
movlt r1, #0x0
cmp r1, r2
movgt r1, r2
ldr r3, _020D6564 ; =0x92492493
add lr, r1, #0x6
smull r2, r4, r3, lr
add r4, lr, r4
mov r4, r4, asr #0x2
mov r2, lr, lsr #0x1f
ldr ip, _020D6568 ; =0x00000007
add r4, r2, r4
smull r2, r3, r12, r4
sub r4, lr, r2
ldr r2, _020D656C ; =0x0000016D
ldr r3, _020D6570 ; =0x0000016E
str r4, [r0, #0xc]
mov lr, #0x0
_020D64A8:
ands r12, lr, #0x3
moveq r12, r3
movne r12, r2
mov r4, r1
subs r1, r1, r12
movmi r1, r4
bmi _020D64D0
add lr, lr, #0x1
cmp lr, #0x63
blo _020D64A8
_020D64D0:
ldr r2, _020D656C ; =0x0000016D
str lr, [r0, #0x0]
cmp r1, r2
movgt r1, r2
ands r2, lr, #0x3
bne _020D6518
cmp r1, #0x3c
bge _020D6514
cmp r1, #0x1f
movlt r2, #0x1
subge r1, r1, #0x1f
movge r2, #0x2
str r2, [r0, #0x4]
add r1, r1, #0x1
str r1, [r0, #0x8]
ldmia sp!, {r4,lr}
bx lr
_020D6514:
sub r1, r1, #0x1
_020D6518:
ldr r3, _020D6574 ; =UNK_02106A20
mov r4, #0xb
_020D6520:
ldr r2, [r3, r4, lsl #0x2]
mov r12, r4, lsl #0x2
cmp r1, r2
blt _020D6550
add r2, r4, #0x1
str r2, [r0, #0x4]
ldr r2, [r3, r12]
sub r1, r1, r2
add r1, r1, #0x1
str r1, [r0, #0x8]
ldmia sp!, {r4,lr}
bx lr
_020D6550:
subs r4, r4, #0x1
bpl _020D6520
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020D6560: .word 0x00008EAC
_020D6564: .word 0x92492493
_020D6568: .word 0x00000007
_020D656C: .word 0x0000016D
_020D6570: .word 0x0000016E
_020D6574: .word UNK_02106A20
arm_func_start RTC_ConvertDateTimeToSecond
RTC_ConvertDateTimeToSecond: ; 0x020D6578
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
bl RTC_ConvertDateToDay
mov r4, r0
mvn r0, #0x0
cmp r4, r0
addeq sp, sp, #0x4
moveq r1, r0
ldmeqia sp!, {r4-r5,lr}
bxeq lr
mov r0, r5
bl RTCi_ConvertTimeToSecond
mvn r2, #0x0
cmp r0, r2
moveq r1, r2
beq _020D65DC
ldr r1, _020D65EC ; =0x00015180
mov r2, #0x0
umull r12, r3, r4, r1
mla r3, r4, r2, r3
mov r2, r4, asr #0x1f
mla r3, r2, r1, r3
adds r2, r0, r12
adc r1, r3, r0, asr #0x1f
_020D65DC:
mov r0, r2
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020D65EC: .word 0x00015180
arm_func_start RTCi_ConvertTimeToSecond
RTCi_ConvertTimeToSecond: ; 0x020D65F0
ldr r3, [r0, #0x4]
ldr r2, [r0, #0x0]
mov r1, #0x3c
mla r3, r2, r1, r3
ldr r0, [r0, #0x8]
mla r0, r3, r1, r0
bx lr
arm_func_start RTC_ConvertDateToDay
RTC_ConvertDateToDay: ; 0x020D660C
ldr r3, [r0, #0x0]
cmp r3, #0x64
bhs _020D665C
ldr r2, [r0, #0x4]
cmp r2, #0x1
blo _020D665C
cmp r2, #0xc
bhi _020D665C
ldr r1, [r0, #0x8]
cmp r1, #0x1
blo _020D665C
cmp r1, #0x1f
bhi _020D665C
ldr r0, [r0, #0xc]
cmp r0, #0x7
bge _020D665C
cmp r2, #0x1
blo _020D665C
cmp r2, #0xc
bls _020D6664
_020D665C:
mvn r0, #0x0
bx lr
_020D6664:
ldr r0, _020D6698 ; =UNK_02106A1C
sub r1, r1, #0x1
ldr r0, [r0, r2, lsl #0x2]
cmp r2, #0x3
add r2, r1, r0
blo _020D6684
ands r0, r3, #0x3
addeq r2, r2, #0x1
_020D6684:
ldr r0, _020D669C ; =0x0000016D
add r1, r3, #0x3
mla r0, r3, r0, r2
add r0, r0, r1, lsr #0x2
bx lr
.balign 4
_020D6698: .word UNK_02106A1C
_020D669C: .word 0x0000016D
|