Плата адаптера дисковода устроена фирмой IBM так, что она использует возможность прямого доступа в память системы (ПДП). Прямой доступ в память позволяет устройству ввода-вывода передавать данные непосредственно в память или из нее. При этом микропроцессор не "касается" данных. Принтер, например, требует передачи каждого печатаемого символа самим микропроцессором. В случае же обмена с дискетой микропроцессор был бы тяжелой обузой для достаточно быстрой передачи данных. Программа микропроцессора для передачи данных дисковода была бы очень похожа на программу Фиг. 8.15, где символы посылались в принтер. То есть программа должна была бы читать бит RQM, в цикле, чтобы проверить наличие очередного байта данных. Тем не менее, если микропроцессор не ответит дисководу достаточно быстро, то данные будут потеряны.
На Фиг. 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 все это будет рассмотрено в комплексе.