Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
03.06.2014
Размер:
2.63 Mб
Скачать

Определение версии mscdex

Функция 0Ch предназначена для определения версии установленной программыMSCDEX:

Регистры на входе:

AX= 150Ch;

Регистры на выходе:

BH = старший номер верии MSCDEX;

BL = младший номер версии MSCDEX

Определение обозначения устройств чтения cd-rom

При помощи функции 0Dh вы можете заполнить массив номерами установленных в системе устройств чтенияCD-ROM:

Регистры на входе:

AX= 150Dh;

ES:BX = адрес массива, в который будут записаны обозначения устройствCD-ROM

Регистры на выходе:

Не используются

Размер массива должен быть равен количеству установленных в системе устройств чтения CD-ROM, которое можно определить с помощью функции 00h.

Вызов драйвера cd-rom

Функция 10h предназначена для прямого вызова драйвера устройства чтенияCD-ROM:

Регистры на входе:

AX= 1510h;

CX = номер устройства чтенияCD-ROM;

ES:BX = адрес предварительно заполненного заголовка запроса драйвера

Регистры на выходе:

Не используются

Перед вызовом этой функции вы должны подготовить заголовок запроса.

Вызывая драйвер CD-ROM, вы можете выполнять такие операции, как проигрывание звуковых дорожек, извлечение компакт-диска, получение информации об устройстве, компакт-диске и дорожках и так далее.

Работа через драйверCd-rom

Перед тем как приступить к чтению этого раздела, мы рекомендуем вам обратиться к 6 главе 18 тома “Библиотеки системного программиста”, которая называется “Драйверы”. В ней мы привели минимум сведений, которые необходимы для создания собственных драйверов устройств, а также для работы с уже имеющимися драйверами.

Напомним, что после загрузки драйвер становится частью операционной системы. Прикладные программы не вызывают драйвер напрямую, а пользуются для вызова драйвера функциями операционной системы.

Внутри драйвера есть две функции, одна из которых называется программой стратегии, другая – программой прерывания.

Задача программы стратегии – сохранение в области данных драйвера адреса заголовка запроса, который подготавливается для драйвера операционной системой и выполняется программой прерывания.

Как найти адреса этих программ?

Они есть в заголовке драйвера, который, однако, тоже еще нужно найти. Операционная система MS-DOS не имеет в своем составе документированных средств для поиска заголовков драйверов. В 18 томе “Библиотеки системного программиста” мы описали, как это можно сделать с применением недокументированной векторной таблицы связи MS-DOS.

Однако для вызова драйвера устройства чтения CD-ROM вам не потребуются недокументированные средства, а также прямые вызовы программ стратегии и прерывания. С помощью описанной выше функции 10h расширенияMSCDEX.EXE вы можете передавать драйверу заголовки запросов вполне документированным способом.

Заголовок запроса

Структура и размер заголовка запроса зависит от кода выполняемой команды, однако начальная часть заголовка всегда одна и та же. Для удобства формирования заголовка запроса мы подготовили структуру ReqHdr, соответствующую начальной части заголовка запроса, а также структуры для всех основных команд.

Определение структуры ReqHdr приведено ниже:

typedef unsigned char BYTE;

typedef unsigned int WORD;

typedef unsigned longDWORD;

#pragma pack(1)

typedef struct _ReqHdr

{

BYTE bSize; // размер заголовка запроса в байтах

BYTE bSubUnit; // номер устройства subunit

BYTE bCmd; // код команды

WORD wStatus; // слово состояния

BYTE bReserved[8]; // зарезервировано

} ReqHdr;

Для удобства мы такжеопределили типы BYTE, WORD и DWORD, которыми будем пользоваться в этой главе.

Поле bSize должно содержать общий размер заголовка запроса, который складывается из размера структуры ReqHdr и размера дополнительной структуры, формат которой зависит от кода команды.

В поле bSubUnit необходиом занести номер устройства, обслуживаемого данным драйвером. Этот номер нетрудно определить с помощью функции 01h расширенияMSCDEX.EXE.

В поле bCmd необходимо записать код команды, которую должен выполнить драйвер. Коды и описание команд мы приведем ниже.

После выполнения команды драйвер записывает в поле wStatus слово состояния, по которому можно судить о результате выполнения.

Формат слова состояния:

Поле

Описание

0-7

Код ошибки (если в слове состояния установлен бит 15)

8

Выполнение команды завершено

9

Устройство занято

10-14

Зарезервировано

15

При выполнении команды произошла ошибка

Если команда выполнилась (с ошибкой или без ошибки), в слове состояния установлен бит 8.

При возникновении ошибки также устанавливается бит 15. При этом в поле 0-7 находится код ошибки.

Список кодов ошибок приведен ниже:

Код ошибки

Описание

00h

Защита записи

01h

Неизвестное устройство

02h

Устройство не готово

03h

Неизвестная команда

04h

Ошибка циклической контрольной суммы CRC

05h

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

06h

Ошибка при поиске

07h

Неизвестный носитель данных

08h

Сектор не найден

09h

В принтере нет бумаги

0Ah

Ошиба при записи

0Bh

Ошибка при чтении

0Ch

Общая ошибка

0Dh

Зарезервировано

0Eh

Зарезервировано

0Fh

Неправильная смена диска

Здесь приведены коды ошибок не только для устройства чтения CD-ROM, но и для других устройств (например, для принтера).

Соседние файлы в папке несколько программ