Программирование arrow Assembler arrow Справочник программиста на персональном компьютере фирмы IBM. Клавиатура

Справочник программиста на персональном компьютере фирмы IBM. Клавиатура

Оглавление

1. Справочник программиста на персональном компьютере фирмы IBM. Клавиатура

2. Очистка буфера клавиатуры

3. Проверка символов в буфере

4. Ожидать ввод символа и не выводить его на экран

5. Ожидание нажатия клавиши и эхо на экран

6. Прием символа без ожидания

7. Получение строки символов

8. Проверка/установка статуса клавиш-переключателей

9. Написание процедуры  ввода  с клавиатуры общего назначения

10. Перепрограммирование прерывания клавиатуры

11. Доступ к отдельным клавишам

12. Использование клавиш  BackSpace,  Enter,  Escape и Tab

13. Использование клавиш-переключателей: Shift, Ctrl  и Alt

14. Использование клавиш-переключателей: NumLock,  CapsLock, Ins и ScrollLock

15. Использование цифровой дополнительной клавиатуры и  клавиш перемещения курсора

16. Использование функциональных клавиш

17. Перепрограммирование отдельных клавиш

18. Создание макроопределений для отдельных клавиш

19. Создание процедуры обработки Ctrl-Break

20. Перепрограммирование клавиши PrtSc

21. Сводка кодов клавиш и применений

22. Предопределенное использование клавиш

23. Сводная таблица скан-кодов

24. Сводная таблица кодов ASCII

25. Сводка кодов псевдографики для построения рамок

26. Сводная таблица расширенных кодов


Клавиатура  содержит интелевский микропроцессор, который воспринимает каждое нажатие  на  клавишу  и  выдает скан-код в порт A микросхемы  интерфейса  с  периферией [1.1.1],  расположенной  на системной плате.  Скан-код это однобайтное число, младшие 7 битов которого представляют идентификационный номер, присвоенный каждой клавише. Таблица скан-кодов приведена в [3.3.2].       Раздел 1. Управление клавиатурой.
        Очистка буфера клавиатуры.
        Проверка символов в буфере.
        Ожидать ввод символа и не выводить его на экран.
        Ожидание нажатия клавиши и эхо на экран.
        Прием символа без ожидания.
        Получение строки символов.
        Проверка/установка статуса клавиш-переключателей.
        Написание процедуры  ввода  с клавиатуры общего назначения.
        Перепрограммирование прерывания клавиатуры.
      Раздел 2. Доступ к отдельным клавишам.
        Использование клавиш  <BackSpace>,  <Enter>,  <Escape> и <Tab>.
        Использование клавиш-переключателей: <Shift>, <Ctrl>  и  <Alt>.
        Использование клавиш-переключателей: NumLock,  CapsLock, Ins и ScrollLock.
        Использование цифровой дополнительной клавиатуры и  кла-
        виш перемещения курсора.
        Использование функциональных клавиш.
        Перепрограммирование отдельных клавиш.
        Создание макроопределений для отдельных клавиш.
        Создание процедуры обработки Ctrl-Break.
        Перепрограммирование клавиши PrtSc.
      Раздел 3: Сводка кодов клавиш и применений.
        Предопределенное использование клавиш.
        Сводная таблица скан-кодов.
        Сводная таблица кодов ASCII
        Сводка кодов псевдографики для построения рамок.
        Сводная таблица расширенных кодов.

Глава 3. Клавиатура.


     Раздел 1. Управление клавиатурой.


    На всех машинах,
кроме  AT, старший бит кода говорит о том, была ли клавиша нажата
(бит = 1, код нажатия) или  освобождена  (бит = 0, код освобожде-
ния).   Например, 7-битный скан-код клавиши B - 48, или 110000  в
двоичной системе. Когда эта клавиша нажимается, то в порт A посы-
лается  код 10110000, а когда ее отпустили - код 00110000.  Таким
образом, каждое нажатие на  клавишу  дважды регистрируется в мик-
росхеме 8255.  И каждый раз микросхема 8255 выдает  подтверждение
микропроцессору клавиатуры. AT работает немного по-другому, посы-
лая  в  обоих  случаях один и тот же скан-код, но  предваряя  его
кодом F0H, когда клавиша отпускается.
   Когда скан-код выдается  в  порт  A,  то вызывается прерывание
