Turbo-BASIC XL es una versión avanzada del lenguaje de programación BASIC para la familia de ordenadores domésticos Atari de 8 bits . Es un superconjunto compatible del Atari BASIC que estaba integrado en la mayoría de las máquinas Atari de la época.
Autor (es) original (es) | Frank Ostrowski |
---|---|
Versión inicial | Diciembre de 1985 |
Escrito en | 6502 montaje |
Plataforma | Familia Atari de 8 bits |
Turbo-Basic XL mejora enormemente la ejecución sobre Atari BASIC. Un programa Atari BASIC cargado en Turbo-BASIC, sin cambios realizados, generalmente se ejecutaría aproximadamente tres veces más rápido. Un compilador Turbo-Basic XL creó ejecutables binarios, acelerando aún más el rendimiento del programa hasta unas diez veces más rápido que Atari BASIC. Turbo-Basic XL también incluye un editor expandido, soporte para procedimientos con nombre WHILE...ENDWHILE
y construcciones de bloques similares, y acceso agregado al hardware subyacente, que, entre otras cosas, permitió el funcionamiento de unidades de disquete conectadas sin salir a DOS .
Turbo-Basic XL fue desarrollado por Frank Ostrowski y publicado en la edición de diciembre de 1985 de la revista informática alemana Happy Computer . Poco después se lanzó una versión para los modelos 400/800, conocida como Frost Basic 1.4 . Otros autores también han publicado varias versiones modificadas que funcionan con diferentes sistemas DOS. Ostrowski pronto consiguió un trabajo con GFA Systemtechnik GmbH (en ese momento conocido como Integral Hydraulik ) donde adaptó Turbo-Basic XL en GFA BASIC para el Atari ST , que se convirtió en uno de los BASIC más populares en esa plataforma.
Fondo
Desde su lanzamiento en 1979, la familia de 8 bits normalmente se envía con una versión de Atari BASIC en un cartucho de ROM , o incorporada en las ROM internas de las máquinas posteriores. Esta versión de BASIC tenía una serie de comandos personalizados que permitían el acceso parcial a las funciones avanzadas del sistema como gráficos y sonido. Fue notoriamente lento, apareciendo en la parte inferior de la lista de BÁSICOS de microcomputadoras en la versión original del benchmark de Computación Creativa de David Ahl . [1]
El bajo rendimiento del Atari BASIC oficial llevó a un mercado de intérpretes BASIC de terceros con mejor rendimiento o más comandos. Entre ellos se encontraba un puerto oficial de Microsoft BASIC vendido por Atari, varias versiones mejoradas lanzadas por Optimized Systems Software , que había escrito el Atari BASIC original bajo contrato, y muchos otros. También hubo varios compiladores Atari BASIC de una variedad de proveedores.
Turbo-Basic XL fue una entrada tardía a esta lista, publicada por primera vez en diciembre de 1985 como programa de escritura . Era único en el sentido de que venía en versiones de compilador y de intérprete. Incluía código para aprovechar la memoria expandida disponible en las máquinas de la serie XL y la serie XE posterior. Esto significaba que no podía ejecutarse en los sistemas 400/800 originales, lo que llevó a Ostrowski a hacer un puerto conocido como Frost BASIC (abreviatura de "Frank Ostrowski") que estaba vinculado a Atari DOS 2.0.
Los comandos internos relacionados con el disco estaban vinculados a versiones particulares de DOS. Se pusieron a disposición varios puertos para diferentes versiones de DOS.
Mejoras de velocidad
La característica más notable de Turbo-Basic fue su velocidad dramáticamente mejorada; un programa Atari BASIC sin modificar cargado en Turbo-Basic normalmente se ejecutaría de tres a cinco veces más rápido, y la ventaja de velocidad mejoró a medida que aumentaba el tamaño del programa. Esto se debió en gran parte a una serie de mejoras en problemas conocidos en el código Atari BASIC original.
En la mayoría de los BASIC, GOTO se maneja leyendo el número de línea asociado y luego buscando en el programa esa línea de código. En los BASIC derivados de MS, los números de línea se almacenaban como enteros de 16 bits y constantes numéricas en el código en su formato ASCII original. Cuando se encontraba una línea como GOTO 1000
, el intérprete usaba un código especial para convertir el "1000" en formato de 16 bits y luego lo buscaba. Atari BASIC funcionó de manera diferente, convirtiendo todas las constantes numéricas a un formato de punto flotante de 6 bytes cuando se ingresó la línea. Esto significaba que el "1000" ya no estaba en formato ASCII y tenía que convertirse de punto flotante a formato entero. El código para hacerlo no estaba bien optimizado y podría tardar hasta 3500 ms.
Los bucles FOR ... NEXT son otra construcción común en los programas BASIC. En la mayoría de los BASIC, cuando se encontraba la parte FOR en tiempo de ejecución, su ubicación de memoria en el código fuente se insertaba en una pila de llamadas para que pudiera regresar fácilmente a esa ubicación cuando se encontraba el NEXT asociado. Por razones desconocidas, Atari BASIC empujó el número de línea del FOR a la pila y luego buscó en todo el código esa línea cuando encontró el SIGUIENTE. Para los programas que hicieron un bucle significativo, que suele ser el caso en BASIC, esto podría causar un impacto dramático en el rendimiento.
Turbo-Basic implementó sus bucles FOR usando la dirección, como era el caso en MS BASIC, y por lo tanto ejecutó bucles con aproximadamente el mismo rendimiento que MS. Luego fue más allá y también mejoró enormemente el rendimiento de GOTO. Los números de línea se enviaron a una función hash que los dividió en trozos de 256 líneas. Cuando se ingresó el programa, la dirección del primero de cada uno de estos fragmentos se almacenó en una tabla de 128 valores. En tiempo de ejecución, cuando se necesitaba una búsqueda de número de línea, primero elegiría el valor más cercano pero más bajo en la tabla, recuperaría la dirección y luego comenzaría a buscar la línea a partir de ese punto. La mejora fue más notable en programas más grandes donde el tiempo de escaneo era cada vez más caro, por lo que Turbo-Basic podría aumentar 5 veces en programas más grandes.
La otra fuente importante de rendimiento deficiente en Atari BASIC fue su código de coma flotante decimal codificado en binario (BCD) muy lento . La biblioteca, contenida en una ROM de 2K separada y considerada parte del sistema operativo en contraposición al BASIC en sí, se había escrito apresuradamente y nunca se optimizó. Algunas de las rutinas, en particular las funciones de multiplicar y exponentes, eran mucho más lentas de lo que podrían ser.
Turbo-Basic solucionó esto al incluir su propia biblioteca de punto flotante completa, que no solo solucionó muchos de estos problemas, sino que también optimizó aún más el código al desenrollar pequeños bucles. Para los programas que usaban las matemáticas de manera extensiva, la nueva biblioteca resultó en mejoras dramáticas en el rendimiento, enviando a Atari desde casi la parte inferior de las listas de referencia de Ahl hasta casi la parte superior, superando a varias máquinas que eran mucho más rápidas en hardware.
Nuevas características
Entre las características adicionales de Turbo-Basic XL, agregadas a Atari BASIC, se encuentran las siguientes:
- comandos de sonido y gráficos mejorados
- comandos de E / S más flexibles , incluido el acceso al disco
- construcciones de programación estructurada
- instalaciones de depuración simples
Referencias
- ^ Ahl, David (noviembre de 1983). "Prueba de comparación de referencia" . Computación creativa . pag. 260.
- Fetzer, Ron (1985). Documentación ampliada de Turbo-BASIC XL (PDF) .
enlaces externos
- Atari de 8 bits Páginas - explora de la Turbo-BASIC XL listado y Turbo-BASIC XL compilador lista de feliz Computer Magazine. También enumera los nuevos comandos agregados al idioma.
- Turbo-Basic XL : información sobre Turbo-Basic XL, incluido el código fuente en atariwiki.org .