|
Адаптер дисковода является интерфейсом
между микропроцессором и
накопителем на гибких магнитных дисках.
Схемы, смонтированные на
плате этого адаптера, обеспечивают все
функции, необходимые для
ввода и вывода данных на гибкий диск
(дискету). Адаптер
обеспечивает также физическое кодирование
и декодирование данных,
необходимое для использования дискет.
Центральной частью адаптера дисковода
фирмы 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 Проверка состояния дисковода Page1-1
PAGE
,132
TITLE
Фиг. 8.20 Проверка состояния дисковода
0000 STACK SEGMENT STACK
00000040[ DW 64 DUP (?)
????
]
0080 STACK ENDS
FDC_STATUS
RECORD RQM:1, DIO:1, OTHER:6
0000 CODE SEGMENT
ASSUMECS:CODE
0000 SENSE PROC
FAR
00001E PUSH DS ; Адрес возврата
00012B C0 SUB AX, AX
000350 PUSH AX
0004BA 03F4 MOV DX, 3F4H ; Порт состояния контроллера дисков
0007B4 04 MOV AH, 04H ; Команда
состояния устройства
0009E8 001E R CALL OUTPUT ; Передача в контроллер
000CB4 00 MOV AH, 0 ; Второй
байт команды
000EE8 001E R CALL OUTPUT
;-----Чтение состояния из контроллера дисков
0011
IN_DIO:
0011EC IN AL,
DX ; Ждать, пока флаг DIO разрешит ввод
0012A8 80 TEST AL, MASK RQM ;из контроллера
001474 FB JZ IN_DIO
0016
IN_RQM:
0016EC IN AL,
DX ; Ждать, пока флаг RQM покажет, что
0017A8 80 TEST AL, MASK RQM ;контроллер готов
001974 FB JZ IN_RQM
001B42 INC DX ; Установка на порт данных
001CEC IN AL,
DX ; Чтение состояния контроллера
001DCB RET
; Конец примера
001E SENSE ENDP
;-----Подпрограмма посылки байта в контроллер
001E
OUTPUTPROC NEAR
001EEC IN AL,
DX ; Ожидание пока DIO разрешит чтение
001FA8 40 TEST AL, MASK DIO ;из контроллера из контроллера
002175 FB JNZ OUTPUT
0023
OUT_RQM:
0023EC IN AL,
DX ; Ожидание пока RQM покажет, что
0024A8 80 TEST AL, MASK RQM ;контроллер готов
002674 FB JZ OUT_RQM
002842 INC DX ; Установка на порт данных
00298A C4 MOV AL, AH ; Посылаемые данные
002BEE OUT DX,
AL ; Вывод в порт
002C4A DEC DX ; Установка на порт состояния
002DC3 RET
002E
OUTPUTENDP
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,
так как существуют
ошибочные ситуации, которые вводят
контроллер в неопределенное
состояние. В таких случаях единственный
выход - сбросить контроллер
и попробовать снова.
|