Жанр: Учеба

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

сторінка №17

;номер столбца
MOV BH,0 ;номер страницы
INT 10H ;позиционируем курсор
;---чтение символа и атрибутов
MOV AH,8 ;функция чтения символа/атрибутов
MOV BH,2 ;номер страницы
INT 10H ;в AH:AL теперь атрибуты и символ

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

Надо вычислить смещение и проделать операцию обратную прямой
записи в память. При необходимости надо добавить смещение для
данной страницы. В примере получаем символ и атрибуты в позиции
7,39 страницы 2 графического адаптора:

;---чтение символа и атрибутов позиции 7,39 страницы 2
MOV AX,0B800H ;адрес видеобуфера
MOV ES,AX ;ES указывает на первый байт буфера
MOV DI,1000H ;смещение до начала страницы
MOV AL,80 ;умножаем номер строки на 160
MOV BL,7 ;номер строки
MUL BL ;теперь в AX (строка-1)*160
MOV AX,39 ;номер столбца
ADD BX,AX ;номер позиции в видеобуфере
SHL BX,1 ;умножаем его на два
MOV AX,ES:[BX][DI] ;теперь AH:AL содержат атрибуты/символ
4.3.4 Создание специальных символов.

Только монохромный адаптор не может выводить символы вида,
заданного самим программистом. Цветной адаптор позволяет 128
символов, определяемых пользователем, PCjr - 256, а EGA - 1024 из
которых одновременно доступно 512. Для цветного адаптора ROM-BIOS
содержит данные для разрисовки только первых 128 символов набора
ASCII (с номерами от 0 до 127). Следующие 128 символов недоступны
для Вас, пока Вы не создатите их, используя описанную здесь технику.
Отметим, что MS DOS 3.00 предоставляет команду GRAFTABL,
которая предоставляет требуемые данные для второй порции из 128
символов. PCjr имеет данные для второй порции из 128 символов уже
готовые. EGA имеет полные наборы символов для режимов с 200 строками
и с 350 строками.
Символы для графического адаптора и PCjr описываются с помощью
матрицы 8*8 точек. Данные для каждого символа содержатся в восьми
байтах. Каждый байт содержит установку для точек одного ряда,
начиная с верхнего ряда, причем старший бит (номер 7) соответствует
самой левой точке в ряду. Когда соответствующий бит равен 1,
то точка высвечивается. Для описания символа Вы должны определить
правильные последовательности битов для восьми байтов и поместить
их в последовательные ячейки памяти. На рис. 4-3 показано как 8
байтов описывают бубновую масть.
Все 128 символов вместе требуют 1024 байта, хотя вовсе не
требуется, чтобы были описаны все символы. Специальный вектор
прерывания (постоянный указатель в младших адресах памяти
[1.2.0]) указывает на адрес первого байта первого символа расширенного
набора, т.е. на символ номер 128. Когда в позицию символа
в видеобуфере посылается код 128, то просматриваются и выводятся
первые восемь байт. Если номер символа 129, то выводятся байты с
девятого по шестнадцатый, и т.д.
Номер этого вектора прерывания 1FH и он расположен по адресу
0000:007C. Поместите значение смещения в младшее слово (сначала
младший байт), а адрес сегмента - в старшее слово (снова, сначала
младший байт). Отметим, что можно символы с большими номерами
кодов, не отводя памяти для символов с меньшими номерами; надо
просто чтобы вектор указывал на некоторый адрес, который меньше,
чем адрес начала блока, содержащего данные для описания символов.
Восьмибайтные последовательности, описывающие символы ASCII с
кодами 128-255 приведены в [4.3.5]. У PCjr вектор 1FH указывает
на вторые 128 символов ASCII, а вектор 44H - на первые. Оба этих
вектора могут быть изменены, допуская полный набор 256 символов,
определяемых пользователем.
Для EGA картина намного сложнее, но и намного гибче. При инициализации
текстового режима один из двух наборов символов (8*8
или 8*14) копируется из ПЗУ EGA в карту битов 2 видеобуфера. Эта
часть буфера рассматривается как разбитая на блоки, причем стандартный
набор символов помещается в блок 0. При условии, что EGA
оснащен достаточной памятью могут быть определены еще три блока
для описания символов. Размер блока определяется числом строк
матрицы, используемой для описания символа. Символы, описываемые
матрицей 8*8 требуют 8*256 или 2048 байт. Когда разрешены более
одного блока символов, то бит 3 байта атрибутов определяет из
какого блока будут браться данные для описания символа.

