我只是为了好玩而设计一个更复杂的Z80 CP/M系统,里面有很多外围设备。在阅读文档时,我无意中发现了(无证?)Z80 CPU在接受IM0中的中断时的行为。
当中断发生时,Z80会激活M1和IORQ,向外部设备发出信号:“嘿,给我一个操作码”。如果操作码是rst 00或类似的话,一切都很好。现在文档告诉我们,任何命令的操作代码都可以提供给cpu,例如调用。
但是现在出现了一个没有文档的部分:“多字节指令的第一个字节在中断确认周期中被读取,随后的字节被一个正常的内存读取序列读取。”
一种“正常记忆读取序列”。如何确定CPU是否希望从内存中获取一个字节,或者从设备中获取下一个字节?
编辑:我想,我找到了一个(好的?)解决方案:我可以通过分析IORQ和M1来判断中断的开始。另外,我还可以通过分析MREQ和M1来检测下一个“正常”操作码的获取。通过这种方式,我可以安装由这两个ANDed信号触发的触发器,即只要CPU从io设备读取数据,触发器就为1。这1我可以用来抑制公交车司机往返于记忆中。
我的意图?我正在设计一个在CPLD中有8个优先输入的中断控制器。它的寄存器为每个中断引脚保存一个16位地址。只是为了好玩:-)
发布于 2014-12-07 00:16:04
我的理解是,外围设备是必需的:
此外,Zilog在申请说明中记录了这种行为,你的引语来源于此(大概是不可信的)。
实际上,我猜99.99%的IM0用户只使用RST,其余99.99%的用户使用CALL xxxx这样的已知大小的指令。
(我还知道有几个微芯片有效地保证了在中断周期期间不会将任何东西放到总线上,从而由于打开收集器输出而将IM0转换为IM1的同义词)。
https://stackoverflow.com/questions/27337948
复制相似问题