Viernes, 3 de octubre de 2025

Hace casi un año y medio que no escribo por aquí, pero la vida es como es y no deja demasiado tiempo para las aficiones. Aunque sí que es cierto que desde el mes pasado he estado actualizando algunas cosas del blog y seguro que habéis visto algunas imágenes de la nueva mascota: Neko-Chan. Un "gatete" muy juguetón y al que le encanta la retroinformática.

El caso es que una buena forma de disfrutar de la retroinformática sería combinarla con mi trabajo diario... y eso vino de casualidad cuando un estudiante me propuso realizar como su proyecto de fin de grado un compilador cruzado que produjese código Z80. ¡Me apunto!

Desde entonces, ha estado trabajando en él y hoy mismo se ha defendido el proyecto con un éxito rotundo. El resultado es un nuevo lenguaje de programación que permite generar código Z80 a partir de un código fuente en un lenguaje similar a Pascal, aunque con algunos recortes: el lenguaje zPascal.

Inspirado en el estándar de Pascal y tomando algunas características de Turbo Pascal, zPascal incluye un IDE (escrito en Java y ejecutable en Windows, Linux y Mac) con un editor con resaltado de sintaxis que nos permite crear un programa fácilmente y luego compilarlo a Z80 para poder ejecutarlo. Introduce una novedad interesante: el compilador traduce el fuente en zPascal a un listado de código fuente en ensamblador de Z80. Esto permite ensamblar (mediante el Glass z80 Assembler), de Lauren Holst, Grauw) en diferentes direcciones de memoria y, además, las bibliotecas de rutinas en tiempo de ejecución (RTL) se incluyen únicamente cuando se necesitan. Así, la biblioteca de rutinas comunes y de enteros siempre se ensambla con el programa, pero las de Strings, Reales y Trigonometría solo se incluyen si el programa en zPascal las necesita. De esta forma se reduce bastante el tamaño del programa a cargar en el Z80.


Aquí podemos ver el IDE de zPascal con un sencillo programa de prueba.

Pero claro... el código en Z80 debe ser ejecutado en alguna máquina real para poder probarlo. Actualmente el IDE es capaz de generar un TZX para cargarlo en un ZX Spectrum y también una ROM de 48Kb con mapper ASCII-16 para poder ejecutarlo en un MSX de cualquier generación, ya que utiliza el modo de vídeo SCREEN 1. En el futuro está previsto añadir soporte para más formatos y máquinas basadas en el Z80.


Esto supone una abstracción del hardware concreto de la máquina donde se ejecuta e implica que solo se pueden crear aplicaciones "de consola". Aunque zPascal también permite la inclusión de ensamblador inline, lo que permitiría escapar de esas restricciones, aunque el código ya no sería portable entre diferentes máquinas.

De igual manera, el programa ya compilado puede ejecutarse directamente en un emulador. Actualmente se da soporte para OpenMSX y ZX 48K, cuya configuración puede personalizarse, pero no se descarta dar soporte a otros emuladores en el futuro.


En definitiva, un proyecto interesante que permite generar código y ejecutarlo en diferentes máquinas. En unas semanas la memoria del proyecto estará disponible públicamente para su lectura (muy recomendada) y también se podrá acceder al compilador. ¡¡Esperamos que os guste!!