Выбрать главу

Программная реализация последовательных протоколов ограничивает скорость передачи данных на уровне 50-150 Кбит/с при работе LPT-порта в стандартном режиме. В режиме EPP или ECP можно достичь скорости и 1–2 Мбит/с, но при этом адаптер несколько усложняется (поскольку в этих интерфейсах требуется одновременно принимать и передавать данные). Решить проблему производительности, а заодно и расширить функциональные возможности позволяет использование специализированных интерфейсных адаптеров для шин PCI или ISA, выпускаемых рядом фирм. Есть и внешние устройства с интерфейсами USB или Ethernet. Правда, цена этих адаптеров и устройств существенно отличается от цены простого адаптера, который можно изготовить и самостоятельно.

Глава 12

Архитектурные компоненты IBM PC-совместимого компьютера

Аппаратные интерфейсы, описанные в книге, в IBM-PC-совместимом компьютере «живут» в специфическом архитектурном окружении. Эту специфику приходится учитывать при проектировании аппаратной части устройств, чтобы обеспечить с ними эффективное программное взаимодействие. В этой главе вкратце рассматриваются особенности процессоров x86 и связанные с этими особенностями распределение памяти, организация ввода-вывода и прерываний. Здесь же рассматривается традиционный контроллер DMA, системные средства измерения времени, а также способы внедрения собственных расширений BIOS и нетрадиционной (бездисковой) загрузки ПО в специализированные компьютеры на базе IBM PC.

12.1. Пространство физической памяти

Основную часть физического адресного пространства PC занимает оперативная память (ОЗУ), начинающаяся с нулевого адреса. В нее вклинивается область адресов A0000h-FFFFFh — Upper Memory Area (UMA), 384 Кбайт — верхняя память, зарезервированная со времен IBM PC для системных нужд. В UMA размещаются области буферной памяти адаптеров шины (E)ISA (например, видеопамять) и постоянная память (BIOS с расширениями). ОЗУ продолжается и за областью UMА. Под самой верхней границей физического адресного пространства имеется образ памяти системной ROM BIOS.

Для доступности сервисов BIOS в реальном режиме все ПК имеют образ ROM BIOS в адресах E0000h-FFFFFh или F0000h-0FFFFFh. Кроме того, образ BIOS должен находиться и под самой верхней границей адресного пространства, поскольку все процессоры х86 по аппаратному сбросу стартуют с адреса начала последнего параграфа памяти (FFFF0h — 8086/88, FFFFF0h — 80286 и 386SX, FFFFFFF0h — 386DX и выше с 32-разрядной шиной адреса, FFFFFFFF0h — P6 и выше с 36-разрядной шиной адреса).

Для компьютеров класса АТ-286 и 386SX с 24-битной шиной адреса верхняя граница оперативной памяти — FDFFFFh (максимальный размер 15,9 Мбайт). Область FE0000h-FFFFFFh содержит образ ROM BIOS, обращение к этой области эквивалентно обращению к ROM BIOS по адресам 0E0000h-0FFFFFh.

Для ПК на процессорах 386DX и выше с 32-битной шиной адреса теоретический предел объема ОЗУ — почти 4 Гбайт, верхний образ BIOS находится в адресах FFFE0000h-FFFFFFFFh. Для ПК на процессорах P6+ с 36-битной шиной адреса предел объема ОЗУ — почти 64 Гбайт и верхний образ BIOS находится в адресах FFFFE0000h-FFFFFFFFFh.

Области физических адресов, не занятые ОЗУ и ROM BIOS, могут быть использованы устройствами шин (E)ISA и PCI (AGP).

Для памяти адаптеров, устанавливаемых в шину ISA, безусловно доступна часть области адресов UMA A0000h-EFFFFh или A0000h-DFFFFh (до начала ROM BIOS). В этой области располагаются и модули расширений BIOS (см. п. 12.7.1). Карты ISA могут иметь память и в области FE0000h-FFFFFFh, но она программно доступна лишь в защищенном (и большом реальном) режимах процессора. Для отображения этой области памяти на шину ISA (а не ОЗУ) в CMOS Setup предусмотрен параметр Memory Hole At 15-16М, но его включение не позволит использовать оперативную память свыше 15 Мбайт.

Поскольку шина ISA имеет 24-разрядную шину адреса, ведущие устройства этих шин (ISA Bus Master) способны обращаться к памяти (ОЗУ и память адаптеров) в пределах первых 16 Мбайт (000000-FFFFFFh). To же ограничение касается и стандартного контроллера DMA, которым могут пользоваться устройства шины ISA (и иные устройства системной платы).

