Adaptador de teclado PS/2 para MSX


O teclado do Expert é um lixo. E o do Hotbit nao fica muito atras. Infelizmente as opcoes para quem tem um teclado de expert bichado sempre foram gambiarras, ou comprar outro teclado. E nao sai barato, só porque é especifico do MSX. Pensando nisso comecei este projeto, de uma interface de teclado para MSX.

O teclado do MSX é bastante simples. Basicamente voce tem uma matriz de 8 x 10 (sim, 80 teclas) que é scaneada de tempos em tempos. Do lado do MSX temos a famosa PPI 8255 fazendo esta função. 4 pinos da porta C enviam o numero da linha em binario para o teclado e 8 pinos da porta B recebem a tecla pressionada. Queira por favor baixar o esquema do teclado >>aqui<<, e observar como funciona. Abaixo, o esquema da PPI.

Ate entao, nao tinha nenhuma referencia tecnica mostrando COMO o MSX scaneia o teclado. Pelo circuito observa-se que é algo extremamente simples (um contador binario contando de 0000b a 1010b, ou seja, de 0 a 10. O 74LS145 decodifica as linhas de 0 a 9, habilitando-as para leitura pela porta B da PPI. 

 É muito interessante notar que o "default" da linha de teclado é 1010b. Isso porque 1010b é 10 em decimal, seria a 11a linha de teclado, que nao existe. Desta forma a 11a linha é considerado o "repouso" do teclado.

Um emulador de teclado meramente contaria o sinal das linhas enviado pela PPI e enviaria as "colunas" corretas de acordo com a leitura. Para acertar a temporizacao desse processo (que é um tanto critico) eu pendurei o analisador logico no MSX para ver o que a PPI cospe, veja abaixo uma foto de como se conecta o cabo medusa a PPI.

 

Analisador conectado, temos o seguinte resultado:

Nesta imagem podemos ver os pinos 14, 15, 16 e 17 da PPI (Lab1-0 a Lab1-3) saindo de seu estado de repouso, começando a contagem em 0000b e retornando ao final ao estado de repouso (1010b). A linha pontilhada vermelha é o disparo do analisador (inicia a leitura quando o barramento for igual a 0000b) e as linhas verde e amarela sao os delimitadores. Temos aproximadamente 170µS de tempo de leitura de teclado, com um espaço entre leituras de 16mS. Pra quem ficou curioso, essa imagem é do analisador logico HP16500C.

Nesta imagem podemos ver que o tempo de leitura de cada coluna é de 35µS. Ou seja, a deteccao de qual coluna queremos enviar para o MSX, tem que ser processada e entregue em 35µs, ou entao vai bagunçar a zorra toda. O ideal neste caso é usarmos um microcontrolador que tenha interrupção por mudança de estado da porta (PIC, Renesas) para facilitar a nossa vida. Ou entao um CPLD lendo o teclado e cuspindo os dados na PPI.

Considerando que temos 80 teclas no teclado dos MSX, uma forma razoavel de armazenar as teclas apertadas no teclado seria uma array de 8 x 10, sendo que o indice de leitura da array é justamente o numero da linha lido do MSX. Dessa forma voce nao precisa decodificar muita coisa. Quando o barramento retornar a 1010b (condicao de repouso) voce tem tempo pra scanear o teclado PS/2 e colocar as teclas apertadas/retirar as teclas desapertadas do array. Será que facilitei, ou compliquei? :oD

Aqui, temos o tempo entre leituras do teclado (16.73mS de acordo com os markers do analisador logico)

Resumindo, para que nosso circuitinho funcione numa boa, temos que:

Com isso ai, ja da pra planejar praticamente o circuito todo ;oD

Aproveitei pra apertar algumas teclas, e mostrar os diagramas de tempo. LAB1 de 0 a 3 é o que a PPI manda pro teclado. de 4 a 11 o que o teclado retorna.

Isolei cada tecla com os marcadores, aqui estao as fotos.

Tecla1

 

Tecla2

 

Tecla3

 

Tecla4

Como as coisas aqui no Tabajara Labs andam um bocado complicadas complicadas, vai levar alguns dias ate que eu tenha o meu laboratorio montado pra prosseguir neste projeto. Mas conforme eu vou fazendo alguma coisa, vou disponibilizando na net. :o) Em breve, colocarei mais informacoes :oD Observe que em menos de 24 horas eu atualizei essa pagina 4 vezes. Entao verifique sempre esta pagina procurando por atualizacoes, uma hora sai! :oD