Volver al Z80; juegos de caracteres en ZX Spectrum; Outlet

La rutina para imprimir textos en varios idiomas en Alien-A no funcionaba. El algoritmo parecía correcto, pero al parecer la dirección y la longitud de la cadena no se calculaban correctamente. Por más que revisaba el código, no encontraba dónde podía estar el fallo.

Algunas veces hay que dejar reposar la parte consciente de la mente y dejar que el subconsciente haga su trabajo; también se puede llamar «descansar». Con la mente fresca, salta a la vista enseguida que el siguiente código no es la mejor manera de multiplicar el registro A por 3:

ADD A,A
ADD A,A

Efectivamente, eso no suma dos veces el registro al registro, sino que lo duplica dos veces, es decir, lo multiplica por cuatro. Esto está mucho mejor:

LD B,A
ADD A,B
ADD A,B

Por si fuera poco, incrementar un registro doble una sola vez no es la mejor manera de avanzar dos octetos en una tabla, como ingenuamente pretendía:

INC HL

Mucho mejor así:

INC HL
INC HL

Con esos dos sencillos cambios todo funcionó como debía. Estos dos errores tan tontos son efectos divertidos de volver a programar en ensamblador de Z80 después de varios años. La parte positiva es que el reencuentro es muy estimulante. La sensación de tener la máquina completamente en las manos y poder hacer con ella lo que quieras, sin límites a la creatividad, sólo la proporcionan el ensamblador y el Forth.

Por otra parte, me está costando encontrar un programa para diseñar juegos de caracteres de la ZX Spectrum. He probado varios en los últimos días, incluido el que lleva integrado el programa de diseño The Artist II.

Al final he encontrado uno que me parece bueno: Font Gen. Apareció en un número de la revista Outlet (una publicación electrónica para ZX Spectrum que se distribuía inicialmente en cartuchos de microductora, y poco despúes en disquetes de Plus D o DISCiPLE, y opcionalmente en disquetes de +3). El programa sólo tiene la pega de que carga y graba sólo en discos de Plus D o DISCiPLE (o en microductoras de Sinclair, pues usa su sintaxis), lo que trabajando con un emulador no es tan cómodo. De modo que lo modificaré para añadirle la opción de usar cintas.

De todas formas no creo que haya ninguna utilidad de este tipo que haga lo que yo necesitaría: trabajar con todos los caracteres, del 32 al 255, y tratarlos todos por igual (sin caracteres gráficos de bloques ni gráficos definidos por el usuario, ni comandos del BASIC). Esto me permitiría crear un juego de caracteres estándar de 8 bitios, que necesito para algunos proyectos. Y, ya puestos, ¿por qué no que trabaje con dos juegos de caracteres simultáneos? Así sería posible pasar caracteres de uno a otro. ¿Y si permitiera además cargar cualquier rango de caracteres o de gráficos en cualquier posición de carácter? Sería la herramienta definitiva.

Pensaré en ello, miraré el código del programa, y si veo factible hacer una nueva versión sin demasiadas complicaciones, añadiré la idea a mi lista de proyectos. Aunque «complicaciones» y «programación» son palabras hermanas.

Por cierto, Outlet ha sido un descubrimiento reciente y muy grato: una publicación electrónica para ZX Spectrum que sacó 148 números durante 12 años, con muchísimo material de calidad. Hay muchos tesoros en la lista de todo el material publicado por Outlet.