Annotation of funnyos/arch/sam7s64/boot/loader.S, Revision 1.2
1.1 init 1: /*
1.2 ! init 2: * $Id: loader.S,v 1.1 2007/11/08 22:07:04 init Exp $
1.1 init 3: */
4: /*
5: * FunnyOS loader
6: * for Atmel SAM7S64 SoC.
7: */
8: .text
9: .global _start
10: .global main
11:
12: _start:
13: b _vector_reset /* reset */
14: bl _vector_undef /* undefined insn */
15: bl _vector_swi /* software intr handler */
16: bl _vector_dataabrt /* data abort */
17: bl _vector_prefabrt /* prefetch abort */
18: .word 0x00000000 /* [reserved] */
19: b _vector_irq /* IRQ */
20: bl _vector_fiq /* Fast Interrupt Request */
21:
22: _vector_reset:
23: /*
24: * Will enter here just right after RESET.
25: * Set up stack and call main.
26: */
27:
28: /*
29: * Setup an IRQ stack
30: */
31: /* switch into irq mode with interrupts disabled */
32: msr cpsr_c, #(0x12 | 0x80)
33:
34: /* set sp (sp is banked) */
35: ldr sp, Airqstack
36:
37: /*
38: * Setup system stack
39: */
40: /* switch into system mode (interrupts turned off) */
41: msr cpsr_c, #(0x1f | 0x80)
42:
43: /* set system stack pointer */
44: ldr sp, Asysstack
45:
46: b main
47: /* NOTREACHED */
48:
49: _vector_undef:
50: /* Undefined insn handler */
51: mov pc, r14
52:
53: _vector_swi:
54: mov pc, r14
55:
56: _vector_dataabrt:
57: /* XXX fatal */
58: nop
59:
60: _vector_prefabrt:
61: nop
62:
63: _vector_irq:
64: /* decrement pc by one insn */
65: sub lr, lr, #4
66:
67: /* store all system mode registers */
68: stmdb sp!, {r0-r12, lr}
69:
70: bl irq_trampoline
71:
72: /* load r0-r12 and pc from the stack */
73: /* note ^ that copies SPSR into CPSR */
74: ldmia sp!, {r0-r12, pc}^
75:
76: _vector_fiq:
77: nop
78:
79: /* last word of the physical memory */
80: Asysstack:
1.2 ! init 81: .word 0x00203fff
1.1 init 82: Airqstack:
1.2 ! init 83: .word 0x00201000
1.1 init 84:
CVSweb