Diminuto BÁSICO - Tiny BASIC

Diminuto BÁSICO
Diseñada por Dennis Allison
Apareció por primera vez 1975
Lenguaje de implementación IL (lenguaje interpretativo)
Licencia Dominio publico
Dialectos
Denver Tiny BASIC, mejorado 6800 Tiny BASIC, MINOL, lenguaje básico industrial nacional, Palo Alto Tiny BASIC, 6800 Tiny BASIC, TBI68K, Tiny BASIC extendido
Influenciado por
Dartmouth BÁSICO , 8008 BÁSICO
Influenciado
Astro BÁSICO , Atari BÁSICO , Nivel I BÁSICO

Tiny BASIC es una familia de dialectos del lenguaje de programación BASIC que puede caber en 4 KB o menos de memoria . Tiny BASIC fue diseñado en respuesta a la carta abierta publicada por Bill Gates quejándose de usuarios pirateando Altair BASIC , que se vendió por $ 150. Tiny BASIC estaba destinado a ser una versión completamente gratuita de BASIC que se ejecutaría en las mismas microcomputadoras iniciales .

Tiny BASIC fue lanzado como una especificación, no una implementación, publicado en la edición de septiembre de 1975 del boletín de People's Computer Company (PCC). El artículo invitaba a los programadores a implementarlo en sus máquinas y enviar la implementación resultante del lenguaje ensamblador para su inclusión en una serie de tres boletines informativos planificados. El Dr. Li-Chen Wang , autor de Palo Alto Tiny BASIC, acuñó el término " copyleft " para describir este concepto. La respuesta de la comunidad fue tan abrumadora que el boletín se relanzó como Dr. Dobb's Journal , la primera publicación periódica que se centra en el software de microcomputadoras. Dr. Dobb's duró 34 años en forma impresa y luego en línea hasta 2014.

El tamaño pequeño y el código fuente libre hicieron que estas implementaciones fueran invaluables en los primeros días de las microcomputadoras a mediados de la década de 1970, cuando la RAM era cara y el tamaño de memoria típico era de solo 4 a 8 KB. Si bien la versión mínima de Altair BASIC de Microsoft también se ejecutaría en máquinas de 4 KB, solo dejaba 790 bytes libres para los programas BASIC. Más espacio libre fue una ventaja significativa de Tiny BASIC. Para cumplir con estos límites de tamaño estrictos, los dialectos Tiny BASIC generalmente carecían de una variedad de características que se encuentran comúnmente en otros dialectos, por ejemplo, la mayoría de las versiones carecían de variables de cadena , carecían de matemáticas de punto flotante y solo permitían nombres de variables de una sola letra.

Hoy en día todavía se utilizan pequeñas implementaciones de BASIC para programar microcontroladores como Arduino .

Historia

Altair BASIC

Una cinta de papel que contiene la versión expandida de 8k de Micro-Soft BASIC.

Las primeras microcomputadoras , como el MITS Altair 8800 , generalmente no tenían entrada / salida (E / S) incorporada más allá de los interruptores del panel frontal y las lámparas LED . El trabajo útil generalmente requería la adición de una tarjeta de expansión de E / S y el uso de algún tipo de terminal . En ese momento, los terminales basados ​​en video eran muy costosos, mucho más que la computadora en sí, por lo que muchos usuarios recurrieron a dispositivos mecánicos como el Teletype Model 33 . El Modelo 33, como la mayoría de los teleimpresores de la época, incluía un sistema de cinta perforada destinado a permitir a los operadores pregrabar sus mensajes y luego reproducirlos a "alta velocidad", más rápido que escribir el mensaje en vivo. Para las primeras microcomputadoras, esto proporcionó un formato de almacenamiento de computadora conveniente , permitiendo a los usuarios escribir programas en cinta de papel y distribuirlos a otros usuarios.

El Homebrew Computer Club se reunió por primera vez en marzo de 1975, y sus miembros pronto utilizaron las reuniones para intercambiar software en cinta perforada. En la reunión de junio, desapareció una cinta que contenía una versión preliminar de Altair BASIC . La cinta se le dio a Steve Dompier, quien se la pasó a Dan Sokol, quien tuvo acceso a una perforadora de cinta de alta velocidad. En la siguiente reunión, aparecieron 50 copias de Altair BASIC en cinta de papel en una caja de cartón. Cuando Ed Roberts , fundador de MITS, se enteró de esto, dijo: "Cualquiera que esté usando una copia robada de MITS BASIC debe identificarse por lo que es, un ladrón". Bill Gates hizo esto más formal, escribiendo una carta abierta a los aficionados , quejándose de que "Como la mayoría de los aficionados deben saber, la mayoría de ustedes roba su software".

Diminuto BÁSICO

La denuncia no fue bien recibida. Entre las muchas respuestas, Bob Albrecht, otro miembro de Homebrew y fundador de People's Computer Company (PCC), sintió que la mejor respuesta sería producir su propio BASIC que fuera completamente gratuito para que lo usara cualquier persona. Se acercó a Dennis Allison , un miembro de la facultad de Ciencias de la Computación de la Universidad de Stanford , para escribir una especificación para una versión de BASIC que cabría en 2 a 3 kilobytes de memoria. Para ayudar a la portabilidad , el diseño se basó en un lenguaje intermedio (IL), un intérprete para el intérprete, lo que significó que solo una pequeña parte del código total tuvo que ser portada.

