Adaptador de teclado PS2 para MSX – Parte 1


Bom galera;

Finalmente vamos começar a construir nosso tão esperado adaptador, creio que o leitor que acompanhou nosso blog até aqui pode esclarecer muitas dúvidas de funcionamento do teclado PS2 e de várias coisas que tangem ao MSX, não podemos esqueçer que temos o objetivo de desenvolver o teclado USB, mas decidimos dividir isso em outra etapa.

Nessa série de artigos que vou começar daqui por diante, vamos dar todas as informações necessárias de como construir esse adaptador e no final do projeto também disponibilizar para aqueles que não querem fazer a possibilidade de adquiri-los.

Aproveito para agradeçer aos leitores que tem nos acompanhado, nos enviando elogios, críticas, sugestões e principalmente projetos das quais só aumentam a vontade de trabalhar na plataforma MSX, isso é prova que os usuários nunca abandonaram a plataforma e ao contrário continuam a desenvolver coisas para ele.

Por onde começar;

A partir daqui é interessante que quem realmente deseja construir esse adaptador tenha um conhecimento mínimo de eletrônica, caso contrário pedimos um pouco de paciência e esperem a conclusão do projeto.

Esse projeto poderá ser usado pela comunidade de MSX apenas para usos particulares, estudantis e não poderá ser comercializado, sem que seje autorizado pelo autor, que é idealizador do projeto.

Mãos à obra;

Para começar a construção desse adaptador vamos precisar de algumas coisas que são extremamente importantes, pois vamos utilizar um microcontrolador que irá conversar com o teclado PS2 e o MSX. O microcontrolador a ser utilizado será da empresa Microchip, da família/linha PIC.

Gravador de PIC;

Temos que ter em mãos um gravador de PIC, pois ele será usado para gravar nosso programa no microcontrolador.

Olhando no mercado, pudemos ver que o custo desse gravador é relativamente alto, principalmente para nós que visamos realizar um projeto com custos reduzidos ao extremo.

Então decidimos em primeiro lugar construir um gravador de PIC (extremamente simples e muito barato).

Bom galera, por hoje é só, até o próximo post;

[]´s

MsxRevival

O teclado PS2 – Parte 2


Olá galera….

Continuando a matéria do teclado PS2.

O processador carrega o endereço de início desta rotina num “program counter” e depois continua no sentido de executar a routina de serviço do teclado. Essa rotina é que analisa o “scan code” que consta no circuito de interface do teclado e produz um código de 2 bytes que o coloca no Buffer do teclado e na memória RAM.

Outras rotinas dentro do DOS e suas aplicações, lêem os dados vindos do Buffer do teclado passando-os para lá.

Um número de teclas do teclado não produzem caracteres mas elas determinam o que um particular pressionamento numa tecla representa. Estas teclas incluem as duas teclas de Shift, o Control, o Alt, Caps Lock, Num Lock, Scroll Lock e o Insert.

Estas teclas efetuam 2 bytes de status, alojados na parte mais baixa da memória RAM, e esses bytes analisam o estado dessas teclas. Quando a rotina de serviço do teclado aceita um “scan code” do teclado, ela então consulta os dois bytes de status em 417 e 418 (hexadecimal), para ver como o estado dessas teclas afetam os “scan codes”.

A rotina de serviço do teclado gera códigos de 2 bytes, que os coloca no Buffer do teclado. O buffer do teclado tem 32 bytes de RAM, desde 41E (hex) até 43D (hex). Este é um buffer circular e o ponteiro para o endereço de início é mantido na localização 41A (hex) e 41B (hex) e o ponteiro para o endereço final está na localização 41C (hex) e 41D.

Os códigos de dois bytes tomam a seguinte forma.

Caracteres normais;

Main byte (low byte) ASCII code

Aux byte (high byte) SCAN code

Caracteres especiais;

Main byte (low byte) 00(zero)

Aux byte (high byte) Scan-code or special code.

