sábado, 27 de noviembre de 2021

WinUAE Debugger

No vamos a descubrir ahora que WinUAE es una excelente herramienta para desarrollar para Amiga.

En cada versión la emulación es mas precisa y fiel, por lo que podemos fiarnos de su comportamiento cada vez mas. Eso si...no guardéis vuestros Amigas pues siempre hay que verificar en uno real.


Pero a parte de esto, WinUAE trae un depurador que a veces nos puede sacar de un atolladero mientras estamos programando. Al principio puede resultar confuso pero enseguida le vamos a sacar provecho.

martes, 9 de marzo de 2021

Definir el tamaño de pantalla


Antes siquiera de empezar a pintorrojear en  pantalla  debemos plantearnos que tamaño va a tener esta pues, entre otras cosas, afecta al rendimiento de nuestro Amiga.

Generalmente, en una pantalla PAL las dimensiones son de 320x256 en baja resolución, 640x256 en alta o tener modos entrelazados de 512 pixels de altura.
Pero esas dimensiones no son fijas. Podemos tener otro tipo de dimensiones como 320x200, 336x210 o la que mejor nos convenga.

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.