Advertisement
SMicro

Pinta bitmap en formato RAW

May 21st, 2015
823
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *----------------------------------------------------------------------------------------
  2. * Title      :PINTARAW
  3. * Written by :Fulgencio
  4. * Date       :05/2015
  5. * Description:Este ejemplo sirve para representar en pantalla una imagen cuya información
  6. *             está almacenada en memoria en formato RAW. Dicha información se introduce
  7. *             en la memoria mediante un archivo binario que se puede obtener a partir de
  8. *             una imagen con algún conversor de archivos capaz de guardar en formato raw
  9. *             a 3 bytes por pixel, sin cabecera y en orden BGR. El programa IrfanView es
  10. *             una de las opciones gratuitas para poder guardar una imagen en ese formato
  11. *            
  12. *----------------------------------------------------------------------------------------
  13.     ORG    $1000
  14.    
  15. INIX    EQU 100
  16. INIY    EQU 100
  17. SIZEX   EQU 48
  18. SIZEY   EQU 138
  19.  
  20.    
  21. START:                  ; first instruction of program
  22.  
  23.     MOVE.L #81,D0
  24.     MOVE.L #$FFFFFF,D1  *Color de relleno blanco
  25.     TRAP #15
  26.    
  27.     MOVE.L #89,D0
  28.     MOVE.L #0,D1
  29.     MOVE.L #0,D2
  30.     TRAP #15            *Rellena toda la pantalla de blanco
  31.  
  32.  
  33.     MOVE.L #IMAGEN,A1   *A1 debe apuntar al principio de la imagen
  34.     MOVE.L #INIX,D1     *Coordenadas iniciales
  35.     MOVE.L #INIY,D2
  36.     MOVE.L #SIZEX+INIX,D3    *Coordenada X final
  37.     MOVE.L #SIZEY+INIY,D4    *Coordenada Y final
  38.     JSR PINTARAW
  39.     SIMHALT             ; halt simulator    
  40.    
  41.  
  42. PINTARAW   *Esta subrutina visualiza una imagen RAW almacenada en memoria en formato 3 bytes/pixel
  43.            *uno por cada color en el orden BGR. Utiliza D1 y D2 para recorrer las coordenadas de
  44.            *todos los pixeles que componen la imagen y selecciona el color mediante el registro D5,
  45.            *cuyo valor se genera a partir de los 3 bytes de color que se leen de la memoria.
  46.  
  47.            *input: D1,D2: Coordenada inicial X,Y a situar la imagen.
  48.            *       D3,D4: Coordenada X,Y final donde acaba la imagen
  49.            *       A1   : Apunta al buffer de memoria donde está la información del archivo raw
  50.  
  51.     MOVEM.L D2-D5/A1,-(A7)  *Guarda los registros que modifica
  52.     MOVE.L D1,-(A7)         *Guarda el D1 como último valor para poder retomar su valor original
  53.                             *cada vez que se procesa una línea completa de la imagen
  54.  
  55. NUEVAY  
  56.     MOVE.L (A7),D1    *Repone D1 con el valor inicial. Lo coge de la pila sin extraerlo (sin postincremento)
  57. NUEVAX
  58.     CLR.L D5  
  59.     MOVE.B (A1)+,D5   *Coge el azul
  60.     LSL.L #8,D5       *Lo pasa al byte siguiente
  61.     MOVE.B (A1)+,D5   *Coge el verde
  62.     LSL.L #8,D5       *Pasa al byte siguiente
  63.     MOVE.B (A1)+,D5   *Con el rojo, quedan capturados el RGB en D5 como $00BBGGRR
  64.     JSR COLORD5
  65.     JSR PIXEL
  66.     ADD.L #1,D1  *Avanza coordenada X
  67.     CMP.L D3,D1 *¿Ha llegado al tope de X?
  68.     BNE NUEVAX *No ha llegado, entonces mantiene
  69.     ADD.L #1,D2 *Avanza coordenada Y
  70.     CMP.L D4,D2 *¿Ha llegado al final de la imagen?
  71.     BNE NUEVAY  *Así repondrá la coordenada X y procesará siguiente línea
  72.    
  73.     MOVE.L (A7)+,D1
  74.     MOVEM.L (A7)+,D2-D5/A1 *Repone registros desde la pila
  75.     RTS
  76.  
  77.  
  78.  
  79. COLORD5 *Subrutina que activa como color de tinta el almacenado en el registro D5
  80.         MOVEM.L D0-D1,-(A7)
  81.         MOVE.L #80,D0
  82.         MOVE.L D5,D1
  83.         TRAP #15
  84.         MOVEM.L (A7)+,D0-D1
  85.         RTS
  86.        
  87. PIXEL   *Subrutina que pinta el pixel correspondiente con el color de tinta
  88.         *previamente activado
  89.         MOVEM.L D0-D2,-(A7)
  90.         MOVE.L #82,D0
  91.      *D1 y D2 ya los tenemos definidos como X e Y al llamar a la función
  92.         TRAP #15
  93.         MOVEM.L (A7)+,D0-D2
  94.         RTS
  95.        
  96. * Put variables and constants here
  97. IMAGEN
  98.       INCBIN "sol.raw" *Así se introducen directamente en memoria los valores del archivo binario
  99.       *El ejemplo sol.raw se puede descargar desde https://poliformat.upv.es/x/psb8ZK
  100.     END    START        ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement