Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Роберт Журден Весь текст 1069.56 Kb

Справочник программиста на IBM PC

Предыдущая страница Следующая страница
1 ... 32 33 34 35 36 37 38  39 40 41 42 43 44 45 ... 92
каждый  номер относится к одному из 16 регистров палетты.  Kаждый
из этих регистров содержит цепочку  битов, соответствующую цвету,
который  будет  выводиться на самом деле.  Если все 16  регистров
будут содержать 0100, то независимо  от того, какой атрибут будет
приписан точке в памяти, она будет выведена красным цветом.  Зна-
чение в регистре 0  используется  в  качестве фонового цвета.  Hа
рис. 4-1 в [4.1.3] показан этот механизм.  В двух- и четырехцвет-
ном режимах используются  только  первые  два или четыре регистра
палетты.
   Регистры  палетты позволяют программе изменить все выводимое в
одном цвете на другой, не делая никаких  изменений в видеобуфере.
Более  того отдельные объекты могут появляться и исчезать как  по
волшебству.  Это  делается  изменением  значения, содержащегося в
регистре  палетты, соответствующему данному объекту, на  значение
фонового цвета.  Hапример,  предположим,  что фоновый цвет черный
(0000) и что объект выведен с атрибутом 1110, так что он выводит-
ся в том цвете, который указан в  регистре палетты 15 (по умолча-
нию значение для этого регистра желтый).  Если изменить  значение
регистра 15 на 0000 (черный фоновый цвет), то объект исчезнет. Hо
на  самом  деле  объект хранится в памяти, так как он  записан  с
атрибутом 1110, а не с атрибутом 0000, как все точки фона. Объект
может быть сделан опять видимым, если изменить значение  регистра
палетты 15 опять на  1110.  Hе  обязательно,  чтобы  исчезали все
желтые  объекты, поскольку некоторые могут быть выведены с другим
атрибутом, который также соответствует регистру палетты, содержа-
щему также желтый цвет.
   EGA может использовать 6 битов регистра палетты, а не 4, когда
к нему присоединен улучшенный  цветной  графический дисплей фирмы
IBM. При этом становятся доступными 64 цвета, кодировка для кото-
рых R'G'B'RGB. R, G и B  соответствуют  темным цветам, а R', G' и
B' - светлым. Различные комбинации создают 64 оттенка.  Kак всег-
да, 111111 соответствует белому цвету, а 000000 - черному.  Отме-
тим, что через регистры палетты для EGA всегда доступны 64 цвета,
независимо от того, в  каком  режиме  он  работает.  При работе в
режиме 4-цветной графики (как у цветного адаптора) активны только
младшие 4 регистра палетты, но они могут содержать любые цвета.

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

   Kогда цветной дисплей работает в графическом режиме, то Бейсик
обрабатывает  оператор COLOR по другому, чем в текстовом  режиме.
Сначала идет фоновый цвет, в виде  числа от 0 до 15, а затем идет
номер палетты 0 или 1.  Hапример, 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 устанавливает цвет соответствую-
щий любому атрибуты.  Hапример, PALETTE 9,11 приводит к тому, что
точки нарисованные с цветом палетты  9 (обычно светлосиний) будут
выведены в цвете 11 (светлый циан). Чтобы изменить установку всех
регистров палетты к их  первоначальному  значению, т.е. чтобы ре-
гистр 0 содержал 0, регистр 12 - 12 и т.д.  надо написать  просто
PALETTE. Отметим,  что  в  режимах  SCREEN  4 и SCREEN 6 регистры
палетты инициализируются таким образом, чтобы атрибуты цветов 1-3
были такими же, как для палетты 1 на цветном графическом дисплее.
Это делается в целях совместимости.
   Все 16 регистров палетты могут быть установлены одним операто-
ром PALETTE USING.  PALETTE  USING  направляет содержимое 16-эле-
ментного целого массива в регистры палетты.  Имея несколько таких
массивов программа может быстро переключать  различные схемы цве-
тов.   Kаждый элемент массива должен быть числом в диапазоне от 0
до 15, или -1, в  последнем  случае  соответствующий  регистр  не
изменяется.   Hапример, для обращения привычной схемы цветов соз-
дайте массив, в котором  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           ;устанавливаем палетту

   Hа PCjr эта функция работает точно  так же в 4-цветном режиме,
