Articulo de referencia

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 la Apple I en 1976, e inclui...

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 la Apple I en 1976, e incluido posteriormente en la ROM de la Apple II desde su lanzamiento en 1977, fue la primera versión de BASIC utilizada por muchos de los primeros usuarios de computadoras domésticas . [ 2 ]

El único tipo de dato numérico era el entero; no se admitían números de coma flotante . El uso de enteros permitía almacenar números en un formato compacto de 16 bits que podía leerse y procesarse más rápidamente que los formatos de coma flotante de 32 o 40 bits que se encontraban en la mayoría de los BASIC de la época. Esto lo hacía tan rápido que Bill Gates se quejó cuando superó a Microsoft BASIC en las pruebas de rendimiento. Sin embargo, esto también limitaba 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, de forma similar al sistema de C o Fortran 77. Se accedía a las subcadenas mediante segmentación de matrices en lugar de funciones de cadena. Este estilo se introdujo en HP Time-Shared BASIC y también se podía encontrar en otros BASIC contemporáneos basados ​​en HP, como North Star BASIC y Atari BASIC . Contrastaba con el estilo de los BASIC derivados de DEC , incluido Microsoft BASIC .

El lenguaje se desarrolló inicialmente con el nombre de GAME BASIC y se conocía simplemente como Apple BASIC cuando se introdujo en el Apple I. Se convirtió en Integer BASIC al portarse al Apple II y se distribuyó junto con Applesoft BASIC , una adaptación de Microsoft BASIC que incluía soporte para coma flotante. Integer BASIC se fue reemplazando gradualmente por Applesoft BASIC a partir del Apple II Plus en 1979.

Historia

Cuando Steve Wozniak cursaba el último año de bachillerato , su profesor de electrónica gestionó prácticas en empresas locales de electrónica para los alumnos más destacados. Wozniak fue enviado a Sylvania, donde programó en FORTRAN en un IBM 1130. [ 4 ] Ese mismo año, General Electric instaló un terminal en el instituto conectado a uno de sus ordenadores centrales que ejecutaba su servicio BASIC de tiempo compartido , el cual promocionaban intensamente en aquel momento. Tras tres días de acceso, se pidió a los alumnos que escribieran cartas explicando por qué el instituto debería tener un terminal de forma permanente, pero sus esfuerzos no tuvieron éxito. [ 1 ]

Algunos años más tarde, Wozniak trabajaba en Hewlett-Packard (HP) realizando simulaciones de diseños de chips y diseño lógico para calculadoras. [ 1 ] HP logró importantes avances en el mercado de las minicomputadoras con sus máquinas de la serie HP 2000 que ejecutaban una versión personalizada de BASIC para tiempo compartido . Por aproximadamente $100,000 , se podía construir una máquina razonablemente equipada que podía soportar entre 16 y 32 usuarios ejecutando programas BASIC. [ 5 ] Si bien era caro, seguía siendo una fracción del costo de las máquinas mainframe [ b ] y, para usuarios intensivos, menos que los servicios de tiempo compartido. [ c ] HP continuó con esto con la HP 9830 , una máquina del tamaño de una computadora de escritorio por US$10,000 (equivalente a US$83,000 en 2025) que también ejecutaba BASIC, al cual Wozniak tenía acceso. [ 9 ]

Intuí que la clave para que mi ordenador fuera bueno (popular) era incluir un lenguaje de alto nivel, y que este tenía que ser BASIC.

Steve Wozniak [ 1 ]

En enero de 1975 se anunció el Altair 8800 , lo que dio inicio a la revolución de los microordenadores . En marzo, Wozniak asistió a la primera reunión del Homebrew Computer Club y comenzó a diseñar su propio ordenador. Uno de los programas más importantes para el Altair, y uno de los más pirateados , era Altair BASIC de la recién formada Microsoft . [ 10 ] Wozniak concluyó que su máquina tendría que tener su propio BASIC, que, con suerte, sería el primero para el procesador MOS Technology 6502. Como el lenguaje necesitaba 4  KB de RAM, estableció esa como 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 ] Desconocía que el BASIC de HP era muy diferente de la variante DEC BASIC utilizada en 101 Games , que también fue la base de Microsoft BASIC para Altair. Basándose en estas fuentes, Wozniak comenzó a esbozar una tabla de sintaxis para el lenguaje. El diseño inicialmente incluía soporte para coma flotante, pero aún con la esperanza de poder publicar el primer BASIC en el 6502 y convertirse en "una estrella", decidió abandonar la coma flotante y escribir un sistema matemático de enteros separado para ahorrar algunas semanas de tiempo de programación. [ 1 ]

Más tarde, Wozniak describiría su lenguaje como "destinado principalmente a juegos y usos educativos". [ 11 ] Durante todo el desarrollo, se refirió a él como "GAME BASIC" y escribió el código a mano, traduciendo las instrucciones del código ensamblador a sus equivalentes en código máquina y luego cargando el resultado en su computadora. [ 12 ] Sin ninguna formación en programación, utilizó su experiencia con la calculadora HP para implementar una máquina de pila que interpretara expresiones. Una vez que las rutinas básicas estuvieron en funcionamiento, trabajó en los demás comandos uno por uno de forma modular. En cada visita al club Homebrew, demostraba algunas características más añadidas el mes anterior. [ 1 ]

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

Steve Wozniak [ 9 ]
Anuncio del ordenador Apple i que destaca la política de Apple de proporcionar software gratuito o económico para sus ordenadores.

En los anuncios de principios de 1976 para su computadora Apple I , Apple Inc. afirmaba 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 gratis". [ 14 ] Esto se publicó poco después de la infame Carta Abierta a los Aficionados de Bill Gates, en la que sugería que la gente lo estaba robando al copiar versiones de Altair BASIC . [ 15 ]

Wozniak había ayudado a Steve Jobs , quien 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. Añadió comandos para leer los controladores de paleta y, tras una serie de ediciones rápidas, logró que una versión del juego funcionara. Para mejorar su jugabilidad, añadió un altavoz para que hiciera clics cuando la bola golpeaba objetos. 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 de Dr. Dobb's Journal . [ 17 ] Esta biblioteca se integró posteriormente en las ROM del Apple II . [ 18 ] Wozniak comenzó a trabajar en la adaptación del código de punto flotante a Apple BASIC, pero se distrajo con el diseño de un controlador de disquete para lo que se convertiría 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 estaba listo a tiempo, por lo que Wozniak y Randy Wigginton trabajaron sin descanso durante las vacaciones de 1977. [ 19 ]

Cuando volvió al tema de la coma flotante en BASIC, Jobs se quejó de que estaba tardando demasiado. Sin que Wozniak lo supiera, la compañía ya había acordado una licencia con Microsoft para recibir su versión 6502 del código Altair, recientemente terminada. Tras examinar el código de Microsoft, Wozniak decidió que era más fácil añadir soporte gráfico a su código que añadir coma flotante a su propio BASIC, ya que esto último requeriría parchear manualmente el código máquina original. El código de Microsoft estaba escrito en lenguaje ensamblador y, por lo tanto, era más fácil de manejar. El desarrollo del BASIC de Apple terminó en favor de lo que se convertiría en Applesoft BASIC . Wozniak comentó más tarde: «Mi mayor decepción fue tener que usar las horribles funciones de cadena como y en lugar de las mías». [ 19 ] [ d ]LEFT$(VAR,5)MID$(VAR2,5,3)

Cuando el Apple II se lanzó en el verano de 1977, Integer BASIC se suministraba en la ROM, mientras que Applesoft BASIC se suministraba en casete. Esto cambió con la introducción del Apple II Plus en 1979, cuando Applesoft se incluyó en la ROM. [ 20 ]

Descripción

Edición de programas

