SERIE CP/M Y ZX SPECTRUM Hablemos de ALGOL. Puede el Spectrum correr ALGOL? A esto, la primera respuesta es no, y seria lo mas logico, ya que nadie ha escrito hasta ahora un interprete o compilador de ALGOL para el Spectrum. Ahora si hablamos de un Spectrum con CP/M... entonces vemos que la respuesta ya cambia y seria si... y solo si... tenemos precisamente eso: un Plus 3, un Timex FDD o similar. Asi que retomando el tema del CP/M, hoy toca hablar de Algol. Y para ello voy a dividir este escrito en dos partes, siendo esta la primera, dividida a su vez en varias secciones. I - Que es el Algol e historia En resumidas cuentas, el ALGOL es un lenguaje de programacion surgido en 1958 y su nombre deriva del ingles "ALGOrithmic Language", es decir "Lenguaje ALGOritmico" en castellano. Aunque no se pudo imponer como lenguaje de programacion a nivel comercial (fue influenciado por el FORTRAN) a su vez influyo en el Pascal, C, ADA, Simula y el mismo Basic. Entre sus dialectos estan el Algol 58, 60, 68 y W. Estos a su vez han sido portados a diversos sistemas entre ellos el CP/M, que es lo que interesa en este caso. II - Algol y CP/M Tras ver en forma muy escueta lo que es el Algol, paso a buscar en Internet el software requerido en version para CP/M, y el resultado fue... En Programming Languages and Tools (lenguajes de programacion y herramientas) del apartado Commercial CP/M Software (programas comerciales para CP/M) de http://www.retroarchive.org/ pude hallar dos archivos: uno llamado algol.zip del cual solamente dice que es un compilador para cp/m 80 y el otro es el algol-m.zip. Fuera de eso nada mas. ii.1 - Pasandolo al Spectrum ii.1a - +3 Para pasarlo todo a un +3 basta con deszipear los archivos primero en una nueva carpeta y luego usar la utilidad CPCXFSW para pasarlo todo a una imagen de disco nueva que llamaremos algol.dsk y podremos usar con un emulador como Real Spectrum. ii.1b - 528k lec En este caso necesitamos pasarlo toso a un fichero TAP. Para ello requerimos de la herramienta TAPE EDITOR del emulador LNXspectrum, crear nuevo e importar los archivos requeridos, renombrar los ficheros si es necesario, salvar y cerrar. Una vez creado el algol.tap vamos al emulador JSpeccy y cargamos el CP/M 2.22 en modo LEC. Una vez aparece el prompt del CP/M, se tipea MLOAD *.* y se carga el contenido del TAP. Se renombra aquello que requiera renombrarse y se copia todo a un cartucho MDV o cuantos se requieran para contener todo el paquete. Nota: Si bien existen otros CP/Ms actualmente emulados como es el caso del Timex FDD o el ATM turbo, no he encontrado modo de transferir los archivos a una imagen de disco como si he podido en los casos anteriores del +3 y 528k lec. ASi que es solamente con estas dos versiones de CP/M que voy a trabajar con el ALGOL. ii.2 - RML Algol Ahora que ya tengo las versiones para probar, paso a ver los archivos que me descargue, empezando por el algol.zip. Al dezipear este archivo me encuentro con solo dos COM: algol.com y arun.com., nada mas que eso, ni siquiera un texto de informacion. Una vez transferido al Spectrum por el metodo antes mencionado, pruebo a ejecutar los programas uno por uno y tras tipear "algol", obtengo un cuelgue del sistema y hala a resetear. Tipeo ahora "arun" y obtengo: RML ALGOL V4.4C Copyright (c) 1979 by Research Machines INPUT= en pantalla, y el prompt "input" me dice que espera que uno tipee alguna instruccion. Y... nada. No se que hacer a partir de aqui. Nada de lo que tipeo parece funcionar. Por suerte basta CONTROL C (^c) para salir del programa y volver al CP/M. Sin saber que mas hacer busco en la internet y me encuentro con el manual. Todo lo que el dichoso manual me dice es que es una implementacion del Algol 60 y que hay tres versiones, una para el trs80, otro para 380z y una ultima para el CP/M. Tambien dice que en el disco venian otros archivos utiles: LCASE.ALG y LCASE.ASC UCASE.ALG y UCASE.ASC ALIB.ALG MMIND.ALG y MMIND.ASC VDU.ALG y VDU .ASC CODE.ALG y CODE.ASC QSORT los cuales no tengo y menos la menor idea de donde descargarlos Al menos en el manual se explica el uso de los unicos dos archivos con lo que ya se como usar los dos unicos programas que consegui. Para compilar "algo" debo tipear ALGOL nombre. El compilador es un comando que solo acepta ficheros .ALG (el cual debe de haber sido creado previamente con un editor de texto) y genera ficheros .ASC y .MON. Para correr en tiempo de ejecucion, tipear ARUN y tras el "INPUT" tipear un nombre de fichero valido, en este caso uno .ASC. Ahora que ya se todo esto, lo dejo ahi y paso a ver si puedo hacer algo con esta version de Algol. Creo un fichero algol tomando un ejemplo del manual y lo nombro exmpl01.alg, pero al intentar que algol lo reconozca, obtengo solo que el sistema se cuelgue otra vez. Arun tampoco hace nada pues espera un archivo creado por el compilador Algol para su ejecucion. En suma o el programa algol.com esta mal o esta configurado para algun sistema en especial o busca cargar alguna de las librerias que deberian estar en el disco pero que yo no tengo y eso es lo que causa el cuelgue, no hay manera de saberlo. Siendo asi paso a... ii.2- Algol-M Este "algolm.zip" tiene mas archivos que el otro, ademas de la documentacion requerida para su uso. A continuacion pongo uno de los textos introductorios incluidos en el paquete algolm: " ALGOL-M vers. 1.1 para CP/M de agosto de 1978. Escrito por el teniente Mark Moranville (codigo 52MI), posgraduado de la escuela naval. En este disco encontrara varios archivos TXT, los cuales contienen informacion concerniente al lenguaje de programacion ALGOL-M, en los que se incluye lo sigte: ALGINTRO.TXT: una vision gnral. del ALGOL-M. USRMAN.TXT: un manual del usuario de ALGOL-M con una completa descripcion de las diversas estructuras del ALGOL-M. COMERR.TXT: una descripcion de los mensajes de error de compilacion del ALGOL-M. RUNERR.TXT: una descripcion de los mensajes de error del interprete de ALGOL-M mas los de advertencia. Junto con estos archivos tambien encontrara varios programas ejemplo que demuestran muchas de las presentaciones del lenguaje. Hay una descripcion sobre como crear, compilar y ejecutar un programa ALGOL-M incluida en esta misma seccion. ALGOL-M requiere de un sistema CP/M con al menos 24K de memoria. Para crear y ejecutar un programa debe hacerse lo sigte.: 1. Crear un fichero "ALG" usando el editor de CP/M. Este fichero debe empezar con un "BEGIN" o un comentario (el cual consiste en ya sea A. una cadena entre "%", o B. una cadena comenzando con la palabra "COMMENT" y terminando con un ";"). Este fichero debe terminar con (A) la palabra "END" sin ";" o (B) un "END" seguido de un "EOF". Revise los diversos programas ejemplo para ver su formato real. 2. Compile el programa "ALG" tipeando "ALGOLM nombre" seguido de ENTER (RETURN). El "nombre" es el de su programa. Puede obtenerse un listado opcional del archivo en la terminal aƱadiendole "$A" al final del nombre. El formato del listado es el sigte.: 1 1 BEGIN El numero 1 a la izq. representa el numero de linea. El numero 1 del medio es el nivel del bloque. La ultima linea al final del programa debe ser un nivel de bloque 0 o el programa se detendra. La palabra BEGIN representa la informacion en la linea 1. Los formatos para compilar son los sigtes.: (la info contenida entre parentesis no se tipea) ALGOLM LUNAR (no listado, no rastreado) ALGOLM LUNAR $A (listado, no rastreado) ALGOLM LUNAR $E (no listado, rastreado) ALGOLM LUNAR $AE (listado, rastreado) 3. Para un rastreo (TRACE) de la ejecucion del programa use la opcion $E. Cuando el programa se ejecute, el numero de linea del codigo fuente sera tipeado en la consola luego de completada la ejecucion de dicha linea. 4. Si la compilacion es exitosa aparecera un archivo "AIN". Para ejecutar este archivo "AIN" hay que tipear "RUNALG nombre" seguido de ENTER(RETURN). " En efecto, aqui todo sale tal cual dicen las instrucciones, a diferencia del rml algol. Ahora que ya tengo una version de algol que funciona correctamente, prosigo con... III - Algol comparado con el Basic iii.1 - Ejemplos de programas Algol A continuacion unos programas ejemplos que se encuentran en el disco de ALGOL-M, para ver algunos de sus comandos mas tipicos: booling.alg BEGIN COMMENT ESTE PROGRAMA ES DE PRUEBAS BOOLEANAS DE ALGOL-M PARA VALORES ENTEROS; INTEGER X,Y,Z; WHILE 1=1 DO BEGIN READ(X,Y); IF X>5 AND X<100 THEN WRITE("5-100"); IF NOT X<5 OR X>100 THEN WRITE("NOT 5-100"); IF X>Y AND Y>5 AND X>10 THEN WRITE("5-10-X>Y"); IF X=5 OR X=10 OR X5 AND X<100 THEN PRINT "5-100" 80 IF NOT X<5 OR X>100 THEN PRINT "NOT 5-100" 90 IF X>Y AND Y>5 AND X>10 THEN PRINT "5-10-X>Y" 100 IF X=5 OR X=10 OR XB$) 50 REM WHILE 1=1 DO 60 REM BEGIN 70 PRINT "INGRESE DOS CADENAS QUE UD QUIERA COMPARAR" 80 PRINT "PARA VER SI SON IGUALES" 90 INPUT A$,B$ 100 PRINT FN E$(A$,B$) Cierro esta primera parte introductoria del Algol y continuo en la segunda parte tratando del manual del Algol-M mostrando mas a fondo sus comandos y lo que estgos hacen. Ahora que ya puedo correr Algol en un Spectrum gracias al CP/M, solamente es cuestion de usar la imaginacion para ver que mas podemos hacer y hasta donde podemos llegar con este antiguo lenguaje de programacion. Convertir viejos programas Basic al Algol quizas... si, quizas eso... (c)2022 zx_if1@hotmail.com