На главную Назад
Добро пожаловать, уважаемый посетитель!

Плата адаптера дисковода устроена фирмой IBM так, что она

использует возможность прямого доступа в память системы (ПДП).

Прямой доступ в память позволяет устройству ввода-вывода передавать

данные непосредственно в память или из нее. При этом микропроцессор

не "касается" данных. Принтер, например, требует передачи каждого

печатаемого символа самим микропроцессором. В случае же обмена с

дискетой микропроцессор был бы тяжелой обузой для достаточно

быстрой передачи данных. Программа микропроцессора для передачи

данных дисковода была бы очень похожа на программу Фиг. 8.15, где

символы посылались в принтер. То есть программа должна была бы

читать бит RQM, в цикле, чтобы проверить наличие очередного байта

данных. Тем не менее, если микропроцессор не ответит дисководу

достаточно быстро, то данные будут потеряны.

 

В случае передачи данных с помощью ПДП микропроцессор должен

только инициировать операцию. Все остальное выполняет контроллер

ПДП 8237 фирмы Intel, расположенный на системной плате. В случае

чтения с дискеты программа инициализирует ПДП для обслуживания

передачи данных. Затем программа посылает команду в контроллер

дисковода, чтобы он выполнил чтение. Во время выполнения программа

не должна передавать данные, так как эту работу выполняет

контроллер ПДП. Когда операция завершается, программа выполняет

фазу обработки результата, как и раньше.

 

Давайте посмотрим, как нужно настраивать ПДП на операцию чтения

с дискеты. На Фиг. 8.21 показана программа, предназначенная для

этой цели. ПДП имеет четыре канала. Дисковод подключен к каналу 2

ПДП. Каналы 1 и 3 доступны через системный канал ввода-вывода для

других устройств ввода-вывода, а канал 0 используется для очень

важной аппаратной функции - поддерживания регенерации памяти. Если

вы вмешаетесь в работу канала 0 ПДП, содержимое всей памяти

системы, вероятнее всего, изменится.

 

Каждый канал ПДП имеет два регистра: адресный регистр и регистр

счетчика. Регистр адреса задает область памяти, куда передаются

данные. В нашем случае операции чтения, значение в регистре адреса

указывает начало буфера данных. Когда контроллер дисковода читает

байт с дискеты, контроллер ПДП помещает этот байт в память по

адресу, определяемому регистром адреса. После каждого байта

контроллер ПДП увеличивает адресный регистр так, что он указывает

на следующий байт буфера.

 

На Фиг. 8.21 BUFFER - имя области данных. Программа определяет

абсолютный адрес буфера BUFFER в системе. Для этого она прибавляет

смещение BUFFER к сдвинутому (умноженному на 16) значению регистра

CS, который содержит значение сегмента буфера. Затем программа

помещает младшие 16 бит адреса в регистр адреса ПДП канала 2.

Старшие 4 бита адреса помещаются в специальный регистр "страницы".

Вдействительности контроллер ПДП 8237 работает только с

16-битовым адресом. В IBM PC этот регистр страницы добавлен для

того, чтобы программа могла читать данные в любое место памяти.

Имеется три регистра страницы, по одному для каналов 1, 2 и 3.

Регистр страницы имеет размер всего 4 бита, и поэтому старшие биты

регистра AL не играют роли при формировании физического адреса

буфера данных.

Microsoft (R) Macro Assembler Version 5.001/1/80 04:06:09

Фиг. 8.21 Настройка прямого доступа в памятьPage1-1

 

PAGE ,132

TITLE Фиг. 8.21 Настройка прямого доступа в память

 

0000 STACK SEGMENT STACK

00000040[ DW 64 DUP (?)

????

]

0080 STACK ENDS

 

= 0000 DMA EQU 0 ; Адрес порта DMA

0000 CODE SEGMENT

ASSUMECS:CODE

0000 DMA_SET PROC FAR

00001E PUSH DS ; Адрес возврата

00012B C0 SUB AX, AX

000350 PUSH AX

 

0004B0 46 MOV AL, 46H ; Установка DMA в режим чтения с дискеты

0006E6 0B OUT DMA+11, AL ;в память

0008E6 0C OUT DMA+12, AL

000A8C C8 MOV AX, CS ; Текущий адрес сегмента

000CB1 04 MOV CL, 4

000ED3 C0 ROL AX, CL ; Умножение на 16

00108A E8 MOV CH, AL ; Старшие 4 разряда в регистре CH

001224 F0 AND AL, 0F0H ; Очистка младших разрядов

001405 0032 R ADD AX, offset BUFFER ; Прибавление адреса буфера

001780 D5 00 ADC CH, 0

001AE6 04 OUT DMA+4, AL ; Вывод младшего байта адреса

001C8A C4 MOV AL, AH

001EE6 04 OUT DMA+4, AL ; Вывод старшего байта адреса

00208A C5 MOV AL, CH

0022E6 81 OUT 081H, AL ; Установка регистра страницы

 

0024B8 01FF MOV AX, 511 ; Счетчик на один сектор

0027E6 05 OUT DMA+5, AL ; Младший байт счетчика

00298A C4 MOV AL, AH

002BE6 05 OUT DMA+5, AL ; Старший байт счетчика

002DB0 02 MOV AL, 2 ; Открыть для прямого доступа канал 2

002FE6 0A OUT DMA+10, AL

0031CB RET

0032 DMA_SET ENDP

00320200[ BUFFERDB 512 DUP (?) ; Буфер для чтения с диска

??

]

0232 CODE ENDS

END

 

Фиг. 8.21 Настройка прямого доступа в память

Программа также посылает в контроллер ПДП число передаваемых

байт данных. Контроллер дисковода использует это значение,

записанное в регистр счетчика канала 2, для завершения операции

чтения данных. ПДП посылает устройству специальный управляющий

сигнал, называемый завершением счета, когда оно записывает в память

последний байт. Последняя команда, выдаваемая ПДП - разрешение

работы канала 2. Теперь программа может войти в командную фазу

контроллера дисковода.

 

Адаптер дисковода соединяет множество компонентов программного

и аппаратного обеспечение компьютера. Адаптер дисковода использует

и ПДП, и прерывания для обслуживания работы дисковода. Сам по себе

контроллер дисковода - сложное, "интеллектуальное" устройство

управления, требующее получения "программы" перед началом работы. В

следующей главе при обсуждении управления механизмом дисковода с

помощью программы BIOS все это будет рассмотрено в комплексе.


 

Mail.ru