diff options
Diffstat (limited to 'picosoc/start.s')
-rw-r--r-- | picosoc/start.s | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/picosoc/start.s b/picosoc/start.s index 5e43feb..74c5635 100644 --- a/picosoc/start.s +++ b/picosoc/start.s @@ -35,11 +35,55 @@ addi x29, zero, 0 addi x30, zero, 0 addi x31, zero, 0 -# zero initialize scratchpad memory +# Update LEDs +li a0, 0x03000000 +li a1, 1 +sw a1, 0(a0) + +# zero initialize entire scratchpad memory +li a0, 0x00000000 setmemloop: -sw zero, 0(x1) -addi x1, x1, 4 -blt x1, sp, setmemloop +sw a0, 0(a0) +addi a0, a0, 4 +blt a0, sp, setmemloop + +# Update LEDs +li a0, 0x03000000 +li a1, 3 +sw a1, 0(a0) + +# copy data section +la a0, _sidata +la a1, _sdata +la a2, _edata +bge a1, a2, end_init_data +loop_init_data: +lw a3, 0(a0) +sw a3, 0(a1) +addi a0, a0, 4 +addi a1, a1, 4 +blt a1, a2, loop_init_data +end_init_data: + +# Update LEDs +li a0, 0x03000000 +li a1, 7 +sw a1, 0(a0) + +# zero-init bss section +la a0, _sbss +la a1, _ebss +bge a0, a1, end_init_bss +loop_init_bss: +sw zero, 0(a0) +addi a0, a0, 4 +blt a0, a1, loop_init_bss +end_init_bss: + +# Update LEDs +li a0, 0x03000000 +li a1, 15 +sw a1, 0(a0) # call main call main |