quarta-feira, maio 17, 2023

MSX: Revista MicroSistemas 54

Neste número: Comandos Gráficos no MSX

Comandos Gráficos no MSX

Artigo Original: Oscar Burd e Luiz Sérgio Moreira, Digitação: Wilson Pilon

Nesta edição, MSX traz mais um artigo sobre o padrão MSX. Conheça agora as características e comandos gráficos desses equipamentos.

A família MSX possui quatro tipos de telas: duas para texto e duas para gráficos. As chamadas telas gráficas podem ser de baixa ou alta resolução, apresentando as seguintes características:

  • Tela gráfica de baixa resolução (ou multicolor): Divide-se em 64 colunas e 48 linhas, sendo possível a utilização de 16 cores simultaneamente.
  • Tela gráfica de alta resolução: É composta por 192 linhas e 256 colunas. Neste tipo de tela também é possível a utilização de 16 cores simultaneamente.

Agora, torna-se necessário o conhecimento dos comandos gráficos do MSX-BASIC, o que veremos a seguir: o comando SCREEN seleciona a tela gráfica, SCREEN 2 habilita a tela gráfica de alta resolução e SCREEN 3, a tela gráfica multicolor.

Como já dissemos, existem 16 cores disponíveis, as quais são selecionadas pelo comando COLOR. Este comando possui três parâmetros (separados por vírgulas) com a sintaxe COLOR x,y,z, onde:

  • x é a cor com a qual serão traçados os desenhos, exceto no caso em que outra cor é especificada dentro de outros comandos gráficos do MSX-BASIC
  • y é a cor do fundo, ou seja, a cor sobre a qual o desenho será criado (imagine uma tela de pintura: y é a cor desta tela e x é a da tinta com a qual você pintará)
  • z é a cor da borda ou moldura da tela (equivale à cor da moldura de um quadro - lembre-se que não podemos pintar sobre a moldura).

x,y,x variam de 0 a 15, de acordo com a tabela de correspondência número cor que foi apresentada no artigo "O Padrão MSX", publicado em MS No 43. Veja o exemplo.


10 SCREEN 2
20 COLOR 15,4,9
30 GOTO 30

O programa seleciona a tela de alta resolução na linha 10, faz a cor de pintura ser branca (15), a cor de fundo azul escura (4) e a borda vermelha (9). Todo esse processo ocorre na linha 20 (observe a figura 1). A linha 30 mantém ligada a tela de alta resolução, uma vez que o padrão MSX volta automaticamente para a tela de texto quando um programa é encerrado.

Traçando Linhas e Figuras

O comando LINE permite o traçado de segmentos de retas na cor estabelecida pelo comando COLOR ou atribuída no próprio comando LINE. Sua sintaxe é LINE(xi,yi)-(xf,yf),c, onde:

  • xi, yi é  a coordenada cartesiana a partir da qual será traçada a reta
  • xf,yf é a coordenada cartesiana final da reta

c é o parâmetro que indica a cor na qual será traçada a reta (opcional). Caso este parâmetro seja omitido, será utilizada a cor definida por COLOR. Isto também é válido para o parâmetro cor de todos os outos comandos gráficos (exceto no comando DRAW). Veja um exemplo.


10 SCREEN 2
20 LINE (0,0)-(255,191),7
30 GOTO 30

O programa acima desenha, na linha 20, uma reta da coordenada (0,0) até a coordenada (255,191) em cor azul clara (7). As demais linhas já foram descritas no exemplo anterior. Veja na fira 2 o resultado da execução do programa.

Caso desejássemos traçar outra linha a partir do nosso ponto final (coordenada 255,191), teríamos de acrescentar a linha 25 line - (127,10),13. Esta linha será traçada em cor roxa (13), a partir do ponto (255,191) até o ponto (127,10). Confira na listagem 3.

Abaixo pode ser visto o resultado da execução deste programa.


10 SCREEN 2
20 LINE (0,0)-(255,191),7
25 LINE -(127,10),13
30 GOTO 30

O comando LINE também permite o traçado de retângulos, bastando para tal acrescentar o parâmetro B (do inglês box) no final do comando. Para um retângulo entre as coordenadas (50,50) e (100,90), na cor verde clara (3), teríamos.


10 SCREEN 2
20 LINE (50,50)-(100,90),3,B
30 GOTO 30

Para desenhar o retângulo preenchido, basta escrever BF no lugar de B na linha 20.

Com o comando CIRCLE podemos traçar circunferências ou elipses (circuferências achatadas), sendo sua sintaxe CIRCLE (x,y),r,c,ai,af,as, onde:

  • x,y é a coordenada do centro
  • r é o raio (maior) da figura a ser criada
  • C é a cor da figura (opcional)
  • ai é o angulo inicial (em radianos)
  • af é o angulo final (em radianos)
  • as é o aspectro da figura.

O programa abaixo desenha uma circunferência com centro em (127,95), raio 100 e cor vermelha (9).


10 SCREEN 2
20 CIRCLE (127,95),100,9
30 GOTO 30

Os parâmetros ai, af e as (opcionais) serão tratados detalhadamente em outro artigo. Para aqueles que são curiosos, passamos um programa que utiliza o parâmetro as, veja a listagem abaixo

10 SCREEN 2
20 FOR I = .2 TO 2 STEP .2
30 CIRCLE (127,95),100,9,,,I
40 NEXT
50 GOTO 50

Além dos comandos anteriores, o MSX-BASIC contém uma macrolinguagem de desenho que também permite a geração de figuras baseadas em segmentos de retas. Com o uso desta macrolinguagem, pode-se rotacionar e ampliar as figuras criadas. Toda essa linguagem é acessada através do comando DRAW, e seu macrocomandos estão relacionados na figura abaixo.

  • Un Move para cima n pontos
  • Dn Move para baixo n pontos
  • Ln Move para a esquerda n pontos
  • Rn Move para a direita n pontos
  • En Move diagonalmente n pontos
  • Fn Move diagonalmente n pontos
  • Gn Move diagonalmente n pontos
  • Hn Move diagonalmente n pontos
  • M x,y Move de forma relativa ou absoluta. Se x tem o sinal (+) ou (-) à sua frente, o movimento será relativo
  • B Move sem acender nenhum ponto
  • N Move, mas retorna ao ponto inicial
  • An Ângulo de rotação, onde n vale 0, 1, 2 ou 3
  • Cn Muda cor, onde n varia de 0 até 15
  • Sn Altera o fator de escala n de 0 até 255 (default=4), o BASIC divide n por 4.
  • Xn$ Executa o conteúdo de um cordão (exemplo: l$="u20r20u20" : draw "X l$;")

O comando PAINT permite o preenchimento de figuras complexas e fechadas. Sua sintaxe é PAINT (x,y),c, onde:

  • x, y é a coordenada dentro da figura a ser pintada
  • c é a cor escolhida para o preenchimento da figura. Em alta resolução, esta cor deve ser a mesma que a da figura a ser preenchida.

O programa abaixo, desenha e preenche uma circunferência com a cor amarela (11).

10 SCREEN 2
20 CIRCLE (100,100),60,11
30 PAINT (100,100),11
40 GOTO 40

Os Famosos Sprites

Sem dúvida, uma das estrelas do padrão MSX são os sprites. Virtualmente, as telas gráficas do smicros desta família (e uma das telas texto) são compostas por 32 planos sobrepostos (você pode imaginar 32 folhas de plástico sobrepostas) nos quais podemos movimentar pequenas figuras chamadas sprites.

O MSX-BASIC permite que sejam criadas até 256 destas figuras, e cada uma pode ter uma das 16 cores disponíveis. O mais interessante de tudo é que um sprite situado no primeiro plano passará sobre os sprites localizados nos planos inferiores, criando assim um efeito de perspectiva. Cabe notar que podemos colocar um mesmo sprite em planos distintos, cada qual com u ma cor diferente.

É muito simples a criação de um sprite tendo-se em vista seu formato matricial e as facilidades oferecidas pelo MSX-BASIC. O programa abaixo cria o sprite de um quadrado e movimenta-o através da tela da esquerda para direita no plano 0 e de cima para baixo no plano 1.

10 SCREEN 2,0
15 REM DEFINE SPRITE
20 A$= CHR$(&B11111111)
30 B$= CHR$(&B10000001)
40 C$= CHR$(&B10000001)
50 D$= CHR$(&B10000001)
60 E$= CHR$(&B10000001)
70 F$= CHR$(&B10000001)
80 G$= CHR$(&B10000001)
90 H$= CHR$(&B11111111)
100 SPRITE$(0)=A$+B4$+C$+D$+E$+F$+G$+H$
110 REM
111 REM MOVIMENTO
112 FOR I=0 TO 191
113 PUTSPRITE 0,(I,95),9,0
114 PUTSPRITE 1,(127,I),7,0
140 NEXT
150 GOTO 110

Finalizando este tópico, lembramos que o MSX-BASIC possui comandos especiais para o tratamento de colisão de sprites, os quais são muito úteis na elaboração de jogos e animações.

Uma outra facilidade oferecida pelo MSX-BASIC é a simplicidade com que podemos escrever em modo gráfico. Por exemplo, se quisermos escrever em resolução alta, devemos, em primeiro lugar, abrir a tela gráfica como um arquivo através do comando OPEN. A seguir, podemos especificar a coordenada, a partir da qual nosso texto será impresso com o comando PRESET e, por fim, descrevemos o texto, utilizando o comando PRINT #.

No programa abaixo, imprimimos MICRO SISTEMAS em cor verde clara na coordenada (99,99).

Esperamos ter passado uma ideia básica sobre os recursos gráficos da família MSX e lembramos, ainda, que no próximo artigo discutiremos outros comandos do MSX-BASIC.

WebMSX

OpenMSX