Zona Arcade. Construye, Restaura y Decora tu Máquina Arcade y Pinball.

Tutorial: El blocking del hack de teclado. Postulados y teorías prácticas sobre cómo evitarlo

« Older   Newer »
  Share  
view post Posted on 3/3/2011, 18:37     +1   -1
Avatar

Restless in Peace

Group:
Administrator
Posts:
42,854
Location:
Alcobendas (Madrid)

Status:


Tutorial: El blocking del hack de teclado. Postulados y teorías prácticas sobre cómo evitar blocking de teclado como interface de controles para tu máquina arcade y mando de juegos

- Introducción

El hack de teclado es una alternativa más para implementar los controles a nuestras máquinas recreativas, ya sean joysticks o botones. Desgraciadamente este interfaz tiene sus inconvenientes, como el llamado “blocking”.

En este documento me propongo exponer los curiosos descubrimientos acerca de este fenómeno y cómo al final he conseguido superarlos. Tengan en cuenta que solamente he testeado y "trasteado" con un modelo de teclado y que, por tanto, considero que es prematuro hacer una extensión de estas leyes de funcionamiento a otros modelos. Por esta misma razón, si alguien quiere aportar comentarios y experiencias a este documento, estoy seguro que serán bienvenidas por parte de la comunidad de Zona Arcade.

¡Bueno, vamos al grano!


- El blocking del hack de teclado. Postulados y teorías prácticas sobre cómo evitar blocking de teclado como interface de controles para tu máquina arcade y mando de juegos

Tras haber hecho un hack de teclado y ponerlo en práctica, estoy sufriendo el tan famoso blocking de teclado. Esto era de esperar.

El teclado en cuestión en el que me baso para el presente documento es un modelo de Logitech (el de la foto de más abajo). Para más detalles, el proceso de realización del hack de teclado está en este hilo: https://zonaarcade.forumcommunity.net/?t=43798334

image

Me topé con el blocking debido a la restauración y reutilización de un joystick abandonado por años, pero muy bueno. Lo he convertido en joystick para PC tomando los mecanismos que abren y cierran contactos y derivándolos al hack de teclado. Suponiendo que el joystick tiene 4 botones de dirección + 1 botón de acción, no debería encontrarme con ningún efecto blocking. ¡Iluso! Por aquí empezó todo.

Tuve un Sinclair Spectrum 128k y esta era mi ocasión de probar el joystick, las teclas eran las famosas Q A I O P y encontré un blocking con las teclas O A P (precisamente el botón de acción).

Las pruebas las he hecho corriendo Ubuntu Linux 10.04, el emulador FUSE para ZX Spectrum y con el juego del “Jet-Pac”. Hasta el momento no tengo manera gráfica de comprobar más de una pulsación de teclado. De todas formas, así es más real y divertido esta tarea que me propongo. Jaja

Echemos un vistazo al cuadrante de conexiones:

image

Están señaladas en fondo azul las teclas en cuestión. Para los que no estén nada familiarizados con el hack de teclado y los números que identifican fila y columna, antes de seguir les recomiendo que vayan al “tutorial sobre el hack de teclado”, donde está todo debidamente documentado. Para los que están familiarizados y saben algo del tema, sólo hacer la observación que la pulsación de una tecla dada se obtiene "cortocircuitando" un contacto de la fila con uno de la columna. Así, la tecla "Q" se obtiene de los conductores o hilos 10+17.

Sigamos. Huelga decir que las teclas de acción: Q, A, I, O, y P corresponden a:

Q > arriba
A > abajo
I > izquierda
O > derecha
P > disparo o botón de acción.

A priori, me viene bien para sacar las conexiones del joystick, pues solo actúan 7 hilos y con un cable de 8 me bastaría (ver elementos destacados en azul claro).

image

Los hilos están sombreados, sacaría los contactos, 7, 8, 10 y 17, 21, 22, 23. Como la "P" me daba problemas, y para no tener que sacar muchos más hilos, probé asignando otra tecla. Sería la "U" ( en el 7, 20), pero ocurrió el blocking. UOA = BLOCKING

image

Otra tecla.¡ Ésto empezaba a ponerse calentito…! Esta vez sería la "L" en el (8, 21), pero..., ¡¡¡blocking!!!, y además ¡¡¡DOBLE blocking!!! OAL = blocking y ILA = blocking.

image

Realmente en el blocking, las dos primeras teclas que pulsas y mantienes pulsadas responden, la tercera no. En caso de pulsar en orden:

OAL, ... L=block y no se registra
AOL, ... L=block y no se registra
ALO, ... O=block y no se registra
LAO, ... O=block y no se registra
LOA, ... A=block y no se registra
OLA, ... A=block y no se registra

Curioso, ¿verdad? Y lo más curioso de todo: si una tecla está afectada de blocking, ésta no vuelve a poder ser registrada si antes no la soltamos. Pienso que este fenómeno es el llamado ghosting aunque no me hagáis mucho caso.

Bueno, esto va tomando forma. Seguramente ya tengas tus propias hipótesis.


- Desvelando el misterio del blocking

Vamos a la parte teórica con un ejemplo práctico: si tomamos los conductores de nuestro primer blocking: OAP tenemos afectados: 7, 8 y 22, 23 . Supongamos que vamos pulsando teclas:

image

Primero la O (ponemos en contacto 7 y 22) y luego la A (ponemos en contacto 8 y 22). Hasta aquí todo bien, pero no caemos en el detalle que acabamos de poner en contacto los hilos 7 y 8 a través del 22. ¿Alguna duda? Vuelvan a leerlo despacio y razonen.

Si la cabeza os da aún tumbos mejor que no sigáis leyendo. Para los valientes, agarraos que vienen curvas: Si intento poner en contacto cualquier otro hilo de las columnas, para hacer combinación con uno de los dos hilos de las filas 7 y 8, debido a que actualmente los hilos 7 y 8 SON EL MISMO (pues los hemos unido a través del 22) el ordenador no tiene posibilidad ninguna de saber que tecla estamos pulsando, por eso cuando pulsamos P en la línea 23, el ordenador no sabe si es P, ó la tecla "acento". Lo mismo nos ocurriría con la letra U, que no sabe si es la U ó la "coma" de nuestro teclado.

Por extensión tenemos que: ni F10, ni F8 en la línea 19; ni F11, ni F9 en la línea 18; ni las demás teclas de las filas 7 y 8 funcionarán, todo por el mismo motivo. No crean que es fácil explicar esto.

Este razonamiento explica varias cosas.


- Leyes del blocking

1) De un trío de teclas blocking, es indiferente las dos primeras teclas que pulsemos, la tercera o sucesivas de los hilos no comunes a ambas harán blocking, siendo las dos primeras las que mandan sobre las demás pues son las que primero quedan registradas y las que se "apropian del hilo".

De manera que: 2) Da igual que las dos primeras teclas correspondan a filas o columnas, el efecto blocking será el mismo.

Por último: 3) Cualquier par de teclas pulsadas en un teclado quedan registradas y no producirán blocking.


- Explicación del ghosting

Si durante la pulsación de las 3 teclas, la tercera, la tecla que hace blocking la mantenemos pulsada mientras soltamos a una de las dos primeras, seguirá bloqueada a no ser que la soltemos. Esto en teoría no debería ser así, pues cuando de 3 teclas pasamos a nuevamente a tener pulsadas 2 y, según el principio anteriormente expuesto, debería registrarse. La explicación que se me ocurre para el extraño fenómeno el cual, repito, creo que es llamado ghosting es que el teclado efectivamente la registra, pero por seguridad no se pronuncia sobre ella, pues se encuentra con ella de sopetón y "desconectando" un cable, en vez de "conectando", seguramente detecta que se produjo un blocking y ahora no va a ser él el que dé el primer paso para registrar esta tecla. Lo sé, es cuestión de fe y no tengo otra explicación.


- Algunas curiosidades del hack de teclado

Son conocidas algunas combinaciones de teclas tales como:

CTRL+ALT+SUP
ALT+TAB+SHIFT
SHIFT+ALT+INTRO
CTRL+ALT+Cualquier letra (esta se ve difícil de cumplir)

Seguro que hay otras que ahora mismo no se me ocurren. Estas combinaciones no deberían hacer blocking, pues tiraría por tierra las leyes del blocking y todo el trabajo. Veamos los supuestos.

CTRL+ALT+SUP
image

ALT+TAB+SHIFT
image

SHIFT+ALT+INTRO
image

CTRL+ALT+Cualquier letra. Veremos que no era tan difícil.
image

Sí, solamente la tecla "WWW" sufriría blocking, todas las demás están disponibles para ser satisfactoriamente registradas, ello incluye todas las letras en tono azul del cuadro.

En ninguno de estos casos de "combinaciones de 3 teclas usuales" hay blocking, en la práctica, está claro, pero lo interesante era demostrar que cumplen las leyes del blocking.

Para los que tengan más inquietud, pueden observar que estas combinaciones de teclas no se entorpecen pulsando cualquiera de las teclas repetidas, como son el SHIFT, el CTRL, o el SUPR del teclado numérico en el supuesto del CTRL+ALT+SUP, e incluso no se estorban si pulsamos las dos teclas duplicadas a la vez del teclado.


- Optimización de la configuración de nuestros controles con un hack de teclado

Toda esta teoría está muy bien, pero vamos a los casos prácticos y a sacarle jugo a todo esto, que al final es lo que interesa.

Siguiendo con la teoría expuesta, podría pulsar a la vez y registrar hasta 8 teclas, siendo una configuración válida de teclado el tomar una de las columnas de la tabla. Tal y como está en la siguiente imagen. Por ejemplo, la columna 20.

image

Alguno, podría sugerir que en vez de tomar los 8 contactos de la columna, tomemos una fila, y así tendremos todas las teclas de la fila disponibles, la verdad es que si nos fijamos en las filas, además de letras aparecen "teclas raras", de función, y otras que en la mayoría de los juegos no son aceptadas. Mi consejo es tomar como base una columna de letras. Por ahora tenemos un joystick de 4 direcciones, con 4 botones de acción sin ningún problema de blocking.

Estudiando un poco el caso, se puede optimizar y sacar dos botones más. Pero antes y para entender como, veamos otra curiosidad.

Piense en la siguiente frase: en ningún juego se pulsan simultáneamente las teclas arriba y abajo, ni izquierda y derecha. Piense ahora en un joystick: ¿podría pulsar simultáneamente las direcciones arriba y abajo?, ¿y la izquierda y derecha?. Veo que ahora lo entiende mejor. Aprovechemos el blocking para configurar las teclas que no se pueden pulsar simultáneamente. Un ejemplo:

image

Escogeremos 4 teclas que formen un cuadrado y tengan en común 2 líneas de filas y 2 líneas de columnas. Yo, para simplificar el ejemplo, he tomado 4 cuadros juntos. Configuraremos "arriba y abajo" en una diagonal (por ejemplo: M,H) y configuraremos "izquierda y derecha" en la otra diagonal (nos quedaría: N, J).

Si nos fijamos, y siguiendo las leyes del blocking, ésto es totalmente compatible y no produce ningún trastorno en nuestros controles (es por esta misma razón que nunca llegué a detectar el blocking que me producía la IOA en el primer ejemplo de estudio, pues I-O eran izquierda y derecha).

Otra curiosidad: los cursores del teclado están configurados de manera similar.

image

Incluso los cursores del teclado numérico.

image

En este caso ocupan 3 columnas, pero el efecto perseguido es el mismo.

Con una configuración como la que sigue, tendríamos un joystick con 4 direcciones, y 6 botones de acción sin ningún problema de blocking. Lógicamente, los 6 botones de acción los tendremos que sacar de otra u otras columnas. Por ejemplo:

image

Sí, podremos hacer un combo pulsando 6 botones a la vez, más una diagonal, claro que en este caso nos faltaría un sexto dedo.

Probemos ahora con una configuración para dos joysticks libres de blocking y dos botones cada uno: Joystick 1 en azul y el 2 en verde.

image

Usamos todos los hilos de las filas. A partir de aquí podemos configurar más botones, pero inevitablemente aparecerá el blocking. Una configuración deseable para minimizar el efecto para ello sería la siguiente:

image

Cada grupo de 4 cuadros de color lo podremos usar para los 4 botones de acción o para los 4 contactos de movimiento del joystick. En esta configuración el blocking que sufre un jugador es únicamente en los botones de acción y además no lo sufre el otro, pues no comparten ningún hilo. Además, el jugador podrá pulsar y registrar efectivamente combos simultaneando 2 teclas cualesquiera de las de acción.

Vamos a apretar un poquito más las tuercas. Probemos 2 joysticks con 6 botones cada uno. La configuración deseable sería la siguiente: Joysticks en los grupos de 4 teclas de las filas 3-4 y 5, 6; botones de acción en las filas 7, 8 y 9, 10.

image

El efecto blocking de un jugador no perjudicará al otro, pues no comparten hilos, pero está claro que pulsando las dos teclas de acción de filas distintas en un jugador dejará sin efecto las demás y, por otro lado, podremos pulsar a la vez las 3 teclas correspondientes a la misma fila.

Otras configuraciones son posibles, aunque si has entendido el funcionamiento ya sabes los efectos que te acarrearán. Por supuesto, aparte de nuestros controles de juego, podremos sacar del hack tantos botones de control como queramos para nuestra máquina arcade, pues no creo que con ellos hagamos "combos" y nos dará igual el efecto blocking.

Sólo me queda decir que experiencias y comentarios sobre el tema son bienvenidos, pues por el momento no he podido probar las combinaciones de 2 joysticks con múltiples botones y lo expuesto es solo teoría.


- El paso a la práctica

No quedando tranquilo con esta sarta de teorías, y puesto que la práctica suele ser más divertida, me propuse "asfixiar" un poquito el hack de teclado a ver qué pasaba. Como resultado os comento que he podido controlar el juego sin ningún tipo de blocking usando 5 teclas, (1 mando + 1 botón de acción), manteniendo a la vez pulsadas una, dos, todas, varias, antes, durante y después, mientras jugaba. Evidentemente las teclas habían sido debidamente escogidas.

Las teclas son: OLIA para los mandos, Q como botón de acción. Resto de botones pulsados: ESPACE, número 0, K, Z y 2. (¡Observar: Cuadro animado!).

image

En el dibujo se aprecia cómo vamos cogiendo teclas y se van descartando otras.

Cuando terminamos de usar los 8 hilos de las filas, aún quedan algunas teclas por escoger. La mayoría son teclas "especiales" y la verdad, no sé si harán más blocking o se presentarán otros síntomas. Lo que sí os digo es que el mando funciona.


- Consideraciones finales (FAQ)

De un fabricante a otro, las pistas y la distribución de teclas difieren. He comprobado las fotos del tutorial sobre evitación el blocking de elnaib y la distribución no es la misma que la de mi hack. De hecho, he probado forzar un blocking en mi teclado USB marca "rainbow" y no se cumple, por lo que intuyo que también su configuración difiere. Por otra parte, no olvidemos que esto es un hack artesanal, como si de un gamepad se tratase, cada uno es distinto, aunque el fundamento es el mismo. He visto el trabajo terminado del "hack de teclado ipaquetado" de primemind, y en su numeración de conexiones tiene también 8 contactos por un lado y 18 por otro, lo que me indica claramente que su funcionamiento es similar (cruza 8 filas con 18 columnas en su tabla de conexiones)

- Los usuarios que lean este documento y tengan un teclado distinto NO podrán tomar las mismas teclas de mi ejemplo. Tendrán que confeccionarse sus propias tablas de conexiones y distribuir en ellas la asignación de controles de forma similar a la que expongo. No creo que tengan problemas, al menos yo lo tengo bastante claro.

- Sobre el tiempo y trabajo que lleva hacerse el hack de teclado: Un hack requiere tiempo y trabajo, requiere de manipulación delicada, a diferencia de un IPP, que se hace en un rato y con pocos componentes.

- Sobre el coste de diseñarse esta interface de juegos: Está claro que un IPP es lo más económico, que es un cable DB25, unos cuantos diodos y poco más. Por contra, si el teclado es viejo y/o te lo regalan, ya sabes, es "gratis". Pero, repito, el IPP es muy, muy barato (lo sé porque compré el material para hacerlo).

- Sobre reparacines y recambios: Ay!, el día que se me estropee el hack de teclado...

- Sobre su configuración: El hack, una vez entendidas las leyes del blocking, se configura casi solo. El IPP hay que configurarlo debidamente, ya sea Linux, Windows o lo que sea.
Sobre su versatilidad: Cualquier juego o emulador admitirá configuración de teclado. Para windows: si a el IPP se le puede asignar tanto joysticks, como cualquier tecla, está muy bién. Le doy un 10. Pues se podrán reconfigurar botones por software. Por contra, dudo que a un hack de teclado lo puedas reasignar por software (en este caso toca abrir el panel de control o mando arcade y recablear).

