Newer
Older
uwuboot / source / arm9 / exception.s
.arm
.arch armv5te
.fpu softvfp

.global undefHandler
.global prefetchAbortHandler
.global dataAbortHandler

.type undefHandler STT_FUNC
.type prefetchAbortHandler STT_FUNC
.type dataAbortHandler STT_FUNC
.type exceptionHandler STT_FUNC

.extern guruMeditation



undefHandler:
	msr cpsr_f, #(0<<29)        @ Abuse conditional flags in cpsr for temporary exception type storage
	b exceptionHandler
prefetchAbortHandler:
	msr cpsr_f, #(1<<29)
	b exceptionHandler
dataAbortHandler:
	msr cpsr_f, #(2<<29)
exceptionHandler:
	ldr sp, =0x02000000
	stmfd sp!, {r0-r14}^        @ Save all user/system mode regs except pc
	mrs r0, cpsr
	lsr r0, r0, #29             @ Get back the exception type from cpsr
	mrs r1, spsr                @ Get saved cpsr
	stmfd sp!, {r1, lr}         @ Save spsr and lr (pc) on exception stack
	mov r1, sp
	msr cpsr_c, #0xDF           @ Disable all interrupts, system mode
	mov sp, r1
	b guruMeditation            @ r0 = exception type, r1 = reg dump ptr {cpsr, pc + X, r0-r14}