Чтение символа с ожиданием
Функция 00h выполняет чтение кода символа из буфера клавиатуры, если он там есть. Если буфер клавиатуры пуст, программа переводится в состояние ожидания до тех пор, пока не будет нажата какая-нибудь клавиша. Скан-код и код ASCII нажатой клавиши передаются программе.
Приведем формат вызова функции:
Регистры на входе: | AH = 00h |
Регистры на выходе: | AL = код ASCII символа или 0, если AH содержит расширенный код ASCII символа; AH = скан-код или расширенный код ASCII символа, если AL=0 |
Приведем таблицу скан-кодов:
01 | Esc | 12 | E | 23 | H | 34 | . > | 45 | NumLock |
02 | 1 ! | 13 | R | 24 | J | 35 | / ? | 46 | ScrLock |
03 | 2 @ | 14 | T | 25 | K | 36 | Shift прав. | 47 | Home [7] |
04 | 3 # | 15 | Y | 26 | L | 37 | PrtSc | 48 | Up [8] |
05 | 4 $ | 16 | U | 27 | ; : | 38 | Alt | 49 | PgUp [9] |
06 | 5 % | 17 | I | 28 | ‘ “ | 39 | Пробел | 4A | [-] |
07 | 6 ^ | 18 | O | 29 | ` ~ | 3A | CapsLock | 4B | <- [4] |
08 | 7 & | 19 | P | 2A | Shift лев. | 3B | F1 | 4C | [5] |
09 | 8 * | 1A | [ { | 2B | \ | | 3C | F2 | 4D | -> [6] |
0A | 9 ( | 1B | ] } | 2C | Z | 3D | F3 | 4E | [+] |
0B | 0 ) | 1C | Enter | 2D | X | 3E | F4 | 4F | End [1] |
0C | - _ | 1D | Ctrl | 2E | C | 3F | F5 | 50 | Dn [2] |
0D | = + | 1E | A | 2F | V | 40 | F6 | 51 | PgDn [3] |
0E | Bksp | 1F | S | 30 | B | 41 | F7 | 52 | Ins [0] |
0F | Tab | 20 | D | 31 | N | 42 | F8 | 53 | Del [.] |
10 | Q | 21 | F | 32 | M | 43 | F9 |
|
|
11 | W | 22 | G | 33 | , < | 44 | F10 |
|
|
Для остальных клавиш функция 00h прерывания INT 16h возвращает расширенный код ASCII:
F1 | 3b | Shift+F1 | 54 | Ctrl+F1 | 5e | Alt+F1 | 68 |
F2 | 3c | Shift+F2 | 55 | Ctrl+F2 | 5f | Alt+F2 | 69 |
F3 | 3d | Shift+F3 | 56 | Ctrl+F3 | 60 | Alt+F3 | 6a |
F4 | 3e | Shift+F4 | 57 | Ctrl+F4 | 61 | Alt+F4 | 6b |
F5 | 3f | Shift+F5 | 58 | Ctrl+F5 | 62 | Alt+F5 | 6c |
F6 | 40 | Shift+F6 | 59 | Ctrl+F6 | 63 | Alt+F6 | 6d |
F7 | 41 | Shift+F7 | 5a | Ctrl+F7 | 64 | Alt+F7 | 6e |
F8 | 42 | Shift+F8 | 5b | Ctrl+F8 | 65 | Alt+F8 | 6f |
F9 | 43 | Shift+F9 | 5c | Ctrl+F9 | 66 | Alt+F9 | 70 |
F10 | 44 | Shift+F10 | 5d | Ctrl+F10 | 67 | Alt+F10 | 71 |
Alt+A | 1E | Alt+P | 19 | Alt+3 | 7A | Down | 50 |
Alt+B | 30 | Alt+Q | 10 | Alt+4 | 7B | Left | 4B |
Alt+C | 2E | Alt+R | 13 | Alt+5 | 7C | Right | 4D |
Alt+D | 20 | Alt+S | 1F | Alt+6 | 7D | Up | 48 |
Alt+E | 12 | Alt+T | 14 | Alt+7 | 7E | End | 4F |
Alt+S | 21 | Alt+U | 16 | Alt+8 | 7F | Home | 47 |
Alt+G | 22 | Alt+V | 2F | Alt+9 | 80 | PgDn | 51 |
Alt+H | 23 | Alt+W | 11 | Alt+- | 82 | PdUp | 49 |
Alt+I | 17 | Alt+X | 2D | Alt+= | 83 |
|
|
Alt+J | 24 | Alt+Y | 15 |
|
| Ctrl+Left | 73 |
Alt+K | 25 | Alt+Z | 2C |
|
| Ctrl+Right | 74 |
Alt+L | 26 |
|
| Shift+Tab | 0F | Ctrl+End | 75 |
Alt+M | 32 | Alt+0 | 81 | Insert | 52 | Ctrl+Home | 77 |
Alt+N | 31 | Alt+1 | 78 | Delete | 53 | Ctrl+PgDn | 76 |
Alt+O | 18 | Alt+2 | 79 | PrintScr | 72 | Ctrl+PgUp | 84 |
В следующей таблице приведены скан-коды клавиш, имеющихся только на 101-клавишной клавиатуре:
F11 | 85 | Alt-Bksp | 0e | Alt- Д / | a4 |
F12 | 86 | Alt-Enter | 1c | Alt- Д * | 37 |
Shft-F11 | 87 | Alt-Esc | 01 | Alt- Д - | 4a |
Shft-F12 | 88 | Alt-Tab | a5 | Alt- Д + | 4e |
Ctrl-F11 | 89 | Ctrl-Tab | 94 | Alt- Д Enter | a6 |
Ctrl-F12 | 8a |
|
|
|
|
Alt-F11 | 8b | Alt-up Up | 98 | Ctrl- Д / | 95 |
Alt-F12 | 8c | Alt-down Dn | a0 | Ctrl- Д * | 96 |
Alt-[ | 1a | Alt-left <- | 9b | Ctrl- Д - | 8e |
Alt-] | 1b | Alt-right -> | 9d | Ctrl- Д + | 90 |
Alt-; | 27 |
|
|
|
|
Alt-' | 28 | Alt-Delete | a3 | Ctrl- Д Up [8] | 8d |
Alt-` | 29 | Alt-End | 9f | Ctrl- Д 5 [5] | 8f |
Alt-\ | 2b | Alt-Home | 97 | Ctrl- Д Dn [2] | 91 |
Alt-, | 33 | Alt-Insert | a2 | Ctrl- Д Ins[0] | 92 |
Alt-. | 34 | Alt-PageUp | 99 | Ctrl- Д Del[.] | 93 |
Буква "Д" здесь обозначает дополнительную клавиатуру.
- Аннотация
- Введение
- Благодарности
- Авторский компакт-диск
- Как связаться с авторами
- 1 Определение конфигурации компьютера
- Определение конфигурации с помощьюBios
- Наличие нмд
- Наличие арифметического сопроцессора
- Начальный режим работы видеоадаптера
- Стандартная оперативная память
- Расширенная оперативная память
- ПрограммаHdwcfg
- Код модели компьютера и версияBios
- ПрограммаBiosinfo
- Конфигурация в памяти cmos
- 00H - 0Dh - область часов реального времени
- 0Eh - байт диагностики
- 0Fh - байт отключения
- 10H - тип накопителей нгмд
- 11H - зарезервировано дляIbm pc/at, тип нмд дляIbm ps/2
- 12H - тип первого и второго нмд
- 13H - зарезервировано
- 14H - конфигурация оборудования
- 15H-16h - объем стандартной оперативной памяти
- ПрограммаCmosshow
- Определение типа центрального процессора
- МоделиIntel 8086/8088
- Модель Intel 80286
- МодельIntel 80386
- МодельIntel 80486
- Команда cpuid
- ПрограммаCpuinfo
- 2 Клавиатура
- Как работает клавиатура
- Клавиатурная матрица
- Скан-код клавиши
- КодAscii нажатой клавиши
- Режим автоповтора
- Типы клавиатур
- Порты для работы с клавиатурой
- КомпьютерIbm pc/xt
- Современные компьютеры
- ПрограммаKbdled
- Аппаратное прерывание клавиатуры
- Стандартный обработчик прерывания int 09h
- Буфер клавиатуры
- Переключающие клавиши
- Средства bios для работы с клавиатурой
- Чтение символа с ожиданием
- ПрограммаKbdscan
- Проверка буфера на наличие в нем символов
- ПрограммаChkbuf
- Получение состояния переключающих клавиш
- Установка временных характеристик клавиатуры
- Запись символов в буфер клавиатуры
- Чтение символа с ожиданием для 101-клавишной клавиатуры
- Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
- Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- Режимы работы клавиатуры
- Сравнение режимов
- Изменение режима
- Средства ms-dos для работы с клавиатурой
- Буферизованный ввод с эхо-выводом
- Буферизованный ввод без эхо-вывода
- Нефильтрованный ввод без эхо-вывода
- Вводс консоли и вывод на консоль
- Ввод строки символов
- Проверка состояния стандартного ввода
- Сброс буфера клавиатуры
- Клавиатурные функции стандартной библиотеки c
- Функции getch и getche
- ПрограммаKbdascii
- Функцияkbhit
- ПрограммаKbdhit
- Функция cgets
- Функция gets
- Функция scanf
- Как устроена мышь?
- Драйверы мыши в ms-dos
- Прерывание для обслуживания мыши
- Инициализация мыши
- Включить курсор мыши
- Выключить курсор мыши
- ПрограммаMscursor
- Определить положение курсора
- ПрограммаMsgcurs
- Установить курсор
- Определить положение курсора при нажатии клавиши
- Определить положение курсора при отпускании клавиши
- Задать диапазон движения курсора по горизонтали
- Задать диапазон движения курсора по вертикали
- Задать форму курсора в графическом режиме
- ПрограммаMsgform
- Задать форму курсора в текстовом режиме
- ПрограммаMstform
- Определить содержимое счетчиков перемещения
- Установить драйвер событий
- ПрограммаMsdriver
- Включить эмуляцию светового пера
- Выключить эмуляцию светового пера
- Задать скорость перемещения курсора мыши
- Установить область исключения для курсора
- Задать увеличенный графический курсор
- Определить порог удвоения скорости
- Заменить драйвер событий
- Определить размер буфера состояния драйвера
- Сохранить состояние драйвера
- Восстановить состояние драйвера
- Установить альтернативный драйвер событий
- Получить адрес альтернативного драйвера событий
- Установить чувствительность мыши
- Определить чувствительность мыши
- Установить частоту прерываний для Inport Mouse
- Установить номер страницы видеопамяти
- Определить номер страницы видеопамяти
- Отключить драйвер мыши
- Восстановить драйвер мыши
- Сбросить драйвер мыши
- Определить тип мыши
- МышьMicrosoft IntelliMouse
- Проверка наличия мыши Microsoft IntelliMouse
- Проверка в среде Microsoft Windows 95 и Microsoft Windows nt версии 3.51
- Проверка в среде Microsoft Windows nt версии 4.0
- Определение величины свертки
- Определение величины свертки в среде Microsoft Windows 95 и Microsoft Windows nt версии 3.51
- Определение величины свертки в среде Microsoft Windows nt версии 4.0
- Сообщение msh_mousewheel
- Сообщение wm_mousewheel
- Другие сообщения от мыши Microsoft IntelliMouse
- ПриложениеRtfpad
- 4 Часы реального времени
- Регистры часов реального времени
- Регистры счетчиков
- Регистр состоянияA
- Регистр состояния b
- Регистр состояния c
- Регистр состояния d
- Прерывание от часов реального времени
- Функции прерыванияInt 1Ah
- Сброс будильника
- ПрограммаRtcalarm
- 5 Системный таймер
- Обработка прерываний таймера
- Микросхемы таймера 8253 и 8254
- Режимы работы таймера
- Режим однократного выполнения функций
- Работа с перезапуском
- Формат управляющего регистра
- Формат команды чтения слова состояния канала
- Формат слова состояния канала
- Последовательность действий
- ПрограммаTimerst
- Средства bios для работы с таймером
- Чтение счетчика таймера
- Установка счетчика таймера
- Установка таймера с сигнализацией
- Формирование задержки
- Второй способ проигрывания музыки
- Проигрывание музыки в фоновом режиме
- ПрограммаTmsound
- ПрограммаIosound
- ПрограммаRandom
- 6 Асинхронный последовательный адаптер
- Основные понятия и термины
- Аппаратная реализация
- МикросхемаUart
- Разъемы адаптера
- Порты асинхронного адаптера
- Порт 3f8h
- Порт 3f9h
- Порт 3fAh
- Порт 3fBh
- Порт 3fCh
- Порт 3fDh
- Порт 3fEh
- Функции bios для работы с последовательным асинхронным адаптером
- Инииализация портов асинхронного адаптера
- Передача байта
- Прием байта
- Определение состояния асинхронного адаптера
- Программирование асинхронного адаптера
- Инициализация асинхронного адаптера
- Передача данных
- Прием данных
- ПрограммаComtest
- Использование прерываний
- 7 Параллельный адаптер
- Порты параллельного адаптера
- Порт 378h
- Порт 37Ah
- Порт 379h
- Разъем параллельного адаптера
- Вывод байта на принтер через параллельный адаптер
- Функции bios для работы с принтером
- Печать символа
- Инициализация принтера
- Определение состояния принтера
- ПрограммаPrintfl
- Функции ms-dos для работы с принтером
- ФункцияMs-dos для вывода на принтер
- Система буферизованной печати
- Проверка установки системы буферизованной печати
- Запуск процесса печати файла
- Отмена печати файла
- Отмена печати всех файлов
- Определение состояния и блокировка системы буферизованной печати
- Разблокирование системы буферизованной печати
- Коды ошибок
- Программирование принтера
- Подключение принтера к компьютеру
- Установка переключателей конфигурации
- Программирование режимов работы принтера
- Инициализация принтера
- Контроллер прямого доступа ibm pc/xt
- Регистры каналов dma
- Порты 00h - 07h
- Порт 08h
- Порт 09h
- Порт 0Ah
- Порт 0Bh
- Порт 0Ch
- Порт 0Dh
- Порт 0Eh
- Порт 0Fh
- Порты 81h-8Fh
- Инициализация канала dma
- Контроллер прямого доступа ibm at
- Регистры каналовDma
- Регистры страниц
- Порты 0c0h - 0dFh
- Порты 0d0h-0dFh
- 9 Устройство чтения cd-rom
- Драйвер устройства чтенияCd-rom
- РасширениеMscdex
- ФункцииMscdex
- Определение количества устройствCd-rom
- Получение списка устройств cd-rom
- Получение имени файла прав собственности
- Получение имени файла резюме
- Получение имени файла библиографической документации
- Чтение сектора оглавления компакт-диска
- Чтение сектора по абсолютному адресу
- Проверка устройства чтения cd-rom
- Определение версии mscdex
- Определение обозначения устройств чтения cd-rom
- Вызов драйвера cd-rom
- Работа через драйверCd-rom
- Заголовок запроса
- Команды драйвера cd-rom
- Инициализация
- ЧтениеIoctl Input
- Определение адреса заголовка драйвера cd-rom
- Определение положения головки
- Получение информации о звуковых каналах
- Чтение данных из устройства
- Определение состояния устройства
- Определение размера сектора
- Определение размера тома
- Проверка замены носителя данных
- Получение информации о компакт-диске
- Получение информации о дорожкекомпакт-диска
- Получение информации о канале q
- Получение информации о подканале
- Получение штрих-кода изготовителя компакт-диска
- Сброс входных буферов
- ЗаписьIoctl Output
- Извлечение компакт-диска
- Блокирование и разблокирование компакт-диска в устройстве
- Сброс устройства чтения cd-rom
- Управление звуковыми каналами
- Запись в устройство управляющей строки
- Чтение длинное с предварительной выборкой
- Проигрывание звуковой дорожки
- Остановка проигрывания звуковой дорожки
- Возобновление проигрывания звуковой дорожки
- ПрограммаCdinfo
- ПрограммаCdplay
- 10 Арифметический сопроцессор
- Вещественные числа
- Целые числа
- Регистры сопроцессора
- Численные регистры
- Регистр тегов
- Регистр управления
- Регистр состояния
- Регистры указателя команды и указателя операнда
- Система команд сопроцессора
- Команды пересылки данных
- Запись в стек
- Извлечение из стека
- Копирование данных
- Загрузка констант
- Арифметические команды
- Команды сравнений чисел
- Трансцендентные команды
- Управляющие команды
- Программирование сопроцессора
- ПрограммаNpu1
- Обработка особых случаев
- Неточный результат
- Переполнение
- Антипереполнение
- Деление на нуль
- Недействительная операция
- Денормализованный операнд
- Ошибка в процессореPentium
- 11 Расширенная память
- Основные понятия
- Установка драйвера himem.Sys
- Спецификация xms
- Проверка подключения драйвера
- Получение адреса управляющей программы
- Описание функций драйвера himem.Sys
- Получить версию xms
- Запросить область hma
- Освободить область hma
- Глобальное открывание линии a20
- Глобальное закрывание линии a20
- Освободить блок emb
- Копирование блоков emb
- Блокирование emb
- Разблокирование emb
- Получить информацию об идентификаторе блока emb
- Изменить размер emb
- Запросить область umb
- Освободить область umb
- Коды ошибок
- Ограничения при использовании области hma
- Примеры программ
- ПрограммаTesthma
- ПрограммаCallhma
- Предметный указатель
- Литература
- Оглавление
- 1 Определение конфигурации компьютера 7
- 2 Клавиатура 38
- 3 Мышь 64
- 4 Часы реального времени 102
- 5 Системный таймер 113
- 6 Асинхронный последовательный адаптер 132
- 7 Параллельный адаптер 149
- 8 Контроллер прямого доступа к памяти 162
- 9 Устройство чтения cd-rom 170
- 10 Арифметический сопроцессор 216
- 11 Расширенная память 243