Este apartado recoge los compiladores de BASIC de los distintos modelos (16K/48K/128K) que podemos emplear sin demasiadas complicaciones en el +3, excluyendo los que provocan cuelgue al cargar o compilar. Para ello hay que hacer una criba entre decenas de títulos que nos obliga a dejar de lado programas interesantes como el Laser BASIC+Laser Compiler, el Blast! o el Zip v2.4 (ZIP Compiler), o compiladores populares como el Hisoft COLT o el MCODER. Otros, como el de Mehmood, siguen estando MIA (Missing In Action).
Nos quedan un grupo formado por tres compiladores nativos para +3 o desarrollados para los modelos 128K (el Hisoft BASIC v1.2, el BASCOMP v2 y el Turbo Coder v2.1) y otro grupo compuesto por varios compiladores antiguos (para los modelos 16k y 48k) que aparentemente no cascan al usarlos desde el +3BASIC.
Al primer conjunto (los nativos +3) lo vamos a tratar parcialmente por separado: al Hisoft BASIC le vamos a dedicar un tutorial aparte y el segundo está siendo ya analizado en otro texto, por lo que saltamos directamente al siguiente grupo (con el añadido del Turbo Coder); esta es la lista:
ToBoS FP v2.0
Softek IS v1.2
Softek FP v1.7 (corregida por Zeljko Juric)
MGCV Stack HS-Compiler v1.1
Trisom-Compiler 100.01 v1
USCHI v1.2
Wye Valley BASIC Compiler
Turbo Coder v2.1
He pasado todos los ficheros a un solo disco, como ya hiciéramos antes, y añadido un menú inicial para facilitar la carga de cada programa. Todos ellos se cargan y funcionan aparentemente bien en el +3. Los retoques que he realizado sobre los programas se refieren únicamente a la carga y presentación desde BASIC.
Para el Softek-FP v1.7 (versión corregida por Zeljko Juric) se incluye el Linker de Zeljko Juric. Para el Turbo Coder se incluye el manual del programa (fichero "turboman.bas"). El Wye Valley, el FP y el IS incluyen además instrucciones en PDF. Del USCHI se incluye un artículo en PDF con sus instrucciones originales. El ToBoS-FP de esta distribución es una copia del publicado en el magazine Outlet número 88, e incluye unas breves instrucciones (se cargan con "tobosman.bas") y un ejemplo (ficheros "kaleid2" y "kaleid2c.k"). Para el USCHI he creado un mini-fichero, "uschiman.bas", un breve apunte con los comandos soportados por el compilador.
Tanto los dos de Softek como el de Wye Valley son del mismo autor, el programador británico Martin Lewis, y del mismo año, 1983. Uno de los compiladores es alemán, el USCHI (siglas de "Ultraschneller Spectrum-Compiler für hundertprozentige Integer-arithmetik"). El ToBoS (el nombre procede de "Toruń, Jerzy Borkowski, Wojciech Skaba") es polaco y el Trisom-Compiler es holandés. Variedad de idiomas, vamos.
Y por otra parte hay diferencias en torno al producto compilado: algunos compiladores (Tobos-FP, Stack HS, Trisom, USCHI y Turbo) generan directamente un binario autónomo del compilador, mientras que otro no, eso lo veremos adelante en cada caso. El disco incorpora otra vez el 48KDB y el Editor de MicroHobby.
Compilador ToBoS-FP v2.0
Este compilador polaco cuenta con hasta página en Wikipedia, por lo que tampoco entraré en muchas historias. Parece recoger muy buenas críticas. Del artículo enlazado podemos rescatar que la versión 2.0 fue lanzada en mayo de 1986 en Polonia. Un año más tarde apareció una implementación con pequeñas modificaciones, el ToBoS-DYD, optimizado para un clónico del ZX Spectrum, el Elwro 800 Junior. En diciembre de 1994 el magazine electrónico Outlet, en su número 88, tradujo (al inglés) y distribuyó como freeware (en disco +3, además) la versión original 2.0, añadiendo un pequeño manual y un ejemplo. El manual en polaco lo podemos encontrar en el WOS, pero no el de la versión original sino el de la versión DYD. Para llamar al compilador hay que hacer RANDOMIZE USR 53100. De forma general:
- Después de usarlo cada vez, es mejor cargarlo de nuevo o resetear la máquina
- Generan unos binarios pequeños
- Según lo que he sacado del manual en polaco soporta las siguientes instrucciones:
No compila
___________________
CLEAR x
CLOSE#n
CONTINUE
ERASE ""
FORMAT ""
LOAD ""
LOAD "" DATA x
LOAD "" SCREEN$
MOVE "" TO ""
OPEN#n
PLAY ""
SAVE ""
SAVE "" DATA x
SAVE "" LINE x
SAVE "" SCREEN$
SPECTRUM
Compila
_____________________________________________________________________________
BEEP x,y : BORDER e : BRIGHT e
CIRCLE c;x,y,z : CLEAR : CLS : COPY
DATA : DIM A(n) : DIM A$(n) : DRAW c;x,y : DRAW c;x,y,z
FLASH e : FOR a=x TO y STEP z
GOSUB n : GOTO n
IF e THEN s : INK e : INPUT : INVERSE x
LET a=e : LOAD "" CODE x : LPRINT
NEW
OUT x,y : OVER e
PAPER e : PAUSE e : PLOT c;x,y : POKE x,y : PRINT
RANDOMIZE : RANDOMIZE x : READ : REM : RESTORE : RESTORE x : RETURN
SAVE $ CODE : STOP
VERIFY $ CODE
SPECTRUM y PLAY no los pone en el manual, pero son de imaginar.
Compiladores Softek IS, Softet FP y Wye Valley
Los tres compiladores de Martin Lewis seleccionados (tiene alguno más) vienen afortunadamente con manuales, lo que ayuda notablemente. Los tres fueron lanzados en 1983, pero creo que el FP es el más avanzado. Tras su carga y la introducción del código a compilar, los lanzamos con RANDOMIZE USR 59300 (IS), 59000 (FP) y 60000 (Wye) y si todo va bien salvamos desde ORG 40000 en adelante. En el caso del IS y del Wye, necesitamos tener cargado el compilador en memoria al ejecutar nuestro código. En el FP pasa lo mismo, pero podemos hacerla independiente del compilador con el programa Linker de Zeljko Juric, que añade a nuestro binario las rutinas necesarias para funcionar. Debemos usar una cinta de casette como unidad temporal, el Linker solo lee desde cinta, así que el procedimiento será cargar desde disco, compilar, salvar a cinta, linkar cargando de cinta y salvar a disco. De forma general:
- Después de usarlo cada vez, es mejor cargarlo de nuevo o resetear la máquina
- Generan unos binarios pequeños pero dependientes de las rutinas del compilador, que debe estar en memoria para poder ejecutar nuestro programa
- En el caso del FP, los binarios producidos por el Linker son también aceptablemente pequeños
- Soporta las siguientes instrucciones:
No compila
___________________
LOAD ""
LOAD "" DATA x
LOAD "" SCREEN$
PLAY ""
SAVE ""
SAVE "" DATA x
SAVE "" LINE x
SAVE "" SCREEN$
Compila
_____________________________________________________________________________
BEEP x,y : BORDER e : BRIGHT e
CIRCLE c;x,y,z : CLEAR (solo FP y Wye) : CLS : CLOSE#n,$ (solo FP) : COPY
DATA : DIM A(n) (solo FP y Wye) : DIM A$(n) (solo FP) : DRAW c;x,y : DRAW c;x,y,z
FLASH e : FOR a=x TO y STEP z
GOSUB n : GOTO n
IF e THEN s : INK e : INPUT : INVERSE x
LET a=e : LOAD $ CODE x : LPRINT
NEW (solo IS y FP)
OPEN#n,$ (solo FP) : OUT x,y : OVER e
PAPER e : PAUSE e : PLOT c;x,y : POKE x,y : PRINT
RANDOMIZE : RANDOMIZE e : READ : REM : RESTORE : RESTORE x : RETURN
SAVE $ CODE x,x : STOP
VERIFY $ CODE x (solo IS y FP)
Las diferencias entre los tres son pequeñas. Incorporan también un pequeño conjunto de comandos nuevos (a través de REMs) similar en los tres casos. Sorprende que soporte las sentencias LOAD "nombre" CODE y SAVE "nombre" CODE, lo que nos permitiría cargar y grabar desde nuestro programa, lamentablemente están dirigidas indefectiblemente al casette, por lo que poco nos aportan en el +3.
Compilador MGCV Stack HS-Compiler v1.1
El tercero de este grupo, el HS-Compiler, lanzado en 1984 para el 48K, viene como siempre sin instrucciones, aunque trasteando con él podemos sacar unos cuantos datos:
- La versión en cassette carga con CLEAR 39999: LOAD "" CODE (o CODE 40000), para la versión en disco puedes usar LOAD "hs_comp.bas"
- La última instrucción del listado a compilar DEBE ser siempre un STOP
- El compilador se ejecuta con RANDOMIZE USR 40000
- Después de usarlo cada vez, es mejor cargarlo de nuevo o resetear la máquina
- Muchas veces se queda colgado durante la compilación
- Genera unos binarios muy grandes (mínimo, 3K) e independientes, con todo lo necesario
Después de pasar el compilador con RAND USR 40000 el programa nos proporciona 3 datos, el primero es que parece colocar nuestro código a partir de 48000. Otro dato es el tamaño del código. Salvamos con SAVE "nombre.bin" CODE 48000,tamaño. Si bien es un interesante descubrimiento (yo no lo conocía), no es lo mejor que podemos encontrar, aunque podemos emplearlo perfectamente para compilar a binario algunos programas o rutinas.
Compilador Trisom-Compiler 100.01 v1
Vamos a pasar al cuarto de la lista, el holandés Trisom Compiler también de 1984, desarrollado por J. Bezem, K. Farber y L. Witkam. Viene sin instrucciones. Se carga con ORG 53248, y lo activamos con RAND USR 6e4:
- Genera unos binarios muy grandes (casi 4K) e independientes, con todo lo necesario
Al iniciar por primera vez el compilador con RAND USR 6e4, el programa nos pide la dirección en la que poner nuestro código (entre 24025 y 49522), y en la pasada siguiente, el tamaño del código. Las siguientes veces que hagamos RAND USR 6e4 no nos pedirá la dirección de inicio, emplea de nuevo la primera introducida. Salvamos como siempre con SAVE "nombre.bin" CODE inicio,tamaño.
Compilador USCHI v1.2
Este es en alemán, programado por Martin Würthner y publicado (como listado para teclear) por la revista Happy Computer en septiembre de 1987. Y otro que viene sin manual; después de bajarme el PDF de ese número de la revista, podemos aclararnos un poco: arranca con RAND USR 60000 y compila a partir del CLEAR que hayamos establecido previamente (por defecto, 40000). Genera binarios pequeños y autónomos.
Según el artículo de la revista:
No compila
___________________
CLEAR
DEF FN
INKEY$
LIST
LLIST
LOAD
PLAY
RUN
SAVE
SCREEN$
VERIFY
Compila
____________________________________________________
ABS : AND : AT : ATTR
BEEP : BIN : BORDER : BRIGHT
CHR$ : CIRCLE : CLS : CODE : CODE INKEY$ : CODE SCREEN$ : COPY
DATA : DIM : DRAW
FLASH : FOR...TO...STEP
GOSUB : GOTO
IF...THEN : IN : INK : INPUT : INT : INVERSE
LET : LPRINT
NEXT
OUT : OVER
PAPER : PAUSE : PEEK : PLOT : POINT : POKE : PRINT
RANDOMIZE : READ : REM : RESTORE : RETURN : RND
SGN : SQR : STOP
TAB
USR
Otras consideraciones importantes: las instrucciones INKEY$ y SCREEN$ son soportadas en la forma CODE INKEY$ y CODE SCREEN$. No se puede trabajar con cadenas alfanuméricas. A nivel de aritmética, trabaja con enteros entre -32768 y +32768. Cuenta con los metacomandos REM !BRON, REM !BROFF (para activar/desactivar la tecla BREAK) y REM !IGNORE (no compila lo que haya a continuación).
Compilador Turbo Coder v2.1
El último de la lista es de los más modernos, de 1994, programado por J. Cauldwell. Incluye un pequeño pero completo manual (cargar con LOAD "turboman.bas"). Podemos situar nuestro código con inicio entre 32768 y 53000. Ejecutamos con RAND USR 57000.
- Genera unos binarios muy pequeños e independientes, con todo lo necesario
- Según el mini-manual soporta las siguientes instrucciones:
No compila
___________________
DRAW x,y
LOAD
PLAY
PLOT INK x; y, z
SAVE
Compila
____________________________________________________
ABS : AT :
BEEP : BIN : BORDER x : BRIGHT x
CHR$ : CLEAR : CLS : CODE : COPY
DATA
FLASH x : FOR
GOSUB : GOTO
IF : IN : INKEY$ : INK x : INT : INVERSE
LET
NEXT
OUT : OVER
PAPER x : PAUSE : PEEK : PI : PLOT x,y : POKE : PRINT
RANDOMIZE : READ : REM : RESTORE : RETURN : RND
STOP
TAB : THEN
USR
Y fin.