stringtranslate.com

Entero BÁSICO

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 Apple I en 1976, luego incluido en ROM en 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]

El único tipo de datos numérico era el número entero; No se admitían números de coma flotante . El uso de números enteros permitió almacenar números en un formato de 16 bits mucho más compacto que podía leerse y procesarse más rápidamente que los formatos de punto flotante de 32 o 40 bits que se encontraban en la mayoría de los BASIC de la época. Esto lo hizo tan rápido que Bill Gates se quejó cuando superó a Microsoft BASIC en los puntos de referencia. Sin embargo, esto también limitó su aplicabilidad como lenguaje de propósito general. [a]

Otra diferencia con otros BASIC de la época 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 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 basados ​​en HP, como North Star BASIC y Atari BASIC . Contrastaba con el estilo encontrado en los BASIC derivados de DEC , incluido Microsoft BASIC .

El lenguaje se desarrolló inicialmente con el nombre GAME BASIC y se lo 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 fue eliminado gradualmente a favor de Applesoft BASIC a partir del Apple II Plus en 1979.

Historia

En su último año de secundaria , el profesor de electrónica de Steve Wozniak consiguió que los estudiantes más destacados de la clase tuvieran prácticas en empresas de electrónica locales. 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 tres días de acceso, se pidió a los estudiantes que escribieran cartas explicando 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 trabajaba en Hewlett-Packard (HP) ejecutando simulaciones de diseños de chips y distribución lógica para calculadoras. [1] HP hizo grandes avances en el mercado de las minicomputadoras con sus máquinas HP serie 2000 ejecutando una versión personalizada de tiempo compartido de BASIC . Por aproximadamente 100.000 dólares , se podría construir una máquina razonablemente equipada que pudiera soportar entre 16 y 32 usuarios ejecutando programas BÁSICOS. [5] Si bien era caro, todavía era 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 de escritorio por 10.000 dólares (equivalente a 75.000 dólares en 2022) que también ejecutaba BASIC, al que Wozniak tenía acceso. [9]

Olí el viento y supe que la clave para que mi computadora fuera buena (popular) era incluir un lenguaje de alto nivel y que tenía que ser BÁSICO.

Steve Wozniak [1]

En enero de 1975 se anunció el Altair 8800 y desató la revolución de las microcomputadoras . En marzo, Wozniak asistió a la primera reunión del Homebrew Computer Club y comenzó a formular el diseño de su propia computadora. Uno de los software más importantes para Altair, y uno de los más pirateados , fue Altair BASIC de la recién formada Microsoft . [10] Wozniak concluyó que su máquina tendría que tener un BASIC propio, que, con suerte, sería el primero para el procesador MOS Technology 6502 . Como el idioma necesitaba 4 KB de RAM, hizo que esa fuera 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 del BASIC de Microsoft para Altair. Basándose en estas fuentes, Wozniak comenzó a esbozar un diagrama de sintaxis para el idioma. El diseño inicialmente incluía soporte de punto flotante, pero aún con la esperanza de publicar el primer BASIC en el 6502 y convertirse en "una estrella", decidió abandonar el punto flotante y escribir un sistema matemático entero separado para ahorrar algunas 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 el desarrollo como "JUEGO BÁSICO", Wozniak escribió el código a mano, traduciendo las instrucciones del código ensamblador a sus equivalentes en 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, utilizó 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]

Fue el día más satisfactorio de mi vida... Demostré Breakout [en Homebrew], totalmente escrito en BASIC... Después de diseñar juegos arcade de hardware, supe que poder programarlos en BASIC iba a cambiar el mundo.

Steve Wozniak [9]

Anuncio de la computadora Apple I que destaca la política de Apple de proporcionar software gratuito o económico para sus computadoras.

A principios de 1976, en los anuncios de su computadora Apple I , Apple Inc afirmó que "nuestra filosofía es proporcionar software para nuestras máquinas de forma gratuita o a un costo mínimo" [13] y "sí, amigos, Apple BASIC es gratuito". [14] Esto se imprimió poco después de la infame Carta abierta a los aficionados de Bill Gates que sugería que la gente le estaba robando copiando versiones de Altair BASIC . [15]

