|
|
- # .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
-
|