sábado, 22 de fevereiro de 2014

Minha análise de alguns ScanConverters para MSX

Repetindo o ensaio que alguns amigos já fizeram sobre ScanConverters para o MSX (e outros micros clássicos) eu posto meus resultados com os que eu tinha em mãos para o teste.

O primeiro deles é o conversor da DTech. As fotos do aparelho ficaram horríveis e fora foco, prometo substituir por fotos melhores ainda esta semana. A entrada VGA não aceitou 15kHz, simplesmente enegreceu a tela e não deu nenhuma mensagem.




Nesta foto dá pra perceber o padrão "zebrado" ao longo do scan Horizontal na hora da conversão. Porquê isto acontece? Simples ... NTSC é 15kHz, ele expande a imagem ele faz a interpolação horizontal para 31.5kHz tirando os pontos médios por uma espécie de média dos pontos anteriores, fazendo o que parece ser uma espécie de Scanline Vertical. Problema que dependendo do que se está jogando, fica bastante incomodo. Veja algumas fotos do Twinbee e do MC (80 colunas).






O próximo aparelho que vamos ver é um conversor da Migtec de VGA para Video Composto e SVideo, ele também tem uma saísa VGA mas é BYPASS, ou seja, o que entra é exatamente o que sai. Também não aceitou os 15kHz da saída de vídeo RGB do MSX, no entanto, deu a mensagem "OUT OF RANGE".



Agora vamos ver os resultados com o Sony DSC 1024HD, que é o meu Scanconverter de bancada, verdadeiro pau-pra-toda-obra. Ele aceita os 15kHz do RGB do MSX e reconhece como sinal NTSC.



Primeiro com o modo "Aperture" desligado. É o modo de conversão rápida, o modo geralmente usado para imagens rápidas, mas em 80 colunas fica um pouco embaçado, bem menos que as fotos que fora tiradas com o celular, mas é perfeito para jogos! 




A partir daqui já temos o modo "Aperture" ligado. Perfeito para 80 colunas.










Essas duas últimas fotos com o modo "Aperture" desligado novamente. Só pra comparação.



Concluo que esses conversores chineses apesar de serem interessantes, ainda precisam de uma boa dose de capricho para suprirem nossas necessidades de qualidade. No entanto o Sony matou a pau, só que o preço não ajuda em nada!


Hora de descansar ... afinal é final de semana. Espero ter contribuído para matar mais um pouco da curiosidade dos amigos. []s

sábado, 15 de fevereiro de 2014

Estudos preliminares do ScanConverter para o MSX

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 2f é 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!