summaryrefslogtreecommitdiff
path: root/arm7/asm/SND_alarm.s
blob: 68740d65a81ab7acb33b4dcc0a833f98109d935c (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
	.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