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