Annotation of funnyos/arch/sam7s64/boot/loader.S, Revision 1.1
1.1 ! init 1: /*
! 2: * $Id: loader.S,v 1.1.1.1 2007/10/16 08:41:04 init Exp $
! 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:
! 81: .word 0x01fffffc
! 82: Airqstack:
! 83: .word 0x01fff000
! 84:
CVSweb