diff options
Diffstat (limited to '')
| -rw-r--r-- | examples/device_tree.pack | 159 |
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 |
