Advertisement
Guest User

Untitled

a guest
Oct 16th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .include "macros.s"
  2.  
  3. #problemas ate aqui:    convenção desrespeitada (registrador s3 sendo modificado dentro de procedimentos)
  4. #           get comando não funcionando como intended
  5. #           muito lenta execução em comparação com a 1º versão (video no grupo). procurar otimizar/reduzir uso de memoria
  6.  
  7. .data
  8. comandoQuit: .string "q"
  9. comandoShift: .string "s"
  10. pixel: .string " "
  11. buffer: .string " " #mas size = 1
  12.  
  13. .text
  14.     M_SetEcall(exceptionHandling)   # Macro de SetEcall - não tem ainda na DE1-SoC
  15.    
  16.     li s3, -1 #primeira cor iniciada com -1 para facilitar calculo
  17.     jal CLS
  18.     jal RainbowConstructor
  19.     jal Efeito
  20.     jal Quit
  21.    
  22. ShiftColors:
  23.     addi sp, sp, -4
  24.     sw ra, 0(sp)
  25.    
  26.     addi s3, s3, 1
  27.     jal RainbowConstructor
  28.    
  29.     lw ra, 0(sp)
  30.     addi sp,sp, 4
  31.     ret
  32.    
  33. Quit:
  34.     #end
  35.     li a7, 110
  36.     ecall
  37.  
  38. GetColor:
  39.     li t1, 7
  40.     rem t0,s3,t1            #Remainder: set t0 to the remainder of s3/t0
  41.    
  42.     #Rosa
  43.     li t1, 0
  44.     beq t0, t1, GetRosa
  45.    
  46.     #Roxo
  47.     li t1, 1
  48.     beq t0, t1, GetRoxo
  49.    
  50.     #Azul
  51.     li t1, 2
  52.     beq t0, t1, GetAzul
  53.    
  54.     #Verde
  55.     li t1, 3
  56.     beq t0, t1, GetVerde
  57.    
  58.     #Amarelo
  59.     li t1, 4
  60.     beq t0, t1, GetAmarelo
  61.    
  62.     #Laranja
  63.     li t1, 5
  64.     beq t0, t1, GetLaranja
  65.    
  66.     #Vermelho
  67.     li t1, 6
  68.     beq t0, t1, GetVermelho
  69.    
  70. GetRosa:
  71.     li a3,0xD700
  72.     ret
  73.  
  74. GetRoxo:
  75.     li a3,0xC300
  76.     ret
  77.  
  78. GetAzul:
  79.     li a3,0xD000
  80.     ret
  81.  
  82. GetVerde:
  83.     li a3,0x3900
  84.     ret
  85.  
  86. GetAmarelo:
  87.     li a3,0x3F00
  88.     ret
  89.  
  90. GetLaranja:
  91.     li a3,0x0F00
  92.     ret
  93.  
  94. GetVermelho:
  95.     li a3,0x0500
  96.     ret
  97.  
  98.    
  99. RainbowConstructor: #as cores começam no rosa e sao ordenadas de acordo com o modulo 7.
  100.             #cada cor é dada por s3.
  101.            
  102.     addi sp, sp, -4
  103.     sw ra, 0(sp)
  104.    
  105.     li s0, 160 #centro horizontal do loop, usado para calcular cada x inicial de cada cor.
  106.     li s1, 48 # raio estabelecido da primira cor mais embaixo, subtraido de 8 (1 unidade) para padronizar calculos.
  107.    
  108.     mv a4, s1
  109.    
  110.     #rosa
  111.     addi s3, s3, 1
  112.     addi a4, a4, 8
  113.     sub a1, s0, a4
  114.     jal GetColor
  115.     jal ColorLoop
  116.    
  117.     #roxo
  118.     addi s3, s3, 1
  119.     addi a4, a4, 8
  120.     sub a1, s0, a4
  121.     jal GetColor
  122.     jal ColorLoop
  123.    
  124.     #azul
  125.     addi s3, s3, 1
  126.     addi a4, a4, 8
  127.     sub a1, s0, a4
  128.     jal GetColor
  129.     jal ColorLoop
  130.    
  131.     #verde
  132.     addi s3, s3, 1
  133.     addi a4, a4, 8
  134.     sub a1, s0, a4
  135.     jal GetColor
  136.     jal ColorLoop
  137.    
  138.     #amarelo
  139.     addi s3, s3, 1
  140.     addi a4, a4, 8
  141.     sub a1, s0, a4
  142.     jal GetColor
  143.     jal ColorLoop
  144.    
  145.     #laranja
  146.     addi s3, s3, 1
  147.     addi a4, a4, 8
  148.     sub a1, s0, a4
  149.     jal GetColor
  150.     jal ColorLoop
  151.    
  152.     #vermelho
  153.     addi s3, s3, 1
  154.     addi a4, a4, 8
  155.     sub a1, s0, a4
  156.     jal GetColor
  157.     jal ColorLoop
  158.    
  159.     lw ra, 0(sp)
  160.     addi sp, sp, 4
  161.     ret
  162.    
  163.    
  164.    
  165. # CLS Clear Screen
  166. CLS:    li a0,0x00  #preto:00, amarelo:3F, azul:D0, rosa: D7, roxo: C3, verde: 39, vermelho: 05, laranja: 0F
  167.     li a7,148
  168.     ecall
  169. #   jal exceptionHandling
  170.     ret
  171.  
  172. GetCommand:
  173. # syscall read string
  174.     li a7,108
  175.     la a0,buffer
  176.     li a1,1
  177.     ecall
  178. #   jal exceptionHandling
  179.  
  180.     lb a0, 0(a0)
  181.     ret
  182.    
  183. Efeito:
  184.     addi sp, sp, -4
  185.     sw ra, 0(sp)
  186.    
  187.     jal GetCommand
  188.    
  189.     lw ra, 0(sp)
  190.     addi sp, sp, 4
  191.    
  192.     la t0, comandoQuit
  193.     lb t0, 0(t0)
  194.     la t1, comandoShift
  195.     lb t1, 0(t1)
  196.    
  197.     beq a0, t0, Quit
  198.     beq a0, t1, ShiftColors
  199.    
  200.     ret
  201.  
  202. ColorLoop: #definir COR, RAIO e o X INICIAL antes de chamar, a3 = cor, a4=raio, a1=1ºx
  203.     #cor mais embaixo dada como sendo raio 56.
  204.     #cada pixel assumido como sendo 8 unidades
  205.     #calculo para y=f(x):
  206.     #y = 240 - sqrt(r^2 - 25600 + 320 x - x^2)
  207.     addi a1, a1, 1
  208.     mul t1, a1, a1
  209.     li t2, 320
  210.     mul t2, t2, a1
  211.    
  212.     li t3, 25600
  213.     mul t0, a4, a4
  214.     sub t3, t0, t3
  215.    
  216.     sub t1, t2, t1
  217.     add t1, t1, t3
  218.     fcvt.s.w f2, t1         #Convert float from integer: Assigns the value of t1 to f2
  219.     fsqrt.s f1, f2          #Floating SQuare RooT: Assigns f1 to the square root of f2
  220.     fcvt.w.s t1, f1         #Convert integer from float: Assigns the value of f1 (rounded) to t1
  221.     li t2, 240
  222.     sub t1, t2, t1
  223.     mv a2, t1
  224.    
  225.     #pinta um pixel
  226.     li a7,104
  227.     la a0,pixel
  228.     ecall
  229.    
  230.     #while x < 160+raio
  231.     addi t0, a4, 160
  232.     bne a1, t0, ColorLoop
  233.     ret
  234.  
  235. .include "SYSTEMv11.s"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement