Прямой доступ у памяти
Прямой доступ у памяти
Плата адаптера дисковода устроена фирмой 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.00 1/1/80 04:06:09
Фиг. 8.21 Настройка прямого доступа в память Page 1-1
PAGE ,132
TITLE Фиг. 8.21 Настройка прямого доступа в память
0000 STACK SEGMENT STACK
0000 0040[ DW 64 DUP (?)
????
]
0080 STACK ENDS
= 0000 DMA EQU 0 ; Адрес порта DMA
0000 CODE SEGMENT
ASSUME CS:CODE
0000 DMA_SET PROC FAR
0000 1E PUSH DS ; Адрес возврата
0001 2B C0 SUB AX, AX
0003 50 PUSH AX
0004 B0 46 MOV AL, 46H ; Установка DMA в режим чтения с дискеты
0006 E6 0B OUT DMA+11, AL ; в память
0008 E6 0C OUT DMA+12, AL
000A 8C C8 MOV AX, CS ; Текущий адрес сегмента
000C B1 04 MOV CL, 4
000E D3 C0 ROL AX, CL ; Умножение на 16
0010 8A E8 MOV CH, AL ; Старшие 4 разряда в регистре CH
0012 24 F0 AND AL, 0F0H ; Очистка младших разрядов
0014 05 0032 R ADD AX, offset BUFFER ; Прибавление адреса буфера
0017 80 D5 00 ADC CH, 0
001A E6 04 OUT DMA+4, AL ; Вывод младшего байта адреса
001C 8A C4 MOV AL, AH
001E E6 04 OUT DMA+4, AL ; Вывод старшего байта адреса
0020 8A C5 MOV AL, CH
0022 E6 81 OUT 081H, AL ; Установка регистра страницы
0024 B8 01FF MOV AX, 511 ; Счетчик на один сектор
0027 E6 05 OUT DMA+5, AL ; Младший байт счетчика
0029 8A C4 MOV AL, AH
002B E6 05 OUT DMA+5, AL ; Старший байт счетчика
002D B0 02 MOV AL, 2 ; Открыть для прямого доступа канал 2
002F E6 0A OUT DMA+10, AL
0031 CB RET
0032 DMA_SET ENDP
0032 0200[ BUFFER DB 512 DUP (?) ; Буфер для чтения с диска
??
]
0232 CODE ENDS
END
Фиг. 8.21 Настройка прямого доступа в память
Программа также посылает в контроллер ПДП число передаваемых
байт данных. Контроллер дисковода использует это значение,
записанное в регистр счетчика канала 2, для завершения операции
чтения данных. ПДП посылает устройству специальный управляющий
сигнал, называемый завершением счета, когда оно записывает в память
последний байт. Последняя команда, выдаваемая ПДП - разрешение
работы канала 2. Теперь программа может войти в командную фазу
контроллера дисковода.
Адаптер дисковода соединяет множество компонентов программного
и аппаратного обеспечение компьютера. Адаптер дисковода использует
и ПДП, и прерывания для обслуживания работы дисковода. Сам по себе
контроллер дисковода - сложное, "интеллектуальное" устройство
управления, требующее получения "программы" перед началом работы. В
следующей главе при обсуждении управления механизмом дисковода с
помощью программы BIOS все это будет рассмотрено в комплексе.