Nesta seção iremos ver dicas de como operar com MSX.
Alguns pokes e peeks interessantes:
POKE &HF346,1 - Habilita o call system.
POKE &HF247,n - Muda o drive mestre (A,B,C,D,...).
POKE &HFF89,&HE1 - Comando LIST dá syntax error.
POKE &HFF89,&HEE - Comando LIST dá reset.
POKE &HFF89,&201 - Comando LIST volta ao normal.
POKE &HFBB1,1 - Desativa CONTROL+STOP.
POKE &HFBB1,0 - Ativa CONTROL+STOP.
POKE &HF2B1,n - Determina o número de linhas na tela.
POKE &HFCAB,1 - Trava as letras maiúsculas.
POKE &HFCAB,255 - Caps Lock volta ao normal.
PEEK(&HFAFC) - Mostra a memória de vídeo.
PEEK(&H2D) - Mostra a versão do MSX.
PEEK(&H347) - Mostra a quantidade de drives ativos.
Usando o poke:
20 POKE &HF346,1
Usando o peek:
20 print peek(&hf346)
Manipulação de cores no MSX 2:
Conforme podemos observar na página de hardware, o MSX 2 tem uma screen com 16
cores e 512 combinações. Mas o que vem a ser isto ? Simples. Podemos por no máximo
16 cores diferentes entre si na tela ao mesmo tempo, assim como na screen 2 do
MSX 1. A novidade é que cada uma dessas cores pode sofrer uma mudança de tonalida-
de, a qualquer momento. Fazemos esse controle através do RGB.
O comando COLOR faz o ajuste de tonalidade das cores nas screens 0, 1, 2, 3, 4,
5, 6 e 7. A estrutura do color vem a seguir:
COLOR=(cor a alterar,vermelho(red),verde(green),azul(blue))
COLOR=(COR,R,G,B), R,G,B => Variam de 0 a 7. 0=Mín e 7=Máx.
Supomos que desejemos mudar a cor branca para amarela. Sabemos que amarelo é a
mistura de vermelho com verde. então:
10 COLOR=(15,7,7,0)
Podemos com isso até usar variáveis para fazer efeitos para clarear e escurecer:
10 FOR F=0 TO 7
20 COLOR=(15,F,F,F)
30 NEXT F
A screen 8 é uma screen destinada a fotos. Tem 256 cores ao mesmo tempo na tela,
porém não permite essa manipulação de RGB.
Para mudar a cor na screen 8:
10 screen 8
20 line(10,10)-(100,100),255
30 goto 30
As cores variam de 0 a 255. 255 é o branco.
A partir da screen 5, a tela não borra mais !!!!
Como mover a tela no MSX 2+:
O MSX 2+ vem com uma inovação: o scroll fino de tela. Para mover a tela digite:
SET SCROLL A,B,C,D
A - Movimento horizontal.
B - Movimento vertical.
C e D - Escondem cantos da tela. Valor entre 0 e 1.
Texto sem fundo colorido no MSX 2:
Para quem está acostumado a escrever na tela gráfica com PRESET(x,y),0:?#1," ",
irá estranhar a aparição do fundo do texto da mesma cor que a borda da tela.
Para sanar este problema defina a cor da borda como zero:
COLOR ,,0. Depois acrescente a opção TPSET, que ignora a cor zero:
PRESET(x,y),0,tpset:?#1," ".
Podemos usar o tpset para copiar objetos na tela, sem aparecer a borda preta:
copy(x1,y1)-(x2,y2),1 to (xf,yf),0,tpset
Agora no MSX 2 temos várias páginas para trabalhar:
Esta sem dúvidas é uma das grandes virtudes do MSX 2. Temos 4 páginas na
screen 5 e 2 nas screens 7 e 8. Uma fica visível e a outra escondida. Podemos,
por exemplo, carregar uma tela com desenhos em vários quadros na página escon-
dida e mostar na visível apenas um quadro, fazendo-se assim uma animação.
O comando que manipula as páginas é:
SET PAGE A,B
A - Página em uso.
B - Página visível.
Como carregar programas no MSX:
Para carregar um programa em BASIC:
1 - Se for .BAS, use: RUN"arquivo.bas", onde arquivo é o nome do arquivo a
carregar.
2 - Se for .BIN, use: BLOAD"arquivo.bin",r. A opção r roda automaticamente
o programa.
3 - Se não tiver extensão ou a mesma é diferente:
Use Run. Caso dê erro, teste o Bload. Caso não funcione, tente o DOS. Se
aínda não funcionar, este programa não é executável.
Para carregar em DOS: Basta digitar o nome do programa, sem a extensão.
Dicas para o DOS 1:
Suponhamos que o comando mode 40 tenha sido executado:
A:>MODE 40
A:>
O último comando fica armazenado na memória.
Nesta nova linha de comando, há diversos "atalhos" para a digitação:
1- Seta para direita: copia um caracter da linha anterior para a nova linha.
Seta direita
A:>M
Seta direita
A:>MO
2- Select: Copia todos os caracteres até o caracter especificado.
3- Seta para baixo: Copia todos os caracteres da linha anterior para a linha em uso.
Seta baixo
A:>MODE 40
4- Delete: Apaga uma letra da linha anterior para a próxima linha.
Delete
Seta baixo (ou seta direita)
A:>ODE 40
5- CLS(shift+home): Salta os caracteres da linha anterior até o caracter especificado.
SHIFT+HOME
CARACTER(EX:"D")
Seta baixo (ou seta direita)
A:>DE 40
6- ESC: Anula qualquer alteração no último comando.
7- Seta esquerda ou BS: Apaga ultimo caracter digitado.
Seta baixo
Seta esquerda
A:>MODE 4
8- INSERT: Insere caracteres na palavra.
Seta direita
Seta direita
INS
L
O
I
Seta baixo
A:>MOLOIDE 40
9- HOME: Nova linha.
Processos durante a execução de um comando:
1- CTRL+N: Cancela o acesso de dados à impressora.
2- CTRL+C: Aborta o comando corrente.
3- CTRL+H: Remove o último caracter do comando (BS).
4- CTRL+J: Salta uma linha.
5- CTRL+P: Imprime dados do video na impressora.
6- CTRL+S: Pausa (usado no DIR, TYPE, etc).
Lendo setores do disco em BASIC:
É possível em basic fazermos uma leitura de setor: Ele carrega seu conteúdo e
joga na memória, usando o comando:
10 PRINT DSKI$(num drive,num setor), onde num drive = 0.
O endereço em que o setor foi carregado está nos endereços &HF351 e &HF352.
Resumindo: nestes dois endereços fixos, está contido o endereço em que o setor
foi carregado.
Após o comando PRINT DSKI$, devemos verificar estes 2 endereços em hexadecimal:
20 ? hex$(peek(&HF351))
30 ? hex$(peek(&HF352))
Suponha a resposta 96 para a linha 20 e EB para a linha 30.
A junção de endereços é feita ao contrário: O segundo lido é o primeiro no
conjunto. O certo é EB96, ou seja, (&HF352)(&HF351).
Concluimos que o conteúdo do setor está a partir do endereço &HEB96, com 512
bytes de comprimento.
Programa exemplo de como ver o conteúdo de um disco, no setor 0:
10 PRINT DSKI$(0,0)
20 AD$=hex$(peek(&HF352))+hex$(peek(&HF351))
30 AD=VAL("&H"+AD$)
40 FOR F=AD TO AD+511
50 PRINT HEX$(F);"-";HEX$(PEEK(F));"-";CHR$(PEEK(F))
60 NEXT F
Também é possível modificarmos um byte deste setor, com os comandos:
POKE &H(endereço),dado.
Salve o setor com:
DSKO (numdrive,numsetor).
Atenção: Não faça acesso ao disco antes de gravar o setor, pois a área
de memória do setor será apagada.
Emuladores para MSX:
Caso você não tenha mais o MSX, existem emuladores de MSX que rodam em PC.
Estes simulam um MSX no PC!!!!
Vá para a funet.
Eu recomendo o FMSX-DOS e o Ru-MSX. Para rodar estes, você vai precisar das
ROMs de MSX 1, 2, 2+ e Turbo-r, que estão no mesmo diretório.
Usando o Turbo Pascal:
Se você já enjoou do basic ou quer programar numa linguagem que compile para
a linguagem de máquina (funcionar com .COM), use o Turbo Pascal da Borland.
O Pascal também está disponível na funet: ../programming/pascal.
Para programar:
1- Se você tiver um MSX 2 ou o cartão de 80 colunas, mude para 80 colunas no DOS,
antes de carregar o programa. Em seguida, carregue-o (a:/>Turbo).
2- Ao entrar, tecle E para carregar um programa já pronto ou para criar um novo.
3- Coloque o nome s/extensão do arquivo e entre.
4- Deverá aparecer uma tela para você começar a programar.
5- Diferentemente do Basic, no Pascal (também no C) precisamos declarar os tipos
de variáveis que vamos usar.
var a : integer; { inteiro }
b : real; { real }
c : string[10]; { palavra e a quantidade de letras }
d : char; { caracter (um só) }
e : boolean; { falso ou verdadeiro }
obs: note que ao final de cada comando, vem o ponto e vírgula, que significa fim
de comando. A chave {} serve para inserirmos comentários no programa.
6- Novos comandos:
BASIC - PASCAL
------------------------------
print"texto" - write('Texto');
writeln('Texto'); { escreve e vai para próxima linha }
input a - readln(a);
cls - clrscr;
a=1 - a:=1;
for x=1 to 5 - for x:=1 to 5 do
7- Os programas tem inicio e fim:
begin { inicio }
writeln('MSX');
end. { fim }
obs: não é necessário por a mensagem e as chaves no programa.
8- Rodando o programa:
Para rodarmos o programas, primeiro temos que sair da edição.
Tecle: Control+K, depois D. Quando sair, tecle R (run).
Caso queira salva-lo em disco, tecle C (Compilação).
Entrando no menu de compilação, escolha a opção que contenha .COM.
Saia(quit).
Você estará novamente no menu principal.
Caso queira salvar o texto do programa, salve com S.
Obs: Diferente do BASIC, a parte executável tem que ser gravada separadamente
da listagem do programa.
9- Vamos fazer um programa para escrever os números de 1 a 10:
var f : integer;
begin
clrscr;
for f:=1 to 10 do writeln(f);
end.
10- Vamos fazer um programa para escrever os números de 1 a 10 e seu dobro:
var f : integer;
begin
clrscr;
for f:=1 to 10 do
begin { quando houver mais de uma linha de comando do for,
devemos delimitar o inicio e fim do FOR }
writeln(f);
writeln(f*2);
end; { End com ponto e vírgula indica fim de uma operação }
end.
11- Agora recebemos um dado e calculamos a metade:
Com inteiros:
-------------
var dado : integer;
begin
clrscr;
write('Entre com um numero: ');
readln(dado);
dado:=dado div 2; { divisão inteira }
writeln('A sua metade é: ', dado);
end.
Com reais:
----------
var dado:=real;
begin
clrscr;
write('Entre com um numero: ');
readln(dado);
dado:=dado/2;
writeln('A sua metade é: ', dado:2:5);
{ depois do dado, com dois pontos vem:
numero de casas antes da vírgula e depois
da virgula }
end.
12- Falso ou verdadeiro:
var b : boolean
a : integer;
begin
a:=0; { a igual a zero }
b:=false; { b é falso }
repeat { repita ... até }
if b:=false then
begin
a:=a+1;
b:=true;
end { end sem nada indica que if continua }
else b:=false; { fim if }
until a:=10; { Repita ... até que a seja igual a 10 }
end.
13- Maiores detalhes, consulte o livro: Turbo Pascal - Guia do Usuário -
de Steve Wood - Editora McGRaw Hill.
/MARMSX/HELP