Color BASIC
# Color BASIC

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. 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
## Fondo

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.

# Color BASIC
## Variables

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.

# Color BASIC
## Variables
### Ejemplos

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:
Varias dimensiones están separadas por comas

# Color BASIC
## Operadores y Símbolos

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

# Color BASIC
## Clave

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.

# Color BASIC
## Modo de edición

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.

# Color BASIC
## Funciones
### ABS(num)

    Devuelve el valor absoluto de num

# Color BASIC
## Funciones
### ASC(str)

    Devuelve el código ASCII del primer carácter en str

# Color BASIC
## Funciones
### CHR$(num)

    Devuelve un solo carácter de cadena str con el número de código ASCII

# Color BASIC
## Funciones
### EOF(device number)

    Devuelve 0 si el archivo tiene datos, o -1 si al final del archivo

# Color BASIC
## Funciones
### INKEY$

    Devuelve un carácter si se ha presionado una tecla en el teclado, o nulo si no se presiona nada

# Color BASIC
## Funciones
### INT(num)

    Devuelve la parte entera de num

# Color BASIC
## Funciones
### INSTR(startpos,search str,target str)

    Busca la primera cadena, en la cadena de destino; startpos es opcional.

# Color BASIC
## Funciones
### JOYSTK(num)

    Devuelve la posición del eje del joystick (0-3) con un valor de 0 a 63

# Color BASIC
## Funciones
### LEFT$(str,num)

    Devuelve el primer número de caracteres ("izquierda") de la cadena str

# Color BASIC
## Funciones
### LEN(str)

    Devuelve la longitud (en caracteres) de la cadena str

# Color BASIC
## Funciones
### MEM

    Devuelve la memoria libre disponible en bytes

# Color BASIC
## Funciones
### 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"

# Color BASIC
## Funciones
### PEEK(num)

    Devuelve el valor de la ubicación de memoria num (0-65535)

# Color BASIC
## Funciones
### 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)

# Color BASIC
## Funciones
### RIGHT$(str,position num)

    Devuelve la parte final ("derecha") de la cadena str que comienza en la posición del carácter num

# Color BASIC
## Funciones
### RND(number)

    Devuelve un número aleatorio (entero) entre 1 y num

# Color BASIC
## Funciones
### SGN(num)

    Devuelve el signo de un número num, 1 si es positivo, -1 si es negativo, 0 si es 0

# Color BASIC
## Funciones
### SIN(num)

    Devuelve el seno de num en radianes

# Color BASIC
## Funciones
### STR$(num)

    Devuelve una cadena del número num

# Color BASIC
## Funciones
### 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

# Color BASIC
## Comandos
### AUDIO [ON|OFF]

    Conecta o desconecta el audio del casete del sonido del televisor

# Color BASIC
## Comandos
### CLEAR variable space[,highest memory location]

    Reserva memoria para variables de cadena y, opcionalmente, un programa en lenguaje de máquina

# Color BASIC
## Comandos
### CLOAD ["name"]

    Carga el programa BASIC desde el casete. Si no se especifica ningún nombre, se carga el siguiente programa

# Color BASIC
## Comandos
### CLOADM ["name"]

    Carga el programa en lenguaje máquina desde el casete. Si no se especifica ningún nombre, se carga el siguiente programa

# Color BASIC
## Comandos
### CLOSE [device number]

    Cierra un dispositivo (en Color BASIC solo puede ser #-1, el casete)

# Color BASIC
## Comandos
### CLS(num)

    Borra la pantalla. Se puede especificar un número de color opcional (0-8)

# Color BASIC
## Comandos
### CONT

    Continúa un programa después de presionar BREAK o una instrucción STOP

# Color BASIC
## Comandos
### CSAVE ["name"]

    Guarda un programa BASIC en casete con nombre opcional

# Color BASIC
## Comandos
### DATA var,var,var...

    Almacena datos en un programa BASIC para recuperarlos con el comando READ

# Color BASIC
## Comandos
### DIM variable(dimension[,dimension 2,...]

    Dimensiona una matriz y reserva espacio de memoria para ella

# Color BASIC
## Comandos
### END

    Indica el final de un programa BASIC

# Color BASIC
## Comandos
### 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

# Color BASIC
## Comandos
### 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

# Color BASIC
## Comandos
### 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

# Color BASIC
## Comandos
### LLIST [starting line] - [ending line]

    Funciona como LIST, pero da salida a la impresora

# Color BASIC
## Comandos
### MOTOR [ON|OFF]

    Enciende o apaga el motor del casete

# Color BASIC
## Comandos
### NEW

    Borra el contenido de la memoria (programa y variable)

# Color BASIC
## Comandos
### ON {num} GOSUB line 1, line 2, ... line n

    Evalúa la expresión num y llama a la subrutina numth listada

# Color BASIC
## Comandos
### 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

# Color BASIC
## Comandos
### OPEN "[I|O]",device number[,"filename"]

    Abre un dispositivo para la comunicación

# Color BASIC
## Comandos
### POKE memory address, data

    Escribe datos (0-255) en la dirección de memoria (0-65535)

# Color BASIC
## Comandos
### PRINT device number,expression

    Imprime datos en el dispositivo especificado. Si se omite, se asume #0 (pantalla)

# Color BASIC
## Comandos
### PRINT @{screen position} expression

    Funciona como IMPRIMIR, pero imprime en la ubicación especificada (0-511)

# Color BASIC
## Comandos
### READ variable[,variable,...]

    Lee la(s) siguiente(s) variable(s) del programa BASIC incrustado con sentencias DATA

# Color BASIC
## Comandos
### RENUM num

    Vuelve a numerar cada línea del programa en múltiplos de num

# Color BASIC
## Comandos
### RESET(x,y)

    Establece el píxel semigráfico en la ubicación x (0-63) e y (0-31) en negro

# Color BASIC
## Comandos
### RESTORE

    Restablece el puntero READ de nuevo a la primera instrucción DATA

# Color BASIC
## Comandos
### RETURN

    Regresa de una subrutina

# Color BASIC
## Comandos
### RUN num

    Ejecuta el programa BASIC, opcionalmente, en el número de línea especificado

# Color BASIC
## Comandos
### SET(x,y,color)

    Establece el píxel semigráfico en la ubicación x (0-63) y (0-31) en color (0-8)

# Color BASIC
## Comandos
### SKIPF ["filename"]

    Salta los programas BASIC en la cinta hasta que se encuentra el nombre del programa especificado

# Color BASIC
## Comandos
### SOUND tone,duration

    Suena un tono con frecuencia (1-255) y duración (1-255)

# Color BASIC
## Comandos
### STOP

    Hace que el programa deje de ejecutarse

# Color BASIC
## Comandos
### TAB(column)

    Tabula a la columna especificada (usado con PRINT)

# Color BASIC
## Comandos
### VAL(str)

    Devuelve el valor numérico de una cadena que contiene un número en forma de cadena

# Color BASIC
## Flujo de control
### GOSUB {line number}

    Llama a la subrutina en el número de línea especificado

# Color BASIC
## Flujo de control
### GOTO {line number}

    Salta al número de línea del programa especificado

# Color BASIC
## Flujo de control
### 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.
    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

# Color BASIC
## Error de mensajes
### /0

    división por cero

# Color BASIC
## Error de mensajes
### AO

    el archivo especificado ya está abierto

# Color BASIC
## Error de mensajes
### BS

    mal subíndice. el subíndice está fuera del rango DIM

# Color BASIC
## Error de mensajes
### CN

    no puede continuar (ver comando CONT)

# Color BASIC
## Error de mensajes
### DD

    intentar redimensionar una matriz

# Color BASIC
## Error de mensajes
### DN

    número de dispositivo no válido

# Color BASIC
## Error de mensajes
### DS

    error de declaración directa (el programa no tiene números de línea)

# Color BASIC
## Error de mensajes
### FC

    llamada de función ilegal: la función contiene un valor que está fuera de rango

# Color BASIC
## Error de mensajes
### FD

    datos de archivo erróneos: intento de leer un número en un valor de cadena, etc.

# Color BASIC
## Error de mensajes
### FM

    modo de archivo incorrecto, intento de ENTRADA de datos en un archivo abierto para SALIDA, etc.

# Color BASIC
## Error de mensajes
### ID

    directo ilegal: el comando especificado solo se puede ejecutar en un programa

# Color BASIC
## Error de mensajes
### IE

    entrada más allá del final del archivo. Ver EOF

# Color BASIC
## Error de mensajes
### IO

    error de entrada/salida

# Color BASIC
## Error de mensajes
### LS

    cadena larga: las cadenas solo pueden tener 255 caracteres

# Color BASIC
## Error de mensajes
### NF

    SIGUIENTE sin PARA

# Color BASIC
## Error de mensajes
### NO

    archivo no abierto

# Color BASIC
## Error de mensajes
### OD

    fuera de datos: intenta leer más allá de los últimos DATOS en el programa

# Color BASIC
## Error de mensajes
### OM

    sin memoria

# Color BASIC
## Error de mensajes
### OS

    fuera del espacio de cadena: vea CLEAR

# Color BASIC
## Error de mensajes
### OV

    desbordamiento: el número está fuera de rango

# Color BASIC
## Error de mensajes
### RG

    VOLVER sin GOSUB

# Color BASIC
## Error de mensajes
### SN

    error de sintaxis

# Color BASIC
## Error de mensajes
### ST

    operación de cadena demasiado compleja

# Color BASIC
## Error de mensajes
### TM

    tipo de discrepancia (A$=3, A="CAT")

# Color BASIC
## Error de mensajes
### UL

    intente ir a GOTO o GOSUB a una línea que no existe

# Color BASIC
## Subrutinas ROM documentadas

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

# Color BASIC
## Subrutinas ROM documentadas
### POLCAT

    dirección [$A000]: sondea el teclado para un carácter

# Color BASIC
## Subrutinas ROM documentadas
### CHROUT

    dirección [$A002]: envía un carácter a la pantalla o dispositivo

# Color BASIC
## Subrutinas ROM documentadas
### CSRDON

    dirección [$A004]: inicia el casete y se prepara para la lectura

# Color BASIC
## Subrutinas ROM documentadas
### BLKIN

    dirección [$A006]: lee un bloque del casete

# Color BASIC
## Subrutinas ROM documentadas
### BLKOUT

    dirección [$A008]: escribe un bloque en el casete

# Color BASIC
## Subrutinas ROM documentadas
### JOYIN

    dirección [$A00A]: lee los valores del joystick