Quest escribió:¿Cómo está implementado el protocolo de lectura de teclado ps/2? (no tengo idea de verilog/vhdl ni nada parecido para verlo en vuestro código), ¿es 100% según norma?
Es según norma.... la recepción. La transmisión aún no está implementada. Es decir, no se transmite ningún código desde el ZX-Uno al teclado. Esto significa que el teclado funciona con sus parámetros por defecto.
Quest escribió:Por otro lado, las señales son basadas en +5v (data y clock con pullups). Perdonad si mi terminología no es del todo corredcta, aún estoy en fase de aprendizaje.
Las señales que provee un teclado deberían estar en colector abierto. Es decir, no debes poner pullups en tu teclado, sino que es el host (el PC o el ZX-Uno en este caso) quien provee los pullups. Dicho de otra forma, tu teclado debe dar o bien un 0, o bien un estado de alta impedancia, pero nunca nunca, +5V, ni directos ni con pullups.
Quest escribió:con algún glitch, a veces no detecta bien el shift o lo deja fijo
Eso ocurre si al pulsar una tecla con Shift, por ejemplo, la tecla de los dos puntos, haces la siguiente operación: pulsa shift, pulsa dos puntos, suelta shift, suelta dos puntos. Si lo haces así, el traductor PS/2 -> matriz de Spectrum se hace un lío y no borra el estado de la tecla "traducida" (que en el Spectrum sería Symbol Shift + Z). Si la secuencia es: pulsa shift, pulsa dos puntos, suelta dos puntos, suelta shift, entonces no existe ese problema.
Quest escribió:y a veces las repeticiones no son 100% regulares
Eso ocurre porque el teclado PS/2, por defecto, tiene autorrepetición incluida en las teclas, que interfiere con la autorrepetición de la ROM del Spectrum. Cuando se le incorpore la transmisión al protocolo PS/2 podremos enviarle el comando de que anule la autorrepetición.
Quest escribió:no funciona con un teclado USB ASUS moderno conectado a un adaptador USB->PS/2. Ese mismo teclado con ese mismo adaptador sí funciona en un PC.
Los teclados duales PS2-USB funcionan por defecto en modo USB, a menos que reciban un comando de reset desde el host PS/2. Como el ZX-Uno aún no puede enviar ningún comando, el teclado no se cosca y sigue en modo USB.
Quest escribió:EDITO 2: He hecho algunas pruebas más. Para conseguir que funcione fino en el ZX-UNO, tras probar diferentes rangos de velocidades, he tenido que usar exactamente un ciclo de reloj de 840us, lo que significa una velocidad de 1.190476 Khz. Así todas las pulsaciones quedan perfectamente registradas en el ZX-UNO y las repeticiones funcionan perfectamente, pero evidentemente en el PC no funciona, porque es más de 10 veces más lento de lo que debiera. Sería interesante saber qué está ocurriendo exactamente.
Comprueba primero de todo que el teclado no esté enviando señales de 5V a la FPGA. Debería ser o bien 0, o bien alta impedancia.
El core de teclado PS/2 de todas formas está siendo (poco a poco) reescrito desde 0, para dar cabida a dos cosas que necesitamos: la bidireccionalidad, y el soporte de ratón PS/2. En el core vgatest1 que sirve fundamentalmente para probar timmings de pantalla con la VGA ya empleo este nuevo core que estoy escribiendo. Si tienes soldada la plaquita VGA y puedes probar este core, a ver si con él tu teclado funciona mejor.
Pero repito que es imprescindible que a nivel eléctrico se cumpla que las salidas estén en colector abierto, sin pullups por parte del teclado.