segunda-feira, maio 15, 2023

MSX Programas: Revista CPU 03

Neste número: Comando Play, PPI Software, Funções do BASIC, Programando a Impressora, Técnicas de Overlay, PPI Hardware, Interrupções no Basic, MSX-Write, Tratamento de Erros, Graphic Master - Análise, Função do 1º Grau, Life, Cartas, Comandos do , MSX-DOS, Nemesis, The Castle, Dicas: Zanac II, Back to the Future, The Last Mission, Star Force, Choro Q.

Comando Play

Artigo Original: Editora Aleph, Revisão: Wilson Pilon

Função

O comando PLAY do MSX permite tocar sequências de notas ou acordes musicais compostos de uma, duas ou três notas simultâneas, com andamento, duração, timbre ou volume programáveis.

Sintaxe

A sintaxe do comando PLAY é

PLAY A$, B$, C$

onde A$, B$ e C$ são variáveis 'strings' (alfanuméricas) que contém uma sequência de caracteres correspondentes aos sub-comandos especificados adiante. A$ é executada no primeiro canal de voz, B$ no segundo e C$ no terceiro.

A sequência de sub-comandos pode ser definida logo após o comando PLAY, sendo digitada entre aspas, ou pode ser atribuída a uma variável string num trecho anterior do programa BASIC.

Exemplos

10 PLAY "CDEFGAB"

10 A$ = "CDEFGAB" : PLAY A$

A variável string que determina a sequência de sub-comandos a serem executados pelo PLAY pode ser obtida pela 'concatenação' de strings menores.

Devemos ter sempre o cuidado de transformar variáveis numéricas em variáveis alfanuméricas usando a função STR$.

Digamos, por exemplo, que se queira executar a seguinte sequência de sub-comandos:

PLAY "T150V12AB"

onde os números 150 e 12 são obtidos de variáveis numéricas definidas em outros pontos do programa. Neste caso, montaremos a variável string correspondente, conforme indica o exemplo a seguir.

Exemplo

10 X = 150
20 Y = 20
30 A$ = "T" + STR$(X) + "V" + STR$(Y) + "AB"
40 PLAY A$

Uma outra maneira de se montar a string de sub-comandos, a partir de variáveis anteriormente definidas no programa é a de se inserir estas variáveis com delimitadores especiais.

Quando a variável é alfanumérica, ela deve ser precedida por um 'X' e seguida por ';'. Quando é numérica deve ser precedida por um '=' e seguida por ';'.

No exemplo anterior, podemos montar a string como segue:

Exemplo

10 A = 150
20 B = 12
30 CZ$ = "AB"
40 PLAY "T=A;V=B;XC$;"

Os Sub-Comandos do Play

Em todos os sub-comandos, que veremos a seguir, podem ser utilizadas, indiferentemente, letras maiúsculas e minúsculas.

A-G

As letras de A à G determinam a nota a ser usada conforme as cifras da notação anglo-saxônica. Colocando um sinal # ou + logo após a letra, a altura será elevada em meio tom (sustenido). Colocando um sinal - (menos) sua altura abaixará meio tom (bemol).

Ox

Este sub-comando especifica a oitava em que se situam as notas a serem executadas. O valor de X pode estar entre 1 e 8.

Ao ser ligado o micro, o valor inicial que ele assume ('default') é de 4:

O programa da listagem 1 executa a escala musical de DÓ a SI desde a oitava 1 (mais grave) até a 8 (mais aguda).

Lx

Este sub-comando determina a duração de uma nota a ser tocada. O valor de x pode estar entre 1 (duração mais longa) e 64 (mais curta).

A correspondência entre os valores de Lx e as figuras musicais é dada na figura a seguir:

A nota de maior duração é a semibreve (L1). Os valores de x indicam o denominador da fração de semibreve que a nota dura. Por exemplo: a smínima tem duração de L4. Isto significa que sua duração é de 1/4 da semibreve.

A duração da nota pode, também, ser especificada após a cifra. Por exemplo: L8A equivale a A8. Se não houver especificação de duração após a cifra, vale a especificação no último L.

Os valores de x não precisam ser, obrigatoriamente, potências inteiras de 2 (1, 2, 4, 8, ...).

Isto permite, por exemplo, especificar a duração de 'tercninas'.

Imagine o compasso:

Como o caompasso é 3/4, nele cabem 3 semínimas (3 notas de duração L4). Como o segundo tempo têm 3 notas, cada uma deverá durar 1/3 de 1/4, ou seja, 1/2. Sua duração portanto, será L 12. O compasso acima será executado por uma das seguintes expressões:

PLAY "o4g4a12g12f12b4"

ou

PLAY "o4l12g4agfb4"

ou

PLAY "o4l4ga12g12f12b"

Colocando um ponto (.), após a especificação da duração, esta passa a valer 1 + 1/2 vezes a duração anterior. Cada ponto adicional equivale a um acréscimo da metade do ponto anterior.

Exemplos

A1. : duração de 1 + 1/2 = 3/2 de A1

A1.. : duração de 1 + 1/2 + 1/4 = 7/4 de A1

Ao ligarmos o computador o valor inicial é de L4.

Tx

Este sub-comando especifíca o andamento da música (adagio, allegro, presto, etc..) correspondente à marcação de um 'metrônomo interno' do MSX. O valor de x pode variar de 32 (lento) a 255 (rapidíssimo).

Ao ligarmos o computador o valor inicial é T120, que corresponde a 120 semínimas por minuto.

Rx

Especifica a duração das pausas (silêncios). O valor de x, como no sub-comando Lx, especifica a duração da pausa, indo de 1 a 64, conforme correspondência a seguir:

Podem ser usados valores inteiros que não precisam ser, necessariamente, potências inteiras de 2 (1, 2, 4, 8, 16, ...).

Se nada for especificado após R, o MSX assume o valor R4.

Vx

Determina o volume (intensidade) de cada canal de som do MSX. O valor de x varia de 0 (silêncio) a 15 (volume máximo). Quando usamos esse sub-comando num dos 3 canais, o MSX passa a emitir, neste canal, som de órgão, com maior ou menor intensidade, conforme o valor de Vx utilizado.

Nx

Este sub-comando representa uma alternativa à notaçõa de cifras para especificar uma determinada nota. O valor de x pode variar de 0 a 96. Quando x=0 o sub-comando N0 corresponde a uma pausa.

De N1 a N96 temos todos os tons possíveis de serem obtidos pelo comando PLAY.

Um acréscimo de uma unidade ao x implica na subida de um semi-tom na altura da nota. Como existem 12 semi-tons numa oitava, somando-se ou subtraindo-se 12 ao x de Nx, obter-se-á a mesma nota uma oitava acima ou uma oitava abaixo. Na oitava 4 (valor default do MSX) a correspondência entre os valores de x no Nx e as notas musicais é dada na figura abaixo:

Para saber a que oitava pertence a nota Nx, basta fazer a seguinte operação:

OITAVA = INT(x/12)+1

Sx e My

O sub-comando Sx permite determinar a forma do 'envelope' do tom emitido, ou seja, como o volume varia com o tempo durante a emissão da nota. Quando esse sub-comando é usado num canal, desativa-se o efeito do Vx, e vice-versa.

O sub-comando My, que sempre está associado ao Sx, determina o período de ação do envelope.

Exemplificando:

O sub-comando S13 faz com que o volume do canal, em função do tempo, varie conforme o diagrama a seguir:

Aumentando o valor de y no sub-comando My, esta variação ocorre ao longo de um período maior:

Note, que neste exemplo, apesar do volume final do envelope ser V15, nem sempre a nota emitida atinge esta intensidade final pois sua duração pode não alcançar o final do envelope:

Por isso, a escolha de Sx e My deve ser extremamente criteriosa, caso contrário algumas notas praticamente 'desaparecem' durante a execução.

O valor de y no My (período do envelope) pode variar de 0 a 65535 enquanto o x de Sx (forma do envelope) pode variar de 0 a 15.

As formas dos envelopes que podem ser obtidas com o sub-comando Sx são dadas na figura a seguir:

A Função Play

Quando uma sequência de sub-comandos é utilizada pelo comando PLAY, o MSX não a envia diretamente ao PSG (gerador programável de sons) mas sim a uma região de memória denominada BUFFER do PSG. Feito isso, o micro-processador se considera liberado e passa a executar o resto do programa BASIC. Portanto, o PSG vai lendo e esvaziando o BUFFER, tocando a música enquanto o micro já está realizando outra tarefa. Isso pode causar efeitos indesejáveis de falta de sincronização. Para eviar isso, podemos utilizar a função

PLAY (C)

Onde C é o número do canal que queremos testar. Se o canal estiver ativo, a função assume o valor -1, se, estiver mudo (BUFFER vazio), o valor da função será 0.

Se quisermos 'congelar' o programa até que, por exemplo, o canal 2 tenha terminado sua execução, devemos usar uma linha de BASIC do tipo:

575 IF PLAY(2)=-1 THEN GOTO 575

Neste caso, a execução do programa, em BASIC, ficará parada na linha 575, enquanto o BUFFER do canal 2 contenha códigos a serem enviados para o PSG.

Uma vez terminada a execução da música no canal 2, o valor de PLAY(2) passa a ser 0 e o MSX passa à linha seguinte do programa.

Se o valor de C for 0, o MSX testará a execução em todos os três canais.

10 A$ = "C D E F G A B"
20 FOR I = 1 TO 8
30 B$ = "O" + STR$(I)
40 PLAY B$ + A$
50 NEXT I

PPI Software

Artigo Original: André L.F.de Freitas, Revisão: Wilson Pilon

Procurando seguir a linha de raciocínio nos números anteriores de CPU, onde procuro passar o máximo de informações possível a respeito do sistema MSX, continuo neste número a descrição das rotinas principais de controle do hardware MSX. Também devo este artigo à colaboração de outro autor que, em conjunto, desenvolveu um artigo sobre o próprio hardware associado ao circuito de seleção de SLOTs e páginas de memória, com a intenção de não deixar os usuários leitores de nossa revista sequer uma pequena dúvida sobre todo este sistema de gerenciamento de memória.

Nossos artigos, estes e os que virão futuramente, vão desvendar aos leitores todos os mistérios da poderosa máquina MSX.

A descrição PPI (Programmable Peripherical Interface), circuito integrado de código 8255, será feita por um outro artigo presente neste número de CPU.

No BIOS (Basic Input/Output System) do MSX, localizado na página zero da memória do MSX, portanto contido em ROM, existem algumas rotinas utilizadas pelo próprio micro e, portanto, de simples compreensão e uso, que trabalham com todo os sistemas de paginação de memória.

Estar rotinas trabalham de modo a alterar a configuração de SLOTs e páginas no MSX, chamar à execução rotinas que estejam em páginas não ativas no momento, escrever ou ler bytes em lugares não acessíveis diretamente na memória.

O próprio sistema operacional do MSX procura, durante a função de BOOT, páginas em SLOTs existentes por toda a memória, expandidos ou não.

Vamos começar a descrição destas rotinas do BIOS MSX. A descrição que se segue contém o endereço na ROM onde está localizada a rotina, sua função no sistema e respectivos parâmetros na entrada e saída destas rotinas, como valor em registradores, etc. Os endereços são fornecidos em hexadecimal.

Todas as rotinas abaixo devem ser usadas com cuidado, pois valores não coerentes, como SLOTs do micro não existentes, ou endereços que não contenham rotinas, no caso de execução, podem ocasionar perda total de controle no MSX, restando ao usuário a única opção o RESET ou mesmo desligar e ligar novamente o micro, perdendo todo o trabalho.

As rotinas são utilizadas pelo próprio sistema MSX para tarefas como leitura de um cartucho de software, ou mesmo o acesso a interface como Disk Drive, cartão de 80 colunas, etc..

Espero satisfazer a todos aqueles que tenham curiosidade em saber onde se encontram estas rotinas e propiciar aos nossos leitores a economia de tempo tentando procurar pela memória estas rotinas, que muitas vezes é feita em desespero.

Voltaremos, em breve, com novos artigos desvendando o Hardware e Software associado a linha MSX. Até Breve.

000C - rotina RDSLT

Lê um byte da memória em SLOT e endereço passados por registradores.

  • Entrada
    • Reg.A - contém o SLOT ao qual será feita a leitura cusos bits tem a forma:
    • X000SSPP, onde os bits PP identificam o SLOT primário (0-3), os bits SS identificam o SLOT secundário (0-3) o bit de controle X quando possui valor 1, identifica que há SLOT secundário a acessar. Os demias bits representados por 000, podem ocntem qualquer valor.
    • Ex: A = 10001101 (binário), significa slot primário 1 (01), secundário existe e tem valor 3 (11).
    • Reg.HL - contém o endereço a ser feita a leitura (2 bytes).
    • Ex: HL = 0100, leitura na página zero (endereços 0000-3FFF).
  • Saída
    • Reg.A - contém o valor que se encontrava no endereço e SLOT especificados na entrada.
  • Obs: Esta rotina altera o conteúdo dos registradores AF, BC e DE.

0014 - rotina WRSLT

Escreve um byte na memória, em SLOT e endereço passados por registradores.

  • Entrada
    • Reg.A - contém o SLOT ao qual será escrito o byte, cujos bits tem a forma:
    • X000SSPP, onde os bits PP identificam o SLOT primário (0-3), os bits SS identificam o SLOT secundário (0-3) o vit de controle X quando possui valor 1, identifica que há SLOT secundário a acessar. Os demais bits representados por 000, podem conter qualquer valor.
    • Ex: A = 00000010 (binário) sgnifica slot primário 2 (10) sem SLOT secundário a ativar.
    • Reg.HL - contém o endereço a ser feita a leitura (2 bytes).
    • Ex: HL = 82A0 escrita na página dois (endereços 8000-BFFF).
    • Reg.E - contém o valor que se deseja escrever no endereço e SLOT especificados acima.
  • Saída
    • Nenhuma
  • Obs: Esta rotina altera o conteúdo dos registradores AF, BC e D.

0024 - rotina ENASLT

Habilita e mantém um SLOT da memória habilitado, de acordo com valores passados por registradores.

  • Entrada
    • Reg.A - contém o SLOT o qual será habilitado, cujos bits tem a forma X000SSPP, de maneira semelhante às rotinas anteriores.
    • Reg.HL - contém o endereço que identifica a página a ser habilitada.
  • Saída
    • Nenhuma
  • Obs: Esta rotina altera o conteúdo de todos os registradores.

001C - rotina CALSLT

Executa uma rotina existente na memória, em SLOT e endereço passados por registradores.

  • Entrada
    • Reg.IY - o byte mais significativo do registrador IY conté, o SLOT ao qual será escrito o byte, cujos bits tem a forma: X000SSPP, onde os bits PP identificam o SLOT primário (0-3), os bits SS identificam o SLOT secundário (0-3) o vit de controle X quando possui valor 1, identifica que há SLOT secundário a acessar. Os demais bits representados por 000, podem conter qualquer valor.
    • Ex: IYH (IYH significa parte alta do reg.) = 00000000 (binário) significa slot primário 0 (00) sem SLOT secundárioa a ativar.
    • Reg.IX - contém o endereço da rotina a ser executada.
    • Ex: IX = C100 rotina na página três (endereços C000-FFFF).
  • Saída
    • Dependente da rotina executada.
  • Obs: Os valores no sregistradores podem ser alterados de acordo com a rotina que for executada.

0030 - rotina CALLF

Executa rotinas contidas em outros SLOTs.

Modo de acesso

  • RST 30H
  • DB Identificação do SLOT.
  • DW Endereço da rotina a executar.

Obs: O byte identificador de SLOT tem a forma X000SSPP, como já descrito anteriormente. Os dois bytes de endereço identificam a localização na memória da rotina executada.

O retorno desta chamada e registradores modificados dependem da rotina executada.

Funções do BASIC

Artigo Original: Antônio F.S.Shalders, Revisão: Wilson Pilon

O objetivo desta coluna é de apresentar, todos os meses, uma série de comandos e/ou instruções do MSX-BASIC.

Obs: Artigo publicado com muitos erros!

Como esta coluna é voltada para o iniciante, todo o possível será feito no sentido de ensinar ao mesmo como utilizar corretamente o MSX-BASIC. Quando necessário, as explicações serão acompanhadas de um programa exemplo com o fim de esclarecer alguma eventual dúvida.

A Função ABS

Sintaxe: ABS(Expressão)

Fornece o valor absoluto do argumento, que pode tanto ser uma expressão matemática como um símbolo de valor numérico. Exemplo:

ABS(10) = 10

ABS(-15) = 15

A listagem 1 (a listagem nao existe na revista) contém um programa que demonstrará o traçado das funções seno e módulo do seno, de zero a PI, sendo que o valor de PI é obtido a partir da função ATN, que será comentada no decorrer do artigo.

A Função ASC

Sintaxe: ASC(STRING)

A função ASC fornece o código ASCII do caractere em questão. No caso do argumento ser uma cadeia de caracteres, somente o primeiro caractere será considerado. Exemplo:

ASC("A") = 65

Se A$="CPU", ASC(A$)=67, pois 67 é o código do caractere 'C'.

Função ATN

Sintaxe: ATN(Expressão)

Fornece o arco-tangente da expressão ou ângulo em questão. O argumento deverá estar, obrigatoriamente, em radianos. Exemplo:

T = TAN(PI/4)

T = TAN(.7853981634)

T = 1

ATN(T) = .7853981634

Uma forma bastante prática de obtermos o valor de PI é usando a função ATN como mostrado abaixo:

PI = 4*ATN(1)

Outros múltiplos de PI podem ser achados da mesma forma. Convém lembrar que PI em radianos equivalem a 180 graus.

A Instrução SCREEN

Ao contrário da mencionada acima, a instrução SCREEN é uma das mais poderosas do micro.

Esta instrução controla o modo de operação do vídeo, as dimensões dos sprites, o estalido das teclas, a velocidade de gravação em fita, e, finalmente, o tipo de impressora acoplado ao seu micro.

Sintaxe: SCREEN A, B, C, D, E

  • A - Modo de operação do vídeo (0, 1, 2 ou 3)
  • B - Dimensão dos sprites (0-sprites 8x8, 1-sprites 16x16, 2-sprites 16x16, 3-sprites 32x32)
  • C - Estalido das teclas (0-desativado, 1-ativado)
  • D - Velocidade de gravação (0-1200 bps, 1-2400 bps)
  • E - Tipo de impressora (0-MSX, 1-ABICOMP)

O Comando Auto

Sintaxe: AUTO X,Y

Faz a numeração automática das linhas de programação. É o conteúdo default da tecla F2 do seu MSX.

Os parâmetros X e Y são opcionais e representam o número de linha inicial e o incremento, respectivamente. Exemplo:

  • AUTO - inicia a autonumeração na linha 10, com incremento de 10
  • AUTO 50 - inicia a autonumeração na linha 50, com incremento de 10.
  • AUTO ,1 - inicia a autonumeração na linha 10, com incremento de 1
  • AUTO 100,5 - inicia a autonumeração na linha 100, com incremento de 5

As funções SPACE$(X) e SPC(X)

As duas funções não são iguais, como pode parecer à primeira vista, pois a SPC(X) é específica para uso na tela, enquanto que a SPACE$(X) é normalmente usada para atribuir à uma variável string uma cadeia de caracteres. Devem ser usadas sempre que possível, pois, além de tornarem o programa muito mais elegante, economizam muita memória. O argumento destas funções indica o número de espaços em branco desejados.

A Variável do Comando Base

É uma coisa não muito utilizada, quer por não ser conhecida, quer por sua pouca utilidade prática, pois esta variável fornece determinados valores, dependendo do argumento em questão, podendo ser substituída por uma tabela. Aliás essa tabela vem no próprio manual.

Esta variável está relacionada com o VDP (processador de vídeo) e sua utilização é simples

Sintaxe: BASE(X)

ParâmetroSignificado de X
ValorSignificado
0Base da tabela de nome SCREEN 0
1Sem significado
2Base da tabela de padrões da SCREEN 0
3Sem significado
4Sem significado
5Base da tabela de nomes da SCREEN 1
6Base da tabela de cores da SCREEN 1
7Base da tabela de padrões da SCREEN 1
8Base da tabela de atributos dos sprites da SCREEN 1
9Base da tabela de padrões de sprites da SCREEN 1
10Base da tabela de nomes da SCREEN 2
11Base da tabela de cores da SCREEN 2
12Base da tabela de padrões da SCREEN 2
13Base da tabela de atributos dos sprites da SCREEN 2
14Base da tabela de padrões de sprites da SCREEN 2
15Base da tabela de nomes da SCREEN 3
16Sem significado
17Base da tabela de padrões da SCREEN 3
18Base da tabela de atributos dos sprites, SCREEN 3
19Base da tabela de padrões dos sprites da SCREEN 3

Programando a Impressora

Artigo Original: Antônio F.S.Shalders, Revisão: Wilson Pilon

Note que é possível programar a impressora para imprimir caracteres combinados, como o tipo 'expandido-comprimido em índice', por exemplo. Basta pressionar a sequência correta de teclas.

O programa foi desenvolvido e testado num Hotbit e em uma impressora ELEBRA, EI-8011 Mônica de 80 colunas. Para adaptá-lo a outras impressoras, basta alterar as linhas que vão de 1110 a 1240 conforme a marca da impressora em questão.

O utilitário Types destina-se aos usuários de impressoras compatíveis com a EI-6011 (Mônica). Este utilitário, de construção simples e de fácil uso, tem como finalidade fazer, confortavelmente, a seleção dos tipos de caracteres da impressora e suas possíveis combinações.

O programa é apresentado na forma de menu e, para selecionar o tipo (ou combinação de tipos), basta pressionar a(s) tecla(s) em questão. Note que a numeração das teclas foi feita em hexa, pois o objetivo principal de CPU é explorar ao máximo todos os recursos do seu MSX. Foram usadas outras funções que não são corretamente exploradas pela grande maioria dos usuários da linha MSX: as instruções INPUT$ e OUT.

No caso deste programa, a instrução INPUT$ tem uma grande vantagem sobre a clássica INKEY$, pois não é necessário uma varredura constante do teclado.

Outra coisa interessante é a comparação lógica de strings, feita na linha 1080. É claro que seria mais simples verificarmos o valor ASCII da variável A$, porém, com o procedimento adotado, economizamos o usado de um ASC, o que é perfeitamente justificável.

O OUT 170,26 liga o LED indicador de maiúsculas e o OUT 170,90 o desliga. A trava de maiúsculas é obtida através do POKE &HFCAB,1 e é desativada com POKE &HFCAB,0.

1000 ' TYPES 1.00
1010 ' ANTONIO FERNANDO SHALDERS
1020 ' REVISTA CPU
1030 ' -------------------------
1040 '
1050 COLOR15,1:SCREEN 0:KEY OFF:WIDTH 40:POKE &HFCAB,1:OUT 170,26
1060 PRINT "TYPES  Ver 1.00    /    ELEBRA  EI 6011":PRINT:PRINT
1070 PRINT"[0] STANDARD",,"[1] COMPRIMIDO 1","[2] COMPRIMIDO 2","[3] QC",,"[4] EXPANDIDO",,"[5] INDICE",,"[6] EXPOENTE",,"[7] SUBLINHADO","[8] AJUSTE DE ENTRELINHA","[9] AJUSTE DE COLUNAS","[A] TESTE",,"[B] FIM",,,,">> OPCAO: ";
1080 A$=INPUT$(1):IF (A$<"0" OR A$>"9") AND (A$<"A" OR A$<"B") THEN 1080
1090 A=VAL("&h"+A$)+1
1100 ON A GOTO 1110,1120,1130,1140,1150,1160,1170,1180,1190,1220,1250,1260,1080
1110 LPRINT CHR$(26);"@":GOTO 1050
1120 PRINT"CP1 ";:LPRINT CHR$(15);:GOTO 1280
1130 PRINT"CP2 ";:LPRINT CHR$(30);:GOTO 1280
1140 PRINT"QC ";:LPRINT CHR$(27);"G";:GOTO 1280
1150 PRINT"EXPD ";:LPRINT CHR$(14);:GOTO 1280
1160 PRINT"IND ";:LPRINT CHR$(27);"S";CHR$(1);:GOTO 1280
1170 PRINT"EXPT ";:LPRINT CHR$(27);"S";CHR$(0);:GOTO 1280
1180 PRINT"SUB ";:LPRINT CHR$(27);"-";CHR$(1);:GOTO 1280
1190 PRINT:INPUT"ENTRELINHA:";E
1200 IF E<1 OR E>255 THEN E=13
1210 LPRINT CHR$(27);"A";CHR$(E);:PRINT"EL=";E;" ";:GOTO 1280
1220 PRINT:INPUT"COLUNAS:";C
1230 IF C<1 OR C>80 THEN C=80
1240 LPRINT CHR$(27);"Q";CHR$(C):PRINT"NC=";C;" ";:GOTO 1280
1250 PRINT"TESTE";:FOR X=32 TO 126:LPRINT CHR$(X);:NEXT:LPRINT:LPRINT:GOTO 1280
1260 PRINT:PRINT"TEM CERTEZA (S/N)":A$=INPUT$(1):IF A$<>"S" THEN 1050
1270 CLS:OUT 170,90:POKE&HFCAB,0:NEW
1280 A=13:GOTO 1100

Técnicas de Overlay

Artigo Original: Antônio F.S.Shalders, Revisão: Wilson Pilon

Overlay é o termo que significa que um programa deverá ser dividido em duas ou mais partes a fim de que este caiba na memória do micro. Cada uma dessas partes é utilizada apenas quando necessário, sendo armazenada normalmente em disco. Também podem ser feitos overlays utilizando os slots. A grande maioria dos jogos em linguagem de máquina usa este método, pois é comum vermos um programa principal dividido em 6 ou mais subprogramas de 16 Kbytes de extensão.

Esta técnica era de uso praticamente obrigatório até o final da década de 70, pois os computadores desta época não tinham tanta memória disponível.

Um caso típico de overlay para o MSX é no Turbo Pascal 3.0, da Borland. Neste pacote, há um pequeno arquivo chamado TURBO.OVR. A extensão para um programa overlay, é justamente .OVR. Outros casos são .XXX onde, XXX é o número do overlay. É comum vermos, por exemplo, TURBO.COM seguido de TURBO.OVR ou então TESTE.001, TESTE.002, e assim por diante.

Existem casos em que não podemos abrir mão desta técnica em BASIC, pois um programa em BASIC não pode ter mais do que aproximadamente 28 Kbytes de texto e dados. Se este limite tiver que ser ultrapassado, não há outra solução.

O Aztec C, que é um compilador C, utiliza esta técnica durante a compilação, a montagem do programa .ASM para a montagem do programa .COM.

Neste compilador, como os programas que executam essas tarefas não são exatamente pequenos e, em geral, os programas que estão sendo compilados também não, o jeito foi dividir o Aztec em três subprogramas: o compilador propriamente dito, o assemblador e o linker. Isto sem contar o editor de textos e o fato de que existem dois programas compiladores no mesmo pacote: um para 8080 e outro para Z-80.

Uma coisa interessante é que o MSX-BASIC tem uma instrução que pode fazer pequenos overlays sem que o programa principal seja destruído. Essa instrução é o MERGE (ou fusão de arquivos). O único cuidado a ser tomado é que os números das linhas do programa a ser fundido com o programa mestre devem ser diferentes das do programa principal. Não que isso seja obrigatório, mas pode poupar um bocado de dor de cabeça. No caso de MERGE ser utilizado para este fim, deve ser usado em conjunto com DELETE.

Um outro método é simplesmente desviar o programa principal para uma linha que tenha algo como um RUN 'PROG.OVR'. O programa é então substituído por outro e, para rerornar ao programa principal, algo semelhante deverá ser feito. Este método é usado somente quando os programas não podem ser partidos e são muito grandes. Um cuidado especial deverá ser tomado com as variáveis, pois um RUN as apaga. Caso existam, estas deverão ser salvas temporariamente em disco ou pokeadas na própria memória do micro em endereços convenientes.

Uma das aplicações mais clássicas de overlays está nos arquivos de auxílio de um determinado programa, os .HLP, por exemplo, usados no SUPERCALC e no SCED. Para quem não sabe, o SUPERCALC é uma planilha eletrônica e o SCED é um poderoso editor de textos. Quando um help é solicitado, o programa se desvia para o overlay relativo ao programa help.

Todos os casos de overlays são muito específicos, de modo que a elaboração de programas exemplo para todos os casos é tarefa quase impossível. Os programas que acompanham este artigo mostram como fazer o overlay por eliminação e são bastante primitivos. O overlay por substituição de blocos do programa principal (usando MERGE) já é um pouco mais complexo, mas não é difícil, sendo apenas particular à cada programa.

O programa da Listagem 1 deverá chamar-se OVERLAY.BAS e o da listagem 2, PROG.OVR.


overlay.bas

100 '**********************************
110 '*                                *
120 '*  TECNICAS DE OVERLAY EM BASIC  *
130 '*                                *
140 '*    Antonio Fernando Shalders   *
150 '*                                *
160 '*        Revista CPU - 1988      *
170 '*                                *
180 '**********************************
190 '
200 ' PROGRAMA BASE
210 '
220 CLS:KEY OFF
230 PRINT"PROGRAMA BASE"
240 LOCATE 0,5:PRINT"PRESSIONE UMA TECLA PARA O OVERLAY"
250 A$=INPUT$(1)
260 RUN "PROG.OVR"

prog.ovr


100 '**********************************
110 '*                                *
120 '*  TECNICAS DE OVERLAY EM BASIC  *
130 '*                                *
140 '*    Antonio Fernando Shalders   *
150 '*                                *
160 '*        Revista CPU - 1988      *
170 '*                                *
180 '**********************************
190 '
200 ' PROGRAMA OVERLAY
210 '
220 CLS
230 PRINT"ESTE E O PROGRAMA OVERLAY"
240 PRINT:FOR X=32 TO 255:PRINT CHR$(X);:NEXT
250 PRINT:PRINT:PRINT"ESTE PROGRAMA ESTA NO LUGAR DO PROGRAMA BASE ORIGINAL."
260 PRINT:PRINT"PRESSIONE QUALQUER TECLA PARA CARREGAR NOVAMENTE O PROGRAMA BASE"
270 A$=INPUT$(1)
280 RUN"OVERLAY.BAS"

Interrupções no Basic

Artigo Original: Antônio F.S.Shalders, Revisão: Wilson Pilon

Um dos pontos mais fortes do MSX BASIC é que este é capaz de manipular interrupções com um nível de interação com o programa que é literalmente impossível de ser conseguido em outros BASICs. Até antes do surgimento do MSX, isso era parte do domínio da linguagem de máquina.

O nosso MSX possui diversos tipos de interrupções, cada uma com uma utilização específica. São elas: interrupção por teclas, por tempo e por colisão de sprites. Os casos mais complexos são a por tempo e de colisão.

As Interrupções por Teclas

São as mais fáceis de serem usadas. Basta habilitarmos a tecla em questão que pode ser [SPACE] (ou o disparador do joystick), as teclas de funções ou quando as teclas [CONTROL]+[STOP] forem pressionadas simultaneamente. Feito isso, basta especificarmos para que linha será o desvio. Completando o ciclo, basta desabilitarmos a tecla em questão.

Teclas de Função

Habilitação: KEY(n) ON

Desvio: ON KEY GOSUB L1, L2, L3, ..., L10

Desabilitação: KEY(n) OFF

Barra de Espaço

Habilitação: STRIG(0) ON

Desvio: ON STRIG GOSUB L

Desabilitação: STRIG(0) OFF

STRIG(1) e STRIG(3): Disparadores do Joystick 1, STRIG(2) e STRIG(4): Disparadores do Joystick 2.

Teclas [CONTROL]+[STOP]

Habilitação: STOP ON

Desvio: ON STOP GOSUB L

Desabilitação: STOP OFF

As Interrupções por Tempo

São de grande utilidade quando se trata de programas de banco de dados ou processadores de texto.

Normalmente são usadas para previnir uma eventual falta de energia elétrica durante a execução do programa, salvando automaticamente os arquivos de tempos em tempo.

Uma outra aplicação é a de abortar o programa no caso de uma senha não ser digitada em um dado intervalo de tempo.

Desvio: ON INTERVAL=X GOSUB L

Habilitação: INTEVAL ON

Desabilitação: INTERVAL OFF

Obs: Neste caso a habilitação vem sem segundo lugar.

O intervalo de tempo desejado pode ser calculado através da formula T*60, onde T é o tempo em segundos.

As Interrupções por Colisão de Sprites

São de grande utilidade para quem se dedica à criação de pequenos jogos em BASIC. Com este tipo de interrupção, as colisões são facilmente detectáveis.

Desvio: ON SPRITE GOSUB L

Habilitação: SPRITE ON

Desabilitação: SPRITE OFF

Em todos os exemplos dados, o L indica o número da linha para a qual o programa será desviado.

Uma boa maneira de se entender o funcionamento das interrupções é na prática. Para isso, recomendo a digitação e análise de funcionamento dos programas que acompanham o artigo.

No caso do que demonstra a colisão de sprites, um BEEP será emitido quando esta ocorrer.


Teclas de Função

100 '*********************************
110 '*                               *
120 '*     INTERRUPCOES NO BASIC     *
130 '*                               *
140 '*   Antonio Fernando Shalders   *
150 '*                               *
160 '*          Revista CPU          *
170 '*                               *
180 '*********************************
190 '
200 CLS:KEYOFF
210 '
220 'UTILIZACAO DAS TECLAS DE FUNCAO
230 '
240 KEY(3) ON
250 PRINT"PARA CONTINUAR, PRESSIONE (F3)"
260 ON KEY GOSUB ,,280
270 GOTO 260
280 KEY(3) OFF:RETURN 320
290 '
300 'UTILIZACAO DE STRIG(0) (ESPACO)
310 '
320 STRIG(0) ON
330 CLS:PRINT"PARA CONTINUAR,PRESSIONE(ESPACO)"
340 ON STRIG GOSUB 360
350 GOTO 340
360 STRIG(0) OFF:RETURN 400
370 '
380 'UTILIZACAO DE (CTRL)/(STOP)
390 '
400 STOP ON
410 CLS:PRINT"PARA CONTINUAR,PRESSIONE(CTRL)/(STOP)"
420 ON STOP GOSUB 440
430 GOTO 420
440 STOP OFF:RETURN 480
450 *'
460 'INTERRUPCAO POR TEMPO
470 ;
480 CLS:PRINT"QUALQUER TECLA PRESSIONADA DEPOIS DE  10SEGUNDOS NAO SERA ACEITA."
490 ON INTERVAL=600 GOSUB 540
500 INTERVAL ON
510 A$=INPUT$(1)
520 CLS:PRINT"UMA TECLA FOI PRESSIONADA"
530 INTERVAL OFF:PRINT:PRINT:END
540 PRINT"PASSARAM-SE MAIS DE 10 SEGUNDOS"
550 RETURN 530

Colisão

100 '*********************************
110 '*                               *
120 '*     INTERRUPCOES NO BASIC     *
130 '*                               *
140 '*   Antonio Fernando Shalders   *
150 '*                               *
160 '*          Revista CPU          *
170 '*                               *
180 '*********************************
190 '
200 ' INTERRUPCAO POR COLISAO DE SPRITES
210 SCREEN 2,0
220 SPRITE$(1)=CHR$(0)+CHR$(255)+CHR$(0)+CHR$(255)+CHR$(0)+CHR$(255)+CHR$(0)+CHR$(255)
230 SPRITE$(2)=CHR$(255)+CHR$(129)+CHR$(129)+CHR$(129)+CHR$(129)+CHR$(129)+CHR$(129)+CHR$(255)
240 ON SPRITE GOSUB 300
250 FOR X=0 TO 245
260 SPRITE ON
270 PUTSPRITE 0,(X,96),,1
280 PUTSPRITE 1,(245-X,96),,2
290 NEXT X:GOTO 250
300 BEEP:SPRITE OFF:X=X+12:RETURN 290

MSX-Write

Artigo Original: CPU, Revisão: Wilson Pilon

Quem uma vez já utilizou um processador de textos, certamente ficou achando a máquina de escrever uma coisa do passado, ultrapassada. Os processadores de textos oferecem recursos, principalmente de edição, que tornam a tarefa de datilografar um texto bem mais fácil, possibilitando, ainda, um trabalho sempre bem apresentado, pois pode-se mandar imprimir quantas vezes for necessário.

Para a linha IBM-PC podemos contar com inúmeros processadores e até sistemas que só trabalham em 'winchester', ocupando um espaço de aproximadamente 4 MB (11 discos de face dupla) e que até permitem a alteração da disposição das teclas do teclado.

Tanto para a linha IBM-PC quanto para a linha MSX, existem, também, os Desktop Publishing, que reúnem as facilidades dos processadores de textos e dos editores gráficos, permitindo a utilização simultênea de texto e gráficos ou fotografias e que serão analisados em outros artigos.

Podemos dizer que para a linha MSX existem três bons editores de texto, que são: WordStar, MSX Word e MSX Write.

O WordStar trabalha em CP/M e necessita de 80 colunas, apesar de existir uma versão para 40 colunas mas que não funciona a contento. Sobre este editor existem inúmeros livros que poderão auxiliá-lo.

O MSX Write e o MSX Word são os mais utilizados pelos usuários do MSX, sendo que cada um possui características próprias.

Neste número da revista CPU aproveitamos para falar sobre o MSX Write, fornecendo-lhe algumas dicas sobre o seu funcionamento.

Após o carregamento do programa, aguarde o reset e chame o programa com CALL WRITE, pois este é um programa residente. Após ter chamado o programa, surgirá no vídeo o menu principal e você poderá começar a explorar todos os seus potenciais, lendo as instruções do artigo.

Tela Inicial do MSX Write

Opção E

Nesta opção, você entra no modo de edição. Na parte superior da tela aparece a opção que se está utilizando (EDIT), a memória livre, a indicação de WARP (justificado) e INSERT ligado.

Insert

A indicação INSERT mostra que a tecla [INS] está na posição de inserção, permitindo ao usuário inserir um caractere, deslocando os demais, se houverem, para a direita. Caso a indicação seja O'TYPE, não haverá deslocamento dos caracteres para a direita, ou seja, o caractere sobre o qual se encontra o cursor será substituído pelo digitado.

Tabulação

A linha de tabulação permite ao usuário uma visão da posição do cursor.

As colunas com quadrado cheio (veja imagem anterior) marcam as tabulações, que podem ser modificadas pressionando-se a tecla [CLS/HOME] (c - retira tabulação/s - determina os pontos de tabulação).

Teclas de Função

[F1] - Scroll

Pressionando-se [F1], a parte superior da tela se modificará. As setas são usadas para rolar o texto, teclando [B] vai para o início do texto e [E] para o fim.

[F2] - Line

Nesta opção, pressionando-se [BS] (Back Space), você apaga o texto da posição do cursro até o inicio da linha e com [DEL] todo o texto do cursor até o final da linha. As setas permitem ir para o começo e o final da linha.


[F3] - Word

Nesta opção, pressionando-se [BS] (Back Space), você apaga a palavra anterior ao cursor, e pressionando [DEL] apata a próxima palavra relativa ao cursor.

[F4] / [F5] - Mark/b e Mark/e

Com Mark/b você marca o início de um bloco de texto e com Mark/e o seu final.

Este bloco, parágrafo ou frase, pode ser copiado, mudado de posição, deletado, memorizado, retirado da memória e inserido no texto. Depois de delimitado, deve-se pressionar [SELECT] e [F1] (BLOCK). Se a escolha for copiar ou mover, o cursor deverá estar na posição desejada para a colocação do bloco.


[SELECT]

A tecla [SELECT] altera as telcas de função para Block, Find, Format e Ruler, como pode ser visto na imagem acima.

[SELECT]+[F2] - Find

A opção Find serve para procurar por uma palavra inserida no texto. O programa irá perguntar pela palavra a ser procurada e depois pedirá uma opção, tecla [C] Confirma, [B] busca no sentido contrário do texto, [A] busca todas as palavras, [N] cancela a opção. Observe que a busca diferencia maiúsculas de minúsculas.

[SELECT]+[F3] - Change

Na opção CHANGE o procedimento será similar ao do FIND, com a diferença de que a palavra será trocada por uma outra que o usuário tiver definido, as mesmas opções de confirmação são válidas aqui.

[SELECT]+[F4] - Format

A opção FORMAT modificará novamente as teclas de função para PAGE, CENTER, LEFT e RIGHT.

  • Center - Centraliza a linha na qual se encontra o cursor
  • Left - Arruma o parágrafo ou frase, tantas colunas à esquerda quantas forem determinadas, inserindo, para isso, quantos espaços forem necessários
  • Right - O mesmo do anterior com a diferença de que o texto será arrumado à direita
  • Warp - Dispõe as palavras na linha a qual se encontra o cursor sem dividí-las, podendo ser ativada, ou desativada, quando se desejar. Uma indicação de qua a função WARP está ativada é dada pelo programa na parte superior direita da tela. Portanto, a função WARP deve ser utilizada sempre que desejarmos efetuar a justificação ou alinhamento do texto


Opção P

Voltando ao menu inicial, com [ESC] e selecionando a opção P, o programa irá perguntar se o arquivo a ser impresso é uma continuação de uma impressão anterior, caso esta tenha existido. Se você responder a esta pergunta com Yes, a numeração das páginas será continuação da impressão anterior.

Nesta opção são feitas várias perguntas, a fim de que o usuário possa definir por completo o formato de impressão.

  • Tamanho vertical do papel
  • Margem superior
  • Margem inferior
  • Margem esquerda
  • Pausa entre a impressão de cada página
  • Ejeta a última página impressa (formfeed)
  • Número de cópias a serem impressas
  • Numeração de páginas ativa
  • Local da impressão do número de página, cabeçalho ou rodapé
  • Número inicial da primeira página
  • Quebra de texto ou não a cada linha
  • Impressão justificada
  • Número de caracteres por linha
  • Espaçamento vertical das linhas
  • Página do texto a qual deve ser iniciada a impressão
  • Página do texto a qual deve ser finalizada a impressão
  • Impressão de cabeçalho

Opção F

Nesta opção você pode ler, fravar, apagar, pedir o diretório ou formatar um disco. As opções de leitura ou gravação perguntam se o periférico a ser utilizado é o drive ou o cassete.

  • S - Salva o arquivo em fita ou disco.
  • L - Carrega o arquivo.
  • D - Mostra o diretório do disco selecionado.
  • K - Deleta um arquivo especificado.
  • I - Formata o disco.

Opção T

Através desta opção você poderá utilizar o seu processador de texto como se fosse uma máquina de escrever, ou seja, tudo o que for digitado será impresso, após ser dado um [RETURN]. Este modo permite a formatação da impressão, com as seguintes opções:

  • [F1] - Margem esquerda do texto.
  • [F2] - Quebra de palavra ou não ao final da linha.
  • [F3] - Imprime o texto justificado.
  • [F4] - Caracteres por linha.
  • [F5] - Espaçamento vertical por linha.

Obs: Extensão do artigo original!

Opções Adicionais do Menu Principal

Opção C

A opção C no menu principal, limpa a área de memória do editor, deixando-a pronta para receber um novo texto.

Opção B

Permite trocar a cor de fundo da tela, onde:

  • [F1] - Azul
  • [F2] - Preto
  • [F3] - Verde
  • [F4] - Vermelho
  • [F5] - Roxo

Opção R

Volta para o BASIC, porém o arquivo que está na memória e apagado, para voltar, basta comandar CALL WRITE novamente.

Opções Adicionais do Modo 'E' (Edição)

[SELECT]+[F5] - Rule

Mostra ou não a régua indicadora de colunas.

[SELECT]+[F1] - Block

Apresenta as opções para trabalho em bloco de texto, previamente marcado com Mark/b-Mark/e.

  • [F1] - Copia um bloco marcado para a posição corrente do cursor.
  • [F2] - Move o bloco marcado para a posição corrente.
  • [F3] - Apaga o bloco do texto.
  • [F4] - Salva o bloco de texto na memória.
  • [F5] - Restaura um bloco previamente salvo.

As opções [F4] e [F5] são úteis quando queremos enxertar o texto de um arquivo em outro.

Tratamento de Erros

Artigo Original: Antônio F.S.Shalders, Revisão: Wilson Pilon

Embora não pareça, o tratamento de erros no MSX-BASIC é uma tarefa muito simples de ser feita, pois este conta com instruções poderosissímas para deteccção e manupulação destes.

Estas funções quase nunca são usadas pela grande maioria dos usuários da linha MSX, a não ser por um pequeno número que usa o micro na área cinentífica ou outra aplicação profissional.

O seu MSX tem normalmente disponíveis nada menos que 59 mensagens de erro. Este número pode subir até 255, pois o usuário pode definir seus próprios erros, desde que os códigos destes estejam compreendidos entre 60 e 254. O de número 255 pode ser usado por algum periférico e em geral não é usado pelo usuário (quem irá definir mais que 194 erros???).

A Detecção dos Erros

Para detectarmos se houve ou não um erro durante a execução do programa e se não queremos que o interpretador BASIC pare, devemos fazer o uso do desvio por erro, através da instrução:

ON ERROR GOTO

Esta instrução faz com que o programa seja desviado para rotina de tratamento ou contorno do erro. O tratamento de erros é a técnica de modificar os dados para que o programa prossiga corretamente a sua execução. O contorno apenas faz com que o programa não seja interrompido pelo interpretador.

Podemos descobrir facilmente qual o erro ocorrido, bastando usar, para isso, a função ERR, que retorna o código do erro detectado. O número da linha onde o erro ocorreu também é facilmente obtido, usando-se a função ERL.

O Prosseguimento do Programa

A não interrupção é conseguida através da instrução RESUME. O formato desta é RESUME xxx, onde xxx é o número da linha de reinício.

Se for desejado o prosseguimento na linha seguinte à que ocorreu o erro, basta usarmos o formato RESUME NEXT.

Interrupção Proposital do Programa

Isto é possível de ser feito pelo próprio usuário, pois, como já disse, podemos definir seus próprios erros através da instrução ERROR xxx onde xxx é o código do erro desejado. Se usado um código existente, o interpretador pensará que um erro comum aconteceu e, caso o programa tenha uma instrução de desvio para erros, executá-la-á. Caso contrário, a execução do programa será interrompida.

Caso o número do erro seja superior a 59, o usuário deverá tratá-lo convenientemente através de ERR e ERL. Uma aplicação prática é para testarmos senhas de acesso de um determinado programa.

Em qualquer caso é bom não esquecermos de usar o RESUME.

Conclusão

As rotinas de manipulação e tratamento de erros no MSX são recursos importantíssimos na programação profissional.

Convém lembrar que o BASIC é uma das pouquíssimas linguagens que possuem esta facilidade.

Um programa em BASIC, se bem estruturado e usando todos os recursos do MSX-BASIC, pode ser muito melhor que programas relativamente bem estruturados em Pascal, por exemplo.

Em programas que lidam com cálculos e em bancos de dados, tais recursos são indispensáveis, pois tornam o programa muito mais seguro.

Analise o programa da listagem 1 e veja você mesmo as potencialidades que uma manipulação correta de erros pode proporcionar.

200 ON ERROR GOTO 320
210 WIDTH 40:KEY OFF:CLS
220 INPUT"Senha:";S$:PRINT
230 IF S$lt;gt;"MSX" THEN 240 ELSE 250
240 ERROR 60    :'ERRO DEFINIDO
250 A=SQR(-1)   :'ERRO MATEMATICO
260 A/4         :'ERRO DE SINTAXE
270 DIM A(10)
280 DIM A(20)   :'DIM REDEFINIDO
290 A="T"       :'TIPO DESIGUAL
300 LOAD"xxx"   :'ARQUIVO NAO EXISTE
310 PRINT:PRINT"ERROS DEVIDAMENTE MANIPULADOS !":PRINT:PRINT:LIST 220-300
320 E=ERR:L=ERL
330 IF E=5 THEN PRINT "ERRO MATEMATICO NA LINHA";L:RESUME NEXT
340 IF E=2 THEN PRINT "ERRO DE SINTAXE NA LINHA";L:RESUME NEXT
350 IF E=10 THEN PRINT "REDEFINICAO DE MATRIZ NA LINHA";L:RESUME NEXT
360 IF E=13 THEN PRINT "TIPO ERRADO DE VARIAVEL NA LINHA";L:RESUME NEXT
370 IF E=53 THEN PRINT "ARQUIVO NAO EXISTE NO DISCO NA LINHA";L:RESUME NEXT
380 IF E=60 THEN PRINT "ERRO DE SENHA NA LINHA";L:RESUME NEXT

Graphic Master - Análise

Artigo Original: MSX Informática, Revisão: Wilson Pilon

Existem no mercado inúmeros editores de desenho para a linha MSX, cada um com alguma característica específica que atende determinada necessidade do usuário. Uns têm como ponto forte letras especiais, outros facilidades de edição de telas. O difícil é encontrarmos um editor que atenda, pelo menos, a maioria das nossas expectativas. Executar traços contínuos, linhas, desenhar quadrados e círculos, colorir, apagar, é o que, de modo geral, todos os editores de desenho fazem. Nossos problemas começam quando queremos trabalhar simultaneamente com letras, 'shapes' (desenhos prontos), simetrias ou cores intermediárias, por exemplo. Isto somente era possível através de várias etapas de trabalho e de uma incrível ginástica (sem sempre bem sucedida) para converter nossa tela no formato de um editor de desenho para outro.

Diante dessas limitações e da ausência do programa ideal dos nossos sonhos (que é sempre diferente para cada um), o programa ideal é aquele que possui o maior número de recursos disponíveis, além de um kit de ferramentas de desenho que possibilite criar e armazenar diferentes elementos para uso imediato ou posterior. E é isto que o Graphic Master, que é comercializado pela MSX Informática, oferece ao usuário do MSX: recursos básicos e alternativos, além de ferramentas para criação. Vejamos mais detalhadamente o que torna o Graphic Master altamente atrativo.


Um menu principal com 22 opções e vários outros secundários permitem compor inúmeras alternativas de desenho. Além disso, possui duas telas diferenciadas de edição e quatro quadros de 'shapes' variados. Seu funcionamento básico, de extrema simplicidade, facilita sua utilização: através das teclas F1 e F2 são ativadas e desativadas as opções existentes. As teclas cursoras servem para desenhar, aceitando também o mouse na execução de desenhos. Embora disponível apenas em cartucho de 32 Kbytes, permite a gravação das telas criadas tanto em disco como em fita, bem como a impressão através do ASMCOCAR ou do Printing Pack.

Possui todas as funções comuns aos editores de desenho: traços contínuos, retas, pontilhados, elipses e círculoas. Este último permitindo o traçado de círculos fechados, abertos ou semi-círculos. Reproduz letras e símbolos do teclado em caracteres cheios e em qualquer cor. Tem borracha, lupa de aproximação e função de cópia exata ou invertida de uma área da tela definida pelo usuário. Executa movimento de rotação lateral e apagamento. Seus pontos fortes são as opções de traços e 'patterns', de espelhos, de uso de cores, de 'shapes' prontos, de arquivamento de 'shapes' próprios, e de edição. Vejamos estes aspectos mais detalhadamente.

Traços e 'Patterns'

Existem 8 tipos diferentes de traçados, cada u m com 3 espessuras ou concentração de pontos diferentes, perfazendo um total de 24 opções que poderão ser utilizadas quando do uso de linha ou traço contínuo. Estas opções permitem trabalhar com formas mais arredondadas ou criar a ilusão de esfumaçamento, evitando aquela sensação de desenho feito 'à régua'. Da criatividade do desenhista e do uso destes recursos podem surgir outros inúmeros efeitos. Neste mesmo menu se pode optar entre 10 modelos de 'patterns' que podem ser usados para preenchimento de campos de molduras em qualquer cor. A combinação de um determinado 'pattern' e do tipo de traço aumenta as possibilidades de criação, pois os efeitos serão distintos conforme a combinação escolhida. O uso desses 'patterns' em molduras em conjunto com alguns dos 'shapes' já existentes e de letras, permitem a elaboração de cartões com bastante efeito.


Espelhos

Neste menu, o usuário, além das opções de cópia invertida em ambos os sentidos, de uma parte de um desenho na tela, conta com três opções de espelhamento. Ou seja, pode reproduzir simultaneamente um traço ou forma tanto no sentido vertical como no horizontal, como ainda nos quatro cantos da tela. O posicionamento da figura 'espelho' dependerá do ponto de origem em que iniciar o traçado. Este recurso evita o minucioso trabalho de cópia e inversão do desenho para outro ponto da tela, além de dispensar cálculos para posicionamento simétrico. Isto, é claro, tem como resultado um trabalho limpo e uma precisão nem sempre obtida quando outros meios são utilizados.


Cores

As opções de cores, tanto para traçado como para pintura são bastante ricas no Graphic Master. Isto se deve a duas possibilidades internas nos  menus de cores: a primeira é a possibilidade de se mudar a cor de um campo ou traço já pronto para outra cor, automaticamente. Isto é extremamente útil quando com um desenho já pronto, percebemos que outra cor ficaria melhor no conjunto. Basta colocar o cursor no campo ou no traço a ser alterado, escolhermos a opção de tranferência de cor e indicarmos a velha e a nova cor a ser utilizada. A velha cor é substituída imediatamente, sem prejuízo do restante do desenho e das outras cores existentes. Outro recurso de cor interessante é a possibilidade de se criar cores intermediárias, definindo duas cores diferentes para serem misturadas. Embora esta combinação resulta na produção de um campo hachurado envolvendo as duas cores originais, uma escolha de cores com certo critério faz com que o hachurado praticamente passe desapercebido, criando a ilusão de uma única cor de tonalidade secundária no desenho final. Isto aumenta enormemente as possibilidades de se obter efeitos alternativos no desenho.


'Shapes'

O Graphic Master é o único editor de desenho para MSX que já tem incorporado ao programa um rol de desenhos prontos para serem utilizados. Trata-se de um campo definido como ROM, na verdade composto de vários quadros que o usuário pode acessar teclado F1 e que vão apresentar figuras humanas, contruções, flores, veículos, etc., todos coloridos, que podem ser transportados diretametne para a tela de desenho. Caso o usuário deseje alterar as figuras ou a sua cor de fundo, poderá fazê-lo através da tela de edição. Existe, ainda, a possibilidade de se criar 'shapes' próprios ou letras através de edição. Para facilitar o uso destes novos 'shapes' durante a execução do desenho, o quadro ROM pode ser transofrmado em RAM, onde as novas formas criadas permanecerão arquivadas. Isto permite o uso gradual das mesmas enquanto se cria uma tela. Claro que criar novos 'shapes' para perdê-los ao desligar o micro não teria vantagem nenhuma. Por isso o Graphic Master tem uma opção de gravação dos shapes presentes ao quadro RAM, em um arquivo tipo .PRT que, quando carregado posteriormente, é diretamente inserido novamente no quadro RAM para facilidade do usuário (Este modo de armazenamento é exclusivo para manipulação de 'shapes'. O armazenamento normal de telas é feito em arquivo do tipo .SCR que, depois, podem ser carregados através do próprio Graphic Master ou do comando BLOAD "TELA.SCR",S).


Edição

Existem neste editor duas alternativas de edição de desenhos, além da comodidade do desenho já poder ser criada a cores

Edição para Criação

Seguindo os moldes de um editor de sprites, nesta tela podemos criar qualquer letra ou desenho multicolorido que poderá ser transportado ou para um quadro RAM, ou para a tela de desenho diretamente. As opções inversas também estão disponíveis: transportar um desenho da tela ou do quadro RAM para a tela de edição para ser retrabalhado. Também é aí que voce encontra a opção de gravação de arquivos '.PRT' (de 'shapes').

Edição para Alteração

Esta opção remete para um editor similar ao anterior, com o mesmo esquema de funcionamento. A diferença básica é que neste o desenho ou porção do mesmo a ser editado, é traduzido diretamente da tela maior para a de edição e, a medida em que a alteração vai sendo feita, ela já é repoduzida no desenho principal. Esta tela de edição tem como opção, além das cores, a movimentação para cima, para baixo e nas laterais do desenho exposto na tela de edição, permitindo que se 'caminhe' no desenho maior do vídeo sem necessidade de voltar a ele para 'buscar' outro pedaço de desenho para ser editado. Isto acelera e facilita a operação.

Embora todos os recursos existentes no Graphic Master sejam de extrema utilidade, sem dúvida são os recursos de edição e a disponibilidade de 'shapes' que tem maior peso na decisão de compra do cliente.

Outra vantagem importante de ser mencionada é a de que o programa possui uma rotina interna de controle de erros. Isto evita aqueles incovenientes de outros editores em que se pode perder totalmente uma tela já desenhada devido a algum problema no carregamento ou gravação por falta de espaço no disco, por exemplo. No Graphic Master isto não acontece. A mensagem de ERRO é apresentada e basta retornar à opção anterior para termos chance de trocar o disco sem perder a tela.

Função do 1º Grau

Artigo Original: Guilherme A.L.da Silva, Revisão: Wilson Pilon

A função do 1º grau é do tipo:

F(x) = Ax + B

Tendo como condição que o 'A' seja maior ou menor que zero e pertencente ao conjunto dos reais. 'B' pode ser qualquer número real, determinando o ponto em que a reta irá cruzar o eixo Y.

O Programa

O programa pede inicialmente, os valores de 'A' e 'B' e, a seguir, pede a confirmação dos valores fornecidos, fornecendo:

  • O coeficiente (angular ou linear).
  • O valor da ordenada (0,Y).
  • O zero da função, ou seja, a abcissa (X,0).
  • O estudo do sinal

Após ter fornecido estes dados, novos dados são solicitados para traçar o gráfico, sendo que estes servem apenas para melhorar a apresentação do mesmo.

O gráfico é, então, mostrado na tela, podendo também ser impresso, bastando pressionar a tecla [ESC].

Variáveis do Programa

  • FN PX(A,B,X) - Resolução da equação para achar os pontos.
  • A - Termo 'A'.
  • B - Termo 'B'.
  • X - Icógnita - contém a resolução da equação.
  • ROT - Seleciona a rotina.
  • A$ - String de A
  • B$ - String de B
  • H - Valor de A para uso no estudo do sinal
  • AA - Valor de A para uso no gráfico.
  • BB - Valor de B para uso no gráfico.
  • V - Arredondamento de X.
  • PX() - Matriz dos quatro pontos extras no eixo X.
  • PY() - Matriz dos quatro pontos extras no eixo Y.
  • CY - Coordenada central Y.
  • CX - Coordenada central X.


1 REM -------- FUNCOES DO 1 GRAU
2 REM -------- GUILHERME A.L. DA SILVA
3 REM -------- PARA LINHA MSX
4 REM -------- 22/06/88
5 REM -------- GUARARAPES-SP
10 CLEAR 10000
20 OPEN"grp:"FOR OUTPUT AS #1
30 DEF FN PX(A,B,X)=A*X+B
40 ' PROG. FUNCAO
50 ROT=1
60 COLOR 15
70 CLS:KEY OFF
71 COLOR 5,1
80 PRINT:PRINT"    EXAMINADOR DE FUNCOES DO 1 GRAU"
110 ON ROT GOSUB 130,280,370,460,680,780,900
120 GOTO 70
130 ' F(X) NA TELA
140 LOCATE15,4:PRINT"Funcao"
150 LOCATE 6,8:INPUT"A=";A$:A=1
160 LOCATE24,8:INPUT"B=";B$:B=0
170 A=VAL(A$):B=VAL(B$):C=VAL(C$)
180 H=A:BB=B:AA=A
200 IF A=0 THEN RUN
210 IF A$="-1" THEN A$="-"
220 IF A$="1" THEN A$=""
230 IF B$="0" THEN B$=""
240 IF B$>="1" THEN B$="+"+B$
250 LOCATE10,12:PRINT"F(X)= ";A$;"X";B$
260 LOCATE 13,16:INPUT"CONFIRMA";A$:IF A$="N" THEN RUN
270 ROT=2:RETURN
280 ' A DE F(X)
290 COLOR 15,4
300 LOCATE 11,4:PRINT"ANALISE DE A"
310 IF A>0 THEN Z$="crescente":W$="positiva"
320 IF A<0 THEN Z$="decrescente":W$=NEGATIVA"
330 LOCATE 8,10:PRINT"Funcao "+Z$
340 LOCATE 8,11:PRINT"Inclinacao "+W$
350 LOCATE 12,16:PRINT"<RETURN>":IF INKEY$="" THEN 350
360 ROT=3:RETURN
370 ' F(X) DE B
380 COLOR 12,1
390 LOCATE 11,4:PRINT"ANALISE DE B"
400 IF B=0 THEN B$="0":Q$="linear"
410 IF B<>0 THEN Q$="angular"
420 LOCATE 8,10:PRINT"Coeficiente "+Q$
430 LOCATE 8,11:PRINT"O 1 ponto e: (0,";B$;")"
440 LOCATE 13,16:PRINT"<RETURN>":IF INKEY$="" THEN 440
450 ROT=4:RETURN
460 ' 0 da f(x)
470 COLOR 15,8
471 IF B=0 THEN B$=""
480 LOCATE 10,4:PRINT"ZERO DA FUNCAO"

