Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*.include "nios_macros.s"*/
- .equ LEDR_BASE, 0x10000000
- .equ SW_BASE, 0x10000040
- .equ LED_COUNT, 17
- .equ LAST_DRAM_WORD, 0x7FFFFC
- .text /* executable code follows */
- .global _start
- _start:
- /* initialize base addresses of parallel ports */
- movia r10, SW_BASE /* SW slider switch base address */
- movia r12, LEDR_BASE /* red LED base address */
- movia sp, LAST_DRAM_WORD
- movia r2, 1
- movia r5, 1 /* start led position */
- movia r6, 0 /* smer */
- movia r15, 0 /* porovnavac ledky vs switche*/
- movia r16, LED_COUNT
- movia r17, LED_COUNT
- LOOP:
- ldwio r7, 0(r10) /* load switches*/
- stwio r5, 0(r12) /*ulozeni do ledek*/
- call WAITING
- beq r6, r0, LEFT
- beq r6, r2, RIGHT
- br LOOP
- RIGHT:
- roli r5, r5, 31 /* posun ledky doprava*/
- addi r16, r16,1 /* ledka o jednu vyssi*/
- and r15, r7, r5 /* pokud je ledka nad sepnutym switchem bude vysledek nenulovy*/
- beq r16, r17, MOVELEFT /* pokud na okraji zmen smer*/
- bne r15, r0, MOVELEFT /*pokud nad switchem zmen smer*/
- call LOOP
- LEFT:
- roli r5, r5, 1 /* posun ledky doleva*/
- addi r16, r16,-1 /* ledka o jednu nizsi*/
- and r15, r7, r5 /* pokud je ledka nad sepnutym switchem bude vysledek nenulovy*/
- beq r16, r0, MOVERIGHT /* pokud na okraji zmen smer*/
- bne r15, r0, MOVERIGHT /*pokud nad switchem zmen smer*/
- call LOOP
- MOVELEFT:
- movia r6, 0
- call LOOP
- MOVERIGHT:
- movia r6, 1
- call LOOP
- WAITING:
- stw r18,0(sp)
- addi sp, sp, -4
- movia r18, 10000000
- WAIT1:
- addi r18, r18, -1
- bne r18, r0, WAIT1
- addi sp, sp, 4
- ldw r18,0(sp)
- ret
- .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement