Construyendo un MSX. Parte 2: El teclado

By Palver

Expert (87)

Palver's picture

26-11-2019, 22:31

Cuando se habla de teclados en proyectos con fpga, lo típico (OCM, ZEMMIX NEO) suele ser utilizar un teclado PS2. Pero los teclados PS2 no es que sean muy abundantes hoy en día. Lo más lógico sería usar un teclado USB, que los tenemos de todos los tipos, formatos, tamaños y colores. Peero para una fpga, hablar con un teclado USB debe ser condenadamente difícil, o al menos no es fácil encontrar a alguien que lo haya hecho. Lo bueno es que hay otros dispositivos que no tienen ningún problema para hablar con un teclado moderno, por ejemplo, cualquier PC y algunos Arduinos. Para esta aplicación, además de tener un puerto USB, hace falta algún puerto de salida para hablar con la fpga. En este caso la ganadora, por precio, prestaciones, facilidad de uso… y porque estaba muy a mano, es una raspberry pi.

La idea es: la raspberry lee el teclado USB y envía el estado de las teclas a la fpga en un idioma que entienda fácilmente.

Primer problema: las teclas de un teclado actual no coinciden con las de un MSX. Eso significa que hay que hacer un mapeado para convertir las teclas USB en teclas MSX. A veces la pulsación de una tecla en el USB da lugar a la pulsación de dos teclas en el MSX (teclas F6-F10).

Segundo problema: la tecla CAPS LOCK, o más concretamente su LED, se comporta de distinta manera. En los teclados modernos, el control de LED lo tiene el propio teclado, mientras que en el MSX la tecla CAPS LOCK es una tecla normal y el LED lo enciende el ordenador.

Tercer problema: algunas teclas tienen funciones espaciales que interfieren, como la tecla Windows. Por ahora la solución es un pedazo de papel bloqueando esa tecla. Lo sé, el glamour no es lo mío.

Con estos problemas en mente, se puede hacer un pequeño programa en Python que:
• Lee el estado de las teclas del teclado USB
• Convierte este estado en pulsaciones de teclas de teclado MSX
• Genera la información de las filas de teclas de la matriz que espera el MSX
• Transfiere las filas a la fpga

La comunicación entre raspberry y fpga usa el puerto SPI, porque sólo necesita tres pines (MOSI, SCK y SS) y es un protocolo fácil: el puerto SPI manda la información serializada, igual que el RS-232, pero sin cabecera ni bit de stop, sólo los datos. Y los datos son el estado de todas las filas, que se almacena en varios buffers. El puerto C del PPI selecciona la fila, que pasa al puerto B a través de un multiplexor. Este sería el esquema:

https://drive.google.com/open?id=1l7z41grY1XqT_Yp1anwW8d6u7PpD4tUU

El teclado de origen es un Ajazz AK33: mecánico, 82 teclas, un buen tacto y una iluminación azul muy a tono con el estilo MSX. Al tener disposición internacional la correspondencia entre la mayoría de teclas es directa con las del SVI-728.

Las teclas con mapeado especial son:
• Home: Stop
• PgUp: CLS
• PgDn: Ins
• End: Select
• Alt: Graph
• Ctrl derecha: Code
• Tilde: Ñ

El programa en Python está disponible aquí.

Y, bueno. Pues funciona.

Login or register to post comments