新しい任天堂ゲームとウォッチコンソール用のカスタムファームウェア。
このリポジトリには、カスタムコードとパッチングユーティリティが含まれており、ストックゲームやウォッチファームウェアに機能を追加します。要するに、このプロジェクトを使用すると、ゲームを実行して、レトロゴーと一緒に視聴することができます。
LEFT
+ GAME
)を押して、内部フラッシュバンク2からレトロゴーを起動します。make help
実行します。PATCH_PARAMS="--device=mario"
)--smb1=path-to-patched-smb1-rom.nes
を介してSMB1 ROMハッキングを再生する機能--smb1-graphics=path-to-patch.ips
ips/
に追加し、パッチャーにフラグを介してそれらを自動的に発見させます--smb1-graphics-glob
PATCH_PARAMS="--device=zelda"
)--no-beep
経由で2番目のビープ音を時間/時計で削除する能力このレポは、GNWManager CLIツールを使用します。インストール方法に関する指示を参照してください。
Game-and-Watch-Patch Python依存関係(> = python3.6必須)をインストールしてください。
pip3 install -r requirements.txt
internal_flash_backup_${DEVICE}.bin
and flash_backup_${DEVICE}.bin
このリポジトリのルートに配置します。 GNWシステムからこれらを抽出するには、GNWManagerのロック解除チュートリアルを参照してください。たとえば、 mario
ゲームにパッチを適用して監視している場合、このプロジェクトのルートディレクトリにinternal_flash_backup_mario.bin
およびflash_backup_mario.bin
が必要です。
デバイスモデルについては、以下の適切なセクションを参照してください。
追加の構成オプションについては、 make help
実行します。
ほとんどの人はレトロゴーでこれを使用し、使用される外部ストレージの最小量を必要とし、眠っている画像やマリオの歌のイースターエッグを気にしないでください。ここに推奨コマンドがあります。これにより、文書化されていない128kbの内部銀行1が使用されており、PASTEDバージョンの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
これは、外部フラッシュを4MBより大きなものにアップグレードしたことを前提としています。ストック4MBフラッシュチップでレトロゴーを使用するZeldaドキュメントを参照してください。
# 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
をインストールできませんRaspberry Pi 3にkeystone-engine
インストールできない場合は、次のことを試してください。
raspi-config
からGPU RAMを16MBに更新します 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
makefileのLDFLAGS
に追加する必要があるため、到達不可能なコードとして最適化されないようにする必要があります。patches/patches.py
にパッチ定義を追加します。閉じたソースバイナリ用のパッチを開発したのはこれが初めてです。私はそれが他の人を助けることを期待して私の旅を文書化しました。推奨事項、ヒント、トリックなどがある場合は、GitHubの問題を残して、ドキュメントを更新してください。
これを可能にしたコミュニティに感謝します!このレポは、他の人の助けを借りて構築されました。このプロジェクトの開発中に参照されるリポジトリ:
また、すべての助けについてStackmashing Discordに感謝したいと思います(@cyanicへの特別な叫び声)!