Applesoft BÁSICO

Compartir Imprimir Citar

Applesoft BASIC es un dialecto de Microsoft BASIC, desarrollado por Marc McDonald y Ric Weiland, suministrado con la serie de computadoras Apple II. Reemplaza a Integer BASIC y es el BASIC en ROM en todas las computadoras de la serie Apple II después del modelo Apple II original. También se le conoce como FP BASIC (de punto flotante) debido al comando Apple DOS que se usa para invocarlo, en lugar de INT para Integer BASIC.

Applesoft BASIC fue suministrado por Microsoft y su nombre se deriva de los nombres de Apple Computer y Microsoft. Los empleados de Apple, incluido Randy Wigginton, adaptaron el intérprete de Microsoft para Apple II y agregaron varias características. La primera versión de Applesoft se lanzó en 1977 en cinta de casete y carecía del soporte adecuado para gráficos de alta resolución. Applesoft II, que estuvo disponible en cassette y disco y en la ROM del Apple II Plus y modelos posteriores, se lanzó en 1978. Es esta última versión la que tiene algunas diferencias de sintaxis y soporte para los modos de gráficos de alta resolución de Apple II, que generalmente es sinónimo del término "Applesoft".

Microsoft lanzó un compilador para Applesoft BASIC, TASC (The Applesoft Compiler) en 1981.

Historia

Cuando Steve Wozniak escribió Integer BASIC para Apple II, no implementó la compatibilidad con la aritmética de punto flotante porque estaba principalmente interesado en escribir juegos, una tarea para la que solo los números enteros eran suficientes. En 1976, Microsoft había desarrollado Microsoft BASIC para MOS Technology 6502, pero en ese momento no había ninguna computadora de producción que lo usara. Al enterarse de que Apple tenía una máquina 6502, Microsoft preguntó si la empresa estaba interesada en licenciar BASIC, pero Steve Jobs respondió que Apple ya tenía una.

El Apple II se presentó al público en la Feria de Computación de la Costa Oeste en abril de 1977 y estuvo disponible para la venta en junio. Una de las quejas más comunes de los clientes sobre la computadora fue la falta de matemáticas de punto flotante de BASIC. Lo que hizo las cosas más problemáticas fue que la computadora personal rival Commodore PET tenía un intérprete BASIC con capacidad de punto flotante desde el principio. Como Wozniak, la única persona que entendió Integer BASIC lo suficientemente bien como para agregar funciones de punto flotante, estaba ocupado con la unidad y el controlador Disk II y con Apple DOS, Apple recurrió a Microsoft.

Se informa que Apple obtuvo una licencia de ocho años para Applesoft BASIC de Microsoft por una tarifa fija de $31,000, renovándola en 1985 a través de un acuerdo que otorgó a Microsoft los derechos y el código fuente para la versión de BASIC para Macintosh de Apple. Applesoft fue diseñado para ser compatible con versiones anteriores de Integer BASIC y utiliza el núcleo de la implementación 6502 BASIC de Microsoft, que incluye el uso del comando GET para detectar pulsaciones de teclas y no requiere espacios en las líneas del programa. Si bien Applesoft BASIC es más lento que Integer BASIC, tiene muchas funciones de las que carece el antiguo BASIC:

Por el contrario, Applesoft carece del operador MOD (resto) de Integer BASIC.

Adaptar BASIC para Apple II fue un trabajo tedioso, ya que Apple recibió una lista de fuentes para Microsoft 6502 BASIC que resultó tener errores y también requirió la adición de comandos Integer BASIC. Dado que Apple no tenía un ensamblador 6502 a mano, el equipo de desarrollo se vio obligado a enviar el código fuente por teléfono a Call Computer, un equipo que ofrecía servicios de compilación. Este fue un proceso lento y extremadamente tedioso y después de que Call Computer perdiera el código fuente debido a un mal funcionamiento del equipo, uno de los programadores, Cliff Houston, usó su propia computadora IMSAI 8080 para ensamblar la fuente BASIC.

Características

