Depois de muito ver o sofrimento da comunidade de MSX e outras que faço parte, em busca de monitores que aceitem 15kHz, resolvi dar um fim a essa penúria, até porquê eu mesmo passo por ela apesar de utilizar um Scan Converter comercial, o Sony DSC 1024HD e ter um monitor RGB da Sony. Na verdade estou bem satisfeito com esses dois, no entanto, para ter o gostinho do desafio comecei a estudar uma forma de construir um Scan Converter voltado para nossos queridos microcomputadores com suas emblemáticas saídas RGB a 15kHz, e acima de tudo contribuir com a comunidade retrocomputacional.
Pois bem, a maioria dos monitores como todos sabem não aceitam a taxa de frequência de 15kHz e somente a partir de 31,5kHz, que seria o equivalente a um VGA 640x480x16cores. Considerando isto, estudo uma forma de transformar uma saída RGB 15kHz em um RGB 31,5kHz compatível com o padrão VGA, o que de imediato transformaria praticamente qualquer monitor atual em um monitor utilizável com os nossos tesouros retrocomputacionais.
O ponto chave é primeiro entendermos como funciona o vídeo a 15kHz dos micros.
Pois bem, vamos utilizar como foco o MSX, que é além de minha paixão, é um micro que tem uma comunidade bem ativa e que participa opinando e dando sugestões.
Não vamos entrar neste momento em questões de pinagem de saídas, somente vamos falar dos sinais, de seu comportamento e funcionamento para gerar a imagem.
Vejam a figura 1 abaixo:
A imagem gerada pelo VDP do MSX é amostrada nas três cores básicas do espectro R,G e B, que são as cores básicas, Red, Green e Blue ou em português Vermelho, Verde e Azul. Vejam figura 2 abaixo:
Notem nesta figura que temos demarcada a área de visualização do espectro de cores que nosso olho é capaz de diferenciar as tonalidades (triângulo), faltando somente neste exemplo a intensidade, ou seja, mostra somente a imagem em 2D, para termos o 3D falta a intensidade e assim temos o que chamamos de cubo de cores. Não vamos nos aprofundar aqui neste assunto, quem quiser mais informações procurem por cubo de cores no Google.
Pois bem, voltando a figura 1, vemos que a imagem gerada pelo MSX tem as 3 cores básicas e mais um sinal chamado CSync, ou Composite Sync, que traduzindo seria Sincronismo Composto.
Mas, o que vem a ser esse Sincronismo Composto?
Vamos observar mais uma figura para entendermos como é formada a imagem de um monitor, apresento a figura 3:
Conseguimos agora identificar que temos dois sinais básicos que compõem o sinal CSync, que são HSync e o VSync, ou seja, Sincronismo Horizontal e Sincronismo Vertical. E por definição podemos dizer que CSync é a soma de HSync mais VSync.
A imagem é formada nos monitores RGB (Sem contar entrelaçamento, que não é o caso dos nossos micros), Da esquerda para a direita, de cima para baixo, ou seja, a ordem que os pixels são pintados na tela. (Vejam traço em amarelo na figura 3).
Os pixels que são pintados na tela, são enviados pelo VDP uma linha por vez e acontecem entre um pulso e outro do Sincronismo Horizontal, ou seja, uma linha compreende todos os pixels que são enviados até o próximo pulso de Sincronismo Horizontal.
O Sincronismo Vertical, serve para informar ao circuito de formação de imagem do monitor que inicia-se uma nova imagem, ou seja, é o sinal para informar que o cursor deverá subir para a posição inicial da tela (canto superior esquerdo), quando começarão a ser contadas novamente as linhas do Sincronismo Horizontal.
Aí vocês me perguntam:
-Tá bom, mas o e tal do CSync?
Agora é a hora que começa a ficar mais interessante o nosso artigo, vamos começar a ver os sinais na prática.
Colocando um Osciloscópio para medir o sinal do CSync, poderemos observar esses dois sinais de forma composta, vamos as imagens, vide figura 4 e uma foto da aquisição dos dados:
O sinal em Amarelo (Canal 1 na foto) é o CSync puro saindo do VDP do MSX ... e o sinal em Ciano (Canal 2) é o sinal do VSync depois de separado pelo LM1881 (Vamos falar sobre ele jajá!).
Notem que no sinal CSync podemos separar os sinais visualmente ... lendo o sinal Amarelo da esquerda pra direita podemos ver na primeira parte o click de 15kHz que é dado justamente pelo sinal do HSync, ou seja cada vez que sinal baixa do nível lógico 1 (Sinal na parte de cima, ou no caso de sinal de vídeo 1Vpp) para o nível lógico 0, é um final de linha, o tempo que temos entre um nível lógico e outro é exatamente o tempo que o VDP do MSX tem para enviar as informações RGB que compõem a linha.
Num determinado momento (vendo agora a parte dois do sinal do CSync) notamos que é invertida a fase, ou seja, os frames continuam sendo transmitidos, no entanto o que era nível lógico 1 passa a ser nível lógico 0, ou seja, começa aí a marcação de frame, ou seja, é aí que o VDP informa para o monitor que ele deve mandar o cursor para a posição 0,0 do CRT, ou seja, ele deve iniciar uma nova tela. Note que são transmitidos aproximadamente 6 frames neste intervalo.
Vamos entender agora o trabalho do LM1881 (Vejam a figura 1 novamente).
Basicamente o que ele faz é separar o sinal de Sincronismo Vertical do sinal de Sincronismo Composto, traduzindo:
- Alguns monitores não aceitam o sinal de Sincronismo Composto e necessitam do sinal de Sincronismo Vertical para saber quando se inicia um novo frame ou tela. Por isso precisamos do LM1881 em alguns casos.
Pela visualização do canal 2 do osciloscópio dá pra ver claramente a separação do sinal de Sincronismo Vertical.
Vamos ver agora um pouco sobre as amplitudes e frequências de sinal, isso é muito importante entender se estamos querendo construir uma lógica para ler os sinais de sincronismo do VDP.
Agora temos os dois sinais tirados da saída do LM1881, notem a limpeza do sinal após a normalização do mesmo, note também a diferença de amplitude, salientando que no Canal 1 em Amarelo temos o sinal de HSync. Que se observar atentamente, é o sinal de CSync normalizado, não há praticamente diferença entre os dois.
A Amplitude do sinal VSync está em 3.76V com um delta de 2.88V, note que o sinal atende o limiar de lógica TTL perfeitamente, que é algo por volta de 3.02V ... acima disso podemos considerar tranquilamente nivel lógico alto ou 1 para circuitos alimentados por 3.3V.
Nesta outra imagem, medimos a amplitude do HSync, mostrando um delta ainda mais acentuado e uma definição ainda melhor de nível lógico, por volta de 3.84V, mais uma vez, perfeito para lógica de circuitos em 3.3V.
Uma outra nota, que vale salientar é que muitos monitores aceitam o CSync diretamente no pino HSync do conector HD15 do VGA, no entanto a maioria dos que aceitam isso não reconhecem esse sinal em 1Vpp, como o VDP geral, necessitando de uma normalização, que é o caso do meu DSC 1024HD. Teoricamente bastaria um amplificador com um transistor de uso geral para resolver o problema, mas podemos usar a caixinha com o LM1881, assim o mesmo servira para usar com outros monitores.
Aqui o trabalho começa a ficar sério e começamos a verificar os detalhes dessa transmissão de dados.
Notem que o tempo transcorrido na linha HSync (Canal 1) para informar o nível lógico 0 no caso da Sincronização vertical é de 192uS (microSegundos), vejam a marcação no osciloscópio no deltaT.
Vemos agora a medição do deltaT no VSync, que é de 164uS.
Ampliando a onda um pouco, temos o delay de inicio que o LM1881 leva para reconhecer que começou o nível lógico 0 no VSync e mudar o estado do mesmo, esse tempo é de 27uS. Em outras palavras podemos afirmar que este tempo de 27uS é irrelevante para o funcionamento nos monitores que utilizando HSync e VSync.
Aqui nós medimos o clock para visualizar que o mesmo, dobra a frequência quando estamos visualizando o VSync, isto serve para informar ao monitor que frequência de identificação de sincronização vertical é igual do dobro da frequência nominal do sistema quando em sincronização horizontal ou seja:
v=Sincronização Vertical
h=Sincronização Horinzontal
f=Frequencia Nominal do Sistema
v=1 → f=2f , ~h
Continuando nossa análise, temos agora a medida de tempo entre o início do dobro do clock, até o final do dobro do clock, o que sinaliza pelo HSync o inicio e o final do VSync, este tempo é de 580uS.
Analisando este pedaço dos sinais temos mais um pouco de teoria e o nome de cada um desses trechos do sinal, acompanhem a figura:
Front Porch e o Back Porch sinalizam para o processador do monitor quando acontecerá um pulso de sincronização.
O Front Porch do pulso de Sincronismo Vertical tem a duração de 188uS.
O Back Porch do pulso de Sincronismo Vertical tem a duração de 192uS.
O pulso 2f descrito anteriormente tem a duração de de 35uS, o que resultou numa frequência de 28.57kHz nesta amostragem.
O pulso f descrito também acima, tem a duração de 63uS, o que resulta em 15.87kHz, que é exatamente nossa taxa de frequência de atualização horizontal. Em outras palavras neste intervalo é que devemos enviar todos os pixels de uma linha.
A duração do pulso de que marca 2
f é de 2.4uS.
A duração do pulso de que marca
f é de 5.2uS.
Agora vamos nos atentar ao sinal de Sincronização Horizontal ou HSync, visualizando juntamente um dos canais de cor. Eu escolhi o canal azul, mas poderíamos escolher qualquer um dos outros dois (verde ou vermelho). A escolha pelo canal azul, foi pelo fato de a tela padrão do MSX ser de fundo azul, o que facilitaria para mostrarmos uma linha preenchida sem eu ter de gerar qualquer tipo de imagem diferente.
O Canal 1 do osciloscópio continuou no HSync, enquanto mudei o Canal 2 para o azul.
Nesta primeira imagem já podemos ver claramente 4 linhas, 3 pulsos de HSync divindo cada uma delas e a modulação de azul em nível alto, causado pelo fundo totalmente azul mostrado nas fotos.
Para validarmos esse pulso de modulação, eu fiz uma tela metade azul e metade preta para podermos visualizar a modulação de uma forma mais "marcante".
Vejam a foto da tela, e a linha modulada logo em seguida em mais uma captura de tela do osciloscópio.
Conseguimos observar claramente metade da linha em preto, ou nível baixo na captura do osciloscópio e a metade azul, ou nível alta na captura. Com isso é possível entender a modulação do vídeo no canal B, ou azul.
Agora para vermos os detalhes da modulação, vamos ampliar e centralizar somente uma linha de vídeo.
Notem que o tempo de vídeo juntamente com o pulso de Sincronização Horizontal, tem algumas diferenças de tempo, vamos ampliar agora somente o pulso e entender como funcionam os intervalos na Sincronização Horizontal, análogo ao que vimos na Sincronização Vertical.
Notem que temos os sinais muito parecidos com o VSync. Com suas "introduções" do pulso. Vejam diagrama abaixo.
Agora que ficou claro todos os intervalos, vamos medir suas temporizações.
O tempo que a modulação baixa para nível 0 é de 10.8uS.
O Front Porch é da ordem de 1.4uS.
O período do pulso de sincronização é de 4.8uS.
O Back Porch tem um tempo de 4.6uS.
O tempo de modulação de imagem é de 52.4uS.
É neste intervalo que devemos enviar os pixels horizontais da linha, formando assim a imagem como queremos, modulando em conjunto os canais R, G e B.
E aqui mostro pra vocês um pouco da minha bagunça, escrevendo e capturando as imagens com as medidas deste artigo.
Nos próximos artigos vamos falar sobre as conclusões destas medições e de uma proposta eletrônica para realizar a tarefa de conversão de 15.5kHz para 31.5kHz.
Por hoje é só pessoal!