我想有兴趣为Z80处理器编写自己的简单模拟器.我对这种类型的编程没有经验.使用基于C语言的我很好,因为他们是我最熟悉的.
我需要做些什么以及哪些好的教程/参考资料可以帮助我完成这个项目?
我还想要一个为我的TI-84 Plus计算器编写ROM转储应用程序的教程,这样我就可以将它的ROM用于这个仿真器.
我打算在接下来的几个月里创建一个Sega Master System模拟器,作为Java中的一个爱好项目(我知道它不是最好的语言,但我发现它很舒服,并且作为一个频繁的用户Windows和Linux我认为跨平台应用程序会很棒).我的问题是关于循环计数;
我查看了另一个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.
}
}
Run Code Online (Sandbox Code Playgroud)
在此特定循环示例结束后,numOfCycles将为-2.这只会是一个小小的不准确,但在人们的经历中总体上是否重要?我很欣赏任何人对这一点的见解.我计划在每帧之后中断CPU,因为这似乎合适,所以1000个周期很低我知道,这只是一个例子.
非常感谢,菲尔