Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал - Установка/проверка режима дисплея. Часть 2
ОГЛАВЛЕНИЕ
Страница 4 из 47
Средний уровень.
Функция 0 прерывания 10H устанавливает режим дисплея. В AL
должен находиться номер режима от 0 до A. Чтобы установить цвет-
ной графический режим среднего разрешения надо:
MOV AH,0 ;номер функции
MOV AL,4 ;номер требуемого режима
INT 10H ;устанавливаем режим
Для определения текущего графического режима надо использовать
функцию F прерывания 10H. Прерывание возвращает номер режима в
AL. Оно также дает номер текущей страницы дисплея в BH и число
символов в строке в AH.
MOV AH,0FH ;номер функции
INT 10H ;получение информации о режиме дисплея
MOV MODE_NUMBER,AL ;номер режима в AL
MOV NUMBER_COLS,AH ;число символов в строке в AH
MOV CURRENT_PAGE,BH ;номер текущей страницы в BH
MS DOS обеспечивает также Esc-последовательности для установки
и сброса режимов дисплея. Для этого необходимо, чтобы Вы предва-
рительно загрузили драйвер ANSI.SYS, как объяснено в приложении
Д. Управляющая строка имеет вид ESC [=#h, где # - номер режима,
указанный как код ASCII, а ESC обозначает один символ с кодом
ASCII 27. Например:
;---в сегменте данных
MED_RES_COLOR DB 27, '[=4h$'
MED_RES_B&W DB 27, '[=5h$'
;---установка цветного графического режима среднего разрешения
MOV AH,9 ;номер функции вывода строки
LEA DX,MED_RES_COLOR ;DS:DX должны указывать на строку
INT 21H ;изменение режима
Низкий уровень.
В данном пункте цветной адаптер, монохромный адаптер и PCjr
рассматриваются отдельно, поскольку они существенно отличаются.
Цветной графический адаптер имеет регистр, который устанавливает
режим дисплея. Он расположен в порте с адресом 3D8H. Биты 0, 1, 2
и 4 хранят установку. Бит 0 устанавливает 40 символов в строке,
когда он равен 0 и 80 - когда равен 1. Бит 1 устанавливает дисп-
лей в текстовый режим, когда равен 0 и в графический, когда равен
1. Бит 2 устанавливает цветной режим, когда равен 0 и черно-бе-
лый, когда равен 1. И, наконец, бит 4 устанавливает для графичес-
кого режима среднее разрешение, когда равен 0 и высокое разреше-
ние, когда равен 1 (бит 2 должен быть равен 1). Ниже приведены
возможные комбинации:
Режим биты: 5 4 3 2 1 0
0. 40*25, черно-белый, текст 1 0 1 1 0 0
1. 40*25, цветной, текст 1 0 1 0 0 0
2. 80*25, черно-белый, текст 1 0 1 1 0 1
3. 80*25, цветной, текст 1 0 1 0 0 1
4. 320*200, черно-белый, графика 0 0 1 1 1 0
5. 320*200, цветной, графика 0 0 1 0 1 0
6. 640*200, черно-белый, графика 0 1 1 1 1 0
Ё Ё Ё Ё Ё текст 80*25
Ё Ё Ё Ё графика 320*200
Ё Ё Ё черно-белый
Ё Ё разрешение вывода
Ё графика 640*200
мигание
Изменение этих битов не приводит к изменению режима дисплея.
Нужно еще много шагов, включающих изменение параметров первых 10
регистров по адресу порта 3D5H. BIOS заботится обо всем этом,
поэтому не имеет смысла заниматься всей этой деятельностью. Одна-
ко иногда имеет смысл реинициализировать регистр режима в его
текущем режиме, изменяя биты 3 и 5, которые на самом деле не от-
вечают за установку режима. Когда бит 5 сброшен в 0, то он зап-
рещает атрибут мигания символов; в этом случае, если старший бит
байта атрибутов установлен, то это приводит к выводу фонового
цвета высокой интенсивностью (см. пример в [4.1.3]). Бит 3 этого
регистра управляет разрешением вывода. Когда он равен 0, то весь
экран закрашивается в цвет рамки, но видеобуфер не очищается.
Вывод мгновенно возвращается, когда значение этого бита меняется
на 1. Это свойство полезно использовать для избежания интерферен-
ции экрана при сдвигах [4.5.1]. Некоторые утилиты используют это
свойство для того, чтобы зря не утомлять фосфорное покрытие тру-
бки терминала, когда компьютер включен, но не используется. Отме-
тим также, что два старших бита регистра не используются.
Монохромный адаптер имеет соответствующий адрес порта 3B8H.
Имеют значение только три бита. Бит 0 устанавливает высокое раз-
решение, которое является единственным допустимым режимом для
монохромного дисплея. Если этот бит равен 0, то компьютер перес-
тает работать. Два других значащих бита - это биты 3 и 5, которые
управляют разрешением вывода и миганием, в точности так же, как и
для цветного адаптера.
PCjr распределяет информацию, содержащуюся в одном порте для
монохромног и цветного адаптера. Массив ворот дисплея имеет два
регистра режима, номера 0 и 3. Для доступа к этим регистрам надо
послать номер регистра в порт с адресом 3DAH, а затем записать
данные по тому же адресу (чтение этого порта обеспечивает, что
первая запись в него будет воспринята, как указание номера тре-
буемого регистра). Вот значение битов этих регистров:
Регистр 0:
бит 0 1 = текст, 80*25 и режимы 5 и 6, иначе 0
0 1 = графический режим, 0 = текстовый
0 1 = запрет цветов, 0 = разрешение цветов
0 1 = разрешение вывода, 0 = запрет вывода
0 1 = 16-цветный режим, 0 = все остальные режимы
Регистр 3:
бит 0 всегда 0
1 1 = разрешение мигания, 0 = 16 фоновых цветов
2 всегда 0
3 1 = 2-цветная графика, 0 = все остальные режимы
Как и в двух предыдущих случаях, не стоит устанавливать эти ре-
гистры прямо из программы, так как нужно еще много работы для
программирования микросхемы 6845. Но каждый из этих регистров
содержит бит, который иногда приходится программно модифициро-
вать, а поскольку эти регистры только для записи, то Вам необхо-
димо понимать значение всех их битов. Эти биты - бит разрешения
вывода в регистре 0 и бит разрешения мигания в регистре 3. Их
действие было описано ранее и возможное их использование еще не
раз будет обсуждаться в этой главе (в [4.5.1] и [4.1.3]).
EGA имеет два регистра, управляющих режимом дисплея. Один
имеет адрес порта 3D5H. Этот регистр не содержит ни одного бита,
связанного с чем-либо другим, поэтому нет никаких причин обра-
щаться к нему. Второй регистр имеет адрес порта 3C0H и содержит
бит, который выбирает будет ли бит 7 байта атрибутов соответство-
вать миганию или высокой интенсивности. Этот вопрос обсуждается в
[4.1.3].