• Nenhum resultado encontrado

Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa. Aula Teórica 18

N/A
N/A
Protected

Academic year: 2021

Share "Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa. Aula Teórica 18"

Copied!
7
0
0

Texto

(1)

Aula Teórica 18

Sumário:

Dispositivos de entrada: O teclado. Leitura Recomendada:

Capítulo 34 - Hans-Peter Messmer, The Indispensable PC Hardware Book, Addison-Wesley.

Capítulos 3, 6 e 12 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

Teclado

Apesar dos grandes avanços tecnológicos das interfaces com o utilizador, o teclado continua a ser o mais importante dispositivo de entrada. Existem vários tipos de teclados: Os mais antigos de 83/84 teclas, os de 101/102 teclas e os teclados Windows de 104 teclas.

• Tipos de teclas

1. Caracteres standard: Letras de A a Z, algarismos de 0 a 9, e caracteres que têm código ASCII (como %, $, #, etc.). O facto de ter código ASCII significa que é visualizado no écran o caracter correspondente.

2. Teclas de controlo: <Alt>, <Ctrl> e o <Shift>. Trabalham em associação com outras teclas. A BIOS não lhes atribuí um código ASCII e trata-as de forma diferente, actualizando o seu estado na área de dados da BIOS.

3. Teclas que alternam (toggle keys): <Num Lock>, <Caps Lock>, <Insert> e <Scroll Lock>. Alternam de estado. A BIOS não lhes atribuí um caracter ASCII e também actualiza o seu estado na área de dados.

4. Teclas de função estendida: As teclas <F?> e todas as teclas do keypad, com o <Num Lock> desligado (<del>, <home>, etc.).

O teclado pode ser visto como um pequeno computador dedicado a converter toques nas teclas numa sequência de bits. A parte principal do teclado é o microprocessador (8048). O microprocessador supervisiona a matriz do teclado, que é feita de linhas que se intersectam, cada uma delas ligada ao processador do teclado. Nos pontos de intersecção encontram-se pequenos switches. Em cada um destes switches existe uma tecla. Quando se pressiona uma tecla, o switch respectivo fecha o contacto entre as linhas de intersecção da matriz. Desta forma o microprocessador consegue determinar as coordenadas do switch fechado, e portanto, determina a tecla que foi pressionada. O microprocessador também detecta quando a tecla é largada.

(2)

Figura nº 2 – Como é um teclado por dentro.

Existe um scan code que é transmitido através de um buffer à interface do teclado. Cada tecla ou combinação de teclas possui um scan code único associado, que é independente da sua localização no teclado. Desta forma o processador consegue saber que tecla foi activada. Um programa chamado driver do teclado (keyb.com no DOS) converte o scan code no caracter correspondente. Usando este método pode-se representar várias linguagens diferentes utilizando o mesmo teclado (o mesmo hardware). Basta simplesmente utilizar o driver do teclado apropriado. O driver do teclado utiliza uma tabela de conversão interna para atribuir a cada scan code um código ASCII, e assim um caracter. Usando outro driver, e consequentemente outra tabela de conversão, a estrutura técnica e os scan codes passados são exactamente os mesmos, mas o driver do teclado vai convertê-los num código ASCII diferente, resultando em caracteres diferentes.

Quando a tecla é libertada é gerado um break code que é igual ao scan code somado de 128. • Comunicação com a BIOS

O CPU do teclado realiza várias tarefas, sendo a principal monitorizar as teclas e avisar o processador do PC sempre que uma tecla é premida.

O CPU do teclado, após associar um scan code à tecla, guarda esse valor no porto 60H. De seguida, chama automaticamente a interrupção 09H da BIOS (na linha IRQ1). A interrupção lê o byte do porto 60H, compara o scan code com os valores de uma tabela, para associá-lo a um caracter ASCII, se for o caso, nem todas as teclas ou combinações de teclas têm código ASCII.

Depois, a rotina da interrupção 09H guarda o scan code e o código ASCII respectivo num buffer que está associado ao teclado. Este buffer está na área de dados da BIOS, ocupa 32 bytes, tem início na zona 0040:001EH e tem capacidade para guardar até 16 caracteres (2 bytes por caracter).

O caracter e o scan code poderão ser lidos do buffer usando a interrupção 16H da BIOS, a interrupção 21H do DOS, ou ainda acedendo directamente ao buffer.

(3)

Figura nº 3 - Comunicação entre o teclado e o sistema.

• Status do teclado

Como as teclas de controlo e as teclas que alternam, afectam o significado das outras teclas, a BIOS guarda informação sobre o seu estado na zona de memória 0040:0017H. Antes de interpretar uma tecla, a BIOS verifica o estado destes bits.

Bit = 1 Significado Bit = 1 Significado

7 Ins activo 6 CapsLock activo 5 NumLock activo 4 ScrollLock activo 3 <Alt> premida 2 <Ctrl> premida 1 <Left Shift> premida 0 <Right Shift> premida

Figura nº 4 - Bits na zona de memória 0040:0017H.

Nos teclados de 101/102 teclas há nove teclas que se encontram em duplicado no teclado (<Alt>, <Ctrl>, etc.) e por isso houve necessidade de guardar informação adicional. Assim, as BIOS recentes guardam um segundo byte na zona de memória 0040:0018H.

Bit = 1 Significado Bit = 1 Significado

7 <Ins> premida 6 <CapsLock> premida 5 <NumLock> premida 4 <ScrollLock> premida 3 <Pause> activa 2 <SysReq> premida 1 <Left Alt> premida 0 <Left Ctrl> premida

(4)

O byte com o endereço 0040:0096H também é importante. Se o bit 4 está igual a 1, significa que está instalado um teclado de 101/102 teclas ou 104 teclas e que o byte 0040:0018H contém a informação que foi descrita.

• Variáveis da BIOS associadas ao teclado

Figura nº 6 - As variáveis da BIOS para o teclado.

Buffer do teclado (0040:001EH a 0040:003DH) - 32 bytes, capacidade para 16 caracteres, pois cada caracter são dois bytes (scan code e ASCII code).

Posição do próximo caracter a ser lido do buffer (0040:001AH) - 2 bytes, guarda o offset da posição dentro do buffer do próximo caracter a ser lido, representa a cabeça do buffer.

(5)

Posição do próximo caracter a ser inserido no buffer (0040:001CH) - 2 bytes, guarda o offset da cauda do buffer.

0040:0080H e 0040:0082H - 2 words, podem ser usadas para mudar a área do buffer do teclado, por forma a alterar o seu tamanho ou localização. NOTA: O buffer do teclado está limitado ao segmento 0040H, os valores indicados nestes dois endereços referem-se aos offsets em relação ao início do segmento.

• Organização do buffer do teclado

Figura nº 7 – O buffer do teclado.

O buffer do teclado é organizado como um anel gerido por dois ponteiros. Os valores dos ponteiros são guardados na área de dados da BIOS nos endereços 0040:001AH e 0040:001CH. O ponteiro de escrita indica a próxima posição livre no buffer do teclado, onde será guardado o próximo caracter de input. O ponteiro de leitura indica qual será o próximo caracter a sair do buffer. Como funciona em anel é possível que o valor do ponteiro de leitura seja maior do que o valor do ponteiro de escrita.

(6)

Embora o teclado tenha espaço para 16 caracteres (32 bytes), na realidade ele acomoda apenas 15 caracteres no máximo, devido ao funcionamento da cabeça e da cauda do buffer.

Se os valores que se encontram em 0040:001AH (cabeça) e 0040:001CH (cauda) estão iguais, o buffer está vazio.

Se a cauda está logo atrás da cabeça, o buffer está cheio.

Para os caracteres normais, nos dois bytes são guardados o scan code e o ASCII code. Para caracteres estendidos, um byte guarda o keybrd code e o outro fica com o valor 0 (se a tecla não possui código ASCII associado) ou E0 (se é uma tecla do teclado estendido).

Os scan codes podem variar de teclado para teclado, mas o ASCII code é um standard. Por isso deve-se usar o código ASCII.

• Os serviços BIOS para teclado (via interrupção 16H)

Figura nº 8 – Serviços BIOS para teclado.

Serviço 00H e 10H - Lê o próximo caracter do teclado (serviço 00h para teclado de 83/84 teclas, serviço 10h para teclado de 101/102 teclas).

Se existir algum caracter no buffer do teclado, este é lido, senão espera que algum seja lá colocado. Entrada Saída

ah = 00 ou ah = 10h al = código ascii ah = scan code

Serviço 01H e 11H - Vê se existe algum caracter no buffer do teclado (serviço 01h para teclado de 83/84 teclas, serviço 11h para teclado de 101/102 teclas).

Entrada Saída

ah = 01 ou ah = 11h zero flag = 1, se não existir caracter zero flag = 0, se existir caracter al = ascii code

ah = scan code

Serviço 02H - Obtém o status do teclado, lendo a zona de memória 0040:0017H. Entrada Saída

(7)

Serviço 12H - Obtém o status do teclado para teclado estendido (101/012 teclas), lê a zona de memória 0040:0017H e a 0040:0018H.

Entrada Saída

ah = 12h al = status do teclado, byte 0040:0017H

ah = status do teclado estendido, byte 0040:0018H

Serviço 03H - Altera a taxa de repetição (velocidade a que uma tecla é repetida) e o typematic delay (tempo que a tecla leva em baixo antes de se começar a repetir).

Entrada Saída ah = 03 Não tem al = 05 (subfunção)

bl = taxa de repetição (*) bh = typematic delay (*)

Referências

Documentos relacionados