Adaptación de volante óptico de recreativa para su uso con MAME
Desde 2012 disponemos en la Asociación RetroAcción de una máquina recreativa genérica Video Líder con volante, a la que tenemos conectada una placa con el juego original «World Rally Championship» (Gaelco 1993). Curiosamente, pusimos en RetroLLeida 2008 nuestro granito de arena para que se pudiera preservar dicho juego y poder disfrutarlo en MAME.
Nuestro objetivo era poder usar esta máquina recreativa no sólo para jugar al World Rally sino también a cualquier otro juego de recreativa que necesite de volante, emulado con MAME. Y nos pusimos manos a la obra entre noviembre de 2017 y junio de 2018.
Este volante óptico, a diferencia de los basados en resistencias y con una libertad de movimiento de 270º, puede girar sin fin hacia derecha o izquierda, sin ofrecer resistencia ni volver a su posición inicial, lo que lo hace imprescindible en juegos como «Super Sprint» (Atari 1986), donde las curvas tan cerradas casi obligan a girar, soltar y volver a coger el volante.
El funcionamiento del volante óptico de la recreativa Video Líder es basicamente el mismo que un raton de bola de los antiguos: al girar el volante, una rueda perforada gira delante de dos fototransistores. La posicion de éstos es tal que nunca ocurre que ambos vean hueco o solido exactamente a la vez, sino que uno lo ve antes que otro (o mas tarde, segun el sentido del giro).
En la recreativa Video Líder, estas dos señales estan conectadas a dos contadores de 4 bits conectados en cascada para formar un número de 8 bits. Uno de los fototransistores está conectado a la señal de reloj, que cuenta 1 cada vez que se pulsa, y el otro a la señal Suma/Resta, de forma que según si está en alto o en bajo en el pulso de reloj, incrementa o decrementa el contador, respectivamente.
Supongamos que cuando se gira hacia la derecha, la señal de reloj sube antes que la señal de dirección; como siempre ocurrirá que el reloj llegará cuando la señal esté a 0, cada pulso de reloj restará 1 al contador. Sin embargo, en el caso contrario, como la señal de dirección llega antes, cuando le llega el pulso de reloj, ésta ya está a 1, y sumará 1. El juego World Rally periódicamente mira este contador y con el valor anterior que tenia guardado sabe en qué sentido se ha movido el volante y a qué velocidad.
Aprovechando que MAME soporta controles de tipo Dial, simulados mediante ratón, decidimos implementar esto en un microcontrolador que soportase USB HID, y simular un ratón. El microcontrolador hace la decodificación de los pulsos, los acumula, y periodicamente (cada 20ms) envía por usb el desplazamiento positivo o negativo aplicado sobre el eje X del ratón.
Hackeando el volante |
Para leer los pulsos |
Un cable por fototransistor |
El microcontrolador STM32CubeMX |
Tras las primeras pruebas satisfactorias para contar el giro del volante en ambas direcciones, lo fijamos con una goma en el poco hueco existente bajo el panel de mandos, con un commutador que permite deshabilitar su uso por USB, y llegó el momento de probarlo en serio. Y qué mejor prueba que jugando al World Rally en MAME en un portátil conectado por USB al microcontrolador. En una de estas partidas, se consiguió llegar al checkpoint tras varias vueltas de campana ya que las ruedas del coche volcado cruzaron la meta en el último segundo, pero estaba claro que el control era suficientemente preciso, pendiente de ajustes.
Contando los giros del volante |
El invento bajo el panel |
Inicialmente todo lo anterior lo hicimos en el bucle principal del microcontrolador, pero debido a que periodicamente el USB tenia que enviar datos, al girar el volante muy rápido se perdian pulsos: al hacer un giro con el volante y luego al contrario, no volvía a la misma posicion. Asi que lo cambiamos para hacerlo por interrupción. Uno de los pines de los fototransistores está conectado a un pin del microcontrolador que tiene programado que lance una interrupción en el flanco de bajada (las señales son activas en bajo), este seria el reloj, y en el manejador de la interrupción, se mira el estado del otro pin, y se suma o se resta un valor (ajustado a mano para que el volante se comporte con la misma sensibilidad que en el juego original).
Tras esta optimización, la prueba definitiva fue cuando se nos ocurrió usar el volante para jugar simultáneamente a la versión recreativa del World Rally (conectando el volante por JAMMA a la placa del juego) y a la versión emulada con MAME (conectando un portátil por USB al microcontrolador del volante). El resultado fue... en fin, es mejor verlo:
En el making of del video no fue fácil... mantener la seriedad :-) |
Gracias a todo lo anterior ya podemos usar la recreativa Video Líder para disfrutar de juegos de volante usando MAME, como «Pole Position», que hizo las delicias de los asistentes de RetroMañía 2022, donde lo "estrenamos".
Equipo de RetroAcción implicado en la actividad
|