首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Z80多字节命令( IM0 )

Z80多字节命令( IM0 )
EN

Stack Overflow用户
提问于 2014-12-06 23:54:20
回答 2查看 1.6K关注 0票数 4

我只是为了好玩而设计一个更复杂的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位地址。只是为了好玩:-)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-07 00:16:04

我的理解是,外围设备是必需的:

  • 要知道它需要输入多少字节;
  • 对IORQ周期后的正常读取周期作出响应;以及
  • 若要安排正常情况下对内存读取周期的响应,则在持续时间内不会这样做。

此外,Zilog在申请说明中记录了这种行为,你的引语来源于此(大概是不可信的)。

实际上,我猜99.99%的IM0用户只使用RST,其余99.99%的用户使用CALL xxxx这样的已知大小的指令。

(我还知道有几个微芯片有效地保证了在中断周期期间不会将任何东西放到总线上,从而由于打开收集器输出而将IM0转换为IM1的同义词)。

票数 4
EN

Stack Overflow用户

发布于 2015-02-01 00:25:05

中断行为被合理地记录在Z80手册中:插入式模式,IM2允许您向16位指针提供一个8位地址。至少到16位直接地址的一半。

如何设置中断模式

我的理解是,使用M1 + IORQ组合是因为没有为专用中断响应留下引脚。一个有趣的细节也是Zilog I/O芯片,如PIO,SIO,CTC读取RETI指令(当CPU获取它),以了解CPU已经准备好接受另一个中断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27337948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档