Considere un procesador Intel 8088 con una implementación estándar, paralela de RAM y ROM que también admita el acceso del bus de datos / direcciones a varios periféricos externos, como convertidores de analógico a digital (ADC), UART, y más.
Tengo problemas para diseñar un esquema de decodificación de selección de chips que confío en que funcione. Aunque podría usar puertas lógicas en todas las 20 líneas de dirección, el PCB resultante tiene significativamente más trazas e IC, junto con un mayor potencial de mi diseño como incorrecto. Me gustaría utilizar el pin IO / M para facilitar el diseño y la depuración de mi diseño.
La hoja de datos 8086/88 describe la función básica del pin IO / M pero no explica el mecanismo subyacente detrás de él. Entiendo que una lógica baja en el pin indica un acceso de memoria y una lógica alta indica acceso de E / S, pero no entiendo de dónde viene el procesador con esta información. El mapa de memoria con el que estoy tratando de trabajar tiene 2 KB de espacio de direcciones reservado para los periféricos. Ambos ADC requieren 8 bytes cada uno para abordar entradas analógicas individuales, y el UART necesita un marcador de posición de 1 byte.
0x00000 - 0x7FFFF : SRAM Chip 0 (512kB)
0x80000 - 0xDFFFF : SRAM Chip 1 (384kB)
------------------------------
0xE0000 : ADC 0 (8 Bytes)
0xE0008 : ADC 1 (8 Bytes)
0xE0010 : UART 0 (1 Byte)
------------------------------
0xE0800 - 0xFFFFF : Flash ROM (126kB)
Dado que los mapas de memoria pueden ser arbitrarios, ¿cómo sabe mágicamente el procesador cuando intenta acceder a la memoria en comparación con los dispositivos de E / S? Por extensión, ¿cómo sabe el Intel 8088 qué hacer con su pin IO / M si pudiera cambiar fácilmente el orden del espacio de direcciones anterior?