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