aboutsummaryrefslogtreecommitdiffstats
path: root/picosoc/start.s
diff options
context:
space:
mode:
Diffstat (limited to 'picosoc/start.s')
-rw-r--r--picosoc/start.s52
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