Las variantes Atari Microsoft BASIC y Atari Microsoft BASIC II de la versión 6502 de Microsoft BASIC fueron trasladadas a los ordenadores Atari de 8 bits . La primera versión, lanzada en 1981, requería 32 KB de RAM y se suministraba en disquete . La segunda versión, lanzada al año siguiente, tenía la mayor parte del código en un cartucho ROM con funciones adicionales en un disquete opcional.
El Atari Microsoft BASIC era altamente compatible con los BASIC contemporáneos como Applesoft BASIC y Commodore BASIC , en contraste con su propio Atari BASIC, que era un dialecto algo diferente e incompatible en muchos sentidos. Al igual que el Atari BASIC, el Atari Microsoft BASIC incluía una serie de nuevos comandos y características para aprovechar la plataforma Atari. Estos eran solo parcialmente compatibles con las características similares del Atari BASIC.
Cuando Microsoft trasladó su BASIC basado originalmente en Intel 8080 al 6502, se tomó el tiempo de ampliar el formato de punto flotante del formato original de 32 bits a un formato opcional de 40 bits para mejorar la precisión. Ambas versiones se podían compilar a partir del mismo código proporcionando indicadores de compilación; si se utilizaba el formato de 32 bits, el código resultante tenía una longitud de poco menos de 8 KB; si se utilizaba el formato de 40 bits, estaba más cerca de los 9 KB.
Los ordenadores domésticos Atari de 8 bits se diseñaron con una ranura para un cartucho de ROM de 8 KB . Los programadores de Atari se esforzaron por encajar el BASIC de Microsoft en un único cartucho y, al mismo tiempo, añadir funciones para aprovechar la plataforma. En el verano de 1978, Atari decidió externalizar el trabajo de adaptación para que el BASIC estuviera listo a tiempo para el lanzamiento del sistema en 1979, y esto les llevó a Shepardson Microsystems Inc. (SMI). SMI decidió rápidamente que el trabajo era imposible y, en su lugar, propuso crear una versión completamente nueva del BASIC. Esta se convirtió en Atari BASIC y se lanzó con el Atari 400 y el 800 en 1979. [1]
Atari continuó trabajando con el código MS y lanzó una versión del mismo en disquete en 1981. Además de la gama ampliada de comandos estándar de MS en comparación con Atari BASIC, la nueva versión agregó una serie de comandos adicionales para gráficos y sonido y otras características de la plataforma. También incluía variables enteras y un paquete completo de matemáticas enteras [a] que ofrecía un rendimiento mejorado. Sin embargo, como requería al menos 32 KB de RAM y solo se ejecutaba desde un disco, nunca fue particularmente popular.
Una segunda versión, Atari Microsoft BASIC II, trasladó la mayor parte del código a un cartucho ampliado de 16 KB y colocó 11 KB adicionales de código de uso menos frecuente en el disco, lo que significa que muchos programas destinados a ser utilizados en varias plataformas ahora podían ejecutarse únicamente desde el cartucho. BASIC II, lanzado en 1982, también tuvo poco uso en el mundo real.
El intérprete subyacente se basaba en el mismo código MOS 6502 de 9 KB que también formaba la base de Commodore BASIC y AppleSoft BASIC , y era en gran medida compatible con ellos. Un aspecto clave de esto era el sistema de manejo de cadenas, que se basaba en el mismo código que esas plataformas. Por el contrario, Atari BASIC utilizaba un sistema completamente diferente que trataba las cadenas como matrices de caracteres y no era compatible con la mayoría de los demás sistemas ni se podía trasladar fácilmente de ellos.
Mantuvo la biblioteca aritmética de punto flotante en formato de 40 bits original que reemplazó a la notoriamente lenta en las ROM del sistema operativo del sistema, y por lo tanto ejecutó código matemático a la misma velocidad que otras plataformas, y mucho más rápido que Atari BASIC. También incluyó un paquete matemático de números enteros adicional para un mejor rendimiento. El sistema matemático de números enteros se activaba cuando la asignación era a una variable entera, o los valores literales eran todos números enteros. Si alguna de las dos cosas no era cierta, los valores enteros se convertían a punto flotante, se usaba el código de punto flotante para el cálculo y luego se convertían nuevamente a números enteros para su almacenamiento.
Otra notable mejora relacionada con el rendimiento estaba relacionada con FOR...NEXT
los bucles. Atari BASIC los realizaba colocando el número de línea del FOR
en la pila de ejecución, de modo que cuando NEXT
se encontraba el asociado podía encontrar a qué línea volver en bucle. Por el contrario, MS BASIC siempre había colocado la ubicación de memoria de esa línea en la pila, lo que le permitía volver a saltar al FOR
sin tener que buscar en todo el programa la línea correspondiente. Esta rareza en Atari BASIC es una de las principales razones de su lento rendimiento y, como esto no era así en Atari Microsoft BASIC, generalmente se ejecutaba mucho más rápido que Atari BASIC.
A diferencia del Atari BASIC, que analizaba y tokenizaba líneas enteras cuando se escribían, el MS BASIC solo tokenizaba parcialmente el código fuente . Cuando se ingresaba una línea, el número de línea se convertía de ASCII a un entero de 16 bits, la primera declaración del programa se tokenizaba a un valor de un solo byte y luego el resto de la línea se dejaba como formato de texto. El último carácter tenía su bit más alto establecido para indicar el final de la línea. Dependiendo del caso de uso, la tokenización completa de la línea del Atari BASIC podría resultar en que se usara menos memoria para almacenar el programa. Esta diferencia también significaba que muchos errores de sintaxis solo se notarían en tiempo de ejecución en el código MS, a diferencia de la versión de Atari donde se verificaba la línea completa en el momento de la edición. En teoría, la compilación en tiempo de edición debería haber hecho que el Atari BASIC fuera mucho más rápido que el MS, que vuelve a tokenizar la línea cada vez que se encuentra, pero esta ventaja se perdió por los otros problemas de rendimiento mencionados anteriormente.
MS BASIC no incluía un sistema para introducir formas cortas de palabras clave, a diferencia de Atari BASIC, que permitía abreviarlas con un punto durante la entrada. Cuando se LIST
editaba el programa, las palabras clave se expandían. La versión de Commodore, que añadió la función de completar con el carácter de control, tenía el mismo fin.
Atari Microsoft BASIC agregó una serie de nuevas características para aprovechar la plataforma. Una adición interesante es AFTER (600) GOTO 100
que esperaba la cantidad especificada de "jiffies", 1/60 de segundo, y luego ejecutaba el FOR
. También incluía el WAIT
que, en cambio, se detenía mientras esperaba que cambiara una dirección de memoria antes de continuar con la siguiente línea. WAIT
había sido parte de las primeras versiones de MS BASIC pero no se usaba ampliamente.
Atari Microsoft BASIC incluía la mayoría de los comandos de sonido y gráficos de Atari BASIC. Curiosamente, el original DRAWTO
se fusionó para PLOT
utilizar el PLOT...TO...
formato opcional. Esto significa que el código gráfico de Atari BASIC no era compatible. Atari Microsoft BASIC agregó una serie de comandos adicionales para manejar gráficos de jugadores/misiles y conjuntos de caracteres definidos por el usuario que no estaban disponibles en Atari BASIC.
Atari Microsoft BASIC venía en dos paquetes:
Aunque tenía más funciones que Atari BASIC, Microsoft BASIC nunca tuvo la popularidad que tuvo Atari BASIC. Los mayores problemas eran:
La versión de cartucho eliminó los dos primeros requisitos, pero se necesitaba una unidad de disco para todas sus funciones.