Какой из блоков будет использоваться зависит от установки
битов 0-3 регистра выбора карты символов, адрес порта которого
3C5H. Предварительно надо послать 3 в порт 3C4H, чтобы указать
требуемый регистр. Биты 1-0 дают номер блока символов, который
берется когда бит 3 байта атрибутов равен 0, а биты 3-2 - делают
то же самое, когда бит 3 равен 1. Когда установка обоих пар битов
совпадает, то возможность использования двух наборов символов
отсутствует и бит 3 байта атрибутов переключается на установку
интенсивности символа. В этом случае используется только блок 0.
Однако никто не может помешать Вам поместить свои символы в любую
нужную Вам позицию в этом блоке. Если Вы изменили стандартный
набор символов, то Вы можете в любой момент восстановить его из
ПЗУ.

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

В Бейсике Вы должны позаботиться о том, чтобы данные описывающие
символы находились за пределами памяти, используемой программой.
Если имеется много памяти, то можно поместить данные в старшие
адреса; если имеется опасность конфликта, то следует использовать
команду CLEAR для ограничения количества памяти, которую
может использовать Бейсик. Затем следует поместить адрес первого
байта данных в вектор прерывания. В следующем примере описывается
символ 128 как квадратная рамка. Операторы DATA содержат значения,
описывающие символ. Они равны либо 255, либо 129; в первом
случае все биты равны 1, а во втором равны 1 только крайние биты.
О вычислении десятичных значений, соответствующих данным цепочкам
битов см. приложение Б.

100 '''помещаем данные, начиная с адреса &H3000
110 DATA 255, 129, 129, 129, 129, 129, 129, 255
120 DEF SEG = &H3000 'указываем начало сегмента
130 FOR N = 0 TO 7 'определяем 8 байт
140 READ Q 'читаем 1 байт
150 POKE N,Q 'помещаем его в память
160 NEXT 'и т.д.
170 '''установка вектора прерывания
180 DEF SEG = 0 'указываем на начало памяти
190 POKE 124,0 'указываем смещение
200 POKE 125,0 '
210 POKE 126,0 'указываем сегмент
220 POKE 127,&H30 '
230 '''печатаем символ
240 LOCATE 12,12: PRINT CHR$(128) 'теперь есть символ 128

Средний уровень.

Для цветного адаптора и PCjr используйте функцию 25H прерывания
21H для изменения вектора прерывания 1FH. При входе DS:DX
должны указывать на первый байт блока данных. Более подробное
описание см. в [1.2.3]. В примере создаются два символа с номерами
128 и 129. Они являются зеркальными отображениями друг друга,
а выведенные подряд образуют небольшой прямоугольник.
;---в сегменте данных
CHARACTER_DATA DB 11111111B, 10000000B, 10000000B, 10000000B
DB 10000000B, 10000000B, 10000000B, 11111111B
DB 11111111B, 00000001B, 00000001B, 00000001B
DB 00000001B, 00000001B, 00000001B, 11111111B

;---установка вектора прерывания
PUSH DS ;сохраняем DS
LEA DX,CHAR_DATA ;смещение для данных в DX
MOV AX,SEG CHAR_DATA ;сегмент для данных в DS
MOV DS,AX ;
MOV AH,25H ;функция установки вектора
MOV AL,1FH ;номер изменяемого вектора
INT 21H ;установка вектора
POP DS ;восстанавливаем DS

;---печать символов
MOV AH,2 ;номер функции
MOV DL,128 ;первый символ
INT 21H ;вывод его
MOV DL,129 ;второй символ
INT 21H ;вывод его

Для EGA функция 11H прерывания 10H манипулирует набором символов.
Эта функция может быть очень сложной, когда она используется
для создания специальных режимов экрана, но ее основное применение
достаточно простое. Имеется четыре подфункции. Когда AL равен
0, то данные, определяемые пользователем переносятся из памяти в
специальный блок символов. Когда AL равен 1 или 2, то наборы
данных для символов 8*14 и 8*8 соответственно копируются из ПЗУ в
блок символов. Когда AL равен 3, то функция устанавливает назначение
блока в регистре выбора карты символов, как описано выше. В
последнем случае надо просто поместить соотвествующие данные в BL
и вызвать функцию. Для загрузки данных из ПЗУ поместите номер
блока в BL и выполните функцию. Для загрузки своих данных надо
чтобы ES:BP указывали на них, число передаваемых символов должно
быть в CX, смещение (номер символа) в блоке должно быть в DX,
число байтов на символ - в BH, а номер блока - в BL. После этого
вызывайте прерывание 10H. Вот пример:

;---устанавливаем 128 пользовательских символов в блоке 0
MOV AX,SEG CHARACTER_DATA ;ES:BP должны указывать на данные
MOV ES,AX ;
MOV BP,OFFSET CHARACTER_DATA ;
MOV CX,128 ;число символов
MOV DX,128 ;начальное смещение
MOV BL,0 ;номер блока
MOV BH,8 ;матрица 8*8
MOV AL,1 ;номер подфункции
MOV AH,11H ;номер функции
INT 10H ;переносим данные
4.3.5 Сводка данных для описания символов.

Ниже приведены 8-байтные последовательности, необходимые для
описания символов для цветного графического адаптора. Их использование
объяснено в [4.3.4].

Код ASCII Символ Последовательность (16-ная)

128 А 78 CC C0 CC 78 18 0C 78
129 Б 00 CC 00 CC CC CC 7E 00
130 В 1C 00 78 CC FC C0 78 00
131 Г 7E C3 3C 06 3E 66 3F 00
132 Д CC 00 78 0C 7C CC 7E 00
133 Е E0 00 78 0C 7C CC 7E 00
134 Ж 30 30 78 0C 7C CC 7E 00
135 З 00 00 78 0C 7C CC 7E 00

136 И 7E C3 3C 66 7E 60 3C 00
137 Й CC 00 78 CC FC C0 78 00
138 K E0 00 78 CC FC C0 78 00
139 Л CC 00 70 30 30 30 78 00
140 М 7C C6 38 18 18 18 3C 00
141 H E0 00 70 30 30 30 78 00
142 О C6 38 6C C6 FE C6 C6 00
143 П 30 30 00 78 CC FC CC 00

144 Р 1C 00 FC 60 78 60 FC 00
145 С 00 00 7F 0C 7F CC 7F 00
146 Т 3E 6C CC FE CC CC CE 00
147 У 78 CC 00 78 CC CC 78 00
148 Ф 00 CC 00 78 CC CC 78 00
149 Х 00 E0 00 78 CC CC 78 00
150 Ц 78 CC 00 CC CC CC 7E 00
151 Ч 00 E0 00 CC CC CC 7E 00

152 Ш 00 CC 00 CC CC 7C 0C F8
153 Щ C3 18 3C 66 66 3C 18 00
154 Ъ CC 00 CC CC CC CC 78 00
155 Ы 18 18 7E C0 C0 7E 18 18
156 Ь 38 6C 64 F0 60 E6 FC 00
157 Э CC CC 78 FC 30 FC 30 30
158 Ю F8 CC CC FA C6 CF C6 C7
159 Я 0E 1B 18 3C 18 18 D8 70

160 а 1C 00 78 00 7C CC 7E 00
161 б 38 00 70 30 30 30 78 00
162 в 00 1C 00 78 CC CC 78 00
163 г 00 1C 00 CC CC CC 7E 00
164 д 00 F8 00 F8 CC CC CC 00
165 е FC 00 CC EC FC DC CC 00
166 ж 3C 6C 6C 3E 00 7E 00 00
167 з 38 6C 6C 38 00 7C 00 00
168 и 30 00 30 60 C0 CC 78 00
169 й 00 00 00 FC C0 C0 00 00
170 к 00 00 00 FC 0C 0C 00 00
171 л C3 C6 CC DE 33 66 CC 0F
172 м C3 C6 CC DB 37 6F CF 03
173 н 18 18 00 18 18 18 18 00
174 о 00 33 66 CC 66 33 00 00
175 п 00 CC 66 33 66 CC 00 00

176 - 22 88 22 88 22 88 22 88
177 - 55 AA 55 AA 55 AA 55 AA
178 - DB 77 DB EE DB 77 DB EE
179 ¦ 18 18 18 18 18 18 18 18
180 + 18 18 18 18 F8 18 18 18
181 ¦ 18 18 F8 18 F8 18 18 18
182 ¦ 36 36 36 36 F6 36 36 36
183 ¬ 00 00 00 00 FE 36 36 36

184 ¬ 00 00 F8 18 F8 18 18 18
185 ¦ 36 36 F6 06 F6 36 36 36
186 ¦ 36 36 36 36 36 36 36 36
187 ¬ 00 00 FE 06 F6 36 36 36
188 - 36 36 F6 06 FE 00 00 00
189 - 36 36 36 36 FE 00 00 00
190 - 18 18 F8 18 F8 00 00 00
191 ¬ 00 00 00 00 F7 18 18 18

192 L 18 18 18 18 1F 00 00 00
193 + 18 18 18 18 FF 00 00 00
194 T 00 00 00 00 FF 18 18 18
195 + 18 18 18 18 1F 18 18 18
196 - 00 00 00 00 FF 00 00 00
197 + 18 18 18 18 FF 18 18 18
198 ¦ 18 18 1F 18 1F 18 18 18
199 ¦ 36 36 36 36 37 36 36 36

200 L 36 36 37 30 3F 00 00 00
201 г 00 00 3F 30 37 36 36 36
202 ¦ 36 36 F7 00 FF 00 00 00
203 T 00 00 FF 00 F7 36 36 36
204 ¦ 36 36 37 30 37 36 36 36
205 = 00 00 FF 00 FF 00 00 00
206 + 36 36 F7 00 F7 36 36 36
207 ¦ 18 18 FF 00 FF 00 00 00

208 ¦ 36 36 36 36 FF 00 00 00
209 T 00 00 FF 00 FF 18 18 18
210 T 00 00 00 00 FF 36 36 36
211 L 36 36 36 36 3F 00 00 00
212 L 18 18 1F 18 1F 00 00 00
213 - 00 00 1F 18 1F 18 18 18
214 г 00 00 00 00 3F 36 36 36
215 + 36 36 36 36 FF 36 36 36
216 + 18 18 FF 18 FF 18 18 18
217 - 18 18 18 18 F8 00 00 00
218 - 00 00 00 00 1F 18 18 18
219 - FF FF FF FF FF FF FF FF
220 - 00 00 00 00 FF FF FF FF
221 ¦ F0 F0 F0 F0 F0 F0 F0 F0
222 ¦ 0F 0F 0F 0F 0F 0F 0F 0F
223 - FF FF FF FF 00 00 00 00

224 р 00 00 76 DC CB DC 76 00
225 с 00 78 CC F8 CC F8 C0 C0
226 т 00 CC C0 C0 C0 C0 00 00
227 у 00 FE 6C 6C 6C 6C 6C 00
228 ф FC CC 60 30 60 CC FC 00
229 х 00 00 7E D8 D8 D8 70 00
230 ц 00 66 66 66 66 7C 60 C0
231 ч 00 76 DC 18 18 18 18 00

232 ш FC 30 78 CC CC 78 30 FC
233 щ 38 6C C6 FE C6 6C 38 00
234 ъ 38 6C C6 C6 6C 6C EE 00
235 ы 1C 30 18 7C CC CC 78 00
236 ь 00 00 7E DB DB 7E 00 00
237 э 06 0C 7E DB DB 7E 60 C0
238 ю 38 60 C0 F8 C0 60 38 00
239 я 78 CC CC CC CC CC CC 00

240 Ё 00 FC 00 FC 00 FC 00 00
241 ё 30 30 FC 30 30 00 FC 00
242 Є 60 30 18 30 60 00 FC 00
243 є 18 30 60 30 18 00 FC 00
244 Ї 0E 1B 1B 18 18 18 18 18
245 ї 18 18 18 18 18 D8 D8 70
  1. 1048226 246

247 ў 00 76 DC 00 76 DC 00 00

248 ° 38 6C 6C 38 00 00 00 00
249 • 00 00 00 18 18 00 00 00
250 · 00 00 00 00 18 00 00 00
251 v 0F 0C 0C 0C EC 6C 3C 1C
252 № 78 6C 6C 6C 6C 00 00 00
253 ¤ 70 18 30 60 78 00 00 00
254 ¦ 00 00 3C 3C 3C 3C 00 00
255 00 00 00 00 00 00 00 00

Раздел 4. Вывод точечной графики.


Цветной графический адаптор имеет три графических режима, PCjr
- шесть, а EGA - семь. Как устанавливать эти режимы показано в
[4.1.2]. Требования к размеру памяти существенно отличаются для
различных режимов, в зависимости от разрешения экрана и числа
используемых цветов. В своих улучшенных графических режимах EGA
использует память дисплея совсем по-другому, чем остальные видеосистемы,
но он точно эмулирует их использование памяти при работе
в трех общих режимах.
Сначала рассмотрим цветной адаптор и систему PCjr. Два цвета
(черный и белый) требуют только один бит памяти для каждой точки
на экране. Четыре цвета занимают 2 бита, а 16 цветов - 4 (8-цветные
режимы не используются, поскольку три бита, требующиеся для
их представления нельзя удобно разместить в 8 бит байта). Для
всех режимов по вертикали имеется 200 точек. Низкое разрешение
(используемое только на PCjr) использует 160 точек по горизонтали,
среднее разрешение - вдвое больше (320 точек) и высокое разрешение
- еще вдвое больше (640 точек). Число килобайт памяти,
требуемое для каждого режтима приведено в [4.5.3].
В двух- и четырехцветном режимах PCjr имеет выбор любого из 16
доступных цветов. Цветной адаптор более ограничен. В двухцветном
режиме он всегда ограничен белым и черным, а в четырехцветном
режиме только цвет фона может выбираться из 16 цветов, в то время
как основной цвет должен браться только из двух предопределенных
палетт. Палетта 0 содержит коричневый, зеленый и красный цвета, а
палетта 1 - циан, магента и белый.
В отличие от текстовых данных в режимах 4-6 и 8-A графические
данные разбиты на видеостранице на части. В большинстве режимов
данные разбиваются на две части, при этом первая половина буфера
содержит данные для четных строк экрана, а вторая половина -
данные для нечетных строк (строки нумеруются, начиная с верха
экрана вниз). Однако в 16-цветных режимах PCjr буфер размером 32K
делится на четыре части, каждая из которых содержит данные для
каждой четвертой строки.
В 4-цветных режимах первый байт буфера содержит информацию о
самых левых точках строки 0, причем старший бит относится к самой
левой точке. Следующий байт содержит информацию о следующем сегменте
строки и т.д. Для всей строки требуется 80 байт. 81-й байт
содержит информацию о левом конце строки 2. В 16-цветных режимах
картина приблизительно такая же, но для каждой строки требуется
160 байт и каждая часть буфера содержит данные только для вдвое
меньшего числа строк. Для цветного графического адаптора четные
строки занимают память со смещениями от 0000 до 1F3FH, а нечетные
- от 2000H до 3F3FH. Промежуток между 1F3FH и 2000H игнорируется.
Для PCjr соответствующие ячейки могут существенно различаться, в
зависимости от режима и числа используемых страниц. PCjr специально
устроен таким образом, что вывод в 16K, начинающихся с
сегмента B800H перенаправляется в ту область памяти, где реально
расположен видеобуфер. Это свойство позволяет писать программы,
которые будут одинаково работать на цветном дисплее и PCjr.
Для режимов экрана EGA от DH до 10H память организована совсем
по-другому. Она разделяется на одну, две или четыре битовые плоскости,
каждая из которых организована так же, как для черно-белого
режима высокого разрешения, описанного выше: когда байт данных
посылается в определенный адрес видеобуфера, то каждый бит соответствует
точке на экране, причем они описывают горизонтальный
сегмент строки и бит 7 соответствует самой левой точке. Записываются
четыре таких битовых плоскости, соответствующих одним и
тем же адресам в видеобуфере. Это отводит каждой точке 4 бита,
что позволяет описывать 16 цветов. На рис. 4-4 показаны различные
схемы распределения памяти.
В графическом режиме могут выводиться и символы. Однако они
создаются не обчыным способом, вместо этого BIOS вырисовывает их
поточечно, не изменяя фонового цвета. По этой причине такие вещи
как негативное изображение и мигание символов недоступны в графическом
режиме. Не выводится и курсор. BIOS может читать и определять
установку точек в позиции курсора, чтобы узнать какой символ
там содержится. Символы располагаются в одной из позиций, соответствующих
обычным строкам и столбцам, что означает, что они
всегда начинаются на границе кратной восьми точкам.

4.4.1 Установка цветов для точечной графики.

PCjr и EGA работают с цветом совсем по-другому, чем цветной
адаптор. Они используют регистры палетты, которые позволяют в
любой момент изменить цвет, который соответствует данному коду
цвета. Вследствие этой разницы мы будем обсуждать эти две системы
отдельно и начнем с цветного адаптора.
Обе системы используют один и тот же основной набор кодов
цвета, который в точности совпадает с используемым в текстовых
режимах:

Номер кода Цепочка битов Цвет

0 0000 черный
1 0001 синий
2 0010 зеленый
3 0011 циан
4 0100 красный
5 0101 магента
6 0110 коричневый
7 0111 белый
8 1000 серый
9 1001 яркосиний
10 1010 яркозеленый
11 1011 яркий циан
12 1100 розовый
13 1101 яркая магента
14 1110 желтый
15 1111 яркобелый

Для цветного графического адаптора цвет разрешен только в
режиме умеренного разрешения. Для каждой точки отводятся два бита
каждого байта видеобуфера. Четыре возможных комбинации этих битов
представляют один фоновый и три основных цвета. Фоновый цвет
может быть любым из 16. Однако три основных цвета могут выбираться
из одной из двух палетт, каждая из которых содержит только три
предопределенных цвета. Это следующие цвета:

Номер кода Цепочка битов Палетта 0 Палетта 1

0 00 цвет фона цвет фона
1 01 зеленый циан
2 10 красный магента
3 11 желтый/коричневый белый

Если Вы в какой-то момент переключились между палеттами, то все
выведенные на экран цвета будут соответственно изменены. Единственный
способ использовать цвет, не входящий в эти палетты, состоит
в том, чтобы искуственно рассматривать один из цветов палетты
как фоновый цвет, что предполагает заполнение этим цветом
всего экрана, когда экран чистится (используйте для этого прямое
отображение в память). После этого истинный фоновый цвет может
показываться "сквозь него" в качестве основного цвета. Такая
техника приводит к созданию границы экрана, аналогичной той, что
изображается в текстовых режимах. В противном случае граница
экрана не может быть выделена цветом, так как весь экран закрашивается
фоновым цветом, хотя точки относящиеся к области границы
нельзя адресовать. Отметим, что BIOS хранит в своей области данных
однобайтную переменную, которая содержит текущий номер палетты.
Ее адрес равен 0040:0066H. Изменение этого числа не меняет
текущую установку палетты; наоборот, если Вы измените цвет палетты
другими средствами, помимо функций операционной системы, то
значение этой переменной будет модифицировано.
Символы могут перемешиваться с точечной графикой. Цвет, которым
будут выводиться символы, зависит от того, какую фукнцию Вы
будете использовать для их вывода. Простейшая функция по умолчанию
использует третий цвет текущей палетты. Однако имеется ряд
способов использовать любой из цветов палетты, а также выводить
символы различными цветами. Смотрите обсуждение в [4.1.3].
EGA и PCjr обеспечивают добавочную гибкость в использовании
атрибутов цвета, независимо от того, в каком режиме они работают.
При 16-цветной графике четыре бита, находящиеся в памяти для
каждой точки экрана дают цепочку битов, которая не переводится
прямо в соответствующие цвета приведенной таблицы. Вместо этого
каждый номер относится к одному из 16 регистров палетты. Каждый
из этих регистров содержит цепочку битов, соответствующую цвету,
который будет выводиться на самом деле. Если все 16 регистров
будут содержать 0100, то независимо от того, какой атрибут будет
приписан точке в памяти, она будет выведена красным цветом. Значение
в регистре 0 используется в качестве фонового цвета. На
рис. 4-1 в [4.1.3] показан этот механизм. В двух- и четырехцветном
режимах используются только первые два или четыре регистра
палетты.

Регистры палетты позволяют программе изменить все выводимое в
одном цвете на другой, не делая никаких изменений в видеобуфере.
Более того отдельные объекты могут появляться и исчезать как по
волшебству. Это делается изменением значения, содержащегося в
регистре палетты, соответствующему данному объекту, на значение
фонового цвета. Например, предположим, что фоновый цвет черный
(0000) и что объект выведен с атрибутом 1110, так что он выводится
в том цвете, который указан в регистре палетты 15 (по умолчанию
значение для этого регистра желтый). Если изменить значение
регистра 15 на 0000 (черный фоновый цвет), то объект исчезнет. Но
на самом деле объект хранится в памяти, так как он записан с
атриб

Список сторінок

Поділитися у соцмережах

☏ Замовлення реклами: +3805044-68-872

© Асоціація електронних бібліотек України

☝ Усі матеріали сайту (зокрема статті, зображення, рекламні оголошення тощо) призначені лише для попереднього ознайомлення. Усі права на публікації, представлені на сайті, належать їхнім законним власникам. Просимо Вас не зберігати копії інформації.