ゲーム&ウオッチ 改造方法

記事の方法を試す前や質問をするまえに必ず下記リンクを見てからにしてください!
このブログについて
http://yyoossk.blogspot.jp/1970/11/blog-post_24.html


こちらではゲーム&ウオッチの改造方法を紹介します
初めに
下記リンクで紹介しているように、本体についているusbについては充電しか使用できないようです
ですのでそこから改造といった簡単なものではありません
本体を分解しても壊しても大丈夫といった方向けの記事になります
機材を揃える必要があるのと、半田作業にlinuxの導入も必要
できることもかなり限定的
ロマン要素が多い改造で、どうしてもゲーム&ウォッチでエミュレーターを起動したいといった方向けです
色々なゲーム、最新ゲームを遊べるといったものではないのでそういった方はスルー推奨です

ゲーム&ウオッチに搭載されているメモリの容量は少ないみたいなので、ゲーム&ウォッチの時計機能など、本来の機能を維持しつつ、エミュレーターや自作ソフトを導入したい場合はチップをやり替えないといけないみたいです
これはかなり上級者向けで、初心者はブリックさせる可能性大です
ゲームの追加に関してはゲーム&ウオッチ スーパーマリオブラザーズは本来は1MBしかないので、ゲームボーイのゲームを一つでも入れたらオーバーします
フラッシュを交換できるなら16MBまで拡張可能だが、先ほど述べたように初心者ではブリックのリスク大
ゲーム&ウオッチ ゼルダの伝説は発売しないと分かりませんが、もともと入っているゲームの中にゲームボーイがあるようなのでゲーム&ウオッチ スーパーマリオブラザーズよりも搭載しているフラッシュの容量が多いと思われます
ですのでそちらの方がよりゲームを追加できると思いま

起動可能なエミュレーター
ゲームボーイ&ゲームボーイカラー
ゲームギア
ファミリーコンピューター
pcエンジン
sms
など

ですのでこちらの記事で紹介するのはゲーム&ウォッチの時計機能など、本来の機能を無視してエミュレーターや自作ソフトを動作させる方法を紹介します

必要なもの
stm32プログラマー
自分は様々な解説サイトで紹介されているSTマイクロエレクトロニクス STM Nucleo-F103RBを使用します
そのほかにもこういったものも使用できるそうです
https://www.amazon.co.jp/s?k=STM32+プログラマ&__mk_ja_JP=カタカナ&ref=nb_sb_noss
ST-LINK2ならSWCLK, GND, SWDIO で1,3,4 の3本を接続するだけでいいようです

Nintendoツールキット ニンテンドー ドライバーセット 任天堂 開封・分解・修理ツールキット

あると便利
デュポンワイヤー
ICクリップ
書き換え後はケーブルが邪魔なので半田付けするよりはこういったクリップで接続して、書き換えが終わったら外せるようにした方がいいです
はめてもしっかり接続されていない場合もあるので、しっかり手で押さえるなどした方がよい場合もあるので注意


参考動画

参考サイト
gbatemp
A Novice Hacking A Game & Watch 旧
how-to-get-launcher-and-retrogo-on-your-g&w
discordサーバー
STマイクロエレクトロニクス STM Nucleo-F103RB基盤説明
最新

改造手順
分解
バッテリーのコードを外しておく


配線
購入したstm32プログラマーに対応する部分を画像を参考に接続
VDDは配線する必要なし

Tマイクロエレクトロニクス STM Nucleo-F103RBの場合
VDDは配線する必要なし

ゼルダは配線が少し違います!
二つ飛ばしてマリオと同じようにすればいけました
マリオを弄ったことがある人なら大して混乱はおこらないと思います


バックアップ
下記リンクを参考にubuntuを導入&起動

下の画像を参考に端末を開き、
sudo apt-get install binutils-arm-none-eabi python3 libftdi1
と打ち込み、パスワードを打ち込む
打ち込んでも全く表示されないため、何の反応もないように見えるが打ち込まれているので大丈夫です。打ち込む前にNumLockが外れているか確認してください。
次に
wget https://nightly.link/kbeckmann/ubuntu-openocd-git-builder/workflows/docker/master/openocd-git.deb.zip
unzip openocd-git.deb.zip
sudo dpkg -i openocd-git_*_amd64.deb
sudo apt-get -y -f install
git clone --recurse-submodules https://github.com/ghidraninja/game-and-watch-backup.git
cd game-and-watch-backup
と打ち込む

説明
1_sanity_check.sh
健全性チェックを実行し、必要なすべてのツールが使用可能であることを確認します
2_backup_flash.sh
SPIフラッシュの内容をバックアップします。デバイスの内容を変更しません。
3_backup_internal_flash.sh
内部フラッシュをバックアップします。これを行うために、SPIフラッシュの内容が変更されます。手順5で復元されるまで、デバイスは動作を停止します。
4_unlock_device.sh
これにより、アクティブな読み取り保護が無効になります。これにより、STM32の内部フラッシュが消去されます。
5_restore.sh
これにより、元のファームウェアが復元されます。

Playerから取り外し可能デバイスからSTM32プログラマを選択し、接続をクリック

解凍したgame-and-watch-backupフォルダ内で右クリックから端末を開く
順番に打ち込む
export OPENOCD="/opt/openocd-git/bin/openocd"
マリオなら
./1_sanity_check.sh stlink mario
ゼルダなら
./1_sanity_check.sh stlink zelda
画像のように表示されたらok
マリオなら
./2_backup_flash.sh stlink mario
ゼルダなら
./2_backup_flash.sh stlink zelda
本体の電源のusbケーブルをつなげて、電源を入れて、タイマーが表示されている状態でエンター
画像のように表示されたら成功
マリオなら
./3_backup_internal_flash.sh stlink mario
ゼルダなら
./3_backup_internal_flash.sh stlink zelda
ここまで表示されたら、本体から一度usbを抜き、再びusbを接続し、電源ボタンを押したままで起動してエンター
この画面が出たら成功
マリオなら
./4_unlock_device.sh stlink mario
ゼルダなら
./4_unlock_device.sh stlink zelda
この画面が出たら成功
マリオなら
./5_restore.sh stlink mario
ゼルダなら
./5_restore.sh stlink zelda
この画面が出たら成功
本体の電源を入れて普通に起動したら成功

game-and-watch-backupフォルダの中のbackupsフォルダをどこか別の場所にも大事にコピーして保存しておくこと


エミュレーター&ゲームの追加
再びubuntuのホームで端末を開き、順番に打ち込んでいく
sudo apt-get install gcc-arm-none-eabi
sudo apt remove gcc-arm-none-eabi
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
sudo tar xjf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -C /usr/share/
sudo ln -s /usr/share/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc /usr/bin/arm-none-eabi-gcc
sudo apt-get install git
git clone --recursive https://github.com/ghidraninja/game-and-watch-flashloader
cd game-and-watch-flashloader
sudo apt-get install make
make
cd ..
git clone --recurse-submodules https://github.com/kbeckmann/game-and-watch-retro-go.git

game-and-watch-retro-goフォルダの中にある
romsフォルダの中に起動できるハードのフォルダが入っているので、その中にゲームのバックアップデータを入れる
ゲーム吸出し方法
gbはゲームボーイ&ゲームボーイカラー
ggはゲームギア
nesはファミリーコンピューター
pceはpcエンジン
smsはsms

端末で
cd game-and-watch-retro-go
export OPENOCD="/opt/openocd-git/bin/openocd"
make flash
で書き込み開始

書き込みが終わったら本体を起動
ゲームを選択
Resume gameで続きから
New gameでリセットされた状態から
Add favoriteでお気に入りに登録
Delete saveでセーブデータを削除
Gameボタンを押すと表示される
Debug menuは開発者向けのデバッグメニュー
Reset settingsで設定をリセット
PAUSE/SETボタンで開ける
Brightnessは明るさ
Volumeは音量
ゲーム中にPAUSE/SETボタンで開ける
Save & Continueはセーブして続ける
Save & Quitはセーブしてゲームを終了
Reloadはゲームのリセット
Options
Brightnessは明るさ
Volumeは音量
Scalingは画面表示の大きさを変更
Filteringはフィルタ
Speedは動作速度を速めることが可能
Paretteは表示される色の変更

セーブデータのバックアップ&リストア
バックアップ
game-and-watch-backupフォルダ内で右クリックから端末を開き、
./dump_saves.sh build/gw_retro_go.elf save_states
と打ち込むと
save_states
フォルダに保存される
各保存状態は
save_states /エミュレーターの種類/ゲームの名前.saveにある
この後、ゲームを変更し、フラッシュしても安全

buildフォルダの中にあるgw_retro_go.elfファイルは消さないように


リストア
game-and-watch-backupフォルダ内で右クリックから端末を開き、
./program_saves.sh build/gw_retro_go.elf save_states
を実行
save_statesフォルダの中身が書き込まれる

buildフォルダの中にあるgw_retro_go.elfファイルは消さないように

program_saves.shは、バックアップしたすべてのセーブデータを書き込む
たとえば、ゲーム A、B、Cのセーブをバックアップする
後で、新しいゲーム Dを追加し、Aを削除してから、ビルドしてフラッシュ
実行すると、BとCの保存状態が書き込まれ、他には何も書き込まれない

コメント