# Applesoft BASIC

El Applesoft BASIC era un dialecto del lenguaje de programación BASIC suministrado de serie como intérprete BASIC con los microcomputadores Apple II. Reemplazó al Integer BASIC y era el BASIC en ROM en todas las computadoras de la serie de Apple II después del modelo original. También fue referido como FP (por punto flotante) debido al comando usado para invocarlo, a diferencia de comando INT para el Integer BASIC. El Applesoft BASIC fue suministrado por Microsoft y su nombre se deriva de los nombres de Apple y Microsoft. Los empleados de Apple, incluyendo Randy Wigginton, adaptaron el intérprete de Microsoft para el Apple II y agregaron varias características. La primera versión de Applesoft fue lanzada en 1977 solamente en cinta de casete y carecía de soporte apropiado para los gráficos de alta resolución. El Applesoft II, que estaba disponible en casete, disco y en la ROM del Apple II Plus y modelos subsecuentes, fue lanzado en 1978. Es esta última versión, que tiene algunas diferencias de sintaxis con respecto a la primera así como soporte para los modos gráficos de alta resolución del Apple II, la que la mayoría de la gente entiende por el término «Applesoft».

## Antecedentes

Los clientes de Apple exigían una versión de BASIC que soportara cálculos de coma flotante. Como Steve Wozniak, el creador del Integer BASIC y la única persona que lo entendían suficientemente bien para agregar las características de coma flotante, estaba ocupado con la unidad de disco Disk II y con el Apple DOS, Apple buscó a Microsoft, que era el vendedor de BASIC preferido después de su éxito con el Altair BASIC, y licenció una versión de 10 KB de BASIC escrita en lenguaje ensamblador denominada «Applesoft». Se informa que Apple obtuvo de Microsoft una licencia de ocho años para el Applesoft BASIC por un apgo único de US$21 000 ($87 246 en 2024), renovándolo en 1985 con un arreglo que dio a Microsoft los derechos y el código fuente para la versión de BASIC del Macintosh de Apple.
Applesoft era similar, y de hecho tenía una base de código común, con las implementaciones en otros computadores basados en el 6502, tales como el Commodore BASIC: usó números de línea, y los espacios no eran necesarios en las líneas. Mientras que Applesoft era más lento que el Integer BASIC, tenía muchas características que carecía éste:
* Strings atómicos: Un string ya no es más un arreglo de caracteres (como en el Integer BASIC y el C); en lugar de ello, es un objeto de recolección de basura (como en Scheme y Java). Esto permite arreglos de string; DIM A$(10) resulta en un arreglo de once variables de string numeradas de 0 a 10.
* Arreglos multidimensionales
* variables de coma flotante de simple precisión con 8 bits de exponente y una parte significativa de 31 bits y capacidades de matemáticas mejoradas, incluyendo funciones trigonométricas y logarítmicas
* Comandos para gráficos de alta resolución
* Funciones CHR$, STR$, y VAL para convertir entre los tipos de strings y numéricos (ambos lenguajes tenían la función ASC)
* Funciones definidas por el usuario: funciones simples de una sola línea escritas en BASIC, con un solo parámetro
* Recuperación de errores, permitiendo a los programas BASIC manejar errores inesperados por medio de una subrutina escrita en BASIC
Inversamente, el Applesoft carecía del operador MOD (residuo de la división) que había estado presente en el Integer BASIC.
Considerando que Wozniak se refería originalmente a su Integer BASIC como "Game BASIC" (BASIC de juego), habiéndolo escrito así para poder escribir un clon del Breakout para su nueva computadora, pocos juegos de acción fueron escritos en el Applesoft BASIC por varias razones:
* En esa era de contar cuidadosamente ciclos de reloj y de memoria limitados, era ineficiente escribir programas dependientes de la velocidad que corrieran en un intérprete de tiempo de ejecución.
* El uso de los números reales (coma flotante) para todas las operaciones de matemáticas creó sobrecargas innecesarias y degradó el desempeño. El Applesoft convertía números enteros a reales antes de realizar operaciones con ellos, convirtiendo el resultado de nuevo a un número entero solamente si debía ser asignado a una variable de número entero (de 16 bits con signo).
* Las shape tables eran una alternativa lenta a los bitmaps. No había provisión para mezclar texto y gráficos, a excepción de una limitada «pantalla dividida por hardware» del Apple II (cuatro líneas de texto en la parte inferior de la pantalla). Así, muchos programas gráficos contuvieron sus propias rutinas generador de caracteres por bitmap. No se agregó ninguna provisión en los intérpretes BASIC de los modelos Apple IIe de 128 KB y Apple IIc para los gráficos de doble resolución y memoria extendida de las nuevas máquinas, o para el modo de 16 colores del Apple IIGS. (Beagle Bros ofreció soluciones alternativas en lenguaje de máquina para estos problemas).
* El programa era almacenado como una lista enlazada de líneas; un GOTO o un GOSUB tomaba tiempo lineal O(n), y aunque los programas de Applesoft no eran muy largos comparados al software de hoy, en un 6502 de 1 MHz esto podía ser un embotellamiento significativo. Los programas grandes a menudo fueron escritos con las subrutinas más usadas en el tope del programa para reducir el tiempo de procesamiento para las llamadas de GOSUB.
* No había ningún soporte para sonido aparte de un comando PEEK que podía ser usado para chascar (clic) el altavoz, aunque se podía también usar PRINT de un carácter de campana del ASCII para producir la señal sonora de alarma del sistema (pitido). De todos modos el lenguaje no era suficientemente rápido para producir más que un zumbido de barítono por medio de clicks repetidos. Sin embargo, podía ser ejecutada música a través de varias octavas usando llamadas repetidas a un generador de tono en lenguaje de máquina.

## Código de ejemplo

Hola mundo en Applesoft BASIC podía ser entrado como sigue:
Múltiples comandos podían ser incluidos en la misma línea de código si se separaban por dos puntos (:). La ? puede ser usada en el Applesoft BASIC como atajo para "PRINT", aunque deletrear la palabra no es sólo aceptable sino canónico - Applesoft convertía la "?" en los programas entrados al mismo token que "PRINT", así que cualquiera aparecería como "PRINT" cuando un programa era listado. El programa de arriba aparecería en un comando LIST como:
Este artículo incluye texto de Everything2, licenciado bajo GFDL.

## Apple Business BASIC

El Apple Business BASIC despachado con el computador Apple ///. Donn Denman portó el Applesoft BASIC hacia el SOS y lo trabajó para tomar ventaja de la memoria extendida del Apple ///. Siguiendo la tendencia de evitar las direcciones absolutas, los comandos PEEK y POKE fueron sustituidos por sentencias INVOKE y PERFORM que cargaban y ejecutaban separadamente módulos de código ensamblado.