Quantum Forth Z80

Descripción del contenido de la página

Ensamblador del microprocesador Z80, escrito en Forth para QL.

Etiquetas:

Tras los primeros dos años de desarrollo del proyecto Finen per Imago, una aventura conversacional escrita en ensamblador de Z80 para ZX Spectrum, la propia máquina se me quedó pequeña como herramienta de desarrollo. Entonces usaba el ensamblador GENS3, parcheado para poder usar las minicintas (microdrives) de la Interface 1. Pero con los meses el código fuente creció mucho y el editor interno de GENS3 empezó a no ser práctico. Era 1988.

La solución que se me ocurrió, como de costumbre, fue reinventar la rueda: escribir mi propio ensamblador. En 1987 había comprado una QL de segunda mano a un compañero de trabajo y ya había adquirido mucha experiencia con ella. La QL, con todas sus peculiaridades y caprichos, era una máquina excepcional para su tiempo; no hace falta decir que era también mucho más potente y más rápida que la ZX Spectrum; y, lo más importante, disponía de muchas aplicaciones profesionales para trabajar con comodidad, por ejemplo buenos editores de texto. Era mucho más sensato escribir un ensamblador de Z80 para la QL que para la ZX Spectrum.

El primer prototipo de ensamblador lo empecé a escribir en Forth. La inmediatez y la elegancia de Forth hacían la idea muy atractiva. Por supuesto no se trataría de un ensamblador convencional que compilara código fuente de un fichero de texto, sino de un ensamblador al estilo de Forth: Los nemónicos del ensamblador serían palabras en Forth y el código fuente del programa en ensamblador sería un programa en Forth como cualquier otro. Sólo en Forth puede hacerse algo así.

Trabajé con el Forth de Computer One, el único que tenía entonces para la QL. No me resultaba cómodo porque obligaba a escribir el código fuente, con su propio editor, en pantallas (el sistema tradicional de Forth, bloques de 1024 octetos mostrados en 16 líneas de 64 caracteres). Las pantallas son una herencia de los comienzos de Forth, cuando el sistema funcionaba en solitario en la computadora, es decir, Forth era el propio sistema operativo, y guardaba el código fuente directamente en bloques de un kibiocteto en los discos, sin sistema de ficheros. Es una idea excelente que funciona estupendamente pero que, cuando Forth es un programa más bajo un sistema operativo, no tiene mucha utilidad y quita flexibilidad. Yo prefiero escribir mis programas Forth en ficheros de texto ordinarios bajo el sistema operativo anfitrión, con el editor que yo elija.

No estoy seguro de haber terminado el programa en su día, aunque un examen tranquilo del código fuente me daría la respuesta. Sí recuerdo que hice pruebas de compilación y que funcionaba bien. No obstante tuve dos importantes dificultades:

En primer lugar, me resultó imposible encontrar una forma sencilla y elegante de no hacer dos pasadas al código fuente para compilarlo. Los ensambladores necesitan hacer dos pasadas para calcular correctamente las etiquetas y los saltos, pero por algún motivo me empeñé en evitarlo.

En segundo lugar, la sintaxis del lenguaje ensamblador no podría ser estándar (por ejemplo, los registros deberían preceder a los comandos). Sería posible hacer un compilador en Forth que interpretara la sintaxis normal del ensamblador, pero eso supondría no usar el propio intérprete de Forth para interpretar el ensamblador...; entonces la tarea deja de ser un desafío divertido al tiempo que su complejidad aumenta espectacularmente. Programar en Forth para programar como se hace en los demás lenguajes no tiene gracia.

Al final aparqué la idea de escribir el programa en Forth y empecé de cero en SuperBASIC con un enfoque más convencional. El resultado se llamó QL80 y fue mi herramienta principal de trabajo durante varios años para escribir en Z80 para ZX Spectrum.

Código fuente

Conservo tres versiones de Quantum Forth Z80. Cada una de ellas usa un enfoque y un método diferentes. Todas son de 1988, pero extrañamente no están fechadas con más detalle ni numeradas, por lo que el número de versión que uso lo he está puesto con posterioridad, atendiendo al nivel de sofisticación del enfoque usado en cada versión.

El código fuente de cada versión puede examinarse en las siguientes páginas:

Descargas

Los ficheros originales estaban escritos para Computer One Forth, en formato de fichero de bloques de Forth, y con la codificación de caracteres de QL. Para facilitar su publicación y reutilización, los he convertido en ficheros de texto de formato estándar y codificados con UTF-8.