summaryrefslogtreecommitdiff
path: root/arm7/asm/OS_interrupt.s
blob: 48fc9d1b17c025f509a147d25ad191a341bdc6a6 (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
145
146
147
148
149
150
151
152
153
154
155
	.include "asm/macros.inc"
	.include "global.inc"

    .text

	arm_func_start OS_ResetRequestIrqMask
OS_ResetRequestIrqMask: ; 0x037F8824
	ldr	ip, _037F8850	; =0x04000208
	ldrh	r3, [ip]
	mov	r1, #0
	strh	r1, [ip]
	ldr	r2, _037F8854	; =0x04000214
	ldr	r1, [r2]
	str	r0, [r2]
	ldrh	r0, [ip]
	strh	r3, [ip]
	mov	r0, r1
	bx	lr
_037F8850:	.word	0x04000208
_037F8854:	.word	0x04000214

	arm_func_start OS_DisableIrqMask
OS_DisableIrqMask: ; 0x037F8858
	ldr	ip, _037F888C	; =0x04000208
	ldrh	r3, [ip]
	mov	r1, #0
	strh	r1, [ip]
	ldr	r2, _037F8890	; =0x04000210
	ldr	r1, [r2]
	mvn	r0, r0
	and	r0, r1, r0
	str	r0, [r2]
	ldrh	r0, [ip]
	strh	r3, [ip]
	mov	r0, r1
	bx	lr
_037F888C:	.word	0x04000208
_037F8890:	.word	0x04000210

	arm_func_start OS_EnableIrqMask
OS_EnableIrqMask: ; 0x037F8894
	ldr	ip, _037F88C4	; =0x04000208
	ldrh	r3, [ip]
	mov	r1, #0
	strh	r1, [ip]
	ldr	r2, _037F88C8	; =0x04000210
	ldr	r1, [r2]
	orr	r0, r1, r0
	str	r0, [r2]
	ldrh	r0, [ip]
	strh	r3, [ip]
	mov	r0, r1
	bx	lr
_037F88C4:	.word	0x04000208
_037F88C8:	.word	0x04000210

	arm_func_start OS_SetIrqMask
OS_SetIrqMask: ; 0x037F88CC
	ldr	ip, _037F88F8	; =0x04000208
	ldrh	r3, [ip]
	mov	r1, #0
	strh	r1, [ip]
	ldr	r2, _037F88FC	; =0x04000210
	ldr	r1, [r2]
	str	r0, [r2]
	ldrh	r0, [ip]
	strh	r3, [ip]
	mov	r0, r1
	bx	lr
_037F88F8:	.word	0x04000208
_037F88FC:	.word	0x04000210

	arm_func_start OSi_EnterTimerCallback
OSi_EnterTimerCallback: ; 0x037F8900
	stmdb	sp!, {r4, lr}
	mov	r3, #12
	mul	r4, r0, r3
	ldr	r3, _037F8940	; =_03807744
	str	r1, [r3, r4]
	ldr	r1, _037F8944	; =_0380774C
	str	r2, [r1, r4]
	mov	r1, #1
	add	r0, r0, #3
	mov	r0, r1, lsl r0
	bl	OS_EnableIrqMask
	mov	r1, #1
	ldr	r0, _037F8948	; =_03807748
	str	r1, [r0, r4]
	ldmia	sp!, {r4, lr}
	bx	lr
_037F8940:	.word	_03807744
_037F8944:	.word	_0380774C
_037F8948:	.word	_03807748

	arm_func_start OS_SetIrqFunction
OS_SetIrqFunction: ; 0x037F894C
	stmdb	sp!, {r4, r5, r6, r7, r8, r9, lr}
	sub	sp, sp, #4
	mov	r9, #0
	mov	r7, r9
	ldr	lr, _037F89E8	; =OS_IRQTable
	ldr	r4, _037F89EC	; =_03807774
	ldr	r6, _037F89F0	; =OSi_IrqCallbackInfo
	mov	ip, r9
	mov	r3, #1
	mov	r2, #12
_037F8974:
	ands	r5, r0, #1
	beq	_037F89CC
	mov	r8, r7
	cmp	r9, #8
	blt	_037F8998
	cmp	r9, #11
	suble	r5, r9, #8
	mlale	r8, r5, r2, r6
	ble	_037F89BC
_037F8998:
	cmp	r9, #3
	blt	_037F89B0
	cmp	r9, #6
	addle	r5, r9, #1
	mlale	r8, r5, r2, r6
	ble	_037F89BC
_037F89B0:
	cmp	r9, #0
	moveq	r8, r4
	strne	r1, [lr, r9, lsl #2]
_037F89BC:
	cmp	r8, #0
	strne	r1, [r8]
	strne	ip, [r8, #8]
	strne	r3, [r8, #4]
_037F89CC:
	mov	r0, r0, lsr #1
	add	r9, r9, #1
	cmp	r9, #25
	blt	_037F8974
	add	sp, sp, #4
	ldmia	sp!, {r4, r5, r6, r7, r8, r9, lr}
	bx	lr
_037F89E8:	.word	OS_IRQTable
_037F89EC:	.word	_03807774
_037F89F0:	.word	OSi_IrqCallbackInfo

	arm_func_start OS_InitIrqTable
OS_InitIrqTable: ; 0x037F89F4
	mov	r1, #0
	ldr	r0, _037F8A10	; =OSi_IrqThreadQueue
	str	r1, [r0, #4]
	str	r1, [r0]
	ldr	r0, _037F8A14	; =0x027FFC3C
	str	r1, [r0]
	bx	lr
_037F8A10:	.word	OSi_IrqThreadQueue
_037F8A14:	.word	0x027FFC3C