Advertisement
SMicro

VISOR GRÁFICO BUBBLE SHOOTER V2

May 6th, 2019
2,277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *-----------------------------------------------------------
  2. * Title      : VISUALIZADOR GRÁFICO EN 68k PARA BUBBLE SHOTER
  3. * Written by : FULGENCIO
  4. * Date       : 2019
  5. * Description:
  6. *-----------------------------------------------------------
  7.  
  8. BLACK  EQU $00000000
  9. RED    EQU $000000FF
  10. GREEN  EQU $0000FF00
  11. YELLOW EQU $0000FFFF
  12. BLUE   EQU $00FF0000
  13. WHITE  EQU $00FFFFFF
  14. CYAN   EQU $00FFFF00
  15. MAGENTA EQU $00FF00FF
  16.    
  17. SIZE EQU 30
  18. ORIX EQU 50
  19. ORIY EQU 20
  20. CANONINIX EQU ORIX+SIZE*5+ORIX/2  *Entre la columna 5 y la 6
  21. CANONINIY EQU ORIY+SIZE*14        *Elegimos 14 filas más abajo del techo
  22.  
  23.    ORG    $1000
  24.  
  25. START              * Programa Principal
  26.  
  27.     JSR SHOWMAP     * Muestra Mapa
  28.     CLR.L D1
  29.     CLR.L D2
  30.     CLR.L D5
  31.    
  32.     JSR BOLACANON
  33.     JSR CLICKRATON
  34.    
  35.     *JSR COMPLIMS
  36.  
  37.     SUB.W #CANONINIX+SIZE/2,D1  *Calcula las distancias entre la posición del cañon y el click
  38.     SUB.W #CANONINIY+SIZE/2,D2  *la corrección SIZE/2 es para referirse al centro de la bola
  39.     MOVE.W D1,CANONDELTAX       *Los deltas son Words porque los usaremos con MULS y DIVS
  40.     MOVE.W D2,CANONDELTAY
  41.  
  42.    
  43.     CLR.L D5    *D5 es el desplazamiento vertical del movimiento (con signo)
  44.     MOVE.W #CANONINIX,D1
  45.     MOVE.W #CANONINIY,D2
  46.     MOVE.W D1,VARINIX  *El inicio de cálculo de posiciónes es variable por los rebotes
  47.  
  48.  
  49. BUCDISP
  50.    JSR RETARDO  *Mantenemos un tiempo la bola dibujada
  51.     MOVE.L #0,D0 *Borramos bola con color negro D0=0
  52.     JSR BUBBLE
  53.    
  54.     SUB.W #SIZE/5,D5   *Desplazamos SIZE/10 en vertical. Resta porque es de subida
  55.     CLR.L D1
  56.     CLR.L D2
  57.     **Ahora calcularemos la nueva posición de la bola X,Y en D1 y D2
  58.    
  59.     MOVE.W #CANONINIY,D2  *Partimos de la coordenada inicial  
  60.     ADD.W D5,D2           *Como D5 ocrresponde al recorrido vertical, lo sumamos directamente a D2 (Y)
  61.  
  62.     MOVE.W D5,D1        *Ahora hay que ponderar el recorrido en horizontal en D1 que será diferente
  63.     SUB.W REBDESPY,D1   *Restamos los desplazamientos anteriores al último rebote
  64.     MULS CANONDELTAX,D1
  65.     DIVS CANONDELTAY,D1   *Ponderamos el incremento en dirección X dividiendo el desplazamiento en Y por la pendiente
  66.     AND.L #$FFFF,D1       *Como es una división, en la parte alta está el resto que eliminamos
  67.  
  68.     ADD.W VARINIX,D1   *Y añadimos la posición inical al recorrido horizontal calculado
  69.    
  70.     MOVE.L COLORCANON,D0
  71.     JSR BUBBLE          *Dibujamos nueva bola
  72.    
  73.     JSR REBOTE
  74.    
  75.     JMP BUCDISP
  76.    
  77.    
  78.     SIMHALT             ; halt simulator
  79.    
  80.    
  81. BOLACANON
  82.    MOVE.L COLORCANON,D0 *Por defecto se ha inicializado en 3=Azul
  83.     MOVE.W #CANONINIX,D1
  84.     MOVE.W #CANONINIY,D2
  85.     JSR BUBBLE
  86.     RTS
  87.  
  88. REBOTE
  89.    MOVEM.L D0-D3,-(A7)
  90.     CMP.W #ORIX,D1
  91.     BGT NOPAREDI
  92.     JSR PING
  93.     NEG.W CANONDELTAX   *Cambio dirección
  94.     MOVE.W D1,VARINIX   *Nuevo origen de X desde rebote
  95.     MOVE.W D5,REBDESPY  *REBDESPY *Para el nuevo origen de desplazamiento en Y  
  96.     JMP NOPAREDD
  97.    
  98. NOPAREDI
  99.    ADD.W #SIZE,D1 *Borde derecho
  100.     CMP.W #ORIX+SIZE*10+SIZE/2,D1
  101.     BLE NOPAREDD
  102.     JSR PING
  103.     NEG.W CANONDELTAX  *Cambio dirección
  104.     SUB.W #SIZE,D1
  105.     MOVE.W D1,VARINIX  *Nuevo origen de X desde rebote
  106.     MOVE.W D5,REBDESPY  *REBDESPY *Para el nuevo origen de desplazamiento en Y  
  107. NOPAREDD
  108.    MOVEM.L (A7)+,D0-D3
  109.     RTS
  110.  
  111. RETARDO
  112.    MOVEM.L D0-D1,-(A7)
  113.     MOVE.L #23,D0
  114.     MOVE.L #3,D1
  115.     TRAP #15
  116.     MOVEM.L (A7)+,D0-D1
  117.     RTS
  118.  
  119. PING
  120.    MOVEM.L D0/A1,-(A7)
  121.     MOVE.L #73,D0
  122.     MOVE.L #FILEPING,A1
  123.     TRAP #15
  124.     MOVEM.L (A7)+,D0/A1
  125.     RTS
  126.    
  127. *************************************************************************
  128. SHOWMAP ******************************** Subrutina que muestra el estado del mapa en las coordenadas ORIX, ORIY ************************************
  129.     MOVE.L #ORIX,D1
  130.     MOVE.L #ORIY,D2 *Coordenadas iniciales del tablero
  131.     MOVE.L #MAPA+13+12*5,A3 *Posición de la primera casilla real
  132.    
  133. LOOPMAP
  134.    MOVE.B (A3)+,D0 *Obtiene el contenido
  135.     CMP.B #$80,D0
  136.     BEQ NEXTROW
  137.     *CMP.B #$00,D0
  138.     *BEQ EMPTY       *Está vacía
  139.  
  140. FILLED             *Dibuja burbuja
  141.     JSR BUBBLE
  142.     ADD.L #SIZE,D1
  143.     JMP LOOPMAP    
  144.      
  145. EMPTY
  146.    ADD.L #SIZE,D1
  147.     JMP LOOPMAP
  148.  
  149.  
  150.  
  151. NEXTROW
  152.    MOVE.L #ORIX,D1  *Retorno coordenada X inicial
  153.     ADD.L #SIZE,D2   *Avance coordenada Y
  154.     CMP.B #$40,(A3)+ *Comprueba línea par/impar
  155.     BNE NODESP
  156.     ADD.L #SIZE/2,D1 *Si tiene un $40, la fila se desplaza medio hueco a derecha
  157. NODESP  
  158.     CMP.B #$80,(A3)
  159.     BNE LOOPMAP  
  160.     RTS
  161. **************************************************************************
  162.  
  163.    
  164. BUBBLE
  165.    MOVEM.L D0-D4,-(A7)
  166.     JSR FILLCOLOR   *Elijo un color de relleno
  167.     MOVE.L #88,D0   *Cuadrado CON relleno
  168.     MOVE.L D1,D3
  169.     MOVE.L D2,D4    *Copio coordenadas esquina izquierda en D3,D4
  170.     ADD.L #SIZE,D3
  171.     ADD.L #SIZE,D4  *Creo coordenadas esquina derecha separándolas SIZE pixels
  172.     TRAP #15
  173.     MOVEM.L (A7)+,D0-D4
  174.     RTS
  175.    
  176. FILLCOLOR
  177.    MOVEM.L D0-D1/A1,-(A7)
  178.     MOVE.L #TABLACOLOR,A1
  179.     MULU #4,D0          *La tabla es de LONG
  180.     MOVE.L (A1,D0),D1   *D1 tiene color de la bola
  181.     MOVE.L #81,D0       *Color relleno
  182.     TRAP #15
  183.     MOVE.L #80,D0       *Color línea
  184.     TRAP #15
  185.     MOVEM.L (A7)+,D0-D1/A1
  186.     RTS    
  187.  
  188. CLICKRATON
  189.            MOVE.L D0,-(A7)
  190. LOOPR
  191.            MOVE.L #61,D0
  192.             MOVE.L #0,D1
  193.             TRAP #15
  194.            
  195.             BTST #0,D0     *Comprueba el bit 0 (corresponde con click izqdo)
  196.             BEQ LOOPR      *Si no hay click izqdo, se mantiene el bucle
  197.            
  198.             CLR.L D2
  199.             SWAP D1      *En D1 tenemos 00|YY|00|XX
  200.             MOVE.W D1,D2
  201.             EXT.L D2     *Extiende el signo de Word a Long (para incluir negativos)
  202.             CLR.W D1
  203.             SWAP D1      *Hemos pasado Y a D2 y dejamos X en D1
  204.             EXT.L D1     *Extiende el signo de Word a Long (para incluir negativos)
  205.             MOVE.L (A7)+,D0
  206.             RTS
  207.  
  208. * Put variables and constants here
  209.     ORG $4000
  210.     *El borde izquierdo está marcado con $80 o $40, para indicar fila par o impar
  211. MAPA
  212.  DC.B $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
  213.  DC.B $80,$02,$03,$06,$04,$05,$03,$01,$05,$01,$05,$80
  214.  DC.B $40,$03,$03,$05,$02,$01,$05,$04,$04,$03,$03,$80
  215.  DC.B $80,$01,$03,$01,$06,$04,$04,$01,$04,$01,$02,$80
  216.  DC.B $40,$02,$04,$05,$02,$06,$01,$04,$05,$04,$01,$80
  217.  DC.B $80,$00,$06,$06,$02,$01,$06,$05,$06,$05,$01,$80
  218.  DC.B $40,$02,$04,$02,$02,$02,$01,$04,$03,$03,$06,$80
  219.  DC.B $80,$00,$00,$04,$06,$06,$04,$05,$03,$02,$04,$80
  220.  DC.B $40,$05,$05,$06,$00,$04,$05,$03,$02,$06,$02,$80
  221.  DC.B $80,$00,$02,$05,$00,$02,$02,$03,$05,$05,$04,$80
  222.  DC.B $40,$00,$02,$04,$05,$00,$06,$05,$02,$00,$06,$80
  223.  DC.B $80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  224.  DC.B $40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  225.  DC.B $80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  226.  DC.B $40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  227.  DC.B $80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  228.  DC.B $40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  229.  DC.B $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
  230.  
  231.  
  232. TABLACOLOR
  233.    DC.L BLACK
  234.     DC.L RED
  235.     DC.L GREEN
  236.     DC.L BLUE
  237.     DC.L MAGENTA
  238.     DC.L YELLOW
  239.     DC.L CYAN
  240.  
  241.  
  242. COLORCANON  DC.L 3
  243. CANONDELTAX DS.W 1
  244. CANONDELTAY DS.W 1
  245. VARINIX     DS.W 1
  246. REBDESPY    DC.W 0    *Desplazamiento en Y desde el último rebote. 0 si no han habido rebotes
  247.  
  248. FILEPING DC.B 'D:\ping.wav',0
  249.     END    START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement