aboutsummaryrefslogtreecommitdiffstats
path: root/examples/device_tree.survey
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2021-11-06 17:39:08 +0000
committers-ol <s+removethis@s-ol.nu>2021-11-06 17:39:08 +0000
commit4853cb44e09303dd42b917fcdb56d00ccb3b2ef0 (patch)
treea1cd54c7d4375968876632ea2e01063219e1af2e /examples/device_tree.survey
parentnew elf generator w/ symbol output (diff)
downloadsubv-hardware.tar.gz
subv-hardware.zip
Diffstat (limited to 'examples/device_tree.survey')
-rw-r--r--examples/device_tree.survey152
1 files changed, 152 insertions, 0 deletions
diff --git a/examples/device_tree.survey b/examples/device_tree.survey
new file mode 100644
index 0000000..7bee7df
--- /dev/null
+++ b/examples/device_tree.survey
@@ -0,0 +1,152 @@
+== code 0x80400000
+# main:
+# print device tree info.
+# OpenSBI calls us with a1 set to the start of the DTB
+# load 0x10000000 (UART0) into a0
+37/u a/rd 10000/imm20
+
+13/i 15/rd 0/funct3 b/rs 0/imm12
+
+# check magic == 0xd00dfeed
+37/u 6/rd edfe1/imm20
+13/i 6/rd 0/funct3 6/rs dd0/imm12
+3/i 5/rd 2/funct3 15/rs 0/imm12
+63/b 1/funct3 5/rs1 6/rs2 38/imm13
+
+37/u b/rd 80500/imm20
+13/i b/rd 0/funct3 b/rs 14/imm12
+6f/j 1/rd 88/imm21
+
+3/i b/rd 2/funct3 15/rs 4/imm12
+6f/j 1/rd 34/imm21
+6f/j 1/rd a0/imm21
+6f/j 1/rd 60/imm21
+
+# exit:
+# system reset (via SBI extension SRST)
+# a7 = ext id, a6 = fid, a0 = 0, a1 = 0
+37/u 11/rd 53525/imm20
+13/i 11/rd 0/funct3 11/rs 354/imm12
+33/r 10/rd 0/funct3 0/rs1 0/rs2 0/funct7
+33/r a/rd 0/funct3 0/rs1 0/rs2 0/funct7
+33/r b/rd 0/funct3 0/rs1 0/rs2 0/funct7
+# ECALL
+73/i 0/rd 0/funct3 0/rs 0/imm12
+
+# err_magic:
+37/u b/rd 80500/imm20
+13/i b/rd 0/funct3 b/rs 0/imm12
+6f/j 1/rd 54/imm21
+6f/j 0/rd -24/imm21
+
+# bswapw:
+# byte-order-swap word in a1
+# srli a1, a0, 8
+# lui a2, 16
+# addi a2, a2, -256
+# and a1, a1, a2
+13/i 5/rd 5/funct3 b/rs 8/imm12
+37/u 6/rd 16/imm20
+13/i 6/rd 0/funct3 6/rs -100/imm12
+33/r 5/rd 7/funct3 5/rs1 6/rs2 0/funct7
+# srli a2, a0, 24
+# or a1, a1, a2
+13/i 6/rd 5/funct3 b/rs 18/imm12
+33/r 5/rd 6/funct3 5/rs1 6/rs2 0/funct7
+# slli a2, a0, 8
+# lui a3, 4080
+# and a2, a2, a3
+13/i 6/rd 1/funct3 b/rs 8/imm12
+37/u 7/rd ff0/imm20
+33/r 6/rd 7/funct3 6/rs1 7/rs2 0/funct7
+# slli a0, a0, 24
+# or a0, a0, a2
+# or a0, a0, a1
+13/i b/rd 1/funct3 b/rs 18/imm12
+33/r b/rd 6/funct3 b/rs1 6/rs2 0/funct7
+33/r b/rd 6/funct3 b/rs1 5/rs2 0/funct7
+# ret
+67/i 0/rd 0/funct3 1/rs 0/imm12
+
+# printnl:
+13/i 6/rd 0/funct3 0/rs a/imm12
+# printnl:spin:
+# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
+3/i 7/rd 4/funct3 a/rs 5/imm12
+13/i 7/rd 7/funct3 7/rs 20/imm12
+63/b 0/funct3 7/rs1 0/rs2 -8/imm13
+# print char
+23/s 2/funct3 a/rs1 0/imm12 6/rs2
+# return
+67/i 0/rd 0/funct3 1/rs 0/imm12
+
+# print:
+# print:loop:
+# load unsigned byte at a1
+3/i 6/rd 4/funct3 b/rs 0/imm12
+# break loop if zero
+63/b 0/funct3 6/rs1 0/rs2 1c/imm13
+# print:spin:
+# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
+3/i 7/rd 4/funct3 a/rs 5/imm12
+13/i 7/rd 7/funct3 7/rs 20/imm12
+63/b 0/funct3 7/rs1 0/rs2 -8/imm13
+# print char
+23/s 2/funct3 a/rs1 0/imm12 6/rs2
+# increment a1
+13/i b/rd 0/funct3 b/rs 1/imm12
+# jump back up
+6f/j 0/rd -1c/imm21
+# print:break:
+# return
+67/i 0/rd 0/funct3 1/rs 0/imm12
+
+# print_hex_word:
+13/i 8/rd 0/funct3 b/rs 0/imm12
+13/i 9/rd 0/funct3 0/rs 1c/imm12
+13/i 12/rd 0/funct3 1/rs 0/imm12
+# print_hex_word:loop:
+# shift
+33/r b/rd 5/funct3 8/rs1 9/rs2 0/funct7
+6f/j 1/rd 14/imm21
+
+# break if last shift
+63/b 0/funct3 9/rs1 0/rs2 c/imm13
+
+# subtract shift count, loop
+13/i 9/rd 0/funct3 9/rs -4/imm12
+6f/j 0/rd -10/imm21
+# print_hex_word:break:
+# return
+67/i 0/rd 0/funct3 12/rs 0/imm12
+
+# print_hex_dgt:
+# a1 = a1 & 0xf
+13/i b/rd 7/funct3 b/rs f/imm12
+# t1 = 0x40
+13/i 6/rd 0/funct3 0/rs 40/imm12
+
+# add 0x30 (ascii '0') / 0x61 (ascii 'a')
+13/i b/rd 0/funct3 b/rs 30/imm12
+63/b 4/funct3 b/rs1 6/rs2 8/imm13
+13/i b/rd 0/funct3 b/rs 27/imm12
+
+# print_hex_dgt:spin:
+# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
+3/i 7/rd 4/funct3 a/rs 5/imm12
+13/i 7/rd 7/funct3 7/rs 20/imm12
+63/b 0/funct3 7/rs1 0/rs2 -8/imm13
+
+# print char
+23/s 2/funct3 a/rs1 0/imm12 b/rs2
+
+# return
+67/i 0/rd 0/funct3 1/rs 0/imm12
+
+== data 0x80500000
+# E_MAGIC:
+# "Invalid DTB magic!\n\0"
+49/8 6e/8 76/8 61/8 6c/8 69/8 64/8 20/8 44/8 54/8 42/8 20/8 6d/8 61/8 67/8 69/8 63/8 21/8 a/8 0/8
+# S_TOTALSZ:
+54/8 6f/8 74/8 61/8 6c/8 20/8 53/8 69/8 7a/8 65/8 3a/8 20/8 0/8
+