用JavaScript实现ARM v4a模拟器 + RTOS(BEEP-8项目)
大家好,
我一直在开发一个名为BEEP-8的副项目,本质上是一个幻想游戏机,但我觉得对这个社区来说最有趣的部分是低级别模拟方法。
我没有使用自定义虚拟机,而是用JavaScript/TypeScript编写了一个周期精确的ARM v4a模拟器(1995年代的架构)。在此基础上,我构建了:
- ARM v4a的分组寄存器 + 两级流水线
- 基本异常处理(IRQ、FIQ、SVC)
- 提供线程、信号量、定时器和IRQ管理的小型自定义RTOS内核
- 用JS模拟的外设:
- Namco C30风格的APU
- 基于WebGL的PPU,用于精灵、背景层和简单多边形
- 内存映射I/O + 通过SVC分发的系统调用
整个系统在浏览器中以锁定的60 fps运行,配备1 MB RAM / 1 MB ROM。
👉 源代码:https://github.com/beep8/beep8-sdk 👉 在线演示:https://beep8.org
我想与这个社区讨论的内容:
- 在高级环境(这里是JS)中处理精确CPU时序的方法
- 严格周期精确模拟与幻想游戏机"足够好"模拟之间的权衡
- 在其他人在不寻常环境中实现ARM或类似RTOS系统的经验教训
很想听听大家的想法!