мое для данного режима экрана может быть легко вычислено, если
известно количество выводимых в этом режиме точек и количество
бит, необходимое для описания одной точки. Текст легко комбини-
руется с графикой (BIOS рисует символы на графическом экране) и
Вы можете создавать свои специальные символы.
4.1.1 Программирование контроллера дисплея 6845.
Все видеосистемы строятся вокруг микросхемы контроллера видео-
терминала Motorola 6845 (EGA использует заказную микросхему,
основанную на 6845). Микросхема используется во многом аналогично
в монохромном адапторе, в цветном адапторе и в PCjr; но EGA не
настолько совместим и по этой причине мы рекомендуем Вам избегать
прямого программирования микросхемы, когда BIOS может выполнить
работу за Вас. Говоря общими словами, микросхема 6845 устанавли-
вает видеодисплей в один из нескольких алфавитноцифровых или
графических режимов. Она выполняет основную работу по интерпрета-
ции номеров кодов ASCII и поиску данных для вывода соответствую-
щих символов в микросхеме ПЗУ (а иногда в оперативной памяти).
Она декодирует значения атрибутов цвета и соответственно устанав-
ливает экран. Она также создает курсор и управляет им. В архитек-
туре EGA часть этих функций распределена между другими микросхе-
мами.
Микросхема 6845 имеет 18 управляющих регистров, пронумерован-
ных от 0 до 17. Первые 10 регистров фиксируют горизонтальные и
вертикальные параметры дисплея. Эти регистры, как правило, неин-
тересны для программистов, поскольку они автоматически устанавли-
ваются BIOS при изменении режима экрана. Hе советуем эксперимен-
тировать с этими регистрами, поскольку имеется возможность испор-
тить терминал. Регистры имеют размер 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. Массив ворот дисплея имеет следующие регистры:
Hомер Hазначение
0 режим управления 1
1 маска набора цветов (палетты)
2 цвет границы
3 режим управления 2
4 сброс
10H-1FH назначение цветов палетты
Доступ ко всем регистрам осуществляется через порт 3DAH. Сна-
чала надо послать в этот порт номер требуемого регистра, а затем
значение этого регистра. Порт автоматически переключается между
этими функциями работы с адресами и с данными. Чтобы он начал
ожидать ввод адреса, надо прочитать его. Отдельные регистры об-
суждаются в различных местах этой главы.
Особый интерес представляют 16 регистров палетты с номерами от
10H до 1FH. Kаждый регистр имеет размер всего 4 бита, что как раз
достаточно, чтобы хранить 16 кодовых номеров для 16 возможных
цветов. Для каждой позиции символа или точки на экране видеобуфер
содержит данные, указывающие каким цветом должен выводиться этот
объект. Эту информацию называют данными атрибутов. В отличие от
цветного графического адаптора PCjr не использует данные атрибу-
тов для непосредственного определения цвета, который будет выво-
диться. Вместо этого данные атрибутов являются указателями на
один из 16 регистров палетты, а число, содержащееся в этом ре-
гистре, определяет каким цветом будет выводиться данный символ.
При таком методе, программе нужно изменить только установку ре-
гистра палетты, и все символы или точки с соответствующим атрибу-
том изменят свой цвет. Регистры палетты работают во всех режимах,
как текстовых, так и графических.
EGA распределяет эти функции между микросхемой контроллера
атрибутов (адрес порта 3C0H) и двумя микросхемами контроллера
графики (адреса портов 3CCH-3CFH). Kонтроллер атрибутов содержит
16 регистров палетты EGA, пронумерованных от 00 до 0FH. Эти ре-
гистры могут содержать 6-битные коды цветов, когда EGA связан с
улучшенным цветным дисплеем, поэтому могут быть использованы
любые 16 цветов из набора 64-х. В [4.4.1] показано как программи-
ровать регистры палетты для PCjr и EGA.
4.1.2 Установка/проверка режима дисплея.
Монохромный адаптор поддерживает один режим терминала, цветной
графический - семь, PCjr - десять, а EGA - двенадцать. Система
PCjr более гибкая, чем монохромный или цветной адапторы, посколь-
ку она предоставляет широкий выбор цветов в режимах с двумя и
четырьмя цветами, а также серые тени в черно-белом режиме. EGA
еще более сложен, поддерживая палетту из 64 цветов, графику на
монохромном дисплее и вывод в 43 строки. Hиже приведен перечень
различных режимов:
Hомер Режим Адапторы
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
достаточно, чтобы изменить весь фон на указанный цвет. Hо для
текстового режима Вы должны после оператора 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 'переводим в режим высокого разрешения