Forth 5mx
Descripción del contenido de la página
Forth 5mx, un Forth para la computadora Psion 5mx, escrito en OPL+.
Historia del programa
Cuando en 2002 adquirí, de segunda mano, mi primera Psion 5mx enseguida eché en falta un Forth para ella, mi lenguaje de programación favorito.
Tiempo más tarde decidí ponerme manos a la obra y tras muchas búsquedas en la red encontré un pequeño programa escrito en OPL, el lenguaje de programación que la Psion 5mx lleva incorporado: PsiForth. Encontré dos versiones: una sin numerar de diciembre de 1999 firmada por L. Schmidt y con una escueta e incompleta mención a la GPL; y otra numerada como 0.255, de febrero de 2000, que al ejecutarse mostraba como poseedor del copyright a la empresa Integrated Services de Arnhem, Países Bajos. Ningún medio de contacto ni rastro en la red de ambos.
PsiForth no estaba terminado, tenía importantes limitaciones y no pocos errores sin depurar.
En 2005 decidí reescribir en Forth unas herramientas que había programado en Bash para automatizar la creación de páginas XHTML. Por entonces la Psion 5mx era prácticamente mi computadora principal. De hecho el programa en Bash, que inicialmente había creado bajo Debian en mi veterana computadora portátil Olivetti Echos P133, lo adapté para que funcionara bajo el sistema operativo EPOC de la Psion, con el intérprete de Bash proporcionado por epocemx.
Durante más de tres años fui programando al mismo tiempo las herramientas en Forth para crear páginas XHTML y el sistema Forth 5mx, con el que las hacía funcionar. Aquellas herramientas se convirtieron con el tiempo en los programas fhp y ForthCMS, con los que actualmente sigo manteniendo un par de sedes en Internet.
En febrero de 2006 la creciente complejidad del código de Forth 5mx me decidió a empezar a usar OPL+ como lenguaje de programación. En realidad es un preprocesador de OPL que añade funcionalidades nuevas muy útiles (como macros), algunas mejoras en la sintaxis y un entorno de desarrollo.
A finales de 2008 abandoné el desarrollo de Forth 5mx, aunque los últimos retoques son de 2010, y es posible que aún le haga algunos más. Poco a poco había dejado de usarlo para la tarea principal para la que lo escribí, la creación de páginas en Internet, debido a su lentitud; en su lugar usaba Gforth bajo Debian en la computadora Asus Eee.
Aún uso Forth 5mx de vez en cuando, para escribir y probar las primeras versiones de algún programa en Forth, aprovechando la extraordinaria movilidad de la Psion 5mx, programas que después puedo hacer funcionar con Gforth sin apenas hacerle ningún cambio al código.
¿Un Forth rápido para la Psion 5mx?
El sueño de un Forth rápido para la Psion 5mx aún es muy atractivo. Forth es el lenguaje ideal para una computadora como esta. Pero es imposible escribir un Forth rápido en un lenguaje seudocompilado como OPL que ya por sí mismo es lento.
Antes del abandono del desarrollo de Forth 5mx había empezado a trabajar en la reescritura de parte del código en ensamblador del procesador ARM, pero las dificultades de integrar ensamblador con OPL eran muchísimas y nada triviales. Pensé que sería más eficaz empezar desde cero en ensamblador y usar sólo OPL para las operaciones de entrada y salida (pantalla, teclado y ficheros), que en ensamblador eran imposibles de lograr dadas las limitaciones del programa ensamblador y la falta de documentación disponible sobre EPOC (salvo para programar en C++ con un complejo entorno de desarrollo bajo Windows; pero ni C++ ni Windows me interesan). No avancé mucho tampoco en una versión íntegra en ensamblador.
Matt J. Gumbley, con quien contacté para intercambiar impresiones y recibir consejo, ya había intentado escribir una versión de hForth para EPOC, el sistema operativo de la Psion 5mx, y había abandonado la idea debido a las numerosas dificultades técnicas.
Yo estoy convencido de que podría hacerse (hay pocas ideas de programación irrealizables), pero los obstáculos son grandes, y el tiempo y el esfuerzo necesarios para salvarlos serían enormes.
Una alternativa al ensamblador de ARM es compilar en la propia Psion 5mx el código fuente en C de un Forth portable. Hay varios sistemas Forth portables escritos en C con mínimas dependencias de la máquina; y hay una versión para EPOC del compilador gcc. Pero sospecho que a pesar de todo la adaptación del código tendría muchas dificultades y mi experiencia con C es mínima (es un lenguaje de programación que nunca me atrajo). Sin embargo es una idea que me gustaría probar algún día.
Pantallazos
La compilación
Los muchos mensajes de advertencia del compilador de OPL+ no tienen relación con la aplicación, de modo que no hay de qué preocuparse:
Pero cuando OPL+, nada más terminar la compilación, propone ejecutar el programa, hay que negarse:
La explicación es que por algún motivo, a partir de ciertos cambios en el código que jamás identifiqué, ocurre que el ejecutable creado provoca un error fatal poco después de aparecer la pantalla inicial del programa:
En su día busqué sin éxito el motivo del fallo hasta que lo dejé por imposible.
Pero la solución es tan sencilla como inexplicable: hay que tomar el código en OPL creado por el compilador de OPL+ (que se guarda en el fichero forth5mx.opl.txt) y compilarlo con el compilador/editor de OPL que lleva incorporado la computadora. Cuando descubrí esta solución me sentí aliviado pero casi no podía creerlo, porque OPL+ es tan sólo un preprocesador que traduce el código a OPL normal y lo compila con el compilador que la máquina ya tiene.
La imagen siguiente muestra marcados los dos ficheros involucrados en la operación: el código OPL, en formato de texto, producido por OPL+, y el fichero de OPL creado manualmente con el mismo contenido, para su compilación (OPL guardar sus fuentes en un formato propio, no en texto simple):
Tras la compilación de OPL, el compilador nos pregunta si queremos ejecutar el código. Podemos decirle que sí:
Si se produjera el error «Programa no encontrado», bastaría cerrar todos los programas abiertos y reiniciar la máquina.
La ejecución
Tras la segunda compilación, la aplicación queda instalada, con sus iconos en la barra de programas estándar (tras la primera compilación también, pero el programa no podía arrancar):
Y he aquí por fin el aspecto de la pantalla inicial de Forth 5mx:
La palabra license
, como se indica, muestra los detalles de la licencia:
Un pantallazo del listado producido por la palabra words
, con la indicación del número de cada palabra del diccionario, su dirección, si es inmediata (mostrado con el signo «#»), su tipo y su nombre:
Y el final del listado, con las primeras primitivas del diccionario (en Forth 5mx las palabras primitivas son, lógicamente, las que están escritas en OPL):
Código fuente
El código fuente del programa está dividido en varios ficheros, que dada su longitud muestro en sus respectivas páginas:
- forth5mx_extend.fs
- forth5mx.opp
- forth5mx_fvm.opp
- Procedimientos repetidos de Forth 5mx
- forth5mx_macros.opp
- forth5mx_procs.opp
También muestro el historial de desarrollo y la lista de tareas pendientes:
Descargas
El programa aún no está preparado para ser descargado. Queda preparar el paquete fuente, las librerías requeridas y una versión precompilada.