Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 76 77 78 79 80 81 82  83 84 85 86 87 88 89 ... 198
              ret
    STRATEGY  endp
    ;
    ;******* ПРОГРАММА ПРЕРЫВАНИЙ *****************************************
    ;
    ; Обработать команду, находящуюся в заголовке запроса. Адрес заголовка
    ; запроса содержится в REQ_PTR в форме СМЕЩЕНИЕ:СЕГМЕНТ.
    ;
    INTERRUPT  PROC    far
              pusha                    ; Сохранить все регистры

                                      - 6-19 -
               lds     bx,cs:[req_ptr]  ; Получить адрес заголовка запроса
                .
                .
                .
     INTERRUPT  ENDP
                .
                .
                .
     DRIVER    ENDS
               END

     ---------------------------------------------------------------------

                                Заголовок драйвера

            Заголовок драйвера -- это блок данных длиной 18  байт, которым
         должен начинаться любой драйвер. Заголовок драйвера всегда должен
         располагаться начиная с нулевого смещения  в  сегменте  драйвера.
         При  загрузке драйвера MS-DOS считывает заголовок для того, чтобы
         определить тип драйвера и точки  входа  в  драйвер.  В  заголовке
         драйвера содержится четыре типа сведений, критичных для использо-
         вания драйвера системой :  ПОЛЕ СВЯЗИ,  СЛОВО АТРИБУТОВ,  ВЕКТОРА
         ТОЧЕК ВХОДА и ПОЛЕ ИМЕНИ/КОЛИЧЕСТВА.

                                    Поле связи

            Первые четыре байта заголовка драйвера это FAR указатель (сме-
         щение:сегмент) на следующий драйвер в цепочке (списке) драйверов.
         При создании драйвера эти байты устанавливаются равными FFFF:FFFF
         (-1).  При  загрузке  нового драйвера его адрес помещается в поле
         связи предыдущего драйвера.  Исключением являются файлы, содержа-
         щие  несколько  драйверов одновременно.  В этом случае первые два
         байта поля связи должны содержать смещение  заголовка  следующего
         драйвера.

                                  Слово атрибутов

            Следующее слово заголовка драйвера называется  словом  атрибу-
         тов.  Оно  содержит ряд однобитовых полей,  которые характеризуют
         тип и возможности драйвера.  На рис.6-4 показано  расположение  и
         значение  битов  в  слове  атрибутов.  Слово атрибутов для разных
         драйверов может иметь, например, следующее значение :

                Драйвер диска формата IBM - 0000
                Стандартный драйвер консоли - 8003H
                Драйвер стандартного устройства (напр. PRN) - 8000H

         БИТ15: CHR.  Бит CHR должен быть сброшен в 0,  если драйвер пред-
         назначен  для  блоковых устройств,  и должен быть установлен в 1,
         если драйвер будет обслуживать символьное устройство  (см. раздел
         "Типы драйверов устройств").

         БИТ14: IOCTL.  Бит  IOCTL является необязательным.  Его установка
         информирует MS-DOS о том, что драйвер поддерживает средства кана-
         ла прямого управления. Если IOCTL бит установлен, то драйвер ОБЯ-
         ЗАН поддерживать команды 3 и 12 (IOCTL ввод и вывод), в противном

                                      - 6-20 -
         случае бит 14 должен быть сброшен. Указанные команды доступны при
         помощи подфункций 2 и 3 (для символьных устройств) или 4 и 5 (для
         блоковых устройств) функции MS-DOS 44H.
         БИТ13: NONIBM/OTB.  Для  блоковых  драйверов  этот бит называется
         также NONFAT бит. Будучи установленным, этот бит указывает на то,
         что блоковое устройство может не поддерживать стандартной для IBM
         /MS-DOS структуры диска. В этом случае обработка драйвером команд
         INIT и BUILD BPB будет происходить особым образом. Для символьных
         драйверов в MS-DOS версий 3.2 и более  поздних,  этот  бит  носит
         название  OTB  (Output  Until Busy) -- "Вывод пока не занято",  и
         указывает на то,  что драйвер поддерживает дополнительную команду
         9  (Output  Until Busy).  Эта команда полезна для символьных уст-
         ройств,  имеющих буфер большой емкости, таких как некоторые прин-
         теры. Символьные драйверы, используемые с MS-DOS версий 3.1 и ни-
         же, должны иметь этот бит сброшенным в 0.

         БИТ12: NETWORK. Этот бит является необязательным атрибутом, впер-
         вые определенный в MS-DOS версии 3.10. Интересно, что бит NETWORK
         не упоминался в последующей документации по MS-DOS версий 3.2 или
         3.3,  так что использование его в настоящее время оставляет неко-
         торые вопросы.  Это бит предназначен для информирования MS-DOS  о
         том, что драйвер обслуживает сетевое устройство. Сетевые устройс-
         тва помечаются как блоковые устройства  в  слове  атрибутов;  при
         этом делается допущение, что обслуживаемое сетевое устройство яв-
         ляется "окном" в сеть,  позволяя, таким образом, целиком перенап-
         равлять на обработку удаленному устройству системные вызовы.  Ко-
         нечно,  для  того,  чтобы  воспользоваться  услугами   сети   для
         указанного перенаправления, необходима поддержка соответствующего
         средства, такого как MS-NET.

         БИТ11: OCRM. Атрибут OCRM (Open/Close/Removable Media) появляется
         начиная с MS-DOS версии 3.0. Он может использоваться как для сим-
         вольных,  так и для блоковых драйверов. Этот бит является не обя-
         зательным,  хотя Microsoft рекомендует устанавливать его для всех
         новых драйверов. Поняв назначение этого атрибута, программист не-
         сомненно сможет определиться в его использовании (или не  исполь-
         зовании).

            Как для символьных,  так и для  блоковых  драйверов  установка
         этого  бита  означает  поддержку  драйвером  команд DEVICE OPEN и
         DEVICE CLOSE (команды 13 "Открыть устройство" и 14  "Закрыть  уст-
         ройство").  Блоковые  драйверы  с установленным битом OCRM должны
         также поддерживать команду CHECK FOR REMOVABLE MEDIA (команда 15,
         "Проверка замены носителя").
            Для блоковых устройств команды DEVICE OPEN и DEVICE CLOSE  вы-
         даются  только  в  режиме  совместного использования файлов (file
         sharing).  Этот режим включается после запуска команды SHARE.EXE.
         При установленном режиме совместного использования файлов, коман-
         да DEVICE OPEN выдается драйверу при вызове  функций  MS-DOS  0FH
         ("Открыть файл, используя FCB") или 3DH ("Открыть файл при помощи
         вызова  функций 10H ("Закрыть файл, используя FCB") или 3H ("Зак-
         рыть файл при помощи описателя").  Для  дисковых устройств коман-
         ды  DEVICE  OPEN  и  DEVICE CLOSE можно использовать для подсчета
         числа открытий определенного устройства, например, числа открытых
         файлов на диске.  Это может быть полезно при определении недопус-
         тимости смены дискеты в дисководе, если на момент замены носителя

                                      - 6-21 -
         оставались открытые файлы.
            Для символьных устройств команды DEVICE OPEN  и  DEVICE  CLOSE
         выдаются  всегда,  когда соответствующее устройство открывается и
         закрывается,  независимо от режима совместного использования фай-
         лов,  так что загрузка команды SHARE.EXE не требуется. При работе
         с устройствами могут быть использованы только функции  MS-DOS 3DH
         ("Открыть файл при помощи описателя") и 3H ("Закрыть файл при по-
         мощи описателя"),  так как FCB-метод не работает с  устройствами.
         Для символьных устройств команды DEVICE OPEN и DEVICE CLOSE могут
         быть использованы для предотвращения одновременного доступа к та-
         ким устройствам, как принтер или модем, а также для вызова проце-
         дур пред- и после обработки,  таких как процедуры настройки прин-
         тера или завершение сеанса связи для модема.
            Заметим, что устройства CON,  AUX и PRN открыты всегда, так как
         связаны с описателями 0,  1,  и 2 (STDIN,  STDOUT и STDERR --  все
         отображаются на устройство CON),  описателем 3 (STDAUX, отображае-
         мый на устройство AUX) и описателем  4  (STDPRN,  отображаемый  на
         устройство PRN).
            Команда CHECK  FOR REMOVABLE MEDIA выдается при вызове пользо-
         вателем функции MS-DOS 44H  ("Управление  работой  устройств")  с
         подкомандой номер 8.  Драйвер должен вернуть информацию о наличии
         сменного либо несменного носителя.
            Атрибут OCRM  (Open/Close/Removable  Media)  также учитывается
         при обработке драйвером команды BUILD BPB ("Построить блок  пара-
         метров  BIOS").  Сменный  носитель может содержать "идентификатор
         тома", одиннадцатисимвольное имя диска. Если устройство поддержи-
         вает сменный носитель,  имя тома должно быть определено и обрабо-
         тано драйвером. Подробнее об этом можно найти при описании коман-
         ды BUILD BIOS PARAMETER BLOCK.

         БИТЫ с 10 по 7 : Зарезервированы.
         ---------------------------------
         БИТ6: GIOCTL.  В MS-DOS версии 3.3 бит GIOCTL ("Группа команд уп-
         равления") устанавливается в 1 для индикации того,  что  блоковый
         или символьный драйвер поддерживает дополнительные подкоманды ко-
         мандой 19 (GENERIC I/O CONTROL REQUEST).  Если этот бит разрешает
         использование  команды 19,  драйвер должен также поддерживать ко-
         манды 23 и 24 (GET/SET LOGICAL DRIVE --  Получить/Установить  имя
         логического диска).
            При поддержке драйвером указанных команд,  программа пользова-
         теля  может  выдать команду GENERIC I/O CONTROL REQUEST с помощью
         функции 44H MS-DOS (подфункции 0CH и 0DH). Для блоковых драйверов
         команды  GET/SET  LOGICAL DRIVE могут быть выполнены вызовом под-
         функций 0H (GET LOGICAL DRIVE) и 0FH (SET LOGICAL  DRIVE) функции
         MS-DOS 44H. Для получения более подробной информации обратитесь к
         описанию функции 44H и описанию команд драйвера GENERIC  IOCTL  и
         GET/SET LOGICAL DRIVE.

         БИТ 5 : Зарезервирован.
         -----------------------

         БИТ4: SPECL. Бит SPECL является необязательным атрибутом, исполь-
         зуемым  только драйвером консоли,  и информирующим MS -DOS о том,
         что драйвер установил специальный обработчик INT 29H для выполне-
         ния  высокоскоростного  вывода на консоль (устройство CON).  Если
         этот бит установлен, то при необходимости быстрого вывода на кон-

                                      - 6-22 -
         соль MS-DOS выдает программное прерывание INT 29H,  передавая вы-
         водимый символ в регистр AL.  Режим быстрого вывода управляется и
         индицируется  битом 5 (режим двоичного вывода) в слове конфигура-
         ции. При выдаче прерывания INT 29H ожидается, что драйвер выведет
         переданный в регистре AL символ и вернет управление. Обычные про-
         цедуры ввода/вывода пропускаются. Как стандартный драйвер консоли
         MS-DOS,  так  и  заменяющий его драйвер ANSI.SYS поддерживают эту
         особенность.  Если используемый драйвер консоли поддерживает пре-
         рывание  INT  29H  (что  определяется  чтением слова конфигурации
         драйвера), то прикладная программа также может осуществлять быст-
         рый вывод на консоль, используя INT 29H.
            Заметим, что этот бит объявлен резервным в документации  IBM и
         вообще игнорируется в последней документации фирмы Microsoft. Оба
         этих факта говорят о том,  что поддержка бита SPECL в будущем  не
         гарантируется.

         БИТ3: CLOCK.  Бит  CLOCK  устанавливается на драйвере символьного
         устройства, имеющего имя "CLOCK$", для обозначения этого устройс-
Предыдущая страница Следующая страница
1 ... 76 77 78 79 80 81 82  83 84 85 86 87 88 89 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама