Articulo de referencia

Applesoft BASIC

[[Ric Weiland]]"},"developer":{"wt":""},"released":{"wt":"{{Start date and age|1977}}"},"discontinued":{"wt":""},"latest release version":{"wt":"Applesoft II"},"latest release d...

Applesoft BASIC es un dialecto de Microsoft BASIC , desarrollado por Marc McDonald y Ric Weiland , incluido en los ordenadores Apple II . Sustituye a Integer BASIC y es el BASIC almacenado en la ROM de todos los ordenadores de la serie Apple II posteriores al modelo original . También se le conoce como FP BASIC (de punto flotante ) debido al comando de Apple DOSFP que se utiliza para invocarlo, en lugar del que se usa INTpara Integer BASIC.

Applesoft BASIC fue proporcionado por Microsoft y su nombre deriva de la combinación de los nombres de Apple Computer y Microsoft. Empleados de Apple, entre ellos Randy Wigginton , adaptaron el intérprete de Microsoft para el Apple II y le añadieron varias funciones. La primera versión de Applesoft se lanzó en 1977 en cinta de casete y carecía de soporte adecuado para gráficos de alta resolución. Applesoft II , disponible en casete, disquete y en la ROM del Apple II Plus y modelos posteriores, se lanzó en 1978. Es esta última versión, que presenta algunas diferencias de sintaxis y soporte para los modos gráficos de alta resolución del Apple II, la que suele asociarse con el término "Applesoft".

Historia

Cuando Steve Wozniak escribió Integer BASIC para el Apple II , no implementó soporte para aritmética de punto flotante porque estaba interesado principalmente en escribir juegos, una tarea para la cual los enteros por sí solos eran suficientes. [ 1 ] En 1976, Microsoft había desarrollado Microsoft BASIC para el MOS Technology 6502 , pero en ese momento no había ninguna computadora de producción que lo utilizara. Al enterarse de que Apple tenía una máquina 6502, Microsoft preguntó si la compañía 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 Computadoras de la Costa Oeste en abril de 1977 y salió a la venta en junio. Una de las quejas más comunes de los clientes sobre la computadora era la falta de aritmética de punto flotante en BASIC. [ 2 ] Para complicar aún más las cosas, la computadora personal rival Commodore PET tenía un intérprete de BASIC con capacidad de punto flotante desde el principio. Como Wozniak —la única persona que entendía 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.

Según se informa, Apple obtuvo una licencia de ocho años para Applesoft BASIC de Microsoft por una tarifa fija de 31 000 dólares, renovándola en 1985 mediante un acuerdo que otorgó a Microsoft los derechos y el código fuente de la versión de BASIC para Macintosh de Apple . [ 3 ] Applesoft fue diseñado para ser retrocompatible con Integer BASIC y utiliza el núcleo de la implementación de BASIC 6502 de Microsoft, que incluye el uso del comando GET para detectar pulsaciones de teclas y no requiere espacios en las líneas de programa. Si bien Applesoft BASIC es más lento que Integer BASIC, tiene muchas características de las que carece el BASIC anterior:

  • Cadenas atómicas: Una cadena ya no es una matriz de caracteres (como en Integer BASIC y C ); ahora es un objeto gestionado por el recolector de basura (como en Scheme y Java ). Esto permite crear matrices de cadenas; crea una matriz de once variables de cadena numeradas del 0 al 10.DIMA$(10)
  • Matrices multidimensionales (números o cadenas de caracteres)
  • Variables de punto flotante de precisión simple con un exponente de 8 bits y una mantisa de 31 bits, y capacidades matemáticas mejoradas, incluyendo funciones trigonométricas y logarítmicas.
  • Comandos para gráficos de alta resolución
  • DATAinstrucciones, con READy RESTOREcomandos, para representar valores numéricos y de cadena en cantidad
  • CHR$, STR$, y VALfunciones para convertir entre tipos de cadena y numéricos (ambos lenguajes tenían la ASCfunción)
  • Funciones definidas por el usuario : funciones sencillas de una sola línea escritas en BASIC, con un único parámetro.
  • Detección de errores: permite que los programas BASIC gestionen errores inesperados mediante subrutinas escritas en BASIC.

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