Шина PCI имеет 32-разрядную шину адреса, так что ее ведущим устройствам доступна вся физическая память[5]. Для устройств PCI могут выделяться любые области адресов, свободные от ОЗУ, ROM BIOS и устройств ISA. Области адресов памяти, используемые каждым устройством PCI, описаны в заголовках их конфигурационных пространств. Эти данные требуются при распределении ресурсов и настройке мостов PCI в процессе инициализации шины.

12.2. Пространство ввода-вывода

Пространство ввода-вывода в IBM PC, как и в процессорах х86, отделено от пространства памяти. У всех этих процессоров, в том числе и 32-разрядных, в пространстве ввода-вывода используется 16-разрядная адресация (диапазон адресов 0-FFFFh). Для дешифрации адресов портов в оригинальном PC из 16 бит использовались только младшие 10 (А0-А9), что обеспечивает обращением портам в диапазоне адресов 0-3FFL Старшие биты адреса, хотя и поступают на шину, устройствами игнорируются. В результате обращения по адресам, к примеру 378h, 778h, B78h и F78h, будут восприниматься устройствами одинаково. Это упрощение, нацеленное на снижение стоимости как системной платы, так и схем плат адаптеров, для шины ISA никто не отменял. Традиционные адаптеры для шины ISA, называемые Legacy Card («наследие тяжелого прошлого»), для старших бит адреса не имеют даже печатных ламелей на своем краевом разъеме. Впоследствии перешли к 12-битной адресации устройств шины ISA, но ее приходится применять с оглядкой на возможное присутствие устройств с 10-битной адресацией. В адаптерах для шин MCA и PCI и во всех современных системных платах используются все 16 бит адреса. Карта распределения адресов ввода-вывода стандартных устройств PC приведена в табл. 12.1. Эта карта подразумевает 10-битную дешифрацию адреса. Естественно, что в конкретном компьютере реально присутствуют не все перечисленные устройства, но в то же время там могут оказаться другие, не попавшие в таблицу.

Таблица 12.1. Стандартная карта портов ввода-вывода

AT и PS/2 PC/XT Назначение
000-00F 000-00F Контроллер DMA #1 8237
010-01F   PS/2 — расширение DMA#1
020-021 020-021 Контроллер прерываний #1 — 8259A
040-05F 040-043 Таймер (PC/XT: 8253, AT: 8254)
060 060 Диагностический регистр POST (только запись)
  060-063 Системный интерфейс 8255
060, 064   Контроллер клавиатуры AT 8042
061   Источники NMI и управление звуком
070-07F   Память CMOS и маска NMI
080   Диагностический регистр
080-08F 080-083 Регистры страниц DMA
090-097   PS/2 микроканал, арбитр
  0А0 Маска NMI
0A0-0BF   Контроллер прерываний #2 — 8259A
0C0-0DF   Контроллер DMA #2 8237A-5
0F0-0FF   Сопроцессор 80287
100-1EF   PS/2 управление микроканалом
170-177   Контроллер НЖМД #2 (IDE#2)
1F0-1F7   Контроллер НЖМД #1 (IDE#1)
200-207 200-20F Игровой адаптер
  210-217 Блок расширений
238-23F   COM4
278-27F 278-27F Параллельный порт LPT2 (LPT3 при наличии MDA)
  2A2-2A3 часы MSM48321RS
2C0-2DF 2C0-2DF EGA #2
2E0-2E7   COM4
2E8-2EF   COM4
2F8-2FF 2F8-2FF COM2
300-31F   Плата прототипа
  320-32F Жесткий диск XT
338-33F   COM3
370-377   Контроллер НГМД #2
376-377   Порты команд IDE#2
378-37F 378-37F Параллельный порт LPT1 (LPT2 при наличии MDA)
380-38F 380-38F Синхронный адаптер SDLC/BSC #2
3A0-3AF 3A0-3A9 Синхронный адаптер BSC#1
3B0-3BB 3B0-3BB Монохромный адаптер (MDA)
3B4-3C9   PS/2 видеосистема
3BC-3BF 3BC-3BF Параллельный порт LPT1 платы MDA
3C0-3CF 3C0-3CF EGA#1
3C0-3DF 3C0-3DF VGA
3D0-3DF 3D0-3DF CGA/EGA
3E0-3E7   COM3
3E8-3EF   COM3
3F0-3F7 3F0-3F7 Контроллер НГМД #1
3F6-3F7   Порты команд IDE#1
3F8-3FF 3F8-3FF COM1
вернуться

5

Для пока еще экзотических вариантов системных плат с памятью более 4 Гбайт и 36-разрядной физической адресацией последних моделей процессоров PCI может использовать двухадресные циклы обращения с 64-битным адресом.