
|
ализирует систему, то верхние 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 будет записан в этот регистр. Поскольку регистры, интересные для программиста, используются попарно, то надо снача- ла записать в адресный регистр, потом в первый ре |