Forth en Retro entre amigos
Descripción del contenido de la página
Comentario sobre una mención a Forth en el audioprograma Retro entre amigos
En su sección Misterios de 8 bits o menos del episodio 7x07 del audioprograma Retro entre amigos (2019-03-03), McLeod_Ideafix ha hecho una estupenda e interesantísima exposición titulada «El lenguaje perdido en el Spectrum». Nada más leer el título en el RSS del programa sospeché de qué se trataba... y acerté: el calculador de la ROM.
La ROM del ZX Spectrum tiene una pequeña máquina virtual basada en pila (una pila propia, no la pila del procesador), para operar fácilmente con números en coma flotante. Al llamar a una rutina de la ROM, esta interpreta los octetos siguientes a la llamada como comandos de la máquina virtual, que va llamando a las rutinas correspondientes. La pila de esta pequeña máquina tiene capacidad para unos pocos elementos, que ocupan cada uno cinco octetos. Entre los comandos de la máquina están los operadores y funciones matemáticos, los manipuladores de la pila y algunas instrucciones de salto condicional que permiten crear algoritmos. Esto permite al intérprete de BASIC (o a programas en código máquina) operar con números reales de forma fácil y compacta.
Aunque McLeod lo llama Forth, en realidad no es tal, pero la analogía es correcta. Es una rutina que funciona de forma muy parecida a una parte de una máquina virtual de Forth, en concreto al intérprete interior de comandos, pero es muy limitada y está diseñada específicamente para una aplicación muy concreta.
Por un lado, el recurso de hacer una rutina así no es excepcional cuando se programa en ensamblador en máquinas de ocho bitios, y se da incluso en la programación de juegos, para simplificar, compactar y abstraer algoritmos, escribiéndolos como listas de comandos de la máquina virtual en lugar de hacerlo directamente en ensamblador. Pero por otro lado es cierto que la semejanza con Forth no es casual: el autor de la ROM de ZX Spectrum, Steven Vickers, era consciente de las ventajas de Forth, y de hecho poco tiempo después formó parte del equipo que diseñó y fabricó el Jupiter ACE (1982), un micro con Z80 que llevaba un Forth en su ROM en lugar del habitual BASIC.
En 2015 escribí para Solo Forth un módulo de coma flotante que utiliza precisamente las llamadas al calculador para implementar la mayoría de las palabras estándar correspondientes, incluyendo el uso de su pila. Era una tarea ineludible, habiendo una rutina tan útil ya escrita en la ROM de la máquina:
Lógicamente, ese módulo se apoyaba en otro que escribí simultáneamente como una capa inferior e independiente, un conjunto de palabras para utilizar directamente el calculador de la ROM dentro de palabras de Forth:
La sección de McLeod empieza en el minuto 39 del programa, que se puede escuchar es estos enlaces de Ivoox: