Приложение А.
Системотехника
IBM PC-совместимых
компьютеров

Здесь рассмотрено взаимодействие программ с интерфейс-
ными адаптерами. Приведены краткие сведения по архитек-
туре PC. Описаны организация пространств памяти и вво-
да/вывода, система прерываний и прямой доступ к памяти.
Более подробные сведения можно найти в книге "Аппарат-
ные средства IBM PC. Энциклопедия" ("Питер", 1998).

А.1. Пространство памяти

Логическая структура памяти PC обусловлена системой ад-
ресации процессоров семейства х86. Процессоры 8086/88,
применявшиеся в первых моделях IBM PC, имели адресное
пространство 1 Мбайт (20 бит шины адреса). Начиная с про-
цессора 80286 шина адреса была расширена до 24 бит, затем
(386DX, 486, Pentium) до 32 и, наконец, до 36 бит
(Pentium Pro, Pentium II). В реальном режиме процессора,
используемом в DOS, формально доступен лишь 1 Мбайт
памяти. Однако из-за ошибки эмуляции процессора 8086 в
реальном режиме процессоры 80286 и выше имеют макси-
мально доступный адрес lOFFEFh, что на (64К-16) байт
больше. Область lOOOOOh-lOFFEFh называется высокой па-
мятью - High Memory Area
(HMA). В нее помещают часть
ОС реального режима и небольшие резидентные програм-
мы. Для полной совместимости с процессором 8086/88 име-
ется вентиль линии А20 шины адреса - GateA20, который
либо пропускает сигнал от процессора, либо принудительно
обнуляет линию А20 системной шины адреса.


Основную часть адресного пространства занимает оператив-
ная память.
Объем установленной памяти определяется те-
стом POST при включении компьютера, начиная с младших
адресов. Натолкнувшись на отсутствие памяти (ошибку), тест
останавливается и сообщает системе объем памяти.

Память, непосредственно адресуемая процессором, распре-
деляется следующим образом:

^ OOOOOh-9FFFFh - Conventional {Base) Memory,
640 Кбайт - стандартная (базовая) память, доступная
DOS и программам реального режима. В некоторых сис-
темах с видеоадаптером MDA верхняя граница сдвигает-
ся к AFFFFh (704 Кбайт). Иногда верхние 128 Кбайт
стандартной памяти (область 80000h-9FFFFh) называют
Extended Conventional Memory.

^ AOOOOh-FFFFFh - Upper Memory Area (UMA),
384 Кбайт - верхняя память, зарезервированная для си-
стемных нужд. В ней размещаются буферы интерфейс-
ных адаптеров (например, видеопамять) и постоянная
память (BIOS с расширениями).

^ Память выше lOOOOOh - Extended Memory -дополнитель-
ная (расширенная) память, непосредственно доступная
только в защищенном режиме компьютеров 286 и выше.

Для компьютеров класса AT с 24-битной шиной адреса верх-
няя граница дополнительной памяти - FDFFFFh (макси-
мальный размер 14,9 Мбайт). Область FEOOOOh-FFFFFFh
содержит ПЗУ BIOS (ROM BIOS Area); обращение к ней
эквивалентно обращению к ROM BIOS по адресам OEOOOOh-
OFFFFFh.

Для процессоров 386 и 32-битной шины адреса теоретичес-
кая верхняя граница - 4 Гбайт, а для Pentium Pro и
Pentium II-64 Гбайт (36-битная шина адреса). Обращение
по адресам, превышающим границу установленной опера-
тивной памяти (или максимально возможного объема),
транслируется на шину PCI, которая имеет 32-битную ад-
ресацию. В компьютерах с 32-разрядной шиной адреса об-
раз BIOS дополнительно проецируется в адреса FFFEOOOOh-
FFFFFFFFh. Иногда используется проекция BIOS в область
FEOOOOh-FFFFFFh, что не позволяет использовать более

11 Зак.№530


16 Мбайт ОЗУ, поскольку система находит только непре-
рывную область расширенной памяти. Для использования
специфических адаптеров ISA, имеющих буфер с адресами
в 16-м мегабайте памяти, в BIOS Setup предусматривают
опцию Memory Hole At 15- 16М. Ее установка не позволяет
использовать оперативную память свыше 16 Мбайт.

Для взаимодействия с интерфейсными адаптерами ISA ин-
тересна верхняя память UMA. Стандартное распределение
верхней памяти выглядит следующим образом:

^ AOOOOh-BFFFFh - Video RAM, 128 Кбайт - видеопамять
(обычно используется не полностью).

^ COOOOh-DFFFFh - Adapter ROM, Adapter RAM,
128 Кбайт - зарезервировано для адаптеров, использую-
щих собственные модули ROM BIOS и/или специаль-
ное ОЗУ, разделяемое с системной шиной.

^ EOOOOh-EFFFFh - свободная область, 64 Кбайт, иногда
занятая под System BIOS.

т FOOOOh-FFFFFh - System BIOS, 64 Кбайт - ROM на
системной плате (в XT используется только FEOOOh-
FFFFFh - 8 Кбайт).

т FDOOOh-FDFFFh - ESCD (Extended System Configuration
Data) - область энергонезависимой памяти, используе-
мая для конфигурирования устройств РпР. Эта область
присутствует только при наличии РпР BIOS; ее положе-
ние и размер жестко не заданы.

В области UMA практически всегда присутствует графичес-
кий адаптер. В зависимости от модели он занимает следую-
щие области:

т MDA RAM - BOOOOh-BOFFFh
т CGA RAM - B8000h-BBFFFh
т EGA ROM - COOOOh-C3FFFh/C7FFFh
m VGA ROM - COOOOh-C7FFFh

m EGA, VGA RAM - AOOOOh-BFFFFh, в зависимости от ви-
деорежима используются следующие области: Graphics -
AOOOOh-AFFFFh; Color Text - B8000h-BFFFFh; Mono
Text -
BOOOOh-B7FFFh.


Распространенным потребителем UMA являются расшире-
ния ROM BIOS,
расположенные на платах дисковых контрол-
леров, адаптеров SCSI, сетевых картах и т. д. Обычно они
занимают область CSOOOh - CBFFFh/C9FFFh/C8FFFh (для
дисковых контроллеров), но могут перемещаться при кон-
фигурировании адаптеров.

А.2. Пространство ввода/вывода

Процессоры х86 имеют раздельную адресацию памяти и пор-
тов ввода/вывода. Инструкции ввода/вывода порождают
шинные циклы обмена, в которых вырабатываются сигналы
IORD# (чтение порта) и IOWR# (запись в порт) на шинах
ввода/вывода. Эти сигналы отличают пространство ввода/
вывода от пространства памяти, где соответствующие опе-
рации чтения и записи вырабатывают сигналы MEMRD# и
MEMWR#. Для обращения к пространству ввода/вывода пред-
назначены четыре основные инструкции процессора: IN (ввод
в регистр), OUT (вывод из регистра), INS (ввод из порта в
элемент строки памяти) и OUTS (вывод элемента из строки
памяти). Последние две инструкции с префиксом повтора
REP используются для быстрой пересылки блоков данных
между портом и памятью. Разрядность слова, передаваемо-
го за одну инструкцию ввода/вывода, может составлять 8, 16
или 32 бита. В зависимости от выравнивания адреса по гра-
нице слова и разрядности шины это слово может переда-
ваться за один или несколько циклов шины.

