BASIC09 es un dialecto del lenguaje de programación BASIC estructurado desarrollado por Microware en nombre de Motorola para la entonces nueva CPU Motorola 6809 y lanzado en febrero de 1980. [ 1 ] Se utiliza principalmente con el sistema operativo OS-9 , lanzado en 1979. Microware también lanzó una versión para OS-9/68k en el 68000 como Microware BASIC . [ 2 ]
A diferencia de los BASIC típicos de la época, BASIC09 incluye un compilador multipaso que produce un código de bytes compacto conocido como I-code . I-code reemplaza varias estructuras de datos presentes en otros BASIC con punteros directos a código y valores, lo que acelera el rendimiento. Los usuarios pueden compilar aún más el código mediante el PACKcomando, momento en el que OS-9 puede llamarlo directamente y ejecutarlo como código nativo. En el caso del código PACKed, se utiliza una versión reducida del sistema de ejecución de BASIC09 , Runb , lo que mejora aún más el consumo de memoria y el tiempo de carga.
El lenguaje incluye una serie de adiciones de programación estructurada , que incluyen variables locales , la capacidad de ignorar los números de línea en favor de rutinas con nombre, estructuras definidas por el usuario y varios tipos de datos base distintos, incluidos enteros de 16 bits y de 8 bits (byte), además de números de coma flotante y cadenas de caracteres.
En junio de 2026, el desarrollador de código abierto Boisy Gene Pitre anunció el front-end BASIC09 para LLVM . [ 3 ] [ 4 ]
Sintaxis
Organización del programa
Una diferencia clave entre BASIC09 y los BASIC convencionales de la época, como el canónico Microsoft BASIC , es la adición de la PROCEDUREestructura que creaba bloques de código ejecutables por separado. El código en un PROCEDUREtenía más en común con los programas completos en otros BASIC, incluyendo que las variables eran locales al código y su capacidad de ejecutarse de forma independiente. PROCEDURELos se llamaban por nombre usando el RUNcomando y podían incluir variables para la semántica de llamada a función; por ejemplo, RUN add(4,7)llama a un procedimiento llamado addque toma dos parámetros. Los parámetros se importaban al procedimiento usando la PARAMpalabra clave, en este ejemplo PARAM a,b: [ 5 ]
PROCEDIMIENTO agregar PARÁMETROS a,b IMPRIMIR a+b
Un efecto secundario del uso de procedimientos con nombre es que el espacio de trabajo de memoria resultante es, en efecto, su propio espacio de nombres. En este sentido, el sistema BASIC09 se presenta al usuario como un directorio de programas invocables. Esto contrasta con los BASIC típicos, donde solo un programa está disponible a la vez y la construcción de programas más grandes que llaman a código tipo biblioteca generalmente requiere copiar y pegar el código fuenteLOAD entre programas separados. En BASIC09, el usuario puede agregar procedimientos por nombre al espacio de trabajo y luego llamarlos desde su propio código para construir programas más grandes a partir de los procedimientos almacenados por separado . [ 6 ] [ a ]
Además del código en el espacio de trabajo, si el programa invocaba RUNun procedimiento cuyo nombre no se encontraba, buscaba un archivo en disco con el mismo nombre, lo cargaba y lo ejecutaba. Esto funcionaba no solo con código BASIC09, sino también con cualquier otro programa ejecutable, incluidos los archivos en lenguaje máquina . Esto significaba que BASIC09 podía llamar fácilmente a rutinas del sistema. [ 7 ]
Además de RUN, otros comandos comunes de BASIC también usaban nombres. Por ejemplo, LIST bobimprimiría el código fuente ("list") del procedimiento llamado "bob", mientras que LIST*imprime todos los procedimientos actualmente en memoria. La salida formateada de LISTpodría redirigirse a un archivo o a una impresora con una notación similar a la de la shell, por ejemplo LIST bob >/p. También se podrían ejecutar SAVEy LOADprocedimientos desde el almacenamiento. [ 8 ]
Programación estructurada
Además de las propiedades organizativas de PROCEDURE, BASIC09 también incluyó una serie de extensiones a las sentencias de control de flujoIF que se encuentran en BASIC para proporcionar más estructura. Por ejemplo, la sentencia podía usarse en el formato tradicional IF... THENen una sola línea, o podía usarse en un formato estructurado de varias líneas: [ 9 ]
SI x>10 ENTONCES IMPRIMIR "x es mayor que 10" DEMÁS IMPRIMIR "x es menor que 10" FIN SI
FOR/NEXTLos bucles tienen naturalmente un formato estructurado, ya que NEXTpueden colocarse en cualquier línea, pero BASIC09 también agregó WHILE/ENDWHILEy REPEAT/UNTILpara mayor claridad al trabajar con bucles no indexados. [ 10 ] También incluyó la salida central LOOP/ENDLOOPque usaba la EXITIFinstrucción para realizar pruebas en cualquier parte del cuerpo del bucle. [ 11 ]
Tipos de datos
BASIC09 incluía varios tipos de datos integrados. Además de los tipos tradicionales de cadena (STRING) y de punto flotante de 40 bits (REAL) presentes en la mayoría de los BASIC de la época, también incluía el tipo entero con signo de 16 bits, el tipo byte sin signo de 8 bits y el tipo lógico booleano. Los tipos booleanos no se empaquetaban en bytes; un solo booleano utilizaba un byte completo de 8 bits para almacenar un único valor. El lenguaje proporcionaba operadores booleanos separados para operaciones bit a bit en bytes e enteros. [ 12 ] A diferencia de otros BASIC que también operaban con diferentes tipos base, BASIC09 no "decoraba" el nombre de la variable para indicar el tipo, sino que utilizaba el DIMpara definiciones; por ejemplo, DIM a,b:BOOLEANpara declarar dos variables booleanas o DIM c(5):INTEGERpara una matriz de cinco enteros. [ 13 ]
Además, BASIC09 incluía la TYPEpalabra clave, que permitía definir tipos compuestos, con cada "elemento" listado en una sola línea separado por punto y coma. Por ejemplo: [ 14 ]
TIPO registro_empleado=nombre:CADENA;número(2):INTEGER;anterior:BOOLEAN
define un tipo de registro de empleado employee_recordcon tres elementos, name, numbery former. El tipo employee_record ahora se puede usar en una definición como cualquier otro tipo, por ejemplo, DIM employees(100):employee_record, que define una matriz de 100 employee_record. Se accede a los elementos en el código usando la notación de punto, por ejemplo, employees(50).name="Bob". [ 14 ]
Tiempo de ejecución
Edición
En la mayoría de los dialectos de BASIC, los números de línea se utilizaban principalmente para facilitar el trabajo del editor. Los usuarios editaban líneas de código específicas escribiendo un número, y el texto que aparecía a continuación añadía o reemplazaba las líneas ya almacenadas en memoria. Dado que cada línea de código tenía un número, también resultaban útiles para indicar el destino de una instrucción GOTOo un comando GOSUB, a diferencia de otros lenguajes como FORTRAN, donde se utilizaba una "etiqueta de línea" independiente para este fin.
BASIC09 no solía usar números de línea, por lo que su editor tuvo que modificarse para permitir al usuario editar líneas sin referenciarlas numéricamente. Sin embargo, BASIC09 no admitía ningún tipo de pantalla completa, por lo que usar las teclas de cursor no era una opción. En su lugar, el sistema tenía un indicador de editor independiente y permitía al usuario desplazarse usando las teclas + y - , avanzando o retrocediendo una línea a la vez. Para insertar una nueva línea de código sin número de línea, el usuario dejaba un espacio en blanco al principio de la instrucción. [ 15 ]
Tenga en cuenta que el lenguaje distingue entre mayúsculas y minúsculas para los valores proporcionados por el usuario, como los nombres de procedimientos y variables, pero no para las palabras clave. Las palabras clave escritas en el editor en minúsculas se mostrarán en mayúsculas cuando se LISTedite el programa. [ 16 ] BASIC09 permitía múltiples instrucciones en una sola línea de código, pero usaba la \ como separador en lugar de los : utilizados en la mayoría de los dialectos. [ 17 ] [ b ] Esto se debe a que usaba los dos puntos en el operador de asignación, que era además del . normal era idéntico en efecto a , pero hacía más obvia la diferencia entre asignaciones y comparaciones. [ 18 ]:==:==
Compilador
El compilador interno de múltiples pasadas convierte el código fuente de BASIC09 en un código de bytes tokenizado y optimizado , llamado I-code. [ 19 ] El I-code se diferencia del enfoque de tokenización más tradicional que se encuentra en la mayoría de los BASIC en que varios elementos se colocaban directamente en la memoria en lugar de usar referencias que luego debían buscarse. [ 20 ]
Por ejemplo, en los intérpretes basados en MS, una referencia a una variable en el código se deja en formato de cadena; la variable VARse representaría en memoria mediante los tres caracteres ASCII "VAR". Durante la ejecución, cuando se encuentra esta variable en el código, el intérprete debe buscar esa cadena en una tabla de variables, encontrar la dirección de almacenamiento asociada en memoria y, finalmente, leer el valor almacenado en esa ubicación. La tabla suele estar construida de forma que el valor siga al nombre, para ahorrar tiempo durante la búsqueda final. [ 19 ]
En cambio, en I-code la dirección de la variable se determina de antemano y la referencia en el código se reemplaza por esa dirección. Esto evita una búsqueda en tiempo de ejecución a través de la tabla de variables. [ 19 ] Otras optimizaciones incluyen una rutina separada FOR/NEXTque se usa cuando la variable de índice es un ENTERO, y bibliotecas matemáticas separadas para ENTEROS y REALES. [ 20 ] [ c ]
Para un mejor rendimiento, BASIC09 también incluía el PACKcomando que tomaba un nombre de procedimiento y devolvía una versión optimizada. Algunas de estas optimizaciones incluían la eliminación de instrucciones no codificantes, como comentarios de código, y la sustitución de expresiones constantes por un único valor. Por ejemplo, PACKreconocería que LET x=x+SQR(100)/2contiene solo constantes a la derecha y lo reemplazaría con el código x=x+5, que requiere solo una operación en tiempo de ejecución, la suma, eliminando la división y la raíz cuadrada. PACKredujo el consumo de memoria del procedimiento y mejoró el rendimiento entre un 10 y un 30 % aproximadamente. [ 21 ]
Tiempo de ejecución ligero
Aunque era común ejecutar programas dentro del entorno BASIC09, como ocurría en otros BASIC, BASIC09 también incluía una versión separada del código dedicada exclusivamente a la ejecución, conocida como Runb. Runb eliminaba las funciones de edición y depuración del sistema y, como resultado, ocupaba aproximadamente la mitad del tamaño de la versión completa de BASIC09. [ 22 ]
El propósito principal de Runb era ejecutar módulos PACKed cuando se les llamaba desde otros programas. Esto significaba que si el usuario escribía el nombre de un módulo BASIC09 en la línea de comandos de OS/9, y ese módulo estaba marcado como PACKed, Runb lo abría y ejecutaba en lugar de BASIC09. Esto reducía el consumo de memoria y mejoraba el tiempo de carga. [ 22 ]
Características significativas
- disposiciones de flujo de control razonablemente estructuradas (por ejemplo, los números de línea eran necesarios principalmente para los cálculos
GOTO, ya que BASIC09 no tenía una instrucción switch/case, o para los cálculosGOSUB). - Declaración de estructura (poco común en cualquier variante de BASIC en aquel entonces; más frecuente en implementaciones posteriores de BASIC).
- tipos de datos enteros y booleanos intrínsecos
- más de dos caracteres significativos en los nombres de las variables (algunos BASIC de la época solo permitían uno, muchas variantes de Microsoft BASIC solo permitían dos)
- procedimientos con variables locales (de hecho, todas las variables en BASIC09 son locales a los procedimientos) y paso de parámetros por referencia.
- un depurador aceptable (su único inconveniente significativo era que no se podía examinar el contenido de los campos en las estructuras).
- una forma de interactuar con el código en lenguaje máquina , al que se le podrían pasar parámetros utilizando la secuencia de llamadas BASIC09.
- El formateo automático del código fuente imponía un diseño estándar y evitaba el horrible desorden que solía tener un programa de cualquier tamaño en los BASIC interpretados de la época. Los programadores normalmente agrupaban tantas líneas como fuera posible para evitar la sobrecarga de memoria del número de línea, lo cual no era un problema en BASIC09 [ 23 ].
Véase también
- COMAL era otro lenguaje similar a BASIC con estructuras de programación estructuradas.
Notas
- ↑ El sistema GRASS era similar en el sentido de que su lenguaje tipo BASIC podía ensamblarse a partir de procedimientos separados con nombre, pero lo hacía dejando todo como código fuente sin tokenizar, a diferencia de la precompilación como en BASIC09.
- ↑ El signo de dos puntos se utilizaba para indicar el tipo de datos en las
DIMinstrucciones. - ↑ Atari BASIC también funcionaba de esta manera: el código fuente se compilaba en tokens cuando se ingresaba la línea y cualquier referencia a variables se reemplazaba por un puntero al almacenamiento.
Referencias
Citas
- ↑ Manual 1984 , pág. 1.2.
- ↑ "BASIC09" . Geneslinuxbox.net:6309 . Archivado del original el 4 de marzo de 2016. Consultado el 27 de noviembre de 2016 .
- ↑ Larabel, Michael (23 de junio de 2026). "Front-end del lenguaje de programación BASIC09 desarrollado para LLVM" . www.phoronix.com . Consultado el 25 de junio de 2026 .
- ↑ Pitre, Boisy Gene (23 de junio de 2026). " [ RFC ] Agregar herramienta de interfaz BASIC09 a LLVM" . Foros de discusión de LLVM . Recuperado el 25 de junio de 2026 .
- ↑ Manual 1984 , pág. 5.1.
- ↑ Manual 1984 , pág. 3.5.
- ↑ Manual 1984 , pág. 9.12.
- ↑ Manual 1984 , pág. 2.9.
- ↑ Manual 1984 , pág. 9.4.
- ↑ Manual 1984 , págs. 9.6-9.7.
- ↑ Manual 1984 , pág. 9.8.
- ↑ Manual 1984 , págs. 7.2–7.6.
- ↑ Manual 1984 , pág. 7.6.
- 1 2 Manual 1984 , pág. 7.8.
- ↑ Manual 1984 , pág. 2.3.
- ↑ Manual 1984 , pág. 2.5.
- ↑ Manual 1984 , pág. 9.1.
- ↑ Manual 1984 , pág. 9.2.
- 1 2 3 Manual 1984 , pág. 11.1.
- 1 2 Manual 1984 , pág. 11.2.
- ↑ Manual 1984 , pág. 11.3.
- 1 2 Manual 1984 , pág. D.1.
- ↑ Voigts, Ron (abril de 1987). "Básicamente OS-9" . 68 Micro Journal . 9 (4).
Una de sus características más destacadas es su manejo de la salida formateada. Otros lenguajes varían en cuanto a su capacidad para manejar la salida formateada. Pero BASIC09 puede hacer un excelente trabajo al colocar las líneas en el formato deseado.
Bibliografía
- Manual de referencia del lenguaje de programación BASIC09 (PDF) . 1984.
- "OS-9 Basic 09 - El Archivo del Dragón" . Archive.worldofdragon.org . 7 de mayo de 2016. Consultado el 27 de noviembre de 2016 .
Lecturas adicionales
- "Historia temprana de OS-9, contenido seleccionado de 68 Micro Journal" . aaronwolfe.com . pág. 3. Archivado del original el 29 de marzo de 2025.Primera reseña de OS-9 y Basic09, enviada por Tom Harmon de HHH Enterprises.
- Puckett, Dale L. (1985). Guía turística Basic09 . ISBN 0-918035-00-7Archivado del original el 18 de octubre de 2023 .N.º de catálogo 26-3189
- Paquete: Basic09 1.1.0 / Fecha de lanzamiento: 5 de enero de 2003. geneslinuxbox.net . Archivado del original el 4 de marzo de 2016.
Esta versión de Basic09 para Tandy Color Computer 1/2/3 representa la primera versión desarrollada por la comunidad desde la descontinuación de CoCo en la década de 1980.
- "Anuncio: BASIC09 tiene una doble personalidad" . 68 Micro Journal . Vol. 4, n.º 1. Enero de 1982. pág. 7.
- "Historia temprana de OS-9, contenido seleccionado de 68 Micro Journal" . aaronwolfe.com . pág. 4. Archivado del original el 18 de octubre de 2023.
Diciembre de 1980: Microware modifica ligeramente su anuncio del 6809. Basic09 ahora se llama "Sistema de lenguaje de programación Basic09" por Microware en lugar de "Motorola Basic09".
- McKay, Colin (12 de abril de 1995). "newsgroups: comp.os.os9, Asunto: Re: OS/2 vs. W95 y OS-9, resumen: Extractos de la historia de Microware en el boletín del grupo de usuarios de OS-9" . groups.google.com . Recuperado el 25 de junio de 2026.
Boletín de nuevos productos de Microware. Abril de 1979. Gracias por su consulta sobre nuestra línea de productos de hardware y software de la familia 6800. Estamos en el proceso de introducir nuevo software, por lo que nuestro catálogo de 1979 no estará listo por algún tiempo. Mientras tanto, presentamos información sobre nuevos productos en este boletín. SOFTWARE 6809. Motorola contrató a Microware para producir el mejor software posible para el 6809. El nuevo software que hemos preparado para Motorola incluye un nuevo sistema de lenguaje BASIC más un sistema operativo. Este software estará disponible pronto a través de Motorola y Microware.
- Acerca del autor . www.ciphersbyritter.com .
Terry Ritter, anteriormente: Ingeniero de plantilla, División Motorola MOS, Grupo de diseño de sistemas de microcomputadoras, julio de 1976 - enero de 1981. Arquitecto del lenguaje BASIC estructurado para 6809. Ingeniero de software, 1979-81. Creador e ingeniero supervisor del proyecto BASIC09, 1978-80, un proyecto de lenguaje BASIC estructurado, con sistema operativo OS9 y especificaciones asociadas.
- Computadora a color TRS-80
- Intérpretes BÁSICOS