【问题标题】:Is there a way to programmatically determine addressing mode from an opcode for the 6502?有没有办法通过 6502 的操作码以编程方式确定寻址模式?
【发布时间】:2014-11-10 03:44:05
【问题描述】:

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

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

【问题讨论】:

标签: emulation opcode addressing-mode 6502


【解决方案1】:

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

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

【讨论】:

  • 太好了!我有四个不同的页面描述了指令集,但没有一个提到任何位级语义。
  • 祝你的模拟器好运;我的 Sharp6502 仿真器的第一个版本在操作码级别运行,在 Pentium 4 上管理 70MHz。第二个版本在位解码器级别运行,在相同硬件上时钟频率为 122MHz - 所以完全有可能获得惊人的性能(与 1MHz 芯片相比)在此级别进行仿真时,即使使用 C# 等托管语言编写也是如此。
  • 谢谢。我意识到,在使用 Java 工作时,如何利用这些位信息来提高代码的可读性(或性能)对我来说并不明显。似乎比仅仅使用一个巨大的扁平开关语句更混乱。在 Google 上似乎找不到您的模拟器,看看会很有趣。
  • 该代码在 Google 代码上,但在我为它找到新家时已被删除。这是(很久以前的)博客:legacysystem.blogspot.co.uk 你当然可以使用 switch 语句,尽管我将它与位移操作结合起来以隔离操作码的元素,然后进行简单的数字切换而不是使用巨大的助记符开关。
  • 真的很有趣的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2021-08-15
  • 1970-01-01
  • 2011-05-21
  • 2013-07-16
  • 2020-10-06
  • 1970-01-01
相关资源
最近更新 更多