Z80上没有记录的16位I / O寻址

时间:2011-12-14 16:16:44

标签: io emulation z80

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

我的问题是用这8位高位做这个是什么意思?我知道有些机器在某种程度上使用它来降低解码复杂度,但它们是否真的用于任何事情?我想完全按照Z80的建议实施指令,但我没有看到实现这种行为的重点,因为它是非标准的。这种行为被描述为无证件,因此在Sega Master System'例如,我会逃脱这个吗?非常感谢。

此致 菲尔波特

3 个答案:

答案 0 :(得分:5)

Zilog的行为完全documented(第269-287页)。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

在ZX Spectrum上,只能通过读取端口 0xfe 来读取键盘,而最高的8个地址线正在选择8组5个键中的一个。例如,如果您要扫描键 Q W E R T 地址总线的高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位以上的数据与附加硬件进行通信 - 从高位地址线读取附加位。