Cor BASIC - Color BASIC

Cor BASIC
Projetado por Bill Gates
Desenvolvedor Microsoft
Apareceu pela primeira vez 1980 ; 41 anos atrás ( 1980 )
Versão estável
Color BASIC 1.3 (1982)
Extended Color BASIC ("ECB") (1984)
Disk Extended Color BASIC ("DECB") (1984)
Plataforma TRS-80 Color Computer

Color BASIC é a implementação do Microsoft BASIC que está incluído no ROM dos computadores Tandy / Radio Shack TRS-80 Color fabricados entre 1980 e 1991. BASIC (Beginner's All-purpose Symbolic Instruction Code) é uma linguagem de alto nível com sintaxe simples que torna mais fácil escrever programas simples. O Color BASIC é interpretado , ou seja, decodificado à medida que é executado.

Fundo

Image
Disk Extended Color BASIC 2.1 em um computador Tandy Color 3

O núcleo do Color BASIC era o Microsoft BASIC-69 que a Tandy licenciou da Microsoft. O Color BASIC 1.0 foi lançado com o computador em cores TRS-80 original de 4k em 1980. Ele reside em 8k bytes de ROM e é responsável por todas as tarefas de 'manutenção' do sistema. Isso inclui inicialização de hardware, gerenciamento de memória, processamento de interrupção, etc. Como a maioria das implementações do BASIC, cada linha de código começa com um número de linha e consiste em uma ou mais instruções com variáveis ​​e operadores. 16k de memória são necessários para o próximo nível de BASIC, Extended Color BASIC. ("ECB") Extended BASIC é necessário para a controladora de disquete, que fornece a você Disk Extended Color BASIC. ("DECB") Emuladores dos Computadores Coloridos que executam este interpretador e os outros estão disponíveis para computadores modernos, alguns dos quais requerem um arquivo "instantâneo" da máquina física.

Variáveis

Color BASIC entende um tipo de variável numérica e variáveis ​​de string. Nomes de variáveis ​​em Color BASIC têm os primeiros dois caracteres significativos. O primeiro caractere do nome da variável deve ser uma letra. O segundo pode ser uma letra ou um número. Variáveis ​​de string são indicadas adicionando um cifrão ($) após o nome da variável.

Exemplos

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

Variáveis ​​numéricas têm apenas um tipo, uma implementação de ponto flutuante binário. Cada variável numérica usa 5 bytes de memória e pode estar no intervalo de -1E + 38 a 1E + 37.

Ao contrário da maioria das implementações do Microsoft BASIC, Color BASIC requer que o usuário reserve espaço para variáveis ​​de string por meio da instrução CLEAR.

Matrizes multidimensionais também são suportadas com variáveis ​​numéricas e de string. No caso de uma matriz, o endereço do elemento é colocado entre parênteses:

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

Múltiplas dimensões são separadas por vírgulas

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

Operadores e símbolos

O Color BASIC fornece vários operadores para operações matemáticas e, em menor grau, para operações de string.

+ pode ser usado para concatenar strings ou para adição matemática
- é usado para subtração
* é usado para multiplicação
/ é usado para divisão

Os parênteses () são usados ​​para substituir a ordem matemática de operação

AND é usado para operações lógicas 'e'
OR é usado para operações lógicas 'ou'
NOT é usado para operações lógicas 'não'

Para teste, os seguintes operadores são usados:

= é igual a
> é maior que
<é menor que
> = é maior ou igual a (também => é aceitável)
<= é menor ou igual a (também = <é aceitável)
<> não é igual a (também> <é aceitável)

Outros símbolos usados ​​no BASIC:

"" indica que os dados da string são constantes (estáticos)
: separa vários comandos em uma única linha de programa
Um ponto e vírgula, quando encontrado em uma função PRINT, fará com que a saída permaneça na mesma linha
Uma vírgula, quando encontrada em uma função PRINT, irá tabular para a próxima coluna

Chave

num indica que uma expressão numérica é necessária. Pode ser um número fixo, uma variável ou outra operação ou função que retorna uma quantidade numérica.

str indica que uma expressão de string é necessária. Pode ser um valor de string estático (entre aspas), uma variável de string ou outra função ou expressão que retorna uma string de caracteres.

o número do dispositivo indica um dispositivo. Por padrão, o dispositivo 0 (tela e teclado) é assumido. No Color BASIC, os dispositivos # -1 (cassete) e # -2 (impressora) estão disponíveis para o programador.

Modo de edição

Se você cometer um erro ao digitar uma linha, pode redigitá-la do zero (ou DEL) .. ou pode EDITÁ-la. Quando no modo EDIT, você obtém uma reimpressão da linha, e uma segunda cópia que você barra de espaço entre os caracteres. Você não pode usar as teclas de seta. backspace leva você para a esquerda, mas não apaga realmente no buffer. 'i' coloca você no modo de inserção. pressionar Return tira você disso. 'c' altera um caractere, 'd' exclui um caractere. 'x' leva você para o final da linha, permitindo que você a envie. 'l' redesenha a linha.

Funções

ABS(num)
retorna o valor absoluto de num
ASC(str)
retorna o código ASCII do primeiro caractere em str
CHR$(num)
retorna um único caractere de string com o código ASCII num
EOF(device number)
retorna 0 se o arquivo tiver dados ou -1 se no final do arquivo
INKEY$
retorna um caractere se uma tecla do teclado for pressionada ou nulo se nada for pressionado
INT(num)
retorna a parte inteira de num
INSTR(startpos,search str,target str)
procura a primeira string, no str de destino. startpos é opcional.
JOYSTK(num)
retorna a posição do eixo do joystick (0-3) com um valor de 0 a 63
LEFT$(str,num)
retorna os primeiros ("esquerdos") caracteres num da string str
LEN(str)
retorna o comprimento (em caracteres) da string str
MEM
retorna a memória livre disponível em bytes
MID$(str,start num,length num)
retorna uma subcadeia de string str começando na posição inicial num e comprimento num caracteres de comprimento. Também pode reatribuir adicionando = "newvalue"
PEEK(num)
retorna o valor da localização da memória num (0-65535)
POINT(x num,y num)
retorna a cor do ponto semigráfico na posição x numm ( 0-63 ) ey num (0-31)
RIGHT$(str,position num)
retorna a porção final ("direita") da string str começando na posição do caractere num
RND(number)
retorna um número aleatório (inteiro) entre 1 e num
SGN(num)
retorna o sinal de um número num , 1 se positivo, -1 se negativo, 0 se 0
SIN(num)
retorna o seno de num em radianos
STR$(num)
retorna uma string do número num
USR(num)
chama uma sub-rotina de linguagem de máquina cujo endereço é armazenado nas localizações de memória 275 e 276. num é passado para a rotina e um valor de retorno é atribuído quando a rotina é concluída

Comandos

AUDIO [ON|OFF]
Conecta ou desconecta o áudio da fita do som da TV
CLEAR variable space[,highest memory location]
reserva memória para variáveis ​​de string e, opcionalmente, um programa de linguagem de máquina
CLOAD ["name"]
carrega o programa BASIC do cassete. Se nenhum nome for especificado, o próximo programa é carregado
CLOADM ["name"]
carrega o programa de linguagem de máquina do cassete. Se nenhum nome for especificado, o próximo programa é carregado
CLOSE [device number]
fecha um dispositivo (em Color BASIC isso só pode ser # -1, o cassete)
CLS(num)
limpa a tela. Um número de cor opcional (0-8) pode ser especificado
CONT
continua um programa após pressionar BREAK ou uma instrução STOP
CSAVE ["name"]
salva um programa BASIC em um cassete com nome opcional
DATA var,var,var...
armazena dados em um programa BASIC para recuperação com o comando READ
DIM variable(dimension[,dimension 2,...]
dimensiona um array e reserva espaço de memória para ele
END
indica o fim de um programa BASIC
EXEC
[ endereço de memória ] executa o programa em linguagem de máquina no endereço de memória . Se nenhum for especificado, o endereço de execução do programa carregado da fita é usado
INPUT [device number] [{prompt text};] variable [,variable 2, variable n]
Aguarda a entrada do número do dispositivo . Se não for especificado, o dispositivo 0 (teclado) é assumido. Um prompt opcional pode ser impresso na tela para a instrução de entrada
LIST [starting line] - [ending line]
lista a (s) linha (s) do seu programa. O início ou o fim podem ser omitidos ou, se ambos forem omitidos, todo o programa será listado
LLIST [starting line] - [ending line]
funciona como LIST, mas sai para a impressora
MOTOR [ON|OFF]
liga ou desliga o motor do cassete
NEW
apaga o conteúdo da memória (programa e variável)
ON {num} GOSUB line 1, line 2, ... line n
avalia a expressão num e chama o numero da sub-rotina listada
ON (num) GOTO line 1, line 2, ... line n
avalia a expressão num e salta para a número da linha listada
OPEN "[I|O]",device number[,"filename"]
abre um dispositivo para comunicação
POKE memory address, data
grava dados (0-255) no endereço de memória (0-65535)
PRINT device number,expression
imprime dados no dispositivo especificado. Se omitido, # 0 (tela) é assumido
PRINT @{screen position} expression
funciona como PRINT, mas imprime no local especificado (0-511)
READ variable[,variable,...]
lê a (s) próxima (s) variável (es) do programa BASIC embutido com instruções DATA
RENUM num
renumera cada linha do programa em múltiplos de num
RESET(x,y)
define o pixel semigráfico na localização x (0-63) ey (0-31) para preto
RESTORE
redefine o ponteiro READ de volta para a primeira instrução DATA
RETURN
retorna de uma sub-rotina
RUN num
executa o programa BASIC, opcionalmente, no número de linha especificado
SET(x,y,color)
define o pixel semigráfico na localização x (0-63) y (0-31) para a cor (0-8)
SKIPF ["filename"]
pula programas BASIC na fita até que o nome do programa especificado seja encontrado
SOUND tone,duration
emite um tom com frequência (1-255) e duração (1-255)
STOP
faz com que o programa pare de executar
TAB(column)
guias para a coluna especificada (usado com PRINT)
VAL(str)
retorna o valor numérico de uma string que contém um número na forma de string

Controle de fluxo

GOSUB {line number}
chama a sub-rotina no número de linha especificado
GOTO {line number}
salta para o número da linha do programa especificado
IF {test} THEN {command(s)} [ELSE {command(s)}]
executa teste condicional. Se o teste for verdadeiro, ENTÃO os comandos serão executados, caso contrário (ELSE) outros comandos serão executados. Se nenhum ELSE for especificado e o teste for falso, a próxima linha do programa será executada
FOR {num} = {number} TO {number} [STEP {number}]
...
NEXT (num)
cria um loop onde a variável numérica (num) vai do número inicial ao número final em incrementos de número (STEP). Se a etapa for omitida, 1 é assumido

Mensagens de erro

/0
divisão por zero
AO
o arquivo especificado já está aberto
BS
subscrito ruim. o subscrito está fora do intervalo DIM
CN
não pode continuar (ver comando CONT)
DD
tentativa de redimensionar uma matriz
DN
número de dispositivo inválido
DS
erro de instrução direta (o programa não tem números de linha)
FC
chamada de função ilegal: a função contém um valor que está fora do intervalo
FD
dados de arquivo inválidos: tentativa de ler um número em um valor de string, etc.
FM
modo de arquivo inválido, tentativa de INPUT de dados para um arquivo aberto para OUTPUT, etc.
ID
ilegal direto: o comando especificado só pode ser executado em um programa
IE
entrada após o final do arquivo. Veja EOF
IO
erro de entrada / saída
LS
string longa: as strings podem ter apenas 255 caracteres
NF
PRÓXIMO sem FOR
NO
arquivo não aberto
OD
fora dos dados: tentativa de ler além dos últimos DATA no programa
OM
fora da memória
OS
fora do espaço da string: veja CLEAR
OV
estouro: o número está fora do intervalo
RG
RETORNAR sem GOSUB
SN
erro de sintaxe
ST
operação de string muito complexa
TM
incompatibilidade de tipo (A $ = 3, A = "CAT")
UL
tentativa de GOTO ou GOSUB para uma linha que não existe

Sub-rotinas de ROM documentadas

Existem algumas sub-rotinas disponíveis para programas em linguagem de máquina no Color BASIC ROM que estão disponíveis para programação de propósito geral.

POLCAT
endereço [$ A000]: pesquisa teclado para um personagem
CHROUT
endereço [$ A002]: retorna um caractere para a tela ou dispositivo
CSRDON
endereço [$ A004]: inicia a cassete e prepara para a leitura
BLKIN
endereço [$ A006]: lê um bloco da cassete
BLKOUT
endereço [$ A008]: grava um bloco na cassete
JOYIN
endereço [$ A00A]: lê os valores do joystick

Referências

Notas