SCELBAL , abreviatura de SCientific ELementary BAsic Language , es una versión del lenguaje de programación BASIC lanzada en 1976 para SCELBI y otras microcomputadoras basadas en Intel 8008 y 8080 como Mark-8 . Los complementos posteriores al lenguaje incluyeron un paquete matemático extendido y manejo de cadenas . La versión original requería 8 kB de RAM , mientras que las adiciones exigían al menos 12 kB.
El lenguaje se publicó en forma de libro, con secciones introductorias seguidas de diagramas de flujo y luego el código ensamblador 8008 . El libro describía formas de ahorrar más memoria, desactivando matrices, por ejemplo, y cómo el usuario podía agregar sus propias funciones nuevas al idioma.
El autor principal de SCELBAL es Mark Arnold, quien era un estudiante de secundaria en 1974 cuando se anunció el SCELBI. Arnold era amigo de profesores de la Universidad de Wyoming (UW) y, a través de ellos, había hecho arreglos para tener una cuenta en su computadora central Sigma 7 . La primera versión de lo que se convirtió en SCELBAL se escribió para esta máquina. Más tarde ese año, escribió un compilador cruzado 8008 en esa plataforma.
Arnold ingresó a la Universidad de Washington en 1975 y se puso en contacto con Nat Wadsworth, uno de los fundadores de SCELBI, y le propuso la idea de una versión compilada de BASIC para su nueva plataforma. Este sería un sistema de múltiples pasadas que guardaría las versiones intermedias en cinta de casete . Esto sería muy tedioso de usar, pero produciría programas que se ejecutarían en los modelos 8H de 4 kB del sistema. Wadsworth prefirió un intérprete , que requeriría 8 kB, que estaría disponible en los nuevos modelos 8B del sistema. El lenguaje usaba rutinas de punto flotante publicadas por Wadsworth en 1975 en Machine Language Programming para el 8008 .
Wadsworth tardó varios meses en concertar finalmente un contrato, que incluía enviar a Arnold un sistema de desarrollo 8B. Esto retrasó significativamente el lanzamiento del lenguaje en 1976. Arnold especuló que, sin estos retrasos, SCELBAL podría haberse lanzado aproximadamente al mismo tiempo que Altair BASIC a fines de 1975. Se presentó por primera vez en un artículo extenso en el segundo número de Dr . Dobb's Journal en febrero de 1976. [1]
El lanzamiento de SCLEBAL se anunció en un anuncio en la edición de junio de 1976 de Byte . El anuncio no vinculaba específicamente el idioma a la plataforma SCELBI, sino que simplemente se ofrecía en forma de libro como una lista completa de fuentes para crear una versión de BASIC en cualquier sistema 8008 u 8080 con los 8 kB de RAM requeridos. El precio del libro fue de $ 49, alrededor de $ 223 en 2020. [2]
SCELBAL utilizó un formato de punto flotante de 32 bits (cuatro bytes) para cálculos numéricos, con una mantisa de 23 bits , un signo de 1 bit para la mantisa, un exponente de 7 bits y un signo de 1 bit para el exponente. Estos se organizaron en orden inverso, con el byte menos significativo de la mantisa en el primer byte, seguido del byte medio y luego el byte más significativo con el signo en el bit alto. El exponente fue el último, nuevamente con el signo en el bit alto. [3] El manual proporciona un código ensamblador bien documentado para todo el paquete matemático, incluidos los puntos de entrada y las notas de uso. [4] Los formatos de 32 bits eran comunes en esta era, mientras que las versiones posteriores de BASIC, comenzando con Microsoft BASIC para elMOS 6502 , generalmente adoptó un formato de 40 bits (cinco bytes) para mayor precisión. [5]
Por lo demás, SCELBAL era similar a otros dialectos BASIC, incluidas las primeras versiones de MS como Altair BASIC , que carecían de variables de cadena y operadores y una serie de funciones matemáticas. Otras diferencias fueron menos pronunciadas. La IF
declaración tenía una forma opcional IF...GOTO
que elimina la necesidad de THEN
, . [6] También retuvieron la forma corta de estilo MS para el mismo concepto, . También permitió la ejecución condicional de otras declaraciones, como . [7]IF X<Y GOTO 100
IF X<Y THEN 100
IF X<Y THEN PRINT X
El lenguaje base no admitía el manejo de cadenas, aunque se podían usar cadenas literales (constantes) PRINT
y tenían las funciones de apoyo de CHR
imprimir caracteres no imprimibles y TAB
proporcionar diseño. Curiosamente, el sistema requería que los códigos ASCII tuvieran el bit alto establecido, por lo que para convertir de códigos de caracteres ASCII normales a códigos SCELBI, uno tenía que sumar o restar 128. Por ejemplo,
IMPRIMIR "HOLA" ; CHR ( 172 ); CHR ( 160 ); "MUNDO"
para producir la cadena "HOLA, MUNDO" en la salida. [8]
INPUT
normalmente leería el texto ingresado por el usuario como un número, pero permitía que el signo de dólar indicara que el valor debería leerse como el código SCELBI. Por ejemplo, INPUT A
leería la entrada del usuario "1" en A como el valor de punto flotante 1, mientras que INPUT A$
daría como resultado que A se estableciera en 177, 49 (ASCII para "1") + 128. Además, cuando se usa el signo de dólar , lo tradicional "?" El indicador no se imprime y el comando regresa al idioma tan pronto como se ingresa un solo carácter, en lugar de esperar el retorno de carro como en el caso normal. [8]
Entre las pocas otras diferencias estaba que el NEW
comando que se encuentra en MS, que borra el código y los datos del programa existente, se llama SCR
para "scratch", [9] y la USR
función, que llama una rutina en lenguaje de máquina , era UDF
para "función definida por el usuario". . [10] UDF
permitió que se pasara un único parámetro de punto flotante a la función definida por el usuario, cuyo código en lenguaje de máquina debe haberse cargado en la memoria en una ubicación fija antes del tiempo de ejecución. [11]
Los códigos de error se redujeron a dos cartas, y el código para LOAD
y SAVE
se proporcionan en forma de texto modelo y espera que se implementa cuando portado a diferentes plataformas. [12] Los números de línea podrían estar entre 1 y 999999, [10] mientras que la mayoría de los BASIC usaban un número entero de 16 bits y, por lo tanto , admitían líneas del 1 al 32767 o del 1 al 65535.
Conocido como modo "ejecutivo" en la documentación.
SCR
NEW
LIST
RUN
LOAD
SAVE
PRINT
INPUT
INPUT A,B,C
LET
LET
era opcional, entonces y son equivalentes.15 LET X=10
15 X=10
IF...THEN
IF...GOTO
IF...THEN
.GOTO
GO TO
no fue compatible.GOSUB...RETURN
FOR...TO...STEP...NEXT
STEP
es opcional y se supone 1. NEXT
requiere una variable, a diferencia de las versiones posteriores de MS.REM
END
DIM
INT
SGN
ABS
SQR
RND
CHR
CHR$
.TAB
UDF
SCELBI publicó dos extensiones del sistema, el Suplemento de funciones matemáticas y el Suplemento de cadenas.
La Matemática Funciones Suplemento añadió cinco nuevas funciones trascendentales , SIN
, COS
, EXP
, LOG
, y ATN
. [14]
El Suplemento de cadenas era algo más grande que las funciones matemáticas, e incluía una serie de características nuevas.
Las cadenas pueden tener hasta 80 caracteres de longitud y el sistema puede contener un total de 64 variables de cadena. Cualquiera de esos 64, o todos, podrían ser matrices unidimensionales, pero el número total aún tenía que ser 64 cadenas en total. Curiosamente, las matrices de cadenas no requerían una DIM
declaración. [15]
En contraste con MS BASIC y el manejo de cuerdas de Dartmouth BASIC que lo inspiró, SCELBI utilizó el estilo de manipulación de cuerdas de "corte" que se encuentra en los BASIC contemporáneos como SDS BASIC , HP Time-Shared BASIC y Northstar BASIC , o el posterior Atari BASIC . En lugar de utilizar funciones como LEFT$
, RIGHT$
, MID$
a subcadenas de acceso, la sintaxis de matrices de acceso se usó con dos puntos precedente el punto de partida y, opcionalmente, un punto y coma que precede a la longitud. Como SCELBAL también admitía matrices de cadenas, el primer número en los descriptores de acceso a la matriz era el índice de la matriz y era opcional si la variable no era una matriz. Entonces, por ejemplo, el código: [15]
10 DEJAR A $ = "HOLA" 20 IMPRIMIR A $ ( : 2 ; 3 )
daría como resultado la impresión de "ELL" en la salida. Si se utilizó una matriz, la sintaxis requería el índice de la matriz en el primer parámetro: [15]
100 DEJAR A $ ( 1 ) = "HOLA" 150 DEJAR A $ ( 2 ) = "MUNDO" 200 IMPRIMIR A $ ( 2 : 2 ; 3 )
daría como resultado la impresión de "ORL" en la salida. SCELBAL también permitió omitir el punto y coma, que especifica los caracteres desde el punto de inicio hasta el final de la cadena. Entonces, por ejemplo, el código:
210 IMPRIMIR A $ ( 2 : 2 )
daría como resultado la impresión de "ORLD" en la salida.
Aunque es similar a SDS BASIC, existe una gran diferencia en la forma en que funciona en comparación con los otros BASIC que usaban sintaxis de corte, en el sentido de que el último parámetro es la longitud, no una posición. Por ejemplo, en Atari BASIC el código de aspecto similar: [16]
20 IMPRIMIR A $ ( 2 , 3 )
en su lugar, generaría "EL", ya que la instrucción se traduce en "imprimir todos los caracteres entre las posiciones 2 y 3". De esta manera, SCELBAL funciona de una manera más similar a MS BASIC, donde los equivalentes serían: [17]
20 IMPRIMIR MEDIO $ ( A $ , 2 , 3 )
y
210 IMPRESIÓN DERECHA $ ( A $ ( 2 ), 2 )
Para agregar soporte completo para cadenas, el Suplemento reemplazó el original CHR
con CHR$
, que coincidía con la sintaxis de su contraparte de MS. [15] Asimismo, INPUT
se modificó para que las variables de cadena funcionaran como numéricas, esperando el retorno de carro y luego asignando toda la entrada del usuario a la variable de cadena asociada. [18] También agregó las funciones de soporte LEN
y ASC
, [15] y VAL$
convertir una cadena que contiene un valor numérico en una representación de cadena de ese número. Como en MS, la concatenación utilizó el +
operador. [18]