我查看了另一个Z80模拟器以及其他模拟器的源代码,特别是执行循环引起了我的兴趣 - 当调用它时,会将int作为参数传递(例如1000)。现在我知道每个操作码执行需要不同数量的周期,并且随着这些操作码的执行,剩余周期的数量会递减。一旦剩余周期的数量<= 0,执行循环就会结束。
我的问题是,许多这些模拟器没有考虑到最后一条指令可能会将周期数推到负值 - 这意味着在执行循环之间,可能会执行1002个周期而不是1000个周期。这个问题是否重要?一些模拟器通过在下一个执行循环中进行补偿来解决此问题,而一些则没有 - 哪种方法最好?请允许我用例子说明我的问题,因为我不太善于表达:
public void execute(int numOfCycles)
{ //this is an execution loop method, called with 1000.
while (numOfCycles > 0)
{
instruction = readInstruction();
switch (instruction)
{
case 0x40: dowhatever, then decrement numOfCycles by 5;
break;
//lets say for arguments sake this case is executed when numOfCycles is 3.
}
}
在这个循环示例结束后,numOfCycles将为-2。这只会是一种小的不精确度,但在人们的整体经验中是否重要呢?我很感激任何人对这个问题的见解。我计划在每一帧之后中断CPU,因为这似乎是合适的,所以1000个周期很低,我知道,但这只是一个示例。
非常感谢, 菲尔