Главная · Поиск книг · Поступления книг · 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 ... 78 79 80 81 82 83 84  85 86 87 88 89 90 91 ... 198
         команды,  если  драйвер  загружен  под  управлением  новой версии
         MS-DOS.

















         
                                      - 6-26 -
                                                         Таблица 6-2
                         Команды для драйверов устройств

    ДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДД
    Команда ¦ Версия¦ Блоковые¦ Симв-ные¦ Атрибут ¦ Название команды
            ¦  DOS  ¦  устр-ва¦  устр-ва¦         ¦
    ДДДДДДДД†ДДДДДДД†ДДДДДДДДД†ДДДДДДДДД†ДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДД
      0:    ¦  2.0  ¦    +    ¦    +    ¦         ¦ INIT
      1:    ¦  2.0  ¦    +    ¦    -    ¦         ¦ MEDIA CHECK
      2:    ¦  2.0  ¦    +    ¦    -    ¦         ¦ BUILD BPB
      3:    ¦  2.0  ¦    +    ¦    +    ¦ 14:IOCTL¦ INPUT IOCTL
      4:    ¦  2.0  ¦    +    ¦    +    ¦         ¦ INPUT
      5:    ¦  2.0  ¦    -    ¦    +    ¦         ¦ Nondestructive INPUT
      6:    ¦  2.0  ¦    -    ¦    +    ¦         ¦ INPUT STATUS
      7:    ¦  2.0  ¦    -    ¦    +    ¦         ¦ INPUT FLUSH
      8:    ¦  2.0  ¦    +    ¦    +    ¦         ¦ OUTPUT
      9:    ¦  2.0  ¦    +    ¦    +    ¦         ¦ OUTPUT with VERIFY
     10:    ¦  2.0  ¦    -    ¦    +    ¦         ¦ OUTPUT STATUS
     11:    ¦  2.0  ¦    -    ¦    +    ¦         ¦ OUTPUT FLUSH
     12:    ¦  2.0  ¦    +    ¦    +    ¦ 14:IOCTL¦ OUTPUT IOCTL
     13:    ¦  3.0  ¦    +    ¦    +    ¦ 11:OCRM ¦ DEVICE OPEN
     14:    ¦  3.0  ¦    +    ¦    +    ¦ 11:OCRM ¦ DEVICE CLOSE
     15:    ¦  3.0  ¦    +    ¦    -    ¦ 11:OCRM ¦ REMOVABLE MEDIA
     16:    ¦  3.1  ¦    -    ¦    +    ¦ 13:OTB  ¦ OUTPUT until busy
     19:    ¦  3.2  ¦    +    ¦    +    ¦ 6:GIOCTL¦ Generic IOCTL Request
     23:    ¦  3.2  ¦    +    ¦    -    ¦ 6:GIOCTL¦ Get Logical Device
     24:    ¦  3.2  ¦    +    ¦    -    ¦ 6:GIOCTL¦ Set Logical Device
     ДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДД
      Примечание 1. В колонке "Версия DOS" указана самая ранняя версия
                    MS-DOS, начиная с которой поддерживается эта команда.
      Примечание 2. В колонке "Атрибут" указаны бит слова атрибутов
                    драйвера, разрешающий использование данной команды.
     ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН

            Последняя задача программы ПРЕРЫВАНИЙ после обработки  требуе-
         мой команды заключается в установке статуса возврата в блоке зап-
         роса.  В листинге 6-3 ожидается,  что обработчик  каждой  команды
         возвращает статус завершения в регистре AX. После возврата управ-
         ления от обработчика,  программа ПРЕРЫВАНИЙ записывает  статус  в
         поле слова состояния заголовка запроса (поле request.status). За-
         тем программа ПРЕРЫВАНИЙ устанавливает бит DONE  ("выполнено")  в
         слове  состояния и возвращает управление MS-DOS.  Так как возврат
         управления должен быть выполнен командой RETF, программа ПРЕРЫВА-
         НИЙ определяется как процедура типа FAR.

                     Листинг 6-3. Пример программы ПРЕРЫВАНИЙ.
         -----------------------------------------------------------------
     ;
     ; Определение битов слова состояния драйвера устройства
     ;
     ST_ERROR    equ        1000000000000000b       ; была ошибка
     ST_BUSY     equ        0000001000000000b       ; устройство занято
     ST_DONE     equ        0000000100000000b       ; команда выполнена
     ;
     ; Определение кодов ошибки при обработке команд
     ;
     WRITE_PROTECT          equ      0              ; защита от записи
     UNKNOWN_UNIT           equ      1              ; неопознано устройство
     NOT_READY              equ      2              ; устройство не готово

                                      - 6-27 -
     UNKNOWN_COMMAND        equ      3              ; команда не опознана
            .
            .
     ;
     ;********** Точка входа в программу ПРЕРЫВАНИЙ ************************
     ;
     INTERRUPT    proc       far
                 pusha                              ; сохраним все рабочие
                 push       ds                      ;   регистры
                 push       es
                 push       cs                      ; установим локальный
                 pop        ds                      ;   сегмент данных
                 les        di,[req_ptr]            ; получим адрес блока
                 mov        bl,es:[di.command]      ;   запроса и код
                                                    ;   команды
     ;
     ; Установим заранее флаг ошибки (на случай, если команда будет
     ;   неопознана)
     ;
                 mov        ax,(ST_ERROR or UNKNOWN_COMMAND)
                 cmp        bl,[max_cmd]             ; эта команда
                 ja         exit                     ;   поддерживается ?
     ;
     ; Передадим управление соответствующему обработчику.  На входе каждый
     ; обработчик получает регистры CS и DS установленными на  сегмент
     ; DRIVER  и регистры ES:DI указывающими на блок запроса.  Свой статус
     ; обработчик должен вернуть в регистре AX.
     ;
                 xor        bh,bh                    ; превратим команду
                 shl        bx,1                     ;   в индекс
                 call       word ptr cs:jumptab[bx]  ; обработаем команду
     ;
     ; Запишем статус в слово состояния блока запроса
     ;
     exit:       push       cs
                 pop        ds
                 les        di,[req_ptr]            ; получим адрес блока
                 or         ax,ST_DONE              ; запроса, установим
                 mov        es:[di.status],ax       ; бит DONE и сохраним
                 pop        es                      ; статус
                 pop        ds                      ; восстановим контекст
                 popa
                 ret                                ; RETF
     INTERRUPT    endp
            .
            .
            .
     ;
     ;********** Таблица переходов на обработку команд *******************
     ;
     JUMPTAB     label      word
                 dw         offset INIT            ; 0 - Инициализация
                 dw         offset MEDIA_CHECK     ; 1 - Проверка носителя
                 dw         offset BUILD_BPB       ; 2 - Построить BPB
                  .
                  .
                  .

                                      - 6-28 -
                 dw         offset NO_COMMAND      ; 16
                 dw         offset GET_LOGICAL     ; 17 - Получить имя ЛУ
                 dw         offset SET_LOGICAL     ; 18 - Установить ЛУ
                  .
                  .
                  .

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

            Слово состояния, показанное на рис.6-5, используется для инди-
         кации ошибок,  случившихся при выполнении какой-либо команды (бит
         ERROR -- ошибка) и для отображения состояния устройства по коман-
         дам  опроса  статуса и проверки смены носителя (бит BUSY -- заня-
         то).

        15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
       ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДД·
       ¦ E ¦   ¦   ¦   ¦   ¦   ¦ B ¦ D ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   є
       ¦ R ¦   ¦   ¦   ¦   ¦   ¦ U ¦ O ¦   ¦   ¦  КОД  ОШИБКИ  ¦   ¦   є
       ¦ R ¦  ЗАРЕЗЕРВИРОВАНО  ¦ S ¦ N ¦   ¦  ЕСЛИ БИТ 15 РАВЕН 1  ¦   є
       ¦ O ¦   ¦   ¦   ¦   ¦   ¦ Y ¦ E ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   є
       ¦ R ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   є
       ФНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННј
         Значение битов :

            ERROR = 1 : При обработке команды случилась ошибка.
                        Код ошибки находится в битах с 0 по 7.
            BUSY  = 1 : Устанавливается командами опроса состояния
                        и проверки смены носителя.
            DONE  = 1 : Команда выполнена. Устанавливается на выходе.
                 Рисунок 6-5. Слово состояния драйвера устройства

            Бит ERROR устанавливается, если возникла ошибка при выполнении
         какой-либо  команды  или  если  команда является недопустимой для
         данного драйвера.  При установленном бите ошибки  драйвер  обязан
         поместить соответствующий код ошибки в биты с 0 по 7 слова состо-
         яния.  Возможные ошибки и их коды перечислены в таблице 6-3.  Бит
         DONE  должен всегда устанавливаться драйвером перед возвратом уп-
         равления к MS-DOS.
                                                         Таблица 6-3
                          Коды ошибок драйверов устройств
         ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДД
          Код          Ошибка                ¦Код        Ошибка
         ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДДДД
           0  Запись на устройство запрещена ¦ 8  Сектор не обнаружен
           1  Неопознанное устройство        ¦ 9  Нет бумаги в принтере
           2  Устройство не готово           ¦ A  Ошибка при записи
           3  Команда не опознана            ¦ B  Ошибка при чтении
           4  Неверно переданы данные        ¦ C  Общая ошибка
           5  Неверна длина заголовка запроса¦ D  Зарезервировано
           6  Ошибка при установке головки   ¦ E  Зарезервировано
           7  Неопознанный носитель данных   ¦ F  Недопустимая смена диска
         ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДД
          Примечание 1.  Все коды ошибок представлены в виде  шестнадцати-
                         ричных значений.
          Примечание 2.  Код ошибки 0FH поддерживается только в MS-DOS вер-
                         сии 3.0 и более поздних.

                                      - 6-29 -

                            Команды драйверов устройств

            Заголовок запроса,  как правило,  содержит не всю  информацию,
         которая требуется для большинства команд. Команд, которые не тре-
         буют дополнительной информации,  довольно  мало  --  это  команды
         INPUN/OUTPUT STATUS , FLUSH OUTPUT, OPEN/CLOSE DEVICE и REMOVABLE
         MEDIA.  Все остальные команды требуют гораздо больше  информации,
         чем  содержится в заголовке запроса.  Для каждой из этих команд к
         заголовку запроса  добавляется  дополнительная  информация.  Поле
         request.length  заголовка  запроса содержит при этом общий размер
         блока запроса (в байтах).
            Для облегчения  доступа  к  различным элементам блока запроса,
         опять-таки,  могут быть использованы структуры.  В листинге  6-10
         (листинге  драйвера  RDISK,  приведенного в конце главы) показано
         определение структур для тех команд,  которые обрабатываются этим
         драйвером.  Заметьте, что нам не нужно определять все поля в каж-
         дом блоке,  т.к. различные запросы часто используют похожие блоки
         запросов. Это обстоятельство довольно удобно, т.к. MASM не позво-
         ляет использовать одно и тоже имя более  одного  раза,  даже  для
         различных структур.

                                   Команда INIT
      ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
      є                                                                  є
      є  Команда INIT (0)                                                є
      є                                                                  є
      є  ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД         ЪДДД¬                  є
      є  +00 : 23                   Длина         ¦ X ¦ Блок. драйверы   є
      є  ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД         АДДДЩ                  є
      є  +01 :                 Устройство         ЪДДД¬                  є
Предыдущая страница Следующая страница
1 ... 78 79 80 81 82 83 84  85 86 87 88 89 90 91 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама