Hace mucho, mucho tiempo, sabía programar. No es algo que se olvide, así que puedo decir que todavía sé. No, sin embargo, de una forma que vaya a convencer a nadie en una entrevista de trabajo: no tengo cinco años de experiencia en ninguna de esas plataformas que han salido en los últimos cuatro años y que parten la pana en todos lados.
Pero antes de programar de forma profesional, cosa que hice sobre todo en el lenguaje Java, hice mis pinitos en la máquina menos práctica que uno pueda imaginarse para hacerlos. Os hablo de la calculadora HP48, mi querida Paca, a la que, pese a tantas horas vertidas sobre su fantástico —pero abstruso— teclado, nunca he dedicado demasiadas letras en este blog. Apenas conté, allá por el lejanísimo 2009, la historia de la fuente más pequeña con soporte para diacríticos que diseñé para, digamos, aprovechar al máximo la pantalla de 131×64 puntos de la bestia.
Una bestia que corría gracias a un procesador de 4 megahercios y (en su variante GX) disfrutaba de unos inacabables 128 kilobytes de memoria de usuario. Semejante maravilla de la tecnología se usaba en notación polaca inversa y hacía todas sus operaciones sobre una pila de datos que contaminó, irremediablemente, mi forma de utilizar calculadoras. A día de hoy uso un emulador en mi teléfono para poder seguir haciendo números así:
2 2 +
Puedo sumar dos más dos sin recurrir a la máquina, prometido. De la notación polaca inversa se puede decir en matemáticas lo mismo que del latín para las lenguas: estructura el pensamiento. De hecho, operaciones como
(15 + 3) · cos (2 / (4 + 5))
Que, en una calculadora normal, sería una ensalada extraña de paréntesis y mezcla de notación infija y postfija, en mi vieja Paca sería esto:
15 3 + 2 4 5 + / cos *
Creedme, así no es posible equivocarse con la precedencia de las operaciones. RPL, el lenguaje de programación correspondiente, se parecía bastante a Forth. Si uno quería saltarse todas las validaciones que hacían imposible colgar o resetear accidentalmente la calculadora, y por tanto acceder a un nivel superior de rendimiento —con una frecuencia de procesador de 4 MHz era algo bastante necesario—, se podía acceder al SystemRPL. Básicamente, una programación basada en llamadas directas a rutinas de la memoria fija de la máquina (la ROM), a las que se le daban nombres más o menos mnemónicos:
NULLNAME PushTempEnv
::
INNERCOMP
#2/
ZERO_DO
SWAPINCOMP
#1+ROLL
BIND
LOOP
;
Ni idea de para qué servía esto, honestamente. Solo quería contar esta historia para dejar constancia de que, a finales de los noventa, dediqué horas incontables a implementar la multitarea cooperativa en mi Paca. Una bibliotecas de funciones que ofrecía…
[…] un sustituto de la concha (shell) del sistema que permite efectuar multitarea cooperativa en la calculadora HP48G/GX. De un modo menos técnico: con un poco de ayuda de su parte, sus programas (o bien los de cualesquiera otros) pueden ser ejecutados en trasfondo, dejando la pila libre para cálculos u otros programas. ¡Se acabó esperar a que termine ese cálculo tan largo mientras se desearía tener otra calculadora a mano!
La capacidad de ejecutar una tarea en segundo plano puede restringirse a un simple reloj personalizado que muestre la hora continuamente en la pantalla, pero puede extenderse de formas complejas, permitiendo la comunicación entre tareas de primer y segundo plano.
Por supuesto, en una máquina como la HP48G/GX, esto tiene algunas implicaciones negativas:
- El mecanismo de cambio de contexto es del tipo no preemptivo. Esto significa que debe insertarse una llamada especial (comando) en los programas, para obligarlos a ceder el control y permitir que el flujo de ejecución continúe en alguna otra parte.
- Correr una tarea en segundo plano implica una mayor carga en la máquina que si se ejecuta en primer plano, así que estas tareas tienden a resultar más lentas.
- No pueden ejecutarse más de dos tareas en trasfondo simultáneamente, y una de ellas debe ser del tipo auxiliar (ver la sección 2.3 para más información).
- Programar una máquina con multitarea es ligeramente más complejo que hacerlo en una monotarea. Hay recursos comunes que tener en cuenta, pero la naturaleza explícita de la transferencia de control facilita el proceso.
De cualquier modo, creo que este programa es útil y utilizable. La mayor parte de programas en UserRPL (especialmente los no interactivos) y en SystemRPL (con la ayuda de cualquier compilador, como Jazz de Mika Heiskanen) pueden ser adaptados a la ejecución en segundo plano sin demasiado esfuerzo. Además, con los comandos que informan sobre el estado del sistema (incluidos en la biblioteca), cualquier programa puede determinar dónde está corriendo y establecer comunicaciones con otras tareas, abriendo así un nuevo mundo de posibilidades para la programación de la HP48G/GX.
Sí, eso es un fragmento de la documentación original de BGShell, que era el nombre del proyecto (de BackGround Shell, o «intérprete de órdenes en trasfondo»). ¿Fue revolucionario? No exactamente. Consiguió un voto en el repositorio de programas de las calculadoras HP. Al menos el voto fue positivo.
Dejé atrás este mundo en 1999, al mismo tiempo que iba saliendo de mi cascarón universitario para adentrarme en la oscuridad sisífea de mi carrera profesional. Es natural preguntarse por lo que fue de tanto tiempo y esfuerzo invertido. Qué fue de mi juventud. Para qué.
Y hoy, desde mi cincuentena de cabello gris y medias sonrisas, solo puedo contestar, encogiéndome de hombros un poco, «paraguayo».
Comentarios
2 respuestas a «Fósiles informáticos»
A ver para qué te crees que era eso de la fuente más pequeña… Mi problema con las chuletas es que, haciéndolas, me las aprendía.
Me pasaba lo mismo, pero la sabiduría me duraba lo justo para pasar el examen.
Sin embargo la imagen de los trasiegos de chuletas a través del puerto IR antes de los exámenes no la olvidaré jamás.