From e0369944b4ed5c380a6cce827c22e2174478c052 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Mon, 21 Nov 2022 12:54:36 +0100 Subject: [PATCH] Use lookup tables --- programs/scrolling.prog | 295 ++++++++++++++-------------------------- 1 file changed, 99 insertions(+), 196 deletions(-) diff --git a/programs/scrolling.prog b/programs/scrolling.prog index 56d3086..7756e7c 100644 --- a/programs/scrolling.prog +++ b/programs/scrolling.prog @@ -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