Wozniak había ayudado a Steve Jobs , que trabajaba para Atari , con un rediseño de Breakout . [16] En algún momento posterior, decidió ver si se podía escribir el juego en BASIC. Agregó comandos para leer los controladores de paletas y, tras una serie de ediciones rápidas, tuvo una versión del juego en funcionamiento. Para mejorar su jugabilidad, añadió un altavoz para hacer clics cuando la pelota golpea las cosas. Mientras se lo mostraba a 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 podía crear juegos 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 del Dr. Dobb's Journal . [17] Esta biblioteca pasó a formar parte posteriormente de las ROM para Apple II . [18] Wozniak comenzó a trabajar en la adaptación del código de punto flotante al 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 asistiría al Consumer Electronics Show en Las Vegas si el sistema de disco estuviera listo a tiempo, por lo que Wozniak y Randy Wigginton trabajaron en él sin parar durante las vacaciones de 1977. [19]

Cuando volvió al tema del punto flotante en BASIC, Jobs se quejó de que estaba tardando demasiado. Sin que Wozniak lo supiera, la compañía ya había concertado una licencia con Microsoft para recibir su versión 6502 recientemente completada del código Altair. Al examinar el código de MS, Wozniak decidió que era más fácil agregar soporte gráfico a su código que agregar su propio BASIC de punto flotante, ya que este último requería parchear manualmente el código de máquina original mientras que el de MS estaba escrito en ensamblador y se modificaba más fácilmente. El desarrollo del BASIC de Apple terminó a favor de lo que se convirtió en Applesoft BASIC . Wozniak señaló más tarde: "Mi mayor decepción fue recurrir a funciones de cadena horribles como y en lugar de las mías". [19] [d]LEFT$(VAR, 5)MID$(VAR2,5,3)

Cuando Apple II se lanzó en el verano de 1977, Integer BASIC se entregó 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. [20]

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 se ejecutaba BASIC, se mostraba un > símbolo del sistema donde el usuario podía ingresar declaraciones. [21] [e] A diferencia de las plataformas de computadoras domésticas posteriores , BASIC no era el entorno predeterminado cuando inicié Apple, normalmente se iniciaba en el monitor . BASIC se inició presionando Ctrl+ . [22]BReturn

Las declaraciones que se ingresaron con números iniciales se ingresan en el almacenamiento del programa para "ejecución diferida", [23] ya sea como nuevas líneas o reemplazando cualquiera que pudiera haber tenido el mismo número anteriormente. [24] Las declaraciones que se ingresaban sin un número de línea se denominaban comandos y se ejecutaban inmediatamente. [f] Los números de línea pueden ser de 0 a 32767, [25] [g] y las líneas pueden contener hasta 128 caracteres. [27]

Integer BASIC también incluía el AUTOcomando para ingresar automáticamente números de línea en un número inicial determinado como AUTO 100, sumando 10 al último número con cada nueva línea. AUTO 300,5comenzaría a numerar en la línea 300 de cinco en cinco; 300, 305, etc. La numeración automática se desactivó ingresando MAN. [28]

Una característica interesante del editor era que se podía reservar una sección de la pantalla como "ventana", donde se realizaban las actualizaciones en vivo. Normalmente, esto era toda la pantalla, pero podría limitarse a un área más pequeña ingresando POKEvalores en las ubicaciones de memoria 32 a 35. [29] Esta función podría usarse para crear un área de texto editable mientras el resto de la pantalla estaba en modo de gráficos. . [30]

Depuración

Como en la mayoría de los BASIC, los programas se iniciaban con el RUNcomando y, como era común, podían dirigirse a un número de línea particular como RUN 300. [31] La ejecución podría detenerse en cualquier momento usando + [32] y luego reiniciarse con tinue, a diferencia del método más típico . [33]CtrlCCONCONT

Para la ejecución paso a paso, la TRACEinstrucción podría usarse en el símbolo del sistema o colocarse dentro del programa mismo. Cuando se activó, se imprimieron los números de línea para cada línea que visitó el programa. La función se puede desactivar nuevamente con NOTRACE. [34]

Una característica algo inusual fue el DSPcomando (para "mostrar"). Cuando se encuentra en un programa, a partir de ese momento se mostrará cualquier cambio en el valor de una variable. Por ejemplo, DSP Xmostraría el valor de X cada vez que cambiara, junto con el número de línea donde ocurrió el cambio. [35] Al igual que con TRACE, DSP se desactivó con NODSP. [26]

Nombres de variables

