Порты ввода/вывода

Для связи с внешними устройствами процессоры 80×86 используют шину данных и 16 бит шины адреса. Команды обращения к внешним устройствам out и in позволяют записать в порт устройства или прочитать из него 8, 16 или 32 (в зависимости от процессора) бита информации. При обращении ко внешним устройствам процессор вместо сигналов «обращения к памяти» формирует сигналы «обращения к портам».

С учетом используемой разрядности шины адреса нетрудно рассчитать, что всего может поддерживаться 65536 портов ввода/вывода. Однако в устройствах AT зачастую используется несколько модифицированный способ обращения к регистрам. Этот способ подразумевает наличие двух портов, один из которых адресный, а другой — порт данных. Для обращения к некоторым данным требуется сначала занести в порт адреса номер регистра в пределах устройства, а затем прочитать(записать) значение из(в) порта данных.

Прямой способ (один адрес — один регистр) использует, например, порт принтера, последовательные порты; модифицированный (регистр адреса и данных) — звуковую карту AdLib и совместимые с ней; смешанный способ (несколько адресных регистров и несколько регистров данных) — видеокарты VGA и EGA. В них различные блоки (система разверток, блок ЦАП, блок управления адресом, выборки и т. д.) используют собственные пары регистров адреса/данных.

Не все регистры, доступные для чтения, допускают запись (устройство может просто проигнорировать ее), а также не все регистры, доступные для записи, возвращают записанные значения при чтении. Многие устройства при записи любят подставлять регистры, которые по логике работают «на запись», а при чтении по этому же адресу Вы прочитаете значение совершенно другого регистра, который предназначен в данном устройстве для чтения.

Другая особенность некоторых устройств — перекрывающиеся регистры. Например, контроллер IDE по адресу 1F0h имеет 16-битный (в более поздних контроллерах — 32-битный) регистр данных, а по адресу 1F1h — 8-битный регистр ошибок (при чтении) и регистр свойств (при записи). Таким образом, старшая часть регистра данных читается, как бы, из порта по адресу 1F1h, фактически же контроллер различает 16-битный запрос к 1F0h и 8-битный запрос на 1F1h и подставляет различные регистры.

С появлением шины PCI адреса портов устройств не обязаны быть фиксированными. Для старых устройств фиксация сохраняется из соображений совместимости, однако все новые устройства имеют неопределенные адреса. Программа, использующая их, должна обратиться к специальным процедурам BIOS и запросить информацию о текущей настройке устройства.

В приведенной ниже таблице описан ряд портов, наследуемых современными компьютерами еще со времен IBM PC/XT, AT и PS/2.

AT/PS-2 PC/XT Описание
000-01F 000-00F Первый DMA-контроллер
020-03F 020-021 Первый контроллер прерываний
040-05F 040-043 Таймер
060-063 Набор различных устройств
060-06F Контроллер клавиатуры
070-07F Память CMOS и маска NMI
080 Диагностический регистр
080-08F 080-083 DMA-контроллер
0A0-0BF Второй контроллер прерываний
0C0-0DF Второй DMA-контроллер
0F0-0FF Сопроцессор
170-177 Жесткий диск № 2
1F0-1F7 Жесткий диск № 1
200-207 200-20F Игровой адаптер
238-23F Стык RS-232 № 4 (в PS/2)
278-27F 278-27F Параллельный принтер № 2
2C0-2DF 2C0-2DF Видеоадаптер
2F8-2FF 2F8-2FF Стык RS-232 № 2
320-32F Жесткий диск XT
338-33F Стык RS-232 № 3 (в RS/2)
370-377 Контроллер НГМД № 2
378-37F 378-37F Параллельный принтер
3B0-3BF 3B0-3BF Видеоадаптер и принтер
3C0-3CF 3C0-3CF Видеоадаптер
3D0-3DF 3D0-3DF Видеоадаптер
3F0-3F7 3F0-3F7 Контроллер НГМД № 1
3F8-3FF 3F8-3FF Стык RS-232 № 1

Разумеется, в современных ЭВМ используется гораздо большее количество портов.

Оставить комментарий

Вы должны авторизоваться для отправки комментария.