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

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


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

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


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

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

Предыдущая страница Следующая страница
1 ... 48 49 50 51 52 53 54  55 56 57 58 59 60 61 ... 198
         таймер,который генерирует прерывания 18,2 раза в секунду и обеспе-
         чивает механизм для планирования периодических  действий. Утилита
         DOS  PRINT использует таймер для поддержания цикла принтера неза-
         висимо от происходящего в системе.
              Горячие ключи и таймер прерывают работу центрального процес-
         сора,  когда им необходимо его  внимание.  Процессор  обслуживает
         прерывание  и  возвращается  к  прерванной  задаче.  Персональные
         компьютеры имеют специальные аппаратные  средства  для  обработки
         прерываний.  И клавиатура,  и таймер взаимодействуют с ними; если
         Вы хотите использовать клавиатуру и таймер,  то необходимо знать,
         как  аппаратные  средства  и программное обеспечение обрабатывают
         системные прерывания.

                               Аппаратные прерывания

              На уровне аппаратных средств,  поддерживающих  MS-DOS,  есть
         система прерываний от аппаратных средств, каждое из которых ассо-
         циировано  с конкретным устройством. Каждое устройство, ожидающее
         обслуживания процессором,  посылает контроллеру прерываний 8259A,
         который планирует обработку прерываний, запрос на прерывание, или
         IRQ. Каждое  устройство  имеет некоторый приоритет.  Устройство с
         высшим приоритетом первым получает доступ  к  процессору   раньше
         менее  важных устройств.  (Контроллер прерываний 8259A может быть
         запрограммирован и по-другому,  но другие способы обработки менее
         выгодны для  использования).  Когда контроллер прерываний решает,
         что прерывание может быть обработано,  он посылает на  устройство
         сообщение  "подтверждение приема прерывания",  блокирует все ос-
         тальные прерывания и генерирует прерывание.
              В ответ на конкретное аппаратное прерывание,  процессор ищет
         адрес обработки прерывания в таблице векторов  прерываний  (IVT).
         Эта таблица занимает 256 двойных слов (1024 байта) памяти. Каждая
         ее строка содержит адрес подпрограммы обработки прерывания (ISR).
         Процессор  запоминает текущие флаги и программный счетчик (CS:IP)
         и начинает обслуживание прерывания.
              ISR делает  все  необходимое для обслуживания прерываний.  В
         некоторый момент ISR посылает сообщение о конце  прерывания (EOI)
         контроллеру 8259, означающее, что он готов принять запрос на  об-
         служивание следующего прерывания. Контроллер прерываний не  будет
         принимать прерывания от этого или других устройств с более низким
         приоритетом, пока не получит этого сообщения. После того, как ISR
         сделала свою работу,  она выполняет команду IRET, которая восста-
         навливает флаги и первоначальный CS:IP.

                                      - 4-4 -

                               Программные прерывания

              Для процессоров 80х86 механизм программных прерываний обеспе-
         чивает команда INT (обработка прерываний). Процессор одинаково об-
         рабатывает программные и аппаратные прерывания. При исполнении ко-
         манда INT передает управление ISR, специфицированной операндом ко-
         манды.  Например,  команда int 60h вызывает подпрограмму обработки
         прерываний, адрес которой записан в IVT со смещением 180h (4х60h).
         Контроллер прерываний не включается и ISR не посылает EOI контрол-
         леру  прерываний.  DOS  широко  использует программные прерывания.
         Поскольку все обращения к ISR осуществляются через  IVT,  заменить
         подпрограмму обработки прерываний несложно.  Вы будете часто иметь
         повод для модификации IVT при написании резидентных программ.

                               Прерывания от таймера

              PC использует один канал  интегральной  схемы  8253  счетчи-
         ка/таймера для запроса прерываний 18,2 раза в секунду. Контроллер
         8259A в ответ на этот запрос генерирует прерывание  int  8h.  Это
         прерывание  по  таймеру  имеет высший приоритет и будет вытеснять
         любые другие прерывания до тех пор,  пока не будут  заблокированы
         все прерывания командой CLI (очистка прерываний).
               Это прерывание обычно обслуживает программа ROM-BIOS. После
         обновления времени суток и выполнения некоторых  других служебных
         задач,  программа ROM-BIOS выполняет команду int 1Ch.  Программы,
         которые должны выполняться периодически,  могут  установить  свою
         собственную подпрограмму обработки прерывания int 1Сh. По умолча-
         нию подпрограмма обработки прерывания int 1Сh  ROM-BIOS  содержит
         команду IRET.

                                    Клавиатура

              Стандартная клавиатура PC содержит свой собственный  микроп-
         роцессор (Intel 8048 или его эквивалент).  Нажатие или освобожде-
         ние клавиши посылает сигнал IRQ1 контроллеру  прерываний, который
         вызывает подпрограмму обслуживания прерывания int 9 для обработки
         этого запроса.  Приоритет прерываний от клавиатуры  второй  после
         прерываний от таймера.
              ROM (постоянное запоминающее устройство) на  системной плате
         по умолчанию содержит ISR int 9.  Это достаточно сложная програм-
         ма.  Она читает и декодирует считываемый код, отслеживает наличие
         специальных клавиш (Control,Shift,Alt и др.) и преобразует скани-
         руемые коды  во  внутренние.  Каждое нажатие клавиши вырабатывает
         два сканируемых кода - для нажатой и  отпущенной  клавиши.  Выбор
         сканируемого  кода  зависит от информации о состоянии клавиатуры.
         Например,  нажатие клавиши A производит сканируемый код 61h  (код
         ASCII строчной буквы а). Если при нажатии клавиши A нажата управ-
         ляющая клавиша, сканируемый код трансформируется в 01h (код ASCII
         для Control-A).  Если при нажатии клавиши A нажата клавиша Shift,
         сканируемый код получается 41h (ASCII для заглавной буквы A).
              В результате  нажатия таких клавиш как Shift и Alt,int 9 ISR
         обновляет байт состояния клавиатуры внутри сегмента данных BIOS и
         обращается к IRET. Сегмент данных BIOS начинается с параграфа 40h
         и содержит множество динамических переменных,  используемых  раз-
         личными подпрограммами ROM-BIOS. Листинг 4-1 описывает часть этой
         области данных.

                                      - 4-5 -

                         Листинг 4-1. Сегмент данных BIOS
         ----------------------------------------------------------------

         KB_M_RShift     EQU   01h   ; установка правой клавиши сдвига
         KB_M_LShift     EQU   02h   ; установка левой клавиши сдвига
         KB_M_Control    EQU   04h   ; установка управляющей клавиши
         KB_M_Alt        EQU   08h   ; установка клавиши "Alt"
         KB_M_Scroll     EQU   10h   ; нажатие клавиши "Scroll Lock"
         KB_M_Num        EQU   20h   ; нажатие клавиши "Num Lock"
         KB_M_Caps       EQU   40h   ; нажатие клавиши "Caps Lock"
         KB_M_InsState   EQU   80h   ; режим вставки

         KB_C_BufSize    EQU   10h   ; размер буфера клавиатуры

         BIOS            SEGMENT     at 40h
                         ORG   17h   ; не существенно для др. данных BIOS
         KB_B_Flag       DB    0     ; флаг состояния клавиатуры
                         ORG   1ah   ; не существенно для 18h и 19h
         KB_W_BufHead    DW    0     ; начало буфера клавиатуры
         KB_W_BufTail    DW    0     ; оставшаяся часть буфера клавиатуры
         KB_T_Buffer     DW    KB_C_BufSize DUP(0)
         BIOS            ENDS
         ----------------------------------------------------------------

              Определенные комбинации  клавиш  имеют специальные значения.
         Подпрограмма обработки прерываний от клавиатуры выполняет команду
         int 1Bh, когда она видит сканируемый код, соответствующий клавише
         прерывания.  По умолчанию ISR int 1Bh содержит  IRET,  но  обычно
         драйвер консоли устанавливает свою собственною ISR 1Bh,  что дает
         ему возможность обрабатывать его прерывания  специальным образом.
         (Этот вопрос обсуждается в главе об обработке прерываний).
              В конечном счете  страшная  Cntrl-Alt-Del  выдает  int  19h.
         Дальнейшее  обсуждение  int 19h и комбинации клавиш Cntrl-Alt-Del
         необязательно.
              Если код  клавиши не имеет специального значения,  ISR int 9
         сохраняет его в буфере клавиатуры.  Этот буфер начинается со сме-
         щения  1h внутри сегмента данных BIOS и представляет собой цирку-
         лярный буфер из 16 слов. Смещения 1Ah и 1h в этом сегменте указы-
         вают, соответственно, на начало и конец буфера. Если буфер полон,
         ISR int 9 выдает звуковой сигнал и отвергает символ;  в противном
         случае символ вставляется в конец буфера.
              Длина каждого элемента буфера 2 байта; его формат зависит от
         того, как ISR int 9 интерпретирует нажатие клавиши.
              С помощью определенных комбинаций клавиш (например, Alt плюс
         буква или цифра) и специальных клавиш  (например,  функциональных
         клавиш)  воспроизводятся  символы  расширенного ASCII;  остальные
         клавиши воспроизводят обычный ASCII. Нулевой байт записи подпрог-
         раммы  обработки прерываний int 9 содержит числовой идентификатор
         для расширенных символов ASCII,  запись кода символа ASCII и ска-
         нируемый код для всех других.  Программное  обеспечение  доступно
         аппаратным средствам клавиатуры через ROM-BIOS. Int 16h позволяет
         удалять символ из буфера клавиатуры,  взглянув на первый символ в
         буфере,  и изменять статус клавиатуры. Фактически, любой доступ к
         клавиатуре осуществляется через int 16h.  Любой  драйвер  консоли
         использует  для  ввода  символов  и  изменения статуса клавиатуры
         int 16h.
                              Аппаратура отображения

              Имеется большое  количество  различных  дисплеев,  доступных
         компьютерам семейства PC.  Одноцветный дисплейный адаптер (MDA) и
         цветной графический адаптер (CGA) наиболее общеизвестны.  Некото-
         рые  другие  аппаратные  средства  могут заменять один или оба из
         них, предоставляя дополнительные возможности (больше цветов, луч-
         шая разрешающая способность и т. д.). Это описание ограничивается
         MDA и CGA.
              Аппаратные средства отображения PC имеют аналоговые и цифро-
         вые  компоненты.  Экран и ассоциированная с ним логика управления
         составляют аналоговую часть. Поверхность экрана покрыта фосфором,
         который светится, когда об нее ударяется пучок электронов. Анало-
         говые схемы управления пересекают пучком электронов экран и опус-
         кают его вниз. Другие части схемы включают и выключают его.
              Этот процесс начинается с верхнего левого угла экрана. Пучок
         передвигается  горизонтально через экран слева направо.  Когда он
         достигнет правой стороны экрана, управляющая электроника выключа-
         ет его и возвращает его в левый угол и вниз на одну позицию. Вре-
         мя,  когда пучок выключен,  известно, как горизонтальный интервал
         гашения. Процесс продолжается до тех пор, пока пучок не пересечет
         нижнюю строку экрана. Когда пучок электронов достигнет низа экра-
         на,  схема  управления выключает его и возвращает в верхний левый
         угол экрана для повторения всего процесса. Время, необходимое для
         этого,  называется вертикальным интервалом возвращения.  Горизон-
         тальный интервал гашения и вертикальный интервал возвращения важ-
Предыдущая страница Следующая страница
1 ... 48 49 50 51 52 53 54  55 56 57 58 59 60 61 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама