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:
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