Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1. СП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
324.06 Кб
Скачать

12. Команда ініціалізації драйверу. Її зміст, призначення та місце розташування. Визначення адреси точки розриву.

Команди для завантажуваного драйвера

Як вже було сказано, номер команди, яку повинен виконати драйвер, передається операційною системою через поле cmd заголовка запиту. Розглянемо окремі команди.

Ініціалізація драйвера (0)

Ця команда виконується тільки один раз при завантаженні драйвера і підключенні його до операційної системи.

Команда ініціалізації повинна оброблятися будь-яким драйвером, так як вона повідомляє операційній системі відомості, необхідні для правильного підключення і використання драйвера.

Наведемо формат запиту для команди ініціалізації:

Зсув, байт

Розмір, байт

Ім'я поля

Опис

0

13

header

Тема запиту

13

1

n_units

Кількість пристроїв, що обслуговуються драйвером. Це поле заповнюється тільки блоковим драйвером. Для символьного драйвера в це поле потрібно записати значення 0

14

4

end_addr

Далекий адресу нижньої межі резидентної частини коду драйвера. У це поле драйвер записує адресу байта пам'яті, наступного за областю драйвера, яка повинна стати резидентної

18

4

parm

Далекий адреса рядка параметрів ініціалізації драйвера з файлу config.sys. Цей рядок містить все, що знаходиться в рядку файлу після команди 'DEVICE ='. Вона закінчується символами переведення рядка і повернення каретки 0Ah, 0Dh. При поверненні драйвер блокового пристрою повинен записати в поле parm адреса масиву покажчиків на блоки параметрів BIOS (BPB), по одному вказівником на кожен пристрій, обслуживаемое драйвером

22

1

drive

Номер пристрою. У це поле при завантаженні драйвера операційна система заносить номер, призначений пристрою, обслуживаемому драйвером. Наприклад, для влаштування А: це 0, для B: - 1 і т. д.

23

1

msg_flag

1 - відображення повідомлення про помилку, якщо в полі status заголовка запиту встановлені відповідні біти; 0 - повідомлення про помилку не відображається

При ініціалізації драйвер символьного пристрою зберігає у своїй внутрішній області даних параметри ініціалізації, використовуючи адресу parm. Якщо параметри містять числові значення, програма ініціалізації може виконати їхнє перекодування і зберегти значення в двійковому форматі.

Потім драйвер може виконати ініціалізацію обслуговується периферійного пристрою, ініціалізацію своїх внутрішніх змінних, вивести на екран будь-які повідомлення, або навіть запросити у оператора додаткові дані. Для організації діалогу з оператором і інших дій обробник команди ініціалізації може користуватися функціями переривання INT 21h з номерами від 01h до 0Ch, 25h, 30h, 35h і функціями BIOS.

Крім цього, драйвер повинен записати в поле end_addr адресу кінця резидентної частини драйвера. Так як програма ініціалізації виконується тільки один раз, зазвичай її розташовують у кінці драйвера і для економії пам'яті не залишають резидентної.

Драйвери блокових пристроїв додатково мають повернути MS-DOS кількість обслуговуваних пристроїв (у полі n_units) та адреса масиву покажчиків на блоки BPB (у полі parm).

Поле кількості пристроїв використовується MS-DOS для визначення логічних імен пристроїв. Наприклад, якщо ваш драйвер обслуговує три логічних пристрої, і на момент його завантаження в системі є пристрої A:, B: і C:, то пристрої, які обслуговуються вашим драйвером, отримають імена D:, E: і F:. Ви повинні вказати кількість пристроїв також і в заголовку драйвера (у першому байті поля імені пристрою dev_name).

Для кожного логічного пристрою драйвер повинен підготувати так званий блок параметрів BIOS (BIOS Parameter Block - BPB).

Блок BPB знаходиться в завантажувальному секторі диска і містить інформацію, необхідну BIOS для роботи з диском. Наведемо формат блоку BPB:

Зсув, байт

Розмір, бай

Имя поля

Описание

0

2

sect_siz

Кількість байт даних в одному секторі диска

2

1

clustsiz

Кількість секторів в одному кластері

3

2

res_sect

Кількість зарезервованих секторів

5

1

fat_cnt

Кількість таблиць FAT

6

2

root_siz

Максимальна кількість дескрипторів файлів у кореневому каталозі диска

8

2

tot_sect

Загальна кількість секторів на носії даних (у розділі MS-DOS)

10

1

media

Байт-описувач середовища носія даних

11

2

fat_size

Кількість секторів, займаних однієї копією FAT

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]