На Z80 есть вывод на микросхеме, который устанавливается (устанавливается в верхнее или логическое состояние 1), когда инструкция является инструкцией IN или OUT. Аппаратное обеспечение, подключенное к микросхеме, контролирует этот контакт, а также контакты чтения / записи, а также некоторые адресные контакты, чтобы определить, относится ли операция к ним. Каждое устройство сконфигурировано для распознавания некоторого числа в качестве номера порта и соответствующего ответа. Итак, когда вы пишете инструкцию на ассемблере, такую как:
OUT(15),A
чип устанавливает младшие 8 адресных контактов на 15 и записывает содержимое регистра A на контакты данных. Если оборудование настроено и правильно подключено, оно знает, что для него предназначено. Аналогично с IN(15),A
В случае ввода-вывода с отображением в память имеется место в памяти, зарезервированное для оборудования. Когда процессор пишет по адресу 0xFFF0, скажем (при условии удобной 8-битной микроархитектуры, такой как 6502 или 6800 или 6809 - или, действительно, Z80), тогда оборудование, подключенное для ответа на этот адрес, не является микросхемой ОЗУ. но устройство. Как правило, есть по крайней мере один соседний адрес, который используется для чтения; иногда один и тот же адрес используется для чтения и записи.
В обоих случаях проблема заключается в том, что оборудование, подключенное к ЦП, распознает определенные схемы активности на контактах микросхем (некоторые контакты управления, контакты данных и контакты адреса) как относящиеся к ним. Вы можете столкнуться с проблемой, если несколько разных устройств считают, что один и тот же адрес или порт ввода / вывода ссылаются на них.
Хотя в качестве примеров я использовал 8-битные микросхемы, те же базовые принципы применимы к 16-битным, 32-битным или 64-битным микросхемам.