viernes, 27 de julio de 2012

Desde que se inventaron los pretextos, parte 2 (El contraataque).

Advertencia: Esta entrada es un muro de texto, lleno de un choro mareador en el que se narrará de una forma completamente impersonal, aburrida, insípida y netamente autocomplaciente para el autor, el desarrollo de otro más de los proyectos inútiles para la vida diaria que se publican en este blog. Se recomienda discreción al lector (aunque nunca he sabido a que se refiere esa frase X_x).

Hola, ¿Como están?
En estas vacaciones he terminado (por fin) un proyecto que ya tenía rondando mi cabeza durante muchos años (y de verdad fueron muchos años), pero que por desidia, falta de creatividad, carencia de destreza y escasez económica no había llevado a buen puerto.

Una de las etapas más prolíficas de mi vida como videojugador fue cuando cursé la escuela vocacional, allá en los lejanos 1999-2002. Estudié la carrera técnica en Sistemas Digitales, una carrera bastante completa en la que se impartían clases de electrónica analógica básica, diseño digital, programación de microprocesadores y programación en lenguaje C. En aquella época conocí, gracias a mi amigo Ratman (se ha retirado la liga a ratasoft.net, pues ya no existe), los diagramas y controladores de Direct Pad Pro para conectar los controles de consolas al puerto paralelo de la PC.

Gracias a mi carrera técnica había adquirido una destreza muy básica para diseñar circuitos electrónicos y soldar componentes. Así que ni tardo ni perezoso armé un adaptador para controles de Super NES a PC. Recién había descubierto el mundo de los emuladores, por lo que el entusiasmo por jugar en la PC era muy grande. Mi computadora de aquél entonces era muy modesta, una AMD K6-2 a 450[MHz], con 64[MB] de RAM PC100, un disco duro de 10[GB] y video integrado SiS530. En esa computadora, los juegos de aquél entonces corrían terriblemente. Corrían tan mal, que no me era posible contar los FPS (Frames per second), pero si me era posible contar los SPF (Seconds per frame). Quizás suene a cotorreo, pero juegos como Melty Blood corrían a 2 segundos por fotograma, es decir, transcurrían 2 segundos entre el cambio de una imagen y otra.

Había juegos que corrían muy bien como DooM (del cual me hice fan empedernido), Queen of Hearts 99, MUGEN (que en realidad sólo es un motor para juegos de peleas) y entre los emuladores que corrían decentemente se encontraban ZSNES, SNES9X, NeoRAGE X y FinalBurn original. MAME corría como se le antojaba, a veces lo hacía muy bien y a veces la velocidad era terrible, tendiendo a lo último. El único emulador de PlayStation que tenía una velocidad aceptable para jugar (unos 20 FPS con un chorro de frameskip) era Emurayden, un hack del Connectix Virtual Game Station. Así, la oferta de juegos con que contaba era relativamente limitada.

En aquél entonces también comencé a frecuentar los salones de maquinas arcade, ya que había varias sagas de juegos que empezaban a tomar fuerza y como no tenía alguna consola de quinta generación, la única alternativa que quedaba para disfrutar de las novedades de aquél momento era acudir a esos establecimientos. Entre mis juegos favoritos se encontraban The King of Fighters 98, Marvel vs Capcom y Rival Schools. Los dos primeros juegos eran emulables en mi PC, por lo que el uso que traté de darle a mi adaptador de controles era disfrutar de esos juegos en la comodidad de mi hogar.

Y aclaro que traté de darle ese uso, ya que en la práctica no me fue posible. Tenía que compartir la PC con mis hermanos, que la empleaban para cosas más importantes que jugar. Además, si mis padres me descubrían jugando en la PC o escuchando música, se armaba una muy buena bronca. Así que pues todo quedó en planes y en muchas ganas, pero nada más. Seguía frecuentando los locales de maquinas arcade y ahí disfrutaba de mis juegos favoritos, en algunos llegué a desarrollar una habilidad notable (sobretodo en juegos de Capcom), mientras que en otros nunca logre mejorar (en juegos de SNK principalmente).

Pasaron unos pocos años y debido a la repentina decisión de mi hermano de llevarse la PC a su escuela para realizar su servicio social, me ví en la necesidad de ensamblar una PC con un presupuesto muy apretado en una ventana de apenas una semana. Todos los componentes de esa PC fueron de segunda mano,  excepto la tarjeta de video. Esa PC ya era bastante más adecuada para jugar, una Pentium III a 733[MHz], con 128[MB] de RAM y una tarjeta de video PCI de 128[MB] (en efecto, tenía la misma cantidad de video RAM y de RAM principal). Esa circunstancia fue muy favorable para mí, pues la PC era mía, así que ya no había inconvenientes en jugar o utilizarla para multimedia. Además me permitía jugar bastante mejor, pues era más potente que la computadora anterior. Eso fue cuando estudiaba (de forma fallida) la Ingeniería en Sistemas Computacionales.

En esa computadora pude experimentar con más emuladores y correr juegos como Party's Breakers a velocidad completa. Para complementar la experiencia en esos juegos, me surgió la idea de ensamblar un stick arcade (ahora llamado fightstick). Recuerdo que un compañero de la escuela armó un par de sticks en unos cajones bastante raros, con una forma que me recordó a un granero. El panel de botones estaba en un ángulo de 45 grados, por lo que era perfecto para cansar las muñecas y lesionar los ligamentos de los dedos. Además, para armarlos empleó un par de controles de PlayStation y el adaptador de Direct Pad Pro para conectarlos al puerto paralelo de las computadoras.

A mi me parecía muy poco práctico comprar unos controles y sacrificarlos para hacer un fightstick. Así que decidí investigar un poco y encontré el circuito equivalente de los controles de Super NES en la página de GamesX. Así, pues ya había un plan definido. Armaría un circuito equivalente al control de Super NES y lo conectaría al adaptador para puerto paralelo que había construido con antelación. Compré varios integrados CD4021... Y ya. En esa época la situación escolar y emocional de un servidor estaba muy mal, y pues todo quedó varado unos meses (de hecho se prolongó a varios años).

Después retomé los ánimos y compré una palanca nacional (marca Calle) y unos cuantos botones con microswitch en la tienda Steren. Todo ello gracias a mi amigo Dash Bandit, quien en esa época ensambló su fightstick reusando un cajón, una mesa y un control de PlayStation. Sin embargo la situación volvió a empeorar poco tiempo después y el proyecto volvió a quedar en espera durante otros años.

Siendo honesto, había olvidado por completo ese proyecto. Sin embargo, mi amigo Dash Bandit me lo recordó, ya que en su escuela había herramientas de carpintería y existía la posibilidad de construir unos cajones de muy buena calidad, para hacer unos fightsticks envidiables. Procedí a investigar un poco y encontré la página de Slagcoin, donde se aborda de forma muy detallada todo el proceso de ensamblar un fightstick de forma casera. Hay información sobre los componentes, las distribuciones de botones, los materiales para el armado del cajón, recomendaciones sobre herramientas y mucha información adicional.

En ese entonces ya tenía bastantes ganas de ensamblar mi fightstick, sin embargo mi amigo y yo jamás pudimos llegar a un acuerdo para ensamblar en equipo nuestros respectivos fightsticks, ya que nuestras escuelas estaban en una etapa muy ruda. Además, mi amigo ya había armado unos cajones, que fueron desechados por los conserjes de su escuela. En teoría yo me encargaría de la parte electrónica mientras que él se encargaría de la parte artesanal. En aquel entonces ya había construido mi primer prototipo de adaptadores de controles de Super NES al puerto USB.

Viendo que iba a ser muy complicado armar nuestros fightsticks en equipo, decidimos terminar nuestros proyectos de forma independiente, todo ello sin acuerdo previo ni nada por el estilo, es decir, nuestra intuición nos llevó a buscar alternativas.

En diciembre de 2011 comencé el ensamblado de mi propio cajón, empleando las maderas residuales de un mueble. Era madera de aglomerado de 2[cm] de grosor, es decir, una madera muy dura y muy gruesa. Y la verdad, fue tan desgastante ese trabajo que perdí las ganas de continuarlo. Así pasaron unos cuantos meses.

Recientemente ofrecí a Dash Bandit revisar un desperfecto en su fightstick. Después dedicarle un poco de tiempo a su proyecto, algo en mi orgullo comenzó a incomodarme. Fue un sentimiento que me impulsó a terminar de una vez con todas con mi propio proyecto.

El diseño del circuito se basó en mi primera idea, es decir, ensamblar un clon de un control de Super NES con circuitos CD4021. Sin embargo, sentí la necesidad de dotar a mi fightstick de un plus. Algo que no se encontrara tan fácil en los fightstick fabricados por aficionados (y de hecho, tampoco en fabricados por profesionales). Así fue como surgió la idea de dotar de la función de autofire a todos los botones del panel frontal. Así, con un interruptor cada botón puede funcionar de forma normal o en forma de disparo automático. Además, la velocidad de disparo es regulable con una perilla, así que el fightstick se vuelve muy conveniente para jugar shooters como Metal Slug o 1945.

Realicé el diseño de ese circuito en una placa fenólica y estaba a punto de comenzar el ensamblaje del fightstick cuando otra idea me asaltó por sorpresa, dotar a mi circuito de otro plus que tampoco se encuentra en la mayoría de los fightsticks. La mayoría de las palancas registran las direcciones cuando un actuador presiona el fuelle de un botón. Básicamente son botones normales, sólo que en vez de presionarse con un movimiento vertical lo hacen con un movimiento horizontal provocado por el actuador que se encuentra en el fondo de la palanca.

Recuerdo que en el salón de máquinas arcade que más frecuentaba, los juegos tenían palancas que no hacían ruido alguno cuando se presionaban las direcciones. Hay varias tecnologías que emplean sensores silenciosos, pero las más conocidas son los sensores magnéticos y los sensores ópticos. Ambos tipos de sensores especializados para fightsticks se discontinuaron al principio de la década de 2000, cuando el auge de los salones de máquinas arcade desapareció.

En la actualidad existe un par de alternativas comerciales que sustituyen a los botones en las palancas por un módulo óptico. Sin embargo ambas alternativas sólo con compatibles con palancas marca Seimitsu y son réplicas de los módulos japoneses originales. Además, a pesar de que las publicitan como alternativas de bajo costo, a mi parecer 55 USD más envío es una suma de dinero considerable (tomando en cuenta que son falsificaciones). Además las palancas Seimitsu son sumamente costosas en mi país, ya que son consideradas piezas especializadas para profesionales. Sin embargo, a mí no me parece cómodo jugar con palancas japonesas, me parecen demasiado sensibles.

Pero para mi suerte estudio ingeniería en electrónica, así que me di la tarea de diseñar y construir un módulo óptico compatible con mi palanca nacional (que es tosca como mis manos).  La construcción del módulo fue un éxito y además de que me ahorré una muy buena cantidad de dinero, la satisfacción de desarrollar una pieza de tecnología reservada para profesionales en mi propio cuarto fue algo muy gratificante. Además el módulo no alteró en nada a la palanca, se monta en vez de los botones, empleando los tornillos y orificios destinados para ellos. Así que en caso de necesidad, es posible reemplazar el módulo óptico por los botones Zippy que acompañaban a la palanca.

En el desarrollo de este módulo óptico fue donde surgió el dilema del consumo de los LED que se abordó en una entrada anterior, ya que no me podía dar el lujo de exigir 100[mA] al puerto de controles de alguna consola de videojuegos.

Pues bien, ya con todas las ideas materializadas, lo único que restaba era ensamblar todo junto y esperar que nada explotara. Por suerte, todo funcionó relativamente bien. Y aclaro una vez más que el éxito fue relativo, ya que si bien todos los sensores y botones respondían de forma adecuada, las direcciones cambiaban de forma intermitente entre la dirección presionada y la esquina superior izquierda de los ejes XY (coordenadas cero u origen). Al mover la perilla de velocidad del disparo automático, noté que también variaba la intermitencia en el cambio de direcciones. Al contrario de lo que podría suponerse, no se trataba de un falso contacto o de una conexión errónea. Mi fightstick tenía un problema de inducción electromagnética (EMI por sus siglas en inglés).

La inducción electromagnética puede evitarse aislando a los módulos que generen oscilaciones del resto del sistema y evitando que señales pulsantes viajen a través de cables de largo excesivo. Sin embargo, a esas alturas del proyecto lo último que deseaba era empezar de nuevo el diseño. La solución que puse en práctica fue blindar con cinta de aluminio todos los cables que transportaban señales pulsantes. Eso eliminó los inconvenientes evidentes, pero la inducción electromagnética suele afectar a las líneas de polarización de la mayoría de los circuitos, lo que provoca fluctuaciones en la alimentación que pueden reducir de forma notable la vida útil de los componentes. Para lidiar con ello se colocan en paralelo un capacitor cerámico de 100[nF] (matrícula 104) y un capacitor electrolítico de 10[uF] entre las terminales de polarización de los circuitos integrados. Esto estabiliza las líneas de polarización y contribuye a incrementar la fiabilidad del sistema en conjunto.

Resueltos esos detalles, era hora de probar el fightstick de forma apropiada. Las pruebas en la computadora, empleando el adaptador de controles de Super NES a USB fueron un éxito. Las primeras pruebas empleando el adaptador de controles de Super NES a Dreamcast fueron un fracaso, por lo que tuve que trabajar en una nueva versión del adaptador que funcionara de forma adecuada. Las pruebas con Street Fighter Alpha 3 y Marvel vs Capcom 2 en el Dreamcast han sido exitosas, así que después de tantos años por fin he logrado jugar esos grandes hits de arcade, en la comodidad de mi hogar tal y como los jugaba en aquellos lejanos años de la vocacional. Y de hecho, ha sido tal y como en aquella época, ya que las versiones de Dreamcast de ambos juegos son bastante fieles a las versiones de arcade.

Al contrario de lo que pueda parecer, jugar con un fightstick no me ha hecho un videojugador más hábil, los combos y secuencias que me eran complicados en las máquinas arcade hace doce años se me siguen complicando hoy en día. Sin embargo, si he eliminado el factor de desventaja que representaba el control estándar de Dreamcast. Además mi fightstick cuenta con un par de ayudas gracias a la versión actualizada del adaptador de controles de Super NES a Dreamcast. La primera es que se agregaron un par de botones que funcionan similar a presionar los tres botones de puño o de patada (en la configuración de botones por defecto). La segunda es que el botón de SELECT del control de Super NES funciona como la combinación de los botones A y START del control de Dreamcast, por lo que hacer los taunt en Marvel vs Capcom 2 solo requiere de presionar un botón. Esas ayudas en conjunto con el disparo automático ajustable y la palanca óptica, mejoran de forma sustancial la experiencia de juego.

Planeo subir fotos del proyecto terminado. De verdad recomiendo a todos aquellos que están armando o que deseen diseñar su propio fightstick que traten de esmerarse y agregar la mayor cantidad de detalles y ayudas que les sean posibles. De verdad, me encuentro muy contento por los resultados que he obtenido en este proyecto y agradezco haberlo dejado en el tintero tantos años, ya que de haberlo hecho antes hubiera derivado en un proyecto bastante mediocre, debido a mi falta de habilidad y de conocimientos.

Actualización.
He tomado unas cuantas fotos al fightstick, las cuales comparto a continuación.


Esta imagen muestra el panel frontal del fightstick. Son ocho botones en una configuración similar a la empleada en los fightstick profesionales. Recomiendo esta configuración de botones, ya que se acomoda muy bien a la forma de la mano. Algunas personas prefieren poner las columnas de botones de los extremos a la misma altura, para que el dedo meñique alcance con mayor facilidad los botones de extrema derecha. Elegí esta configuración ya que mi dedo meñique es tan largo como mi dedo índice. Lo importante es que el fightstick sea lo más ergonómico posible y se ajuste de mejor forma a nuestra anatomía. Se puede apreciar que hay un espacio bastante generoso para apoyar la palma de la mano en el panel del fightstick. A la izquierda puede apreciarse la perilla que ajusta la velocidad del disparo automático y los interruptores para cada botón.

En esta foto se puede apreciar el tamaño del fightstick, en comparación con el resto de mi playground. El monitor es un CRT Daewoo de 14 pulgadas (cortesía de Dash Bandit) y es de notar que el Dreamcast es bastante más pequeño que el fightstick. El galán que se alcanza a ver reflejado en la pantalla del monitor es su servidor, en una de sus poses más cautivadoras y seductoras.

En esta foto se pueden ver los botones SELECT (izquierda) y START (derecha). En el centro de ve un conector DIN hembra (jack). El cable de conexión fue donado por un teclado de computadora bastante antiguo.

Esta foto muestra el interior del fightstick. La caja azul de la derecha contiene la circuitería, a su izquierda puede apreciarse el módulo óptico de la palanca.

Aquí se puede apreciar con más detalle el módulo óptico. Cada LED tiene su driver, que evita sobrecargar a la circuitería lógica. El consumo de corriente del módulo óptico es de 3.5[mA].

He subido un video a Youtube donde se demuestra el funcionamiento del fightstick. Disculparán el pésimo ángulo y las terribles tomas, pero esto lo grabé sosteniendo la cámara con mi mano izquierda y manipulando el fightstick con mi mano derecha. Por lo menos se aprecia el funcionamiento tanto del fightstick como del adaptador de controles de Super NES a Dreamcast (son los dos conectores DB9 que están encima del fightstick).


Actualización 2.
Recientemente pude comprobar otra de las enormes ventajas que acarrea hacer uno mismo su propio fightstick. En una prueba, uno de los botones comenzó a responder de forma errática, ya que el cable que conectaba la entrada del disparo automático de dicho botón, se soltó de forma accidental. Diagnosticar el problema y resolverlo fue cuestión de segundos. Si se hubiere tratado de un fightstick manufacturado por alguna empresa, es probable que el diagnóstico hubiere sido más tardado.

En el Token Party 2012, uno de los asistentes pidió recomendación sobre comprar un fightstick o armar uno. En esa ocasión, los anfitriones recomendaron a la persona con la inquietud comprar un fightstick fabricado por alguna marca "profesional" como Madcatz. Yo discrepo con esa recomendación, para mí es mejor, más gratificante y económico armar nuestro propio fightstick desde cero y si es posible, fabricar piezas personalizadas que le den nuestro toque personal. Es parte de dejar nuestra esencia en todo lo que hacemos. Cuando hacemos algo especial podemos sentirnos orgullosos de haberlo fabricado, cuando compramos algo sólo podemos sentirnos orgullosos de haber pagado por él.

¡Estamos en contact!

Una breve actualización 3 (El segundo retorno de la burra al trigo).

Hola,  ¿Cómo están?

¿Recuerdan el primer prototipo de adaptador de controles de Super NES a Dreamcast que compartí con ustedes hace casi un año? Pues bien, como parte de los experimentos de estas vacaciones me ví en la necesidad de emplearlo para unas pruebas... y pues funcionó terriblemente mal.

El adaptador original sólo lo monté en protoboard, pues siempre lo consideré la prueba de concepto necesaria para hacer un adaptador más completo. Sin embargo tenía la ventaja de que requería de un mínimo de componentes para funcionar, por lo que ensamblarlo tomaba sólo un par de minutos.

El detalle que apareció fue que el adaptador comenzó a sufrir desconexiones intermitentes bastante molestas, las cuales variaban en frecuencia dependiendo del juego en que efectuara las pruebas. En Capcom vs SNK 2 las desconexiones eran poco seguido, pero en Street Fighter Alpha 3 eran demasiado constantes, al punto de que era imposible mover a los personajes (pues el juego se pausa cuando se desconecta el control).

Decidí dedicarle un poco de tiempo a resolver los problemas del adaptador, para hacerlo más fiable. Con un poco de optimización fue posible reducir las desconexiones a prácticamente cero en Street Fighter Alpha 3. También efectué pruebas en Marvel vs Capcom 2 con resultados igual de satisfactorios. Además, procedí a repetir el adaptador con tres microcontroladores diferentes y todos funcionaron perfectamente.

Así que les comparto la versión actualizada del adaptador.

Hay algunas modificaciones en el diagrama con respecto al original. Se agregaron resistencias de 100[Ohm] a las líneas SDCKA y SDCKB, ya que comprobé que no son líneas de 5[V] como pensaba (y como es la creencia popular en internet), sino son líneas de 3.3[V]. Gracias a las resistencias, pueden convivir de mejor forma las señales de 5[V] provenientes del ATTINY25 con la interfaz del Dreamcast. Se agregó una resistencia de 10[kOhm] de la terminal de RESET del ATTINY25 hacia 5[V], eso es para evitar que el microcontrolador se reinicie de forma accidental. Asímismo, recomiendo encarecidamente que no se supriman los capacitores que se muestran en el diagrama, ya que mejoran de forma notable la estabilidad del circuito.

En esta ocasión decidí construir un adaptador en forma, para lo cual empleé como contenedor una carcasa DB9. Todo el circuito se montó dentro de la carcasa, alambrando las conexiones y los componentes.

Espero que a partir de ahora el adaptador se comporte de una forma más fiable.

¡Estamos en contact!

¡Feliz 2021! El retorno del debraye pandémico (Edición "Rompemuros").

Hola, ¿Cómo han estado? Espero que estén con bien, con buena salud y con muchas ganas de aburrirse una vez más con una ronda de debrayes. Es...