我有一个开源 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 许可证需要什么——我是否必须为整个东西捆绑代码,或者只是我使用的部分,还是什么?