1

我有一个开源 Atari 2600 仿真器 (Z26),我想添加对包含嵌入式 ARM 处理器(NXP 21xx 系列)的墨盒的支持。这个想法是模拟 6507,直到它尝试读取或写入一个字节的内存(它将每 841ns 执行一次)。如果 6507 执行写操作,将地址和数据放在 ARM 的一些 I/O 端口上,让 ARM 代码运行 20 个周期,确认 ARM 正在浮动其数据总线,让 ARM 再运行 38 个周期。如果 6507 执行读取,将地址放在 ARM 的 I/O 端口上,让 ARM 运行 38 个周期,从 ARM 的 I/O 端口获取数据(希望 ARM 软件将它放在那里),然后让ARM 再运行 20 个周期。

ARM7 似乎很容易实现。我不需要模拟很多硬件功能。有什么想法吗?

编辑 我想到的是一个例程,它将一个保存机器状态的结构和指向内存访问例程的指针作为参数。当被调用时,该例程将模拟 ARM 的指令引擎,生成适当的读取、写入和代码提取。然后我可以编写内存访问例程,将适当的区域视为闪存(具有大致近似的等待状态)、RAM、I/O 端口和定时器寄存器。其他一些区域将被标记为不关心,并且对任何其他区域的访问将标记错误并停止模拟器。

也许 QEMU 在内部使用了这样的东西。由于 ARM 仿真将被集成到一个已经存在的仿真引擎中(我没有编写也没有完全理解——我修补的 Z26 的唯一部分是内存读/写逻辑)我需要占地面积相当小的东西。

知道 QEMU 内部是如何工作的吗?如果我只在 QEMU 中使用 2% 的代码,是否知道 GPL 许可证需要什么——我是否必须为整个东西捆绑代码,或者只是我使用的部分,还是什么?

4

2 回答 2

2

试试QEMU

于 2010-08-23T23:36:24.553 回答
1

通过一些工作,你可以让我的模拟器做你想做的事。它是为 ARM920 编写的,Thumb 指令集尚未完成。MMU/缓存接口也不是。此外,它很慢,因为它是一个解释器。从好的方面来说,这一切都是用 C99 编写的。

http://code.google.com/p/gp2xemu/

我已经有一段时间没有研究它了(svn trunk 已经有 2 年历史了),但是如果您要使用该代码,我很乐意帮助您解决缺少的功能。它在 MIT 下获得许可,因此它与广泛的 BSD 许可相同。

于 2010-08-25T10:44:05.873 回答