Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
33_Metodicheskie_ukazania_po_laboratornym_rabot...doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
706.56 Кб
Скачать

Установка атрибутов/цветов символов.

Когда дисплей установлен в текстовый режим в любой из видео систем, то каждой позиции символа на экране отводится два байта памяти. Первый байт содержит номер кода ASCII кода символа, а второй - атрибуты символа. Цветной адаптер могут выводить в цвете, как сам символ, так и всю область, отведенную данному символу (фоновый цвет). Монохромный адаптер ограничен только черным и белым цветом. Все системы могут выдавать мигающие символы и негативное изображение.

Все системы могут также создавать символы с высокой интенсивностью, хотя для цветного адаптора повышенная интенсивность символа на самом деле приводит к другому цвету (восемь основных цветов имеют версии с повышенной интенсивностью, что дает набор 16 цветов). EGA умеет делать все, что могут все остальные системы и многое другое. В частности, на улучшенном дисплее он может выводить подчеркнутые цветные символы, поскольку матрица изображения символов 8*14 дает такую возможность.

Атрибуты цвета:

0 - черный 8 - серый

1 - синий 9 - голубой

2 - зеленый 10 - светлозеленый

3 - циан 11 - светлый циан

4 - красный 12 - светлокрасный

5 - магента 13 - светлая магента

6 - коричневый 14 - желтый

7 - белый 15 - яркобелый

Младшие четыре бита байта атрибутов устанавливают цвет самого символа (бит 3 включает высокую интенсивность). Следующие три бита устанавливают фон символа. И при обычных обстоятельствах старший бит включает и выключает мигание. Таким образом:

0 = 1, синий включается в основной цвет

1 = 1, зеленый включается в основной цвет

2 = 1, красный включается в основной цвет

3 = 1, символ выводится с высокой интенсивностью

4 = 1, синий включается в фоновый цвет

5 = 1, зеленый включается в фоновый цвет

6 = 1, красный включается в фоновый цвет

7 = 1, символы мигают

Биты 0-2 и 4-6 содержат одни и те же компоненты цветов для самих символов и фона. Эти трехбитные группы позволяют 8 возможных комбинаций. Когда включается бит высокой интенсивности, то добавляются еще 8 цветов. Шестнадцать возможных цветов получаются из этих установок битов следующим образом:

Kрасный Зеленый Синий Hизкая интенсивность Высокая

0 0 0 черный серый

0 0 1 синий светлосиний

0 1 0 зеленый светлозеленый

0 1 1 циан светлый циан

1 0 0 красный светлокрасный

1 0 1 магента светлая магента

1 1 0 коричневый желтый

1 1 1 белый яркобелый

Можно иметь 16 цветов и для фонового цвета. В этом случае бит 7 должен служить указателем высокой интенсивности для фона, а не указателем мигания символов. Для цветного адаптера надо изменить бит 5 порта с адресом 3D8H в 0, как показано ниже. Поскольку этот порт доступен только для записи, то все остальные биты должны быть переустановлены. Эта возможность доступна только в двух случаях: текстовых режимов с 40 и с 80 символами в строке. Для режима с 80 символами надо послать в порт число 9, а для режима с 40 символами - число 8. Чтобы вернуть мигание надо добавить к обоим этим значениям 32. Все остальные биты должны быть равны нулю, кроме номера 3, который должен быть установлен для режима двухцветной графики. Кроме этого режима, для установки бита мигания надо сначала прочитать порт с адресом 3DAH, чтобы подготовить массив ворот дисплея, затем послать в него 3, чтобы указать регистр, и затем послать 0, чтобы установить бит мигания. При завершении программы всегда надо восстанавливать мигание, так как следующая программа может полагаться на это.

EGA также может разрешать/запрещать мигание, хотя в этом случае адрес порта 3C0H. Сначала надо прочитать порт 3DAh, чтобы получить доступ к адресному регистру в 3C0H. затем надо послать в 3C0h 10h, чтобы указать соответствующий регистр. Наконец, надо послать данные по тому же адресу. Поскольку этот регистр только для записи, то все биты должны быть правильно установлены. Мигание включается установкой бита 3, а выключается сбросом этого бита. Все остальные биты в цветном текстовом режиме должны быть равны 0.

Для цветного адаптера, когда символы выводятся на дисплей в цветном графическом режиме, то они изображаются в текущем фоновом цвете. Операторы, которые выводят на экран, как в Бейсике, так и в MS DOS (прерывание 21H) ограничены выводом символов в третьем цвете используемой палетты. В палетте 0 символы желтые/коричневые, а в палетте 1 они белые. Процедуры вывода символов BIOS (прерывание 10H), однако, могут указать любой из трех цветов палетты.

EGA также использует 16 регистров палетты. Они расположены в порте с номером 3C0H, а номера их меняются от 00 до 0FH. Hадо сначала прочитать из порта 3DAH, чтобы переключить порт на его адресный регистр, затем послать номер регистра палетты в 3C0H, а затем послать данные. Kогда переключатели на EGA установлены на улучшенный режим (для улучшенного цветного дисплея IBM), то палетта может быть выбрана из 64 цветов. В этом случае установка регистра палетты имеет длину 6 битов в формате R'G'B'RGB. Биты RGB дают темные цветы, а биты R'G'B' - цвета повышенной яркости. Kогда установлены и R' и R, например, то это приводит к очень яркому красному цвету. Биты могут смешиваться давая новые оттенки. Если регистры палетты, предназначенные для 64 цветов, используются не в улучшенном режиме, то 4-й и 5-й биты регистра игнорируются и содержимое регистров рассматривается по обычной схеме RGB. Поскольку EGA используют регистры палетты, то выбор фонового цвета не ограничен использованием бита 7 байта атрибутов в качестве бита мигания.

Прерывания DOS и BIOS предоставляют очень бедные возможности для работы с цветным текстом. Только функция 9 прерывания 10H принимает байт атрибутов при выводе символа. Функция A прерывания 10H выводит символ без указания цвета или атрибута; она просто помещает символ в видеобуфер, не трогая байт атрибута, таким образом атрибуты сохраняют свое старое значение. Функция D прерывания 10H также оставляет нетронутым байт атрибутов.

Функции вывода на экран DOS прерывания 21H всегда выводят белое на черном. Даже если для всего экрана установлен некоторый фоновый цвет, то функции DOS устанавливают атрибут в нормальный черный при выводе каждого символа. Однако имеется способ преодолеть это ограничение. MS DOS предоставляет драйвер устройства ANSI.SYS, который может интерпретировать специальные Esc-последовательности. В приложении Д объясняются основы его использования.

Отметим, что когда функции MS DOS выводят символы в графическом режиме, то они обычно используют код 3 текущей палетты. С помощью Esc-последовательностей можно установить цвет символа соответствующим любому из цветов палетты. Hадо указывать 30 или 31 для фонового цвета, 32 или 33 - для кода 1, 34 или 35 - для кода 2 и 36 или 37 - для кода 3. В этом случае не надо указывать фоновый цвет.

В следующем примере на экран выводятся две строки с помощью функции 9 прерывания 21H. Первая выводится синим на красном, а вторая - мигающим цианом на красном. Hе надо переопределять красный в качестве фонового цвета для второй строки, поскольку назначения цветов действуют на все последующие команды вывода (включая функции BIOS прерывания 10H), до тех пор, пока не будут сделаны другие назначения. Отметим, как просто перемешивать команды управления цветом с выводом самих строк.

;---в сегменте данных

STRING_1 DB 'The rain in Spain',0AH,0DH,'$'

STRING_2 DB 'Falls mainly on the plain$'

BLUE_RED DB 27,'[34;41m$'

BLINK_CYAN DB 27,'[5;36m$'

;---вывод строк

MOV AH,9 ;функция вывода строки

LEA DX,BLUE_RED ;адрес управляющей строки в DX

INT 21H ;все будет выдаваться синим на красном

LEA DX,STRING_1 ;указываем на первую строку

INT 21H ;печатаем строку

LEA DX,BLINK_CYAN ;адрес второй управляющей строки

INT 21H ;меняем цвет на мигающий циан

LEA DX,STRING_2 ;указываем на вторую строку

INT 21H ;печатаем строку

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]