segunda-feira, 27 de outubro de 2014

Um estudo sobre o MSX Touchpad

Recentemente alguém publicou no MSX Wiki um material sobre as pranchetas digitalizadoras para o MSX. Estes periféricos nunca foram produzidos em terras tupiniquins, o que é uma pena, pois teria sido interessante ver programas como o Graphos III com suporte a ele.

O artigo, apesar de bem interessante ainda me deixou com algumas dúvidas, e resolvi esclarecê-las a partir de uma lida no código fonte da BIOS do MSX. Minhas observações podem ser vistas neste link.

Diante do esclarecido resolvi dar uma esboçada no circuito, que utiliza um DAC modelo uPD7001, velho conhecido meu, dos modulos controladores da válvula de saída das RD350 (YPVS). 


Como tinha um chip desses em minha gaveta de componentes resolvi fazer uns testes, e usar pela primeira vez em minha vida a instrução PAD(x) do MSX Basic.



Eu aproveitei para capturar algumas formas de onda, de forma a ilustrar o funcionamento da função GTPAD da BIOS.
  • O MSX faz uma primeira leitura ao Touchpad, provavelmente para "acordar" o circuito. O sinal SI, que seleciona o canal do ADC começa no valor 0.
  • Em seguida vem uma segunda leitura para determinar se a tela está pressionada ou não, e também para selecionar o canal 0 do ADC. Caso a tela não esteja sendo pressionada, a rotina termina.

Sinais SI (Laranja) e /CS (Azul) na condição "Tela NÃO Pressionada"

  • Por outro lado, caso a tela esteja pressionada o MSX faz mais 4 leituras.


Sinais SI (Laranja) e /CS (Azul) na condição "Tela PRESSIONADA"
A tela abaixo tem um pouco mais de detalhes, portanto vou recomeçar a explicação..
  • O MSX faz uma primeira leitura ao Touchpad, provavelmente para "acordar" o circuito;
  • Em seguida vem uma segunda leitura para determinar se a tela está pressionada ou não, e também para selecionar o canal 0 do ADC;
  • A terceira leitura é a do valor X0. Enquanto esta leitura acontece, o sinal SI fica em "1" para selecionar o canal 3 para a próxima leitura;
  • Em seguida o valor de Y0 é lido com o sinal SI em zero, para selecionar o canal 0 para a próxima leitura;
  • O MSX lê então o valor de X1 e coloca SI em "1" para a próxima leitura;
  • Por último o valor de Y1 é lido e os sinais retornam ao estado normal. (faltou o "CH0" em vermelho ali na figura). 

Sinais SI (Laranja) e /CS (Azul) na condição "Tela PRESSIONADA", detalhes.
Abaixo uma foto da tela do osciloscópio (porque estas capturas são muito feinhas).



Alguns detalhes importantes:
  • O processo de leitura dura por volta de 8ms.
  • O ciclo de clock gerado pelo MSX dura 140us.
  • O sinal de clock no código fonte parece estar invertido. O texto fala que está no estado "0" quando seta um bit, e vice versa. Talvez exista um inversor entre o sinal SCK do MSX e o mesmo sinal do uPD7001. De qualquer modo o circuito funcionou deste jeito.
  • O texto do MSX Wiki fala de um inversor entre o sinal /EOC do uPD7001 e o MSX, mas eu suspeito que no circuito real exista um flip flop que é ativado pelo sinal /CS e resetado pelo sinal EOC do ADC.





Nenhum comentário: