Firmware personnalisé pour le nouveau jeu Nintendo et regarde les consoles.
Ce dépôt contient du code personnalisé ainsi qu'un utilitaire de correctif pour ajouter des fonctionnalités supplémentaires au jeu de stock et regarder le micrologiciel. En bref, ce projet vous permet d'exécuter le firmware que votre jeu et la montre sont livrés avec Retro-Go.
LEFT
+ GAME
) pour lancer Retro-Go à partir de la banque flash interne 2.make help
pour voir toutes les options de configuration.PATCH_PARAMS="--device=mario"
)--smb1=path-to-patched-smb1-rom.nes
--smb1-graphics=path-to-patch.ips
ips/
et demandez au patcher de les découvrir automatiquement via l'indicateur --smb1-graphics-glob
PATCH_PARAMS="--device=zelda"
)--no-beep
Ce repo utilise l'outil GNWManager CLI. Voir ses instructions sur la façon d'installer.
Installez les dépendances Python de jeu et de surveillance (> = python3.6 requises) via:
pip3 install -r requirements.txt
Placez votre internal_flash_backup_${DEVICE}.bin
et flash_backup_${DEVICE}.bin
dans la racine de ce référentiel. Pour les extraire de votre système GNW, consultez le tutoriel de déverrouillage GNWManager. Par exemple, si nous corrigeons le jeu mario
et Watch, nous avons besoin des fichiers internal_flash_backup_mario.bin
et flash_backup_mario.bin
dans le répertoire racine de ce projet.
Voir la section appropriée ci-dessous pour votre modèle d'appareil.
Pour des options de configuration supplémentaires, exécutez make help
.
Étant donné que la plupart des gens vont l'utiliser avec Retro-Go, veulent la quantité minimale de stockage externe utilisé et ne se soucient pas des images de sommeil ou de l'œuf de Pâques Mario, voici les commandes recommandées. Notez que cela utilise un 128 Ko sans papiers de banque interne 1 et nécessite une version correcée d'OpenOCD installée.
# 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
Cela suppose que vous avez mis à niveau le flash externe vers quelque chose de plus de 4 Mo. Voir le document Zelda pour l'utilisation de Retro-Go avec la puce flash de 4 Mo d'origine.
# 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
Étapes pour flasher à partir d'un conteneur Docker (en cours d'exécution sur Linux, par exemple Archlinux ou 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 vous rencontrez des problèmes d'autorisation, assurez-vous que votre utilisateur se trouve dans le groupe Docker.
keystone-engine
sur RPI3 Si vous n'êtes pas en mesure d'installer keystone-engine
sur un Raspberry Pi 3, essayez:
raspi-config
git clone https://github.com/keystone-engine/keystone
cd keystone/bindings/python/
python3 -m pip install .
Étapes principales pour développer une fonctionnalité:
Core/Inc/stock_firmware.h
.Core/Src/main.c
Il y a de fortes chances que votre fonction personnalisée appelle la fonction dans (2). Vous devrez également probablement ajouter -Wl,--undefined=my_custom_function
aux LDFLAGS
dans le makefile afin qu'il ne soit pas optimisé comme un code inaccessible.patches/patches.py
.C'est la première fois que je développe des patchs pour un binaire à source fermée. J'ai documenté mon voyage dans l'espoir que cela aide les autres. Si vous avez des recommandations, des conseils, des astuces ou quelque chose comme ça, veuillez laisser un problème GitHub et je mettrai à jour la documentation!
Merci à la communauté qui a rendu cela possible! Ce repo a été construit avec l'aide des autres. Repositions référencées lors du développement de ce projet:
Je voudrais également remercier la discorde Stacksmashing pour toute l'aide (cri spécial à @cyanic)!