Адаптер дисковода является интерфейсом между микропроцессором и
накопителем на гибких магнитных дисках. Схемы, смонтированные на
плате этого адаптера, обеспечивают все функции, необходимые для
ввода и вывода данных на гибкий диск (дискету). Адаптер
обеспечивает также физическое кодирование и декодирование данных,
необходимое для использования дискет.
Центральной частью адаптера дисковода фирмы IBM является
микросхема контроллера гибкого диска FDC (Floppy Disk Controller)
мPD765 фирмы NEC. Эта компонента также производится фирмой Intel
как микросхема 8272. Микросхема FDC управляет потоком данных на
дискету и с нее. Микросхема FDC имеет два порта ввода-вывода, один
для данных, а другой для отражения состояния. Порт данных находится
по адресу 3F4H, а порт состояния по адресу 3F5H. Порт данных -
двунаправленный, т.е. в различные моменты времени можно и читать
данные из этого порта, и записывать их в порт. Регистр состояния
можно только читать в любой момент времени. Он сообщает, как в
данный момент нужно работать с регистром данных.
В регистре состояния есть 2 бита, которые используются во время
работы с дисководом. Бит 6 - это признак ввода-вывода данных (DIO -
Data Input/Output). Этот бит сообщает, каких действий в отношении
регистра данных ожидает от вас контроллер. Если признак DIO равен
1, микросхема FDC ждет от вас чтения регистра данных. Если DIO
равен 0, FDC ждет записи в регистр данных. Бит 7 порта состояния -
это бит запроса устройства (RQM - Request For Master). Он
аналогичен биту "занято" печатающего устройства. Когда бит RQM
содержит 1, микросхема FDC готова к тому, чтобы читался или
записывался регистр данных. Если вы не уделите внимание биту RQM,
то введете микросхему FDC в заблуждение, и после этого ничего не
будет работать.
Регистр данных в действительности не является единственным.
Подобно контроллеру 6845, порт данных фактически состоит из группы
регистров. Но в отличие от микросхемы 6845, регистра индекса
регистров данных здесь нет. Данные, которые вы посылаете в
контроллер, должны поступать в определенном порядке. Аналогично, в
определенном порядке данные поступают из порта, когда вы их
читаете.
В техническом описании содержится диаграмма, показывающая
входные и выходные комбинации для всех операций дисковода.
Рассмотрим простейшую команду микросхемы FDC, опрос состояния
механизма. Вы выполняете эту операцию тогда, когда хотите что-либо
узнать о текущем состоянии дисковода. На Фиг. 8.19 показаны данные
для команды опроса состояния, а на Фиг. 8.20 показана программа,
выполняющая операцию опроса состояния дисковода.
----------------------------------
Команда...................04H
Модификатор команды.......00H
статус возврата...........ST3 Фиг. 8.19 Команда опроса
---------------------------------- состояния
A
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:06:03
Фиг. 8.20 Проверка состояния дисковода Page 1-1
PAGE ,132
TITLE Фиг. 8.20 Проверка состояния дисковода
0000 STACK SEGMENT STACK
0000 0040[ DW 64 DUP (?)
????
]
0080 STACK ENDS
FDC_STATUS RECORD RQM:1, DIO:1, OTHER:6
0000 CODE SEGMENT
ASSUME CS:CODE
0000 SENSE PROC FAR
0000 1E PUSH DS ; Адрес возврата
0001 2B C0 SUB AX, AX
0003 50 PUSH AX
0004 BA 03F4 MOV DX, 3F4H ; Порт состояния контроллера дисков
0007 B4 04 MOV AH, 04H ; Команда состояния устройства
0009 E8 001E R CALL OUTPUT ; Передача в контроллер
000C B4 00 MOV AH, 0 ; Второй байт команды
000E E8 001E R CALL OUTPUT
;----- Чтение состояния из контроллера дисков
0011 IN_DIO:
0011 EC IN AL, DX ; Ждать, пока флаг DIO разрешит ввод
0012 A8 80 TEST AL, MASK RQM ; из контроллера
0014 74 FB JZ IN_DIO
0016 IN_RQM:
0016 EC IN AL, DX ; Ждать, пока флаг RQM покажет, что
0017 A8 80 TEST AL, MASK RQM ; контроллер готов
0019 74 FB JZ IN_RQM
001B 42 INC DX ; Установка на порт данных
001C EC IN AL, DX ; Чтение состояния контроллера
001D CB RET ; Конец примера
001E SENSE ENDP
;----- Подпрограмма посылки байта в контроллер
001E OUTPUT PROC NEAR
001E EC IN AL, DX ; Ожидание пока DIO разрешит чтение
001F A8 40 TEST AL, MASK DIO ; из контроллера из контроллера
0021 75 FB JNZ OUTPUT
0023 OUT_RQM:
0023 EC IN AL, DX ; Ожидание пока RQM покажет, что
0024 A8 80 TEST AL, MASK RQM ; контроллер готов
0026 74 FB JZ OUT_RQM
0028 42 INC DX ; Установка на порт данных
0029 8A C4 MOV AL, AH ; Посылаемые данные
002B EE OUT DX, AL ; Вывод в порт
002C 4A DEC DX ; Установка на порт состояния
002D C3 RET
002E OUTPUT ENDP
002E CODE ENDS
END SENSEA
Фиг. 8.20 Проверка состояния дисковода
Каждое действие, выполняемое контроллером дисковода, состоит из
трех фаз: команды, выполнения и результата. В фазе команды
микросхема FDC ожидает данные, и это отражает бит DIO. Когда
микросхема FDC устанавливает бит RQM, чтобы он указывал на
готовность принять данные, программа может посылать команду в
контроллер. В случае опроса состояния дисковода, она выводит в
микросхему FDC два байта команды. Первый байт, 04H, является кодом
операции этой команды. Второй байт сообщает, какой из механизмов
опросить. В течение командной фазы признак DIO всегда показывает,
что микросхема FDC ждет данные, и программа использует бит RQM для
определения момента, когда можно посылать очередной байт данных.
Теперь контроллер переходит в фазу выполнения. В течение этой
фазы контроллер выполняет команду. В данном случае он опрашивает
состояние дисковода. В течение этого времени бит RQM сообщает
программе, чтобы она не использовала порт данных. После завершения
операции признак DIO переключается на 1, сообщая программе, что она
может читать регистр данных. По разрешению RQM программа может
прочитать единственный байт состояния от этой операции. Как только
программа прочитает всю информацию состояния признак DIO снова
принимает значение 0, ожидая ввода следующей команды.
Как видно из таблицы в техническом описании, команда опроса
состояния дисковода - одна из самых простых. Команде чтения данных
требуется девять байт данных во время командной фазы. Когда
операция завершится, программа должна прочитать семь байт состояния
из контроллера. Выполнение не начинается до тех пор, пока не
присылается шестой командный байт, и вы не можете начать другую
операцию, пока не будут прочитаны все семь байт состояния.
По адресу ввода-вывода 3F2H находится цифровой выводной регистр
контроллера дисковода. Этот выводной порт выполняет некоторые
дополнительные операции управления дисководом. Основное назначение
этого порта - управление двигателями дисковода. У механизмов
дисководов 5 1/4 дюйма, используемых в IBM PC, двигатели работают
не непрерывно. Программа должна включить двигатель перед чтением
или записью на дискету - и выключить его после. Если вы оставите
двигатель включенным на все время, это приведет к быстрому износу
дискеты. Когда двигатель работает, на передней панели дисковода
горит красная лампочка.
Адаптер использует цифровой выводной регистр и для других
целей. Два бита выбирают необходимый дисковод. Этот регистр также
используется для сброса микросхемы FDC, так как существуют
ошибочные ситуации, которые вводят контроллер в неопределенное
состояние. В таких случаях единственный выход - сбросить контроллер
и попробовать снова.