Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------------------------
- * Title :LETTER INVADER MODO GRÁFICO (VARIOS INVASORES)
- * Written by :Fulgencio
- * Date :05/2015
- * Description:Sistema de representación invasores a partir de la información
- * contenida en una estructura de datos almacenada en memoria
- * Se añade un algoritmo para matar y una prueba del mismo
- *-----------------------------------------------------------
- ORG $1000
- START: ; first instruction of program
- MOVE.L #200,D7 *Contador para bucle
- JSR MUESTRA *Mostrar invasores
- REP
- JSR DELAY
- JSR AVANZA *Avanza invasores
- JSR MUESTRA
- SUB #1,D7
- BNE REP *200 veces y paramos para probar el algoritmo MATA
- MOVE.L #INVASORES+28,A1 *apuntamos a cadena del 4º invasor
- JSR MATA *Matamos al 4º invasor
- MOVE.L #200,D7 *Continuamos 200 pasos más
- REP2
- JSR DELAY
- JSR AVANZA
- JSR MUESTRA
- SUB #1,D7
- BNE REP2
- SIMHALT ; halt simulator
- MUESTRA
- MOVE.L #INVASORES,A1
- BUCLE MOVE.W (A1)+,D1 *coordenada X
- MOVE.W (A1)+,D2 *coordenada Y
- SUB.W #300,D2 *Hacemos un desplazamiento para que virtualmente empiecen fuera de pantalla
- BMI NOPINTA *mientras sea negativo, el invasor queda fuera de pantalla
- CMP.B #0,(A1) *Si la cadena es NULL, el invasor está muerto y no se dibuja
- BEQ NOPINTA
- MOVE.L #95,D0
- TRAP #15 *pinta el invasor en X,Y
- NOPINTA
- ADD.L #4,A1 *APUNTA AL SIGUIENTE INVASOR
- CMP.L #FININV,A1
- BNE BUCLE
- RTS
- AVANZA MOVE.L #INVASORES,A1
- BUCLEA *ADD.W #1,(A1) *incremento X (opcional y podría ser aleatorio)
- ADD.W #1,2(A1) *incremento Y (2º Word)
- ADD.L #8,A1 *cada invasor ocupa 8 bytes
- CMP.L #FININV,A1
- BNE BUCLEA
- RTS
- DELAY MOVEM.L D0-D1,-(A7)
- MOVE.L #23,D0
- MOVE.L #2,D1
- TRAP #15
- MOVEM.L (A7)+,D0-D1
- RTS
- MATA *Suponemos que A1 apunta a la cadena del invasor que hay que matar
- MOVEM.L D0-D2,-(A7)
- MOVE.L #21,D0
- MOVE.L #0,D1 *Selección texto negro
- MOVE.L #0,D2
- TRAP #15
- MOVE.L #95,D0
- MOVE.W -4(A1),D1 *coordenada X
- MOVE.W -2(A1),D2 *coordenada Y
- SUB.W #300,D2
- TRAP #15 *Pinta en negro para borrar invasor
- MOVE.B #0,(A1) *anula la cadena para matarlo
- MOVE.L #21,D0
- MOVE.L #$FFFFFF,D1 *Repone texto a blanco
- MOVE.L #0,D2
- TRAP #15
- MOVEM.L (A7)+,D0-D2
- RTS
- * Put variables and constants here
- ORG $5000
- * El formato de los invasores es X.W(2),Y.W(2),cadena(4), en total 8 bytes cada uno
- INVASORES DC.W 100,100 *X1,Y1
- DC.B '123',0
- DC.W 150,200 *X2,Y2
- DC.B '456',0
- DC.W 300,250 *X3,Y3
- DC.B '789',0
- DC.W 400,300 *X4,Y4
- DC.B '321',0 *sustituyendo un NULL por el caracter '3' [DC.B 0,'21',0] será un invasor muerto
- FININV
- END START ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement