Beta Basic 1.8 Añade más de 30 comandos y 20 funciones nuevas al ZX Basic. Randomize Usr 59904 desactiva el Beta basic. Randomize Usr 58419 reactiva el BB. Todos los nuevos comandos son tecleados entrando primero en modo G (gráfico). Nota: ESTE MANUAL HA SIDO RECONSTRUIDO USANDO MATERIAL DE LOS ARTÍCULOS SOBRE EL BETABASIC DE LAS REVISTAS ESPAÑOLAS TODOSPECTRUM #15, INPUT SINCLAIR #18 Y EL MANUAL ORIGINAL DEL BETABASIC 3.00. G = caps shift + 9 (graphics) Alter (G + A) sintaxis: ALTER [atributos] TO donde: atributos = Ink , Paper , Flash , Brigth Permite cambiar los atributos de color de la pantalla. Ejemplo: ALTER TO PAPER 2 Auto (G + 6) sintaxis: AUTO [línea[,salto]] Genera automáticamente la numeración de líneas. Break La tecla BREAK es ahora más potente y nos puede sacar de cualquier apuro en código máquina. Ha sido modificada con un mecanismo de RESET que decide luego de un segundo de pulsación que el Spectrum se ha colgado y efectúa un reseteo. Clock (G + C) sintaxis1: CLOCK sintaxis2: CLOCK sintaxis3: CLOCK donde: x = modo de operación (0 - 7) x$ = "hh:mm:ss" (hora:minuto:segundo) línea = un número entre 8 y 9999 Clock empieza desde "00:00:00" a partir del momento que se carga y ejecuta el Beta Basic. Basta entrar una nueva cadena con el tiempo que se desee para poner el reloj a la hora. Sus 7 opciones o modos de operación permiten activar o no la alarma, mostrar o no el reloj en pantalla así como tener activa o no la opción de ir a una subrutina (prefijada por "línea") al darse cierta hora. Def key (G + SS + 1) sintaxis1: DEF KEY ; sintaxis2: DEF KEY : Teclas definibles por el usuario. Basta pulsar la letra designada para que aparezca una frase o ejecute sentencias de uso frecuente. Es posible definir hasta 21 nuevas funciones de este modo. Ejemplo: DEF KEY "L": "LIST 3 TO 10" Delete (G + 7) sintaxis: DELETE [x] TO [y] Borra líneas desde x hasta y. Nota: DELETE [x] sólo, no es admitido, pero sí "Delete TO x", "Delete x TO" o "Delete TO". Este último borra todo el listado menos la línea cero. Dpoke (G + P) sintaxis: DPOKE , Doble POKE, donde n es un número desde 0 hasta 65535. Edit (0 / G + SS + 5) sintaxis: EDIT [línea] Facilita la edición de líneas, evitándole a uno hacer LIST [línea] + BREAK + EDIT (CS + 1) Else (G + E) sintaxis: IF THEN :ELSE Comando típico de otras computadoras, facilita y completa la sintaxis de IF. Fill (G + F) sintaxis: FILL [INK / PAPER ;] Rellena áreas de figuras con el color de papel o tinta especificados. Ejemplo: FILL INK 4;100,100 Get (G + G) sintaxis: GET A diferencia de INKEY$, Get siempre espera hasta la pulsación de una tecla y puede ser usado para leer variables tanto numéricas como alfanuméricas. Ejemplos: GET a$. Get a. Join (G + SS + 6) sintaxis: JOIN [línea] Fusiona la línea especificada con la siguiente del listado. Keyin (G + SS + 4) sintaxis: KEYIN Permite ejecutar cualquier sentencia que esté dentro de la cadena especificada. Ejemplo: KEYIN "INPUT alfa: PRINT alfa" Keywords (G + 8) sintaxis: KEYWORDS donde n = 0 / 1 Keywords 0 permite usar los caracteres gráficos y UDG's si estos son requeridos por un programa. Los comandos del BB dejan de verse en cambio, pero siguen estando operativos. Keywords 1 los hace reaparecer en el listado nuevamente. List / Llist sintaxis: [x] TO [y] Versión mejorada de List y Llist. On (Goto / Gosub) (G + O) sintaxis: ON ; Según el valor de "var", se hará un Goto o un Gosub a la línea especificada dentro de la lista. No es necesario hacer una secuencia lógica. Ejemplo: GOTO ON a;100,4000,1000,50 On error (G + N) sintaxis: ON ERROR Permite capturar errores e ir a una subrutina preestablecida que podrá ya sea corregir el error o informarnos al respecto. Plot sintaxis: PLOT [;cadena] Permite escribir en cualquier parte de la pantalla usando las coordenadas de alta resolución. Ejemplo: PLOT 100,100;"alfa" Poke sintaxis: POKE , Permite introducir datos en memoria en forma de cadenas. Pop (G + Q) sintaxis: POP [var#] Extrae el valor de retorno de la pila para RETURN, LOOP o ENDPROC. Este se puede almacenar en una variable numérica para impimirlo o manipularlo despues. Renum (G + 4) sintaxis: RENUM [(x TO y)] [LINE nueva línea] [STEP salto] Renumera bloques de línea desde x hasta y, a partir de una nueva línea pudiendo medir el intervalo de salto entre líneas. Ejemplo: RENUM (30 TO 70) LINE 200 Roll (G + R) sintaxis: ROLL [,p] [;x,y ;a,l] donde: dir = una de las cuatro direcciones indicadas por 5,6,7, y 8. p = el número de pixeles a mover por la pantalla. x, y = la esquina superior izquierda de una porción de pantalla. a = el ancho (1 < a < 32) l = el largo (1 < l < 176) Mueve la pantalla o porciones de pantalla en cualquier dirección especificada. dir + 4 = desplazamiento de atributos inclusive. dir - 4 = solo los atributos son movidos. Todo lo que se mueve hasta el borde de un lado de la pantalla, reaparece en el lado opuesto. Scroll (G + S) sintaxis: SCROLL [dir] [,p] [;x,y ;a,l] Similar a ROLL, pero al llegar al borde de la pantalla, todo se pierde y ya no reaparece. SCROLL sin parámetros, mueve la pantalla una línea hacia arriba. Split sintaxis: "<>" Originalmente si había un comando SPLIT en la primera versión del BB. Hace lo contrario a JOIN. El signo "<>" debe ponerse luego de ":" dentro de una línea múltiple y pulsar para lograr su división. Una nueva línea con el mismo número aparece en la zona de edición esperando su renumeración. Sort (G + M) sintaxis: SORT [INVERSE] donde: vars = cadenas simples y matrices numéricas o de cadena Ordena en orden ascendente o descendente (Inverse) cualquIer lista de números o letras por su código ASCII. Trace (G + T) sintaxis: TRACE Originalmente estaban los comandos TRON y TROFF en la versión anterior del BB. TRACE permite que el usuario cree sus propias subrutinas de rastreo del programa a diferencia de TRON. Basta TRACE 0 para desactivar el rastreo como TROFF. Using (G + U) sintaxis: PRINT USING <"formato"> ; Comando típico de otras versiones de Basic, permite imprimir números con el formato que uno desee. También puede usarse con LPRINT. Los formatos pueden ser por ejemplo: "###.##", "000.00", "##.# ", "$#####". Bucles y procedimientos: Do (G + D) sintaxis: DO [WHILE / UNTIL ] Indica el inicio del bucle. Exit if (G + I) sintaxis: EXIT IF Permite salir de un bucle DO - LOOP, de acuerdo con una condición. Loop (G + L) sintaxis: LOOP [WHILE / UNTIL ] Cierra el bucle. While (G + J) sintaxis: WHILE Se hace el bucle mientras se cumpla "cond" Ejemplo: DO WHILE true: sentencias...: LOOP Until (G + K) sintaxis: UNTIL Se sigue el bucle hasta que se cumpla "cond" Ejemplo: DO: sentencias...: LOOP UNTIL false Def proc (G + 1) sintaxis: DEF PROC Permite crear un procedimiento "nombre" al estilo del PASCAL. Endproc (G + 3) sintaxis: END PROC Marca el punto en que se cierra el procedimiento. Proc (G + 2) sintaxis: PROC Llama o ejecuta al procedimiento por su nombre. Variables reservadas: Error, Line, Stat: Estas variables no existen normalmente, son creadas por On error o por Trace. ERROR = almacena el código del último error. LINE = da el número a ejecutar (con TRACE) o el número de línea donde se dio el error (con ON ERROR) STAT = da el número de sentencia en ejecución (con TRACE) o el númerode la sentencia que causó el error (con ON ERROR) Xos, Yos, Xrg, Yrg Estas variables están siempre presentes. CLEAR y RUN las devuelven a sus valores por defecto y pueden ser modificadas con LET. XOS, YOS = mueven el origen de coordenadas a cualquier parte de la pantalla. XRG, YRG = cambian la escala (rangos) de los ejes x e y. Sus valores por defecto son xos = 0, yos = 0, xrg =256, yrg =176. Códigos de control: Estos códigos han sido corregidos respecto de los bugs de la rom original del Spectrum. CHR$ 8 - cursor izquierda CHR$ 9 - cursor derecha CHR$ 10 - cursor abajo CHR$ 11 - cursor arriba Funciones: Todas las funciones son tecleadas tipeando primero "FN " seguido de una letra más "(" si son numéricas, o "$(" si son alfanuméricas. Una vez hecho esto ("FN x(" por ejemplo) es reemplazado por su nombre correspondiente. El BB requiere que todas las funciones tengan sus parámetros entre "(...)" a diferencia de las funciones normales del ZX Basic, cuyas paréntesis pueden ser opcionales. And sintaxis: AND (x,y) Función lógica bit a bit entre los dos números x e y. Bin$ sintaxis: BIN$ (x) Conversor decimal binario, hace lo contrario a BIN. Char$ sintaxis: CHAR$ (x) Convierte un número entre 0 y 65535 en una cadena de dos caracteres. Cose sintaxis: COSE (x) Versión mejorada 6 veces más rápida y con un grado de aproximación de 4 digitos. Dec sintaxis: DEC (cadena) Conversor hexadecimal - decimal. Dpeek sintaxis: DPEEK (x) Permite un Double Peek. Complementa a DPOKE. Filled sintaxis: FILLED() Muestra el número de píxeles que rellenó FILL. Hex$ sintaxis: HEX$ (x) Conversor decimal - hexadecimal. Instring sintaxis: INSTRING (x,a$,b$) Busca la cadena b$ dentro de la cadena a$ a partir de x. Mem sintaxis: MEM() Muestra el número de bytes libres en memoria. Memory$ sintaxis: MEMORY$() Permite manejar toda la memoria como si fuera una cadena. Pudiendo seleccionar zonas de la misma mediante "TO". Ejemplo: POKE 16384, MEMORY$()(1 TO 6912) Mod sintaxis: MOD (x,y) Devuelve el "resto" de la operación "x/y". Number sintaxis: NUMBER (x$) Devuelve el número almacenado en una cadena con CHAR$. Or sintaxis: OR (x,y) Función lógica binaria. Rndm sintaxis: RNDM (x) Da un número entero entre 0 y "x". Es dos veces y media más rápido que RND. Scrn$ sintaxis: SCRN$ (x,y) Versión mejorada de SCREEN$, reconoce también los UDG's. Sine sintaxis: SINE (x) Versión mejorada de SIN, como COSE. String$ sintaxis: STRING$ (x,a$) Repite la cadena a$, "x" veces. Time$ sintaxis: TIME$() Devuelve la hora en curso como una cadena de 8 caracteres. Using$ sintaxis: USING$ ("formato",n) Hace lo mismo que USING, pero puede usarse con cualquier otro comando aparte PRINT y LPRINT. Xor sintaxis: XOR (x,y) Función lógica binaria de OR exclusivo. Mensajes de error: G No room for line Se da por RENUM, hay un bloque de líneas no renumerable o el valor era mayor de 9999. S Missing LOOP Los comandos DO y EXIT IF no hallaron el LOOP correspondiente. T LOOP without DO Un LOOP fue suado sin su correspondiente DO. U No such line A DELETE se le dio un número que no existía en el listado. V No POP data Se intentó un POP con el stack vacío. Ningún Gosub, Loop o Proc estaba operando. W Missing DEF PROC Se usó PROC "nombre" o END PROC no halló su DEF PROC correspondiente. X No END PROC Al definirse un procedimiEnto se olvidó del respectivo END PROC.