aboutsummaryrefslogtreecommitdiffstats
path: root/examples/device_tree.pack
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.pack
parentnew elf generator w/ symbol output (diff)
downloadsubv-hardware.tar.gz
subv-hardware.zip
Diffstat (limited to '')
-rw-r--r--examples/device_tree.pack159
1 files changed, 159 insertions, 0 deletions
diff --git a/examples/device_tree.pack b/examples/device_tree.pack
new file mode 100644
index 0000000..0d54554
--- /dev/null
+++ b/examples/device_tree.pack
@@ -0,0 +1,159 @@
+== 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 05 00 10
+
+93 8a 05 00
+
+# check magic == 0xd00dfeed
+37 13 fe ed
+13 03 03 dd
+83 a2 0a 00
+63 9c 62 02
+
+b7 05 50 80
+93 85 45 01
+ef 00 80 08
+
+83 a5 4a 00
+ef 00 40 03
+ef 00 00 0a
+ef 00 00 06
+
+# exit:
+# system reset (via SBI extension SRST)
+# a7 = ext id, a6 = fid, a0 = 0, a1 = 0
+b7 58 52 53
+93 88 48 35
+33 08 00 00
+33 05 00 00
+b3 05 00 00
+# ECALL
+73 00 00 00
+
+# err_magic:
+b7 05 50 80
+93 85 05 00
+ef 00 40 05
+6f f0 df fd
+
+# bswapw:
+# byte-order-swap word in a1
+# srli a1, a0, 8
+# lui a2, 16
+# addi a2, a2, -256
+# and a1, a1, a2
+93 d2 85 00
+37 63 01 00
+13 03 03 f0
+b3 f2 62 00
+# srli a2, a0, 24
+# or a1, a1, a2
+13 d3 85 01
+b3 e2 62 00
+# slli a2, a0, 8
+# lui a3, 4080
+# and a2, a2, a3
+13 93 85 00
+b7 03 ff 00
+33 73 73 00
+# slli a0, a0, 24
+# or a0, a0, a2
+# or a0, a0, a1
+93 95 85 01
+b3 e5 65 00
+b3 e5 55 00
+# ret
+67 80 00 00
+
+# printnl:
+13 03 a0 00
+# printnl:spin:
+# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
+83 43 55 00
+93 f3 03 02
+e3 8c 03 fe
+# print char
+23 20 65 00
+# return
+67 80 00 00
+
+# print:
+# print:loop:
+# load unsigned byte at a1
+03 c3 05 00
+# break loop if zero
+63 0e 03 00
+# print:spin:
+# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
+83 43 55 00
+93 f3 03 02
+e3 8c 03 fe
+# print char
+23 20 65 00
+# increment a1
+93 85 15 00
+# jump back up
+6f f0 5f fe
+# print:break:
+# return
+67 80 00 00
+
+# print_hex_word:
+13 84 05 00
+93 04 c0 01
+13 89 00 00
+# print_hex_word:loop:
+# shift
+b3 55 94 00
+ef 00 40 01
+
+# break if last shift
+63 86 04 00
+
+# subtract shift count, loop
+93 84 c4 ff
+6f f0 1f ff
+# print_hex_word:break:
+# return
+67 00 09 00
+
+# print_hex_dgt:
+# a1 = a1 & 0xf
+93 f5 f5 00
+# t1 = 0x40
+13 03 00 04
+
+# add 0x30 (ascii '0') / 0x61 (ascii 'a')
+93 85 05 03
+63 c4 65 00
+93 85 75 02
+
+# print_hex_dgt:spin:
+# spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
+83 43 55 00
+93 f3 03 02
+e3 8c 03 fe
+
+# print char
+23 20 b5 00
+
+# return
+67 80 00 00
+
+== data 0x80500000
+# E_MAGIC:
+# "Invalid DTB magic!\n\0"
+49 6e 76 61
+6c 69 64 20
+44 54 42 20
+6d 61 67 69
+63 21 0a 00
+# S_TOTALSZ:
+54 6f 74 61
+6c 20 53 69
+7a 65 3a 20
+
+00