Adaptar BASIC para el Apple II fue una tarea ardua, ya que Apple recibió un listado de código fuente para Microsoft 6502 BASIC que resultó tener errores y además requería la adición de comandos Integer BASIC. Dado que Apple no disponía de un ensamblador 6502, el equipo de desarrollo se vio obligado a enviar el código fuente por teléfono a Call Computer, una empresa que ofrecía servicios de compilación. Este fue un proceso extremadamente lento y tedioso, y después de que Call Computer perdiera el código fuente debido a un fallo en el equipo, uno de los programadores, Cliff Huston, utilizó su propio ordenador IMSAI 8080 para realizar el ensamblaje cruzado del código fuente de BASIC. [ 4 ]

Características

Applesoft es similar a BASIC 2.0 de Commodore, salvo por las características heredadas de Integer BASIC. Existen algunas diferencias menores, como la ausencia de operadores bit a bit en Applesoft; por lo demás, la mayoría de los programas BASIC que no utilizan funciones dependientes del hardware se ejecutarán en ambas versiones.

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 instrucción. El equipo se bloquea si no hay ninguna tarjeta en la ranura. PR#0 restaura la salida a la pantalla de 40 columnas e IN#0 al teclado.

La instrucción PR# se puede usar para redirigir la salida a la impresora (por ejemplo, ) donde x es el número de ranura que contiene la tarjeta del puerto de la impresora. Para enviar un listado de programa BASIC a la impresora, el usuario escribe .10PR#x:PRINT"Hello!"PR#x:LIST

Al usar PR# en una ranura con una unidad de disco (normalmente en la ranura 6), Applesoft inicia el sistema desde la unidad de disco. Al usar PR# en una ranura con una tarjeta de 80 columnas (normalmente en la ranura 3), se cambia al modo de texto de 80 columnas.

Al igual que en Commodore BASIC, las variables numéricas se almacenan como números de coma flotante de 40 bits; cada variable requiere cinco bytes de memoria. El programador puede designar variables como enteras añadiendo un signo de porcentaje, en cuyo caso utilizan dos bytes y su rango se limita a -32768 a 32767; sin embargo, BASIC las convierte internamente a coma flotante al realizar cálculos, y cada signo de porcentaje también consume un byte adicional de código de programa, por lo que en la práctica esta función solo resulta útil para reducir el uso de memoria de variables de matriz grandes, ya que no ofrece ninguna ventaja en el rendimiento.

La función RND genera un número fraccionario pseudoaleatorio entre 0 y 1. RND(0)Devuelve el último número aleatorio generado. Si se utiliza un número negativo, RND salta a un punto de la secuencia determinado por dicho número. Si se utiliza cualquier valor positivo, RND genera el siguiente número de la secuencia, independientemente del valor proporcionado.

Al igual que otras implementaciones de Microsoft BASIC, Applesoft descarta los espacios (excepto en cadenas y comentarios) en las líneas de código. LISTAñade espacios al mostrar el código para facilitar la lectura. Dado que LIST añade un espacio antes y después de cada palabra clave tokenizada, a menudo produce dos espacios seguidos cuando uno sería suficiente para una buena legibilidad.

El indicador predeterminado para INPUTes un signo de interrogación. PRINTno agrega un espacio inicial delante de los números.

Limitaciones

En varios modelos antiguos del Apple II, Applesoft BASIC no admitía el uso de letras minúsculas en los programas, excepto en cadenas. PRINTes un comando válido, pero printy Printdan como resultado un error de sintaxis.

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

  • INSTR(Buscar una subcadena en una cadena)
  • PRINT USING(Formatear números en la salida impresa)
  • INKEY$(Comprueba si se ha pulsado una tecla sin detener el programa; aunque una comprobación en la ubicación $C000 logra esta acción).
  • LPRINT(imprimir en lugar de mostrar en la pantalla)

