有没有办法通过 6502 的操作码以编程方式确定寻址模式?

And*_*eas 4 6502 emulation opcode addressing-mode

即不同的寻址模式是否以某种方式编码在操作码中?可以通过编程方式提取它们还是这些信息仅存在于 6502 的文档中?我正在编写一个模拟器,我不关心性能。如果可能的话,最好有一个接受操作码并返回寻址模式的函数。

到目前为止,我还没有发现任何迹象表明代码中存在某种模式,除了所有零页指令似乎都设置了第三位之外。

Eig*_*uru 5

就在这里。寻址模式以 3 位编码在操作码字节的位置 4-2 处(即 xxxAAAxx)。寻址模式的解码取决于其他位,但它们(大部分)符合常规模式,可以通过查找表删除该模式以确定每种指令类型的模式。

本页完整描述了各种模式以及每种情况下如何解码。