Comodoro BÁSICO

Commodore BASIC (en las primeras versiones PET BASIC ) es el dialecto del lenguaje BASIC utilizado en la línea de 8 bits de las computadoras domésticas Commodore International , desde PET de 1977 hasta C128 de 1985.

Su núcleo estaba basado en Microsoft BASIC adaptado para el procesador MOS 6502 . Dados sus orígenes, compartía gran parte del código con otros BASIC para 6502 de la época, como Applesoft BASIC .

Historia

Bill Gates ofreció inicialmente una licencia basada en el pago de una regalía de 3 dólares por cada instalación de su intérprete pero Jack Tramiel , jefe de Commodore, rechazó la propuesta con la frase " Ya estoy casado ", y proponiendo un trato basado en una desembolso único de 25.000 dólares por una licencia perpetua e ilimitada (circulan diferentes versiones sobre el monto pagado, que varía entre 10.000 y 30.000 dólares según la fuente). Microsoft era entonces todavía una pequeña empresa y buscaba fondos perpetuamente, por lo que Gates aceptó la propuesta y concedió a Commodore el uso de su Microsoft BASIC con la licencia libre de regalías ; [1] en paralelo cómo Apple había logrado obtener una licencia perpetua sin regalías adicionales para Applesoft BASIC .

Características

Intérprete de comandos y comprobación de errores

El intérprete BASIC residente de ROM y KERNAL fue una buena implementación del editor de pantalla completa , que permitía a los usuarios ingresar y editar comandos directos o líneas de programa en cualquier lugar de la pantalla, simplemente presionando la tecla RETURNcada vez que se ubicaba el cursor en una línea que contenía un sentencia BASIC válida. Esto marcó un gran paso adelante en las interfaces de entrada de programas en comparación con el BASIC presente en las computadoras domésticas de la época, que generalmente usaban editores de línea, invocados por comandos EDITo similares.

El BASIC del C64 también implementa un sistema de control de errores que, sin embargo, no siempre era efectivo, lo que permitía verificar la corrección de la carga de programas desde la cinta a la memoria utilizando datassettes . Esto ocurría exclusivamente con las copias de seguridad realizadas normalmente sin utilizar programas turbo: el programa mediante el comando "GUARDAR" se guardaba dos veces consecutivas y, durante la fase de lectura del programa y totalmente invisible para el usuario, se leían ambas grabaciones y posteriormente se comparaban entre sí. . Si las dos copias no se correspondían, se generaba el " ERROR DE CARGA ". También era posible utilizar loader/saver alternativos a los del sistema operativo, lo que permitía cargar y guardar más rápido en casete. Una señal particular identificaba el comienzo de un bloque de datos (generalmente, un programa), y para encontrarlo, el usuario generalmente se veía obligado a desplazarse lentamente por el casete iniciándolo con el botón "Reproducir" .

Velocidad de ejecución

Sin embargo, era extremadamente lento en comparación con el lenguaje de máquina . Las pruebas han demostrado que copiar 16 kilobytes de memoria de ROM a RAM toma menos de un segundo en lenguaje de máquina, pero más de 2 minutos en BASIC. Para tratar de hacer frente a la lentitud del intérprete, los programadores comenzaron a usar varios trucos para acelerar la ejecución. Una era almacenar los números enteros de uso frecuente dentro de las variables en lugar de usarlos directamente, ya que interpretar el nombre de una variable tomaba menos tiempo que extrapolar el número de la lista de origen. Aunque las líneas de código estaban numeradas, el orden de ejecución de las mismas no seguía el orden numérico sino el orden en que se almacenaban en memoria. Cuando se ingresaba el código, las líneas se reorganizaban automáticamente para seguir el orden numérico, pero al cambiar (a través de las instrucciones POKE ) la memoria en la que estaba almacenado el programa, la numeración se podía arruinar, volcarla o incluso darle la misma numeración a todas las líneas, sin que esto interfiera en la ejecución del programa (aparte de las instrucciones de salto, por ejemplo GOSUB, que necesitan un número de línea como parámetro). Sin embargo, la misma función podría usarse para volver a numerar las líneas del programa, a fin de dejar espacio para nuevas instrucciones, si se usó un incremento de unidad entre una línea y otra, sin dejar espacio para más líneas de código.

Fichas _

Los tokens Commodore BASIC se podían abreviar ingresando la primera letra (o la primera en el caso de tokens similares), seguida de una letra desplazada , obtenida presionando la tecla "MAYÚS" simultáneamente con la tecla de la letra (la letra desplazada aparecía en el formulario de un símbolo gráfico). La ficha abreviada se reconocía de la misma forma que la completa; por lo tanto, se podría ingresar una mayor cantidad de comandos en la línea Básica (el búfer de entrada aceptaba un máximo de 88 caracteres). Una vez que se completó la entrada con Retorno, cada token de la línea Básica se convirtió automáticamente en un código de un solo byte y, por lo tanto, se guardó en la memoria. El comando LIST proporcionado para revisar los tokens, convirtiendo los códigos de 1 byte con los tokens sobre la marcha. El formato de número nativo del Commodore BASIC, como en el caso de su antecesor Microsoft BASIC, era el de coma flotante . Todas las operaciones aritméticas se realizaron utilizando números en este formato; las operaciones entre enteros implicaban convertir los operandos de un lado a otro desde el formato de punto flotante. Muchas implementaciones BASIC del período usaban 1 byte para el exponente y 3 para la mantisa . Esto causó problemas en las aplicaciones comerciales, ya que la precisión del punto flotante con 3 bytes de mantisa es de aproximadamente 6,5 decimales y los errores de redondeo eran comunes. Commodore, por otro lado, optó por una mantisa de 4 bytes, lo que hizo que su BASIC fuera mucho más preciso y, por lo tanto, más adecuado para el mundo empresarial que muchos otros BASIC de la época.

Las variables

Los nombres de variables se limitaron a dos caracteres de longitud: los caracteres que excedían este límite se ignoraron. Esto significa que los nombres "AREA" y "ARENA" se refieren a la misma variable "AR". Sin embargo, la función de detección automática de palabras clave del idioma estaba disponible sin la necesidad de espacios que separan los diversos elementos gramaticales. Por ejemplo, puedes escribir

10 HORQUILLA = 1TO10: PRINTK; "- ESTE CICLO": SIGUIENTEK

El uso de espacios en su lugar obtendría:

10 PARA K = 1 A 10: IMPRIMA K; "-TH CICLO": SIGUIENTE K

Esta función, al tiempo que hace que el código sea menos legible, guarda la (poca) memoria disponible en ese momento (la RAM necesaria para almacenar los espacios).

Aunque reduce la legibilidad, esta característica puede hacer que el código sea ambiguo para el sistema:

IFSTAND64THENSTOP

contiene varias "combinaciones" de tokens válidos (algunos semánticamente significativos y otros no):

SI ES TAN D64 ENTONCES DETÉNGASE SI ST Y 64 ENTONCES DETENER

sin embargo, la identificación de los tokens por parte del sistema reconocerá una sola forma, la primera en el ejemplo anterior, porque se identifican todos los tokens presentes en el orden de escritura: IF, TAN, THEN y STOP (ST es una variable reservada, pero no tiene token y es manejado por la rutina de manejo de variables como una excepción).

Extensiones

Historial de versiones

BÁSICO 1.0

Implementado en PET 2001

BÁSICO 2.0

Usado en el PET 2001 con teclado y ROM actualizados, en el VIC-20 y C64

BÁSICO 4.0

Implementado en PET/CBM 4000/8000 (y últimas versiones de PET 2001)

BÁSICO 4+

Utilizado en el CBM-II (Modelos B y P).

BÁSICO 3.5

Usado en C16 / 116 y Plus / 4

BÁSICO 7.0

Usado en C128

BÁSICO 10

Versión diseñada para el Commodore 65 , pero nunca lanzada. Características incluidas:

Notas

  1. ^ Declaración de Jack Tramiel en la celebración del 25 aniversario de Commodore 64 en el Computer History Museum , 10 de diciembre de 2007 Copia archivada , en computerhistory.org . Consultado el 13 de septiembre de 2008 (archivado desde el original el 11 de diciembre de 2008) . [1]

Bibliografía

Artículos relacionados

Otros proyectos

Enlaces externos