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
|
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global _03808EEC
_03808EEC: ;0x03808EEC
.space 0x038090EC - 0x03808EEC
.section .text
arm_func_start AlarmHandler
AlarmHandler: ; 0x037FF524
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, #7
mov r4, #0
_037FF534:
mov r0, r5
mov r1, r6
mov r2, r4
bl PXI_SendWordByFifo
cmp r0, #0
blt _037FF534
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_start SND_StopAlarm
SND_StopAlarm: ; 0x037FF554
stmdb sp!, {r4, lr}
ldr r1, _037FF590 ; =_03808EEC
add r4, r1, r0, lsl #6
ldrb r0, [r1, r0, lsl #6]
cmp r0, #0
beq _037FF588
add r0, r4, #20
bl OS_CancelAlarm
ldrb r0, [r4, #1]
add r0, r0, #1
strb r0, [r4, #1]
mov r0, #0
strb r0, [r4]
_037FF588:
ldmia sp!, {r4, lr}
bx lr
_037FF590: .word _03808EEC
arm_func_start SND_StartAlarm
SND_StartAlarm: ; 0x037FF594
stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
sub sp, sp, #12
mov r4, r0
ldr r0, _037FF654 ; =_03808EEC
add r5, r0, r4, lsl #6
ldrb r0, [r0, r4, lsl #6]
cmp r0, #0
beq _037FF5C4
add r0, r5, #20
bl OS_CancelAlarm
mov r0, #0
strb r0, [r5]
_037FF5C4:
ldr r9, [r5, #4]
ldr r8, [r5, #8]
ldr r7, [r5, #12]
ldr r6, [r5, #16]
ldrb r0, [r5, #1]
orr r4, r4, r0, lsl #8
add r0, r5, #20
bl OS_CreateAlarm
mov r0, #0
cmp r6, r0
cmpeq r7, r0
bne _037FF610
str r4, [sp]
add r0, r5, #20
mov r1, r9
mov r2, r8
ldr r3, _037FF658 ; =AlarmHandler
bl OS_SetAlarm
b _037FF640
_037FF610:
bl OS_GetTick
mov r2, r0
ldr r0, _037FF658 ; =AlarmHandler
str r0, [sp, #4]
str r4, [sp, #8]
mov r3, r7
str r6, [sp]
add r0, r5, #20
adds r4, r9, r2
adc r2, r8, r1
mov r1, r4
bl OS_SetPeriodicAlarm
_037FF640:
mov r0, #1
strb r0, [r5]
add sp, sp, #12
ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
bx lr
_037FF654: .word _03808EEC
_037FF658: .word AlarmHandler
arm_func_start SND_SetupAlarm
SND_SetupAlarm: ; 0x037FF65C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r8, r1
mov r7, r2
mov r6, r3
ldr r5, [sp, #24]
ldr r1, _037FF6B4 ; =_03808EEC
add r4, r1, r0, lsl #6
ldrb r0, [r1, r0, lsl #6]
cmp r0, #0
beq _037FF694
add r0, r4, #20
bl OS_CancelAlarm
mov r0, #0
strb r0, [r4]
_037FF694:
str r8, [r4, #4]
str r7, [r4, #8]
str r6, [r4, #12]
str r5, [r4, #16]
ldr r0, [sp, #28]
strb r0, [r4, #1]
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
_037FF6B4: .word _03808EEC
arm_func_start SND_AlarmInit
SND_AlarmInit: ; 0x037FF6B8
mov r3, #0
mov r2, r3
ldr r1, _037FF6E0 ; =SNDi_Work
_037FF6C4:
add r0, r1, r3, lsl #6
strb r2, [r0, #3968] ; 0xf80
strb r2, [r0, #3969] ; 0xf81
add r3, r3, #1
cmp r3, #8
blt _037FF6C4
bx lr
_037FF6E0: .word SNDi_Work
|