Сигналы IORD# и IOWR# вырабатываются и в циклах DMA;

в этом случае на шину адреса подается адрес памяти, к кото-
рой производится доступ, а не порта. Для блокировки сраба-
тьшания дешифратора адреса порта в цикле DMA в шине ISA
имеется сигнал AEN. Селективное программное управление
сигналом AENx для каждого слота шины EISA дает возмож-
ность изолировать пространства ввода/вывода портов, что
используется для программного конфигурирования адресов
адаптеров. В шине ISA разделение слотов не предусмотрено,
что объясняет сложность реализации для нее системы РпР.

Для дешифрации адреса в оригинальном PC из 16 бит ис-
пользовались только младшие 10 (АО-А9), что позволяет об-


ращаться к портам 0-3FFh. Старшие биты адреса, хотя и
поступают на шину, устройствами игнорируются. Так, обра-
щение по адресам 378h, 778h, B78h и F78h воспринимается
устройствами одинаково. В адаптерах для шин МСА и PCI
используются все 16 бит адреса. Современные системные
платы полностью дешифруют адрес.

В реальном режиме процессора программе доступно все про-
странство
адресов ввода/вывода. В защищенном режиме (в
частности, в режиме виртуального процессора 86) можно
программно ограничить пространство ввода/вывода, опре-
делив его максимальный размер. Внутри разрешенной обла-
сти доступ может быть разрешен или запрещен для каждого
конкретного адреса. Размер области и карта разрешенных
портов (70 Permission Bitmap) задаются ОС в дескрипторе
сегмента состояния задачи (TSS). При обращении по нераз-
решенному адресу вырабатывается исключение процессора,
обработчик которого определяется ОС. Возможно снятие
задачи-нарушителя. Не исключено, что по обращению к пор-
ту ОС выполнит некоторые действия, создав для програм-
мы иллюзию реальной операции ввода/вывода.

Несколько портов вывода могут иметь совпадающие адреса.
Операции записи они будут отрабатывать нормально. Для
операций считывания ситуация другая. Если несколько пор-
тов ввода имеют совпадающий адрес, при считывании они
передают свои данные на шину. Если они находятся на од-
ной физической шине, возникает конфликт. При прочих рав-
ных условиях для каждого бита шины "побеждает" порт,
выводящий логический ноль. Так, если один порт "хочет"
передать байт OFh, а другой - FOh, то процессор считает OOh.
Если порты находятся на разных физических шинах (напри-
мер, один в ISA, а другой - в PCI), конфликта не будет, по-
скольку шины отделены друг от друга буферами данных.
Каждой шине назначается своя область ввода, и дешифра-
тор, расположенный на системной плате, при чтении откры-
вает соответствующие буферы, так что реально считывают-
ся данные только с одной шины. При записи в порты данные
(и сигнал записи) обычно распространяются по всем ши-
нам компьютера. Адреса Oh-OFFh отведены для устройств
системной платы, чтение по этим адресам не распространя-


ется на шины расширения. Для современных плат со встро-
енной периферией и несколькими шинами (ISA, PCI) рас-
пределением адресов управляет BIOS через регистры кон-
фигурирования чипсета.

Приведенные выше рассуждения справедливы и для про-
странства памяти, но, как правило, они актуальны только
для портов ввода/вывода.

Карта распределения адресов ввода/вывода стандартных
устройств приведена в табл. АЛ. Подразумевается 10-битная
дешифрация адреса.

AT и PS/2

PC/XT

Назначение

000-OOF

000-OOF

Контроллер DMA #1 8237

010-01F

PS/2 - расширение DMA # 1

020-021

020-021

Контроллер прерываний #1 - 8259А

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: микроканал, арбитр и т. д.

ОАО

Маска NMI

OAO-OBF

Контроллер прерываний #2 - 8259А

OCO-ODF

Контроллер DMA #2 8237А-5

OFO-OFF

Сопроцессор 80287

100-1 EF

Управление микроканалом PS/2

170-177

Контроллер НЖМД #2 (IDE#2)

1FO-1F7

Контроллер НЖМД #1 (IDE#1)



AT и PS/2

PC/XT

Назначение

200-207

200-20F

Игровой адаптер

210-217

Блок расширений

238-23F

COM4

278-27F

278-27F

Параллельный порт LPT2
(LPT3 при наличии MDA)

2А2-2АЗ

Часы MSM48321RS

2CO-2DF

2CO-2DF

EGA #2

2ЕО-2Е7

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

3AO-3AF

ЗАО-ЗА9

Синхронный адаптер BSC #1

ЗВО-ЗВВ

ЗВО-ЗВВ

Монохромный адаптер (MDA)

ЗВ4-ЗС9

Видеосистема PS/2

3BC-3BF

3BC-3BF

Параллельный порт LPT1 платы MDA

3CO-3CF

3CO-3CF

EGA#1

3CO-3DF

3CO-3DF

VGA

3DO-3DF

3DO-3DF

CGA/EGA

ЗЕО-ЗЕ7

COM3

3E8-3EF

COM3

3FO-3F7

3FO-3F7

Контроллер НГМД #1

3F6-3F7

Порты команд IDE#1

3F8-3FF

3F8-3FF

СОМ1



А.3. Аппаратные прерывания

Аппаратные прерывания обеспечивают реакцию процессора
на события, происходящие асинхронно по отношению к ис-
полняемому программному коду. Процессоры х86 поддер-
живают таблицу, содержащую определения до 256 процедур
обслуживания прерываний. Немаскируемые прерывания NMI
обрабатываются процессором независимо от состояния флага
разрешения прерывания IF. К ним относятся прерывания,
приходящие по линии NMI, а для процессоров, поддержива-
ющих режим системного управления, еще и по линии SMI#.

Сигнал на линию NMI приходит от схем контроля паритета
памяти, от линии 10СНК шины ISA или SERR# шины PCI.
В машинах класса AT сигнал NMI блокируется до входа про-
цессора установкой бита 7 порта 070h в 1, отдельные источ-
ники - битами 2, 3 порта 061h. Идентифицировать источник
NMI позволяют биты 6, 7 регистра 061h.

В XT NMI вызывается и математическим сопроцессором при
возникновении исключения. Запретить NMI позволяет об-
нуление бита 7 порта OAOh; отдельные источники блокиру-
ются битами 4, 5 регистра 061h; биты 6, 7 регистра 062h
идентифицируют источник.

Обработка маскируемых прерываний может запрещаться ин-
струкцией DI и разрешаться - Е1 (или другим способом воз-
действия на флаг процессора /F). Эти прерывания обслужи-
ваются контроллером, программно-совместимым с 8259А. Он
имеет 8 входов запросов прерываний IRQx от внешних ис-
точников. При обработке запроса контроллер передает по
шине данных 8-битный вектор прерывания, соответствующий
номеру запроса. Этот вектор является индексом, по которо-
му ссылка на процедуру обработки прерывания хранится в
таблице прерываний.

В машинах класса AT используются два контроллера пре-
рываний. Ведущий (первичный) контроллер 8259А#1 обслу-
живает запросы О, 1, 3-7. К его входу 2 подключен ведомый
(вторичный) контроллер 8259А#2, который обслуживает за-
просы 8-15. При этом используется вложенность приорите-
тов - запросы 8-15 со своим рядом убывающих приорите-


тон вклиниваются между запросами 1 и 3 ведущего контрол-
лера, приоритеты запросов которого также убывают с рос-
том номера. В XT один контроллер 8259А обслуживал все 8
линий запросов.

На входы контроллеров прерываний поступают запросы от
системных устройств и плат расширения. Эти линии обо-
значаются как IRQx и имеют общепринятое назначение (табл.
А.2). Прерывания в табл. А.2 расположены в порядке убы-
вания их приоритетов. Номера векторов, соответствующих
линиям запросов контроллеров, система приоритетов и дру-
гие параметры могут задаваться программно при инициали-
зации контроллеров.

Имя (номер)

Вектор

Назначение

NMI

02h

Контроль канала, паритет (в XT - сопроцессор)

0

08h

Таймер (канал 0 8253/8254)

1

09h

Клавиатура

IRQ2

OAh

XT - произвольно,
AT - каскад IRQ8-IRQ15

8

70h

CMOS RTC - часы реального времени

IRQ9

71h

Произвольно

IRQ10

72h

Произвольно

IRQ11

73h

Произвольно

IRQ12

74h

PS/2-Mouse или произвольно

13

75h

Математический сопроцессор

IRQ14

76h

HDC - контроллер НЖМД

IRQ15

77h

Произвольно

IRQ3

OBh

COM2, COM4

IRQ4

OCh

СОМ1, COM3

IRQ5

ODh

XT - HDC,
AT - LPT2, Sound (произвольно)

IRQ6

OEh

FDC - контроллер НГМД

IRQ7

OFh

LPT1 - принтер



Назначение номеров прерываний - процесс двухсторонний:

адаптер должен быть сконфигурирован на использование
конкретной линии шины (джамперами или программно), а
ПО, поддерживающее данный адаптер, должно быть проин-
формировано о номере используемого вектора. Поскольку
прерывания являются дефицитным ресурсом, возникает же-
лание разделить эти линии между несколькими устройства-
ми. Тогда обработчик прерывания устройства, определив, что
источник - не его, вызывал бы обработчик другого устрой-
ства, работающего с той же линией. Однако в шине ISA пре-
рывание вырабатывается по положительному перепаду сиг-
нала
на линии запроса. Такой способ подачи сигнала имеет
меньшую помехозащищенность, чем срабатывание по отри-
цательному перепаду, и отрезает путь к нормальному разде-
ляемому использованию линий, для которого полностью
пригоден способ подачи сигнала по низкому уровню. По-
скольку традиционный контроллер позволяет задавать чув-
ствительность - уровень (Level) или перепад (Edge) - толь-
ко для всех входов одновременно, разделяемые прерывания
на шине ISA неработоспособны. Тем не менее, некоторые чип-
сеты, реализующие контроллеры прерываний, допускают
индивидуальное управление чувствительностью каждого вхо-
да. Тогда при соответствующих возможностях BIOS Setup и
адаптеров разделяемые прерывания технически реализуемы.

При чувствительности к уровню сигнал запроса аппаратно-
го прерывания IRQx должен удерживаться генерирующей
схемой по крайней мерю до цикла подтверждения прерыва-
ния процессором. В противном случае источник прерыва-
ния не будет правильно идентифицирован. Обычно адапте-
ры строят так, что сигнал запроса сбрасывается при
обращении программы обслуживания прерывания к соот-
ветствующим регистрам адаптера.

Для запросов прерывания с шины PCI используются 4 ли-
нии, которые обозначают как INTR А, В, С, D. Возможно их
разделяемое использование. Линии циклически сдвигаются в
слотах (рис. А.1) и независимо коммутируются на доступные
IRQx с помощью конфигурационных регистров чипсета.
Линии IRQx, используемые шиной PCI, недоступны для шины
ISA. "Дележку" линий между шинами, а также управление


чувствительностью отдельных линий вьшолняют настройки
BIOS Setup, а также система РпР. В опциях настройки ISA
или Legacy
подразумевают использование линий IRQx тради-
ционными адаптерами шины ISA (статическое распределение),
a PCI/PnP - адаптерами шины PCI или адаптерами РпР для
шины ISA (динамическое распределение).

81.jpg

А.4. Прямой доступ к памяти и прямое
управление шиной

Прямой доступ к памяти - DMA (Direct Memory Access) -
метод обмена ПУ с памятью без участия процессора. В обыч-
ном программном обмене (PIO) при пересылке блока дан-
ных, например, из порта в память (инструкция REP INSB),
выполняются следующие действия:

^ Процессор генерирует шинный цикл чтения порта, выстав-
ляя его адрес и формируя сигнал IORD#. Данные из порта
считываются процессором во внутренний шинный буфер.

т Процессор генерирует шинный цикл записи в память,
выставляя адрес ячейки и формируя сигнал MEMWR#.
Данные из внутреннего шинного буфера записываются в
память.

^ Эти шаги автоматически повторяются с изменением ад-
реса памяти. Количество повторов задается в регистре СХ,


инкремент/декремент адреса - флагом DF. Во время пе-
редачи всего блока процессор занят.

В режиме прямого доступа к памяти процессор инициали-
зирует контроллер прямого доступа к памяти - задает на-
чальный адрес, счетчик и режим обмена, после чего осво-
бождается. Обмен производит контроллер и выполняет его
несколько иначе. Контроллер имеет несколько каналов. Для
интерфейса ПУ каждый канал представляется парой сигна-
лов: запрос обмена - DRQx и подтверждение обмена -
DACKx#. В операциях по каналу DMA адрес порта не фигу-
рирует, а используется только пара сигналов, соответствую-
щая номеру канала. Цикл передачи блока в память будет
выглядеть следующим образом (рис. А.2):

1. По сигналу DRQx контроллер запрашивает управление
шиной и дожидается его предоставления процессором
(и другими контроллерами шины).

