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
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
|
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global _0380A038
_0380A038: ;0x0380A038
.space 0x0380A03C - 0x0380A038
.global _0380A03C
_0380A03C: ;0x0380A03C
.space 0x0380A05C - 0x0380A03C
.global _0380A05C
_0380A05C: ;0x0380A05C
.space 0x0380A06C - 0x0380A05C
.global _0380A06C
_0380A06C: ;0x0380A06C
.space 0x0380A13C - 0x0380A06C
.global _0380A13C
_0380A13C: ;0x0380A13C
.space 0x0380A210 - 0x0380A13C
.global _0380A210
_0380A210: ;0x0380A210
.space 0x0380A3F0 - 0x0380A210
.section .text
arm_func_start RtcBCD2HEX
RtcBCD2HEX: ;@ 0x03805064
stmfd sp!, {lr}
sub sp, sp, #4
mov lr, #0
mov r2, lr
b _03805094
_03805078:
mov r1, r2, lsl #2
mov r1, r0, lsr r1
and r1, r1, #15
cmp r1, #10
movcs r0, #0
bcs _038050D0
add r2, r2, #1
_03805094:
cmp r2, #8
blt _03805078
mov r3, #0
mov ip, #1
mov r2, #10
_038050A8:
mov r1, r3, lsl #2
mov r1, r0, lsr r1
and r1, r1, #15
mla lr, ip, r1, lr
add r3, r3, #1
mul r1, ip, r2
mov ip, r1
cmp r3, #8
blt _038050A8
mov r0, lr
_038050D0:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
arm_func_start RtcGetDayOfWeek
RtcGetDayOfWeek: ;@ 0x038050DC
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r8, r0
mov r7, r1
mov r6, r2
sub r0, r7, #1
cmp r0, #1
subls r8, r8, #1
addls r7, r7, #12
mov r0, r8
mov r1, #400 ;@ 0x190
bl _u32_div_f
mov r5, r0
mov r0, r8
mov r1, #100 ;@ 0x64
bl _u32_div_f
mov r4, r0
mov r0, #13
mul r0, r7, r0
add r0, r0, #8
mov r1, #5
bl _u32_div_f
add r1, r8, r8, lsr #2
sub r1, r1, r4
add r1, r5, r1
add r0, r1, r0
add r0, r6, r0
mov r1, #7
bl _u32_div_f
mov r0, r1
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_start RtcInitialize
RtcInitialize: ;@ 0x03805158
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
add r0, sp, #0
bl RTC_ReadStatus1
add r0, sp, #2
bl RTC_ReadStatus2
ldrh r0, [sp]
mov r1, r0, lsl #24
movs r1, r1, lsr #31
bne _0380519C
mov r0, r0, lsl #25
movs r0, r0, lsr #31
bne _0380519C
ldrh r0, [sp, #2]
mov r0, r0, lsl #24
movs r0, r0, lsr #31
beq _038051B4
_0380519C:
ldrh r0, [sp]
bic r0, r0, #1
orr r0, r0, #1
strh r0, [sp]
add r0, sp, #0
bl RTC_WriteStatus1
_038051B4:
ldrh r0, [sp]
mov r1, r0, lsl #27
movs r1, r1, lsr #31
bne _038051D0
mov r0, r0, lsl #26
movs r0, r0, lsr #31
beq _038051F0
_038051D0:
ldrh r0, [sp, #2]
bic r0, r0, #15
strh r0, [sp, #2]
ldrh r0, [sp, #2]
bic r0, r0, #64 ;@ 0x40
strh r0, [sp, #2]
add r0, sp, #2
bl RTC_WriteStatus2
_038051F0:
ldr r0, _03805288 ;@ =0x027FFDE8
bl RTC_ReadDateTime
ldr r0, _03805288 ;@ =0x027FFDE8
ldrb r0, [r0]
bl RtcBCD2HEX
mov r4, r0
ldr r0, _03805288 ;@ =0x027FFDE8
ldr r0, [r0]
mov r0, r0, lsl #19
mov r0, r0, lsr #27
bl RtcBCD2HEX
mov r5, r0
ldr r0, _03805288 ;@ =0x027FFDE8
ldr r0, [r0]
mov r0, r0, lsl #10
mov r0, r0, lsr #26
bl RtcBCD2HEX
mov r2, r0
add r0, r4, #2000 ;@ 0x7d0
mov r1, r5
bl RtcGetDayOfWeek
ldr r2, _03805288 ;@ =0x027FFDE8
ldr r1, [r2]
mov r3, r1, lsl #5
mov r3, r3, lsr #29
cmp r3, r0
beq _03805274
bic r1, r1, #117440512 ;@ 0x7000000
and r0, r0, #7
orr r0, r1, r0, lsl #24
str r0, [r2]
mov r0, r2
bl RTC_WriteDateTime
_03805274:
mov r0, #1
bl RTC_SetHourFormat
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
_03805288: .word 0x027FFDE8
arm_func_start RtcAlarmIntr
RtcAlarmIntr: ;@ 0x0380528C
stmdb sp!, {r4, lr}
sub sp, sp, #8
add r0, sp, #0
bl RTC_ReadStatus1
ldrh r0, [sp]
mov r1, r0, lsl #27
movs r1, r1, lsr #31
bne _038052B8
mov r0, r0, lsl #26
movs r0, r0, lsr #31
beq _03805310
_038052B8:
add r0, sp, #2
bl RTC_ReadStatus2
mov r4, #0
ldrh r0, [sp]
mov r0, r0, lsl #27
movs r0, r0, lsr #31
orrne r4, r4, #1
ldrneh r0, [sp, #2]
bicne r0, r0, #15
strneh r0, [sp, #2]
ldrh r0, [sp]
mov r0, r0, lsl #26
movs r0, r0, lsr #31
orrne r4, r4, #2
ldrneh r0, [sp, #2]
bicne r0, r0, #64 ;@ 0x40
strneh r0, [sp, #2]
add r0, sp, #2
bl RTC_WriteStatus2
mov r0, #48 ;@ 0x30
mov r1, r4
bl RtcReturnResult
_03805310:
add sp, sp, #8
ldmia sp!, {r4, lr}
bx lr
arm_func_start RtcThread
RtcThread: ;@ 0x0380531C
stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
sub sp, sp, #76 ;@ 0x4c
ldr r6, _038057CC ;@ =0x027FFDE8
add r5, r6, #4
mov r7, #0
ldr r9, _038057D0 ;@ =_0380A03C
mov r8, #1
mov r0, #16
str r0, [sp]
mov r0, #17
str r0, [sp, #4]
mov r0, #18
str r0, [sp, #8]
mov sl, #19
mov r4, #2
mov fp, #20
mov r0, #21
str r0, [sp, #12]
mov r0, #22
str r0, [sp, #16]
mov r0, #23
str r0, [sp, #20]
mov r0, #24
str r0, [sp, #24]
mov r0, #25
str r0, [sp, #28]
mov r0, #32
str r0, [sp, #32]
mov r0, #33 ;@ 0x21
str r0, [sp, #36] ;@ 0x24
mov r0, #34 ;@ 0x22
str r0, [sp, #40] ;@ 0x28
mov r0, #35 ;@ 0x23
str r0, [sp, #44] ;@ 0x2c
mov r0, #36 ;@ 0x24
str r0, [sp, #48] ;@ 0x30
mov r0, #37 ;@ 0x25
str r0, [sp, #52] ;@ 0x34
mov r0, #38 ;@ 0x26
str r0, [sp, #56] ;@ 0x38
mov r0, #39 ;@ 0x27
str r0, [sp, #60] ;@ 0x3c
mov r0, #40 ;@ 0x28
str r0, [sp, #64] ;@ 0x40
mov r0, #41 ;@ 0x29
str r0, [sp, #68] ;@ 0x44
_038053D4:
mov r0, r9
add r1, sp, #72 ;@ 0x48
mov r2, r8
bl OS_ReceiveMessage
ldr r0, _038057D4 ;@ =_0380A13C
ldrh r0, [r0, #216] ;@ 0xd8
cmp r0, #41 ;@ 0x29
addls pc, pc, r0, lsl #2
b _038057BC
b _038054A0
b _038054B8
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038054DC
b _038054F8
b _03805514
b _03805530
b _03805568
b _038055A0
b _038055D8
b _038055F4
b _03805610
b _0380562C
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _038057BC
b _03805648
b _03805664
b _03805688
b _038056A4
b _038056DC
b _03805714
b _0380574C
b _03805768
b _03805784
b _038057A0
_038054A0:
bl RTC_Reset
str r7, [r9, #468] ;@ 0x1d4
mov r0, r7
mov r1, r7
bl RtcReturnResult
b _038053D4
_038054B8:
ldrh r0, [r6]
mov r0, r0, lsl #30
mov r0, r0, lsr #31
bl RTC_SetHourFormat
str r7, [r9, #468] ;@ 0x1d4
mov r0, r8
mov r1, r7
bl RtcReturnResult
b _038053D4
_038054DC:
mov r0, r6
bl RTC_ReadDateTime
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp]
mov r1, r7
bl RtcReturnResult
b _038053D4
_038054F8:
mov r0, r6
bl RTC_ReadDate
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #4]
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805514:
add r0, r6, #4
bl RTC_ReadTime
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #8]
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805530:
mov r0, r5
bl RTC_ReadPulse
cmp r0, #0
bne _03805554
str r7, [r9, #468] ;@ 0x1d4
mov r0, sl
mov r1, r4
bl RtcReturnResult
b _038053D4
_03805554:
str r7, [r9, #468] ;@ 0x1d4
mov r0, sl
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805568:
mov r0, r5
bl RTC_ReadAlarm1
cmp r0, #0
bne _0380558C
str r7, [r9, #468] ;@ 0x1d4
mov r0, fp
mov r1, r4
bl RtcReturnResult
b _038053D4
_0380558C:
str r7, [r9, #468] ;@ 0x1d4
mov r0, fp
mov r1, r7
bl RtcReturnResult
b _038053D4
_038055A0:
mov r0, r5
bl RTC_ReadAlarm2
cmp r0, #0
bne _038055C4
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #12]
mov r1, r4
bl RtcReturnResult
b _038053D4
_038055C4:
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #12]
mov r1, r7
bl RtcReturnResult
b _038053D4
_038055D8:
mov r0, r6
bl RTC_ReadStatus1
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #16]
mov r1, r7
bl RtcReturnResult
b _038053D4
_038055F4:
add r0, r6, #2
bl RTC_ReadStatus2
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #20]
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805610:
add r0, r6, #4
bl RTC_ReadAdjust
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #24]
mov r1, r7
bl RtcReturnResult
b _038053D4
_0380562C:
add r0, r6, #4
bl RTC_ReadFree
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #28]
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805648:
mov r0, r6
bl RTC_WriteDateTime
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #32]
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805664:
add r0, r6, #4
bl RTC_ReadTime
mov r0, r6
bl RTC_WriteDateTime
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #36] ;@ 0x24
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805688:
add r0, r6, #4
bl RTC_WriteTime
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #40] ;@ 0x28
mov r1, r7
bl RtcReturnResult
b _038053D4
_038056A4:
mov r0, r5
bl RTC_WritePulse
cmp r0, #0
bne _038056C8
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #44] ;@ 0x2c
mov r1, r4
bl RtcReturnResult
b _038053D4
_038056C8:
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #44] ;@ 0x2c
mov r1, r7
bl RtcReturnResult
b _038053D4
_038056DC:
mov r0, r5
bl RTC_WriteAlarm1
cmp r0, #0
bne _03805700
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #48] ;@ 0x30
mov r1, r4
bl RtcReturnResult
b _038053D4
_03805700:
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #48] ;@ 0x30
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805714:
mov r0, r5
bl RTC_WriteAlarm2
cmp r0, #0
bne _03805738
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #52] ;@ 0x34
mov r1, r4
bl RtcReturnResult
b _038053D4
_03805738:
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #52] ;@ 0x34
mov r1, r7
bl RtcReturnResult
b _038053D4
_0380574C:
mov r0, r6
bl RTC_WriteStatus1
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #56] ;@ 0x38
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805768:
add r0, r6, #2
bl RTC_WriteStatus2
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #60] ;@ 0x3c
mov r1, r7
bl RtcReturnResult
b _038053D4
_03805784:
add r0, r6, #4
bl RTC_WriteAdjust
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #64] ;@ 0x40
mov r1, r7
bl RtcReturnResult
b _038053D4
_038057A0:
add r0, r6, #4
bl RTC_WriteFree
str r7, [r9, #468] ;@ 0x1d4
ldr r0, [sp, #68] ;@ 0x44
mov r1, r7
bl RtcReturnResult
b _038053D4
_038057BC:
str r7, [r9, #468] ;@ 0x1d4
mov r1, r8
bl RtcReturnResult
b _038053D4
_038057CC: .word 0x027FFDE8
_038057D0: .word _0380A03C
_038057D4: .word _0380A13C
arm_func_start RtcReturnResult
RtcReturnResult: ;@ 0x038057D8
stmdb sp!, {r4, r5, r6, lr}
mov r0, r0, lsl #8
and r0, r0, #32512 ;@ 0x7f00
orr r2, r0, #32768 ;@ 0x8000
and r0, r1, #255 ;@ 0xff
orr r6, r2, r0
mov r5, #5
mov r4, #0
_038057F8:
mov r0, r5
mov r1, r6
mov r2, r4
bl PXI_SendWordByFifo
cmp r0, #0
blt _038057F8
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_start RtcPxiCallback
RtcPxiCallback: ;@ 0x03805818
stmdb sp!, {r4, lr}
cmp r2, #0
bne _03805944
and r0, r1, #32512 ;@ 0x7f00
mov r0, r0, lsl #8
mov r4, r0, lsr #16
cmp r4, #41 ;@ 0x29
addls pc, pc, r4, lsl #2
b _03805938
b _038058E4
b _038058E4
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _03805938
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
b _038058E4
_038058E4:
ldr r0, _0380594C ;@ =_0380A03C
ldr r1, [r0, #468] ;@ 0x1d4
cmp r1, #0
beq _03805904
mov r0, r4
mov r1, #3
bl RtcReturnResult
b _03805944
_03805904:
mov r1, #1
str r1, [r0, #468] ;@ 0x1d4
ldr r1, _03805950 ;@ =_0380A13C
strh r4, [r1, #216] ;@ 0xd8
mov r1, #0
mov r2, r1
bl OS_SendMessage
cmp r0, #0
bne _03805944
mov r0, r4
mov r1, #4
bl RtcReturnResult
b _03805944
_03805938:
mov r0, r4
mov r1, #1
bl RtcReturnResult
_03805944:
ldmia sp!, {r4, lr}
bx lr
_0380594C: .word _0380A03C
_03805950: .word _0380A13C
arm_func_start RTC_Init
RTC_Init: ;@ 0x03805954
stmdb sp!, {r4, lr}
sub sp, sp, #8
mov r4, r0
ldr r0, _03805A28 ;@ =_0380A038
ldrh r1, [r0]
cmp r1, #0
bne _03805A1C
mov r1, #1
strh r1, [r0]
ldr r0, _03805A2C ;@ =_0380A03C
str r1, [r0, #468] ;@ 0x1d4
bl RtcInitialize
mov r1, #0
ldr r0, _03805A2C ;@ =_0380A03C
str r1, [r0, #468] ;@ 0x1d4
bl PXI_Init
mov r0, #5
ldr r1, _03805A30 ;@ =RtcPxiCallback
bl PXI_SetFifoRecvCallback
ldr r0, _03805A2C ;@ =_0380A03C
ldr r1, _03805A34 ;@ =_0380A05C
mov r2, #4
bl OS_InitMessageQueue
mov r0, #256 ;@ 0x100
str r0, [sp]
str r4, [sp, #4]
ldr r0, _03805A38 ;@ =_0380A06C
ldr r1, _03805A3C ;@ =RtcThread
mov r2, #0
ldr r3, _03805A40 ;@ =_0380A210
bl OS_CreateThread
ldr r0, _03805A38 ;@ =_0380A06C
bl OS_WakeupThreadDirect
mov r0, #32768 ;@ 0x8000
bl EXIi_SelectRcnt
mov r0, #64 ;@ 0x40
mov r1, #0
bl EXIi_SetBitRcnt0L
mov r0, #256 ;@ 0x100
mov r1, r0
bl EXIi_SetBitRcnt0L
bl OS_DisableInterrupts
mov r4, r0
mov r0, #128 ;@ 0x80
ldr r1, _03805A44 ;@ =RtcAlarmIntr
bl OS_SetIrqFunction
mov r0, #128 ;@ 0x80
bl OS_EnableIrqMask
mov r0, r4
bl OS_RestoreInterrupts
_03805A1C:
add sp, sp, #8
ldmia sp!, {r4, lr}
bx lr
_03805A28: .word _0380A038
_03805A2C: .word _0380A03C
_03805A30: .word RtcPxiCallback
_03805A34: .word _0380A05C
_03805A38: .word _0380A06C
_03805A3C: .word RtcThread
_03805A40: .word _0380A210
_03805A44: .word RtcAlarmIntr
|