aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2021-07-04 19:00:51 +0000
committers-ol <s+removethis@s-ol.nu>2021-07-04 19:00:51 +0000
commitd171ee9565a890ba77ab36af8e99fa7c39037bbf (patch)
treeb56bf966dfd56d13c428066e3902b4d12cc629f6 /README.md
parentnew test case for survey.py (diff)
downloadsubv-d171ee9565a890ba77ab36af8e99fa7c39037bbf.tar.gz
subv-d171ee9565a890ba77ab36af8e99fa7c39037bbf.zip
add validate layer
Diffstat (limited to 'README.md')
-rw-r--r--README.md65
1 files changed, 50 insertions, 15 deletions
diff --git a/README.md b/README.md
index 55e5375..cd47df9 100644
--- a/README.md
+++ b/README.md
@@ -33,15 +33,17 @@ back to front:
- `elf.py`: takes hex bytes and segment headers, outputs an ELF file
- `pack.py`: packs bitfields (`3/3 1/1 f/4`) into hex bytes (`fb`)
+- `format.py`: bit-packs ops into ISA format
- `survey.py`: replaces label references by their addresses
-- `format.py`: checks op-arguments and chops and orders arguments into ISA formats
+- `validate.py`: checks op-arguments and puts them into canonical order
and now front to back with a little example:
- $ ./format.py <ex.subv >ex.format
- $ ./survey.py <ex.format >ex.survey
- $ ./pack.py <ex.survey >ex.pack
- $ ./elf.py <ex.pack >ex.elf
+ $ ./validate.py <ex.subv >ex.valid
+ $ ./survey.py <ex.valid >ex.survey
+ $ ./format.py <ex.survey >ex.format
+ $ ./pack.py <ex.format >ex.pack
+ $ ./elf.py <ex.pack >ex.elf
$ ./qemu.sh ex.elf
`ex.subv`: hand-writable.
@@ -63,47 +65,80 @@ and now front to back with a little example:
# jump back up to the top
6f/jal 0/rd/x0 main/off21
-`ex.format`: arguments sliced and diced and put into the ISA order.
+`ex.format`: mnemonics validated and discarded
== code 0x80000000
# repeatedly print "Hi\n"
main:
# load 0x10010000 (UART0) into t0
- 37/7 05/5 10010/20
+ 37/u 05/rd 10010/imm20
# store 0x48 (H) in UART0+0
- 13/7 06/5 00/3 00/5 48/12
- 23/7 00/5 02/3 05/5 06/5 00/7
+ 13/i 0/subop 6/rd 0/rs 48/imm12
+ 23/s 2/subop 5/rs2 6/rs1 0/off12
# store 0x69 (i) in UART0+0
- 13/7 06/5 00/3 00/5 69/12
- 23/7 00/5 02/3 05/5 06/5 00/7
+ 13/i 0/subop 6/rd 0/rs 69/imm12
+ 23/s 2/subop 5/rs2 6/rs1 0/off12
# store 0x0a (\n) in UART0+0
- 13/7 06/5 00/3 00/5 0a/12
- 23/7 00/5 02/3 05/5 06/5 00/7
+ 13/i 0/subop 6/rd 0/rs 0a/imm12
+ 23/s 2/subop 5/rs2 6/rs1 0/off12
+ # jump back up to the top
+ 6f/j 0/4d main/off21
+
+`ex.survey`: references resolved and labels removed
+
+ == code 0x80000000
+ # repeatedly print "Hi\n"
+ # main:
+ # load 0x10010000 (UART0) into t0
+ 37/u 05/rd 10010/imm20
+ # store 0x48 (H) in UART0+0
+ 13/i 0/subop 6/rd 0/rs 48/imm12
+ 23/s 2/subop 5/rs2 6/rs1 0/off12
+ # store 0x69 (i) in UART0+0
+ 13/i 0/subop 6/rd 0/rs 69/imm12
+ 23/s 2/subop 5/rs2 6/rs1 0/off12
+ # store 0x0a (\n) in UART0+0
+ 13/i 0/subop 6/rd 0/rs 0a/imm12
+ 23/s 2/subop 5/rs2 6/rs1 0/off12
# jump back up to the top
- 6f/7 00/5 main/8/off21>>12 main/1/off21>>11 main/10/off21>>1 main/1/off21>>20
+ 6f/j 0/4d fffe4/off21
-`ex.survey`: labels resolved, ready to be packed into hex format
+`ex.format`: arguments sliced and diced and put into the ISA order.
== code 0x80000000
+ # repeatedly print "Hi\n"
+ # main:
+ # load 0x10010000 (UART0) into t0
37/7 05/5 10010/20
+ # store 0x48 (H) in UART0+0
13/7 06/5 00/3 00/5 48/12
23/7 00/5 02/3 05/5 06/5 00/7
+ # store 0x69 (i) in UART0+0
13/7 06/5 00/3 00/5 69/12
23/7 00/5 02/3 05/5 06/5 00/7
+ # store 0x0a (\n) in UART0+0
13/7 06/5 00/3 00/5 0a/12
23/7 00/5 02/3 05/5 06/5 00/7
+ # jump back up to the top
6f/7 00/5 ff/8 01/1 3f2/10 01/1
`ex.pack`: fully packed, ready to run bare-metal
== code 0x80000000
+ # repeatedly print "Hi\n"
+ # main:
+ # load 0x10010000 (UART0) into t0
b7 02 01 10
+ # store 0x48 (H) in UART0+0
13 03 80 04
23 a0 62 00
+ # store 0x69 (i) in UART0+0
13 03 90 06
23 a0 62 00
+ # store 0x0a (\n) in UART0+0
13 03 a0 00
23 a0 62 00
+ # jump back up to the top
6f f0 5f fe
`ex.elf`: binary file for use with `qemu` (see next section).