
- •Робер Журден. Справочник программиста на персональном компьютере фирмы 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 Чтение позиции светового пера.
6.1.1 Инициализация порта принтера/повторная инициализация принтера.
Программы должны инициализировать порт каждого принтера (LPT1
- LPT3) перед первым использованием принтера. Порты принтера
должны также повторно инициализироваться после устранения причин
ошибки принтера. Не путайте инициализацию порта принтера с ини-
циализацией самого принтера. Инициализация принтера это внутрен-
нее дело принтера. Она происходит автоматически при его включе-
нии и в большинстве случаев принтер не может быть повторно ини-
циализирован без его выключения и повторного включения. Но прог-
рамма может повторно инициализировать принтер, в том смысле, что
могут быть восстановлены начальные параметры, которые принтер
использует для печати, отменяя все специальные шрифты, остановы
табуляции и т.д. Считается правилом хорошего тона производить
такой сброс принтера, когда программа завершает работу с ним.
Языки высокого уровня инициализируют порт принтера автомати-
чески, но программы на языке ассемблера требуют для этой цели
короткую процедуру. С другой стороны, восстановление начальных
параметров печати требуется во всех программах. Некоторые принте-
ры, такие как новые Эпсоновские принтеры, имеют "главный код
сброса", который приводит к полному сбросу принтера. Но поскольку
не все принтеры имеют такой код, то программа должна предусматри-
вать в своей завершающей части восстановление всех измененных
параметров. Например, она может подать коды выключения курсива,
выключения плотной печати и т.д. Не забудьте включить вызов этой
процедуры в процедуру выхода по Ctrl-Break.
Имейте в виду, что на многих принтерах символы не печатаются
до тех пор, пока не получен код возврата каретки, завершающий
строку (или до тех пор пока не введена целая строка данных).
Символы могут спокойно ожидать в буфере принтера, даже после
того, как породившая их программа завершилась. Когда начинается
новая передача данных на принтер, то эти символы будут напечата-
ны. Чтобы избежать этой проблемы, не забывайте почистить буфер
перед началом печати; а в качестве правил хорошего тона, чистите
буфер также при завершении программы. Это делается посылкой на
принтер кода ASCII 24 (при этом параметры печати не меняются).
Средний уровень.
Функция 1 прерывания 17H BIOS инициализирует порт принтера и
возвращает байт, дающий статус порта. Поместите в DX номер порта
- число от 0 до 2 для LPT1 - LPT3, после чего вызовите прерыва-
ние. Байт статуса принтера (идентичный обсуждаемому в [6.1.2])
возвращается в AH.
;---инициализация LPT1
MOV AH,1 ;функция инициализации принтера
MOV DX,0 ;LPT1
INT 17H ;проводим инициализацию
Низкий уровень.
Ренистр управления выводом каждого адаптера принтера имеет
бит, который вызывает инициализацию адаптера. Этот регистр имеет
адрес порта на 2 больше, чем базовый адрес адаптера. Напоминаем,
что базовый адрес для LPT1 хранится в ячейке 0040:0008, для LPT2
- в 0040:000A и т.д. Имеют значение только младшие 5 битов ре-
гистра управления выводом. Бит 2 - бит инициализации принтера и
обычно он устанавливается в 1. Для инициализации адаптера надо
сбросить этот бит в 0 на тысячу тактов пустого цикла (3000 для AT
или на 1/20 секунды, используя счетчик времени суток BIOS
[2.1.5]). В этот момент нужно, чтобы был установлен только бит 3
(принтер выбран). Поэтому пошлите в порт значение 12, сделайте
задержку, а затем пошлите в порт обычное (без прерываний) неини-
циализонное значение, которое равно 8.
В данном примере инициализируется LPT1:
;---инициализируем LPT1
MOV DX,ES:[8] ;считываем базовый адрес в DX
INC DX ;прибавляем 2 к базовому адресу
INC DX ;
MOV AL,12 ;значение для инициализации
OUT DX,AL ;начинаем инициализацию
DELAY: MOV AX,1000 ;начало пустого цикла
DEC AX ;уменьшаем счетчик
JNZ DELAY ;повторяем 1000 раз
MOV AL,8 ;обычное значение для регистра
OUT DX,AL ;конец инициализации