29 1D 00011101 M 77 4D 01001101
30 1E 00011110 N 78 4E 01001110
31 1F 00011111 O 79 4F 01001111
пробел 32 20 00100000 P 80 50 01010000
! 33 21 00100001 Q 81 51 01010001
" 34 22 00100010 R 82 52 01010010
# 35 23 00100011 S 83 53 01010011
$ 36 24 00100100 T 84 54 01010100
% 37 25 00100101 U 85 55 01010101
& 38 26 00100110 V 86 56 01010110
' 39 27 00100111 W 87 57 01010111
( 40 28 00101000 X 88 58 01011000
) 41 29 00101001 Y 89 59 01011001
* 42 2A 00101010 Z 90 5A 01011010
+ 43 2B 00101011 [ 91 5B 01011011
, 44 2C 00101100 \ 92 5C 01011100
- 45 2D 00101101 ] 93 5D 01011101
. 46 2E 00101110 ^ 94 5E 01011110
/ 47 2F 00101111 _ 95 5F 01011111


Символ 10-ный 16-ричный двоичный Символ 10-ный 16-ричный двоичный

` 96 60 01100000 Щ 153 99 10011001
a 97 61 01100001 Ъ 154 9A 10011010
b 98 62 01100010 Ы 155 9B 10011011
c 99 63 01100011 Ь 156 9C 10011100
d 100 64 01100100 Э 157 9D 10011101
e 101 65 01100101 Ю 158 9E 10011110
f 102 66 01100110 Я 159 9F 10011111
g 103 67 01100111 а 160 A0 10100000
h 104 68 01101000 б 161 A1 10100001
i 105 69 01101001 в 162 A2 10100010
j 106 6A 01101010 г 163 A3 10100011
k 107 6B 01101011 д 164 A4 10100100
l 108 6C 01101100 е 165 A5 10100101
m 109 6D 01101101 ж 166 A6 10100110
n 110 6E 01101110 з 167 A7 10100111
o 111 6F 01101111 и 168 A8 10101000
p 112 70 01110000 й 169 A9 10101001
q 113 71 01110001 к 170 AA 10101010
r 114 72 01110010 л 171 AB 10101011
s 115 73 01110011 м 172 AC 10101100
t 116 74 01110100 н 173 AD 10101101
u 117 75 01110101 о 174 AE 10101110
v 118 76 01110110 п 175 AF 10101111
w 119 77 01110111 176 B0 10110000
x 120 78 01111000 177 B1 10110001
y 121 79 01111001 178 B2 10110010
z 122 7A 01111010 Ё 179 B3 10110011
{ 123 7B 01111011 Є 180 B4 10110100
| 124 7C 01111100 181 B5 10110101
} 125 7D 01111101 І 182 B6 10110110
~ 126 7E 01111110 Ї 183 B7 10110111
127 7F 01111111 184 B8 10111000
А 128 80 10000000 185 B9 10111001
Б 129 81 10000001 186 BA 10111010
В 130 82 10000010 187 BB 10111011
Г 131 83 10000011 188 BC 10111100
Д 132 84 10000100 Ґ 189 BD 10111101
Е 133 85 10000101 Ў 190 BE 10111110
Ж 134 86 10000110 © 191 BF 10111111
З 135 87 10000111 А 192 C0 11000000
И 136 88 10001000 Б 193 C1 11000001
Й 137 89 10001001 В 194 C2 11000010
К 138 8A 10001010 Г 195 C3 11000011
Л 139 8B 10001011 Д 196 C4 11000100
М 140 8C 10001100 Е 197 C5 11000101
Н 141 8D 10001101 Ж 198 C6 11000110
О 142 8E 10001110 З 199 C7 11000111
П 143 8F 10001111 И 200 C8 11001000
Р 144 90 10010000 Й 201 C9 11001001
С 145 91 10010001 К 202 CA 11001010
Т 146 92 10010010 Л 203 CB 11001011
У 147 93 10010011 М 204 CC 11001100
Ф 148 94 10010100 Н 205 CD 11001101
Х 149 95 10010101 О 206 CE 11001110
Ц 150 96 10010110 П 207 CF 11001111
Ч 151 97 10010111 Р 208 D0 11010000
Ш 152 98 10011000 С 209 D1 11010001


Символ 10-ный 16-ричный двоичный Символ 10-ный 16-ричный двоичный

Т 210 D2 11010010 щ 233 E9 11101001
У 211 D3 11010011 ъ 234 EA 11101010
Ф 212 D4 11010100 ы 235 EB 11101011
Х 213 D5 11010101 ь 236 EC 11101100
Ц 214 D6 11010110 э 237 ED 11101101
Ч 215 D7 11010111 ю 238 EE 11101110
Ш 216 D8 11011000 я 239 EF 11101111
Щ 217 D9 11011001 240 F0 11110000
Ъ 218 DA 11011010 241 F1 11110001
Ы 219 DB 11011011 т 242 F2 11110010
Ь 220 DC 11011100 у 243 F3 11110011
Э 221 DD 11011101 ф 244 F4 11110100
Ю 222 DE 11011110 х 245 F5 11110101
Я 223 DF 11011111 ц 246 F6 11110110
р 224 E0 11100000 ч 247 F7 11110111
с 225 E1 11100001 ш 248 F8 11111000
т 226 E2 11100010 щ 249 F9 11111001
у 227 E3 11100011 ъ 250 FA 11111010
ф 228 E4 11100100 ы 251 FB 11111011
х 229 E5 11100101 ь 252 FC 11111100
ц 230 E6 11100110 э 253 FD 11111101
ч 231 E7 11100111 ю 254 FE 11111110
ш 232 E8 11101000 255 FF 11111111



    3.3.4 Сводка кодов псевдографики для построения рамок.



Ниже приведены для удобства номеров кодов ASCII, для символов
псевдографики, используемых при построении линий и рамок.

218 194 191 213 209 184
Ъ В © Х С

195 197 180 198 216 181
Г Е Є Ё Ж Ш

179
А Б Щ Ф П Ў
192 193 217 212 207 190

Д 196 Н 205

214 210 183 201 203 187
Ц Т Ї Й Л

199 215 182 204 206 185
З Ч І М О

186
У Р Ґ И К
211 208 189 200 202 188



    3.3.5 Сводная таблица расширенных кодов.



Значение 2-го байта Соответствующие клавиши

15 Shift + Tab ("back-tab")
16-25 Alt-Q - Alt-P (верхний ряд букв)
30-38 Alt-A - Alt-L (средний ряд букв)
44-50 Alt-Z - Alt-M (нижний ряд букв)
59-68 Функциональные клавиши F1 - F10
71 Home
72 Cursor-up (стрелка вверх)
73 PgUp
75 Cursor-left (стрелка влево)
77 Cursor-right (стрелка вправо)
79 End
80 Cursor-down (стрелка вниз)
81 PgDn
82 Ins
83 Del
84-93 F1-F10 + Shift
94-103 F1-F10 + Ctrl
104-113 F1-F10 + Alt
114 Ctrl + PrtSc
115 Ctrl + Cursor-left
116 Ctrl + Cursor-right
117 Ctrl + End
118 Ctrl + PgDn
119 Ctrl + Home
120-131 Alt + 1 - Alt + = (верхний ряд)
132 Ctrl + PgUp


    Глава 4. Вывод на терминал.




    Раздел 1. Управление выводом на терминал.



В этой главе рассмотрены монохромный адаптор, цветной графи-
ческий адаптор, видеосистема PCjr и улучшенный графический адап-
тер (EGA). Все 4 системы базируются на микросхеме Motorola 6845
CRTC (cathode ray tube controller); хотя EGA на самом деле ис-
пользует заказную микросхему, основанную на принципах 6845. Эта
микросхема выполняет массу технических задач, которые обычно не
интересуют программиста. Однако, она также устанавливает режим
экрана, управляет курсором и (для цветного графического адаптора)
управляет цветом. Микросхема легко программируется напрямую, хотя
процедуры операционной системы позволяют управлять большинством
ее действий. PCjr имеет вспомогательную микросхему для дисплея,
"video gate array" (массив ворот дисплея), которая обсуждается в
этом разделе вместе с 6845. EGA имеет архитектуру, отличающуюся
от всех остальных, поэтому он обсуждается отдельно. Среди не-EGA
систем имеется совместимость по использованию адресов портов, но
есть и некоторые важные отличия. Некоторые адреса портов EGA
такие же, как и у других систем.
Все видеосистемы используют буфера, в которые отображаются
данные для изображения на экране. Экран периодически обновляется
сканированием этих данных. Размер и расположение этих буферов
меняется с системой, режимом экрана, а также количеством заранее
отведенной памяти. Когда в буфере хранится несколько образов
экрана, то каждый отдельный образ называют дисплейной страницей.
Ниже приведена короткая сводка:

Монохромный адаптор

Монохромный адаптор имеет 4K байт памяти на плате, начиная с
адреса B0000H (т.е. B000:0000). Этой памяти хватает только для
хранения одной 80-символьной страницы текста.

Цветной графический адаптор.

Цветной графический адаптор имеет 16K байт памяти на плате,
начиная с адреса памяти B8000H. Этого достаточно для отображения
одного графического экрана, без страниц, или от четырех до восьми
экранов текста, в зависимости от числа символов в строке - 40 или
80.

PCjr.

PCjr имеет видеосистему, которая на самом деле является улуч-
шенной версией цветного графического адаптора. Она уникальна тем,
что использует для видеобуфера обычную оперативную память систе-
мы. Когда BIOS инициализирует систему, то верхние 16K установлен-
ной памяти отводятся под буфер терминала. Таким образом адрес
буфера зависит от того сколько памяти имеется в системе. Для
добавочных дисплейных страниц могут быть отведены блоки памяти в
других местах, а также начальный объем может быть уменьшен до 4K
и была поддержка только одного экрана текста.


EGA.

EGA может быть снабжен 64K, 128K или 256K памяти. Кроме ис-
пользования в качестве видеобуфера эта память может также хранить
битовые описания вплоть до 1024 символов (как объяснено в
[4.3.4]). Стартовый адрес буфера дисплея программируем, поэтому
буфер начинается с адреса A000H для улучшенных графических режи-
мов, и с B000H и B800H для совместимости со стандартными монох-
ромным и цветным графическим режимами. В большинстве случаев EGA
занимает два сегмента с адресами от A000H до BFFFH, даже когда
имеется 256K памяти. Это возможно, поскольку в некоторых режимах
два или более байтов памяти дисплея считываются из одних и тех же
адресов. Доступное число страниц зависит как от режима экрана,
так и от количества имеющейся памяти. Вследствие своей сложности
EGA имеет ПЗУ на 16K байт, которое заменяет и расширяет процедуры
работы с терминалом BIOS. Начало области ПЗУ - адрес C000:0000.

В текстовых режимах буфера начинаются с данных для верхней
строки экрана, начиная с левого угла. Дальнейшие данные перено-
сятся с правого конца одной строки на левый конец следующей, как
будто экран представляется одной большой строкой - и с точки
зрения видеобуфера так оно и есть. Однако в графических режимах
буфер может быть разделен на 2 или 4 части. У цветного графичес-
кого адаптора и PCjr различные части буфера содержат информацию,
относящуюся к каждой второй или каждой четвертой линии точек на
экране. У EGA каждая часть буфера содержит один бит из двух или
четырех, которые определяют цвет данной точки экрана.
При выводе текста различные видеосистемы работают одинаково.
Для экрана отводится 4000 байтов, так что на каждую из 2000 пози-
ций экрана приходится 2 байта (25 строк * 80 символов). Первый
байт содержит код ASCII. Аппаратура дисплея преобразует номер
кода ASCII в связанный с ним символ и посылает его на экран.
Второй байт (байт атрибутов) содержит информацию о том, как дол-
жен быть выведен данный символ. Для монохромного дисплея он ус-
танавливает будет ли данный символ подчеркнут, выделен яркостью
или негативом, или использует комбинацию этих атрибутов. В цвето-
вых системах байт атрибутов устанавливает основной и фоновый
цвета символа. В любом случае Ваша программа может писать данные
прямо в буфер терминала, что значительно повышает скорость вывода
на экран.
Все системы, кроме монохромной, предоставляют набор цветных
графических режимов, которые отличаются как разрешением, так и
числом одновременно выводимых цветов. И PCjr и EGA могут одновре-
менно выводить 16 цветов, причем EGA может выбирать эти 16 из
набора 64 цветов. При использовании 16 цветов каждая точка экрана
требует четырех бит памяти, поскольку 4 бита могут хранить числа
от 0 до 15. По аналогии, четырехцветная графика требует только 2
бита на точку. Двухцветная графика может упаковать представление
восьми точек в один байт видеобуфера. Количество памяти, требуе-
мое для данного режима экрана может быть легко вычислено, если
известно количество выводимых в этом режиме точек и количество
бит, необходимое для описания одной точки. Текст легко комбини-
руется с графикой (BIOS рисует символы на графическом экране) и
Вы можете создавать свои специальные символы.



    4.1.1 Программирование контроллера дисплея 6845.



Все видеосистемы строятся вокруг микросхемы контроллера видео-
терминала Motorola 6845 (EGA использует заказную микросхему,
основанную на 6845). Микросхема используется во многом аналогично
в монохромном адапторе, в цветном адапторе и в PCjr; но EGA не
настолько совместим и по этой причине мы рекомендуем Вам избегать
прямого программирования микросхемы, когда BIOS может выполнить
работу за Вас. Говоря общими словами, микросхема 6845 устанавли-
вает видеодисплей в один из нескольких алфавитноцифровых или
графических режимов. Она выполняет основную работу по интерпрета-
ции номеров кодов ASCII и поиску данных для вывода соответствую-
щих символов в микросхеме ПЗУ (а иногда в оперативной памяти).
Она декодирует значения атрибутов цвета и соответственно устанав-
ливает экран. Она также создает курсор и управляет им. В архитек-
туре EGA часть этих функций распределена между другими микросхе-
мами.
Микросхема 6845 имеет 18 управляющих регистров, пронумерован-
ных от 0 до 17. Первые 10 регистров фиксируют горизонтальные и
вертикальные параметры дисплея. Эти регистры, как правило, неин-
тересны для программистов, поскольку они автоматически устанавли-
ваются BIOS при изменении режима экрана. Не советуем эксперимен-
тировать с этими регистрами, поскольку имеется возможность испор-
тить терминал. Регистры имеют размер 8 бит, но некоторые связаны
в пары, чтобы хранить 16-битные величины. Пары #10-11 и #14-15
устанавливают форму [4.2.4] и местоположение [4.2.1] курсора.
Пара #12-13 управляет страницами дисплея [4.5.3]. Пара #16-17
сообщает позицию светового пера [7.3.2]. Большинство регистров
доступно только для записи; только регистр адреса курсора можно и
читать и писать, а регистр светового пера предназначен только для
чтения. EGA имеет 6 добавочных регистров, которые связаны с тех-
ническими деталями. Регистр 20 наиболее интересен; он определяет
какая линия сканирования в строке символа используется для под-
черкивания.
Доступ ко всем 18 регистрам осуществляется через один и тот же
порт, адрес которого для монохромного адаптора равен 3B5H. Этот
адрес равен 3D5H для цветного адаптора и PCjr (заметим, что все
адреса портов для монохромного адаптора такие же, как и для цвет-
ного, за исключением того, что средней цифрой является B, а не
D). EGA использует один из этих двух адресов, в зависимости от
того, присоединен ли к нему цветной или монохромный монитор. Для
записи в регистр монохромного адаптора надо сначала в регистр
адреса, расположенный в порте 3B4H (3D4H для цветного), послать
номер требуемого регистра. Тогда следующий байт, посланный в порт
с адресом 3B5H будет записан в этот регистр. Поскольку регистры,
интересные для программиста, используются попарно, то надо снача-
ла записать в адресный регистр, потом в первый регистр пары,
потом снова в адресный регистр и, наконец, во второй регистр
пары. Поскольку адреса портов смежные, то легче всего адресовать
их, используя инструкции INC и DEC, как в следующем примере:

;---запись в регистры 11 и 12 микросхемы 6845 (данные в BX)
;---выбираем регистр младшего байта
MOV DX,3B4H ;порт адресного регистра
MOV AL,11 ;номер регистра для младшего байта
OUT DX,AL ;посылаем номер регистра


;---посылаем байт
INC DX ;увеличиваем адрес порта
MOV AL,BL ;берем младший байт
OUT DX,AL ;посылаем его в регистр 11
;---выбираем регистр старшего байта
DEC DX ;восстанавливаем адрес порта
MOV AL,12 ;номер регистра для старшего байта
OUT DX,AL ;посылаем номер регистра
;---посылаем байт
INC DX ;увеличиваем адрес порта
MOV AL,BH ;берем старший байт
OUT DX,AL ;посылаем его в регистр 12

У монохромного и цветного адапторов имеются еще три порта,
которые важны для программистов. Они имеют адреса 3B8H, 3B9H и
3BAH для монохромного и 3D8H, 3D9H и 3DAH - для цветного адапто-
ра. Первый устанавливает режим экрана, второй - связан в основном
с установкой цветов экрана, а третий сообщает полезную информацию
о статусе дисплея.
PCjr использует не все эти адреса аналогичным образом. Вместо
этого, он держит часть информации, относящейся к этим портам, в
микросхеме массива ворот дисплея, основное назначение которой -
обеспечить дополнительное управление цветами экрана. Доступ к
массиву ворот дисплея осуществляется через порт с адресом 3DAH. У
цветного адаптора этот порт возвращает байт статуса; у PCjr этот
порт также возвращает байт статуса при использовании инструкции
IN, но он предоставляет доступ к массиву ворот, когда использует-
ся инструкция OUT. Массив ворот дисплея имеет следующие регистры:

Номер Назначение

0 режим управления 1
1 маска набора цветов (палетты)
2 цвет границы
3 режим управления 2
4 сброс
10H-1FH назначение цветов палетты

Доступ ко всем регистрам осуществляется через порт 3DAH. Сна-
чала надо послать в этот порт номер требуемого регистра, а затем
значение этого регистра. Порт автоматически переключается между
этими функциями работы с адресами и с данными. Чтобы он начал
ожидать ввод адреса, надо прочитать его. Отдельные регистры об-
суждаются в различных местах этой главы.
Особый интерес представляют 16 регистров палетты с номерами от
10H до 1FH. Каждый регистр имеет размер всего 4 бита, что как раз
достаточно, чтобы хранить 16 кодовых номеров для 16 возможных
цветов. Для каждой позиции символа или точки на экране видеобуфер
содержит данные, указывающие каким цветом должен выводиться этот
объект. Эту информацию называют данными атрибутов. В отличие от
цветного графического адаптора PCjr не использует данные атрибу-
тов для непосредственного определения цвета, который будет выво-


диться. Вместо этого данные атрибутов являются указателями на
один из 16 регистров палетты, а число, содержащееся в этом ре-
гистре, определяет каким цветом будет выводиться данный символ.
При таком методе, программе нужно изменить только установку ре-
гистра палетты, и все символы или точки с соответствующим атрибу-
том изменят свой цвет. Регистры палетты работают во всех режимах,
как текстовых, так и графических.
EGA распределяет эти функции между микросхемой контроллера
атрибутов (адрес порта 3C0H) и двумя микросхемами контроллера
графики (адреса портов 3CCH-3CFH). Контроллер атрибутов содержит
16 регистров палетты EGA, пронумерованных от 00 до 0FH. Эти ре-
гистры могут содержать 6-битные коды цветов, когда EGA связан с
улучшенным цветным дисплеем, поэтому могут быть использованы
любые 16 цветов из набора 64-х. В [4.4.1] показано как программи-
ровать регистры палетты для PCjr и EGA.



    4.1.2 Установка/проверка режима дисплея.



Монохромный адаптор поддерживает один режим терминала, цветной
графический - семь, PCjr - десять, а EGA - двенадцать. Система
PCjr более гибкая, чем монохромный или цветной адапторы, посколь-
ку она предоставляет широкий выбор цветов в режимах с двумя и
четырьмя цветами, а также серые тени в черно-белом режиме. EGA
еще более сложен, поддерживая палетту из 64 цветов, графику на
монохромном дисплее и вывод в 43 строки. Ниже приведен перечень
различных режимов:

Номер Режим Адапторы

0 40*25 (320*200) B&W алфавитноцифровой цветной, PCjr, EGA
1 40*25 (320*200) цветной алфавитноцифровой цветной, PCjr, EGA
2 80*25 (640*200) B&W алфавитноцифровой цветной, PCjr, EGA
3 80*25 (640*200) цветной алфавитноцифровой цветной, PCjr, EGA
4 320*200 4-цветная графика цветной, PCjr, EGA
5 320*200 B&W графика (4 тени на PCjr) цветной, PCjr, EGA
6 640*200 B&W графика цветной, PCjr, EGA
7 80*25 (720*350) B&W алфавитноцифровой монохромный, EGA
8 160*200 16-цветный графика PCjr
9 320*200 16-цветный графика PCjr
A 640*200 4-цветный графика PCjr
B зарезервирован для EGA
C зарезервирован для EGA
D 320*200 16-цветный графика EGA
E 640*200 16-цветный графика EGA
F 640*350 4-цветная графика на монохромном EGA
10 640*350 4- или 16-цветная графика EGA

EGA разрешает иметь 8 страниц в режиме 7 - стандартном монох-
ромном текстовом режиме. Режимы 0-6 полностью совместимы, исполь-
зуя память одинаковым образом. При условии, что переключатели на
EGA установлены для работы с улучшенным цветным дисплеем фирмы
IBM, традиционные текстовые режимы выводятся с высоким разреше-
нием, используя рисунок символов, состоящий из 8*14 точек, а не
обычные 8*8.
BIOS хранит однобайтную переменную по адресу 0040:0049, в
которой содержится номер текущего режима. Байт по адресу
0040:004A дает число символов в строке в текстовом режиме.

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

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

0 текстовый режим
1 графический режим среднего разрешения
2 графический режим высокого разрешения


SCREEN 1 устанавливает графический режим среднего разрешения.
Второй параметр включает и выключает цвет. Этот параметр не имеет
смысла для режима высокого разрешения на цветном адапторе, пос-
кольку разрешен только черно-белый режим. Для текстовых режимов 0
в качестве второго параметра выключает цвет, а 1 - включает.
Оператор SCREEN 0,0 устанавливает текстовый черно-белый режим.
Для графического режима ситуация обратная: 0 - включает цвет, а 1
- выключает. Поэтому оператор SCREEN 1,1 устанавливает черно-бе-
лый графический режим среднего разрешения.
Все режимы первоначально показываются черно-белыми. Оператор
COLOR (см. [4.1.3]) должен быть использован, чтобы закрасить
экран фоновым цветом. В графическом режиме одного оператора COLOR
достаточно, чтобы изменить весь фон на указанный цвет. Но для
текстового режима Вы должны после оператора COLOR использовать
оператор CLS.
В текстовых режимах в строке может быть 40 или 80 символов.
Для установки требуемого числа символов в строке надо использо-
вать оператор WIDTH. WIDTH 40 дает 40 символов в строке, а WIDTH
80 - 80. Другие значения недопустимы. Если оператор WIDTH исполь-
зуется в графическом режиме (SCREEN 1 или SCREEN 2), то WIDTH 40
переводит экран в режим среднего разрешения, а WIDTH 80 - в режим
высокого разрешения. Вот несколько примеров:

100 SCREEN 0,1: WIDTH 40 'цветной текстовый режим с 40 символами

100 SCREEN 0,1: WIDTH 40 'цветной дисплей как монохромный

100 SCREEN 0,1: WIDTH 40 'цветная графика среднего разрешения
.
.
500 WIDTH 80 'переводим в режим высокого разрешения

Монохромный монитор может быть переведен в режим 40 символов в
строке операторами SCREEN 0: WIDTH 40. Для восстановления режима
с 80 символами введите WIDTH 80. В режиме с 40 символами они
сохраняют свою обычную ширину, поэтому будет использоваться толь-
ко левая часть экрана. Строка переносится после 40-го столбца и
невозможно поместить курсор в правую половину экрана с помощью
оператора LOCATE. CLS чистит только левую часть экрана. Трудно
представить программу, которая использовала бы это свойство, но
оно действительно позволяет программе принимать ввод (скажем,
через оператор INPUT), в то время как пользователь продолжает
печатать в левой половине экрана, оставляя правую половину экрана
для возможной корректировки вводимой информации. При этом любой
вывод в правую половину экрана возможен только прямого обращения
к памяти дисплея, как объяснено в [4.3.1].
PCjr использует в Бейсике 7 номеров режимов:

Номер Режим

0 текстовый режим, ширина может быть 40 или 80
1 4-цветная графика среднего разрешения
2 2-цветная графика высокого разрешения
3 16-цветная графика низкого разрешения
4 4-цветный режим среднего разрешения
5 16-цветный режим среднего разрешения
6 4-цветная режим высокого разрешения


Последние четыре режима требуют дискетты с Бейсиком. Размер
страницы определяет количество памяти, требуемое для одного экра-
на (дисплейные страницы обсуждаются в [4.5.3]). Программа должна
отвести соответствующее количество памяти перед установкой режи-
ма. Это делается оператором CLEAR. За оператором CLEAR должны
следовать три числа, определяющие отводимую память, третье из
этих чисел устанавливает размер видеобуфера (первые два параметра
обсуждаются в [1.3.1]). Например, размер для видеобуфера 16K,
устанавливаемый по умолчанию, выделяется командой CLEAR ,,16384.
К сожалению, размер видеобуфера указывается в байтах, поэтому он
не равен круглому числу типа 4000 или 32000, а равен 4096 или
32768. Помните, что 2K = 2^11, 4K = 2^12, 16K = 2^14, а 32K =
2^15. Для выделения трех страниц по 16K, введите CLEAR ,,3*2^14.
Этот оператор должен помещаться в самом начале программы, пос-
кольку при использовании оператора CLEAR все переменные очищают-
ся. Отметим также, что при создании нескольких страниц, страница
0 начинается с младших адресов памяти.
К моменту выхода этой книги Бейсик не поддерживает дополни-
тельные режимы терминала EGA. В [4.3.3] приведена подпрограмма на
машинном языке, которая позволит Вам установить эти режимы.

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

Функция 0 прерывания 10H устанавливает режим дисплея. В AL
должен находиться номер режима от 0 до A. Чтобы установить цвет-
ной графический режим среднего разрешения надо:

MOV AH,0 ;номер функции
MOV AL,4 ;номер требуемого режима
INT 10H ;устанавливаем режим

Для определения текущего графического режима надо использовать
функцию F прерывания 10H. Прерывание возвращает номер режима в
AL. Оно также дает номер текущей страницы дисплея в BH и число
символов в строке в AH.

MOV AH,0FH ;номер функции
INT 10H ;получение информации о режиме дисплея
MOV MODE_NUMBER,AL ;номер режима в AL
MOV NUMBER_COLS,AH ;число символов в строке в AH
MOV CURRENT_PAGE,BH ;номер текущей страницы в BH

MS DOS обеспечивает также Esc-последовательности для установки
и сброса режимов дисплея. Для этого необходимо, чтобы Вы предва-
рительно загрузили драйвер ANSI.SYS, как объяснено в приложении
Д. Управляющая строка имеет вид ESC [=#h, где # - номер режима,
указанный как код ASCII, а ESC обозначает один символ с кодом
ASCII 27. Например: