86 lines
1.5 KiB
ArmAsm
86 lines
1.5 KiB
ArmAsm
# write RAM code (a sequence of nops followed by ret)
|
|
li x5,0x00000013 # nop
|
|
sw x5,4(x0)
|
|
sw x5,8(x0)
|
|
sw x5,12(x0)
|
|
sw x5,16(x0)
|
|
sw x5,20(x0)
|
|
sw x5,24(x0)
|
|
sw x5,28(x0)
|
|
sw x5,32(x0)
|
|
sw x5,36(x0)
|
|
sw x5,40(x0)
|
|
sw x5,44(x0)
|
|
sw x5,48(x0)
|
|
sw x5,52(x0)
|
|
sw x5,56(x0)
|
|
sw x5,60(x0)
|
|
sw x5,64(x0)
|
|
sw x5,68(x0)
|
|
sw x5,72(x0)
|
|
sw x5,76(x0)
|
|
sw x5,80(x0)
|
|
sw x5,84(x0)
|
|
sw x5,88(x0)
|
|
sw x5,92(x0)
|
|
sw x5,96(x0)
|
|
sw x5,100(x0)
|
|
sw x5,104(x0)
|
|
sw x5,108(x0)
|
|
sw x5,112(x0)
|
|
sw x5,116(x0)
|
|
sw x5,120(x0)
|
|
sw x5,124(x0)
|
|
sw x5,128(x0)
|
|
sw x5,132(x0)
|
|
sw x5,136(x0)
|
|
sw x5,140(x0)
|
|
sw x5,144(x0)
|
|
sw x5,148(x0)
|
|
sw x5,152(x0)
|
|
sw x5,156(x0)
|
|
sw x5,160(x0)
|
|
sw x5,164(x0)
|
|
sw x5,168(x0)
|
|
sw x5,172(x0)
|
|
sw x5,176(x0)
|
|
sw x5,180(x0)
|
|
sw x5,184(x0)
|
|
sw x5,188(x0)
|
|
sw x5,192(x0)
|
|
li x5,0x00008067 # ret
|
|
sw x5,196(x0)
|
|
|
|
# setup gpio address in x5
|
|
li x5,0x02000000
|
|
sw x0,0(x5)
|
|
|
|
# initial entry point into RAM code
|
|
li x3,4
|
|
|
|
# initialize RAM counter
|
|
sw x0,0(x0)
|
|
|
|
# start of loop. remember this address
|
|
auipc x4,0
|
|
|
|
# execute RAM code, come back here
|
|
jalr x3
|
|
|
|
# load counter and increment
|
|
lw x6,0(x0)
|
|
addi x6,x6,1
|
|
|
|
# store counter and update gpios
|
|
sw x6,0(x5)
|
|
sw x6,0(x0)
|
|
|
|
# calculate new entry point into RAM code
|
|
slli x3,x6,2
|
|
andi x3,x3,127
|
|
addi x3,x3,32
|
|
|
|
# execute RAM code, come back to start of loop
|
|
mv x1,x4
|
|
jr x3
|