(202404時点)Game_and_Watchの改造方法についての備忘録

要約

この内容は先駆者様(https://note.com/macohime/n/n1f0c6e3280bc)の内容を元に、Windows上のWSL環境のUbuntu22.04で
Game_and_watchゼルダ(以後Gnw)を改造した記録となります。
どうしてもmacos等の環境やWSL2上で行うにあたっての変更点等もあるのでそこらをしっかりフォローしたつもりです。
はんだ付け作業はいい道具と練習してれば大丈夫だと思いますが、細かい作業が下手くそな場合は諦めたほうがいいです。

必要なもの

・Game-and-watch zelda たまたま手元にゼルダがあったので
・flashrom MX25U51245GZ4I00(そのままだと容量小さいので)
aliexpressは怪しいのでmouserやdigikeyでかう。
・ドライバーセット(amazonでいっぱいあるのでお好きなものを)
・はんだごて等
・ST-link V2
amazonとかで格安品うってますが、いい思い出がないので、
秋月の開発ボード上のST-linkを使いましょう(ST-LINKとかいたジャンパを2つはずすことで書き込み機になる)
※Windowsドライバ等は事前に入れておいてください。なくてもいいと思いますが、念の為
https://akizukidenshi.com/catalog/g/g107724/


ビルド環境の作成

まずはWindows10上にWSL2をインストールして、Ubuntu22.04を導入してください。
途中で注意する点はubuntu選択時

wsl --install -d Ubuntu-22.04

としてください
参考:https://qiita.com/ryome/items/240f36923f5cb989da27

これでUbuntuのセットアップは終わったと思うので次にいきます。

以下のソフトをそれぞれwindowsにインストールします
vscode https://code.visualstudio.com/
usbipd
 https://github.com/dorssel/usbipd-win/releases 
vscodeはターミナルとして利用、
usbipdはWindows上のUSBデバイスをWSL2上のマシンで利用するためのソフトとなります。最新版ではUbuntu上のインストールはいらなくなりました。

以下はusbipdの利用あんちょこです。
(Powershell)

WSL2でUSBマウントして使うためのあんちょこ
1.powershellでusbipd listをして一覧をみる
PS C:\Windows\system32> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
2-1    0483:3752  ST-Link Debug, STMicroelectronics STLink Virtual COM Port...  Not shared
2-4    04f2:b70f  Integrated Camera                                             Not shared
2-10   8087:0032  インテル(R) ワイヤレス Bluetooth(R)                           Not shared

2.usbpid bind --busid を指定する
(ST-linkをWSL2で使う場合)
PS C:\Windows\system32> usbipd bind --busid=2-1
usbipd: warning: Unknown USB filter 'edevmon' may be incompatible with this software; 'bind --force' may be required.
PS C:\Windows\system32> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
2-1    0483:3752  ST-Link Debug, STMicroelectronics STLink Virtual COM Port...  Shared
2-4    04f2:b70f  Integrated Camera                                             Not shared
2-10   8087:0032  インテル(R) ワイヤレス Bluetooth(R)                           Not shared


3.WSL2に通す
usbipd attach --wsl --busid=2-1

4.Ubuntu上でlsusbでみえるか確認
applesorce@THINKPADX13:git$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0483:3752 STMicroelectronics ST-LINK/V2.1
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

VScodeの日本語化、ubuntuコンソールの出し方はここでは説明しませんが、
ぐぐって各自で終わらしましょう。

次にubuntuのセットアップです。

//Ubuntuの開発環境の構築、多分ここいらを入れておけば大丈夫
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install build-essential
$ sudo apt install gcc-arm-none-eabi unzip git binutils-arm-none-eabi python3 libhidapi-hidraw0 libftdi1 libftdi1-2

//pipxをいれる
$ sudo apt install pipx
$ pipx ensurepath
//以後はgame_and_watch_patchで使うが、先に入れておく
$ pipx install gnwmanager
$ gnwmanager install openocd
//openocd-gitを入れる、(ubuntuのopenocdでは後々使えないので必須)

$ 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

openocd-gitはST-linkを利用してアクセスするためのツールとなります。
上の手順でインストールすると
/opt/openocd-git/bin/openocd
にファイルがあります。

Gnwの分解

特に難しい点はないとおもうのでひたすらネジをバラしてください。
あと、バッテリーのコネクタも外して置くこと。

GnwとST-LINKの接続

基本的につなぐのは3本
GND,SWDIO,SWDCLKのみ(その他は繋がない)
Gnwマリオとゼルダではpinoutが少し違うので注意
以下メモ
NCはno connect
zelda
▲がついている穴から1とする
1.NC
2.SWDIO
3.GND
4.NC
5.SWDCLK
6.NC
7.NC

Gnwのバックアップ

以下の手順でバックアップを進める

以後指定あるまでは電源供給はUSB-Cコネクタからのみ行う


$ cd /mnt/c/
$ mkdir git
$ cd git
$ git clone https://github.com/ghidraninja/game-and-watch-backup.git
$ export OPENOCD="/opt/openocd-git/bin/openocd"
$ cd game-and-watch-backup
$ ./1_sanity_check.sh stlink zelda
$ ./2_backup_flash.sh stlink zelda
$ ./3_backup_internal_flash.sh stlink zelda
$ ./4_unlock_device.sh stlink zelda
$ ./5_restore.sh stlink zelda

英語表記にしたがってすすめる、
./3_backup_internal_flash.sh あたりで、
Gnwの電源を落とす(USB-Cを抜く)
再度接続(USB-Cを接続)
電源ボタン押しっぱなし
エンターを押す
あたりが難しいと思いますが、あとは指定どおりに勧めます。
バックアップ中、書き込み中はUSB電源の挿抜はしないように、
エラーでたときは接続しなおすといいでしょう。
バックアップが終われば以下の様になってるはず
電源普通にGnwのゼルダとして動いてるはず

$ ls -la ./backups/
合計 4228
drwxrwxrwx 1 applesorce applesorce    4096  414 21:08 .
drwxrwxrwx 1 applesorce applesorce    4096  414 21:08 ..
-rwxrwxrwx 1 applesorce applesorce 4194304  414 21:01 flash_backup_zelda.bin
-rwxrwxrwx 1 applesorce applesorce  131072  414 21:08 internal_flash_backup_zelda.bin
-rwxrwxrwx 1 applesorce applesorce    1300  414 21:00 itcm_backup_zelda.bin

Gnwのゼルダのflashの張替え

まずGnwを基板だけにして
8pinのフラッシュを外して、買ってきたflashをはりつけるだけです。
8-WSONのパッケージの裏の部分にカプトンテープ等をはって絶縁して実装する。
基板上のマークとWSONのマークをあわせる。ギリギリ幅がたりるので
基板にあらかじめ少量の半田をもっておくこと
新しいflashにフラックスを塗り、細いはんだごて先を使えばギリギリ乗せることができると思います。デジタル顕微鏡等ではんだがついたことを確認したら次に行きます。

Gnwにパッチを当てる

ここの作業は電源のonのタイミングでまごつきましたが以下のようにすすめます。

$ cd /mnt/c/git
$ git clone https://github.com/BrianPugh/game-and-watch-patch.git
$ cd game-and-watch-patch
$ pip3 install -r requirements.txt
$ cp ../game-and-watch-backup/backups/internal_flash_backup_zelda.bin .
$ cp ../game-and-watch-backup/backups/flash_backup_zelda.bin .
$ make clean
$ make PATCH_PARAMS="--device=zelda" LARGE_FLASH=1 flash_patched
//このときGnwの電源ボタンを1回おす、タイミング悪かったら何度か電源抜き差ししつつGnwの電源ボタンを1回おす
すると書き込みが開始される。

これで増設したflahsに書き込みができていると思います。

retro-goにファイルを入れる

windowsのc:\gitは、WSL2のubuntuからは/mnt/c/gitとして見えている。
必要なromなどを準備して以下のようにすすめる
ビルドオプションで日本語等も扱えるようになるが、今回は以下ですすめた。 参考元のj8オプション等をつけているとビルドがコケるので外した
(makeで指定しない場合はいいように処理してくれるそうなので)

$ cd /mnt/c/git
$ git clone https://github.com/sylverb/game-and-watch-retro-go.git
$ cd game-and-watch-retro-go
$ pip install -r requirements.txt
$ export GNW_TARGET=zelda
$ export ADAPTER=stlink
 
//このタイミングでwindows上からc:\git\game-and-watch-retro-go\roms\
にそれぞれromを配置する、日本語は使わないこと

$ make COVERFLOW=1 EXTFLASH_SIZE_MB=60 EXTFLASH_OFFSET=4194304 INTFLASH_BANK=2 flash
$ これでうまく書き込めるはず、電源ボタン1回押したりする必要あるかも
$なんどか書き込みのリトライがあるがその場合は電源をつなぎ直して試すこと

ことあと、電源を入れて起動することを確認したら、
gameを押しながら左を押して、retro-goが起動すること

Gnwを組み上げる

st-linkを外しバッテリーの配線をつけてネジをすべて閉める

以上簡単ですが備忘録とします。

この記事が気に入ったらサポートをしてみませんか?