Files
lt16lab/programs/scrolling.prog

357 lines
5.1 KiB
Plaintext

reset:
br always >main
nop
hardfault:
reti
nop
memfault:
reti
nop
.align
scrolling_addr: .word 0x000F00A0
scrolling_count_addr: .word 0x000F00A4
scrolling_cnt_value: .word 0x20FC000 // for real board
// scrolling_cnt_value: .word 0x100 // for simulation
w_cnt_top: .word 0x3FC000 // for real board
// w_cnt_top: .word 0x100 //for simulation
// pattern1:
// .word 0x01030204
// .word 0x05070608
// .word 0x090B0A0C
// .word 0x0D0F0E00
//
// pattern2:
// .word 0x0F0E0E0B
// .word 0x0D0A0E0D
//
// pattern3:
// .word 0x01
//
// pattern4:
// .word 0x021003
//
// pattern5:
// .word 0x00100010
// .word 0x00100010
// .word 0x00
write_mask:
.word 0x1000000
clear_mask:
.word 0x100
main:
ldr r8, >w_cnt_top
ldr r0, >scrolling_addr
ldr r1, >write_mask
ldr r2, >clear_mask
number_loop:
// Set scrolling speed
ldr r5, >scrolling_count_addr
ldr r7, >scrolling_cnt_value
st32 r5, r7
// --------- 132457689BACDFE0 ---------
clr r4
addi r4, 0x1
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x3
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x2
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x4
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x5
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x7
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x6
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x8
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x9
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xB
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xA
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xC
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xD
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xF
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xE
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x0
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
// Turn on
clr r4
addi r4, 0x1
st32 r0, r4
call >wait
nop
// Turn off
clr r4
addi r4, 0x1
st32 r0, r4
// Double scrolling speed
// ldr r5, >scrolling_count_addr
// ldr r7, >scrolling_cnt_value
// rsh r7, r7, 1 // Divide by 2
// st32 r5, r7
// Clear
clr r4
or r4, r4, r2
st32 r0, r4
// --------- DEAD BEEF ---------
clr r4
addi r4, 0xF
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xE
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xE
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xB
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x10
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xD
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xA
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xE
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0xD
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
// Turn on
clr r4
addi r4, 0x1
st32 r0, r4
call >wait
nop
// Turn off
clr r4
addi r4, 0x1
st32 r0, r4
// Clear
clr r4
or r4, r4, r2
st32 r0, r4
// --------- 1 ---------
clr r4
addi r4, 0x1
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
// Turn on
clr r4
addi r4, 0x1
st32 r0, r4
call >wait
nop
// Turn off
clr r4
addi r4, 0x1
st32 r0, r4
// Clear
clr r4
or r4, r4, r2
st32 r0, r4
// --------- 2 3 ---------
clr r4
addi r4, 0x3
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x2
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
// Turn on
clr r4
addi r4, 0x1
st32 r0, r4
call >wait
nop
// Turn off
clr r4
addi r4, 0x1
st32 r0, r4
// Clear
clr r4
or r4, r4, r2
st32 r0, r4
// --------- 0 0 0 0 0 ---------
clr r4
addi r4, 0x0
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r4
addi r4, 0x0
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
// Turn on
clr r4
addi r4, 0x1
st32 r0, r4
call >wait
nop
// Turn off
clr r4
addi r4, 0x1
st32 r0, r4
br always >reset
nop
//subroutine to iterate until counter overflow
wait:
clr r7 //inititalize inner counter
clr r6 // outer counter
clr r9
addi r9, 0x7F
inc_o:
clr r7
inc_i:
cmp neq r7,r8
br true >inc_i //if i=cnt_top
addi r7,1
cmp neq r6,r9 // else, if i=cnt_outer
br true >inc_o
addi r6,1 // else
ret
nop