Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------------------------
- * Title : VISUALIZADOR GRÁFICO EN 68k PARA BUBBLE SHOTER
- * Written by : FULGENCIO
- * Date : 2019
- * Description:
- *-----------------------------------------------------------
- BLACK EQU $00000000
- RED EQU $000000FF
- GREEN EQU $0000FF00
- YELLOW EQU $0000FFFF
- BLUE EQU $00FF0000
- WHITE EQU $00FFFFFF
- CYAN EQU $00FFFF00
- MAGENTA EQU $00FF00FF
- SIZE EQU 30
- ORIX EQU 50
- ORIY EQU 20
- CANONINIX EQU ORIX+SIZE*5+ORIX/2 *Entre la columna 5 y la 6
- CANONINIY EQU ORIY+SIZE*14 *Elegimos 14 filas más abajo del techo
- ORG $1000
- START * Programa Principal
- JSR SHOWMAP * Muestra Mapa
- CLR.L D1
- CLR.L D2
- CLR.L D5
- JSR BOLACANON
- JSR CLICKRATON
- *JSR COMPLIMS
- SUB.W #CANONINIX+SIZE/2,D1 *Calcula las distancias entre la posición del cañon y el click
- SUB.W #CANONINIY+SIZE/2,D2 *la corrección SIZE/2 es para referirse al centro de la bola
- MOVE.W D1,CANONDELTAX *Los deltas son Words porque los usaremos con MULS y DIVS
- MOVE.W D2,CANONDELTAY
- CLR.L D5 *D5 es el desplazamiento vertical del movimiento (con signo)
- MOVE.W #CANONINIX,D1
- MOVE.W #CANONINIY,D2
- MOVE.W D1,VARINIX *El inicio de cálculo de posiciónes es variable por los rebotes
- BUCDISP
- JSR RETARDO *Mantenemos un tiempo la bola dibujada
- MOVE.L #0,D0 *Borramos bola con color negro D0=0
- JSR BUBBLE
- SUB.W #SIZE/5,D5 *Desplazamos SIZE/10 en vertical. Resta porque es de subida
- CLR.L D1
- CLR.L D2
- **Ahora calcularemos la nueva posición de la bola X,Y en D1 y D2
- MOVE.W #CANONINIY,D2 *Partimos de la coordenada inicial
- ADD.W D5,D2 *Como D5 ocrresponde al recorrido vertical, lo sumamos directamente a D2 (Y)
- MOVE.W D5,D1 *Ahora hay que ponderar el recorrido en horizontal en D1 que será diferente
- SUB.W REBDESPY,D1 *Restamos los desplazamientos anteriores al último rebote
- MULS CANONDELTAX,D1
- DIVS CANONDELTAY,D1 *Ponderamos el incremento en dirección X dividiendo el desplazamiento en Y por la pendiente
- AND.L #$FFFF,D1 *Como es una división, en la parte alta está el resto que eliminamos
- ADD.W VARINIX,D1 *Y añadimos la posición inical al recorrido horizontal calculado
- MOVE.L COLORCANON,D0
- JSR BUBBLE *Dibujamos nueva bola
- JSR REBOTE
- JMP BUCDISP
- SIMHALT ; halt simulator
- BOLACANON
- MOVE.L COLORCANON,D0 *Por defecto se ha inicializado en 3=Azul
- MOVE.W #CANONINIX,D1
- MOVE.W #CANONINIY,D2
- JSR BUBBLE
- RTS
- REBOTE
- MOVEM.L D0-D3,-(A7)
- CMP.W #ORIX,D1
- BGT NOPAREDI
- JSR PING
- NEG.W CANONDELTAX *Cambio dirección
- MOVE.W D1,VARINIX *Nuevo origen de X desde rebote
- MOVE.W D5,REBDESPY *REBDESPY *Para el nuevo origen de desplazamiento en Y
- JMP NOPAREDD
- NOPAREDI
- ADD.W #SIZE,D1 *Borde derecho
- CMP.W #ORIX+SIZE*10+SIZE/2,D1
- BLE NOPAREDD
- JSR PING
- NEG.W CANONDELTAX *Cambio dirección
- SUB.W #SIZE,D1
- MOVE.W D1,VARINIX *Nuevo origen de X desde rebote
- MOVE.W D5,REBDESPY *REBDESPY *Para el nuevo origen de desplazamiento en Y
- NOPAREDD
- MOVEM.L (A7)+,D0-D3
- RTS
- RETARDO
- MOVEM.L D0-D1,-(A7)
- MOVE.L #23,D0
- MOVE.L #3,D1
- TRAP #15
- MOVEM.L (A7)+,D0-D1
- RTS
- PING
- MOVEM.L D0/A1,-(A7)
- MOVE.L #73,D0
- MOVE.L #FILEPING,A1
- TRAP #15
- MOVEM.L (A7)+,D0/A1
- RTS
- *************************************************************************
- SHOWMAP ******************************** Subrutina que muestra el estado del mapa en las coordenadas ORIX, ORIY ************************************
- MOVE.L #ORIX,D1
- MOVE.L #ORIY,D2 *Coordenadas iniciales del tablero
- MOVE.L #MAPA+13+12*5,A3 *Posición de la primera casilla real
- LOOPMAP
- MOVE.B (A3)+,D0 *Obtiene el contenido
- CMP.B #$80,D0
- BEQ NEXTROW
- *CMP.B #$00,D0
- *BEQ EMPTY *Está vacía
- FILLED *Dibuja burbuja
- JSR BUBBLE
- ADD.L #SIZE,D1
- JMP LOOPMAP
- EMPTY
- ADD.L #SIZE,D1
- JMP LOOPMAP
- NEXTROW
- MOVE.L #ORIX,D1 *Retorno coordenada X inicial
- ADD.L #SIZE,D2 *Avance coordenada Y
- CMP.B #$40,(A3)+ *Comprueba línea par/impar
- BNE NODESP
- ADD.L #SIZE/2,D1 *Si tiene un $40, la fila se desplaza medio hueco a derecha
- NODESP
- CMP.B #$80,(A3)
- BNE LOOPMAP
- RTS
- **************************************************************************
- BUBBLE
- MOVEM.L D0-D4,-(A7)
- JSR FILLCOLOR *Elijo un color de relleno
- MOVE.L #88,D0 *Cuadrado CON relleno
- MOVE.L D1,D3
- MOVE.L D2,D4 *Copio coordenadas esquina izquierda en D3,D4
- ADD.L #SIZE,D3
- ADD.L #SIZE,D4 *Creo coordenadas esquina derecha separándolas SIZE pixels
- TRAP #15
- MOVEM.L (A7)+,D0-D4
- RTS
- FILLCOLOR
- MOVEM.L D0-D1/A1,-(A7)
- MOVE.L #TABLACOLOR,A1
- MULU #4,D0 *La tabla es de LONG
- MOVE.L (A1,D0),D1 *D1 tiene color de la bola
- MOVE.L #81,D0 *Color relleno
- TRAP #15
- MOVE.L #80,D0 *Color línea
- TRAP #15
- MOVEM.L (A7)+,D0-D1/A1
- RTS
- CLICKRATON
- MOVE.L D0,-(A7)
- LOOPR
- MOVE.L #61,D0
- MOVE.L #0,D1
- TRAP #15
- BTST #0,D0 *Comprueba el bit 0 (corresponde con click izqdo)
- BEQ LOOPR *Si no hay click izqdo, se mantiene el bucle
- CLR.L D2
- SWAP D1 *En D1 tenemos 00|YY|00|XX
- MOVE.W D1,D2
- EXT.L D2 *Extiende el signo de Word a Long (para incluir negativos)
- CLR.W D1
- SWAP D1 *Hemos pasado Y a D2 y dejamos X en D1
- EXT.L D1 *Extiende el signo de Word a Long (para incluir negativos)
- MOVE.L (A7)+,D0
- RTS
- * Put variables and constants here
- ORG $4000
- *El borde izquierdo está marcado con $80 o $40, para indicar fila par o impar
- MAPA
- DC.B $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
- DC.B $80,$02,$03,$06,$04,$05,$03,$01,$05,$01,$05,$80
- DC.B $40,$03,$03,$05,$02,$01,$05,$04,$04,$03,$03,$80
- DC.B $80,$01,$03,$01,$06,$04,$04,$01,$04,$01,$02,$80
- DC.B $40,$02,$04,$05,$02,$06,$01,$04,$05,$04,$01,$80
- DC.B $80,$00,$06,$06,$02,$01,$06,$05,$06,$05,$01,$80
- DC.B $40,$02,$04,$02,$02,$02,$01,$04,$03,$03,$06,$80
- DC.B $80,$00,$00,$04,$06,$06,$04,$05,$03,$02,$04,$80
- DC.B $40,$05,$05,$06,$00,$04,$05,$03,$02,$06,$02,$80
- DC.B $80,$00,$02,$05,$00,$02,$02,$03,$05,$05,$04,$80
- DC.B $40,$00,$02,$04,$05,$00,$06,$05,$02,$00,$06,$80
- DC.B $80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- DC.B $40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- DC.B $80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- DC.B $40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- DC.B $80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- DC.B $40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- DC.B $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
- TABLACOLOR
- DC.L BLACK
- DC.L RED
- DC.L GREEN
- DC.L BLUE
- DC.L MAGENTA
- DC.L YELLOW
- DC.L CYAN
- COLORCANON DC.L 3
- CANONDELTAX DS.W 1
- CANONDELTAY DS.W 1
- VARINIX DS.W 1
- REBDESPY DC.W 0 *Desplazamiento en Y desde el último rebote. 0 si no han habido rebotes
- FILEPING DC.B 'D:\ping.wav',0
- END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement