diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-05-28 15:34:15 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2020-05-28 15:34:15 +0000 |
| commit | 82d3ddfc5c0bf2ba77c04d65630841f373cce709 (patch) | |
| tree | 6f81eaa122d04bb90e2c6b849c4cc0b0a32e0677 | |
| parent | survey, pack (diff) | |
| download | subv-82d3ddfc5c0bf2ba77c04d65630841f373cce709.tar.gz subv-82d3ddfc5c0bf2ba77c04d65630841f373cce709.zip | |
Add ex.*
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | README.md | 67 | ||||
| -rw-r--r-- | ex.elf | bin | 0 -> 4128 bytes | |||
| -rw-r--r-- | ex.format | 10 | ||||
| -rw-r--r-- | ex.pack | 9 | ||||
| -rw-r--r-- | ex.subv | 16 | ||||
| -rw-r--r-- | ex.survey | 9 |
7 files changed, 111 insertions, 1 deletions
@@ -2,3 +2,4 @@ *.bin *.pyc __pycache__ +!ex.* @@ -16,7 +16,72 @@ back to front: - `survey.py`: replaces label references by their addresses - `format.py`: checks op-arguments and chops and orders arguments into ISA formats -and now back to front with a little example: +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 + $ ./qemu.sh ex.elf + +`ex.subv`: hand-writable. + + == code 0x80000000 + # repeatedly print "Hi\\n" + main: + # load 0x10010000 (UART0) into t0 + 37/lui 5/rd/t0 0x10010/imm20 + # store 0x48 (H) in UART0+0 + 13/opi 0/subop/add 6/rd/t1 0/rs/x0 48/imm12 + 23/store 2/subop/word 5/rs/t0 6/rs/t1 0/off12 + # store 0x69 (i) in UART0+0 + 13/opi 0/subop/add 6/rd/t1 0/rs/x0 69/imm12 + 23/store 2/subop/word 5/rs/t0 6/rs/t1 0/off12 + # store 0x0a (\n) in UART0+0 + 13/opi 0/subop/add 6/rd/t1 0/rs/x0 0a/imm12 + 23/store 2/subop/word 5/rs/t0 6/rs/t1 0/off12 + # 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. + + == code 0x80000000 + main: + 37/7 05/5 10010/20 + 13/7 06/5 00/3 00/5 48/12 + 23/7 00/5 02/3 05/5 06/5 00/7 + 13/7 06/5 00/3 00/5 69/12 + 23/7 00/5 02/3 05/5 06/5 00/7 + 13/7 06/5 00/3 00/5 0a/12 + 23/7 00/5 02/3 05/5 06/5 00/7 + 6f/7 00/5 main/8/off21>>12 main/1/off21>>11 main/10/off21>>1 main/1/off21>>20 + + +`ex.survey`: labels resolved, ready to be packed into hex format + + == code 0x80000000 + 37/7 05/5 10010/20 + 13/7 06/5 00/3 00/5 48/12 + 23/7 00/5 02/3 05/5 06/5 00/7 + 13/7 06/5 00/3 00/5 69/12 + 23/7 00/5 02/3 05/5 06/5 00/7 + 13/7 06/5 00/3 00/5 0a/12 + 23/7 00/5 02/3 05/5 06/5 00/7 + 6f/7 00/5 ff/8 01/1 3f2/10 01/1 + +`ex.pack`: fully packed, ready to run bare-metal + + == code 0x80000000 + b7 02 01 10 + 13 03 80 04 + 23 a0 62 00 + 13 03 90 06 + 23 a0 62 00 + 13 03 a0 00 + 23 a0 62 00 + 6f f0 5f fe + +`ex.elf`: binary file for use with `qemu` (see next section). Debugging --------- Binary files differdiff --git a/ex.format b/ex.format new file mode 100644 index 0000000..b0e818e --- /dev/null +++ b/ex.format @@ -0,0 +1,10 @@ +== code 0x80000000 +main: +37/7 05/5 10010/20 +13/7 06/5 00/3 00/5 48/12 +23/7 00/5 02/3 05/5 06/5 00/7 +13/7 06/5 00/3 00/5 69/12 +23/7 00/5 02/3 05/5 06/5 00/7 +13/7 06/5 00/3 00/5 0a/12 +23/7 00/5 02/3 05/5 06/5 00/7 +6f/7 00/5 main/8/off21>>12 main/1/off21>>11 main/10/off21>>1 main/1/off21>>20 @@ -0,0 +1,9 @@ +== code 0x80000000 +b7 02 01 10 +13 03 80 04 +23 a0 62 00 +13 03 90 06 +23 a0 62 00 +13 03 a0 00 +23 a0 62 00 +6f f0 5f fe @@ -0,0 +1,16 @@ +== code 0x80000000 +# repeatedly print "Hi\n" +main: + # load 0x10010000 (UART0) into t0 + 37/lui 5/rd/t0 0x10010/imm20 + # store 0x48 (H) in UART0+0 + 13/opi 0/subop/add 6/rd/t1 0/rs/x0 48/imm12 + 23/store 2/subop/word 5/rs/t0 6/rs/t1 0/off12 + # store 0x69 (i) in UART0+0 + 13/opi 0/subop/add 6/rd/t1 0/rs/x0 69/imm12 + 23/store 2/subop/word 5/rs/t0 6/rs/t1 0/off12 + # store 0x0a (\n) in UART0+0 + 13/opi 0/subop/add 6/rd/t1 0/rs/x0 0a/imm12 + 23/store 2/subop/word 5/rs/t0 6/rs/t1 0/off12 + # jump back up to the top + 6f/jal 0/rd/x0 main/off21 diff --git a/ex.survey b/ex.survey new file mode 100644 index 0000000..c5f32d8 --- /dev/null +++ b/ex.survey @@ -0,0 +1,9 @@ +== code 0x80000000 +37/7 05/5 10010/20 +13/7 06/5 00/3 00/5 48/12 +23/7 00/5 02/3 05/5 06/5 00/7 +13/7 06/5 00/3 00/5 69/12 +23/7 00/5 02/3 05/5 06/5 00/7 +13/7 06/5 00/3 00/5 0a/12 +23/7 00/5 02/3 05/5 06/5 00/7 +6f/7 00/5 ff/8 01/1 3f2/10 01/1 |
