Работа с дискамиРефераты >> Кибернетика >> Работа с дисками
Все времена зависят от частоты тактового генератора контроллера НГМД, приведенные значения соответствуют частоте 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 предназначен для записи или чтения данных. Он используется для всех операций.
Выполнение любой операции начинается с того, что программа посылает в этот порт байт кода операции, за которым следует один или несколько байт параметров. Количество байт параметров и их назначение зависит от кода операции (т. е. от первого байта). После выполнения операции программа считывает несколько байт результата для анализа результата выполнения операции.