用JavaScript实现ARM v4a模拟器和RTOS系统

这篇文章详细介绍了一个名为BEEP-8的幻想游戏机项目,其中包含用JavaScript/TypeScript编写的周期精确ARM v4a模拟器,以及一个小型RTOS内核,支持线程、信号量、定时器和中断管理。

用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系统的经验教训

很想听听大家的想法!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计