我正在用 C 编写我的第一个 NES 模拟器。目标是使其易于理解和循环准确(但不一定必须是代码高效的),以便以正常的“硬件”速度玩游戏。在深入研究 6502 的技术参考资料时,这些指令似乎消耗了多个 CPU 周期 - 并且根据给定条件(例如分支)也有不同的周期。我的计划是创建读写函数,并通过使用switch
.
问题是:当我有一个多周期指令时,例如 a BRK
,我是否需要模拟每个周期中到底发生了什么:
#Method 1
cycle - action
1 - read BRK opcode
2 - read padding byte (ignored)
3 - store high byte of PC
4 - store low byte of PC
5 - store status flags with B flag set
6 - low byte of target address
7 - high byte of target address
...或者我可以在一个“周期”(一个switch
case
)中执行所有必需的操作,而在剩余的周期中什么都不做吗?
#Method 2
1 - read BRK opcode,
read padding byte (ignored),
store high byte of PC,
store low byte of PC,
store status flags with B flag set,
low byte of target address,
high byte of target address
2 - do nothing
3 - do nothing
4 - do nothing
5 - do nothing
6 - do nothing
7 - do nothing
由于这两种方法都消耗了所需的 7 个周期,所以两者之间没有区别吗?(准确性方面)
就我个人而言,我认为方法 1 是可行的解决方案,但是我想不出一个合适的、简单的方法来实现它……(请帮忙!)