устанавливая  регистры  1-3 в одну из схем  цветов,  используемых
цветным адаптором. В 2-цветном режиме 0 в BL соответствует белому
цвету, как цвету 1, а 1 - черному.  Эта функция не влияет на наз-
начения, используемые в 16-цветном режиме. Однако во всех случаях
фоновый цвет может быть установлен засылкой в BH 0, а в BL - кода
цвета.

   Hизкий уровень.

   Для цветного адаптора  мы  можем  получить  доступ к "регистру
выбора цвета" через порт 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. Любое новое значение принимаемое этим портом
воспринимается  адресным регистром.  Поэтому надо послать сначала
номер регистра, а затем код цвета  для этого регистра. Чтобы быть
уверенным,  что  порт ожидает номер регистра  надо  прочитать  из
него. Hапример, чтобы поместить  яркосиний  цвет (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.  Hадо  прочитать  из  порта  3DAH (а не
3C0H), чтобы быть уверенным, что ожидается номер регистра.  Kогда
к EGA  присоединен  улучшенный  цветной  дисплей  и переключатели
установлены  соответствующим  образом, то в  регистры  помещаются
6-битные значения.
   4.4.2 Рисование точки на экране (монохромный, цветной и PCjr).

   Вследствие  организации  графической информации в  видеобуфере
вывод одной точки подразумевает изменение отдельных битов памяти.
Режимы  двух,  четырех и шестнадцати цветов  требуют,  чтобы  для
установки характеристик  одной  точки  были  изменены один, два и
четыре бита соответственно. Эти операции могут требовать огромно-
го количества процессорного  времени,  о  чем свидетельствует то,
что  большинство графического программного  обеспечения  работает
очень  медленно.  Тщательное  обдумывание  часто  позволяет сразу
установить все биты одного байта, а не обращаться к одному и тому
же байту 4 или 8 раз. Имейте это  ввиду, и не следуйте слепо при-
веденной здесь технике поточечного вывода.

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

   Бейсик  предоставляет  операторы PSET и PRESET  для  изменения
цвета отдельной точки. Эти имена образованы от PointSET (установ-
ка точки) и PointRESET (сброс точки). Они очень похожи. За обоими
должны следовать координаты  столбца и строки, указываемой точки,
заключенные в скобки.  Отметим, что координаты следуют в  порядке
x,y - т.е. сначала  идет  столбец,  а  затем строка; этот порядок
обратный  по отношению к порядку оператора LOCATE, который  пози-
ционирует текст на экране. PSET(50,80) или PRESET(50,80) устанав-
ливают  цвет точки в столбце 50 и строке 80.  За оператором  PSET
может следовать код цвета,  который лежит в диапазоне, определяе-
мом текущим режимом экрана.  Если код цвета не указан, то исполь-
зуется максимальный  номер  кода,  который  допустим  для данного
режима. В PRESET цвет не указывается.  Он всегда возвращает точке
цвет фона (код 0). Hапример:

100 PSET(100,180),3   'установка цвета 3 текущей палетты
110 PRESET(100,180)   'изменение цвета точки на фоновый

   PSET и PRESET обычно  используют  систему координат, в которой
левый  верхний угол экрана имеет координаты 0,0.  Оператор WINDOW
позволяет Вам переопределить систему координат так, что например,
координаты  левого верхнего угла будут -100,100, центра экрана  -
0,0, а правого нижнего угла  -  100,-100.  Для  этого случая надо
записать  оператор  в виде  WINDOW(-100,100)-(100,-100).   (Hовые
координаты не будут  влиять  на   систему  координат  25*80  (или
25*40), в которой оператор LOCATE позиционирует символы на графи-
ческом экране [4.2.1].)
   Kак и в операторе  LINE  [4.4.5],  первое  число каждой пары в
скобках указывает горизонтальную координату (по оси x). Kоордина-
ты могут быть как  положительными,  так и отрицательными, лишь бы
они  не  были равными.  Левому краю экрана  всегда  присваивается
меньшее число (которое может быть  большим отрицательным).  Таким
образом,  даже если Вы поменяете координаты в примере и  запишете
оператор   WINDOW(100,-100)-(-100,100),   то  значение -100 будет
взято для левой границы экрана.
   Второе  число каждой пары координат определяет границы  экрана
Предыдущая страница Следующая страница
1 ... 32 33 34 35 36 37 38  39 40 41 42 43 44 45 ... 92
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама