MSX: As sete faces da SCREEN 1 (parte 2)

Beware, Alive 9 is going to scare you!E agora entramos na segunda parte, prometo que esta será bem menos teórica e um pouco mais prática (apesar de não ter tantos programinhas). O camarada aqui ao lado ilustra a nona edição da revista em disquete Alive para computadores Atari ST e, a princípio, ele não tem relação alguma com MSX e muito menos com o TMS-9918.

E, então, o que esta imagem faz aqui? Simples, ela foi minha cobaia!

ATENÇÃO:
Acrescentei uma imagem de disco contendo os programas desta parte e da anterior.

Apresentando o Dr. Lao!

E agora chegamos, finalmente, às sete faces, que na verdade são pouco mais do que sete. Por conta de uma dúvida do Emiliano Fraga (este artigo inteiro é por culpa dele, não minha), resolvi consultar novamente o datasheet do integrado para tentar entender como o treco funciona, acabei fuçando e experimentando alguns valores lá e o resultado foi a descoberta de que as tabelas de padrões e de atributos podem funcionar não de duas mas sim de quatro formas diferentes e que ainda podem ser combinadas para produzir dezesseis modos diferentes daquela SCREEN 1 que conhecemos. E como faz? Assim:

VDP(0)=VDP(0)OR2
VDP(1)=VDP(1)AND&HE7
VDP(3)={I}
VDP(4)={J}

O truque é bem simples, nos registradores 0 e 1 do VDP colocamos o valor correspondente à SCREEN 2 (ou seja, mudamos o modo da tela para o VDP nas esquecemos propositalmente de avisar ao interpretador BASIC) e depois alteramos os tamanhos das tabelas de padrões e de atributos mexendo, respectivamente, nos registradores 4 e 3. Os valores para I e J vão variar de acordo com uma tabela no datasheet do 9918 (páginas 2-8 a 2-10) e após fazer meus testes acabei chegando nas seguintes configurações possíveis para tabelas de padrões e de atributos:

Na tabela de padrões (a nomenclatura é minha e os números entre parênteses são os endereços da VRAM utilizados):

  • MODO A — &H0 : Uma tabela de padrões (0..2047) que se repete nos três terços da tela — funciona como a SCREEN 1 convencional;
  • MODO B — &H1 : Duas tabelas de padrões, uma (0…2047) no primeiro e terceiro terços de tela e a outra (2048..4095) no segundo terço;
  • MODO C — &H2 : Duas tabelas de padrões, uma (0..2047) ocupando os dois primeiros terços e outra (4096..6143) ocupando o último terço e
  • MODO D — &H3 : Três tabelas de padrões com cada uma delas (0..2047, 2048..4095 e 4096..6143) ocupando um terço da tela — como na SCREEN 2.

E este mesmo comportamento se repete na tabela de atributos (mais uma vez a nomenclatura é minha):

  • MODO 0 — &H8F : Uma tabela de atributos (8192..10239) que se repete nos três terços da tela;
  • MODO 1 — &HAF : Duas tabelas de atributos, uma (8192..10239) no primeiro e terceiro terços de tela e a outra (10240..12287) no segundo terço;
  • MODO 2 — &HCF : Duas tabelas de atributos, uma (8192..10239) ocupando os dois primeiros terços e outra (12288..14335) ocupando o último terço e
  • MODO 3 — &HEF : Três tabelas de atributos com cada uma delas (8192..10239, 10240..12287 e 12288..14435) ocupando um terço da tela — como na SCREEN 2.

Também é possível ter algo parecido com uma tabela de padrões de 32 bytes mas preferi, por enquanto, desconsiderá-las.

Visualizando

É claro que eu precisava ter uma forma de ver como realmente estas novas telas se comportavam, então resolvi procurar alguma imagem legal para ocupar a VRAM, ou seja, acabou sendo nosso amigo aí de cima. Peguei a imagem, ajustei, converti para um formato adequado, salvei em BMP e importei no MSX. E no final ele ficou assim:

Alive9

Aí foi fazer um padrão de cores qualquer que ajudasse a identificar facilmente cada um dos terços da tela; vermelho para o primeiro, um verde para o segundo e um azul para o terceiro:

Alive9_rgb

Depois foi a vez de exibir cada uma das configurações possíveis, montei um programinha (ver mais abaixo) bem besta para tal e o final eis as dezesseis novas formas de ver a SCREEN 1 (de novo, a nomenclatura é minha):

Alive9_variations

Confesso que os modos A0 e D3 eram velhos conhecidos, estavam lá no PRINT-X-PRESS, mas me surpreendi em descobrir que havia muita coisa no meio do caminho. Estou deixando disponível o programa que utilizei (ZIP|DSK) Basta carregá-lo direto no BASIC, ele entra direto no modo D3 e a operação é simples:

  • Use as setas <←> e <→> para alternar entre os modos da tabela de atributos (os números);
  • Es setas <↑> e <↓> para fazer o mesmo na tabela de padrões (as letras);
  • Com <ESC> você sai e exibe os últimos valores para os registradores 3 e 4 na tela e
  • Pressionando <CTRL>+<STOP> pra interromper o programa e cair na SCREEN 1 do jeito em que ela se encontra (altamente recomendável).

Concluindo (por enquanto)

E antes que eu me esqueça, tudo isto que eu escrevi na primeira parte se aplica também para a SCREEN 4, dos MSX2 e superiores, mas os daqui não (creio que precisarei dar uma olhada também no datasheet do 9938) para entender o motivo. E, claro, espero que estas várias linhas tenham servido para matar um pouco a curiosidade sobre os modos de vídeo do MSX, sobre como subverter o 9918 e, claro, ajudado a dar o empurrão que faltava (“Poxa! É assim que faz?”) para algum projeto engavetado ou em vias de ser.

E que venha a terceira parte! Sim, Virgínia, haverá uma terceira parte…

Sobre Giovanni Nunes

Giovanni Nunes (anteriormente conhecido como “O Quinto Elemento”) é uma das mentes em baixa resolução que compõem o Governo de Retrópolis, responsável pela identidade visual de todas as facetas do nosso Império Midiático.

0 pensou em “MSX: As sete faces da SCREEN 1 (parte 2)

  1. Tudo se explica facilmente quando você percebe que o vdp não tem ULA. Para calcular o endereço de leitura dos bytes na vram ele faz and dos registros, ai os modos híbridos aparecem sempre que você colocar 0 em um lugar que o datasheet manda por 1.

  2. Repito aqui o comentári odo FB: este artigo está ÓTIMO. Parabéns mesmo, não apenas elucidou minhas dúvidas mas agregou ainda mais informação.

    Aguardo a parte 3, 4 etc. Valeu!

  3. Opa! Uma pergunta aos universitários:

    Mesmo no modo de vídeo mais simples, digamos A3, temos um diferencial que é a possibilidade de usar atributos por caractere, ao contrário do padrão SCR1 que é o mesmo atributo a cada 8 caracteres.

    Contudo, o modo D3 é bem completo, creio idêntico ao SCR2.

    Mas qual a vantagem deste D3 para o modo padrão do SCR2? Ou no final das contas temos que D3 É SCR2?

    1. Vamos lá, na A0 você já tem esta possibilidade (é onde o RETROMANIA roda) mas na A3 você pode “pintar” cada terço da tela de uma forma diferente e foi justamente o modo em que eu (enfatizando,eu) encontrei menos utilidade. Ao contrário da D0 onde você pode fazer uma espécie de KNIGHTMARE onde a perspectiva das colunas vai mudando (inclinada para cima, reta e inclinada para baixo) conforme a tela vai rolando.

      Na D3, que é a própria SCR2, você consome 14KB dos 16KB de VRAM que o 9918 tem, lembre-se que para cada tabela gasta-se 2KB. E qualquer pedaço de VRAM que se consegue economizar dá para usar como buffer e pegando um exemplo utilizando a A0 você ganha uns 8KB/10KB (2 blocos contínuos de 4Kb ou 1 bloco de 4KB e outro de 6Kb se não for usar sprites) que, em um computador que libera, 24KB pro BASIC é bastante coisa!

  4. Curiosidade: Conheço os modos, mas alguém sabm se funcionam no VDP T6950 da Toshiba, e no Toshibão T7937A dos Expert *Plus?