Esteban Fuentealba 2 лет назад
Родитель
Сommit
2f3a658d14
100 измененных файлов с 232 добавлено и 0 удалено
  1. 2 0
      .gitignore
  2. 219 0
      README.md
  3. 11 0
      application.fam
  4. BIN
      assets/Background.png
  5. BIN
      assets/Background_128x11.png
  6. BIN
      assets/Button_18x18.png
  7. BIN
      assets/Connect_me_62x31.png
  8. BIN
      assets/Connected_62x31.png
  9. BIN
      assets/Space_100x18.png
  10. BIN
      assets/Space_65x18.png
  11. BIN
      assets/Space_80x18.png
  12. BIN
      assets/Space_95x18.png
  13. BIN
      assets/abra.png
  14. BIN
      assets/aerodactyl.png
  15. BIN
      assets/alakazam.png
  16. BIN
      assets/arbok.png
  17. BIN
      assets/arcanine.png
  18. BIN
      assets/articuno.png
  19. BIN
      assets/beedrill.png
  20. BIN
      assets/bellsprout.png
  21. BIN
      assets/blastoise.png
  22. BIN
      assets/bulbasaur.png
  23. BIN
      assets/butterfree.png
  24. BIN
      assets/caterpie.png
  25. BIN
      assets/chansey.png
  26. BIN
      assets/charizard.png
  27. BIN
      assets/charmander.png
  28. BIN
      assets/charmeleon.png
  29. BIN
      assets/clefable.png
  30. BIN
      assets/clefairy.png
  31. BIN
      assets/cloyster.png
  32. BIN
      assets/cubone.png
  33. BIN
      assets/dewgong.png
  34. BIN
      assets/diglett.png
  35. BIN
      assets/ditto.png
  36. BIN
      assets/dodrio.png
  37. BIN
      assets/doduo.png
  38. BIN
      assets/dragonair.png
  39. BIN
      assets/dragonite.png
  40. BIN
      assets/dratini.png
  41. BIN
      assets/drowzee.png
  42. BIN
      assets/dugtrio.png
  43. BIN
      assets/eevee.png
  44. BIN
      assets/ekans.png
  45. BIN
      assets/electabuzz.png
  46. BIN
      assets/electrode.png
  47. BIN
      assets/exeggcute.png
  48. BIN
      assets/exeggutor.png
  49. BIN
      assets/farfetchd.png
  50. BIN
      assets/fearow.png
  51. BIN
      assets/flareon.png
  52. BIN
      assets/fossilaerodactyl.png
  53. BIN
      assets/fossilkabutops.png
  54. BIN
      assets/game_boy.png
  55. BIN
      assets/gastly.png
  56. BIN
      assets/gb_step_1.png
  57. BIN
      assets/gb_step_2.png
  58. BIN
      assets/gengar.png
  59. BIN
      assets/geodude.png
  60. BIN
      assets/gloom.png
  61. BIN
      assets/golbat.png
  62. BIN
      assets/goldeen.png
  63. BIN
      assets/golduck.png
  64. BIN
      assets/golem.png
  65. BIN
      assets/graveler.png
  66. BIN
      assets/grimer.png
  67. BIN
      assets/growlithe.png
  68. BIN
      assets/gyarados.png
  69. BIN
      assets/haunter.png
  70. BIN
      assets/hitmonchan.png
  71. BIN
      assets/hitmonlee.png
  72. BIN
      assets/horsea.png
  73. BIN
      assets/hypno.png
  74. BIN
      assets/ivysaur.png
  75. BIN
      assets/jigglypuff.png
  76. BIN
      assets/jolteon.png
  77. BIN
      assets/jynx.png
  78. BIN
      assets/kabuto.png
  79. BIN
      assets/kabutops.png
  80. BIN
      assets/kadabra.png
  81. BIN
      assets/kakuna.png
  82. BIN
      assets/kangaskhan.png
  83. BIN
      assets/kingler.png
  84. BIN
      assets/koffing.png
  85. BIN
      assets/krabby.png
  86. BIN
      assets/lapras.png
  87. BIN
      assets/lickitung.png
  88. BIN
      assets/machamp.png
  89. BIN
      assets/machoke.png
  90. BIN
      assets/machop.png
  91. BIN
      assets/magikarp.png
  92. BIN
      assets/magmar.png
  93. BIN
      assets/magnemite.png
  94. BIN
      assets/magneton.png
  95. BIN
      assets/mankey.png
  96. BIN
      assets/marowak.png
  97. BIN
      assets/meowth.png
  98. BIN
      assets/metapod.png
  99. BIN
      assets/mew.png
  100. BIN
      assets/mewtwo.png

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+.DS_Store
+.vscode

