aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2021-07-10 13:57:54 +0000
committers-ol <s+removethis@s-ol.nu>2021-07-10 13:57:54 +0000
commita7f7cdd29fe625153d12adfbbdac4ffaf93390a3 (patch)
tree2dd148bb65fccbccc855dd6359f540f07a1f9943 /examples
parentexamples: exit via SBI (diff)
downloadsubv-a7f7cdd29fe625153d12adfbbdac4ffaf93390a3.tar.gz
subv-a7f7cdd29fe625153d12adfbbdac4ffaf93390a3.zip
fix ask_name STDIO
Diffstat (limited to 'examples')
-rw-r--r--examples/ask_name.subv68
1 files changed, 18 insertions, 50 deletions
diff --git a/examples/ask_name.subv b/examples/ask_name.subv
index dfd5a7a..4be18eb 100644
--- a/examples/ask_name.subv
+++ b/examples/ask_name.subv
@@ -7,7 +7,7 @@
# $ ./subv.sh examples/ask_.subv >examples/ask_.elf
# $ cat 2>dev/null | ./qemu.sh examples/ask_.elf
# What's your name?
-# > Sol
+# > Sol
# Hello Sol, nice to meet you!
== code 0x80400000
@@ -16,13 +16,16 @@
# 63/branch 1/subop/!= 5/rs/t0 0/rs/x0 0/off13
main:
- 6f/jal 1/rd/ra init/off21
-
# print HELLO_WHATSURNAME
37/lui a/rd/a0 HELLO_WHATSURNAME/imm20hi
13/opi a/rd/a0 0/subop/add a/rs/a0 HELLO_WHATSURNAME/imm12lo
6f/jal 1/rd/ra print/off21
+ # read in Name
+ 37/lui a/rd/a0 PROMPT/imm20hi
+ 13/opi a/rd/a0 0/subop/add a/rs/a0 PROMPT/imm12lo
+ 6f/jal 1/rd/ra print/off21
+
37/lui a/rd/a0 Name/imm20hi
13/opi a/rd/a0 0/subop/add a/rs/a0 Name/imm12lo
6f/jal 1/rd/ra read/off21
@@ -53,48 +56,6 @@ exit:
# ECALL
73/system 0/subop/priv 0/funct12/ecall
-init:
-# initialize UART0
- # load 0x10000000 (UART0) into t0
- 37/lui 5/rd/t0 10000/imm20
-
- # disable interrupts
- 23/store 0/width/b 5/rs/t0 1/off12 0/rs/x0
-
- # enable DLAB
- 13/opi 6/rd/t1 0/subop/add 0/rs/x0 80/imm12
- 23/store 0/width/b 5/rs/t0 3/off12 6/rs/t1
-
- # max speed = 38400bps
- 13/opi 6/rd/t1 0/subop/add 0/rs/x0 3/imm12
- 23/store 0/width/b 5/rs/t0 0/off12 6/rs/t1
- 23/store 0/width/b 5/rs/t0 1/off12 0/rs/x0
-
- # disable DLAB
- 13/opi 6/rd/t1 0/subop/add 0/rs/x0 3/imm12
- 23/store 0/width/b 5/rs/t0 3/off12 6/rs/t1
-
- # enable fifo, clear, watermark=14b
- 13/opi 6/rd/t1 0/subop/add 0/rs/x0 c7/imm12
- 23/store 0/width/b 5/rs/t0 2/off12 6/rs/t1
-
- # set dtr, srs, aux2
- 13/opi 6/rd/t1 0/subop/add 0/rs/x0 b/imm12
- 23/store 0/width/b 5/rs/t0 4/off12 6/rs/t1
-
- 13/opi 6/rd/t1 0/subop/add 0/rs/x0 1/imm12
- 23/store 0/width/b 5/rs/t0 1/off12 6/rs/t1
-
- # return
- 67/jalr 0/subop 0/rd/x0 1/rs/ra 0/off12
-
-old:
- # set "data terminal ready" and "request to send" bits in MCR
- 13/opi 6/rd/t1 0/subop/add 0/rs/x0 3/imm12
- 23/store 0/width/b 5/rs/t0 4/off12 6/rs/t1
- # return
- 67/jalr 0/subop 0/rd/x0 1/rs/ra 0/off12
-
print:
# print a C-string from a0
# load 0x10000000 (UART0) into t0
@@ -123,8 +84,8 @@ read:
# read a C-string into a0
# load 0x10000000 (UART0) into t0
37/lui 5/rd/t0 10000/imm20
- # load 0x0a (\n) into t1
- 13/opi 6/rd/t1 0/subop/add 0/rs/x0 0a/imm12
+ # load 0x0d (\r) into t1
+ 13/opi 6/rd/t1 0/subop/add 0/rs/x0 0d/imm12
read:loop:
# spin if FIFO is empty (data_ready = UART+5 & 1)
@@ -135,13 +96,17 @@ read:loop:
03/load 7/rd/t2 4/width/bu 5/rs/t0 0/imm12
# break loop if newline (t2 == t1)
63/branch 0/subop/== 7/rs/t2 6/rs/t1 read:break/off13
- # store char from t1 at [a0]
- 23/store 0/width/b a/rs/a0 7/rs/t2 0/off12
+ # echo and store char from t2
+ 23/store 0/width/b 5/rs/t0 0/off12 7/rs/t2
+ 23/store 0/width/b a/rs/a0 0/off12 7/rs/t2
# increment a0
13/opi a/rd/a0 0/subop/add a/rs/a0 1/imm12
# jump back up
6f/jal 0/rd/x0 read:loop/off21
read:break:
+ # echo \n
+ 13/opi 7/rd/t2 0/subop/add 0/rs/x0 0a/imm12
+ 23/store 0/width/b 5/rs/t0 0/off12 7/rs/t2
# return
67/jalr 0/rd/x0 0/subop 1/rs/ra 0/off12
@@ -156,5 +121,8 @@ HELLO_:
NICETOMEETU:
# ", nice to meet you!\n\0"
2c/8 20/8 6e/8 69/8 63/8 65/8 20/8 74/8 6f/8 20/8 6d/8 65/8 65/8 74/8 20/8 79/8 6f/8 75/8 21/8 0a/8 00/8
+PROMPT:
+ # "> "
+ 3e/8 20/8 00/8
Name:
- 00/8
+ 0/256