клавиатуры (INT 9).  Процессор моментально прекращает свою работу
и выполняет процедуру,  анализирующую  скан-код.  Когда поступает
код  от  клавиши сдвига или переключателя, то  изменение  статуса
записывается в память.  Во всех остальных случаях скан-код транс-
формируется в код символа, при условии, что он подается при нажа-
тии клавиши (в противном случае, скан-код отбрасывается).  Конеч-
но, процедура сначала определяет установку клавиш сдвига и перек-
лючателей, чтобы  правильно  получить  вводимый  код (это "a" или
"A"?).  После этого введенный код помещается в буфер  клавиатуры,
который является областью  памяти, способной запомнить до 15 вво-
димых  символов, пока программа слишком занята, чтобы  обработать
их. На рис. 3-1 показан путь, который проходит нажатие на клавишу
перед тем, как покасть в Вашу программу.
   Имеется  два  типа  кодов символов, коды  ASCII и  расширенные
коды.  Коды ASCII - это байтные числа, которые соответствуют рас-
ширенному  набору  кодов  ASCII для IBM PC,  который  приведен  в
[3.3.3]. Для IBM PC этот набор  включает  обычные символы пишущей
машинки,  а также ряд специальных букв и символов  псевдографики.
ASCII коды включают также  32  управляющих  кода,  которые обычно
используются  для передачи команд периферийным устройствам, а  не
выводятся как символы на экране; однако каждый из них имеет соот-
ветствующий  символ,  который  может быть выведен на  дисплей,  с
использованием прямой адресации дисплейной памяти [4.3.1]. (Стро-
го говоря, только первые 128 символов являются настоящими  симво-
лами ASCII, так как  ASCII  -  это  аббревиатура  от Американский
стандартный  код для обмена информацией.  Но программисты  обычно
говорят о кодах ASCII, чтобы отличить  их от других чисел. Напри-
мер,  "ASCII 8" относится к клавише "Backspace", в то  время  как
"8" - это цифра, которой соответствует ASCII 56).
   Второй набор  кодов,  расширенные  коды, присвоен клавишам или
комбинациям  клавиш, которые не имеют представляющего их  символа
ASCII, таким как функциональные клавиши или комбинации с клавишей
Alt.   Расширенные коды имеют длину 2 байта, причем  первый  байт
всегда ASCII 0. Второй байт  -  номер  расширенного  кода, список
которых  приведен  в  [3.3.5].  Например, код  0:30  представляет
Alt-A.  Начальный ноль позволяет  программе принадлежит ли данный
код набору ASCII или расширенному набору.

   Имеется  несколько  комбинаций клавиш, которые выполняют  спе-
циальные функции и не генерируют скан-коды.  Эти комбинации вклю-
чают <Ctrl-Break>, <Ctrl-Alt-Del> и <PrtSc>, плюс <SysReq> для AT
и <Ctrl-Alt-стрелка влево, -стрелка  вправо, -CapsLock, -Ins> для
PCjr.  Эти исключения приводят к заранее предопределенным резуль-
татам [3.3.2]. Все остальные  нажатия клавиш должны интерпретиро-
ваться  Вашей программой и если они имеют специальное назначение,
скажем сдвинуть курсор влево, то Ваша  программа должна содержать
код, обеспечивающий достижение этого эффекта.
   К счастью операционная система предоставляет различные  проце-
