Страница 29 из 47
Высокий уровень. Когда цветной дисплей работает в графическом режиме, то Бейсик обрабатывает оператор COLOR по другому, чем в текстовом режиме. Сначала идет фоновый цвет, в виде числа от 0 до 15, а затем идет номер палетты 0 или 1. Например, COLOR 2,1 устанавливает зеленый фоновый цвет (#2) для всего экрана и активизирует палетту 1. После этого три возможных основных цвета указываются их номерами в палетте: 1 - циан, 2 - магента и 3 - белый (сравните с операто- ром PAINT). Чтобы выключить цвет в режиме умеренного разрешения напишите SCREEN ,1. Отметим, что использование только черного и белого цветов в режиме умеренного разрешения не приводит к эко- номии памяти. PCjr использует оператор COLOR таким образом только в режиме SCREEN 1. Для режимов от SCREEN 3 до SCREEN 6 формат этого оператора COLOR основной,фоновый. При этом основной цвет - это число в диапазоне от 1 до 15 в 16-цветном режиме и от 1 до 3 - в 4-цветном. Он не должен быть равным 0, который всегда исполь- зуется в качестве фонового цвета. Имеются специальные операторы для установки регистров палетты: PALETTE и PALETTE USING. PALETTE устанавливает цвет соответствую- щий любому атрибуты. Например, PALETTE 9,11 приводит к тому, что точки нарисованные с цветом палетты 9 (обычно светлосиний) будут выведены в цвете 11 (светлый циан). Чтобы изменить установку всех регистров палетты к их первоначальному значению, т.е. чтобы ре- гистр 0 содержал 0, регистр 12 - 12 и т.д. надо написать просто PALETTE. Отметим, что в режимах SCREEN 4 и SCREEN 6 регистры палетты инициализируются таким образом, чтобы атрибуты цветов 1-3 были такими же, как для палетты 1 на цветном графическом дисплее. Это делается в целях совместимости. Все 16 регистров палетты могут быть установлены одним операто- ром PALETTE USING. PALETTE USING направляет содержимое 16-эле- ментного целого массива в регистры палетты. Имея несколько таких массивов программа может быстро переключать различные схемы цве- тов. Каждый элемент массива должен быть числом в диапазоне от 0 до 15, или -1, в последнем случае соответствующий регистр не изменяется. Например, для обращения привычной схемы цветов соз- дайте массив, в котором ARRAYNAME(0) = 15, ARRAYNAME(1) = 14 и т.д. Затем напишите PALETTE USING ARRAYNAME(0) и содержимое мас- сива ARRAYNAME будет передано в регистры палетты. 0 индицирует начальную позицию в массиве, с которой надо брать данные посылае- мые в регистры. Могут использоваться более длинные массивы, из которых данные могут браться начиная с любой точки, при условии что до конца массива еще есть 16 элементов. PALETTE USING ARRAY- NAME(12) будет брать данные, начиная с 12-го байта массива. Отме- тим, что оператор PALETTE USING работает как в текстовом, так и в графическом режимах. Вот пример:
100 DEF INT A-Z 'все переменные целые 110 DIM SCHEME1(16) 'массив для схемы цветов #1 120 DIM SCHEME2(16) 'массив для схемы цветов #2 130 DATA 3,5,9,2,4,12,15,1,6,7,14,13,8,11,10,0 140 DATA 0,11,13,7,1,12,2,5,10,8,14,6,15,4,9,3 150 FOR N = 0 TO 15 'для каждого регистра палетты 160 READ Q 'прочитать код цвета 170 SCHEME1(N) = Q 'и поместить его в массив 180 NEXT ' 190 FOR N = 0 TO 15 'то же самое со вторым массивом 200 READ Q ' 210 SCHEME2(N) = Q ' 220 NEXT ' 230 PALETTE USING SCHEME1(0) 'установка регистров . 500 PALETTE USING SCHEME2(0) 'меняем их посреди программы
Средний уровень. Функция BH прерывания 10H устанавливает как фоновый цвет, так и цвета палетты - но не одновременно. Для установки фонового цвета надо поместить в BH 0, а затем код цвета от 0 до 15 в BL. Для установки палетты надо поместить в BH 1, а в BL 0 или 1. В данном примере устанавливается цвет фона циан и выбирается палет- та 0:
;---установка цвета фона и палетты MOV AH,0BH ;функция установки цвета MOV BH,0 ;сначала устанавливаем фоновый цвет MOV BL,3 ;код циана INT 10H ;установка цвета MOV BH,1 ;теперь устанавливаем палетту MOV BL,1 ;выбираем палетту 1 INT 10H ;устанавливаем палетту
На PCjr эта функция работает точно так же в 4-цветном режиме, устанавливая регистры 1-3 в одну из схем цветов, используемых цветным адаптером. В 2-цветном режиме 0 в BL соответствует белому цвету, как цвету 1, а 1 - черному. Эта функция не влияет на наз- начения, используемые в 16-цветном режиме. Однако во всех случаях фоновый цвет может быть установлен засылкой в BH 0, а в BL - кода цвета.
Низкий уровень. Для цветного адаптера мы можем получить доступ к "регистру выбора цвета" через порт 3D9H. В графических режимах этот регистр действует по-другому, чем в текстовых (описанных в [4.1.3]). Биты 0-3 содержат информацию о фоновом цвете в обычном формате (соот- ветственно синий, зеленый икрасный компоненты и интенсивность). Бит 5 выбирает палетту, когда этот бит равен 0, то палетта номер 0. В графических режимах остальные биты не имеют значения. Этот регистр только для записи, поэтому Вы должны указывать информацию и о фоновом цвете и о палетте, при изменении любого из них.
MOV DX,3D9H ;адрес регистра выбора цвета MOV AL,00100110B ;цепочка битов для циана и палетты 1 OUT DX,AL ;посылаем ее
Поскольку они используют регистры палетты, то этот пример неприменим ни к PCjr ни к EGA. Для них надо просто загрузить требуемые значения в эти регистры. У PCjr эти регистры нумеруются от 10H до 1FH. Доступ ко всем регистрам осуществляется через один порт с адресом 3DAH. Любое новое значение принимаемое этим портом воспринимается адресным регистром. Поэтому надо послать сначала номер регистра, а затем код цвета для этого регистра. Чтобы быть уверенным, что порт ожидает номер регистра надо прочитать из него. Например, чтобы поместить яркосиний цвет (1001) в регистр палетты 2:
;---помещаем код яркосинего цвета в регистр палетты 2 MOV DX,3DAH ;адрес массива ворот дисплея IN AL,DX ;читаем из него MOV AL,12H ;номер регистра OUT DX,AL ;посылаем номер регистра MOV AL,00001001B ;код яркосинего цвета OUT DX,AL ;посылаем цвет
У EGA адрес порта доступа к регистрам палетты - 3C0H, а регистры нумеруются от 00 до 0FH. Надо прочитать из порта 3DAH (а не 3C0H), чтобы быть уверенным, что ожидается номер регистра. Когда к EGA присоединен улучшенный цветной дисплей и переключатели установлены соответствующим образом, то в регистры помещаются 6-битные значения.
|