Главная · Поиск книг · Поступления книг · 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 ... 74 75 76 77 78 79 80  81 82 83 84 85 86 87 ... 198
         кую подсистему.  Данные из системной памяти в графическую пересы-
         лаются с использованием драйвера графического  адаптера.  По  той
         причине,  что этот адаптер не является устройством массовой памя-
         ти, драйвер для него должен быть символьным. Если ввод/вывод про-
         изводится с использованием только ДОМД,  нет никакого способа оп-
         ределить место в видео-памяти,  куда должны быть посланы  данные.

                                      - 6-12 -
         Если  же драйвер поддерживает IOCTL-функцию,  место в графической
         памяти можно определить через канал управления.

           Функция 44H - управление вводом/выводом для устройств (IOCTL)

            Как мы   упоминали,   не  все  устройства  поддерживают  вызов
         IOCTL-функции.  Те драйверы, которые обеспечивают управление вво-
         дом/выводом,   не   обязательно   поддерживают   все  возможности
         IOCTL-функции.  Тем не менее,  IOCTL  является  настолько  мощным
         средством  управления  работой  устройств,  что  понуждает многих
         программистов поближе познакомиться с его  возможностями.  Знание
         того,  что  можно сделать с помощью IOCTL,  несомненно определяет
         решение программиста о том,  какими функциональными особенностями
         наделить драйвер устройства.
            Функция управления вводом/выводом имеет три  основных  режима,
         которые определяются передаваемым в регистре AL кодом функции :

              - Конфигурация устройства (коды 0, 1 и в последних версиях
                MS-DOS, коды 8, 0BH, 0EH и 0FH);
              - Управление каналом ввода/вывода (коды с 2 по 5 и в MS-DOS
                версии 3.2, коды 0CH и 0DH);
              - Запрос статуса устройства (коды 6 и 7).

         Список кодов функций, поддерживаемых IOCTL, показан в таблице 6-1.
            Запрос статуса устройства возвращает либо индикатор готовности
         (0FFH) либо не готовности (0). В руководстве  программиста  фирма
         Microsoft предупреждает о том,  что код статуса может быть некор-
         ректным на момент возвращения  управления  вызывающей  программе.
         Вероятно, в руководстве имеется в виду будущая возможность  муль-
         тизадачности MS-DOS.  Можно только надеяться,  что когда появятся
         будущие версии, Microsoft найдет способ возвращать корректную ин-
         формацию. Как бы то ни было, до тех пор пока MS-DOS не стала мно-
         гозадачной, проблемы неточности статуса не должно существовать.
            Мы уже упоминали  возможности  канала  управления  устройством
         IOCTL.  Попросту говоря,  это средство пересылки буфера данных по
         вспомогательному каналу.  Механизм этого вызова идентичен  вызову
         функций ввода/вывода на основе ДОМД (функции 3FH и 40H),  за иск-
         лючением кодов  функций,  определяемых  содержимым  регистра  AX.
         Предназначены ли данные,  передаваемые по дополнительному каналу,
         для устройства или для самого драйвера - это дело разработчика.
            Не будьте, однако, ослеплены простотой этой функции и не восп-
         ринимайте ее как всего-лишь еще одну функцию ввода/вывода.  В со-
         ответствующем  приложении,  IOCTL может блестяще выступать в роли
         вторичного канала для взаимодействия с драйвером. Фирма Microsoft
         обеспечила  "запасную  дверь" для решения непредвиденных проблем.
         Они говорят - "Вам кажется,  что наш интерфейс с драйверами слиш-
         ком ограничен ? Должен быть более гибким ? Что же, попробуйте вот
         это." Такой подход является огромным шагом вперед по  сравнению с
         подходом "У нас нет этого, значит Вам это не нужно !", который не
         так давно был весьма распространен в среде  разработчиков систем.


                                      - 6-13 -
                                                         Таблица 6-1
                     Функции управления вводом/выводом (IOCTL)
         ДДДДДДВДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
           Код ¦ Версия ¦Примечание¦           Назначение
          (AL=)¦ MS-DOS ¦          ¦
         ДДДДДД†ДДДДДДДД†ДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
           0:  ¦  2.0+  ¦ #1,#2    ¦Получить информацию устройства
           1:  ¦  2.0+  ¦          ¦Установить информацию устройства
           2:  ¦  2.0+  ¦ #3,#6    ¦Читать из управляющего канала СУ
           3:  ¦  2.0+  ¦ #3,#6    ¦Писать в управляющий канал СУ
           4:  ¦  2.0+  ¦ #3,#7    ¦Читать из управляющего канала БУ
           5:  ¦  2.0+  ¦ #3,#7    ¦Писать в управляющий канал БУ
           6:  ¦  2.0+  ¦ #1       ¦Получить входную информацию
           7:  ¦  2.0+  ¦ #1       ¦Получить выходную информацию
           8:  ¦  3.0+  ¦ #2       ¦БУ поддерживает смену носителя ?
           9:  ¦  3.2+  ¦          ¦БУ локальное или удаленное ?
           A:  ¦  3.2+  ¦          ¦Описатель локальный или удаленный ?
           B:  ¦  3.0+  ¦ #4       ¦Изменить счетчик попыток
           C:  ¦  3.3+  ¦ #5       ¦Запрос на переключение кодовых страниц
           D:  ¦  3.3+  ¦ #5       ¦Запрос IOCTL для блоковых устройств
           E:  ¦  3.3+  ¦ #5       ¦Получить имя логического диска
           F:  ¦  3.3+  ¦ #5       ¦Установить имя логического диска
         ДДДДДДБДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
         Примечание #1: Функция поддерживает как файлы, так и устройства.
         Примечание #2: Функция не поддерживает сетевую работу.
         Примечание #3: Функция разрешается  битом  14  словом  атрибутов
                        драйвера  и  поддержка определяется битом 14 слова
                        конфигурации.
         Примечание #4: Функция требует загрузки команды SHARE.
         Примечание #5: Функция разрешена битом 6 слова атрибутов драйвера.
         Примечание #6: СУ - символьное устройство.
         Примечание #7: БУ - блоковое устройство.

              Конфигурация с помощью команд управления вводом/выводом

            MS-DOS обеспечивает  выполнение команд конфигурации ("Получить
         или   Установить    информацию    устройства"),    поддерживаемых
         IOCTL-функцией. На рисунке 6-2 показано 16-битовое слово конфигу-
         рации, используемое функциями "Получить/Установить информацию ус-
         тройства" (коды 0 и 1). В текущих версиях MS-DOS могут быть опре-
         делены только младшие 8 бит этого слова.  Ниже описано назначение
         тех битов слова конфигурации,  которые имеют значение для драйве-
         ров устройств или влияют на способ обработки драйвером данных.

                                IOCTL БИТ 14: CTRL

            Бит CTRL устанавливается в 1 если драйвер  может  обрабатывать
         управляющие последовательности. Этот бит точно отражает состояние
         IOCTL бита в слове атрибутов драйвера устройства.  IOCTL-бит  ис-
         пользуется драйвером для оповещения MS-DOS о том, что драйвер бу-
         дет принимать управляющие последовательности.  Этот бит  применим
         как к файлам, так и к устройствам.



                                      - 6-14 -
          15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
        ЙНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСННН»
        є R ¦ C ¦   ¦   ¦   ¦   ¦   ¦   ¦ I ¦ E ¦ B ¦ S ¦ I ¦ I ¦ I ¦ I є
        є E ¦ T ¦   ¦   ¦   ¦   ¦   ¦   ¦ S ¦ O ¦ I ¦ P ¦ S ¦ S ¦ S ¦ S є
        є S ¦ R ¦    R E S E R V E D    ¦ D ¦ F ¦ N ¦ E ¦ C ¦ N ¦ C ¦ C є
        є   ¦ L ¦   ¦   ¦   ¦   ¦   ¦   ¦ E ¦   ¦   ¦ C ¦ L ¦ U ¦ O ¦ I є
        є   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦ V ¦   ¦   ¦ L ¦ K ¦ L ¦ T ¦ N є
        ИНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННј
         ЗНАЧЕНИЯ БИТОВ                     УСТРОЙСТВО
         CTRL =1 : Поддержка управляющего   EOF  =0 : Конец файла на входе
                   канала                   BIN  =1 : Работа в двоичном
         ISDEV=1 : Канал - это устройство             режиме
              =0 : Канал - это файл         SPECL=1 : Специальное устрой-
                                                      ство
                                            ISCLK=1 : Устройство "ЧАСЫ"
         ФАЙЛ                               ISNUL=1 : Устройство NUL
         После записи в канал биты с 0 по   ISCOT=1 : Консоль вывода
         5 - это номер блокового устр-ва    ISCIN=1 : Консоль ввода

                    Рисунок 6-2. Слово конфигурации устройства.

                                IOCTL БИТ 7: ISDEV

            Бит ISDEV равен 1 если канал (или описатель)  открыт  к  уст-
         ройству. Если канал открыт к файлу, то этот бит сбрасывается в 0.

                                 IOCTL БИТ 5: BIN

            Пятый бит конфигурации (BIN) определяет подготовленный или не-
         подготовленный режим работы драйвера.  Другими словами,  этот бит
         определяет будут ли данные проходить дополнительную обработку при
         передаче или MS-DOS будет просто передавать "сырую" двоичную  ин-
         формацию между устройством и прикладной программой.  Под дополни-
         тельной обработкой подразумевается обработка определенных  управ-
         ляющих  символов,  расширение  символов  табуляции,  проверка  на
         нажатие клавиш CTRL-BREAK и т.п.
            Более традиционными  для этих функций являются термины "двоич-
         ный режим" и "ASCII режим",  соответствующие неподготовленному  и
         подготовленному  режимам.  В  руководстве программиста для MS-DOS
         приводятся более детальные инструкции о том,  как проверить и ус-
         тановить пятый бит. Мы, в свою очередь, обсудим влияние этого би-
         та на работу символьных драйверов.  (Заметьте,  что, как показано
         на рис.6-2, этот бит не используется для блоковых драйверов).
            Если символьный драйвер находится в подготовленном  режиме (по
         умолчанию), данные передаются побайтно. Другими словами, одно об-
         ращение к драйверу приводит к передаче одного символа. Это проис-
         ходит вне зависимости от того,  какое количество байт затребовано
         прикладной программой при  обращении  к  MS-DOS.  Например,  если
         прикладной программе требуется вывести 128 байт на символьное ус-
         тройство,  а драйвер работает в подготовленном режиме,  то MS-DOS
         сделает  128 обращений к драйверу с функцией "ВЫВОД" или "ВЫВОД С
         ПРОВЕРКОЙ", передавая за один вызов один байт.
            Посимвольного ввода/вывода можно избежать,  переведя драйвер в
         неподготовленный режим.  Последний может быть установлен только с
         помощью IOCTL функции. В неподготовленном режиме количество пере-
         даваемых байт, заданное прикладной программой, используется также
         при обращении к драйверу.  Пользуясь тем же самым примером,  если
         прикладная программа требует вывода 128 байт на  символьное  уст-

                                      - 6-15 -
         ройство,  и драйвер работает в неподготовленном режиме, то MS-DOS
         сделает единственное обращение к драйверу с функцией  "ВЫВОД" или
         "ВЫВОД С ПРОВЕРКОЙ",  задавая количество передаваемых байт равным
         128.
                                IOCTL БИТ 4: SPECL
            Подобно биту CTRL,  бит SPECL в слове конфигурации точно отра-
         жает  состояние бита SPECL в слове атрибутов.  Будучи установлен-
         ным,  этот бит означает, что данный драйвер (который почти всегда
         является  драйвером  консоли) способен выполнять высокоскоростной
         вывод в двоичном режиме, используя прерывание INT 29H.
            Бит BIN,  определяющий  неподготовленный режим,  также требует
         разрешения высокоскоростного режима вывода, определяемого атрибу-
         том SPECL. Если установлены как бит слова конфигурации BIN, так и
Предыдущая страница Следующая страница
1 ... 74 75 76 77 78 79 80  81 82 83 84 85 86 87 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама