Esta es una aplicación de intercambio de Pokemon's desde de Flipper Zero a Game Boy (Generación I). Flipper Zero emula un Game Boy "Esclavo" conectado a Cable Game Link para poder intercambiar cualquier Pokemon de la Primera Generación (Red, Blue, Yellow) a un Game Boy Real.
Es una Prueba de concepto (POC) para utilizar vistas, GPIO y FURI (Flipper Universal Registry Implementation).
Este proyecto está destinado a ser superpuesto encima de un repositorio de firmware existente, en mi caso la versión Release 0.79.1.
/applications_user/pokemon del firmware que clonaste.Corre el comando fbt launch_app para correr en tu Flipper Zero.
./fbt launch_app APPSRC=pokemon
NOTA: Si sólo quieres generar el archivo fap debes correr el siguiente comando.
./fbt fap_pokemon
y usa qFlipper para copiar el archivo pokemon.fap generado a la carpeta SD Card/apps/Game Boy.

Estas instrucciones asumen que está comenzando en el escritorio de Flipper Zero. De lo contrario, presione el botón Atrás hasta que esté en el escritorio.
OK en el flipper para abrir el menú principal.Aplicaciones en el menú.Game Boy en el submenú.Pokemon TradingEl Flipper Zero debe mostrar la selección de Pokemon que se desea intercambiar y por defecto parece bulbasaur.
Pulse los botones IZQUIERDA/DERECHA para paginar de 1 en 1 la selección de Pokemon.
Pulse los botones ARRIBA/ABAJO para paginar de 10 en 10 la selección de Pokemon.
Pulse el botón OK para seleccionar el Pokemon a Intercambiar.
<br />
<img src="./docs/images/flipper-zero-flat-2.png" width="400" /><br />
En el Flipper Zero se muestra la vista para conectar el Game Boy.
<br />
<img src="./docs/images/flipper-zero-flat-3.png" width="400" /><br />
En tu Game Boy debes conectar el Cable Game Link al Game Boy, en el juego dirigirte a un Centro Pokémon que tengas más cercano.
<br />
<img src="./docs/images/game_boy_pokemon_center.png" width="400" /><br />
Habla con la chica que está en el mostrador de la derecha. La chica nos dirá que para poder jugar antes tendremos que salvar el juego, le contestaremos que SI pulsando el botón A.
<br />
<img src="./docs/images/game_boy_save.png" width="400" /><br />
El Flipper Zero nos mostrará que estámos conectados.
<br />
<img src="./docs/images/flipper-zero-flat-4.png" width="400" /><br />
En el Game Boy nos preguntará que opción queremos y Seleccionamos CENT. CAMBIO.
<br />
<img src="./docs/images/game_boy_save_trade.png" width="400" /><br />
Entrarás a la sala de Intercambio donde debes presionar el botón A del Game Boy en el lado de tu mesa.
<br />
<img src="./docs/images/game_boy_trade_room_2.png" width="400" /><br />
Flipper Zero quedará en una pantalla de espera con el Pokemon que seleccionaste.
<br />
<img src="./docs/images/flipper-zero-flat-5.png" width="400" /><br />
Se te mostrarán tus Pokemon y el Pokemon que seleccionaste en el Flipper Zero, en este Caso Mew. Debes seleccionar el pokemon que quieres intercambiar y presionar TRATO.
<br />
<img src="./docs/images/game_boy_trade_list_select_trade.png" width="400" /><br />
Debes confirmar el intercambio seleccionado TRATO.
<br />
<img src="./docs/images/game_boy_trade_list_select_trade_confirm.png" width="400" /><br />
Flipper Zero quedará en una pantalla de espera con el Pokemon que seleccionaste.
<br />
<img src="./docs/images/flipper-zero-flat-6.png" width="400" /><br />
Finalmente comenzará el intercambio de Pokemon desde Flipper Zero al Game Boy.
<br />
<img src="./docs/images/flipper-zero-flat-7.png" width="400" /><br />
NOTA: Si al final del Intercambio se te bloquea el Flipper Zero debes Rebootear presionando la combinación de teclas
IZQUIERDA +
ATRAS
<br />
<img src="./docs/images/reboot.png" width="400" /><br />
El método utilizado para comunicar 2 Game Boy se basa en el protocolo SPI, que es un protocolo de comunicación serial muy simple en el que un dispositivo maestro se comunica con uno o más dispositivos esclavos. El protocolo es bidireccional y sincrónico, y utiliza tres señales básicas:
En el Game Boy, los juegos almacenan los datos en un registro de cambio interno que se utiliza para enviar y recibir información. El protocolo SPI utilizado por el Game Boy utiliza la señal de reloj para indicar cuándo se transfieren los datos.
El protocolo de enlace de Game Boy es síncrono y requiere que el dispositivo esclavo responda al mismo ritmo que el dispositivo maestro. El dispositivo maestro suministra un reloj de 8KHz (velocidad de transferencia de datos de 1KB/s). La ventana de tiempo para responder es de solo ~120μs. Sin embargo, el dispositivo esclavo no tiene restricciones y puede responder cuando recibe los datos. El reloj puede variar y no hay un límite inferior.

Una transferencia de ejemplo de GB SPI. Aquí, el maestro envía 0xD9 (217) y el esclavo envía 0x45 (69).
Se puede conocer mas al respecto en el siguiente Video Analyzing the Different Versions of the Link Cable.
Para la placa del Fipper Zero se utilizó un PortData EXT Link y una place de prototipo de 2x8.

PortData EXT Link para Game Boy Color, Game Boy Pocket, GBC, GBP, GBL.


Se deben conectar los Pines de la siguiente manera

<source media="(prefers-color-scheme: dark)" srcset="./docs/images/GPIO-GBPIN_light.png">
<source media="(prefers-color-scheme: light)" srcset="./docs/images/GPIO-GBPIN.png">
<img
alt="Connect Flipper Zero GPIO to Game Boy Pins"
src="./docs/images/GPIO-GBPIN.png">
| Cable Game Link (Socket) | Flipper Zero GPIO |
|---|---|
| 6 (GND) | 8 (GND) |
| 5 (CLK) | 7 (C3) |
| 3 (SI) | 6 (B2) |
| 2 (SO) | 5 (B3) |
Para generar la Interfaz gráfica se utilizó la herramienta FUI-Editor. Además se utilizaron los sprites originales del juego Pokemon Yellow que se encuentran en el repositorio Disassembly of Pokemon Yellow.
De cada imagen se transformó el color #aaa a #fff para que Flipper Zero la renderizara bien. Para eso se utilizó un Batch para Photopea, el editor de imagenes online.
OK deja de funcionar por lo que hay que reiniciarlo 🤔
Desde Talcahuano 🇨🇱 con ❤