Asteroids: mapa de memoria y librerías mejoradas

La versión final del proyecto, que es la versión 23, tiene esta distribución en memoria. Nos la da CBM prg Studio al ensamblar:

Asteroids - Asteroids mapa memoria.PNG

Es decir, el juego consta de cinco segmentos de memoria:

  • $0801 – $080c, 12 bytes: Este es el cargador BASIC.
  • $0810 – $1be2, 5.075 bytes: Este es el grueso del juego, librerías incluidas.
  • $3000 – $32ff, 768 bytes: Es la definición de los 12 “frames” para los sprites.
  • $3800 – $4fcf, 6.096 bytes: Son los caracteres personalizados (4 KB) y las pantallas (2 x 1 KB).
  • $c000 – $c094, 149 bytes: Es un programa de prueba para probar la conversión de codificación binaria a BCD. Se podría quitar del proyecto.

En definitiva, vemos como un juego sencillo ya casi ocupa 12 KB. Por supuesto, se podría reducir un poco, por ejemplo, sustituyendo la pantalla de juego (1 KB) por la impresión de una simple línea, quitando librerías o rutinas de librería que no se utilizan, o replanteando el uso de los caracteres personalizados (4 KB).

Pero la idea subyacente es la misma: el C64 tiene muy poca memoria (64 KB, con partes de RAM y ROM solapadas), y para hacer virguerías hay que echarle mucho ingenio, y jugar con los diferentes mapas de memoria posibles. Aquí hemos utilizado el mapa estándar.

Por lo demás, durante el proceso no sólo hemos desarrollado un juego. También hemos mejorado unas librerías. Partíamos de las librerías disponibles aquí. Y, como parte del proceso, hemos mejorado las siguientes librerías:

Librería Rutina / variable Mejora
LibChars.asm configuraColores Admite color del borde
LibSprites.asm posicionaSprite Admite coordenada X de 9 bits
  configuraAvanzada Permite expandir y “desexpandir”
LibText.asm pintaHex2 Permite pintar un número hexadecimal en una posición de pantalla concreta
  pintaCadena3 Permite pintar una cadena de caracteres en una posición de pantalla concreta
  biteToBCD Permite convertir un byte en binario a su codificación BCD
  bitesToBCD Idem con dos bytes
LibSonido.asm offsetVoces Renumera las voces como 0, 1 y 2
LibMath.asm maximo Nueva rutina para calcular el máximo de dos números
  minimo Nueva rutina para calcular el mínimo de dos numeros

Las nuevas librerías quedan disponibles aquí.

Como se habrá podido ver, el uso de unas librerías de rutinas (o macros) simplifica mucho el desarrollo de aplicaciones. Hacerlo desde cero hubiera sido mucho más complejo. Cada programador debe buscar las librerías que sean de su agrado, o desarrollar unas propias.


Nuevas librerías: Lib – V2

Deja un comentario