1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
li s0,0xffff0000
csrw 0x801,s0 # Set MMIO base address
li t0,0x7 # Pin D input, others output
sb t0,0(s0) # Write to mesecons I/O direction register
start: lr.w x0,0(s0) # Establish a reservation set on the mesecons I/O region
wrs.nto # Wait for it to become invalid
lb t0,1(s0) # Read the mesecons I/O data
andi t1,t0,0x8 # Is pin D on?
beqz t1,start # If not, go wait again
li t0,1 # only A on
sb t0,1(s0)
pause
pause
pause
li t0,2 # only B on
sb t0,1(s0)
pause
pause
pause
li t0,4 # only C on
sb t0,1(s0)
pause
pause
pause
li t0,0 # all off
sb t0,1(s0)
j start
|