Io Z80上未记录的16位I/O寻址

Io Z80上未记录的16位I/O寻址,io,emulation,z80,Io,Emulation,Z80,我从Z80上的Zilog数据表中注意到,对于I/O(输入和输出)指令组,各种寄存器的内容通常放在地址总线的前8位(取决于指令),低8位选择最多256个理论连接设备中的一个 我的问题是,用上面的8位做这件事有什么意义?我知道有些机器在某种程度上使用这种方法来降低解码复杂度,但它们真的用于任何事情吗?我想完全按照Z80的建议来实现这些指令,但我不认为实现这种行为有什么意义,因为它是非标准的。这种行为被描述为未记录的,因此在“世嘉主系统”上,例如,我能逃脱吗?非常感谢 问候,, 菲尔·波特(Phil

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

我的问题是,用上面的8位做这件事有什么意义?我知道有些机器在某种程度上使用这种方法来降低解码复杂度,但它们真的用于任何事情吗?我想完全按照Z80的建议来实现这些指令,但我不认为实现这种行为有什么意义,因为它是非标准的。这种行为被描述为未记录的,因此在“世嘉主系统”上,例如,我能逃脱吗?非常感谢

问候,, 菲尔·波特(Phil Potter)

行为完全由齐洛格(Zilog)决定(第269-287页)


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

一些系统使用高位8位作为地址,低位8位作为参数。阿姆斯特拉德CPC就是一个主要的例子。这使得OUT(C),r几乎是唯一可用的指令,尽管它现在实际上充当OUT(B),r;为方便起见,通常使用C作为参数。其推论是OUT(n),A几乎完全无用,除非您碰巧想将0x34发送到端口0x34,等等。

在ZX频谱上,当最高的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年代的一些街机通过一条
out
指令一次输出超过8位与附加硬件通信-附加位从上面的地址行读取。

未记录,但在数据表上?对不起,我的意思是,尽管这种行为是正常的-I/O设备的寻址是无效的官方只有8位。谢谢:-)无论如何,最好模仿这种行为。Phil暗示的“降低解码复杂度”是最常见的用法-直接使用单个地址行作为设备启用/禁用比逻辑组合多个地址行更便宜,并且当有16个地址行时不会觉得太浪费。8位微处理器上的键盘倾向于利用这种行为,将端口地址的一部分作为一种参数处理,除非您使用地址行启用或禁用键盘行(因此它就像一个掩码),结果是所有受影响行的逻辑and(不是故意的,只是因为电路板是开集电极而已)。事实上,阿姆斯特拉德有很多16位都必须使用的电路板。