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.
Ou então, habilitando o modo entrelaçado para obter 80 colunas × 50 linhas!
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é!