El diseño inicial de Allison se publicó en la edición de septiembre de 1975 del boletín de PCC, junto con una versión Intel 8080 del intérprete IL. El artículo pedía a los programadores que implementaran el diseño en su computadora y enviaran la versión resultante en lenguaje ensamblador al PCC. Declararon sus planes de publicar tres boletines especiales que contienen estas versiones enviadas por los usuarios, junto con correcciones de errores, programas escritos en el nuevo BASIC y sugerencias y mejoras. El concepto ganó más atención cuando se volvió a publicar en la edición de enero de 1976 del Grupo de interés especial de ACM sobre lenguajes de programación. Las presentaciones llegaron a raudales. Entre las primeras versiones notables se encontraba Tiny BASIC Extended de Dick Whipple y John Arnold, que se ejecutaba en 3K de RAM, agregaba bucles FOR ... NXT y permitía una sola matriz numérica. Evitaron el uso de IL y lo escribieron directamente en código máquina, usando octal .

El primero de los tres boletines informativos previstos, con el título "Dr. Dobb's Journal of Computer Calistenia & Orthodontia, Running Light Without Overbyte", se publicó en enero de 1976. Comienza con una nota de Albrecht, bajo el seudónimo "el dragón", sugirió que tres ediciones no serían suficientes, y preguntó a los lectores si les gustaría que continuara. También reimprimió el artículo original sobre Tiny BASIC de PCC, incluyó la lista completa de Extended TB e incluyó una serie de pequeños programas BASIC que incluyen consejos y trucos de Allison. La respuesta al primer número fue tan impresionante que en la introducción del segundo número se indicó que ya habían decidido seguir publicando el nuevo boletín con el nombre simplificado de Dr. Dobb's Journal . Durante los siguientes números, se publicaron versiones adicionales del idioma y comenzaron a aparecer artículos similares en otras revistas como Interface Age .

Propagar

La fuente monoespaciada dice "Tiny basic para Intel 8080, versión 2.0 de Li-Chen Wang, modificada y traducida a mnemónicos Intel por Roger Rausklob, 10 de octubre de 1976. @ Copyleft, All Wrongs Reserved".
El uso de "Copyleft; todos los errores reservados" en 1976

A mediados de 1976, los intérpretes Tiny BASIC estaban disponibles para los procesadores Intel 8080 , Motorola 6800 y MOS Technology 6502 . Este fue un precursor del desarrollo colaborativo de la comunidad del software libre antes de que Internet permitiera una fácil transferencia de archivos, y fue un ejemplo de un proyecto de software libre antes del movimiento del software libre . Los aficionados a la informática intercambiarían cintas de papel, casetes o incluso volverían a escribir los archivos de los listados impresos.

Jim Warren, editor de Dr. Dobb's , escribió en el boletín informativo ACM Programming Language de julio de 1976 sobre las motivaciones y métodos de este exitoso proyecto. Comenzó con esto: "Existe una alternativa viable a los problemas planteados por Bill Gates en su iracunda carta a los aficionados a la informática sobre 'copiar' software. Cuando el software es gratuito, o tan barato que es más fácil pagar por él que duplicarlo. , entonces no será 'robado' ". La carta de Bill Gates fue escrita para convertir software en productos . El método alternativo consistía en que un profesional experimentado hiciera el diseño general y luego esbozara una estrategia de implementación. Los aficionados con conocimientos implementarían el diseño para una variedad de sistemas informáticos. Warren predijo que esta estrategia continuaría y se expandiría.

El número de mayo de 1976 del Dr. Dobbs tenía Palo Alto Tiny BASIC de Li-Chen Wang para el 8080. La lista comenzaba con el título habitual, el nombre del autor y la fecha, pero también tenía "@COPYLEFT TODOS LOS EQUIVOCADOS RESERVADOS". Otro miembro del Homebrew Computer Club , Roger Rauskolb, modificó y mejoró el programa de Li-Chen Wang y esto se publicó en la edición de diciembre de 1976 de la revista Interface Age . Roger agregó su nombre y conservó el Aviso COPYLEFT.

Descripción

Conceptos básicos

Ver intérpretes BÁSICOS

Tiny BASIC fue diseñado para usar la menor cantidad de memoria posible, y esto se refleja en la escasez de funciones, así como en los detalles de su sistema de interpretación . Los primeros microordenadores carecían de RAM y almacenamiento secundario para un compilador BASIC , que era más típico de los sistemas de tiempo compartido.

Como la mayoría de los BASIC de la época, Tiny Basic era interactivo con el usuario escribiendo declaraciones en una línea de comando. Como las microcomputadoras de la época se usaban a menudo con máquinas de teletipo o terminales "tontas", la edición directa del texto existente no era posible y el editor usaba caracteres para llevar, a menudo la barra invertida, para indicar dónde el usuario hacía la copia de seguridad para editar el texto existente.

Si el usuario escribió una declaración en la línea de comando, el sistema la examinó para ver si comenzaba con un número. De lo contrario, la línea se analizó y se puso en funcionamiento inmediatamente, lo que podría generar una salida a través de PRINT. Esto se conocía como "modo directo".

Si la línea se ingresó con un número inicial, el número se convirtió del formato decimal, como "50", y se convirtió a un valor de 8 bits, en este caso, $ 32 hexadecimal . Este número se usó como índice en un área de almacenamiento similar a una matriz donde el resto de la línea se almacenó exactamente en el formato en el que se escribió. Cuando el usuario escribía LISTen la línea de comandos, el sistema recorría la matriz, volvía a convertir el número de línea al formato decimal y luego imprimía el resto del texto de la línea.

Cuando un programa estaba presente en la memoria y el usuario escribe el RUNcomando, el sistema entra en "modo indirecto". En este modo, se establece un puntero para apuntar a la primera línea del programa, por ejemplo, 10 ($ 0A hex). El texto original de esa línea se recupera de la tienda y se ejecuta como si el usuario lo acabara de escribir en modo directo. Luego, el puntero avanza a la siguiente línea y el proceso continúa.

Gramática formal

La gramática se enumera a continuación en forma Backus-Naur , casi exactamente como se especificó en la Nota de diseño. En el listado, un asterisco (" * ") denota cero o más del objeto a su izquierda - excepto por el primer asterisco en la definición de " término ", que es el operador de multiplicación; objetos de grupo de paréntesis; y una épsilon (" ε ") significa el conjunto vacío. Como es común en la notación gramatical del lenguaje de computadora, la barra vertical (" | ") distingue alternativas, al igual que su lista en líneas separadas. El símbolo " CR " denota un retorno de carro (generalmente generado por la tecla "Enter" del teclado). Un BREAK de la consola interrumpirá la ejecución del programa.

    line ::= number statement CR | statement CR
 
    statement ::= PRINT expr-list
                  IF expression relop expression THEN statement
                  GOTO expression
                  INPUT var-list
                  LET var = expression
                  GOSUB expression
                  RETURN
                  CLEAR
                  LIST
                  RUN
                  END
 
    expr-list ::= (string|expression) (, (string|expression) )*
 
    var-list ::= var (, var)*
 
    expression ::= (+|-|ε) term ((+|-) term)*
 
    term ::= factor ((*|/) factor)*
 
    factor ::= var | number | (expression)
 
    var ::= A | B | C ... | Y | Z
 
    number ::= digit digit*
 
    digit ::= 0 | 1 | 2 | 3 | ... | 8 | 9
 
    relop ::= < (>|=) | > (<|=) | =

    string ::= " ( |!|#|$ ... -|.|/|digit|: ... @|A|B|C ... |X|Y|Z)* "

Tenga en cuenta que la cadena no se definió en la nota de diseño.

Esta sintaxis, tan simple como era, agregó una innovación: GOTOy GOSUBpodría tomar una expresión en lugar de solo un número de línea, proporcionando un GOTO asignado en lugar de la declaración de cambio del GOTO/GOSUB ... OF ..., una estructura que luego se admitía en HP Time-Shared BASIC y anterior ON ... GOTO. La sintaxis que permite IF-THEN statement(a diferencia de solo un número de línea para bifurcar) aún no era compatible con Dartmouth BASIC como esta vez, pero había sido introducida por Digital y copiada por Microsoft.

Implementación en una máquina virtual

La nota de diseño especificó una máquina virtual , en la que el intérprete Tiny BASIC se ejecuta en un intérprete de máquina virtual. La idea del diseñador de utilizar una máquina virtual de aplicaciones se remonta a Val Schorre (con META II , 1964) y Glennie (Syntax Machine). La elección de un enfoque de máquina virtual economizó espacio de memoria y esfuerzo de implementación, aunque los programas BASIC que se ejecutan en él se ejecutaron con cierta lentitud.

Los dialectos que usaban la máquina virtual incluían Tiny BASIC Extended, Tiny BASIC de Tom Pittman y NIBL. Otros dialectos como Denver Tiny BASIC (DTB) y Palo Alto Tiny BASIC eran intérpretes directos. Algunos programadores, como Fred Greeb con DTB, trataron el programa IL (Interpretive Language) como un pseudocódigo para que el algoritmo lo implementara en lenguaje ensamblador; Denver Tiny BASIC no usó una máquina virtual, pero siguió de cerca el programa IL.

Este es un extracto representativo del programa IL de 120 líneas:

S1:  TST     S3,'GO'       ;GOTO OR GOSUB?
     TST     S2,'TO'       ;YES...TO, OR...SUB
     CALL    EXPR          ;GET LABEL
     DONE                  ;ERROR IF CR NOT NEXT
     XFER                  ;SET UP AND JUMP
S3:  TST     S8,'PRINT'    ;PRINT.

Un patrón común en el programa es probar una palabra clave o parte de una palabra clave y luego actuar sobre esa información. Cada prueba es una afirmación de lo que sigue en el búfer de línea. Si la aserción falla, el control salta a una etiqueta posterior (generalmente buscando una nueva palabra clave o token). Aquí el sistema avanza su cursor de búfer sobre cualquier espacio y prueba para GO y si no lo encuentra, salta a la línea S3 . Si lo encuentra, la ejecución continúa con el siguiente comando IL. En este caso, el sistema prueba a continuación para TO , saltando a la línea S2 si falla (una prueba para SUB , para ver si se trata de un comando GOSUB ). Si pasa, el control continúa; en este caso, llamar a una subrutina IL que comienza en la etiqueta EXPR , que analiza una expresión. En Tiny BASIC, GOTO X*10+100(un GO TO calculado) es tan legal como GOTO 100y es la alternativa al ON-GOTO de implementaciones BASIC más grandes. La subrutina EXPR empuja el resultado de la expresión a la pila aritmética (en este caso, el número de línea). DONE verifica que ningún otro texto sigue a la expresión y da un error si lo hace. XFER saca el número de la pila y transfiere la ejecución (VA A) el número de línea correspondiente, si existe.

La siguiente tabla ofrece una lista parcial de los 32 comandos de la máquina virtual en la que se escribió el primer intérprete de Tiny BASIC.

TST lbl , cuerda
Si la cadena coincide con la línea BASIC, avance el cursor sobre la cadena y ejecute la siguiente instrucción IL; si la prueba falla, ejecute la instrucción IL en la etiqueta lbl
LLAMAR lbl
Ejecute la subrutina IL comenzando en lbl ; guardar la dirección IL siguiendo la CALL en la pila de control
HECHO
Informar un error de sintaxis si después de eliminar los espacios en blanco iniciales, el cursor no está posicionado para alcanzar un retorno de carro
XFER
Pruebe el valor en la parte superior de la pila AE para que esté dentro del rango. Si no es así, informe un error. Si es así, intente colocar el cursor en esa línea. Si existe, comience la interpretación allí; si no es así, informe un error.
SALTAR lbl
Continuar la ejecución del IL en la etiqueta especificada
RTN
Regrese a la ubicación de IL especificada en la parte superior de la pila de control
PRS
Imprima caracteres desde el texto BÁSICO hasta, pero sin incluir, las comillas de cierre
PRN
Número de impresión obtenido al hacer estallar la parte superior de la pila de expresiones
SPC
Inserte espacios para mover el cabezal de impresión a la siguiente zona
NLINE
Envíe un CRLF a la impresora

Tom Pittman, hablando del IL, dice: "El intérprete TINY BASIC fue diseñado por Dennis Allison como un analizador sintáctico descendente recursivo . Parte de la elegante simplicidad de este diseño se perdió al agregar azúcar sintáctica al lenguaje, pero la forma básica permanece. El IL es especialmente adecuado para el análisis sintáctico descendente recursivo de TINY BASIC debido a la naturaleza recursiva general de sus procedimientos y la simplicidad de los tokens de TINY BASIC. El lenguaje IL está optimizado de manera efectiva para la interpretación de TINY. La experiencia ha demostrado que la dificultad de agregar las nuevas funciones del lenguaje no guardan proporción con la naturaleza de las funciones. Por lo general, es necesario agregar subrutinas de lenguaje de máquina adicionales para admitir las nuevas funciones. A menudo, la dificultad supera las ventajas ".

Desviaciones del diseño

Al definir Tiny BASIC para el Homebrew Computer Club, Pittman escribió: "Tiny BASIC es un subconjunto adecuado de Dartmouth BASIC, que consta únicamente de los siguientes tipos de instrucciones: LET, PRINT, INPUT, IF, GOTO, GOSUB, RETURN, END, CLEAR, LIST , EJECUTAR. La aritmética está en enteros de 16 bits solo con los operadores + - * / y paréntesis anidados. Solo hay 26 nombres de variables de una sola letra A, B, ... Z, y no hay funciones. No hay cadenas ni arreglos ... Tiny BASIC especifica números de línea menores que 256 ". Luego pasó a describir su implementación: "Este lenguaje se ha aumentado para incluir las funciones RND, USR y PEEK y POKE, dando al usuario acceso a todos los componentes de su sistema en el 6800 desde el programa BASIC".

Muchos implementadores aportaron sus propias experiencias con HP Time-Shared BASIC o DEC BASIC-PLUS a sus diseños y relajaron la especificación formal del lenguaje Tiny BASIC. De las siete implementaciones destacadas publicadas en 1977:

  • Todos agregaron algún tipo de función de número aleatorio, generalmente RND () . Aunque no se incluye en la especificación, un artículo del boletín antes de la Nota de diseño para Tiny BASIC solicitaba solo esta función.
  • Todos permitieron que LET sea ​​opcional y la mayoría de las expresiones de let en declaraciones de asignación contienen operadores relacionales .
  • Todos menos 6800TB admitían delimitadores de instrucciones en líneas, normalmente : aunque TBX usaba $ y PATB usaba ; .
  • En las declaraciones IF , todas menos MINOL eliminaron la necesidad de que las expresiones contuvieran operadores relacionales (por ejemplo, era válido). Las implementaciones eliminaron ENTONCES por completo o lo hicieron opcional o lo admitieron solo para GOTO implícito .IF X THEN LET Y=X
  • Muchos modificaron PRINT para admitir zonas de impresión, utilizando ,para ir a la siguiente zona y ;no hacer avanzar el cursor.
  • Todos menos 6800TB y DTB agregaron NUEVO .
  • Todos menos 6800TB y MINOL agregaron una función para devolver el tamaño de la memoria: TBX tenía SZE , DTB y PATB tenían SIZE , L1B tenían MEM y NIBL ​​tenían TOP .
  • Cuatro implementaciones agregaron arreglos, ya sea un arreglo único no dimensionado en PATB y L1B o arreglos DIM ensionable en TBX y DTB.
  • Cuatro implementaciones agregaron la declaración REM ark.
  • Cuatro implementaciones agregaron el bucle FOR : PATB, NIBL ​​y L1B ofrecieron FOR-TO-STEP / NEXT , mientras que TBX no admitió STEPy usó la palabra clave NXTpara finalizar un bucle.
  • Solo NIBL ​​tuvo algún guiño hacia la programación estructurada, con DO / UNTIL , a pesar del lamento de Allison en el número 2 sobre los problemas con BASIC.

Como alternativa a la tokenización, para guardar palabras clave truncadas RAM, TBX, DTB y MINOL: PR para PRINT , IN para INPUT , RET para RETURN . No se aceptaron las palabras clave tradicionales completas. Por el contrario, PATB permitía palabras clave tradicionales aceptadas, pero también permitía que cualquier palabra clave se abreviara a su cadena única mínima, con un período final. Por ejemplo, PRINT podría escribirse P. , aunque PR. y otras variaciones también funcionaron. Este sistema se mantuvo en el Nivel I BÁSICO para el TRS-80 , que usaba PATB, y también se encontró más tarde en Atari BÁSICO y el BÁSICO de varias computadoras de bolsillo Sharp .

Dialectos

Los dialectos más destacados de Tiny BASIC fueron Design Note original, Tiny BASIC Extended, Palo Alto Tiny BASIC y 6800 Tiny BASIC. Sin embargo, existían muchas otras versiones de Tiny BASIC.

Lista de dialectos prominentes

Tiny BASIC se publicó por primera vez en un boletín de noticias de People's Computer Company , un boletín que se convirtió en Dr. Dobb's Journal , una revista de informática de larga duración. En la revista se publicaron unas diez versiones.

