为什么要模拟一定数量的周期?

kof*_*rts 4 z80 emulation

我在不止一个地方看到过 - 以下的模仿方式

即循环被传递到模拟函数

int CPU_execute(int cycles) {
    int cycle_count;

    cycle_count = cycles;
    do {

         /* OPCODE execution here */

    } while(cycle_count > 0);

    return cycles - cycle_count;
}     
Run Code Online (Sandbox Code Playgroud)

我很难理解为什么你会采用这种方法来模拟,即为什么你会模仿一定数量的周期?你能举出一些这种方法有用的场景吗?

衷心感谢任何帮助!

Tom*_*mmy 6

仿真器倾向于愚弄为多个芯片设备编写的软件 - 就Z80和最畅销的设备而言,除了CPU之外,你可能至少谈论的是图形芯片和声音芯片.

在现实世界中,这些芯片都同时发挥作用.将有一些总线逻辑允许他们所有人进行通信,但他们在其他人的世界中.

您通常不会将不同芯片的仿真作为并发进程运行,因为执行同步事件的成本太高,尤其是在通常的安排中,在几个芯片之间共享类似RAM的块.

因此,最基本的方法是协同多任务处理不同的芯片 - 运行Z80几个周期,然后运行图形芯片相同的时间等,无限制.这就是运行n个循环和返回的方法来自的地方.

它通常不是再现真实计算机总线行为的准确方法,但它易于实现,而且通常可以欺骗大多数软件.

在您发布的特定代码中,作者进一步确定仿真将循环次数直到下一条整个指令的结尾.这又是关于实现的简单性,而不是与真实机器的实际内部有关.返回实际运行的周期数,以便其他子系统可以尝试进行调整.


nij*_*kim 2

如果您想将处理器与其他硬件同步,这样做可能会很有用。例如,如果您想将其与计时器同步,您需要控制计时器中断 CPU 之前可以经过多少个周期。