- •Аннотация
 - •Введение
 - •Благодарности
 - •Авторский компакт-диск
 - •Как связаться с авторами
 - •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
 
	
		 
		 
		
		
Библиотека системного программиста
тридцать третий том
© А.В. Фролов, Г.В. Фролов, 1997
Аппаратное обеспечение персонального компьютера Часть 1
Аннотация
В книге приведено описание методик программирования аппаратуры персональных компьютеров, выполненных с применением процессоров Intel, на уровне портов, прерыванийDOSиBIOS, а также на уровне функций драйверов.
Подробно описана процедура определения конфигурации компьютера, в том числе типа процессора, рассказано о способах работы с клавиатурой, мышью, часами реального времени, системным таймером, асинхронным портом последовательной передачи данных, параллельным портом, контроллером прерываний и контроллером прямого доступа к памяти. Описаны функции, предназначенные для работы с расширенной памятью, а также команды арифметического сопроцессора. Отдельная глава посвящена работе с драйвером устройства CD-ROM.
Введение
Несмотря на широкое распространение новых операционных систем, таких как MicrosoftWindows95,MicrosoftWindowsNTиIBMOS/2Warp, а также новых технологий программирования, ориентированных наInternetи средства высокого уровня, до сих пор остается актуальным создание программ, работающих с аппаратурой компьютера через порты, прерывания и функции драйверов. Многие разработчики занимаются созданием драйверов для нестандартной аппаратуры, и поэтому нуждаются в описании регистров периферийных устройств и методик работы с этими устройствами на уровне регистров и прерываний.
Перечисленные выше вопросы были рассмотрены нами во 2 томе «Библиотеки системного программиста» с названием «Аппаратное обеспечение IBMPC”, который был издан в 1992 году. С тех пор аппаратура персонального компьютера претерпела определенные изменения, не говоря уже о возникновении и широком распространении новых периферийных устройств. Поэтому мы решили переиздать упомянутый том «Библиотеки системного программиста», обновив и дополнив его новой информацией.
Первая глава нашей книги посвящена определению конфигурации компьютера. Мы научим вас определять состав аппаратных средств компьютера с помощью функций BIOS, а также анализируя содержимое энергонезависимой памяти CMOS. Много внимания мы уделим определению типа центрального процессора. С помощью программы, исходные тексты которой есть в первой главе, можно распознать процессоры начиная от теперь уже исторической моделиIntel 8086 до суперсовременногоIntel Pentium II.
Во второй главе мы расскажем о работе с клавиатурой на уровне портов ввода/вывода, прерываний, функций BIOSиMS-DOS. Вся эта информация необходима разработчикам диалоговых программ для операционной системыMS-DOS. Что же касается приложенийMicrosoft Windows, то способы работы с клавиатурой в среде этой операционной системы мы описали в 11 томе “Библиотеки системного программиста”, который называется “Операционная системаMicrosoft Windows для программиста”.
Третья глава посвящена мыши. Это устройство удобно для пользователя, поэтому вам не стоит игнорировать мышь в своих программах. Помимо традиционных функций драйвера мыши мы описали методику программирования новой мыши Microsoft IntelliPoint в средеMicrosoft Windows(в средеMS-DOS эта мышь работает как обычная двухкнопочная). МышьMicrosoft IntelliPoint имеет новый орган управления - небольшое колесико, которое можно вращать, а также нажимать подобно обычной клавише.
В четвертой главе описаны способы работы с часами реального времени. Вы можете применять эти часы для определения текущей даты и времени или для установки будильника, после срабатывания которого компьютер начнет выполнять какие-либо действия.
В пятой главе мы рассмотрели другое устройство компьютера, имеющее отношение ко времени - системный таймер. Этот таймер удобно использовать для организации программных задержек, для генерации звуковых сигналов, как простых, так и музыкальных, а также как генератор случайных чисел.
В шестой и седьмой главах нашей книги мы рассмотрели последовательный асинхнонный адаптер и параллельный адаптер. Первый из них чаще всего используется для подключения модема, а второй - для подключения принтера. Пользуясь информацией, приведенной в нашей книге, вы сможете программировать эти адаптеры на уровне портов ввода/вывода, функций BIOS и MS-DOS.
Восьмая глава посвящена контроллеру прямого доступа к памяти. В ней мы рассказали о назначении портов этого контроллера в компьютерах IBM PC/XT иIBM PC/AT.
В девятой главе описана методика работы с устройством чтения компакт-дисков, которым сейчас оборудован практически каждый компьютер. Мы рассмотрели применение функций программного расширения MSCDEX, а также команд драйвера устройства чтения компакт-дисков. Эта информация поможет вам определить различные характеристики устройства и параметры компакт-дисков, такие, например, как способность проигрывать звуковые компакт-диски, количество, размер и тип дорожек на компакт-диске и так далее. Обращаясь непосредственно к драйверу устройства, ваша программа сможет выполнять непосредственное чтение секторов и дорожек компакт-диска, запускать и останавливать проигрывание звуковых дорожек и другие аналогичные операции.
Десятая глава необходима тем, кто разрабатывает программы, связанные с вычислениями. В этой главе мы рассказали про арифметический сопроцессор и привели методики его программирования. Этот сопроцессор значительно ускоряет арифметические вычисления, особенно вычисления с плавающей запятой. В качестве примера мы привели исходные тексты программы, проверяющий сопроцессор на наличие ошибки при выполнении команды деления, которая встречалась в первых моделях процессора Pentium.
И, наконец, последняя, одиннадцатая глава посвящена работе с расширенной памятью с помощью интерфейса драйвера HIMEM.SYS. Используя функции этого интерфейса, ваша программа, предназначенная для операционной системыMS-DOS, сможет воспользоваться расширенной памятью, недоступной для непосредственной адресации в реальном режиме работы процессора.
Исходные тексты всех программ вы можете купить на дискете, которая продается вместе с книгой. Эти тексты, так же как и исходные тексты программ из всех предыдущих томов “Библиотеки системного программиста”, вы можете найти на нашем авторском компакт-диске. Подробая информация об авторском компакт-диске есть в сети Internet на нашем сервере по адресуhttp://www.glasnet.ru/~frolov илиhttp://www.dials.ccas.ru/frolov.
