Emulation 8088cpu与视频系统的仿真

Emulation 8088cpu与视频系统的仿真,emulation,Emulation,我正在考虑编写简单的8088仿真器。但我不明白如何连接8088核心与视频子系统 我在考虑主回路: while (TRUE) { execute_cpu_cycles_per_scanline() ; paint_scanline() ; } 这种方法适合CPU和图形仿真吗?还有其他方法吗?有什么好的解释,为什么我不能使用CPU和视频不同的线程。如何通过QEMU或其他模拟器(x86)处理此问题 谢谢。有这么多x86处理器,随着时间的推移,指令时钟周期变得有些不确定。对于8088和

我正在考虑编写简单的8088仿真器。但我不明白如何连接8088核心与视频子系统

我在考虑主回路:

while (TRUE)
{
   execute_cpu_cycles_per_scanline() ; 
   paint_scanline() ; 
}
这种方法适合CPU和图形仿真吗?还有其他方法吗?有什么好的解释,为什么我不能使用CPU和视频不同的线程。如何通过QEMU或其他模拟器(x86)处理此问题


谢谢。

有这么多x86处理器,随着时间的推移,指令时钟周期变得有些不确定。对于8088和6502等较旧的CPU,如果有记录且准确,您可以简单地计算每条指令的时钟周期,并且当模拟时钟周期数等于或大于扫描线绘制时间或某个中断间隔或其他时间时,您可以按照建议执行操作。例如,如果您查看mame或其他模拟器,它们基本上就是这样做的,请使用指令时钟周期来确定经过的时间,并从中管理外围设备中的模拟时间

假设你想在qemu上运行linux,你不想让告诉时间的模拟时钟由指令的执行决定,你想让时钟与硬件系统时钟同步。同样,您可能希望根据实际硬件刷新率而不是模拟刷新率同步刷新率


这就是两个极端。你需要做一件或另一件或介于两者之间的事情

你好,德韦尔奇。很高兴听到你这么说。实际上我在计算CPU周期。所以这对我来说不是问题。我只是想知道如何在一个循环中集成CPU和视频的好方法。所以在我的示例中,我在每一条扫描线上执行CPU周期。这是正确的方式吗?也许我需要执行一帧的循环,然后更新整个屏幕或其他东西?最终视频会有什么进展吗?有没有一些真正的硬件连接到那个视频上?如果你伪造扫描线,那么以后你必须将你的伪造视频同步到真实视频,这会增加问题。如果这里的练习是让代码感觉像过去一样,那么试着让扫描线时间正确,如果还有另一个目标,比如模仿一个足够好的游戏。那么,也许仅仅使用真正的硬件是不合适的,这取决于你正在尝试做什么,你希望仿真与你正在仿真的硬件相比有多纯净。另一方面,也许您只是想让软件运行,而不关心硬件的准确性,而是关心运行软件的用户体验,例如,如果目标是使用软件,为什么要任意降低运行速度?您可能必须拥有与视频子系统交互的BIOS副本。