Use the timer interrupt to repeatedly print.
[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         li a1, 0x20
11         csrs sie, a1
12         csrr a2, time
13         lui a0, 0x800
14         add a0, a0, a2
15         li a7, 0
16         ecall
17 halt:
18         j halt
19
20 putl:
21         andi a0, a2, 0xf
22         addi a0, a0, 0x30
23         slti a1, a0, 0x3A
24         bne a1, zero, _next
25         addi a0, a0, 7
26 _next:
27         ecall
28         srli a2, a2, 4
29         beq a2, zero, exit2
30         j putl
31 exit2:
32         li a0, 0xa
33         ecall
34         ret
35
36 puts:
37         lb a0, (a1)
38         beq a0, zero, exit
39         ecall
40         addi a1, a1, 1
41         j puts
42 exit:
43         ret
44
45 _hello:
46 .ascii "Hello, world!\n"
47 .byte 0
48
49 .align 8
50 _vec:
51         li a7, 1
52         la a1, _hello
53         jal puts
54         li a7, 0
55         csrr a2, time
56         lui a0, 0x800
57         add a0, a0, a2
58         ecall
59         sret
60 loop2:
61         j loop2
62
63 _exception:
64 .ascii "exception\n"
65 .byte 0