+ 219 - 0
README.md

@@ -0,0 +1,219 @@
+# Flipper Zero - Pokemon Trading in Game Boy
+
+<p align="center">
+<a target="_blank" href="https://youtube.com/shorts/44rBn0jeGRk&feature=github.com">
+  <img align="center" alt="Flipper Zero - Pokemon Trading Game Boy" src="./docs/images/youtube.png" />
+  </a>
+</p>
+
+## Introducción
+
+Esta es una aplicación de intercambio de Pokemon's desde de Flipper Zero a Game Boy [(Generación I)](https://bulbapedia.bulbagarden.net/wiki/Generation_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).
+
+## Instrucciones de instalación
+
+Este proyecto está destinado a ser superpuesto encima de un repositorio de firmware existente, en mi caso la versión **Release 0.79.1**.
+
+- Clona el [Repositorio del firmware de Flipper Zero](https://github.com/flipperdevices/flipperzero-firmware). Consulta este [tutorial](https://github.com/jamisonderek/flipper-zero-tutorials/tree/main/firmware/updating/README.md) para actualizar el firmware.
+- Copia la [carpeta "pokemon"](..) en la carpeta `/applications_user/pokemon` del firmware que clonaste.
+- Corre el comando `fbt launch_app` para correr en tu Flipper Zero.
+
+```bash
+./fbt launch_app APPSRC=pokemon
+```
+
+- NOTA: Si sólo quieres generar el archivo `fap` debes correr el siguiente comando.
+
+```bash
+./fbt fap_pokemon
+```
+
+y usa [**qFlipper**](https://flipperzero.one/update) para copiar el archivo **pokemon.fap** generado a la carpeta `SD Card/apps/Game Boy`.
+
+<p align='center'>
+<img src="./docs/images/qFlipper.png" width="400" /><br />
+</p>
+
+## Instrucciones de Uso
+
+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.
+
+- Presione el botón `OK` en el flipper para abrir el menú principal.
+- Elija `Aplicaciones` en el menú.
+- Elija `Game Boy` en el submenú.
+- Elija `Pokemon Trading`
+- El Flipper Zero debe mostrar la selección de Pokemon que se desea intercambiar y por defecto parece bulbasaur.
+
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-1.png" width="400" />
+        <br />
+    </p>
+
+- 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.
+    <p align='center'>
+         <br />
+        <img src="./docs/images/flipper-zero-flat-2.png" width="400" /><br />
+    </p>
+- En el Flipper Zero se muestra la vista para conectar el Game Boy.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-3.png" width="400" /><br />
+    </p>
+- 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.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/game_boy_pokemon_center.png" width="400" /><br />
+    </p>
+- 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_.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/game_boy_save.png" width="400" /><br />
+    </p>
+- El Flipper Zero nos mostrará que estámos conectados.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-4.png" width="400" /><br />
+    </p>
+- En el Game Boy nos preguntará que opción queremos y Seleccionamos **CENT. CAMBIO**.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/game_boy_save_trade.png" width="400" /><br />
+    </p>
+- Entrarás a la sala de Intercambio donde debes presionar el botón A del Game Boy en el lado de tu mesa.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/game_boy_trade_room_2.png" width="400" /><br />
+    </p>
+- Flipper Zero quedará en una pantalla de espera con el Pokemon que seleccionaste.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-5.png" width="400" /><br />
+    </p>
+- 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**.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/game_boy_trade_list_select_trade.png" width="400" /><br />
+    </p>
+- Debes confirmar el intercambio seleccionado **TRATO**.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/game_boy_trade_list_select_trade_confirm.png" width="400" /><br />
+    </p>
+- Flipper Zero quedará en una pantalla de espera con el Pokemon que seleccionaste.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-6.png" width="400" /><br />
+    </p>
+- Finalmente comenzará el intercambio de Pokemon desde **Flipper Zero** al **Game Boy**.
+    <p align='center'>
+        <br />
+        <img src="./docs/images/flipper-zero-flat-7.png" width="400" /><br />
+    </p>
+- **NOTA**: Si al final del Intercambio se te bloquea el Flipper Zero debes Rebootear presionando la combinación de teclas <img src="./docs/images/left.png" /> IZQUIERDA + <img src="./docs/images/back.png" /> ATRAS
+    <p align='center'>
+        <br />
+        <img src="./docs/images/reboot.png" width="400" /><br />
+    </p>
+
+## ¿Cómo trabaja?
+
+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:
+
+- Una señal de reloj (CLK).
+- Una señal de salida (Serial Out o SO).
+- Una señal de entrada (Serial In o SI).
+
+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.
+
+<p align='center'>
+<br />
+<img src="./docs/images/gb_spi.png" width="400" /><br />
+</p>
+
+_Una transferencia de ejemplo de GB SPI. Aquí, el maestro envía 0xD9 (217) y el esclavo envía 0x45 (69)._
+
+<br />
+
+Se puede conocer mas al respecto en el siguiente Video [**Analyzing the Different Versions of the Link Cable**](https://youtu.be/h1KKkCfzOws?t=151).
+
+## Placa para Flipper Zero
+
+Para la placa del Fipper Zero se utilizó un [PortData EXT Link](https://es.aliexpress.com/item/1005004116983895.html) y una [place de prototipo](https://es.aliexpress.com/item/32478242317.html) de 2x8.
+
+<p align='center'>
+<br />
+<img src="./docs/images/EXT-Link.png" width="400" /><br />
+</p>
+
+_PortData EXT Link para Game Boy Color, Game Boy Pocket, GBC, GBP, GBL._
+
+<p align='center'>
+<br />
+<img src="./docs/images/pcb.png" width="400" /><br />
+</p>
+<p align='center'>
+<br />
+<img src="./docs/images/flipper-zero-pcb.png" width="400" /><br />
+</p>
+
+## Conexión: Flipper Zero GPIO - Game Boy
+
+Se deben conectar los Pines de la siguiente manera
+
+<p align='center'>
+<br />
+<img src="./docs/images/wgbl-0.png" width="400" /><br />
+</p>
+
+<picture>
+    <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">
+</picture>
+
+| Cable Game Link (Socket) | Flipper Zero GPIO |
+| ------------------------ | ----------------- |
+| 6 (GND)                  | 8 (GND)           |
+| 5 (CLK)                  | 7 (C3)            |
+| 3 (SI)                   | 6 (B2)            |
+| 2 (SO)                   | 5 (B3)            |
+
+## GUI
+
+Para generar la Interfaz gráfica se utilizó la herramienta [**FUI-Editor**](https://ilin.pt/stuff/fui-editor/).
+Además se utilizaron los sprites originales del juego _Pokemon Yellow_ que se encuentran en el repositorio [**Disassembly of Pokemon Yellow**](https://github.com/pret/pokeyellow/tree/master/gfx/pokemon/front).
+
+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](https://www.photopea.com/), el editor de imagenes online.
+
+## TODO
+
+- [ ] Refactorizar el código
+- [ ] Al salir de la app el botón `OK` deja de funcionar por lo que hay que reiniciarlo 🤔
+- [ ] Setear a cada pokemon sus características, ataques, niveles por defecto
+- [ ] Mejorar animaciones
+
+## Links
+
+- [Flipper Zero firmware source code](https://github.com/flipperdevices/flipperzero-firmware)
+- Adan Scotney's pokemon [trade protocol specification](http://www.adanscotney.com/2014/01/spoofing-pokemon-trades-with-stellaris.html) and implementation
+- Derek Jamison - [Youtube Channel](https://www.youtube.com/@MrDerekJamison)
+- Matt Penny - [GBPlay Blog](hhttps://blog.gbplay.io/)
+- [Pokémon data structure (Generation I)](<https://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_data_structure_(Generation_I)>)
+- [Disassembly of Pokemon Yellow](https://github.com/pret/pokeyellow)
+- [Arduino-Spoofing-Gameboy-Pokemon-Trades](https://github.com/EstebanFuentealba/Arduino-Spoofing-Gameboy-Pokemon-Trades)
+- [🎮 Gameboy link cable breakout PCB](https://github.com/Palmr/gb-link-cable)
+
+<p align='center'>
+<br />
+<br />
+Desde Talcahuano 🇨🇱 con ❤ 
+</p>

+ 11 - 0
application.fam

@@ -0,0 +1,11 @@
+App(
+    appid="pokemon",
+    name="Pokemon Trading",
+    apptype=FlipperAppType.EXTERNAL,
+    entry_point="pokemon_app",
+    requires=["gui"],
+    stack_size=2 * 1024,
+    fap_category="Game Boy",
+    fap_icon="pokemon_10px.png",
+    fap_icon_assets="assets"
+)

BIN
assets/Background.png


BIN
assets/Background_128x11.png


BIN
assets/Button_18x18.png


BIN
assets/Connect_me_62x31.png


BIN
assets/Connected_62x31.png


BIN
assets/Space_100x18.png


BIN
assets/Space_65x18.png


BIN
assets/Space_80x18.png


BIN
assets/Space_95x18.png


BIN
assets/abra.png


BIN
assets/aerodactyl.png


BIN
assets/alakazam.png


BIN
assets/arbok.png


BIN
assets/arcanine.png


BIN
assets/articuno.png


BIN
assets/beedrill.png


BIN
assets/bellsprout.png


BIN
assets/blastoise.png


BIN
assets/bulbasaur.png


BIN
assets/butterfree.png


BIN
assets/caterpie.png


BIN
assets/chansey.png


BIN
assets/charizard.png


BIN
assets/charmander.png


BIN
assets/charmeleon.png


BIN
assets/clefable.png


BIN
assets/clefairy.png


BIN
assets/cloyster.png


BIN
assets/cubone.png


BIN
assets/dewgong.png


BIN
assets/diglett.png


BIN
assets/ditto.png


BIN
assets/dodrio.png


BIN
assets/doduo.png


BIN
assets/dragonair.png


BIN
assets/dragonite.png


BIN
assets/dratini.png


BIN
assets/drowzee.png


BIN
assets/dugtrio.png


BIN
assets/eevee.png


BIN
assets/ekans.png


BIN
assets/electabuzz.png


BIN
assets/electrode.png


BIN
assets/exeggcute.png


BIN
assets/exeggutor.png


BIN
assets/farfetchd.png


BIN
assets/fearow.png


BIN
assets/flareon.png


BIN
assets/fossilaerodactyl.png


BIN
assets/fossilkabutops.png


BIN
assets/game_boy.png


BIN
assets/gastly.png


BIN
assets/gb_step_1.png


BIN
assets/gb_step_2.png


BIN
assets/gengar.png


BIN
assets/geodude.png


BIN
assets/gloom.png


BIN
assets/golbat.png


BIN
assets/goldeen.png


BIN
assets/golduck.png


BIN
assets/golem.png


BIN
assets/graveler.png


BIN
assets/grimer.png


BIN
assets/growlithe.png


BIN
assets/gyarados.png


BIN
assets/haunter.png


BIN
assets/hitmonchan.png


BIN
assets/hitmonlee.png


BIN
assets/horsea.png


BIN
assets/hypno.png


BIN
assets/ivysaur.png


BIN
assets/jigglypuff.png


BIN
assets/jolteon.png


BIN
assets/jynx.png


BIN
assets/kabuto.png


BIN
assets/kabutops.png


BIN
assets/kadabra.png


BIN
assets/kakuna.png


BIN
assets/kangaskhan.png


BIN
assets/kingler.png


BIN
assets/koffing.png


BIN
assets/krabby.png


BIN
assets/lapras.png


BIN
assets/lickitung.png


BIN
assets/machamp.png


BIN
assets/machoke.png


BIN
assets/machop.png


BIN
assets/magikarp.png


BIN
assets/magmar.png


BIN
assets/magnemite.png


BIN
assets/magneton.png


BIN
assets/mankey.png


BIN
assets/marowak.png


BIN
assets/meowth.png


BIN
assets/metapod.png


BIN
assets/mew.png


BIN
assets/mewtwo.png


Некоторые файлы не были показаны из-за большого количества измененных файлов