Os computadores XT e os mais tarde, computadores DOS, lidavam com o problema da interface do teclado de forma diferente. Hoje em dia, o tipo de interface dos XT está morto e a primeira interface usada na interface dos teclados AT é a usada em todos os modernos computadores DOS. O layout de 101 teclas, primeiro introduzido com os computadores IBM AT, é muitas vezes referido como o teclado AT mas esta terminologia não é correta. Alguns teclados têm um switch de interface XT/AT mas a maior parte dos teclados modernos conseguem detectar o tipo de interface em uso, de forma automática.

Os dados são enviados do teclado para o circuito de interface na placa de sistema dos computadores de uma forma sequencial e estes dados são submetidos ao “clock” na interface, um bit de cada vez pelo “clock signal” que é também fornecido pelo teclado.

Com a interface do teclado tipo AT, os dados tomam a forma de 1 word de 11 bits com 1 Star Bit (low), seguido por 8 bits de dados (o bit menos significativo primeiro), um Bit de Paridade e um Stop Bit (high).

As linhas de dados e do relógio, existentes entre o teclado e o circuito de interface deste são normalmente lógicas, com resistors “pull-up” no final do teclado. Quando o teclado deseja enviar dados de uma tecla para a interface, ele coloca os dados , um bit de cada vez na linha dos dados e depois coloca a linha do relógio a “low” por curta duração enquanto mantém cada bit de dados firme. O rate dos dados é tipicamente à volta dos 10 Kb por segundo.

Nos computadores modernos atuais, as linhas de interface entre o teclado e o circuito de interface são bi-direcionais e o computador pode enviar comandos para o teclado via essas mesmas linhas de dados e do relógio.

O computador é que tem o controle de tudo, e se por algum motivo, o computador não desejar receber dados do teclado, ele assere a linha do relógio a “low”. O teclado certifica-se do estado da linha do relógio” antes de tentar enviar dados para o computador e assim verificar se o computador está pronto para receber dados.

Se o teclado denotar a linha do relógio a “low”, ele pode guardar, nele próprio, 16 pressionamentos de teclas. Irá então posteriormente enviar esses dados para o circuito de interface quando da “libertação” da linha do relógio.

Quando o computador deseja enviar um comando para o teclado, ele força a linha de dados a estar a “low” e deixa a linha do relógio “high”. Quando o teclado verifica estas condições, responde com um código (hex) FA.

Se o teclado detectar um erro nos dados transmitidos pelo computador, ele vai responder com um FE (hex) e este código pede a retransmissão daquele código que estava errado. Os erros são detectados via os Bits de paridade que acompanham os códigos enviados pelo teclado ou pelo computador nas linhas de interface do teclado.

Nos computadores de tipo XT, o circuito de interface do teclado consiste numa “Serial In – Parallel Out Shift Register” e alguns circuitos lógicos para gerarem um “Hardware Interrupt” (IRQ1) quando os dados de uma tecla pressionada são carregados para o “shift register”. A rotina de serviço interrupt invocada por IRQ1 lê os dados da tecla do “shift register” via um chip I/O programável 8255.

Nos computadores de tipo AT, o circuito de interface do teclado é um chip microprocessador 8042. O processador do interface recebe os dados de forma sequencial do teclado, verifica a paridade dos dados e apresenta os dados no Buffer de saída. O controlador irá então gerar um IRQ1 para chamar a rotina de serviço do teclado para levar os dados do Buffer. O processador da interface do teclado também tem um Buffer de entrada que irá aceitar os comandos para serem transmitidos para o teclado.

A maior parte do pressionamento de teclas produz um “keycode” que representa a posição das teclas no teclado. Dois tipos de “keycodes” são enviados pelo teclado para o circuito de interface do teclado na placa de sistema dos computadores. O código do “keypress” (make code) é enviado quando uma tecla é pressionada e o código de “Release” (break code) é enviado quando a tecla é solta.

Muitos teclados de computadores DOS suportam 3 conjuntos de códigos para pressionamento ou liberação de teclas. Definir-se-á esses conjuntos como Modo um, dois e três.

