Tiny BASIC es una familia de dialectos del lenguaje de programación BASIC que pueden ocupar 4 KB o menos de memoria . Tiny BASIC fue diseñado por Dennis Allison y la People's Computer Company (PCC) en respuesta a la carta abierta publicada por Bill Gates quejándose de que los usuarios pirateaban Altair BASIC , que se vendía por 150 dólares. Tiny BASIC fue concebido como una versión completamente gratuita de BASIC que se ejecutaría en los mismos microordenadores de la época .
Tiny BASIC se publicó como especificación, no como implementación, en el número de septiembre de 1975 del boletín informativo de PCC. El artículo invitaba a los programadores a implementarlo en sus máquinas y enviar la implementación resultante en lenguaje ensamblador para su inclusión en una serie de tres boletines previstos. 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 centrada en el software para microcomputadoras.
El pequeño tamaño y el código fuente gratuito hicieron que estas implementaciones fueran invaluables en los inicios de las microcomputadoras a mediados de la década de 1970, cuando la RAM era costosa y el tamaño típico de la memoria era de solo 4 a 8 KB. Si bien la versión mínima de Altair BASIC de Microsoft también se ejecutaba en máquinas de 4 KB, dejaba solo 790 bytes libres para programas BASIC. Más espacio libre fue una ventaja significativa de Tiny BASIC. Para cumplir con estos estrictos límites de tamaño, los dialectos de Tiny BASIC generalmente carecían de varias características comunes en otros dialectos; por ejemplo, la mayoría de las versiones carecían de variables de cadena , carecían de aritmética de punto flotante y solo permitían nombres de variables de una sola letra.
Todavía hoy se utilizan implementaciones básicas de BASIC para programar microcontroladores como el Arduino .
Historia
Altair BÁSICO

Los primeros microordenadores , como el MITS Altair 8800 , generalmente carecían de entrada/salida (E/S) integrada, más allá de los interruptores del panel frontal y las lámparas LED . Para realizar tareas útiles, normalmente se requería la adición de una tarjeta de expansión de E/S y el uso de algún tipo de terminal . En aquella época, los terminales basados en vídeo eran muy caros, costando mucho más que el propio ordenador, por lo que muchos usuarios recurrieron a dispositivos mecánicos como el Teletipo Modelo 33. El Modelo 33, como la mayoría de los teletipos de la época, incluía un sistema de perforación de cinta diseñado para permitir a los operadores pregrabar sus mensajes y reproducirlos a "alta velocidad", más rápido de lo que la mayoría de las personas podían escribir el mensaje en directo. Para los primeros microordenadores, esto proporcionaba un formato de almacenamiento de datos informático muy práctico , permitiendo a los usuarios escribir programas en cinta de papel y distribuirlos a otros usuarios. [ 1 ]
El Homebrew Computer Club se reunió por primera vez en marzo de 1975, y sus miembros pronto utilizaron las reuniones para intercambiar software en cintas perforadas. En la reunión de junio, desapareció una cinta que contenía una versión preliminar de Altair BASIC . La cinta fue entregada a Steve Dompier, quien se la pasó a Dan Sokol, que tenía acceso a una perforadora de cintas de alta velocidad. En la siguiente reunión, aparecieron 50 copias de Altair BASIC en cinta de papel en una caja de cartón. [ 2 ] Cuando Ed Roberts , fundador de MITS, se enteró de esto, declaró: «Cualquiera que esté usando una copia robada de MITS BASIC debería identificarse como lo que es: un ladrón». [ 3 ] Bill Gates lo hizo 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 roban su software». [ 4 ]
Tiny BASIC
La queja no fue bien recibida. Entre las muchas respuestas, Bob Albrecht, otro miembro de Homebrew y fundador de People's Computer Company (PCC), pensó que la mejor respuesta sería producir su propio BASIC que fuera completamente gratuito para que cualquiera lo usara. Se acercó a Dennis Allison , 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 cupiera en 2 a 3 kilobytes de memoria. [ a ] Para facilitar la portabilidad , el diseño se basó en un lenguaje intermedio (IL), un intérprete para el intérprete, lo que significaba que solo una pequeña parte del código total tenía que portarse.
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 para Intel 8080 del intérprete IL. El artículo instaba a los programadores a implementar el diseño en sus computadoras y enviar la versión resultante en lenguaje ensamblador de vuelta a PCC. Anunciaron sus planes de publicar tres boletines especiales que contendrían estas versiones enviadas por los usuarios, junto con correcciones de errores, programas escritos en el nuevo BASIC y sugerencias y mejoras. El concepto ganó mayor notoriedad cuando se republicó en la edición de enero de 1976 del Grupo de Interés Especial en Lenguajes de Programación de la ACM . [ 5 ] Las contribuciones llegaron en abundancia. Entre las primeras versiones notables se encontraba Tiny BASIC Extended de Dick Whipple y John Arnold, que se ejecutaba en 3 KB de RAM, añadía bucles FOR...NXT y permitía una única matriz numérica. Evitaron el uso del IL y lo escribieron directamente en código máquina, utilizando octal . [ 6 ]
El primero de los tres boletines planeados, con el título "Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte", se publicó en enero de 1976. [ 6 ] Comienza con una nota de Albrecht, bajo el seudónimo "el dragón", sugiriendo que tres ediciones no serían suficientes y preguntando 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ó varios programas pequeños de BASIC con consejos y trucos de Allison. [ 7 ] La respuesta al primer número fue tan impresionante que la introducción del segundo número declaró que ya habían decidido continuar publicando el nuevo boletín con el nombre simplificado Dr. Dobb's Journal . En los siguientes números, se publicaron versiones adicionales del lenguaje y comenzaron a aparecer artículos similares en otras revistas como Interface Age .
Desparramar

A mediados de 1976, ya existían intérpretes de Tiny BASIC para los procesadores Intel 8080 , Motorola 6800 y MOS Technology 6502. Esto fue un precursor del desarrollo colaborativo de la comunidad de software libre antes de que internet permitiera la transferencia sencilla de archivos, y un ejemplo de proyecto de software libre anterior al movimiento del software libre . [ 9 ] Los aficionados a la informática intercambiaban cintas de papel, casetes o incluso transcribían los archivos a partir de las listas impresas. [ 10 ]
Jim Warren, editor de Dr. Dobb's , escribió en el boletín informativo de ACM Programming Language de julio de 1976 sobre las motivaciones y los métodos de este exitoso proyecto. Comenzó diciendo: «Existe una alternativa viable a los problemas planteados por Bill Gates en su airada carta a los aficionados a la informática sobre el plagio de software. Cuando el software es gratuito, o tan económico que resulta más fácil pagar por él que duplicarlo, entonces no se "robará"». La carta de Bill Gates tenía como objetivo convertir el software en productos . El método alternativo consistía en que un profesional experimentado realizara el diseño general y luego definiera una estrategia de implementación. Aficionados con conocimientos implementarían el diseño para diversos sistemas informáticos. Warren predijo que esta estrategia continuaría y se ampliaría. [ 10 ]
El número de mayo de 1976 de Dr. Dobbs incluye el Palo Alto Tiny BASIC de Li-Chen Wang para el 8080. La lista comienza con el título, el nombre del autor y la fecha, pero también incluye "@ COPYLEFT ALL WRONGS RESERVED". [ 11 ] Un compañero del Homebrew Computer Club , Roger Rauskolb, modificó y mejoró el programa de Wang, y este se publicó en el número de diciembre de 1976 de la revista Interface Age . [ 8 ] Roger añadió su nombre y conservó el aviso de COPYLEFT.
Descripción
Conceptos básicos
Tiny BASIC fue diseñado para usar la menor cantidad de memoria posible, lo que se refleja en la escasez de funciones y en los detalles de su sistema intérprete . Los primeros microordenadores carecían de la RAM y el almacenamiento secundario necesarios para un compilador BASIC , algo más típico de los sistemas de tiempo compartido.
Al igual que la mayoría de los lenguajes BASIC de la época, Tiny Basic era interactivo, ya que el usuario escribía instrucciones en una línea de comandos. Dado que los microordenadores de la época solían utilizarse con teletipos o terminales "tontos", no era posible editar directamente el texto existente, por lo que el editor utilizaba caracteres de retroceso, a menudo la barra invertida, para indicar dónde retrocedía el usuario para editar el texto.
Si el usuario escribía una instrucción en la línea de comandos, el sistema la analizaba para comprobar si comenzaba con un número. Si no era así, la línea se analizaba y procesaba inmediatamente, generando potencialmente una salida mediante PRINT . Esto se conocía como "modo directo".
Si la línea se ingresaba con un número al principio, este se convertía del formato decimal, como "50", a un valor de 8 bits, en este caso, $32 hexadecimal . Este número se utilizaba como índice en un área de almacenamiento tipo matriz donde el resto de la línea se almacenaba exactamente en el formato en que se había escrito. Cuando el usuario escribía LIST en la línea de comandos, el sistema recorría la matriz, convertía el número de línea de nuevo a formato decimal y, a continuación, imprimía el resto del texto.
Cuando un programa se encuentra en memoria y el usuario introduce el comando EJECUTAR , el sistema entra en modo indirecto. En este modo, se coloca un puntero que apunta a la primera línea del programa, por ejemplo, 10 ( $0A hexadecimal ). A continuación, se recupera el texto original de esa línea de la memoria y se ejecuta como si el usuario lo hubiera introducido en modo directo. El puntero avanza entonces a la siguiente línea y el proceso continúa.
Gramática formal
La gramática se presenta a continuación en forma Backus-Naur , casi exactamente como se especificó en la Nota de Diseño. [ 12 ] En la lista, un asterisco (" *") denota cero o más del objeto a su izquierda , excepto el primer asterisco en la definición de " ", que es el operador de multiplicación; los paréntesis agrupan objetos; y un épsilon (" ") significa el conjunto vacío. Como es común en la notación gramatical de lenguajes de programación, la barra vertical (" ") distingue las alternativas, al igual que el hecho de que se listen en líneas separadas. El símbolo " " denota un retorno de carro (generalmente generado por la tecla "Enter" del teclado). Un BREAK desde la consola interrumpirá la ejecución del programa. termε|CR
línea :: = número instrucción CR | instrucción CR instrucción :: = IMPRIMIR lista-expr SI expresión relop expresión ENTONCES instrucción GOTO expresión INPUT lista-var DEJAR var = expresión GOSUB expresión RETORNAR BORRAR LISTA EJECUTAR FIN lista-expr :: = ( cadena | expresión ) ( , ( cadena | expresión ) ) * lista-var :: = var ( , var ) * expresión :: = ( +|-|ε ) término (( +|- ) término ) * término :: = factor (( * | / ) factor ) * factor :: = var | número | ( expresión ) var :: = A | B | C ... | Y | Z número :: = dígito dígito * dígito :: = 0 | 1 | 2 | 3 | ... | 8 | 9 relop :: = < ( > | = |ε ) | > ( <| = |ε ) | =cadena :: = " ( |!|#|$ ... -|.|/|dígito|: ... @|A|B|C ... |X|Y|Z)* "Tenga en cuenta que la cadena no estaba definida en la nota de diseño.
Esta sintaxis, por simple que fuera, añadió una innovación: GOTO y GOSUB podían tomar una expresión en lugar de solo un número de línea, proporcionando un GOTO asignado [ 13 ] en lugar de la instrucción switch de GOTO/GOSUB ... OF ... , una estructura entonces compatible con HP Time-Shared BASIC y anterior a ON ... GOTO . La sintaxis que permitía la instrucción IF-THEN (en lugar de solo un número de línea para saltar) aún no era compatible con Dartmouth BASIC en ese momento, pero había sido introducida por Digital [ 14 ] y copiada por Microsoft.
Implementación en una máquina virtual
La nota de diseño especificaba una máquina virtual , en la que el intérprete Tiny BASIC se ejecutaba a su vez en un intérprete de máquina virtual. La idea del diseñador de utilizar una máquina virtual de aplicación 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 ejecutaban en ella eran algo lentos. [ 15 ]
Entre los dialectos que utilizaban la máquina virtual se encontraban Tiny BASIC Extended, Tiny BASIC de Tom Pittman [ 16 ] 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, trataban el programa IL (Lenguaje Interpretativo) como pseudocódigo para que el algoritmo se implementara en lenguaje ensamblador; Denver Tiny BASIC no utilizaba una máquina virtual, pero seguía fielmente el programa IL.
Este es un extracto representativo del programa IL de 120 líneas:
S1: TST S3 , 'GO' ;GOTO O GOSUB? TST S2 , 'TO' ;SÍ...TO, O...SUB CALL EXPR ;OBTENER ETIQUETA HECHO ;ERROR SI CR NO ES EL SIGUIENTE XFER ;CONFIGURAR Y SALTAR S3: TST S8 , 'PRINT' ;IMPRIMIR.Un patrón común en el programa es comprobar si hay una palabra clave o parte de ella, y luego actuar en función de esa información. Cada comprobación es una aserción sobre lo que sigue en el búfer de línea. Si la aserción falla, el control salta a una etiqueta subsiguiente (normalmente buscando una nueva palabra clave o token). Aquí el sistema avanza su cursor de búfer sobre cualquier espacio y comprueba si hay 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 comprueba si hay TO , saltando a la línea S2 si falla (una comprobación de SUB , para ver si se trata en cambio de un comando GOSUB ). Si pasa, el control continúa; en este caso, llamando a una subrutina IL que comienza en la etiqueta EXPR , que analiza una expresión. En Tiny BASIC, (un GO TO calculado) es tan válido como y es la alternativa al ON-GOTO de implementaciones BASIC más grandes. La subrutina EXPR coloca el resultado de la expresión en la pila aritmética (en este caso, el número de línea). DONE verifica que no haya otro texto después de la expresión y genera un error si lo hay. XFER extrae el número de la pila y transfiere la ejecución (GOS TO) al número de línea correspondiente, si existe.GOTO X*10+100GOTO 100
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. [ 17 ]
- TST lbl , cadena
- Si la cadena coincide con la línea BASIC, avanza el cursor sobre la cadena y ejecuta la siguiente instrucción IL; si la prueba falla, ejecuta la instrucción IL en la etiqueta lbl.
- LLAMAR lbl
- Ejecutar la subrutina IL que comienza en lbl ; guardar la dirección IL que sigue a la llamada en la pila de control.
- HECHO
- Se informará de un error de sintaxis si, tras eliminar los espacios en blanco iniciales, el cursor no se encuentra en la posición correcta para alcanzar un retorno de carro.
- Transferencia
- Comprueba que el valor en la parte superior de la pila AE esté dentro del rango. Si no lo está, informa de un error. Si lo está, intenta posicionar el cursor en esa línea. Si existe, comienza la interpretación allí; si no, informa de un error.
- SALTO lbl
- Continuar la ejecución del IL en la etiqueta especificada
- RTN
- Regrese a la ubicación IL especificada en la parte superior de la pila de control.
- PRS
- Imprime los caracteres del texto BASIC hasta la comilla de cierre, sin incluirla.
- PRN
- Número de impresión obtenido al extraer la parte superior de la pila de expresiones.
- SPC
- Inserta espacios para mover el cabezal de impresión a la siguiente zona.
- NLINE
- Imprime un CRLF [ 18 ] en la impresora
Tom Pittman , al hablar del IL, dice: «El intérprete de 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 añadir azúcar sintáctico al lenguaje, pero la forma básica se mantiene. 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 para la interpretación de TINY. La experiencia ha demostrado que la dificultad de añadir nuevas características al lenguaje es desproporcionada con respecto a la naturaleza de dichas características. Por lo general, es necesario añadir subrutinas adicionales en lenguaje máquina para soportar las nuevas características. A menudo, la dificultad supera las ventajas». [ 19 ]
Desviaciones del diseño
Al definir Tiny BASIC para el Homebrew Computer Club, Pittman escribió: "Tiny BASIC es un subconjunto propio de Dartmouth BASIC, que consta únicamente de los siguientes tipos de instrucciones: LET, PRINT, INPUT, IF, GOTO, GOSUB, RETURN, END, CLEAR, LIST, RUN. La aritmética se realiza solo con enteros de 16 bits con los operadores + - * / y paréntesis anidados. Solo existen los 26 nombres de variables de una sola letra A, B, ...Z, y ninguna función. No hay cadenas ni matrices... Tiny BASIC especifica números de línea menores de 256." [ 20 ] A continuación, describió su implementación: "Este lenguaje se ha ampliado para incluir las funciones RND, USR, PEEK y POKE, lo que permite al usuario acceder a todos los componentes de su sistema en el 6800 desde el programa BASIC."
Muchos desarrolladores incorporaron sus propias experiencias con HP Time-Shared BASIC o DEC BASIC-PLUS a sus diseños y flexibilizaron la especificación formal del lenguaje Tiny BASIC. De las siete implementaciones destacadas publicadas en 1977:
- Todos añadieron algún tipo de función de números aleatorios, normalmente
RND(). Aunque no se incluyó en la especificación, un artículo de un boletín informativo anterior a la Nota de Diseño para Tiny BASIC solicitaba únicamente esta función. - Todos permitieron que LET fuera opcional y la mayoría de las expresiones let en las sentencias de asignación contienen operadores relacionales .
- Todos, excepto 6800TB, admitían delimitadores de sentencias en las líneas,
:aunque TBX usaba$y PATB usaba;. - En las sentencias IF , todas excepto MINOL eliminaron la necesidad de que las expresiones contuvieran operadores relacionales (por ejemplo, era válido). Las implementaciones eliminaron THEN por completo, lo hicieron opcional o solo lo admitieron para GOTO implícito . Ninguna admitió cláusulas ELSE .
IFXTHENLETY=X - Muchos modificaron PRINT para admitir zonas de impresión, usándolas para ir a la siguiente zona y para no avanzar el cursor.
,; - Todos excepto 6800TB y DTB agregaron NUEVO .
- Todos, excepto 6800TB y MINOL, añadieron una función para devolver el tamaño de la memoria: TBX tenía SZE , DTB y PATB tenían SIZE , L1B tenía MEM y NIBL tenía TOP .
- Cuatro implementaciones añadieron matrices, ya sea una única matriz sin dimensiones en PATB y L1B o matrices con dimensiones en TBX y DTB.
- Cuatro implementaciones añadieron la instrucción REM ark.
- Cuatro implementaciones añadieron el bucle FOR : PATB, NIBL y L1B ofrecían FOR-TO-STEP/NEXT , mientras que TBX no admitía STEP y utilizaba la palabra clave NXT para finalizar un bucle.
- Solo NIBL hizo algún guiño a 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 ahorrar RAM, TBX, [ 21 ] DTB, [ 22 ] y MINOL [ 23 ] truncaron las palabras clave: PR para PRINT , IN para INPUT , RET para RETURN . Las palabras clave tradicionales completas no eran aceptadas. En cambio, PATB permitía las palabras clave tradicionales aceptadas, pero también permitía abreviar cualquier palabra clave a su cadena mínima única, con un punto al final. Por ejemplo, PRINT podía escribirse , aunque PR. y otras variaciones también funcionaban. Este sistema se mantuvo en el BASIC de nivel I para el TRS-80 , que usaba PATB, y también se encontró más tarde en el BASIC de Atari y el BASIC de varios ordenadores de bolsillo Sharp . [ 24 ]P.
Dialectos
Los dialectos más destacados de Tiny BASIC fueron el 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 destacados
Tiny BASIC se publicó por primera vez en un boletín informativo derivado de People's Computer Company , un boletín que posteriormente se convirtió en Dr. Dobb's Journal , una revista de informática de larga trayectoria. Se publicaron alrededor de diez versiones en la revista.
TBX también era conocido como Texas Tiny BASIC. [ 33 ]
Tanto SCELBAL [ 34 ] como 6800 Tiny BASIC fueron anunciados en la revista, pero no publicaron su código fuente.
Palo Alto Tiny BASIC
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 , escrita en un lenguaje ensamblador personalizado con mnemónicos no estándar. Esto dio lugar a otras adaptaciones que funcionaban con ensambladores convencionales en el 8080. [ 24 ] 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 al artículo original apareció en el número de junio/julio de Dr. Dobb's (Vol. 1, n.º 6). Este artículo también incluía información sobre cómo añadir dispositivos de E/S adicionales, utilizando como ejemplo el código para la pantalla de vídeo VDM de Processor Technology .
Wang fue uno de los primeros en usar la palabra copyleft . En el aviso de distribución de Palo Alto Tiny BASIC, había escrito "@COPYLEFT TODOS LOS DERECHOS RESERVADOS". [ 35 ] Tiny BASIC no se distribuyó bajo ningún tipo formal de términos de distribución copyleft, sino que se presentó en un contexto donde el código fuente se compartía y modificaba. De hecho, Wang había contribuido con ediciones a Tiny BASIC Extended antes de escribir su propio intérprete. [ 21 ] 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 . [ 8 ] También publicó una tercera versión en el Reference Book of Personal and Home Computing de PCC . [ 36 ]
Uno de los cambios más notables en PATB es la adición del bucle FOR...NEXT . En el TB original, los bucles solo podían implementarse usando IFy GOTO. Al igual que en Microsoft BASIC , los límites superior e inferior del bucle se establecían al entrar en él y no cambiaban durante su ejecución, por lo que si uno de los límites se basaba en una expresión de variable, cambiar la variable no modificaba el límite. El STEPmodificador era opcional, como en MS. [ 24 ]
Otro cambio significativo fue la posibilidad de colocar varias instrucciones en una sola línea. Por razones no explicadas, PATB utilizaba el punto y coma ;para separar las instrucciones, en lugar de los dos puntos, que ya eran comunes :.
Otros cambios incluyen la adición de una única matriz numérica, con el nombre de variable @, STOPademás de END, y el uso de #para diferencias en comparaciones, en lugar de <>. [ 24 ] [ b ]
PATB utilizaba palabras en lugar de números para los mensajes de error. Para reducir la cantidad de memoria requerida, solo había tres mensajes, cada uno compuesto por una sola palabra. El sistema respondía con un mensaje WHAT?de error para errores de sintaxis, otro HOW?para errores de tiempo de ejecución como saltos a una línea inexistente o desbordamientos numéricos, y otro SORRYpara problemas de falta de memoria. [ 24 ]
Wang también escribió un programa STARTREK en su Tiny BASIC que apareció en el número de julio de 1976 del boletín informativo de la People's Computer Company . [ 37 ] [ 38 ]
Posteriormente adaptó el lenguaje a 3K Control Basic para Cromemco , añadiendo nombres de variables con la forma letra-dígito (por ejemplo, A0a Z9), funciones lógicas ( AND(), OR(), XOR()), un CALLcomando para ejecutar rutinas en lenguaje máquina, más PRINTopciones de formato y otras ( GET()y PUT()en lugar de PEEKy POKE; funciones de puerto de E/S). [ 39 ]
Palo Alto Tiny BASIC se adaptó 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 ). [ 40 ]
MINOL
Escrita por un estudiante de penúltimo año de secundaria, MINOL fue la única implementación que no admitía la Nota de Diseño completa, carecía de precedencia de operadores , solo tenía tres operadores relacionales (<, =, #), y omitía GOSUBy RETURN. Solo admitía precisión de 8 bits sin signo (a diferencia de la precisión de 16 bits con signo de todas las demás implementaciones) y números de línea del 0 al 254.
No se permitían espacios excepto en cadenas; !devuelve un número aleatorio, $antes de que una expresión cargue una cadena en esa dirección; OSregresa 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 máquina. [ 23 ]
Dialectos diversos
Muchos dialectos aparecieron en diversas publicaciones.

Inspirado por la convocatoria de PCC para Tiny BASICs, Robert Uiterwyk escribió MICRO BASIC 1.3 para el sistema SWTPC 6800 , que SWTPC publicó en el número de junio de 1976 de su boletín informativo. Uiterwyk había escrito el lenguaje a mano en una tableta legal. Posteriormente, amplió el lenguaje a 4K, añadiendo soporte para coma flotante; esta implementación fue única entre los intérpretes de BASIC por utilizar decimal codificado en binario con una precisión de 9 dígitos, con un rango de hasta 10⁹⁹ , y por publicarse gratuitamente como un inserto de revista "Floppy ROM" . Una versión de 8K añadió variables de cadena y funciones trigonométricas . SWTPC vendió tanto la versión de 4K como la de 8K. En enero de 1978, Uiterwyk vendió los derechos del código fuente a Motorola . [ 41 ] [ 42 ]
En 1976, Thomas F. Waitman escribió un Tiny BASIC para los terminales Hewlett-Packard HP-2640 y HP-2645 (que utilizaban los procesadores Intel 8008 y 8080), que fue publicado en la revista Hewlett-Packard Journal .
En el número de diciembre de 1976 de Interface Age se publicó LLL ( Lawrence Livermore Laboratory ) BASIC, cuyo primer borrador fue desarrollado por Steve Leininger a partir de la especificación de Allison antes de que Leininger dejara National Semiconductor para unirse a Tandy Corporation . El intérprete final fue desarrollado por John Dickenson, Jerry Barber y John Teeter en la Universidad de Idaho bajo contrato con LLL. Ocupaba 5 KB e incluía un paquete de punto flotante, desarrollado por David Mead, Hal Brand y Frank Olken. El programa fue puesto en dominio público por LLL, que desarrolló el sistema bajo los auspicios de la Administración de Investigación y Desarrollo Energético de los Estados Unidos. [ 43 ]
Conceptos básicos de 4K
Altair BASIC , 4K BASIC, podía ejecutarse en una máquina con 4 KB de RAM, dejando solo unos 790 bytes libres para el código del programa. [ 44 ] [ 45 ] 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 , cuyos miembros eran Li-Chen Wang (Palo Alto Tiny BASIC) y Tom Pittman (6800 Tiny BASIC). Wozniak concluyó que su máquina tendría que tener su propio BASIC, que, con suerte, sería el primero para el procesador MOS Technology 6502. Como el lenguaje requería 4 KB de RAM, estableció esa como la memoria mínima para el diseño. [ 46 ] Integer BASIC se publicó originalmente en Compact Cassette en 1976.
En 1977, Radio Shack (como se la conocía entonces) lanzó su primera computadora, la TRS-80 , un sistema Z80 con BASIC de nivel I en una ROM de 4 KB. Steve Leininger, empleado de Tandy , había escrito el primer borrador del intérprete NIBL (National Industrial Basic Language) para la SC/MP mientras trabajaba en National Semiconductor . [ 29 ] Al no poder llevarse ese código fuente, adaptó el Palo Alto Tiny BASIC de Li-Chen Wang para el prototipo original del TRS-80 Modelo I. Revisó extensamente el intérprete, agregando soporte para coma flotante, gráficos simples en blanco y negro y sentencias READ/DATA/RESTORE . [ 47 ]
Desarrollado originalmente en 1979, Sinclair 4K BASIC , escrito por John Grant, utilizó como definición de lenguaje el estándar Minimal BASIC del Instituto Nacional Estadounidense de Estándares (ANSI) de 1978, pero era en sí mismo una implementación incompleta de 4 KB con aritmética de enteros únicamente. [ 48 ]
dialectos de microcontroladores
Se han adaptado implementaciones básicas en formato minúsculo para el control de procesadores y microcontroladores como el Arduino :
- Stephen A. Ness escribió XYBASIC para la Mark Williams Company en 1977, una implementación de enteros de 4K. El lenguaje se usaba frecuentemente para aplicaciones de control de procesos. [ 49 ]
- Arduino BASIC – adaptado del Tiny BASIC 68000 de Gordon Brandly, portado a C por Mike Field.
- TinyBasic Plus – adaptado de Arduino BASIC por Scott Lawrence. [ 50 ]
- Half-Byte Tiny Basic – adaptado de Arduino BASIC. [ 51 ]
- Tiny Basic en el micro:bit – adaptado de Palo Alto Tiny BASIC. [ 52 ]
Implementaciones posteriores
En 2002, Emmanuel Chailloux, Pascal Manoury y Bruno Pagano publicaron un Tiny BASIC (que carecía de GOSUB / RETURN ) en Developing Applications with Objective Caml como ejemplo de aplicación Objective Caml . [ 53 ]
En 2013, Alex Yang publicó una implementación en Python . [ 54 ]
En 2019, Sergey Kuznetsov publicó una versión en Ruby . [ 55 ]
También en 2019, Oscar Toledo Gutierrez publicó bootBASIC, que encaja en el512 bytes del sector de arranque de una máquina 8086/8088, lo que la convierte en la implementación de BASIC más pequeña hasta la fecha. Para lograr esto, el lenguaje elimina los operadores relacionales ( las sentencias IF funcionan con valores distintos de cero), limita las líneas de código a 19 caracteres o menos y no actualiza la pantalla cuando se presiona la tecla de retroceso. [ 56 ] Además, carece de GOSUB y RETURN, pero incluye una función RND (sin argumentos, que devuelve un valor entre 0 y 255). [ 57 ] El lenguaje utiliza una matriz para almacenar las líneas del programa, lo que requiere20.000 bytes para hacerlo. [ 58 ]
En 2023, Gordon Henderson publicó una implementación de Tiny Basic en ensamblador 6502. Está influenciada por NIBL y puede ejecutarse en tan solo3,5 KB de ROM que requieren al menos1 KB de RAM para almacenamiento de datos y programas. Admite DO/UNTIL, FOR/NEXT, cadenas simples y acceso a memoria (PEEK/POKE ) (byte o palabra de 16 bits), GOSUB/RETURN, CALL, RND con funciones para entrada y salida hexadecimal. [ 59 ]
Comparación de dialectos
La siguiente tabla compara las características del lenguaje de las implementaciones de Tiny BASIC con las de otras versiones destacadas de BASIC que las precedieron.
Véase también
Notas
- ↑ En aquel entonces, el tamaño de memoria más común para el 8080 era de 4 KB, que costaba cientos de dólares.
- ↑ El hash también se usaba para diferencias en HP Time-Shared BASIC .
Referencias
Citas
- ↑ Lancaster, Don (1976). "TV Typewriter Cookbook" (PDF) . págs. 210–211 . Archivado (PDF) del original el 09/10/2022.
- ↑ Manes y Andrews 1994 , pág. 81.
- ↑ Roberts, H. Edward (octubre de 1975). «Carta del Presidente» . Computer Notes . 1 (5). Albuquerque, NM: MITS: 3–4 . Archivado del original el 23 de marzo de 2012.
- ↑ Manes y Andrews, 1994 , pág. 91.
- ↑ Allison, Dennis (julio de 1976). "Notas de diseño para TINY BASIC" . SIGPLAN Notices . 11 (7). ACM: 25–33 . doi : 10.1145/987491.987494 . S2CID 18819472 .
- 1 2 "Hoja de código TB" . Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (1). Diciembre de 1975.
- ↑ Dobbs 1976 , pág. 5.
- 1 2 3 Rauskolb, Roger (diciembre de 1976). "El Tiny BASIC de Palo Alto del Dr. Wang". Interface Age . 2 (1): 92– 108.El código fuente comienza con las siguientes nueve líneas:
;********************************* ; ; TINY BASIC PARA INTEL 8080 VERSIÓN 2.0 Por Li-chen Wang MODIFICADO Y TRADUCIDO ; A MNEMOTECNIA DE INTEL Por Roger Rauskolb 10 DE OCTUBRE DE 1976 ; @COPYLEFT RESERVADOS TODOS LOS DERECHOS ; ;*********************************
- ↑ "Hardware abierto: cómo y por qué funciona" . IBM .
El movimiento del software libre fue fundado por Dennis Allison con el lanzamiento de Tiny BASIC en 1975.
- 1 2 Warren, Jim C. (julio de 1976). "Correspondencia". SIGPLAN Notices . 11 (7). ACM: 1– 2. ISSN 0362-1340 .
- ↑ Wang, Li-Chen (mayo de 1976). "Palo Alto Tiny BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (5): 12– 25.El código fuente comienza con las siguientes seis líneas.
TINY BASIC PARA INTEL 8080 VERSIÓN 1.0 POR LI-CHEN WANG 10 DE JUNIO DE 1976 @COPYLEFT TODOS LOS DERECHOS RESERVADOS
La fecha de junio en el número de mayo es correcta. La revista llevaba retraso, por lo que se combinaron los números de junio y julio para ponerse al día. - ↑ Allison, Dennis (1976). "Construye tu propio BASIC" . Dr. Dobb's Journal . Vol. 1, n.º 1, pág. 9.
- ↑ Allison, Dennis (1976). "Guía de referencia rápida para Tiny BASIC" . Dr. Dobb's Journal . Vol. 1, n.º 1, pág. 6.
- ↑ Manual del lenguaje BASIC-PLUS (PDF). Maynard, Massachusetts: Digital Equipment Corporation. 1972. págs. 3–13 .
- ↑ Allen, Dennis. "TINY BASIC". People's Computer Company . Vol. 4, n.º 3.
- ↑ Veit, Holger. "El pequeño BASIC 6800 de Tom Pittman" . Consultado el 2 de mayo de 2017 .
- ↑ Dr. Dobb's Journal , Volumen 1, Número 1, 1976, p. 12.
- ↑ El
CRLFsímbolo "there" representa un retorno de carro seguido de un salto de línea . - ↑ Pittman, Tom. "Tiny BASIC Experimenter's Kit" . Consultado el 9 de agosto de 2020 .
- ↑ "TINY BASIC 6800" (PDF) . Archivado (PDF) del original el 09/10/2022 . Consultado el 13 de agosto de 2020 .
- 1 2 3 "Tiny BASIC Extended". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (2). Febrero de 1976.
- 1 2 "Denver Tiny BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (3). Marzo de 1976.
- 1 2 3 "MINOL". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (4). Abril de 1976.
- 1 2 3 4 5 Rauskolb, Roger (diciembre de 1976). "Dr. Wang's Palo Alto Tiny BASIC" (PDF) . Interface Age . págs. 92–108 . Archivado (PDF) del original el 9 de octubre de 2022.
- ↑ "Nota de diseño". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (1). Diciembre de 1975.
- ↑ "6800 Tiny BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (3). Marzo de 1976.
- ↑ "Manual de usuario de TINY BASIC+" .
- ↑ Wang, Li-Chen (mayo de 1976). "Palo Alto Tiny BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (5): 12– 25.
- 1 2 "NIBL". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (10). Noviembre de 1976.
- ↑ "Basic 6800 Tiny mejorado y modificado". Revista de Calistenia y Ortodoncia Informática del Dr. Dobb, Running Light Without Overbyte . Octubre de 1980.
- ↑ "TBI68K". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . Febrero de 1985.
- ↑ "El regreso de Tiny BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . Enero de 2006.
- ↑ "Texas Tiny BASIC (TBX) se une al sistema operativo de casete de TV (TVCOS)". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (5): 28– 31. Mayo de 1976.
- 1 2 Arnold, Mark; Wadsworth, Nat (febrero de 1976). "SCELBAL: un lenguaje de alto nivel para sistemas 8008/8080" . Dr. Dobb's Journal . págs. 30–53 .
- ↑ Wang, Li-Chen (mayo de 1976). "Palo Alto Tiny BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte . 1 (5): 12– 25.(Nota: El código fuente comienza con las siguientes seis líneas: "TINY BASIC FOR INTEL 8080; VERSION 1.0; BY LI-CHEN WANG; 10 JUNE, 1976; @COPYLEFT; ALL WRONGS RESERVED". La fecha de junio en el número de mayo es correcta. La revista llevaba retraso, por lo que se combinaron los números de junio y julio para ponerse al día).
- ↑ McCabe, Dwight [editor] (1 de julio de 1977). PCC's Reference Book of Personal and Home Computing (1.ª ed.). Menlo Park, CA: People's Computer Company. pág. 248. ISBN 0-918790-02-6.
{{cite book}}:|first1=tiene nombre genérico ( ayuda ) - ↑ "People's Computer Company" (PDF) . Archivado (PDF) del original el 9 de octubre de 2022. Consultado el 25 de diciembre de 2019 .
- ↑ Turnbull, Pete. "Startrek.asc" . Archivado del original el 24 de febrero de 2021. Recuperado el 25 de diciembre de 2019 .
- ↑ "Manual de instrucciones básicas de control 3K" (PDF) . Cromemco. Archivado del original (PDF) el 22/12/2013 . Consultado el 18/02/2013 .
- ↑ Ainsworth, Dick (1982). Astro BASIC . Astrocade, Inc. pág. 3.
- ↑ «BÁSICO de Robert Uiterwyk» .
- ↑ «Micro Básico de Robert Uiterwyk» .
- ↑ "Parte 1 del intérprete BASIC LLL 8080" (PDF) . Archivado (PDF) del original el 09/10/2022.
- ↑ "4 Sistemas de lenguaje Altair" . Altair BASIC .
- ↑ Altair BASIC (PDF) . MITS. 25 de agosto de 1975. Archivado (PDF) del original el 9 de octubre de 2022.
- ↑ Wozniak, Steven (1 de mayo de 2014). "Cómo Steve Wozniak escribió BASIC para el Apple original desde cero" . Gizmodo .
- ↑ Welsh, David; Welsh, Theresa (2007). Priming the Pump: How TRS-80 Enthusiasts Helped Spark the PC Revolution . p. 7.
- ↑ "ZX80 – ACTUALIZACIÓN DE ROM BASIC 8K" .
- ↑ Ness, Stephen. "XYBASIC" . Ness Software . Consultado el 4 de agosto de 2020 .
- ↑ "TinyBasicPlus" . GitHub .
- ↑ "¡Ya está aquí! Half-Byte Tiny Basic 2 para Arduino y compatibles" . 27 de noviembre de 2014.
- ↑ "Ejecutando Tiny Basic en el Micro: Bit" . 28 de marzo de 2020.
- ↑ Chailloux, Emmanuel; Manoury, Pascal; Pagano, Bruno (2002). Desarrollo de aplicaciones con Objective Caml . Francia: O'Reilly. ISBN 2841771210.
- ↑ "aleozlx/tinybasic" . GitHub . Consultado el 20 de septiembre de 2020 .
- ↑ "PaloAltoTinyBasic" . Consultado el 20 de septiembre de 2020 .
- ↑ Williams, Al (31 de julio de 2019). "bootBASIC se adapta a tu lenguaje favorito en el sector de arranque" . Hack A Day . Recuperado el 26 de marzo de 2022 .
- ↑ Gutiérrez, Oscar Toledo. "bootBASIC es un lenguaje BASIC en 512 bytes de código máquina x86" . Github . Consultado el 26 de marzo de 2022 .
- ↑ Gutiérrez, Oscar Toledo (27 de julio de 2019). Programación de juegos del sector de arranque . Lulu. pág. 155. ISBN 978-0-359-76262-0.
- ↑ Henderson, Gordon (2023). "Un pequeño básico para el 6502" . Drogon Projects .
- ↑ "BÁSICO" (PDF) . Archivado (PDF) del original el 09/10/2022.
- ↑ "GUÍA DEL USUARIO DEL SISTEMA DE TIEMPO COMPARTIDO TSS/8" . Febrero de 1970.
- ↑ "UN INTÉRPRETE DE LENGUAJE BÁSICO PARA EL MICROPROCESADOR INTEL 8008" . 1974.
- ↑ "MANUAL DE REFERENCIA BÁSICA DE MITS ALTAIR" (PDF) . Archivado (PDF) del original el 09/10/2022.
- ↑ "Dr. Dobb's Journal of Computer Calisthenics and Orthodontia: Running Light Without Overbyte" (PDF) . Archivado (PDF) del original el 9 de octubre de 2022.
- ↑ "Dr. Dobb's Journal of Computer Calisthenics and Orthodontia: Running Light Without Overbyte" (PDF) . Archivado (PDF) del original el 9 de octubre de 2022.
- 1 2 "Dr. Dobb's Journal of Computer Calisthenics and Orthodontia: Running Light Without Overbyte" (PDF) . Archivado (PDF) del original el 09/10/2022.
- ↑ "Dr. Dobb's Journal of Computer Calisthenics and Orthodontia: Running Light Without Overbyte" .
- ↑ "Edad de la interfaz" .
- ↑ "Dr. Dobb's Journal of Computer Calisthenics and Orthodontia: Running Light Without Overbyte" (PDF) . Archivado (PDF) del original el 9 de octubre de 2022.
- ↑ "Ayuda para TRS-80 Nivel I BASIC" .
- ↑ "MICRO BASIC de Robert Uiterwyk" . Archivado del original el 5 de febrero de 2012. Consultado el 15 de enero de 2012 .
- ↑ "SCELBAL – Un lenguaje de alto nivel para sistemas 8008/8080" (PDF) . Archivado (PDF) del original el 9 de octubre de 2022.
- ↑ "MANUAL DE USUARIO PRELIMINAR DE APPLE BASIC" . Octubre de 1976.
- ↑ "Interface Age" (PDF) . Archivado (PDF) del original el 09/10/2022.
- ↑ ""Manual de instrucciones del ZX80"" (PDF) .
Bibliografía
- "Hoja de código TB" . Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (1). Diciembre de 1975.
- Manes, Stephen ; Andrews, Paul (1994). Gates: Cómo el magnate de Microsoft reinventó una industria y se convirtió en el hombre más rico de Estados Unidos . Nueva York: Touchstone, Simon and Schuster. ISBN 0-671-88074-8.
Enlaces externos
- Manual de usuario básico y kit para experimentadores – por Tom Pittman
- BASIC de Robert Uiterwyk archivado el 7 de enero de 2011 en Wayback Machine y Micro Basic de Robert Uiterwyk archivado el 5 de febrero de 2012 en Wayback Machine : un pequeño BASIC MC6800 que posteriormente se vendió con el ordenador SWTPC 6800.
- MINOL – MINOL de Erik Mueller – Un BASIC pequeño con cadenas de caracteres para Intel 8080
- Tiny BASIC : una versión para la biblioteca de manejo de pantalla de caracteres curses.
- tinyBasic – Una implementación escrita en iziBasic
- Tiny BASIC : una versión web en vivo, adaptada a Run BASIC desde iziBasic.
- Palo Alto BASIC en menos de 500 líneas : ejemplo de intérprete BASIC escrito en Ruby.
- TinyBasic : una adaptación del intérprete de C TinyBasic de Tom Pittman a Java , C# y Adobe Flex . Incluye versiones web en vivo.
- TinyBASIC Windows – Una versión de TinyBASIC para Windows
- Categoría: Tareas de Tiny BASIC implementadas en Tiny BASIC en rosettacode.org
- Categoría: Tareas implementadas en Palo Alto Tiny BASIC en rosettacode.org
- Software para microcomputadoras
- Intérpretes BÁSICOS
- Copyleft
- Familia de lenguajes de programación BASIC
- Lenguajes de programación creados en 1975