TK90XArcoiris

Cantinho do TK90X

PRINT Adaptador de teclado PC para  Spectrum IMAR-3


RETURNNEXT
 Início > Menu > PRINT > Adaptador de teclado PC para Spectrum

Artigo original: http://www.speccy.org/trastero/cosas/droy/imar3/imar3_s.htm

Publicado originalmente por: El Trastero del Spectrum

Traduzido por: Leão Marcos Ampessan

Revisado por: Flávio M. Matsumoto

Autor: (C) Droy 2002


Enquanto eu escrevia a seção de idéias para solucionar os problemas do teclado do Spectrum, alguns usuários me perguntaram se não era possível usar um teclado de PC com algum adaptador. Eu conhecia a solução da Sintech porém esta é uma solução comercial e não disponibiliza nem o esquema nem o micro-programa que controla o micro-controlador que seguramente tem em seu interior.

Também existe uma página italiana onde publicaram um esquema de extrema má qualidade e também não está disponível o programa de controle do micro-controlador, além do mais usam um integrado muito especial para simular os pressionamentos das teclas e por isso esse integrado é muito difícil de encontrar e com certeza muito caro. 

Para ser honesto, quase me alegrei por esta falta de informação, pois ela me animava a começar um novo projeto do zero: desenho, construção do protótipo, programação, debug, etc. 

Depois de alguns atrasos por problemas técnicos eu posso anunciar, com muito orgulho, o que eu batizei de IMAR-3, o adaptador de teclado PC para o Spectrum do Trasterto (feito na Espanha), com toda a informação necessária para sua construção para os aficionados pela eletrônica.

Se o que lhe interessa é construir um, sem ter que gastar tempo lendo as dissertações sobre eletrônica, portas de saídas e outras, pode ir diretamente a seção descargas (download) e baixar tudo o que é necessário para sua construção.


Adaptador de teclado PC para Spectrum


O que faz realmente o adaptador? Tenho que carregar alguma coisa no Spectrum?

Este adaptador é conectado no bus de expansão igual aos adaptadores de joystick, de forma que temos disponível uma conexão para um teclado padão do PC do tipo AT ou PS/2 (não os antigos XT de 94 teclas). Este adaptador dispõem de um micro-controlador do tipo PIC-16F84, amplamente conhecido.

Este micro-controlador tem de ser programado antes de sua inclusão na placa - mais adiante eu explico como fazer isso. Depois de programado o PIC e instalado em seu local não será necessário nada mais do que ligar e usar, não é necessário carregar nada no Spectrum nem é necessário abri-lo para nada.


Como funciona o teclado do Spectrum?

Se você já abriu alguma vez o seu Spectrum, pode comprovar que da metade superior da carcaça saem dois cabos planos de 8 e 5 contatos. Estes cabos realmente formam parte da própria membrana, que não é nada mais que uma matriz de contato debaixo das teclas de borracha do teclado. Esta matriz está repartida em 8 semi-filas de 5 teclas cada uma, que correspondem com os contatos da membrana. Veja o esquema a seguir para mais detalhes:

Como pode ver no esquema acima, cada uma das 8 semi-filas está conectada a uma das linhas de endereço da metade superior do bus, e o outro extremo de cada tecla em grupos de cinco a uma linha do bus de dados desde D0 a D4 através da ULA.

Geralmente quando se quer saber se uma tecla está pressionada, lê-se a semi-fila completa (cinco teclas), lendo a porta de I/O que põem um zero na linha de endereço da dita semi-fila.

Por Exemplo:

Suponhamos que queremos saber se a tecla “W” está pressionada, para isto realizamos uma leitura da porta que corresponde IN(64510) que em binário é 11111011 11111110, e que põe a zero as linhas A0 para a indicar ao ULA que estamos lendo o teclado e a linha A10 a zero para indicar que estamos lendo a semi-fila 2. Isto nos devolverá um número cujos bits correspondem do D0 ao D4 às teclas QWERT, respectivamente e, por estar o bus de dados forçado a “um” pelos resistores R65-R69, obteremos um “um” em repouso e um “zero” (obtido do próprio bus de endereços) se estiver pressionada. Assim, para este exemplo, dependendo do valor do bit D1 saberemos o estado da tecla “W”.

Para ver ao vivo o que acabo de citar, pode escrever o seguinte programa e ver o efeito que tem o pressionamento de diferentes teclas simultaneamente na semi-fila QWERT sobre o valor lido. Passe o valor a binário e entenderá melhor (também funciona em um emulador).

10 REM Exemplo de leitura de teclas sem o comando INKEY$

20 CLS

30 PRINT AT 10,1;“Byte lido na semi-fila 2:”;IN(64510)

40 GOTO 30

Observe que os bits D5-D7 permanecem sempre em “um”. Pode repetir o mesmo para o restante das semi-filas; aqui tem uma tabela com os endereços de leitura.


Endereço
Teclas
Semi-filas
FEFE-65278 V C X Z CS 000 1
FDFE-65022 G F D S A 001 2
FBFE-64510 T R E W Q 010 3
F7FE-63486 5 4 3 2 1 011 4
EFFE-61438 6 7 8 9 0 100 5
DFFE-57342 Y U I O P 101 6
BFFE-49150 H J K L Enter 110 7
7FFE-32766 B N M SS Space 111 8

D4 D3 D2 D1 D0


Como funciona um teclado de PC?

Como acabamos de ver, o teclado de um Spectrum está intimamente unido a seu hardware, no caso dos teclados dos PCs e seu host isto é radicalmente diferente, de início só é preciso observar que o teclado e seu host estão conectados através de 4 fios (entenda-se “host” como o dispositivo que se comunica com o teclado trocando informações com ele, que no caso de um PC é o próprio PC; em nosso caso o micro-controlador atuará como host).

Existem muitas páginas na Internet onde se pode obter informações técnicas muitos detalhadas, aqui somente pretendo fazer um resumo muito básico de seu funcionamento.

A conexão entre um teclado e o PC é realizada através de um conector DIN de 5 pinos em 180º ou através de um conector do tipo PS/2 (mini-din de 6 pinos). Em ambos os casos uma linha transmite o sinal do clock, outra dos dados e os demais a alimentação +5V e GND.

DIN 5 Pinos

Mini DIN 6 Pinos PS/2

A comunicação entre o teclado e o host é em série com bit inicial, oito bits de dados, paridade ímpar e bit de parada. É bi-direcional, o teclado informa ao host a atividade das teclas e o host envia os comandos para sua configuração, acendimento de luzes (CapsLock, NumLock, etc) re-inicialização, re-envio, etc. Isto faz que o sinal de dados possa ser usado por ambas as partes, enquanto que o clock controla sempre o teclado.

LSB:    Less Significative Bit (Bit menos significativo)
MSB:   Most Significative Bit (Bit mais significativo)
P Odd:  Paridade Impar
ACK:    Acknowledge (Reconhecimento)

No diagrama de tempos superior podemos observar em cor azul o sinal controlado pelo teclado e em vermelho quando está controlado pelo host.

O mais importante para o problema que temos é qual informação nos dá o teclado a respeito do pressionamento das teclas. Quando se pressiona uma tecla, o teclado envia o que se conhece como “scancode”, isto é um código associado com cada tecla através de uma tabela. Existem três modalidades ou tabelas, dependendo de cada tipo de teclado. 

Scan Code Set 1: É o usando pelos teclados do tipo XT de 83 teclas (as teclas de função estavam na parte esquerda).

Scan Code Set 2: Normal em teclado AT de 102 teclas, o mais usado.

Scan Code Set 3: Usado somente em teclados do tipo PS/2.

O set 1 é considerado obsoleto, embora alguns controladores de teclado transformem os scan codes 2 e 3 em 1 para compatibilidade com o software escrito para os XTs. O mais comum, embora variem segundo o fabricante, é que o teclado aceite trabalhar com o set 2 e 3.

O set 3 permite configurar o teclado em uma modalide de resposta mais afinada com as necessidade do nosso adaptador, por conseguinte é o modo de funcionamento que eu escolhi. Para dar cobertura a teclados velhos, eu escrevi outro micro-programa com menos funcionalidades (esc, cursores, ponto, vírgula, ponto e vírgula, etc) que funciona com teclados do tipo AT no Scan Code Set 2.

A parte dos Sets, podemos configurar para os seguintes modos de trabalho: 

Make: Quando se pressiona uma tecla, é enviado o Scan Code e nada quando se libera a tecla. 

Make/Break: Quando pressionamos uma tecla, envia o Scan Code e quando se libera a tecla também precedido de um código de liberação (F0)

Typematic: Quando se pressiona uma tecla, é enviado o Scan Code, e depois de um curto período de tempo é re-enviado continuamente até que se libere uma tecla.

Os teclados AT permitem configurar os tempos de auto-repetição (Typematic) mas nem todos permitem o modo “No typematic”, pelo contrário os do tipo OS/2 permitem este modo que só envia o scan code quando se pressiona e quando se libera. 

Aqui temos um resumo dos Scan Codes do Set 3 úteis para nosso adaptador: 

Scan Codes Set 3
V=42  C=33  X=34  Z=26  Shift=18
G=52  F=43  D=35  S=27  A=28
T=44  R=45  E=36  W=29  Q=21
5=46  4=37  3=38  2=30  1=22
6=54  7=61  8=62  9=70  0=69
Y=53  U=60  I=67  O=68  P=77
H=51  J=59  K=66  L=75  Enter=90
B=50  N=49  M=58  Ctl=17  Space=41
TAB=13  CAPS=20  Shift=18/89  CTL=17/88   ALT=25/57
UP=99  DOWN=96  LEFT=97   RIGHT=106   <>=19
ESC=8  ,=65  :=73   ;=74  “=82

Quando aparecem dois valores, eles se referem a mesma tecla na direita ou na esquerda (Como Control por exemplo)

Para mais informações sobre os teclados do PC você pode consultar as seguintes páginas: 

Ótimo FAQ sobre o teclado do PC: www.paranoia.com/~filipg.

