As sete faces da SCREEN1 – parte 2

sete_faces-2_abertura

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 acima 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!

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) OR 2
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 TMS-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 — 0x0 : Uma tabela de padrões (0–2.047) que se repete nos três terços da tela — funciona como a SCREEN 1 convencional;
  • MODO B — 0x1 : Duas tabelas de padrões, uma (0–2.047) no primeiro e terceiro terços de tela e a outra (2.048–4.095) no segundo terço;
  • MODO C — 0x2 : Duas tabelas de padrões, uma (0–2.047) ocupando os dois primeiros terços e outra (4.096–6.143) ocupando o último terço e
  • MODO D — 0x3 : Três tabelas de padrões com cada uma delas (0–2.047, 2.048–4.095 e 4.096–6.143) 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 — 0x8F : Uma tabela de atributos (8.192–10.239) que se repete nos três terços da tela;
  • MODO 1 — 0xAF : Duas tabelas de atributos, uma (8.192–10.239) no primeiro e terceiro terços de tela e a outra (10.240–12.287) no segundo terço;
  • MODO 2 — 0xCF : Duas tabelas de atributos, uma (8192–10.239) ocupando os dois primeiros terços e outra (12.288–14.335) ocupando o último terço e
  • MODO 3 — 0xEF : Três tabelas de atributos com cada uma delas (8.192..10.239, 10.240–12.287 e 12.288–14.435) 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á-la.

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:

sete_faces-2_mono

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:

sete_faces-2_color

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):

sete_faces-2_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 você sai e exibe os últimos valores para os registradores 3 e 4 na tela e
  • Pressionando «Control»+«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 V9938) 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 TMS-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…


Texto originalmente publicado no Retrocomputaria em 09 de abril de 2013.

Anúncios