init vector implementation
[cortex-from-scratch] / start.asm
index 3c92e9b..294a718 100644 (file)
--- a/start.asm
+++ b/start.asm
@@ -1,19 +1,40 @@
        .equ STACK_TOP, 0x20000800
        .text
        .global _start
+       .global reset, nmi, hardfault
        .code 16
        .syntax unified
 _start:
-       .word STACK_TOP, start
-       .type start, function
+       .word STACK_TOP, reset, nmi, hardfault
+       .type reset, function
 
-/* Start of main program */
-start:
+/* A reset vector (or bootcode) will call main in main.c
+   this is the so called 'entry to C' */
+reset:
        b main
-       b start
+       b reset 
+
+/* These are consequently the nmi and hardfault vector handlers
+   before booting and entering main, these can actually be called
+   (machine somehow has a failure). That's why they are included here.
+   Later the interrupt vector
+   will be relocated to SRAM and the will be copied / modified.  */
+
+nmi:
+       b nmi
+
+hardfault: 
+       b hardfault
+.global stub
+stub:
+       mov r1, #'z'
+       ldr r0, [r1]
+       bx lr
+       /* ldr R0,=10
+       mov R1,#0
+       udiv.w R2, R0, R1 */
 
        .data
-Result:
-       .word 'X' /* results now is in 0x20000008 (0x20000000 + 2 w) */
+       .word 'x'
        .end