Advertisement
SMicro

Letter invader - modo gráfico -varios invasores + MATAR

May 27th, 2015
731
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *-----------------------------------------------------------
  2. * Title      :LETTER INVADER MODO GRÁFICO (VARIOS INVASORES)
  3. * Written by :Fulgencio
  4. * Date       :05/2015
  5. * Description:Sistema de representación invasores a partir de la información
  6. *             contenida en una estructura de datos almacenada en memoria
  7. *             Se añade un algoritmo para matar y una prueba del mismo
  8. *-----------------------------------------------------------
  9.     ORG    $1000
  10. START:                  ; first instruction of program
  11.             MOVE.L #200,D7 *Contador para bucle
  12.             JSR MUESTRA    *Mostrar invasores
  13. REP
  14.             JSR DELAY
  15.             JSR AVANZA     *Avanza invasores
  16.             JSR MUESTRA            
  17.             SUB #1,D7
  18.             BNE REP   *200 veces y paramos para probar el algoritmo MATA
  19.            
  20.             MOVE.L #INVASORES+28,A1 *apuntamos a cadena del 4º invasor
  21.             JSR MATA  *Matamos al 4º invasor
  22.            
  23.             MOVE.L #200,D7 *Continuamos 200 pasos más
  24. REP2
  25.             JSR DELAY
  26.             JSR AVANZA
  27.             JSR MUESTRA
  28.          
  29.             SUB #1,D7
  30.             BNE REP2
  31.            
  32.             SIMHALT             ; halt simulator
  33.  
  34. MUESTRA
  35.             MOVE.L #INVASORES,A1
  36. BUCLE       MOVE.W (A1)+,D1 *coordenada X
  37.             MOVE.W (A1)+,D2 *coordenada Y
  38.             SUB.W #300,D2   *Hacemos un desplazamiento para que virtualmente empiecen fuera de pantalla
  39.             BMI NOPINTA     *mientras sea negativo, el invasor queda fuera de pantalla
  40.             CMP.B #0,(A1)   *Si la cadena es NULL, el invasor está muerto y no se dibuja
  41.             BEQ NOPINTA
  42.            
  43.             MOVE.L #95,D0
  44.             TRAP #15        *pinta el invasor en X,Y
  45. NOPINTA            
  46.             ADD.L #4,A1 *APUNTA AL SIGUIENTE INVASOR
  47.             CMP.L #FININV,A1
  48.             BNE BUCLE
  49.             RTS      
  50.            
  51. AVANZA      MOVE.L #INVASORES,A1
  52. BUCLEA      *ADD.W #1,(A1)  *incremento X (opcional y podría ser aleatorio)
  53.             ADD.W #1,2(A1) *incremento Y (2º Word)
  54.  
  55.             ADD.L #8,A1 *cada invasor ocupa 8 bytes
  56.             CMP.L #FININV,A1
  57.             BNE BUCLEA
  58.             RTS      
  59.            
  60. DELAY       MOVEM.L D0-D1,-(A7)
  61.             MOVE.L #23,D0
  62.             MOVE.L #2,D1
  63.             TRAP #15
  64.             MOVEM.L (A7)+,D0-D1            
  65.             RTS
  66.                        
  67. MATA        *Suponemos que A1 apunta a la cadena del invasor que hay que matar
  68.             MOVEM.L D0-D2,-(A7)
  69.             MOVE.L #21,D0
  70.             MOVE.L #0,D1 *Selección texto negro
  71.             MOVE.L #0,D2
  72.             TRAP #15
  73.            
  74.             MOVE.L #95,D0
  75.             MOVE.W -4(A1),D1 *coordenada X
  76.             MOVE.W -2(A1),D2 *coordenada Y
  77.             SUB.W #300,D2
  78.             TRAP #15 *Pinta en negro para borrar invasor
  79.            
  80.             MOVE.B #0,(A1) *anula la cadena para matarlo
  81.  
  82.             MOVE.L #21,D0
  83.             MOVE.L #$FFFFFF,D1 *Repone texto a blanco
  84.             MOVE.L #0,D2
  85.             TRAP #15
  86.             MOVEM.L (A7)+,D0-D2
  87.             RTS
  88.  
  89. * Put variables and constants here
  90.             ORG $5000
  91. * El formato de los invasores es X.W(2),Y.W(2),cadena(4), en total 8 bytes cada uno
  92. INVASORES DC.W 100,100 *X1,Y1
  93.           DC.B '123',0
  94.           DC.W 150,200 *X2,Y2
  95.           DC.B '456',0
  96.           DC.W 300,250 *X3,Y3
  97.           DC.B '789',0
  98.           DC.W 400,300 *X4,Y4
  99.           DC.B '321',0 *sustituyendo un NULL por el caracter '3' [DC.B 0,'21',0] será un invasor muerto
  100. FININV
  101.     END    START        ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement