Paradigma | Procesal |
---|---|
Apareció por primera vez | 1979 ( 1979 ) |
Disciplina de mecanografía | Estático , fuerte |
Plataforma | TI-99/4, TI-99/4A |
Licencia | Propiedad |
TI BASIC es un intérprete compatible con ANSI para el lenguaje de programación BASIC integrado en la computadora doméstica Texas Instruments TI-99/4 de 1979 y su versión mejorada de 1981, la TI-99/4A .
A diferencia de la mayoría de los BASIC que se encuentran en los microordenadores contemporáneos , TI BASIC no tiene su origen en Microsoft BASIC , sino que fue un intérprete desarrollado por TI siguiendo el estándar emergente Minimal BASIC creado por ANSI y ECMA . Este, a su vez, se basaba en el Dartmouth BASIC original de la década de 1960. Existen varias diferencias, a veces sutiles, entre TI BASIC y las variedades más comunes de MS.
El BASIC minimalista carece de una serie de características que se encuentran comúnmente en los BASIC contemporáneos, y Texas Instruments introdujo más tarde el cartucho TI Extended BASIC que mejoró la funcionalidad accesible a los usuarios de BASIC. Esto incluía una amplia variedad de características que se encuentran en otros BASIC, así como nuevas funciones del sistema para el manejo de sprites , sonido y otras características de la plataforma.
Como era habitual en los ordenadores domésticos, TI BASIC no solo se utilizaba para programación, sino también como un sistema operativo ligero . Además de Minimal BASIC, TI añadió comandos para texto, gráficos y operaciones básicas con archivos, como grabar en cinta o en cualquier otro sistema de archivos. Debido a las particularidades de la plataforma TI-99, TI BASIC se caracterizaba por su rendimiento extremadamente lento, aproximadamente la mitad del de las máquinas comunes, pero, a la inversa, presentaba una gran precisión numérica.
La TI-99 se basó en el microprocesador TMS9900 , un diseño de 16 bits que se construyó originalmente para proporcionar una unidad central de procesamiento (CPU) de un solo chip en los modelos de gama baja de su línea de minicomputadoras TI-990 . El TMS9900 también era adecuado para su uso en una microcomputadora, pero en ese momento el resto de los chips de soporte necesarios para construir una computadora completa eran invariablemente de 8 bits , y esto incluía el amplio catálogo de TI de dichos chips. En una minicomputadora, los sistemas de soporte de 16 bits se construían con muchos chips individuales, pero esto no era adecuado para un producto de bajo costo. Por lo tanto, TI adoptó la solución de hacer que la máquina fuera principalmente de 8 bits y conectar los diversos chips de soporte a este bus de 8 bits , con el TMS9900 leyendo el bus dos veces para producir un valor de 16 bits. [1]
La arquitectura del conjunto de instrucciones del TMS9900 se basaba en códigos de operación de 16 bits , lo que significa que los programas generalmente serían el doble de grandes que en una máquina de 8 bits. En la era de la memoria costosa, esto presentaba un costo significativo. Para abordar esto, TI creó una máquina virtual de 8 bits con su propio lenguaje o representación intermedia conocida como "lenguaje de programación gráfica" o GPL, que permitía escribir programas en un formato más compacto. La desventaja de este enfoque es que cada instrucción GPL tenía que convertirse sobre la marcha en una o más instrucciones TMS9900 subyacentes. [2] El código GPL en sí se almacenaba en el lado de 8 bits de la máquina, lo que ralentizaba aún más su rendimiento. [3]
Por todas estas razones, la máquina funcionaba mucho más lentamente de lo que teóricamente era capaz. Esto era particularmente notorio en BASIC. Cada instrucción en el programa del usuario tenía que ser leída desde la memoria de 8 bits, interpretada usando código escrito en GPL y luego enviada de vuelta a través del bus de 8 bits nuevamente. Como resultado, TI BASIC tenía un rendimiento pobre; en los puntos de referencia comunes de la época, la TI-99 generalmente funcionaba la mitad de rápido que las máquinas de 8 bits como Commodore PET o Apple II . [4] Por ejemplo, ejecutar Byte Sieve en BASIC tomó 3960 segundos en TI BASIC, mientras que la misma prueba en Applesoft BASIC en Apple II, aparentemente una máquina mucho más lenta, tomó 2806 segundos, aproximadamente un 30% más rápido que TI. [5]
A diferencia de la mayoría de los BASIC de la época, TI BASIC no proporcionaba un editor de pantalla completa . En su lugar, se proporcionaba un editor de líneas , que permitía al usuario agregar o editar una línea a la vez. Se usaban números de línea explícitos para ordenar cada instrucción. Utilizaba un >
mensaje para indicar la nueva línea actual en modo inmediato , a diferencia del más común READY
. [6] Los números de línea variaban de 1 a 32767, inclusive, y la introducción de una línea fuera de ese rango daba como resultado el error "BAD LINE NUMBER". [7] La entrada de línea era asistida por el NUMBER
comando, disponible solo en modo inmediato, que ingresaba números de línea ascendentes, [8] y RESEQUENCE
, que renumeraba un programa existente. [9]
TI BASIC también incluía una serie de comandos de depuraciónBREAK
. funcionaba de forma similar a STOP
, deteniendo la ejecución en ciertas líneas. A diferencia de STOP
, la salida al modo inmediato no se producía en la línea donde BREAK
aparecía , sino en las líneas BREAK
a las que se hacía referencia. Por ejemplo, BREAK 130
haría que el programa saliera al modo inmediato cada vez que se moviera a la línea 130. Esto se podría utilizar, por ejemplo, insertando un solo punto BREAK
en la parte superior del programa para controlar la ejecución, en lugar de tener que insertarlo en medio del código. UNBREAK
desactivaba los puntos de interrupción existentes. [10] Además, TRACE
imprimía el número de línea de la línea que se estaba ejecutando actualmente entre corchetes angulares: <100><110>
etc., y UNTRACE
lo desactivaba. [11]
Las instrucciones compatibles con ANSI de TI BASIC son . La mayoría de ellas funcionan de la misma manera que sus contrapartes MS con dos adiciones: reinicia el generador de números aleatorios en un valor "semilla" dado y establece la primera entrada en matrices en 0 o 1, mientras que MS siempre se basa en cero. A este conjunto estándar se le agregó , , y . [12]DATA, DEF, DIM, END, FOR..TO..STEP..NEXT, GOSUB, GOTO, IF..THEN..ELSE, INPUT, LET, NEXT, ON..GOSUB, ON..GOTO, OPTION BASE, PRINT, RANDOMIZE, READ, REM, RESTORE, RETURN, STOP
RANDOMIZE
OPTION BASE
CALL
CLOSE
DISPLAY
OPEN
De acuerdo con el estándar Minimal BASIC, [13] IF
las instrucciones solo podían realizar ramificaciones, no podían realizar instrucciones arbitrarias como era común en casi todos los demás BASIC de la época. Por ejemplo, código como:
100 SI X > 5 ENTONCES IMPRIME "ES GRANDE"
no es válido en TI BASIC. En su lugar, esto se debería realizar utilizando varias líneas:
100 SI X <= 5 ENTONCES 300 200 IMPRIMIR "ES GRANDE"
Esto puede conducir fácilmente a errores de un dígito si la conversión no tiene cuidado de cambiar el sentido de la comparación booleana. Sin embargo, TI BASIC admitía la ELSE
cláusula: [14]
100 SI X > 5 ENTONCES 200 DE LO CONTRARIO 300
La PRINT
instrucción utilizaba dos puntos para separar elementos en diferentes líneas, además de la coma o el punto y coma más comunes. Esto impedía su uso como separador de instrucciones, un concepto que no tenía TI BASIC. [15] Esto significa que una línea puede tener solo una instrucción. Debido a la forma en que funcionan los intérpretes de BASIC, GOTO
los bucles basados en - se pueden acelerar significativamente combinando código en una sola línea, lo que evita tener que buscar números de línea en el programa. Esta característica aparentemente menor que falta puede dar como resultado un código mucho más lento, y agregar esta característica fue parte de Extended BASIC.
Las extensiones del sistema Minimal BASIC no solían estar representadas directamente en BASIC, sino que se accedía a ellas mediante el CALL
comando y una serie de subrutinas con nombre basadas en la GPL. Por ejemplo, CALL CLEAR
limpia la pantalla y CALL KEY
devuelve el código de la tecla presionada en ese momento en el teclado. El lenguaje carecía de él PEEK
y,POKE
por lo tanto, no había una forma oficial [16] de crear un nuevo código CALLable dentro de BASIC; para ello, se necesitaba el Editor/Ensamblador TI, el cartucho de memoria TI Mini que incluía un pequeño ensamblador [17] o utilizando BASIC extendido.
A diferencia de los BASIC de Microsoft, que utilizaban , , y para manipular cadenas, TI BASIC utilizaba los sistemas operativos compatibles con ANSI y .LEFT$
MID$
RIGHT$
INSTR
SEG$
POS
Los subprogramas se llaman con CALL
una declaración (por ejemplo, CALL CLEAR
).
CHAR
Definición de caracteres gráficosCLEAR
Limpia la pantallaCOLOR
Define el color de primer plano y de fondo para 8 caracteres.GCHAR
Lee un carácter en una posición específica de la pantalla.HCHAR
Escribe un carácter en una posición de la pantalla y lo repite horizontalmente.JOYST
Devuelve la posición del joystick.KEY
Lee desde el teclado sin eco en la pantallaSCREEN
Cambia el color de la pantallaSOUND
Crea sonidos (utilizando una frecuencia ) y ruido.VCHAR
Escribe un carácter en una posición de la pantalla y lo repite verticalmente.TI BASIC se encontraba en las ROM internas del sistema. En 1981, TI lanzó un cartucho ROM enchufable que añadía funciones adicionales al código existente, mejorando el lenguaje de diversas maneras. [18] Conocido como Extended BASIC, fue una incorporación muy esperada a la plataforma. [19]
Entre los cambios se encontraba la incorporación de la capacidad de tener múltiples sentencias en una línea. El uso de múltiples sentencias puede mejorar el rendimiento; los bucles que se implementan en una sola línea se ejecutan mucho más rápido. Además, las sentencias ahora pueden abarcar varias líneas. Como el dialecto subyacente ya utilizaba los dos puntos como separadores de cadenas, Extended BASIC utilizó los dos puntos dobles para este propósito. Resulta confuso que, como una sentencia con dos dos puntos también era posible en TI BASIC, por ejemplo, PRINT "A"::"B"
, que generaría "A", una línea en blanco y luego "B", estas sentencias requerían que se añadiera un espacio en Extended BASIC, PRINT "A": :"B"
. [18]
Otra adición que se esperaba desde hacía tiempo era que IF
las sentencias podían ahora ejecutar sentencias arbitrarias, en lugar de solo una GOTO
. En BASIC extendido se podía escribir una sentencia simple como . Esto también funcionaba en la cláusula, permitiendo sentencias como . [18]IF X>10 THEN X=X-1
ELSE
IF A=4 AND B=6 THEN R=10 ELSE PRINT "OOPS"
Otras adiciones incluyen una pequeña selección de nuevas declaraciones, incluyendo ACCEPT
, IMAGE
, LINPUT
, ON BREAK
, ON ERROR
, ON WARNING
, SUB
, SUBEND
y SUBEXIT
. Las últimas tres declaraciones se utilizan para la programación estructurada , lo que permite la creación de subrutinas con nombre . El BASIC extendido también incluyó una serie de nuevas funciones y, especialmente, rutinas CALLable. Entre estas últimas se encontraba una biblioteca de comandos de sprites, incluidos algunos que creaban movimiento que continuaba automáticamente. [18]
Cuando se cuenta con el sintetizador de voz TI, los usuarios de TI Extended BASIC también pueden generar voz a partir de un vocabulario predefinido con la misma facilidad con la que escriben texto en la pantalla. Por ejemplo, la siguiente línea de texto haría que el sintetizador de voz identifique la computadora: [18]
LLAMAR Y DECIR ("HOLA, SOY UN COMPUTADOR DOMÉSTICO #TEXAS INSTRUMENTS# TI NINETY NINE FOUR")
Las frases de varias palabras se delimitan con el símbolo #, como #TEXAS INSTRUMENTS#
en este ejemplo. Si se utiliza una palabra que no está incluida en el vocabulario integrado del sintetizador de voz de 338 palabras y frases, se escribiría lentamente. El cartucho Terminal Emulator II de TI proporcionaba la función de conversión de texto a voz . [18]