我正在考虑编写简单的 8088 模拟器。但我不明白如何将 8088 核心与视频子系统连接起来。
我在考虑主循环:
while (TRUE)
{
execute_cpu_cycles_per_scanline() ;
paint_scanline() ;
}
这种方法是否适用于 CPU 和图形仿真?还有其他方法吗?任何很好的解释为什么我不能为 CPU 和视频使用不同的线程。如何处理像 QEMU 或其他 (x86) 这样的问题模拟器。
谢谢。
我正在考虑编写简单的 8088 模拟器。但我不明白如何将 8088 核心与视频子系统连接起来。
我在考虑主循环:
while (TRUE)
{
execute_cpu_cycles_per_scanline() ;
paint_scanline() ;
}
这种方法是否适用于 CPU 和图形仿真?还有其他方法吗?任何很好的解释为什么我不能为 CPU 和视频使用不同的线程。如何处理像 QEMU 或其他 (x86) 这样的问题模拟器。
谢谢。
好吧,有这么多的 x86 处理器,随着时间的推移,它们已经发展到时钟周期的指令变得有点不确定。对于像 8088 和 6502 等较旧的 CPU,如果记录在案且准确,您可以简单地计算每条指令的时钟周期,以及当模拟时钟周期的数量等于或大于扫描线绘制时间或某个中断间隔或其他什么时那么你可以按照你的建议去做。如果您查看例如 mame 或其他基本上是他们如何操作的仿真器,请使用指令时钟周期来确定经过的时间,并从中管理外围设备中的仿真时间。
假设您想在 qemu 上运行 linux,您不希望模拟时钟告诉时间由指令的执行确定,您希望将该时钟与硬件系统时钟同步。同样,您可能希望根据真实硬件刷新率而不是模拟刷新率来同步刷新率。
所以这是两个极端。您将需要做一个或另一个或介于两者之间的事情。