Como la mayoría de las implementaciones de BASIC de la época, Integer BASIC actuaba tanto como intérprete de lenguaje como entorno de edición de línea. Cuando BASIC se ejecutaba, se mostraba un >indicador de comandos donde el usuario podía introducir instrucciones. [ 21 ] [ e ] A diferencia de las plataformas de ordenadores domésticos posteriores , BASIC no era el entorno predeterminado cuando se iniciaba el Apple II, sino que normalmente se iniciaba en el monitor . BASIC se iniciaba pulsando Ctrl+ . [ 22 ]BReturn

Las instrucciones que se introdujeron con números iniciales se introdujeron en la memoria del programa para su "ejecución diferida" [ 23 ] , ya sea como líneas nuevas o reemplazando cualquier línea que pudiera haber tenido el mismo número anteriormente [ 24 ] . Las instrucciones que se introdujeron sin número de línea se denominaron comandos y se ejecutaron inmediatamente [ f ] . Los números de línea podían ir de 0 a 32767 [ 25 ] [ g ] y las líneas podían contener hasta 128 caracteres [ 27 ] .

Integer BASIC también incluía el AUTOcomando para introducir automáticamente números de línea a partir de un número inicial dado, 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 desactivaba introduciendo 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 tiempo real. Normalmente, esta sección abarcaba toda la pantalla, pero podía limitarse a un área más pequeña almacenando POKEvalores en las ubicaciones de memoria 32 a 35. [ 29 ] Esta función podía utilizarse para crear un área de texto editable mientras el resto de la pantalla estaba en modo gráfico. [ 30 ]

Depuración

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

Para la ejecución paso a paso, la TRACEinstrucción podía utilizarse en la línea de comandos o insertarse dentro del propio programa. Al activarse, se imprimían los números de línea de cada línea que visitaba el programa. Esta función podía desactivarse de nuevo con NOTRACE. [ 34 ]

Una característica algo inusual era el DSPcomando (para "display"). Cuando se encontraba en un programa, a partir de ese momento se mostraban todos los cambiosDSP X en el valor de una variable. Por ejemplo, mostraba el valor de X cada vez que cambiaba, junto con el número de línea donde se producía el cambio. [ 35 ] Al igual que con TRACE, el DSP se desactivaba con NODSP. [ 26 ]

nombres de variables

Mientras que Dartmouth BASIC y HP-BASIC limitaban los nombres de las variables a un máximo de dos caracteres (una sola letra o una letra seguida de un dígito), y MS-BASIC permitía una letra seguida de una letra o dígito opcional (ignorando los caracteres subsiguientes), Integer BASIC era inusual al admitir nombres de variables de cualquier longitud (por ejemplo, SUM, GAMEPOINTS, PLAYER2). La única salvedad era que los nombres de las variables no podían contener palabras reservadas; por ejemplo, THISCOLOR y COLORFUL 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

BASIC, como su nombre indica, utiliza enteros como base para su paquete matemático. Estos se almacenaban internamente como un número de 16 bits, little-endian (al igual que el 6502). Esto permitía un valor máximo para cualquier cálculo entre -32767 y 32767; aunque el formato también podía almacenar el valor -32768, BASIC no podía mostrar ese número. Los cálculos que resultaban en valores fuera de ese rango producían un error >32767 ERR. [ 37 ]

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

Solo se permitían matrices unidimensionales, limitadas en tamaño únicamente por la memoria disponible. [ 39 ] Las funciones matemáticas eran escasas; solo se admitían 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 de 0..<1, Integer BASIC utilizaba el parámetro; devolvía un entero de 0 a 5. [ 41 ]RNDRNDRND(6)

Instrumentos de cuerda

El manejo de cadenas de Integer BASIC se basaba en el sistema de HP BASIC. Este sistema trataba las variables de cadena como matrices de caracteres que debían ser DIMindexadas antes de su uso. Esto es similar al modelo de C [ 42 ] o Fortran 77 [ 43 ] . Esto contrasta con los BASIC de tipo 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 ] utilizaban el mismo concepto, al igual que otros.

