最近买了一台塞尔达的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/)

推荐内容