Dialectos prominentes de Tiny BASIC (en Dr. Dobb's Journal)
Fecha de publicación Asunto Dialecto Autor Procesador Tamaño
Diciembre de 1975 1 Nota de diseño Dennis Allison N / A N / A
Febrero de 1976 2 Tiny BASIC Extendido (TBX) Dick Whipple y John Arnold 8080 2,9 mil
Marzo de 1976 3 Denver Tiny BASIC (DTB) Fred Greeb 8080 2,75 mil
Marzo de 1976 3 6800 Tiny BASIC (6800TB) Tom Pittman 6800 2K
Abril de 1976 4 MINOL Eric T. Mueller 8080 1,75 mil
Mayo de 1976 5 Palo Alto Tiny BASIC (PATB) Li-Chen Wang 8080 1,77 mil
Noviembre de 1976 10 Lenguaje básico industrial nacional (NIBL) Mark Alexander y Steve Leininger SC / MP 4K
Octubre de 1980 49 Mejorado 6800 Tiny BASIC Robert Hudson 6800 N / A
Febrero de 1985 100 TBI68K Gordon Brandly 68000 N / A
Enero de 2006 351 Regreso de Tiny BASIC Tom Pittman N / A ( C ) N / A

TBX también se conocía como Texas Tiny BASIC.

Tanto SCELBAL como 6800 Tiny BASIC fueron anunciados en la revista pero no publicaron su código fuente.

Palo Alto Tiny BASIC

Palo Alto Tiny BASIC
Desarrollador Li Chen Wang
Apareció por primera vez 1976
Licencia Dominio publico
Dialectos
3K Control básico
Influenciado por
Tiny BASIC Design Note, Tiny BASIC Extended
Influenciado
Astro BÁSICO , Nivel I BÁSICO , Sharp PC-1211 BÁSICO

Una de las versiones más populares de Tiny BASIC fue Palo Alto Tiny BASIC, o PATB para abreviar, de Li-Chen Wang . PATB apareció por primera vez en la edición de mayo de 1976 de Dr. Dobbs , escrito en un lenguaje ensamblador personalizado con mnemónicos no estándar. Esto condujo a más puertos que funcionaban con ensambladores convencionales en el 8080. La primera versión del intérprete ocupaba 1,77 kilobytes de memoria y asumía el uso de una máquina de teletipo (TTY) para la entrada / salida del usuario . Una errata del artículo original apareció en la edición de junio / julio de Dr. Dobb's (Vol. 1, No 6). Este artículo también incluyó información sobre cómo agregar dispositivos de E / S adicionales, utilizando como ejemplo el código para la pantalla de video VDM de Processor Technology .

Wang fue uno de los primeros en utilizar la palabra copyleft . En el aviso de distribución de Palo Alto Tiny BASIC, había escrito "@COPYLEFT TODOS LOS EQUIVOCADOS RESERVADOS". Tiny BASIC no se distribuyó bajo ninguna forma formal de términos de distribución copyleft, sino que se presentó en un contexto en el que el código fuente se compartía y modificaba. De hecho, Wang había contribuido anteriormente con las ediciones de Tiny BASIC Extended antes de escribir su propio intérprete. Animó a otros a adaptar su código fuente y publicar sus adaptaciones, como con la versión de PATB de Roger Rauskolb publicada en Interface Age . Él mismo publicó una tercera versión en el Reference Book of Personal and Home Computing del PCC .

Uno de los cambios más notables en PATB es la adición del bucle FOR ... NEXT . En el TB original, los bucles solo se podían implementar usando IFy GOTO. Al igual que en Microsoft BASIC , los límites superior e inferior del bucle se establecieron en la entrada del bucle y no cambiaron durante el bucle, por lo que si uno de los límites se basaba en una expresión de variable, cambiar la variable no cambiaba el límite. El STEPmodificador era opcional, como en MS.

Otro cambio significativo fue la capacidad de colocar varias declaraciones en una sola línea. Por razones no explicadas, PATB usó el punto ;y coma para separar declaraciones, en lugar de los dos puntos ya comunes :.

Otros cambios incluyen la adición de una única matriz numérica, con el nombre de la variable @, STOPademás de END, y el uso de #para no iguales en las comparaciones, en contraposición a <>.

PATB usó palabras para los mensajes de error en lugar de números. Para reducir la cantidad de memoria requerida, solo había tres mensajes y consistían en palabras simples. El sistema respondería con WHAT?por errores de sintaxis, HOW?por errores de tiempo de ejecución como GOTO a una línea que no existía o desbordamientos numéricos, y SORRYpor problemas de falta de memoria.

Wang también escribió un programa STARTREK en su Tiny BASIC que apareció en la edición de julio de 1976 del People's Computer Company Newsletter .

Más tarde se adaptó el idioma a 3K de control básico para Cromemco , añadiendo nombres de las variables de la forma de carta dígitos (por ejemplo, A0a Z9), funciones lógicas ( AND(), OR(), XOR()), un CALLcomando para ejecutar rutinas de lenguaje de máquina, más PRINTopciones -formatting, y otros ( GET()y en PUT()lugar de PEEKy POKE; funciones de puerto de E / S).

Palo Alto Tiny BASIC fue adaptado para muchas otras implementaciones, incluyendo Level I BASIC (1977), BASIC para la computadora de bolsillo Sharp PC-1211 (1980) y Astro BASIC (1982, por Jamie Fenton ).

MINOL

Escrito por un estudiante de tercer año de secundaria, MINOL fue la única implementación que no admitió la nota de diseño completa, sin precedencia de operadores , con solo tres reubicaciones (<, =, #), omitiendo GOSUBy RETURN. Solo admitía precisión de 8 bits sin signo (en contraste con la precisión de 16 bits con signo para cualquier otra implementación) y números de línea del 0 al 254.

No se permitieron espacios excepto en cadenas; !devuelve un número aleatorio, $antes de que una expresión cargue una cadena en esa dirección; OSvuelve al sistema operativo. La memoria era direccionable como si fuera una matriz bidimensional de bytes altos y bajos (por ejemplo, "(0,0)" a "(255,255)"); CALLejecuta una subrutina en lenguaje de máquina.

Dialectos varios

Muchos dialectos aparecieron en varias otras publicaciones.

La edición de mayo de 1977 incluía una ROM de disquete que contenía MICRO-BASIC.

Inspirado por el llamado de PCC para Tiny BASICs, Robert Uiterwyk escribió MICRO BASIC 1.3 para SWTPC (un sistema 6800 ), que SWTPC publicó en la edición de junio de 1976 del boletín SWTPC. Uiterwyk había escrito a mano el idioma en una tablilla legal. Más tarde amplió el lenguaje a 4K, agregando soporte para punto flotante; esta implementación fue única entre los intérpretes de BASIC al usar decimal codificado en binario a 9 dígitos de precisión, con un rango de hasta 10 99 , y al ser publicado de forma gratuita como un inserto de revista "Floppy ROM". Una versión de 8K agregó variables de cadena y funciones de trigonometría . SWTPC vendió las versiones 4K y 8K. En enero de 1978, Uiterwyk vendió los derechos del código fuente a Motorola .

Thomas F. Waitman escribió un Tiny BASIC en 1976 para los terminales Hewlett-Packard HP-2640 y HP-2645 (que usaban los procesadores Intel 8008 y 8080), que se publicó en el Hewlett-Packard Journal .

En la edición de diciembre de 1976 de Interface Age se publicó LLL ( Laboratorio Lawrence Livermore ) BASIC, cuyo primer borrador fue desarrollado por Steve Leininger a partir de la especificación de Allison antes de que Leininger dejara National Semiconductor por Tandy Corporation . El intérprete final fue desarrollado por John Dickenson, Jerry Barber y John Teeter en la Universidad de Idaho con un contrato con LLL. Tomando 5K, incluía un paquete de punto flotante, desarrollado por David Mead, Hal Brand y Frank Olken. El programa fue puesto al dominio público por LLL, que desarrolló el sistema bajo los auspicios de la Administración de Investigación y Desarrollo de Energía de EE. UU.

4K BÁSICOS

Altair BASIC , 4K BASIC, podría ejecutarse dentro de una máquina RAM de 4kB, dejando solo unos 790 bytes libres para el código del programa. La iniciativa Tiny BASIC comenzó en respuesta al cargo de $ 150 por Altair 4K BASIC.

En 1975, Steve Wozniak se unió al recién formado Homebrew Computer Club , que tenía a sus compañeros Li-Chen Wang (Palo Alto Tiny BASIC) y Tom Pittman (6800 Tiny BASIC). Wozniak concluyó que su máquina tendría que tener un BÁSICO propio, que, con suerte, sería el primero para el procesador MOS Technology 6502 . Como el lenguaje necesitaba 4 kB de RAM, lo convirtió en la memoria mínima para el diseño. Integer BASIC se publicó originalmente en Compact Cassette en 1976.

En 1977, Radio Shack (como se conocía entonces) lanzó su primera computadora, la TRS-80 , un sistema Z80 con Nivel I BÁSICO en una ROM de 4kB. Steve Leininger, empleado de Tandy, había escrito el primer borrador del intérprete NIBL ​​(Lenguaje básico industrial nacional) para el SC / MP mientras trabajaba en National Semiconductor . Incapaz de llevarse ese código fuente con él, adaptó Palo Alto Tiny BASIC de Li-Chen Wang para el prototipo original del TRS-80 Modelo I.Revisó ampliamente el intérprete, agregando soporte de punto flotante, simple negro y ... gráficos en blanco y READ/DATA/RESTOREdeclaraciones.

Desarrollado originalmente en 1979, Sinclair 4K BASIC , escrito por John Grant, utilizó como definición de lenguaje el estándar mínimo BASIC del Instituto Nacional de Estándares Estadounidenses (ANSI) de 1978 , pero en sí mismo era una implementación incompleta de 4Kb con aritmética de enteros únicamente.

Dialectos de microcontroladores

Se han adaptado pequeñas implementaciones de BASIC para el control del procesador y para microcontroladores como Arduino :

  • Stephen A. Ness escribió XYBASIC para Mark Williams Company en 1977, una implementación de enteros de 4K. El lenguaje se usaba a menudo para aplicaciones de control de procesos.
  • Arduino BASIC - Adaptado del 68000 Tiny BASIC de Gordon Brandly, portado a C por Mike Field.
  • Tiny Basic Plus - Adaptado de Arduino BASIC por Scott Lawrence.
  • Half-Byte Tiny Basic - Adaptado de Arduino BASIC.
  • Tiny Basic en el Micro: Bit - Adaptado de Palo Alto Tiny BASIC.

Implementaciones posteriores

En 2002, Emmanuel Chailloux, Pascal Manoury y Bruno Pagano publicaron un Tiny BASIC (falta GOSUB/ RETURN) en Developing Applications with Objective Caml como ejemplo de aplicación de Objective Caml .

En 2013, Alex Yang publicó una implementación en Python .

En 2019, Sergey Kuznetsov publicó una versión en Ruby .

Dialectos comparados

La siguiente tabla compara la característica de lenguaje de las implementaciones de Tiny BASIC con otros BASIC prominentes que los precedieron.

Comparación de implementaciones BÁSICAS: pequeños BÁSICOS y otros BÁSICOS
fecha
de publicación
Dialecto
Programador (es) Procesador Escribe APORTE DEJAR IMPRESIÓN IR A SI ... ENTONCES GOSUB REGRESO FIN CORRER LISTA CLARO NUEVO movimiento rápido del ojo PARA / SIGUIENTE LEER / DATOS / RESTAURAR Comandos BÁSICOS agregados Personalizaciones Expresiones reubicarse Funciones RND Función de memoria Línea de números Delimitador de declaración Errores Precisión Aritmética Variables Matrices Instrumentos de cuerda
Octubre de
1964
DTSS Dartmouth BASIC
(versión 2)
(Estudiantes de Dartmouth) GE-225 Compilar y listo N / A [!] LET var = expresión PRINT expr-list {, /; /} IR A número SI expresión reubicar expresión ENTONCES número de línea Número de GOSUB REGRESO FIN CORRER LISTA - empezar - NUEVO [se solicita el nombre del programa] movimiento rápido del ojo PARA / A / PASO / SIGUIENTE LEER, DATOS PARADA N / A precedencia, ^ <<= => => <> INT, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FN RND (0) 0..1 - 1 hasta 99999 Ninguno 22 definidos 9 dígitos ± 999,999,999; Base de notación E 2-256 a +255 (E ± 76). AZ, A0-Z9 DIM (nombre de una letra, dos dimensiones); si se omite, se supone que va de 0 a 10; hasta 1500 elementos en todos los arreglos Ninguno
Febrero de
1970
DEC BÁSICO-8
(Personal de DEC) PDP-8 Compilar y listo INPUT var-list LET var = expresión PRINT expr-list {, /; /} IR A número IF expresión reubicar expresión [THEN / GO TO] número de línea Número de GOSUB REGRESO FIN CORRER LISTA (primero (, último)) - NUEVO [se solicita el nombre del programa] movimiento rápido del ojo PARA / A / PASO / SIGUIENTE LEER, DATOS, RESTAURAR DETENER, VIEJO, GUARDAR, DESGUARDAR BORRAR (primero (, último)), ADIÓS precedencia, ^ <<= => => <> INT, SGN, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FN RND (0) 0..1 - 1 hasta 2045 Ninguno 23 definidos ? ± 134,217,727; 14E-38 <N <1,7E38 AZ, AA-Z9 DIM (nombre de una letra, dos dimensiones) Ninguno
Junio ​​de
1974
UIUC BÁSICO
Alfred Weaver, Michael Tindall y Ronald Danielson 8008 Interprete INPUT <variable> {, <variable>} * LET var = fórmula PRINT <cadena> / <fórmula> {, <cadena> / <fórmula>} * IR A número SI expresión ENTONCES número de línea Número de GOSUB REGRESO FIN CORRER no documentado no documentado no documentado movimiento rápido del ojo PARA / A / PASO / SIGUIENTE - DEF FN, DETENER N / A precedencia, ^ <<= => => # Y O NO FNA..Z, SIN, COS, LOG, SQR, EXP, ATN - - 0 hasta 999 Ninguno no documentado Mantisa de 4 bytes y exponente de 1 byte [Paquete aritmético de punto flotante de Datapoint 2200] no documentado AZ, A0-Z9 DIM (nombre de una letra, tres dimensiones) Ninguno
1975
Altair 4K BÁSICO
Bill Gates, Paul Allen y Monte Davidoff 8080 Interprete INPUT ("cadena",) var-list (LET) var = expresión PRINT expr-list {, /; } Número GOTO IF expresión ENTONCES número de línea / declaración Número de GOSUB REGRESO FIN CORRER LISTA (inicio) - NUEVO movimiento rápido del ojo PARA / A / PASO / SIGUIENTE LEER, DATOS, RESTAURAR PARADA - precedencia <<= => => <> ABS, INT, SGN, SQR, TAB, USR RND (X) <0, nuevo usando X como semilla; = 0, repetir; > 0, siguiente - 1 hasta 65535 : 12 definidos Operando de 40 bits flotante ? ? DIM (una dimensión) Ninguno
Diciembre de
1975
Nota de diseño
Dennis Allison N / A Interprete INPUT var-list LET var = expresión IMPRIMIR lista-expr Expresión GOTO IF expresión reubicar expresión THEN sentencia Expresión de GOSUB REGRESO FIN CORRER LISTA [eq. a la nueva] - - - - - - precedencia <<= => => <>> < Ninguno Ninguno - 1 hasta 255 Ninguno 8 definidos 16 bits ± 32767 Arizona Ninguno Ninguno
Febrero de
1976
Tiny BASIC Extendido
Dick Whipple y John Arnold 8080 Interprete EN (LET) var = expresión ;} IR A IF expresión [no ENTONCES] declaración IR SUB RETIRADO FIN CORRER LST (primero (, último)) - NUEVO - PARA-NXT (sin PASO) DTA (matriz LET) - - precedencia <<= => => <>> < TB () espacios impresos RN (aleatorio 0-10000) SZE 1 hasta 65535 PS 14 definidos 16 bits ± 32767 Arizona DIM, 1 o 2 dimensiones, 255x255 máx. Ninguno
Marzo de
1976
Denver Tiny BÁSICO
Fred Greeb 8080 Interprete EN (LET) var = expresión ;} IR A IF expresión [no ENTONCES] declaración GOSUB RETIRADO FIN CORRER LISTA (primero último) [eq. a la nueva] - - - - CINTA [GUARDAR], CARGAR CLRS [CLS] precedencia <<= => => <>> < RND (0), RND (1) TALLA 2 hasta 255 : 20 definidos 16 bits ± 32767 AZ, A1 a A6 a Z6 DIM, 1 dimensión Ninguno
Marzo de
1976
6800 Tiny BÁSICO
Tom Pittman 6800 Interprete INPUT (expresión) lista-var LET var = expresión PRINT expr-list {, /; } Expresión GOTO IF expresión reubicar expresión THEN sentencia Expresión de GOSUB REGRESO FIN CORRER LISTA (primero último) [eq. a la nueva] - movimiento rápido del ojo - - - - precedencia <<= => => <>> < USR () RND () - 1 hasta 65535 Ninguno 53 definidos 16 bits ± 32767 Arizona Ninguno Ninguno
Abril de
1976
MINOL
Eric T. Mueller 8080 Interprete EN (LET) var = expresión PR expr-list {;} [GOTO 0 vuelve al inicio de la declaración directa] IF expresión reubicar expresión; declaración N / A N / A FIN CORRER LISTA BORRAR [solo variables] NUEVO - - - - No se permiten espacios excepto en cadenas Sin precedencia de operadores <= # $ [CHR $] ! [RND] - 1 hasta 254 : 6 definido 8 bits 0 hasta 255 Arizona (H, L) ubicación de la memoria solo char
Mayo de
1976
Palo Alto Tiny BASIC
Li-Chen Wang 8080 Interprete INPUT [(expresión) var] * (LET) var = expresión IMPRIMIR lista-expr Expresión GOTO IF expresión [no ENTONCES] declaración Expresión de GOSUB REGRESO PARADA CORRER LISTA (inicio) - NUEVO movimiento rápido del ojo PARA / A / PASO / SIGUIENTE - PARADA - precedencia <<= => => # ABDOMINALES() RND () TALLA 1 hasta 32767 ; 3 definido 16 bits ± 32767 Arizona @ (1 matriz de 1 dimensión) Ninguno
Noviembre de
1976
NIBL
Mark Alexander y Steve Leininger SC / MP Interprete ENTRADA ($) var (LET) var = expresión PR / PRINT expr-list Expresión GOTO Declaración IF expresión (ENTONCES) Expresión de GOSUB REGRESO FIN CORRER LISTA (inicio) BORRAR [variables y pila] NUEVO movimiento rápido del ojo PARA / A / PASO / SIGUIENTE - HACER HASTA Direccionamiento de memoria (@ [PEEK / POKE], STAT, PAGE) precedencia <<= => => <> MOD (), Y, O, NO, RND (A, Z) CIMA 0 hasta 32767 : 13 cuatro caracteres definidos 16 bits ± 32767 Arizona direccionamiento de memoria INPUT $, PRINT $, $ exp = exp
Agosto de
1977
Nivel I BÁSICO
Steve Leininger Z80 Interprete INPUT (# dígitos) [(expresión) var] * (LET) var = expresión PRINT (# dígitos) lista-expr Número GOTO IF expresión ENTONCES declaración Número de GOSUB REGRESO FIN RUN (inicio) LISTA (inicio) - NUEVO movimiento rápido del ojo PARA / A / PASO / SIGUIENTE LEER, DATOS, RESTAURAR DETENER, CONT, ON-GOTO / GOSUB CLOAD, CSAVE, CLS, SET, RESET, precedencia <<= => => <>> < ABS (), INT (), MEM, PUNTO (X, Y) RND () MEM 1 hasta 32767 : 3 definido 16 bits ± 32767 Arizona A (1 matriz de 1 dimensión) A $, B $
Junio ​​de
1976
MICRO BÁSICO 1.3
Robert Uiterwyk 6800 Interprete INPUT var-list (LET) var = expresión PRINT expr-list {, /; } Expresión GOTO IF expresión reubicar expresión THEN sentencia Expresión de GOSUB REGRESO FIN CORRER LISTA (primero (, último)) - NUEVO - PARA / HASTA / SIGUIENTE (sin PASO) - PESTAÑA() - precedencia <<= => => <>> < RND, TAMAÑO RND [devuelve 1-32762] TAMAÑO (declaración que imprime los bytes usados ​​y los bytes libres) 1 hasta 65535 Ninguno 17 definidos 16 bits [¡BCD posterior!] ± 32767 Arizona DIM (dos dimensiones, tamaño máximo de 255) Ninguno
Junio ​​de
1976

Lengua básica básica científica
(ESCELBAL)
Mark Arnold y Nat Wadsworth 8008 Interprete INPUT var-list (LET) var = expresión PRINT expr-list {, /; /} Número GOTO ENTONCES declaración Número de GOSUB REGRESO FIN CORRER LISTA - Rasguño] movimiento rápido del ojo PARA / A / PASO / SIGUIENTE - GUARDAR CARGA UDF [USR] precedencia, ^ <<= => => <> INT, SGN, ABS, SQR, CHR [utilizable solo en PRINT], TAB RND (0) 0..1 - 1 al 999999 Ninguno 18 definidos Operando de 32 bits de coma flotante o fija ± 134,217,727; 14E-38 <N <1,7E38 ? DIM (nombre de una letra, una dimensión; hasta 4 matrices de hasta 64 entradas en total) Ninguno
Octubre de
1976
Apple I BÁSICO
Steve Wozniak 6502 Interprete INPUT ("cadena",) var-list (LET) var = expresión PRINT expr-list {, /; } Expresión GOTO IF expresión reubicar expresión ENTONCES número de línea / declaración Expresión de GOSUB REGRESO FIN RUN (inicio) LISTA (primero (, último)) - SCR movimiento rápido del ojo PARA / A / PASO / SIGUIENTE - AUTO, DEL, POKE TAB (comando), CALL precedencia <<= => => <> # Y O NO MOD SGN, ABS, PEEK (), LEN () RND (X) 0..X (o X..0!) HIMEM, LOMEM 1 hasta 32767 Ninguno [versión anterior, luego:] 16 definidos 16 bits ± 32767 AZ seguido de cualquier número de alfanumérico DIM (una dimensión) dimensionado
Diciembre de
1976
LLL BÁSICO
(Personal de la Universidad de Idaho) 8080 Interprete INPUT var-list (LET) var = expresión PRINT expr-list {, /;} IR A número Sentencia IF expresión relop expresión (ENTONCES) GO SUB número REGRESO FIN CORRER LISTA - SCR movimiento rápido del ojo PARA / HASTA / SIGUIENTE (sin PASO) - PARADA LLAMAR, OBTENER (), PONER () precedencia <<= => => <>> < ¿No RND? - 0 hasta 32767 : 14 definidos Operando de coma flotante de 32 bits ? AZ, A0-Z9 DIM (solo números enteros, nombre de una letra, una dimensión, tamaño máximo de 255) Ninguno

Ver también

Notas

Referencias

Citas

Bibliografía

enlaces externos