手里有一台 Nintendo DS LL,11 月 2 日想在上面跑 NeoGeo 模拟器 NeoDS。它的源码是 2008 年的 v0.2.0,十八年前的老代码,要用现代的 devkitARM 和 libnds 编通。

老源码和新工具链之间有不少不兼容的地方。做法是加了一个兼容补丁头文件,在编译时注入,修掉新旧接口对不上的地方,再配上合适的链接参数。内存是真正的硬约束:DS 模式下的可用内存有上限,ARM9 的堆必须缩小才能塞进去。最后把堆从原来的一兆多缩小到一兆出头,只影响大游戏的精灵缓存,不影响兼容性。

成品编出来了,一个不到 400KB 的文件,拷到烧录卡的存储卡根目录就能跑。游戏 ROM 得自己准备:用仓库自带的转换工具把 MAME 格式的 NeoGeo ROM 和 BIOS 转成专用格式,BIOS 和游戏 ROM 都得自己提供。

有一点必须说清楚:这份成品我这边没有真机验证过。编译通过不等于能跑,能进菜单、能列出游戏才算成。等我在 DS LL 上实测了再补结果。