Muita e boa informação técnica sobre teclados:

http://panda.cs.ndsu.edu/~achapwes/PICmicro/keyboard/atkeyboard.


Funcionamento do adaptador

O coração do adaptador é o micro-controlador PIC 16F84. Este é um dispositivo barato, fácil de encontrar e programar. Basicamente é um microprocessador com uma memória Flash Eprom interna de programa de 1 Kbyte (são bytes de 12 bits), uma memória RAM de dados de 68 bytes e uma memória EEPROM para dados adicionais de 64 bytes (desta vez de 8 bits), além de 13 portas configuráveis como entrada ou saída. Existem vários modelos mas o mais comum é o 16F84A-04/P. Esta nomenclatura xxFxxA-04/P significa que a memória de programa é Flash Eprom, velocidade de clock a 4 Mhz e seu encapsulado é de plástico.

Não vou me estender mais, pois você pode encontrar toneladas de informação na rede sobre este chip. 

Se você observar no esquema poderá comprovar que tanto a linha de dados como a de clock da conexão do teclado vão unidas diretamente nas portas RA1 e RA2 do PIC, que toma o controle das comunicações; para maiores detalhes ver o programa fonte do PIC.

Usamos a memória RAM 6116 para armazenar em seus 8 primeiros endereços o estado de cada uma das 8 semi-filas, de forma que quando o Spectrum queira ler um estado de uma delas, na realidade o adaptador lhe entregue o conteúdo do endereço da memória RAM onde temos armazenado o estado da dita semi-fila,  e desta forma ele “acredita” que estavam sendo pressionadas as teclas do seu próprio teclado.

Quando pressionamos uma tecla, o PIC obtém o scan code correspondente, e nesse momento busca em sua memória EEPROM interna, onde carregamos previamente os códigos dos scan codes correspondentes as teclas do Spectrum. Se o encontrar quer dizer que é um pressionamento válido, e do endereço de memória onde se encontra o dito scan code obtém-se os dados da tecla e da semi-fila que precisa “pressionar” no Spectrum. Uma vez calculado o valor a armazenar, comprova-se através da porta RA4 se está se tentando ler o teclado, e em caso negativo, bloqueia-se este acesso através da porta RA2 durante o tempo que precisa para gravar o novo estado da semi-fila no endereço correspondente na RAM do nosso adaptador.

Quando o Spectrum lê uma semi-fila o faz com a instrução de código de máquina IN A,(FE), está ativa (nível baixo) as linhas /IORQ /RD e A0, as portas OR IC5A e B, ativam o transceiver (IC3 - 74LS245) quando isto acontece, permitindo que o Spectrum obtenha o dado de leitura da porta da RAM (IC1 - 6116), ou seja, quando está lendo alguma semi-fila, o codificador com prioridade (IC7 - 74LS148) codifica em três bits de endereço o número da semi-fila que está sendo lida, e o multiplexador quádruplo de duas entradas (IC4 - 74LS157) se encarrega de dar acesso a memória ao Spectrum ou ao PIC controlado pela lógica do IC5A,B,C e ao próprio PIC (porta RA2).

Durante as provas do protótipo, eu observei um comportamento anômalo em alguns jogos como o Manic Miner, e embora eu tenha pensado a princípio que havia algum problema com meu adaptador, logo eu vi que o problema não estava no adaptador do teclado mas sim na interface PlusD (mais especificamente a versão que tem o PAL “ALICE”) com a qual eu carregava os jogos. Estes jogos podiam ser iniciados pressionando uma tecla ou pressionando o botão de tiro do joystick, sendo o controle do jogo selecionado automaticamente deste modo. Pelo que eu pude averiguar a PlusD com esta versão do PAL interfere nas leituras da porta destinada ao adaptador Kempston (Porta 1F) de forma que os jogos “pensavam” que esta interface está instalada e que se está pressionando o botão de tiro permanentemente.

No início (versão C) para solucionar este problema eu usei a porta OR que sobrava no IC5, cinco diodos 1N4148 e um jumper para poder selecionar quando queria usar uma interface Kempston. Como isto só afetava aos usuários da PlusD com PAL Alice, e somente em alguns poucos jogos, eu decidi suprimir este acréscimo na placa de circuito impresso que corresponde a última versão do desenho (versão D) e assim simplificar um pouco a placa. O programa de controle do PIC não muda. Para maiores informações envie-me um email e os solicite.



Mapa do teclado

As teclas especiais do Spectrum foram mapeadas com as do PC da seguinte maneira:


Spectrum Teclado PS/2 o AT
Symbol Shift Crtl (Direito e Esquerdo)
Caps Shift Shift (Direito e esquerdo)
Caps Lock (Caps Shift + 2) Caps Lock
Modo estendido (Caps Shift + Symbol Shift) TAB (Só no modo edição)
Cursores Setas do cursor (Só no modo edição)
Apagar (Caps Shift + 0) Apagar (Backspace)
Ponto (.) Ponto (.) (Só no modo edição)
Vírgula (,) Vírgula (,) (Só no modo edição)
Ponto e vírgula (;) Ponto vírgula (;) (Só no modo edição)
Aspas (“) Shift + 2 (Só no modo edição)
Break (Caps Shift + Space) ESC (So no modo edição)

Pode-se alternar entre o modo normal e o modo edição com F12. Além do mais as setas do cursos estão mapeadas com o joystick da Interface II no modo normal sendo o tiro as teclas Alt e o zero do teclado numérico. Para jogar é preferível o modo normal pois evitam-se possíveis conflitos em pressionamentos duplos, e para escrever programas o melhor é o modo edição. Aos usuários da PlusD e Disciple será bom saber que no modo edição F1 escreve LOAD d1; “snap “ S e põem o cursor a esquerda da última aspa.



Construção

Como em outras montagens anteriores dos Trastos de Droy, esta montagem pode ser realizada também com placas pré-perfuradas, se não lhe agrada usar revelador, fixador, ácidos, etc, você pode pôr as mãos à obra seguindo os passos da seção seguinte. Eu usei para o protótipo este método pois me permite durante o desenvolvimento fazer algumas mudanças ou modificações sem ter que redesenhar e refazer a placa.

Por outro lado e uma vez feito o desenho definitivo (...ao menos agora), chega o momento de desenhar a placa de circuito impresso que facilite a sua construção para os aficcionados que não querem usar o revelador, os ácidos e demais ferramentas. Isto eu vou abordar na próxima seção assim que for possível, no momento se quiser fazer em C.I. terá que desenhar a placa você mesmo. Você pode usar o esquema desenhado com Eagle 4.0 como base, ou esperar que eu termine o meu.

1. Com placas pré-perfuradas.

Se você visitar a seção sobre a PlusD poderá ver como construir um adaptador do bus para usar fita plana entre os diferentes dispositivos do Spectrum. Eu usei neste adaptador o mesmo sistema, portanto agora posso conectá-lo com a PlusD através de um cabo de fita plana. Veja a seção PlusD para mais detalhes.

Como sempre, a foto da família com os componentes antes de começar (realmente já é por tradição). Se você nunca usou placa pré-perfurada e deseja mais detalhes de como trabalhar com elas, pode visitar as outras seções onde explico como eu trabalho com este tipo de placa.

Basicamente para realizar uma montagem em placa pré-perfurada, o que faço é colocar os componentes e fixá-los temporariamente com zelo para buscar a distribuição que melhor se ajuste as minha necessidades. Depois de várias re-organizações, e levando em conta as perfurações que cada patinha vai necessitar, além das que se perdem com a furadeira ou com o estilete para separar as pistas, a placa pode apresentar um aspecto como o seguinte:

Você pode observar no esquema que existem vários capacitores de 100 nF em paralelo com a alimentação, seu objetivo é reduzir o ruído elétrico típico da tecnologia TTL, o importante é que estejam próximos às patinhas de alimentação dos integrados e não todos juntos em um local da placa; observe a foto para ter uma idéia.

Minha técnica para não esquecer conexões é marcar com um rotulador vermelho sobre o esquema as uniões assim que vou completando. Não deve esquecer que as conexões de alimentação dos integrados não aparecem no esquema, mas evidentemente devem ser realizadas e correspondem aos seguintes pinos:

Circuito Integrado +5V GND
75LS245 20 10
74LS157 16 8
74LS148 16 8
74LS32 14 7
PIC 16F84 15 5
6116 24 12

Depois de soldar todas as conexões e completadas uma seção de montagem com a caixa, o adaptador vai apresentando o seguinte aspecto:

Se uma imagem vale mais que mil palavras, aqui tem umas 15.342.845 palavras que esclarecem tudo sobre a mecânica do adaptador. Observe como a própria caixa de alumínio faz as vezes de refrigerador para o regulador 7805 que se aloja fora da placa.

Algumas destas fotos podem corresponder a uma distribuição e número de componentes diferentes dos mostrados anteriores, isto é devido as diferentes mudanças que ela sofreu durante o desenvolvimente, de qualquer forma, ilustram a idéia da montagem que quero transmitir, bastará seguir o esquema teórico que corresponde à última versão já depurada do adaptador.

ComCaixa

Conectado ao teclado

Para poder conectar mais dispositivos com fita plana, foi necessário conectar internamente um macho de 34 pinos com face para fora (visível na foto):

Conectado
Montagem completa

2. Com circuito impresso

Se você tem alguma experiência na elaboração de circuito impresso, seguramente você preferirá construir este adaptador com este material, na seção Downloads existem disponíveis os arquivos com os fotolitos e originais feitos com Eagle 4.0 para a realização em C.I. A mecanização da caixa pode ser um problema, nesta seção você pode encontrar idéias para a construção desta de uma forma simples e original.

Protótipo

Neste desenho, eu pretendi não só facilitar sua posterior mecanização como estender o próprio bus de expansão para que você possa conectar algum outro adaptador além do IMAR-3. Como as pistas são bastante finas é praticamente imprescindível a fabricação pelo método fotográfico. Se você acredita que a disposição dos componentes e pistas pode ser otimizado não me aborreça com os detalhes, faça-os com Eagle e, se funcionar, publicaremos aqui com seu nome e o nosso agradecimento.

Transparente

Como você pode observar na parte inferior, o bus de expansão se estende com uma pequena placa, soldando a esta os próprios pinos do conector de expansão. Na realidade, estender o bus de expansão é opcional, se não pensa em usar mais adaptadores, o que vai usar já expande o bus. Se decidir usar esta expansão não esqueça de estanhar os contatos, para o qual recomendo usar pasta de soldar. Não esqueça de recortar o Slot na placa extensora.

Conector

conector

Deve parafusar o LM7805 (regulador de tensão) a um refrigerador, um “recorte de alumínio” pode servir tanto para o refrigerador como para as partes que seguram a placa de expansão. (... DICA, procure fornecedores de esquadrias de alumínio, eles nem cobram por pequenos recortes e os grandes eles cobram pouco. Experimente no seu bairro).

Nas fotos seguintes você pode ver com mais detalhe alguns aspectos da mecanização do adaptador

Placa

A parte frontal está coberta com uma placa de fibra de vidro (... DICA, é uma placa de circuito impresso com face de cobre totalmente consumida pelo ácido, que sobrou de um experimento falido, é um material barato e fácil de trabalhar). A parte traseira está protegida por uma prancha de metacrilato (... é um recorte de outros trabalhos anteriores, pode também usar fibra de vidro ou outro material como na parte frontal, embora sendo transparente torna mais elegante.

Placa

O IMAR-3 conectado a um Spectrum 48K Plus.

Ligado

E aqui o IMAR-3 conectado a um Spectrum 48k e a uma Interface II (clone) graças a extensão do bus.

Interface 2

Vista frontal da conexão lateral do teclado permite assegurar a conexão deste tanto se o IMAR-3 é o primeiro do bus quanto o último, sem que se atrapalhem fisicamente com outros adaptadores.

Conectado

Nota para possíveis compradores.

Não tenho intenção de vender adaptadores, mas eu estaria disposto a trocar algum por material relacionado com o Spectrum. Embora pareça mentira, depois de ler o artigo sobre os cartuchos da Interface II, não tenho nenhum cartucho ROM original, se tem algum e lhe interessa trocar, escreva e combinaremos. Só estou interessado em hardware de preferência Sinclair, e não em fitas de programas.

3. Como programar o PIC

A família de micro-controladores PIC é uma das mais usadas e versáteis, só tem que procurar na Internet para encontrar uma infinidade de recursos. Para conseguir o seu PIC programado deve primeiro baixar da seção de descargas (download) desta mesma página o programa correspondente, comprar um, seu preço é de aproximadamente 5 ou 6 € e depois escolher entre as diferentes alternativa para programá-lo:


O momento da ligação

Quanto tudo estiver pronto para ligar, seria uma boa idéia dar uma repassada geral antes de conectá-lo. Dê especial atenção a chave do conector do Spectrum que é a que nos serve de guia para não colocar o conector errado. Ao ligar devem acender-se todas as luzes do teclado por um instante, apagar-se e depois ficar ligada permanentemente a luz do Caps Lock, isto indica que foi bem iniciado o teclado e o PIC está trabalhando bem.

O PIC se encarrega exclusivamente da inicialização do teclado, assim, se não obtemos este comportamento, revise atentamente as conexões do micro-controlador. Para procurar algum problema que impede a inicialização correta você pode tirar todos os integrados de seus buracos, exceto o PIC, pois este é o único necessário para acender a luz do Caps Lock.

Antes de enviar-me um email, verifique se todos os integrados estão alimentados (ver texto acima) que é a falha mais comum, se você dispõem de um osciloscópio, teste o sinal do clock do PIC (pinos 15 e 16) repasse as soldas, conexões, posição dos integrados e seus locais, etc. E se tudo isso falhar então me envie um email.


Problemas conhecidos

Depois de terminada a construção do primeiro protótipo, começaram as provas com diferentes programas comerciais para observar seu comportamento. Para ser sincero, esperava encontrar somente problemas de rendimento, pois o programa de controle do PIC estava em fase muito inicial e o programa estava sem otimizações. Mas não foi assim, o rendimento parecia ser bom, mas uns 30% dos programas apresentavam ausência de alguns de seus controles. Curiosamente todos os da softhouse Ultimate com data posterior ao Knight Lore, inclusive este, apresentavam o mesmo problema (precisamento os meus favoritos...).

Para estudar o problema detidamente, tive que desassemblar estes programas e averiguar como seus programadores faziam para realizar as leituras do teclado.

Leitura simultânea de duas semi-filas

Meu erro foi supor que os programas comerciais liam as semi-filas como faziam as rotinas da ROM, ou seja, de uma em uma, como se faz com o próprio editor do BASIC. Mas não é assim, se você é fã do Knight Lore deve saber que toda a fila superior (semi-filas 1-5 e 6-0) tem a mesma função que é pegar um objeto, da mesma forma as semi-filas Q-T e Y-P servem para saltar e as correspondentes a A-G e H-L servem para avançar. O truque do programador para otimizar as leituras do teclado consistia em ler duas semi-filas simultaneamente, já que não importa que tecla está sendo pressionada, mas sim a “fila” (duas semi-filas) tem “alguma” tecla pressionada (não importa qual).

Esta técnica de leitura simultânea de duas semi-filas me obrigou a trocar o desenho original e substituir um 74LS245 que fazia as vezes de transceiver por um 74LS148. Se você leu a parte “Como funciona” saberá que o 74LS148 é um codificador com prioridade, que entrega um endereço de três bits (de 000 a 111) dependendo de qual de suas 8 entradas está em 0 (conectadas a A8-A15), e com isto indica qual semi-fila está sendo lida. Como é “com prioridade”, se duas semi-filas estão sendo lidas ao mesmo tempo, será entregue o endereço de prioridade mais alta, com o que agora ao menos se obterá o estado de uma delas.

Se o programa lê duas semi-filas ao mesmo tempo é porque não lhe importa qual tecla se pressiona, mas se a fila tem alguma tecla pressionada. Depois do reprojetado o adaptador entregará nestes casos o estado de uma das duas semi-filas, com o que o programa terá todos os controles operando normalmente, embora para “o mesmo controle” seja acionado só uma das semi-filas. 

Exemplo:

Se em um programa a segunda fila (de Q a P) servir para avançar, é muito provável que as duas semi-filas sejam lidas simultaneamente. Como se entrega somente o estado da semi-fila mais prioritária, só se avançará com as teclas de Q a T. Ficam as teclas de Y a P sem utilidade nesse programa.

Estado do teclado em uma só leitura

Este problema só encontrei em dois jogos da mesma softhouse Fairlight e Fairlight II. Também foi necessário desassembla-los para poder averiguar o que estava passando.

Os programas, durante sua execução, devem comprovar periodicamente o estado das teclas para tomar as decisões oportunas, mas quando há que comprovar praticamente todas as semi-filas como é o caso destes dois programas, pode resultar útil realizar uma leitura múltipla (concretamente cinco semi-filas cada vez). Esta leitura não nos pode dizer que teclas estão sendo pressionadas, mas sim nos diz se “alguma” está, então se lê seletivamente cada uma das semi-filas para determinar qual e o movimento ou ação a realizar em consequência. Desta forma, quando não se está pressionando nenhuma tecla o programa não gasta tempo em ler uma por uma todas as semi-filas.

Em minha opinião técnica não resulta realmente vantajosa quanto ao rendimento, mas só se ganha tempo se não se está pressionando nenhuma tecla, já que caso contrário, estamos realizando uma leitura a mais. Ganhar tempo quando não há “personagens” para movimentar ou telas para atualizar, e perdê-lo com uma leitura adicional quando não há, não parece ser muito vantajoso, talvez por esse motivo não haja mais programas que empregam essa técnica.

Este problema tem difícil solução com o desenho atual do adaptador, se não aparecerem mais programas com o mesmo problema eu temo que ficará sem ser resolvido.


Perguntas e respostas

É necessário carregar algum programa no Spectrum?

Não, eu penso que não seria muito útil em máquinas com a membrana do teclado avariada ter que teclar LOAD “”. Simplesmente ligue e pronto.

Acontece alguma coisa se eu usar simultaneamente o teclado do Spectrum e do PC?

Não, os diodos D1 a D5 se encarregam de isolar um circuito do outro. De qualquer forma isso não tem nenhuma utilidade.

Necessito uma fonte de alimentação adicional?

Não, este adaptador se alimenta tomando os 9V do próprio bus antes de ser estabilizado pelo 7805, com o qual não sobrecarrega este em absoluto, mas lhe adiciona uma pequena carga extra de uns 150 mA (teclado do PC incluído) a fonte externa do Spectrum. Se tiver mais adaptadores conectados simultaneamente, terá de somar a corrente extra que cada um consome e verificar que somados aos 600 mA que consome o Spectrum não passa da corrente máxima que suporta o alimentador. Observe a etiqueta da fonte na parte de baixo desta para encontrar estes dados. (Nota 1,6 A= 1600 mA).

Posso conectar outros adaptadores?

Como você pode compreender eu não pude provar TODOS os adaptadores do mercado, mas a princípio não deveria haver nenhum problema. O único que usei massivamente foi um PlusD, e não deu problema com o adaptador.

Inclusive uma interface Kempston?

Não há problema desde que você coloque o jumper na posição correta (para usar a Kempston entre o pino 2 e 3). Leia a seção sobre o funcionamento para mais detalhes.

Se conecto o adaptador atrás da ZX Printer ou do adaptador (coloque aqui o nome do seu adaptador) não funciona o teclado do PC; O que acontece?

Muitos adaptadores, como a própria ZX Printer, a Interface II, etc, por questões meramente econômicas não estendem a totalidade do bus de expansão ao seu conector de saída, com o que podem faltar alguns dos sinais. Isto pode fazer com que tanto este como outros adaptadores comerciais (como o PlusD) não funcionem.

Posso colocar um cristal de quartzo de mais de 4Mhz no circuito?

Não. Até onde eu sei, o PIC 16F84A 04P funciona nesta velocidade.

E um de menos velocidade?

Não os pulsos de tempo e pulsos gerados no programa interno do PIC estão calculados para 4Mhz, uma velocidade inferior poderia gerar erros na leitura do teclado.

Devo usar um conector DIN 5 pontas ou Mini DIN de 6 pontas segundo o modelo de teclado AT ou PS/2 ?

A idéia é que se use o tipo de conector do teclado que você planeja usar. Pode além do mais usar o típico conversor entre estes dois tipos de conexão. Embora muito raro, existem teclados PS/2 com conector DIN 5. O motivo pelo qual no protótipo uso o DIN 5, é por que não encontrei em nenhuma loja de eletrônica um conector fêmea Mini DIN para montagem no chassis, todos são para C.I.

Você pensa em incluir algum tipo de funcionalidade adicional como auto-repetição para tiro, emulação de joystick Kempston, etc?

Não. Também descarto melhorias futuras do programa que controla o PIC, mas no momento não tenho nenhum plano de melhorias.

Quando estou escrevendo um programa em BASIC, se pressiono rapidamente as teclas não obtenho o número de caracteres correspondentes ao número de pressionamentos que fiz. Há algo errado em meu adaptador? É uma falha do desenho ou problemas de velocidade?

Não há nada de errado nem no adaptador nem no desenho. É um problema original do Spectrum que devido a sensação táctil ao pressionar as teclas de borracha você não havia notado até agora. O editor do BASIC, para dizer a verdade, lê o teclado muito lentamente, para ser exato, realiza uma leitura a cada 20 milissegundos e pode acontecer que pressione e soltes a tecla antes que ele chegue a tentar ler a semi-fila em questão, ou seja, em menos de 20 milissegundos. Isto foi algo que me chamou a atenção quando substitui a membrana de um Spectrum avariado por pressionadores, se pressionava e soltava uma tecla dez vezes seguidas a toda velocidade obtinha 6 ou 7 letras no lugar das dez que havia teclado. Aqui tem o oscilograma do sinal que ativa a leitura, pode observar os oito pulsos correspondentes as 8 semi-filas.

Dados técnicos: a leitura do teclado produz uma quantidade de 8 pulsos de 700 nanosegundos cada um, com um período de 20 milissegundos entre cada quantidade, a separação entre os pulsos da mesma quantidade é de 16 microssegundos. Este é o comportamento do editor de BASIC, uma vez carregado, cada programa efetua as leituras do teclado a seu próprio ritmo, normalmente mais rápido, não de forma periódica e não em todas as semi-filas.

Osciloscópio

Se pressiono mais de “x” teclas simultaneamente parece que as última não atuam. É uma avaria ou um defeito?

Nenhum dos dois, este problema na realidade é causado pelo próprio teclado. Pela própria arquitetura dos teclados do PC, e dependendo do fabricante, tem um número máximo de teclas que podem manter-se pressionadas simultaneamente antes de dar erro. Normalmente são cinco ou seis e também depende de que teclas se trata. Só podes troca de teclado e esperar que outro lhe dê uma resposta melhor. De todos os modos eu ainda não encontrei nenhum programa que precise ter pressionadas “simultaneamente” mais de 5 teclas.

Tenho um teclado muito velho, com as funções na parte esquerda e eu queria usá-lo com a interface. Planeja dar suporte a teclados XT?

Não, a diferença entre este tipo de teclado e os do tipo AT ou PS/2 em nível de comunicação é muito grande e não compensa reescrever todas as rotinas de comunicações para dar suporte a estes modelos. Não gaste tempo provando, se é um XT autêntico eu asseguro que não funciona.

Mas a mim me encanta o Fairlight e não funciona. O que posso fazer?

Aqui tem o poke que soluciona o problema com o controle neste programa: POKE 62470,24.

Posso usar o IMAR-3 com um PLUS 128K, +2 ou +3?

Não, ele está desenhado para funcionar somente no 48K e 48K+.

Por que dois modos de funcionamento Normal e Edição?

O ideal sería o modo edição permanentemente, mas este modo dava problemas com o rendimento, pois deve realizar mais comprovações em cada pressionamento. Além do mais dava conflitos quando se pressionavam teclas especiais e Caps Shift simultaneamente, como eu não queria renunciar as teclas especiais eu criei o modo normal para jogar e o modo edição para desfrutar destas funções avançadas (Comutável com o F12).

O software que é executado dentro do PIC é Freeware?

Não, na realidade é GreatGuyWare (traduzido: Grande-Homem-Ware), isto quer dizer que se você quer usar deves escrever-me uma mensagem dizendo-me “quão maravilhoso que sou por compartilhar o meu trabalho com os demais, e interessante por não querer lucrar a partir disso”. Isto me ajuda a saber se realmente a pessoa usa a informação que compartilho aqui e promove o nascimento de novos projetos como este.

Se tem alguma pergunta não respondida aqui, por favor me escreva em

DROY @ ERESMAS . COM


História

24/4/2002 Comecei o desenho do adaptador

26/4/2002 Fim do desenho do adaptador. Versão A

27/4/2002 Construção de uma placa com o PIC e um display LCD para testar teclados.

28/4/2002 Primeiras rotinas de comunicação com o teclado.

28/4/2002 Trabalhando na leitura e parcialmente na gravação

29/4/2002 Trabalhando na leitura e gravação

30/4/2002 Trabalhando com resposta Test Pased e ACKs completos

02/5/2002 Modo de trabalho no Scan Mode 3

03/5/2002 Comentários e tunning das rotinas.

04/5/2002 Construção do protótipo Versão A

05/6/2002 Provas com Spectrum

10/6/2002 Inicia bem e Aceita pressionamento de alguma tecla.

15/6/2002 Funcionando com todas as teclas do Spectrum (Só make)

17/6/2002 Funcionando total, falta debug e funções.

20/6/2002 Funcionando com teclas duplas, algo lento.

20/6/2002 Funcionando com teclas duplas OK e apagado com autorepeat.

23/6/2002 Eliminado Bug no WriteM

24/6/2002 Começo de provas com software comercial.

25/6/2002 Corrigido o problema do Knight Lore (Leituras duplas de semi-filas)

01/6/2002 Fim do redesenho versão B

02/7/2002 Construção do novo protótipo versão B.

03/7/2002 Resolvido problema do Manic Miner (Interferências da minha PlusD com a Kemston)

04/7/2002 Adicionadas correções na placa agora na versão C

05/7/2002 Bati todos meus recordes de juventude no Decathlon e HyperSports.

07/7/2002 Corrigido o problema no Fairlight I e II. (não terminado)

08/7/2002 Debug e Tunning

25/7/2002 Publicado este artigo.

10/8/2002 Re-escrevi o programa de controle em linguagem JAL (parecido com o C mas o compilador é Freeware).

11/8/2002 Julio Medina nos alerta de um erro na tabela dos pinos de alimentação dos C.I. (peço desculpas a todos, obrigado pelo aviso Julio)

13/8/2002 Suportados os teclados AT e PS/2 com o mesmo programa *.hex.

15/8/2002 Implementada simulação Joystick Sinclair com as teclas do cursor.

16/8/2002 Implementado modo avançado (Movimento do cursor,virgulas,ponto e vírgula , Etc).

01/9/2002 Pequenas mudanças, agora Versão D

05/9/2002 Disponível desenho no PCB (Circuito impresso) EAGLE 4.0


Downloads

imar3_sch_PDF_D.zip (Novo! 5/9/2002) Esquema do adaptador em formato PDF
imar3_sch_D.zip (Novo! 5/9/2002) Esquema do adaptador para Eagle 4.0
ZX-Conect_lbr.zip (Novo! 5/9/2002) Library para Eagle do conector para o Spectrum
imar3_pcb_PDF_D.zip (Novo! 5/9/2002) Desenho da placa de circuito impresso em PDF
imar3_pcb_D.zip (Novo! 5/9/2002) Desenho da placa de circuito impresso em EAGLE
imar3_Hex_V2.zip Programa de controle para teclados PS/2 e AT
Programador_PICs.zip Esquema de um programador de PICS

Agradecimentos / Thanks to:

Minha mulher, Maria Jesús, que continua mostrando uma paciência infinita com meus ataques e inclusive conferiu e corrigiu este texto.

A meu irmão Eduardo por comprar-me livros de eletrônica quando eu era pequeno e ajudar-me a convencer meu pai para que comprasse um Spectrum quando só tínhamos dinheiro para um ZX81.

Agradecimentos a Wouter van Ooijen por este maravilhoso compilador JAL e por fazê-lo freeware. 
http://www.voti.nl/e_index.html

A todos aqueles aficcionados a “qualquer coisa” que compartilham e divulgam suas experiências e conhecimentos desinteressadamente na Internet e tornam possível que outros, como eu, as encontrem e as possam aproveitar, desfrutar, aprender delas e que, resumindo, transformam a Internet em algo, não somento útil, mas mais humano.

Agradecimentos a todas as pessoas que contribuíram para este grade FAQ do teclado do PC. 
www.paranoia.com/~filipg

Agradecimentos a Craig Peacock por seu excelente artigo sobre interfaceamento do teclado AT e para o diagrama de tempo do teclado que você pode ver nesta página. Obrigado Craig.

Madri, 25 de julho de 2002


Disclaimer

Sinto muito, não sei como chamar isto em castelhano, mas todos já sabem o que quero dizer. Eu compartilho esta informação e o conteúdo no resto dos arquivos sem garantia nenhuma e por suporto sem responsabilidade dos danos que possam causar o seu uso indevido ou inadequado. O que posso dizer é que tudo funciona perfeitamente e nunca soube que um Spectrum tenha estragado com estas experiências, mas...



EnterNEXT
 Início > Menu >PRINT > Adaptador de teclado PC para Spectrum
Versão 2.1 - 18/01/2012

black blue
red
magenta
green
cyan
yellow
white
black blue red magenta green cyan yellow white