文章目录
前言
之前用 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 解析,那缺的就只有两件事:
- 一个包含汉字的字体文件
- 渲染时的 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
参考资料
- 上一篇:成本60元,用ESP32-S3做个开源游戏机,能玩FC/NES、GameBoy,还有专属彩色PCB
- retro-go 官方仓库:https://github.com/ducalex/retro-go
- 本文固件:https://github.com/ohdarling/retro-go/releases/tag/esp32s3-st7789v-chn-1.4x
- 文泉驿正黑: http://wenq.org/wqy2/index.cgi?ZenHei
- 立创开源项目: https://oshwhub.com/wandaeda/ji-yu-esp32-s3-de-retrogo-you-xi-ji

0 条评论。