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.

miércoles, 20 de noviembre de 2019

Pintando en la pantalla con la CPU

Tenia intención de hacer una explicación del funcionamiento del Blitter pero he pensado que quizás venia bien dar un paso intermedio y pintar usando la CPU.

Vamos a mostrar un gráfico que he incluido en el mismo fuente y lo vamos a copiar a pantalla.
En este ejemplo vamos a usar un solo plano por lo que preparemos los registros para ello tal como explicamos en la entrada anterior.

La variable NUMPLANES será 1.
El registro BplCon0 que está en la copperlist valdrá $1200.

Ahora reservamos memoria chip para un solo plano.
En la etiqueta Screen pondremos:
         ds.b  40*256 (40 bytes * 8 bits cada byte = 320 pixels *256 lineas)

Por último ponemos los registro de color 0 y color 1 en la copperlist con los valores que queramos (en este caso color 0 = negro y color 1 = blanco).

Y ya por fin vamos a copiar el gráfico que tenemos en el source

con estas lineas de código que tenemos en _Main:

Teniendo en cuenta que nuestro bitplano esta "limpio", o sea, lleno de ceros, cuando copiamos el gráfico los 1 de este serían representados por el Color 1.
El loop tiene 16 iteraciones pues el gráfico ocupará 16 lineas de alto.

En cada move.w (a0)+,(a1)+  movemos 16 bits del gráfico a la pantalla y a la vez avanzamos un word en la operación tanto en la dirección del gráfico como en la de la pantalla.

Después añadimos 38 bytes a la dirección de la pantalla. Hacemos esto para pintar en la siguiente linea. Si una linea tiene 40 bytes y hemos pintado y avanzado 2 bytes faltan 38 hasta la siguiente linea.

Esto no hay que hacerlo en la dirección del gráfico pues tenemos los datos preparados de forma continua, sin saltos.

Quedemonos con un concepto de esto. El gráfico tiene un modulo igual 0 y la pantalla en este caso igual a 38. Son cosas que tendremos que entender para cuando hagamos el primer Blitazo. Haremos este mismo ejemplo pero con el Blitter.

Pongo el source completo que siempre aclara las cosas.

lunes, 18 de noviembre de 2019

Mostrando una imagen

En la entrada anterior pudimos al fin montar nuestra copperlist ademas de reservar memoria gráfica para nuestra pantalla de visualización, pero seguimos sin ver nada por nuestro monitor.
Pues vamos a visualizar un gráfico que hayamos creado con DPaint, Ppaint o similares.

viernes, 15 de noviembre de 2019

CopperList

En la anterior entrada vimos como montar el esqueleto de nuestro programa con SkyInit y decidimos dejar para el siguiente capitulo el montaje de la CopperList.

¿Pero que es una copperlist? Pues no es mas que una serie de instrucciones que son ejecutadas por el copper, un chip que esta dentro del Agnus del Amiga.
El copper solo tiene 3 instrucciones (Wait, Move y Skip) pero no vamos a centrarnos de momento en su funcionamiento si no en como hacer que el copper trabaje.

miércoles, 14 de agosto de 2019

Sky Init

SkyInit

El Amiga es una máquina alucinante. Durante años hemos visto todo lo que es capaz. Solo cuando te pones a programarla te das cuenta de que tambien en una máquina caprichosa y hay que entenderla muy bien.
La inmensa mayoría de juegos, demos e intros, para sacar el máximo provecho de su arquitectura, lo que hacen es lo que comunmente llamamos "matar el sistema".
Básicamente es tener el control de la máquina desactivando DMAs innecesarios, interrupciones y dejando la maquina a nuestra merced.
Esto tiene consecuencias como que no podremos usar parte de las librerias del AmigaOS pero dará mayor velocidad a nuestro programa.