Color BASIC

lenguaje de programación

Color BASIC es la implementación de Microsoft BASIC que se incluye en la ROM de las computadoras a color Tandy/Radio Shack TRS-80 fabricadas entre 1980 y 1991[1]​. BASIC (Código de instrucciones simbólicas multipropósito para principiantes, de ahí en inglés sus siglas), es un lenguaje de alto nivel con una sintaxis simple facilitada, para tener la posibilidad de escribir programas simples. La decodificación ocurre, al momento en que BASIC se está ejecutando.

Color BASIC
Desarrollador(es)
Microsoft
Información general
Apareció en 1980
Diseñado por Bill Gates
Última versión estable

(Color BASIC 1.3 (1982). Extended Color BASIC (1984).

Disk Extended Color BASIC (1984).)
Sistema operativo Windows

Fondo editar

 
DECB 2.1 en una Tandy Color Computer 3

El núcleo de Color BASIC fue Microsoft BASIC-69, que Tandy obtuvo la licencia de Microsoft. Color BASIC 1.0 se lanzó con la computadora a color 4k TRS-80 original en 1980. Reside en 8 Kilobytes de ROM y es responsable de todas las tareas de "limpieza" del sistema. Esto incluye comienzo de hardware, administración de memoria, procesamiento de interrupciones, etc. Como la mayoría de las implementaciones de BASIC, cada línea de código comienza con un número de línea y consta de no únicamente una declaración con variables y operadores. Se requieren 16 Kilobytes de memoria para el siguiente nivel de BASIC, Extended Color BASIC ("ECB"). Extended BASIC se requiere para el controlador de disquete, que luego le proporciona un Disco de Color Extendido BASIC ("DECB"). La disponibilidad de emular este intérprete está disponible para las computadoras modernas, de las cuales, algunas requieren un archivo de "instantánea" de la máquina física.

Variables editar

Color BASIC comprende un tipo de variable numérica y variables de cadena de texto. Hay dos principales caracteres significativos como nombres de variables en Color BASIC. El primer carácter del nombre de la variable viene a ser una letra, mientras que el segundo carácter puede ser una letra o un número. Las variables de cadena se indican agregando un signo de dólar ($) después del nombre de la variable.

Ejemplos editar

A=5
A$="THIS IS A STRING"
K7=10
BB$="HELLO!"
ZZ=1.54


Las variables numéricas tienen un solo tipo, siendo este una implementación binaria de coma flotante. Cada variable de números usa 5 bytes de memoria, pudiendo estar entre el rango de -1E+38 y 1E+37.

A diferencia de la mayoría de las implementaciones de Microsoft BASIC, Color BASIC requiere que el usuario debe reservar espacio, para las variables de cadena, mediante la instrucción CLEAR.

Las matrices de múltiples dimensiones también tienen compatibilidad con variables numéricas y de cadena. En el caso de una matriz, la dirección o ubicación del elemento está encerrada entre paréntesis:

A(1)=1
A$(1)="BOOKS"

Varias dimensiones están separadas por comas

A(1,3)=4
A$(2,2)="XYZ123"

Operadores y Símbolos editar

Color BASIC proporciona varios operadores para operaciones matemáticas y operaciones de cadenas, en menor medida.

+ se puede usar para concatenar cadenas o para sumas matemáticas
- se usa para restar
* se usa para la multiplicación
/ se usa para dividir

Los paréntesis ( ) son usados, para anular el orden matemático de operación

AND se utiliza para operaciones lógicas 'y'
OR se usa para operaciones lógicas 'o'
NOT se utiliza para operaciones lógicas 'not'

Para la prueba, se utilizan los siguientes operadores:

= es igual a
> es mayor que
< es menor que
>= es mayor o igual que (también => es aceptable)
<= es menor o igual que (también =< es aceptable)
<> no es igual a (también >< es aceptable)

Otros símbolos utilizados en BASIC:

" " indica que la cadena de datos es una constante (estática)
: separa múltiples comandos en una sola línea de programa
Un punto y coma, cuando se encuentra en una función IMPRIMIR, hará que la salida permanezca en la misma línea
Una coma, cuando se encuentra en una función IMPRIMIR, pasará a la siguiente columna

Clave editar

num indica que es necesario expresar un número. Este puede ser dígito fijo, una variable u otra operación o función que devuelva la expresión numérica.

str indica que es necesario expresar una cadena de texto. Las posibilidades existen en ser un valor de cadena estático (entre comillas), una variable de cadena u otra función o expresión que devuelva una cadena de caracteres.

device number indica un dispositivo. Por defecto, se asume el dispositivo 0 (pantalla y teclado), como principal dispositivo. En Color BASIC, el dispositivo #-1 (casete) y #-2 (impresora) están disponibles para el programador.

Modo de edición editar

Al cometer un error en la escritura de una línea, se puede volver a escribirla desde cero (o ELIMINARLA) o puede EDITARLA.

Estando en modo EDITAR, se obtiene una reimpresión de la línea y una segunda copia que coloca la barra ESPACIADORA en los caracteres. No está permitido utilizar las teclas de flecha. Y el retroceso lo lleva a la izquierda, sin poder borrarlo en el búfer. 'i' coloca al usuario en modo de inserción. Presionando Regresar, lo saca de eso. 'c' cambia un carácter. 'd' borra un carácter. 'x' lleva al usuario al final de la línea, lo que le permite extenderla. 'l' vuelve a dibujar la línea. 's' busca la siguiente instancia de un carácter. Para los comandos 's', 'c' y 'd' también permite al usuario ingresar un número (#) antes de presionar cualquiera de ellos, de modo que: 's' buscará la instancia numérica o # del carácter, 'c' le permitirá al usuario cambiar el número de caracteres y 'd' elimina el número de caracteres que el usuario esté pidiendo.

Funciones editar

ABS(num)
Devuelve el valor absoluto de num
ASC(str)
Devuelve el código ASCII del primer carácter en str
CHR$(num)
Devuelve un solo carácter de cadena str con el número de código ASCII
EOF(device number)
Devuelve 0 si el archivo tiene datos, o -1 si al final del archivo
INKEY$
Devuelve un carácter si se ha presionado una tecla en el teclado, o nulo si no se presiona nada
INT(num)
Devuelve la parte entera de num
INSTR(startpos,search str,target str)
Busca la primera cadena, en la cadena de destino; startpos es opcional.
JOYSTK(num)
Devuelve la posición del eje del joystick (0-3) con un valor de 0 a 63
LEFT$(str,num)
Devuelve el primer número de caracteres ("izquierda") de la cadena str
LEN(str)
Devuelve la longitud (en caracteres) de la cadena str
MEM
Devuelve la memoria libre disponible en bytes
MID$(str,start num,length num)
Devuelve una subcadena de cadena str que comienza en la posición número de inicio y longitud número de caracteres de longitud. También se puede reasignar agregando ="nuevovalor"
PEEK(num)
Devuelve el valor de la ubicación de memoria num (0-65535)
POINT(x num,y num)
Devuelve el color del punto semigráfico en la posición x num (0-63) e y num (0-31)
RIGHT$(str,position num)
Devuelve la parte final ("derecha") de la cadena str que comienza en la posición del carácter num
RND(number)
Devuelve un número aleatorio (entero) entre 1 y num
SGN(num)
Devuelve el signo de un número num, 1 si es positivo, -1 si es negativo, 0 si es 0
SIN(num)
Devuelve el seno de num en radianes
STR$(num)
Devuelve una cadena del número num
USR(num)
Llama a una subrutina de lenguaje de máquina cuya dirección está almacenada en las ubicaciones de memoria 275 y 276. num se pasa a la rutina y se asigna un valor de retorno cuando finaliza la rutina

Comandos editar

AUDIO [ON|OFF]
Conecta o desconecta el audio del casete del sonido del televisor
CLEAR variable space[,highest memory location]
Reserva memoria para variables de cadena y, opcionalmente, un programa en lenguaje de máquina
CLOAD ["name"]
Carga el programa BASIC desde el casete. Si no se especifica ningún nombre, se carga el siguiente programa
CLOADM ["name"]
Carga el programa en lenguaje máquina desde el casete. Si no se especifica ningún nombre, se carga el siguiente programa
CLOSE [device number]
Cierra un dispositivo (en Color BASIC solo puede ser #-1, el casete)
CLS(num)
Borra la pantalla. Se puede especificar un número de color opcional (0-8)
CONT
Continúa un programa después de presionar BREAK o una instrucción STOP
CSAVE ["name"]
Guarda un programa BASIC en casete con nombre opcional
DATA var,var,var...
Almacena datos en un programa BASIC para recuperarlos con el comando READ
DIM variable(dimension[,dimension 2,...]
Dimensiona una matriz y reserva espacio de memoria para ella
END
Indica el final de un programa BASIC
EXEC
[dirección de memoria] ejecuta el programa en lenguaje máquina en la dirección de memoria. Si no se especifica ninguno, se usa la dirección de ejecución del programa cargado fuera de la cinta
INPUT [device number] [{prompt text};] variable [,variable 2, variable n]
Espera la entrada del número de dispositivo. Si no se especifica, se asume el dispositivo 0 (teclado). Se puede imprimir un mensaje opcional en la pantalla, para la declaración de entrada
LIST [starting line] - [ending line]
Enumera la(s) línea(s) de su programa. Se puede omitir el inicio o el final, o si se omiten ambos, se listará el programa completo
LLIST [starting line] - [ending line]
Funciona como LIST, pero da salida a la impresora
MOTOR [ON|OFF]
Enciende o apaga el motor del casete
NEW
Borra el contenido de la memoria (programa y variable)
ON {num} GOSUB line 1, line 2, ... line n
Evalúa la expresión num y llama a la subrutina numth listada
ON (num) GOTO line 1, line 2, ... line n
Evalúa la expresión num y salta a la línea numth de la lista
OPEN "[I|O]",device number[,"filename"]
Abre un dispositivo para la comunicación
POKE memory address, data
Escribe datos (0-255) en la dirección de memoria (0-65535)
PRINT device number,expression
Imprime datos en el dispositivo especificado. Si se omite, se asume #0 (pantalla)
PRINT @{screen position} expression
Funciona como IMPRIMIR, pero imprime en la ubicación especificada (0-511)
READ variable[,variable,...]
Lee la(s) siguiente(s) variable(s) del programa BASIC incrustado con sentencias DATA
RENUM num
Vuelve a numerar cada línea del programa en múltiplos de num
RESET(x,y)
Establece el píxel semigráfico en la ubicación x (0-63) e y (0-31) en negro
RESTORE
Restablece el puntero READ de nuevo a la primera instrucción DATA
RETURN
Regresa de una subrutina
RUN num
Ejecuta el programa BASIC, opcionalmente, en el número de línea especificado
SET(x,y,color)
Establece el píxel semigráfico en la ubicación x (0-63) y (0-31) en color (0-8)
SKIPF ["filename"]
Salta los programas BASIC en la cinta hasta que se encuentra el nombre del programa especificado
SOUND tone,duration
Suena un tono con frecuencia (1-255) y duración (1-255)
STOP
Hace que el programa deje de ejecutarse
TAB(column)
Tabula a la columna especificada (usado con PRINT)
VAL(str)
Devuelve el valor numérico de una cadena que contiene un número en forma de cadena

Flujo de control editar

GOSUB {line number}
Llama a la subrutina en el número de línea especificado
GOTO {line number}
Salta al número de línea del programa especificado
IF {test} THEN {command(s)} [ELSE {command(s)}]
Realiza la prueba condicional. Si la prueba es verdadera ENTONCES se ejecutan los comandos, de lo contrario (ELSE) se ejecutan otros comandos. Si no se especifica ELSE y la prueba es falsa, se ejecutará la siguiente línea del programa.
[FOR] {num} = {number} TO {number} [STEP {number}]
...
NEXT (num)
crea un bucle en el que la variable numérica (num) se ejecuta desde el número inicial hasta el número final en incrementos de número (PASO). Si se omite el paso, se supone 1

Error de mensajes editar

/0
división por cero
AO
el archivo especificado ya está abierto
BS
mal subíndice. el subíndice está fuera del rango DIM
CN
no puede continuar (ver comando CONT)
DD
intentar redimensionar una matriz
DN
número de dispositivo no válido
DS
error de declaración directa (el programa no tiene números de línea)
FC
llamada de función ilegal: la función contiene un valor que está fuera de rango
FD
datos de archivo erróneos: intento de leer un número en un valor de cadena, etc.
FM
modo de archivo incorrecto, intento de ENTRADA de datos en un archivo abierto para SALIDA, etc.
ID
directo ilegal: el comando especificado solo se puede ejecutar en un programa
IE
entrada más allá del final del archivo. Ver EOF
IO
error de entrada/salida
LS
cadena larga: las cadenas solo pueden tener 255 caracteres
NF
SIGUIENTE sin PARA
NO
archivo no abierto
OD
fuera de datos: intenta leer más allá de los últimos DATOS en el programa
OM
sin memoria
OS
fuera del espacio de cadena: vea CLEAR
OV
desbordamiento: el número está fuera de rango
RG
VOLVER sin GOSUB
SN
error de sintaxis
ST
operación de cadena demasiado compleja
TM
tipo de discrepancia (A$=3, A="CAT")
UL
intente ir a GOTO o GOSUB a una línea que no existe

Subrutinas ROM documentadas editar

Hay algunas subrutinas disponibles para programas de lenguaje de máquina en la ROM BÁSICA de Color, estos disponibles para programación general.

POLCAT
dirección [$A000]: sondea el teclado para un carácter
CHROUT
dirección [$A002]: envía un carácter a la pantalla o dispositivo
CSRDON
dirección [$A004]: inicia el casete y se prepara para la lectura
BLKIN
dirección [$A006]: lee un bloque del casete
BLKOUT
dirección [$A008]: escribe un bloque en el casete
JOYIN
dirección [$A00A]: lee los valores del joystick

Referencias editar

  1. «TRS-80 Color Computer - AbandonWiki». www.abandonsocios.org. Consultado el 15 de febrero de 2023.