6

我从 Z80 上的 Zilog 数据表中注意到,对于 I/O(IN 和 OUT)组指令,各种寄存器的内容通常放在地址总线的前 8 位(取决于指令),其中低 8 位选择最多 256 个理论上连接的设备之一。

我的问题是用这些高 8 位这样做有什么意义?我知道有些机器以某种方式使用它来降低解码复杂性,但它们真的用于任何事情吗?我想完全按照 Z80 的建议执行指令,但我看不出执行此行为的意义,因为它是非标准的。这种行为被描述为无证,例如,在“世嘉主系统”上,我能侥幸逃脱吗?非常感谢。

问候,菲尔·波特

4

3 回答 3

5

Zilog 完整记录了该行为(第 269-287 页)。

我猜一些外围设备可能会使用地址总线的高位 A8..A15 作为一种 8 位参数。

于 2011-12-14T19:06:30.493 回答
2

有些系统使用高 8 位作为地址,低 8 位作为参数。Amstrad CPC 是主要的例子。这使得 OUT (C),r 几乎是唯一可用的指令,当然它现在实际上充当 OUT (B),r;为方便起见,经常使用 C 作为参数。推论是 OUT (n),A 变得几乎完全没用,除非您碰巧想将 0x34 发送到端口 0x34 等。

于 2012-12-20T11:55:31.083 回答
0

在 ZX Spectrum 上,键盘只能通过从端口0xfe读取来读取,而最高的 8 个地址线正在选择 8 组 5 个键中的一个。例如,如果要扫描键QWERT,地址总线的高 8 位必须为0xfb

    ld bc,#fbfe
    in a,(c)        ; reading from port 0xfe while upper 8 address lines are 0xfb

这与以下内容完全相同:

    ld a,#fb
    in a,(#fe)      ; reading from port 0xfe while upper 8 address lines are 0xfb

一些 80 年代的街机机器通过使用一条指令一次输出超过 8 位来与附加硬件通信out——附加位是从高地址行读取的。

于 2017-08-04T05:21:16.140 回答