2011-12-14 17 views
6

Noto en la hoja de datos de Zilog en el Z80 que con el grupo de instrucciones I/O (IN y OUT), el contenido de varios registros a menudo se ubica en los 8 bits superiores del bus de direcciones (dependiendo de la instrucción), con los 8 bits inferiores seleccionando uno de hasta 256 dispositivos teóricamente conectados.Direccionamiento de E/S de 16 bits indocumentado en Z80

Mi pregunta es ¿cuál es el punto de hacer esto con estos 8 bits superiores? Sé que algunas máquinas usan esto de alguna manera relacionada con la disminución de la complejidad de la decodificación, pero ¿se usan seriamente para algo? Quiero implementar las instrucciones exactamente como sugiere el Z80, pero no veo el sentido de implementar este comportamiento ya que no es estándar. Este comportamiento se describe como no documentado, por lo que en un 'Sega Master System', por ejemplo, ¿me saldré con la tuya? Muchas gracias.

Saludos, Phil Potter

+1

Sin documentar pero en una hoja de datos? – chance

+0

Disculpe lo que quise decir es que aunque este comportamiento es normal, el direccionamiento de los dispositivos de E/S es oficialmente de solo 8 bits. – PhilPotter1987

Respuesta

5

El comportamiento está completamente documented por Zilog (páginas 269-287).

Supongo que algunos periféricos pueden usar los bits superiores A8..A15 del bus de direcciones como una especie de parámetro de 8 bits.

+0

Gracias :-) Mejor emular este comportamiento de todos modos. – PhilPotter1987

+1

La 'disminución de la complejidad de la decodificación' insinuada por Phil es el uso más común: usar una sola línea de dirección directamente ya que la activación/desactivación del dispositivo es más económica que combinar lógicamente varias, y no se siente demasiado derrochador cuando hay 16 de ellas. Los teclados en micros de 8 bits tienden a explotar este comportamiento para tratar parte de la dirección del puerto como una especie de parámetro, excepto que está habilitando o deshabilitando líneas de teclado con las líneas de dirección (por lo que es como una máscara) y el resultado termina siendo el AND lógico de todas las líneas afectadas (no a propósito, solo porque el tablero estaba abierto de todos modos). – Tommy

2

Algunos sistemas utilizan los 8 bits superiores como la dirección y los 8 bits inferiores como el parámetro. El CPC de Amstrad es el principal ejemplo. Esto hace que OUT (C), r sea casi la única instrucción utilizable, aunque, por supuesto, ahora actúa realmente como OUT (B), r; C se usa a menudo como el parámetro por conveniencia. El corolario es que OUT (n), A se convierte casi completamente inútil, a menos que usted desee enviar al puerto 0x34 0x34, etc.

+1

De hecho, Amstrad tiene bastantes [puertos] (http://www.cpcwiki.eu/index.php/I/O_Port_Summary) donde deben usarse los 16 bits. –

0

En ZX Spectrum el teclado puede ser leído por la lectura desde el puerto 0xfe mientras las 8 líneas de dirección más altas seleccionan uno de los 8 grupos de 5 teclas. Por ejemplo, si desea escanear las teclas Q, W, E, R, y T los 8 bits superiores del bus de direcciones tienen que ser 0xFB:

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

Esto es exactamente lo mismo que:

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

Algunas máquinas de arcade de los años 80 se comunican con el additio hardware nal al generar más de 8 bits a la vez con una instrucción out - los bits adicionales se leen desde las líneas de dirección superiores.

Cuestiones relacionadas