Teclados PS2 en Sony HB 10p/20p

Proyectos de hardware con sus esquemáticos y si llevan software en fuente

Moderadores: cacharreo, Fundadores

Reglas del Foro
Aquí solo tienen cabida proyectos de hardware que incluyan siempre al menos sus esquemáticos para poder reproducirlos si llevan componentes electrónicos, y si es posible los ficheros del programa en que se hacen, los diseños de las placas, los gerber, etc. Si llevan algún tipo de software asociado debe estar diponible el código fuente

Para los que no cumplen estas condiciones se debe postear en el foro de proyectos generales.
Responder
Avatar de Usuario
dc740 !Msx 3
Seguidor infernal
Seguidor infernal
Mensajes: 12
Registrado: 15 Nov 2022, 01:49
Has thanked: 4 times
Been thanked: 13 times

Teclados PS2 en Sony HB 10p/20p

Mensaje por dc740 »

UPDATE: el post ha quedado viejo, y ahora funciona todo como corresponde. Dejo el pinout que estoy usando actualmente con un Teensy++ 2.0 (se pueden conseguir clones económicos, o conseguir de segunda mano. Creo que queda poco y nada de stock oficial, pero es lo que tenía a mano en casa.)
 Header MSX  Pin  Función  Puerto Teensy++ 2.0 (AT90USB1286) 
8Y0Input pullup con InterruptD0
9Y1Input pullup con InterruptD1
19Y2Input pullup con InterruptD2
14Y3Input pullup con InterruptD3
15Y4Input pullup con InterruptE4
13Y5Input pullup con InterruptE5
21Y6Input pullup con InterruptE6
6Y7Input pullup con InterruptE7
5Y8Input pullup con Pin Change InterruptB0
20X0OutputC0
11X1OutputC1
18X2OutputC2
7X3OutputC3
16X4OutputC4
12X5OutputC5
10X6OutputC6
17X7OutputC7
Todos los pines en el AT90USB1286 fueron seleccionados para reducir lo máximo posible el tiempo de respuesta. He logrado que las señales respondan entre 1 y 1,2 microsegundos, que es mucho menor a los 3,5us requeridos, y muchísimo menor a los 4us que demoraba en hacer lo mismo con las bibliotecas de Arduino.

Todos los pines responden tanto a falling como raising edges. Algo que es importante si queremos evitar caracteres indeseados, sobre todo en BASIC. Además que también es necesario si la aplicación que estemos ejecutando no usa el BIOS para leer la matriz del teclado.

Saludos!


---- POST ORIGINAL, desactualizado! -----
Hola, soy nuevo. Venía a compartir este proyecto, a ver si hay alguien interesado en ayudar probando y desarrollandolo. Está funcionando aunque con algunos problemas, para los cuales me vendría muy bien algo de ayuda desinteresada (es un proyecto libre a fin de cuentas).

https://github.com/dc740/matrix-kbd-simulator

La idea en sí es bastante sencilla. Simula un teclado de matriz usando cualquier Arduino de 16Mhz (o más).

La conexión es bastante simple y no necesita componentes externos (quizás un puerto PS2 hembra si no quieren cortar el cable del teclado)

Sólo necesita que saquemos 8 cables desde la placa de la MSX.

Desde el S3527, en el header de conexión a teclado (el de 24 pines, que incluso están numerados en la placa):

(removido pinout original que estaba aquí)

Como verán son 8 puertos de output... 8 bits... por los que en el Arduino habrá que usar un puerto entero para estos, así es más fácil.

Para el puerto PS2, es la conexión estandar a un Arduino. Un puerto de datos, uno de clock, Vcc y ground.

Características:
* permite conectar un teclado PS2
* Permite tipear más rápido de lo que lee basic, almacena las teclas y las va enviando una en una.

Problemas actuales:
* a veces se queda presionada alguna tecla (pierde el release)
* por algún motivo sólo funciona en BASIC. Cuando inicio algún cartucho no funciona. (AYUDA!!!)

Principio de funcionamiento:
* la MSX lee la matriz cada (1/(refresco video)), es decir, cada 20ms en 50hz.
* El S3527 recorre la matriz con pulsos de 17,666us para cada columna. Son 9
* El arduino lee el primer pulso y va cambiando la salida del puerto que hayamos elegido para simular que las teclas están presionadas.
* La primer columna hay que setearla un poco antes porque el arduino tarda 3,5us en setear el output luego de una interrupción, y no es lo suficientemente rápido.
* El resto de las columnas sólo es cuestión de establecer bien los timings.

Espero que les guste, y sobre todo... que les interese ayudar.

