Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал
Страница 6. Установка атрибутов/цветов символов. Часть 2




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

Монохромные символы:

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

   Бит      Бит     Бит     Основной атрибут        Фоновый
 6 или 2  5 или 1 4 или 0

    0        0       0      черный                  черный
    0        0       1      подчеркнутый белый      белый
    0        1       0      белый                   белый
    0        1       1      белый                   белый
    1        0       0      белый                   белый
    1        0       1      белый                   белый
    1        1       0      белый                   белый
    1        1       1      белый                   белый

Нормальный  режим  белый на черном, когда биты 0-2 установлены  в
111, а биты 4-6 установлены в  000.  Негативное  изображение соз-
дается обратными значениями битов. Символы выводятся с повышенной
яркостью, когда бит 3 установлен в  1; не существует способа при-
дать повышенную яркость фону, когда символы выводятся в  негатив-
ном изображении, а также недоступно подчеркивание в негативе.  Во
всех случаях, установка в 1 бита  7 дает мигание символов.  Всего
возможно  только  10 комбинаций, когда символы видны.  Они  могут
быть реализованы различными установками битов. Ниже приводятся по
одной из возможных установок для каждого случая:

   Атрибут                 Цепочка битов       Гекс    10-ное

   нормальный                00000111            7         7
   интенсивный               00001111            F        15
   нормальный подчеркнутый   00000001            1         1
   интенсивный подчеркнутый  00001001            9         9
   негативный                01110000           70       112
   нормальный мигающий       10000111           87       135
   интенсивный мигающий      10001111           8F       143
   нормальный мигающий подч. 10000001           81       129
   яркий мигающий подчерк.   10001001           89       137
   яркий негативный          11110000           F0       240

   Высокий уровень.


   Бейсик  устанавливает  цвета  и атрибуты  символов  оператором
COLOR.  Все операторы PRINT  и  WRITE,  которые следуют за данным
оператором  COLOR,  выполняются с атрибутами,  указанными в  этом
операторе. Цвет фона меняется только для выодимых символов, но не
для всего экрана.  Новый оператор COLOR не влияет на то, что было
выведено ранее.
   Кроме случая монохромного  адаптера,  COLOR  3,4 устанавливает
основной цвет символа циан (#3), а фоновый - красный (#4). Диапа-
зон кодов основных цветов 0-31,  причем  числа 0-15 соответствуют
цветам,  перечисленным  в вышеприведенной таблице, а числа  16-31
получаются прибавлением к любому из этих кодов числа 16, что дает
тот же самый цвет, но с миганием символов.  (При мигании основной
цвет периодически меняется  на  фоновый,  в  то время как фоновый
цвет остается неизменным.)
   Операторы PRINT и WRITE могут также выводить символы на графи-
ческий экран.  При этом  цвет  символов  - это всегда третий цвет
текущей палетты, т.е.  желтый/коричневый для палетты 0 и белый  -
для палетты 1.
   Отметим, что когда Вы  начинаете  работать в цветном текстовом
режиме,  то весь экран черно-белый.  Чтобы закрасить весь экран в
фоновый цвет, необходимо  указать  оператором COLOR ,2, например,
зеленый цвет и затем очистить экран командой CLS. Когда Вы чисти-
те экран по ходу выполнения  программы, то необходимо, чтобы пос-
ледний  оператор  COLOR  установил фоновый цвет таким,  каким  Вы
хотите закрасить весь экран.
   Для монохромного дисплея атрибуты  устанавливаются аналогичным
образом.   0  соответствует черному цвету, а любое из  чисел  1-7
соответствует белому. Таким  образом COLOR 0,7 устанавливает чер-
ное изображение на белом фоне (негатив), в то время как COLOR 7,0

дает вывод белых символов  на  черном  фоне  (обычная установка).
Имеется одно исключение: если в качестве основного цвета  исполь-
зовать код 1, то будут выводиться подчеркнутые символы.  Прибавив
8  к любому из кодов основного цвета, получим яркое  изображение.
Прибавив 16 к любому из  кодов  0-15,  получим  мигающие символы.
Таким  образом  7+8+16=31 дает яркое мигающее белое  изображение.
Для фонового цвета допустимы только значения от 0 до 7.
   Если Вы используете прямое  отображение  в  память [4.3.1], то
оператор COLOR не влияет на вывод. Вместо этого Вы должны выбрать
требуемую установку атрибутов из таблиц  и прямо присвоить значе-
ние  соответствующего байта атрибутов оператором POKE.   Помните,
что байты атрибутов всегда занимают нечетные позиции в видеобуфе-
ре.  Отображение в память позволяет Вам иметь 16 фоновых цветов в
Бейсике (при условии, что  Вам  не  нужны  мигающие символы). Для
графического  адаптера  введите  OUT &H3D8,8, чтобы  старший  бит
каждого атрибута действовал как бит яркости для фоновых цветов. В
следующем  примере в центре экрана печатается яркокрасный "!"  на
светлокрасном фоне.

100 DEF SEG = &HB800   'указываем на буфер цветного дисплея
110 OUT &H3D8,8        'используем 16 фоновых цветов
120 POKE 1000,33       'печатаем ! в центре экрана
130 POKE 1001,196      'красный на светлокрасном (11000100)

Как уже говорилось выше PCjr  хранит  бит мигания в массиве ворот
дисплея. Вот та же программа для PCjr (но она не будет работать в
режиме двухцветной графики):

100 DEF SEG = &HB800   'указываем на видеобуфер
110 X = INP(&H3AH)     'читаем из массива ворот дисплея
120 OUT &H3AH,3        'требуем доступ к регистру 3
130 OUT &H3AH,0        'сбрасываем все биты этого регистра
140 POKE 1000,33       'печатаем ! в центре экрана
150 POKE 1001,196      'красный на светлокрасном (11000100)

Приведем еще пример изменения  назначения цвета регистра палетты.
Код  цвета, который обычно выводится синим (0001) сделаем,  чтобы
он выводил цвет  магента  (0101).   Номер  регистра массива ворот
дисплея, соответствующий коду цвета 1 равен 11H.

100 X = INP (&H3AH)    'читаем из массива ворот дисплея
110 OUT &H3AH,&H11     'требуем доступ к регистру 11H
120 OUT &H3AH,5        'помещаем туда код магенты (0101 = 5)
 
« Предыдущая статья   Следующая статья »