
- •Робер Журден. Справочник программиста на персональном компьютере фирмы ibm Оглавление.
- •Раздел 2. Доступ к отдельным клавишам.
- •Раздел 2. Создание драйвера устройства.
- •Раздел 3. Использование специальных устройств ввода/вывода.
- •Глава 1. Системные ресурсы. Раздел 1. Ревизия системных ресурсов.
- •1.1.1 Доступ к микросхеме интерфейса с периферией 8255.
- •1.1.2 Определение типа ibm pc.
- •1.1.3 Определение версии ms dos.
- •1.1.4 Определение числа и типов адаптеров дисплея.
- •1.1.5 Определение числа и типа дисковых накопителей.
- •1.1.6 Определение числа и типа периферийных устройств.
- •1.1.7 Ревизия количества памяти.
- •Раздел 2. Управление прерываниями.
- •1.2.1 Программирование контроллера прерываний 8259.
- •1.2.2 Запрет/разрешение отдельных аппаратных прерываний.
- •1.2.3 Написание собственного прерывания.
- •1.2.4 Дополнение к существующему прерыванию.
- •Раздел 3. Управление программами.
- •1.3.1 Манипуляции с памятью.
- •1.3.2 Запуск одной программы из другой.
- •1.3.3 Использование команд интерфейса с пользователем из программы.
- •1.3.4 Сохранение программы в памяти после завершения.
- •1.3.5 Загрузка и запуск программных оверлеев.
- •1.3.6 Преобразование программ из типа .Exe в тип .Com.
- •Глава 2. Таймеры и звук. Раздел 1. Установка и чтение таймера.
- •2.1.1 Программирование микросхемы таймера 8253/8254.
- •2.1.2 Установка/чтение времени.
- •2.1.3 Установка/чтение даты.
- •2.1.4 Установка/чтение часов реального времени.
- •2.1.5 Задержка программных операций.
- •2.1.6 Операции запрограммированные во времени.
- •2.1.7 Управление работой в реальном времени.
- •2.1.8 Генерация случайных чисел с помощью микросхемы таймера.
- •Раздел 2. Создание звука.
- •2.2.1 Программирование генератора звука 76496 (только pCjr).
- •2.2.2 Генерация тона.
- •2.2.3 Генерация звука одновременно с другими действиями.
- •2.2.4 Гудок динамика.
- •2.2.5 Генерация набора тонов.
- •2.2.6 Генерация строки тонов, одновременно с другими операциями.
- •2.2.7 Создание плавного перехода тонов.
- •2.2.8 Создание звуковых эффектов.
- •2.2.9 Одновременная генерация разных звуков.
- •Глава 3. Клавиатура. Раздел 1. Управление клавиатурой.
- •3.1.1 Очистка буфера клавиатуры.
- •3.1.2 Проверка символов в буфере.
- •3.1.3 Ожидать ввод символа и не выводить его на экран.
- •3.1.4 Ожидание нажатия клавиши и эхо на экран.
- •3.1.5 Прием символа без ожидания.
- •3.1.6 Получение строки символов.
- •3.1.7 Проверка/установка статуса клавиш-переключателей.
- •3.1.8 Написание процедуры ввода с клавиатуры общего назначения.
- •3.1.9 Перепрограммирование прерывания клавиатуры.
- •Раздел 2. Доступ к отдельным клавишам.
- •3.2.3 Использование клавиш-переключателей: NumLock, CapsLock, Ins и ScrollLock.
- •3.2.4 Использование цифровой дополнительной клавиатуры и клавиш перемещения курсора.
- •3.2.5 Использование функциональных клавиш.
- •3.2.6 Перепрограммирование отдельных клавиш.
- •3.2.7 Создание макроопределений для отдельных клавиш.
- •3.2.8 Создание процедуры обработки Ctrl-Break.
- •3.2.9 Перепрограммирование клавиши PrtSc.
- •Раздел 3. Сводка кодов клавиш и применений.
- •3.3.1 Предопределенное использование клавиш.
- •3.3.2 Сводная таблица скан-кодов.
- •3.3.3 Сводная таблица кодов ascii
- •3.3.4 Сводка кодов псевдографики для построения рамок.
- •3.3.5 Сводная таблица расширенных кодов.
- •Глава 4. Вывод на терминал. Раздел 1. Управление выводом на терминал.
- •4.1.1 Программирование контроллера дисплея 6845.
- •4.1.2 Установка/проверка режима дисплея.
- •4.1.3 Установка атрибутов/цветов символов.
- •4.1.4 Установка цвета границы экрана.
- •4.1.5 Очистка части/всего экрана.
- •4.1.6 Переключение между видеоадапторами.
- •Раздел 2. Управление курсором.
- •4.2.1 Установка курсора в абсолютную позицию.
- •4.2.2 Относительное позиционирование курсора
- •4.2.3 Включение и выключение курсора.
- •4.2.4 Изменение формы курсора.
- •4.2.5 Чтение/сохранение/восстановление позиции курсора.
- •4.2.6 Создание альтернативных типов курсора.
- •Раздел 3. Вывод символов на экран.
- •4.3.1 Вывод на экран одного символа.
- •4.3.2 Вывод строки символов на экран.
- •4.3.3 Чтение символа и его атрибутов в данной позиции.
- •4.3.4 Создание специальных символов.
- •4.3.5 Сводка данных для описания символов.
- •Раздел 4. Вывод точечной графики.
- •4.4.1 Установка цветов для точечной графики.
- •4.4.2 Рисование точки на экране (монохромный, цветной и pCjr).
- •4.4.3 Рисование точки на экране (ega).
- •4.4.4 Определение цвета точки экрана.
- •4.4.5 Рисование линий на экране.
- •4.4.6 Заполнение областей экрана.
- •4.4.7 Графический вывод с использованием символов псевдографики.
- •Раздел 5. Сдвиг экрана и страницы.
- •4.5.1 Вертикальный сдвиг текстового экрана.
- •4.5.2 Сдвиг текстового экрана горизонтально.
- •4.5.3 Переключение между текстовыми страницами.
- •4.5.4 Сдвиг между страницами текста.
- •Глава 5. Дисковые накопители. Раздел 1. Управление распределением диска.
- •5.1.1 Чтение таблицы размещения файлов.
- •5.1.2 Определение доступного дискового пространства.
- •5.1.3 Получение/установка размера файла.
- •5.1.4 Восстановление после ошибок, связанных с нехваткой пространства на диске.
- •Раздел 2. Работа с каталогами диска.
- •5.2.1 Чтение/изменение корневого каталога.
- •5.2.2 Создание/удаление подкаталога.
- •5.2.3 Чтение/изменение подкаталога.
- •5.2.4 Получение/установка текущего каталога.
- •5.2.5 Получение/установка времени и даты последнего доступа к файлу.
- •5.2.6 Спрятанные и защищенные от записи файлы.
- •5.2.7 Чтение/изменение метки тома.
- •Раздел 3. Подготовка к работе с файлами.
- •5.3.1 Установка/проверка накопителя по умолчанию.
- •5.3.2 Создание/удаление файла.
- •5.3.3 Открытие/закрытие файла.
- •5.3.4 Переименование файла; изменение позиции файла в каталоге.
- •5.3.5 Подготовка к файловым операциям.
- •5.3.6 Анализ информации командной строки.
- •Раздел 4. Чтение и запись файла.
- •5.4.1 Программирование контроллера нгмд 765 и микросхемы прямого доступа к памяти 8237.
- •5.4.2 Чтение/запись определенных секторов.
- •5.4.3 Запись в последовательные файлы.
- •5.4.4 Чтение из последовательных файлов.
- •5.4.5 Запись в файлы прямого доступа.
- •5.4.6 Чтение из файлов прямого доступа.
- •5.4.7 Проверка данных после операций чтения/записи.
- •5.4.8 Определение дисковых ошибок и восстановление после них.
- •Глава 6. Принтер. Раздел 1. Управление работой принтера.
- •6.1.1 Инициализация порта принтера/повторная инициализация принтера.
- •6.1.2 Проверка того, что принтер связан с машиной.
- •6.1.3 Интерпретация ошибок принтера и восстановление после них.
- •6.1.4 Переключение между двумя или несколькими принтерами.
- •Раздел 2. Установка спецификаций печати.
- •6.2.1 Установка текстового и графического режимов.
- •6.2.2 Управление расстоянием между строками.
- •6.2.3 Управление движением бумаги.
- •6.2.4 Управление положением печатающей головки.
- •6.2.5 Установка позиций табуляции.
- •6.2.6 Изменение шрифта печати.
- •6.2.7 Сравнение возможностей принтеров ibm.
- •Раздел 3. Посылка данных на принтер.
- •6.3.1 Вывод текстовых или графических данных на принтер.
- •6.3.2 Выравнивание правого поля.
- •6.3.3 Пропорциональная печать.
- •6.3.4 Печать специальных символов.
- •6.3.5 Копирование экрана на принтер (дамп экрана).
- •Глава 7. Ввод/вывод. Раздел 1. Доступ к последовательному порту.
- •7.1.1 Программирование микросхемы uart 8250.
- •7.1.2 Инициализация последовательного порта.
- •7.1.3 Установка текущего коммуникационного порта.
- •7.1.4 Определение статуса коммуникационного порта.
- •7.1.5 Инициализация и управление модемом.
- •7.1.6 Передача данных.
- •7.1.7 Получение данных.
- •7.1.8 Посылка/получение данных с помощью коммуникационного прерывания.
- •7.1.9 Сводка управляющих кодов, используемых при коммуникации.
- •Раздел 2. Создание драйвера устройства.
- •7.2.1 Создание заголовка драйвера.
- •7.2.2 Создание стратегии устройства.
- •7.2.3 Создание обработчика прерывания устройства.
- •7.2.4 Доступ к драйверу устройства.
- •7.2.5 Обнаружение и анализ ошибок устройства.
- •Раздел 3. Использование специальных устройств ввода/вывода.
- •7.3.1 Чтение/запись с кассетного магнитофона.
- •7.3.2 Чтение позиции светового пера.
- •7.3.3 Получение аналогового ввода через игровой порт.
- •7.3.4 Получение цифрового ввода из игрового порта.
- •7.3.2 Чтение позиции светового пера.
2.1.5 Задержка программных операций.
Если Вы осуществляете задержку в программе посредством пустого
цикла, то Вам может потребоваться много времени для того, чтобы
добиться нужного времени задержки. Даже если Вы определите тре-
буемую длительность, то нельзя быть уверенным, что Ваша программа
будет давать нужное время задержки при всех условиях. Длитель-
ность цикла может меняться в зависимости от используемого компи-
лятора (или, для Бейсика, от того, компилируется программа или
нет). А в наше время, когда имеется большой набор машин совмести-
мых с IBM PC - имеющих широкий диапазон скорости процессора -
даже цикл на языке ассемблера может приводить к различным време-
нам задержки. Поэтому разумно определять время программной за-
держки непосредственно по часам. Частота отсчета 18.2 раза в
секунду, используемая для модификации счетчика времени суток,
должна вполне удовлетворять большинство потребностей (как увели-
чить частоту отсчетов см. [2.1.1]).
Чтобы обеспечить задержку данной продолжительности, программа
должна подсчитать требуемое число импульсов счетчика времени
суток. Это значение добавляется к считанному текущему значению
счетчика. Затем программа постоянно считывает значение счетчика и
сравнивает его с запомненным. Когда достигается равенство, то
требуемая задержка прошла и можно продолжать выполнение програм-
мы. Четыре байта, в которых хранится значение счетчика времени
суток хранятся, начиная с адреса 0040:006C (как обычно, начиная с
младшего байта). Для задержек меньших 14 секунд можно пользовать-
ся только младшим байтом. Два младших байта позволяют задержки до
одного часа (точнее, на пол-секунды меньше, чем час).
Высокий уровень.
В Бейсике можно использовать оператор SOUND [2.2.2] со значе-
нием частоты, равным 32767. В этом случае звук не будет генериро-
ваться вообще. Это отсутствие звука будет длиться столько отсче-
тов времени суток, сколько Вы укажете. Для 5-секундной задержки
нужен 91 отсчет (5 * 18.2). Поэтому
100 SOUND 32767,91 'останавливает программу на 5 секунд
Для прямого чтения счетчика времени суток нужно:
100 DEF SEG = 0 'установка сегмента на начало памяти
110 LOWBYTE = PEEK(&H46C) 'получение младшего байта
120 NEXTBYTE = PEEK(&H46D) 'получение следующего байта
130 LOWCOUNT = NEXTBYTE*256 + LOWBYTE 'значение двух байтов
Средний уровень.
Прочитайте значение счетчика времени суток BIOS, используя
функцию 0 прерывания 1AH и добавьте к нему необходимое число
импульсов по 1/18 секунды. После этого считывайте текущие значе-
ния счетчика времени суток, постоянно сравнивая с требуемой вели-
чиной. При достижении равенства надо кончать задержку. Прерывание
1AH возвращает два младших байта в DX (большинство задержек укла-
дываются в этих пределах), поэтому два старших байта, возвращае-
мые в CX, могут игнорироваться, что позволит Вам избежать
32-байтных операций. В данном примере установлена задержка на 5
секунд, что соответствует 91 отсчету.
;---получение значения счетчика и установка задержки
MOV AH,0 ;номер функции для "чтения"
INT 1AH ;получаем значение счетчика
ADD DX,91 ;добавляем 5 сек. к младшему слову
MOV BX,DX ;запоминаем требуемое значение в BX
;---постоянная проверка значения счетчика времени суток BIOS
REPEAT: INT 1AH ;получаем значение счетчика
CMP DX,BX ;сравниваем с искомым
JNE REPEAT ;если неравен, то повторяем снова
;иначе, задержка окончена
AT имеет добавочную функцию прерывания 15H, которая позволяет
осуществить задержку на указанное время. Поместите 86H в AH, а
число микросекунд задержки в CX:DX. После этого выполните преры-
вание.