Applesoft no dispone de comandos para la gestión de archivos o discos, salvo para guardar y cargar programas mediante cinta de casete. El sistema operativo de disco del Apple II, conocido simplemente como DOS, amplía el lenguaje para proporcionar dichas funcionalidades.

Solo las dos primeras letras de los nombres de las variables son relevantes. Por ejemplo, "LOW" y "LOSS" se tratan como la misma variable, y al intentar asignar un valor a "LOSS" se sobrescribe cualquier valor asignado a "LOW". Un programador también debe evitar letras consecutivas que sean comandos u operaciones de Applesoft. El nombre "SCORE" para una variable se interpreta como que contiene el ORoperador booleano , representado como SC OR E. "BACKGROUND" contiene GR, el comando para invocar el modo gráfico de baja resolución, y produce un error de sintaxis.

Sonido y gráficos

El único soporte de sonido consiste en la opción de usar PRINTun carácter de campana ASCII para activar el pitido de alerta del sistema y un PEEKcomando para hacer clic en el altavoz. El lenguaje no es lo suficientemente rápido como para producir más que un zumbido grave con clics repetidos. Sin embargo, los programas pueden almacenar una rutina en lenguaje máquina para generar tonos musicales electrónicos que abarquen varias octavas.

Applesoft admite el dibujo en los modos de baja y alta resolución del Apple II. En baja resolución, existen comandos para trazar píxeles y dibujar líneas horizontales y verticales. La alta resolución permite dibujar líneas arbitrarias y utilizar tablas de formas vectoriales para dibujar objetos escalados y rotados. La única opción para combinar texto y gráficos son las cuatro líneas de texto en la parte inferior de la pantalla.

A partir del Apple IIe , se habilitó un modo de "doble alta resolución" en equipos con 128 KB de memoria. Este modo prácticamente duplica la resolución del modo de alta resolución original, pero incluyendo los 16 colores de la paleta de baja resolución. Applesoft no ofrece soporte directo para este modo. Los modos específicos del Apple IIGS tampoco son compatibles.

Extensiones

Applesoft BASIC se puede extender de dos maneras: mediante el comando ampersand ( & ) y la función USR() . Estas dos características llaman a rutinas de lenguaje máquina de bajo nivel almacenadas en memoria, lo cual es útil para rutinas que necesitan ser rápidas o requieren acceso directo a funciones o datos arbitrarios en memoria. La función USR() toma un argumento y se puede programar para derivar y devolver un valor de función calculado que se utilizará en una expresión numérica. es, en efecto, una abreviatura de CALL , con una dirección predefinida. Al llamar a rutinas en la ROM de Applesoft, es posible que las rutinas ampersand analicen los valores que siguen al ampersand. Numerosos paquetes comerciales de terceros estaban disponibles para extender Applesoft utilizando rutinas ampersand.&

Insectos

Una deficiencia en el manejo de errores ONERRimplica que la pila del sistema no se reinicia si una rutina de manejo de errores no se invoca RESUME, lo que podría provocar un fallo. [ 5 ] La función generadora de números pseudoaleatorios integrada RNDes capaz de producir una serie predecible de salidas debido a la forma en que se inicializa el generador al encenderse por primera vez. Este comportamiento es contrario a cómo la documentación de Apple describe la función. [ 6 ]

Actuación

Wozniak originalmente se refería a su Integer BASIC como "Game BASIC" (ya que lo había escrito para poder implementar un clon de Breakout para su nueva computadora). [ 1 ] Pocos juegos de acción fueron escritos 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 Applesoft BASIC se almacenan como una lista enlazada de líneas; GOTOsu ejecución GOSUBtoma un tiempo lineal . Algunos programas tienen las subrutinas al principio para reducir el tiempo de llamada.

A diferencia de Integer BASIC, Applesoft no convierte los números literales (como 100) del código fuente a binario al introducir una línea. En su lugar, 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 resultar más eficiente almacenar las constantes numéricas utilizadas dentro de los bucles en variables antes de entrar en el bucle.

Código de ejemplo

Hola, mundo!, con vídeo invertido y personaje de campana , ejecutar y luego listar

¡Hola, mundo! en Applesoft BASIC se puede introducir de la siguiente manera:

10 TEXTO : INICIO 20 ? "HOLA MUNDO"

Se pueden incluir varios comandos en la misma línea de código si están separados por dos puntos ( :). El comando ?se puede usar en Applesoft BASIC (y en casi todas las versiones de Microsoft BASIC) como atajo para "PRINT", aunque escribir la palabra completa no solo es aceptable, sino también canónico: Applesoft convirtió "?" en los programas introducidos al mismo token que "PRINT" (por lo que en realidad no se ahorra memoria al usar "?"), de modo que aparece como "PRINT" cuando se lista un programa. El programa anterior aparece en un LISTcomando como:

10 TEXTO : INICIO 20 IMPRIMIR "HOLA MUNDO"

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

Evolución temprana

El Applesoft original, almacenado en la RAM como se documenta en su Manual de Referencia de noviembre de 1977, tiene un código intérprete más pequeño que el Applesoft II posterior, ocupando 8½  KB de memoria, [ 7 ] en lugar de los 10  KB utilizados por el Applesoft II posterior. En consecuencia, carece de varias características de comandos desarrolladas para la versión posterior y principal:

  • Todos los comandos compatibles con los gráficos de "alta resolución" de Apple (9 en total)
  • Detección de errores con ONERR...GOTO y RESUME
  • Llamada abreviada de rutina de máquina "&"
  • Inicio para borrar la pantalla (una llamada a una rutina de la ROM del sistema)
  • Control de salida de texto NORMAL, INVERSO, FLASH y VELOCIDAD=
  • La función de espacio de impresión SPC() figura entre las palabras reservadas en el manual, pero no está documentada de otra manera (la función de impresión TAB() sí está documentada).
  • Almacenamiento de matrices numéricas en cintas de casete: ALMACENAMIENTO y RECUPERACIÓN
  • Respuesta del dispositivo: ESPERAR

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

  • Eliminación de línea de programa: DEL
  • Acceso a rutinas de máquina: CALL
  • Acceso a dispositivos periféricos: IN# y PR# (aunque IN sin "#" figura entre las palabras reservadas).
  • Control de rango de memoria: HIMEM: y LOMEM:
  • Seguimiento de la ejecución para depuración: TRACE y NOTRACE
  • Posicionamiento de pantalla: HTAB y VTAB
  • Subrutina que aborta POP
  • Las funciones PDL() leen los controladores analógicos y SCRN() leen la pantalla gráfica de baja resolución (ambas acceden a rutinas de la ROM del sistema).

Además, sus comandos gráficos de baja resolución tienen nombres diferentes a los de sus equivalentes en Integer BASIC/Applesoft II. Todos los nombres de los comandos tienen el formato 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 texto, conocido como TEXT en otras versiones, es simplemente TEX, y tiene la condición de que debe ser la última instrucción en una línea de programa.

Applesoft BASIC 1.x era más similar al código BASIC 6502 original de Microsoft que el posterior Applesoft II; conservaba el mensaje "¿Tamaño de memoria?" y mostraba un aviso de copyright de Microsoft. Para mantener la coherencia con Integer BASIC, el mensaje "Aceptar" del código de Microsoft se sustituyó por el carácter ]. Applesoft 1.x también preguntaba al usuario al cargar si deseaba deshabilitar la instrucción REM y la palabra clave LET en las instrucciones de asignación a cambio de comandos gráficos de Lores.

