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