Advertisement
Guest User

Untitled

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