Las máquinas del pasado, las de 8 bits por ejemplo, tenían software notable. En la época de la Apple II por ejemplo, me tocó ver un intérprete de Forth, que sacaba ventaja de las posibilidades gráficas de este sistema (GraForth, escrito por Paul Lutus), o bien, herramientas al mejor estilo Unix, como en la implementación de Randy Hyde de Anix, que en realidad eran una serie de rutinas muy al estilo de las que se encuentran en los sistemas Unix e incluso, con posibilidades de hacer redireccionamiento y «pipes». Pero sí, son programas que corrían en esas máquinas. ¿Qué podemos esperar de esta tecnología de software que nos parece obsoleta?

Pues bien, usar código antiguo -vintage- es siempre interesante. Va más allá de escribir un emulador, porque estos a corto plazo no se integran en general de forma adecuada a los sistemas operativos modernos. Lo que vale la pena en todo este software del pasado es que por una parte, era mucho más compacto, se entendía mucho más fácilmente incluso en su interfaz con los sistemas, por lo que darles «una manita de gato», modernizarlos, puede ser algo más que un mero ejercicio de programación.

El personaje «Mist64», que tiene una página, decidió sacar provecho del primer Basic de la Apple I, el primer software que Apple vendió en 1976. Se trata de un intérprete de Basic que venía en una cinta de audio. Mist64 decidió pasarlo a la memoria y hacerse así del intérprete, que mide 4096 bytes. El archivo binario se obtuvo de hecho de una grabación de la cinta en mp3 que fue decodificada. Ya esta historia es interesante por si misma (https://www.pagetable.com/?p=32).

Una vez hecho esto, Mist64 decidió que este Basic de 4096 bytes podría ser usado para sustituir algunas funciones que se hacen en Perl, por ejemplo, con la ventaja de que estaríamos hablando del popular y simple lenguaje Basic. Podemos escribir una rutina que invierta una cadena de caracteres en su orden, de la siguiente manera:

$ cat reverse.bas
#!/usr/bin/apple1basic
10 DIM A$(100)
20 INPUT A$
30 FOR I = LEN(A$) TO 1 STEP -1
40 PRINT A$(I,I);
50 NEXT I
60 PRINT
70 END
$ chmod a+x reverse.bas
$ echo MICHAEL STEIL | ./reverse.bas
LIETS LEAHCIM
$

En Perl este mismo programa se escribiría así:

function reverse_in_place(a[0..n])
for i from 0 to floor(n/2)
tmp := a[i]
a[i] := a[n – 1 – i]
a[n – 1 -; i] := tmp

Eventualmente Mist64 obtuvo un lenguaje de scripts en Basic I de Apple, para las computadoras con Mac OS X de Intel. El software puede descargarse aquí.

El propio autor aclara que no es un emulador de Apple I para la Mac. Las diferencias son:

  • El ejecutable de apple1basic es una versión estática recompilada del binario original.
  • Todo el código se corre de manera nativa. No hay pues, un emulador.
  • Apple1basic puede usar los puertos estándar de entrada y salida de Unix.
  • Se pueden correr programas de Basic como scripts del shell de Unix.

El sistema es interactivo si se desea. Ea una buena aportación a los antiguos lenguajes que ahora pueden usarse como herramientas para resolver de pronto problemas sencillos dentro de la Mac sin necesitar de sacar todo el poder de los compiladores actuales. Échenle un vistazo. Parece una buena idea.
Referencias:

Blog de Mist64