Confundido acerca de la arquitectura IN / OUT del chip z80

3

Estoy leyendo el manual, y es un poco complejo. No puedo entender la codificación del código de máquina de por vida, pero esa no es mi principal preocupación ... mi principal preocupación son los buses de direcciones / datos .

No entiendo la diferencia entre la "dirección de salida" de la instrucción OUT y la configuración del puerto, Y la participación de los operandos de datos de registro.

Citado directamente del manual de z80:

  

Los contenidos del registro C se colocan en la mitad inferior (desde A0 hasta   A7) del bus de direcciones para seleccionar el dispositivo de E / S en uno de los 256 posibles   puertos.

Tiempo de preguntas:

1.¿Qué significa "la mitad inferior"?

2. ¿Dónde / cuáles son los 256 puertos posibles, y cómo selecciona uno y hacia dónde va exactamente desde allí?

Siguiente cita:

  

Si el contenido del registro C es 01H, y el contenido del registro D es 5AH,   en la ejecución de OUT (C), D byte 5AH se escribe en el dispositivo periférico   asignado a la dirección del puerto de E / S 01H.

Entonces, si tengo 1 en el registro C, y 90 en D, y escribo OUT (C), ¿se escribe D 90 en algo asignado a 1? ¿Cómo puedo saber qué se asigna en 1?

PS: Además, si tengo hardware en la dirección asignada 1, ¿a dónde va 90 (el valor representado) en ese hardware?

No me malinterpretes por mi confusión aquí, soy programador ... solo tengo una experiencia muy limitada en codificación en este nivel bajo, y solo necesito una aclaración.

    
pregunta JYelton

4 respuestas

4

El bus de dirección del Z80 tiene 16 bits de ancho (bits A0 a A15), lo que significa que puede dirigirse a 65536 ubicaciones. Los 8 bits bajos del bus son los bits A0-A7, que pueden dirigirse a 256 ubicaciones. Cada uno de los puertos de E / S conectados al Z80 tiene una dirección correspondiente de 0-255 (256 direcciones en total). Solo un puerto responde a una dirección en particular.

If the contents of register C are 01H, and the contents of register D are 5AH, at
execution of OUT (C),D byte 5AH is written to the peripheral device mapped to I/O port
address 01H.

La dirección del periférico (01) se colocará en el bus de dirección A0-A7. El contenido del registro D se colocará en el bus de datos de 8 bits y se escribirá en el periférico cuyo número de puerto es 01.

    
respondido por el tcrosley
3

Las versiones de las instrucciones IN y OUT que incluyen una dirección de E / S solo permiten especificar los 8 bits inferiores de la dirección en la instrucción. Por esa razón, la mayoría del hardware de E / S basado en Z80 ignora cualquier bit de dirección más allá de los 8 inferiores, y en la mayoría de los casos los programadores no se preocupan por lo que hace el procesador con los 8 bits superiores. En realidad, el Z80 genera BC como una dirección (como lo haría, por ejemplo, LD A,(BC) ), pero si al hardware no le importan los bits de la dirección superior, no hay razón para que los programadores se preocupen por lo que contiene el registro B. Por cierto, no creo que OUT nn,A siempre produzca cero en los bits de dirección superior; Recuerdo vagamente que genera el valor I , pero no estoy seguro. Lo importante es que si el hardware de decodificación de E / S se preocupa por los bits de dirección superiores, el código siempre debe utilizar la forma OUT (BC),r de la instrucción y asegurarse de que se cargue adecuadamente el B .

EDIT : una aclaración adicional sobre el direccionamiento: cuando el código ejecuta una instrucción como LD (BC),A o OUT (C),A , al Z80 no le importa realmente lo que la dirección en BC "significa". El Z80 acciona el bus de direcciones con el contenido del registro BC, coloca el contenido del registro A en el bus de datos y afirma una combinación de señales que indican "escritura de memoria" o "escritura de E / S". Cada memoria o dispositivo debe estar conectado a un hardware para que sepa qué se supone que debe hacer con cualquier solicitud; debe hacerlo de tal manera que ignorará cualquier solicitud que se dirija hacia otros dispositivos, pero eso no significa que necesariamente ignorará las solicitudes dirigidas a todas las direcciones "no utilizadas". Por ejemplo, si los únicos dispositivos de E / S en un sistema fueran dos chips UART, cada uno de los cuales tenía cuatro direcciones de E / S, un diseñador del sistema podría diseñar cosas para que cualquier solicitud de E / S donde la dirección del bit 7 fuera baja pudiera acceder a la primer chip, utilizando los bits de dirección 0-1 para seleccionar una función, y cualquier solicitud en la que la dirección del bit 7 fuera alta accedería al segundo. El diseñador podría especificar que el primer chip usó las direcciones 00h-7Fh, y el segundo usó 80h a 0FFh, pero en realidad el primer chip respondería a las direcciones 04h, 08h, 0Ch, 10h, ... 7Ch, tal como lo haría 00h; Igualmente respondería a las 05h, etc. tal como lo haría a la 01h. Hacer que el chip ignore las escrituras en las direcciones en el rango 04h-7Fh requeriría más hardware que el simple hecho de que dichas direcciones "oculten" las funciones de las especificadas.

    
respondido por el supercat
0
  1. Se llama "mitad inferior" porque estas ocho líneas de dirección son las 8 más bajas de las 16 líneas de dirección.

  2. Los puertos dependen de su sistema, puede ser cualquier cosa. Hay algún hardware lógico en su sistema que selecciona el puerto para las direcciones. Por lo general, hay algo de decodificador para los bits superiores de la dirección, y sus salidas van a la entrada de selección de chip (CS) de los chips que implementan la E / S. Los bits inferiores van directamente a los chips para seleccionar uno de varios registros dentro de cada uno.

Lo que hace el hardware con el valor que escribe en algún puerto es arbitrario. Podría almacenar ese valor, pero también podría causar alguna acción arbitraria.

Por lo tanto, debe leer la documentación de su hardware para saber qué hacen los puertos.

    
respondido por el starblue
0

Típicamente, algunas de las líneas de dirección irán a alguna lógica que producirá señales de selección de chip basadas en la dirección que luego se usan para habilitar o seleccionar los dispositivos de entrada o salida.

Cuando un dispositivo de salida recibe una señal de selección de chip y la señal de escritura de E / S, los datos en el bus de datos se escribirán en ese dispositivo de salida; lo que el dispositivo hace con los datos depende del dispositivo en particular.

El diseñador del sistema decidirá qué direcciones de E / S corresponden a qué dispositivo de E / S. Si el programador escribe en una dirección de E / S sin usar, los datos escritos simplemente caerán en el depósito de bits.

    
respondido por el Peter Bennett

Lea otras preguntas en las etiquetas