stringtranslate.com

Comodoro BÁSICO

Commodore BASIC , también conocido como PET BASIC o CBM-BASIC , es el dialecto del lenguaje de programación BASIC utilizado en la línea de computadoras domésticas de 8 bits de Commodore International , que se extiende desde el PET (1977) hasta el Commodore 128 (1985).

El núcleo está basado en 6502 Microsoft BASIC , y como tal comparte muchas características con otros 6502 BASIC de la época, como Applesoft BASIC . Commodore obtuvo la licencia BASIC de Microsoft en 1977 sobre la base de "pagar una vez, sin regalías " después de que Jack Tramiel rechazó la oferta de Bill Gates de una tarifa de 3 dólares por unidad, afirmando: "Ya estoy casado" y no pagaría más de 25.000 dólares. para una licencia perpetua. [1]

La versión PET original era muy similar a la implementación original de Microsoft con pocas modificaciones. BASIC 2.0 en el C64 también era similar y también se vio en los C128 (en modo C64) y otros modelos. Los PET posteriores presentaron BASIC 4.0, similar al original pero añadiendo una serie de comandos para trabajar con disquetes .

BASIC 3.5 fue el primero en desviarse realmente, agregando una serie de comandos para soporte de gráficos y sonido en el C16 y Plus/4 . BASIC 7.0 se incluyó con el Commodore 128 e incluía comandos de programación estructurados del BASIC 3.5 del Plus/4, así como palabras clave diseñadas específicamente para aprovechar las nuevas capacidades de la máquina. Se agregaron un editor de sprites y un monitor de lenguaje de máquina . El último, BASIC 10.0, formaba parte del inédito Commodore 65 .

Historia

Commodore tomó el código fuente del BASIC de tarifa plana y lo desarrolló internamente para todas sus otras computadoras domésticas de 8 bits. No fue hasta el Commodore 128 (con V7.0) que se mostró un aviso de copyright de Microsoft. Sin embargo, Microsoft había incorporado un huevo de pascua en la versión 2 o "actualización" de Commodore Basic que demostraba su origen: escribir el comando (oscuro) WAIT 6502, 1haría que Microsoft!apareciera en la pantalla. (El huevo de pascua estaba bien confuso: el mensaje no apareció en ningún desmontaje del intérprete). [2]

El popular Commodore 64 vino con BASIC v2.0 en ROM a pesar de que la computadora fue lanzada después de la serie PET/CBM que tenía la versión 4.0 porque la 64 estaba pensada como una computadora doméstica, mientras que la serie PET/CBM estaba dirigida a negocios y educación. uso donde se suponía que su lenguaje de programación incorporado era más utilizado. Esto ahorró costos de fabricación, ya que el V2 encaja en ROM más pequeñas.

Detalles técnicos

Edición de programas

Una característica conveniente del intérprete BASIC residente en ROM de Commodore y de KERNAL era el editor de pantalla completa . [3] [4] Aunque los teclados Commodore solo tienen dos teclas de cursor que invierten la dirección cuando se mantiene presionada la tecla Mayús, el editor de pantalla permite a los usuarios ingresar comandos directos o ingresar y editar líneas de programa desde cualquier lugar de la pantalla. Si una línea tenía como prefijo un número de línea, se tokenizaba y se almacenaba en la memoria del programa. Las líneas que no comienzan con un número se ejecutan presionando la tecla cada vez que el cursor se encuentra en la línea. Esto marcó una mejora significativa en las interfaces de entrada de programas en comparación con otros BASIC de computadoras domésticas comunes en ese momento, que generalmente usaban editores de línea , invocados por un comando separado , o un "cursor de copia" que truncaba la línea en la posición del cursor.RETURNEDIT

