这是周末,所以我通过编写一个爱好项目来放松整个星期的编程。
昨天写了一个MOS 6502 CPU仿真器的框架,实现了寄存器、栈、内存和所有的操作码。(链接到下面的源)
我可以在我编写的调试器中手动运行一系列操作,但我想加载一个 NES rom 并将程序计数器指向它的指令,我认为这将是找到有缺陷的操作码的最快方法。
我编写了一个快速的 NES ROM 加载器并将 ROM 库加载到 CPU 内存中。
问题是我不知道操作码是如何编码的。我知道操作码本身遵循每个操作码一个字节的模式,该模式唯一地标识操作码,
0 - BRK
1 - ORA (D,X)
2 - COP b
ETC
但是我不确定我应该在哪里找到操作码参数。是直接跟在后面的字节吗?在绝对内存中,我想它可能不是一个字节,而是一个短字节。
有人熟悉这个 CPU 的内存模型吗?
编辑:我意识到这可能是在黑暗中拍摄的,但我希望有一些老派的 Apple 和 Commodore 黑客潜伏在这里。
编辑:感谢大家的帮助。在我实施适当的更改以对齐每个操作后,CPU 可以加载和运行马里奥兄弟。它除了循环等待开始之外什么都不做,但这是一个好兆头:)
我上传了源码:
https://archive.codeplex.com/?p=cpu6502
如果有人想知道模拟器是如何工作的,那么它很容易理解。至少没有优化,但话又说回来,我正在模拟一个在 2.4ghz 机器上以 2mhz 运行的 CPU :)