blob: ac53f7f46bc7c70f64131aa781ebe900899db909 [file] [log] [blame]
.section .text
exception_handler:
jal x0, exception_handler
default_irq_handler:
jal x0, default_irq_handler
reset_handler:
/* set all registers to zero */
mv x1, x0
mv x2, x1
mv x3, x1
mv x4, x1
mv x5, x1
mv x6, x1
mv x7, x1
mv x8, x1
mv x9, x1
mv x10, x1
mv x11, x1
mv x12, x1
mv x13, x1
mv x14, x1
mv x15, x1
mv x16, x1
mv x17, x1
mv x18, x1
mv x19, x1
mv x20, x1
mv x21, x1
mv x22, x1
mv x23, x1
mv x24, x1
mv x25, x1
mv x26, x1
mv x27, x1
mv x28, x1
mv x29, x1
mv x30, x1
mv x31, x1
/* stack initilization */
la x2, _stack_start
_start:
.global _start
/* clear BSS */
la x26, _bss_start
la x27, _bss_end
bge x26, x27, zero_loop_end
zero_loop:
sw x0, 0(x26)
addi x26, x26, 4
ble x26, x27, zero_loop
zero_loop_end:
main_entry:
/* jump to main program entry point (argc = argv = 0) */
addi x10, x0, 0
addi x11, x0, 0
jal x1, main
/* ====================== [ exceptions & interrupts ] =================== */
/* This section has to be down here, since we have to disable rvc for it */
.section .vectors, "ax"
.option norvc;
// exception handler
.org 0x00
jal x0, exception_handler
/* use the same default handler for all interrupts */
// software interrupt handler
.org 0x0c
jal x0, default_irq_handler
// timer interrupt handler
.org 0x1c
jal x0, default_irq_handler
// external interrupt handler
.org 0x2c
jal x0, default_irq_handler
// fast interrupts 0 - 14
.org 0x40
.rept 14
nop
.endr
jal x0, default_irq_handler
// non-maskable interrupt handler
.org 0x7c
jal x0, default_irq_handler
// reset vector
.org 0x80
jal x0, reset_handler