domingo, 1 de diciembre de 2019

Pintando en la pantalla con el Blitter

Vimos en la entrada anterior como pintar un pequeño gráfico en nuestra pantalla usando la CPU y como ya dijimos, vamos a hacer el mismo ejercicio pero usando el Blitter del Amiga.



El Blitter es un chip que es muy eficiente copiando regiones de memoria (chip) de una zona a otra.
Es por eso que lo primero que tenemos que hacer es colocar nuestro gráfico en memoria chip.
En el ejemplo anterior con la CPU lo pusimos en una sección DATA pues el microprocesador puede copiar datos de cualquier tipo de memoria pero en el caso del Blitter lo cambiaremos a
        section datos, data_c

Después cambiamos la parte en que la CPU se ocupaba de copiar el gráfico en _Main:



Por la del Blitter



Vayamos explicando cada cosa.
Antes de operar con el blitter debemos asegurarnos de que esta libre. De ahí la comprobación en .waitblitter.

Bltcon0 tiene un valor que hace que la operación sea una simple copia de lo que hay en BltApth en BltDpth.

En BltAMod ponemos cuantos bytes tenemos que saltar una vez terminada una linea para alcanzar la siguiente linea del gráfico.
Como nuestro gráfico esta preparado de tal manera que es lineal el valor del modulo es 0.

BltDMod es lo mismo pero con la pantalla de destino.
En este caso como nuestro gráfico tiene 1 word de ancho (2 bytes) y la pantalla tiene 40 bytes pues al copiar una linea de gráfico necesitamos saltar 38 bytes en la pantalla para que la siguiente linea quede justo debajo.

BltApth tiene la dirección de memoria del gráfico a copiar.
BltDpth la dirección de memoria de nuestra pantalla.

Una vez que ya tenemos todos los registros listos es cuando llamamos a BltSize.
Nada mas introducimos los datos a BltSize comienza el proceso de copia.

Como ya sabemos el Blitter trabaja en words por lo que a BltSize le tenemos que decir cuantos words por linea va a copiar y cuantas lineas.
En lineas generales hacemos:

move.w #16<<6+1,BltSize+CustomBase     ;tamaño del gráfico a pintar

16<<6 = 16 lineas que tiene el gráfico y el +1 es un Word que tiene cada linea.

Recordemos como era el gráfico:



O sea, 16 puntos por linea (1 word) por 16 lineas.

Como siempre vamos a poner el source completo. Fijaros que se puede descargar desde el mismo enlace de pastebin bajando a Raw.




No hay comentarios:

Publicar un comentario