Externamente, o BASIC do MC1000 é bem parecido com BASIC Applesoft, programado pela Microsoft para o Apple II (com instruções como HOME, GR, INVERSE, etc.; ausência de INKEY$, INSTR, etc.) Mas quando o BASIC Applesoft só foi criado já existiam versões do Microsoft BASIC rodando em máquinas baseadas no Intel 8080, o precursor do Z80. O BASIC do MC1000 parece ser um descendente de uma dessas versões antigas cujos números de ponto flutuante eram armazenados em 4 bytes, resultando em uma precisão de aproximadamente 6 dígitos decimais, em vez dos aproximadamente 9 dígitos de versões posteriores.
Resumo
(Para uma explicação mais detalhada consulta o Manual do BASIC.)
Instruções e linhas
Uma linha digitada sem um número de linha é executada imediatamente (modo direto); linhas digitadas com número de linha são armazenadas na RAM para execução posterior.
:- Separa instruções na mesma linha.
REM- Faz com que o resto da linha seja ignorada pelo interpretador, permitindo que o programador inclua no programa comentários para serem lidos por outras pessoas.
Operações sobre o programa BASIC na memória
NEW- Apaga o programa atual e todas as variáveis.
AUTO[ lin1 [-lin2 ] ]- Inicia um modo de digitação de linhas em que a numeração é fornecida automaticamente, iniciando em lin1 e aumentando de 10 em 10 até lin2. Na ausência de parâmetros, a numeração se inicia em 10. Na ausência de lin2, a sequencia continua até que o usuário pressione <CTRL>+<C>.
LIST[ [ lin1 ]-[ lin2 ] ]- Exibe a porção do programa entre as linhas lin1 e lin2, inclusive. Na ausência de lin1 a listagem inicia na primeira linha do programa. Na ausência de lin2 a listagem segue até a última linha do programa.
EDITlin- Executa uma rotina para edição da linha lin. (Ver Manual do BASIC.)
Variáveis
- Numéricas
- AB: Armazenam valores numéricos de ponto flutuante na faixa de ±1,70141×1038.
- Cadeia de caracteres
- AB
$: Armazenam cadeias de 0 a 255 caracteres.
Matrizes
- Numéricas
- AB
(exprN [,... ]) - Cadeia de caracteres
- AB
$(exprN [,... ])
Onde A é uma letra, B é nada, uma letra ou um algarismo. O tamanho da matriz é limitado apenas pela memória disponível. O nome de uma variável ou matriz pode conter mais caracteres, mas são ignorados. (Os nomes "PRECO", "PRAIA", "PRESIDENCIALISMO" todos se referem a uma mesma variável "PR".)
DIMmat(exprN [,... ])- Cria a matriz mat com as dimensões especificadas. Cada índice varia de 0–exprN.
- [
LET] var=expr - [
LET] mat(exprN [,... ]) =expr - Atribui um valor a uma variável, ou a um elemento de uma matriz. A presença da palavra
LETé opcional.
Operadores
Aritméticos
- exprN1
+exprN2 - Adição.
- exprN1
−exprN2 - Subtração.
- exprN1
*exprN2 - Multiplicação. (exprN1 × exprN2)
- exprN1
/exprN2 - Divisão. (exprN1 ÷ exprN2)
- exprN1
↑exprN2 - Exponenciação. (exprN1exprN2)
Relacionais
Retornam −1 para expressões verdadeiras e 0 para expressões falsas.
- exprN1
=exprN2 - É igual a.
- exprN1
<exprN2 - É menor do que.
- exprN1
>exprN2 - É maior do que.
- exprN1
<=exprN2 ou exprN1=<exprN2 - É menor ou igual a. (exprN1 ≤ exprN2)
- exprN1
>=exprN2 ou exprN1=>exprN2 - É maior ou igual a. (exprN1 ≥ exprN2)
- exprN1
<>exprN2 ou exprN1><exprN2 - É diferente de. (exprN1 ≠ exprN2)
Lógicos
Atuam a nível de bit em operandos numéricos, convertidos a inteiros de 16 bits com sinal.
- exprN1
ANDexprN2 - Para cada par correspondente de bits dos operandos:
- 0
AND0 = 0. - 0
AND1 = 0. - 1
AND0 = 0. - 1
AND1 = 1.
- 0
- exprN1
ORexprN2 - Para cada par correspondente de bits dos operandos:
- 0
OR0 = 0. - 0
OR1 = 1. - 1
OR0 = 1. - 1
OR1 = 1.
- 0
NOTexprN- Para cada bit do operando:
NOT0 = 1.NOT1 = 0.
Funções aritméticas
ABS(exprN)- Módulo de exprN. (Isto é, o valor de exprN sem o sinal.)
SGN(exprN)- Sinal de exprN: −1 (negativo), 0 (zero) ou 1 (positivo).
INT(exprN)- Número inteiro mais próximo menor ou igual a exprN.
SQR(exprN)- Raiz quadrada de exprN.
SIN(exprN)- Seno de exprN radianos.
COS(exprN)- Co-seno de exprN radianos.
TAN(exprN)- Tangente de exprN radianos.
ATN(exprN)- Arco-tangente de exprN radianos.
EXP(exprN)- eexprN, onde e = 2,71828.
LOG(exprN)- Logaritmo natural de exprN. (log e exprN, ln exprN.)
RND(exprN)-
- Se exprN > 0, um número pseudoaleatório entre 0 (inclusive) e 1 (exclusive).
- Se exprN = 0, repete o último número gerado.
- Se exprN < 0, usa o parâmetro para inicializar a semente do gerador de números pseudoaleatórios.
DEF FNAB(varN) =exprN- Define uma função.
FNAB(exprN)- Calcula o valor da função AB para o valor exprN.
Algumas funções matemáticas ausentes no BASIC do MC1000 podem ser definidas assim:
- Arco-seno, sen−1 x
DEF FN AS(X) = ATN(X / SQR (1 - X * X))- Arco-cosseno, cos−1 x
DEF FN AC(X) = 1.5707963 - ATN(X / SQR(1 - X * X))- Logaritmo na base 10, log 10 x
DEF FN LD(X) = LOG(X) / 2.3025851
Operações sobre cadeias de caracteres
- exprC1
+exprC2 - (Operador.) Concatena cadeias.
LEN(exprC)- Comprimento da cadeia exprC.
LEFT$(exprC,exprN)- Os exprN caracteres mais à esquerda da cadeia exprC.
MID$(exprC,exprN1 [,exprN2 ])- exprN2 caracteres de exprC, começando da posição exprN1. Na ausência de exprN2, considera-se até o final da cadeia.
RIGHT$(exprC,exprN)- Os exprN caracteres mais à esquerda da cadeia exprC.
STR$(exprN)- A cadeia representando o valor numérico exprN.
VAL(exprC)- O valor numérico da cadeia exprC.
CHR$(exprN)- O caracter de código ASCII exprN.
ASC(exprC)- O código ASCII do primeiro caracter da cadeia exprC.
Controle
RUN[ lin ]- Apaga todas as variáveis e executa o programa atual a partir da linha lin. Na ausência de lin a execução inicia na primeira linha do programa. Em execução, o programa pode ser pausado com <CTRL>+<S> e interrompido com <CTRL>+<C>.
STOP- Para a execução do programa e imprime o número da linha.
CONT- Retoma a execução do programa.
END- Para a execução do programa.
GOTOlin- Salta para a linha de número lin.
ONexprNGOTOlin [,... ]- Salta para um dos números de linha especificados segundo o valor de exprN (1, 2, … n). Se exprN = 0 ou maior que a quantidade de números de linha especificados, ignora e passa à instrução seguinte. Se exprN < 0, ocorre erro de parâmetro ilegal.
IFexprNTHENinstr [:... ]- Se exprN for falsa (=0), ignora o restante da linha atual e passa à próxima linha. Se exprN for verdadeira (≠0), continua a execução das instruções seguintes na linha.
IFexprNTHENlinIFexprNGOTOlin- Sintaxes abreviadas alternativas para
IFexprNTHEN GOTOlin. FORvarN=exprN1TOexprN2 [STEPexprN3 ]- Inicia um laço para todos os valores de varN de exprN1 até exprN2, saltando de exprN3 em exprN3. Se a cláusula
STEPfor omitida, subentende-se 1. NEXT[ varN [,... ] ]- Repete o laço
FORpara os próximos valores de varN1, varN2, ... varNn. Se nenhuma variável for especificada, repete o laço mais recente. GOSUBlin- Salta para a subrotina na linha lin.
RETURN- Retorna de uma subrotina para a instrução seguinte à instrução
GOSUB. ONexprNGOSUBlin [,... ]- Salta para a subrotina em um dos números de linha especificados segundo o valor de exprN (1, 2, ... n). Se exprN = 0 ou maior que a quantidade de números de linha especificados, ignora e passa à instrução seguinte. Se exprN < 0, ocorre erro de parâmetro ilegal.
Entrada e saída
INPUT[ literalC;] var [,... ]- Imprime a mensagem contida em literalC, se for especificada; em seguida imprime um ponto de interrogação ("?"), espera que o usuário digite dados separados por vírgulas e os armazena nas variáveis especificadas.
READvar [,... ]- Lê valores das listas
DATAe os armazena nas variáveis especificadas. DATAliteral [,... ]- Lista de valores de dados a serem lidos com
READ. RESTORE[ lin ]- Posiciona o ponto de leitura da lista
DATAno início da linha lin. Ou na primeira linha do programa se lin estiver ausente. PR#exprN- Determina se as instruções de impressão (
PRINT,LIST) serão exibidos na tela (exprN = 0), na impressora (exprN = 1) ou em ambos (exprN = 2). PRINT[ expr [ sep ...] ] [ sep ]-
Imprime os valores de diversas expressões em sequência. Quando um ponto-e-vírgula (
;) for usado como separador, o valor seguinte é impresso na posição atual do cursor. Uma vírgula (,) avança o cursor para o próximo "ponto de tabulação" (até 13 espaços adiante). Se a instrução terminar com um separador, o cursor fica posicionado no lugar correspondente aguardando a próxima instrução de impressão. Caso contrário, o cursor cai para o início da linha seguinte. No lugar de uma expressão pode-se usar uma das cláusulas:SPC(exprN): Imprime exprN espaços.TAB(exprN): Imprime espaços até o cursor chegar à exprN-ésima posição de caracter a partir do início da linha.VTAB(exprN): Posiciona o cursor verticalmente. (Não funciona. Ver bugs.)
TEXT- Entra o modo de texto e limpa a tela.
HOME- Limpa a tela de texto e posiciona o cursor no canto superior esquerdo.
NORMAL- Determina impressão em modo normal (letras claras sobre fundo escuro).
INVERSE- Determina impressão em modo invertido (letras escuras sobre fundo claro).
WIDTHexprN- Introduz uma quebra de linha automática após cada exprN caracteres impressos em sequência. O valor padrão é 255.
POS(exprN)- (Função.) Retorna o deslocamento do cursor desde a última quebra de linha.
COLUMNexprN-
Só admite dois valores:
- 32 — Direciona a impressão de texto para o VDG MC6847, de 32 colunas, e limpa a tela.
- 80 — Se houver cartão de 80 colunas, direciona a impressão de texto para ele e limpa a tela. Caso contrário, produz erro "tipo incompatível".
Outros valores produzem erro "parâmetro ilegal".
INP(exprN)- (Função.) Lê um valor da porta de entrada exprN.
OUTexprN1,exprN2- Envia o valor exprN2 para a porta de saída exprN1.
WAITexprN1,exprN2 [,exprN3 ]- Espera até que
(INP(exprN1) XORexprN3) ANDexprN2 ≠.0. Na ausência de exprN3, assume-se 0.
Operações com a fita cassete
SAVE[ nome ]- Salva o programa em BASIC atual na fita. O nome é uma sequência de 1 a 5 caracteres alfanuméricos (sem aspas). ATENÇÃO: Se o programa for salvo com nome, será NECESSÁRIO informar o nome no comando
LOAD, então é importante anotar o nome do programa em algum lugar. Um programa sem nome executa automaticamente após a carga, com impressões desativadas (vide a variável do sistema $0344 / 836). LOAD[ nome ]- Carrega um programa em BASIC da fita. O nome é uma sequência de 1 a 5 caracteres alfanuméricos (sem aspas). ATENÇÃO: Se o programa foi salvo com nome, é NECESSÁRIO informar o nome no comando
LOAD. Um programa sem nome executa automaticamente após a carga, com impressões desativadas (vide a variável do sistema $0344 / 836). SAVE *matN- Salva o conteúdo de uma matriz numérica na fita. Atenção: Deve haver um espaço entre o asterisco e o nome da matriz.
LOAD *matN- Carrega o conteúdo de uma matriz numérica da fita. A matriz deve ser criada com
DIMantes da carga. Atenção: Deve haver um espaço entre o asterisco e o nome da matriz. TLOAD- Carrega um programa em código de máquina da fita e o executa em "modo de jogo".
Gráficos
GR- Passa ao modo gráfico de baixa resolução (128×64 pixels, 4 cores) e limpa a tela.
COLOR =exprN- Define a cor de desenho do modo de baixa resolução como exprN (0–3).
HGR- Passa ao modo gráfico de alta resolução (256×192 pixels, preto e branco) e limpa a tela.
PLOTexprNx,exprNy- Faz um ponto nas coordenadas exprNx, exprNy.
PLOT[ exprNx1,exprNy1 ]TOexprNx2,exprNy2 [TO... ]- Desenha uma ou mais linhas conectadas na tela gráfica. Se uma primeira coordenada não for especificada antes da palavra
TO, o desenho parte do último ponto desenhado. DRAW[-] exprNx,[-] exprNy-
Desenha uma linha do último ponto desenhado (x, y) até novas coordenadas x + exprNx, y + exprNy etc.
Atenção: Os sinais de menos, quando presentes, fazem parte da sintaxe do comando, e não das expressões numéricas. A instrução
DRAW -4-3,0equivale aDRAW -(4-3),0ouDRAW -1,0, e não aDRAW -7,0como se esperaria. De fato, a instrução não aceita parâmetros negativos. Instruções comoDRAW (-1),0(o sinal de menos não é reconhecido como parte da sintaxe porque não vem imediatamente após a palavraDRAW) ouDY = -5 : DRAW 0,DYcausam erro de parâmetro ilegal. UNPLOT,UNDRAW- Como
PLOTeDRAW, mas apagam ao invés de desenhar. SETexprNx,exprNy- Muda a coordenada armazenada do último ponto desenhado, sem desenhar nada.
Som
TEMPOexprN1,exprN2,exprN3- exprN1 (0‒255) define o período do envelope do canal; exprN2 (0‒3) define o compasso do canal; exprN3(1‒3) informa qual canal está sendo configurado.
SOUNDexprN1,exprN2,exprN3-
Toca uma nota; exprN1 (0‒255) seleciona a nota (ver valores válidos no Manual do BASIC); exprN2 (0‒255) indica a duração da nota; exprN3 (1‒3) informa o canal em que a nota soará.
Atenção: Se se emitir uma instrução
SOUNDsem ter configurado o canal comTEMPO, o computador travará.
Instruções utilitárias
CLEAR[ exprN1 [,exprN2 ] ]- Apaga todas as variáveis. Se exprN1 for especificado, define o tamanho da área de armazenamento de cadeias. Se exprN2 for especificado, define o limite superior dessa área. A RAM depois desse endereço fica livre para ser usada pelo usuário para
POKEs e programas em linguagem de máquina, sem risco de ser invadido pelo crescimento do programa BASIC, suas variáveis ou pilha do Z80. Quando o computador com 16KiB de RAM é ligado, a situação é tal como se tivesse sido emitido o comandoCLEAR 512,16127: Há 512 bytes de área para cadeias ($3D00–$3EFF, 15616–16127); e depois 256 bytes até o fim da RAM ($3F00–$3FFF, 16128–16383) livres para o usuário. PEEK(exprN)- (Função.) Valor do endereço de memória exprN (0–65535).
POKEexprN1,exprN2- Armazena o valor exprN2 (0–255) no endereço de memória exprN1 (0–65535).
CALLend- Executa a rotina em linguagem de máquina começando no endereço de memória end (0–65535).
USR(exprN)- (Função.) Passa um argumento a uma rotina do usuário em linguagem de máquina. Antes é preciso colocar o endereço do início da rotina nos endereços $0304 e $0305 (772 e 773), o que deve ser feito com
POKEs já que o MC1000 não tem uma instruçãoDEFUSR. O parâmetro exprN estará disponível em $03BF–$03C2 (4 bytes), e o valor colocado aí será o valor de retorno da função. FRE(exprN)- (Função.) Quantidade de memória livre para crescimento do programa BASIC, variáveis e matrizes. O valor da expressão exprN é irrelevante.
FRE(exprC)- (Função.) Compacta a área de cadeias de caracteres e retorna a quantidade de memória livre para cadeias de caracteres. O valor da expressão exprC é irrelevante.
TRO N- Ativa a exibição dos números de linha de cada instrução executada, para depuração do programa.
TRO F- Desliga a exibição dos números de linhas.
DEBUG- Executa um programa monitor para criação e depuração de programas em linguagem de máquina. (Ver Manual do BASIC.)
EXIT- Reinicia o interpretador BASIC.
Nenhum comentário:
Postar um comentário