Print cause during exception handling
[cascardo/blix.git] / blix.S
1 .global _start
2 _start:
3         li a1, 2
4         csrs sstatus, a1
5         la a1, _vec
6         csrw stvec, a1
7         li a7, 1
8         la a1, _hello
9         jal puts
10         csrr a2, stvec
11         jal putl
12 halt:
13         j halt
14
15 putl:
16         andi a0, a2, 0xf
17         addi a0, a0, 0x30
18         slti a1, a0, 0x3A
19         bne a1, zero, _next
20         addi a0, a0, 7
21 _next:
22         ecall
23         srli a2, a2, 4
24         beq a2, zero, exit2
25         j putl
26 exit2:
27         li a0, 0xa
28         ecall
29         ret
30
31 puts:
32         lb a0, (a1)
33         beq a0, zero, exit
34         ecall
35         addi a1, a1, 1
36         j puts
37 exit:
38         ret
39
40 _hello:
41 .ascii "Hello, world!\n"
42 .byte 0
43
44 .align 8
45 _vec:
46         li a7, 1
47         la a1, _exception
48         jal puts
49         csrr a2, scause
50         call putl
51 loop2:
52         j loop2
53
54 _exception:
55 .ascii "exception\n"
56 .byte 0