- Para linux: He encontrado un módulo (driver) que me permite asignar hasta 5 dispositivos (sean joysticks o teclados) Pero, los mandos y botones son pre-establecidos (os contaré más cuando haga un tutorial para configurar nuestra IPP para linux) por lo que de momento y con los datos que tengo necesita ser complementado si queremos sacar otros botones de control distintos a los preconfigurados. He aquí mi recomendación de usar hack de teclado, pues en este caso se nos queda corto el IPP y tendremos que hacer el hack para nuestros botones de control.

- Pienso que un hack de teclado es suficiente para una máquina recreativa con 2 joysticks más 2 ó 4 botones por joystick. Pero, claro, un IPP también te vale

- ¡Ah!, se me olvidaba: desde hace aproximadamente un año he detectado que las nuevas placas base no disponen de puerto LPT. Quién sabe, lo mismo volvemos al hack de teclado combinado con hacks de joysticks.


- Por pablo33 -
 
Web  Top
molecular
view post Posted on 3/3/2011, 19:50     +1   -1




Después de leer tamaño tutorial (muy bueno por cierto) para evitar el blocking con el hack del teclado, no me quedan dudas de que si vuelvo a hacer una máquina arcade, vuelvo a armar la interfase IPP que propone Mikonos :-)

Abrazo!
 
Top
Igorallen
view post Posted on 4/3/2011, 11:17     +1   -1




La verdad es que es un currazo y tiene mucho mérito. Aunque no creo que sea capaz de tanta virguería, mis felicitaciones por el tutorial Pablo33, está megacurrado!!!

Saludos!!!
 
Top
killo kabuto
view post Posted on 4/3/2011, 11:26     +1   -1




Te has pasado, esto es un doctorado. Muy bueno, gracias.

Un saludete.
 
Top
view post Posted on 10/3/2011, 22:33     +1   -1
Avatar


Group:
Member
Posts:
1,286

Status:


WTF!!!

Impresionante documento!!!

Y como bien dices el puerto lpt esta desapareciendo, quien sabe lo que nos deparara el futuro, pero gracias a ti ya estamos preparados ^^
 
Top
HE_MAN
view post Posted on 19/8/2011, 06:58     +1   -1




soy nuevo por aca pero ya me he topado con esa clase de problemas, entonces recurri a la configuracion que usan creadores de
winipac o algo asi
te aseguro que podras usar mas de boton de accion no se como poner imagenes aqui pero hay te va un linck para que lo revises y si encontras solucuion pues estare pasando por aca para revisar tus comentarios


__http://n1k2.net/shop/winIpac01.gif

ademas que buen post y que dedicasion para hacer las cosas bien hechas
 
Top
cenutrio
view post Posted on 22/10/2016, 06:46     +1   -1




gracias por el tutorial.me va a evitar mogollon de quebraderos de cabeza.
aun asi mi teclado es jodido.tiene las teclas "f" desperdigadas al contrario que el tuyo.
aunque para 2 josticks con 3 o 4 botones solo, ya me apañare
- me imagino que aunque mi teclado tenga correspondencia distinta de teclas,si lo pongo igual o parecido que el dibujo(Joysticks en las filas haciendo un cuadrado; botones de acción en otras filas.) es lo mismo.
cuando lo acabe y funcione :
¿cuelgo en este post una foto con la tabla y marca, modelo de teclado y d como lo tengo, por si alguien le vale, o lo cuelgo en un post nuevo?
 
Top
view post Posted on 22/10/2016, 22:17     +1   -1
Avatar


Group:
Moderadores
Posts:
17,872
Location:
Zona Arcade.

Status:


Cenutrio.., gracias por el post.

Como gustes, pero lo suyo es un post tutorial nuevo en el subforo correspondiente.., así nos comentas que has descubierto nuevo..

Si ves que es sólo alguna aclaración, aquí mismo si quieres..

Un saludo!!
 
Web Contacts  Top
7 replies since 3/3/2011, 18:37   7381 views
  Share