Adaptador de teclado PC para Spectrum
IMAR-3

(C) Droy 2002

 
Mientras escribía la sección de ideas para solucionar los problemas del teclado del Spectrum algunos me preguntaron si no era posible usar un teclado de PC tal cual, con algún adaptador. Yo conocía ya la solución de los chicos de Sintech, pero al ser una solución “Comercial” no está disponible ni el esquema ni el microprograma que gobierna el microcontrolador que seguramente lleva en su interior.
 
También hay una página italiana donde publican un esquema de muy mala calidad y no está disponible el programa de control del microcontrolador, además usan un integrado muy especial para simular las pulsaciones y por consiguiente es muy difícil de encontrar y seguramente caro.
 
Para ser honesto, casi me alegré de esta carencia de información, pues me animaba más a comenzar un proyecto desde cero: diseño, construcción del prototipo, programación, debugging, etc.
 
Tras algunos retrasos por problemas técnicos puedo anunciar, no carente de orgullo, lo que he bautizado como IMAR-3, el adaptador de teclado PC para Spectrum del Trastero (Made in Spain), con toda la información necesaria para su construcción por los aficionados a la electrónica.
 

Si lo que te interesa es construir uno sin tener que gastar tiempo leyendo aburridas disertaciones sobre electrónica, puertos de entrada salida y otras gaitas, puedes ir directamente a la sección descargas y bajarte todo lo necesario para su construcción.

Adaptador de teclado PC para Spectrum

¿ Qué hace este adaptador realmente? ¿Tengo que cargar algo en el Spectrum ?
¿ Cómo funciona el teclado del Spectrum?
¿Cómo funciona un teclado de PC?
Funcionamiento del adaptador
Mapa del teclado
Construcción
El momento del encendido
Problemas conocidos
Preguntas y respuestas
Historia
Descargas
Agradecimientos
Disclaimer


¿ Qué hace este adaptador realmente?¿Tengo que cargar algo en el Spectrum ?

Este adaptador se conecta al bus de expansión igual que los adaptadores de Joystick, de forma que tenemos disponible una conexión para un teclado estándar de PC del tipo AT o PS/2. (No los antiguos XT de 94 teclas). Este adaptador dispone de un microcontrolador del tipo PIC-16F84, ampliamente conocido por los piratas del Canal Satélite Digital, pues se usa en algunas de las tarjetas que lo piratean (PICCAR 1).

Este microcontrolador ha de ser programado antes de su inclusión en la placa - mas adelante explico como puedes hacerlo-. Una vez programado el PIC e instalado en su zócalo no será necesario nada más que encender y usar, no es necesario cargar nada en el Spectrum ni es necesario abrirlo para nada.

¿ Cómo funciona el teclado del Spectrum?

Si has abierto alguna vez tu Spectrum habrás podido comprobar que de la mitad superior de la carcasa salen dos cables planos de 8 y 5 contactos. Estos cables realmente forman parte de la propia membrana, que no es mas que una matriz de contactos bajo las gomas de las teclas. Esta matriz está repartida en 8 semifilas de 5 teclas cada una, que corresponden con los contactos de la membrana. Ver esquema siguiente para mas detalles:

Como puedes ver en el esquema superior cada una de las 8 semifilas está conectada a una de las líneas de dirección de la mitad superior del bus, y el otro extremo de cada tecla en grupos de cinco a una línea del bus de datos desde D0 a D4 a través de la ULA.

Generalmente cuando se quiere saber si una tecla está pulsada, se lee la semifila completa (Cinco teclas), leyendo el puerto de I/O que pone un cero en la línea de dirección de dicha semifila.

Por Ejemplo:

Supongamos que queremos saber si está pulsada la tecla “W”, para lo cual realizamos una lectura del puerto que le corresponde IN(64510) que en binario es 11111011 11111110, ésto pone a cero las líneas A0 para indicar a la ULA que estamos leyendo el teclado y la línea A10 a cero para indicar que estamos leyendo la semifila 2, ésto nos devolverá un número cuyos bits corresponden del D0 al D4 con las teclas QWERT respectivamente, al estar el bus de datos forzado a uno por las resistencias R65-R69 obtendremos un uno en reposo y un cero (obtenido del propio bus de direcciones) si está pulsada, así para este ejemplo dependiendo del valor del bit D1 sabremos el estado de la tecla “W” .

Para ver en vivo lo que acabo de contar puedes escribir el siguiente programa y ver el efecto que tiene la pulsación de distintas teclas simultáneamente en la semifila QWERT sobre el valor leído. Pasa el valor a binario y lo entenderás mejor. (También funciona en un emulador)

10 REM Ejemplo de lectura de teclas sin comando INKEY$
20 CLS
30 PRINT AT 10,1;“Byte leído en semifila 2:”;IN(64510)
40 GOTO 30
Ten en cuenta que los bits D5-D7 permanecerán siempre a uno. Puedes repetir lo mismo para las restantes semifilas; aquí tienes una tabla con las direcciones de lectura.

Dirección       Teclas        Semifila

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
 
¿Cómo funciona un teclado de PC?

Como acabamos de ver, el teclado de un Spectrum esta íntimamente unido a su hardware, en el caso de los teclados de PCs y su host es radicalmente diferente, de hecho solo hay que observar que el teclado y su host están conectados a través de 4 hilos. ( Entiendase “host” como dispositivo que se comunica con el teclado intercambiando información con él, en el caso de un PC, es el propio PC, en nuestro caso el microcontrolador actúa como host)

Existen muchas páginas en internet donde se puede obtener información técnica muy detallada, aquí solo pretendo hacer un resumen muy básico de su funcionamiento.

La conexión entre un teclado y el PC se realiza a o bien a través de un conector DIN 5 puntas en 180º o a través de un conector del tipo PS/2 (mini-din 6 puntas). En ambos casos una línea transmite la señal de reloj otra la de datos y dos más la alimentación +5V y GND.

DIN 5 PINES                                  Mini DIN 6 Pines PS/2


La comunicación entre el teclado y el host es en modo série con bit de arranque, ocho bits de datos, paridad impar y bit de parada. Es además bidireccional, el teclado informa al host de la actividad en las teclas y el host le envía comandos para su configuración, encendido de luces (BloqMayusculas/BloqNum/BloqDespl), re-inicialización, re-envío etc. Ésto hace que la señal de datos pueda ser usada por ambas partes, mientras que el reloj lo controla siempre el teclado.
 

LSB:    Less Significative Bit (Bit menos significativo)

MSB:   Most Significative Bit (Bit mas significativo)
P Odd:  Paridad Impar
ACK:    Acknowledge (Reconocimiento)
 
En el diagrama de tiempos superior podemos observar en color azul la señal controlada por el teclado y en rojo cuando está controlada por el host.
 
Lo más importante para el problema que nos ocupa es qué información nos da el teclado respecto de las pulsaciones. Cuando se pulsa una tecla, el teclado envía lo que se conoce como scancode, esto es un código asociado con cada tecla a través de una tabla. Existen tres modalidades o tablas dependiendo del tipo de teclado.
 
Scan Code Set 1: Es el usado en teclados del tipo XT de 83 teclas (Las teclas de función estaban en la parte izquierda)
Scan Code Set 2: Propio de teclados AT de 102 teclas, es el más usado.
Scan Code Set 3: Sólo usado en teclados del tipo PS/2.
 
El Set 1 se considera obsoleto, aunque algunos controladores de teclado transforman los scan codes 2 y 3 a este set por compatibilidad con software escrito para XTs. Lo más común, aunque varía según el fabricante, es que el teclado acepte trabajar con el Set 2 y 3.
 
El Set 3 permite además configurar el teclado en una modalidad de respuesta más afín con las necesidades de nuestro adaptador, por consiguiente es el modo de funcionamiento que he elegido. Para dar cobertura a teclados viejos he escrito otro microprograma con menos funcionalidades (Tecla borrar, escape, cursores, punto, coma, punto y coma etc) que funciona con teclados del tipo AT en Scan Code Set 2.
 
A parte de los Sets, se puede configurar para los siguientes modos de trabajo:
Make: Cuando se pulsa una tecla se envía el Scan Code y nada cuando de libera.
Make/Break: Cuando se pulsa se envía el Scan Code y cuando se suelta también precedido de un código de liberación (F0)
Typematic: Cuando se pulsa se envía el Scan Code, y pasado un breve período de tiempo se reenvía continuamente hasta que se libera la tecla.
 
Los teclados AT permiten configurar los tiempos de auto-repetición (Typematic) pero no todos permiten el modo “No typematic” , por el contrario los del tipo PS/2 si permiten este modo que sólo envía el Scan code cuando se pulsa y cuando se libera.
 
Aquí tienes un resumen de los Scan Codes del Set 3 útiles para nuestro 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  DONW=96  LEFT=97   RIGHT=106   <>=19
ESC=8  ,=65  :=73   ;=74  “=82
 
Cuando aparecen dos cifras se refiere a la misma tecla en la derecha o a la izquierda (como Control por ejemplo).
Para más información sobre los teclados de PC puedes consultar las siguientes páginas:
 
Buenísimo FAQ sobre el teclado del PC www.paranoia.com/~filipg
 
Mucha y buena información técnica sobre Teclados
http://panda.cs.ndsu.edu/~achapwes/PICmicro/keyboard/atkeyboard
 
Funcionamiento del adaptador
 
