>>110139595
More blog posting to keep the thread alive.
I made a little demo! Wow, much demo. Such demo.
neopix_anim:
addi sp, sp, -32
sw ra, 0(sp)
sw s0, 4(sp)
sw s1, 8(sp)
sw s2, 12(sp)
sw s3, 16(sp)
sw s4, 20(sp)
mv s2, a0 // iterations
li s3, 0x050000 // red
neopix_sweep:
li s0, 0 // x=0
neopix_col_loop:
// erase prev col
/*
mv a0, s2
li a1, 0
call neopix_draw_col
*/
// draw new col
mv a0, s0
mv a1, s3
call neopix_draw_col
call delay
// mv s2, s0 // save prev col
addi s0, s0, 1
li t0, 16
blt s0, t0, neopix_col_loop
srli s3, s3, 8
bnez s3, neopix_sweep
// TODO add N loops?
li s3, 0x050000 // back to red
addi s2, s2, -1
bnez s2, neopix_sweep
// j neopix_sweep
call delay // small delay before return
lw s4, 20(sp)
lw s3, 16(sp)
lw s2, 12(sp)
lw s1, 8(sp)
lw s0, 4(sp)
lw ra, 0(sp)
addi sp, sp, 32
ret
neopix_draw_col:
addi sp, sp, -32
sw ra, 0(sp)
sw s0, 4(sp)
sw s1, 8(sp)
sw s2, 12(sp)
sw s3, 16(sp)
sw s4, 20(sp)
mv s1, a0 // s1 = x
mv s2, a1 // color
li s4, 0 // y
neopix_dc_loop:
andi t1, s4, 1
xori t1, t1, -1 // neg
andi t1, t1, 15
xor t1, t1, s1
slli t0, s4, 4
add a0, t0, t1
mv a1, s2
call neopix_set
addi s4, s4, 1
li t0, 16
blt s4, t0, neopix_dc_loop
lw s4, 20(sp)
lw s3, 16(sp)
lw s2, 12(sp)
lw s1, 8(sp)
lw s0, 4(sp)
lw ra, 0(sp)
addi sp, sp, 32
ret
delay:
li t0, 100000
delay_loop:
addi t0, t0, -1
bnez t0, delay_loop
ret