【问题标题】:Is the Z80 NMI reentrant?Z80 NMI 是可重入的吗?
【发布时间】:2016-10-02 08:39:54
【问题描述】:

据我所知,Z80 NMI 中断 (0x66) 是由 NMI 引脚的边缘检测触发的。当仍在 NMI 处理程序代码内(RETN 尚未执行)检测到另一个边缘时会发生什么?

NMI 是可重入的吗?Z80 是否只是将当前地址压入堆栈并再次从 0x66 开始?

【问题讨论】:

  • 感谢您的链接。非常有用。

标签: z80


【解决方案1】:

我的解读是第二个 NMI 会中断第一个 NMI 的处理。 NMI 处理为避免额外中断所做的唯一特殊事情是将 IFF1 备份到 IFF2,然后设置 IFF1(RETNs 的特殊功能是在另一个方向上恢复)。但这不会禁止 NMI。因此,没有任何机制可以忽略未来的 NMI。

这在文献中得到了轻微的支持,尽管很微妙——e.g.“这个下降沿触发的中断不能在程序控制下被禁用,将在任何时候被 CPU 接受以在完成时兑现当前指令(如果总线请求未挂起)";添加了重点,但也请注意,总线请求已作为一种特殊情况被删除,没有提及现有的 NMI。

【讨论】:

  • 并没有如此巧妙地支持名称。 NMI - 不可屏蔽中断。换句话说,您无法通过使用 DI 禁用(屏蔽)中断来阻止它的发生。
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 2022-01-03
  • 2011-04-21
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
相关资源
最近更新 更多