状态寄存器何时在6502中更新?

时间:2017-11-28 13:29:58

标签: processor 6502

我目前正在LogiSim中开发6502的子集。我的主要资源之一是Hanson's Block Diagram

我正在尝试确定应该如何以及在何处构建更新处理器状态寄存器的电路。在下面的处理器状态寄存器图中,有多条控制线进入寄存器,但没有指示它们来自何处。

confusing part of the diagram

6502处理器状态寄存器何时何地更新?我认为这是在ALU的输出上,但我想确保这种情况。

2 个答案:

答案 0 :(得分:7)

你有汉森的complete updated diagram吗?论文is here。 (或original here。)

P(DB0 / C等)左侧的输入是随机控制逻辑块底部的输出。 P顶部的输入来自ALU(ACR,AVR),IR5是指令寄存器的第5位。 (但是从下面的Breaknes看来,Hanson的图表似乎不完整:“Donald错过了原理图上的0 / V命令,该命令在处理CLV指令时使用。”)

对于各种指令,输入将被不同地锁存。例如,像CLC / SEC / CLD / SED / CLI / SEI / CLV这样的两个循环指令有一位(IR5),最终将硬编码值锁存到C,I,V或D中的一个。其他指令将在稍后的周期将ALU(等)信号锁存到多个标志。这就像我所知道的那么详细,以及适合这里答案的逻辑。

俄罗斯Breaknes site提供了非常详细的信息。作者从Visual6502的图像反向设计了晶体管级的所有6502逻辑。在网站的Wiki和Info部分仔细查看。例如。这是一个translated link到标志信息页面,它有一个逻辑图,与wiki page on flag logic不同。

6502 forum当他完成这项工作时有很多讨论(page 12page 15上的标记逻辑),有些内容可能只是从这个帖子链接。原始代码仓库已移至GitHub,其中有仿真器源代码和Logisim电路图。

答案 1 :(得分:4)

从顶部开始:

C标志由

设置或清除
  • 任何可以具有无符号溢出的指令。其中包括ADC SBCCMPCPXCPY
  • 转换并转动说明ASLROLROR
  • 明确的设置和明确说明SECCLC
  • 加载整个状态寄存器PLPRTI
  • 的说明

通过

设置或清除Z.
  • 任何写入AXY的指令,例如算术,如进位,按位逻辑运算,加载,传递,从堆栈中拉出,移位和旋转。
  • 加载整个状态寄存器PLPRTI
  • 的说明
  • BIT

我被

设置或清除
  • SEICLI说明。
  • 加载整个状态寄存器PLPRTI
  • 的说明
  • BRK设置并中断。

D仅由PLPRTISEDCLD说明设置或清除。

B很有意思。它实际上是程序员完全无法访问的,并且没有被处理器使用。堆栈上推送的状态字节设置为BRK并清除中断。我想这意味着RTIPLP如果在从堆栈中拉出的字节中设置它就会设置它,但它并不重要。

通过

设置或清除V标志
  • ADCSBC
  • BIT
  • 加载整个状态寄存器PLPRTI
  • 的说明
  • CLV

在与Z相同的情况下设置或清除N。

  

我认为它在ALU的输出上

这是对所有ALU操作的公平评估,但正如您从上面可以看到的那样,有些情况下状态标志是从ALU以外的来源设置的。

参考:http://www.e-tradition.net/bytes/6502/6502_instruction_set.html