# .global crtStart
|
|
# .global main
|
|
# .global irqCallback
|
|
|
|
# crtStart:
|
|
# j crtInit
|
|
# nop
|
|
# nop
|
|
# nop
|
|
# nop
|
|
# nop
|
|
# nop
|
|
# nop
|
|
|
|
# .global trap_entry
|
|
# trap_entry:
|
|
# sw x1, - 1*4(sp)
|
|
# sw x5, - 2*4(sp)
|
|
# sw x6, - 3*4(sp)
|
|
# sw x7, - 4*4(sp)
|
|
# sw x10, - 5*4(sp)
|
|
# sw x11, - 6*4(sp)
|
|
# sw x12, - 7*4(sp)
|
|
# sw x13, - 8*4(sp)
|
|
# sw x14, - 9*4(sp)
|
|
# sw x15, -10*4(sp)
|
|
# sw x16, -11*4(sp)
|
|
# sw x17, -12*4(sp)
|
|
# sw x28, -13*4(sp)
|
|
# sw x29, -14*4(sp)
|
|
# sw x30, -15*4(sp)
|
|
# sw x31, -16*4(sp)
|
|
# addi sp,sp,-16*4
|
|
# call irqCallback
|
|
# lw x1 , 15*4(sp)
|
|
# lw x5, 14*4(sp)
|
|
# lw x6, 13*4(sp)
|
|
# lw x7, 12*4(sp)
|
|
# lw x10, 11*4(sp)
|
|
# lw x11, 10*4(sp)
|
|
# lw x12, 9*4(sp)
|
|
# lw x13, 8*4(sp)
|
|
# lw x14, 7*4(sp)
|
|
# lw x15, 6*4(sp)
|
|
# lw x16, 5*4(sp)
|
|
# lw x17, 4*4(sp)
|
|
# lw x28, 3*4(sp)
|
|
# lw x29, 2*4(sp)
|
|
# lw x30, 1*4(sp)
|
|
# lw x31, 0*4(sp)
|
|
# addi sp,sp,16*4
|
|
# mret
|
|
# .text
|
|
|
|
|
|
# crtInit:
|
|
# .option push
|
|
# .option norelax
|
|
# la gp, __global_pointer$
|
|
# .option pop
|
|
# la sp, _stack_start
|
|
|
|
# bss_init:
|
|
# la a0, _bss_start
|
|
# la a1, _bss_end
|
|
# bss_loop:
|
|
# beq a0,a1,bss_done
|
|
# sw zero,0(a0)
|
|
# add a0,a0,4
|
|
# j bss_loop
|
|
# bss_done:
|
|
|
|
# ctors_init:
|
|
# la a0, _ctors_start
|
|
# addi sp,sp,-4
|
|
# ctors_loop:
|
|
# la a1, _ctors_end
|
|
# beq a0,a1,ctors_done
|
|
# lw a3,0(a0)
|
|
# add a0,a0,4
|
|
# sw a0,0(sp)
|
|
# jalr a3
|
|
# lw a0,0(sp)
|
|
# j ctors_loop
|
|
# ctors_done:
|
|
# addi sp,sp,4
|
|
|
|
|
|
# li a0, 0x880 //880 enable timer + external interrupts
|
|
# csrw mie,a0
|
|
# li a0, 0x1808 //1808 enable interrupts
|
|
# csrw mstatus,a0
|
|
|
|
# call main
|
|
# infinitLoop:
|
|
# j infinitLoop
|
|
|