Saludos!
Última edición por dc740 el 26 Nov 2022, 02:23, editado 2 veces en total.
Avatar de Usuario
dc740 !Msx 3
Seguidor infernal
Seguidor infernal
Mensajes: 12
Registrado: 15 Nov 2022, 01:49
Has thanked: 4 times
Been thanked: 13 times

Re: Teclados PS2 en Sony HB 10p/20p

Mensaje por dc740 »

UPDATE:
hice una reimplementación completa en C basandome en un proyecto similar. Ahora funciona al 100%. No pude seguir usando Arduino, la velocidad de respuesta simplemente no era buena. Aunque sí me mantuve en un AVR a 16Mhz de clock. Nada fuera de lo común.

Luego actualizo el post original con los pinouts, porque finalmente para que fuera 100% reliable tuve que conectar Y0..Y8 completos. Antes usaba Y0 únicamente, pero eso daba muchísimos problemas de compatibilidad con algunos juegos, así que para solucionarlos tuve que usar todas las columnas de la matriz del teclado.
Eso implicó también tener que usar más interrupciones, y tener cuidado con los ciclos que usara cada una en cada caso (raising y falling edge). Pero bueno, al fin funciona! Tengo que hacer clean up del código, y tengo pensado agregar una feature interesante, que es la de sólo actualizar la columna de las flechas y la barra espaciadora, porque algunos juegos sólo usan esa columna (Y8), entonces tendría sentido implementar un low-latency mode que actualice las rows X0..X7 tan pronto como se presionan las teclas, sin esperar los 20ms (para la norma PAL) a que el BIOS lea la matriz completa.

Saludos!
Avatar de Usuario
Popopo
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3466
Registrado: 05 Nov 2019, 15:25
Has thanked: 1120 times
Been thanked: 570 times

Re: Teclados PS2 en Sony HB 10p/20p

Mensaje por Popopo »

Felicidades por tan buen trabajo.
:)

Edito: Igual acabo probandolo, porque mi MSX tiene la membrana rota. Aunque creo que es otro modelo diferente.
Avatar de Usuario
dc740 !Msx 3
Seguidor infernal
Seguidor infernal
Mensajes: 12
Registrado: 15 Nov 2022, 01:49
Has thanked: 4 times
Been thanked: 13 times

Re: Teclados PS2 en Sony HB 10p/20p

Mensaje por dc740 »

Pues muchas gracias por el apoyo.

Hoy he agregado un feature nuevo:
Si el teclado NO está conectado, el mod se apaga solo hasta el próximo boot. No tiene sentido agregar soporte para plug and play porque no es buena idea hacer plug and play con un dispositivo PS2. Puede que el circuito lo soporte, como puede que no. En este caso, el circuito es muy sencillo y no tiene protecciones, así que nada de insertar el teclado con el MSX encendido.

Proximamente: mapear correctamente los signos ? y -, que me han quedado invertidos(*), y agregar el feature para respuesta instantanea en juegos que sólo leen la columna de las flechas y la barra espaciadora.

(*) puede que algún otra tecla no hay quedado bien mapeada, pero eso es cuestión de probar, y cambiar el numero de keycode al que responde.

Saludos!
Avatar de Usuario
dc740 !Msx 3
Seguidor infernal
Seguidor infernal
Mensajes: 12
Registrado: 15 Nov 2022, 01:49
Has thanked: 4 times
Been thanked: 13 times

Re: Teclados PS2 en Sony HB 10p/20p

Mensaje por dc740 »

Vengo con muy buenas noticias. He logrado implementar todas las funcionalidades que quería. La respuesta debería ser instantanea en todos los juegos finalmente, y con los últimos cambios la compatibilidad debería ser total también. La matriz del teclado se actualiza en todo momento y se comporta como si fuese el hardware de la membrana para todos los casos. Lo he probado con juegos que usan el BIOS para leer el teclado, así como también con juegos que implementan funciones personalizadas (por ejemplo: dejan la columna de la barra espaciadora seleccionada+flechas y leen sólo eso).

Como proyecto debería estar finalizado. (bueno, es que no he encontrado problemas... pero del dicho al hecho hay un largo trecho, obviamente)

Si alguien fabrica el hardware, recomiendo usar un cristal de 20Mhz en lugar de 16Mhz. Es un proyecto donde los tiempos tienen que ser MUY justos, y he sufrido mucho para hacerlo funcionar con 16Mhz. Lo he logrado, pero mejor quedaría con un clock más elevado, por seguridad.

Pues nada, si alguien finalmente lo usa para revivir uno de estos ordenadores, que envíe fotos a ver que tal le ha quedado! Por mi parte ya lo tengo funcionando y lo doy por finalizado. Más detalles en el README en github

Saludos!
Responder

Volver a “Proyectos de hardware abiertos”