lunes, 19 de octubre de 2020

Recuperación de código MBASIC para Apple II desde listados

Suele ocurrir que hayamos perdido el material en soporte magnético (ya sean cintas o disquetes) de programas desarrollados en los años 80. Si entonces fuimos algo cuidadosos (cosa habitual, porque era fácil  tener problemas con los soportes y los lectores de la época) es posible que conservemos el código en formato papel, más parecido al pergamino que otra cosa. Llegados a este caso, y si queremos recuperar esas joyas de la historia (o que simplemente les tengamos cierto cariño), no tenemos más remedio que optar por una de dos opciones: a) ponernos como locos a copiar código (tarea nada agradecida, sobre todo con presbicia, que sin duda tendremos si el código de los 80 es nuestro), b) echar mano de la tecnología para automatizar en lo posible el proceso. 

Cuando empece a recuperar el material de los 80 para MSX seguí el camino "a", no por falta de usar tecnología, sino porque en su día no di con la combinación adecuada y de forma fiable. Ahora sí lo he conseguido con la "b", de forma bastante fiable, robusta y práctica. Lo que no quita para que el proceso no sea ni mucho menos automático, pero sí mucho más productivo que la otra opción. 

Para ilustrar el proceso vamos a partir del programa de matriculación de alumnos del I.B. Jiménez de la Espada que desarrollé sobre 1985-1986 en lenguaje MBASIC para el ordenador Apple IIe con sistema operativo CP/M. Fue el primer programa de matriculación que se utilizó en el instituto, y yo debería de tener unos 16 años. De entonces conservo un tocho de papeles que son los listados de los programas, que intuyo que son versiones finales, y lo sabré cuando finalice al 100% el proceso de recuperación. El aspecto de los mismos es el siguiente:


Pues bien, en esta entrega voy a describir el proceso que he seguido para recuperar dichos códigos. Aunque en este ejemplo utilizo código BASIC de un Apple II, el proceso es aplicable a otros sistemas de la época, y lo estoy utilizando también tanto para BASIC y ensamblador Z80 de MSX.

Como se puede observar en la imagen anterior, se trata de una impresión matricial, donde el papel está amarronado (en este caso habiendo estado muy bien conservado, sin que le diera la luz), y con la tinta bastante descolorida. Lo primero antes de nada es tratarlo digitalmente para conseguir un mayor contraste. Para este trabajo he utilizado la herramienta Graphic Converter, que es una especie de Photoshop en pequeño, y cuya herramienta "Niveles Automáticos" produce el siguiente resultado:


El siguiente paso es utilizar un programa OCR para extraer el texto de la imagen. En la actualidad hay OCRs a patadas, muchos de ellos gratuitos y con una calidad de reconocimiento bastante aceptable. El problema que presentan la mayoría es que no están preparados para reconocer este tipo de caracteres, y producen resultados tan malos que no sirven para nada. Y en esas estaba atascado hasta que por casualidad  leí que Google tenía un OCR gratuito integrado en su herramienta. Me pongo a ello. Subo la imagen a una carpeta de mi Drive de Google. La selecciono y la abro con la herramienta Google Docs. Esta detecta automáticamente que es una imagen y extrae de la misma todo el texto en bruto, sin saltos de línea y dejando un único espacio en blanco, produciendo el siguiente resultado:


Ooooooh !!! Pues no es un código directamente ejecutable, pero el texto tiene bastante información para ahorrarnos un trabajado tremendo. Como se puede observar, se han cambiado algunos símbolos, han desaparecido otros, y de vez en cuando alguna letra o número se han alterado. La confusión del cero "0" y la letra "O" es un clásico. También el uno "1" y la letra "I". Llegados a este punto, usar una herramienta simple y adecuada para la edición de código es muy interesante. En este caso utilizo el editor de programación Geany, que incluye coloreado de sintaxis para una gran cantidad de lenguajes de programación. En concreto incluye BASIC, lo que nos va a hacer la tarea más sencilla indicándonos visualmente muchos errores de transcripción. Las palabras clave de BASIC las colorea, por lo que si alguna no sale en color, es que hay un error. Así se cazan las alteraciones de GOTO, por ejemplo, donde una de las letras es un número. Es un BASIC genérico, y no lleva colorización de comandos específicos de MBASIC o AppleSoft BASIC, como VTAB y HTAB, que serán un porcentaje muy pequeño del total de comandos que se usarán. 

Copiamos el texto de Google Docs a Geany, e introducimos un salto de línea antes de cada número de línea de código. Algo que se hace muy rápida y sencillamente a mano. El resultado es el siguiente:


Ya solo nos queda trabajarlo un poquito, verificando con el listado en papel. El trabajo requiere un poco de dedicación, pero la productividad es muy grande. Una vez verificado, el resultado es el siguiente:


Con todo y con eso, todavía tendremos algunos errores, pocos, que se nos habrán escapado, y, además, tenemos que pasarlo a un formato que nos permita cargarlo en un ordenador de esa época. Para esto tenemos alguna alternativa muy tediosa, que incluye tener que hacer toda la depuración en al Apple II, cuyo editor de BASIC es más bien pedestre, o bien utilizar un emulador de la máquina en sí. En este caso decidí usar el emulador Virtual II que es una maravilla. Aunque se puede utilizar de forma gratuita con ciertas limitaciones, la versión completa de pago es fundamental para este trabajo. Sólo con la facilidad y esfuerzo que nos ahorramos se paga sólo. Entre otras opciones permite emular la tarjeta Microsoft SoftCard CP/M, que es necesaria para ejecutar el código MBASIC. El proceso de trabajo es muy sencillo. Cargamos una imagen de disco 5 1/4" con el Sistema Operativo CP/M y el intérprete de MBASIC. Hay un montón de webs para descargar las imágenes. Entre ellas la Apple II CP/M Library y la Apple II Asimov. Aparte de la imagen que necesitamos hay literalmente cientos de imágenes. Ejecutamos el emulador y cargamos la imagen de CP/M. Al arrancar entramos en el intérprete de MBASIC, como se muestra en las siguientes capturas de pantalla del Virtual II:


Tan solo nos queda hacer copia y pega del código desde Geany hasta Virtual II. El pegado se hace simulando la entrada desde teclado, por lo que es equivalente a teclear el mismo código en la interfaz del MBASIC. Este lo entiendo, a todos los efectos, como si lo estuviéramos tecleando. Esto es mu conveniente por dos razones. Por un lado podemos pasar todo el texto de Geany al intérprete de MBASIC de una tacada. Ya solo esto es fundamental, tal y como podemos ver en la siguiente captura:


Pero una vez que lo tenemos copiado, donde verdaderamente podemos alcanzar unas cotas bastante altas de productividad es cuando ejecutamos y depuramos. En lugar de editar en el emulador, editamos en Geany cada vez que detectemos un error, y hacemos copia y pega solamente de las líneas que acabamos de modificar. Verdaderamente cómodo. Después de sucesivas iteraciones con el OCR, con el editor y con el emulador conseguimos recuperar el código sin problemas. ¿Que cómo queda el resultado? Pues un programa de gestión no es muy agradecido, pero bueno, aquí van un par de capturas de pantalla:






jueves, 8 de octubre de 2020

Modernización de un Apple IIc

Después de una temporada sin cacharrear con ordenadores antiguos, ahora le toca el turno a un Apple IIc que tenía guardado, fabricado en 1986. En mi época de bachillerato aprendí a realizar programs de gestión (con bases de datos) en un Apple IIe. Como aún no tengo uno (en su día eran carísimos), pretendo recuperar los programas que hice en su día con el Apple IIc, que los conservo sólo impresos en papel. Para poder recuperarlos es imprescindible (para mi salud) poder interactuar con el Apple IIc y con mi ordenador de trabajo. Buscando en Internet encontré la unidad Floppy Disk Emulator de BMOW (Big Mess 'O Wires), que permite utilizar una memoria SD como almacén de floppys de 5 1/4", que permite ser instalada en un Apple IIc (que no tiene puertos de expansión como el resto de los Apple II).

El dispositivo es muy cuco. Lo compré con su caja, con el adaptador Iic, y con un emulador de sonido (una tarjeta con un relevista que se activa al ir accediendo a los distintos sectores del disco).


Lo recibí a los pocos días de comprarlo, y me puse manos a la obra. Primero desmontar el ordenador. La tapa superior es fácil quitarla, pero hay que llevar mucho cuidado con las pestañas de plástico, que al tener tanto años ya no son tan flexibles. Una vez quitada la tapa accedemos al interior.


Para instalar el adaptador sólo hay que desconectar el cable de la unidad de disco, insertar la placa nueva y conectar el cable original por el otro lado. 



Esta unidad tiene como opción la capacidad de arrancar el ordenador con el floppy original o con el emulador. Para hacer la selección tenemos un cable que hemos de sacar fuera del ordenador. Para ello se  puede utilizar el hueco de la ranura del conector DB del disco. El hueco es pequeño pero suficiente. 



Cerramos la tapa del ordenador. Conectamos la unidad emuladora y el simulador de sonido, configuramos la SD (me venía preconfigurada con el firmware de emulación de disco de Apple II). Una vez listos arrancamos el ordenador, seleccionamos el disco que queremos insertar y ... voilà !!!. El ordenador arrancando con el DOS 3.3 en la unidad D1 (emulada).



Además, podemos utilizar la unidad de 5 1/4" original a la vez, en este caso como unidad D2. Para probarlo inserto un diskette con un pequeño programa BASIC que he recuperado de un listado de 1986. Y así luce casi 35 años después.