La función USR() también se define de forma diferente, sirviendo como sustituto del comando CALL ausente. Su argumento no sirve para pasar un valor numérico a la rutina en lenguaje máquina, sino que es la dirección de llamada de la propia rutina; no hay ningún "gancho" para predefinir la dirección. Varios ejemplos del manual utilizan la función únicamente para acceder a rutinas de la ROM del "monitor del sistema" o a rutinas de usuario cortas para manipular dichas rutinas. No se menciona ningún código para calcular el valor devuelto por la función; siempre se muestra que la función se asigna a variables "ficticias", las cuales, sin ninguna acción para establecer un valor por parte del código de usuario, simplemente reciben un valor sin sentido. Incluso las rutinas de la ROM a las que se accede y que devuelven valores (por ejemplo, las que proporcionan el servicio de las funciones PDL() y SCRN()) simplemente almacenan sus valores, mediante rutinas de usuario, en ubicaciones que se consultan por separado en una instrucción posterior.

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

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

Existen varios compiladores para Applesoft BASIC, [ 8 ] incluyendo TASC (The Applesoft Compiler) de Microsoft en 1981. [ 9 ]

Coleco afirmó que el SmartBASIC de su ordenador doméstico Adam era compatible a nivel de código fuente con Applesoft. [ 10 ]

Microsoft otorgó una licencia a VTech para un BASIC compatible con Applesoft para su clon Laser 128. [ 11 ]

Véase también

Referencias

  1. 1 2 Wozniak, Steve (1 de mayo de 2014). "Cómo Steve Wozniak escribió BASIC para el Apple original desde cero" . Gizmodo . Recuperado el 2 de mayo de 2014 .
  2. McCracken, Harry (16 de abril de 2012). "Apple II para siempre: un homenaje por el 35.º aniversario al primer producto icónico de Apple" . Time . ISSN 0040-781X . Consultado el 21 de junio de 2019 . 
  3. Herzfeld, Andy (12 de febrero de 2014). "MacBasic: La triste historia de MacBasic" . Folklore.org .
  4. "Capítulo 16: Idiomas" . Historia del Apple II . Julio de 2010. Consultado el 6 de julio de 2016 .
  5. Manual de referencia del programador de Applesoft BASIC (solo para IIe) . Apple Computer, Inc. 1982. pág. 70. 
  6. Aldridge, James W. (julio de 1987). "Precauciones sobre la generación de números aleatorios en el Apple II" . Behavior Research Methods, Instruments, & Computers . 19 (4): 397– 99. doi : 10.3758/BF03202585 . S2CID 62633043 . 
  7. Manual de referencia del lenguaje básico de punto flotante de precisión extendida de Applesoft . Apple Computer, Inc. Noviembre de 1977.
  8. Taylor, Joseph H.; Taylor, Jeffrey S. (septiembre de 1982). " Una comparación de cinco compiladores para Applesoft BASIC" . BYTE . págs. 440–464 . Recuperado el 30 de diciembre de 2024 . 
  9. Manual del usuario de TASC (The AppleSoft Compiler) . Bellevue, WA: Microsoft Consumer Products. 1981.
  10. Coleco presenta el sistema informático Adam . 3 de mayo de 2016 [28 de septiembre de 1983]. El evento ocurre a las 31:55. Archivado del original el 22 de noviembre de 2021 vía YouTube. Todo aquel que conozca Applesoft BASIC también conocerá Adam SmartBASIC. Todos los mismos comandos, todos los mismos controles para este BASIC, este intérprete, están disponibles. De hecho, vamos a mostrarles un programa que utiliza comandos gráficos de Applesoft... ejecutado a través de Adam. ... En lo que a nosotros respecta, cuando estamos en BASIC, y no estamos PEEKing o POKEing... nada por debajo del intérprete BASIC, somos compatibles con el código fuente.
  11. Grevstad, Eric (diciembre de 1986). "Laser 128 / Un compatible asequible" . en Cider . pág. 58. Recuperado el 24 de abril de 2017 . 

Este artículo incluye texto de Everything2 , bajo licencia GFDL.

  • ROM desensamblada
  • AppleSoft BASIC en JavaScript