Benutzerdefinierte Firmware für das neuere Nintendo -Spiel und die Uhrenkonsolen.
Dieses Repo enthält einen benutzerdefinierten Code sowie ein Patching -Dienstprogramm, um dem Aktienspiel zusätzliche Funktionen hinzuzufügen und Firmware zu sehen. Kurz gesagt, in diesem Projekt können Sie die Firmware Ihr Spiel ausführen und die Uhr mit Retro-Go wurde mitgeliefert.
LEFT
+ GAME
), um Retro-Go von der internen Flash Bank 2 zu starten.make help
durch, um alle Konfigurationsoptionen anzuzeigen.PATCH_PARAMS="--device=mario"
)--smb1=path-to-patched-smb1-rom.nes
abzuspielen--smb1-graphics=path-to-patch.ips
ips/
und --smb1-graphics-glob
PATCH_PARAMS="--device=zelda"
)--no-beep
zu entfernenDieses Repo verwendet das Gnwmanager CLI -Tool. Sehen Sie sich an, wie man installiert wird.
Installieren Sie die Python-Abhängigkeiten von Game-and-Watch-Patch (> = Python3.6 erforderlich) über:
pip3 install -r requirements.txt
Platzieren Sie Ihre internal_flash_backup_${DEVICE}.bin
und flash_backup_${DEVICE}.bin
im Stamm dieses Repo. Um diese aus Ihrem GNW -System zu extrahieren, finden Sie im Gnwmanager -Tutorial. Wenn wir beispielsweise das mario
-Spiel und das Uhren -Watch patchen, benötigen wir die Dateien internal_flash_backup_mario.bin
und flash_backup_mario.bin
im Stammverzeichnis dieses Projekts.
In dem entsprechenden Abschnitt unten finden Sie Ihr Gerätemodell.
Für zusätzliche Konfigurationsoptionen rennen make help
.
Da die meisten Menschen dies mit Retro-Go verwenden, möchten die minimale Menge an externer Speicherung und die schlafenden Bilder oder das Mario-Song-Osterei nicht interessieren, hier sind die Empfehlungsbefehle. Beachten Sie, dass dies eine nichtokumentierte 128 KB interne Bank 1 verwendet und eine gepatchte Version von OpenOCD installiert erfordert.
# 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
Dies setzt voraus, dass Sie den externen Blitz auf etwas größeres als 4 MB verbessert haben. Siehe das Zelda-Dokument für die Verwendung von Retro-Go mit dem 4-MB-Flash-Chip.
# 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
Schritte zum Flash von einem Docker -Container (auf Linux, z. B. Archlinux oder Ubuntu ausgeführt):
# 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
Wenn Sie auf Erlaubnisprobleme stoßen, stellen Sie sicher, dass sich Ihr Benutzer in der Docker -Gruppe befindet.
keystone-engine
kann nicht auf RPI3 installiert werden Wenn Sie keystone-engine
nicht auf einem Raspberry Pi 3 installieren können, versuchen Sie es mit:
raspi-config
git clone https://github.com/keystone-engine/keystone
cd keystone/bindings/python/
python3 -m pip install .
Hauptphasen zur Entwicklung einer Funktion:
Core/Inc/stock_firmware.h
hinzu.Core/Src/main.c
. Es besteht eine gute Chance, dass Ihre benutzerdefinierte Funktion die Funktion in (2) aufruft. Sie müssen wahrscheinlich auch -Wl,--undefined=my_custom_function
zu LDFLAGS
in der makefile hinzufügen, damit es nicht als nicht erreichbarer Code optimiert wird.patches/patches.py
eine Patch -Definition hinzu.Dies ist mein erstes Mal, dass ich Patches für eine geschlossene Quelle binär entwickelte. Ich habe meine Reise in der Hoffnung dokumentiert, dass es anderen Menschen hilft. Wenn Sie Empfehlungen, Tipps, Tricks oder ähnliches haben, hinterlassen Sie bitte ein GitHub -Problem und ich werde die Dokumentation aktualisieren!
Vielen Dank an die Community, die dies möglich gemacht hat! Dieses Repo wurde mit Hilfe anderer gebaut. Repos, auf die während der Entwicklung dieses Projekts verwiesen wird:
Ich möchte auch bei der Stacksmashing -Zwietracht für all die Hilfe (besonderer Shoutout an @cyanic) danken!