Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------------------------
- * Title :
- * Written by : FULGENCIO
- * Date :
- * Description: Este ejemplo imprime en pantalla una imagen almacenada
- * en la memoria con las 3 componentes de color de cada
- * pixel en el rorden BBGGRR y ordenados de izquierda a derecha
- * y de arriba a abajo. La imagen definida con INCBIN "archivo.raw"
- * El archivo se puede crear con IrfanView guardando en formato raw
- * (Interleaved y ordenación BBGGRR)
- *-----------------------------------------------------------
- INIX EQU 100
- INIY EQU 100
- SIZEX EQU 64
- SIZEY EQU 64
- ORG $1000
- START: ; first instruction of program
- 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 recuperar su valor original
- *cada vez que se procesa una nueva línea 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
- SIMHALT ; halt simulator
- * Put variables and constants here
- IMAGEN
- INCBIN "minilena.raw"
- END START ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement