El BASIC Compiler de la compañía británica HiSoft es, probablemente, el más completo compilador de BASIC disponible para funcionar en el Spectrum +3, así que le vamos a dedicar este texto. Trabajaremos con la versión 1.2 de 1987, desarrollada por Cameron Hayne y Andrew Penell, que es la que está disponible en el World Of Spectrum. En esa misma página podemos encontrar además el manual de instrucciones específico para la versión +3, lo que es un importante detalle.
Para empezar a trabajar con él, introduzcamos el disco y desde el editor de +3BASIC tecleemos CAT para darle un vistazo al contenido. De los ficheros que vemos, solo tres son del compilador: HB128C, HIBASIC y RUNTIME (en la pantalla de la derecha, señalados en rojo), el resto son los siguientes ficheros BASIC con ejemplos para compilar:
EXAMPLE1 a EXAMPLE6,
PUCKMAN,
QUICKSOR,
SHELLSOR,
SIEVE y
TOAD.
Vamos a cargar el programa con LOAD "hibasic". Tras un CLS una pantalla nos informa durante unos segundos del nombre y versión del programa, con un mensaje del copyright. A continuación la pantalla cambia y el disco se detiene. La nueva pantalla contiene básicamente la misma información que la anterior, pero en un formato de presentación diferente.
5 REM Esto, por ejemplo, no se compila 6 BORDER 0: CLS 7 PRINT "No se compila!!" 10 REM : OPEN # 20 BORDER 5: CLS 30 PRINT "Hola" 40 PRINT "Esto se compila" 50 REM : CLOSE #
El programa ya está cargado y al pulsar cualquier tecla volvemos de nuevo al editor +3BASIC. Aquí podemos entonces cargar o teclear el código fuente BASIC que vayamos a compilar.
Frente a otros muchos, el de HiSoft es el único compilador que nos permite crear programas que trabajen con el disco, aunque no a través de LOAD y SAVE, sino del comando OPEN. Acepta el comando PLAY, lo que nos permite trabajar con el chip de sonido por esa vía, aunque podemos igualmente hacerlo a través de IN.
Para empezar a ver cómo trabaja el programa, vamos a teclear lo siguiente:
Como muchos otros compiladores, tenemos meta-comandos que se introducen como líneas REM. Las líneas 10 y 50 indican la parte del programa que se va a compilar. Pulsamos Shift+3+4, lo que nos lleva al menú principal del HiSoft BASIC Compiler. Veamos las diferentes opciones:
Si pulsamos "C", la pantalla y el borde cambian, en lo que el compilador da dos pasadas al código, deteniéndose en cada una de ellas con un mensaje en la pantalla, y siendo necesario que pulsemos alguna tecla para continuar. Tras ellos obtenemos el informe final de la compilación (si todo ha ido bien) con los siguientes datos:
M/C: xxx BYTES
+ xxx BYTES FOR M/C VARIABLES
(BASIC WAS xxx BYTES)
SAVE "m/c" CODE xxx,xxx
LOAD "m/c" CODE xxx
El nombre de fichero "m/c" en los SAVE y LOAD puede ser, obviamente, cualquier otro, yo recomiendo emplear el formato y la extensión nombre.BIN. Para los ficheros del código fuente no hay una convención, yo suelo usar .BAS (aunque creo que voy a pasar a usar para el programa de HiSoft la extrensión .HSB o .HBC, para diferenciar los .BAS normales de los compilables). Al pulsar cualquier tecla volvemos al editor del intérprete de +3BASIC, donde sigue estando nuestro código fuente. Los siguiente es salvar el binario compilado, con los datos que nos ha dado el programa, y ejecutarlo.
Las siguientes son fuentes bibliográficas de interés en español:
Hisoft BASIC: El compilador más rápido, por Amador Merchán, revista MicroHobby número 193, noviembre de 1989, página 22 y página 23.
Curso de BASIC compilado (I), por na-th-an, e-zine ZXSF (ZX Spectrum Files) número 11, 2007.
Curso de BASIC compilado (II), por na-th-an, e-zine ZXSF número 12, 2008.
Curso de BASIC compilado (III), por na-th-an, e-zine ZXSF número 13, 2009.
Ficheros en el +3 y +3e artículo por Francisco León (en El Trastero del Spectrum).
Enlazando con el contenido de este último artículo de F. León, hay que señalar que el archivo RUNTIME debe estar junto al binario compilado, cargado en memoria y activado (con LOAD "RUNTIME" CODE 60000 : RANDOMIZE USR 60000) si empleamos alguno de los comando de entrada/salida específicos del HiSoft BASIC Compiler (principalmente OPEN #, CLOSE #, PRINT # e INPUT #), en caso contrario no es necesaria su inclusión en la distribución definitiva de nuestro programa.
Como referencia más general del BASIC interpretado del Spectrum se pueden consultar también los artículos publicados al respecto en el webzine Bytemaniacos sobre programación avanzada en BASIC y tópicos relacionados (como los Concursos BASIC), principalmente:
– Programación: Entornos 3D en BASIC (1)
– Programación: Entornos 3D en BASIC (y 2)
– Programación: Cría del Berberecho Salvaje
– Programación: Acelerando BASIC