El corazón del adaptador es el microcontrolador PIC 16F84. Este es un dispositivo barato, fácil de encontrar y programar. Básicamente es un microprocesador con una memoria Flash Eprom interna de programa de 1 Kbyte ( son bytes de 12 bits) una memoria RAM de datos de 68 bytes , y una memoria EEPROM para datos adicional de 64 Bytes (esta vez de 8 bits), además de 13 puertos configurables como entrada o salida. Existen varios modelos pero el más común es el 16F84A-04/P, Esta nomenclatura xxFxxA-04/P significa que la memoria de programa es Flash Eprom, velocidad de clock a 4 Mhz y su encapsulado es de plástico.
No voy a extenderme más, pues puedes encontrar toneladas de información en la red sobre este chip.
Si miras el esquema podrás comprobar que tanto la línea de datos como de reloj de la conexión de teclado van unidas directamente a los puertos RA1 y RA2 del PIC, éste toma el control de las comunicaciones, para mas detalles ver el programa fuente del PIC.
 
Usamos la memoria RAM 6116 para almacenar en sus 8 primeras direcciones el estado de cada una de las ocho semifilas, de forma que cuando el Spectrum quiere leer una el estado de una de ellas, en realidad el adaptador le entrega el contenido de la dirección de la memoria RAM donde tenemos almacenado el estado de dicha semifila, y de esta forma él “cree” que se están pulsando las teclas de su propio teclado.
 
Cuando se pulsa una tecla, el PIC obtiene el scan code correspondiente, en ese momento busca en su memoria EEPROM interna, donde previamente hemos cargado los códigos de los scan codes correspondientes a las teclas del Spectrum, si lo encuentra quiere decir que es una pulsación válida, de la dirección de memoria donde encuentra dicho scancode se obtienen los datos Tecla y Semifila que hay que “pulsar” en el Spectrum. Una vez calculado el valor a almacenar se comprueba a través del puerto RA4 si se está accediendo a leer el teclado, si no es así se bloquea este acceso a través del puerto RA2 durante el tiempo que se necesita para grabar el nuevo estado de la semifila en la dirección correspondiente en la RAM de nuestro adaptador.
 
Cuando el Spectrum lee una semifila lo hace con la instrucción maquina IN A,(FE),ésta activa (nivel bajo) las líneas /IORQ /RD y A0, las puertas OR IC5A y B, activan el transceiver (IC3 - 74LS245) cuando ésto sucede, permitiendo que el Spectrum obtenga el dato de lectura de puerto de la RAM (IC1 – 6116), es decir, cuando se está leyendo alguna semifila, el codificador con prioridad (IC7 – 74LS148) codifica en tres bits de dirección el número de semifila que está siendo leída, y el multiplexador cuádruple de dos entradas (IC4 - 74LS157) se encarga de dar acceso a la memoria al Spectrum o al PIC controlado por la lógica de IC5A,B,C y el propio PIC (puerto RA2).
 
Durante las pruebas del prototipo, observé un comportamiento anómalo en algunos juegos como el Manic Miner, y aunque en un principio pensé que debía estar pasando algo por alto con mi adaptador, pronto me percate que el problema no lo estaba produciendo el adaptador de teclado sino el PlusD (concretamente la versión que lleva la PAL “ALICE”) con el que cargaba los juegos. Estos juegos se podían arrancar o bien pulsando una tecla o bien pulsando el disparo del Joystick, siendo el control del juego seleccionado automáticamente de este modo. Por lo que he podido averiguar el PlusD con esta versión de PAL interfiere en las lecturas del puerto asignado al adaptador Kemston (Puerto 1F) de forma que los juegos “creen” que este interface está instalada y que se está pulsando el botón de disparo permanentemente.
En un principio (Version C) para solucionar este problema use la puerta OR sobrante en el IC5 , cinco diodos 1N4148 y un puente (jumper) para poder seleccionar cuando quería usar un interface Kempston. Como esto solo afectaba a los usuarios de PlusD con PAL Alice, y solo en un par de juegos, he decidido suprimir este "arreglo" en la placa de circuito impreso que corresponde a la ultima version de diseño (Version D) y asi simplificar un poco la placa. El programa de control del PIC no varía. Para mas información ponme un e-mail.
 
Mapa del teclado

 
Las teclas especiales del Spectrum han sido mapeadas con las del PC de la siguiente manera:



Spectrum

Teclado PS/2 o AT

Symbol Shift

Crtl (Derecho e Izquierdo)

Caps Shift

Shift (Derecho e izquierdo)
Caps Lock (Caps Shift + 2)
Caps Lock
Modo extendido (Caps Shift + Symbol Shift)
TAB (Sólo en modo edición)
Cursores
Flechas del cursor (Sólo en modo edición)
Borrar (Caps Shift + 0)
Borrar (Backspace)
Punto (.)
Punto (.) (Sólo en modo edición)
Coma (,)
Coma (,) (Sólo en modo edición) 
Punto y coma (;)
Punto y coma (;) (Sólo en modo edición) 
Comillas (“)
Shift + 2 (Sólo modo edición)
Break (Caps Shift + Space)
ESC (Sólo en modo edición)

Se puede alternar entre modo normal y modo edición con F12. Además las flechas del cursor están mapeadas con el joystick del interface II en modo normal siendo el disparo las teclas Alt y el cero del teclado numérico. Para jugar es preferible el modo normal pues se evitan posibles conflictos en pulsaciones dobles, y para escribir programas el modo edición. A los usuarios del PlusD y Disciple les gustará saber que en modo edicion F1 escribe LOAD d1;"snap "S y pone el cursor a la izquierda de la ultima comilla.

Construcción

Al igual que en otros montajes anteriores en los Trastos de Droy, este montaje se puede realizar también con placas preperforadas, si no te apetece usar revelador, insoladora, ácidos, etc puedes ponerte manos a la obra siguiendo los pasos de la siguiente sección. Yo he usado para el prototipo este método pues me permite durante el desarrollo realizar algunos cambios o modificaciones sin tener que rediseñar y rehacer la placa.

Por otro lado y una vez alcanzado un diseño definitivo (...al menos eso creo ahora) llega el momento de diseñar la placa de circuito impreso que facilite su construcción a los aficionados que no les de pereza usar el revelador el ácidos y demás herramientas. Esto lo abordaré en la próxima sección tan pronto como me sea posible, por el momento si quieres hacerlo en C.I. tendrás que diseñar la placa tu mismo, puedes usar el esquema dibujado con Eagle 4.0 como base, o esperar a que termine el mío.

1. Con placas preperforadas.

Si visitas la sección acerca del PlusD puedes ver cómo construir un adaptador de bus para usar cinta plana entre distintos dispositivos del Spectrum. He usado en este adaptador el mismo sistema, de forma que ahora puedo conectarlo con el PlusD a través de un cable de cinta plana.Visita la sección del PlusD para más detalles.
 

Como siempre, la foto de familia con los componentes antes de empezar ( realmente es ya por tradición). Si nunca has usado placa preperforada y deseas mas detalles de cómo trabajar con ellas puedes visitar las otras secciones donde explico cómo trabajo yo con este tipo de placas.

Básicamente para realizar un montaje en placa preperforada, lo que hago es colocar los componentes y fijarlos temporalmente con celo para buscar la distribución que mejor se ajuste a mis necesidades. Tras varias reorganizaciones, y teniendo en cuenta las perforaciones que cada patilla va ha necesitar, además de las que se pierden con la taladradora o el cutter para separar pistas, la placa puede presentar un aspecto como el siguiente:

Puedes observar en el esquema que existen varios condensadores de 100 nF en paralelo con la alimentación, su objetivo es reducir el ruido eléctrico típico de la tecnología TTL, lo importante es que estén próximos a las patillas de alimentación de los integrados y no todos juntos en un rincón de la placa, mira la foto para hacerte una idea.

Mi técnica para no olvidar conexiones es marcar con un rotulador rojo sobre el esquema las uniones según las voy completando. No debes olvidar que las conexiones de alimentación de los integrados no suelen aparecen en el esquema, pues se dan por supuestas, evidentemente se deben realizar y corresponden con los siguientes pines:
 


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

Tras soldar todas las conexiones y completadas unas sesiones de bricolaje con la caja el adaptador puede ir presentando el siguiente aspecto:

Si una imagen vale más que mil palabras, aquí tienes unas 15.342.845 palabras que lo aclaran todo sobre la mecanización del adaptador, observa como la propia caja de aluminio hace las veces de refrigerador para el regulador 7805 que se aloja fuera de la placa.

Alguna de estas fotos pueden corresponder a una distribución y número de componentes distintos de los mostrados anteriormente, ésto es debido a los distintos cambios que durante la fase de desarrollo ha sufrido este adaptador, de cualquier forma ilustran la idea del montaje que quiero transmitir, bastará con seguir el esquema teórico que corresponde a la última versión ya depurada del adaptador.

Para poder conectar más dispositivos por cinta plana, fue necesario conectar internamente un macho de 34 pines de cara al exterior. (Visible en la foto):

2. Con circuito impreso.
Si tienes algo de experiencia en la elaboracion de circuito impreso seguramente prefieras construir este adaptador con este material, en la sección de Descargas tienes disponibles los ficheros con los fotolitos y los originales realizados con Eagle 4.0 para la realización en C.I. La mecanización de la caja suele ser un problema, en esta sección puedes encontrar ideas para la construcción de esta de una forma simple y original.

En este diseño he pretendido no sólo facilitar su posterior mecanización sino propagar el propio bus de expansión para que puedas conectar algún otro adaptador a parte del IMAR-3. Las pistas son bastante finas por lo que es prácticamente imprescindible la fabricación por insoladora. Si crees que la disposición de componentes y pistas puede optimizarse no me aburras con los detalles, hazlo con Eagle, “LO PRUEBAS !!!” y lo publicamos aquí con tu nombre y nuestro agradecimiento.

Como puedes observar en la parte inferior, el bus de expansión se propaga con una pequeña placa, soldando a esta los propios pines del conector de expansión. En realidad propagar el bus es opcional, si no piensas usar mas adaptadores, o los que vas a usar ya propagan el bus, puedes ahorrarte esta parte. Si decides usar esta expansión no olvides estañar los contactos, para lo cual te recomiendo usar pasta de soldar. No olvides recortar el Slot en la placa extensora.

Debes atornillar el LM7805 (Regulador de tensión) a un refrigerador, un “Recorte de aluminio” puede servir tanto para el refrigerador como para las escuadras que aseguran la placa de expansión. (... TRUCO, a mi en las carpinterías de aluminio me regalan los pequeños recortes, y los grandes me los venden baratos. Prueba en la de tu barrio !!)

En la siguientes fotos puedes ver con mas detalle algunos aspectos de la mecanización del adaptador.

La parte frontal esta cubierta con una placa de fibra de vidrio (... “TRUCO” es una placa de circuito impreso con la cara de cobre totalmente consumida por el ácido, sobrante de un experimento fallido, es un material barato y fácil de trabajar). La parte trasera esta protegida por una plancha de metacrilato (... es un recorte de otros trabajitos anteriores, puedes usar también fibra de vidrio u otro material como en el frontal , aunque el toque transparente lo hace mucho mas elegante.

El IMAR-3 conectado a un Spectrum 48K Plus.

Y aquí el IMAR-3 conectado a un Spectrum 48K y a un Interface II (Clónico) gracias a la propagación del bus.

Vista frontal, la conexión lateral del teclado permite asegurar la conexión de este tanto si el IMAR-3 es el primero del bus como si es el último, sin que se estorbe físicamente con otros adaptadores.

Nota para posibles compradores.

No tengo intención de vender adaptadores, pero estaría dispuesto a cambiar alguno por material relacionado con el Spectrum. Aunque te parezca mentira después de leer el articulo sobre los cartuchos del Interface II, no tengo ningún cartucho ROM original, si tienes alguno y te interesa cambiarlo escríbeme y hablamos. Solo estoy interesado en hardware preferiblemente Sinclair, nada de cintas de programas.

3. Cómo programar el PIC
La familia de microcontroladores PIC es una de las más usadas y versátiles, sólo tienes que echar un vistazo en la red para encontrar infinidad de recursos. Para conseguir tu PIC programado debes primero bajarte de la sección de descargas de esta misma página el programa correspondiente, comprar uno, su precio es de aproximadamente 5 o 6 € y después elegir entre las distintas alternativas para programarlo:
El momento del encendido

Cuando todo este listo para encender sería buena idea dar un repaso general antes de conectarlo. Especialmente poner atención a la key del conector del Spectrum que es la que nos sirve de guía para no meter el conector desplazado. Al encender deben iluminarse todas las luces del teclado por un instante, apagarse y después encenderse permanentemente la luz del Caps Lock, esto indica que se ha iniciado bien el teclado por lo que el PIC está trabajando bien.

De la inicializacion del teclado se encarga exclusivamente el PIC, así que si no obtenemos este comportamiento revisa atentamente las conexiones del microcontrolador. Para buscar un problema que impide la inicialización correcta puedes sacar todos los integrados de sus zócalos excepto el PIC, pues este es el único necesario para encender la luz de Caps Lock.

 
Antes de enviarme un e-mail comprueba que todos los integrados están alimentados (Ver texto arriba) que es el fallo más común, si dispones de osciloscopio comprueba la señal de reloj del PIC ( pines 15 y 16) repasa las soldaduras, conexiones, posición de los integrados en sus zócalos etc. Y si todo falla entonces me pones el e-mail.
 
Problemas conocidos

Una vez completada la construcción del primer prototipo comenzaron las pruebas con distintos programas comerciales para observar su comportamiento. Para ser sincero esperaba encontrar tan solo problemas de rendimiento, pues el programa de control del PIC estaba en una fase muy inicial y el programa estaba sin optimizar. Pero no fue así, el rendimiento parecía ser bueno pero un 30% de los programas presentaban ausencia en algunos de sus controles. Curiosamente todos los de la casa Ultimate con fecha posterior al Knigh Lore, éste incluido, presentaban el mismo problema (Precisamente mis favoritos...).

Para estudiar el problema detenidamente tuve que desensamblar estos programas y averiguar como sus programadores se las ingeniaban para realizar las lecturas de teclado.

Lectura simultanea de dos semifilas
Mi error fue suponer que los programas comerciales leían las semifilas como lo hacían las rutinas de la ROM, es decir, de una en una, como se hace en el propio editor del BASIC. Pero no es así, si eres un fan del Knight Lore sabrás que toda la fila superior (semifilas 1-5 y 6-0) tienen la misma función que es coger un objeto, de la misma forma las semifilas Q-T y Y-P sirven para saltar y las correspondientes a A–G y H-L sirven para avanzar. El truco del programador para optimizar las lecturas de teclado consistía en leer dos semifilas simultáneamente, ya que no importa que tecla esta siendo pulsada sino que “fila” (dos semifilas) tiene “alguna” tecla pulsada (no importa cual).

Esta técnica de lectura simultanea de dos semifilas me obligó a cambiar el diseño original, y sustituir un 74LS245 que hacia las veces de trasceiver por un 74LS148. Si has leído el apartado de “Como funciona “ sabrás que el 74LS148 es un codificador con prioridad, entrega una dirección de tres bits (de 000 a 111) dependiendo de cual de sus 8 entradas está a 0 (conectadas con A8-A15), ésto indica que semifila está siendo leída. Como es “con prioridad” si dos semifilas están siendo leídas al mismo tiempo, entregará la dirección de la de más prioridad, con lo que ahora al menos se obtendrá el estado de una de ellas.
 

Dicho en castellano, si el programa lee dos semifilas al mismo tiempo es por que no le importa que tecla se pulsa, si no qué fila tiene alguna tecla pulsada. Tras el rediseño el adaptador entregará en estos casos el estado de una de las dos semifilas, con lo que el programa tendrá todos sus controles operativos, aunque en estos programas para “el mismo control” sólo actuará una semifila.
 
Ejemplo:
Si en un programa la segunda fila (de la Q a la P) sirve para avanzar, es muy posible que las dos semifilas se lean simultáneamente. Como se entrega sólo el estado de la semifila más prioritaria sólo se avanzará con las teclas de la Q a la T. Quedando las teclas de la Y a la P sin utilidad en ese programa.
Estado del teclado en una sola lectura
Este problema sólo lo he encontrado en dos juegos de la misma casa Fairlight y Fairlight II. También fue necesario desensamblarlos para poder averiguar que estaba pasando. Los programas, durante su ejecución, deben comprobar periódicamente el estado de las teclas para tomar las decisiones oportunas, pero cuando hay que comprobar prácticamente todas las semifilas como es el caso de estos dos programas, puede resultar útil realizar una lectura múltiple (concretamente cinco semifilas a la vez). Esta lectura no nos puede decir que teclas están siendo pulsadas, pero sí nos dice si “alguna” lo está, entonces se lee selectivamente cada una de las semifilas para determinar cual y el movimiento o acción a realizar en consecuencia. De esta forma cuando no se está pulsando ninguna tecla el programa no gasta tiempo en leer una por una todas las semifilas.
 
En mi opinión esta técnica no resulta realmente ventajosa en cuanto a rendimiento, pues sólo se gana tiempo si no se está pulsando ninguna tecla, ya que en caso contrario estamos realizando una lectura de más. Ganar tiempo cuando no hay “Personajes” que mover, o pantallas que actualizar y perderlo con una lectura adicional cuando si lo hay no parece muy ventajoso, tal vez por ese motivo no hay más programas que empleen esta técnica.
 
Este problema tiene difícil solución con el diseño actual de adaptador, si no aparecen más programas con el mismo problema mucho me temo que quedará sin resolver.
 
Preguntas y respuestas
 
¿Es necesario cargar algún programa en el Spectrum?
No, creo que no resultaría de mucha ayuda para maquinas que tuvieran rota la membrana tener que teclear LOAD””. Simplemente lo enciendes y listo.
 
¿Pasa algo si se usa simultáneamente el teclado del Spectrum y el de PC?
No, los diodos D1 a D5 se encargan de aislar un circuito de otro. De todas formas si esto tiene alguna utilidad, házmelo saber.
 
¿Necesito una fuente de alimentación adicional?
No, este adaptador se alimenta tomando los 9V del propio bus antes de ser estabilizados por el 7805, con lo cual no sobrecarga a este en absoluto, pero si le añade una pequeña carga extra de unos 150 mA ( teclado PC incluido) a la fuente externa del Spectrum. Si tienes más adaptadores conectados simultáneamente, has de sumar la corriente extra que consume cada uno y verificar que sumados a los 600 mA que consume el Spectrum no te pasas de la corriente máxima que soporta el alimentador. Mira la pegatina de la fuente o en la parte de debajo de esta para encontrar este dato. (Nota 1’6 A= 1600 mA)
 
¿Puedo conectar otros adaptadores?
Como podéis comprender no he podido probar TODOS los adaptadores del mercado, en un principio no debería haber ningún problema. El único que he usado masivamente ha sido un PlusD , y no da problemas con el adaptador.
 
¿...Incluso un interface Kempston?
No hay problema mientras pongas el jumper en la posición correcta (Para usar el Kempston entre el pin 2 y 3). Lee le sección sobre funcionamiento para más detalles.
 
Si conecto el adaptador detrás de la ZX Printer o del adaptador (pon aquí el nombre de tu adaptador) no funciona el teclado del PC ¿Qué pasa?
Muchos adaptadores, como la propia ZX Printer, el Interface II, etc., por cuestiones meramente económicas no propagan la totalidad del bus de expansión a su conector de salida, con lo que pueden faltar algunas de las señales. Esto puede producir que tanto éste como otros adaptadores comerciales (como el PlusD) no funcionen.
 
¿Puedo poner un cristal de cuarzo de más de 4Mhz en el circuito?
No. Hasta donde yo se el PIC 16F84A 04P como máximo funciona a esta velocidad.
 
¿Y uno de menos velocidad?
No, los bucles de tiempo y pulsos generados en el programa interno del PIC están calculados para 4Mhz, una velocidad inferior podría generar errores en la lectura del teclado.

¿Debo usar un conector DIN 5 puntas o Mini DIN de 6 puntas según el modelo de teclado AT o PS/2 ?

Lo ideal es que uses el tipo de conector del teclado que tengas planeado usar. Puedes además usar el típico conversor entre estos dos tipos de conexión. Aunque es muy raro, existen teclados PS/2 con conector DIN 5. El motivo por el cual en el prototipo uso DIN 5, es por que no he encontrado en ninguna tienda de electrónica un conector hembra Mini DIN para montaje en chasis, todos son para C.I.

¿Tienes pensado incluir algún tipo de funcionalidad adicional como autorepeat para disparo, emulación de joystick Kempston etc?

No. Tampoco descarto mejoras futuras del programa que controla el PIC, pero por el momento no tengo ningún plan de mejora. Ver fecha 5/7/2002 en la sección historia.

Cuando estoy escribiendo un programa en BASIC, si pulso rápidamente las teclas no obtengo el número de caracteres correspondientes al número de pulsaciones que he realizado.¿Le pasa algo a mi adaptador? ¿Es un fallo de diseño o problemas de velocidad?

No le pasa nada ni al adaptador ni al diseño, es un problema original del Spectrum que debido a la sensación táctil al pulsar teclas de goma no habías notado hasta ahora. El editor del BASIC, a decir verdad, lee el teclado muy de tarde en tarde, para ser exactos realiza un barrido cada 20 milisegundos, y puede suceder que pulses y sueltes la tecla antes de que llegue a intentar leer la semifila en cuestión, es decir, en menos de 20 milisegundos. Esto fue algo que me llamó la atención cuando sustituí la membrana de un Spectrum averiado por pulsadores, (ver sección “ideas para resolver los problemas de la membrana”) si pulsaba y soltaba una tecla diez veces seguidas a toda velocidad obtenía 6 o 7 letras en lugar de las diez que había pulsado. Aquí tienes el oscilograma de la señal que activa la lectura, puedes observar los ocho pulsos correspondientes a las ocho semifilas.

Datos técnicos: La lectura del teclado produce un tren de 8 pulsos de 700 nanosegundos cada uno, con un período de 20 milisegundos entre cada tren, la separación entre los pulsos del mismo tren es de 16 microsegundos. Este es el comportamiento del editor del BASIC, una vez cargado, cada programa efectúa las lecturas de teclado a su propio ritmo, normalmente más rápido, no de forma periódica y no todas las semifilas.

Si pulso más de “X“ teclas simultáneamente parece que las últimas no actúan. ¿Es una avería o un defecto?

Ninguna de las dos, este problema en realidad es causado por el propio teclado. Por la propia arquitectura de los teclados de PC, y dependiendo del fabricante, tienen un número máximo de teclas que pueden mantenerse pulsadas simultáneamente antes de dar error. Normalmente son cinco o seis y también depende de que teclas se trata. Sólo puedes cambiar de teclado y esperar que otro te de una respuesta mejor. De todos modos yo aún no he encontrado ningún programa que requiera tener pulsadas “simultáneamente” más de cinco teclas.

Tengo un teclado muy viejo, con las funciones en la parte izquierda, y quisiera usarlo con el interface ¿Tienes planeado dar soporte a teclados XT?

No, la diferencia entre este tipo de teclados y los del tipo AT o PS/2 a nivel de comunicaciones es muy grande y no me compensa rescribir todas las rutinas de comunicaciones para dar soporte a estos modelos. No gastes tiempo probándolo, si es un XT auténtico seguro que no funciona.

Pero a mi me encanta el Fairlight y no funciona ¿Que puedo hacer?

Aqui tienes el poke que soluciona el problema con el control en este programa.

 POKE 62470,24

¿Puedo usar el IMAR-3 con un PLUS 128K, +2 o +3?

No, está diseñado para funcionar sólo en el 48K y 48K+.

¿Por qué dos modos de funcionamiento Normal y Edición?

Lo ideal sería el modo edición permanentemente, pero este modo planteaba problemas con el rendimiento, pues debe realizar más comprobaciones en cada pulsación. Además, se plantean conflictos cuando se pulsan teclas especiales y Caps Shift simultaneamente, como no quería renunciar a tener teclas especiales creé el modo normal para jugar y el modo edicion para disfrutar de estas funciones avanzadas. ( Conmutable con F12 )

¿El software que se ejecuta dentro del PIC es Freeware?

No, en realidad es GreatGuyWare (Traducido:Gran-Tipo-Ware), ésto quiere decir que si lo quieres usar debes escribirme una nota diciéndome “lo maravilloso que soy compartiendo mi trabajo con los demás y lo enrollado que resulto no haciendo negocio de esto”. Ésto me ayuda a saber si realmente la gente usa la información que comparto aquí y promueve el nacimiento de nuevos proyectos como este.

Si tienes alguna pregunta no respondida aquí, por favor, escríbeme a droy@eresmas.com

Historia

24/4/2002 Comienzo el diseño del adaptador.

26/4/2002 Fin del diseño del adaptador. Versión A
27/4/2002 Construcción de un placa con el PIC y un display LCD para testear teclados.
28/4/2002 Primeras rutinas de comunicación con teclado
28/4/2002 Trabajando en lectura y parcialmente en escritura
29/4/2002 Trabajando en lectura y escritura.
30/4/2002 Trabajando con respuesta Test Pased y ACKs completos
02/5/2002 Modo de trabajo en Scan Mode 3
03/5/2002 Comentarios y tunning del las rutinas.
04/5/2002 Construcción de prototipo Versión A
05/6/2002 Pruebas con Spectrum
10/6/2002 Inicia bien y Acepta pulsación de alguna tecla.
15/6/2002 Funcionando con todas las teclas del Spectrum (Sólo make)
17/6/2002 Funcionando total, falta debug y funciones.
20/6/2002 Funcionando con teclas dobles, algo lento.
20/6/2002 Funcionando con teclas dobles OK y borrado con autorepeat.
23/6/2002 Eliminado Bug en WriteM
24/6/2002 Comienzo de pruebas con software comercial.
25/6/2002 Aislado el problema del Knight Lore (Lecturas dobles de semifilas)
01/6/2002 Fin rediseño versión B
02/7/2002 Construcción del nuevo prototipo Versión B.
03/7/2002 Aislado problema del Manic Miner (Interferencias de mi PlusD con el Kemston)
04/7/2002 Se añaden correcciones a la placa ahora Versión C
05/7/2002 Bato todos mis records de juventud en el Decathlon e HyperSports.
07/7/2002 Aislado problema en Fairlight I y II. (no resuelto)
08/7/2002 Debug y Tunning
25/7/2002 Se publica este articulo.
10/8/2002 Reescribo el programa de control en lenguaje JAL (Parecido al C pero el compilador es Freeware).
11/8/2002 Julio Medina nos alerta de un error en la tabla de los pines de alimentacion de los C.I. (Pido disculpas a todos, gracias por el aviso Julio).
13/8/2002 Soportados los teclados AT y PS/2 con el mismo programa *.hex.
15/8/2002 Implementada simulacion Joystick Sinclair con las teclas del cursor.
16/8/2002 Implementado modo avanzado (Movimiento del cursor,comillas,punto y coma , Etc).
01/9/2002 Pequeños cambios en el esquema, ahora Version D. (Leer leeme.txt para detalles)
05/9/2002 Disponible diseño en PCB (Circuito impreso) EAGLE 4.0

Descargas

 
imar3_sch_PDF_D.zip (Nuevo! 5/9/2002) Esquema del adaptador en formato PDF
Esquema del adaptador para Eagle 4.0
Librería para Eagle del conector para el Spectrum
Diseño de la placa de circuito impreso en PDF
Diseño de la placa de circuito impreso en EAGLE
imar3_Hex_V2.zip 
Programa de control para teclados PS/2 y AT
Programador_PICs.zip Esquema de un programador de PICS

Agradecimientos / Thanks to:

Mi mujer, Maria Jesús, que sigue mostrando una paciencia infinita con mis cacharros, e incluso ha repasado y corregido este texto.
 
A mi hermano Eduardo por comprarme libros de electrónica cuando era un chaval, y ayudarme a convencer a mi padre para que me comprara un Spectrum cuando solo teníamos presupuesto para un ZX81.
 
Thanks to Wouter van Ooijen for his amazing compiler JAL, and for make it freeware.
http://www.voti.nl/e_index.html
 
A todos aquellos aficionados a “cualquier cosa” que comparten y divulgan sus experiencias y conocimientos desinteresadamente en “La Red” y hacen posible que otros, como yo, las encuentren y las puedan aprovechar, disfrutar, aprender de ellas y que, en resumen, convierten “La Red” en algo, no sólo útil, sino más humano.
 
Thanks to all the people that have contributed in this great PC Keyboard FAQ.
www.paranoia.com/~filipg
 
Thanks to Craig Peacock for his excelent article about interfacing the AT keyboard, and for the time diagrams of the keyboard that you can see in this page. Good job Craig, thanks.
 
Madrid, 25 de julio de 2002
 
Disclaimer

    Lo siento, no se como titular esto en Castellano, pero ya sabéis lo que quiero decir.

    Yo comparto esta información, y la contenida en el resto de ficheros sin garantía ninguna y por supuesto sin responsabilidad de los daños que pueda causar su uso indebido o inadecuado. Lo que te puedo decir es que todo funciona perfectamente y nunca se me ha estropeado ningún Spectrum en los experimentos, pero... tú mismo.

     Volver