summaryrefslogtreecommitdiff
path: root/assembly/meseconsio/meseconsio.S
blob: f2a441f83c170448f09d1d0c4dba36034f80e4a4 (plain)
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