Use lookup tables

This commit is contained in:
2022-11-21 12:54:36 +01:00
parent e5879022b7
commit e0369944b4

View File

@@ -18,26 +18,29 @@ scrolling_cnt_value: .word 0x20FC000 // for real board
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
pattern_ptr: .word =pattern1
pattern1:
.word 0x01030204
.word 0x05070608
.word 0x090B0A0C
.word 0x0D0F0E00
pattern2:
.word 0x0F0E0E0B
.word 0x100D0A0E
.word 0x0D000000
pattern3:
.word 0x01101010
pattern4:
.word 0x02100310
pattern5:
.word 0x00100010
.word 0x00100010
.word 0x00101010
write_mask:
.word 0x1000000
@@ -45,115 +48,47 @@ write_mask:
clear_mask:
.word 0x100
display_char:
// Read from ptr r3
ld08 r4, r3
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
ret
nop
main:
ldr r8, >w_cnt_top
ldr r0, >scrolling_addr
ldr r1, >write_mask
ldr r2, >clear_mask
ldr r10, >pattern_ptr
number_loop:
// Set scrolling speed
// (Re)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 r3
add r3, r3, r10
call >display_char
nop
clr r4
addi r4, 0x3
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r7
clr r11
addi r11, 15 // iterations
display_loop0:
addi r3, 0x01
call >display_char
nop
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
addi r7, 1
cmp neq r7, r11
br true >display_loop0
nop
// Turn on
clr r4
@@ -169,10 +104,10 @@ number_loop:
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
ldr r5, >scrolling_count_addr
ldr r7, >scrolling_cnt_value
rsh r7, r7, 1 // Divide by 2
st32 r5, r7
// Clear
clr r4
@@ -180,59 +115,18 @@ number_loop:
st32 r0, r4
// --------- DEAD BEEF ---------
clr r4
addi r4, 0xF
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r7
clr r11
addi r11, 12 // iterations
display_loop1:
addi r3, 0x01
call >display_char
nop
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
addi r7, 1
cmp neq r7, r11
br true >display_loop1
nop
// Turn on
clr r4
@@ -253,11 +147,18 @@ number_loop:
st32 r0, r4
// --------- 1 ---------
clr r4
addi r4, 0x1
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r7
clr r11
addi r11, 4 // iterations
display_loop2:
addi r3, 0x01
call >display_char
nop
addi r7, 1
cmp neq r7, r11
br true >display_loop2
nop
// Turn on
clr r4
@@ -278,17 +179,18 @@ number_loop:
st32 r0, r4
// --------- 2 3 ---------
clr r4
addi r4, 0x3
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
clr r7
clr r11
addi r11, 4 // iterations
display_loop3:
addi r3, 0x01
call >display_char
nop
clr r4
addi r4, 0x2
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
addi r7, 1
cmp neq r7, r11
br true >display_loop3
nop
// Turn on
clr r4
@@ -309,17 +211,18 @@ number_loop:
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 r7
clr r11
addi r11, 12 // iterations
display_loop4:
addi r3, 0x01
call >display_char
nop
clr r4
addi r4, 0x0
lsh r4, r4, 16
or r4, r4, r1
st32 r0, r4
addi r7, 1
cmp neq r7, r11
br true >display_loop4
nop
// Turn on
clr r4
@@ -334,7 +237,7 @@ number_loop:
addi r4, 0x1
st32 r0, r4
br always >reset
br always >number_loop
nop
//subroutine to iterate until counter overflow