Articulo de referencia

TI BASIC (TI 99/4A)

TI BASIC es un intérprete compatible con ANSI para el lenguaje de programación BASIC integrado en el ordenador doméstico Texas Instruments TI-99/4 de 1979 y en su versión mejora...

TI BASIC es un intérprete compatible con ANSI para el lenguaje de programación BASIC integrado en el ordenador doméstico Texas Instruments TI-99/4 de 1979 y en su versión mejorada de 1981, la TI-99/4A .

A diferencia de la mayoría de los lenguajes BASIC presentes en los microordenadores actuales , TI BASIC no tiene su origen en Microsoft BASIC , sino que fue desarrollado internamente siguiendo el estándar 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 variantes de Microsoft más comunes.

Minimal BASIC carece de varias características comunes en las versiones actuales de BASIC, por lo que Texas Instruments lanzó posteriormente el cartucho TI Extended BASIC, que mejoró la funcionalidad disponible para los usuarios de BASIC. Este cartucho incluía una amplia variedad de características presentes en otras versiones de 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 se utilizaba no solo para programar, 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 la grabación en cinta o cualquier otro sistema de archivos. Debido a las características específicas de la plataforma TI-99, TI BASIC destacaba por su rendimiento extremadamente lento, aproximadamente la mitad que el de las máquinas comunes, pero, a cambio, ofrecía una gran precisión numérica.

Actuación

La TI-99 se basaba en el microprocesador TMS9900 , un diseño de 16 bits originalmente creado 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 , incluyendo el amplio catálogo de dichos chips de TI. En una minicomputadora, los sistemas de soporte de 16 bits se construían a partir de 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 mayoritariamente 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 significaba 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 representaba un costo significativo. Para solucionar 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 subyacentes del TMS9900. [ 2 ] El propio código GPL 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 lento de lo que teóricamente era capaz. Esto era particularmente notorio en BASIC. Cada instrucción del programa del usuario debía leerse de la memoria de 8 bits, interpretarse usando código escrito en GPL y luego enviarse de nuevo a través del bus de 8 bits. Como resultado, TI BASIC tenía un rendimiento deficiente; en las pruebas de rendimiento comunes de la época, la TI-99 generalmente funcionaba a la mitad de velocidad que las máquinas de 8 bits como la Commodore PET o la Apple II . [ 4 ] Por ejemplo, ejecutar el Byte Sieve en BASIC tardó 3960 segundos en TI BASIC, mientras que la misma prueba en Applesoft BASIC en la Apple II, aparentemente una máquina mucho más lenta, tardó 2806 segundos, aproximadamente un 30 % más rápido que la TI. [ 5 ]

Elementos de TI BASIC

Edición y ejecución

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ínea , que permitía al usuario añadir o editar una línea a la vez. Se utilizaban números de línea explícitos para ordenar cada instrucción. Utilizaba un >indicador para señalar la nueva línea actual en modo inmediato , a diferencia del más común READY. [ 6 ] Los números de línea iban del 1 al 32767, ambos inclusive, y al introducir una línea fuera de ese rango se producía el error "NÚMERO DE LÍNEA INCORRECTO". [ 7 ] La entrada de líneas se facilitaba mediante el NUMBERcomando , disponible solo en modo inmediato, que introducía números de línea ascendentes, [ 8 ] y RESEQUENCE, que renumeraba un programa existente. [ 9 ]

TI BASIC también incluía varios comandos de depuración . BREAKfuncionaba de forma similar a STOP, deteniendo la ejecución en ciertas líneas. A diferencia de STOP, la salida al modo inmediato no ocurría en la línea donde BREAKaparecía, sino en las líneas BREAKa las que se hacía referencia. Por ejemplo, BREAK 130haría que el programa saliera al modo inmediato cada vez que se moviera a la línea 130. Esto podría usarse, por ejemplo, insertando un único BREAKal principio del programa para controlar la ejecución, en lugar de tener que insertar un STOPen medio del código. UNBREAKdesactivaba los puntos de interrupción existentes. [ 10 ] Además, TRACEimprimía el número de línea de la línea que se estaba ejecutando actualmente entre corchetes angulares: <100><110>etc., y UNTRACElo desactivaba. [ 11 ]

Declaraciones

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 de "semilla" dado y establece la primera entrada en los arreglos en 0 o 1, mientras que MS siempre se basa en cero. A este conjunto estándar se le agregaron , , 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, STOPRANDOMIZEOPTION BASECALLCLOSEDISPLAYOPEN

De acuerdo con el estándar Minimal BASIC, [ 13 ]IF las instrucciones solo podían realizar bifurcaciones, 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 IMPRIMA "ES GRANDE"

Esto no es válido en TI BASIC. En su lugar, esto tendría que realizarse utilizando varias líneas:

100 SI X <= 5 ENTONCES 300 200 IMPRIMIR "ES GRANDE"

Esto puede fácilmente provocar errores de desfase de uno si la conversión no tiene cuidado al cambiar el sentido de la comparación booleana. Sin embargo, TI BASIC admitía la ELSEcláusula: [ 14 ]

100 SI X > 5 ENTONCES 200 SINO 300

La PRINTinstrucción utilizaba dos puntos para separar elementos en distintas 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 TI BASIC no tenía. [ 15 ] Esto significa que una línea solo puede contener una instrucción. Debido a la forma en que funcionan los intérpretes de BASIC, GOTOlos bucles basados ​​en se pueden acelerar significativamente combinando el código en una sola línea, lo que reduce el número de líneas del programa y el tiempo necesario para encontrar un número de línea específico. Esta característica faltante, aparentemente menor, puede resultar en un código mucho más lento, y su incorporación formó parte de TI Extended BASIC.

Las extensiones del sistema Minimal BASIC a menudo no se representaban directamente en BASIC, sino que se accedía a ellas mediante el CALLcomando y una serie de subrutinas con nombre basadas en GPL. Por ejemplo, CALL CLEARborra la pantalla y CALL KEYdevuelve el código de la tecla que se está pulsando actualmente en el teclado. El lenguaje carecía de PEEKyPOKE por lo tanto no había una forma oficial [ 16 ] de crear nuevo código CALLable dentro de BASIC, para hacerlo se requería el TI Editor/Assembler, el cartucho TI Mini Memory que incluía un pequeño ensamblador , [ 17 ] o mediante el uso de Extended BASIC.

Funciones

A diferencia de Microsoft BASIC, que utilizaba , , , y para manipular cadenas, TI BASIC utilizaba y compatibles con ANSI .LEFT$MID$RIGHT$INSTR SEG$POS

ABS
Valor absoluto
ASC
Valor numérico ASCII del primer carácter de una cadena.
ATN
Arcotangente
CHR$
Convierte un número en una cadena con un carácter ASCII.
COS
Coseno
EOF
Comprueba si se ha llegado al final de un archivo.
EXP
Exponenciación
INT
mayor entero menor o igual que el parámetro
LEN
Longitud de una cuerda
REGISTRO
logaritmo natural
TPV
Primera aparición de una cadena en otra cadena.
RND
Generador de números pseudoaleatorios
SEG$
Devuelve una subcadena de una cadena.
SGN
función signo
PECADO
Seno
Cuadrado
Raíz cuadrada
STR$
Convierte un número en una cadena de caracteres.
BRONCEARSE
Tangente
VAL
Convertir una cadena de texto en un número.

Subprogramas

Los subprogramas se llaman con CALLuna instrucción (por ejemplo CALL CLEAR).

  • CHARDefinición de caracteres gráficos
  • CLEARBorra la pantalla
  • COLORDefine el color de primer plano y de fondo para 8 caracteres.
  • GCHARLee un carácter en una posición específica de la pantalla.
  • HCHAREscribe un carácter en una posición de la pantalla y lo repite horizontalmente.
  • JOYSTDevuelve la posición del joystick.
  • KEYLee desde el teclado sin mostrar eco en la pantalla.
  • SCREENCambia el color de la pantalla
  • SOUNDCrea sonidos (usando una frecuencia ) y ruido.
  • VCHAREscribe un carácter en una posición de la pantalla y lo repite verticalmente.

BÁSICO extendido

Cartucho TI Extended BASIC.

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 varias maneras. [ 18 ] Conocido como Extended BASIC, fue una adición muy esperada a la plataforma. [ 19 ]

Entre los cambios se incluyó la posibilidad de tener varias instrucciones en una línea. El uso de múltiples instrucciones puede mejorar el rendimiento; los bucles implementados en una sola línea se ejecutan mucho más rápido. Además, las instrucciones ahora podían abarcar varias líneas. Dado que el dialecto subyacente ya utilizaba los dos puntos como separadores de cadena, Extended BASIC utilizó los dos puntos dobles para este propósito. Curiosamente, como también era posible una instrucción con dos puntos en TI BASIC, por ejemplo, , que mostraba "A", una línea en blanco y luego "B", estas instrucciones requerían que se añadiera un espacio en Extended BASIC, . [ 18 ]PRINT"A"::"B"PRINT"A"::"B"

Otra adición tardía fue que las sentencias IF ahora podían realizar sentencias arbitrarias, en lugar de solo un GOTO . En Extended BASIC se podía escribir una sentencia simple como . Esto también funcionaba en la cláusula ELSE , permitiendo sentencias como . [ 18 ]IFX>10THENX=X-1IFA=4ANDB=6THENR=10ELSEPRINT"OOPS"

Otras adiciones incluyen una pequeña selección de nuevas instrucciones, entre ellas ACCEPT, IMAGE, LINPUT, ON BREAK, ON ERROR, ON WARNING, SUB, SUBENDy SUBEXIT. Las últimas tres instrucciones se utilizan para la programación estructurada , lo que permite la creación de subrutinas con nombre . El BASIC extendido también incluyó varias funciones nuevas y, especialmente, rutinas CALLable. Entre estas últimas se encontraba una biblioteca de comandos de sprites, incluyendo algunos que creaban movimiento que continuaba automáticamente. [ 18 ]

Síntesis de voz

Cuando estaban equipados con el sintetizador de voz de TI, los usuarios de TI Extended BASIC también podían generar voz a partir de un vocabulario predefinido con la misma facilidad que escribir texto en la pantalla. Por ejemplo, la siguiente línea de texto haría que el sintetizador de voz identificara la computadora: [ 18 ]

LLAMAR Y DECIR ("HOLA, SOY UN #TEXAS INSTRUMENTS# TI NOVENTA Y NUEVE CUATRO, UNA COMPUTADORA DOMÉSTICA")

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 (338 palabras y frases), este la deletreará lentamente. El cartucho Terminal Emulator II de TI proporcionaba la funcionalidad de conversión de texto a voz . [ 18 ]

Referencias

Citas

  1. "Arquitectura interna de la TI-99/4A" . 16 de agosto de 2000.
  2. Nouspikel, Thierry. "GPL: Graphic Programming Language" . Consultado el 2 de agosto de 2020 .
  3. "Crecí y aprendí BASIC en una TI-99/4a. Fue una época maravillosa y sencilla..." Hacker News . Consultado el 2 de agosto de 2020 .
  4. Knight, Daniel (10 de enero de 2016). "¿Qué tan rápidas eran las computadoras domésticas de finales de la década de 1970?" . Low End Mac .
  5. Gilbreath, Jim; Gilbreath, Gary (enero de 1983). "Eratóstenes revisitado: una vez más a través del tamiz" . Byte . págs. 283–325 . 
  6. Guía1981 , pág. II-5.
  7. Guía1981 , pág. II-8.
  8. Guía1981 , pág. II-26.
  9. Guía1981 , pág. II-27.
  10. Guía1981 , pág. II-33.
  11. Guía1981 , pág. II-36.
  12. Guía1981 , p. i.
  13. Minimal BASIC (PDF) (Informe técnico). ECMA. Enero de 1978.
  14. Guía1981 , pág. II-51.
  15. Guía1981 , pág. II-65.
  16. ^ Explotación de James Abbatiello
  17. "Mini Memoria" .
  18. 1 2 3 4 5 6 Shaw 1983 .
  19. Kaplan, Gary (junio de 1981). "Revisión extendida de BASIC" . TI 99er .

Bibliografía

  • Shaw, Stephen (1983). "Extended Basic" . Getting Started With the Texas Instruments TI99/4A . Phoenix Publishing. ISBN 978-0-946576-04-3.
  • Guía de referencia del usuario (PDF) . Texas Instruments. 1981.
  • Curso básico de BASIC en ClassicCmp.org
  • Tarjeta de referencia básica de la TI-99/4A en ClassicCmp.org