O cartão de 80 colunas da DDX – parte 2

ddx80-2_abertura

Dando sequência às minhas experiências com o cartão de 80 colunas DDX80 com uma correção pois na primeira parte afirmei que a memória de vídeo estava entre os endereços 0x6000 e 0x67ff e isto está errado¹ pois ela encontra-se entre os endereços 0x7000 e 0x77ff — os endereços de acesso aos registradores estão corretos, o 0x6000 para índice e 0x6001 para o valor.

Aliás, ao confirmar estes valores, acabei constatando uma “curiosa” diferença que torna DDX80 e VMX-80 incompatíveis entre si, pois o adaptador da Microsol tem a memória entre os endereços 0x6000 e 0x67ff e o acesso aos registradores do MC6845 é feito pelos endereços 0x7000 e 0x7001.

Ou seja… “Posso copiar seu trabalho? Pode mas não faz igual”… 😀

(¹) Aproveitei para corrigir também lá.

DDX80reg

Então, conforme o prometido, escrevi uma ferramenta bem simples para permitir a alteração dos registradores do MC6845, o DDX80reg. Ele foi escrito em MSX-BASIC com algumas partes em assembly e permite alterar livremente os 16 registradores do integrado (na verdade são 18 mas os dois últimos são utilizados para interface com canetas ópticas). E para utilizá-lo é necessário ter dois monitores conectados ao MSX, um para visualizar a imagem que sai do cartão de 80 colunas — a tabela ASCII replicada indefinidamente — e outro na saída de video normal do computador para visualizar a tela principal do programa.


O DDX80reg está disponível em um repositório que criei no GitHub para armazenar as ferramentas que vão sendo desenvolvidas — além de uma cópia das ROM que extraí tanto das minhas DDX80 como VMX-80.

Um detalhe, antes de executar o programa, ajuste a linha 20 do programa em MSX-BASIC, com o valor correspondente do slot onde a interface está conectada:

20 POKE &H9022,«valor»:I%=USR1(0) OR USR4(0):R%=0.

Por padrão deixei o segundo slot, o 2 e especificamente no caso dos modelos 1.0 e 1.1 do Expert (cinza) deve-se usar 3.

Novos modos de vídeo

Com alguns ajustes pequenos nos registradores é possível obter uma modo texto de 84 colunas × 27 linhas.

ddx80-2_texto_84x27.png

Ou então, habilitando o modo entrelaçado para obter 80 colunas × 50 linhas!

ddx80-2_texto_80x50i.png

Infelizmente, como o DDX80 possui apenas 2KiB de RAM, a segunda metade da tela acaba sendo uma cópia da primeira.

Cursor

Diferente do MSX que implementa o cursor do modo texto por software — é utilizado o caractere ASCII 255 que recebe uma cópia invertida do caractere que ele sobrepõe — no MC6845 ele é implementado diretamente via hardware como um elemento que pode ser posicionado em qualquer endereço da memória de vídeo através dos registradores #14 e #15 e automaticamente invertendo o caractere naquela posição. Outra coisa interessante é que ele pode ter seu tamanho (onde ele começa e onde ele termina) e a frequência com que pisca ajustado através dos registradores #10 e #11.

Algo parecido é feito com a tabela BLINK do V9938 e do V9958 que permite que certas posições do modo texto de 80 colunas possam ter uma segunda combinação de cores e também a capacidade de piscar em uma certa frequência.

Próximos passos

Ainda não aprendi como ajustá-lo para obter um modo de vídeo de 40 colunas (que tal 64?) e pelo visto exigirá isto exigirá um pouco mais de leitura da documentação do MC6845. E além disso há ainda um outro mistério para resolver! Como alternar a tabela de caracteres ou mesmo inverter o vídeo sem recorrer aos comandos CALL ou às combinações de tecla que a ROM configura durante a inicialização?

Até!