2. Контроллер выставляет адрес ячейки памяти и форми-
рует в одном цикле шины сигналы IORD#, DACKx# и
MEMWR#. Сигнал DACKx# указывает на то, что операция
выполняется для канала "х", a IORD# - на направление в
канале (для пересьыки из памяти в канал использовался
бы сигнал IOWR#). Чтобы по сигналу IORD# не было лож-
ного чтения (по IOWR# - ложной записи) порта, адрес
которого совпадает с адресом памяти, присутствующим
в цикле DMA, контроллер высоким уровнем сигнала AEN
запрещает портам дешифрацию адреса. Байт, считанный
из канала, в том же цикле шины записывается в ячейку
памяти.

3. Контроллер модифицирует счетчик адреса и повторяет
шаги 1-2 для каждого следующего сигнала DRQx, пока не
будет исчерпан счетчик циклов. В последнем цикле об-
мена контроллер формирует общий сигнал окончания ТС
(Terminate Count), который может быть использован
устройством для формирования сигнала аппаратного пре-
рывания.

Обратная пересылка отличается только тем, что использу-
ются сигналы IOWR# и MEMRD#.


82.jpg

Рис. А.2. Цикл обмена DMA

Процессор при обмене занят только инициализацией кон-
троллера, которая сводится к записи в его регистры несколь-
ких байт. Затем обмен производят системная шина и кон-
троллер. Если выбранный режим обмена не занимает всей
пропускной способности шины, во время операций DMA
процессор может продолжать работу.

Прямой доступ к памяти был использован еще в PC/XT,
где применялась микросхема четырехканального контролле-
ра DMA
18237А. Контроллер имеет 16-разрядные регистры
адреса и счетчики, что позволяет программировать переда-
чу блоков до 64 Кбайт. Для доступа к пространству разме-
ром в 1 Мбайт применили внешние 4-разрядные регистры
страниц DMA, отдельные для каждого канала. В них хра-
нятся биты адреса А[19:16], а битами А[15:0] управляет кон-
троллер. При достижении регистром-счетчиком адреса зна-
чения FFFFh следующее его значение будет OOOOh, а внешний
регистр адреса страницы останется неизменным. Таким об-
разом, если блок начинается не с границы страницы памяти
размером в 64 Кбайт, возможно его "сворачивание в кольцо".
Но если для процессоров 80х86 в реальном режиме "свора-
чиваемые" сегменты могут начинаться с адреса, кратного 10h,
то при прямом доступе границы "сворачиваемого" сегмента
кратны 1 OOOOh. Этот эффект обязательно необходимо учи-


тывать при программировании прямого доступа - блок, пе-
ресекающий границу, должен пересылаться за два сеанса
DMA, между которыми канал (включая регистр страниц)
должен быть повторно инициализирован.

Из четырех каналов DMA XT на шине ISA доступны толь-
ко три (1, 2 и 3). Канал 0 используется для регенерации ди-
намической памяти, адрес регенерируемой строки берется с
линий адреса ISA. Каналы 1, 2 и 3 обеспечивают побайтную
передачу данных и называются 8-битными каналами DMA.

В архитектуре AT подсистему DMA расширили, добавив вто-
рой контроллер 8237А. Его подключили к шине адреса со
смещением на 1 бит. 16-битные регистры адреса способны
управлять линиями адреса А[16:1], младший бит адреса АО
всегда нулевой. Таким образом, второй контроллер передает
данные только по два байта, поэтому его каналы названы
16-битными. За один сеанс второй контроллер способен пе-
редать до 64 К 16-разрядных слов. Регистры страниц для всех
каналов DMA у AT расширены до 8 бит, что делает доступной
для любого канала область памяти размером 16 Мбайт (0-
FFFFFFh). Эффект "сворачивания" сегментов в каналах пря-
мого доступа сохраняется, только для каналов 5, 6 и 7 "коль-
ца" имеют размер 64 К слов и границы, кратные 20000h.
Микросхемы контроллеров 8237А включены каскадно, и ка-
нал 4 недоступен - через него подключается первый контрол-
лер. Стандартное назначение каналов приведено в табл. А.3.

Кроме увеличения числа каналов в AT ввели управление
тиной ISA - Bus-Mastering -
со стороны адаптера. Оно опи-
рается на контроллер DMA, выполняющий в данном случае
функции арбитра шины. Для получения управления шиной
адаптер посылает запрос по линии DRQx (только для кана-
лов 5-7) и, получив подтверждение DACKx, устанавливает
сигнал MASTERS. Теперь шиной ISA управляет он, но не
имеет права занимать шину более чем на 15 мкс за сеанс.
В противном случае нарушится регенерация памяти. Интел-
лектуальный контроллер может выполнять более эффектив-
ные процедуры обмена, чем стандартный DMA.

Управление шиной используют высокопроизводительные
адаптеры SCSI и локальных сетей, а также интеллектуаль-


ные графические адаптеры. Однако архитектурой шины до-
ступное им пространство ограничено 16 Мбайт.

Ограничения на доступную память для "чистого" режима
DMA в новых компьютерах снимаются применением расши-
ренных регистров страниц, но об этом должно "знать" ПО.

На шине EISA каналы DMA могут работать в 8-, 16-
и 32-битном режиме и, используя все 32 разряда шины ад-
реса, иметь доступ ко всей памяти компьютера. Каждый ка-
нал программируется на 1 из 4 типов цикла передачи:

^ Compatible - полностью совместим с ISA.

sii Type A - сокращенный на 25% цикл: время одиночного
цикла 875 нс, в блочном режиме время цикла 750 нс. Ра-
ботает почти со всеми ISA-адаптерами с большей скоро-
стью.

^ Type В - сокращенный на 50% цикл (750/500 нс на цикл),
работает с большинством EISA-адаптеров и некоторыми
ISA. Возможен только с памятью, непосредственно до-
ступной контроллеру шины EISA (то есть с памятью на
адаптерах EISA и системной, если EISA является основ-
ной шиной). Если декодированный адрес памяти отно-
сится к 8/16-битной памяти ISA, то контроллер DMA
EISA автоматически переводится в режим Compatible.

т Type С (Burst Timing) - сокращенный на 87,5% цикл,
ориентированный на пакетный режим передачи. Работа-
ет с быстрыми EISA-адаптерами. При обмене 32-битных
устройств с 32-битной памятью позволяет развить ско-
рость обмена до 33 Мбайт/с.

^ В PCI-системах для обмена с устройствами системной пла-
ты (Fast ATA-2 или E-IDE-порты) возможно использова-
ние DMA Type F, при котором между соседними циклами
интервал не должен превышать 3 тактов шины (360 нс).
Для разгрузки системной шины используется 4-байтный
буфер. Режим F может работать только в режиме одиноч-
ной передачи или по запросу и исключительно с инкре-
ментом адреса. На самой шине PCI адаптеры могут ис-
пользовать режим прямого управления шиной, для чего
имеется специальный протокол арбитража.


Номер канала DMAft

о

1

2

3

4

5

Q

7

Стандартное
назначение

XT

MRFR*

-

FDD

HDD

Отсутствуют

AT

-

SDLC*

FDD

HDD*

Каскад

-

-

-

Разрядность, байт

1

2 с четного адреса

Максимальный размер блока

64 Кбайта

128 Кбайт, четный

Граница блока

Кратна lOOOh

Кратна 2000h

Регистр страниц

4 бит А16-А19

7 бит А17-А23

Адреса регистров:
страниц

начального адреса (W)
текущего адреса (R)

начального счетчика (W)
текущего счетчика (R)

087

083

081

082

08F

08В

089

087

000

002

004

006

ОСО

ОСА

ОС8

осе

001

003

005

007

ОС2

ОС6

ОСА

ОСЕ


* SDLC-адаптер устанавливается редко.
HDD-контроллер в AT DMA обычно не использует.
Канал 0 в XT используется для регенерации памяти (MRFR).
Канал 4 доступен только в PS/2 МСА.


А.5. Обмен данными

Открытая архитектура PC предрасполагает использование
различных адаптеров расширения. Чаще всего ПО общается
с адаптерами через порты ввода/вывода, используя преры-
вания, прямой доступ к памяти и непосредственное управ-
ление шиной. Связь через область памяти, к которой при-
писан адаптер, для "нештатных" адаптеров применяется
редко. Выбор способа связи определяется пропускной спо-
собностью, временем отклика на события, происходящие в
адаптере, и допустимой загрузкой процессора.

Программно-управляемый обмен подразумевает следующие
действия:

^ операцию чтения регистра состояния устройства для ана-
лиза его готовности;

^ ожидание готовности (зацикливание предыдущего шага);

^ обмен байтом или словом данных.

Такой обмен сильно загружает процессор, особенно если про-
грамма формирует управляющие сигналы обмена. Так, напри-
мер, работает драйвер параллельного порта в стандартном ре-
жиме, когда строб данных формируется двумя инструкциями
OUT. В результате пропускная способность такого порта в за-
висимости от процессора может быть порядка 150 Кбайт/с.
Если разгрузить процессор от анализа готовности и форми-
рования строба, как, например, в ЕРР-режиме параллельного
порта, то производительность порта можно повысить на по-
рядок. Такой режим обмена программно-управляемым назы-
вать некорректно - это режим программного ввода/вывода с
аппаратным контролем потока,
где темп обмена определяет
подключенное устройство. Высокоскоростные режимы PIO
применяются в интерфейсе IDE. Они используют инструк-
ции блочной пересылки REP INS/OUTS, при которых процес-
сор пересылает данные между портом и областью памяти за
минимальное количество тактов системной шины. Посколь-
ку такую скорость ПУ обычно не воспринимают, контроллер
интерфейса "притормаживает" обмен до разумных скоростей,
определяемых режимом обмена. Параметры этих режимов,
называемых PIO Mode, приведены в табл. 6.10.


Обмен по прямому доступу к памяти (как и режим прямого
управления шиной)
в наименьшей степени загружает процес-
сор - он занимается лишь анализом состояния и инициали-
зацией канала DMA, но не передачей данных. Время откли-
ка на запрос, когда контроллер "заряжен" на обмен, не
превышает сотен наносекунд. Однако скорость стандартно-
го канала DMA ограничена значением 2/4 Мбайт/с в зави-
симости от разрядности канала. Производительность в ре-
жимах прямого управления шиной обычно выше, чем у
стандартных каналов DMA. Прогрессивные режимы DMA
обеспечивают более высокие скорости обмена: Ultra DMA -
до 33 Мбайт/с.

Обсудим теперь инициализацию и синхронизацию. Инициа-
тором обмена выступает или ПО, или ПУ. Программа ожи-
дает какого-либо события в ПУ, периодически читая его ре-
гистр состояния. Такой способ называется обменом по опросу
готовности.
Время реакции может составлять доли мик-
росекунды, когда программа опрашивает устройство моно-
польно. Однако при этом процессор загружен бесполезной
работой. Другой подход - использование аппаратных пре-
рываний, вырабатываемых устройством по событиям, тре-
бующим внимания программы. Программные обработчики
аппаратных прерываний инициализируют блочный обмен
или выполняют одиночную операцию пересылки. Время ре-
акции зависит от множества факторов, включая режим ра-
боты процессора. В защищенном режиме прерывание при-
водит к автоматическому сохранению контекста задачи в
стеке и переключению задач. Эти действия связаны с ин-
тенсивным обменом с памятью, так что отклик может до-
стигать десятков микросекунд или гораздо больше, если за-
действована виртуальная память. В реальном режиме
процессора ответ на прерывание приходит за единицы мик-
росекунд.

Возможно комплексное решение - опрос готовности уст-
ройств по периодическим прерываниям, например, от сис-
темного таймера - polling. Готовое устройство обслуживает-
ся, неготовое - пропускается до следующего прерывания.
Процессор не выполняет бесполезных циклов опроса, а за-
нимается другими задачами. Правда, расходы на обслужи-


вание прерываний остаются, а максимальное время реакции
на событие не может быть меньшим, чем период таймера.
Так работает утилита фоновой печати PRINT.

Активное использование прерываний характерно для мно-
гозадачных ОС.

А.6. Распределение системных ресурсов

Спецификация ISA требует, чтобы всем картам назначались
свои системные ресурсы - области адресов в пространствах
памяти и ввода/вывода, линии запросов прерываний и ка-
налы прямого доступа к памяти. Платы не должны кон-
фликтовать по ресурсам. Задача конфигурирования ослож-
няется из-за отсутствия общего механизма автоматической
передачи установленных параметров прикладному и систем-
ному ПО. Конфигурирование адаптеров выполняется пере-
ключением джамперов, затем установленные параметры за-
носятся в конфигурационные файлы.

Применение энергонезависимой памяти (NVRAM или ее
разновидности - EEPROM), хранящей настройки, облегча-
ет конфигурирование. С соответствующими адаптерами по-
ставляется утилита настройки. Отсюда их названия: Software
Configured
(программно конфигурируемые) или Jumperless
(без джамперов). Утилита может проверить выбираемые
установки на отсутствие конфликта, однако достоверность
обнаружения конфликта относительна. Некоторые программ-
но конфигурируемые адаптеры все же имеют джамперы, что
бывает полезно для установки типовой настройки, устраня-
ющей конфликты (например, наложение областей памяти се-
тевого адаптера и видеопамяти). Преимуществом NVRAM
является также отсутствие необходимости в конфигураци-
онных файлах.

Ключевым моментом в автоконфигурировании является изо-
ляция карты от остальных. Тогда ПО конфигурирования
сможет вести с картой диалог, на который не влияет при-
сутствие других устройств. Изоляция карт при конфигури-
ровании заложена в шины МСА, PCI и EISA. В EISA для
каждого слота возможно программное селективное управле-


ние сигналом AEN, запрещающим дешифрацию адресов пор-
тов ввода/вывода. В системе с шиной EISA имеется энерго-
независимая память конфигурирования слотов. Необходи-
мо также обеспечить единый метод двухстороннего обмена
конфигурационной информацией между картой и ПО.

В шину PCI автоматическое конфигурирование установлен-
ных адаптеров заложено изначально. Здесь конфигурирова-
нию также подлежат мосты шины (PCI Bridge) - аппарат-
ные средства подключения PCI к другим шинам. Host
Bridge -
главный мост - используется для подключения к
системной шине. Peer-to-Peer Bridge - одноранговый мост -
используется для соединения двух шин PCI (дополнитель-
ные шины PCI позволяют увеличить количество подключа-
емых устройств). При конфигурировании мостов указыва-
ется распределение системных ресурсов по шинам, которые
они связывают. Таким образом, задаются пути транслирова-
ния управляющих сигналов по шинам и управление буфе-
рами данных, обеспечивая для каждого адреса памяти или
ввода/вывода единственную шину назначения, по крайней
мере для операций чтения (операции записи могут быть
широковещательными). Подобная "маршрутизация" необ-
ходима и для сигналов запросов прерываний (каналы DMA
к шине PCI отношения не имеют).

Среди устройств РпР (для шин ISA и PCI) выделяется класс
динамически конфигурируемых устройств DCD (Dynamically
Configurable Device).
Ресурсы, используемые ими, динами-
чески переназначаются, не требуя перезагрузки ОС. Если
устройство DCD находится в заблокированном состоянии
(Locked DCD),
его ресурсы не могут быть изменены.

Полная поддержка РпР предусматривает наличие РпР BIOS,
плат расширения РпР и/или модулей на системной плате.
Для хранения информации о системных ресурсах необходи-
мо было стандартизовать способы представления конфигу-
рации. В декабре 1994 года компании Compaq, Intel и Phoenix
опубликовали версию 1.03 документа "Extended System
Configuration Data Specification" ("Спецификация расширен-
ных данных о системной конфигурации"), определяющего
методы взаимодействия и структуры данных памяти для


конфигурации устройств ESCD. Данные ESCD хранятся в
энергонезависимом хранилище информации NVS (Non-
volatile Storage). Это может быть память NVRAM или файл
данных для ISA-систем, не имеющих поддержки РпР.
NVRAM может отображаться на область (верхней) памяти,
как полностью, так и постранично. Способ доступа к ESCD
определяется вызовом специальной функции РпР BIOS.

ESCD разрабатывалась на основе форматов описания уст-
ройств шины EISA, в которой имеется специальная энерго-
независимая память и утилиты конфигурирования ECU
(EISA Configuration Utility). Все устройства описываются
через слоты - специальные структуры данных. В стандарте
EISA слот 0 используется для описаний устройств ISA, раз-
мещенных на системной плате. Слоты 1-15 соответствуют
физическим слотам расширения шины EISA, слоты 16-64
определены для виртуальных (не связанных с конкретным
физическим слотом шины) устройств. В ESCD сохранено
примерно то же назначение слотов. Так устройства шины
PCI (включая мосты) описываются слотами 16-64.

С данными ESCD взаимодействует РпР BIOS, а также ОС,
поддерживающая РпР. ACFG BIOS (Auto-Configuration BIOS)
имеет поддержку РпР, в частности автоконфигурирование.
Конфигурированием устройств DCD, которые не были скон-
фигурированы ACFG BIOS во время POST, занимается ме-
неджер конфигурирования, являющийся частью системного
ПО. Каждая РпР-плата сообщает менеджеру конфигуриро-
вания о потребностях и возможных диапазонах настройки
ресурсов. Для обычных (Legacy) плат ISA информация в
ESCD заносится с помощью диалоговой утилиты конфигу-
рирования ICU (ISA Configuration Utility). Таким образом,
конфигурирование плат РпР выполняется автоматически, а
обычных карт - джамперами или утилитами.

А.7. Спецификация РпР для шины ISA

Для изоляции карт ISA, программного распределения сис-
темных ресурсов, конфигурирования и передачи параметров
ОС и прикладному ПО компаниями Intel и Microsoft была
выработана спецификация "Plug and Play ISA Specification";


версия l.Oa была опубликована в мае 1994 года. Рассмотрим
реализацию РпР с точки зрения аппаратных средств.

Конфигурирование в системе РпР состоит из следующих
шагов:

^ Производится изоляция одной карты от всех остальных.
^ Карте назначается CSN (Card Select Number).

^ С карты считываются данные о сконфигурированных и
поддерживаемых ресурсах.

Эти шаги повторяются для всех карт, после чего:

^ производится распределение системных ресурсов, выде-
ляемых каждой карте;

^ каждая карта конфигурируется согласно выбранному рас-
пределению ресурсов и переводится в рабочий режим.

Все шага конфигурирования выполняет POST, если BIOS име-
ет поддержку РпР, или ОС при загрузке. РпР BIOS может
ограничиться конфигурированием и активацией устройств,
участвующих в загрузке. BIOS без поддержки РпР может ис-
пользовать необходимые для загрузки устройства, сконфигу-
рированные с параметрами по умолчанию, а всем остальным
занимается ОС. Конфигурирование выполняется в специаль-
ном состоянии плат, в которое их можно программно переве-
сти специальным ключом инициализации, защищающим кон-
фигурационную информацию от случайного разрушения.

Для конфигурирования карт РпР необходимы три 8-битных
системных порта (табл. А.4), с которыми процессор обща-
ется по инструкциям ввода/вывода с однобайтной передачей
данных. Карты РпР должны использовать 12-битное декоди-
рование адреса ввода/вывода, а не 10-битное, как в тради-
ционных картах ISA.

Порт ADDRESS используется для адресации регистров РпР,
запись в него производится перед обращением к портам
WRITE_DATA и READ_DATA. Он же применяется для записи
последовательности кодов ключа инициализации. Выбор ад-
реса для него обусловлен тем, что "разумные" карты рас-
ширения не будут использовать для записи адрес регистра
состояния стандартного LPT-порта.


Порты WRITEJDATA и READ_DATA используются для обмена
данными с регистрами РпР. Адрес порта WRITEJDATA тради-
ционными картами с 10-битным декодированием будет вос-
приниматься как адрес предыдущего порта, так что конф-
ликт исключен. Перемещаемому адресу порта READJDATA ПО
РпР во время протокола изоляции может легко найти бес-
конфликтное положение. Адрес этого порта сообщается всем
картам записью в их управляющий регистр РпР.

Имя порта

Адрес

Тип доступа

ADDRESS

0279h (Printer status port)

Только запись

WFIITEDATA

OA79h (Printer status port + 0800h)

Только запись

READDATA

Перемещаемый в диапазоне 0203h-
03FFh

Только чтение


В конфигурационный режим логика РпР переводится клю-
чом инициализации {Initiation key).
Ключ представляет со-
бой предопределенную последовательность записей в порт
ADDRESS. Аппаратная логика карты, проверяющая ключ,
основана на сдвиговом регистре с обратными связями LFSR
(Linear Feedback Shift Register),
схема которого приведена на
рис. А.3. Во время проверки ключа на вход С1 подается уро-
вень логического 0, а на вход С2 - стробы записи в порт
ADDRESS. Логика, не показанная на рис. А.3, сравнивает код
в сдвиговом регистре с текущей записью и при несовпаде-
нии сбрасывает LFSR в исходное состояние (код 6Ah). В это
же состояние регистр переводится двумя последовательны-
ми записями нулей в порт ADDRESS. Сдвиг в регистре про-
исходит при каждой записи в порт ADDRESS. Если ключ
(последовательность из 32 записей требуемых байт) будет
приложен верно, после последней записи логика карты пе-
рейдет в режим конфигурирования и подготовится к отра-
ботке протокола изоляции. Точная последовательность байт
ключа в hex-формате выглядит следующим образом:

6А. В5. DA, ED. F6. FB. 7D. BE. DF. 6F. 37. IB. OD. 86, СЗ. 61.
ВО. 58. 2С, 16. 8В. 45. А2. Dl. E8. 74, ЗА. 9D. СЕ. Е7. 73. 39.


83.jpg

Рис. А.3. Сдвиговый регистр LFSR карты РпР

Протокол изоляции основан на идентификаторе Serial
Identifier,
хранящемся в памяти каждой карты РпР. Этот
идентификатор представляет собой ненулевое 72-битное чис-
ло, состоящее из двух 32-битных полей и 8-битного конт-
рольного кода, вычисляемого с помощью регистра LFSR.
Первое 32-битное поле представляет собой идентификатор
производителя. Второе поле назначается производителем
каждому экземпляру. Здесь может присутствовать серийный
номер; для адаптера Ethernet это может быть частью МАС-
адреса. Принцип построения идентификатора гарантирует,
что в одной системе не могут встретиться две карты с сов-
падающими идентификаторами. Доступ к идентификатору
осуществляется последовательно, начиная с бита 0 нулевого
байта идентификатора производителя и заканчивая битом 7
контрольной суммы. Во время передачи идентификатора на
вход С1 схемы LFSR поступают текущие биты идентифика-
тора, а на вход С2 - стробы чтения регистра SerialJsolation.
В тактах передачи контрольной суммы ее биты берутся с
выхода сдвигового регистра.

Протокол изоляции программно инициируется в любой мо-
мент времени посылкой ключа инициализации, переводящего
все карты в конфигурационный режим. В этом режиме каж-
дая карта ожидает 72 пары операций чтения порта
READ_DATA. Ответ каждой карты на эти операции опреде-
ляется значением очередного бита ее идентификатора.

Если текущий бит идентификатора карты имеет единичное
значение, ее буфер шины данных в первом чтении пары вы-
водит на шину значение 55h. Если текущий бит нулевой, то


буфер работает на чтение шины и логика карты анализиру-
ет ответ других карт - проверяет наличие комбинации 01 в
битах D[1:0] (младшие биты 55h). В следующем цикле чте-
ния пары карта с единичным битом выводит число AAh, a
карта с нулевым текущим битом проверяет наличие комби-
нации 10 в битах D[1:0] (младшие биты AAh). Если карта,
просматривающая вывод данных другими картами, обнару-
жила корректные коды в обоих циклах чтения пары, она в
данной итерации изоляции исключается. Если карта в теку-
щей паре управляла шиной или читала шину, но не обнару-
жила корректных активных ответов других карт, она сдви-
гает идентификатор на один бит и готовится к приему
следующей пары циклов чтения. Эта последовательность
выполняется для всех 72 бит идентификатора. В конце про-
цесса останется лишь одна карта. Записью в управляющий
регистр ей назначается номер CSN, по которому она будет
использоваться в дальнейших операциях. Карта с назначен-
ным CSN в следующих итерациях протокола изоляции не
участвует (на пары чтений не отвечает).

Во время протокола изоляции карты не имеют права удли-
нять шинные циклы с помощью сигнала IOCHRDY, посколь-
ку это привело бы к неопределенности результатов наблю-
дения за "соседями".

Программа конфигурирования проверяет данные, возвращае-
мые во время пар циклов чтения, и побитно собирает про-
читанный идентификатор. Если в паре приняты байты 55h
и AAh, соответствующий бит считается единичным, в дру-
гих случаях - нулевым. При приеме идентификатора про-
грамма подсчитывает контрольную сумму и сравнивает ее с
принятой. Несовпадение или отсутствие среди принятых
байт 55h и AAh указывает на то, что выбранный адрес пор-
та READ_DATA конфликтует с каким-либо устройством. Тог-
да программа производит итерацию, переместив адрес пор-
та READ_DATA в допустимом диапазоне адресов. Если при
переборе адресов не удается считать корректного идентифи-
катора, принимается решение об отсутствии карт РпР в си-
стеме (вообще или с неназначенными CSN).

Программа должна обеспечить задержку 1 мс после подачи
ключа перед первой парой чтений и 250 мкс между парами


чтений. Это дает карте время для доступа к информации,
которая может храниться в медленных устройствах энерго-
независимой памяти.

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

Обращения к регистрам РпР представляют собой операции
записи/чтения портов ввода/вывода по адресам WRITE_DATA/
READ_DATA
соответственно. При этом для указания конк-
ретного регистра РпР используется индекс - номер регист-
ра, предварительно записанный в регистр ADDRESS.

Каждая карта имеет стандартный набор регистров РпР; часть
из них относится к карте в целом, а часть - к логическим
устройствам (ЛУ), входящим в карту. В любой момент вре-
мени в индексном пространстве регистров РпР отобража-
ются общие регистры карты и регистры только одного ЛУ
(рис. А.4). Выбор ЛУ, с которым производится общение, осу-
ществляется записью в регистр Logical Device Number.

84.jpg

Рис. А.4. Конфигурационные регистры РпР (* - определяется
разработчиком)


С точки зрения системы РпР карта пребывает в некотором
состоянии. Состояние Isolate используется в протоколе изо-
ляции, описанном выше.

Программирование карты начинается с команды
WAKE[CSN] - записи байта CSN в регистр с индексом 3. Эта
операция переводит карту с указанным CSN в состояние
Config (конфигурирование), а остальные карты переходят в
состояние Sleep. Для карты выполняются операции чтения
ее конфигурационной информации (как карты в целом, так
и Л У) и программирования используемых ресурсов. Про-
граммирование каждого ЛУ завершается установкой его бита
активации, после чего оно активизируется на шине ISA. Про-
граммирование всей карты завершается переводом ее в со-
стояние Wait/or key (ожидание ключа). По окончании кон-
фигурирования все карты РпР должны быть переведены в
это состояние - тогда их случайное реконфигурирование
будет блокировано 32-байтным ключом.

Доступ к регистрам РпР через ключ возможен в любое вре-
мя. Возможно переназначение CSN "на ходу" - это требует-
ся в устройствах, допускающих динамическое включение/
выключение, док-станциях (Docking Stations) и при управ-
лении энергопотреблением.

Все ЛУ карт РпР должны обеспечивать следующую мини-
мальную функциональность:

^ Регистры ресурсов при чтении должны отражать факти-
ческие текущие настройки.

^ Бит активации при чтении должен отражать правдивое
состояние активности устройства на шине ISA.

ш Если программа пытается "навязать" карте неподдержи-
ваемую конфигурацию, устройство не должно активиро-
ваться; соответственно, при чтении его флаг активации
должен быть сброшен.

Стандартные регистры управления картой (табл. А.5) исполь-
зуются для адресации карты и ее ЛУ, а также для чтения кон-
фигурационной информации (дескрипторов). Дескрипторы
ресурсов могут быть считаны побайтно из регистра Resource
Data.
При этом могут использоваться данные в короткой или


длинной форме. Короткая форма (Small Resource Data Type)
допускает дескрипторы до 7 байт, длинная форма (Large
Resource Data Type)
- до 64 Кбайт. Форма дескриптора и имя
описываемого ресурса определяются первым байтом дескрип-
тора. Его последующие байты описывают требуемые ресурсы
и возможные варианты (диапазоны) конфигурирования.

Регистр

Индекс и тип

Назначение

SetRD DATA
Port

OOh.WO

Установка адреса порта для чтения.
Биты [7:0] задают значение бит [9:2]
адреса порта READJDATA. Только
для записи

Serial Isolation

01 h, RO

Чтение этого регистра в состоянии
Isolation приводит к побитному ана-
лизу идентификатора

Config Control

02h,WO

Бит [2]- сброс CSN в 0
Бит [1] - возврат в состояние Wait
forKey
Бит [0] - сброс всех ЛУ и перевод
конфигурационных регистров в со-
стояние включения питания, но CSN
сохраняется.
Эти биты не запоминаются, так что
необходимости в их программном
сбросе нет

Wake[CSNJ

03h,WO

Запись в этот регистр приведет карту
с записываемым байтом CSN к
переходу из состояния Sleep в со-
стояние Config (если данные не ну-
левые). Запись нулевого байта
переводит все карты в состояние
Isolation. Указатель последовательно
считываемых байт сбрасывается

Resource Data

04h,RO

Чтение этого регистра возвращает
очередной байт информации о ре-
сурсах. Перед чтением должен опра-
шиваться регистр Status

Status

05h, RO

Регистр состояния. Единичное
значение бита [0] указывает на воз-
можность чтения очередного байта
ресурсов



Регистр

Индекс и тип

Назначение

Card Select
Number

06h,RW

Регистр хранения селективного адре-
са CSN, обеспечивающего выбор кон-
кретной карты командой Wake[CSN]

Logical Device
Number

07h, RW

Выбор текущего ЛУ, к которому отно-
сятся вое операции обмена конфигу-
рационной информацией, проверки
диапазона адресов ввода/вывода и ак-
тивации. Если карта имеет одно
устройство, регистр допускает только
чтение и всегда имеет нулевое значение

Card Level
Reserved

08h-lFh

Зарезервированы

Card Level,
Vendor Defined

20h-2Fh

Используются по усмотрению произ-
водителя


Регистр

Индекс и тип

Назначение

Activate

30h,RW

Регистр активации:
Бит [0] единичным значением раз-
решает активность ЛУ на шине ISA.
Биты [7:1] зарезервированы, при
чтении должны возвращать нули.
Перед активацией проверка диапа-
зона адресов ввода/вывода должна
быть запрещена

I/O Range
Check

31 h, RW

Регистр проверки диапазона адресов
ввода/вывода:
Биты [7:2] зарезервированы, при чте-
нии должны возвращать нули
Бит [1] - разрешение проверки
Бит [0] - управление диагностичес-
ким ответом:
О-ответААп,
1 - ответ 55h

Logical Device
Control
Reserved

32h-37h

Зарезервированы

Logical Device
Control Vendor
Defined

38h-3Fh

Используются по усмотрению произ-
водителя



Стандартные регистры управления ЛУ (табл. А.6) исполь-
зуются для активации карт и проверки отсутствия конф-
ликтов на шине ISA в выбранном диапазоне адресов ввода/
вывода. Когда включен режим проверки конфликтов, на чте-
ние по любому адресу установленного диапазона портов вво-
да/вывода ЛУ отвечает байтом 55h или AAh в зависимости
от состояния бита 0 регистра проверки диапазона адресов.
В рабочем режиме этот "автоответчик" отключен.

Оперативные данные конфигурирования доступны через
регистры ЛУ. Каждое логическое устройство имеет собствен-
ные дескрипторы используемых системных ресурсов:

^ Обычные 24-битные (4) и 32-битные (4) дескрипторы
памяти. Поля базового адреса и длины неиспользуемого
дескриптора памяти должны быть нулевыми. Одна кар-
та не может одновременно использовать 24-битные и
32-битные дескрипторы памяти.

^ Дескрипторы областей портов ввода/вывода (8). Поле
базового адреса неиспользуемого дескриптора портов вво-
да/вывода должно быть нулевым. Размер области адре-
сов определяется в блоке данных описателя.

^ Дескрипторы запросов прерываний (2). Неиспользуемый
селектор запроса прерывания должен быть нулевым (ну-
левой номер запроса занят системным таймером). Для
линии IRQ2/9 шины ISA применяют номер 2.

^ Дескрипторы каналов прямого доступа к памяти. Неис-
пользуемый дескриптор канала должен иметь значение 4
(этот канал недоступен - используется для каскадирова-
ния контроллеров).

Назначение регистров дескрипторов и их положение в ин-
дексном пространстве РпР описано в табл. А.7.

Индекс и тип

Назначение

40h-5Fh - Обычные дескрипторы памяти

40h, RW

Дескриптор памяти ft базовый адрес памяти,
биты [23:16]



Индекс и тип

Назначение

41h, RW

Дескриптор памяти 0: базовый адрес памяти,
биты [15:8]

42h, RW

Дескриптор памяти О: управление.
Бит [1] - режим обращения:
0-8 бит,
1 -16 бит.
Бит [0] (RO) - способ задания диапазона:
0 - следующее поле воспринимается как размер
области,
1 - как старший адрес

43h, RW

Дескриптор памяти 0: размер или старший адрес
области, биты [23:16]

44h, RW

Дескриптор памяти 0: размер или старший адрес
области, биты [15:8]

45h-47h

Заполнитель (зарезервировано)

48h-4Ch

Дескриптор памяти 1 (аналогично предыдущему)

4Dh-4Fh

Заполнитель (зарезервировано)

50h-54h

Дескриптор памяти 2 (аналогично предыдущему)

55h-57h

Заполнитель (зарезервировано)

58h-5Ch

Дескриптор памяти 3 (аналогично предыдущему)

5Dh-5Fh

Заполнитель (зарезервировано)

60h-6Fh -Дескрипторы пространства ввода/вывода

60h, RW

Дескриптор портов 0: базовый адрес, биты [15:8].
Если ЛУ использует только 10-битное
декодирование адреса, биты [15:10] могут
игнорироваться

61 h, RW

Дескриптор портов 0: базовый адрес, биты [7:0]

62h-63h, RW

Дескриптор портов 1 - аналогично

64h-65h, RW

Дескриптор портов 2 - аналогично

66h-67h, RW

Дескриптор портов 3 - аналогично

68h-69h, RW

Дескриптор портов 4 - аналогично

6Ah-6Bh, RW

Дескриптор портов 5 - аналогично

6Ch-6Dh, RW

Дескриптор портов 6 - аналогично

6Eh-6Fh, RW

Дескриптор портов 7 - аналогично



Индекс и тип

Назначение

70h-73h - Дескрипторы запросов прерываний

70h, RW

Селектор запроса прерывания 0: Биты [3:0] задают
номер линии IRQ

71 h, RW

Тип сигнала запроса прерывания 0-.
Бит[1] -активный уровень:
1 - высокий,
0 - низкий
Бит[0] - тип:
1 - уровень,
0 - перепад
Если карта поддерживает только один тип сигнала,
регистр может быть типа RO

72h,RW

Селектор запроса прерывания 1

73h, RW

Тип сигнала запроса прерывания 1

74h-75h - Дескрипторы каналов прямого доступа

74h, RW

Селектор 0 канала DMA. Биты [2:0] задают номер
используемого канала
(001 -DMAO,... Ill -DMA7)

75h, RW

Селектор 1 канала DMA

76h-A8h - 32-битные дескрипторы памяти

76h, RW

32-битный дескриптор памяти 0: базовый адрес
памяти, биты [31:24]

77h, RW

32-битный дескриптор памяти 0: базовый адрес
памяти, биты [23:16]

78h, RW

32-битный дескриптор памяти 0'. базовый адрес
памяти, биты [15:8]

79h, RW

32-битный дескриптор памяти 0: базовый адрес
памяти, биты [7:0]

7Ah,RW

32-битный дескриптор памяти 0: управление
Биты [7:3] - зарезервированы, при чтении должны
возвращать нули
Биты [2:1] - управление доступом:
00 - 8-битная память,
01 - 16-битная память,
10 - зарезервировано,
11 - 32-битная память
Бит [0] (RO) - способ задания диапазона:
0 - следующее поле воспринимается как размер
области,
1 - следующее поле воспринимается как старший
адрес



Индекс и тип

Назначение

7Bh, RW

32-битный дескриптор памяти (h
размер или старший адрес области, биты [31:24]

7Ch, RW

32-битный дескриптор памяти 0:
размер или старший адрес области, биты [23:16]

7Dh, RW

32-битный дескриптор памяти 0-.
размер или старший адрес области, биты [15:8]

7Eh, RW

32-битный дескриптор памяти 0'.
размер или старший адрес области, биты [7:0]

7Fh

Заполнитель (зарезервировано)

80h-88h

32-битный дескриптор памяти 1

89h-8Fh

Заполнитель (зарезервировано)

90h-98h

32-битный дескриптор памяти 2

99h-9Fh

Заполнитель (зарезервировано)

AOh-A8h

32-битный дескриптор памяти 3