скачать рефераты

МЕНЮ


Работа с дисками

обработку прерывания INT 13h . Так как MS-DOS при обращении к дискам

использует именно это прерывание, то не возникает никаких проблем,

связанных с отсутствием типа диска в CMOS-памяти. Другие операционные

системы, такие как Windows NT и OS/2 , используют для работы с дисками

специальные драйверы.

3.4 Таблицы параметров НМД и НГМД.

Для работы с диском на физическом уровне необходимо знать такие его

характеристики, как количество головок, секторов и др. Эти характеристики

можно определить из таблиц параметров НГМД и НМД, заполняемых BIOS в

процессе инициализации системы.

Анализируя содержимое CMOS-памяти в компьютерах IBM PC/AT или

установку переключателей конфигурации на основной плате в компьютерах IBM

PC и IBM PC/XT, BIOS в процессе инициализации создает таблицу параметров

дискеты DPT (Diskette Parameter Table), а также одну или две таблицы

параметров жесткого диска HDPT (Hard Disk Parameter Table). Если имеется

специальная "дисковая" система ввода/вывода, то она сама создает таблицы

HDPT.

Таблица параметров дискеты DPT имеет длину 10 байт, ее адрес

располагается в области данных BIOS по адресу 0000h:0078h, что

соответствует вектору прерывания INT 1Eh . Таблица содержит следующие

параметры:

|Смещение,|Размер|Имя |Описание |

|байт |, байт|поля | |

|0 |1 |srt_hut|Биты 0...3:SRT (Step Rate Time) - задержка |

| | | |для переключения головок, лежит в пределах 1|

| | | |- 16 мс и задается с интервалом 1 мс (0Fh - |

| | | |1 мс, 0Eh - 2 мс, 0Dh - 3 мс, ...).Биты |

| | | |4...7:Задержка разгрузки головки, лежит в |

| | | |пределах 16 - 240 мс и задается с интервалом|

| | | |16 мс (1 - 16 мс, 2 - 32 мс, ..., 0Fh - 240 |

| | | |mc) |

|1 |1 |dma_hlt|Бит 0:Значение этого бита, равное 1, говорит|

| | | |о том, что используется прямой доступ к |

| | | |памяти; |

| | | |Биты 2...7:Время загрузки головок HLT - |

| | | |интервал между сигналом загрузки головок и |

| | | |началом операции чтения или записи, лежит в |

| | | |пределах 2 - 254 мс и задается с интервалом |

| | | |2 мс (1 - 2 мс, 2 - 4 мс, ..., 0FFh - 254 |

| | | |мс) |

|2 |1 |motor_w|Задержка перед выключением двигателя |

|3 |1 |sec_siz|Код размера сектора в байтах:0 - 128;1 - |

| | |e |256;2 - 512;3 - 1024 |

|4 |1 |eot |Номер последнего сектора на дорожке |

|5 |1 |gap_rw |Длина межсекторного промежутка для чтения |

| | | |или записи |

|6 |1 |dtl |Максимальная длина передаваемых данных. |

| | | |Используется, когда не задана длина сектора |

|7 |1 |gap_f |Длина межсекторного промежутка для операции |

| | | |форматирования |

|8 |1 |fill_ch|Байт-заполнитель для форматирования, обычно |

| | |ar |используется F6h |

|9 |1 |hst |Время установки головки в мс |

|10 |1 |mot_sta|Время запуска двигателя в 1/8 долях секунды |

| | |rt | |

Все времена зависят от частоты тактового генератора контроллера НГМД,

приведенные значения соответствуют частоте 8 МГц.

Адреса таблиц параметров жестких дисков HDPT расположены по адресам,

соответствующим векторам прерываний INT 41h (для первого физического диска)

и INT 46h (для второго физического диска). Эти таблицы имеют следующий

формат:

|Смещение,|Размер|Имя поля|Описание |

|байт |, байт| | |

|0 |2 |max_cyl |Максимальное количество дорожек на диске |

|2 |1 |max_head|Максимальное количество магнитных головок |

|3 |2 |srwcc |Начальная дорожка для предварительной |

| | | |записи (Starting reduced-write current |

| | | |cylinder) |

|5 |2 |swpc |Начальная дорожка для предварительной |

| | | |компенсации при записи (Starting write |

| | | |precompensation cylinder) |

|7 |1 |max_ecc |Максимальная длина блока коррекции ошибок |

| | | |ECC (Maximum ECC data burst length) |

|8 |1 |dstopt |Параметры устройства: |

| | | |бит 7 - запрет восстановления; |

| | | |бит 6 - запрет восстановления по блоку |

| | | |коррекции ошибок ECC (Error Correction |

| | | |Code); |

| | | |биты 2-0 - дополнительные параметры |

| | | |устройства |

|9 |1 |st_del |Стандартная величина задержки |

|10 |1 |fm_del |Величина задержки для форматирования диска |

|11 |1 |chk_del |Величина задержки для проверки диска |

|12 |4 |reserve |Зарезервировано |

Таблица параметров жесткого диска содержит такие важнейшие значения,

как максимальное количество дорожек и максимальное количество головок. Если

вам не удалось определить тип диска, то таблица HDPT - единственное

надежное место, откуда можно получить информацию о количестве дорожек и

головок.

Глава 4. Программирование контроллера НГМД.

Большинство дисковых операций можно выполнить на уровне функций BIOS.