Las cadenas en Integer Basic utilizaban una cantidad fija de memoria independientemente del número de caracteres que contuvieran, 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 más cortas que la longitud declarada resultaban en memoria desperdiciada.

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

Como muchas de las características que proporcionarían las funciones de cadena se proporcionaban en cambio mediante el seccionamiento de matrices, la selección de funciones de cadena se redujo. LENdevolvía la longitud de una cadena [ 47 ] y ASCdevolvía el código numérico ASCII de la primera letra de una cadena. [ 52 ] Carecía de un equivalente de CHR$que devolviera el carácter ASCII con un código numérico dado. [ 53 ]

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 podía 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):PRINTA

Las máquinas Apple no incluían hardware de sonido dedicado, solo un simple "pitido". La producción de sonidos se lograba pulsando PEEKla ubicación mapeada en memoria del altavoz, -16336. [ l ] Al pulsar repetidamente ese valor se producían tonos, y el manual sugería usar una expresión matemática para hacerlo, como . [ 56 ]S=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)

El soporte para gráficos era más detallado. El modo gráfico se activaba con la GRinstrucción y se desactivaba con TEXT. [ 57 ] El dibujo era modal y normalmente se iniciaba emitiendo un comando para cambiar el color, lo que se lograba estableciendo una pseudovariable; COLOR=12establecería el color de dibujo en 12, verde claro. Luego se podí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 abarcara la pantalla, o VLIN 5,15 AT 7dibujar una línea vertical más corta hacia abajo en la columna 7. [ 59 ]A=SCRN X,Y devolvía el color de la pantalla en X,Y. [ 52 ] [ m ]

Entrada/salida

Integer BASIC carecía de comandos de entrada/salida personalizados, y también carecía de la DATAinstrucción y el asociado READ. Para introducir y extraer 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ían la salida o la entrada (respectivamente) a la ranura numerada. A partir de entonces, los datos podían enviarse a la tarjeta mediante comandos convencionales PRINTy leerse desde ella mediante INPUT. [ 52 ]

Otras notas

Integer BASIC incluía una TABfunción que posicionaba el cursor en una columna determinada, del 0 al 39. Se diferenciaba de las versiones presentes en la mayoría de los BASIC en que era un comando seguido de un número, en lugar de una función con el valor entre paréntesis; TAB 10en Integer BASIC se movía el cursor a la columna 10 usando [ 60 ], mientras que en MS se usaba PRINT TAB(10). Además, el VTABcomando funcionaba de forma similar a TABpero añadía espacios verticales en lugar de horizontales. Por razones desconocidas, en este caso las coordenadas eran del 1 al 24 en lugar del 0 al 23. [ 61 ]

Integer BASIC incluía un POPcomando para salir de los bucles. [ 52 ] Esto eliminaba 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 de Integer BASIC también incluían un monitor de código máquina , un "mini- ensamblador " y un desensamblador para crear y depurar programas en lenguaje ensamblador . Wozniak ensambló manualmente el monitor como el primer programa del Apple II, y luego lo usó para escribir Integer BASIC. [ 64 ] [ 65 ] [ 2 ]

Palabras reservadas

Apple BASIC

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

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 statement IF expr THEN line number GOTO expr GOSUB expr RETURN DIM var1 ( expr1 ), var2 ( expr2 ) ... REM text END 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 EN expr3 MAN NUEVO [ reemplaza SCR ] NOTRACE PLOT expr1 , expr2 POP TEXT TRACE VLIN expr1 , expr2 EN expr3 Función: ASC (), PDL (), SCRN ( X , Y )

Implementación

