Acorn System BASIC y Atom BASIC son dos variantes estrechamente relacionadas del lenguaje de programación BASIC, desarrolladas por Acorn Computers para sus primeros microordenadores, como el Acorn System 3 y el Acorn Atom . Desarrolladas internamente, presentan una serie de peculiaridades significativas en comparación con la mayoría de las variantes de BASIC de la época de los ordenadores domésticos .
En particular, el lenguaje carecía de instrucciones para muchas de las funciones internas de la máquina y proporcionaba esto mediante acceso directo y manipulación de ubicaciones de memoria usando operadores de indirección en lugar de PEEK y POKE . Ambos también carecían de soporte para coma flotante , aunque esto podía agregarse con una ROM opcional que introdujo más peculiaridades. System y Atom BASIC se diferencian principalmente en que Atom usaba el mismo sistema de indirección para proporcionar manipulación rudimentaria de cadenas, de la que carecía Standard, y agregaba un pequeño número de nuevas instrucciones para gráficos por computadora .
La mayoría de estas peculiaridades se eliminaron cuando el sistema subyacente se amplió considerablemente para producir BBC BASIC en el sucesor del Atom, el BBC Micro . Posteriormente, se ofrecieron ROMs de BBC BASIC a los usuarios del Atom.
Historia

Acorn Computers se formó en 1978 y comenzó fabricando una serie de sistemas ensamblados a partir de kits y basados en Eurocard , comenzando con el Acorn System 1 en 1979. Desarrollaron Acorn System BASIC para estas máquinas, [ 1 ] un dialecto exclusivamente de enteros que requería solo 4 KB de memoria en total. [ 2 ] El lenguaje tenía una serie de detalles de implementación que lo hacían "altamente no estándar". [ 3 ]
El Atom , presentado en 1980, se construyó a partir de partes del System 3 empaquetadas en una sola placa. Los sistemas se distribuían de serie con 2 KB de RAM y 8 KB de ROM, que incluían BASIC y varios controladores de dispositivos . Atom BASIC solo tenía algunos cambios con respecto a la versión del System, añadiendo soporte para manipulación de cadenas y un pequeño número de comandos gráficos. El Atom era actualizable, con hasta 12 KB de RAM en total y 4 KB adicionales de ROM que añadían soporte para coma flotante . Esto utilizaba funciones y operaciones separadas que trabajaban con ellas, indicadas por el símbolo %. [ 3 ] Esta elección de símbolo fue desafortunada, ya que Microsoft BASIC utilizaba el signo de porcentaje para indicar números enteros, no coma flotante. [ 4 ]
El Atom estuvo en el mercado solo por un corto período antes de que Acorn comenzara el desarrollo de su sucesor, el Proton. Inicialmente, este iba a ser una unidad de dos procesadores. El diseño aún estaba en sus primeras etapas cuando una serie de eventos llevaron a que fuera seleccionado como base para el BBC Micro de una sola CPU . [ 1 ] En ese momento, hubo comentarios de que definitivamente no debería usar la versión de BASIC de Acorn, que "prácticamente ningún otro microordenador puede entender" y que "si el nuevo lenguaje se basara en la versión de BASIC del Atom, sería un desastre". [ 5 ]
En última instancia, el sistema de la BBC sí utilizó esas variantes antiguas de BASIC escritas por Acorn, pero con importantes modificaciones. El BBC BASIC resultante era mucho más similar a Microsoft BASIC y posteriormente se ofreció como una actualización para Atom. [ 6 ]
Descripción
Dado que ambos dialectos son muy similares, a continuación se hará referencia principalmente a Atom BASIC y se señalarán las diferencias cuando existan.
Edición de programas
Como la mayoría de los BASIC de la época, Atom BASIC utilizaba un editor orientado a líneas con modos directo (inmediato) e indirecto. Al escribir una instrucción sin número de línea, la operación se ejecutaba inmediatamente. Si se añadía un número de línea, esas instrucciones se insertaban en el programa almacenado. Una peculiaridad era que, si bien permitía varias instrucciones en una sola línea, el separador entre ellas era el punto y coma [ 7 ] en lugar de los dos puntos, que eran los más comunes, lo que obligaba al usuario a convertir ese carácter al escribir programas para otros ordenadores.
Diseñado para usarse con terminales de computadora , Acorn BASIC no admitía un modo de edición a pantalla completa. En contraste, en Commodore BASIC (y muchos otros dialectos de microcomputadoras), se pueden usar las teclas de cursor para desplazarse hacia arriba en la lista de programas, realizar cambios en pantalla y luego presionar Returnpara confirmarlos. En el Atom, que tenía una pantalla completa, se podía desplazarse hacia arriba en la lista usando las teclas de cursor , pero para editar ese texto, se presionaba la tecla para copiarlo al área de entrada donde se podía editar. [ 8 ]Copy
Otra diferencia en el Atom era la tecla, que realizaba un reinicio del sistema, borrando potencialmente el programa de la memoria. Para restablecer esto si la tecla se pulsaba por error, Atom BASIC añadió el comando, que también podía usarse para restablecer un reinicio accidental . Un cambio menor fue que usaba números de línea de inicio y fin separados por comas en lugar del signo menos, imprimiendo las líneas 20 a 40. [ 9 ]BreakOLDNEWLISTLIST 20,40
El lenguaje también tenía la capacidad de usar etiquetas de línea en lugar de números para ramificar . Las etiquetas consistían en una sola letra minúscula escrita inmediatamente después del número de línea. Por ejemplo: [ 10 ]
10s IMPRIMIR "*" 20 GOTO s
La ventaja de este método es que la dirección de memoria de la instrucción se almacena en s, lo que significa que la bifurcación, un GOTO, puede moverse directamente a esa línea sin tener que buscar en cada línea del programa el número de línea correspondiente. [ 10 ] Acorn también permitía usar cualquier expresión para producir el número de línea para los destinos de bifurcación, como GOSUB 500+(A*10). [ 11 ]
Declaraciones
Las primitivas de Acorn eran similares a otros BASIC de la época y admitían la mayoría de las instrucciones elementales como CLEAR, DIM, END, FOR..TO..STEP..NEXT , GOSUB , GOTO , IF..THEN , INPUT, (opcional) LET, LIST, LOAD, PRINT, REM , RETURN , RUN, SAVE, STOP . [ 12 ] Faltan varias instrucciones comunes, en particular DATA, READ, RESTORE utilizadas para almacenar datos en un programa, ON..GOSUB, ON..GOTO para saltos calculados y DEF FN para funciones definidas por el usuario. [ a ]
A estos fundamentos, Acorn añadió DO..UNTILla construcción de bucles basados en expresiones con comprobación de fondo. Los bucles FOR están altamente optimizados mediante una comparación directa entre su variable de índice y un valor constante que se establece solo una vez al entrar en el bucle. Otra optimización es que se almacena la dirección del FOR, no el número de línea, de modo que cuando se encuentra el NEXT correspondiente, el programa puede volver inmediatamente al FOR. Si bien FOR es adecuado para muchos bucles, cuando se necesita mayor control, por ejemplo, al comparar con un criterio más complejo, en la mayoría de los dialectos se debe utilizar la instrucción IF.
500 A = A + 1 510 REM instrucciones adicionales aquí 600 SI A > 10 Y B > 100 ENTONCES 500La desventaja de este tipo de bucle es que la bifurcación requiere que se busque la línea 500 en el programa, lo que, en un bucle, suele ocurrir muchas veces. En programas grandes, esto puede generar una sobrecarga considerable. Utilizar un bucle DO para este propósito ofrece un mayor rendimiento.
500 HACER A = A + 1 510 REM instrucciones adicionales aquí 600 HASTA QUE A > 10 Y B > 100En este caso, al igual que en el bucle FOR, la dirección del DO se almacena al entrar en el bucle, lo que permite que el UNTIL regrese al inicio del bucle inmediatamente sin tener que recorrer el programa. [ 14 ] Nótese el caso especial en el que el DO puede ir seguido directamente de otra instrucción sin que se requiera el separador de punto y coma; A=A+1no forma parte del DO , es una instrucción independiente. [ 15 ]
Entre las adiciones menores se encuentra la instrucción WAIT , que pausa la ejecución hasta el siguiente ciclo de reloj, cada 1/60 de segundo. Esto no espera un ciclo completo, sino solo hasta el siguiente , que puede ocurrir inmediatamente. [ 14 ] LINK llama a una rutina en lenguaje máquina , [ 16 ] el análogo de CALL o SYS en la mayoría de los dialectos. [ 17 ]
Matemáticas, operadores y funciones
Acorn utilizaba enteros con signo de 32 bits para todas las operaciones matemáticas, [ 18 ] sin soporte estándar para coma flotante . Para manejar la división, que a menudo devuelve una parte fraccionaria, añadieron el %operador para devolver el resto. Por ejemplo, PRINT 7/3devolverá 2, mientras que PRINT 7%3devolverá 1. [ 19 ]
Los nombres de las variables solo pueden constar de una sola letra, de la A a la Z. [ 20 ] Todas las combinaciones de dos letras están reservadas como matrices, por lo que E era un valor único, mientras que EE era una matriz. Todas las matrices requerían una instrucción DIM, [ 21 ] no asumía una dimensión de 10 como Microsoft BASIC . En tiempo de ejecución, la única comprobación que se realizaba en una matriz era que el índice que se pasaba fuera un valor positivo, por lo que se podía leer en la memoria pasando valores mayores que la dimensión. [ 22 ] No admitía matrices multidimensionales. [ 23 ]
Las operaciones matemáticas básicas incluían +, -, *, / y % . También admitía operadores lógicos bit a bit, con &, \ y : utilizados para AND, OR y XOR, respectivamente. Estos operadores realizan comparaciones, por lo que devuelven 0. El uso de los dos puntos para OR [ b ] es la razón por la que el separador de instrucciones tenía que usar el punto y coma. [ 24 ] Nótese que estas son independientes de las conexiones lógicas que se encuentran en las instrucciones IF, como , que también son compatibles. [ 25 ]1 & 0IFA=1ANDB=0THEN...
Solo existían dos funciones matemáticas: ABS y RND . ABS funciona como en otros BASIC, devolviendo el valor absoluto de una entrada dada. RND funciona de manera diferente a la mayoría de los dialectos, devolviendo un valor entre los valores enteros máximos negativos y positivos. Para usarla de forma convencional y devolver un valor entre 0 y un valor positivo dado, por ejemplo, entre 0 y 10, se utilizaba . [ 26 ]ABS(RND)%11
Vectores
La mayoría de los BASIC de la época usaban PEEK y POKE para acceder a funcionalidades específicas de la máquina que no estaban integradas en el propio lenguaje. Acorn no tenía PEEK ni POKE, y usaba nuevos operadores para proporcionar esta funcionalidad en un sistema más fácil de usar. Los operadores eran ?y !, el primero establecía o devolvía el byte en una ubicación dada, y el segundo establecía o devolvía una "palabra" de 4 bytes. [ 27 ] Por ejemplo, ejemplos comunes de PEEK en la mayoría de los dialectos, como , podían lograrse con . [ 28 ] La mayoría de los dialectos carecían del equivalente del !. [ c ] Además, la misma sintaxis podía usarse para establecer el valor en memoria, como un POKE, por ejemplo, . [ 28 ]PRINTPEEK(4000)PRINT ?4000 ?4000=200
Para facilitar el acceso a datos organizados de forma continua en la memoria, como matrices de números, los operadores podían aplicarse al lado derecho de una variable. Al usarse de esta manera, como A?, el sistema accedía a la memoria en la ubicación de la variable. Cualquier número que siguiera al operador se aplicaba como un desplazamiento; por ejemplo, A?100devolvería el valor del byte situado 100 posiciones después de la ubicación de A en la memoria. [ 28 ]
Esto se usaba a menudo con otro concepto exclusivo de Acorn, el "vector". Curiosamente, estos se creaban usando los mismos comandos DIM que una matriz, pero aplicados a variables de una sola letra. Cuando se encontraba el DIM, el sistema reservaba esa cantidad de ubicaciones en la parte superior de la memoria y luego movía el puntero de memoria hacia arriba. Esto dejaba un bloque de memoria al que luego se podía acceder con los operadores de indirección. Por ejemplo: [ 28 ]
10 DIM A ( 100 ) 20 PRINT A ? 10Lo que imprimirá el valor del byte en la posición 11 en A (todos los accesos están indexados desde cero). [ 28 ] Del mismo modo, se podrían almacenar valores en la memoria utilizando el mismo operador aplicado antes del nombre de la variable:
!A=123456
Esto convertirá el valor decimal 123456 de ASCII en un entero y lo almacenará en las ubicaciones de memoria comenzando en la ubicación base para A. [ 27 ]
Para facilitar el trabajo con vectores, Acorn añadió la pseudovariable TOP. Cuando el sistema se iniciaba, apuntaba a la primera ubicación después del final del programa. A continuación, se creaban las dimensiones (DIM) con el valor actual de TOP, y TOP se actualizaba al final del nuevo objeto. Era posible crear vectores dinámicos manipulando directamente TOP. [ 30 ]
Instrumentos de cuerda
Atom BASIC añadió soporte para cadenas, pero no admitía variables de cadena ni tenía el concepto de cadena como tipo atómico. En su lugar, se utilizaba el sistema vectorial para manipular datos de cadena en memoria, como valores ASCII . [ 28 ] Para facilitar este uso, el $operador convertía los valores en memoria a sus valores ASCII. Este operador seguía leyendo datos de la memoria hasta que encontraba un retorno, y al escribir datos en la memoria, siempre añadía un retorno al final. [ 31 ] Así, mientras que PRINT ?Aimprimiría el único valor del byte en la ubicación de A en la memoria como un número, PRINT $Aleería los valores a partir de esa ubicación y los imprimiría como una cadena. [ 31 ] Por ejemplo:
10 DIM A ( 12 ) 20 $ A = "HOLA, MUNDO" 30 PRINT $ AEste código puede parecer muy similar al uso de cadenas en otros dialectos, aunque la ubicación del $ con respecto al nombre de la variable cambia. Es especialmente similar a aquellos dialectos que requerían un DIM en todas las cadenas, como HP Time-Shared BASIC o Atari BASIC . Internamente, la operación es muy diferente. En esos dialectos, A y A$ son dos variables distintas y el $ es, en efecto, parte del nombre. En Acorn, A y $A son la misma variable, y el $ aplica una operación unaria a esa variable. Esto también significa que se pueden usar arreglos para cadenas, como $AA(10), que convierte el valor en AA(10) a una cadena. [ 3 ]
Este concepto permite acceder a caracteres individuales mediante notación vectorial. Por ejemplo, A?5devolvería el valor ASCII del quinto carácter, 79 para la O en este caso, mientras que PRINT $A?5mostraría "O". [ 32 ] No hay forma de extraer una subcadena en una sola operación; hay que recorrer los caracteres y moverlos uno por uno. La concatenación es posible asignando una variable al final de otra; por ejemplo, $A+LEN(A)=$Bcopia la cadena B al final de A. [ 33 ]
El lenguaje solo tiene dos funciones de cadena: LENuna que busca el carácter de retorno de carro final y devuelve la longitud, y CHotra que devuelve el valor ASCII de un carácter. CH tiene un formato peculiar sin paréntesis, por lo que CH"A"devolvería 65. [ 32 ] Por lo demás, es similar al formato más común ASCque se observa en otros dialectos. [ 34 ]
Otro operador nuevo era #, que convertía un valor numérico en una cadena hexadecimal . Al igual que $, podía usarse en cualquier lugar para realizar la conversión. Por ejemplo, A=#4000establece el valor de A al valor decimal 16384, la ubicación de la memoria de pantalla. A menudo se combinaba con el operador $ para permitir que las cadenas contuvieran caracteres no imprimibles, como el carácter de "cursor arriba". [ 8 ]
Punto flotante
Se podía añadir soporte para coma flotante con la expansión adicional de ROM de 4 KB. Esto utilizaba un tamaño de palabra expandido de 40 bits, 32 bits de mantisa con signo seguidos de un exponente de 8 bits. [ 35 ] Esto significaba que el sistema necesitaba alguna forma de distinguir los datos al leer y escribir en la memoria, lo cual se manejaba de forma similar al operador de cadena, utilizando el %prefijo: [ 35 ]
%A=123,45
Como el código estaba contenido en una ROM separada de 4 KB, no modificó las instrucciones existentes como PRINT. En su lugar, se introdujo un conjunto completamente nuevo de instrucciones, incluyendo FDIM, FIF, FINPUT, FPRINT, FUNITL . Esto significa, por ejemplo, que no se puede si los valores son de punto flotante, se debe en su lugar . Un valor entero se puede convertir a flotante usando el operador de punto flotante , y flotante a entero usando el operador de punto flotante, %. [ 27 ]IF A=BFIF A=BFLT
La ROM también incluía una variedad mucho mayor de funciones matemáticas, incluyendo ABS, ACS, ASN, ATN, COS, DEG, EXP, FLT, HTN, LOG, PI, RAD, SGN, SIN, SQR, STR, TAN, VAL . [ 36 ] convertía un número de punto flotante en una cadena, como ocurría en otros dialectos, pero en este caso, la cadena se escribía en la memoria y la función devolvía la dirección donde estaba almacenada. Como la cadena requería suficiente espacio de almacenamiento para contenerla, esto a menudo se lograba usando TOP. Por ejemplo:STRSTR$
STR PI, TOP IMPRIMIR $TOP TOP=TOP-LEN(TOP)
Esto convierte el valor de la pseudovariable PI en una cadena que comienza en la ubicación de memoria TOP, imprime la cadena usando $TOP y luego abandona esa memoria. [ 37 ]
Entrada/salida
PRINT e INPUT funcionaban en su mayoría como en otros dialectos. Una peculiaridad surgió porque los dos puntos y el punto y coma ya se usaban para otros propósitos, dejando solo la coma para separar campos. Para imprimir valores sin espacios entre ellos, los valores se listaban con un espacio entre ellos, como , un formato que también estaba permitido en muchos otros dialectos, aunque rara vez se usaba. Esto por sí solo no haría que los números se imprimieran en formato compacto, porque normalmente se imprimen con espacios a la derecha para que cada uno tenga 8 caracteres de ancho. Esto se podía ajustar cambiando el valor en la pseudovariable. [ 38 ] Un salto de línea se imprimía con una comilla simple, . [ 27 ] COUNT devuelve la columna del cursor, similar a POS en la mayoría de los dialectos. [ 39 ]PRINT A B C@PRINT"HELLO"'"WORLD"
El dispositivo de almacenamiento predeterminado para el Atom era un sistema de casete compacto . Cada archivo se almacenaba como una serie de bloques, cada uno de los cuales contenía un encabezado con el nombre del archivo. [ 40 ] Los archivos guardados con SAVE THISFILEpodían leerse de nuevo con LOAD THISFILE, mientras que *CATlistaba los nombres de los archivos en el casete a medida que leía más allá de sus encabezados. [ 41 ]
Los datos arbitrarios podían abrirse para lectura usando FIN o escritura con FOUT , ambos devolviendo un identificador de archivo numérico . Los archivos se cerraban con SHUT . Los datos se leían o escribían en formato numérico usando GET, PUT , como bytes individuales con BGET, BPUT , y como cadenas usando SGET, SPUT . EXT devolvía la longitud del archivo, mientras que PTR devolvía o establecía el puntero actual en el archivo, [ 16 ] el número de bytes leídos o escritos hasta el momento. [ 42 ] Si la ROM de punto flotante estaba presente, añadía FGET, FPUT . [ 36 ]
Por ejemplo:
A = FOUT "AFILE" DO BPUT A , 88 ; ESPERA ; ESPERA ; ESPERA ; ESPERA ; HASTA 0Se utilizará el BPUT para escribir una serie de bytes, 88s, hasta que el usuario presione para detener el programa. Luego se pueden leer (después de rebobinar manualmente la cinta) usando: [ 43 ]Escape
A = FIN "ARCHIVO" HACER IMPRIMIR $ BGET A ; HASTA 0El signo de dólar le indica al sistema que convierta los datos binarios entrantes a formato de cadena, por lo que en este caso, la salida será una serie de X, no de 88. [ 43 ] Podría parecer que SGET podría usarse en lugar de BGET , pero esto intentaría seguir leyendo del archivo hasta que encontrara un carácter de retorno, que en este ejemplo no se había escrito. [ 44 ]
Soporte gráfico
El Atom tenía gráficos de mapa de bits rudimentarios y Atom BASIC añadió una serie de comandos para soportarlos. CLEARBorraba la pantalla, MOVEmovía el cursor gráfico a la ubicación X,Y dada y DRAWdibujaba una línea desde la ubicación actual hasta la X,Y proporcionada. [ 45 ]
La ROM de punto flotante también incluía soporte para gráficos en color con la adición de la COLOURinstrucción. Al llamar a COLOUR con un parámetro del 0 al 3, se establece la salida subsiguiente a ese color. En una pantalla en blanco y negro, los colores se mostraban como tonos de gris. [ 46 ]
Notas
- ↑ Una buena fuente para lo que ya se consideraba el estándar para BASIC de la era de las microcomputadoras es la introducción a BASIC Computer Games , que presenta las instrucciones que utiliza y habla de excepciones al "BASIC normal". [ 13 ]
- ↑ Probablemente porque parece una barra vertical, que se usa en la mayoría de los textos de matemáticas para la OR.
- ↑ Varios dialectos avanzados como Turbo-BASIC XL incluían comandos como
DPEEKpara "doble peek", que devolvían un valor de 16 bits. Estos son similares en concepto a !. [ 29 ]
Referencias
Citas
- 1 2 Gazzard 2016 , pág. 22.
- ↑ Oddy .
- 1 2 3 Lien 1981 , pág. 425.
- ↑ Enlace 1981 , pág. 396.
- ↑ BBC 1981 , pág. 662.
- ↑ Frutas 1982 , pág. 11.
- ↑ Johnson Davies 1979 , pág. 14.
- 1 2 Johnson Davies 1979 , pág. 65.
- ↑ Johnson Davies 1979 , pág. 7.
- 1 2 Johnson Davies 1979 , pág. 25.
- ↑ Johnson Davies 1979 , pág. 26.
- ↑ Johnson Davies 1979 , págs. 3–4.
- ↑ Ahl, David (1978). Juegos de computadora BASIC . Workman. pág. XII.
- 1 2 Johnson Davies 1979 , pág. 37.
- ↑ Johnson Davies 1979 , pág. 35.
- 1 2 Lien 1981 , pág. 427.
- ↑ Enlace 1981 , pág. 43.
- ↑ Johnson Davies 1979 , pág. 67.
- ↑ Johnson Davies 1979 , pág. 11.
- ↑ Johnson Davies 1979 , pág. 12.
- ↑ Johnson Davies 1979 , pág. 45.
- ↑ Johnson Davies 1979 , pág. 50.
- ↑ Johnson Davies 1979 , pág. 51.
- ↑ Johnson Davies 1979 , pág. 15.
- ↑ Johnson Davies 1979 , pág. 30.
- ↑ Johnson Davies 1979 , pág. 24.
- 1 2 3 4 Lien 1981 , pág. 426.
- 1 2 3 4 5 6 Johnson Davies 1979 , pág. 53.
- ↑ Fetzer, Ron (1985). Documentación ampliada de Turbo-BASIC XL (PDF) .
- ↑ Johnson Davies 1979 , pág. 46.
- 1 2 Johnson Davies 1979 , pág. 58.
- 1 2 Johnson Davies 1979 , pág. 59.
- ↑ Johnson Davies 1979 , pág. 61.
- ↑ Enlace 1981 , pág. 45.
- 1 2 Johnson Davies 1979 , pág. 162.
- 1 2 Johnson Davies 1979 , pág. 161.
- ↑ Johnson Davies 1979 , pág. 163.
- ↑ Johnson Davies 1979 , pág. 13.
- ↑ Enlace 1981 , pág. 73.
- ↑ Johnson Davies 1979 , pág. 10.
- ↑ Johnson Davies 1979 , pág. 9.
- ↑ Johnson Davies 1979 , pág. 151.
- 1 2 Johnson Davies 1979 , pág. 8.
- ↑ Johnson Davies 1979 , pág. 152.
- ↑ Johnson Davies 1979 , pág. 28.
- ↑ Johnson Davies 1979 , pág. 167.
Bibliografía
- Johnson Davies, David (1979). Teoría y práctica atómica . Acorn Computers.
- Sistema Acorn BÁSICO (PDF) . Archivado del original (PDF) el 25/03/2023 . Consultado el 11/01/2023 .
- Lien, David (1981). The BASIC Handbook: Encyclopedia of the BASIC Computer Language . Compusoft Publishing.
- Gazzard, Alison (2016). Ahora que las cosas se ponen difíciles: BBC Micro . MIT Press. ISBN 9780262034036.
- "La BBC se enfrenta a problemas lingüísticos básicos" . New Scientist . 12 de marzo de 1981.
- "Acorn ofrecerá frutas en EE. UU." InfoWorld . 14 de junio de 1982.
- Computadoras Acorn
- Intérpretes BÁSICOS
- Familia de lenguajes de programación BASIC