Paradigma | Imperativo |
---|---|
Diseñado por | John Grant y Steve Vickers |
Revelador | Redes de nueve mosaicos, Sinclair Research |
Apareció por primera vez | 1979 ( 1979 ) |
Plataforma | ZX80 , ZX81 , ZX Spectrum, +, 128, +2, +3 , T/S 2068 , TC 3256 |
Licencia | Propiedad |
Sinclair BASIC es un dialecto del lenguaje de programación BASIC utilizado en los ordenadores domésticos de 8 bits de Sinclair Research , Timex Sinclair y Amstrad . El intérprete de Sinclair BASIC fue escrito por Nine Tiles Networks Ltd. [1]
Diseñado para funcionar con solo 1 KB de RAM , el sistema toma una serie de decisiones para reducir el uso de memoria. Esto llevó a una de las características más notables de Sinclair BASIC: las palabras clave se ingresaban con una sola pulsación de tecla; cada una de las posibles palabras clave se asignaba a una tecla del teclado y, al presionarla, el token se colocaba en la memoria mientras que la palabra clave completa se imprimía en la pantalla. Esto hizo que la entrada de código fuera más fácil y al mismo tiempo simplificó el analizador .
La versión original del ZX80 sólo admitía operaciones matemáticas con números enteros , lo que compensaba parcialmente algunas de las notas de diseño para ahorrar memoria que tenían un impacto negativo en el rendimiento. Cuando el sistema se adaptó al ZX81 en 1981, se agregó una implementación completa de punto flotante . Esta versión era muy lenta, una de las BASIC más lentas del mercado en ese momento, pero dadas las capacidades limitadas de la máquina, esto no era un problema grave.
El rendimiento se convirtió en un problema más serio con el lanzamiento del ZX Spectrum en 1983, que funcionaba demasiado lento para aprovechar al máximo las nuevas características de la máquina. Esto dio lugar a un BASIC completamente nuevo para el siguiente Sinclair QL , así como a una serie de BASIC de terceros para el Spectrum y sus diversos clones. La versión original continuó modificándose y adaptándose en la era posterior a Sinclair.
Clive Sinclair se reunió inicialmente con John Grant, el propietario de Nine Tiles, en abril de 1979 para discutir un BASIC para el nuevo concepto de computadora de Sinclair. [2] Sinclair se inspiró para hacer una nueva máquina después de ver a su hijo disfrutar de su TRS-80 , pero el precio de £ 500 de esa máquina parecía ser un límite serio en su popularidad. Quería un nuevo kit que ampliara su MK14 anterior y presentara un BASIC incorporado al precio objetivo de £ 79.95. Para cumplir con este precio, la máquina se enviaría con solo 1 KB de RAM y 4 KB de ROM. Grant sugirió usar el lenguaje Forth en su lugar, pero el presupuesto lo impidió. Grant escribió el intérprete BASIC entre junio y julio de 1979, pero el código inicialmente llegó a 5 KB y pasó el mes siguiente reduciéndolo. Inicialmente fue una implementación incompleta del estándar BASIC Mínimo del Instituto Nacional Estadounidense de Estándares (ANSI) de 1978 con solo aritmética de números enteros, denominado 4K BASIC . [3]
Incluso antes de que se introdujera el ZX80 en febrero de 1980, la constante presión a la baja de los precios en la industria estaba permitiendo que el diseño, ya de por sí económico, se redujera aún más en complejidad y coste. En particular, muchos de los circuitos separados del ZX80 se volvieron a implementar en una única matriz lógica no comprometida de Ferranti , lo que permitió reducir el precio a solo 49,95 libras esterlinas al tiempo que aumentaba el tamaño de la ROM a 8 KB. Este trabajo fue asignado a Steve Vickers , quien se unió a Nine Tiles en enero de 1980. Mientras Grant trabajaba en el código que interactuaba con el hardware, Vickers utilizó el espacio más grande para introducir la aritmética de punto flotante y un conjunto de funciones trigonométricas , que se esperaban de cualquier BASIC de esa época, produciendo el BASIC de 8K . [4] La versión inicial no era compatible con la impresora ZX y tenía un error en su función de raíz cuadrada . Nine Tiles proporcionó una nueva versión para solucionar estos problemas, pero Sinclair tardó en incluir la nueva versión en las ROM. Finalmente, las nuevas ROM también se ofrecieron a los propietarios del ZX80 anterior. [5]
Cuando Sinclair perdió el concurso para construir la BBC Computer , siguió adelante con los planes de producir una máquina de bajo coste con capacidad para reproducir color que surgió como el ZX Spectrum de abril de 1982. El espacio de ROM se incrementaría una vez más, esta vez a 16 KB. En consonancia con su filosofía de hacer sistemas con el menor gasto posible, Sinclair quería los cambios mínimos absolutos en el BASIC de 8K existente. Aunque Nine Tiles consideró que se necesitaría algo mucho mejor para la nueva máquina, el calendario no lo permitió, y se produjo otra expansión del código original. Debido a que la RAM también se incrementó, a 48 KB, esta versión se conoció como 48K BASIC y, finalmente, 48 BASIC con la introducción del ZX Spectrum 128, momento en el que el Spectrum de 16 KB ya no se vendía y la mayoría de los existentes en uso se habían actualizado a 48 KB. [6] [7] La nueva versión estuvo disponible a finales de 1981, pero era "deprimentemente lenta" y "lenta como un caracol". Además, como no hubo prototipos disponibles hasta finales de año, carecía de soporte para la nueva línea de periféricos que Sinclair estaba planeando. [8]
En febrero de 1982, Nine Tiles comenzó a tener desacuerdos con Sinclair sobre las regalías adeudadas por los diversos manuales que Nine Tiles había producido. Casi al mismo tiempo, Vickers y su homólogo de Sinclair, Richard Altwasser, dejaron sus respectivas compañías para comenzar el proyecto Jupiter Ace . [9] Cuando se lanzó el Spectrum, la ROM aún no estaba completa, y aunque Nine Tiles continuó trabajando en él hasta abril de 1982, en ese momento ya se habían vendido 75.000 Spectrum y el proyecto se canceló. La funcionalidad faltante se agregó más tarde mediante código adicional en la Interfaz ZX 1 . Después de que Nine Tiles y Sinclair siguieran caminos separados, se crearon varias versiones nuevas de 48 BASIC.
En 1983, como parte de la introducción del Spectrum al mercado estadounidense como TS2068, Timex lo modificó como T/S 2000 BASIC . La nueva versión no podía ejecutar muchos programas Spectrum debido a que la ubicación de la memoria de las funciones de la máquina se movía. Una versión similar, pero algo más compatible, fue presentada como parte del Spectrum 128 en español de 1985, el 128 BASIC . [7]
Amstrad compró Sinclair Research en 1986. Como Sinclair nunca había tenido los derechos de autor del lenguaje, Amstrad tuvo que acordar una nueva licencia con Nine Tiles. En este período también aparecieron otras versiones a medida que se introdujeron varias extensiones y clones del Spectrum. Entre ellas se encontraban +3 BASIC , BASIC64 y Timex Extended Basic . [7] [6]
A partir de 2015, existen intérpretes para sistemas operativos modernos , [10] y sistemas más antiguos, [11] que permiten utilizar Sinclair Basic fácilmente.
Como la mayoría de los BASIC para ordenadores domésticos, el BASIC de Sinclair se basa en su editor de líneas . Cuando se arranca la máquina, ejecuta el BASIC y muestra una "K" de vídeo invertida en la parte inferior de la pantalla para indicar el punto de entrada. Cuando se introduce una línea y NEW LINEse pulsa la tecla, se ejecuta inmediatamente si no tiene un prefijo de número de línea , o bien borra la pantalla y ejecuta el equivalente a un LIST
comando, colocando un cursor ">" después del número de línea en la última línea introducida.
A diferencia de la mayoría de las máquinas de la época, el editor no permite la edición libre en ningún punto de la pantalla. En cambio, cuando el usuario presiona , la línea de código actual se copia de nuevo en la parte inferior de la pantalla. El usuario puede moverse horizontalmente a través de esta línea utilizando las teclas del cursor y confirma sus cambios presionando nuevamente. En cambio, en máquinas como los ordenadores Commodore 64 o Atari de 8 bits , las teclas arriba y abajo se pueden utilizar para moverse entre las líneas del programa y editarlas en el lugar.EDITNEW LINE
La característica más notable del editor es que las palabras clave se introducen con una sola pulsación de tecla. Por ejemplo, en el ZX81, la tecla del teclado haría que la palabra clave completa se introduzca en la línea que se está editando en ese momento. Una vez que se ha introducido una palabra clave, el cursor cambia a una "L" para indicar que lo que sigue se interpretará como texto normal. Por ejemplo, si se pulsa de nuevo en este punto se introduciría una sola letra "P".PPRINT
P
Las teclas generalmente tenían asignadas dos palabras clave independientes: una encima y otra debajo. Al presionar la tecla en modo "K", se ingresaba la palabra clave que se encontraba sobre la tecla, como PRINT
en el caso de . Si el sistema estaba en modo "L", se podía volver a "K" presionando la tecla Shift (los sistemas inicialmente no admitían texto en minúsculas , por lo que no era necesario presionar la tecla Shift). Las palabras clave que se encontraban debajo de las teclas requerían una segunda pulsación de tecla, + , que ponía al editor en "modo de función", cambiando el cursor a una "F". Al ingresar un código común, a menudo se presionaban muchas teclas.P⇧ ShiftNEW LINE
El sistema tiene la ventaja de representar todas las palabras clave de varios caracteres como un solo carácter en la memoria, lo que supuso un ahorro significativo en las primeras máquinas que se entregaban con solo 1 KB de RAM. Esta representación de un solo carácter incluía elementos de varios caracteres como <>
. Esto tiene las ventajas adicionales de simplificar el tiempo de ejecución, ya que puede determinar inmediatamente si un carácter en el código fuente es una palabra clave o texto, y también significa que las palabras clave nunca se ingresan directamente, lo que significa que uno puede, por ejemplo, tener una variable llamada "PRINT", ya que el sistema puede determinar que no es la misma que la palabra clave.
A medida que los sistemas evolucionaron y se agregaron nuevas palabras clave, el sistema de entrada se volvió cada vez más difícil de usar. 48 BASIC en Spectrum requería que cada tecla albergara hasta cuatro palabras clave. Introducir palabras clave era un proceso que consumía mucho tiempo, ya que había que buscar la tecla adecuada en el tipo de letra relativamente pequeño del teclado y, luego, introducir correctamente las múltiples pulsaciones de teclas necesarias para hacerlo correctamente. Por ejemplo, para introducir BEEP
palabras clave era necesario escribir + para acceder al modo extendido (los modelos posteriores incluyen una tecla separada), mantener pulsada la tecla y, a continuación, pulsar . Para mejorar la complejidad de la entrada en Spectrum, las palabras clave se codificaron por colores para indicar el modo requerido: [12]CAPS SHIFTSYMBOL SHIFTEXTENDED MODESYMBOL SHIFTZ
Este concepto ya había llegado a su fin y las máquinas posteriores que ejecutaban 128 BASIC (ZX Spectrum 128, +2, +3, +2A y +2B) presentaban un editor más tradicional en el que el usuario escribía la palabra clave como caracteres individuales, de manera similar a otras computadoras hogareñas de la época. Esto requería un nuevo tokenizador para convertir la línea a un formato interno similar.
El almacenamiento en memoria resultante del programa era similar al BASIC de Microsoft , en el sentido de que solo las palabras clave se presentan como tokens, mientras que las que no son palabras clave (como las constantes numéricas y de cadena y los nombres de variables) se dejan en su formato original. Sin embargo, ese formato escrito no era ASCII , sino un código de caracteres interno que contiene caracteres imprimibles y tokens de palabras clave. Aunque partes de la tabla, las letras mayúsculas de la A a la Z, por ejemplo, están en el mismo orden que en ASCII, sus caracteres corresponden a valores numéricos diferentes, es decir, el desplazamiento de sus puntos de código desde cero es diferente del desplazamiento de 65 de ASCII. Es posible que otros caracteres, como la puntuación, se hayan movido aún más. El conjunto de caracteres ZX Spectrum es el ejemplo más destacado de dicho código de caracteres. Las computadoras relacionadas que ejecutaban Sinclair BASIC usaban variantes similares, por ejemplo, los conjuntos de caracteres ZX80 o ZX81 . Todos estos conjuntos de caracteres diferentes pero relacionados incluían tokens Sinclair BASIC.
Una característica poco común de Sinclair BASIC es la forma en que almacena las variables en la memoria. Normalmente, los intérpretes utilizan una entrada de tamaño fijo para almacenar los datos, lo que facilita el escaneo de la tabla de variables. Debido a la memoria extremadamente limitada de la serie ZX, se debía evitar cualquier espacio desperdiciado, y esto llevó al uso de un formato de longitud variable. Los tipos de datos incluían números almacenados en valores de 5 bytes, cadenas con una longitud y luego los caracteres, y matrices de ambos tipos. Los datos se almacenaban en la propia tabla, lo que contrasta con la mayoría de los BASIC de la época, donde las cadenas y las entradas de matriz se almacenaban en un montón separado .
El primer byte de una entrada de variable siempre contenía el tipo en los primeros tres bits y el primer carácter del nombre en los siguientes cinco bits. Como era el caso en la mayoría de los dialectos de microcomputadoras, A
, A$
y A()
eran A$()
todas variables diferentes y podían almacenar valores diferentes. La mayoría de las variables solo podían tener un nombre de un solo carácter; la excepción son las variables numéricas (no matrices), donde un formato alternativo contenía el primer carácter del nombre en esos mismos cinco bits, pero luego era seguido por caracteres adicionales que terminaban en uno con su bit alto establecido. Los nombres de variable largos eran independientes de los espacios en blanco y no distinguían entre mayúsculas y minúsculas en versiones posteriores, por lo que es lo mismo que se refiere a la misma variable.LET Number Of Apples = 5
LET numberofapples = 5
La desventaja de este enfoque es que escanear la tabla para buscar el valor de una referencia de variable es más complejo. Además de probar si el nombre coincide utilizando el subconjunto del primer byte, si la entrada no es la que se está buscando, el tipo tiene que leerse desde los tres bits superiores y luego la siguiente ubicación de una variable en el almacenamiento calculada utilizando el tipo. Por ejemplo, si el programa encuentra la variable "A" y la tabla comienza con la entrada para "B$", no logra hacer coincidir A con B, luego lee el tipo para ver si es una cadena y luego tiene que leer el siguiente byte de longitud y saltar hacia adelante esa cantidad de bytes para encontrar la siguiente entrada en la tabla. Para hacer esto un poco más fácil, las matrices también almacenan una longitud de dos bytes, por lo que se puede omitir toda la estructura más fácilmente.
Una característica única era el "float corto", o tipo entero. Cualquier variable numérica podía almacenar cualquiera de los dos tipos, el almacenamiento en sí no cambiaba y utilizaba 5 bytes en ambos casos. Los enteros se indicaban fijando el byte del exponente en cero, mientras que los valores de punto flotante se almacenaban con un exponente de formato de exceso de 128. Esto significaba que no podía almacenar cero como un float y perdía una posible magnitud de exponente. Tampoco utilizaba menos memoria, ya que los valores seguían ocupando 5 bytes en la memoria. La ventaja de este formato es el rendimiento; la biblioteca matemática incluía pruebas para buscar el exponente cero y, si lo veía, no intentaba realizar varias operaciones en los 3 bytes restantes en determinadas condiciones.
El ZX81 8K BASIC utilizaba las formas cortas GOTO
, GOSUB
, CONT
y RAND
, mientras que el Spectrum 48 BASIC utilizaba las formas más largas GO TO
, GO SUB
, CONTINUE
y RANDOMIZE
. El ZX80 4K BASIC también utilizaba estas formas más largas, pero se diferenciaba por el uso de la ortografía RANDOMISE
. El ZX81 8K BASIC era la única versión que utilizaba FAST
, SCROLL
, SLOW
y UNPLOT
. El ZX80 4K BASIC tenía la función exclusiva TL$()
; era equivalente al operador de cadena (2 TO )
en versiones posteriores.
En el conjunto de caracteres ZX80 , ZX81 y ZX Spectrum se asignan puntos de código únicos para cada palabra clave u operador de múltiples caracteres, es decir <=
, , >=
, <>
, ""
(tokenizado solo en el ZX81), **
(reemplazado por ↑
en el Spectrum). Estos se expanden haciendo referencia a una tabla de tokens en ROM. Por lo tanto, una palabra clave usa solo un byte de memoria, un ahorro significativo sobre el almacenamiento tradicional letra por letra. Esto también significaba que el intérprete de BASIC podía determinar rápidamente cualquier comando o función evaluando un byte, y que las palabras clave no necesitaban ser palabras reservadas como en otros dialectos BASIC u otros lenguajes de programación, por ejemplo, se permite definir una variable nombrada PRINT
y mostrar su valor con PRINT PRINT
. Esto también está relacionado con el requisito de sintaxis de que cada línea comience con una palabra clave de comando, y presionar la única pulsación de tecla para ese comando al comienzo de una línea cambia el editor del modo de comando al modo de letra. Por lo tanto, la asignación de variables requiere LET
(es decir, no solo ). Esta práctica también es diferente de otros dialectos BASIC. Además, esto significaba que, a diferencia de otros dialectos BASIC, el intérprete no necesitaba paréntesis para identificar funciones; era suficiente, no era necesario (aunque esto último estaba permitido). La ROM BASIC de 4K del ZX80 tenía una breve lista de excepciones a esto: las funciones , , , , , , y no tenían tokens de un byte, sino que se escribían letra por letra y requerían los paréntesis. Se enumeraban como FUNCIONES INTEGRALES en una etiqueta encima y a la derecha del teclado. [13]LET a=1
a=1
SIN x
SIN(x)
CHR$()
STR$()
TL$()
PEEK()
CODE()
RND()
USR()
ABS()
128 BASIC , presente en los ZX Spectrum 128, +2, +3, +2A y +2B, almacenaba palabras clave internamente en puntos de código de un byte, pero utilizaba un sistema de entrada BASIC convencional letra por letra. También introdujo dos nuevos comandos:
PLAY
, que operaba el chip de música General Instrument AY-3-8910 de los modelos 128kSPECTRUM
, que cambió el espectro de 128k a un modo de compatibilidad con el espectro de 48kEl ZX Spectrum 128 original en español incluía cuatro comandos de editor BASIC adicionales en español, [14] [15] uno de los cuales no estaba documentado:
EDITAR
(para editar un número de línea o invocar el editor de cadenas de pantalla completa)NUMERO
(para renumerar las líneas del programa)BORRAR
(para borrar líneas de programa)ANCHO
(para establecer el ancho de la columna del dispositivo RS-232 , pero no está documentado porque el código estaba roto)A diferencia de las funciones LEFT$()
, MID$()
y RIGHT$()
utilizadas en los omnipresentes dialectos Microsoft BASIC para ordenadores domésticos, en Sinclair BASIC se accede a partes de cadenas mediante un rango numérico. Por ejemplo, a$(5 TO 10)
proporciona una subcadena que comienza con el quinto y termina con el décimo carácter de la variable a$
. Por tanto, es posible sustituir los LEFT$()
comandos RIGHT$()
y simplemente omitiendo la posición izquierda o derecha de la matriz respectivamente; por ejemplo , a$( TO 5)
es equivalente a LEFT$(a$,5)
. Además, a$(5)
solo es suficiente para sustituir MID$(a$,5,1)
.
En el ZX Spectrum 16K/48K ( 48 BASIC) , hay 88 palabras clave en Sinclair BASIC, que denotan comandos (de los cuales hay 50), funciones y operadores lógicos (31) y otras palabras clave (16, incluidas 9 que también son comandos o funciones):
Palabra clave | Parámetros [nota 1] | Ingresado usando [nota 2] | Tipo | Resumen |
---|---|---|---|---|
ABS | number | EXTENDED MODEentoncesG | Función | Devuelve el valor absoluto de number [16] |
ACS | number | EXTENDED MODEentonces +SYMBOL SHIFTW | Función | Devuelve el arcocoseno de number [17] |
AND | SYMBOL SHIFT+Y | Operador lógico | Devuelve verdadero si ambas condiciones en ambos lados de la AND palabra clave son verdaderas, de lo contrario devuelve falso [nota 3] [18] | |
ASN | number | EXTENDED MODEentonces +SYMBOL SHIFTQ | Función | Devuelve el arcoseno de number [19] |
AT | line, column; | SYMBOL SHIFT+I | Otro | Se utiliza en una PRINT declaración para imprimir en la línea y columna especificadas; [20] por ejemplo, PRINT AT 5,10;"*" coloca una estrella en la columna 10 de la línea 5. |
ATN | number | EXTENDED MODEentonces +SYMBOL SHIFTE | Función | Devuelve la arcotangente de number [17] |
ATTR | (line, column) | EXTENDED MODEentonces +SYMBOL SHIFTL | Función | Devuelve un byte que contiene información sobre los colores de la celda de texto en la pantalla, correspondientes a los especificados line y column ; tenga en cuenta que, a diferencia de la mayoría de las palabras clave de Sinclair BASIC, los paréntesis son obligatorios; los primeros tres bits indican el color de la tinta (primer plano), los bits cuarto, quinto y sexto el color del papel (fondo), el séptimo bit si los colores son brillantes o no, y el octavo, si son parpadeantes [21] |
BEEP | duration, pitch | EXTENDED MODEentonces +SYMBOL SHIFTZ | Dominio | Produce sonido desde el altavoz de la computadora; duration está en segundos, el tono está en semitonos por encima (valor positivo) o por debajo (valor negativo) del do central [22] |
BIN | number | EXTENDED MODEentoncesB | Otro | Indica number que está en notación binaria [23] |
BORDER | number | B | Dominio | Establece el borde de la pantalla con el color especificado por number [nota 4] [24] |
BRIGHT | number | EXTENDED MODEentonces +SYMBOL SHIFTB | Comando/otro | Hace que todos los colores siguientes sean más brillantes si number es 1, o su tono normal si es 0 [nota 5] [25] |
CAT | number | EXTENDED MODEentonces +SYMBOL SHIFT9 | Dominio | Muestra el contenido de ZX Microdrive especificado por number [nota 6] [26] |
CHR$ | number | EXTENDED MODEentoncesU | Función | Devuelve el carácter correspondiente al decimal en el conjunto de caracteresnumber de la computadora [27] |
CIRCLE | x, y, r | EXTENDED MODEentonces +SYMBOL SHIFTH | Dominio | Dibuja un círculo con su centro en las coordenadas ( x , y ) y radio r [28] |
CLEAR | address | X | Dominio | Limpia la pantalla, [29] todas las variables y la GO SUB pila, [30] y opcionalmente establece la dirección RAM máxima que utilizará BASIC [31] |
CLOSE # | number | EXTENDED MODEentonces +SYMBOL SHIFT5 | Dominio | Cierra el número de flujo especificado para el acceso [nota 6] |
CLS | V | Dominio | Borra todo el texto y los gráficos de la pantalla [29] | |
CODE | string | EXTENDED MODEentoncesI | Función/otro | Devuelve el número correspondiente al primer carácter en el conjunto de caracteresstring de la computadora ; [27] también se utiliza para guardar fragmentos arbitrarios de memoria en cinta, disco, etc. y cargarlos nuevamente en — vea y para más detallesLOAD SAVE VERIFY |
CONTINUE | C | Dominio | Reinicia un programa después de que se haya detenido debido a un error o porque el usuario presionó las teclas + o [32]CAPS SHIFTSPACEBREAK | |
COPY | Z | Dominio | Envía la pantalla mostrada actualmente a la impresora [33] | |
COS | number | EXTENDED MODEentoncesW | Función | Devuelve el coseno de number [34] |
DATA | comma-separated values | EXTENDED MODEentoncesD | Comando/otro | Proporciona números y/o cadenas para usar con el READ comando [35] y permite guardar el contenido de una matriz en cinta cuando se usa con el SAVE comando [36] (como SAVE filename DATA array name() ) |
DEF FN | name(variable) = operation | EXTENDED MODEentonces1 | Dominio | Define una función personalizada que se puede utilizar con el FN comando; las definiciones de funciones deben tener el formato f(x)=operations , por ejemplo f(x)=x*2 , y el nombre de la función no puede constar de más de una letra, más un símbolo $ si la función devuelve una cadena [37] |
DIM | variable(dimensions) | D | Dominio | Declara una matriz con el valor especificado dimensions , que puede ser multidimensional (por ejemplo, DIM a(10,10) ; si se usa con cadenas, la última dimensión indica la longitud de cada una de las cadenas (por lo tanto, DIM a$(2,5) es una matriz de dos cadenas de cinco caracteres cada una, y DIM b$(5) es una cadena de cinco caracteres) [38] |
DRAW | x, y [, r] | W | Dominio | Dibuja una línea en el INK color actual con coordenadas ( x , y ) a partir de las coordenadas utilizadas por el comando PLOT o anterior DRAW ; si se proporciona el opcional r , indica el radio del segmento de círculo que se dibujará, en radianes [39] |
ERASE | drive;"filename" | EXTENDED MODEentonces +SYMBOL SHIFT7 | Dominio | Elimina el archivo especificado de un Microdrive ZX [nota 6] [40] |
EXP | number | EXTENDED MODEentoncesX | Función | Devuelve e elevado a la potencia number [41] |
FLASH | number | EXTENDED MODEentonces +SYMBOL SHIFTV | Comando/otro | Hace que todo el texto siguiente alterne sus colores de primer plano ( INK ) y de fondo ( PAPER ) [nota 5] |
FN | function(value) | EXTENDED MODEentonces +SYMBOL SHIFT2 | Función | Llama al function definido anteriormente en el programa usando DEF FN [37] |
FORMAT | drive;"name" | EXTENDED MODEentonces +SYMBOL SHIFT0 | Dominio | Formatea el cartucho en el Microdrive indicado y le asigna el identificador name [nota 6] [42] |
FOR | variable = start TO end | F | Dominio | Inicia un bucle FOR - ; [43] el nombre de la variable solo puede tener un carácter de longitud [44]NEXT |
GO SUB | number | H | Dominio | Hace que el programa salte a la línea BASIC especificada por number ; cuando el programa encuentra el comando RETURN , saltará nuevamente a la declaración después de GO SUB [45] |
GO TO | number | G | Dominio | Hace que el programa salte a la línea BASIC especificada pornumber |
IF | condition THEN | U | Dominio | Evalúa condition y, si es verdadero, ejecuta la declaración que sigue a la palabra clave THEN que debe ir después de la condición, [46] por ejemplo [nota 7]IF a=1 THEN LET b=2 |
IN | address | EXTENDED MODEentonces +SYMBOL SHIFTI | Función | Devuelve un byte leído desde el puerto de entrada/salida de hardware correspondiente a address [47] |
INK | number | EXTENDED MODEentonces +SYMBOL SHIFTX | Comando/otro | Establece el color de primer plano para texto y gráficos [nota 4] [nota 5] [48] |
INKEY$ |
| EXTENDED MODEentonces +SYMBOL SHIFTZ | Función | Devuelve una cadena que representa la tecla que se presiona en el teclado en el momento en que se llama a la función, o una cadena vacía si no hay ninguna, [49] pero no espera a que se presione una tecla. |
INPUT | [prompt,] variable | I | Dominio | Detiene la ejecución del programa hasta que el usuario escribe algo en el teclado y presiona la Enter tecla, luego almacena el valor ingresado en el especificado variable ; si se proporciona el opcional prompt , esto se mostrará en la pantalla [50] |
INT | number | EXTENDED MODEentoncesR | Función | Devuelve el valor enteronumber de , redondeándolo hacia abajo hasta el número entero más cercano [16] (por lo tanto, INT -1.1 devuelve −2, no −1) |
INVERSE | number | EXTENDED MODEentonces +SYMBOL SHIFTM | Comando/otro | Invierte los colores de todo el texto siguiente si number es 1, de modo que utiliza el color de tinta actual para el fondo y el color de papel actual para el texto, o los vuelve a establecer en valores normales si number es 0 [nota 5] [51] |
LEN | string | EXTENDED MODEentoncesK | Función | Devuelve el número de caracteres (bytes) en string [52] |
LET | variable=value | L | Dominio | Asigna value a la variable nombrada [53] |
LINE |
| EXTENDED MODEentonces +SYMBOL SHIFT3 | Otro |
|
LIST | [number] | K | Dominio | Muestra el programa BASIC actual en la pantalla; si number se proporciona el opcional, omite todas las líneas con un número inferior [55] |
LLIST | [number] | EXTENDED MODEentonces +SYMBOL SHIFTV | Dominio | Como LIST excepto que el listado se envía a la impresora [33] |
LN | number | EXTENDED MODEentonces +SYMBOL SHIFTZ | Función | Devuelve el logaritmo natural de number [56] |
LOAD | "[filename]" [CODE [address[, length]]| DATA variable()] | J | Dominio | Carga un programa o datos en la RAM desde una cinta, ZX Microdrive , disco, etc., borrando cualquier programa BASIC existente y variables; [50] si se proporciona una cadena vacía ( "" ), esto carga el primer programa encontrado, de lo contrario buscará en la cinta el programa nombrado en la cadena; si CODE se proporciona el opcional, cargará el programa en la memoria en la dirección que tenía cuando se guardó, o en la especificada address ( length está pensado como una medida de seguridad, para intentar cargar el programa correcto en caso de que haya varios en la cinta con el nombre correcto pero de diferentes longitudes); [57] si se proporciona el opcional DATA variable() , cargará los datos de la cinta en la matriz nombrada variable() [36] |
LPRINT | text | EXTENDED MODEentonces +SYMBOL SHIFTC | Dominio | Como PRINT la salida excepto se envía a la impresora [33] |
MERGE | "[filename]" | EXTENDED MODEentonces +SYMBOL SHIFTT | Dominio | Como LOAD , excepto que no elimina el programa actual ni las variables; si existe un número de línea en ambos, el del programa recién cargado sobrescribe el existente. El uso MERGE evita que un programa guardado con se LINE ejecute automáticamente una vez cargado [58] |
MOVE | stream1 TO stream2 | EXTENDED MODEentonces +SYMBOL SHIFT6 | Dominio | Mueve datos de un flujo (teclado, pantalla, archivo, impresora, red, etc.) a otro [nota 6] [59] |
NEW | A | Dominio | Borra el programa BASIC actual y todas las variables [50] | |
NEXT | variable | N | Dominio | Cierra un bucle FOR - NEXT ; la variable debe coincidir con la del FOR comando correspondiente [60] — no se permiten "vacíos" NEXT para referirse al comando inmediatamente anterior en el programaFOR |
NOT | condition | SYMBOL SHIFT+S | Operador lógico | Devuelve verdadero si condition es falso, de lo contrario devuelve falso [nota 3] [18] |
OPEN # | stream | EXTENDED MODEentonces +SYMBOL SHIFT4 | Dominio | Abre un flujo para leer y/o escribir en [nota 6] [61] |
OR | SYMBOL SHIFT+Y | Operador lógico | Devuelve verdadero si alguna de las condiciones a ambos lados de la OR palabra clave es verdadera, de lo contrario devuelve falso [nota 3] [18] | |
OUT | address, value | EXTENDED MODEentonces +SYMBOL SHIFTO | Dominio | Envía el value (un byte ) al hardware [E/S asignada a memoria|puerto de entrada/salida] correspondiente a address [47] |
OVER | number | EXTENDED MODEentonces +SYMBOL SHIFTN | Comando/otro | Hará que el siguiente texto se sobreimprima con una operación XOR sobre lo que ya está en la pantalla si number es 1, en lugar de borrarlo, o borrarlo si number es 0 [nota 5] [51] |
PAPER | number | EXTENDED MODEentonces +SYMBOL SHIFTC | Comando/otro | Establece el color de fondo para el texto y los gráficos [nota 4] [nota 5] [48] |
PAUSE | delay | M | Dominio | Detiene la ejecución del programa durante el retraso especificado, en segundos en Europa o en América del Norte [62] (por lo tanto, se detiene durante un segundo en Europa).PAUSE 50 |
PEEK | address | EXTENDED MODEentoncesO | Función | Devuelve un byte que representa el contenido de la ubicación de memoria a la que apunta address [63] |
PI |
| EXTENDED MODEentoncesM | Función | Devuelve el valor de pi [56] |
PLOT | x, y | Q | Dominio | Dibuja un píxel del INK color actual en la pantalla en las coordenadas ( x , y ) [64] |
POINT | (x,y) | EXTENDED MODEentonces +SYMBOL SHIFT8 | Función | Devuelve 1 si el píxel apuntado a las coordenadas gráficas ( x , y ) está actualmente en el color de tinta (primer plano); de lo contrario, devuelve 0 [28] |
POKE | address, value | O | Dominio | Establece el contenido de address la RAM en value [65] |
PRINT | [AT x,y;] text | P | Dominio | Imprime text (que debe ser una o más cadenas o números separados por punto y coma) en la pantalla. [53] Si se usa con #0 o #1, imprime en las dos líneas inferiores (de entrada) de la pantalla; si se usa con AT , imprime en las coordenadas de texto especificadas; de lo contrario, imprime inmediatamente después de la salida de cualquier PRINT declaración anterior (si la declaración anterior terminó en punto y coma), o en la primera columna de la línea debajo de la PRINT salida anterior, [20] con el valor predeterminado 0,0. |
RANDOMIZE | [number] | T | Dominio | Inicializa el generador de números aleatorios ; si se usa sin un number (o con 0), lo hace en función del reloj interno de la computadora; de lo contrario, utiliza el number proporcionado, que debe estar en el rango [1,65535] [66] |
READ | variable | EXTENDED MODEentoncesA | Dominio | Toma un valor de una DATA declaración y lo almacena en el nombre variable : la primera vez READ que se usa, obtiene el primer valor después del primero DATA , la segunda vez obtiene el siguiente, y así sucesivamente [35] |
REM | texto | E | Dominio | Comienza un comentario en el código fuente, lo que significa que todo lo que está después de la REM declaración se ignora, hasta el final de la línea [50] — tenga en cuenta que esto incluye todo lo que está después de dos puntos, que normalmente comienza un nuevo segmento: no producirá ninguna salida, por ejemplo10 REM Nothing to see here : PRINT "Unprintable" |
RESTORE | [number] | EXTENDED MODEentoncesS | Dominio | Restablece dónde READ los comandos buscan valores en DATA las declaraciones: si se usa sin un número, el siguiente READ usará el primero DATA en el programa, con un número usará el primero DATA en o después de la línea cuyo número se indica [67] |
RETURN | Y | Dominio | Devuelve la ejecución a la primera instrucción después del último GO SUB comando ejecutado [45] | |
RND |
| EXTENDED MODEentoncesT | Función | Devuelve un número pseudoaleatorio con ocho cifras significativas en el rango [0,1) [68] |
RUN | [number] | R | Dominio | Inicia el programa BASIC actual, desde su primera línea si no number se especifica, de lo contrario desde la línea con ese número (o la primera después, si no existe) [69] |
SAVE | "filename" [DATA variable() | LINE number] | S | Dominio | Guarda el programa BASIC actual en una cinta u otro dispositivo de almacenamiento, con el filename especificado; si LINE se utiliza el opcional seguido de un número de línea, entonces el programa comenzará automáticamente en el número de línea indicado cuando se LOAD vuelva a insertar; con el opcional DATA , el comando guarda el contenido de la matriz nombrada por la variable en lugar del programa BASIC actual [36] |
SCREEN$ | [(line, column)] | EXTENDED MODEentonces +SYMBOL SHIFT | Función/otro | Como función, identifica el carácter en la línea y columna especificadas en la pantalla. [20] Usado después del nombre de archivo en un comando LOAD o SAVE , indica que se deben cargar o guardar los contenidos de la memoria de visualización ; esto esencialmente lo convierte en un atajo para CODE 16384,6912 [nota 8] pero no funciona con VERIFY porque los contenidos de la memoria de visualización serán diferentes para cuando el comando vuelva a leer los datos guardados; [70] |
SGN | number | EXTENDED MODEentoncesF | Función | Devuelve 1 si number es positivo, 0 si es 0 y −1 si es negativo [16] |
SIN | number | EXTENDED MODEentoncesQ | Función | Devuelve el seno de number [34] |
STEP | number | SYMBOL SHIFT+D | Otro | Indica el intervalo utilizado por una FOR declaración, [44] por ejemplo omitirá y en el bucleFOR n=2 TO 6 STEP 2 n=3 n=5 |
STOP | SYMBOL SHIFT+A | Dominio | Finaliza la ejecución del programa actual, saliendo al editor BASIC; también se puede dar cuando la computadora está esperando una entrada usando el INPUT comando; [69] una vez que se detiene el programa, se puede reanudar conCONTINUE | |
SQR | number | EXTENDED MODEentoncesH | Función | Devuelve la raíz cuadrada de number [37] |
STR$ | number | EXTENDED MODEentoncesY | Función | Convierte un número en una cadena. |
TAB | column | EXTENDED MODEentoncesP | Otro | En una PRINT declaración, se asegura de que el texto que se va a imprimir comience en la columna especificada, pasando a la siguiente línea según sea necesario, pero nunca a más de una línea [29] |
TAN | number | EXTENDED MODEentoncesE | Función | Devuelve la tangente de number [71] |
THEN | statement | SYMBOL SHIFT+G | Otro | Sigue la condición en una IF declaración para indicar qué debe suceder cuando la condición se evalúa como verdadera [nota 7] [46] |
TO |
| SYMBOL SHIFT+F | Otro | Indica un rango desde el número a la izquierda de TO hasta el número a la derecha de este, inclusive; [72] cuando se usa con FOR ambos números se deben proporcionar, mientras que si se usa para cortar cadenas, se puede omitir cualquiera de ellos para indicar el inicio o el final de la cadena |
USR | string or address | EXTENDED MODEentoncesL | Función | Cuando se llama con una cadena de un solo carácter, devuelve la dirección de memoria en la que se define el glifo para el carácter gráfico definido por el usuario correspondiente a ese carácter. [23] Si se llama con una dirección, inicia la ejecución del código de máquina en esa dirección (lo que la convierte en una de las pocas funciones BASIC de Sinclair que tiene un efecto secundario ) y devuelve el contenido del par de registros BC del Z80 . [73] |
VAL | string | EXTENDED MODEentoncesJ | Función | Evalúa string como un número y devuelve el resultado; [74] esto puede realizar cálculos: VAL "1+2" devuelve 3, por ejemplo, y también evalúa variables e incluso otras VAL declaraciones: [nota 9] también devuelve 3LET a=1: VAL "a+VAL ""2""" |
VAL$ | string | EXTENDED MODEentonces +SYMBOL SHIFTJ | Función | Similar a VAL pero evalúa la cadena como una cadena [16] |
VERIFY | "[filename]" | EXTENDED MODEentonces +SYMBOL SHIFTR | Dominio | Lee un programa o datos de una cinta u otro medio de almacenamiento, de forma muy similar LOAD a , pero en lugar de cargarlo en la memoria, lo compara con el programa o los datos que ya están en la memoria. Esto está pensado para usarse inmediatamente después de un SAVE comando, para asegurarse de que el programa o los datos se hayan guardado sin daños. [75] |
4K BASIC para ZX80 [76] (llamado así por residir en una memoria de solo lectura (ROM) de 4 KiB ), fue desarrollado por John Grant de Nine Tiles para ZX80. Tiene aritmética de solo números enteros.
NEW
RUN
LIST
LOAD
SAVE
GOTO
IF
THEN
GOSUB
STOP
RETURN
FOR
TO
NEXT
CONTINUE
PRINT
INPUT
LET
CLEAR
CLS
DIM
REM
RANDOMIZE
POKE
ABS
CHR$
CODE
PEEK
RND
STR$
TL$
USR
8K BASIC es el ZX81 BASIC (también disponible como una actualización para el ZX80 [5] ), actualizado con aritmética de punto flotante por Steve Vickers , llamado así por residir en una ROM de 8 KiB.
PRINT
RAND
LET
CLEAR
RUN
LIST
GOTO
CONT
INPUT
NEW
REM
PRINT
STOP
BREAK
IF
STOP
FOR
NEXT
TO
STEP
SLOW
FAST
GOSUB
RETURN
SAVE
LOAD
CLS
SCROLL
PLOT
UNPLOT
PAUSE
LPRINT
LLIST
COPY
DIM
POKE
NEW
ABS
SGN
SIN
COS
TAN
ASN
ACS
ATN
LN
EXP
SQR
INT
PI
RND
FUNCTION
LEN
VALSTR$
NOT
CODE
CHR$
INKEY$
AT
TAB
INKEY$
PEEK
USR
48 BASIC es el BASIC del ZX Spectrum original de 16/48 KB RAM (y clones), con color y más periféricos añadidos por Steve Vickers y John Grant. Reside en una ROM de 16 KB y comenzó a llamarse 48 BASIC con la introducción del ZX Spectrum 128, momento en el que el Spectrum de 16 KB ya no se vendía y la mayoría de los existentes en uso se habían actualizado a 48 KB. [6]
128 BASIC es el BASIC para el ZX Spectrum 128. [7] Ofrece comandos adicionales y utiliza entrada letra por letra.
LOAD !
SAVE !
MERGE !
ERASE !
PLAY
SPECTRUM
+3 BASIC es el BASIC con soporte de disco para ZX Spectrum +3 y +2A. [6]
FORMAT
COPY
T/S 2000 BASIC se utiliza en el Timex Sinclair 2068 (T/S 2068) compatible con Spectrum y agrega las siguientes seis palabras clave nuevas:
DELETE
elimina rangos de líneas del programa BASIC.FREE
es una función que da la cantidad de RAM libre. PRINT FREE
mostrará cuánta RAM está libre.ON ERR
es una función de manejo de errores que se utiliza principalmente como ON ERR GO TO
o ON ERR CONT
.RESET
Se puede utilizar para restablecer el comportamiento de ON ERR
. También se pretendía restablecer periféricos.SOUND
controla el chip de sonido AY-3-8192 .STICK
es una función que da la posición del joystick interno (Timex Sinclair 2090).BASIC64 de Timex de Portugal , es una extensión de software [77] que permite una mejor programación en Basic con los modos gráficos de 512×192 y de doble área de visualización disponibles únicamente en las computadoras Timex Sinclair. Esta extensión agrega comandos y realiza una reasignación completa de la memoria para evitar que el sistema sobrescriba el área de memoria de pantalla extendida. Existen dos versiones debido a los diferentes mapas de memoria: una versión para TC 2048 y una versión para T/S 2068 y TC 2068 .
PRINT #
imprime en un canal de salida específico.LIST #
enumera el programa a un canal de salida específico.CLS*
borra ambas áreas de visualización.INK*
Establece el color de la tinta para ambas áreas de visualizaciónPAPER*
Establece el color del papel en ambas áreas de visualizaciónSCREEN$
Selecciona los modos de resolución alta/normal.PLOT*
Traza un píxel y actualiza la posición del dibujo.LINE
dibuja una línea desde la posición PLOT anterior, apoyando el dibujo del arcoCIRCLE*
dibuja un círculo o un óvalo, dependiendo del modo de pantalla.Timex Extended Basic de Timex de Portugal se utiliza en el Timex Computer 3256 , añadiendo comandos TEC – Timex Extended Commands que soportan el chip de sonido AY-3-8912, red RS-232 y el modo gráfico de alta resolución de 512x192 píxeles. [78] [79]
LOAD!
SAVE!
CAT!
MERGE!
ERASE!
CLEAR!
FORMAT!
LPRINT
LLIST
BEEP!
SCREEN$
DRAW!
PLOT!
CIRCLE!
Existen varios intérpretes de ZX Spectrum. [80]
Existen varios compiladores ZX Spectrum . [80]
AND
normalmente devuelve la primera de las condiciones proporcionadas para verdadero, o 1 si no se proporcionaron valores numéricos. Por ejemplo, 6 AND 7
devuelve 6, mientras que NOT 6=7
devuelve 1.1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 |
azul | rojo | magenta | verde | cian | amarillo | blanco | negro |
En todos los comandos relacionados con el color, el número 8 se puede usar para indicar “transparente” INK
y PAPER
también se puede establecer en 9 para “contraste”, es decir, para colocar un color oscuro sobre un fondo claro o viceversa automáticamente.
INK
, PAPER
, FLASH
, BRIGHT
, OVER
y INVERSE
los atributos set para mostrar texto y gráficos en la pantalla. Se pueden usar como comandos, para aplicarlos a toda la salida posterior hasta que se vuelvan a configurar, o dentro de una PRINT
declaración, para aplicarlos solo desde ese punto hasta el final de la declaración.CAT
, ERASE
, FORMAT
y MOVE
fueron diseñados originalmente para ser utilizados con periféricos, pero en el lanzamiento de ZX Spectrum, no se habían implementado completamente, de modo que su uso generaba un mensaje de error (Invalid Stream). Más tarde, con la ayuda de la ROM sombra ZX Interface 1, se utilizaron para el ZX Microdrive . (La ROM sombra se paginaba cuando el intérprete BASIC detectaba un error de sintaxis, por lo que la mayoría de los comandos de ZX Microdrive utilizan un "*"
).ELSE
operador en la cláusula IF
– THEN
[– ELSE
]. Una solución alternativa sería utilizar una construcción IF
– THEN
– GO TO
en su lugar, omitiendo las líneas que habrían estado en una ELSE
cláusula con el operadorGO TO
Está deseoso de dar crédito a [...], en particular a Nine Tiles, la empresa que creó el software operativo Basic.
{{cite web}}
: CS1 maint: URL no apta ( enlace )