Donde Dartmouth BASIC y HP-BASIC limitaron los nombres de las 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 permitió una letra seguida de una letra o dígito opcional (ignorando los caracteres posteriores), Integer BASIC era inusual al admitir cualquier nombre de variable de longitud (por ejemplo, SUM, GAMEPOINTS, PLAYER2). La única advertencia era que los nombres de las variables no podían contener palabras reservadas; por ejemplo, ESTECOLOR y COLORIDO eran nombres de variables no válidos porque contenían la palabra clave COLOR, un comando del sistema. [36] Además, las líneas estaban limitadas a 128 caracteres, por lo que los nombres de las variables no podían exceder esa longitud. [27]

Matemáticas

Integer BASIC, como su nombre lo indica, utiliza números enteros como base para su paquete matemático. Estos se almacenaban internamente como un número de 16 bits, little-endian (como lo 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. [37]

Los operadores infijos incluyen +(suma), -(resta), *(multiplicación), /(división), MOD (resto) y exponente usando el ^carácter. Operadores binarios incluidos AND, ORy NOT. Las comparaciones binarias incluyeron el conjunto estándar de =, >, <, >=, <=y <>el inspirado en HP #, que era equivalente a <>. [38]

Sólo se permitieron matrices unidimensionales, limitadas en tamaño únicamente por la memoria disponible. [39] Las funciones matemáticas eran escasas; solo se admitieron ABS(valor absoluto), SGN(signo) y (número aleatorio). [40] A diferencia de las versiones derivadas de MS, donde el parámetro se ignoraba y siempre devolvía un valor 0..<1, Integer BASIC usaba el parámetro; devolvió un número entero de 0 a 5. [41]RNDRNDRND(6)

Instrumentos de cuerda

El manejo de cadenas de Integer BASIC se basó en el sistema de HP BASIC. Esto trataba las variables de cadena como matrices de caracteres que debían DIMeditarse antes de su uso. Esto es similar al modelo en C [42] o Fortran 77 . [43] Esto contrasta con los BASIC similares a MS, donde las cadenas son un tipo intrínseco de longitud variable. [44] Antes de que los BASIC derivados de MS se convirtieran en el estándar de facto , este estilo no era infrecuente; North Star BASIC [45] y Atari BASIC [46] utilizaron el mismo concepto, al igual que otros.

Las cadenas en Integer Basic usaban una cantidad fija de memoria independientemente de la cantidad de caracteres utilizados en ellas, hasta un máximo de 255 caracteres. [47] Esto tenía la ventaja de evitar la necesidad de la recolección de basura del montón que era notoriamente lenta en MS BASIC [h] pero significaba que las cadenas que eran más cortas que la longitud declarada se desperdiciaban.

El acceso a subcadenas se proporcionó mediante la sintaxis de división de matrices . Por ejemplo, imprimió los primeros seis caracteres de , caracteres del 0 al 5. [49] [49] [i] La concatenación se proporcionó usando el mismo sistema, reemplazó cualquier carácter que comenzara en la posición 5 con la cadena "ABC". [50] Esto contrasta con el manejo de cadenas estilo DEC/MS que utiliza funciones de cadena como para acceder a subcadenas y para la concatenación. [51] [j]PRINT A$(0,5)A$A$(5)="ABC"MID$+

Como muchas de las características que proporcionarían las funciones de cadena se proporcionaron mediante la división de matrices, se redujo la selección de funciones de cadena. LENdevolvió la longitud de una cadena [47] y ASCdevolvió el código numérico ASCII para la primera letra de una cadena. [52] Carecía de un equivalente CHR$que devolviera el carácter ASCII con un código numérico determinado. [53]

Gráficos y sonido.

Cuando se lanzó, el único controlador de juegos de 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 PDLfunción, pasando el número del controlador, 0 o 1, como , devolviendo un valor entre 0 y 255. [54] [k]A=PDL(0):PRINT A

Las máquinas Apple no incluían hardware de sonido dedicado, sólo un simple "biper". La producción de sonidos se logró mediante PEEKla ubicación del altavoz en el mapa de memoria, -16336. [l] Echar un vistazo repetidamente a ese valor produjo tonos, y el manual sugirió usar una expresión matemática para hacer esto, como . [56]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 GRdeclaración y se desactivó con TEXT. [57] El dibujo era modal y normalmente comenzaba emitiendo un comando para cambiar el color, lo que se lograba estableciendo una pseudovariable; COLOR=12Establecería el color del dibujo en 12, verde claro. Luego, se podría PLOT 10,10producir un solo punto de ese color, [58] HLIN 0,39 AT 20 dibujar una línea horizontal en la fila 20 que abarque la pantalla, o VLIN 5,15 AT 7dibujar una línea vertical más corta en la columna 7. [59] A=SCRN X,Y devolvió el color de la pantalla en X ,Y. [52] [m]

De entrada y salida

Integer BASIC carecía de comandos personalizados de entrada/salida y también carecía de la DATAdeclaración y el archivo READ. Para ingresar y sacar datos de un programa, la funcionalidad de entrada/salida se redirigía a una ranura de tarjeta seleccionada con PR#xy IN#x, que redirigía la salida o entrada (respectivamente) a la ranura numerada. A partir de entonces, los datos podrían enviarse a la tarjeta mediante PRINTcomandos convencionales y leerse mediante INPUT. [52]

Otras notas

Integer BASIC incluía una TABcaracterística que posicionaba el cursor en una columna determinada del 0 al 39. Se diferenciaba de las versiones encontradas 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 10Integer BASIC [60] mientras que en MS esto sería PRINT TAB(10). Además, el VTABcomando funcionó de manera similar TABpero agregó espacios verticales en lugar de horizontales. Por razones no explicadas, en este caso las coordenadas eran de 1 a 24 en lugar de 0 a 23. [61]

Integer BASIC incluía un POPcomando para salir de los bucles. [52] Esto sacó el elemento superior de la pila FOR. Atari BASIC también admitía el mismo comando, [62] mientras que North Star BASIC usaba EXIT. [63]

Las ROM BASIC de Integer también incluían un monitor de código de máquina , un "miniensamblador " y un desensamblador para crear y depurar programas en lenguaje ensamblador . Wozniak ensambló a mano el monitor como el primer programa del Apple II y luego lo usó para escribir Integer BASIC. [64] [65] [2]

Palabras reservadas

Manzana BÁSICO

Apple BASIC tenía los siguientes comandos: [66]

AUTO val1 , val2 CLR [ BORRAR ] DEL val1 , val2 LIST val1 , val2 RUN val1 SCR [ SCRATCH / NEW ] HIMEM = expr LOMEM = expr ( LET ) var = expr INPUT ( solicitud ,) var1 , var2 ... IMPRIMIR elemento ( s ) TAB expr FOR var = expr1 A expr2 PASO expr3 SIGUIENTE var SI expr ENTONCES declaración SI expr ENTONCES número de línea GOTO expr GOSUB expr RETURN DIM var1 ( expr1 ), var2 ( expr2 ) ... REM texto FINALIZAR POKE expr1 , expr2 CALL expr Funciones: ABS (), SGN (), PEEK (), RND (), LEN ()                                                    

Entero BÁSICO

Integer BASIC agregó lo siguiente: [67] [68]

COLOR = expr CON [ CONTINUAR ] DSP GR HLIN expr1 , expr2 AT expr3 MAN NUEVO [ 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 leyó las líneas escritas por el usuario desde un búfer y las ejecutó a través de un analizador que generó una serie de tokens . Como parte de este proceso, se detectaron y enumeraron errores de sintaxis simples. Si el análisis fue exitoso, el número de línea (si está presente) se convirtió del formato decimal ASCII a un entero de 16 bits y las palabras clave a un token entero de 7 bits. [64]

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 iba seguida de ningún argumento, otro si iba seguida de una expresión aritmética y otro si iba seguida de una cadena literal. [69]

Los literales numéricos, como el valor 500, se convirtieron a 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 "HELLO WORLD", se convirtieron estableciendo el bit alto de cada carácter para que se almacenara como $C1 . Los nombres de las variables se convirtieron de la misma manera, con las letras convertidas para tener el bit alto activado y cualquier dígito en el nombre representado por los correspondientes $B0 a $B9 , de modo que la variable se tokenizaría como $C1B5 . [64]AA5

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. [64]

El intérprete de tiempo de ejecución utilizó dos pilas para la ejecución: una para las palabras clave de la declaración y la otra para evaluar los parámetros. A cada declaración se le asignaron dos prioridades: una que indicaba dónde debería ocurrir en una operación de varios pasos, como una cadena 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 fórmula entre paréntesis. Cuando se encontraban variables, se analizaba su nombre y luego se buscaba en el área de almacenamiento de variables. Si no se encontraba, se agregaba al final de la lista. Luego, la dirección del almacenamiento de la variable, quizás recién creada, se colocó en la pila de evaluación. [64]

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 poder direccionar la memoria 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 sólo 300 bytes. El código puede llamar a SWEET16 emitiendo una llamada de subrutina y luego volver al código 6502 normal cuando se completen las operaciones de 16 bits. [70]

SWEET16 no fue utilizado por el código BASIC principal, pero luego se usó para implementar varias utilidades. Entre ellas se destacó la rutina de renumeración de líneas, que se incluyó en la ROM #1 de Ayuda al Programador, se agregó a modelos posteriores de Apple II y estuvo disponible para la instalación del usuario en ejemplos anteriores. [71]

Punto flotante

Aunque Integer BASIC contenía sus propias rutinas matemáticas, las ROM de Apple II también incluían una biblioteca completa de punto flotante ubicada en la memoria ROM entre $F425-$F4FBy $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 CALLincluirse en estas rutinas. [72]

Actuación

Debido a que Integer BASIC procesó más código fuente original en tokens, el tiempo de ejecución fue más rápido que las versiones que requirieron análisis de tiempo de ejecución adicional. A modo de comparación, Tiny BASIC tokenizó solo el número de línea, [73] mientras que MS BASIC tokenizó solo las palabras clave. Entonces, por ejemplo, mientras que Integer BASIC convertiría la línea 100 GOTO 200completamente en tokens que podrían leerse y ejecutarse inmediatamente, en MS BASIC solo se tokenizaría el número de línea e GOTO, el "200" se dejó en su formato ASCII original y tuvo que ser Se vuelve a analizar en un entero de 16 bits cada vez que se encuentra la línea. [74]

Además, trabajar únicamente con matemáticas de números enteros proporciona otro aumento 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 punto flotante después de los cálculos. Como muchos puntos de referencia informáticos de la época eran pequeños y a menudo realizaban operaciones matemáticas 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 Rugg/Feldman , Integer BASIC fue más del doble de rápido que Applesoft BASIC en la misma máquina. [76] En Byte Sieve , donde las matemáticas eran menos importantes pero dominaban el acceso a la matriz y el rendimiento de bucle, Integer BASIC tardó 166 segundos mientras que Applesoft tardó 200. [77] No apareció en Creative Computing Benchmark , que se publicó por primera vez en 1983. , momento en el que Integer BASIC ya no se suministraba de forma predeterminada. [78]

La siguiente serie de pruebas, tomadas de los dos artículos originales de Rugg/Feldman, [76] [75] muestran el rendimiento de Integer en relación con el BASIC derivado de MS en la misma plataforma.

Aquí hay un resumen de lo que hizo cada prueba:

Código de muestra

La siguiente es una versión de Breakout escrita en la versión de 1977 de Integer BASIC para Apple II, que figuraba en el Mini Manual de Apple II. [79] Hay varios errores conocidos en esta versión. [80]

El programa comienza configurando la pantalla TEXTy luego CALL -936borrando 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 COLORy VLINpara dibujar el campo de juego y la visualización de la puntuación en la ventana de texto. Todo el circuito principal va desde la línea 40 a la 90 con subrutinas asociadas. Otra gran cantidad de código cerca del final del programa se ocupa de imprimir 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 PEEKs 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 DE BREAKOUT ***" : IMPRIMIR 7 IMPRIMIR "EL OBJETO ES DESTRUIR TODOS LOS LADRILLOS CON 5 BOLAS" : PARA N = 1 A 7000 : SIGUIENTE N 10 DIM A$ ( 20 ), B$ ( 20 ) : GR : IMPRIMIR : ENTRADA " HOLA, ¿CUÁL ES TU NOMBRE? " , A$ : A = 1 : B = 13 : C = 9 : D = 6 : E = 15 : IMPRIMIR "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 : IMPRIMIR "PARA LADRILLO" ; : GOSUB 100 : B = E : IMPRIMIR "LADRILLO IMPAR"                                                                                  ; : GOSUB 100 : C = E : IMPRIMIR "PADEL" ; : GOSUB 100 : D = E : IMPRIMIR "BOLA" ; : GOSUB 100 30 POKE34 , 20 : COLOR = A : FOR I = 0 A 39 : VLIN0 , 39 ATI : NEXT I : FOR I = 20 A 34 PASO 2 : TAB I +1 : IMPRIMIR I / 2-9 ; : COLOR = B : VLIN 0 , 39 AT I : COLOR = C : FOR J = I MOD 4 A 39 PASO 4 35 VLIN J , J +1 AT I : SIGUIENTE J , I : TAB 5 : IMPRIMIR "PUNTUACIÓN = 0" : IMPRIMIR : IMPRIMIR : POKE 34 , 21 : S = 0 : P = S : L = S : X = 19 : Y = 19 : X = 19 40 COLOR = A : TRAZADO X , Y / 3 : X = 19 : Y = RND ( 120 ) : V = -1 : W = RND ( 5 ) -2 : L = L +1 : SI L > 5 ENTONCES 140 : TAB 6 : IMPRIMIR "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 : SI I < 0 ENTONCES 400 : GOSUB 200 : COLOR = A : K = J / 3 : SI I > 39 ENTONCES 70 : SI SCRN ( I , K )= A ENTONCES 90 : SI 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 ) : IR A 90 70 PARA I = 1 A 6 : M = PEEK ( -16336 ) :                                                       SIGUIENTE I : I = X : M = 0 80 V =- V 90 TRAZAR X , Y / 3 : COLOR = E : TRAZAR I , K : X = I : Y = J : IR A 50 99 IMPRIMIR "INVÁLIDO. VOLVER A INGRESAR" ; 100 ENTRADA "COLOR (0 A 15)" , E : SI E < 0 O E > 15 ENTONCES 99 : REGRESAR 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 IMPRIMIR "FELICIDADES, USTED GANA" . : IR A 150 140 IMPRIMIR "TU PUNTUACIÓN DE " ; S ; " ES " ; : IR A 141 + S / 100 141 IMPRIMIR "¡TERRIBLE!" : IR A 150 142 IMPRIMIR "Pésimo". : IR A 150 143 IMPRIMIR "POBRE".                                                                : IR A 150 144 IMPRIMIR "JUSTO". : IR A 150 145 IMPRIMIR "BUENO". : IR A 150 146 IMPRIMIR "MUY BUENO". : IR A 150 147 IMPRIMIR "EXCELENTE". : IR A 150 148 IMPRIMIR "CASI PERFECTO". 150 IMPRIMIR "MISMOS COLORES" ; : IR A 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 : REGRESAR 210 SI P = Q ENTONCES REGRESAR : SI Q # 34 ENTONCES VLIN Q +6 , 39 EN 0 : P = Q : REGRESAR 220 Q =( Y -5 )/ 3 + RND ( 3 )* SGN ( W )*( X < 10 Y V < 0 ) : SI Q < 0 ENTONCES Q = 0 : IR A 205 400 PARA I = 1 A 80 : Q = PEEK ( -16336 ) : SIGUIENTE I : IR A 40                                                                                       

Notas

  1. ^ O como dijo Bill Gates , "BASIC más potente... usando punto flotante". [3]
  2. ^ Un IBM 370/155 costaba más de 2 millones de dólares en 1970 (equivalente a 15.000.000 de dólares en 2022). [6]
  3. ^ Tymshare cobraba alrededor de $10 por hora (equivalente a $75 en 2022) por acceder a sus sistemas, [7] mientras que se podían encontrar servicios más pequeños por alrededor de $5 . [8]
  4. ^ El manejo de cadenas no era "propio", sino el mismo sistema utilizado por HP BASIC.
  5. ^ Para dejar claro qué BASIC se estaba ejecutando, Applesoft utilizó el ]mensaje.
  6. ^ En lo que MS denominó de manera más descriptiva " modo inmediato ".
  7. ^ Helmers dice que el número de línea más bajo es 1. [26]
  8. ^ Y completamente roto en algunas versiones. [48]
  9. ^ HP también permitió [y] en lugar de (y).
  10. ^ También contrasta con Dartmouth BASIC , que usaba el CONVERTcomando para convertir una cadena en una matriz de valores ASCII que luego el usuario manipulaba y convertía nuevamente al formato de cadena con un segundo CONVERT.
  11. ^ El manual sugiere, pero no afirma directamente, que el rango real de valores es inferior a 0 a 255. [54]
  12. ^ El número negativo es un efecto secundario de que los números enteros se almacenen en formato con signo, por lo que cualquier ubicación de memoria superior a 32767 aparecía como un valor negativo en BASIC. [55]
  13. ^ Tenga en cuenta la sintaxis extraña de SCRN, que técnicamente es una función porque devuelve un valor, pero no utiliza una sintaxis similar a una función que sería A=SCRN(X,Y).
  14. ^ El primer dígito del valor original se usó para seleccionar un valor del 0 al 9, por lo que en este ejemplo, el token sería $B5 para el primer dígito de 500.
  15. ^ Bill Gates se quejó de esto, afirmando que era injusto comparar Integer BASIC con un BASIC "real" como MS. [75]
  16. ^ 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.
  17. ^ Para obtener una lista de las diversas CALL, PEEK y POKE que realizaron operaciones comunes en Apple II, consulte Peeks, Pokes, Calls And Programming Notes, Charles Turley, 15 de diciembre de 1996.

Referencias

Citas

  1. ^ abcdefghi Wozniak 2014.
  2. ^ ab Weyhrich 2001.
  3. ^ Rugg, Tom; Feldman, Phil (octubre de 1977). "Comparaciones de tiempos BÁSICAS... revisadas y actualizadas". Kilobaudios . págs. 20-25.
  4. ^ Baum, Allan (18 de julio de 2016). "Historia Oral de Allen Baum" (Entrevista). Entrevistado por David Brock. pag. 12.
  5. ^ "Pasando la marca de los 10 años". Revista MEDIDA . Hewlett Packard. Octubre de 1976.
  6. ^ Cooney, Michael. "La (mayormente) interesante historia del mainframe IBM". ARN .
  7. ^ Bourne, Carlos; Hahn, Trudi Bellardo (agosto de 2003). Una historia de los servicios de información en línea, 1963-1976. Prensa del MIT. pag. 387.ISBN 9780262261753.
  8. ^ Barry, Tim (27 de abril de 1981). "Volver a lo basico". InfoMundo . pag. 7.
  9. ^ ab Williams y Moore 1984, pág. A71.
  10. ^ Fisk, Nathan (2009). Comprender la piratería en línea. ABC-CLIO. pag. 14.ISBN 9780313354748.
  11. ^ Wozniak 1977.
  12. ^ Weyhrich 2001, El BASIC [Integer], que enviamos con los primeros Apple II, nunca se ensambló, nunca. Había una copia manuscrita, toda escrita a mano, toda ensamblada a mano.
  13. ^ "El proyecto Apple 1".
  14. ^ "Anuncio de computadora Apple I". 30 de noviembre de 2009.
  15. ^ Bunnell, David (septiembre de 1975). "Al otro lado del escritorio del editor". Notas de computadora . Albuquerque Nuevo México: MITS. 1 (4): 2. Archivado desde el original el 23 de marzo de 2012.
  16. ^ "Juegos clásicos: una historia completa de ruptura". JuegoSpy. Archivado desde el original el 13 de agosto de 2013 . Consultado el 19 de abril de 2010 .
  17. ^ Raskin, Roy; Wozniak, Steven (agosto de 1976). "Rutinas de coma flotante para el 6502". Dr. Dobb . págs. 17-19.
  18. ^ Manual de referencia de Apple II . Computadora Apple. Enero de 1978. págs. 94–95.
  19. ^ ab Wozniak 2018.
  20. ^ Hertzfeld 1985.
  21. ^ Raskin 1978, pág. 11.
  22. ^ Raskin 1978, pág. 12.
  23. ^ Raskin 1978, pág. 46.
  24. ^ Raskin 1978, págs. 49–55.
  25. ^ Raskin 1978, pág. 48.
  26. ^ ab Helmers 1978, pág. 24.
  27. ^ ab Raskin 1978, pág. 118.
  28. ^ Raskin 1978, págs. 65–67.
  29. ^ Raskin 1978, pág. 124.
  30. ^ 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 que se desplaza en la parte inferior de la pantalla".
  31. ^ Raskin 1978, pág. 100.
  32. ^ Raskin 1978, pág. 15.
  33. ^ Raskin 1978, pág. 52.
  34. ^ Raskin 1978, pág. 107.
  35. ^ Raskin 1978, págs.100, 101.
  36. ^ Raskin 1978, pág. 38.
  37. ^ Raskin 1978, pág. 27.
  38. ^ Raskin 1978, pág. 61.
  39. ^ Raskin 1978, pág. 94.
  40. ^ Raskin 1978, pág. 40.120.
  41. ^ Raskin 1978, pág. 40.
  42. ^ "Cuerdas". aprender-c.org .
  43. ^ Brooks, Steve. "Personajes y cadenas en Fortran" (PDF) . Universidad de Hawái .
  44. ^ "Variables enteras, de coma flotante y de cadena". Manual del programador C64. Comodoro.
  45. ^ North Star BASIC versión 6 (PDF) . Corporación Estrella del Norte. 1977. Archivado desde el original (PDF) el 5 de marzo de 2020 . Consultado el 3 de marzo de 2020 .
  46. ^ El manual de referencia de ATARI BASIC. Atari Inc. 1980. Archivado desde el original el 1 de mayo de 2005 . Consultado el 14 de abril de 2020 .
  47. ^ ab Raskin 1978, pág. 89.
  48. ^ "Crea tu propia versión de Microsoft BASIC".
  49. ^ ab Raskin 1978, pág. 88.
  50. ^ Raskin 1978, pág. 92.
  51. ^ manual básico de altair 8080 (PDF) . MITS. Abril de 1977. pág. 30.
  52. ^ abcd Raskin 1978, pag. 120.
  53. ^ Mini 1977, pag. 17.
  54. ^ ab Raskin 1978, pág. 36.
  55. ^ Mini 1977, pag. 18.
  56. ^ Raskin 1978, pág. 84.
  57. ^ Raskin 1978, pág. 31.
  58. ^ Raskin 1978, pág. 32.
  59. ^ Raskin 1978, pág. 33.
  60. ^ Raskin 1978, pág. 73.
  61. ^ Raskin 1978, pág. 74.
  62. ^ Manual de referencia de Atari BASIC (PDF) . Atari. 1983. pág. 25.
  63. ^ North Star BASIC versión 6 (PDF) . Corporación Estrella del Norte. 1977. pág. 8. Archivado desde el original (PDF) el 5 de marzo de 2020 . Consultado el 3 de marzo de 2020 .
  64. ^ abcde Wozniak 1977, pag. 42.
  65. ^ Helmers 1978, pag. 18.
  66. ^ "MANUAL PRELIMINAR DEL USUARIO BÁSICO DE APPLE". Octubre de 1976.
  67. ^ "MANUAL DE PROGRAMACIÓN BÁSICA APPLE II". 1978.
  68. ^ "MANUAL DE REFERENCIA DE APPLE II" (PDF) .
  69. ^ Paul R. Santa María. "Desmontaje básico del Apple II Integer" (PDF) . Consultado el 14 de septiembre de 2020 .[ enlace muerto permanente ]
  70. ^ Wozniak 1977, pág. 43.
  71. ^ Ayuda para programadores de Apple (PDF) . Manzana. 1978.
  72. ^ Manual de referencia de Apple II (PDF) . Enero de 1978. págs. 94–95.
  73. ^ Allison, Dennis (1976). "Construye tu propio BÁSICO". Diario del Dr. Dobb . vol. 1, núm. 1. pág. 11.
  74. ^ Hardiman, Roger. "Altair BASIC 3.2 (4K) - Desmontaje comentado". pag. 1.11. Archivado desde el original el 5 de noviembre de 2001.
  75. ^ ab Rugg, Tom; Feldman, Phil (octubre de 1977). "Comparaciones de tiempos BÁSICAS... revisadas y actualizadas". Kilobaudios . págs. 20-25.
  76. ^ ab Rugg, Tom; Feldman, Phil (junio de 1977). "Comparaciones BÁSICAS de tiempos... información para fanáticos de la velocidad". Kilobaudios . págs. 66–70.
  77. ^ Gilbreath, Jim (septiembre de 1981). "Un punto de referencia del lenguaje de alto nivel". Byte . pag. 192.
  78. ^ Ahl, David (noviembre de 1983). "Prueba de comparación de referencias". Computación creativa . pag. 260.
  79. ^ Mini 1977, págs. 65–67.
  80. ^ "Desglose, anotado". GitHub . 16 de agosto de 2021.

Bibliografía

enlaces externos