gpt4 book ai didi

interrupt - IM0 中的 Z80 多字节命令

转载 作者:行者123 更新时间:2023-12-05 01:01:56 27 4
gpt4 key购买 nike

我只是为了好玩而尝试设计一个带有大量外围设备的更复杂的 Z80 CP/M 系统。在阅读文档时,我在接受 IM0 中断时偶然发现了 Z80 CPU 的(未记录的?)行为。

当中断发生时,Z80 激活 M1 和 IORQ 以向外部设备发送信号:“嘿,给我一个操作码”。如果操作码是 rst 00 或类似的东西,一切都很好。现在文档告诉,任何命令的任何操作码都可以提供给 cpu,例如 CALL。

但是现在出现了未记录的部分:“在中断确认周期期间读取多字节指令的第一个字节。随后的字节由正常的存储器读取序列读入。”

“正常的内存读取序列”。我如何确定 CPU 是想从内存中获取一个字节还是从设备中获取下一个字节?

编辑:我想,我找到了一个(好的?)解决方案:我可以通过分析 IORQ 和 M1 来检测中断确认周期的开始。我也可以通过分析 MREQ 和 M1 来检测下一个“正常”操作码提取。这样我就可以安装一个由这两个ANDed信号触发的触发器,即只要CPU从io-device读取数据,触发器就是1。这个 1 我可以用来禁止总线驱动程序进出内存。

我的意图?我正在设计一个在 CPLD 中具有 8 个优先输入的中断 Controller 。它的寄存器为每个中断引脚保存一个 16 位地址。只是为了好玩:-)

最佳答案

我的理解是需要外围设备:

  • 知道它需要提供多少字节;
  • 响应 IORQ 周期之后的正常读取周期;和
  • 安排通常会响应内存读取周期的任何内容在持续时间内都不会这样做。

  • 此外,Zilog 在 application note 中记录了该行为。 ,您的报价源自其中(大概未记名)。

    在实践中,我猜 99.99% 的 IM0 用户只是使用 RST其余的 99.99% 使用已知大小的指令,如 CALL xxxx .

    (我也知道一些微 Controller 可以有效地保证在中断周期内不会将任何东西放到总线上,从而由于集电极开路输出而将 IM0 变成 IM1 的同义词)。

    关于interrupt - IM0 中的 Z80 多字节命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337948/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com