Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- gameOver: .asciiz "Game Over.\n"
- playTime1: .asciiz "The playing time was "
- playTime2: .asciiz " ms.\n"
- score1: .asciiz "The game score was "
- score2: .asciiz " frogs.\n"
- headX: .word 7
- headY: .word 31
- tailX: .word 0
- tailY: .word 31
- startTime: .word 0
- dir: .asciiz "000000000000000000000000000000000000000000"
- .text
- Initialize:
- jal randinit
- li $t6, 0
- wall_loop:
- la $a0, 64
- jal getRandomNumber
- la $t4, ($t1)
- la $a0, 64
- jal getRandomNumber
- la $t5, ($t1)
- la $a0, ($t4)
- la $a1, ($t5)
- li $a2, 1
- jal setLED
- addi $t6, $t6, 1
- beq $t6, 32, wall_end
- j wall_loop
- wall_end:
- li $a0, 0xFFFF0008
- li $a1, 0x0000AAAA
- addi $a0, $a0, 496
- sw $a1, 0($a0)
- li $t7, 0
- li $t8, 4
- li $t9, 8
- li $t6 0
- frog_loop:
- la $a0, 64
- jal getRandomNumber
- la $t4, ($t1)
- la $a0, 64
- jal getRandomNumber
- la $t5, ($t1)
- la $a0, ($t4)
- la $a1, ($t5)
- jal getLED
- bne $v0, 0, not_frog
- li $a2, 3
- jal setLED
- addi $t6, $t6, 1
- beq $t6, 32, frog_end
- not_frog:
- j frog_loop
- frog_end:
- _poll:
- jal sleep
- la $a0, 15
- jal getRandomNumber
- bne $t1, 10, frog_move_done2
- frog_move:
- la $a0, 64
- jal getRandomNumber
- la $t4, ($t1)
- la $a0, 64
- jal getRandomNumber
- la $t5, ($t1)
- la $a0, ($t4)
- la $a1, ($t5)
- jal getLED
- bne $v0, 3, frog_move
- li $a2, 0
- jal setLED
- la $a0, 8
- jal getRandomNumber
- subi $t1, $t1, 1
- la $a0, ($t4)
- la $a1, ($t5)
- beq $t1, 0, frog_right
- beq $t1, 1, frog_left
- beq $t1, 2, frog_up
- beq $t1, 3, frog_down
- beq $t1, 4, frog_rightUp
- beq $t1, 5, frog_leftUp
- beq $t1, 6, frog_rightDown
- beq $t1, 7, frog_leftDown
- j frog_right
- frog_right:
- addi $a0, $a0, 1
- bge $a0, 64, frog_RIGHT_SIDE
- j frog_move_done
- frog_RIGHT_SIDE:
- li $a0, 0
- j frog_move_done
- frog_left:
- subi $a0, $a0, 1
- blt $a0, $0, frog_LEFT_SIDE
- j frog_move_done
- frog_LEFT_SIDE:
- li $a0, 63
- j frog_move_done
- frog_up:
- subi $a1, $a1, 1
- blt $a1, $0, frog_DOWN_SIDE
- j frog_move_done
- frog_DOWN_SIDE:
- li $a1, 63
- j frog_move_done
- frog_down:
- addi $a1, $a1, 1
- bge $a1, 64, frog_UP_SIDE
- j frog_move_done
- frog_UP_SIDE:
- li $a1, 0
- j frog_move_done
- frog_rightUp:
- addi $a0, $a0, 1
- bge $a0, 64, frog_RIGHT_SIDE1
- j skip1
- frog_RIGHT_SIDE1:
- li $a0, 0
- skip1:
- subi $a1, $a1, 1
- blt $a1, $0, frog_DOWN_SIDE1
- j frog_move_done
- frog_DOWN_SIDE1:
- li $a1, 63
- j frog_move_done
- frog_leftUp:
- subi $a0, $a0, 1
- blt $a0, $0, frog_LEFT_SIDE2
- j skip2
- frog_LEFT_SIDE2:
- li $a0, 63
- skip2:
- subi $a1, $a1, 1
- blt $a1, $0, frog_DOWN_SIDE2
- j frog_move_done
- frog_DOWN_SIDE2:
- li $a1, 63
- j frog_move_done
- frog_rightDown:
- addi $a0, $a0, 1
- bge $a0, 64, frog_RIGHT_SIDE3
- j skip3
- frog_RIGHT_SIDE3:
- li $a0, 0
- skip3:
- addi $a1, $a1, 1
- bge $a1, 64, frog_UP_SIDE3
- j frog_move_done
- frog_UP_SIDE3:
- li $a1, 0
- j frog_move_done
- frog_leftDown:
- addi $a0, $a0, 1
- bge $a0, 64, frog_RIGHT_SIDE4
- j skip4
- frog_RIGHT_SIDE4:
- li $a0, 0
- skip4:
- addi $a1, $a1, 1
- bge $a1, 64, frog_UP_SIDE4
- j frog_move_done
- frog_UP_SIDE4:
- li $a1, 0
- j frog_move_done
- frog_move_done:
- li $a2, 3
- jal setLED
- rog_move_done2:
- skip:
- la $t0, 0xFFFF0000
- lw $t0, 0($t0)
- andi $t0, $t0, 1
- bne $t0, $0, _keypress
- la $a3, dir
- beq $t8, 0, right_pressed
- beq $t8, 1, left_pressed
- beq $t8, 2, up_pressed
- beq $t8, 3, down_pressed
- j _poll
- _keypress:
- lw $t0, startTime
- beq $t0, 0, get_start_time
- j skip_start_time
- get_start_time:
- li $v0, 30
- syscall
- sw $a0, startTime
- skip_start_time:
- la $t0, 0xFFFF0004
- lw $t0, 0($t0)
- la $a3, dir
- subi $t1, $t0, 66
- beq $t1, $0, center_pressed
- subi $t1, $t0, 227
- beq $t1, $0, right_pressed
- subi $t1, $t0, 226
- beq $t1, $0, left_pressed
- subi $t1, $t0, 224
- beq $t1, $0, up_pressed
- subi $t1, $t0, 225
- beq $t1, $0, down_pressed
- j _poll
- right_pressed:
- beq $t8, 1, skip
- lw $a0, headX
- lw $a1, headY
- addi $a0, $a0, 1
- bge $a0, 64, RIGHT_SIDE_wall
- j RIGHT_SIDE_wall_skip
- RIGHT_SIDE_wall:
- li $a0, 0
- RIGHT_SIDE_wall_skip:
- jal getLED
- beq $v0, 1, down_pressed
- li $t8, 0
- li $t4, 0
- li $t3, 0
- right_loop:
- addi $a3, $a3, 1
- addi $t4, $t4, 1
- lb $t2, ($a3)
- sb $t3,($a3)
- la $t3, ($t2)
- beq $t4, 42, right_end
- j right_loop
- right_end:
- sub $a3,$a3,42
- lw $a0, headX
- lw $a1, headY
- addi $a0, $a0, 1
- bge $a0, 64, RIGHT_SIDE
- j head_move_done
- RIGHT_SIDE:
- li $a0, 0
- j head_move_done
- left_pressed:
- beq $t8, 0, skip
- beq $t8, 4, skip
- lw $a0, headX
- lw $a1, headY
- subi $a0, $a0, 1
- blt $a0, $0, LEFT_SIDE_wall
- j LEFT_SIDE_wall_skip
- LEFT_SIDE_wall:
- li $a0, 63
- LEFT_SIDE_wall_skip:
- jal getLED
- beq $v0, 1, up_pressed
- li $t8, 1
- li $t4, 0
- li $t3, 1
- left_loop:
- addi $a3, $a3, 1
- addi $t4, $t4, 1
- lb $t2, ($a3)
- sb $t3,($a3)
- la $t3, ($t2)
- beq $t4, 42, left_end
- j left_loop
- left_end:
- sub $a3,$a3,42
- lw $a0, headX
- lw $a1, headY
- subi $a0, $a0, 1
- blt $a0, $0, LEFT_SIDE
- j head_move_done
- LEFT_SIDE:
- li $a0, 63
- j head_move_done
- up_pressed:
- beq $t8, 3, skip
- lw $a0, headX
- lw $a1, headY
- subi $a1, $a1, 1
- blt $a1, $0, DOWN_SIDE_wall
- j DOWN_SIDE_wall_skip
- DOWN_SIDE_wall:
- li $a1, 63
- DOWN_SIDE_wall_skip:
- jal getLED
- beq $v0, 1, right_pressed
- li $t8, 2
- li $t4, 0
- li $t3, 2
- up_loop:
- addi $a3, $a3, 1
- addi $t4, $t4, 1
- lb $t2, ($a3)
- sb $t3,($a3)
- la $t3, ($t2)
- beq $t4, 42, up_end
- j up_loop
- up_end:
- sub $a3,$a3,42
- lw $a0, headX
- lw $a1, headY
- subi $a1, $a1, 1
- blt $a1, $0, DOWN_SIDE
- j head_move_done
- DOWN_SIDE:
- li $a1, 63
- j head_move_done
- down_pressed:
- beq $t8, 2, skip
- lw $a0, headX
- lw $a1, headY
- addi $a1, $a1, 1
- bge $a1, 64, UP_SIDE_wall
- j UP_SIDE_wall_skip
- UP_SIDE_wall:
- li $a1, 0
- UP_SIDE_wall_skip:
- jal getLED
- beq $v0, 1, left_pressed
- li $t8, 3
- li $t4, 0
- li $t3, 3
- down_loop:
- addi $a3, $a3, 1
- addi $t4, $t4, 1
- lb $t2, ($a3)
- sb $t3,($a3)
- la $t3, ($t2)
- beq $t4, 42, down_end
- j down_loop
- down_end:
- sub $a3,$a3,42
- lw $a0, headX
- lw $a1, headY
- addi $a1, $a1, 1
- bge $a1, 64, UP_SIDE
- j head_move_done
- UP_SIDE:
- li $a1, 0
- j head_move_done
- center_pressed:
- j skip
- head_move_done:
- sw $a0, headX
- sw $a1, headY
- jal getLED
- beq $v0, 2, game_over
- beq $v0, 3, hit_frog
- beq $v0, 0, hit_nothing
- j hit_nothing
- hit_frog:
- lw $a0, headX
- lw $a1, headY
- li $a2, 2
- jal setLED
- addi $t7, $t7, 1
- beq $t7, 32, game_over
- addi $t9, $t9, 1
- j _poll
- hit_nothing:
- lw $a0, headX
- lw $a1, headY
- li $a2, 2
- jal setLED
- lw $a0, tailX
- lw $a1, tailY
- li $a2, 0
- jal setLED
- la $a3, dir
- la $t1, 0($t9)
- add $a3, $a3, $t1
- lb $t0, ($a3)
- beq $t0, 0, tail_right_pressed
- beq $t0, 1, tail_left_pressed
- beq $t0, 2, tail_up_pressed
- beq $t0, 3, tail_down_pressed
- j tail_right_pressed
- tail_right_pressed:
- lw $a0, tailX
- lw $a1, tailY
- addi $a0, $a0, 1
- bge $a0, 64, TAIL_RIGHT_SIDE
- j tail_move_done
- TAIL_RIGHT_SIDE:
- li $a0, 0
- j tail_move_done
- tail_left_pressed:
- lw $a0, tailX
- lw $a1, tailY
- subi $a0, $a0, 1
- blt $a0, $0, TAIL_LEFT_SIDE
- j tail_move_done
- TAIL_LEFT_SIDE:
- li $a0, 63
- j tail_move_done
- tail_up_pressed:
- lw $a0, tailX
- lw $a1, tailY
- subi $a1, $a1, 1
- blt $a1, $0, TAIL_DOWN_SIDE
- j tail_move_done
- TAIL_DOWN_SIDE:
- li $a1, 63
- j tail_move_done
- tail_down_pressed:
- lw $a0, tailX
- lw $a1, tailY
- addi $a1, $a1, 1
- bge $a1, 64, TAIL_UP_SIDE
- j tail_move_done
- TAIL_UP_SIDE:
- li $a1, 0
- j tail_move_done
- tail_move_done:
- sub $a3, $a3, $t1
- sw $a0, tailX
- sw $a1, tailY
- j _poll
- game_over:
- li $v0, 4
- la $a0, gameOver
- syscall
- la $a0, playTime1
- syscall
- li $v0, 30
- syscall
- lw $a1, startTime
- sub $a0, $a0, $a1
- li $v0, 1
- syscall
- li $v0, 4
- la $a0, playTime2
- syscall
- la $a0, score1
- syscall
- li $v0, 1
- la $a0, ($t7)
- syscall
- li $v0, 4
- la $a0, score2
- syscall
- li $v0, 10
- syscall
- setLED:
- sll $t0,$a1,4
- srl $t1,$a0,2
- add $t0,$t0,$t1
- li $t2,0xffff0008
- add $t0,$t2,$t0
- andi $t1,$a0,0x3
- neg $t1,$t1
- addi $t1,$t1,3
- sll $t1,$t1,1
- li $t2,3
- sllv $t2,$t2,$t1
- not $t2,$t2
- sllv $t1,$a2,$t1
- lbu $t3,0($t0)
- and $t3,$t3,$t2
- or $t3,$t3,$t1
- sb $t3,0($t0)
- jr $ra
- getLED:
- sll $t0,$a1,4
- srl $t1,$a0,2
- add $t0,$t0,$t1
- la $t2,0xffff0008
- add $t0,$t2,$t0
- andi $t1,$a0,0x3
- neg $t1,$t1
- addi $t1,$t1,3
- sll $t1,$t1,1
- lbu $t2,0($t0)
- srlv $t2,$t2,$t1
- andi $v0,$t2,0x3
- jr $ra
- sleep:
- li $v0, 32
- li $a0, 200
- syscall
- jr $ra
- randinit:
- subi $sp, $sp, 8
- sw $ra, 0($sp)
- sw $s0, 4($sp)
- li $v0, 30
- syscall
- move $s0, $a0
- move $a1, $s0
- li $a0, 1
- li $v0, 40
- syscall
- lw $ra, 0($sp)
- lw $s0, 4($sp)
- addi $sp, $sp, 8
- jr $ra
- getRandomNumber:
- subi $sp, $sp, 4
- sw $ra, 0($sp)
- move $a1, $a0
- li $a0, 1
- li $v0, 42
- syscall
- move $t1, $a0
- lw $ra, 0($sp)
- addi $sp, $sp, 4
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement