Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data  
  2.     gameOver:       .asciiz     "Game Over.\n"
  3.     playTime1:      .asciiz     "The playing time was "
  4.     playTime2:      .asciiz     " ms.\n"
  5.     score1:         .asciiz     "The game score was "
  6.     score2:         .asciiz     " frogs.\n"
  7.     headX:          .word       7  
  8.     headY:          .word       31 
  9.     tailX:          .word       0  
  10.     tailY:          .word       31 
  11.     startTime:      .word       0
  12.     dir:            .asciiz     "000000000000000000000000000000000000000000"
  13.  
  14. .text
  15. Initialize:                
  16.     jal randinit           
  17.     li $t6, 0              
  18. wall_loop:                 
  19.     la $a0, 64             
  20.     jal getRandomNumber    
  21.     la $t4, ($t1)          
  22.     la $a0, 64             
  23.     jal getRandomNumber    
  24.     la $t5, ($t1)          
  25.     la $a0, ($t4)          
  26.     la $a1, ($t5)          
  27.     li $a2, 1              
  28.     jal setLED             
  29.     addi $t6, $t6, 1       
  30.     beq $t6, 32, wall_end  
  31.     j wall_loop            
  32.     wall_end:
  33.     li $a0, 0xFFFF0008 
  34.     li $a1, 0x0000AAAA 
  35.     addi $a0, $a0, 496 
  36.     sw  $a1, 0($a0)    
  37.    
  38.     li $t7, 0          
  39.     li $t8, 4          
  40.     li $t9, 8          
  41.    
  42.     li $t6 0               
  43. frog_loop:                 
  44.     la $a0, 64             
  45.     jal getRandomNumber    
  46.     la $t4, ($t1)          
  47.     la $a0, 64             
  48.     jal getRandomNumber    
  49.     la $t5, ($t1)          
  50.     la $a0, ($t4)          
  51.     la $a1, ($t5)          
  52.     jal getLED             
  53.     bne $v0, 0, not_frog   
  54.     li $a2, 3              
  55.     jal setLED             
  56.     addi $t6, $t6, 1       
  57.     beq $t6, 32, frog_end  
  58.     not_frog:
  59.     j frog_loop            
  60. frog_end:
  61.    
  62. _poll:
  63.     jal sleep          
  64.  
  65.     la $a0, 15                         
  66.     jal getRandomNumber                
  67.     bne $t1, 10, frog_move_done2       
  68. frog_move:                             
  69.     la $a0, 64                         
  70.     jal getRandomNumber    
  71.     la $t4, ($t1)          
  72.     la $a0, 64             
  73.     jal getRandomNumber    
  74.     la $t5, ($t1)          
  75.     la $a0, ($t4)          
  76.     la $a1, ($t5)          
  77.     jal getLED             
  78.     bne $v0, 3, frog_move  
  79.     li $a2, 0              
  80.     jal setLED             
  81.     la $a0, 8              
  82.     jal getRandomNumber    
  83.     subi $t1, $t1, 1       
  84.     la $a0, ($t4)          
  85.     la $a1, ($t5)          
  86.     beq $t1, 0, frog_right     
  87.     beq $t1, 1, frog_left      
  88.     beq $t1, 2, frog_up        
  89.     beq $t1, 3, frog_down      
  90.     beq $t1, 4, frog_rightUp   
  91.     beq $t1, 5, frog_leftUp    
  92.     beq $t1, 6, frog_rightDown 
  93.     beq $t1, 7, frog_leftDown  
  94.     j frog_right               
  95.    
  96. frog_right:
  97.     addi $a0, $a0, 1       
  98.     bge $a0, 64, frog_RIGHT_SIDE   
  99.     j frog_move_done       
  100.     frog_RIGHT_SIDE:
  101.     li $a0, 0          
  102.     j frog_move_done       
  103.  
  104. frog_left:
  105.     subi $a0, $a0, 1       
  106.     blt $a0, $0, frog_LEFT_SIDE
  107.     j frog_move_done       
  108.     frog_LEFT_SIDE:
  109.     li $a0, 63         
  110.     j frog_move_done       
  111.  
  112. frog_up:
  113.     subi $a1, $a1, 1       
  114.     blt $a1, $0, frog_DOWN_SIDE
  115.     j frog_move_done       
  116.     frog_DOWN_SIDE:
  117.     li $a1, 63         
  118.     j frog_move_done       
  119.  
  120. frog_down:
  121.     addi $a1, $a1, 1       
  122.     bge $a1, 64, frog_UP_SIDE  
  123.     j frog_move_done       
  124.     frog_UP_SIDE:
  125.     li $a1, 0          
  126.     j frog_move_done       
  127.    
  128. frog_rightUp:
  129.     addi $a0, $a0, 1       
  130.     bge $a0, 64, frog_RIGHT_SIDE1  
  131.     j skip1            
  132.     frog_RIGHT_SIDE1:
  133.     li $a0, 0          
  134.     skip1:
  135.     subi $a1, $a1, 1       
  136.     blt $a1, $0, frog_DOWN_SIDE1   
  137.     j frog_move_done       
  138.     frog_DOWN_SIDE1:
  139.     li $a1, 63         
  140.     j frog_move_done       
  141.  
  142. frog_leftUp:
  143.     subi $a0, $a0, 1       
  144.     blt $a0, $0, frog_LEFT_SIDE2   
  145.     j skip2            
  146.     frog_LEFT_SIDE2:
  147.     li $a0, 63         
  148.     skip2:
  149.     subi $a1, $a1, 1       
  150.     blt $a1, $0, frog_DOWN_SIDE2   
  151.     j frog_move_done       
  152.     frog_DOWN_SIDE2:
  153.     li $a1, 63         
  154.     j frog_move_done       
  155.  
  156. frog_rightDown:
  157.     addi $a0, $a0, 1       
  158.     bge $a0, 64, frog_RIGHT_SIDE3  
  159.     j skip3            
  160.     frog_RIGHT_SIDE3:
  161.     li $a0, 0          
  162.     skip3:         
  163.     addi $a1, $a1, 1           
  164.     bge $a1, 64, frog_UP_SIDE3 
  165.     j frog_move_done           
  166.     frog_UP_SIDE3:
  167.     li $a1, 0                  
  168.     j frog_move_done           
  169.  
  170. frog_leftDown:
  171.     addi $a0, $a0, 1               
  172.     bge $a0, 64, frog_RIGHT_SIDE4  
  173.     j skip4                        
  174.     frog_RIGHT_SIDE4:
  175.     li $a0, 0                      
  176.     skip4:
  177.     addi $a1, $a1, 1               
  178.     bge $a1, 64, frog_UP_SIDE4     
  179.     j frog_move_done               
  180.     frog_UP_SIDE4:
  181.     li $a1, 0                  
  182.     j frog_move_done               
  183.    
  184. frog_move_done:        
  185.     li $a2, 3          
  186.     jal setLED         
  187. rog_move_done2:        
  188.  
  189.     skip:                      
  190.     la $t0, 0xFFFF0000         
  191.     lw $t0, 0($t0)             
  192.     andi $t0, $t0, 1           
  193.     bne $t0, $0, _keypress     
  194.     la $a3, dir                
  195.     beq $t8, 0, right_pressed  
  196.     beq $t8, 1, left_pressed   
  197.     beq $t8, 2, up_pressed     
  198.     beq $t8, 3, down_pressed   
  199.     j _poll                    
  200.    
  201. _keypress:
  202.     lw $t0, startTime              
  203.     beq $t0, 0, get_start_time     
  204.     j skip_start_time              
  205.     get_start_time:
  206.     li $v0, 30         
  207.     syscall
  208.     sw $a0, startTime  
  209.     skip_start_time:
  210.    
  211.     la $t0, 0xFFFF0004 
  212.     lw $t0, 0($t0)     
  213.     la $a3, dir        
  214.    
  215.     subi $t1, $t0, 66          
  216.     beq $t1, $0, center_pressed
  217.    
  218.     subi $t1, $t0, 227         
  219.     beq $t1, $0, right_pressed 
  220.  
  221.     subi $t1, $t0, 226         
  222.     beq $t1, $0, left_pressed  
  223.    
  224.     subi $t1, $t0, 224         
  225.     beq $t1, $0, up_pressed    
  226.  
  227.     subi $t1, $t0, 225         
  228.     beq $t1, $0, down_pressed  
  229.    
  230.     j _poll                        
  231.  
  232.  
  233. right_pressed:
  234.     beq $t8, 1, skip               
  235.    
  236.     lw $a0, headX                  
  237.     lw $a1, headY                  
  238.     addi $a0, $a0, 1               
  239.     bge $a0, 64, RIGHT_SIDE_wall   
  240.     j RIGHT_SIDE_wall_skip         
  241.     RIGHT_SIDE_wall:
  242.     li $a0, 0          
  243.     RIGHT_SIDE_wall_skip:
  244.     jal getLED
  245.     beq $v0, 1, down_pressed
  246.     li $t8, 0          
  247.     li $t4, 0          
  248.     li $t3, 0          
  249. right_loop:
  250.     addi $a3, $a3, 1       
  251.     addi $t4, $t4, 1       
  252.     lb $t2, ($a3)          
  253.     sb $t3,($a3)           
  254.     la $t3, ($t2)          
  255.     beq $t4, 42, right_end 
  256.     j right_loop           
  257. right_end:
  258.     sub $a3,$a3,42         
  259.     lw $a0, headX          
  260.     lw $a1, headY          
  261.     addi $a0, $a0, 1       
  262.     bge $a0, 64, RIGHT_SIDE
  263.     j head_move_done       
  264.    
  265.     RIGHT_SIDE:
  266.     li $a0, 0          
  267.     j head_move_done       
  268.  
  269. left_pressed:  
  270.     beq $t8, 0, skip       
  271.     beq $t8, 4, skip       
  272.    
  273.     lw $a0, headX          
  274.     lw $a1, headY          
  275.     subi $a0, $a0, 1       
  276.     blt $a0, $0, LEFT_SIDE_wall
  277.     j LEFT_SIDE_wall_skip      
  278.     LEFT_SIDE_wall:
  279.     li $a0, 63                 
  280.     LEFT_SIDE_wall_skip:
  281.     jal getLED
  282.     beq $v0, 1, up_pressed     
  283.    
  284.     li $t8, 1          
  285.     li $t4, 0          
  286.     li $t3, 1          
  287. left_loop:
  288.     addi $a3, $a3, 1       
  289.     addi $t4, $t4, 1       
  290.     lb $t2, ($a3)          
  291.     sb $t3,($a3)           
  292.     la $t3, ($t2)          
  293.     beq $t4, 42, left_end  
  294.     j left_loop        
  295. left_end:
  296.     sub $a3,$a3,42         
  297.     lw $a0, headX          
  298.     lw $a1, headY          
  299.     subi $a0, $a0, 1       
  300.     blt $a0, $0, LEFT_SIDE 
  301.     j head_move_done       
  302.    
  303.     LEFT_SIDE:
  304.     li $a0, 63         
  305.     j head_move_done   
  306.  
  307. up_pressed:
  308.     beq $t8, 3, skip   
  309.    
  310.     lw $a0, headX      
  311.     lw $a1, headY      
  312.     subi $a1, $a1, 1   
  313.     blt $a1, $0, DOWN_SIDE_wall
  314.     j DOWN_SIDE_wall_skip      
  315.     DOWN_SIDE_wall:
  316.     li $a1, 63         
  317.     DOWN_SIDE_wall_skip:
  318.     jal getLED
  319.     beq $v0, 1, right_pressed  
  320.     li $t8, 2      
  321.     li $t4, 0      
  322.     li $t3, 2      
  323. up_loop:
  324.     addi $a3, $a3, 1       
  325.     addi $t4, $t4, 1       
  326.     lb $t2, ($a3)          
  327.     sb $t3,($a3)           
  328.     la $t3, ($t2)          
  329.     beq $t4, 42, up_end    
  330.     j up_loop          
  331. up_end:
  332.     sub $a3,$a3,42         
  333.     lw $a0, headX          
  334.     lw $a1, headY          
  335.     subi $a1, $a1, 1       
  336.     blt $a1, $0, DOWN_SIDE 
  337.     j head_move_done       
  338.    
  339.     DOWN_SIDE:
  340.     li $a1, 63             
  341.     j head_move_done       
  342.  
  343. down_pressed:
  344.     beq $t8, 2, skip       
  345.    
  346.     lw $a0, headX          
  347.     lw $a1, headY          
  348.     addi $a1, $a1, 1       
  349.     bge $a1, 64, UP_SIDE_wall
  350.     j UP_SIDE_wall_skip    
  351.     UP_SIDE_wall:
  352.     li $a1, 0              
  353.     UP_SIDE_wall_skip:
  354.     jal getLED
  355.     beq $v0, 1, left_pressed
  356.    
  357.     li $t8, 3              
  358.     li $t4, 0              
  359.     li $t3, 3              
  360. down_loop:
  361.     addi $a3, $a3, 1       
  362.     addi $t4, $t4, 1       
  363.     lb $t2, ($a3)          
  364.     sb $t3,($a3)           
  365.     la $t3, ($t2)          
  366.     beq $t4, 42, down_end  
  367.     j down_loop            
  368. down_end:
  369.     sub $a3,$a3,42         
  370.     lw $a0, headX          
  371.     lw $a1, headY          
  372.     addi $a1, $a1, 1       
  373.     bge $a1, 64, UP_SIDE   
  374.     j head_move_done       
  375.    
  376.     UP_SIDE:
  377.     li $a1, 0              
  378.     j head_move_done       
  379.  
  380. center_pressed:
  381.     j skip
  382.  
  383. head_move_done:
  384.     sw $a0, headX              
  385.     sw $a1, headY              
  386.     jal getLED
  387.     beq $v0, 2, game_over      
  388.     beq $v0, 3, hit_frog       
  389.     beq $v0, 0, hit_nothing    
  390.     j hit_nothing              
  391.    
  392. hit_frog:
  393.     lw $a0, headX              
  394.     lw $a1, headY              
  395.     li $a2, 2                  
  396.     jal setLED                 
  397.     addi $t7, $t7, 1           
  398.     beq $t7, 32, game_over     
  399.     addi $t9, $t9, 1           
  400.     j _poll                    
  401.    
  402. hit_nothing:
  403.     lw $a0, headX                  
  404.     lw $a1, headY                  
  405.     li $a2, 2                      
  406.     jal setLED                     
  407.     lw $a0, tailX                  
  408.     lw $a1, tailY                  
  409.     li $a2, 0                      
  410.     jal setLED                     
  411.     la $a3, dir                    
  412.     la $t1, 0($t9)                 
  413.     add $a3, $a3, $t1              
  414.     lb $t0, ($a3)                  
  415.     beq $t0, 0, tail_right_pressed 
  416.     beq $t0, 1, tail_left_pressed  
  417.     beq $t0, 2, tail_up_pressed    
  418.     beq $t0, 3, tail_down_pressed  
  419.     j tail_right_pressed           
  420.    
  421.  
  422.  
  423. tail_right_pressed:
  424.     lw $a0, tailX          
  425.     lw $a1, tailY          
  426.     addi $a0, $a0, 1       
  427.     bge $a0, 64, TAIL_RIGHT_SIDE   
  428.     j tail_move_done       
  429.    
  430.     TAIL_RIGHT_SIDE:
  431.     li $a0, 0          
  432.     j tail_move_done   
  433.  
  434. tail_left_pressed:
  435.     lw $a0, tailX          
  436.     lw $a1, tailY          
  437.     subi $a0, $a0, 1       
  438.     blt $a0, $0, TAIL_LEFT_SIDE
  439.     j tail_move_done       
  440.    
  441.     TAIL_LEFT_SIDE:
  442.     li $a0, 63         
  443.     j tail_move_done   
  444.  
  445. tail_up_pressed:
  446.     lw $a0, tailX      
  447.     lw $a1, tailY      
  448.     subi $a1, $a1, 1   
  449.     blt $a1, $0, TAIL_DOWN_SIDE
  450.     j tail_move_done   
  451.    
  452.     TAIL_DOWN_SIDE:
  453.     li $a1, 63         
  454.     j tail_move_done   
  455.  
  456. tail_down_pressed:
  457.     lw $a0, tailX      
  458.     lw $a1, tailY      
  459.     addi $a1, $a1, 1   
  460.     bge $a1, 64, TAIL_UP_SIDE
  461.     j tail_move_done   
  462.    
  463.     TAIL_UP_SIDE:
  464.     li $a1, 0          
  465.     j tail_move_done   
  466.    
  467. tail_move_done:
  468.     sub $a3, $a3, $t1  
  469.     sw $a0, tailX      
  470.     sw $a1, tailY      
  471.     j _poll            
  472.    
  473. game_over:
  474.     li $v0, 4
  475.     la $a0, gameOver   
  476.     syscall
  477.     la $a0, playTime1  
  478.     syscall
  479.     li $v0, 30         
  480.     syscall
  481.     lw $a1, startTime  
  482.     sub $a0, $a0, $a1  
  483.     li $v0, 1
  484.     syscall            
  485.     li $v0, 4
  486.     la $a0, playTime2  
  487.     syscall
  488.     la $a0, score1     
  489.     syscall
  490.     li $v0, 1
  491.     la $a0, ($t7)      
  492.     syscall
  493.     li $v0, 4
  494.     la $a0, score2     
  495.     syscall
  496.     li $v0, 10
  497.     syscall
  498.    
  499. setLED:
  500.     sll $t0,$a1,4          
  501.     srl $t1,$a0,2          
  502.     add $t0,$t0,$t1        
  503.     li  $t2,0xffff0008     
  504.     add $t0,$t2,$t0        
  505.     andi    $t1,$a0,0x3    
  506.     neg $t1,$t1            
  507.     addi    $t1,$t1,3      
  508.     sll $t1,$t1,1          
  509.     li  $t2,3      
  510.     sllv    $t2,$t2,$t1
  511.     not $t2,$t2            
  512.     sllv    $t1,$a2,$t1    
  513.     lbu $t3,0($t0)         
  514.     and $t3,$t3,$t2        
  515.     or  $t3,$t3,$t1        
  516.     sb  $t3,0($t0)         
  517.     jr  $ra
  518.    
  519. getLED:
  520.     sll  $t0,$a1,4             
  521.     srl  $t1,$a0,2             
  522.     add  $t0,$t0,$t1           
  523.     la   $t2,0xffff0008
  524.     add  $t0,$t2,$t0           
  525.     andi $t1,$a0,0x3           
  526.     neg  $t1,$t1               
  527.     addi $t1,$t1,3             
  528.         sll  $t1,$t1,1         
  529.     lbu  $t2,0($t0)
  530.     srlv $t2,$t2,$t1           
  531.     andi $v0,$t2,0x3           
  532.     jr   $ra
  533.    
  534. sleep: 
  535.     li $v0, 32         
  536.     li $a0, 200        
  537.     syscall
  538.     jr $ra
  539.    
  540. randinit:
  541.     subi $sp, $sp, 8
  542.     sw $ra, 0($sp)
  543.     sw $s0, 4($sp)
  544.     li $v0, 30
  545.     syscall
  546.     move $s0, $a0
  547.     move $a1, $s0
  548.     li $a0, 1
  549.     li $v0, 40
  550.     syscall
  551.     lw $ra, 0($sp)
  552.     lw $s0, 4($sp)
  553.     addi $sp, $sp, 8
  554.     jr $ra
  555.    
  556. getRandomNumber:
  557.     subi $sp, $sp, 4
  558.     sw $ra, 0($sp)
  559.     move $a1, $a0
  560.     li $a0, 1
  561.     li $v0, 42
  562.     syscall
  563.     move $t1, $a0
  564.     lw $ra, 0($sp)
  565.     addi $sp, $sp, 4
  566.     jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement