最近买了一台塞尔达的Game and Watch,到手之后发现可玩性很高; 可以破解后刷入RetroGo模拟器系统。玩一些FC、GB、MD的游戏,我自己试了试,非常有趣。 在这里记录一下操作的步骤,供大家参考
准备工具:
一台25周年纪念版Game and Watch,马里奥或塞尔达都行(想也知道)(推荐塞尔达,按键多,而且便宜)
(相关资料图)
多批头螺丝刀(拆机用,必须有小十字和小Y字头)
一台可以联网的Windows10电脑(必需)
良好的网络环境(必需)
ST-LINK调试器V2(必需)
电烙铁或者热风枪,焊锡,焊膏,隔热胶布等材料(必需)
一些杜邦线(必需,用于连接调试器)
ROM芯片(升级ROM需要)
34AWG漆包线,可以引出D+和D-的TYPE-C转接板(改USB烧录需要)
目录:
安装WSL2以及相关组件
拆机连接调试器
准备环境
破解和备份
升级ROM
安装原生系统
安装retro-go
改USB烧录
转换 Game and Watch 游戏
芯片选择
参考资料
1. 安装WSL2以及相关组件
安装WSL2
如果您的系统是原生linux,您可以直接跳过这一步
本步骤基本参考微软官方文档:/zh-cn/windows/wsl/install-manual#step-1---enable-the-windows-subsystem-for-linux
备注:以下指令请在管理员权限的PowerShell中执行
1. 启用适用于 Linux 的 Windows 子系统
2. 检查运行 WSL 2 的要求
请参考上文说的文档,这里就不粘贴了
3. 启用虚拟机功能
备注:WSL2需要BIOS中启用虚拟化,请进入BIOS并启动虚拟化相关功能,如果不会,请百度 BIOS 虚拟化
4. 下载并安装 Linux 内核更新包
该步骤之前可能需要重启
下载适用于 x64 计算机的 WSL2 Linux 内核更新包:/wslblob/wsl_update_
如果这一步出现问题,可以重启电脑重试
5. 将 WSL 2 设置为默认版本
WSL 的一些基础指令看这里:/zh-cn/windows/wsl/basic-commands#set-wsl-version-to-1-or-2
在WSL上安装
以下步骤会花费一些时间,并需要良好的网络环境,请耐心等待安装完成
如果卡在了下面的画面,可以试试敲下回车
接下来,输入用户名和密码,完成安装
安装用于直通USB到WSL的组件
以下步骤来源于微软官方文档:/zh-cn/windows/wsl/connect-usb
Windows端
该步骤需要手动同意条款,请注意检查进度
完成后,请顺便更新内核
Ubuntu端
附加 USB 设备
本步骤需要在插入调试器之后执行,不过你也可以先测试一下安装是否成功
现在请先打开Ubuntu的终端窗口,确保WSL处于活动状态
重新以管理员模式打开 PowerShell 并输入以下命令,列出所有连接到 Windows 的 USB 设备
您应该会看到如下输出
选择要附加到 WSL 的设备 BUSID,然后运行此命令。该步骤会断开USB设备和Windows的连接,并连接到WSL上
对于我们来说,就是找到调试器的总线ID并连接,如果遇到以下报错,请按照提示升级内核,并重启WSL
打开 Ubuntu(或首选的 WSL 命令行),使用以下命令列出附加的 USB 设备:
在 WSL 中完成设备使用后,可物理断开 USB 设备,或者在管理员模式下从 PowerShell 运行此命令:
拆机连接调试器
拆机
焊接调试针脚
引出如下针脚,左侧为马里奥机器,右侧为塞尔达机器
请不要连接VTREF针脚!!!!
请不要连接VTREF针脚!!!!
请不要连接VTREF针脚!!!!
只连接SWDIO, SWCLK, GND这三个针脚到调试器即可。焊接好后效果如下图所示:
连接调试器到电脑
上一步骤做完后,将调试器插入电脑,并参考上面 附加 USB 设备章节,把调试器挂载到WSL下
准备环境
网络环境
整个流程需要良好的网络环境,如果你没有良好的网络环境但是windows上面安装了clash,可以在ubuntu系统下按照以下步骤操作,让WSL连接Clash for Windows,IP地址请按照自己的机器修改
安装patch版的openocd
该工具用于连接调试器,项目地址:/kbeckmann/ubuntu-openocd-git-builder
安装依赖:
安装步骤:
现在openocd应该已经安装到了 /opt/openocd-git/bin/openocd,为了方便后续使用,我建议执行以下步骤并重启shell
破解和备份
破解并备份G&W的原生ROM
项目地址:/ghidraninja/game-and-watch-backup
安装依赖:
克隆本地库:
操作
该步骤默认已经完成 G&W->调试器->PC->WSL 的连接,如果没有,请参考上文
接下来,你需要断开G&W的电池连接,并使用TYPE-C进行供电(因为电池会干扰备份破解步骤)
其实下面步骤在项目的GitHub页面有详细的描述,我这边只是捡重点翻译一下
断开电池的连接,使用type-c供电
基础检查,确认环境和机器可用:
备份 SPI flash 的内容,不会修改设备
备份内部 flash,这一步会修改 SPI flash 的内容,在步骤 5 之前,设备不可用
解除设备保护,会擦写内部 flash
还原系统
完成后,dump出来的文件会保存在 backups 目录下,请妥善保管
排障
只要电路连接正确+没有短接或者超压,大概率设备可恢复
如果脚本失败,设备重新上电也没反应,尝试重新执行脚本。如果还是失败,试着在执行脚本的时候按住电源键。
另外,在执行第一步的时候,最好降低适配器的速度。以STLink为例,你可以在openocd/interface_ 的文件末尾加上 adapter speed 100
第 1,2 步出问题
在这两步,你的设备没有被修改,重新上电即可
第 3 步出问题
第 3 步会修改内部flash,这一步失败会让设备变砖,执行下面的命令来恢复:
如果上述脚本不能连接设备,试着重新上电,并在执行脚本的时候按住电源按钮。
第 4 步出问题
第 4 步会进行大量擦除,把设备清空。执行步骤5来恢复设备
第 5 步出问题
第 5 步一般不会出问题,如果出现问题,尝试在执行脚本的时候按住电源键。
在每次尝试的时候,都可以试试重新上电。
升级ROM
执行这一步之前请确认你已经解锁了你的Game and Wacth,并且完成了系统备份
强烈建议这一步之前先按照后面的步骤安装原生RetroGo系统,如果焊接有问题的话,RetroGo系统会提示
关于如何选择芯片,可以详见后面的 **芯片选择** 章节
首先,请参考 拆机连接调试器-拆机章节,拆出主板
主板周围有超小电容,对技术没信心的同学记得用隔热胶带保护一下
(这里没图)拆下原装ROM
(这里没图)升级ROM
(这里没图)大容量ROM
安装原生系统
项目地址:/BrianPugh/game-and-watch-patch
这个项目包含一些patch工具,实现在Game and Watch上面同时安装原生系统和Retro-Go系统, 并通过 ← + game组合按键进入第二系统
准备
克隆本地库和依赖项目:
安装Python依赖:
下载 STM32 的驱动文件
接下来,需要把我们在 破解和备份 这一步dump出来的文件放到当前目录下
马里奥需要这两个文件:flash_backup_,internal_flash_backup_
塞尔达需要这两个文件:flash_backup_,internal_flash_backup_
烧录
赛尔达示例代码:
马里奥示例代码:
参数简介:
没法放表格,自己 make help看吧
跨机器烧录
马里奥机器的ROM可以正常刷入塞尔达机器,但是反之应该不行,因为塞尔达机器的按键更多
安装Retro-Go
目前支持的模拟器类型如下
多语言版本的retro-go(clone自kbeckmann的项目)
项目地址:/olderzeus/game-and-watch-retro-go
安装嵌入式工具链
在该页面下载依赖库:/downloads/-/gnu-rm
下载这个文件:_
如果用的其他平台,下载对应的就行
拷贝该文件到WSL中,执行如下命令:
文件/文件夹名请自行替换!!!
文件/文件夹名请自行替换!!!
文件/文件夹名请自行替换!!!
执行完上述步骤后,重新打开终端,如果如下命令能正常完成,说明安装成功
安装retro-go
准备
克隆本地库和依赖项目:
安装Python依赖:
烧录
示例代码:
参数简介:
放不了表格,自己 make help 看吧
顺便,请仔细看GitHub页面关于项目介绍的部分,说的很详细
关于EXTFLASH_SIZE_MB和EXTFLASH_OFFSET
这两个值取决于你的ROM大小 `N` 和原生系统大小 `M`
马里奥的原生系统为 1MB, 塞尔达的原生系统为 4MB
假设你的ROM大小为 64MB, 使用马里奥原生系统,那么:
EXTFLASH_SIZE_MB = N-M = 64 - 1 = 63
EXTFLASH_OFFSET = EXTFLASH_SIZE_MB × 1024 × 1024 = 1048576
报错应对
如果相关文件报错:parse_文件的第354行,ANTIALIAS 需要修改为 LANCZOS
改USB烧录
为了方便后续更换游戏,有能力的玩家可以如下操作:
接线把 SWDIO 和 SWCLK 端口引出,飞线连接到 TYPE-C 连接器的 D+ 和 D- 针脚
这样还有一个好处,能在烧录的时候通过 TYPE-C 线缆进行充电,而且不用拆机,一举两得
TYPE-C 连接器附近有超小电容,记得用隔热胶带保护!!
外部连接方式
调试器 <--> 手焊连接线 <--> TYPE-C线缆 <--> Game and Watch
内部连线
USB D+ <--> Game&Watch SWDIO
USB D- <--> Game&Watch SWCLK
调试器到USB母座 连线
调试器-5V <--> USB-VCC
调试器-SWDIO <--> USB D+
调试器-SWCLK <--> USB D-
调试器-GND <--> USB-GND
完成图:
转换 Game and Watch 游戏
RetroGo使用LCD-Game-Emulator来进行模拟,需要LCD-Game-Shrinker先对ROM和Artwork进行转换
项目地址:/bzhxx/LCD-Game-Shrinker
准备
克隆本地库:
安装Python依赖:
安装inkscape:
官网: /
获取ROM
作者推荐使用 MAME artwork 和 ROM SM510 family, 请自行寻找.
最终文件分别放在 input/artwork 和 input/rom 文件夹中, 如下所示:
执行
转换所有:
转换单个:
转换成功后,会有下面三个输出文件夹
output:ROM
preview:预览
title:RetroGo可用的缩略图
芯片选择
本节信息来自 Reddit - GameAndWatchMods:/r/GameAndWatchMods/wiki/flash-upgrade/#wiki_stock_._custom_firmware_compatible_bga_chips
转接板资料:/DNA64/bga24-to-sop8-adapter
参考资料
GitHub项目:
[BrianPugh/game-and-watch-patch](/BrianPugh/game-and-watch-patch)
[ghidraninja/game-and-watch-backup](/ghidraninja/game-and-watch-backup)
[kbeckmann/game-and-watch-retro-go](/kbeckmann/game-and-watch-retro-go)
[olderzeus/game-and-watch-retro-go](/olderzeus/game-and-watch-retro-go)
[bzhxx/LCD-Game-Shrinker](/bzhxx/LCD-Game-Shrinker)
[DNA64/bga24-to-sop8-adapter](/DNA64/bga24-to-sop8-adapter)
[Upcycle-Electronics/game-and-watch-hardware](/Upcycle-Electronics/game-and-watch-hardware)
教程:
[Reddit - GameAndWatchMods](/r/GameAndWatchMods/)
[简中教程 - mwifi](/2022/04/03/g-w-hack)
[繁中教程 - blogspot](/2022/02/)
[英文教程 - linustechtips](/topic/1419163-game-and-watch-mod-flash-with-stlink-and-retrogo-homebrew-install/)
[element14 - Hack the Holidays](/challenges-projects/project14/hacktheholidays/b/blog/posts/the-n-o-before-christmas-upgrade-time)
[wordpress - facelesstech (他自己说不推荐,但是我觉得有用)](/2022/01/08/game-and-watch-hacking-with-rpi/)