Adaptador con ATTINY25 (versión 2).
Adaptador con ATTINY2313 (versión 2).
Como no incluí un changelog (la verdad se me olvidó X_x), creo que es buen momento para comentar los cambios. A todos los que estén interesados en armar los adaptadores, les recomiendo encarecidamente que utilicen los firmwares más actuales.
La lista de cambios es la siguiente:
- Se realizaron optimizaciones en los ciclos.
- Se asignaron las variables globales a registros para incrementar la velocidad.
- Se asignó un nombre a los dispositivos (SNES Controller).
- Se incrementó la frecuencia de operación del control de 83.33kHz a 1MHz.
- Se realizó una limpieza en el código fuente.
- Para la versión ATTINY25: se ordenó el código y se retiraron los hacks del archivo usbconfig.h.
- Para la versión ATTINY25: se añadió una rutina para evitar escrituras innecesarias en la EEPROM, con el fin de incrementar su vida útil.
- Para la versión ATTINY25: la lectura de botones se hace por medio de la función Readbytes, para incrementar la legibilidad y portabilidad de las funciones.
Después de una serie de pruebas, hay unos puntos que merecen ser aclarados, principalmente con el adaptador que utiliza el microcontrolador ATTINY25. Si se conecta el adaptador a un host de baja velocidad (USB 1.0 o 1.1), debe ser conectado ANTES que cualquier otro dispositivo USB, de lo contrario el oscilador interno no será capaz de calibrarse debido a los "downstream packets" del resto de los dispositivos. Si se conecta a un host USB de alta velocidad (USB 2.0), no debería presentarse dicho fenómeno.
El problema de los "downstream packets" es inherente al método de sincronización y hasta el momento no existe un método que permita librar el inconveniente. Existe una variante en la rutina de sincronización hecha por O. Tamura que tiene como objetivo librar de cierta manera el problema mencionado, sin embargo en mis pruebas no funcionó.
En mi opinión, considero que el adaptador que utiliza el ATTINY2313 es más confiable y una mejor opción para los principiantes (como yo n_n), además de que soporta dos controles de forma simultánea. En algún momento consideré en optimizar aún más el código y dar soporte a tres controles simultáneos, sin embargo ahora no parece una buena idea, debido a que los SNES se comercializaron en paquetes con uno o dos controles... por lo que tres controles (y más aún cuatro) me parece una exageración que sólo cobra sentido si se cuenta con cuatro controles (algo muy poco probable), cuatro jugadores (cuatro hijos, cuatro amigos o cuatro vagos n_n) y un juego que sea para cuatro jugadores simultáneos (Bomberman, FIFA, Queen of Hearts 99, Mario Kart 64, etc).