【问题标题】:When is the status register updated in the 6502?6502的状态寄存器什么时候更新?
【发布时间】:2017-11-28 13:29:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: processor 6502


    【解决方案1】:

    你有汉森的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电路图。

    【讨论】:

    • 嗯,俄语网站看起来很有趣,但它是俄语的。此外,您的答案应该是自包含的,仅使用链接作为参考。
    • @JeremyP:好的,我已经更新了一些谷歌翻译的链接,但无论如何 Chrome 都会自动完成。我的回答解决了主要问题——我认为詹姆斯只使用了汉森图表的一小部分。每个标志变化的细节是如何通过各种指令在不同周期从 6502 的各个部分传输的,我留给在晶体管级别上非常了解芯片的人。 ; - )
    • 作为后续,P左侧的DB0、DB7、DB6、DBI输入有什么区别?如果我错了,请纠正我,但我假设 P 左侧的输入是控制线,控制将哪个输入发送到 C、Z 等。这些输入来自哪里(不是来自随机控制逻辑,但实际输入)?谢谢!
    • DB7...DB1(不是 DBI)和 DB0 是内部 6502 数据总线的位。 Hanson的DB0/C是C电路和DB bit 0之间的连接(因为C是P的bit 0)。 P 由位 (7-0) NVRBDIZC 组成,因此您可以从logic diagram 中看到,在执行 PLP 或 RTI 时将使用这些位。这在我链接到的breaknes.com/info/18 页面上进行了解释。
    【解决方案2】:

    从上到下:

    C 标志由

    设置或清除
    • 任何可能有无符号溢出的指令。这些包括ADCSBCCMPCPXCPY
    • 移位和循环指令ASLROLROR
    • 显式设置和清除指令SEC, CLC
    • 指令加载整个状态寄存器PLP, RTI

    Z 由

    设置或清除
    • 任何写入AXY 的指令,例如进位、按位逻辑运算、加载、传输、从堆栈中拉取、移位和循环的算术运算。
    • 指令加载整个状态寄存器PLP, RTI
    • BIT

    I 由

    设置或清除
    • SEICLI 指令。
    • 指令加载整个状态寄存器PLP, RTI
    • BRK 设置和中断。

    D 仅由 PLPRTISEDCLD 指令设置或清除。

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

    V 标志被设置或清除

    • ADC, SBC
    • BIT
    • 加载整个状态寄存器PLPRTI的指令
    • CLV

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

    我认为它在 ALU 的输出上

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

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

    【讨论】:

    • 没有 SEV 指令。 V也可以通过6502芯片的SO引脚设置。
    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2023-03-19
    • 1970-01-01
    • 2018-06-17
    • 2010-09-06
    相关资源
    最近更新 更多