diff --git a/src/dbg.cpp b/src/dbg.cpp index 490eea7..822d780 100644 --- a/src/dbg.cpp +++ b/src/dbg.cpp @@ -32,3 +32,4 @@ extern "C" const char* itoa(uint32_t n) { return &string[0]; } + diff --git a/src/dbg.s b/src/dbg.s index 759fd3d..28e72ea 100644 --- a/src/dbg.s +++ b/src/dbg.s @@ -1,3 +1,7 @@ +.data +panic_msg: +.string "=== PANIC : I'm afraid I have lost my towel" + .text .extern c_printk @@ -16,3 +20,14 @@ printk: pop {pc} +/* TODO: to be implemented in a more useful way */ +.global panic +panic: + cpsid if + + ldr r0, =panic_msg + bl printkl + +1: + wfi + b 1b diff --git a/src/vectab.s b/src/vectab.s index 59a42ab..a05705b 100644 --- a/src/vectab.s +++ b/src/vectab.s @@ -1,3 +1,6 @@ +/* + ARM System Developer's Guide, Chapter 9 Section 1 (y. 2004-2008) (page 323) +*/ .data und_msg: .string "Undefined Instruction" @@ -16,7 +19,7 @@ fiq_msg: .align 4 .global vectab vectab: - b _start + ldr pc, =panic ldr pc, =und_handler ldr pc, =swi_handler ldr pc, =prefetch_abt_handler @@ -25,12 +28,11 @@ vectab: ldr pc, =irq_handler ldr pc, =fiq_handler -// TODO: untested und_handler: stmfd sp!, {lr} ldr r0, =und_msg - bl printk + bl printkl ldmfd sp!, {pc}^ @@ -44,6 +46,7 @@ swi_handler: // TODO: untested prefetch_abt_handler: + sub lr, #4 stmfd sp!, {lr} ldr r0, =prefetch_abt_msg @@ -51,13 +54,15 @@ prefetch_abt_handler: ldmfd sp!, {pc}^ -// TODO: untested data_abt_handler: + sub lr, #8 stmfd sp!, {lr} ldr r0, =data_abt_msg bl printkl + b panic + ldmfd sp!, {pc}^ // TODO: untested