朔雪X忆 发表于 2026-7-7 15:34:10

GBA 模拟器 gpsp 移植 fx-CG100,带 JIT 加速



又是 Codex + Claude Code 一起 Vibe Code 的结果~


gpsp 原生的解释器版本性能不够,在羸弱的 SH-4 上基本跑不动。所以直接大力出奇迹,烧了 100M Claude token(顺便烧光了 Fable 5 的周额度) + 1 Billion GPT 5.5 token 搞了一个 targetting SuperH SH-4 架构的 ARM7TDMI JIT(如此复杂的项目,真的难以想象用 AI 只要一两周就做完了……)

Claude Fable 5 确实在修复各种 JIT 导致的 bug 以及优化 JIT 性能上要更强。看上去主要是因为 Fable 5 懂得更好地利用 emulator,harness 做得更好。

能实现以 30 ~ 60 fps 运行各类 GBA 游戏,如高级战争、塞尔达四人之剑、逆转裁判、密特罗德等。跳帧后部分游戏甚至能原速运行。当然如果 ROM 是 16 MiB 的那就完全塞不下了( <del> 比如宝可梦红蓝绿宝石、火红叶绿 </del> 实际上只要把 ROM 的 padding 去掉就可以塞得下了!当然需要扩容到 16 MiB

基本信息:
- 按 ON 键呼出菜单。菜单基本照抄 gpsp for NSpire。
- 默认键位为 OK 键对应 A,CATALOG 键对应 B,PrevTab 对应 L,NextTab 对应 R,PageUp 对应 Select,PageDown 对应 Start。
- 支持键位重映射。
- 不支持声音输出。
- 支持快速保存(注意首次创建存档比较慢)。
- 支持原生 1:1(240×160)、4:3(320×212,保留原始比例)、全屏(384×216,横向有 1.2 倍拉伸)三种分辨率。支持 CRISP / SHARP / SMOOTH 三种插补方式。
- 支持自制 ROM(非对齐页表)。


Ptune4 能有效提升游戏体验,不过用用默认 Preset 就好,不然还挺容易出现 bit flip 之类的问题。

新增 fx-CG50 支持。

下载:
https://github.com/KaraRyougi/gpsp-sh4-jit/releases

BCX74687 发表于 2026-7-7 20:07:49

话说怎么调AI的

嘿嘿 发表于 2026-7-8 10:21:24

五体投地

嘿嘿 发表于 2026-7-8 10:36:01

能否像gbc模拟器一样,压缩游戏rom体积

嘿嘿 发表于 2026-7-8 10:39:51

国外这么多年都没有出gba模拟器,大佬全球首发

CalcLoverHK 发表于 2026-7-8 14:19:32

嘿嘿 发表于 2026-7-8 10:39
国外这么多年都没有出gba模拟器,大佬全球首发

几个月前就有了:https://www.planet-casio.com/Fr/programmes/programme4632-1-fxgba-lightmare-jeux-add-ins.html

嘿嘿 发表于 2026-7-8 14:42:46

CalcLoverHK 发表于 2026-7-8 14:19
几个月前就有了:https://www.planet-casio.com/Fr/programmes/programme4632-1-fxgba-lightmare-jeux-ad ...

区别大不大呀,哪个性能好?

朔雪X忆 发表于 2026-7-9 13:53:08

BCX74687 发表于 2026-7-7 20:07
话说怎么调AI的

- 用的是 Max Plan,Opus 4.8 开 Ultracode。
- 多用 /goal /loop。
- 先基于 https://github.com/Heath123/casio-emu 造了一个足够逼真的模拟器,让 AI 可以用模拟器来验证正确性。当然写 JIT 的时候也会改一些模拟器的 API 之类的来方便 harness。

CalcLoverHK 发表于 2026-7-9 14:07:02

我看了一眼代码,发现你只给CG50开了Bfile_GetBlockAddress。这个syscall在OS 2.00.X202版本的等效地址是0x80333cf2。

朔雪X忆 发表于 2026-7-9 14:13:40

CalcLoverHK 发表于 2026-7-9 14:07
我看了一眼代码,发现你只给CG50开了Bfile_GetBlockAddress。这个syscall在OS 2.00.X202版本的等效地址是0x ...

嗯嗯,CG100 其实也用了 NOR Flash Mapping / GetBlockAddress,确实就是 direct call to ROM address 0x80333cf2。是参考了您的 Prizoop fx-CG100 移植。

朔雪X忆 发表于 2026-7-9 14:29:50

嘿嘿 发表于 2026-7-8 14:42
区别大不大呀,哪个性能好?

那肯定是我这个性能好……上面那个能不能运行某些 ROM 都是个问题……

BCX74687 发表于 2026-7-9 15:43:02

朔雪X忆 发表于 2026-7-9 13:53
- 用的是 Max Plan,Opus 4.8 开 Ultracode。
- 多用 /goal /loop。
- 先基于 https://github.com/Heath1 ...

豪啊,没钱只能用free plan{:13_322:}

朔雪X忆 发表于 2026-7-10 07:57:11

嘿嘿 发表于 2026-7-8 10:36
能否像gbc模拟器一样,压缩游戏rom体积

现在性能依然是瓶颈,再解压缩就更慢了。

但是 GBA ROM 可能有 padding,做了一个把 padding 去掉的网页:
https://kararyougi.github.io/gpsp-sh4-jit/、

这样就能把宝可梦绿宝石从 16.00 MiB 变成 14.24 MiB,然后就能塞进机器了。
页: [1]
查看完整版本: GBA 模拟器 gpsp 移植 fx-CG100,带 JIT 加速