Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *----------------------------------------------------------------------------------------
- * Title :PINTARAW
- * Written by :Fulgencio
- * Date :05/2015
- * Description:Este ejemplo sirve para representar en pantalla una imagen cuya información
- * está almacenada en memoria en formato RAW. Dicha información se introduce
- * en la memoria mediante un archivo binario que se puede obtener a partir de
- * una imagen con algún conversor de archivos capaz de guardar en formato raw
- * a 3 bytes por pixel, sin cabecera y en orden BGR. El programa IrfanView es
- * una de las opciones gratuitas para poder guardar una imagen en ese formato
- *
- *----------------------------------------------------------------------------------------
- ORG $1000
- INIX EQU 100
- INIY EQU 100
- SIZEX EQU 48
- SIZEY EQU 138
- START: ; first instruction of program
- MOVE.L #81,D0
- MOVE.L #$FFFFFF,D1 *Color de relleno blanco
- TRAP #15
- MOVE.L #89,D0
- MOVE.L #0,D1
- MOVE.L #0,D2
- TRAP #15 *Rellena toda la pantalla de blanco
- MOVE.L #IMAGEN,A1 *A1 debe apuntar al principio de la imagen
- MOVE.L #INIX,D1 *Coordenadas iniciales
- MOVE.L #INIY,D2
- MOVE.L #SIZEX+INIX,D3 *Coordenada X final
- MOVE.L #SIZEY+INIY,D4 *Coordenada Y final
- JSR PINTARAW
- SIMHALT ; halt simulator
- PINTARAW *Esta subrutina visualiza una imagen RAW almacenada en memoria en formato 3 bytes/pixel
- *uno por cada color en el orden BGR. Utiliza D1 y D2 para recorrer las coordenadas de
- *todos los pixeles que componen la imagen y selecciona el color mediante el registro D5,
- *cuyo valor se genera a partir de los 3 bytes de color que se leen de la memoria.
- *input: D1,D2: Coordenada inicial X,Y a situar la imagen.
- * D3,D4: Coordenada X,Y final donde acaba la imagen
- * A1 : Apunta al buffer de memoria donde está la información del archivo raw
- MOVEM.L D2-D5/A1,-(A7) *Guarda los registros que modifica
- MOVE.L D1,-(A7) *Guarda el D1 como último valor para poder retomar su valor original
- *cada vez que se procesa una línea completa de la imagen
- NUEVAY
- MOVE.L (A7),D1 *Repone D1 con el valor inicial. Lo coge de la pila sin extraerlo (sin postincremento)
- NUEVAX
- CLR.L D5
- MOVE.B (A1)+,D5 *Coge el azul
- LSL.L #8,D5 *Lo pasa al byte siguiente
- MOVE.B (A1)+,D5 *Coge el verde
- LSL.L #8,D5 *Pasa al byte siguiente
- MOVE.B (A1)+,D5 *Con el rojo, quedan capturados el RGB en D5 como $00BBGGRR
- JSR COLORD5
- JSR PIXEL
- ADD.L #1,D1 *Avanza coordenada X
- CMP.L D3,D1 *¿Ha llegado al tope de X?
- BNE NUEVAX *No ha llegado, entonces mantiene
- ADD.L #1,D2 *Avanza coordenada Y
- CMP.L D4,D2 *¿Ha llegado al final de la imagen?
- BNE NUEVAY *Así repondrá la coordenada X y procesará siguiente línea
- MOVE.L (A7)+,D1
- MOVEM.L (A7)+,D2-D5/A1 *Repone registros desde la pila
- RTS
- COLORD5 *Subrutina que activa como color de tinta el almacenado en el registro D5
- MOVEM.L D0-D1,-(A7)
- MOVE.L #80,D0
- MOVE.L D5,D1
- TRAP #15
- MOVEM.L (A7)+,D0-D1
- RTS
- PIXEL *Subrutina que pinta el pixel correspondiente con el color de tinta
- *previamente activado
- MOVEM.L D0-D2,-(A7)
- MOVE.L #82,D0
- *D1 y D2 ya los tenemos definidos como X e Y al llamar a la función
- TRAP #15
- MOVEM.L (A7)+,D0-D2
- RTS
- * Put variables and constants here
- IMAGEN
- INCBIN "sol.raw" *Así se introducen directamente en memoria los valores del archivo binario
- *El ejemplo sol.raw se puede descargar desde https://poliformat.upv.es/x/psb8ZK
- END START ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement