Color BASIC es la implementación de Microsoft BASIC que se incluye en la ROM de los equipos de color Tandy / Radio Shack TRS-80 fabricados entre 1980 y 1991. BASIC (Código de instrucción simbólica multiusos para principiantes) es un lenguaje de alto nivel con sintaxis simple que facilita a los principiantes la escritura de programas sencillos. El color BASIC se interpreta , es decir, se decodifica a medida que se ejecuta. El BASIC interpretado es simple de editar y depurar, pero la ejecución es significativamente más lenta que para los programas escritos en lenguaje ensamblador o lenguajes compilados típicos de la época (como Pascal , BASIC compilado oC ).
Diseñada por | Bill Gates [1] |
---|---|
Desarrollador | Microsoft |
Apareció por primera vez | 1980 |
Lanzamiento estable | Color BASIC 1.3 (1982) Color ampliado BASIC ("ECB") (1984) Disco Color ampliado BASIC ("DECB") (1984) |
Plataforma | Computadora a color TRS-80 |
Fondo
El núcleo de Color BASIC fue Microsoft BASIC-69, cuya licencia Tandy le otorgó a Microsoft. Color BASIC 1.0 fue lanzado con la computadora de color TRS-80 4k original en 1980. Reside en 8k bytes de ROM y es responsable de todas las tareas de "limpieza" del sistema. Esto incluye inicialización 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 una o más declaraciones con variables y operadores. Se requieren 16k de memoria para el siguiente nivel de BASIC, Extended Color BASIC. ("ECB") Extended BASIC es necesario para el controlador de disquete, que luego le proporciona Disk Extended Color BASIC. ("DECB") Los emuladores de las computadoras en color que ejecutan este intérprete y las demás están disponibles para las computadoras modernas, algunas de las cuales requieren un archivo de "instantánea" de la máquina física. [2]
Variables
Color BASIC comprende un tipo de variable numérica y variables de cadena. Los nombres de las variables en Color BASIC tienen los dos primeros caracteres significativos. El primer carácter del nombre de la variable debe ser una letra. El segundo 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 de
A = 5 A $ = "ESTO ES UNA CADENA" K7 = 10 BB $ = "¡HOLA!" ZZ = 1,54
Las variables numéricas tienen un solo tipo, una implementación de coma flotante binaria. Cada variable numérica usa 5 bytes de memoria y puede estar en el rango de -1E + 38 hasta 1E + 37.
A diferencia de la mayoría de las implementaciones de Microsoft BASIC, Color BASIC requiere que el usuario reserve espacio para las variables de cadena a través de la instrucción CLEAR.
Las matrices multidimensionales también son compatibles con variables numéricas y de cadena. En el caso de una matriz, la dirección del elemento se incluye entre paréntesis:
A ( 1 ) = 1 A $ ( 1 ) = "LIBROS"
Varias dimensiones están separadas por comas
A ( 1 , 3 ) = 4 A $ ( 2 , 2 ) = "XYZ123"
Operadores y símbolos
Color BASIC proporciona varios operadores tanto para operaciones matemáticas como, en menor medida, con cadenas.
- + se puede usar para concatenar cadenas o para sumas matemáticas
- - se usa para restar
- * se usa para multiplicar
- / se usa para la división
Los paréntesis () se utilizan para anular el orden matemático de operación
- Y se utiliza para operaciones lógicas 'y'
- OR se utiliza para operaciones lógicas 'o'
- NOT se usa para operaciones lógicas 'no'
Para las pruebas, se utilizan los siguientes operadores:
- = es igual a
- > es mayor que
- > = es mayor o igual que (también => es aceptable)
- <= es menor o igual que (también =
- <> no es igual a (también>
Otros símbolos utilizados en BASIC:
- "" indica que los datos de la cadena son una constante (estática)
- : separa varios comandos en una sola línea de programa
- Un punto y coma, cuando se encuentra en una función PRINT, hará que la salida permanezca en la misma línea
- Una coma, cuando se encuentra en una función PRINT, pasará a la siguiente columna
Clave
num indica que se requiere una expresión numérica. Puede ser un número fijo, una variable u otra operación o función que devuelva una cantidad numérica.
str indica que se requiere una expresión de cadena. Puede 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.
el número de dispositivo indica un dispositivo. De forma predeterminada, se asume el dispositivo 0 (pantalla y teclado). En Color BASIC, el dispositivo # -1 (casete) y # -2 (impresora) están disponibles para el programador.
Modo de edición
Si comete un error al escribir una línea, puede volver a escribirla desde cero (o BORRARla) ... o puede EDITARla. Cuando está en el modo EDITAR, obtiene una reimpresión de la línea y una segunda copia que coloca la barra espaciadora en los caracteres. No puede usar las teclas de flecha. retroceso te lleva a la izquierda, pero en realidad no lo borra en el búfer. 'i' te pone en modo de inserción. presionar retorno te saca de esto. 'c' cambia un carácter, 'd' borra un carácter. 'x' te lleva al final de la línea, lo que te permite extenderla. 'l' vuelve a dibujar la línea.
Funciones
ABS(num)
- devuelve el valor absoluto de num
ASC(str)
- devuelve el código ASCII del primer carácter de str
CHR$(num)
- devuelve un solo carácter de cadena con el código ASCII num
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 del 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)
- retornos primero ( "izquierda") los num caracteres 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 num inicial y la longitud num caracteres de longitud. También se puede reasignar agregando = "newvalue"
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 numm (0-63) y 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 se almacena en las ubicaciones de memoria 275 y 276. num se pasa a la rutina, y se asigna un valor de retorno cuando la rutina finaliza
Comandos
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 BÁSICO desde el cassette. Si no se especifica ningún nombre, se carga el siguiente programa
CLOADM ["name"]
- carga el programa en lenguaje de máquina desde el cassette. 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)
- limpia la pantalla. Un color opcional num (0-8) se puede especificar
CONT
- continúa un programa después de presionar BREAK o una declaración STOP
CSAVE ["name"]
- guarda un programa BÁSICO en un casete con nombre opcional
DATA var,var,var...
- almacena datos en un programa BÁSICO para su recuperación 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 BÁSICO
EXEC
- [ dirección de memoria ] ejecuta el programa en lenguaje de máquina en la dirección de memoria . Si no se especifica ninguno, se utiliza la dirección de ejecución del programa cargado desde 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 las líneas de su programa. Se puede omitir el inicio o el final, o si se omiten ambos, se listará todo el programa
LLIST [starting line] - [ending line]
- funciona como LIST, pero se envía 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 núm.
ON (num) GOTO line 1, line 2, ... line n
- evalúa la expresión num y salta al num ª línea 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 PRINT, pero imprime en la ubicación especificada (0-511)
READ variable[,variable,...]
- Lee la (s) siguiente (s) variable (s) del programa BASIC incrustado con declaraciones 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) ey (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 BÁSICOS 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)
- pestañas 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
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 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
PARA {num} = {número} PARA {número} [PASO {número} ]...SIGUIENTE (num)
- crea un bucle donde la variable numérica (num) se ejecuta desde el número inicial hasta el número final en incrementos de número (STEP). Si se omite el paso, se asume 1
Error de mensajes
/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 incorrectos: intente leer un número en un valor de cadena, etc.
FM
- modo de archivo incorrecto, intente ENTRAR 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 FOR
NO
- archivo no abierto
OD
- sin datos: intente leer más allá de los últimos DATOS en el programa
OM
- sin memoria
OS
- fuera del espacio de la cadena: ver BORRAR
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
- falta de coincidencia de tipo (A $ = 3, A = "CAT")
UL
- intentar GOTO o GOSUB a una línea que no existe
Subrutinas ROM documentadas
Hay algunas subrutinas disponibles para programas en lenguaje de máquina en la ROM Color BASIC que están disponibles para programación de propósito 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 al 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
- ^ 80-NOSOTROS. Entrevistas Bill Gates de Microsoft , 80-US - Volumen IV Número 3 (1981-05) (80-Northwest Publishing) (Estados Unidos), página 8. Más recientemente completó el trabajo en la computadora en color Radio Shack. Lo que más le entusiasma es el paquete Extended Color Basic que escribió.
- ^ MESS
- Notas
- Introducción a Color BASIC , 1980, Tandy Corporation. Publicación # 8749266
- Color Computer Disk System (Tandy) , 1981, Tandy Corporation. Publicación # 8749470-BCo
- Introducción a Extended Color BASIC , 1984, Tandy Corporation. Publicación # 811013700A
- Color Computer 3 Exended Basic (Tandy) , 1986, Tandy Corporation. Publicación # 81101910A