Firmware personalizado para el nuevo juego de Nintendo y consolas de reloj.
Este repositorio contiene código personalizado, así como una utilidad de parcheo para agregar funcionalidad adicional al juego de valores y observar firmware. En resumen, este proyecto le permite ejecutar el firmware que su juego y el reloj venían junto a Retro-Go.
LEFT
+ GAME
) para iniciar retro-go desde el banco de flash interno 2.make help
para ver todas las opciones de configuración.PATCH_PARAMS="--device=mario"
)--smb1=path-to-patched-smb1-rom.nes
--smb1-graphics=path-to-patch.ips
ips/
y haga que el Patcher los descubra automáticamente a través del indicador --smb1-graphics-glob
PATCH_PARAMS="--device=zelda"
)--no-beep
Este repositorio utiliza la herramienta GNWManager CLI. Vea sus instrucciones sobre cómo instalar.
Instale las dependencias de Python de juego y reloj (> = Python3.6 requerido) a través de:
pip3 install -r requirements.txt
Coloque su internal_flash_backup_${DEVICE}.bin
y flash_backup_${DEVICE}.bin
en la raíz de este repositorio. Para extraerlos de su sistema GNW, consulte el tutorial de desbloqueo GNWManager. Por ejemplo, si estamos parcheando el juego y observar mario
, necesitamos los archivos internal_flash_backup_mario.bin
y flash_backup_mario.bin
en el directorio raíz de este proyecto.
Consulte la sección apropiada a continuación para el modelo de su dispositivo.
Para opciones de configuración adicionales, ejecute make help
.
Dado que la mayoría de las personas van a usar esto con Retro-Go, desea que se use la cantidad mínima de almacenamiento externo y no les importe las imágenes para dormir o el huevo de Pascua de Mario, aquí están los comandos recomendados. Tenga en cuenta que esto utiliza un 128 kb indocumentado del banco interno 1 y requiere una versión parcheada de OpenOCD instalada.
# in this repo
make clean
make PATCH_PARAMS="--device=mario --internal-only" flash
# in the retro-go repo
make clean
make -j8 INTFLASH_BANK=2 flash
Esto supone que ha actualizado el flash externo a algo más grande que 4 MB. Consulte el documento Zelda para usar retro-go con el chip de flash de 4 MB de stock.
# in this repo
make clean
make PATCH_PARAMS="--device=zelda" flash
# in the retro-go repo
make clean
# In this example, I'm assuming you have a 64MB flash chip (60 = 64 - 4)
make -j8 EXTFLASH_SIZE_MB=60 EXTFLASH_OFFSET=4194304 INTFLASH_BANK=2 flash
Pasos para flashear desde un contenedor Docker (que se ejecuta en Linux, por ejemplo, Archlinux o Ubuntu):
# Go into the docker directory of this repo.
cd docker/
# Pull the pre-built docker image.
docker pull brianpugh/game-and-watch-patch:latest
# When done, use the image to create a container with the attached docker-compose.yaml file.
# You have to edit the compose file and set the path to the directory with your firmware backup (volumes section of the file).
docker compose up -d
# This will create and run a container game-and-watch-patch.
# The firmware backup files will be mounted into /tmp/firmware of the container.
# Now, go inside the container copy the backup files and proceed as described above in the Usage section.
docker exec -it game-and-watch-patch /bin/bash
Si se encuentra con problemas de permiso, asegúrese de que su usuario esté en el grupo Docker.
keystone-engine
en RPI3 Si no puede instalar keystone-engine
en una Raspberry Pi 3, intente:
raspi-config
git clone https://github.com/keystone-engine/keystone
cd keystone/bindings/python/
python3 -m pip install .
Etapas principales para desarrollar una característica:
Core/Inc/stock_firmware.h
.Core/Src/main.c
. Existe una buena posibilidad de que su función personalizada llame a la función en (2). Probablemente también tendrá que agregar -Wl,--undefined=my_custom_function
a LDFLAGS
en el makfile para que no se optimice como un código inalcanzable.patches/patches.py
.Esta es la primera vez que desarrollar parches para un binario de código cerrado. Documenté mi viaje con la esperanza de que ayude a otras personas. Si tiene alguna recomendación, consejo, trucos o algo así, deje un problema de GitHub y actualizaré la documentación.
¡Gracias a la comunidad que hizo esto posible! Este repositorio fue construido con la ayuda de otros. Repos referenciados durante el desarrollo de este proyecto:
¡También me gustaría agradecer a la discordia de Stacksmashing por toda la ayuda (Special Shoutout a @Cyanic)!