欢迎光临散文网 会员登陆 & 注册

Game and Watch 改机教程

2023-08-25 14:01 作者:食人魔修补匠  | 我要投稿

最近买了一台塞尔达的Game and Watch,到手之后发现可玩性很高; 可以破解后刷入RetroGo模拟器系统。玩一些FC、GB、MD的游戏,我自己试了试,非常有趣。 在这里记录一下操作的步骤,供大家参考

准备工具:

  • 一台25周年纪念版Game and Watch,马里奥或塞尔达都行(想也知道)(推荐塞尔达,按键多,而且便宜)

  • 多批头螺丝刀(拆机用,必须有小十字和小Y字头)

  • 一台可以联网的Windows10电脑(必需)

  • 良好的网络环境(必需)

  • ST-LINK调试器V2(必需)

  • 电烙铁或者热风枪,焊锡,焊膏,隔热胶布等材料(必需)

  • 一些杜邦线(必需,用于连接调试器)

  • ROM芯片(升级ROM需要)

  • 34AWG漆包线,可以引出D+和D-的TYPE-C转接板(改USB烧录需要)

目录:

  1. 安装WSL2以及相关组件

  2. 拆机连接调试器

  3. 准备环境

  4. 破解和备份

  5. 升级ROM

  6. 安装原生系统

  7. 安装retro-go

  8. 改USB烧录

  9. 转换 Game and Watch 游戏

  10. 芯片选择

  11. 参考资料

1. 安装WSL2以及相关组件

安装WSL2

如果您的系统是原生linux,您可以直接跳过这一步

本步骤基本参考微软官方文档:https://learn.microsoft.com/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 内核更新包:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

如果这一步出现问题,可以重启电脑重试

5. 将 WSL 2 设置为默认版本

WSL 的一些基础指令看这里:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands#set-wsl-version-to-1-or-2

在WSL上安装ubuntu-22.04

以下步骤会花费一些时间,并需要良好的网络环境,请耐心等待安装完成

如果卡在了下面的画面,可以试试敲下回车

接下来,输入用户名和密码,完成安装

安装用于直通USB到WSL的组件

以下步骤来源于微软官方文档:https://learn.microsoft.com/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 运行此命令:

拆机连接调试器

拆机

拧下四颗螺丝,打开Game&Watch后盖
断开电池的连接

断开喇叭的连接(需要拆焊)
断开屏幕的排线
断开背光的排线
拧下8颗螺丝,拆出主板

焊接调试针脚

引出如下针脚,左侧为马里奥机器,右侧为塞尔达机器

针脚定义

请不要连接VTREF针脚!!!!

请不要连接VTREF针脚!!!!

请不要连接VTREF针脚!!!!

只连接SWDIO, SWCLK, GND这三个针脚到调试器即可。焊接好后效果如下图所示:

我是用的排针,也可以选择直接焊线

连接调试器到电脑

上一步骤做完后,将调试器插入电脑,并参考上面 附加 USB 设备 章节,把调试器挂载到WSL下

准备环境

网络环境

整个流程需要良好的网络环境,如果你没有良好的网络环境但是windows上面安装了clash,可以在ubuntu系统下按照以下步骤操作,让WSL连接Clash for Windows,IP地址请按照自己的机器修改

安装patch版的openocd

该工具用于连接调试器,项目地址:https://github.com/kbeckmann/ubuntu-openocd-git-builder

安装依赖:

安装步骤:

现在openocd应该已经安装到了 /opt/openocd-git/bin/openocd,为了方便后续使用,我建议执行以下步骤并重启shell

破解和备份

破解并备份G&W的原生ROM

项目地址:https://github.com/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_stlink.cfg 的文件末尾加上 adapter speed 100

第 1,2 步出问题

在这两步,你的设备没有被修改,重新上电即可

第 3 步出问题

第 3 步会修改内部flash,这一步失败会让设备变砖,执行下面的命令来恢复:

如果上述脚本不能连接设备,试着重新上电,并在执行脚本的时候按住电源按钮。

第 4 步出问题

第 4 步会进行大量擦除,把设备清空。执行步骤5来恢复设备

第 5 步出问题

第 5 步一般不会出问题,如果出现问题,尝试在执行脚本的时候按住电源键。

在每次尝试的时候,都可以试试重新上电。

升级ROM

执行这一步之前请确认你已经解锁了你的Game and Wacth,并且完成了系统备份

强烈建议这一步之前先按照后面的步骤安装原生RetroGo系统,如果焊接有问题的话,RetroGo系统会提示

关于如何选择芯片,可以详见后面的 **芯片选择** 章节

首先,请参考 拆机连接调试器-拆机 章节,拆出主板

主板周围有超小电容,对技术没信心的同学记得用隔热胶带保护一下

塞尔达主板ROM
马里奥主板ROM

(这里没图)拆下原装ROM

(这里没图)升级ROM

(这里没图)大容量ROM

安装原生系统

项目地址:https://github.com/BrianPugh/game-and-watch-patch

这个项目包含一些patch工具,实现在Game and Watch上面同时安装原生系统和Retro-Go系统, 并通过 ← + game 组合按键进入第二系统

准备

克隆本地库和依赖项目:

安装Python依赖:

下载 STM32 的驱动文件

接下来,需要把我们在 破解和备份 这一步dump出来的文件放到当前目录下

马里奥需要这两个文件:flash_backup_mario.bin,internal_flash_backup_mario.bin

塞尔达需要这两个文件:flash_backup_zelda.bin,internal_flash_backup_zelda.bin

烧录

赛尔达示例代码:

马里奥示例代码:

参数简介:

没法放表格,自己 make help 看吧

跨机器烧录

马里奥机器的ROM可以正常刷入塞尔达机器,但是反之应该不行,因为塞尔达机器的按键更多

安装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

如果用的其他平台,下载对应的就行

拷贝该文件到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_roms.py 文件的第354行,ANTIALIAS 需要修改为 LANCZOS

改USB烧录

为了方便后续更换游戏,有能力的玩家可以如下操作:

接线把 SWDIO 和 SWCLK 端口引出,飞线连接到 TYPE-C 连接器的 D+ 和 D- 针脚

这样还有一个好处,能在烧录的时候通过 TYPE-C 线缆进行充电,而且不用拆机,一举两得

TYPE-C 连接器附近有超小电容,记得用隔热胶带保护!!

TYPE-C超小电容
偷的图,无视里面的匹配关系,只要保证各个连线一致就好
塞尔达机器的 SWDIO 和 SWCLK 位置
马力欧机器的 SWDIO 和 SWCLK 位置

外部连接方式

调试器 <--> 手焊连接线 <--> 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进行转换

项目地址:https://github.com/bzhxx/LCD-Game-Shrinker

准备

克隆本地库:

安装Python依赖:

安装inkscape:

官网: https://inkscape.org/

获取ROM

作者推荐使用 MAME artwork 和 ROM SM510 family, 请自行寻找.

最终文件分别放在 input/artwork 和 input/rom 文件夹中, 如下所示:

执行

转换所有:

转换单个:

转换成功后,会有下面三个输出文件夹

output:ROM

preview:预览

title:RetroGo可用的缩略图

芯片选择

本节信息来自 Reddit - GameAndWatchMods:https://www.reddit.com/r/GameAndWatchMods/wiki/flash-upgrade/#wiki_stock_.26amp.3B_custom_firmware_compatible_bga_chips

转接板资料: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/)


Game and Watch 改机教程的评论 (共 条)

分享到微博请遵守国家法律