Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------------------------
- * Title :
- * Written by :
- * Date :
- * Description:
- *-----------------------------------------------------------
- INIX EQU 0
- INIY EQU 0
- SIZEX EQU 512
- SIZEY EQU 512
- ORG $1000
- START: ; first instruction of program
- MOVE.L #FOTO1,A1 *A1 debe apuntar al principio de la imagen
- MOVE.L #FOTO2,A2
- CLR.L D1 *COORD X
- CLR.L D2 *COORD Y
- JSR ROTA
- JSR DIBUJAR *dibuja la foto2
- SIMHALT ; halt simulator
- ROTA *Esta subrutina rota 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 en horizontal
- *las coordenadas de todos los pixeles que componen la imagen, de izquierda a derecha
- *y de arriba a abajo, y la almacena en FOTO2 donde se el recorrido se realiza en
- *vertical, de abajo a arriba y de izquierda a derecha.
- *input: D1,D2: Coordenadas X,Y de la imagen
- * A1 : Apunta al buffer de memoria donde está la información del archivo raw
- * A2 : Apunta al buffer de memoria donde se almacena la imagen rotada
- *SIZEX: Ancho de la imagen original. Corresponderá con el alto de la rotada
- *SIZEY Alto de la imagen origional. Corresponderá con el ancho de la rotada
- MOVEM.L D1-D2/A1-A2,-(A7) *Guarda los registros que modifica
- .NUEVAY
- ADD.L #(SIZEY)*3*(SIZEX-1),A2 *Nos movemos de la primera a la última fila para recorrer las
- *columnas de FOTO2 (A2) en vertical de abajo a arriba
- .NUEVAX *La FOTO1 se recorre de manera normal, por líneas de izquierda a
- *derecha y de arriba a abajo
- MOVE.B (A1)+,(A2)+ *Blue
- MOVE.B (A1)+,(A2)+ *Green
- MOVE.B (A1)+,(A2)+ *Red
- SUB.L #(SIZEY+1)*3,A2 *Retrocedemos a la línea anterior porque avanzamos por columnas
- *Restamos la longitud de una línea más los 3 del pixel que acaba
- *de procesar. Hay que tener en cuenta que en la FOTO2 una línea
- *corresponde a una columna de la FOTO1
- ADD.L #1,D1 *Avanza coordenada X respecto a FOTO1
- CMP.L #SIZEX,D1 *¿Ha llegado al tope de X?
- BNE .NUEVAX *No ha llegado, entonces a la siguiente
- ADD.L #(SIZEY+1)*3,A2 *Retrocedemos la ultima resta pues ahora toca cambio de columna
- *en FOTO2
- CLR.L D1 *Coordenada X repuesta a 0
- ADD.L #1,D2 *Avanza coordenada Y respecto a FOTO2
- CMP.L #SIZEY,D2 *¿Ha llegado al final de la imagen?
- BNE .NUEVAY *Si no, entonces toca procesar la siguiente línea
- MOVEM.L (A7)+,D1-D2/A1-A2 *Repone registros desde la pila
- RTS
- DIBUJAR
- MOVE.L #FOTO2,A2
- MOVE.L #INIX,D1 *Coordenada X inicial
- MOVE.L #INIY,D2 *Coordenada Y inicial
- *La FOTO2 está rotada y por tanto cambiados SIZEX y SIZEY respecto a FOTO1
- MOVE.L #SIZEY+INIX,FINX *Coordenada X final de FOTO2
- MOVE.L #SIZEX+INIY,FINY *Coordenada Y final de FOTO2
- JSR PINTARAW
- RTS
- PINTARAW
- MOVEM.L D2-D5/A2,-(A7) *Guarda los registros que modifica
- MOVE.L D1,-(A7) *D1, ultimo guardado para poder recuperarlo desde la subrrutina
- .NUEVAY
- MOVE.L (A7),D1 *Repone D1 con el valor inicial desde la pila al cambiar de línea
- .NUEVAX
- CLR.L D5
- MOVE.B (A2)+,D5 *Coge el azul
- LSL.L #8,D5 *Lo pasa al byte siguiente
- MOVE.B (A2)+,D5 *Coge el verde
- LSL.L #8,D5 *Pasa al byte siguiente
- MOVE.B (A2)+,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 FINX,D1 *¿Ha llegado al tope de X?
- BNE .NUEVAX *No ha llegado, entonces mantiene
- ADD.L #1,D2 *Avanza coordenada Y
- CMP.L FINY,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/A2 *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
- ORG $1100
- FOTO1 INCBIN "lena.raw"
- FINX DS.L 1
- FINY DS.L 1
- ORG $D0000
- FOTO2 DS.L 2000000
- END START ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement