Game and Watch 改機教程

最近買了一臺塞爾達的Game and Watch,到手之后發(fā)現(xiàn)可玩性很高; 可以破解后刷入RetroGo模擬器系統(tǒng)。玩一些FC、GB、MD的游戲,我自己試了試,非常有趣。 在這里記錄一下操作的步驟,供大家參考

準(zhǔn)備工具:
一臺25周年紀(jì)念版Game and Watch,馬里奧或塞爾達都行(想也知道)(推薦塞爾達,按鍵多,而且便宜)
多批頭螺絲刀(拆機用,必須有小十字和小Y字頭)
一臺可以聯(lián)網(wǎng)的Windows10電腦(必需)
良好的網(wǎng)絡(luò)環(huán)境(必需)
ST-LINK調(diào)試器V2(必需)
電烙鐵或者熱風(fēng)槍,焊錫,焊膏,隔熱膠布等材料(必需)
一些杜邦線(必需,用于連接調(diào)試器)
ROM芯片(升級ROM需要)
34AWG漆包線,可以引出D+和D-的TYPE-C轉(zhuǎn)接板(改USB燒錄需要)

目錄:
安裝WSL2以及相關(guān)組件
拆機連接調(diào)試器
準(zhǔn)備環(huán)境
破解和備份
升級ROM
安裝原生系統(tǒng)
安裝retro-go
改USB燒錄
轉(zhuǎn)換 Game and Watch 游戲
芯片選擇
參考資料

1. 安裝WSL2以及相關(guān)組件
安裝WSL2
如果您的系統(tǒng)是原生linux,您可以直接跳過這一步
本步驟基本參考微軟官方文檔:https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-1---enable-the-windows-subsystem-for-linux
備注:以下指令請在管理員權(quán)限的PowerShell中執(zhí)行
1. 啟用適用于 Linux 的 Windows 子系統(tǒng)
2. 檢查運行 WSL 2 的要求
請參考上文說的文檔,這里就不粘貼了
3. 啟用虛擬機功能
備注:WSL2需要BIOS中啟用虛擬化,請進入BIOS并啟動虛擬化相關(guān)功能,如果不會,請百度 BIOS 虛擬化
4. 下載并安裝 Linux 內(nèi)核更新包
該步驟之前可能需要重啟
下載適用于 x64 計算機的 WSL2 Linux 內(nèi)核更新包:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
如果這一步出現(xiàn)問題,可以重啟電腦重試
5. 將 WSL 2 設(shè)置為默認(rèn)版本
WSL 的一些基礎(chǔ)指令看這里:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands#set-wsl-version-to-1-or-2
在WSL上安裝ubuntu-22.04
以下步驟會花費一些時間,并需要良好的網(wǎng)絡(luò)環(huán)境,請耐心等待安裝完成
如果卡在了下面的畫面,可以試試敲下回車
接下來,輸入用戶名和密碼,完成安裝
安裝用于直通USB到WSL的組件
以下步驟來源于微軟官方文檔:https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb
Windows端
該步驟需要手動同意條款,請注意檢查進度
完成后,請順便更新內(nèi)核
Ubuntu端
附加 USB 設(shè)備
本步驟需要在插入調(diào)試器之后執(zhí)行,不過你也可以先測試一下安裝是否成功
現(xiàn)在請先打開Ubuntu的終端窗口,確保WSL處于活動狀態(tài)
重新以管理員模式打開 PowerShell 并輸入以下命令,列出所有連接到 Windows 的 USB 設(shè)備
您應(yīng)該會看到如下輸出
選擇要附加到 WSL 的設(shè)備 BUSID,然后運行此命令。該步驟會斷開USB設(shè)備和Windows的連接,并連接到WSL上
對于我們來說,就是找到調(diào)試器的總線ID并連接,如果遇到以下報錯,請按照提示升級內(nèi)核,并重啟WSL
打開 Ubuntu(或首選的 WSL 命令行),使用以下命令列出附加的 USB 設(shè)備:
在 WSL 中完成設(shè)備使用后,可物理斷開 USB 設(shè)備,或者在管理員模式下從 PowerShell 運行此命令:
拆機連接調(diào)試器
拆機






焊接調(diào)試針腳
引出如下針腳,左側(cè)為馬里奧機器,右側(cè)為塞爾達機器

請不要連接VTREF針腳!?。?!
請不要連接VTREF針腳!?。?!
請不要連接VTREF針腳?。。?!
只連接SWDIO, SWCLK, GND這三個針腳到調(diào)試器即可。焊接好后效果如下圖所示:

連接調(diào)試器到電腦
上一步驟做完后,將調(diào)試器插入電腦,并參考上面 附加 USB 設(shè)備?章節(jié),把調(diào)試器掛載到WSL下
準(zhǔn)備環(huán)境
網(wǎng)絡(luò)環(huán)境
整個流程需要良好的網(wǎng)絡(luò)環(huán)境,如果你沒有良好的網(wǎng)絡(luò)環(huán)境但是windows上面安裝了clash,可以在ubuntu系統(tǒng)下按照以下步驟操作,讓W(xué)SL連接Clash for Windows,IP地址請按照自己的機器修改
安裝patch版的openocd
該工具用于連接調(diào)試器,項目地址:https://github.com/kbeckmann/ubuntu-openocd-git-builder
安裝依賴:
安裝步驟:
現(xiàn)在openocd應(yīng)該已經(jīng)安裝到了 /opt/openocd-git/bin/openocd,為了方便后續(xù)使用,我建議執(zhí)行以下步驟并重啟shell
破解和備份
破解并備份G&W的原生ROM
項目地址:https://github.com/ghidraninja/game-and-watch-backup
安裝依賴:
克隆本地庫:
操作
該步驟默認(rèn)已經(jīng)完成 G&W->調(diào)試器->PC->WSL 的連接,如果沒有,請參考上文
接下來,你需要斷開G&W的電池連接,并使用TYPE-C進行供電(因為電池會干擾備份破解步驟)
其實下面步驟在項目的GitHub頁面有詳細(xì)的描述,我這邊只是撿重點翻譯一下
斷開電池的連接,使用type-c供電
基礎(chǔ)檢查,確認(rèn)環(huán)境和機器可用:
備份 SPI flash 的內(nèi)容,不會修改設(shè)備
備份內(nèi)部 flash,這一步會修改 SPI flash 的內(nèi)容,在步驟 5 之前,設(shè)備不可用
解除設(shè)備保護,會擦寫內(nèi)部 flash
還原系統(tǒng)
完成后,dump出來的文件會保存在 backups?目錄下,請妥善保管
排障
只要電路連接正確+沒有短接或者超壓,大概率設(shè)備可恢復(fù)
如果腳本失敗,設(shè)備重新上電也沒反應(yīng),嘗試重新執(zhí)行腳本。如果還是失敗,試著在執(zhí)行腳本的時候按住電源鍵。
另外,在執(zhí)行第一步的時候,最好降低適配器的速度。以STLink為例,你可以在openocd/interface_stlink.cfg 的文件末尾加上?adapter speed 100
第 1,2 步出問題
在這兩步,你的設(shè)備沒有被修改,重新上電即可
第 3 步出問題
第?3?步會修改內(nèi)部flash,這一步失敗會讓設(shè)備變磚,執(zhí)行下面的命令來恢復(fù):
如果上述腳本不能連接設(shè)備,試著重新上電,并在執(zhí)行腳本的時候按住電源按鈕。
第 4 步出問題
第 4?步會進行大量擦除,把設(shè)備清空。執(zhí)行步驟5來恢復(fù)設(shè)備
第 5 步出問題
第 5 步一般不會出問題,如果出現(xiàn)問題,嘗試在執(zhí)行腳本的時候按住電源鍵。
在每次嘗試的時候,都可以試試重新上電。
升級ROM
執(zhí)行這一步之前請確認(rèn)你已經(jīng)解鎖了你的Game and Wacth,并且完成了系統(tǒng)備份
強烈建議這一步之前先按照后面的步驟安裝原生RetroGo系統(tǒng),如果焊接有問題的話,RetroGo系統(tǒng)會提示
關(guān)于如何選擇芯片,可以詳見后面的 **芯片選擇** 章節(jié)
首先,請參考 拆機連接調(diào)試器-拆機 章節(jié),拆出主板
主板周圍有超小電容,對技術(shù)沒信心的同學(xué)記得用隔熱膠帶保護一下


(這里沒圖)拆下原裝ROM
(這里沒圖)升級ROM
(這里沒圖)大容量ROM
安裝原生系統(tǒng)
項目地址:https://github.com/BrianPugh/game-and-watch-patch
這個項目包含一些patch工具,實現(xiàn)在Game and Watch上面同時安裝原生系統(tǒng)和Retro-Go系統(tǒng), 并通過 ← + game?組合按鍵進入第二系統(tǒng)
準(zhǔn)備
克隆本地庫和依賴項目:
安裝Python依賴:
下載 STM32 的驅(qū)動文件
接下來,需要把我們在 破解和備份?這一步dump出來的文件放到當(dāng)前目錄下
馬里奧需要這兩個文件:flash_backup_mario.bin,internal_flash_backup_mario.bin
塞爾達需要這兩個文件:flash_backup_zelda.bin,internal_flash_backup_zelda.bin
燒錄
賽爾達示例代碼:
馬里奧示例代碼:
參數(shù)簡介:
沒法放表格,自己 make help?看吧
跨機器燒錄
馬里奧機器的ROM可以正常刷入塞爾達機器,但是反之應(yīng)該不行,因為塞爾達機器的按鍵更多
安裝Retro-Go
目前支持的模擬器類型如下

多語言版本的retro-go(clone自kbeckmann的項目)
項目地址:https://github.com/olderzeus/game-and-watch-retro-go
安裝嵌入式工具鏈
在該頁面下載依賴庫:https://developer.arm.com/downloads/-/gnu-rm
下載這個文件:gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
如果用的其他平臺,下載對應(yīng)的就行
拷貝該文件到WSL中,執(zhí)行如下命令:
文件/文件夾名請自行替換?。?!
文件/文件夾名請自行替換?。?!
文件/文件夾名請自行替換?。?!
執(zhí)行完上述步驟后,重新打開終端,如果如下命令能正常完成,說明安裝成功
安裝retro-go
準(zhǔn)備
克隆本地庫和依賴項目:
安裝Python依賴:
燒錄
示例代碼:
參數(shù)簡介:
放不了表格,自己 make help 看吧
順便,請仔細(xì)看GitHub頁面關(guān)于項目介紹的部分,說的很詳細(xì)
關(guān)于EXTFLASH_SIZE_MB和EXTFLASH_OFFSET
這兩個值取決于你的ROM大小 `N` 和原生系統(tǒng)大小 `M`
馬里奧的原生系統(tǒng)為 1MB, 塞爾達的原生系統(tǒng)為 4MB
假設(shè)你的ROM大小為 64MB, 使用馬里奧原生系統(tǒng),那么:
EXTFLASH_SIZE_MB = N-M = 64 - 1 = 63
EXTFLASH_OFFSET = EXTFLASH_SIZE_MB × 1024 × 1024 = 1048576
報錯應(yīng)對
如果相關(guān)文件報錯:parse_roms.py 文件的第354行,ANTIALIAS 需要修改為 LANCZOS
改USB燒錄
為了方便后續(xù)更換游戲,有能力的玩家可以如下操作:
接線把 SWDIO 和 SWCLK 端口引出,飛線連接到 TYPE-C 連接器的 D+ 和 D- 針腳
這樣還有一個好處,能在燒錄的時候通過 TYPE-C 線纜進行充電,而且不用拆機,一舉兩得
TYPE-C 連接器附近有超小電容,記得用隔熱膠帶保護??!




外部連接方式
調(diào)試器 <--> 手焊連接線 <--> TYPE-C線纜 <--> Game and Watch
內(nèi)部連線
?USB D+ <--> Game&Watch SWDIO
?USB D-?<--> Game&Watch SWCLK
調(diào)試器到USB母座 連線
調(diào)試器-5V <--> USB-VCC
調(diào)試器-SWDIO <--> USB D+
調(diào)試器-SWCLK <--> USB D-
調(diào)試器-GND <--> USB-GND
完成圖:


轉(zhuǎn)換 Game and Watch 游戲
RetroGo使用LCD-Game-Emulator來進行模擬,需要LCD-Game-Shrinker先對ROM和Artwork進行轉(zhuǎn)換
項目地址:https://github.com/bzhxx/LCD-Game-Shrinker
準(zhǔn)備
克隆本地庫:
安裝Python依賴:
安裝inkscape:
官網(wǎng): https://inkscape.org/
獲取ROM
作者推薦使用 MAME artwork 和 ROM SM510 family, 請自行尋找.
最終文件分別放在 input/artwork 和 input/rom 文件夾中, 如下所示:
執(zhí)行
轉(zhuǎn)換所有:
轉(zhuǎn)換單個:
轉(zhuǎn)換成功后,會有下面三個輸出文件夾
output:ROM
preview:預(yù)覽
title:RetroGo可用的縮略圖
芯片選擇
本節(jié)信息來自 Reddit - GameAndWatchMods:https://www.reddit.com/r/GameAndWatchMods/wiki/flash-upgrade/#wiki_stock_.26amp.3B_custom_firmware_compatible_bga_chips

轉(zhuǎn)接板資料:https://github.com/DNA64/bga24-to-sop8-adapter
參考資料
GitHub項目:
[BrianPugh/game-and-watch-patch](https://github.com/BrianPugh/game-and-watch-patch)
[ghidraninja/game-and-watch-backup](https://github.com/ghidraninja/game-and-watch-backup)
[kbeckmann/game-and-watch-retro-go](https://github.com/kbeckmann/game-and-watch-retro-go)
[olderzeus/game-and-watch-retro-go](https://github.com/olderzeus/game-and-watch-retro-go)
[bzhxx/LCD-Game-Shrinker](https://github.com/bzhxx/LCD-Game-Shrinker)
[DNA64/bga24-to-sop8-adapter](https://github.com/DNA64/bga24-to-sop8-adapter)
[Upcycle-Electronics/game-and-watch-hardware](https://github.com/Upcycle-Electronics/game-and-watch-hardware)
教程:
[Reddit - GameAndWatchMods](https://www.reddit.com/r/GameAndWatchMods/)
[簡中教程 - mwifi](https://blog.mwifi.top/2022/04/03/g-w-hack)
[繁中教程 - blogspot](https://maxxkao.blogspot.com/2022/02/zelda-game-watch-dual-boot-wip.html)
[英文教程 - linustechtips](https://linustechtips.com/topic/1419163-game-and-watch-mod-flash-with-stlink-and-retrogo-homebrew-install/)
[element14 - Hack the Holidays](https://community.element14.com/challenges-projects/project14/hacktheholidays/b/blog/posts/the-n-o-before-christmas-upgrade-time)
[wordpress - facelesstech (他自己說不推薦,但是我覺得有用)](https://facelesstech.wordpress.com/2022/01/08/game-and-watch-hacking-with-rpi/)