A small code running as S-mode on top of an SEE, using the SBI to print to the
console. It may also be slightly changed to bump into an illegal instruction in
order to test exception handling.
--- /dev/null
+all: blix.bin
+
+blix: blix.S
+ riscv64-linux-gnu-gcc -o blix blix.S -nostdinc -nostdlib -march=rv64imafd
+
+blix.bin: blix
+ riscv64-linux-gnu-objcopy --only-section=.text -O binary blix blix.bin
+
+clean:
+ rm -f blix.bin blix
+
+run: blix.bin
+ qemu-system-riscv64 -M virt -kernel ../opensbi/build/platform/qemu/virt/firmware/fw_jump.elf -serial stdio -device loader,file=blix.bin,addr=0x80200000 -d in_asm -D log
--- /dev/null
+.global _start
+_start:
+ li a1, 2
+ csrs sstatus, a1
+ la a1, _vec
+ csrw stvec, a1
+ li a7, 1
+ la a1, _hello
+ jal puts
+ csrr a2, stvec
+ jal putl
+halt:
+ j halt
+
+putl:
+ andi a0, a2, 0xf
+ addi a0, a0, 0x30
+ slti a1, a0, 0x3A
+ bne a1, zero, _next
+ addi a0, a0, 7
+_next:
+ ecall
+ srli a2, a2, 4
+ beq a2, zero, exit2
+ j putl
+exit2:
+ li a0, 0xa
+ ecall
+ ret
+
+puts:
+ lb a0, (a1)
+ beq a0, zero, exit
+ ecall
+ addi a1, a1, 1
+ j puts
+exit:
+ ret
+
+_hello:
+.ascii "Hello, world!\n"
+.byte 0
+
+.align 8
+_vec:
+ li a7, 1
+ la a1, _exception
+ jal puts
+loop2:
+ j loop2
+
+_exception:
+.ascii "exception\n"
+.byte 0