周末到了,所以我会写一个业余项目来放松一下,这样就可以从整个星期的编程中得到解脱。
昨天我编写了MOS 6502 CPU模拟器的框架,实现了寄存器、堆栈、内存和所有操作码。(源代码链接如下)
我可以在我编写的调试器中手动运行一系列操作,但我想加载一个NES rom并将程序计数器指向它的指令,我觉得这是找到有缺陷的操作码最快的方法。
我编写了一个快速的NES rom加载器,并将ROM块加载到CPU内存中。
问题在于我不知道操作码是如何编码的。我知道操作码本身遵循每个操作码一个字节的模式,唯一地标识了操作码,
0 - BRK
1 - ORA (D,X)
2 - COP b
但我不确定在哪里找到操作码参数。它是直接跟在后面的字节吗?在绝对内存中,我想它可能不是一个字节,而是一个short。
有人熟悉这个CPU的内存模型吗?
编辑:我意识到这可能只是一次无望的尝试,但我希望这里有一些老派的苹果和康柏骑士。
编辑:谢谢大家的帮助。在我实现了正确的更改以使CPU可以加载和运行超级马里奥兄弟后,它没有做任何事情,但这是一个好迹象 :)
我上传了源代码:
https://archive.codeplex.com/?p=cpu6502
如果有人曾经想过模拟器是如何工作的,那么它非常容易理解。没有进行最优化处理,但是再说一遍,我正在模拟一个运行速度为2mhz的CPU在一个2.4ghz的机器上 :)