summaryrefslogtreecommitdiff
path: root/arm9/asm/OS_irqTable.s
blob: 9a484063643ea24e65404e84ffe0b88e2cb0ec67 (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
	.include "asm/macros.inc"
	.include "global.inc"

    .section .dtcm
	.balign 16, 0
	.global OS_IRQTable
OS_IRQTable: ; 027E0000 ;10b6a0
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OSi_IrqTimer0
	.word OSi_IrqTimer1
	.word OSi_IrqTimer2
	.word OSi_IrqTimer3
	.word OS_IrqDummy
	.word OSi_IrqDma0
	.word OSi_IrqDma1
	.word OSi_IrqDma2
	.word OSi_IrqDma3
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy
	.word OS_IrqDummy

    .section .text

	arm_func_start OSi_IrqTimer3
OSi_IrqTimer3: ; 0x020C9C8C
	ldr ip, _020C9C98 ; =OSi_IrqCallback
	mov r0, #0x7
	bx r12
	.balign 4
_020C9C98: .word OSi_IrqCallback

	arm_func_start OSi_IrqTimer2
OSi_IrqTimer2: ; 0x020C9C9C
	ldr ip, _020C9CA8 ; =OSi_IrqCallback
	mov r0, #0x6
	bx r12
	.balign 4
_020C9CA8: .word OSi_IrqCallback

	arm_func_start OSi_IrqTimer1
OSi_IrqTimer1: ; 0x020C9CAC
	ldr ip, _020C9CB8 ; =OSi_IrqCallback
	mov r0, #0x5
	bx r12
	.balign 4
_020C9CB8: .word OSi_IrqCallback

	arm_func_start OSi_IrqTimer0
OSi_IrqTimer0: ; 0x020C9CBC
	ldr ip, _020C9CC8 ; =OSi_IrqCallback
	mov r0, #0x4
	bx r12
	.balign 4
_020C9CC8: .word OSi_IrqCallback

	arm_func_start OSi_IrqDma3
OSi_IrqDma3: ; 0x020C9CCC
	ldr ip, _020C9CD8 ; =OSi_IrqCallback
	mov r0, #0x3
	bx r12
	.balign 4
_020C9CD8: .word OSi_IrqCallback

	arm_func_start OSi_IrqDma2
OSi_IrqDma2: ; 0x020C9CDC
	ldr ip, _020C9CE8 ; =OSi_IrqCallback
	mov r0, #0x2
	bx r12
	.balign 4
_020C9CE8: .word OSi_IrqCallback

	arm_func_start OSi_IrqDma1
OSi_IrqDma1: ; 0x020C9CEC
	ldr ip, _020C9CF8 ; =OSi_IrqCallback
	mov r0, #0x1
	bx r12
	.balign 4
_020C9CF8: .word OSi_IrqCallback

	arm_func_start OSi_IrqDma0
OSi_IrqDma0: ; 0x020C9CFC
	ldr ip, _020C9D08 ; =OSi_IrqCallback
	mov r0, #0x0
	bx r12
	.balign 4
_020C9D08: .word OSi_IrqCallback

	arm_func_start OSi_IrqCallback
OSi_IrqCallback: ; 0x020C9D0C
	stmdb sp!, {r4-r5,lr}
	sub sp, sp, #0x4
	mov r1, #0xc
	mul r4, r0, r1
	ldr r2, _020C9D94 ; =OSi_IrqCallbackInfo
	ldr r3, _020C9D98 ; =0x02106818
	mov r0, r0, lsl #0x1
	ldr r1, [r2, r4]
	ldrh r3, [r3, r0]
	mov r5, #0x1
	mov r0, #0x0
	str r0, [r2, r4]
	cmp r1, #0x0
	mov r5, r5, lsl r3
	beq _020C9D54
	ldr r0, _020C9D9C ; =0x021D3424
	ldr r0, [r0, r4]
	blx r1
_020C9D54:
	ldr r0, _020C9DA0 ; =0x027E0000
	ldr r1, _020C9DA4 ; =0x021D3420
	add r0, r0, #0x3000
	ldr r2, [r0, #0xff8]
	orr r2, r2, r5
	str r2, [r0, #0xff8]
	ldr r0, [r1, r4]
	cmp r0, #0x0
	addne sp, sp, #0x4
	ldmneia sp!, {r4-r5,lr}
	bxne lr
	mov r0, r5
	bl OS_DisableIrqMask
	add sp, sp, #0x4
	ldmia sp!, {r4-r5,lr}
	bx lr
	.balign 4
_020C9D94: .word OSi_IrqCallbackInfo
_020C9D98: .word OSi_IrqCallbackInfoIndex
_020C9D9C: .word OSi_IrqCallbackInfo + 8
_020C9DA0: .word SDK_AUTOLOAD_DTCM_START
_020C9DA4: .word OSi_IrqCallbackInfo + 4

	arm_func_start OS_IrqDummy
OS_IrqDummy: ; 0x020C9DA8
	bx lr