aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2021-07-06 09:48:57 +0000
committers-ol <s+removethis@s-ol.nu>2021-07-06 10:04:36 +0000
commit729a7eb7ae07b3842d963dfbe49bb8d656c5cd28 (patch)
tree3e3e3f8d54dc30bbaebdbf5845f169c2f324f586
parentfix and finish new pipeline (diff)
downloadsubv-729a7eb7ae07b3842d963dfbe49bb8d656c5cd28.tar.gz
subv-729a7eb7ae07b3842d963dfbe49bb8d656c5cd28.zip
good helloworld example
-rw-r--r--test.subv40
1 files changed, 26 insertions, 14 deletions
diff --git a/test.subv b/test.subv
index aa7d010..60d9065 100644
--- a/test.subv
+++ b/test.subv
@@ -1,31 +1,43 @@
== code 0x80000000
-main:
- # load 0x10010000 (UART0) into t0
- 37/lui 5/rd/t0 0x10010/imm20
+ # load mhartid CSR into t0, trap all but first Hart
+ 73/system 5/rd/t0 2/funct3/csrrs 0/rs/x0 f14/imm12/mhartid
+ 63/branch 1/subop/!= 5/rs/t0 0/rs/x0 0/off13
+main:
# x4 = &message
# . load high bits
- 37/lui 4/rd/x4 Message/imm
+ 37/lui a/rd/a0 Message/imm20hi
# . add low bits
- 13/opi 0/subop/add 4/rd/x4 4/rs/x4 Message/imm
+ 13/opi 0/subop/add 4/rd/x4 a/rs/a0 Message/imm12lo
+ # call print
+ 6f/jal 1/rd/ra print/off21
+loop:
+ # infinite loop
+ 6f/jal 0/rd/x0 loop/off21
+
+print:
+ # load 0x10010000 (UART0) into t0
+ 37/lui 5/rd/t0 0x10010/imm20
print:loop:
# load unsigned byte at x4
- 03/load 4/subop/lbu 6/rd/t1 4/rs/x4 0/imm12
+ 03/load 4/subop/byte 6/rd/t1 a/rs/a0 0/imm12
# break loop if zero
63/branch 0/subop/== 6/rs/t1 0/rs/x0 print:break/off13
+print:spin:
+ # spin if FIFO is full
+ 03/load 2/subop/word 7/rd/t2 5/rs/t0 0/imm12
+ 63/branch 4/subop/< 7/rs/t2 0/rs/x0 print:spin/off13
# print char
- 23/store 2/subop/word 5/rs/t0 6/rs/t1 0/off12
+ 23/store 2/width/word 5/rs/t0 6/rs/t1 0/off12
# increment x4
- 13/opi 0/subop/add 4/rd/x4 4/rs/x4 1/imm12
+ 13/opi 0/subop/add a/rd/a0 a/rs/a0 1/imm12
# jump back up
6f/jal 0/rd/x0 print:loop/off21
print:break:
+ # return
+ 67/jalr 0/subop 0/rd/x0 1/rs/ra 0/off12
-loop:
- # infinite loop
- 6f/jal 0/rd/x0 loop/off21
-
-== data 0x80001000
+== data 0x80500000
Message:
- # "Hello World\n\0"
+ # "Hello World!\n\0"
48/8 65/8 6c/8 6c/8 6f/8 20/8 77/8 6f/8 72/8 6c/8 64/8 21/8 0a/8 00/8