62025 (694746), страница 3
Текст из файла (страница 3)
Порт 3F7h работает на запись и чтение, он используется только в IBM PC/AT.
При записи в этот порт биты 0-1 определяют скорость передачи данных:
| Биты | Скорость передачи данных, Кбайт/с |
| 00 | 500 (высокая плотность HD) |
| 01 | 300 (двойная плотность DD) |
| 10 | 250 (одинарная плотность SD) |
| 11 | Зарезервировано |
Приведем назначение отдельных бит порта 3F7h при чтении из него:
| Биты | Назначение |
| 0 | 1 - выбран НГМД 0 |
| 1 | 1 - выбран НГМД 1 |
| 2-5 | Выбраны головки : бит 2 соответствует головке 0, бит 3 - головке 1 и т. д. |
| 6 | Переключатель записи |
| 7 | 1 - признак замены дискеты |
4.2 Команды для контроллера НГМД.
Контроллер НГМД может выполнять 15 операций, или команд. Команда разделяется на три фазы - командная фаза, фаза выполнения, фаза результата. В командной фазе программа должна передать контроллеру всю информацию, необходимую для команды. В фазе выполнения команда выполняется, и в фазе результата программа получает от контроллера информацию о состоянии контроллера.
Информация, необходимая для команды, передается контроллеру через порт данных 3F5h. В соответствии с форматом команды программа должна последовательно вывести в этот порт код команды и все параметры.
Прежде чем программа начнет командную фазу, она должна убедиться в том, что контроллер завершил выполнение предыдущей операции и готов к приему команды. Для этого программа должна прочитать байт основного состояния контроллера из порта с адресом 3F4h и проверить биты 6 и 7. Бит 6 должен быть установлен в 0. Это означает, что данные будут передаваться от процессора к контроллеру. Бит 7 должен быть установлен в 1 - это готовность контроллера к приему команды.
Фаза выполнения начинается после установки битов 6 и 7 байта основного состояния в 1. После завершения команды контроллер формирует сигнал запроса прерывания.
В фазе результата процессор считывает состояние контроллера. Это состояние хранится в нескольких внутренних регистрах контроллера:
• RS - регистр основного состояния;
• ST0, ST1, ST2, ST3 - регистры дополнительного состояния.
Регистр основного состояния доступен через порт 3F4h, содержимое остальных регистров процессор считывает после выполнения контроллером команды через порт данных 3F5h.
В форматах команд и таблицах, приведенных ниже, используются следующие обозначения:
| Обозначение | Описание |
| MT | Двухсторонняя операция |
| MFM | Двойная/одинарная плотность записи |
| SK | Пропуск удаленных данных |
| HDS | Номер головки для двухстороннего НГМД |
| DS1, DS0 | Номер выбираемого НГМД |
| C | Номер цилиндра |
| H | Номер головки для двухстороннего НГМД |
| R | Номер сектора |
| N | Число байт в секторе |
| EOT | Номер последнего сектора на дорожке |
| GPL | Размер промежутка |
| DTL | Количество считываемых или записываемых байт |
| SC | Количество секторов в цилиндре |
| D | Данные |
| PCN | Номер цилиндра после выполнения команды чтения состояния прерывания |
| SRT | Время шага, мс |
| HUT | Время разгрузки головки |
| HLT | Время загрузки головки |
| ND | Режим прерывания |
| NCN | Номер цилиндра после поиска |
Приведем форматы всех команд контроллера НГМД.
-
Чтение данных
| MT | MFM | SK | 0 | 0 | 1 | 1 | 0 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Чтение удаленных данных
| MT | MFM | SK | 0 | 1 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Запись данных
| MT | MFM | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Запись удаленных данных
| MT | MFM | 0 | 0 | 1 | 0 | 0 | 1 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Чтение данных с дорожки
| MT | MFM | SK | 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Сканирование до "равно"
| MT | MFM | SK | 1 | 0 | 0 | 0 | 1 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Сканирование до "меньше" или "равно"
| MT | MFM | SK | 1 | 1 | 0 | 0 | 1 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Сканирование до "больше" или "равно"
| MT | MFM | SK | 1 | 1 | 1 | 0 | 1 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Форматирование дорожки
| 0 | MFM | 0 | 0 | 1 | 1 | 0 | 1 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Считывание индексных данных
| 0 | MFM | 0 | 0 | 1 | 0 | 1 | 1 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Инициализация
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
-
Чтение состояния прерывания
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
-
Определение параметров
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
-
Чтение состояния накопителя
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
-
Поиск
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 0 | 0 | 0 | 0 | HDS | DS1 | DS0 |
Первые несколько команд имеют одинаковый формат параметров и одинаковые байты результата.
Приведем байты параметров, которые должны следовать за командами и байты результата, которые процессор должен считать после выполнения команды.
| Команда | Байты параметров | Байты результата |
| Чтение данных | C, H, R, N, EOT,EOT, GPL, DTL | ST0, ST1, ST2,C, H, R, N |
| Форматирование дорожки | N, SC, GPL, D | ST0, ST1, ST2,C, H, R, N |
| Чтение индексных данных | Отсутствуют | ST0, ST1, ST2,C, H, R, N |
| Инициализация | Отсутствуют | Отсутствуют |
| Чтение состояния прерывания | Отсутствуют | ST0, PCN |
| Определить параметры | 1 байт: | Отсутствуют |
| Чтение состояния накопителя | Отсутствуют | ST3 |
| Поиск | C | Отсутствуют |
После выполнения команды центральный процессор должен получить от контроллера байты результата. Среди них - содержимое внутренних регистров состояния контроллера ST0, ST1, ST2, ST3. Опишем назначение отдельных бит этих регистров.