дуры для чтения кодов из буфера  клавиатуры, включая средства для
получения сразу целой строки.  Поскольку эти процедуры  позволяют
делать практически все, что  Вы  можете  пожелать, то практически
бессмысленно писать свои процедуры обработки ввода с клавиатуры и
поэтому в данной главе имеется очень мало примеров программирова-
ния на низком уровне. Однако содержится обсуждение вопроса о том,
как перепрограммировать прерывание клавиатуры.


 
« Предыдущая статья   Следующая статья »


  • Assembler, COM в Ассемблере
    В этой статье будет расказано о том, как использовать COM-интерфейсы в ваших программах, написанных на ассемблере. Не будет обсуждаться, что такое COM и как он применяется, но как его можно использовать, программируя на ассемблере. Здесь будет затронуто только применение существующих интерфейсов, а не реализация своих собственных, это будет рассмотрено в другой статье....
  • Assembler, Пишем свой загрузочный сектор
    Мы будем писать загрузочный сектор для трехдюймовой дискеты с файловой системой FAT12. После окончания начальной загрузки программа POST находит активное устройство и загружает с него короткую программу загрузки ОС - загрузочный сектор. Загрузочный сектор это первый физический сектор устройства, в данном случае дискеты и его размет равен всего ничего 512 байт. С помощью этих 512 байт кода мы должны найти основную часть загрузчика операционной системы, загрузить его в память и передать ему управл...
  • Assembler, Программирование COM портов
    Порт 3F8h. Этот порт соответствует регистру передавемых данных. Для передачи в порт 3F8h необходимо записать байт передаваемых данных. После приема данных от внешнего устройства они могут быть прочитаны из этого порта. В зависимости от состояния бита управляющего слова, выводимого в управ- ляющий регистр с адресом 3F8h, назначение порта 3F8h изменяться. Если этот бит равен 0,порт используется для записи передаваемых данных.Если же этот бит равен 1, порт используется для вывода з...
  • Assembler, Переполнение буфера
    В данной статье рассматривается пример использования переполнения стека под Windows 9x на платформе Intel x86. Изложение рассчитано на читателя, понимающего принципы работы персонального компьютера и более чем поверхностно знакомого с программированием....
  • Assembler, Виртуальный драйвер для обслуживания аппаратных прерываний
    Как уже отмечалось ранее, виртуальные драйверы служат прежде всего для виртуализации аппаратуры, то есть для предоставления одновременно выполняемым задачам возможности совместного использования устройств компьютера. Измерительная или управляющая аппаратура, подключаемая к компьютеру с целью создания автоматизированной установки, вряд ли будет эксплуатироваться в многозадачном режиме, однако использование для ее управления виртуального драйвера может заметно сократить программные издержки и умен...
  • Assembler, Опыт дизассемблирования большой .com программы
    В данной статье мне хочется рассказать о дизассемблировании большой программы (графического редактора). Не будучи знатоком ассемблера, не зная до сих пор, как использовать большинство возможностей своего дизассемблера (DisDoc 2.3), я все же решился написать эту статью, так как прекрасно помню, в какой кромешной тьме начинал заниматься дизассемблированием....
  • Assembler, Оптимизация программ на Assembler
    Несмотря на все более широкое распространение языков программирования и интегрированных сред программирования, оптимизация программ на ассемблере остается актуальной темой дискуссий для программистов. Можно упомянуть, например, форум програамистов, проведенный сетью PC MagNet, который стал ареной многочисленых "дуэлей": то один, то другой участник предлагал всем желающим решить небольшую, но интересную задачу программирования - и рассматривал присылаемые решения, ожидая, кто жее и как ...
  • Assembler, Справочник программиста на персональном компьютере фирмы IBM. Приложения
    Основной единицей хранения данных в компьютере является бит. В большинстве микрокомпьютеров восемь битов объединены в байт, при этом каждый бит байта может быть установлен или "включен" (= 1) или сброшен или "выключен" (= 0), допуская 256 разных вариантов. Таким образом, в одном байте можно представить 256 разных симво- лов (расширенный набор кодов ASCII) или целое число в диапазоне от 0 до 255. Хотя мы привыкли записывать эти числа в десятичной форме, они могут зап...