Firmware personalizado para o jogo Nintendo mais recente e assista aos consoles.
Este repositório contém código personalizado, bem como um utilitário de patching para adicionar funcionalidade adicional ao firmware do jogo e da observação de estoque. Em suma, este projeto permite que você execute o firmware que seu jogo e o relógio vieram com o Side Retro-Go.
LEFT
+ GAME
) para iniciar o retro-go do interno flash Bank 2.make help
para ver todas as opções de configuração.PATCH_PARAMS="--device=mario"
)--smb1=path-to-patched-smb1-rom.nes
--smb1-graphics=path-to-patch.ips
ips/
e faça com que o patcher os descubra automaticamente por meio da bandeira --smb1-graphics-glob
PATCH_PARAMS="--device=zelda"
)--no-beep
Este repositório usa a ferramenta CLI GNWManager. Veja suas instruções sobre como instalar.
Instale as dependências Python de jogo e patch (> = Python3.6 Necessário) via:
pip3 install -r requirements.txt
Coloque seu internal_flash_backup_${DEVICE}.bin
e flash_backup_${DEVICE}.bin
na raiz deste repo. Para extraí -los do seu sistema GNW, consulte o tutorial de desbloqueio do GNWManager. Por exemplo, se estivermos corrigindo o jogo mario
e o Watch, precisamos dos arquivos internal_flash_backup_mario.bin
e flash_backup_mario.bin
no diretório raiz deste projeto.
Veja a seção apropriada abaixo para o modelo do seu dispositivo.
Para opções de configuração adicionais, make help
.
Como a maioria das pessoas vai usar isso com retro-go, deseja a quantidade mínima de armazenamento externo usado e não se importa com as imagens adormecidas ou com o ovo de Páscoa de Mario Song, aqui estão os comandos de recomendação. Observe que isso usa 128kb não documentado do Banco Interno 1 e requer uma versão corrigida do 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
Isso pressupõe que você atualizou o flash externo para algo maior que 4 MB. Consulte o documento Zelda para usar o Retro-Go com o chip flash de 4 MB de estoque.
# 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
Etapas para piscar de um contêiner do Docker (em execução no Linux, por exemplo, 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
Se você tiver problemas de permissão, verifique se o seu usuário está no grupo Docker.
keystone-engine
no RPI3 Se você não conseguir instalar keystone-engine
em um Raspberry Pi 3, tente:
raspi-config
git clone https://github.com/keystone-engine/keystone
cd keystone/bindings/python/
python3 -m pip install .
Principais estágios para o desenvolvimento de um recurso:
Core/Inc/stock_firmware.h
.Core/Src/main.c
. Há uma boa chance de sua função personalizada chamar a função em (2). Você provavelmente também precisará adicionar -Wl,--undefined=my_custom_function
para LDFLAGS
no makefile para que ele não seja otimizado como código inacessível.patches/patches.py
.Esta é a minha primeira vez em desenvolvimento de patches para um binário de código fechado. Documentei minha jornada na esperança de ajudar outras pessoas. Se você tiver alguma recomendação, dicas, truques ou qualquer coisa assim, deixe um problema do Github e atualizarei a documentação!
Graças à comunidade que tornou isso possível! Este repo foi construído com a ajuda de outras pessoas. Repos referenciados durante o desenvolvimento deste projeto:
Eu também gostaria de agradecer à discórdia do StacksMashing por toda a ajuda (gritos especiais para @cyanic)!