version 1.2, 2007/10/29 20:34:23 |
version 1.3, 2007/11/04 22:39:27 |
|
|
.global main |
.global main |
|
|
_start: |
_start: |
bl _vector_reset /* reset */ |
b _vector_reset /* reset */ |
bl _vector_undef /* undefined insn */ |
bl _vector_undef /* undefined insn */ |
bl _vector_swi /* software intr handler */ |
bl _vector_swi /* software intr handler */ |
bl _vector_dataabrt /* data abort */ |
bl _vector_dataabrt /* data abort */ |
bl _vector_prefabrt /* prefetch abort */ |
bl _vector_prefabrt /* prefetch abort */ |
.word 0x00000000 /* [reserved] */ |
.word 0x00000000 /* [reserved] */ |
bl _vector_irq /* IRQ */ |
b _vector_irq /* IRQ */ |
bl _vector_fiq /* Fast Interrupt Request */ |
bl _vector_fiq /* Fast Interrupt Request */ |
|
|
_vector_reset: |
_vector_reset: |
/* |
/* |
Will enter here just right after RESET. |
* Will enter here just right after RESET. |
Set up stack and call main. |
* Set up stack and call main. |
*/ |
*/ |
|
|
ldr r13, Astack /* XXX stack at the end of phys mem */ |
/* |
|
* Setup an IRQ stack |
|
*/ |
|
/* switch into irq mode with interrupts disabled */ |
|
msr cpsr_c, #(0x12 | 0x80) |
|
|
|
/* set sp (sp is banked) */ |
|
ldr sp, Airqstack |
|
|
|
/* |
|
* Setup system stack |
|
*/ |
|
/* switch into system mode (interrupts turned off) */ |
|
msr cpsr_c, #(0x1f | 0x80) |
|
|
|
/* set system stack pointer */ |
|
ldr sp, Asysstack |
|
|
b main |
b main |
/* NOTREACHED */ |
/* NOTREACHED */ |
|
|
|
|
nop |
nop |
|
|
_vector_irq: |
_vector_irq: |
|
|
bl irq_trampoline |
bl irq_trampoline |
|
|
|
mrs r0, spsr |
|
msr cpsr, r0 |
|
|
|
subs pc, r14, #4 |
|
|
_vector_fiq: |
_vector_fiq: |
nop |
nop |
|
|
/* last word of the physical memory */ |
/* last word of the physical memory */ |
Astack: |
Asysstack: |
.word 0x01fffffc |
.word 0x01fffffc |
|
Airqstack: |
|
.word 0x01fff000 |
|
|