|
Плата адаптера дисковода устроена фирмой
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 все это будет
рассмотрено в комплексе.
|