X Basic Creación de Alan Wilson y Kevin P. Bosworth para Artic Computing. X Basic provee 22 nuevos comandos y sentencias para el Spectrum, muchos de los cuales son muy usuales en otros Basics. Una vez cargado con LOAD "", aparece una pantalla de presentación de los autores y la casa de software, luego de lo cual se resetea el sistema y aparece el logo típico de Sinclair (o de Amstrad en el caso de un +2) con un cuadradito papadeante que cambia de color en la esquina inferior derecha. NEW ó *OFF desactivan al Basic extendido. Se requiere un Rand.Usr 53000 para reactivarlo. Compatibilidades: Acepta los comandos de disco de Opus D1 y Microdrive sin colgarse. No es muy compatible con el Disciple pero funciona bien con +D, Beta-Dos y Uni-Dos. Funciona aceptablemente con el Wafadrive dependiendo de qué ROM del Spectrum se use. No es muy estable con el Didaktik Kompakt pero parece aceptar los comandos del Mdos. Se carga sin problemas en el 128k y +2, ambos van al 48k con el Xbasic intacto. Sucede igual con Pentagon y Scorpion. Se cuelga con el TR-Dos. Hay que desactivarlo previamente con *OFF antes de usar los comandos de Betadisco. Causa crash del sistema en las máquinas +3 y +2a originales. No, si están en modo 48k o si se usa una ROM modificada. En el caso del MB-02+ solo se admiten los comandos directos del XB, pero no corren los listados. Si se intenta hacer RUN a un listado con sentencias XBasic, leerá sin parar el disco o cinta. Por suerte, basta un BREAK para que se detenga. Igual que con el Betadisco, hay que hacer *OFF antes de usar una orden del BS-dos. En el caso de la rom 80-lec, apenas carga, salta al menú de inicio. Basta pulsar 1 para seguir con el Basic. Lo mismo tras un *new. Con GOSH WONDERFUL ROM, *new no funciona, hay que hacer NEW y luego reactivar el XBasic. Pasa lo mismo con el SE basic 0.94b. No corre en el SEA CHANGE de Geoff Wearmouth, resetea o cuelga el sistema. Sintaxis: *comando [parametros] Comandos: Auto, Ccol, Colour, Delete, Error, Find, Stat, Renum, Recall, Repeat, Until, Reset, Store, Off, Get, Put, Pip, New, Break, Fill, Key, Indic. Los comandos tienen el * como prefijo y deben ser tipeados letra a letra. Es indistinto si se tipean ya en mayusculas o minusculas. Para que se ejecuten dentro de un listado, se requiere que la primera línea del programa sea Rand.Usr 53000 o al menos esté en un algún punto antes de los comandos X basic. Como comandos directos no pueden ir antes ni después de las sentencias del Spectrum, ya que en el primer caso lo que sigue no se ejecutará y en el último, el control sintáctico impedirá su ingreso. Ejemplos: *pip 1: STOP - se ejecutará *pip pero no STOP. CLS: *pip 50 - no es admitido tras pulsar ENTER. *pip 0: *colour 1,4 - solo ejecutará la primera instrucción. En suma, cada comando directo del XB debe ingresarse separadamente. Sin embargo dentro de un listado parece ser posible poner una sentencia de Spectrum luego de una de XB, pero no a la inversa. Ejemplo: 20 *colour1,4: PRINT 1 - ejecutará ambas ordenes al hacer RUN. *Auto sintaxis:*Auto línea,{salto} Genera automáticamente la numeración de líneas. Necesita de un número de línea para empezar, seguido de coma. Si no se dan parametros da error. El salto es 10 por defecto. Para salir de este modo basta pulsar BREAK. Ejemplos: *auto - dará error. Igual si línea es 0, menor que 0 o 9999 *auto10, - da OK y luego empieza a partir de 20 en adelante. *auto95,5 - empezará desde 100 con intervalos de 5. Nota: de existir una linea previa como '10 PRINT', el uso de '*auto 10,' borrará dicha linea y así sucesivamente. *Delete sintaxis: *Delete x,{y} Elimina lineas desde x hasta y. Desde la linea x hasta el final del listado, si se omite y. x no puede omitirse, Para borrar desde el comienzo del listado hasta y, usar: *delete0,y ó 1,y. Da error sin ningún parámetro o si hay equivoco sintáctico. Ejemplo: *delete 10 - dará error, la coma no puede ser omitida. Pero... *delete 10, - borrará desde la línea 10 hasta la ultima linea *Renum sintaxis: *Renum {c,{i}} donde: c = la línea de comienzo e i = el intervalo entre líneas Permite renumerar todo un programa incluidos GOTO y GOSUB. Si no se dan parametros empieza por defecto en la línea 10 y salta en intervalos de 10. *Stat Muestra en pantalla el estado actual de la memoria. No requiere parametros. La información que ofrece es la sigte: Program Length: ...(largo del programa) Variables: ... Spare: ... RAMtop: ... . Todo antecedido por el título: XBASIC primera linea: Randomize Usr 53000 *Find sintaxis: *Find{:} t donde t = el texto o palabra a buscar en el listado Da error si no hay parametros. Ejemplos: *Find CHR$ 91 - mostrara la primera linea que contenga esta funcion *Find: LET A = A+1 - buscara las sentencias a partir del puntero de línea en curso *New Al igual que NEW, borra los programas Basic de la memoria y reinicia los atributos de la pantalla, pero sin desactivar el XBasic residente. *Off Desactiva el Xbasic sin borrar el programa en curso. Retorna al Basic normal del Spectrum. *Pip sintaxis: *pip n donde: n = un valor de 0 a 255. Controla el chasquido de las teclas al pulsarlas. *pip 0 vuelve al modo normal del Spectrum. *Key sintaxis: *key n{:t} donde: n = un caracter ASCII del teclado y t = texto/sentencia La omisión de t devuelve a la tecla su estado original anterior a su redefinición. XBasic permite que se ejecuten o se impriman en el área de edición cualquier texto o sentencia almacenada en cualquier tecla del Spectrum. Ejemplos: *key<:*renum - hará aparecer *renum al pulsar symbol+R *key< - desactiva la orden anterior De hecho XB ya tiene una tecla predefinida que es ? (symbol+c) con el texto: Rand.Usr53000:Continue. *Colour sintaxis1: *Colour i,pb donde i = color de tinta y pb = color de borde y papel Tanto i como pb deben ser valores del 0 al 7, cualquier otro valor dará error. Afecta no solo los atributos del fondo sino también del borde y la zona baja de Inputs. Ejemplo: *Colour 1,1 - deja todos los atributos en azul *Fill sintaxis:*fill x,y Rellena figuras con color solido seleccionado previamente con INK o *colour. *Break sintaxis: *break: sent donde: sent = CONTINUE/STOP/GOTO x Habilita / deshabilita el uso de BREAK o salta a línea x. *break: continue - impide que se interrumpa la ejecución de un programa mediante BREAK. *break: stop - vuelve al modo de interrupción normal con BREAK. *break: GOTO x - envía el control a una linea x de pulsarse BREAK. *Error sintaxis: *error: sent donde: sent = GOTO/CONTINUE/STOP Como *Break pero para capturar cualquier otro tipo de error. Usa las sigtes. variables reservadas: err = almacena el código del error. erl = da el número de línea donde se dio el error Ejemplo1: 10 RANDOMIZE USR 53000 20*error: GOTO 1000 30 INPUT n: IF n=-1 THEN STOP 40 PRINT 1/n 50 GOTO 30 1000 PRINT err,erl Ejemplo2: 10 RANDOMIZE USR 53000 20*error: CONTINUE 30 INPUT n: IF n=-1 THEN STOP 35 IF n=-1 THEN GOTO 60 40 PRINT 1/n 50 GOTO 30 60*error: STOP 70 PRINT err,erl 80 GOTO 30 Nota: tanto *break como *error darán error si se usan otras ordenes distintas a las ya especificadas. *Store sintaxis: *Store n Copia una imagen de la pantalla pasandola a la posición de memoria n. Da error sin parametros. *Recall sintaxis: *Recall {n} Recupera la imagen salvada por *store. n es opcional. Ejemplo: *Store 43000 - salva una pantalla en la memoria RAM *Recall - muestra en pantalla la imagen salvada previamente. *Repeat - Until sintaxis: *Repeat *Until Instrucciones muy típicas de otros lenguajes estructurados como el Pascal, la sentencia *repeat inicia un bucle condicional que se repite hasta que se cumpla la condición dada por *until. Las siguientes lineas: 10 RANDOMIZE USR 53000 20*repeat 30 INPUT n 40*untiln=-1 son tan válidas como: 20 *repeat: INPUT n: *untiln=-1 Nota: este bucle es válido dentro de un programa pero no se ejecuta como orden directa. *Put sintaxis: *put n,x donde: n,x = son valores desde 0 a 65535 Permite hacer un doble poke en cualquier posición de memoria RAM valida. *Get sintaxis: *get n donde: n = un valor de 0 a 65535 Equivale a un doble peek. Muestra en pantalla el contenido de la memoria en n. Toda la información anterior la he obtenido por prueba y error. La única pista sobre el uso de los comandos del XB está en el listado cargador del programa mismo. A falta del manual original o mayores datos, ignoro qué hacen o para qué sirven los siguientes comandos: *CCol sintaxis: *Ccol h,m donde h,m = un valor de 0 a 7 Da error si no se da ningún parámetro. Ejemplo: *Ccol 0,6 *Indic sintaxis: *indic n donde n = 0/1 Cualquier otro valor da error. *Reset Carece de parametros Mensajes de error: 1 Error in XBasic - mensaje usual en caso de errores sintacticos del XBasic o un * solo. 2 Until Without Repeat - se ha enocntrado un *until sin su previa orden *repeat 3 Too many repeats - hay demasiados *repeats en el listado. 4 Too many defined keys - demasiadas teclas definidas por el usuario con *key 5 Definition to long - se ha encontrado una definición demasiado larga. 6 String not found (cadena no hallada) - se da con Find. Por ejemplo: *Find 120 0 OK - los comandos extendidos se ejecutaron correctamente. zx_if1@hotmail.com