ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 1 17/3/89 Сабанин 6-19-49 РЕФЕРАТ Техническое описание содержит 52 страницы машинописного текста, 2 рисунка, 4 таблицы и 2 приложения. Ключевые слова: микропрограмма, базовая система ввода/ вывода, графический контроллер, видео-функции, EGA, BIOS. На основании нескольких литературных и программных источников обобщены и представлены описание графического адаптера EGA, описание видео функций EGA_BIOS, основные подпрограммы, реализующие видео функции. Приведены примеры подпрограмм, дающие представление о назначении регистров адаптера и направленные на эффективное использование возможностей графического контроллера. СОДЕРЖАНИЕ ВВЕДЕНИЕ . . . . . . . . . . . . . . . . . . . . . . . . 5 1. ОСНОВНЫЕ ХАРАКТЕРИСТИКИ АДАПТЕРА EGA 1.1. ОСНОВНЫЕ КОМПОНЕНТЫ АДАПТЕРА . . . . . . . . . . 6 1.2. РЕЖИМЫ РАБОТЫ АДАПТЕРА . . . . . . . . . . . . . 7 1.2.1. Алфавитно-цифровой режим . . . . . . . . 7 1.2.2. Графический режим . . . . . . . . . . . . 8 1.3. РЕГИСТРЫ АДАПТЕРА . . . . . . . . . . . . . . . 9 1.3.1. Внешние регистры адаптера . . . . . . . . 9 1.3.2. Регистры задатчика последовательностей . 10 1.3.3. Регистры видео-контроллера . . . . . . . 12 1.3.4. Регистры графического контроллера . . . . 13 1.3.5. Регистры контроллера атрибутов . . . . . 15 1.4. ИСХОДНЫЕ ЗНАЧЕНИЯ РЕГИСТРОВ АДАПТЕРА . . . . . . 17 1.5. КОНТАКТНАЯ КОЛОДКА АДАПТЕРА . . . . . . . . . . 18 2. ВИДЕО-ФУНКЦИИ BIOS . . . . . . . . . . . . . . . . . 19 3. ИСПОЛЬЗУЕМЫЕ АДРЕСА ОЗУ В ОБЛАСТИ ДАННЫХ BIOS . . . . 23 4. ОРГАНИЗАЦИЯ ВИДЕО-ОЗУ . . . . . . . . . . . . . . . . 25 4.1. Режим записи 0 . . . . . . . . . . . . . . . . . 25 4.2. Режим записи 2 . . . . . . . . . . . . . . . . . 26 4.3. Режимы чтения атрибутов точки . . . . . . . . . 27 ЗАКЛЮЧЕНИЕ . . . . . . . . . . . . . . . . . . . . . . . 28 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ . . . . . . . . . . . . 29 ПРИЛОЖЕНИЕ 1. Примеры подпрограмм . . . . . . . . . . . 30 ПРИЛОЖЕНИЕ 2. Реализация основныx видео-функций . . . . 44 ВВЕДЕНИЕ Отсутствие информации в отечественной литературе о видео контроллере EGA персонального компьютера IBM PC/AT, а также естественное желание обнаружить непредставленные и неиспользованные возможности в стандартных графических библиотеках для ФОРТРАНА, ТУРБО-ПАСКАЛЯ, ТУРБО-СИ и других, побудили нас внимательно рассмотреть и обобщить имеющиеся литературные и программные источники, включая просмотр отладчиком программного обеспечения ПЗУ адаптера, а также на поиск дополнительного материала. Результаты этих усилий представлены в настоящем кратком техническом описании. Наиболее существенным источником является, конечно, [1], однако по сравнению с имеющимся GENOA_EGA_BIOS 1986 года обнаружены серьезные отличия, проследить полностью которые потребовало бы значительно больше усилий. Кроме того, в [1] отражены не все режимы, описанные в [2] и заслуживающие применения. Значимость сведений о графическом адаптере EGA и видео функциях программного обеспечения BIOS, судя по источникам [3], где читаем "... программирование графики в OS/2 во многом то же самое, как и в DOS ...", и [4], где видим общность EGA и следующей разработки - VGA, утратится, по-видимому, еще не скоро. Неотъемлимой и наиболее информационной частью описания являются тексты документированных подпрограмм работы с регистрами графического контроллера и использования видео функций BIOS, приведенных в приложениях 1, 2. 1. ОСНОВНЫЕ ХАРАКТЕРИСТИКИ АДАПТЕРА EGA Графический адаптер EGA (Enhanced Graphics Adapter) обеспечивает вывод алфавитно-цифровой и графической информации на монохромные и цветные мониторы в различных режимах работы. К улучшенным свойствам контроллера по сравнению с предыдущим вариантом адаптера CGA отнесены возможная загрузка до 4-х знакогенераторов и графика, реализующая на двух страницах 640 на 350 точек, 16 цветов из 64 возможных. Здесь и далее речь преимущественно идет o режимах, реализованных в имеющейся конфигурации IBM PC/AT. 1.1. ОСНОВНЫЕ КОМПОНЕНТЫ АДАПТЕРА [1] Видео контроллер генерирует H и V синхросигналы и синхроимпульсы курсора, обеспечивает регенерацию динамической памяти адаптера и адресацию к видео буферу. Задатчик последовательностей генерирует основные временные последовательности обращения к динамической видео памяти. Позволяет процессору доступ к памяти во время активных интервалов вывода на дисплей. Регистры масок обеспечивают защиту памяти от изменений. Графический контроллер направляет данные из памяти контроллеру атрибутов и процессору. В графическом режиме данные памяти посылаются контроллеру атрибутов в последовательной форме, а в алфавитно-цифровом - параллельном виде. Графический контроллер форматирует данные для совместимости различных режимов и обеспечивает цветовое сравнение для выполнения операций закраски. Схемные особенности контроллера позволяют процессору писать 32 бита в один цикл обращения к памяти, (8 бит на плоскость) для быстрого отображения. Дополнительная логика позволяет процессору писать данные в формате, отличном от байта. Контроллер атрибутов Контроллер управляет режимами мерцания и подчеркивания, обеспечивает цветовую палитру 16-ти цветов, каждый из которых может быть специфицирован отдельно. 6 цветовых выходов подаются на дисплей. Контроллер берет данные из памяти дисплея и преобразует их для представления на экране дисплея. Буфер дисплея Адрес дисплейного буфера может быть изменен для обеспечения совместимости с другими видео контроллерами и применяемым программным обеспечением. ПЗУ На плате адаптера находится ПЗУ с базовой системой ввода-вывода для связи с системным BIOS. ПЗУ содержит знакогенераторы и упрaвляющие коды. На адресном простанстве процессора ПЗУ начинается с С0000 (16К). Логика Логика платы выполнена на LSI микросхемах. Два источника синхросигналов 14 МГц и 16 МГц поддерживают битовую синхронизацию и мультиплексируются под управлением процессора. Режимы работы Следующая таблица 1.1 описывает режимы работы контроллера, поддерживаемые BIOS, с различными мониторами. Таблица 1.1 Режимы работы адаптера EGA +---------+-----+------+------+----------+-------+----------+ | Режим # |Цвета|Формат|Начало|Знакоместо|Страниц|Разрешение| +---------+-----+------+------+----------+-------+----------+ | IBM Color Display | | 0 a/ц | 16 | 40x25| B8000| 8x8 | 8 | 320x200 | | 1 a/ц | 16 | 40x25| B8000| 8x8 | 8 | 320x200 | | 2 a/ц | 16 | 80x25| B8000| 8x8 | 8 | 640x200 | | 3 a/ц | 16 | 80x25| B8000| 8x8 | 8 | 640x200 | | 4 граф | 4 | 40x25| B8000| 8x8 | 1 | 320x200 | | 5 граф | 4 | 40x25| B8000| 8x8 | 1 | 320x200 | | 6 граф | 2 | 80x25| B8000| 8x8 | 1 | 640x200 | | D граф | 16 | 40x25| A0000| 8x8 | 2/4/8 | 320x200 | | E graf | 16 | 80x25| A0000| 8x8 | 1/2/4 | 640x200 | +---------+-----+------+------+----------+-------+----------+ | IBM Monochrome Display | | 7 а/ц | 4 | 80x25| B0000| 9x14 | 8 | 720x350 | | F граф | 4 | 80x25| A0000| 8x14 | 1/2 | 640x350 | +---------+-----+------+------+----------+-------+----------+ | IBM Enchanced Color Display | | =========================== | | 0 a/ц |16/64| 40x25| B8000| 8x14 | 8 | 320x350 | | 1 a/ц |16/64| 40x25| B8000| 8x14 | 8 | 320x350 | | 2 a/ц |16/64| 80x25| B8000| 8x14 | 8 | 640x350 | | 3 a/ц |16/64| 80x25| B8000| 8x14 | 8 | 640x350 | | 10 граф |16/64| 80x25| A0000| 8x14 | 2 | 640x350 | +---------+-----+------+------+----------+-------+----------+ 1.2. РЕЖИМЫ РАБОТЫ АДАПТЕРА 1.2.1. Алфавитно-цифровой режим Формат данных в алфавитно-цифровом режиме для EGA тот же, что и для CGA. В качестве дополнительной функции третий бит байта атрибута может быть переопределен в регистре выбора знакогенератора для переключения между установленными фонтами. 512 символов становятся доступными одновременно. Функция действительна лишь для расширенной памяти 128К и более. Когда выбран а/ц режим, BIOS посылает образ символа из ПЗУ в битовую плоскость 2. Процессор запоминает символьные данные в битовой плоскости 0, а атрибуты в плоскости 1. Видеоконтроллер генерирует последовательные адреса и принимает байты кода символа и кода атрибута за одно обращение. Код символа определяет адрес в битовой плоскости 2, которая содержит генераторы символов. Соответствующий графический образ посылается в контроллер атрибутов, где согласно атрибутам выбирается цвет. 1.2.2. Графический режим 320х200 два и четыре цвета в режимах 4 и 5. Адресация и формат данных аналогичны 320х200 режима CGA. Буфер дисплея начинается с адреса B8000. Образ битовых данных запоминается в битовых плоскостях 0 и 1. 640х200 два цвета в режиме 6. Адресация и формат данных аналогичен черно-белому режиму 640х200 адаптера CGA. Буфер дисплея начинается с адреса B8000. Образ битовых данных запоминается в битовой плоскости 0. 640х350 монохромный режим F. Режим поддерживается со следующими атрибутами: черный, видимый, мерцающий видимый и яркий видимый. Требует 56К байт. Связывая карты 0 и 1, а также 2 и 3, можно сформировать две 32К битные плоскости. Такое связывание выполняется, когда необходимо (графическая память меньше 128 К). Вторая битовая плоскость содержит биты интенсивностей. Обе плоскости расположены по адресу A0000. Два бита, один на каждую плоскость, определяют один графический элемент (pel - picture element) на экране. Определения элементов даны в следующей таблице 1.2, где C0,C2 обозначают биты плоскостей видео памяти (основной и интенсивностей соответственно). Таблица 1.2 Атрибуты монохромного режима +----+----+-------------------+-------------------+ | C2 | C0 | цвет точки | возможный атрибут | +----+----+-------------------+-------------------+ | 0 | 0 | черный | 0 | | 0 | 1 | видимый | 3 | | 1 | 0 | мерцающий видимый | C | | 1 | 1 | яркий видимый | F | +----+----+-------------------+-------------------+ В памяти последовательная байтовая организация. Первые 8 графических элементов на экране определяются содержанием памяти A000:0H, вторые - A000:1H, и т.д. Первый графический элемент - крайний левый на экране, внутри байта определяется битом 7, последний - битом 0. Монохромная графика работает в четно/нечетном режиме, означающем, что четные адреса поступают на четную битовую плоскость, а нечетные - на нечетную битовую плоскость. Т.к. обе битовые плоскости расположены по адресу A0000, пользователь должен установить требуемую через масочный регистр задатчика последовательностей. 16/64 цветной графический режим 10h. Этот режим поддерживает 16-ти цветную графику на мониторах среднего или высокого разрешения. Режим используют все 4 битовые плоскости. Каждая битовая плоскость представляет цвет: C0 = синий ....... (B), C1 = зеленый ..... (G), C2 = красный ..... (R), C3 = интенсивность (I). Четыре бита (1 из каждой плоскости) определяют один графический элемент на экране. Комбинации цветов приведены в следующей таблице 1.3 Таблица 1.3 Возможный цвета режима 10h +---+---+---+---+--------------------+ | I | R | G | B | цвет | +---+---+---+---+--------------------+ | 0 | 0 | 0 | 0 | черный | | 0 | 0 | 0 | 1 | синий | | 0 | 0 | 1 | 0 | зеленый | | 0 | 0 | 1 | 1 | зеленовато-голубой | | 0 | 1 | 0 | 0 | красный | | 0 | 1 | 0 | 1 | пурпурный | | 0 | 1 | 1 | 0 | коричневый | | 0 | 1 | 1 | 1 | светло-серый | | 1 | 0 | 0 | 0 | темно-серый | | 1 | 0 | 0 | 1 | светло-синий | | 1 | 0 | 1 | 0 | светло-зеленый | | 1 | 0 | 1 | 1 | светло-голубой | | 1 | 1 | 0 | 0 | светло-красный | | 1 | 1 | 0 | 1 | светло-пурпурный | | 1 | 1 | 1 | 0 | желтый | | 1 | 1 | 1 | 1 | белый | +---+---+---+---+--------------------+ Дисплейный буфер начинается с адреса A0000. Масочный регистр используется для выбора какой-либо или всех битовых плоскостей для записи. 1.3. РЕГИСТРЫ АДАПТЕРА 1.3.1. Внешние регистры * В скобках () повторяется адрес регистра. Регистр общего назначения (3C2)* бит 7 6 5 4 3 2 1 0 | | | | | | | +-- выбор адреса, 1=3Dx;0=3Bx. | | | | | | +---- 1=разрешает доступ процессору к ОЗУ. | | | | +-+------ 00=14МГц;01=16МГц; | | | | 10=внешний тактовый генератор. | | | +---------- 1=запрещает внутреннее управление видео, | | | управление с контактной колодки. | | +------------ 1=выбирает старшую страницу памяти в | | четно/нечетных режимах | | (режимы 0,1,2,3,7). | +-------------- 1=выбирает отрицательный импульс | горизонтального обратного хода. +---------------- 1=выбирает отрицательный импульс вертикального обратного хода. Регистр признаков (3DA) бит 1 0 | +------------- вывод 19 контактной колодки адаптера +--------------- вывод 17 контактной колодки адаптера Входной статусный регистр 0. Только читается. (3C2) бит 7 4 | +------------ 1=позволяет процессору читать состояние | 4-х битного переключателя конфигурации | адаптера (в ОЗУ 40:88h). +--------------- бит прерывания: 1=происходит вывод на экран; 0=обратный ход луча по вертикали. Входной статусный регистр 1. Только читается. (3DA) бит 5 4 3 2 1 0 | | | | | +----- 0=свидетельствует об обратном | | | | | горизонтальном или вертикальном | | | | | ходе луча. | | | | +------- строб светового пера. | | | +--------- 0=кнопка пера нажата. | | +----------- 1=обратный вертикальный ход. Бит может | | быть использован для прерывания REQ2 | | (для XT) через биты 5 и 6 регистра 11h | | видео контроллера. +-+------------- разряды диагностики, подсоединяются к двум из 6-ти цветовых выходов контроллера атрибутов. Возможны комбинации: +---------+--------+---------+---------+ | Регистр цветовой | Входной статусный | | плоскости | регистр 1 | +---------+--------+---------+---------+ | бит 5 | бит 4 | бит 5 | бит 4 | +---------+--------+---------+---------+ | 0 | 0 | красный | синий | | 0 | 1 |яр.синий | зеленый | | 1 | 0 |яр.красн.|яр.зелен.| +---------+--------+---------+---------+ 1.3.2. Регистры задатчика последовательностей +------------------------+------+--------+ | Имя регистра | Порт | Индекс | +------------------------+------+--------+ | Адрес | 3C4 | - | | Сброс | 3C5 | 0 | | Режим синхронизации | 3C5 | 1 | | Маска | 3C5 | 2 | | Выбор знакогенератора | 3C5 | 3 | | Режим памяти | 3C5 | 4 | +------------------------+------+--------+ Регистр сброса. (3C5/0) бит 1 0 | +--------- асинхронный сброс,0=перевод выходов в третье | состояние. +----------- синхронный сброс, используемый при смене ре- жимов синхронизации. Регистр режима синхронизации. (3C5/1) бит 3 2 1 0 | | | +----- 0=ширина символа 9 точек, действителен в | | | режиме 7, в остальных ширина 8 точек. | | +------- 0=обращение контроллера к ОЗУ занимает 4 | | цикла из 5-ти возможных, необходимы в | | режиме высокого разрешения. | | 1=обращение контроллера к ОЗУ занимает 2 | | цикла; в режиме среднего разрешения, когда | | объем передаваемых данных меньше, позволяет | | уменьшить время доступа процессора к видео- | | ОЗУ. | +--------- 1=параллельно-последовательный преобразовател | перезагружается лишь на каждый отличающийся | символ. | 0=перезагружается на каждый символ. +----------- 1=частота синхросигнала делится на 2. Регистр маски. (R/W) (3C5/2) бит 3 2 1 0 | | | +----- 1=разрешен доступ к плоскости 0. | | +------- 1=разрешен доступ к плоскости 1. | +--------- 1=разрешен доступ к плоскости 2. +----------- 1=разрешен доступ к плоскости 3. 0Fh в регистре диктует процессору производить за ОДИН цикл памяти 32-х разрядные операции. В четно/нечетном режиме карты 0-3 будут иметь одинаковые маски. Регистр выбора знакогенератора (3C5/3) бит 3 2 1 0 | | +-+----- выбор карты B; Когда бит_3 байта атрибутов=0, | | действительна следующая таблица | | +----------+---------------+--------------------+ | | | биты 1,0 | выбрана карта | расположение | | | +----------+---------------+--------------------+ | | | 0 0 | 0 | 1-e 8K пл.2,банк 0 | | | | 0 1 | 1 | 2-e 8K пл.2,банк 1 | | | | 1 0 | 2 | 3-e 8K пл.2,банк 2 | | | | 1 1 | 3 | 4-e 8K пл.2,банк 3 | | | +----------+---------------+--------------------+ +-+--------- выбор карты A; Когда бит_3 байта атрибутов=1, действительна следующая таблица +----------+---------------+--------------------+ | биты 3,2 | выбрана карта | расположение | +----------+---------------+--------------------+ | 0 0 | 0 | 1-e 8K пл.2,банк 0 | | 0 1 | 1 | 2-e 8K пл.2,банк 1 | | 1 0 | 2 | 3-e 8K пл.2,банк 2 | | 1 1 | 3 | 4-e 8K пл.2,банк 3 | +----------+---------------+--------------------+ В текстовом режиме 3-й бит атрибутов обычно включает или выключает повышенную яркость символа, однако может быть использован в качестве переключателя между знакогенера- торами, когда выбраны различные значения для карт A и B. Бит 1 регистра режима памяти должен быть равен 1, иначе всегда выбирается банк 0. Для 128К возможны 2 знакогене- ратора, для 256К - 4. Пример переключения знакогенератора дан в приложении 1 программа two_Fonts . Регистр режима памяти (3C5/4) бит 2 1 0 | | +-------- 1=выбран текстовый режим, возможен выбор | | знакогенератора. | +---------- 1=используется расширенная память. +------------ 0=четные адреса процессора адресуют к картам 0 и 2, нечетные к 1 и 3, как в CGA. 1=последовательный доступ к данным в битовой плоскости. Доступ к плоскостям осуществляется в соответствии со значением в регистре масок. 1.3.3. Регистры видео контроллера (3C4/3C5) +-----------------------------------------+------+------+ | Имя регистра |единиц|Индекс| +-----------------------------------------+------+------+ | индексный | | - | | по горизонтали всего | сим | 00 | | размер отoбражаемого по горизонтали | сим | 01 | | начало невидимой области по горизонтали | сим | 02 | | конец невидимой области по горизонтали | сим | 03 | | начало строчного импульса | сим | 04 | | конец строчного ипмульса | сим | 05 | | по вертикали всего (младшие 8 разрядов) |строка| 06 | | регистр переполнений | | 07 | | начало видимой области по вертикали |строка| 08 | | размер символа по вертикали |строка| 09 | | начало курсора |строка| 0A | | конец курсора |строка| 0B | | начальный адрес видео (старший байт) | | 0C | | начальный адрес видео (младший байт) | | 0D | | положение курсора (старший байт) | | 0E | | положение курсора (младший байт) | | 0F | | начало кадрового имульса (младшие) |строка| 10 | | адрес светового пера (старший байт) | | 10 | | конец кадрового импульса |строка| 11 | | адрес светового пера (младший байт) | | 11 | | конец видимой области по вертикали |строка| 12 | | логическая длина линии экрана | | 13 | | положение подчеркивания |строка| 14 | | начало невидимой области V (младшие) |строка| 15 | | конец невидимой области V(младшие 5 бит)|строка| 16 | | режим управления | | 17 | | сравнение строк | | 18 | +-----------------------------------------+------+------+ Регистры видеоконтроллера во многом аналогичны регистрам микросхемы 6845 адаптера CGA [5]. О регистре 11h следует сказать особо: разряды 5 4 | +-- 0=сброс прерывания, +---- 0=разрешение прерывания. 1.3.4. Регистры графического контроллера +-----------------------+------+--------+ | Имя регистра | Порт | Индекс | +-----------------------+------+--------+ | Позиционный 1 | 3CC | - | = 0 | Позиционный 2 | 3CA | - | = 1 | Индексный | 3CE | - | | Установка/Сброс | 3CF | 0 | | Разрешение установки | 3CF | 1 | | Сравнение цвета | 3CF | 2 | | Циклического сдвига | 3CF | 3 | | Масочный чтения | 3CF | 4 | | Регистр режима | 3CF | 5 | | Смешаный | 3CF | 6 | | Игнорирование цвета | 3CF | 7 | | Разрядная маска | 3CF | 8 | +-----------------------+------+--------+ Регистр установки/сброса (3CF/0) бит 3 2 1 0 | | | | +-+-+-+----- установка/сброс плоскостей 0,1,2,3 Регистр разрешения установки/сброса (3CF/1) бит 3 2 1 0 | | | | +-+-+-+----- разрешение установки/сброса плоскостей 0,1,2 3 Регистр сравнения цвета (3CF/2) бит 3 2 1 0 | | | | +-+-+-+----- 0,1,2,3 Если процессор устанавливает режим чтения 1 графического контроллера и читает память, данные, возвращаемые из памяти, содержат 1 в каждом бите, где значение 4-х битовой плоскости совпало со значением в регистре сравнения цветов. Регистр циклического сдвига (3CF/3) бит 4 3 2 1 0 | | | | | | | +-+-+--- счетчики 0 1 2; содержат значение числа | | позиций, на которые сдвинутся данные про- | | цессора во время записи в память. Эта | | операция выполняется, когда режим записи 0. +-+--------- выбор функции логической операции с данными: 0 0 = данные не изменяются, 0 1 = AND, 1 0 = OR, 1 1 = XOR. Циклический сдвиг выполняется до логической операции. Регистр выбора карты чтения (3CF/4) бит 2 1 0 +-+-+------- карты 0,1,2; представляют значение номера плоскости, из которой процессор читает данные Смотри пример check_Color . Регистр режима (3CF/5) бит 5 4 3 2 1 0 | | | | +-+- режим записи; | | | | 0 0 = каждая плоскость записывается данными | | | | процессора в соответствии с регистрами | | | | масок и циклического сдвига. Плоскости, | | | | для которых разрешены установка/сброс | | | | записываются 8 битами, значение которых | | | | содержится в соответствующем разряде | | | | регистра сброса/установки. | | | | 0 1 = каждая плоскость м.б. переписана в дру- | | | | гую через регистры-защелки, содержимое | | | | регистров масок игнорируется. | | | | 1 0 = альтернативный способ записи точки | | | | плоскости N(0..3) заполняются значениям | | | | бита N данных согласно регистр | | | | разрядной маски. | | | +----- 1=переводит выходы графического контроллера | | | в высокоимпедансное состояние для проверки. | | +------- 0=процессор читает данные из плоскости | | памяти, выбранной регистром выбора карты | | чтения. | | 1=процессор читает результат сравнения 4-х | | плоскостей и регистра сравнения цвета. | +--------- 1=выбирает четно/нечетный режим адресации, | используемый при эмуляции CGA. +----------- 1=регистры сдвига переключают поток данных на четные или нечетные плоскости. Использованию различных режимов чтения, записи посвящены подпрограммы Drow_point и check_Color . Смешаный регистр (3CF/6) бит 3 2 1 0 | | | +----- 1=выбирает графический режим, адресация к | | | знакогенератору запрещена. | | +------- 1=связывет четную карту с нечетной +-+--------- 0 0 - A000 для 128 К, 0 1 - A000 для 64 К, 1 0 - B000 для 32 К, 1 1 - B800 для 32 К. Если адаптер адресуется с A0000 в системе не может быть использован дополнительный адаптер. Регистр игнорирования цвета (3CF/7) бит 3 2 1 0 +-+-+-+----- плоскости 0,1,2,3. 0=соответствующая плоскость игнорируется при сравнении (подпрограмма check_Color ). Регистр маски (3CF/8) бит 7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-- 0=предохраняет соответствующий бит от изменений при записи байта данных. Маска используется для всех плоскостей одновременно. 1.3.5. Регистры контроллера атрибутов +--------------------------------+------+--------+ | Имя регистра | Порт | Индекс | +--------------------------------+------+--------+ | Адресации | 3C0 | - | | Регистры палитры | 3C0 | 00-0F | | Управление режимом | 3C0 | 10 | | Регистр цвета окантовки | 3C0 | 11 | | Разрешение цвет. плоскости | 3C0 | 12 | | Горизонтальный сдвиг | 3C0 | 13 | +--------------------------------+------+--------+ Адресный регистр (3C0/0) бит 5 4 3 2 1 0 | +-+-+-+-+--- адрес атрибутов. | Контроллер атрибутов не имеет возможности | контролировать выбор адресного или регистра данных. | Внутренний триггер выбирает адресный регистр или | регистр данных. Обращение по адресу 3DA сбрасывает это | триггер и выбирает адресный регистр (см. программу | Screen_Shock). Следующая инструкция OUT загружает | регистр данных. +------------- 1=доступ со стороны контроллера разрешен, 0=загрузка регистров данными. Регистры палитры (3C0/0- F) бит 5 4 3 2 1 0 | | | | | +--- B R,G,B == 2/3 интенсивности | | | | +----- G r,g,b == 1/3 интенсивности | | | +------- R | | +--------- b /при эмуляции MONO - подчеркивание, | +----------- g /при эмуляции - интенсивность, +------------- r Позволяют динамически переключать атрибуты текста или цвет в графическом режиме. Для избежания мерцания изображения модифицировать регистры палитры необходимо во время вертикального обратного хода луча. Мониторы, имеющие 6 входов цветности, дают 64 цвета. Регистр режима. (3C0/10) бит 3 2 1 0 | | | +------- 0/1=выбирается текстовый/графический режим. | | +--------- 0/1=монохромный/цветной режим. | +----------- 0=9-я точка имеет цвет фона, | 1=разрешены специальные графические символы +------------- 0=выбирает фоновую интенсивность, 1=разрешает мерцание в текстовом и графи- ческом режимах. Регистр цвета окантовки. (3C0/11) бит 5 4 3 2 1 0 | | | | | +--- B | | | | +----- G | | | +------- R | | +--------- b | +----------- g +------------- r Подпрограмма Edge задания цвета края экрана приведена в приложении 1. Регистр разрешения цветовой плоскости (3C0/12) бит 5 4 3 2 1 0 | | +-+-+-+--- 1=разрешает соответствующую плоскость +-+----------- выбирают 2 из 6-ти цветов для входного статусного региста. +--------------------+-------------------------+ | Регистр разрешения | Входной стат. регистр 1 | | разряды 5 4 | разряды 5 4 | +--------------------+-------------------------+ | 0 0 | R B | | 0 1 | b G | | 1 0 | r g | +--------------------+-------------------------+ Подпрограмма to_Blue выбора цветовой плоскости приведен в приложении 1. Регистр горизонтального сдвига (3C0/13) бит 3 2 1 0 +-+-+-+------- представляет число графических элементов сдвига видео данных влево: в монохромном режиме максимум на 9, в остальных на 8. Подпрограмма Screen_Shock использования регистра приведен в приложении 1. 1.4. ИСХОДНЫЕ ЗНАЧЕНИЯ РЕГИСТРОВ АДАПТЕРА Таблица 1.4 Значения регистров адаптера в режимах 3 и 10h, загружаемые по включению питания [1]. +-----------------------------------------+--------+----+----+ | Внешние регистры 10h 03 +-----------------------------------------+--------+----+----+ | общего назначения | 3C2 | A7 | A7 | | признаков | 3DA | 00 | 00 | +-----------------------------------------+--------+----+----+ | Регистры задатчика последовательностей +-----------------------------------------+--------+----+----+ | сброса | 3C5/00 | 03 | 03 | | режим синхронизации | 3C5/01 | 01 | 01 | | маска карты | 3C5/02 | 0F | 03 | | выбор знакогенератора | 3C5/03 | 00 | 00 | | режим памяти | 3C5/04 | 06 | 03 | +-----------------------------------------+--------+----+----+ | Регистры видео контроллера +-----------------------------------------+--------+----+----+ | общий размер по горизонтали | 3D5/00 | 5B | 5B | | размер отображаемого по горизонтали | 3D5/01 | 4F | 4F | | начало невидимой области по горизонтали | 3D5/02 | 53 | 53 | | конец невидимой области по горизонтали | 3D5/03 | 37 | 37 | | начао строчного импульса | 3D5/04 | 52 | 51 | | конец строчного импульса | 3D5/05 | 00 | 5B | | общий размер по вертикали | 3D5/06 | 6C | 6C | | регистр переполнений | 3D5/07 | 1F | 1F | | начало видимой области по вертикали | 3D5/08 | 00 | 00 | | размер символа по вертикали | 3D5/09 | 00 | 0D | | начало курсора | 3D5/0A | 00 | 0B | | конец курсора | 3D5/0B | 00 | 0C | | начало кадрового импульса | 3D5/10 | 5E | 5E | | конец кадрового импульса | 3D5/11 | 2B | 2B | | конец видимой области по вертикали | 3D5/12 | 5D | 5D | | длина линии экрана | 3D5/13 | 28 | 28 | | положение подчеркивания | 3D5/14 | 0F | 0F | | начало невидимой области по вериткали | 3D5/15 | 5F | 5E | | конец невидимой области по вертикали | 3D5/16 | 0A | 0A | | режим управления | 3D5/17 | E3 | A3 | | сравнение строк | 3D5/18 | FF | FF | +-----------------------------------------+--------+----+----+ | Регистры графического контроллера +-----------------------------------------+--------+----+----+ | установка/сброс | 3CF/00 | 00 | 00 | | разрешение установки/сброса | 3CF/01 | 00 | 00 | | сравнение цвета | 3CF/02 | 00 | 00 | | циклический сдвиг | 3CF/03 | 00 | 00 | | выбор карты чтения | 3CF/04 | 00 | 00 | | режим | 3CF/05 | 00 | 10 | | общий | 3CF/06 | 05 | DE | | игнорирование цвета | 3CF/07 | 0F | 00 | | разрадная маска | 3CF/08 | FF | FF | +-----------------------------------------+--------+----+----+ | Регистр атрибутов +-----------------------------------------+--------+----+----+ | | 3C0/00 | 00 | 00 | | | 3C0/01 | 01 | 01 | | | 3C0/02 | 02 | 02 | | | 3C0/03 | 03 | 03 | | | 3C0/04 | 04 | 04 | | | 3C0/05 | 05 | 05 | | | 3C0/06 | 14 | 14 | | | 3C0/07 | 07 | 07 | | | 3C0/08 | 38 | 38 | | | 3C0/09 | 39 | 39 | | | 3C0/0A | 3A | 3A | | | 3C0/0B | 3B | 3B | | | 3C0/0C | 3C | 3C | | | 3C0/0D | 3D | 3D | | | 3C0/0E | 3E | 3E | | | 3C0/0F | 3F | 3F | | управление режимом | 3C0/10 | 10 | 08 | | окантовка экрана | 3C0/11 | 00 | 00 | | цветовая плоскость | 3C0/12 | 0F | 0F | | горизонтальный сдвиг | 3C0/13 | 00 | 00 | +-----------------------------------------+--------+----+----+ 1.5. КОНТАКТНАЯ КОЛОДКА АДАПТЕРА 1 GND - общий 2 -12 3 +12 4 J1 - соединен с дополнительным разъемом 1 на панели 5 J2 - соединен с дополнительным разъемом 2 на панели 6 g_out - выход g 7 r_out - выход r 8 b_out - выход b 9 ATRS/L - синхро-сигнал загрузки сдвигового регистра 10 B_out - выход B 11 G_out - выход G 12 G - вход G 13 r - вход r 14 B - вход B 15 R - вход R 16 R_out - выход R 17 FEAT1 - состояние разряда 6 статусного регистра 0 18 BLANK - невидимая часть изображения 19 FEAT0 - состояние разряда 5 статусного регистра 0 20 FC1 - разряд 1 регистра признаков 21 FC0 - разряд 0 регистра признаков 22 g/I - g/ интенсивность (вход) 23 b/V - вход b/ видео монохромного дисплея 24 HIN - строчный синхроимпульс с видео контроллера 25 VIN - кадровый синхроимпульс с видео контроллера 26 14 MHz - с системной платы 27 internal - разряд 4 выходного регистра 28 EXT OSC - внешняя синхронизация 29 VOUT - кадровый синхроимпульс 30 HOUT - строчный синхроимпульс 31 GND - общий 32 +5 2. ВИДЕО-ФУНКЦИИ BIOS [2] Работа с видео-контроллером выполняется как правило с использованием стандартного обеспечения BIOS, расположенного в ПЗУ контроллера в данном случае размером 16К байт с начальным адресом на шине процессора C0000h. Ниже представлены возможные видео-функции, вызываемые с помощью прерывания 10h [6,7,8]. 00h Установка режима AH=00h, AL=режим из приведенной выше таблицы 1.1. Функция не очищает экран, если старший бит AL установлен в 1. 01h Установка курсора в текстовом режиме AH=01h, CH=начало курсора (разряды 0-4), CL=конец курсора (разряды 0-4). Сделать курсор невидимым можно установив его на строку 25 или задав CH, равным высоте символа. Форма курсора устанавливается для всех страниц одинаковой (подпрограмма Cursor ). 02h Позиционирование курсора AH=02h, BH=страница, DH=строка (0-24), DL=столбец (0-79). В графическом режиме определяется логическое положение курсора (подпрограмма VGA_cls ). 03h Чтение координат и формы курсора AH=03h, DH=страница. Возвращает: CH=начало курсора, CL=конец курсора, DH=строка координата, DL=столбец координата. 05h Установка активной страницы AH=05h, AL=номер страницы (0-1 для режима 10h, (0-3 для режима 03h) 06h Сдвиг окна вверх AH=06h, AL=число смещаемых строк, BH=значение атрибута для освобождаемой области, CH=верхняя строка окна, CL=левый столбец окна, DH=нижняя строка окна, DL=правый столбец окна. Подпрограмма VGA_cls . 07h Сдвиг окна вниз AH=07h, AL=число смещаемых строк, BH=значение атрибута для освобождаемой области, CH=верхняя строка окна, CL=левый столбец окна, DH=нижняя строка окна, DL=правый столбец окна. 08h Чтение символа и атрибута, адресуемых курсором AH=08h, BH=страница. Возвращает: AH=атрибут символа, AL=символ. 09h Вывод адресуемого курсором символа с атрибутом AH=09h, AL=ASCII код символа, BH=страница, BL=атрибут, CX=число печатаемых символов. Курсор во время печати не перемещается. В текстовом режиме в конце строки выполняется переход на новую, управляющие коды (BELL,LF,CR) функций не выполняют, а печатаются. В графическом режиме если старший разряд байта атрибутов установлен, символ печатается с выполнением функции XOR. Близкая реализация дана в приложении 2 программе EGA . 0Ah Вывод символа, адресуемого курсором AH=0Ah, AL=ASCII код символа, BH=страница, CX=число печатаемых символов. Курсор во время печати не перемещается. Аналогична функции 09, за исключением использования атрибутов. 0Bh Установка цветовой палитры (для режима среднего разрешения) AH=0Bh, Близкая реализация дана в приложении 2 программе EGA . 0Ch Запись точки AH=0Ch, AL=цвет точки (0-15), CX=X-координата (0-639, для режима 10h), DX=Y-координата (0-349, для режима 10h), BH=страница (0-1, для режима 10h). Реализация функции представлена в приложении 2 программе EGA . 0Dh Чтение точки AH=0Dh, CX=X-координата, DX=Y-координата, BH=страница. Возвращает: AL=цвет точки. Близкая реализация функции представлена в приложении 2. 0Eh Печать символа с продвижением курсора AH=0Eh, AL=ASCII код символа, BL=цвет в графическом режиме, BH=страница. Действительны символы управления BELL, BS, CR, LF. В текстовом режиме действительны атрибуты предыдущей печати на текущем знакоместе. В графическом - необходимо задание цвета в регистре BL. 0Fh Определение текущего режима AH=0Fh. Возвращает: AL=режим, AH=число символов в строке, BH=номер активной страницы. Смотри пример VGA_cls в приложении 1. 10h Загрузка палитры AH=10h, AL=0 - установка регистров палитры, BL=регистр, BH=значение: разряды 7 6 5 4 3 2 1 0 . . r g b R G B ----- ===== интенсивность 1/3 2/3 AL=1 - установка регистра окантовки, BH=значение. AL=2 - установка регистров палитры и окантовки, ES:DX - указатель на таблицу зачений длиной 17 байтов (последний - окантовка). AL=3 - переключатель интенсивность/мерцание значения разряда 7 атрибута, BL=0 -- определяет мерцание символа, BL=1 -- определяет интенсивность фона. Возможная реализация функции представлена в приложении 2. 11h Загрузка знакогенератора AH=11h, AL=00h-знакогенератор пользователя (текст), ES:BP=указатель на таблицу, CX=число символов, DX=смещение в таблице, BL=блок (0-3), BH=число байтов на символ. AL=01h-знакогенератор ROM 8х14 (моно), BL=блок (0-3). AL=02h-знакогенератор ROM 8х8 двойной (текст), BL=блок (0-3). AL=03h-установка определенного блока (текст), BL= разряды 3 2 1 0 === --- | +-- когда сброшен | бит_3 атрибута, +-- когда установлен бит_3 аттрибута AL=10h-знакогенератор пользователя (текст), ES:BP=указатель на таблицу, CX=число символов, DX=смещение в таблице, BL=блок (0-3), BH=число байтов на символ. AL=11h-знакогенератор 8х14 (моно), BL=блок (0-3). AL=12h-знакогенератор 8х8 двойной (текст), BL=блок (0-3). AL=20h-знакогенератор пользователя 8х8 (граф), ES:BP=указатель на таблицу для символов 128-255 (INT 1Fh для режимов < 7). AL=21h-знакогенератор пользователя (граф), ES:BP=указатель на таблицу символов 0-255 (INT 43h для режимов > 7). CX=число байт на символ, BL=индекс: 00-DL=число строк, 01-14 строк, 02-25 строк, 03-43 строки. AL=22h-знакогенератор 8х8 (граф), BL=индекс. AL=23h-знакогенератор 8х8 двойной (граф), BL=индекс. AL=30h-возвращает информацию о знакогенераторе, BH=индекс указателя: 0-текущий для INT 1Fh, 1-текущий для INT 43h, 2-ROM 8x14, 3-ROM 8x8 двойной, 5-ROM 9x14 альтернативный. Возвращает: ES:BP=указатель, CX=число линий на символ, DL=число линий. Функции 10h, 11h и 12h перепрограммируют регистры видео-контроллера и поэтому должны следовать за установкой режима. Пример загрузки 2-х знакогенераторов в алфавитно/цифровом режиме и печать в одной строке двумя одновременно без потери управления яркостью представлен в приложении 1 (подпрограмма two_Fons ). 13h Печать строки символов AH=13h, BH=страница, BL=атрибут (для AL=0,1), CX=длина строки, DH=строка координата, DL=столбец координата, ES:BP=указатель на строку, AL=0: все символы с атрибутами в BL, курсор не устанавливается; AL=1: все символы с атрибутами в BL, курсор устанавливается; AL=2: атрибуты в строке, курсор не устанавливается; AL=3: атрибуты в строке, курсор устанавливается; Функция работает и в текстовом и графическом режимах, сохраняя за собой подгруженный в EGARUS знакогенератор. 15h Чтение характеристик дисплея AH=15h, Возвращает [8]: AX=индекс типа дисплея: 5153h-color, 5151h-mono. ES:DI=указатель на таблицу длиной 7 слов 1: номер модели дисплея, 2: точек на метр по вертикали, 3: точек на метр по горизонтали, 4: число точек по вертикали, 5: число точек по горизонтали, 6: высота точки в микрометрах, 7: ширина точки в микрометрах. 3. ИСПОЛЬЗУЕМЫЕ АДРЕСА ОЗУ В ОБЛАСТИ ДАННЫХ BIOS адрес байт функция а/ц --------------------------------------------------------------- 449 1 текущий режим адаптера (3) 44A 2 ширина экрана в символах (50h) 44C 2 длина видео буфера в байтах (1000h) 44E 2 смещение для активной страниц (0) 450 16 кординаты курсоров два байта на каждый: младший - столбец, старший - строка 460 2 форма курсора 462 1 текущая активная строка (0) 463 2 базовый адрес видео-контроллера (3D4h) 484 1 число строк на экране - 1 (18h) 485 2 высота символа (0Eh) 487 1 7 6 5 4 3 2 1 0 (60h) | === | | | +- 1=эмуляция курсора разрешена, | | | | +--- 1=монохромный дисплей, | | | +----- 1=включено ожидание обратного | | | хода, | | +------- 1=EGA не активна, | +------------ 11=256K байт ОЗУ, +--------------- старший бит байта режима. 488 1 7 6 5 4 3 2 1 0 (0F9h) ======= ------- | +---- состояние переключателя | адаптера, +------------ разряды признаков из статусных регистров. 4A8 4 указатель на блок данных адаптера: (C000:19FA +00 -- адрес таблицы видео-параметров, (C000:1A60 длина таблица 1472 байт, по 64 на каждый режим работы адаптера, +04 -- адрес таблицы динамических параметров, +08 -- адрес данных о дополнительном текстовом знакогенераторе, +0C -- адрес данных о дополнительном графическом знакогенераторе. 4. ОРГАНИЗАЦИЯ ВИДЕО ОЗУ В режиме 640х350 видео память представляет собой 4 битовых плоскости, расположенные в одном адресном пространстве, когда одному разряду байта соответствует одна точка. Организация отображения видео буфера на экран в режиме EGA 16 цветов следующая: адрес А0000 А0001 А0002.. +--------------------- разряд |765432107654321076543.. <= 1-я линия Запись и представление точки на экране определяется состоянием дополнительных регистров: регистра разрядной маски (8 бит), а также регистра Разрешения Установки/сброса (4 бита) и регистра Установки/сброса (4 бита) в режиме записи 0 (см. п.1.3.4). 4.1. Режим записи 0 Регистр разрядной маски (3CF/8) определяет разряды байта, которые могут быть изменены в видео ОЗУ при записи. Установленный разряд в регистре Разрешения Установки/сброса (3CF/1) при обращении к видео ОЗУ устанавливает или сбрасывает все 8 разрядов в зависимости от состояния соотвествующего разряда регистра Установки/Сброса (3CF0). Байт плоскости, не выбранной маской, останется неизменным (на рис.4.1 - плоскость, заполненная "u"), если установлен соответствующий разряд регистра Установки/сброса и не установлен регистр маски плоскости. Взаимодействие регистров граф.контроллера в режиме 0 [2] Плоскости 3 2 1 0 видео +-+ +-+ +-+ +-+ ОЗУ +-+ +-+ +-+ +-+ A000:0002 +-+ +-+ +-+ +-+ A000:0001 | | | | | | | | A000:0000 | | | | | | | | Адреса +-+ +-+ +-+ +-+ видео | | | | ОЗУ +-+ +-+ +-+ +-+ +-+ : |0|7 | | | | | | | | : останутся : |0| | | | | | | | | : неизменными |1| |0| |u| |1| |1| / 10111101B Регистр |1| |0| |u| |1| |1| < данные разрядной |1| |0| |u| |1| |1| < \ процессора маски ---------> |1| |0| |u| |1| |1| < 3CF/8 |1| |0| |u| |0| |0| < |1|0 |0| |u| |1| |1| < регистры-защелки +-+ +-+ +-+ +-+ +-+ | | | | u-останется неизменным 00000000B-----> + + +<--10111101B / / / / \ \ \ \ 3CF/1 +---------+ +---------+ 3C5/2 Регистр Разрешения | 1 0 0 0 | | 0 0 1 1 | Регистр Установки/сброса +---------+ +---------+ маски цвета | | | | +---------+ 3CF/0 Регистр | 0 1 1 0 | Установки/сброса +---------+ Рис. 4.1 Важно отметить, что обмен с видео памятью происходит через регистры-защелки и требует независимо от производимой операции выполнять и чтение и запись. 4.2. Режим записи 2 Альтернативный режим установки цвета точки [2] безусловно окрашивает выбранные разрядной маской точки видео ОЗУ, при записи по выбранному адресу не байта данных, а 4-х разрядов атрибута. Взаимодействие регистров граф.контроллера в режиме 2 [2] Плоскость 3 2 1 0 видео +-+ +-+ +-+ +-+ ОЗУ +-+ +-+ +-+ +-+ A000:0002 +-+ +-+ +-+ +-+ A000:0001 | | | | | | | | A000:0000 | | | | | | | | +-+ +-+ +-+ +-+ Адреса | | | | видео +-+ +-+ +-+ +-+ +-+ ОЗУ : |0| | | | | | | | | : : |0| | | | | | | | | : <- останутся : |0| | | | | | | | | : неизменными : |0| | | | | | | | | : <= 1101B данные |1| |1| |1| |0| |1| < Регистр : |0| | | | | | | | | : < разрядной : |0| | | | | | | | | : < маски -------> : |0| | | | | | | | | : < регистры-защелки +-+ +-+ +-+ +-+ +-+ | | | | +--------------------+ | 1 1 1 1 | Регистр маски +--------------------+ цвета Рис. 4.2 Пример по использованию режимов записи 0 и 2 Draw_Poin t дан в приложении 1. 4.3. Режимы чтения атрибутов точки Возможны 2 режима чтения атрибутов точки видео-буфера. В режиме чтения 0 последовательно могут быть прочитаны абсолютные значения разрядов каждой плоскости видео буфера. В режиме чтения 1, как правило, выполняется логическое чтение атрибутов точки, т.е. проверяется факт совпадения атрибута читаемой точки с установленным значением регистра цветового сравнения. В случае совпадения в соответствующем разряде байта при чтении возвращается единица. Дополнительно может использоваться регистр игнорирования цвета при сравнении, обеспечивающий функцию ИЛИ при этой логической операции. Подробно чтение в режиме 1 рассмотрено в приложении 1 программа Check_Color . ЗАКЛЮЧЕНИЕ На основании литературных и программных источников дано описание графического видео-адаптера EGA персональной ЭВМ IBM PC/AT, приведены тексты подпрограмм, иллюстрирующих назначение и использование регистров контроллера. Представлены подпрограммы, реализующие основные видео функции BIOS и дающие представление об организации видео ОЗУ и способах эффективной работы в графическом и текстовом режимах адаптера. В приложении 1 и 2 приведены тексты следующих программ: Screen_Shock -- использует регистр горизонтального сдвига; to_Blue -- иллюстрирует разрешение доступа контроллера к цветовой плоскости видео-ОЗУ; Edge -- устанавливает регистр окантовки экрана; Drow_Com re -- заполняет экран в двух различных режимах записи 0 и 2; Cursor -- устанавливает курсор невидимым; to_ -- с помощью прерывания 43h устанавливает новую таблицу символов и использует их в графическом режиме; two_Fonts -- в алфавитно-цифровом режиме загружает и использует 2 знакогенератора для печати в одной строке одновременно; VGA_cls -- используя программу для адаптера VGA, очищает экран, показывая преемственность программного обеспечения; g1 -- показывает взаимодействие регистров графического контроллера в режимах записи 0 и 1; g2 -- программа логического чтения атрибутов точки видео буфера; EGA -- подпрограммы, реализующие видео-функции BIOS: - построение точки (INT 0Ch), - чтение точки (INT 0Dh), - печать символа в а/ц режиме, - печать символа в графическом режиме, - установка палитры. Автор с благодарностью примeт замечания любого характера и темперамента по телефону 6-19-49 или 6-19-43. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. ENHANCED GRAPHICS ADAPTER BIOS. 1983. 2. Jourdain, Robert L. Programmer's problem solver for IBM PC, XT, and AT. - Nyw York: Prentice Hall Press, 1986. 3. McLain M.M. and Stevenson T.E. Writing OS/2 Graphics Programs. Byte, V13, No11, 1988. 4. Wilton R. VGA Video Modes. Byte, V13, No11, 1988. 5. Брэдли Д. Программирование на языке Ассемблера для ПЭВМ фирмы IBM - M.: Радио и связь, 1988, 229. 6. Norton P. Programmer's Guide to the IBM PC. Microsoft Press, USA, 1985. 7. TECH Help! Version 3.2a. Flambeaux Software, 1987. 8. The Assembly Language database. Peter Norton Computing Inc. 1987. ПРИЛОЖЕНИЕ 1 Подпрограммы, иллюстрирующие обращение к регистрам EGA: - Screen_Shock (reg1), - to_Blue (reg2), - Edge (reg3), - Draw_Com re (reg4), - move (reg5), - Draw_Points (g1), - Check_Color (g2). Подпрограммы, иллюстрирующие использование функций BIOS: - Cursor (bio1), - to_ (bio2), - two_Fonts (bio3), - VGA_cls (bio4). ;===пример горизонтального сдвига Screen_Shock .model small .stack 100h .data msg db 'После |