дорожки 0) дискеты, находящейся
(сектор 2 дорожки 0) дискеты, находящейся на дисководе A:.
Аналогичный способ можно было бы применить и для занесения на
дискету записи инициализации.
Такой способ формирования вызова BIOS в программе DEBUG
для записи на дискету может использоваться почти для всех функций
BIOS. Проследить, что именно происходит при вызове BIOS, можно с
помощью программы DEBUG. Можно установить регистры для вызова и
написать несложную трехбайтовую программу, осуществляющую
программное прерывание и производящую возврат в DEBUG. Этот прием
удобен также для тестирования собственного драйвера устройства.
Вернемся к процедуре драйвера псевдо-диска во второй части Фиг.
10.2. Заметим, что процедура загрузки сохранила исходный вектор
дискеты (INT 13H) в этом сегменте со смещением 3. Подпрограммы-
драйвера используют этот вектор для реализации всех функций
дискеты, которые не реализуются псевдо-диском. В приведенной
подпрограмме предполагается, что псевдо-диск находится на дисководе
2. На запрос любого другого дисковода процедура передает управление
BIOS, используя приэтом сохраненный в ORIGINAL_VECTOR исходный
вектор. Аналогично и запрос на смену дискеты передается BIOS. Если
функция, запрашиваемая для псевдо-дисковода, не считывание и не
запись, то драйвер псевдо-диска не производит никаких действий, и
происходит возврат с нормальным кодом завершения. Псевдо-диск
не требует форматирования, а поскольку у нас нет контроля ошибок,
то не остается ничего проверять.
Если запрашиваемой операцией является считывание или запись,
драйвер вычисляет адрес соответствующего псевдо-сектора в памяти.
При обращении за границу диска поцедура возвращает запись об ошибке
отсуствия адреса. Код драйвера устанавливает регистры источника и
назначения в соответствии с направлением операции. Наконец,
команда REP MOVSW передает данные между псевдо-диском и буфером
Содержание Назад Вперед