Advertisement
SMicro

PINTA_miniLena_RAW

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