ESP32-S3 自制游戏机固件升级记:更新官方最新版 + 中文显示支持

前言

之前用 ESP32-S3 搞了个游戏机(见 成本60元,用ESP32-S3做个开源游戏机,能玩FC/NES、GameBoy,还有专属彩色PCB,啊好久远,已经是前年了 🙈),最近又拿出来把玩了一下。

然后想起来之前有人说能不能加中文支持,这样游戏 ROM 可以直接用中文名存在 TF 卡里,刚好现在 AI 这么厉害,完全就可以让 AI 来完成这个开发嘛 😃,顺便把固件版本更新到 retro-go 的最新版本。


一、升级固件:rebase 到官方最新 dev 分支

原来的分支是从官方某个较早版本 fork 出来的,本身也修改不多,直接 rebase 来应用到最新的分支上。

git remote add github https://github.com/ducalex/retro-go.git
git fetch github
git checkout esp32s3-st7789v
git rebase github/dev # 当时执行的是 git rebase origin/dev

我在 rebase 的时候还感觉异常顺利,没有碰到冲突,没想到为后面埋下了坑。


二、中文支持:先走了一段弯路

这里的中文需求是指在 launcher 显示 TF 卡中游戏列表时,能正确渲染中文游戏名。

刚好现在 AI 已经足够强大了,直接让用 AI 自己完成了一套 UTF-8 解析逻辑,再加一个简单的汉字点阵渲染,塞进去跑了一下,调整了几次,最终效果还不错。

打了几次包之后才发现,打出来的镜像文件咋还是 1.1 版本,这才发现,rebase 是基于了自己仓库的 origin/dev,不是官方仓库的 dev 分支 😂。

重新做了 rebase 之后,发现了一件事:官方 dev 分支其实早就加了 UTF-8 支持。


三、中文支持:正路其实很短

既然官方已经处理好了 UTF-8 解析,那缺的就只有两件事:

  1. 一个包含汉字的字体文件
  2. 渲染时的 fallback 逻辑:如果当前字体里找不到某个字符的 glyph,就去中文字体里找

3.1 准备中文字体

字体使用了文泉驿正黑,让 AI 生成脚本,转成 retro-go 的字体格式,只保留常用汉字范围(约 6700 个),控制一下 Flash 占用。

3.2 添加 fallback 渲染

在 launcher 的字体渲染路径里加了一段逻辑:

做完这些之后,重新编译、烧录,launcher 就可以显示中文了。


四、最终效果 + 固件下载

升级完成后,launcher 里的中文游戏名显示正常,在 TF 卡里所有 ROM 使用中文命名都可以正常显示,再也不用每次手动换成拼音了 🥳。

编译好的固件已经放在 GitHub Release,直接下载烧录即可:

👉 https://github.com/ohdarling/retro-go/releases/tag/esp32s3-st7789v-chn-1.4x

立创开源平台也同步更新了: https://oshwhub.com/wandaeda/ji-yu-esp32-s3-de-retrogo-you-xi-ji

烧录方式和之前一样,用 esptool.py 写入 IMG 文件:

esptool.py -b 460800 write_flash --flash_size detect 0x0 retro-go_1.4x-gba-102-gd6262_esp32s3-ohda

如果想自己编译,分支在 esp32s3-ohda,使用以下命令编译即可:

./rg_tool.py build-img --target=esp32s3-ohda

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>