Integer BASIC leía las líneas escritas por el usuario desde un búfer y las procesaba mediante un analizador que generaba una serie de tokens . Como parte de este proceso, se detectaban y listaban los errores de sintaxis simples . Si el análisis era exitoso, el número de línea (si estaba presente) se convertía 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 múltiples tokens; por ejemplo, mientras que 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 iba seguida de una expresión aritmética y uno si iba seguida de un literal de cadena. [ 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 byte entre $B0 y $B9 delante del valor de dos bytes. [ n ] Los literales de cadena, como "HELLO WORLD", se convirtieron estableciendo el bit más significativo de cada carácter para que se almacenara como $C1 . Los nombres de variables se convirtieron de la misma manera, con las letras convertidas para que tuvieran su bit más significativo 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 ingresaba sin un número de línea, el código se ejecutaba 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 utilizaba dos pilas para la ejecución: una para las palabras clave de las instrucciones y otra para evaluar los parámetros. A cada instrucción se le asignaban dos prioridades: una que indicaba dónde debía aparecer 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 debía producirse la evaluación, por ejemplo, al calcular los valores internos de una fórmula entre paréntesis. Cuando se encontraban variables, se analizaba su nombre y se buscaba en el área de almacenamiento de variables. Si no se encontraba, se añadía al final de la lista. La dirección del almacenamiento de la variable, posiblemente recién creada, se colocaba entonces en la pila de evaluación. [ 64 ]

Detalles de la ROM

DULCES16

Además de Integer BASIC, las ROM de Apple contenían un lenguaje ensamblador personalizado conocido como SWEET16 . SWEET16 se basa en bytecodes 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 para calcular funciones matemáticas de 16 bits sin necesidad de traducirlas al código subyacente de 8 bits y multi-instrucciones del 6502. Toda la máquina virtual se escribió en solo 300 bytes. El código puede llamar a SWEET16 mediante una llamada a subrutina y luego regresar al código normal del 6502 cuando se completan las operaciones de 16 bits. [ 70 ]

SWEET16 no fue utilizado por el código BASIC principal, pero posteriormente se empleó para implementar varias utilidades. Entre ellas destacaba la rutina de renumeración de líneas, que se incluyó en la ROM Programmer's Aid #1, se añadió a modelos posteriores de Apple II y estaba disponible para su instalación por el usuario en ejemplos anteriores. [ 71 ]

Punto flotante

Aunque Integer BASIC contenía sus propias rutinas matemáticas, las ROM del 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 incluía en el manual del Apple II. Los programas BASIC que requerían cálculos de punto flotante podían CALLusar estas rutinas. [ 72 ]

Actuación

Debido a que Integer BASIC procesaba una mayor parte del código fuente original en tokens, el tiempo de ejecución era más rápido que en las versiones que requerían un análisis adicional en tiempo de ejecución. En comparación, Tiny BASIC tokenizaba solo el número de línea, [ 73 ] mientras que MS BASIC tokenizaba solo las palabras clave. Por ejemplo, mientras que Integer BASIC convertía la línea 100 GOTO 200completa en tokens que podían leerse y ejecutarse inmediatamente, en MS BASIC solo se tokenizaban el número de línea y GOTO; el "200" se mantenía en su formato ASCII original y debía volver a analizarse en un entero de 16 bits cada vez que se encontraba la línea. [ 74 ]

Además, trabajar exclusivamente con aritmética de enteros proporciona otra mejora 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. Dado que muchos benchmarks informáticos de la época eran pequeños y a menudo realizaban operaciones matemáticas simples que no requerían punto flotante, Integer BASIC superó con creces a la mayoría de los demás BASIC. [ o ]

En una de las primeras pruebas de rendimiento conocidas para microcomputadoras, las pruebas 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 el acceso a matrices y el rendimiento de los bucles dominaban, Integer BASIC tardó 166 segundos mientras que Applesoft tardó 200. [ 77 ] Una revisión del compilador de Integer BASIC de Galfo Systems encontró que producía código que es entre 1,5 y 8 veces más rápido que Applesoft BASIC compilado, 10 veces más rápido que Integer BASIC interpretado y 15 veces más rápido que Applesoft interpretado. [ 78 ] Integer BASIC no apareció en Creative Computing Benchmark , que se publicó por primera vez en 1983, momento en el que el lenguaje ya no se incluía en las computadoras Apple. [ 79 ]

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

Aquí tenéis un resumen de lo que hizo cada prueba:

  • Prueba 1: bucle for/next hasta 1000.
  • Prueba 2: bucle if/then con comparación a 1000.
  • Prueba 3: igual que la 2, pero con multiplicación, división, suma y resta por la misma variable.
  • Prueba 4: igual que la 3, con multiplicación, división, suma y resta añadidas por constantes.
  • Prueba 5: igual que la 4 con la adición de una llamada a subrutina.
  • Prueba 6; igual que la 5 con un bucle interior añadido.
  • Prueba 7: igual que la 6, pero con la adición de la población de la tabla.

Código de ejemplo

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 Manual Mini de Apple II. [ 80 ] Esta versión contiene varios errores conocidos. [ 81 ]

El programa comienza configurando la pantalla TEXTy luego CALL -936borrándola. 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 instrucciones COLORy VLINpara dibujar el campo de juego y la visualización de la puntuación en la ventana de texto. El bucle principal completo se ejecuta desde la línea 40 hasta la 90 con las 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 agudo usando una cadena de PEEKs en la línea 65 en comparación con un tono más grave usando un bucle en la línea 70, y la mezcla de gráficos y texto en una sola pantalla. [ q ]

5 TEXTO : LLAMAR -936 : VTAB 4 : TAB 10 : IMPRIMIR "*** JUEGO DE ESCAPE ***" : IMPRIMIR 7 IMPRIMIR " EL OBJETIVO 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, ¿CÓMO TE LLAMAS?" , 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 EN 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 "LADRILLO PAR" ; : GOSUB 100 : B = E : IMPRIMIR "LADRILLO IMPAR"; : GOSUB 100 : C = E : PRINT "PADDLE" ; : GOSUB 100 : D = E : PRINT "BALL" ; : GOSUB 100 30 POKE34 , 20 : COLOR = A : FOR I = 0 TO 39 : VLIN0 , 39 ATI : NEXT I : FOR I = 20 TO 34 STEP 2 : TAB I +1 : PRINT I / 2-9 ; : COLOR = B : VLIN 0 , 39 AT I : COLOR = C : FOR J = I MOD 4 TO 39 STEP 4 35 VLIN J , J +1 AT I : NEXT 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 : PLOT X , Y / 3 : X = 19 : Y = RND ( 120 ) : V = -1 : W = RND ( 5 ) -2 : L = L +1 : IF L > 5 THEN 140 : TAB 6 : PRINT "BALL #" ; L :IMPRIMIR : PARA I = 1 A 100 : IR A 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 : IR A 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 ) : GOTO 90 70 PARA I = 1 A 6 : M = PEEK ( -16336 ) :SIGUIENTE I : I = X : M = 0 80 V =- V 90 GRAFICAR X , Y / 3 : COLOR = E : GRAFICAR I , K : X = I : Y = J : IR A 50 99 IMPRIMIR "INVÁLIDO. REINGRESAR" ; 100 ENTRADA " COLOR (0 A 15)" , E : SI E < 0 O E > 15 ENTONCES 99 : RETORNAR 120 SI M ENTONCES V = ABS ( V ) : VLIN K / 2 * 2 , K / 2 * 2+1 EN 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 ) 124 SI S < 720 LUEGO 80 130 IMPRIMIR "FELICIDADES, HAS GANADO." : 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 "MALO.": IR A 150 144 IMPRIMIR "REGULAR." : 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 : RETORNAR 210 SI P = Q ENTONCES RETORNAR : SI Q # 34 ENTONCES VLIN Q +6 , 39 EN 0 : P = Q : RETORNAR 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 comolo expresó Bill Gates , "un BASIC más potente... que utiliza coma flotante". [ 3 ]
  2. Un IBM 370/155 costaba más de 2 millones de dólares en 1970 (equivalente a 17.000.000 de dólaresen 2025). [ 6 ]
  3. Tymshare cobraba alrededor de $10 por hora (equivalente a $83en 2025) 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]indicador.
  6. En lo que MS describió de forma más descriptiva como " 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 utilizaba elCONVERTcomando para convertir una cadena en una matriz de valores ASCII que el usuario luego manipulaba y volvía a convertir al formato de cadena con un segundoCONVERT.
  11. El manual sugiere, pero no afirma explícitamente, que el rango real de valores es menor que 0 a 255. [ 54 ]
  12. El número negativo es un efecto secundario de que los 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. Nótese la extraña sintaxis del SCRN, que técnicamente es una función porque devuelve un valor, pero no utiliza una sintaxis similar a la de una función, que seríaA=SCRN(X,Y).
  14. El primer dígito del valor original se utilizó 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.
  15. Bill Gates se quejó de esto, afirmando que era injusto comparar Integer BASIC con un BASIC "real" como MS. [ 75 ]
  16. Esto 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 distintas llamadas, consultas y pulsaciones que realizaban operaciones comunes en el Apple II, consulte Peeks, Pokes, Calls And Programming Notes , Charles Turley, 15 de diciembre de 1996.

Referencias

Citas

  1. 1 2 3 4 5 6 7 8 9 Wozniak 2014 .
  2. 1 2 Weyhrich 2001 .
  3. Rugg, Tom; Feldman, Phil (octubre de 1977). "Comparaciones básicas de sincronización... revisadas y actualizadas" . Kilobaud . págs. 20-25 . 
  4. Baum, Allan (18 de julio de 2016). "Historia oral de Allen Baum" (Entrevista). Entrevistado por David Brock. pág. 12. 
  5. "Superando los 10 años" . Revista MEASURE . Hewlett Packard. Octubre de 1976.
  6. Cooney, Michael. "La historia (en su mayor parte) interesante del mainframe de IBM" . ARN . Archivado del original el 23 de febrero de 2020. Consultado el 23 de febrero de 2020 .
  7. Bourne, Charles; Hahn, Trudi Bellardo (agosto de 2003). Historia de los servicios de información en línea, 1963-1976 . MIT Press. pág. 387. ISBN  9780262261753.
  8. Barry, Tim (27 de abril de 1981). "Volver a lo básico" . InfoWorld . pág. 7. 
  9. 1 2 Williams y Moore 1984 , pág. A71.
  10. Fisk, Nathan (2009). Comprender la piratería en línea . ABC-CLIO. pág. 14. ISBN  9780313354748.
  11. Wozniak 1977 .
  12. Weyhrich 2001 , El BASIC [Integer], que distribuimos con los primeros Apple II, nunca fue ensamblado , jamás. Había una copia manuscrita, todo escrito a mano, todo ensamblado a mano.
  13. "El proyecto Apple 1" .
  14. "Anuncio del ordenador Apple I" . 30 de noviembre de 2009.
  15. Bunnell, David (septiembre de 1975). "Across the Editor's Desk" . Computer Notes . 1 (4). Albuquerque, NM: MITS: 2. Archivado del original el 23 de marzo de 2012.
  16. "Juegos clásicos: Una historia completa de Breakout" . GameSpy. Archivado del original el 13 de agosto de 2013. Consultado el 19 de abril de 2010 .
  17. Raskin, Roy; Wozniak, Steven (agosto de 1976). "Rutinas de punto flotante para el 6502" . Dr. Dobb's . págs. 17–19 . 
  18. Manual de referencia del Apple II . Apple Computer. Enero de 1978. págs. 94–95 . 
  19. 1 2 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. 1 2 Helmers 1978 , pág. 24.
  27. 1 2 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 gráfica de color de 40 por 40 más cuatro líneas de texto desplazable 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. "Cadenas" . learn-c.org .
  43. Brooks, Steve. "Caracteres y cadenas en Fortran" (PDF) . Universidad de Hawái .
  44. "Variables enteras, de punto flotante y de cadena". Manual del programador de C64 . Commodore.
  45. North Star BASIC versión 6 (PDF) . North Star Corporation. 1977. Archivado del original (PDF) el 5 de marzo de 2020. Consultado el 3 de marzo de 2020 .
  46. Manual de referencia de ATARI BASIC . Atari Inc. 1980. Archivado del original el 1 de mayo de 2005. Consultado el 14 de abril de 2020 .
  47. 1 2 Raskin 1978 , pág. 89.
  48. "Crea tu propia versión de Microsoft BASIC" .
  49. 1 2 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. 1 2 3 4 Raskin 1978 , pág. 120.
  53. Mini 1977 , pág. 17.
  54. 1 2 Raskin 1978 , pág. 36.
  55. Mini 1977 , pág. 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) . North Star Corporation. 1977. pág. 8. Archivado del original (PDF) el 5 de marzo de 2020. Consultado el 3 de marzo de 2020 . 
  64. 1 2 3 4 5 Wozniak 1977 , pág. 42.
  65. Helmers 1978 , pág. 18.
  66. "MANUAL DE USUARIO PRELIMINAR DE APPLE BASIC" . Octubre de 1976.
  67. "MANUAL DE PROGRAMACIÓN BASIC DE APPLE II" . 1978.
  68. "MANUAL DE REFERENCIA DE APPLE II" (PDF) .
  69. Paul R. Santa-Maria. "Desensamblaje de Integer Basic de Apple II" (PDF) . Consultado el 14 de septiembre de 2020 .
  70. Wozniak 1977 , pág. 43.
  71. Ayuda para programadores de Apple (PDF) . Apple. 1978.
  72. Manual de referencia de Apple II (PDF) . Enero de 1978. págs. 94–95 . 
  73. Allison, Dennis (1976). "Construye tu propio BASIC" . Dr. Dobb's Journal . Vol. 1, núm. 1, pág. 11.   
  74. Hardiman, Roger. "Altair BASIC 3.2 (4K) - Desensamblaje anotado" . pág. 1.11. Archivado del original el 5 de noviembre de 2001. 
  75. 1 2 Rugg, Tom; Feldman, Phil (octubre de 1977). "Comparaciones de sincronización BÁSICAS... revisadas y actualizadas" . Kilobaud . págs. 20-25 . 
  76. 1 2 Rugg, Tom; Feldman, Phil (junio de 1977). "Comparaciones básicas de sincronización... información para fanáticos de la velocidad" . Kilobaud . págs. 66-70 . 
  77. Gilbreath, Jim (septiembre de 1981). "Un referente para lenguajes de alto nivel" . Byte . pág. 192. 
  78. 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 . 
  79. Ahl, David (noviembre de 1983). "Prueba de comparación de referencia" . Creative Computing . pág. 260. 
  80. Mini 1977 , págs. 65–67.
  81. "Breakout, Annotated" . GitHub . 16 de agosto de 2021.

Bibliografía

  • Manual del Apple II Mini . Apple. 1977.
  • Hertzfeld, Andy (junio de 1985). "La triste historia de MacBasic" . Folklore .
  • Helmers, Carl (marzo de 1978). "Una manzana para bytear" . Byte . págs. 18–24 , 30–32 , 35, 40–46 . 
  • Raskin, Jef (1978). Manual de programación BASIC para Apple II (PDF) . Apple Computer.
  • Weyhrich, Steven (12 de diciembre de 2001). "Historia parte 3: El Apple II" . Recuperado el 16 de septiembre de 2007 .
  • Wozniak, Steven (mayo de 1977). "Descripción del sistema / El 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 . Recuperado el 23 de octubre de 2013 . 
  • Wozniak, Steven (1 de mayo de 2014). "Cómo Steve Wozniak escribió BASIC para el Apple original desde cero" . Gizmodo .
  • Wozniak, Steven (3 de enero de 2018). "Apple BASIC" . Woz.org .
  • Desensamblaje de Apple II Integer Basic , versión descompilada manualmente por Paul Santa-Maria.
  • Referencia de INTEGER BASIC Del sitio web "Apple II Programmer's Reference" de Landsnail.com
  • Tarjeta de firmware BASIC para Apple-1 diseñada por John Calande, esquema incluido.