-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstartup.S
More file actions
executable file
·58 lines (41 loc) · 1.13 KB
/
startup.S
File metadata and controls
executable file
·58 lines (41 loc) · 1.13 KB
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
.global _reset
_reset:
bl setup_stacks
bl main
b .
/*Setup stack addresses*/
setup_stacks:
mov sp, #SVC_STACK /*r13_svc (Supervisor mode)*/
msr cpsr_c, #IRQ_MDMASK /*switch to irq mode*/
mov sp, #IRQ_STACK /*r13_irq */
msr cpsr_c, #FIRQ_MDMASK /*switch to fast irq mode*/
mov sp, #FIQ_STACK /*r13_fiq*/
msr cpsr_c, #ABRT_MD /*switch to abort mode*/
mov sp, #ABRT_STACK /*r13_abrt*/
msr cpsr_c, #UND_MD /*switch to undefined mode*/
mov sp, #UND_STACK /*r13_und*/
msr cpsr_c, #SYS_MD /*switch to system mode*/
mov sp, #SYS_STACK /*r13_sys*/
msr cpsr_c, #SVC_MD
mov pc, lr
dump:
mov r0, #1
bl dump_cpsr
.equ STACK_SIZE, 0x1000
.equ BASE_STACK, 0x20000
.equ ABRT_STACK, BASE_STACK+STACK_SIZE
.equ FIQ_STACK , ABRT_STACK+STACK_SIZE
.equ IRQ_STACK , FIQ_STACK+STACK_SIZE
.equ SVC_STACK , IRQ_STACK+STACK_SIZE
.equ SYS_STACK , SVC_STACK+STACK_SIZE
.equ UND_STACK , SYS_STACK+STACK_SIZE
.equ USR_STACK , UND_STACK+STACK_SIZE
.equ ABRT_MD , 0x17
.equ FIQ_MD , 0x11
.equ IRQ_MD , 0x12
.equ SVC_MD , 0x13
.equ SYS_MD , 0x1f
.equ UND_MD , 0x1b
.equ USR_MD , 0x10
.equ IRQ_MDMASK , 0xd2
.equ FIRQ_MDMASK , 0xd1