| 
									
										
										
										
											2019-10-12 00:00:36 +08:00
										 |  |  | .global main
 | 
					
						
							|  |  |  | .global isr
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .section .text.start | 
					
						
							|  |  |  | .global _start
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _start: | 
					
						
							|  |  |  |   j crt_init | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .section .text | 
					
						
							|  |  |  | .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 isr | 
					
						
							|  |  |  |   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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-12 20:21:06 -08:00
										 |  |  | .text | 
					
						
							| 
									
										
										
										
											2019-10-12 00:00:36 +08:00
										 |  |  | crt_init: | 
					
						
							| 
									
										
										
										
											2019-10-14 11:30:05 +08:00
										 |  |  |   la sp, _estack - 4 | 
					
						
							| 
									
										
										
										
											2019-10-12 00:00:36 +08:00
										 |  |  |   la a0, trap_entry | 
					
						
							|  |  |  |   csrw mtvec, a0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bss_init: | 
					
						
							| 
									
										
										
										
											2019-10-14 11:30:05 +08:00
										 |  |  |   la a0, _sbss | 
					
						
							|  |  |  |   la a1, _ebss + 4 | 
					
						
							| 
									
										
										
										
											2019-10-12 00:00:36 +08:00
										 |  |  | bss_loop: | 
					
						
							|  |  |  |   beq a0,a1,bss_done | 
					
						
							|  |  |  |   sw zero,0(a0) | 
					
						
							|  |  |  |   add a0,a0,4 | 
					
						
							|  |  |  |   j bss_loop | 
					
						
							|  |  |  | bss_done: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Load DATA */ | 
					
						
							| 
									
										
										
										
											2019-10-14 11:30:05 +08:00
										 |  |  |   la t0, _etext | 
					
						
							|  |  |  |   la t1, _srelocate | 
					
						
							|  |  |  |   la t2, _erelocate + 4 | 
					
						
							| 
									
										
										
										
											2019-10-12 00:00:36 +08:00
										 |  |  | 3: | 
					
						
							|  |  |  |   lw t3, 0(t0) | 
					
						
							|  |  |  |   sw t3, 0(t1) | 
					
						
							| 
									
										
										
										
											2019-10-14 11:30:05 +08:00
										 |  |  |   /* _edata is aligned to 4 bytes. Use word-xfers. */ | 
					
						
							| 
									
										
										
										
											2019-10-12 00:00:36 +08:00
										 |  |  |   addi t0, t0, 4 | 
					
						
							|  |  |  |   addi t1, t1, 4 | 
					
						
							|  |  |  |   bltu t1, t2, 3b | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   li a0, 0x880  //880 enable timer + external interrupt sources (until mstatus.MIE is set, they will never trigger an interrupt) | 
					
						
							|  |  |  |   csrw mie,a0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   call main | 
					
						
							| 
									
										
										
										
											2019-11-12 20:21:06 -08:00
										 |  |  | infinite_loop: | 
					
						
							|  |  |  |   j infinite_loop |