Integer BASIC es un intérprete de BASIC escrito por Steve Wozniak para las computadoras Apple I y Apple II . Originalmente disponible en casete para el Apple I en 1976, luego incluido en ROM en el Apple II desde su lanzamiento en 1977, fue la primera versión de BASIC utilizada por muchos de los primeros propietarios de computadoras domésticas . [2]
Desarrollador | Steve Wozniak |
---|---|
Apareció por primera vez | 1976 [1] |
Plataforma | Manzana I , Manzana II |
Influenciado por | |
HP BÁSICO | |
Influenciado | |
Applesoft BASIC |
El lenguaje apoyó las matemáticas usando números enteros , sin soporte de punto flotante . El uso de números enteros permitió almacenar números en un formato de 16 bits mucho más compacto que podría leerse y procesarse más rápidamente que los formatos de coma flotante de 32 o 40 bits que se encuentran en la mayoría de los BASIC de la época. Sin embargo, esto limitó su aplicabilidad como lenguaje de uso general. [a]
Otra diferencia con otros BASIC de la era es que Integer BASIC trataba las cadenas como matrices de caracteres, similar al sistema en C o Fortran 77 . Se accedió a las subcadenas mediante la división de matrices en lugar de funciones de cadena. Este estilo se introdujo en HP Time-Shared BASIC , y también se puede encontrar en otros BASIC contemporáneos modelados en HP, como North Star BASIC y Atari BASIC . Contrastaba con el estilo que se encuentra en los BASIC derivados de DEC , incluido Microsoft BASIC .
El lenguaje se desarrolló inicialmente con el nombre GAME BASIC y se denominó simplemente Apple BASIC cuando se introdujo en Apple I. Se convirtió en Integer BASIC cuando se transfirió a Apple II y se envió junto con Applesoft BASIC , un puerto de Microsoft BASIC que Incluye soporte de punto flotante. Integer BASIC se eliminó gradualmente a favor de Applesoft BASIC comenzando con Apple II Plus en 1979.
Historia
Cuando estaba en el último año de la escuela secundaria , el profesor de electrónica de Steve Wozniak organizó que los principales estudiantes de la clase tuvieran colocaciones en empresas locales de electrónica. Wozniak fue enviado a Sylvania donde programó en FORTRAN en un IBM 1130 . [4] Ese mismo año, General Electric colocó una terminal en la escuela secundaria que estaba conectada a una de sus computadoras centrales que ejecutaban su servicio BASIC de tiempo compartido , que estaban promocionando fuertemente en ese momento. Después de tener tres días de acceso, se les pidió a los estudiantes que escribieran cartas sobre por qué la escuela debería recibir una terminal de forma permanente, pero sus esfuerzos finalmente no tuvieron éxito. [1]
Algunos años más tarde, Wozniak estaba trabajando en Hewlett-Packard (HP) ejecutando simulaciones de diseños de chips y diseño lógico para calculadoras. [1] HP hizo grandes avances en el mercado de las minicomputadoras con sus máquinas de la serie HP 2000 que ejecutan una versión personalizada de tiempo compartido de BASIC. Por aproximadamente $ 100,000, uno podría construir una máquina razonablemente equipada que pudiera soportar entre 16 y 32 usuarios que ejecutan programas BASIC. [5] Aunque costoso, seguía siendo una fracción del costo de las máquinas mainframe [b] y, para los usuarios habituales, menos que los servicios de tiempo compartido. [c] HP siguió esto con la HP 9830 , una máquina del tamaño de una computadora de escritorio por $ 10,000 (equivalente a $ 67,000 en 2020) que también ejecutaba BASIC, a la que Wozniak tenía acceso. [9]
Steve Wozniak [1]
En enero de 1975, se anunció el Altair 8800 y desencadenó la revolución de los microordenadores . En marzo, Wozniak asistió a la primera reunión del Homebrew Computer Club y comenzó a formular el diseño de su propia computadora. Una de las piezas de software más importantes para Altair, y una de las más pirateadas , fue Altair BASIC de Microsoft recientemente formado . [10] Wozniak concluyó que su máquina tendría que tener un BÁSICO propio, que, con suerte, sería el primero para el procesador MOS Technology 6502 . Como el lenguaje necesitaba 4 kB de RAM, lo convirtió en la memoria mínima para el diseño. [1]
Las referencias de Wozniak para BASIC fueron una copia de 101 BASIC Computer Games y un manual de HP BASIC. [1] No sabía que el BASIC de HP era muy diferente de la variedad DEC BASIC utilizada en 101 Games , que también era la base de Microsoft BASIC para Altair. Basado en estas fuentes, Wozniak comenzó a esbozar una tabla de sintaxis para el idioma. El diseño inicialmente incluía soporte de punto flotante, pero aún con la esperanza de poder publicar el primer BASIC en el 6502 y convertirse en "una estrella", decidió abandonar el punto flotante y escribir un sistema matemático de enteros separado para ahorrar unas semanas de tiempo de programación. [1]
Wozniak describiría más tarde su lenguaje como "destinado principalmente a juegos y usos educativos". [11] Refiriéndose a él durante todo el desarrollo como "GAME BASIC", Wozniak escribió el código a mano, traduciendo las instrucciones del código del ensamblador a sus equivalentes de código de máquina y luego cargando el resultado en su computadora. [12] Sin ninguna formación sobre cómo escribir un lenguaje informático, usó su experiencia en calculadoras HP para implementar una máquina de pila para interpretar expresiones. Una vez que las rutinas básicas estuvieron en funcionamiento, trabajó en los otros comandos uno por uno de forma modular. Con cada visita al club Homebrew, demostró algunas características más agregadas en el último mes. [1]
Steve Wozniak [9]
En los anuncios de principios de 1976 para su computadora Apple I , Apple Inc afirmó que "nuestra filosofía es proporcionar software para nuestras máquinas gratis o a un costo mínimo" [13] y "sí amigos, Apple BASIC es gratis". [14]
Wozniak había ayudado a Jobs, que trabajaba para Atari , con un rediseño de Breakout . [15] En algún momento posterior, decidió ver si se podía escribir el juego en BASIC. Agregó comandos para leer los controladores de paleta y, a lo largo de una serie de ediciones rápidas, tuvo una versión del juego en funcionamiento. Para mejorar su jugabilidad, agregó un altavoz para hacer clics cuando la pelota golpea las cosas. Mientras se lo mostraba a Steve Jobs , Wozniak demostró que podía cambiar rápidamente los colores que usaba su juego, simplemente alterando el código fuente . Wozniak escribió más tarde que había demostrado que "el software era mucho más flexible que el hardware", y que él y Jobs se dieron cuenta de que "ahora, cualquiera puede crear juegos de arcade sin tener que diseñarlos en hardware". [1]
Wozniak completó una biblioteca de punto flotante para el 6502 y la publicó en la edición de agosto de 1976 de Dr. Dobbs . [16] Esta biblioteca se convirtió más tarde en parte de las ROM de Apple II . [17] Wozniak comenzó a trabajar en la conversión del código de punto flotante en el BASIC de Apple, pero se desvió en la tarea de diseñar un controlador de disquete para lo que se convirtió en el Disk II . Mike Markkula dijo que la compañía iría al Consumer Electronics Show en Las Vegas si el sistema de disco estaba listo a tiempo, por lo que Wozniak y Randy Wigginton trabajaron en él sin parar durante las vacaciones de 1977. [18]
Cuando volvió al tema del punto flotante en BASIC, Jobs se quejó de que estaba tardando demasiado. Sin que Wozniak se diera cuenta, la compañía concertó una licencia con Microsoft para recibir su versión 6502 del código de Altair, recientemente completada. Al examinar el código, Wozniak decidió que era más fácil agregar soporte de gráficos al código de MS que agregar su propio BASIC de punto flotante, ya que el posterior requería parchear manualmente el código de máquina original mientras que MS estaba escrito en ensamblador y se modificaba más fácilmente. El desarrollo de BASIC de Apple terminó a favor de lo que se convirtió en Applesoft. Wozniak señaló más tarde: "Mi mayor decepción fueron las horribles funciones de cadena como LEFT $ (VAR, 5) y MID $ (VAR2,5,3) en lugar de las mías". [18] [d]
Cuando el Apple II se envió en el verano de 1977, Integer BASIC se suministró en ROM, mientras que Applesoft BASIC se envió en casete. Esto cambió con la introducción del Apple II Plus en 1979, cuando se puso Applesoft en la ROM. [19]
Descripción
Edición de programas
Como la mayoría de las implementaciones de BASIC de la época, Integer BASIC actuó como intérprete de lenguaje y como entorno de edición de líneas. Cuando BASIC se estaba ejecutando, se mostraba un >
símbolo del sistema donde el usuario podía ingresar declaraciones. [20] [e] A diferencia de las plataformas de computadoras hogareñas posteriores , BASIC no era el entorno predeterminado cuando comencé Apple, normalmente comenzaba en el monitor . BÁSICO se inició presionando Ctrl+ BReturn. [21]
Las declaraciones que se ingresaron con números iniciales se ingresan en el almacenamiento del programa para "ejecución diferida", [22] ya sea como nuevas líneas o reemplazando cualquiera que pueda haber tenido el mismo número anteriormente. [23] Las declaraciones que se ingresaron sin un número de línea se denominaron comandos y se ejecutaron de inmediato. [f] Los números de línea pueden ser del 0 al 32767, [24] [g] y las líneas pueden contener hasta 128 caracteres. [26]
Integer BASIC también incluyó el AUTO
comando para ingresar automáticamente números de línea en un número inicial dado AUTO 100
, como , agregando 10 al último número con cada nueva línea. AUTO 300,5
comenzaría a numerar en la línea 300 de cinco en cinco; 300, 305, etc. La numeración automática se desactivó ingresando MAN
. [27]
Una característica interesante del editor era que una sección de la pantalla podía reservarse como la "ventana", donde se realizaban las actualizaciones en vivo. Esta era normalmente la pantalla completa, pero podría limitarse a un área más pequeña POKE
ingresando valores en las ubicaciones de memoria 32 a 35. [28] Esta función podría usarse para crear un área de texto editable mientras el resto de la pantalla estaba en modo gráfico. . [29]
Depuración
Como en la mayoría de los BASIC, los programas se iniciaban con el RUN
comando y, como era común, podían dirigirse a un número de línea en particular como RUN 300
. [30] La ejecución podría detenerse en cualquier momento usando Ctrl+ C[31] y luego reiniciarse con CON
tinue, a diferencia de lo que es más típico CONT
. [32]
Para la ejecución paso a paso, la TRACE
instrucción podría usarse en el símbolo del sistema o colocarse dentro del programa mismo. Cuando se encendió, se imprimieron los números de línea para cada línea visitada por el programa. La función se puede desactivar de nuevo con NOTRACE
. [33]
Una característica algo inusual fue el DSP
comando (para "mostrar"). Cuando se encuentra en un programa, a partir de ese momento se muestran los cambios en el valor de una variable. Por ejemplo, DSP X
mostraría el valor de X cada vez que cambiara, junto con el número de línea donde ocurrió el cambio. [34] Al igual que con TRACE, DSP se desactivó con NODSP
. [25]
Nombres de variables
Donde Dartmouth BASIC y HP-BASIC limitaron los nombres de variables a un máximo de dos caracteres (ya sea una sola letra o una letra seguida de un dígito), y donde MS-BASIC permitiera una letra seguida de una letra o dígito opcional (ignorando los caracteres siguientes), Integer BASIC era inusual al admitir cualquier nombre de variable de longitud (por ejemplo, SUM, GAMEPOINTS, PLAYER2). La única advertencia fue que los nombres de las variables no pueden contener palabras reservadas; por ejemplo, THISCOLOR y COLORFUL eran nombres de variable inválidos porque contenían la palabra clave COLOR, un comando del sistema. [35] Además, las líneas estaban limitadas a 128 caracteres, por lo que los nombres de las variables no podían exceder esa longitud. [26]
Matemáticas
Integer BASIC, como su nombre lo indica, usa enteros como base para su paquete matemático. Estos se almacenaron internamente como un número de 16 bits, little-endian (como es el 6502). Esto permitió un valor máximo para cualquier cálculo entre -32767 y 32767; aunque el formato también podría almacenar el valor -32768, BASIC no pudo mostrar ese número. Los cálculos que dieron como resultado valores fuera de ese rango produjeron un >32767 ERR
. [36]
Los operadores infijos incluyen +
(suma), -
(subracción), *
(multiplicación), /
(división), MOD (resto) y exponente usando el ^
carácter. Los operadores binarios incluidos AND
, OR
y NOT
. Comparaciones binarias incluyen el conjunto estándar de =
, >
, <
, >=
, <=
, <>
y el HP-inspirado #
, lo que equivale a <>. [37]
Solo se permitieron matrices de una dimensión, limitadas en tamaño solo por la memoria disponible. [38] Las funciones matemáticas eran escasas; solo se ABS
admitieron (valor absoluto), SGN
(signo) y RND
(número aleatorio). [39] A diferencia de las versiones derivadas de MS, donde el parámetro se ignoraba y RND
siempre devolvía un valor 0 .. <1, Integer BASIC utilizó el parámetro; RND(6)
devolvió un número entero de 0 a 5. [40]
Instrumentos de cuerda
El manejo de cadenas de Integer BASIC se basó en el sistema en HP BASIC. Esto trató las variables de cadena como matrices de caracteres que debían DIM
editarse antes de su uso. Esto es similar al modelo en C [41] o Fortran 77 . [42] Esto contrasta con los BASIC similares a MS donde las cadenas son un tipo intrínseco de longitud variable. [43] Antes de que los BASIC derivados de MS se convirtieran en el estándar de facto , este estilo no era infrecuente; North Star BASIC [44] y Atari BASIC [45] utilizaron el mismo concepto, al igual que otros.
Las cadenas en Integer Basic usaban una cantidad fija de memoria independientemente del número de caracteres que se usaran en ellas, hasta un máximo de 255 caracteres. [46] Esto tenía la ventaja de evitar la necesidad de recolectar basura del montón que era notoriamente lento en MS BASIC [h] pero significaba que las cadenas que eran más cortas que la longitud declarada se desperdiciaban.
El acceso a la subcadena se proporcionó a través de la sintaxis de corte de matriz . Por ejemplo, PRINT A$(0,5)
imprimió los primeros seis caracteres de A $, caracteres del 0 al 5. [48] [48] [i] La concatenación se proporcionó usando el mismo sistema, A$(5)="ABC"
reemplazó cualquier carácter que comenzara en la posición 5 con la cadena "ABC". [49] Esto contrasta con el manejo de cadenas de estilo DEC / MS que usa funciones de cadena como MID$
acceder a subcadenas y +
para la concatenación. [50] [j]
Como muchas de las características que proporcionarían las funciones de cadena se proporcionaron en su lugar mediante el corte de matriz, la selección de funciones de cadena se redujo. LEN
devolvió la longitud de una cadena [46] y ASC
devolvió el código numérico ASCII para la primera letra de una cadena. [51] Le faltaba un equivalente del CHR$
que devolvía el carácter ASCII con un código numérico dado. [52]
Gráficos y sonido
Cuando se lanzó, el único controlador de juegos para Apple era el controlador de paleta , que tenía dos controladores en un solo conector. La posición del controlador se puede leer usando la PDL
función, pasando el número de controlador, 0 o 1, como , devolviendo un valor entre 0 y 255. [53] [k]A=PDL(0):PRINT A
Las máquinas de Apple no incluían hardware de sonido dedicado, solo un simple "beeper". La producción de sonidos se logró mediante PEEK
la ubicación mapeada de memoria del altavoz, -16336. [l] Repetidamente PEEKing ese valor produjo tonos, y el manual sugirió usar una expresión matemática para hacer esto, como . [55]S=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)
El soporte para gráficos fue más detallado. El modo de gráficos se activó con la GR
declaración y se desactivó con TEXT
. [56] El dibujo era modal y normalmente se iniciaba emitiendo un comando para cambiar el color, lo cual se lograba estableciendo una pseudovariable; COLOR=12
establecería el color del dibujo en 12, verde claro. Entonces se podría PLOT 10,10
producir una sola mancha de ese color, [57] HLIN 0,39 AT 20
para dibujar una línea horizontal en la fila 20 que abarcara la pantalla, o VLIN 5,15 AT 7
para dibujar una línea vertical más corta hacia abajo de la columna 7. [58] A=SCRN X,Y
devolvió el color de la pantalla en X , Y. [51] [m]
De entrada y salida
Integer BASIC carecía de comandos de entrada / salida personalizados, y también carecía de la DATA
declaración y el asociado READ
. Para obtener datos dentro y fuera de un programa, la funcionalidad de entrada / salida se redirigió a una ranura de tarjeta seleccionada con PR#x
y IN#x
, que redirigió la salida o la entrada (respectivamente) a la ranura numerada. A partir de ese momento, los datos se pueden enviar a la tarjeta mediante PRINT
comandos convencionales y leerlos mediante INPUT
. [51]
Otras notas
Integer BASIC incluía una TAB
función, que colocaba el cursor en una columna dada de 0 a 39. Se diferenciaba de las versiones que se encuentran en la mayoría de los BASIC en que era un comando con un número siguiente, a diferencia de una función con el valor entre paréntesis; uno movería el cursor a la columna 10 usando TAB 10
en Integer BASIC [59] mientras que en MS esto sería PRINT TAB(10)
. Además, el VTAB
comando funcionó de manera similar TAB
pero agregó espacios verticales en lugar de horizontales. Por razones inexplicables, en este caso las coordenadas eran de 1 a 24 en lugar de 0 a 23. [60]
Integer BASIC incluyó un POP
comando para salir de los bucles. [51] Esto sacó el elemento superior de la pila FOR. Atari BASIC también soportó el mismo comando, [61] mientras que North Star BASIC usó EXIT
. [62]
Las ROM BÁSICAS de Integer también incluían un monitor de código de máquina , un "mini ensamblador " y un desensamblador para crear y depurar programas en lenguaje ensamblador . Wozniak ensambló a mano el monitor como el primer programa de Apple II y luego lo usó para escribir Integer BASIC. [63] [64] [2]
Palabras reservadas
Apple BASIC
Apple BASIC tenía los siguientes comandos: [65]
AUTO val1 , val2 CLR [ CLEAR ] DEL val1 , val2 LIST val1 , val2 RUN val1 SCR [ SCRATCH / NEW ] HIMEM = expr LOMEM = expr ( LET ) var = expr INPUT ( prompt ,) var1 , var2 ... PRINT item ( s ) TAB expr FOR var = expr1 TO expr2 STEP expr3 NEXT var IF expr THEN instrucción IF expr THEN número de línea GOTO expr GOSUB expr RETURN DIM var1 ( expr1 ), var2 ( expr2 ) ... texto REM END POKE expr1 , expr2 CALL expr Funciones: ABS (), SGN (), PEEK (), RND (), LEN ()
Entero BÁSICO
Entero BASIC agregó lo siguiente: [66] [67]
COLOR = expr CON [ CONTINUAR ] DSP GR HLIN expr1 , expr2 AT expr3 MAN NEW [ reemplaza SCR ] NOTRACE PLOT expr1 , expr2 POP TEXT TRACE VLIN expr1 , expr2 AT expr3 Función: ASC (), PDL (), SCRN ( X , Y )
Implementación
Integer BASIC lee las líneas escritas por el usuario desde un búfer y las ejecuta a través de un analizador que genera una serie de tokens . Como parte de este proceso, se detectaron y enumeraron errores de sintaxis simples . Si el análisis se realizó correctamente, el número de línea (si estaba presente) se convirtió del formato decimal ASCII en un entero de 16 bits y las palabras clave en un token de entero de 7 bits. [63]
Algunas palabras clave estaban representadas por varios tokens; por ejemplo, donde Microsoft BASIC tenía un token para la palabra clave PRINT
, Integer BASIC tenía tres tokens: uno si la palabra clave no iba seguida de argumentos, uno si seguía una expresión aritmética y otro si seguía una cadena literal. [68]
Los literales numéricos, como el valor 500, se convirtieron en su representación binaria de 16 bits (dos bytes), en este caso, $ 01F4 hexadecimal . Para indicar que se trataba de un valor y no de una palabra clave, se insertó un solo byte entre $ B0 y $ B9 delante del valor de dos bytes. [n] Los literales de cadena, como "HOLA MUNDO" se convirtieron en cambio estableciendo el bit alto de cada carácter para que A
se almacenara como $ C1. Los nombres de las variables se convirtieron de la misma manera, con las letras convertidas para tener su bit alto activado y cualquier dígito en el nombre representado por los correspondientes $ B0 a $ B9, de modo que la variable A5
se convertiría en $ C1B5. [63]
Si la línea se ingresó sin un número de línea, el código se ejecutó directamente desde el búfer. Si tenía un número de línea, se copiaba del búfer al área de almacenamiento del programa. [63]
El intérprete de tiempo de ejecución utilizó dos pilas para la ejecución: una para las palabras clave de declaración y la otra para evaluar los parámetros. A cada declaración se le dieron dos prioridades: una que indicaba dónde debería ocurrir en una operación de varios pasos, como una serie de operaciones matemáticas para proporcionar el orden de las operaciones , y otra que sugería cuándo debería ocurrir la evaluación, por ejemplo, calcular los valores internos de una operación . fórmula entre paréntesis. Cuando se encontraron variables, se analizó su nombre y luego se buscó en el área de almacenamiento de variables. Si no se encontró, se agregó al final de la lista. La dirección del almacenamiento de la variable, quizás recién creada, se colocó en la pila de evaluación. [63]
Detalles de la ROM
DULCES 16
Además de Integer BASIC, las ROM de Apple contenían un lenguaje ensamblador personalizado conocido como SWEET16 . SWEET16 se basa en códigos de bytes que se ejecutan dentro de una máquina virtual simple de 16 bits . Este modelo se utilizó para que la memoria pudiera direccionarse mediante punteros indirectos de 16 bits y funciones matemáticas de 16 bits calculadas sin la necesidad de traducirlas al código 6502 de 8 bits de múltiples instrucciones subyacente. Toda la máquina virtual se escribió en solo 300 bytes. El código puede llamar a SWEET16 emitiendo una llamada de subrutina y luego volver al código 6502 normal cuando se completan las operaciones de 16 bits. [69]
SWEET16 no fue usado por el código BASIC central, pero luego fue usado para implementar varias utilidades. Entre ellos se destacó la rutina de renumeración de líneas, que se incluyó en la ROM Programmer's Aid # 1, agregada a modelos posteriores de Apple II y disponible para la instalación del usuario en ejemplos anteriores. [70]
Punto flotante
Aunque Integer BASIC contenía sus propias rutinas matemáticas, las ROM de Apple II también incluían una biblioteca de punto flotante completa ubicada en la memoria ROM entre $ F425-F4FB y $ F63D-F65D. El código fuente se incluyó en el manual de Apple II. Los programas BÁSICOS que requieren cálculos de punto flotante podrían CALL
incorporarse a estas rutinas. [71]
Actuación
Debido a que Integer BASIC procesó más del código fuente original en tokens, el tiempo de ejecución fue más rápido que las versiones que requerían un análisis de tiempo de ejecución adicional. A modo de comparación, Tiny BASIC tokenizó solo el número de línea, [72] mientras que MS BASIC solo tokenizó las palabras clave. Entonces, por ejemplo, mientras Integer BASIC convertiría la línea por 100 GOTO 200
completo en tokens que podrían leerse y ejecutarse inmediatamente, en MS BASIC solo se tokenizaría el número de línea y GOTO, el "100" se dejó en su formato original y tuvo que volver a analizado en un entero de 16 bits cada vez que se encuentra la línea. [73]
Además, trabajar únicamente con matemáticas enteras proporciona otro impulso importante en la velocidad. Esto se debe tanto al formato más pequeño de 16 bits que requiere menos accesos a la memoria, como a la eliminación de la necesidad de mover el decimal de coma flotante después de los cálculos. Como muchas pruebas de computadora de la época eran pequeñas y, a menudo, realizaban cálculos matemáticos simples que no requerían punto flotante, Integer BASIC derrotó a la mayoría de los demás BASIC. [o]
En uno de los primeros puntos de referencia de microcomputadoras conocidos, los puntos de referencia de Rugg / Feldman , Integer BASIC fue más del doble de rápido que Applesoft BASIC en la misma máquina. [75] En Byte Sieve , donde las matemáticas eran menos importantes pero el acceso a la matriz y el rendimiento de bucle dominaban, Integer BASIC tomó 166 segundos mientras que Applesoft tomó 200. [76] No apareció en Creative Computing Benchmark , que se publicó por primera vez en 1983. , momento en el que Integer BASIC ya no se suministra de forma predeterminada. [77]
La siguiente serie de pruebas, tomada de los dos artículos originales de Rugg / Feldman, [75] [74] muestra el rendimiento de Integer en relación con el BASIC derivado de MS en la misma plataforma.
Sistema | UPC | BÁSICO | Prueba 1 | Prueba 2 | Prueba 3 | Prueba 4 | Prueba 5 | Prueba 6 | Prueba 7 |
---|---|---|---|---|---|---|---|---|---|
Manzana II | 6502 a 1 MHz | Entero BÁSICO | 1.3 | 3.1 | 7.2 | 7.2 | 8.8 | 18,5 | 28,0 |
Manzana II | 6502 a 1 MHz | Applesoft BASIC | 1.3 | 8.5 | 16,0 | 17,8 | 19,1 | 28,6 | 44,8 |
Código de muestra
La siguiente es una versión de Breakout escrita en la versión 1977 de Integer BASIC para Apple II, que se incluyó en el Apple II Mini Manual. [78] Hay una serie de errores conocidos en esta versión. [79]
El programa comienza configurando la pantalla en TEXT
y luego CALL -936
para borrar la pantalla. Las líneas 20 a 27, y las subrutinas asociadas en las líneas 100 y 200, son el código de selección de color que Wozniak demostró para Jobs. La línea 30 configura la ventana de texto con POKE 32,20
[p] y luego usa una serie de declaraciones COLOR
y VLIN
para dibujar el campo de juego y la visualización de la puntuación en la ventana de texto. Todo el bucle principal va desde la línea 40 hasta la 90 con subrutinas asociadas. Otra gran cantidad de código cerca del final del programa tiene que ver con la impresión de la puntuación final. Otras notas de interés incluyen las #
comparaciones (no iguales) en la línea 20, la producción de un sonido de tono alto usando una cadena de PEEK
s en la línea 65 en comparación con un tono más bajo usando un bucle en la línea 70, y la mezcla de gráficos y texto en una sola pantalla. [q]
5 TEXTO : LLAME -936 : VTAB 4 : TAB 10 : IMPRIMIR "*** JUEGO EXTRAORDINARIO ***" : IMPRIMIR 7 IMPRIMA "EL OBJETO ES DESTRUIR TODOS LOS LADRILLOS CON 5 BOLAS" : PARA N = 1 A 7000 : SIGUIENTE N 10 DIM A $ ( 20 ), B $ ( 20 ) : GR : PRINT : INPUT "HOLA, ¿CUÁL ES TU NOMBRE?" , A $ : A = 1 : B = 13 : C = 9 : D = 6 : E = 15 : IMPRIMA "COLORES ESTÁNDAR" ; A $ ; 20 ENTRADA "?" , B $ : SI B $ # "N" Y B $ # "NO" ENTONCES 30 : PARA I = 0 A 39 : COLOR = I / 2 * ( I < 32 ) : VLIN 0 , 39 AT I 25 SIGUIENTE I : POKE 34 , 20 : IMPRIMIR : IMPRIMIR : IMPRIMIR : PARA I = 0 A 15 : VTAB 21 + I MOD 2 : TAB I + I +1 : IMPRIMIR I ; : SIGUIENTE I : POKE 34 , 22 : VTAB 24 : IMPRIMIR : IMPRIMIR "FONDO" ; 27 GOSUB 100 : A = E : IMPRIMA "INCLUSO LADRILLO" ; : GOSUB 100 : B = E : IMPRIMIR "LADRILLO IMPAR" ; : GOSUB 100 : C = E : IMPRIMIR "PADEL" ; : GOSUB 100 : D = E : IMPRIMA "BOLA" ; : GOSUB 100 30 POKE34 , 20 : COLOR = A : PARA I = 0 A 39 : VLIN0 , 39 ATI : SIGUIENTE I : PARA I = 20 A 34 PASO 2 : TAB I +1 : IMPRIMIR I / 2-9 ; : COLOR = B : VLIN 0 , 39 AT I : COLOR = C : PARA J = I MOD 4 A 39 PASO 4 35 VLIN J , J +1 AT I : SIGUIENTE J , I : TAB 5 : PRINT "SCORE = 0" : PRINT : PRINT : POKE 34 , 21 : S = 0 : P = S : L = S : X = 19 : Y = 19 : X = 19 40 COLOR = A : PARCELA X , Y / 3 : X = 19 : Y = RND ( 120 ) : V = -1 : W = RND ( 5 ) -2 : L = L +1 : SI L > 5 ENTONCES 140 : PESTAÑA 6 : IMPRIMA "NÚMERO DE BOLA" ; L : IMPRIMIR : PARA I = 1 A 100 : GOSUB 200 : SIGUIENTE I : M = 1 : N = 0 50 J = Y + W : SI J > = 0 Y J < 120 ENTONCES 60 : W = - W : J = Y : PARA I = 1 A 6 : K = PEEK ( -16336 ) : SIGUIENTE I 55 SI PEEK ( -16287 )> 127 ENTONCES SW = 1 - SW 60 I = X + V : IF I < 0 ENTONCES 400 : GOSUB 200 : COLOR = A : K = J / 3 : IF I > 39 ENTONCES 70 : IF SCRN ( I , K ) = A ENTONCES 90 : IF I ENTONCES 120 : N = N +1 : V = ( N > 9 ) +1 : W = ( K - P ) * 2-5 : M = 1 65 Z = PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) : GOTO 90 70 PARA I = 1 A 6 : M = PEEK ( -16336 ) : SIGUIENTE I : I = X : M = 0 80 V = - V 90 PARCELA X , Y / 3 : COLOR = E : PARCELA I , K : X = I : Y = J : GOTO 50 99 PRINT "INVALID. REENTER" ; 100 ENTRADA "COLOR (0 A 15)" , E : SI E < 0 O E > 15 ENTONCES 99 : VOLVER 120 SI M ENTONCES V = ABS ( V ) : VLIN K / 2 * 2 , K / 2 * 2 + 1 AT I : S = S + I / 2-9 : VTAB 21 : TAB 13 : IMPRIMIR S 123 Q = PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 ) 124 SI S < 720 ENTONCES 80 130 IMPRIMA "FELICIDADES, GANAS". : GOTO 150 140 IMPRIMA "SU PUNTUACIÓN DE" ; S ; "ES" ; : GOTO 141 + S / 100 141 IMPRIMA "TERRIBLE!" : GOTO 150 142 IMPRIMA "PESOSO". : GOTO 150 143 IMPRIMA "POBRE". : GOTO 150 144 IMPRIMIR "JUSTO". : GOTO 150 145 IMPRIMA "BUENO". : GOTO 150 146 IMPRIMA "MUY BUENO". : GOTO 150 147 IMPRIMA "EXCELENTE". : GOTO 150 148 IMPRESIÓN "CASI PERFECTA". 150 IMPRIMIR "MISMOS COLORES" ; : GOTO 20 200 SI SW ENTONCES 220 : Q = ( PDL ( 0 ) -5 ) / 6 : SI Q < 0 ENTONCES Q = 0 205 SI Q > = 34 ENTONCES Q = 34 : COLOR = D : VLIN Q , Q +5 EN 0 : COLOR = A : SI P > Q ENTONCES 210 : SI Q ENTONCES VLIN 0 , Q -1 EN 0 : P = Q : REGRESO 210 SI P = Q ENTONCES REGRESO : SI Q # 34 ENTONCES VLIN Q +6 , 39 EN 0 : P = Q : REGRESO 220 Q = ( Y -5 ) / 3 + RND ( 3 ) * SGN ( W ) * ( X < 10 Y V < 0 ) : SI Q < 0 ENTONCES Q = 0 : GOTO 205 400 PARA I = 1 A 80 : Q = PEEK ( -16336 ) : SIGUIENTE I : GOTO 40
Notas
- ^ O como loexpresó Bill Gates , "BASIC más poderoso ... usando punto flotante". [3]
- ^ Un IBM 370/155 costó más de $ 2 millones en 1970 (equivalente a $ 13,000,000 en 2020). [6]
- ^ Tymshare cobraba alrededor de $ 10 por hora (equivalente a $ 67 en 2020) por acceder a sus sistemas, [7] mientras que se podían encontrar servicios más pequeños por alrededor de $ 5. [8]
- ^ El manejo de cadenas no era "suyo", sino el mismo sistema utilizado por HP BASIC.
- ^ Para dejar en claro qué BASIC se estaba ejecutando, Applesoft usó el
]
indicador. - ^ En lo que MS se refirió de manera más descriptiva como " modo inmediato ".
- ^ Helmers dice que el número de línea más bajo es 1. [25]
- ^ Y completamente roto en algunas versiones. [47]
- ^ HP también permitió [y] en lugar de (y).
- ^ También contrasta con Dartmouth BASIC, que usó el
CONVERT
comando para convertir una cadena en una matriz de valores ASCII que luego el usuario manipuló y volvió a convertir al formato de cadena con un segundoCONVERT
. - ^ El manual sugiere, pero no establece rotundamente, que el rango real de valores es menor de 0 a 255. [53]
- ^ El número negativo es un efecto secundario de los enteros que se almacenan en formato con signo, por lo que cualquier ubicación de memoria por encima de 32767 aparece como un valor negativo en BASIC. [54]
- ^ Tenga en cuenta la extraña sintaxis del SCRN, que técnicamente es una función porque devuelve un valor, pero no usa una sintaxis similar a la de una función que sería
A=SCRN(X,Y)
. - ^ El primer dígito del valor original se usó para seleccionar un valor de 0 a 9, por lo que en este ejemplo, el token sería $ B5 para el primer dígito de 500.
- ^ Bill Gates se quejó de esto, afirmando que era injusto comparar Integer BASIC con un BASIC "real" como MS. [74]
- ^ Lo que significa que el texto comienza en la línea 20 de 24 líneas en la pantalla, dejando cuatro líneas de texto en la parte inferior.
- ^ Para obtener una lista de las diversas CALL, PEEK y POKE que realizaron operaciones comunes en el Apple II, consulte Peeks, Pokes, Calls And Programming Notes , Charles Turley, 15 de diciembre de 1996.
Referencias
Citas
- ^ a b c d e f g h i Wozniak, 2014 .
- ↑ a b Weyhrich, 2001 .
- ^ Rugg, Tom; Feldman, Phil (octubre de 1977). "Comparaciones de tiempos BÁSICOS ... revisada y actualizada" . Kilobaud . págs. 20-25.
- ^ Baum, Allan (18 de julio de 2016). "Historia Oral de Allen Baum" (Entrevista). Entrevistado por David Brock. pag. 12.
- ^ "Pasando la marca de los 10 años" . Revista MEASURE . Hewlett Packard. Octubre de 1976.
- ^ Cooney, Michael. "La historia (en su mayoría) genial del mainframe de IBM" . ARN .
- ^ Bourne, Charles; Hahn, Trudi Bellardo (agosto de 2003). Una historia de los servicios de información en línea, 1963–1976 . pag. 387. ISBN 9780262261753.
- ^ Barry, Tim (27 de abril de 1981). "Volver a BÁSICO" . InfoWorld . pag. 7.
- ↑ a b Williams y Moore , 1984 , p. A71.
- ^ Fisk, Nathan (2009). Comprensión de la piratería en línea . ABC-CLIO. pag. 14. ISBN 9780313354748.
- ^ Wozniak, 1977 .
- ^ Weyhrich 2001 , El [Integer] BASIC, que enviamos con el primer Apple II, nunca se ensambló, nunca. Había una copia manuscrita, todo manuscrito, todo ensamblado a mano ...
- ^ "El Proyecto Apple 1" .
- ^ "Apple I Computer Ad" .
- ^ "Juegos clásicos: una historia completa de rupturas" . GameSpy. Archivado desde el original el 8 de julio de 2012 . Consultado el 19 de abril de 2010 .
- ^ Raskin, Roy; Wozniak, Steven (agosto de 1976). "Rutinas de punto flotante para el 6502" . Dr. Dobbs . págs. 17-19.
- ^ Manual de referencia de Apple II . Computadora Apple. Enero de 1978. págs. 94–95.
- ↑ a b Wozniak, 2018 .
- ^ Hertzfeld 1985 .
- ^ Raskin 1978 , p. 11.
- ^ Raskin 1978 , p. 12.
- ^ Raskin 1978 , p. 46.
- ^ Raskin 1978 , págs. 49-55.
- ^ Raskin 1978 , p. 48.
- ↑ a b Helmers , 1978 , p. 24.
- ↑ a b Raskin , 1978 , p. 118.
- ^ Raskin 1978 , págs. 65-67.
- ^ Raskin 1978 , p. 124.
- ^ Wozniak 1977 , "Este modo mixto proporciona una cuadrícula de gráficos en color de 40 por 40 más cuatro líneas de texto desplazable en la parte inferior de la pantalla".
- ^ Raskin 1978 , p. 100.
- ^ Raskin 1978 , p. 15.
- ^ Raskin 1978 , p. 52.
- ^ Raskin 1978 , p. 107.
- ^ Raskin 1978 , págs. 100,101.
- ^ Raskin 1978 , p. 38.
- ^ Raskin 1978 , p. 27.
- ^ Raskin 1978 , p. 61.
- ^ Raskin 1978 , p. 94.
- ^ Raskin 1978 , p. 40.120.
- ^ Raskin 1978 , p. 40.
- ^ "Cuerdas" . learn-c.org .
- ^ Brooks, Steve. "Caracteres y cadenas en Fortran" (PDF) . Universidad de Hawaii .
- ^ "Variables enteras, de coma flotante y de cadena". Manual del programador C64 . Comodoro.
- ^ North Star BASIC versión 6 (PDF) . North Star Corporation. 1977.
- ^ { El Manual de referencia de ATARI BASIC . Atari Inc. 1980.
- ↑ a b Raskin , 1978 , p. 89.
- ^ "Crea tu propia versión de Microsoft BASIC" .
- ↑ a b Raskin , 1978 , p. 88.
- ^ Raskin 1978 , p. 92.
- ^ Altair 8080 manual básico (PDF) . MITS. Abril de 1977. p. 30.
- ↑ a b c d Raskin , 1978 , p. 120.
- ^ Mini 1977 , p. 17.
- ↑ a b Raskin , 1978 , p. 36.
- ^ Mini 1977 , p. 18.
- ^ Raskin 1978 , p. 84.
- ^ Raskin 1978 , p. 31.
- ^ Raskin 1978 , p. 32.
- ^ Raskin 1978 , p. 33.
- ^ Raskin 1978 , p. 73.
- ^ Raskin 1978 , p. 74.
- ^ Manual de referencia de Atari BASIC (PDF) . Atari. 1983. p. 25.
- ^ North Star BASIC versión 6 (PDF) . North Star Corporation. 1977. p. 8.
- ↑ a b c d e Wozniak , 1977 , p. 42.
- ^ Helmers 1978 , p. 18.
- ^ "MANUAL BÁSICO DEL USUARIO DE APPLE PRELIMINAR" (PDF) .
- ^ "MANUAL BÁSICO DE PROGRAMACIÓN APPLE II" .
- ^ "MANUAL DE REFERENCIA DE APPLE II" (PDF) .
- ^ Paul R. Santa-Maria. "Desmontaje básico de Apple II Entero" (PDF) . Consultado el 14 de septiembre de 2020 .
- ^ Wozniak , 1977 , p. 43.
- ^ Ayuda para programadores de Apple (PDF) . Manzana. 1978.
- ^ Manual de referencia de Apple II (PDF) . Enero de 1978. págs. 94–95.
- ^ Allison, Dennis (1976). "Construye tu propio BÁSICO" . Diario del Dr. Dobb . Vol. 1 no. 1. p. 11.
- ^ Hardiman, Roger. "Altair BASIC 3.2 (4K) - Desmontaje anotado" . pag. 1,11. Archivado desde el original el 5 de noviembre de 2001.
- ^ a b Rugg, Tom; Feldman, Phil (octubre de 1977). "Comparaciones de tiempos BÁSICOS ... revisada y actualizada" . Kilobaud . págs. 20-25.
- ^ a b Rugg, Tom; Feldman, Phil (junio de 1977). "Comparaciones de tiempos BÁSICOS ... información para fanáticos de la velocidad" . Kilobaud . págs. 66–70.
- ^ Gilbreath, Jim (septiembre de 1981). "Un punto de referencia del lenguaje de alto nivel" . Byte . pag. 192.
- ^ Ahl, David (noviembre de 1983). "Prueba de comparación de referencia" . Computación creativa . pag. 260.
- ^ Mini 1977 , págs. 65-67.
- ^ "Breakout, anotado" . GitHub .
Bibliografía
- Mini Manual de Apple II . Manzana. 1977.
- Hertzfeld, Andy (junio de 1985). "La triste historia de MacBasic" . Folklore .
- Helmers, Carl (marzo de 1978). "Una manzana a byte" . Byte . págs. 18-24, 30-32, 35, 40-46.
- Raskin, Jef (1978). Manual de programación básico de Apple II (PDF) . Computadora Apple.
- Weyhrich, Steven (12 de diciembre de 2001). "Historia parte 3: El Apple II" . Consultado el 16 de septiembre de 2007 .
- Wozniak, Steven (mayo de 1977). "Descripción del sistema / Apple-II" . Byte . págs. 34–43.
- Williams, Gregg; Moore, Rob (diciembre de 1984). "La historia de Apple / Parte 1: Historia temprana" . Byte . págs. A67 – A71 . Consultado el 23 de octubre de 2013 .
- Wozniak, Steven (1 de mayo de 2014). "Cómo Steve Wozniak escribió BASIC para la Apple original desde cero" . Gizmodo .
- Wozniak, Steven (3 de enero de 2018). "Apple BASIC" . Woz.org .
enlaces externos
- Desmontaje básico de Apple II Integer , versión descompilada manualmente por Paul Santa-Maria
- INTEGER BASIC Reference - Del sitio web "Apple II Programmer's Reference" de Landsnail.com
- Tarjeta de firmware Apple-1 BASIC diseñada por John Calande, esquema incluido