Пользовательская прошивка для более новой игры Nintendo Game and Watch.
Этот репо содержит пользовательский код, а также утилиту исправления, чтобы добавить дополнительные функциональные возможности в акционерную игру и просмотреть прошивку. Короче говоря, этот проект позволяет вам запустить прошивку, которую ваша игра и часы пришли вместе с Retro-Go.
LEFT
+ GAME
), чтобы запустить Retro-GO из внутреннего банка Flash 2.make help
, чтобы увидеть все параметры конфигурации.PATCH_PARAMS="--device=mario"
)--smb1=path-to-patched-smb1-rom.nes
--smb1-graphics=path-to-patch.ips
ips/
и пусть паттер автоматически обнаруживает их через флаг --smb1-graphics-glob
PATCH_PARAMS="--device=zelda"
)--no-beep
В этом репо используется инструмент Gnwmanager CLI. Смотрите инструкции о том, как установить.
Установите зависимости от Python Game-Patch-Patch (> = Python3.6, требуется) через:
pip3 install -r requirements.txt
Разместите свой internal_flash_backup_${DEVICE}.bin
и flash_backup_${DEVICE}.bin
в корне этого репо. Чтобы извлечь их из вашей системы GNW, см. Учебное пособие по разблокировке GNWManager. Например, если мы исправляем игру mario
и смотрим, нам нужны файлы internal_flash_backup_mario.bin
и flash_backup_mario.bin
в корневом каталоге этого проекта.
См. Подходящий раздел ниже для модели вашего устройства.
Для получения дополнительных параметров конфигурации запустите make help
.
Поскольку большинство людей будут использовать это с Retro-GO, хотят минимальный объем используемого внешнего хранилища и не заботятся о спящих изображениях или пасхальном яйце песни Mario, вот рекомендованные команды. Обратите внимание, что это использует незарегистрированные 128 КБ внутреннего банка 1 и требует установленной версии OpenOCD.
# 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
Это предполагает, что вы обновили внешнюю вспышку до чего -то большего, чем 4 МБ. См. Документ Zelda для использования Retro-Go с флэш-чипом 4 МБ.
# 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
Шаги, чтобы вспыхивать из контейнера Docker (работая на Linux, например, Archlinux или 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
Если вы столкнетесь с проблемами разрешения, убедитесь, что ваш пользователь находится в группе Docker.
keystone-engine
на RPI3 Если вы не можете установить keystone-engine
на Raspberry Pi 3, попробуйте:
raspi-config
git clone https://github.com/keystone-engine/keystone
cd keystone/bindings/python/
python3 -m pip install .
Основные этапы разработки функции:
Core/Inc/stock_firmware.h
.Core/Src/main.c
. Есть большая вероятность, что ваша пользовательская функция вызовет функцию в (2). Вам также, вероятно, придется добавить -Wl,--undefined=my_custom_function
в LDFLAGS
в makefile, чтобы он не был оптимизирован как недоступный код.patches/patches.py
.Это мой первый раз, когда когда -либо разрабатывался патчи для бинарного из закрытого исходного кода. Я задокументировал свое путешествие в надежде, что это поможет другим людям. Если у вас есть какие -либо рекомендации, советы, хитрости или что -то в этом роде, оставьте проблему GitHub, и я обновлю документацию!
Спасибо сообществу, которое сделало это возможным! Это репо было построено с помощью других. Репо ссылаются на разработку этого проекта:
Я также хотел бы поблагодарить Discord Stacksmashing за всю помощь (особый крик @cyanic)!