No modo um, o modo XT, o código de “keypress” é um código de 7 bits com o 8º bit sempre a “0”. O código de “release” é um código de “keypress” com o bit “8” asserido a 1. O bit “8” é sempre “0” nos códigos de “keypress” e sempre “1” nos códigos de “release”.

O modo dois é um conjunto de 84 códigos de teclas onde as teclas comuns ao teclado de 84 e ao de 101 teclas usam os mesmos códigos “Press” e “Release”. As “novas teclas” são enviadas com o prefixo E0.

Neste modo, os dados são enviados do teclado para o circuito de interface do teclado do mesmo modo que no 1 e no fim da transmissão a interface do teclado não irá permitir a ligação até que o sistema aceite os dados enviados. Se os dados recebidos tiverem um erro de paridade, o circuito de interface do teclado irá enviar um comando Reset para o teclado.

O modo très elimina todas as confusões do modo 2 atribuíndo a cada uma das teclas um único “Press code” mas muitos teclados não suportam este modo e muitos não suportam o comando “Change Mode” (F0).

Para além dos “scan codes”, comandos também podem ser enviados e recebidos pelo teclado. A seção que se segue, detalha a função desses comandos. É de notar que estes comandos são apenas os de uso mais comum.

Comandos de “host”

Estes comandos são enviados pelo “host” para o teclado. O comando mais comum sera o de “setting/resetting” dos Indicatores de Status. (isto é, os LEDs do Num Lock, Caps Lock e Scroll Lock). Os comandos mais usuais e úteis são os seguintes:

ED Set Status LED’s – Este comando pode ser usado para ligar ou desligar os LED’s do Num Lock, Caps Lock e Scroll Lock. Depois de enviar ED, o teclado irá responder com um ACK (FA) e espera por outro byte que determina o Status. O bit 0 controla o Scroll Lock, bit 1 o Num Lock e o bit 2 o Caps Lock. Bits de 3 a 7 são ignorados.

EE Echo – depois de enviar um comando Echo para o host, o teclado deverá responder com um Echo (EE).

F0 Set Scan Code Set – Depois de enviar F0, o teclado irá responder com um ACK (FA) e esperar por outro byte, 01-03 que determina o “scan code” usado. Enviando 00 como segundo byte irá devolver o “scan code set” correntemente em uso.

F3 Set Typematic Repeat Rate – O host irá executar o comando acknowledge com FA e esperar pelo Segundo byte, que determina o “Typematic Repeat Rate”.

F4 Host Enable – limpa o buffer dos teclados “output”, permite o scanning do host e devolve um acknowledge.

F5 Host Disable – executa o reset ao teclado, e não permite ao Host o scanning e devolve acknowledge.

FE Reenvia – Depois da recepção do comando reenviado, o teclado irá retransmitir o ultimo byte enviado.

FF Reset – Faz o reset do Host.

Comandos

Se os comandos de Host são enviados do Host para o teclado, então os comandos de teclado deverão ser enviados do teclado para o Host. Em baixo, alguns dos comandos que o teclado pode enviar.

FA – Acknowledge

AA – Power On Self Test Passed (BAT completed)

EE – Comando Echo (Comandos de Host)

FE Resend – Depois da recepção do comando reenviado, o Host deverá

retransmitir o ultimo byte enviado.

00 – Erro ou Overflow do Buffer

FF – Erro ou Overflow do Buffer

Bom galera, o assunto é realmente muito extenso, mas em cima disso temos muitas informações agora para podermos entender como iniciar a construção de nosso adaptador.

Quero agradeçer ao Departamento de Engenharia Informática de Coimbra em Portugal por compartilhar conosco documentos na internet com tamanha fonte de informação, e aos autores do documento logo abaixo.

Até +

MsxRevival;

(*) Autores;

Bruno Luís – bluis@student.dei.uc.pt – 995011059
Carla Pacheco – cpacheco@student.dei.uc.pt – 501011218

(*) Fonte: Faculdade de Ciências e Tecnologia de Coimbra – Portugal