
- •Аннотация
- •Введение
- •Благодарности
- •Авторский компакт-диск
- •Как связаться с авторами
- •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
Чтение символа с ожиданием для 101-клавишной клавиатуры
Функция 10h, предназначенная для чтения символа с ожиданием, полностью аналогична функции 00h, но она может работать только с клавиатурой, имеющей 101 клавишу.
Приведем формат вызова функции:
Регистры на входе: |
AH = 10h; |
Регистры на выходе: |
AL = код ASCII символа или 0, если AH содержит расширенный код ASCII символа; AH = скан-код или расширенный код ASCII символа, если AL=0 |
Функция определена для BIOS, изготовленной после 15 декабря 1985 года.
Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
Функция 11h полностью аналогична функции 01h, но она предназначена для работы с клавиатурой, имеющей 101 клавишу:
Регистры на входе: |
AH = 11h |
Регистры на выходе: |
ZF = 0, если в буфере имеется код нажатой клавиши; ZF = 1, если буфер клавиатуры пуст; AL = код ASCII символа или 0, если AH содержит расширенный код ASCII символа; AH = скан-код или расширенный код ASCII символа, если AL=0 |
Эта функция определена для BIOS, изготовленной после 15 декабря 1985 года.
Получение состояния переключающих клавиш для 101-клавишной клавиатуры
Функция 12h возвращает в регистре AL состояние переключающих клавиш, таких как<Shift>,<Control>,<Alt>,<ScrollLock>,<NumLock>,<CapsLock>,<Insert> и используется только для 101-клавишных клавиатур:
Регистры на входе: |
AH = 12h |
Регистры на выходе: |
AL = Байт состояния переключающих клавиш |
Эта функция определена для BIOS, изготовленной после 15 декабря 1985 года.
Режимы работы клавиатуры
Клавиатура современного компьютера, имеющая 101-клавишу, может работать в одном из трех режимов. Эти режимы различаются тем, как клавиатура посылает скан-коды в компьютер, когда пользователь нажимает и отпускает клавиши.
Сравнение режимов
Первый режим – это режим совместимости с IBM PC/XT. В этом режиме скан-коды, посылаемые клавиатурой при нажатии клавиш, соответствуют приведенным нами в разделе «Средства BIOS для работы с клавиатурой». Когда пользователь нажимает клавишу, в компьютер посылается однобайтовый скан-код этой клавиши. Когда же пользователь отжимает клавишу, в компьютер посылается скан-код этой клавиши с установленным в единицу старшим битом.
Второй режим устанавливается по умолчанию после включения питания. От первого режима он отличается тем, что когда пользователь отжимает клавишу, в компьютер посылается вначале код 0F0h, а затем скан-код отжатой клавиши.
В третьем режиме каждой клавише присваивается собственный 8-разрядный код нажатия. Код, который передается при отжатии клавиши, состоит из двух байтов – байта 0Fh и байта кода нажатия. Другая особенность этого режима заключается в том, что коды, посылаемые любыми клавишами, не зависят от состояния других клавиш.
Изменение режима
Едва ли вам потребуется изменять режим работы клавиатуры. Тем не менее, мы покажем, как это можно сделать, программируя контроллер клавиатуры.
Ниже мы приведем команды и параметры, которые нужно посылать контроллеру клавиатуры для установки описанных выше режимов работы:
Режим |
Команда |
Параметр |
1 |
0F0h |
01h |
2 |
0F0h |
02h |
3 |
0F0h |
03h |