En su sección _Misterios de 8 bits o menos_ del episodio 7x07 del audioprograma
_Retro entre amigos_ (2019-03-03), McLeod_Ideafix (que quizá siga a la escucha
en esta lista) ha hecho una estupenda e interesantísima explicació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. Podéis ver el código en Forth en GitHub:

https://github.com/programandala-net/solo-forth/blob/master/src/lib/math.floating_point.rom.fs
 

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:

https://github.com/programandala-net/solo-forth/blob/master/src/lib/math.calculator.fs

La sección de McLeod empieza en el minuto 39 del programa. La podéis escuchar
es estos enlaces de Ivoox:

Escucha en línea:
http://www.ivoox.com/retro-entre-amigos-episodio-7x07-audios-mp3_rf_33024176_1.html

Descarga directa del audio:
http://www.ivoox.com/retro-entre-amigos-episodio-7x07_mf_33024176_feed_1.mp3


-- 
Marcos Cruz
http://programandala.net

Responder a