También tenía la capacidad de guardar archivos con nombre en cualquier dispositivo, incluido el casete , un dispositivo de almacenamiento popular en la época del PET y que permaneció en uso durante toda la vida útil de los Commodores de 8 bits como una forma económica de almacenamiento masivo. . La mayoría de los sistemas solo admitían nombres de archivos en disquetes , lo que hacía más difícil guardar varios archivos en otros dispositivos. El usuario de uno de estos otros sistemas tenía que anotar el contador de la grabadora en la ubicación del archivo, pero esto era inexacto y propenso a errores. Con PET (y BASIC 2.0), los archivos de los casetes se podían solicitar por su nombre. El dispositivo buscaría el nombre del archivo leyendo los datos secuencialmente, ignorando cualquier nombre de archivo que no coincida. El sistema de archivos también estaba respaldado por una poderosa estructura de registros que podía cargarse o guardarse en archivos. Los datos del casete Commodore se grabaron digitalmente, en lugar de los métodos analógicos menos costosos (y menos confiables) utilizados por otros fabricantes. Por lo tanto, se necesitaba un Datasette especializado en lugar de una grabadora estándar. Había adaptadores disponibles que utilizaban un convertidor analógico a digital para permitir el uso de una grabadora estándar, pero costaban sólo un poco menos que el Datasette.

El comando LOAD se puede usar con el parámetro opcional ,1 que cargará un programa en la dirección de memoria contenida en los primeros dos bytes del archivo (estos bytes se descartan y no se retienen en la memoria). Si no se utiliza el parámetro ,1 , el programa se cargará al inicio del área del programa BÁSICO, que difiere ampliamente entre máquinas. Algunas variantes de Commodore BASIC suministraban comandos que funcionaban como sus homólogos en Applesoft BASIC , cargando o guardando mapas de bits desde ubicaciones de memoria específicas.BLOADBSAVE

El PET no admite programas reubicables y el comando LOAD siempre se cargará en los dos primeros bytes contenidos en el archivo del programa. Esto creó un problema al intentar cargar programas BASIC guardados en otras máquinas Commodore, ya que se cargaban en una dirección más alta que donde el BASIC del PET esperaba que estuviera el programa; había soluciones para "mover" los programas a la ubicación adecuada. Si un programa se guardaba en una máquina CBM-II , la única forma de cargarlo en un PET era modificando los primeros dos bytes con un editor de sectores de disco, ya que la serie CBM-II tenía su área de programa BASIC en $0, lo que daría como resultado en un PET que intenta cargar en la página cero y se bloquea.

Las palabras clave de Commodore BASIC se pueden abreviar ingresando primero una pulsación de tecla sin cambios y luego una pulsación de tecla con cambios de la siguiente letra. Esto establece el bit alto , lo que hace que el intérprete deje de leer y analice la declaración de acuerdo con una tabla de búsqueda. Esto significó que la declaración hasta donde se estableció el bit alto se aceptó como sustituto de escribir el comando completo. Sin embargo, dado que todas las palabras clave BÁSICAS se almacenaron en la memoria como tokens de un solo byte, esto fue una conveniencia para la entrada de declaraciones en lugar de una optimización.

En el conjunto de caracteres predeterminado solo en mayúsculas, los caracteres desplazados aparecen como un símbolo gráfico; por ejemplo, el comando GOTOpodría abreviarse G{Shift-O}(que se parecía a lo que aparece en pantalla). La mayoría de estos comandos tenían dos letras, pero en algunos casos eran más largos. En casos como este, había una ambigüedad, por lo que se necesitaban más letras del comando sin desplazamiento, como por ejemplo ( ) para . Algunos comandos no tenían forma abreviada, ya sea por brevedad o ambigüedad con otros comandos. Por ejemplo, el comando no tenía abreviatura porque su ortografía chocaba con la palabra clave separada, que estaba ubicada más cerca del comienzo de la tabla de búsqueda de palabras clave . El comando muy utilizado tenía un único atajo, como era común en la mayoría de los dialectos BASIC de Microsoft. Abreviar comandos con letras desplazadas es exclusivo de Commodore BASIC.GΓGO{Shift-S}GO♥GOSUBINPUTINPUT#PRINT?

Este método de tokenización tenía un problema técnico tal que si uno incluía una REM(declaración BÁSICA para agregar un comentario al código) seguida de un {Shift-L}, al intentar ver la lista del programa, el intérprete BÁSICO abortaría inmediatamente la lista, mostraría un ?SYNTAX ERRORy regresaría al READY.inmediato. Este fallo fue utilizado con cierto efecto por los programadores que querían intentar proteger su trabajo, aunque era bastante fácil de eludir.

Al abreviar palabras clave, era posible incluir más código en una sola línea de programa (que podría ocupar dos líneas de pantalla en pantallas de 40 columnas, es decir, C64 o PET, o cuatro líneas en la pantalla de 22 columnas del VIC-20). Esto permitió un ligero ahorro en los gastos generales para almacenar líneas de programa adicionales que de otro modo serían necesarias, pero nada más. Todos los comandos BASIC fueron tokenizados y ocuparon 1 byte (o dos, en el caso de varios comandos de BASIC 7 o BASIC 10) en la memoria, sin importar de qué manera se ingresaron. Era una molestia editar colas tan largas. El LISTcomando mostraba la palabra clave completa, extendiendo la línea del programa más allá de las 2 o 4 líneas de pantalla que podían ingresarse en la memoria del programa.

Actuación

Al igual que el intérprete BASIC original de Microsoft , Commodore BASIC es más lento que el código de máquina nativo . Los resultados de las pruebas han demostrado que copiar 16 kilobytes de ROM a RAM lleva menos de un segundo en código de máquina, en comparación con más de un minuto en BASIC. [ cita necesaria ] Para ejecutar más rápido que el intérprete, los programadores comenzaron a usar varias técnicas para acelerar la ejecución. Una era almacenar valores de punto flotante de uso frecuente en variables en lugar de utilizar valores literales, ya que interpretar un nombre de variable era más rápido que interpretar un número literal. Dado que el punto flotante es el tipo predeterminado para todos los comandos, es más rápido usar números de punto flotante como argumentos, en lugar de números enteros. Cuando la velocidad era importante, algunos programadores convertían secciones de programas BASIC al lenguaje ensamblador 6502 o 6510 que se cargaba por separado desde un archivo o se insertaba en la memoria desde declaraciones de DATOS al final del programa BASIC y se ejecutaba desde BASIC usando el comando, ya sea desde modo directo o desde el propio programa . Cuando la velocidad de ejecución del lenguaje de máquina era demasiado grande, como para un juego o cuando se esperaba la entrada del usuario, los programadores podían sondear leyendo ubicaciones de memoria seleccionadas (como [5] para el 64, o [6] para el 128, que denota tamaño de la cola del teclado) para retrasar o detener la ejecución.SYS$C6$D0

Una característica única de Commodore BASIC es el uso de códigos de control para realizar tareas como borrar la pantalla o posicionar el cursor dentro de un programa; estos se pueden invocar ya sea emitiendo un comando donde X corresponde al código de control a emitir (por ejemplo, es el código de control para limpiar la pantalla) o presionando la tecla en cuestión entre comillas, presionando así + después de una comilla hará que BASIC muestre la representación visual del código de control (en este caso, un corazón invertido) sobre el cual luego se actúa durante la ejecución del programa (la impresión directa de los códigos de control usa menos memoria y se ejecuta más rápido que invocar una función CHR$ ). Esto es en comparación con otras implementaciones de BASIC que normalmente tienen comandos dedicados para borrar la pantalla o mover el cursor.PRINT CHR$(X)PRINT CHR$(147)⇧ ShiftCLR HOME

BASIC 3.5 y versiones posteriores tienen comandos adecuados para limpiar la pantalla y mover el cursor.

Las líneas de programa en Commodore BASIC no requieren espacios en ninguna parte (pero el comando LIST siempre mostrará uno entre el número de línea y la declaración), por ejemplo, y era común escribir programas sin espacios. Esta característica se agregó para conservar memoria ya que el tokenizador nunca elimina ningún espacio insertado entre palabras clave: la presencia de espacios genera bytes adicionales en el programa tokenizado que simplemente se omiten durante la ejecución. El tokenizador elimina los espacios entre el número de línea y la declaración del programa.100 IFA=5THENPRINT"YES":GOTO1600x20

Las líneas de programa pueden tener un total de 80 caracteres en la mayoría de las máquinas, pero las máquinas con texto de 40 columnas harían que la línea pasara a la siguiente línea en la pantalla, y en el VIC-20, que tenía una pantalla de 22 columnas, las líneas de programa podían ocupar hasta cuatro. BASIC 7.0 en Commodore 128 aumentó el límite de una línea de programa a 160 caracteres (cuatro líneas de 40 columnas o dos líneas de 80 columnas). Al utilizar abreviaturas como ?en lugar de PRINT, es posible incluir aún más en una línea. BASIC 7.0 muestra un?CUERDA DEMASIADO LARGAerror si el usuario ingresa una línea de programa de más de 160 caracteres de longitud. Las versiones anteriores no producían ningún error y simplemente mostraban el mensaje LISTO dos líneas más abajo si se excedía la longitud de la línea. El número de línea se cuenta en el número de caracteres de la línea del programa, por lo que un número de línea de cinco dígitos dará como resultado cuatro caracteres menos permitidos que un número de un dígito.

El orden de ejecución de las líneas Commodore BASIC no estaba determinado por la numeración de líneas; en cambio, siguió el orden en que las líneas estaban vinculadas en la memoria. [7] Las líneas de programa se almacenaron en la memoria como una lista enlazada individualmente con un puntero (que contiene la dirección del comienzo de la siguiente línea del programa), un número de línea y luego el código tokenizado para la línea. Mientras se ingresaba un programa, BASIC reordenaba constantemente las líneas del programa en la memoria para que los números de línea y los punteros estuvieran todos en orden ascendente. Sin embargo, después de ingresar un programa, alterar manualmente los números de línea y los punteros con los comandos POKE podría permitir una ejecución desordenada o incluso darle a cada línea el mismo número de línea. En los primeros días, cuando BASIC se usaba comercialmente, era una técnica de protección de software para desalentar la modificación casual del programa.

Los números de línea pueden variar de 0 a 65520 y tomar cinco bytes para almacenarse independientemente de cuántos dígitos haya en el número de línea, aunque la ejecución es más rápida cuanto menos dígitos haya. Poner varias declaraciones en una línea utilizará menos memoria y se ejecutará más rápido.

Las declaraciones GOTO y GOSUB buscarán hacia abajo desde la línea actual para encontrar un número de línea si se realiza un salto hacia adelante; en caso de un salto hacia atrás, volverán al inicio del programa para comenzar la búsqueda. Esto ralentizará los programas más grandes, por lo que es preferible colocar las subrutinas utilizadas habitualmente cerca del inicio de un programa.

Los nombres de las variables sólo son significativos para 2 caracteres; por lo tanto, los nombres de las variables VARIABLE1, VARIABLE2y VAtodos se refieren a la misma variable.

Commodore BASIC también admite operadores bit a bit: AND, OR y XOR , aunque esta característica era parte del código central de Microsoft 6502 BASIC, generalmente se omitía en otras implementaciones como Applesoft BASIC .

El formato numérico nativo de Commodore BASIC, al igual que el de su padre MS BASIC , era punto flotante . La mayoría de las implementaciones BASIC contemporáneas usaban un byte para la característica ( exponente ) y tres bytes para la mantisa . La precisión de un número de coma flotante que utiliza una mantisa de tres bytes es de sólo unos 6,5 dígitos decimales y el error de redondeo es común. Las implementaciones 6502 de Microsoft BASIC utilizaban aritmética de punto flotante de 40 bits, lo que significa que las variables necesitaban cinco bytes para almacenarse (cuatro bytes de mantisa y un byte para el exponente), a diferencia del punto flotante de 32 bits que se encuentra en BASIC-80.

Mientras que las implementaciones 8080/Z80 de Microsoft BASIC admitían variables enteras y de doble precisión, las implementaciones 6502 eran únicamente de punto flotante.

Aunque Commodore BASIC admite variables enteras con signo (indicadas con un signo de porcentaje) en el rango de -32768 a 32767, en la práctica sólo se usan para variables de matriz y cumplen la función de conservar memoria limitando los elementos de la matriz a dos bytes cada uno (una matriz de 2000 elementos ocuparán 10 000 bytes si se declaran como una matriz de punto flotante, pero solo 4000 si se declaran como una matriz de números enteros). Denotar cualquier variable como entero simplemente hace que BASIC la convierta nuevamente a punto flotante, lo que ralentiza la ejecución del programa y desperdicia memoria ya que cada signo de porcentaje requiere un byte adicional para almacenarse (ya que esto también se aplica a matrices de enteros, el programador debe evitar usarlas a menos que sean muy Se utilizan matrices grandes que excederían la memoria disponible si se almacenaran como punto flotante). Además, no es posible POKE o PEEK ubicaciones de memoria superiores a 32767 con una dirección definida como un entero con signo.

Se puede usar un punto (.) en lugar del número 0 (por lo tanto, en lugar de o en lugar de ), esto se ejecutará un poco más rápido.10 A=.10 A=010 FOR A=. TO 10010 FOR A=0 to 100

La declaración SYS , utilizada para iniciar programas en lenguaje de máquina, fue agregada por Commodore y no estaba en el código BASIC original de Microsoft, que presentaba solo la función USR para invocar rutinas en lenguaje de máquina. Carga automáticamente los registros de la CPU con los valores en (C64, varía en otras máquinas); esto se puede usar para pasar datos a rutinas de lenguaje de máquina o como un medio para llamar funciones del núcleo desde BASIC (como ejemplo, borra la pantalla). .$30C-$30FPOKE 780,147:SYS 65490

Dado que las máquinas Commodore de 8 bits distintas a la C128 no pueden iniciar automáticamente el software del disco, la técnica habitual es incluir un código auxiliar BÁSICO para comenzar la ejecución del programa. Es posible iniciar el software automáticamente después de cargarlo y no requerir que el usuario escriba una instrucción RUN ; esto se hace teniendo un fragmento de código que conecta el vector BÁSICO "listo" en .10 SYS 2048$0302

Como ocurre con la mayoría de las otras versiones de Microsoft BASIC , si una matriz no se declara con una instrucción DIM , se establece automáticamente en diez elementos (en la práctica, 11 ya que los elementos de la matriz se cuentan desde 0). Se deben declarar matrices más grandes o BASIC mostrará un error cuando se ejecute el programa y no se podrá redimensionar una matriz en un programa a menos que todas las variables se borren mediante una declaración CLR. Las matrices numéricas se rellenan automáticamente con ceros cuando se crean; puede haber un retraso momentáneo en la ejecución del programa si se dimensiona una matriz grande.

Las variables de cadena se representan etiquetando el nombre de la variable con un signo de dólar. Por lo tanto, las variables AA$, AAy AA%se entenderían como distintas. Las variables de matriz también se consideran distintas de las variables simples, por lo que A y A(1) no se refieren a la misma variable. El tamaño de una matriz de cadenas simplemente se refiere a cuántas cadenas se almacenan en la matriz, no al tamaño de cada elemento, que se asigna dinámicamente. A diferencia de otras implementaciones de Microsoft BASIC, Commodore BASIC no requiere que se reserve espacio en la cadena al inicio de un programa.

A diferencia de otras máquinas de 8 bits como la Apple II, todas las máquinas de Commodore tienen un reloj incorporado que se inicializa a 0 al encenderse y se actualiza con cada tic del temporizador PIA/VIA/TED/CIA, es decir, 60 veces por segundo. . Se le asignan dos variables del sistema en BASIC, TI y TI$ , las cuales contienen la hora actual. TI es de sólo lectura y no se puede modificar; Al hacerlo, aparecerá un mensaje de error de sintaxis. Se puede utilizar TI$ para configurar la hora mediante una cadena de seis números (se produce un error si se utiliza una cadena que no sea de seis números). El reloj no es un método muy confiable para medir el tiempo, ya que se detiene cada vez que se desactivan las interrupciones (realizado por algunas rutinas del núcleo) y el acceso al puerto IEC (o IEEE en el PET) ralentizará la actualización del reloj unos cuantos tics.

La función RND en Commodore BASIC puede usar el reloj para generar números aleatorios; esto se logra mediante , sin embargo, es de uso relativamente limitado ya que solo se devuelven números entre 0 y 255. De lo contrario, RND funciona igual que otras implementaciones de Microsoft BASIC en el sentido de que se utiliza una secuencia pseudoaleatoria a través de un valor inicial fijo de 5 bytes almacenado al encender en ubicaciones de memoria en el C64 (la ubicación difiere en otras máquinas). RND con cualquier número superior a 0 generará un número aleatorio fusionado a partir del valor incluido con la función RND y el valor inicial, que se actualiza en 1 cada vez que se ejecuta una función RND. RND con un número negativo va a un punto en la secuencia del valor inicial actual especificado por el número.RND(0)$8B-$8F

Dado que la verdadera generación de números aleatorios es imposible con la declaración RND , es más típico en C64 y C128 utilizar el canal de ruido blanco del chip SID para números aleatorios.

BASIC 2.0 sufrió notoriamente una recolección de basura de cadenas extremadamente lenta. La recolección de basura se invoca automáticamente cada vez que se ejecuta una función FRE y si hay muchas variables de cadena y matrices que han sido manipuladas en el transcurso de un programa, borrarlas puede llevar más de una hora en las peores condiciones. Tampoco es posible cancelar la recolección de basura ya que BASIC no escanea la tecla RUN/STOP mientras realiza esta rutina. BASIC 4.0 introdujo un sistema mejorado de recolección de basura con punteros hacia atrás y todas las implementaciones posteriores de Commodore BASIC también lo tienen.

La función FRE en BASIC 2.0 sufrió otro defecto técnico: no puede manejar números con signo superiores a 32768, por lo tanto, si la función se invoca en un C64 (memoria BASIC de 38k), se mostrará una cantidad negativa de memoria BASIC libre (sumando 65535 a el número informado obtendrá la cantidad correcta de memoria libre). El PET y el VIC-20 nunca tuvieron más de 32k de memoria total disponible para BASIC, por lo que esta limitación no se hizo evidente hasta que se desarrolló el C64. La función FRE en BASIC 3.5 y 7.0 corrigió este problema y FRE en BASIC 7.0 también se "dividió" en dos funciones, una para mostrar la memoria de texto del programa BASIC libre y la otra para mostrar la memoria de variables libre.

Alternativas

Pantalla de inicio BASIC de Simons

Se lanzaron muchas extensiones de BASIC para el Commodore 64, debido a las capacidades relativamente limitadas de su BASIC 2.0 nativo. Una de las extensiones más populares fue DOS Wedge , que se incluyó en el disco de prueba/demo del Commodore 1541. Esta extensión de 1 KB a BASIC agregó una serie de comandos relacionados con el disco, incluida la capacidad de leer un directorio del disco sin destruir el programa en la memoria. Posteriormente, sus funciones se incorporaron en varias extensiones de terceros, como el popular cartucho Epyx FastLoad . Otras extensiones de BASIC agregaron palabras clave adicionales para facilitar la codificación de sprites, sonido y gráficos de alta resolución como BASIC de Simons (1983) y Vision BASIC (2022).

Aunque la falta de funciones gráficas o de sonido de BASIC 2.0 fue frustrante para muchos usuarios, algunos críticos [ ¿quién? ] argumentó que, en última instancia, era beneficioso ya que obligaba al usuario a aprender el lenguaje de máquina.

Las limitaciones de BASIC 2.0 en el C64 llevaron al uso del lenguaje de máquina ROM integrado de BASIC. Para cargar un archivo en una ubicación de memoria designada, el nombre del archivo, la unidad y el número de dispositivo se leerán mediante una llamada: ; [8] la ubicación se especificaría en los registros X e Y: ; [9] y la rutina de carga se llamaría: . [10]SYS57812"filename",8POKE780,0:POKE781,0:POKE782,192SYS65493

Un cargador de discos para el C64, Loadstar , era un lugar para programadores aficionados, que compartían colecciones de protocomandos para BASIC, llamados con el SYS address + offsetcomando. [ cita necesaria ]

Desde un punto de vista de la programación moderna, las versiones anteriores de Commodore BASIC presentaban una serie de trampas de mala programación para el programador. Como la mayoría de estos problemas derivaban de Microsoft BASIC , prácticamente todas las computadoras domésticas BASIC de la época padecían deficiencias similares. [11] El programador asignó un número de línea a cada línea de un programa Microsoft BASIC. Era una práctica común incrementar los números en algún valor (5, 10 o 100) para facilitar la inserción de líneas durante la edición o depuración del programa, pero una mala planificación significaba que insertar secciones grandes en un programa a menudo requería reestructurar todo el código. Una técnica común era iniciar un programa en algún número de línea bajo con una tabla de salto ON...GOSUB , con el cuerpo del programa estructurado en secciones comenzando en un número de línea designado como 1000, 2000, etc. Si fuera necesario agregar una sección grande, simplemente se le podría asignar el siguiente número de línea principal disponible e insertarla en la tabla de salto.

Además, todas las variables se tratan como variables globales. Los bucles claramente definidos más allá de la construcción FOR...NEXT son difíciles de crear, lo que a menudo hace que el programador dependa del comando GOTO (esto se rectificó más tarde en BASIC 3.5 con la adición de los comandos DO, LOOP, WHILE, UNTIL y EXIT ). ). A menudo era necesario crear variables de bandera para realizar determinadas tareas.

Las versiones BÁSICAS posteriores en Commodore y otras plataformas incluían un comando ELIMINAR y RENUMERAR , así como un comando de numeración de líneas AUTOMÁTICA que seleccionaría e insertaría automáticamente números de línea de acuerdo con un incremento seleccionado. Los BASIC anteriores de Commodore también carecen de comandos de depuración, lo que significa que los errores y las variables no utilizadas son difíciles de detectar. IF...THEN...ELSE estructuras, una parte estándar de Z80 Microsoft BASIC, se agregaron a BASIC 3.5 después de no estar disponibles en versiones anteriores de Commodore BASIC.

Usar como interfaz de usuario

Al igual que otras computadoras domésticas , las máquinas de Commodore arrancaban directamente en el intérprete BASIC. Los archivos y comandos de programación de BASIC se pueden ingresar en modo directo para cargar y ejecutar software. Si la ejecución del programa se detuviera usando la tecla RUN/STOP, los valores de las variables se conservarían en la RAM y se podrían IMPRIMIR para su depuración. El 128 incluso dedicó su segundo banco de 64k al almacenamiento de variables, lo que permite que los valores persistan hasta que se emita un comando NEWo . RUNEsto, junto con el editor de pantalla avanzado incluido con Commodore BASIC, le dio al entorno de programación una sensación similar a REPL ; los programadores podían insertar y editar líneas de programa en cualquier ubicación de la pantalla, construyendo el programa de forma interactiva. [12] Esto contrasta con los sistemas operativos orientados a los negocios de la época, como CP/M o MS-DOS , que normalmente arrancaban en una interfaz de línea de comandos . Si se requería un lenguaje de programación en estas plataformas, había que cargarlo por separado.

DLOADSi bien algunas versiones de Commodore BASIC incluían comandos y específicos del disco DSAVE, la versión integrada en Commodore 64 carecía de estos, lo que requería que el usuario especificara el número de dispositivo de la unidad de disco (normalmente 8 o 9) en el LOADcomando estándar, que de otro modo sería cinta de forma predeterminada. Otra omisión del BASIC 2.0 del Commodore 64 fue un DIRECTORYcomando para mostrar el contenido de un disco sin borrar la memoria principal. En el 64, ver archivos en un disco se implementó como cargar un "programa" que, cuando se listaba, mostraba el directorio como un programa pseudo BÁSICO, con el tamaño de bloque del archivo como número de línea. Esto tuvo el efecto de sobrescribir el programa actualmente cargado. Los complementos como DOS Wedge superaron esto al mostrar la lista del directorio directamente en la memoria de la pantalla.

Versiones y características

Una lista de versiones de CBM BASIC en orden cronológico, con características agregadas sucesivamente:

Versiones publicadas

Versiones inéditas

Paquetes de extensión notables

Referencias

  1. ^ Declarado por Jack Tramiel en la celebración del 25 aniversario de Commodore 64 en el Museo de Historia de la Computación el 10 de diciembre de 2007 [1] Archivado el 11 de diciembre de 2008 en Wayback Machine [2] Archivado el 3 de octubre de 2017 en Wayback Machine [3] .
  2. ^ "Huevos de Pascua personales de Bill Gates en BASIC de 8 bits - pagetable.com". www.pagetable.com . Consultado el 8 de agosto de 2018 .
  3. ^ "Teclado y editor de pantalla". Julio de 1985.
  4. ^ "Byte de julio de 1983" (PDF) . Archivado desde el original (PDF) el 24 de agosto de 2017 . Consultado el 1 de mayo de 2015 .
  5. ^ Leemon, Sheldon (1987). Mapeo del Commodore 64 y 64C. ¡CALCULAR! Publicaciones. pag. 37.ISBN 9780874550825. Consultado el 25 de marzo de 2018 .
  6. ^ Cowper, Ottis R. (1986). Mapeo del Commodore 128. ¡CALCULAR! Publicaciones. pag. 66.ISBN 9780874550603.
  7. ^ "Mapeo del C64". www.unusedino.de . Consultado el 21 de agosto de 2023 .
  8. ^ Leemon, Sheldon (1987). Mapeo del Commodore 64 y 64C. ¡CALCULAR! Publicaciones. pag. 209.ISBN 9780874550825. Consultado el 25 de marzo de 2018 .
  9. ^ Leemon, Sheldon (1987). Mapeo del Commodore 64 y 64C. ¡CALCULAR! Publicaciones. pag. 71.ISBN 9780874550825. Consultado el 25 de marzo de 2018 .
  10. ^ Leemon, Sheldon (1987). Mapeo del Commodore 64 y 64C. ¡CALCULAR! Publicaciones. pag. 231.ISBN 9780874550825. Consultado el 25 de marzo de 2018 .
  11. ^ "¡Computar! El primer libro de Atari". www.atariarchives.org . Consultado el 21 de agosto de 2023 .
  12. ^ Scrimshaw, NB (11 de noviembre de 2013). Introducción al Commodore 64: aventuras en programación. Birkhäuser. ISBN 9781489967879.
  13. ^ ab "Mapa de memoria BASIC 4.0". zimmers.net . Consultado el 21 de agosto de 2023 .
  14. ^ "Mike Naberezny - Firmware LCD Commodore". mikenaberezny.com . Consultado el 8 de agosto de 2018 .

Fuentes

BÁSICO 2.0
BÁSICO 3.5
BÁSICO 7.0
BÁSICO 10.0