aboutsummaryrefslogtreecommitdiff
path: root/src/exceptions/undefined.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/exceptions/undefined.S')
-rw-r--r--src/exceptions/undefined.S34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/exceptions/undefined.S b/src/exceptions/undefined.S
new file mode 100644
index 0000000..b8eab29
--- /dev/null
+++ b/src/exceptions/undefined.S
@@ -0,0 +1,34 @@
+.section ".text.exceptions"
+.globl undefined
+undefined:
+ cpsid aif
+ stmfd sp!, {r0-r12,lr}
+ ldr r4, [lr, #-4]
+ mov r0, #0
+ mov r1, #17
+ ldr r2, =undefined_msg
+ bl draw_string
+ mov r0, #18
+ mov r1, #17
+ mov r2, r4
+ bl draw_hex32
+ mov r0, #27
+ mov r1, #17
+ ldr r2, =undefined_at
+ bl draw_string
+ // Output lr
+ mov r1, #0x1000
+ ldr r0, [r1, #-4]
+ sub r2, r0, #4
+ mov r0, #31
+ mov r1, #17
+ bl draw_hex32
+ // Skip instruction for now
+ // In future,
+ // ldmfd sp!, {r0-r12,lr} // Note the lack of ^ since subs will handle it
+ // subs pc, lr, #4
+ ldmfd sp!, {r0-r12,pc}^
+
+.section .data
+undefined_msg: .asciz "Undefined Handler"
+undefined_at: .asciz "@ 0x"