Estimado,
Creo que la manera más simple de ver esto es pensando en el obligatorio. En esa CPU, la dirección 0xAAAC está mapeada al registro del timer, y si te fijás, la conexión inhibe la escritura en la RAM. En este sentido, el espacio de direccionamiento de entrada salida se solapa con el espacio de direccionamiento de la memoria, y el registro timer 'le roba' la dirección 0xAAAC a la memoria (esa dirección de memoria no se puede escribir, porque al hacer SAVE 0xAAAC, Reg1, se guarda el contenido de Reg1 en el registro del timer y no en la memoria). Esto es tener la entrada salida mapeada a memoria.
La alternativa consiste en disponer de señales adicionales en el bus de control, que permitan indicar si se quiere realizar una escritura en un dispositivo de entrada salida o en la memoria. Típicamente existen las señales MEM_RD, MEM_WR, IO_RD e IO_WR (IO viene de input/output - entrada/salida). En estas CPUs existen además instrucciones especiales que permiten escribir en el espacio de entrada/salida, típicamente llamadas IN y OUT. Al ejecutar un IN o un OUT, se van a levantar las señales IO_RD o IO_WR respectivamente, mientras que al ejecutar un LOAD o un SAVE, se levantan las señales MEM_RW o MEM_WR respectivamente. Esto permite reutilizar las direcciones, es decir, puede existir un registro de E/S mapeado a la dirección 0xAAAC y también puede ser utilizada la dirección de memoria 0xAAAC. Esto se llama espacio de direccionamiento de entrada/salida aislado.
Lo que mencionás de la última parte es correcto, en ambos casos, en el bus de direcciones aparece la dirección del puerto a leer/escribir, en el bus de datos aparece el dato a leer/escribir en el registro de E/S, y en el bus de control se levantan las señales IO_RW/IO_WR o MEM_RD/MEM_WR según si se utiliza entrada salida aislada o mapeada a memoria respectivamente.
Saludos,
Federico