我打算在接下来的几个月内创建一个世嘉主系统模拟器,作为Java中的一个业余爱好项目(我知道这不是最好的语言,但我发现它工作起来非常舒适,并且作为Windows和Linux的常用用户,我认为跨平台应用会很棒)。我的问题是关于周期盘点;关于模拟CPU时的周期计数精度的问题
我看过了另一个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个周期是低的,但这只是一个例子。
非常感谢, 菲尔
感谢:-)几天前我看到这篇文章,这是一个非常有趣的阅读。看起来我可以忽略这个问题 - 把我的工作剪掉,但应该很有趣! :-P – PhilPotter1987