Это самый простой и надежный способ работы с диском на физическом уровне.

Однако в отдельных случаях вам может потребоваться непосредственный доступ

к контроллеру НГМД - например, если вы разрабатываете систему защиты данных

от несанкционированного копирования.

Информация, приведенная в этой главе, ориентирована прежде всего не на

выполнение операций чтения или записи (которые лучше выполнять с помощью

функций BIOS), а на управление контроллером и получение состояния

контроллера. Именно эти операции требуются для организации защиты данных от

несанкционированного копирования.

4.1 Порты контроллера НГМД.

Программа обращается к контроллеру для выполнения различных операций с

помощью команд ввода/вывода. Для IBM PC и IBM PC/XT используются три порта

с адресами 3F2h, 3F4h и 3F5h. В компьютерах IBM PC/AT дополнительно

используются два порта с адресами 3F6h и 3F7h.

Порт 3F2h работает только на запись, это порт вывода. С его помощью

можно выбирать для работы один из НГМД (одновременно можно работать только

с одним НГМД), сбрасывать контроллер в исходное состояние, разрешать или

запрещать прерывания от контроллера и работу схем прямого доступа к памяти,

включать или выключать двигатели НГМД.

Приведем назначение отдельных бит этого порта:

|Биты |Назначение |

|0-1 |Выбор НГМД. Компьютеры IBM PC/AT не используют бит 1, так как в |

| |них установлены только два НГМД |

|2 |0 - сброс контроллера; |

| |1 - разрешение работы контроллера |

|3 |1 - разрешение прерываний и прямого доступа к памяти |

|4-7 |Значение 1 в каждом разряде вызывает включение соответствующего |

| |двигателя НГМД. Для компьютеров IBM PC/AT биты 6-7 не |

| |используются |

Порт 3F4h предназначен только для чтения. С его помощью можно получить

байт основного состояния контроллера. Назначение отдельных бит приведено

ниже:

|Биты |Назначение |

|0-3 |Значение 1 говорит о том, что соответствующий НГМД занят, он |

| |выполняет операцию поиска. Для IBM PC/AT биты 2-3 не |

| |используются |

|4 |Контроллер занят выполнением команды чтения или записи |

|5 |0 - используется режим прямого доступа к памяти; |

| |1 - режим прямого доступа к памяти не используется |

|6 |Направление передачи данных: |

| |0 - от процессора к контроллеру; |

| |1 - от контроллера к процессору |

|7 |Запрос на передачу данных - контроллер готов к записи или |

| |чтению данных |

Порт 3F5h предназначен для записи или чтения данных. Он используется

для всех операций.

Выполнение любой операции начинается с того, что программа посылает в

этот порт байт кода операции, за которым следует один или несколько байт

параметров. Количество байт параметров и их назначение зависит от кода

операции (т. е. от первого байта). После выполнения операции программа

считывает несколько байт результата для анализа результата выполнения

операции.

Порт 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 |Номер цилиндра после поиска |

Приведем форматы всех команд контроллера НГМД.

. Чтение данных

|Чтение данных |C, H, R, N, |ST0, ST1, ST2,C, H, |

|Чтение удаленных данных |EOT,EOT, GPL, |R, N |

|Запись данных |DTL | |

|Запись удаленных данных | | |

|Чтение данных с дорожки | | |

|Сканирование до "равно" | | |

|Сканирование до "меньше" или | | |

|"равно" | | |

|Сканирование до "больше" или | | |

|"равно" | | |

|Форматирование дорожки |N, SC, GPL, D |ST0, ST1, ST2,C, H, |

| | |R, N |

|Чтение индексных данных |Отсутствуют |ST0, ST1, ST2,C, H, |

| | |R, N |

|Инициализация |Отсутствуют |Отсутствуют |

|Чтение состояния прерывания |Отсутствуют |ST0, PCN |

|Определить параметры |1 байт: |Отсутствуют |

| |мл. тетрада - | |

| |HUT | |

| |ст. тетрада - | |

| |SRT | |

| |2 байт: | |

| |бит 0 - ND | |

| |биты 1-7 - HLT | |

|Чтение состояния накопителя |Отсутствуют |ST3 |

|Поиск |C |Отсутствуют |

После выполнения команды центральный процессор должен получить от

контроллера байты результата. Среди них - содержимое внутренних регистров

состояния контроллера ST0, ST1, ST2, ST3. Опишем назначение отдельных бит

этих регистров.

Формат регистра ST0:

|Биты |Название |Назначение |

|1, 0 |US1, US2 |Код НГМД |

|2 |HD |Номер головки |

|3 |NC |Устанавливается, если НГМД не готов |

| | |выполнить команду чтения или записи |

|4 |EC |Сбой оборудования |

|5 |SE |Завершена команда "Поиск" |

|7, 6 |I, C |Код прерывания: |

| | |00 - нормальное завершение; |

| | |01 - аварийное завершение; |

| | |10 - неправильная команда; |

| | |11 - нет готовности НГМД |

Формат регистра ST1:

|Биты |Название |Назначение |

|0 |MA |Пропуск адресной метки. Этот бит устанавливается в |

| | |1, если контроллер не может найти адресную метку |

|1 |NN |Защита записи. Устанавливается, если при выполнении|

| | |операции контроллер получает от НГМД сигнал защиты |

| | |записи |

|2 |ND |Сектор не найден |

Страницы: 1, 2, 3, 4, 5, 6


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.