Matemágica

Artigo Original: J.L.Fonseca, Revisão: Wilson Pilon

Vamos, hoje, apresentar uma versão do programa LIFE em duas dimensões com uma resolução que raramente é implementada em micros e que será de 256x192 pixels.

Este jogo/passatempo foi criado por John Conway e é um passatempo fascinante, principalmente na resolução aqui apresentada.

Este jogo é um autômato finito constituído por uma malha bidimensional de células que podem existir em dois estados: 'vivas' ou 'mortas'. Uma célula morta tem a cor do fundo e uma viva tem uma cor constante. De uma geração para a outra as células vão nascendo e morrendo de acordo com as regras definidas abaixo.

Cada célula tem oito vizinhos que são oito pixels que a cercam e o seu estado na próxima geração é determinado pelo seu estado atual e pelo estado dos seus vizinhos. As células que estão nas bordas da tela têm como  vizinhas as células da borda oposta, pelo que a tela forma uma superfície toroidal, isto é, uma superfície em forma de 'rosquinha'.

Se a célula está viva e tem dois ou três vizinhos vivos, ela sobrevive na próxima geração.

Se a célula tiver mais de três ou menos de dois vizinhos, ela morre devido à superpopulação e ao isolamento, respectivamente.

Se a célula estiver morta e tiver exatamente três vizinhos vivos, ela estará viva na próxima geração.

Estas regras, embora aparentemente simples, dão origem a padrões extremamente complexos e praticamente imprevisíveis.

O programa deste mês foi feito parte em BASIC, parte em ASSEMBLY, pois, devido ao número de células e ao número de testes disso decorrente, seria extremamente lento se fosse apenas em BASIC.

A parte em BASIC server para a inicialização e para as funções de arquivo e nos apresenta quatro opções:

  • Distribuição Aleatória
  • Desenhar a Tela
  • Salvar a Tela
  • Carregar a Tela

As diversas opções são, auto explicativas, e são acessadas digitando o seu número. Para voltar ao menu inicial basta digitar [CTRL/STOP].

Na opção 2 o cursor é movido com as setas e os pontos plotados com a barra de espaço, sendo que a tecla [RETURN] inicia a operação do autômato.


30 'J.L.FONSECA
40 KEYOFF: CLS: LOCATE 8,11: PRINT"LIFE SENDO INSTALADO..."
50 FOR I=&H9000 TO &H920F: READ A$:A=VAL("&h"+A$): POKE I,A:NEXT I
60 ON STOP GOSUB 80: STOP ON
70 GOSUB 520: GOTO 100
80 IF A$="2" THEN DEFUSR=&H9013: A=USR(0)
90 SCREEN 0: RETURN 100
100 CLS: LOCATE 13,1: PRINT"---LIFE---","        (c) BY J.L.FONSECA",,,,,,,
110 PRINT"        1-TELA ALEATORIA",,,"        2-DESENHA TELA",,,"        3=SALVA A TELA",,,"        4-CARREGA UMA TELA",,,"        5-RODA PROGRAMA",,,"        6-FIM",,,,,,
120 A$=INKEY$: IF A$<"1" OR A$>"6" THEN 120
130 OP=VAL(A$): ON OP GOSUB 150,170,450,470,490,510
140 SCREEN0: GOTO80
150 CLS: LOCATE 10,10: INPUT "QUANTOS PONTOS ";A
160 SCREEN 2: FOR I=1 TO A: PSET (RND(TIME)*255,RND(TIME)*191): NEXTI: DEFUSR=&H9013: A=USR(0): DEFUSR=&H9000: A=USR(0): DEFUSR=&H918C: GOTO 500
170 X=128: Y=96 :SCREEN 2: COLOR 15,1: CLS: SPRITE$(0)=S0$: SPRITE$(1)=S1$
180 PUTSPRITE0,(X-3,Y-4),15,0: PUTSPRITE1,(X-3,Y-4),1,1
190 I=STICK(0): ON I GOSUB 250,270,300,320,350,370,400,420
200 I=STRIG(0): IF I<>0 THEN GOSUB 220
210 GOTO 180
220 IF POINT(X,Y)=1 THEN PSET(X,Y),15 ELSE PSET(X,Y),1
230 FOR I=1 TO 50: NEXT I
240 RETURN
250 Y=Y-1: IF Y<0 THEN Y=0
260 RETURN
270 Y=Y-1:IF Y<0 THEN Y=0
280 X=X+1: IF X>255 THEN X=255
290 RETURN
300 X=X+1:IF X>255 THEN X=255
310 RETURN
320 Y=Y+1: IF Y>191 THEN Y=191
330 X=X+1: IF X>255 THEN X=255
340 RETURN
350 Y=Y+1: IF Y>191 THEN Y=191
360 RETURN
370 Y=Y+1: IF Y>191 THEN Y=191
380 X=X-1: IF X<0 THEN X=0
390 RETURN
400 X=X-1: IF X<0 THEN X=0
410 RETURN
420 Y=Y-1: IF Y<0 THEN Y=0
430 X=X-1: IF X<0 THEN X=0
440 RETURN
450 CLS:LOCATE 10,10: PRINT"NOME DO ARQUIVO ?": LOCATE 10,12: LINEINPUT A$
460 BSAVE A$,&H920F,&HAA0F: GOTO 80
470 CLS:LOCATE 10,10: PRINT"NOME DO ARQUIVO ?": LOCATE 10,12: LINEINPUT A$
480 BLOAD A$: GOTO 80
490 SCREEN 2: DEFUSR=&H9000: A=USR(0): DEFUSR=&H903D: A=USR(0): DEFUSR=&H918C
500 A=USR(0): GOTO 500
510 END
520 S0$=CHR$(16)+CHR$(16)+CHR$(16)+CHR$(238)+CHR$(16)+CHR$(16)+CHR$(16)+CHR$(248):S1$=CHR$(40)+CHR$(40)+CHR$(238)+CHR$(0)+CHR$(238)+CHR$(40)+CHR$(40)+CHR$(0)
530 RETURN
540 DATA 21,00,20,3e,f1,0e,1b,06
550 DATA 00,cd,cd,07,23,10,fa,0d
560 DATA 20,f5,c9,21,00,00,11,0b
570 DATA 0b,dd,21,0f,92,0e,c0,06
580 DATA 20,e5,cd,d7,07,dd,77,00
590 DATA dd,23,7b,85,6f,10,f3,e1
600 DATA 2c,15,20,05,24,2e,00,16
610 DATA 0b,0d,20,e3,c9,21,00,00
620 DATA 11,0b,0b,dd,21,0f,92,0e
630 DATA c0,06,20,e5,dd,7e,00,cd
640 DATA cd,07,dd,23,7b,b5,6f,10
650 DATA f3,e1,2c,15,20,05,24,16
660 DATA 08,2e,00,0d,20,e3,c9,7b
670 DATA fe,ff,20,02,3e,8f,fe,c0
680 DATA 20,02,3e,00,6f,26,00,29
690 DATA 6f,26,00,29,29,29,29,29
700 DATA 7a,cb,3f,cb,3f,cb,3f,85
710 DATA 6f,30,01,24,7a,e6,07,11
720 DATA 07,92,b3,5f,1a,11,0f,92
730 DATA 19,c9,ed,5b,05,92,0e,00
740 DATA 15,2a,03,92,ce,b0,90,47
750 DATA a6,28,01,0c,11,20,00,19
760 DATA 7b,a6,28,01,0c,19,7b,a6
770 DATA 28,01,0c,ed,5b,05,92,2a
780 DATA 03,92,cd,80,90,47,a6,2b
790 DATA 01,0c,11,40,00,19,78,a6
800 DATA 28,01,0c,ed,5b,05,92,14
810 DATA 2a,03,92,cd,80,90,47,a6
820 DATA 28,01,0c,11,20,00,19,78
830 DATA a6,28,01,0c,19,78,a6,28
840 DATA 01,0c,c9,ed,5b,05,92,15
850 DATA 1d,cd,67,90,a6,28,01,0c
860 DATA ed,5b,05,92,1d,cd,67,90
870 DATA a6,28,01,0c,ed,5b,05,92
880 DATA 14,10,cd,67,90,a6,28,01
890 DATA 0c,ed,5b,05,92,15,cd,67
900 DATA 90,a6,28,01,0c,ed,5b,05
910 DATA 92,14,cd,67,90,a6,28,01
920 DATA 0c,ed,5b,05,92,1c,15,cd
930 DATA 67,90,a6,28,01,0c,ed,5b
940 DATA 05,92,1c,cd,67,90,a6,28
950 DATA 01,0c,ed,5b,05,92,14,1c
960 DATA cd,67,90,a6,28,01,0c,c9
970 DATA ed,5b,05,92,cd,67,90,11
980 DATA 00,1b,19,b6,77,c9,06,00
990 DATA c5,cd,f3,90,79,fe,03,cc
1000 DATA 5b,91,fe,02,20,0b,ed,5b
1010 DATA 05,92,cd,67,90,a6,c4,58
1020 DATA 91,3a,06,92,3v,32,06,92
1030 DATA c1,10,dd,c9,11,00,00,ed
1040 DATA 53,03,92,ed,53,05,92,11
1050 DATA 0f,aa,0e,18,3e,00,06,00
1060 DATA 12,13,10,fc,0d,20,f7,cd
1070 DATA 66,91,3a,05,92,3c,32,05
1080 DATA 92,0e,be,06,00,c5,cd,9a
1090 DATA 90,79,fe,03,cc,58,91,fe
1100 DATA 02,20,0b,ed,5b,05,92,cd
1110 DATA 67,90,a6,c4,5b,91,3a,06
1120 DATA 92,3c,32,06,92,c1,10,dd
1130 DATA 2a,03,91,11,20,00,19,22
1140 DATA 03,92,3a,05,92,3c,32,05
1150 DATA 92,0d,20,c7,3e,bf,32,05
1160 DATA 92,cd,66,91,11,0f,92,21
1170 DATA 0f,aa,01,00,18,ed,b0,cd
1180 DATA 3d,90,c9,00,00,00,00,b0
1190 DATA 40,20,10,08,04,02,01,00

Cartas

Artigo Original: CPU, Revisão: Wilson Pilon

Graphos III

Existiam duas dúvidas com relação ao método de salvamento e carregamento de telas criadas no Graphos III, um usuário gostaria de saber como carregar as telas pelo BASIC, se as telas ficavam armazenadas em outra página/slot. Outro usuário gostaria apenas de saber como carregar as telas sem executá-las imediatamente, chamando-as posteriormente. Reunindo as informações mais interessantes das dúvidas e das respostas temos:

  • As telas do Graphos III não ficam armazenadas em outra página slot, e sim na área de BASIC do MSX. Portanto no caso de carregar a mesma pelo BASIC, deve-se tomar cuidado para que o programa não ultrapasse a área onde se encontra a tela. Programando em Assembly, teremos de ter o mesmo cuidado.
  • Os endereços de uma tela do Graphos III são: Início = &H9200, Final = &HC280, Execução = &H9200
  • Para carregar uma tela do Graphos III pelo BASIC, e exibi-la imediatamente: SCREEN 2 : BLOAD "TELA.SCR",R : A$=INPUT$(1)
  • Para carregar uma tela do Graphos III pelo BASIC e exibi-la posteriormente: DEFUSR=&H9200 : BLOAD "TELA.SCR" : ... : A=USR(0)

Comandos do MSX-DOS

Artigo Original: André L.F.de Freitas, Revisão: Wilson Pilon

Com o aparecimento do Disk Drive para a linha MSX no Brasil, veio com o mesmo o sistema controlador deste periférico, o chamado DOS (Disk Operating System), sendo o MSX-DOS um software controlador desenvolvido pela empresa americana Microsoft e rapidamente adaptador por outras empresas que comercializam drives para a linha MSX.

Aliás, eu gostaria de saber se alguma empresa nacional possui o direito de venda deste software, dado pela Microsoft, com contratos e etc., ou somente usam o artifício de registrar e comercializar no Brasil produtos a muito custo desenvolvidos no exterior, tornando-se piratas de baixíssimo nível, dizendo muitas vezes que o DOS comercializado por elas é de sua própria autoria.

Além de tudo isso, ainda existem empresas, como a Microsol, que conseguiram uma façanha inédita no desenvolvimento de sistemas operacionais. O DOS da Microsol possui um arquivo único de sistema, o SOLXDOS.SIS, que contém, simultaneamente, todas as rotinas do DOS e o interpretador de comandos e, além disso, comandos em português, tornando-se a primeira empresa a comercializar um DOS bilingue (essa é terrível!).

Se você quiser desenvolver o seu próprio interpretador de comandos, que é uma das opções que se tem se o sistema possuir o arquivo COMMAND.COM independente, não poderá fazê-lo usando o sistema da Microsol. Seria isso uma forma de evitar a pirataria de programas ou reprimir o usuário capaz de desenvolver algo melhor?

Mas, esquecendo as confusões surgidas desde que começou o desenvolvimento de software nacional, vamos ao que interessa a respeito do DOS.

O sistema operacional MSX-DOS foi desenvolvido para gerenciar todas as operações de disco realizadas pelo MSX. Um não pode existir sem o outro, a menos que o leitor seja um excelente programador para criar seu próprio software de operação de disco, que, na verdade, também seria um DOS.

O MSX-DOS é um sistema operacional baseado no CP/M versão 2.2, apesar de se parecer muito com o MS-DOS, da IBM-PC. Possui comandos do MS-DOS, mas, no que diz respeito às rotinas internas em assembly, as chamadas das mesmas, valores passados e recebidos por registradores, assemelha-se ao CP/M. O tratamento destas rotinas ficará a cargo de outra parte desta série de artigos.

Começaremos então, com a descrição do sistema. Quando ligamos nosso MSX com um disk drive conectado, percebemos a inicialização normal do micro e, logo após, surge uma mensagem do fabricante da interface. Se não houver disco com sistema operacional no drive, o micro passa direto ao Disk Basic, ou, então, solicita um diskette contendo sistema operacional (isto vai depender do fabricante da interface).




Supondo que há um disco com sistema no drive, o mesmo continuará a ser lido e logo surge uma mensagem no vídeo dizendo a versão do DOS, o criador do software, etc. A seguir, surgirá um sinal:

A>

indicando que o drive corrente em uso é o drive A (veja imagens acima).

Este sinal 'A>' é chamado de PROMPT e significa que o DOS aguarda a digitação de um comando. Não traduzirei os termos usados neste artigo para não criar confusões.

O MSX-DOS possui um grande número de comandos, os quais relacionarei abaixo, apresentando sua sintaxe e utilização, pois existem algumas formas que talvez não sejam do conhecimento de todos.

Antes de começar, porém, mostrarei algumas particularidades que não são comando, mas devem ser obedecidas.

Particularidades do DOS

Os drives são designados por letras (A-F) não havendo diferenciação entre maiúsculas ou minúsculas, sendo permitido somente aqueles presentes ao sistema. O primeiro será o A, o segundo o B e assim por diante.

Para mudança do drive em uso, basta digitar a letra correspondente seguida pelo caractere 'dois pontos' e teclar RETURN ao final. Como exemplo, para passar a usar o drive B, se existir, basta teclar B: [RETURN]

Os nomes de arquivos possuem um máximo de 11 caracteres separados em 2 grupos por um 'ponto', sendo o primeiro grupo de até 8 caracteres, significando o nome do arquivo, e o segundo grupo opcional, contendo no máximo 3 caracteres, chamado de extensão do arquivo, servindo para identificar o tipo de arquivo usado. Ex: NOMEARQ1.EXT

No nome do arquivo podem ser utilizados quaisquer caracteres de A até Z, dígitos de 0 a 9, e alguns símbolos do teclado do micro, devendo começar com letra, não sendo permitido o caractere 'espaço', havendo uma mensagem de erro quando o caractere não for válido. Também aqui não há diferenciação entre maiúsculas ou minúsculas, sendo que o micro converte tudo automaticamente para maiúsculas.

Os nomes não podem ser os nomes de comandos internos do DOS. A lista de comandos internos é a seguinte:

BASIC

  • DIR
  • PAUSE
  • TYPE
  • COPY
  • ERASE
  • REM
  • VERIFY
  • DATE
  • FORMAT
  • RENAME
  • DEL
  • MODE
  • TIME

Também não podem ser usados como nomes de arquivos os nomes utilizados para designar dispositivos do micro:

  • AUX - significa dispositivo auxiliar (interface externa como impressora, drive, etc.)
  • CON - significa console (teclado ou vídeo)
  • NUL - dispositivo nulo, dispositivo sem efeito no micro.
  • LST ou PRN - impressora.

Estas palavras são tratadas como arquivos especiais para redirecionamento de saídas ou entradas.

Caracteres especiais *(asterisco) e ? (ponto de interrogação) também não podem ser usados como nome de arquivos por terem tratamento especial.

O primeiro é usado para generalizar um grupo de caracteres quaisquer nos nomes de arquivos, por exemplo:

  • nome*.* pode referenciar qualquer arquivo começando com NOME, possuindo no máximo mais 4 caracteres e qualquer extensão.
  • nomearq.* pode referenciar qualquer arquivo de  nome NOMEARQ possuindo qualquer extensão.

O caractere ? é usado da mesma forma que o primeiro, sendo que só substitui 1 caractere do nome do arquivo Ex:

  • nomearq?.??t referencia arquivos com quaisquer caracteres nos lugares onde se encontram interrogações.

Procure sempre usar nomes para seus arquivos que indiquem exatamente o que eles representam. Por exemplo, GRAFICOS.BAS seria um bom nome para um programa em BASIC que gerasse gráficos. As extensões mais usadas comercialmente seriam as seguintes:

  1. BAS - Programas em BASIC.
  2. BIN - Programas em linguagem de máquina.
  3. FOR - Programas em FORTRAN.
  4. ASM - Assembly.
  5. PAS - Pascal.
  6. C - Linguagem C.
  7. LIB - Arquivos de biblioteca de certas linguagens.
  8. DOC - Textos em modo documento.
  9. TXT - Textos.
  10. COM - Programas diretamente executáveis.

Procure usar extensões que não passem informações sobre o arquivo.

Comandos do DOS

Os comandos do DOS são formados, geralmente, por uma palavra, o comando propriamente dito seguido de uma ou mais palavras, chamadas de parâmetros, com um [RETURN] teclado ao final. Para serem interrompidos, basta pressionar, simultaneamente, as teclas [CONTROL]+[C]. Isto causará o encerramento imediato, se possível, do comando que está sendo executado. Outras teclas desempenham funções especiais no DOS, mas isso ficará para a segunda parte do artigo, no próximo número.

Utilizarei a seguinte convenção para a descrição abaixo:

  • Toda vez que uma palavra estiver entre os sinais < e >, a mesma é opcional.
  • Quando aparecer X: ou Y: isto significará qualquer drive existente no sistema.
  • Espaços são usados para separar parâmetros uns dos outros.

Comandos

BASIC

Permite a entrada no DISK BASIC MSX

Sintaxe:

BASIC <nomearq.bas>

Caso seja fornecido o nome do arquivo, o mesmo será executado automaticamente na entrada do BASIC.

Para voltar ao sistema operacional, basta digitar CALL SYSTEM, dentro do BASIC.


COPY

Faz cópias de arquivos entre discos. Permite juntar arquivos em um só enquanto copia.

Sintaxe:

COPY <X:><ARQUIVO1.EXT> <X:><ARQUIVO2.EXT>

Exemplo:

COPY A:COMMAND.COM B:COMANDOS.COM

Copia o arquivo command.com do drive A para o B com o novo nome comandos.com.

COPY TESTE.BAS B:

Copia o arquivo teste.bas no drive em uso para o drive B com o mesmo nome.

Obs1: São válidos os caracteres especiais * e ?

COPY TESTE.* B:

Copiará todos os arquivos TESTE com qualquer extensão para o drive B.

Obs2: Se for usado um nome de dispositivo no lugar do segundo nome de arquivo, a saída será por aquele dispositivo.

COPY TESTE.BAS PRN

Listará o arquivo na impressora.

COPY TESTE.BAS CON

Listará o arquivo no vídeo.

Obs3: Para concatenar (juntar) arquivos durante a cópia, basta referenciá-los como se fossem somados no nome do primeiro arquivo.

COPY A.DOC + B.DOC + C.DOC FINAL.DOC

Copiará os arquivos a.doc, b.doc e c.doc um após o outro para dentro do arquivo final.doc

DATE

Mostra e permite alterar a data do sistema.

Sintaxe:

DATE <DD/MM/AA>

Exemplo:

DATE 03/06/88

Altera a data para 03/06/88.

DATE

Mostra a data atual e pede uma nova data. Se for teclado [RETURN] somente, a data não é alterada.

DEL (ou ERASE)

Permite apagar do disco arquivos que não utilizaremos mais. O comando ERASE é idêntico.

Sintaxe:

DEL <X:>NOMEARQ.EXT

ERASE <X:>NOMEARQ.EXT

Apaga o arquivo especificado do disco contido no drive especificado. Não fornecido o drive, o mesmo é assumido como o corrente em uso.

Obs: São válidos os caracteres * e ?

DEL *.*

Apagará TODOS os arquivos no disco. O sistema perguntará se realmente você quer fazer isso, pois depois de apagados os arquivos não são mais recuperáveis a não ser por alguns programas 'milagrosos'.

DEL *.BAS

Apagará somente os arquivos com extensão BAS no disco. A pergunta para confirmar a deleção não é mais feita, portanto, cuidado

DIR

Permite observarmos os arquivos existentes no disco. O comando mostrará nomes, extensões, data em que o arquivo foi criado, hora (em alguns sistemas), tamanho em bytes, e, ao final, o número de arquivos e o espaço livre em disco.

Sintaxe:

DIR <X:><NOMEARQ.EXT></W></P>

Exemplo:

DIR

Mostrará todos os arquivos do disco.

DIR *.COM

Mostrará todos os arquivos do disco com extensão COM.

DIR/W

Apresentará somente os nomes dos arquivos em duas colunas no vídeo.

DIR/P

Se a listagem dos arquivos ultrapassar o tamanho da tela, esta opção fará uma pausa aguardando uma tecla para continuar sempre que a tela for preenchida.

FORMAT

Permite formatar, ou seja, preparar um disco virgem para receber informações.

Sintaxe:

FORMAT

Obs1: A seguir virão perguntas sobre o tipo e capacidade do disk drive que você possui, devendo ser cuidadosamente respondidas.

Obs2: Cuidado para não formatar discos que contenham programas, pois todo o conteúdo dos mesmos estará perdido para sempre.

MODE

Seleciona modo de tela e colunas no vídeo.

Sintaxe:

MODE <largura>

Exemplo:

MODE 40

Obs: Caso <largura> seja maior do que 32, o modo do vídeo será equivalente ao modo 0 do BASIC. Caso seja menor, o modo do vídeo será equivalente ao modo 1.

<largura> deve ser um número entre 1 e 40.


TIME

Permite atualizar a hora do sistema. Só produz efeito se o seu micro possui um relógio interno.

Sintaxe:

TIME <HH:MM:SS>

Exemplo:

TIME 13:30:00

Atualiza a hora para 13:30 (os segundos podem ser omitidos, sendo então zerados automaticamente).

TIME

Mostra a hora corrente e pede nova hora. Comportamento similar ao comando DATE.

TYPE

Mostra o conteúdo de um arquivo texto.

Sintaxe:

TYPE NOMEARQ.EXT

Exemplo:

TYPE ARTIGO.CPU

Mostra o conteúdo do arquivo ARTIGO.CPU no vídeo.

VERIFY