Applesoft es similar al BASIC 2.0 de Commodore, aparte de las características heredadas de Integer BASIC. Hay algunas diferencias menores, como la falta de operadores bit a bit de Applesoft; de lo contrario, la mayoría de los programas BASIC que no utilizan funciones dependientes del hardware se ejecutarán en ambos BASIC.

La instrucción PR# redirige la salida a una tarjeta de expansión e IN# redirige la entrada desde una tarjeta de expansión. El número de ranura de la tarjeta se especifica después de PR# o IN# dentro de la declaración. La computadora se bloquea si no hay ninguna tarjeta presente en la ranura. PR#0 restaura la salida a la pantalla de 40 columnas y IN#0 al teclado.

La instrucción PR# se puede usar para redirigir la salida a la impresora (por ejemplo, 10 PR# x:PRINT"¡Hola!") donde x es el número de ranura que contiene la tarjeta de puerto de impresora. Para enviar una lista de programas BÁSICOS a la impresora, el usuario escribe PR# x:LISTA.

PR#6 hace que Applesoft inicie las unidades de disco (aunque el controlador Disk II puede estar en cualquier ranura, generalmente está en la ranura 6). PR#3 cambia al modo de texto de 80 columnas si hay una tarjeta de 80 columnas presente.

Al igual que con Commodore BASIC, las variables numéricas se almacenan como punto flotante de 40 bits; cada variable requiere cinco bytes de memoria. El programador puede designar variables como enteros siguiéndolas con un signo de porcentaje, en cuyo caso usan dos bytes y están limitadas a un rango de -32768 a 32767; sin embargo, BASIC los vuelve a convertir internamente a punto flotante, mientras que cada signo de porcentaje también toma un byte adicional de código de programa, por lo que en la práctica esta función solo es útil para reducir el uso de memoria de variables de matriz grandes.

La función RND genera un número fraccionario pseudoaleatorio entre 0 y 1. RND(0) devuelve el número aleatorio generado más recientemente. RND con un número negativo saltará a un punto en la secuencia determinada por el número negativo particular utilizado. RND con cualquier valor positivo genera el siguiente número en la secuencia, sin depender del valor real dado. Las ubicaciones $4E y $4F, en las que el sistema cicla los valores continuamente mientras espera las pulsaciones de teclas del usuario, se pueden PEEK para proporcionar valores verdaderamente aleatorios para usar como semilla (cuando se niegan) para RND. Por ejemplo, después de la entrada del teclado, x=rnd(-1*(mirar(78)+256*( mirar(79))) generará RND con los valores de $4E y $4F.

Al igual que otras implementaciones de Microsoft BASIC, Applesoft descarta los espacios (fuera de las cadenas y los comentarios) en las líneas del programa. LIST agrega espacios cuando se muestra el código en aras de la legibilidad. Dado que LIST agrega un espacio antes y después de cada palabra clave tokenizada, a menudo produce dos espacios seguidos donde uno sería suficiente para la legibilidad.

El aviso predeterminado para INPUT es un signo de interrogación. PRINT no agrega un espacio inicial delante de los números.

Coleco afirmó que el SmartBASIC de su computadora personal Adam era compatible con el código fuente de Applesoft. Microsoft licenció un BASIC compatible con Applesoft a VTech para su clon Laser 128.

Limitaciones

A través de varios de los primeros modelos de Apple II, Applesoft BASIC no admitía el uso de letras minúsculas en los programas, excepto en las cadenas. PRINT es un comando válido pero print y Print dan como resultado un error de sintaxis.

Applesoft carece de varios comandos y funciones comunes a la mayoría de los intérpretes Microsoft BASIC que no son 6502, como:

Applesoft no tiene comandos para el manejo de archivos o discos, excepto para guardar y cargar programas a través de una cinta de casete. El sistema operativo de disco Apple II, conocido simplemente como DOS, aumenta el lenguaje para brindar tales capacidades.

Solo las dos primeras letras de los nombres de las variables son significativas. Por ejemplo, "BAJO" y "PÉRDIDA" se tratan como la misma variable y al intentar asignar un valor a "PÉRDIDA" sobrescribe cualquier valor asignado a "BAJO". Un programador también tiene que evitar letras consecutivas que sean comandos u operaciones de Applesoft. El nombre "PUNTUACIÓN" para una variable se interpreta como que contiene el operador booleano OR, representado como SC OR E. "ANTECEDENTES" contiene GR, el comando para invocar el modo de gráficos de baja resolución, y da como resultado un error de sintaxis.

Sonido y gráficos

El único soporte de sonido es la opción de IMPRIMIR un carácter de campana ASCII para hacer sonar el pitido de alerta del sistema y un comando PEEK para hacer clic en el altavoz. El lenguaje no es lo suficientemente rápido para producir más que un zumbido de barítono a partir de clics repetidos. Sin embargo, los programas pueden almacenar una rutina en lenguaje de máquina para generar tonos musicales electrónicos que abarquen varias octavas.

Applesoft es compatible con la visualización de gráficos de baja resolución (lores), en la que se pueden mostrar 40 píxeles de color en horizontal y hasta 48 en vertical en 16 colores, y la alta resolución de 280 x 192 (contrata). Hay comandos para trazar píxeles y dibujar líneas horizontales y verticales en lores. Hires permite dibujar líneas arbitrarias. Las tablas de formas basadas en vectores se pueden utilizar para dibujar objetos en modos gráficos de alta resolución. Consisten en líneas horizontales y verticales, y las formas enteras se pueden escalar a tamaños más grandes y girar en cualquier ángulo. No existe ninguna disposición para mezclar texto y gráficos, a excepción de las cuatro líneas de texto de Apple en la parte inferior de una pantalla gráfica.

A partir del Apple IIe, una "doble alta resolución" El modo estuvo disponible en máquinas con 128k de memoria. Este modo esencialmente duplica la resolución del modo de contrataciones original, pero incluye los 16 colores de la paleta de lores. Applesoft no brinda soporte directo para este modo. Los modos específicos de Apple IIGS tampoco son compatibles.

Extensiones

Applesoft BASIC se puede ampliar de dos formas: el comando ampersand (&) y la función USR(). Estas son dos funciones que llaman a rutinas de lenguaje de máquina de bajo nivel almacenadas en la memoria, lo cual es útil para las rutinas que deben ser rápidas o requieren acceso directo a funciones o datos arbitrarios en la memoria. La función USR() toma un argumento numérico y se puede programar para derivar y devolver un valor de función calculado, que se usará en una expresión numérica. & es efectivamente una abreviatura de CALL, con una dirección predefinida.

Errores

Una deficiencia con la captura de errores a través de ONERR significa que la pila del sistema no se reinicia si una rutina de manejo de errores no invoca RESUME, lo que podría provocar un bloqueo. La función integrada de generador de números pseudoaleatorios RND es capaz de producir una serie predecible de salidas debido a la forma en que se inicia el generador cuando se enciende por primera vez. Este comportamiento es contrario a cómo la documentación de Apple describe la función.

Rendimiento

Wozniak originalmente se refirió a su Integer BASIC como "Game BASIC" (Habiéndolo escrito para poder implementar un clon de Breakout para su nueva computadora). Pocos juegos de acción se escribieron en Applesoft BASIC, en gran parte porque el uso de números de punto flotante para todas las operaciones matemáticas degrada el rendimiento.

Los programas BASIC de Applesoft se almacenan como una lista enlazada de líneas; un GOTO o GOSUB toma un tiempo lineal. Algunos programas tienen las subrutinas en la parte superior para reducir el tiempo de llamada.

A diferencia de Integer BASIC, Applesoft no convierte números literales (como 100) en el código fuente a binario cuando se ingresa una línea. Más bien, la cadena ASCII se convierte cada vez que se ejecuta la línea. Dado que la búsqueda de variables suele ser más rápida que esta conversión, puede ser más rápido almacenar constantes numéricas utilizadas dentro de bucles en variables antes de que se introduzca el bucle.

Código de muestra

Hola World, con video inverso y carácter de campana, ejecutar luego lista

Hello World en Applesoft BASIC se puede ingresar de la siguiente manera:

10TEXTO:HOME20?"HELLO WORLD"

Se pueden incluir varios comandos en la misma línea de código si están separados por dos puntos (:). El ? se puede usar en Applesoft BASIC (y en casi todas las versiones de Microsoft BASIC) como un atajo para "IMPRIMIR", aunque deletrear la palabra no solo es aceptable sino canónico—Applesoft convertido "?" en los programas ingresados al mismo token que "IMPRIMIR" (por lo tanto, no se guarda memoria usando "?"), por lo tanto, aparece como "IMPRIMIR" cuando aparece un programa. El programa anterior aparece en un comando LIST como:

10 TEXTO : HOME20 PRINT "HELLO WORLD"

Cuando Applesoft II BASIC se lanzó inicialmente a mediados de 1978, venía en cinta de casete y podía cargarse en la memoria a través del monitor de lenguaje de máquina de Apple II. Cuando el Apple II+ mejorado reemplazó al II original en 1979, Applesoft ahora estaba incluido en la ROM y se iniciaba automáticamente al encenderse si no había un disquete de arranque. Por el contrario, Integer BASIC ahora se eliminó de la ROM y se convirtió en un archivo ejecutable en el disco DOS 3.3.

Evolución temprana

El Applesoft original, almacenado en RAM como se documenta en su Manual de referencia de noviembre de 1977, tiene un código de interpretación más pequeño que el Applesoft II posterior, ocupando 8½ KB de memoria, en lugar de los 10 KB utilizados por el Applesoft II posterior. En consecuencia, carece de una serie de funciones de comando desarrolladas para la versión principal posterior:

así como varias que tendría la versión posterior, que ya habían estado presentes en Integer BASIC de Apple:

Además, sus comandos de gráficos de baja resolución tienen nombres diferentes de sus contrapartes de Integer BASIC/Applesoft II. Todos los nombres de comandos tienen la forma PLTx, de modo que GR, COLOR=, PLOT, HLIN y VLIN se denominan PLTG, PLTC, PLTP, PLTH y PLTV, respectivamente. El comando para volver al modo de texto, conocido como TEXT en otras versiones, es simplemente TEX y tiene la condición de que debe ser la última declaración en una línea de programa.

Applesoft BASIC 1.x estaba más cerca del código BASIC 6502 original de Microsoft que el posterior Applesoft II; ¿Conservó el tamaño de la memoria? y mostró un aviso de derechos de autor de Microsoft. Para mantener la coherencia con Integer BASIC, el botón "Ok" El indicador del código de Microsoft se reemplazó por un carácter ]. Applesoft 1.x también le preguntaba al usuario al cargar si deseaba deshabilitar la declaración REM y la palabra clave LET en las declaraciones de asignación a cambio de comandos gráficos de lores.

La función USR() también se define de manera diferente, sirviendo como sustituto del comando CALL ausente. Su argumento no es para pasar un valor numérico a la rutina de lenguaje de máquina, sino que es la dirección de llamada de la rutina misma; no hay "gancho" para predefinir la dirección. Todos los varios ejemplos en el manual usan la función solo para acceder a la "ROM del monitor del sistema" rutinas o rutinas cortas de usuario para manipular las rutinas de la ROM. No se menciona ningún código para calcular el valor devuelto por la propia función; la función siempre se muestra asignada a "dummy" variables, que, sin acción para establecer un valor por código de usuario, simplemente reciben un valor sin sentido que se les devuelve. Incluso las rutinas de ROM accedidas que devuelven valores (en ejemplos, aquellas que brindan el servicio de funciones PDL() y SCRN()) simplemente tienen sus valores almacenados, por rutinas de usuario, en ubicaciones que se observan por separado en una declaración posterior.

A diferencia de Integer BASIC y Applesoft II, los operadores booleanos AND, OR y NOT realizan operaciones bit a bit en valores enteros de 16 bits. Si se les dan valores fuera de ese rango, se produce un error.

Los términos OUT y PLT (y el ya mencionado IN) aparecen en la lista de palabras reservadas, pero no se explican en ninguna parte del manual.