Permite selecionar o modo de verificação automática em um arquivo que acabou de ser escrito no disco para testar a ocorrência de erros.

Sintaxe:

VERIFY <ON/OFF>

Exemplo:

VERIFY ON

Liga o modo de verificação.

VERIFY OFF

Desliga o modo de verificação.

Obs: Com este comando acionado, a escrita em disco se tornará mais lenta, porém mais confiável, acusando erro sempre que houver.

Os comandos PAUSE e REM serão tratados na segunda parte deste artigo, no próximo número da revista, pois requerem um conhecimento de arquivos do tipo BATCH, dos quais irei tratar com mais detalhes. Veremos, também, controles especiais do DOS, como teclas com funções importantes e mais algumas curiosidades, antes de começarmos a tratar das funções do DOS a nível de linguagem de máquina.

Esta primeira parte de nossa aventura pelo sistema operacional pode ser elementar para usuários experientes, mas não poderia faltar, pois nosso objetivo é descrever o DOS em todos os sentidos, dedicando o conhecimento a todos os usuários, quer sejam 'pequenas crianças conhecendo o mundo da informática' quer sejam 'feras da programação'.

Nemesis

Artigo Original: CPU, Revisão: Wilson Pilon

O jogo NEMESIS, da Konami, é, sem dúvida alguma, um dos melhores jogos espaciais existentes para o MSX 1.0, rodando somente em disco de face dupla ou em cartucho.


Para ajudá-lo a desvendar este maravilhoso, damos, abaixo, algumas dicas extraídas do manual que acompanha o cartucho.

O Jogo

O planeta Nemesis é um mundo pacífico semelhante à Terra, mas, no momento, está sendo atacado pelos seus inimigos de sempre, os Bacterions. O povo de Nemesis está ameaçado de ser completamente destruído pelo povo de Bacterion.

Seu objetivo, portanto é ajudar o povo de Nemesis a enfrentar esta terrível ameaça. Para tal, uma nave foi desenvolvida, a Warp Rattler. Conquistando a super fortaleza dos Bacterion, a Xacrous, você terá salvo o povo de Nemesis.

Como Jogar

O jogo pode ser jogado por um ou dois jogadores. No caso de dois jogadores, cada um joga alternadamente.

Os movimentos da nave podem ser controlados pelo joystick ou utilizando-se as teclas de controle do cursor e a barra de espaços.

Os caças inimigos irão atacar continuadamente sua nave. Você tem que eliminar o maior número possível de caças inimigos para poder passar para o estágio seguinte.

Sua nave é rápida mas o seu armamento não é suficiente para enfrentar com sucesso os ataques inimigos. Você tem que receber constantes aumentos de força através das cápsulas de força do inimigo.

Ao iniciar o jogo, você possui 3 Warp Rattlers e, a cada 100.000 pontos conseguidos, você receberá outra nave. O número máximo de naves que poderão ser conseguidas é de 99.

Uma nave será perdida sempre que for atingida por fogo inimigo, tocar em naves inimigas ou em qualquer obstáculo do solo.

Para parar momentaneamente o jogo, pressisone [F1], pressionando-a novamente para retornar.

Pontuação

  • Destruição de uma nave pequena inimiga: 100 pontos.
  • Destruição de uma nave média inimiga: 1.000 pontos.
  • Destruição da parte central de um monstro: 10.000 pontos.
  • Destruição de inimigos diversos: até 5.000 pontos.

Aumento de Força

Cada vez que você pega uma cápsula de força do inimigo, alguns indicadores de seleção de aumento de força, na parte inferior da tela, vão se iluminar. Quando desejar selecionar o campo iluminado, pressione as teclas [M] ou [N] no teclado, ou botão B do joystick.

Ajuda Adicional

Como em todos os jogos da Konami, o Nemesis também possui alguns macetes que poderão ajudá-lo a conquistar o seu objetivo mais facilmente.

Para ter acesso às senhas:

  • Pare o jogo, pressionando a tecla [F1].
  • Digite: HYPER + [RETURN].
  • Pressione novamente [F1] para voltar a jogar.

Além do Hyper, temos ainda, LASER, MISSLE, SHIELD, OPTION, DOUBLE.

O nome da senha pode variar de acordo com a versão do jogo que você possui, pois algumas soft houses efetuaram alterações. Caso o seu jogo não aceite estas senhas, utilize um Zapper para verificar os nomes que foram atribuídos às senhas.

Elas poderão ser encontradas no primeiro bloco do jogo, sem contar a capa de apresentação da software house, geralmente o bloco de nome NEME1, nos setores 35 e 36.

The Castle

Artigo Original: MSX Informática, Revisão: Wilson Pilon

The Castle é um dos mais emocionantes jogos de labirinto para o MSX.

Sua estória se passa num castelo medieval, onde você deve ajudar o príncipe Rafael a salvar sua amada, a princesa Margarida, que foi raptada e está, aprisionada na torre do castelo do cruel Mephisto. Para tanto, guiará o valente príncipe através das cem salas do castelo até a torre.


Com um visual agradável e um fundo musical que acompanha a velocide em que estiver jogando, é um jogo que desafia e estimula sua imaginação, o que fará você continuar jogando na tentativa de vencer.

Desde o seu lançamento, tem sido muito procurado pelos usuários de MSX, figurando sempre na lista dos melhores jogos. Tanto adulto quanto crianças não poupam esforços para alcançar o fim do jogo.

Por isso, achamos que valia a pena descrevê-lo detalhadamente, além de dar algumas dicas que ajudam a vencer.

Para Jogar

Você pode utilizar o joystick ou o teclado (setas cursoras e barra de espaço)

Seus Inimigos

Nao deixe nenhum inimigo tocar você, caso contrário, você morrerá.

Conheça, agora, seus inimigos:

  • Os guardas do castelo, usam uma armadura.
  • Os escravos, vestem um colete.
  • As bruxas, tem bengala e chapeu.
  • O raposão, tem uma longa barba e uma roupa vermelha.
  • As bolas de fogo.
  • As aranhas (quando uma se transformar num pequeno triângulo, passe por cima dela. Não esqueça de teclar espaço ou o botão de tiro).

Você poderá matá-los jogando objetos (tijolos, jarros, cofres e bolos) em cima deles ou, então, atropelando-os com tais objetos.

Eles também morrem esmagados em elevadores, já que não passam de uma sala para outra.

Fique Atento

Tente pegar o maior número de chaves e com elas abrir o menor número de portas (você pode perder o jogo se cair numa sala e não tiver as chaves para sair dela).

  • Antes de deixar um objeto (ex. tijolo) ser esmigalhado pelo elevador, verifique se não vai precisar dele para pegar algum outro objeto ou mesmo sair da sala, pois, uma vez esmigalhados, não reaparecem mais. Caso você realmente precise dele e não tenha como pegá-lo, tecle F1 antes que o elevador destrua o objeto (você perderá uma vida, mas o objeto voltará a sua posição original).
  • Enquanto o campo magnético estiver em movimento, você poderá caminhar por cima dele. Quando ele para, você pode atravessá-lo de um lado para o outro. Tome cuidado se, no momento em que estiver atravessando, o campo voltar a se movimentar, você morre.
  • A cada 10.000 pontos você ganha uma vida.

Objetos Úteis

  • O Mapa do Castelo - O mapa localiza-se na sala inicial. Quando você pegá-lo, aparecerá no alto da tela um mapa que indicará a sala onde você está e marcará as salas que já foram percorridas.
  • Poção Mágica - Ao beber a poção da garrafa verde, Rafael ganha mais uma vida.
  • Chaves - Amarela: 10 pontos, Azul Clara: 20 pontos, Verde: 50 pontos, Lilás: 100 pontos, Azul Real: 400 pontos.
  • Fada - Ao libertar a fada, você ganhará uma chave vermelha que serve para abrir a porta da sala onde a princesa é prisioneira.
  • Jóias - Barras de Ouro: 800 pontos, Anel: 400 pontos, Cruz: 200 pontos.
  • Oxigênio - Use-o para atravessar as regiões alagadas (Cuidado! A duração do ar é por tempo limitado!).
  • Raio Colorido - Ao passar por ele, você fica invisível por algum tempo (nada, nem ninguém poderá matar você).
  • Cerejas -  Se você ficar tentado a pegá-las, vá em frente, mas fique atento para não cair vários andares abaixo.
  • Barras de Ferro que Voam: Servem para transportar você de um lado para outro das salas, porém, tome cuidado para não ser atravessado por uma delas.

Os Segredos do Teclado

  • [CONTROL] - Mantendo esta tecla pressionada você poderá jogar na velocidade rápida.
  • [CONTROL]+[LGRA] - Mantendo estas duas teclas pressionadas simultaneamente, você pode jogar na velocidade ultra-rápida (É muito difícil jogar nesta velocidade, por isso procure usá-la para subir/descer os elevadores mais ráido).
  • [F1] - Ao teclar [F1], você comete suicídio e a sala volta ao estardo original, ou seja, você perde as chaves e objetos que eventualmente tenha pego.
  • [F2] - Termina o jogo.
  • [F4] - Grava o jogo (em fita cassete) no estágio em que você estiver.
  • [CONTROL]+[F3] - Ao pressionar estas duas teclas, aparecerá na tela a opção para você chamar o jogo gravado em cassete através da [F4].

As Salas Mais Difíceis

As ilustrações abaixo mostram como vencer algumas das salas mais difíceis do jogo.

Numere o mapa da esquerda para a direita e de baixo para cima de 1 até 10 para poder localizar-se.

As salas correspondentes às gravuras são: sala 6,4 (coluna, linha), sala 8,5, sala 4,7, sala 2,10.

As salas que exigem mais rapidez que astúcia são: sala 10,6, sala 3,6.















255 Vidas

Se ainda assim você tiver dificuldade para vencer todas as etapas do jogo, siga as instruções abaixo para ficar com 255 vidas.

Vá para o BASIC.

O jogo The Castle (em disco) vem dividido em dois blocos. No meu caso, o nome destes blocos é: CASTLA e CASTLB. Verifique o nome dos blocos de seu jogo e digite o seguinte programa colocando os nomes correspondentes ao seu programa, é claro.

10 BLOAD "CASTLA": POKE &H9D53, 240: DEFUSR=&HD000: PRINT USR(0): BLOAD "CASTLB",R

Após ter digitado o programa, salve-o digitando:

SAVE "CASTLINF.BAS"

De agora em diante, para jogar, basta digitar:

RUN "CASTLINF.BAS"

Caso você possua fita cassete, substitua o nome do programa por "CAS:".

Dicas

Artigo Original: CPU, Revisão: Wilson Pilon

Utilizando disco, mude o "CAS:" pelo nome do programa gravado no disco, observando a ordem de carregamento dos blocos.

Zanac II

Vidas Infinitas, Armas Infinitas
10 REM ZANAC II
20 BLOAD"zana21"
30 POKE &H96CF,0
40 DEFUSR=PEEK(&HFCC0)*256+PEEK(&HFCBF)
50 A=USR(0)
60 BLOAD"zana22",R

Back to The Future

Múltiplas Vidas
10 REM BACK TO THE FUTURE - VIDAS INFINITAS
20 BLOAD"BACKFUTU.001":POKE &H908B,255:POKE &H90C9,255
30 DEFUSR=&HD000:A=USR(0):BLOAD"BACKFUTU.002",R

The Last Mission

Múltiplas Vidas
10 REM THE LAST MISSION
20 BLOAD"lmision.001"
30 POKE &H8849,255
40 POKE &H884E,255
50 DEFUSR=PEEK(&HFCC0)*256+PEEK(&HFCBF)
60 A=USR(0)
70 BLOAD"lmision.002",R

Star Force

Sem Inimigos
10 REM STAR FORCE SEM INIMIGOS
20 BLOAD"stf1",R:POKE &H909B,0
30 DEFUSR=PEEK(&HFCC0)*256+PEEK(&HFCBF):A=USR(0)
40 BLOAD"stf2",R

Choro Q

Múltiplas Vidas

10 REM CHORO Q - VIDAS ETERNAS
20 BLOAD"choroq.001":POKE&HAD60,&HC9
30 DEFUSR=&HC800:A=USR(0)
40 BLOAD"choroq.002",R

webMSX

Download

Links

  • MSX2.ORG: Revistas CPU MSX no site WWW.MSX2.ORG.