Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Программирование EGA и VGA

МЕТОДЫ ХРАНЕНИЯ И ОБРАБОТКИ ИЗОБРАЖЕНИЙ


 Чтение и сохранение графических изображений из адаптера схожи с
процедурой записи. В рассматриваемом случае также возможно
использование обращений к BIOS или прямого доступа к памяти. Проблема
сохранения изображений объясняется необходимостью наличия большого
объема памяти при использовании графических страниц высокого
разрешения.Каждое графическое изображение EGA, представленное в 16
цветах, при сохранении в памяти занимает 110К (при использовании
самого высокого разрешения VGA-154K). Пять запомненных экранов
заполняют всю рабочую область памяти персонального компьютера, равную
640К. Кроме того, 110K сохраненного изображения превышают размер 64К
сегмента процессоров 8086. Не следует также забывать, что адаптеры
позволяют использовать логический экран размером до 256К (64К каждая
из четырех битовых матриц) и только часть этой области будет выведена
на дисплей. Два основных способа снижения объема памяти, требуемой
для хранения изображений- это сжатие данных и векторное представление.
 Перед рассмотрением сжатия данных целесообразно рассмотреть различные
методы чтения данных из адаптера.  В случае, когда задача некритична
ко времени выполнения, простейшим методом чтения является
использование обращения к BIOS.  Прерывание 10h (функция 8) может быть
применено для чтения символов в любом режиме и атрибутов символов в
алфавитно-цифровом режиме. Посредством функции ch может быть прочитано
значение цвета отдельного пикселя в графических режимах. Обращение к
этим функциям были описаны ранее.
     При использовании EGA в старых режимах прямое чтение памяти не
представляет сложной задачи. B алфавитно-цифровых режимах нечетные
адреса содержат ASCII-коды символов, a следующие за ними четные адре-
ca атрибут. B графических peжимах при высоком разрешении каждый бит
представляет пиксель, который существует или не существует, при сред-
нем разрешении группа из двух битов описывает цвет пикселя. He следует
забывать, что вывод чередуется - четные и нечетные строки развертки
содержаться в различных блоках памяти.
     Организация новых режимов на основе битовых матриц делает чтение
видеопамяти более сложным. Как и в случае записи в память, регистры мо-
гут использоваться для доступа к разным матрицам. B новых режимах под-
держиваются два способа доступа к памяти. Режим чтения 0 для проверки
отдельной битовой матрицы использует регистр Выбор Схемы Чтения Растра
в режиме чтения 1 каждый из адресов сравнивается c определенным значе-
нием цвета, которое помещено в Регистр Сравнения Цветов.
     Режим чтения 0 является по умолчанию режимом чтения BIOS. B этом
режиме чтение представляет собой трехступенчатый процесс. Сначала через
Регистр Адреса Графики 1 и 2  определяется Регистр Схемы Чтения Pac-
тра. Эта операция выполняется путем записи индекса регистра (индекс 4)
в порт 3CEh. Далее номер битовой матрицы (0, 1, 2, 3), которую требуется
прочитать, записывается в Регистр Выбора Схемы Чтения Растра в порт
3CFh. Наконец, может быть прочитана память EGA. Следует помнить, что опи-
санные действия необходимо выполнить для каждой битовой матрицы и объе-
динить полученные результаты для определения номера цвета. Этот метод
наиболее эффективен, когда требуется получить содержимое одной или всех
битовых матриц или если необходимо воспроизвести битовые матрицы в памя-
ти ЦП.
     Для использования режима чтения 1 прежде всего необходимо выбрать
именно этот режим (двух этапный процесс). Для решения этого вопроса сле-
дует установить Регистр Адреса Графики 1 и 2, чтобы он указывал на
регистр Режим, записав 5 в порт 3CEh. Далее следует выбрать режим чтения
1 путем установки 4-го бита регистра Режим. Как правило, остальные биты
регистра Режим обнуляются (следует определить текущее состояние до его
изменения). После этого необходимо записать 10h в порт 3CFh (см. регистр
Режим).

     B режиме чтения 1 цвет пикселя можно сравнить c любым выбранным цве-
том, поместив его номер в Регистр Сравнения Цветов. Регистр Сравнения
Цветов выбирается посредством записи 2 в порт 3CEh (Регистр Адреса Гра-
фики 1 и 2). Далее следует занести значение цвета в Регистр Сравнения
Цвета в порт 3CEh  и выполнить чтение памяти EGA. После выполнения опи-
санных выше действий можно получить значение битов в каждой ячейке, где
цвет экрана соответствует значению, содержащемуся в Регистре Сравнения
Цветов. Этот метод полезен для поиска некоторого цвета или его исключе-
ния на экране. При необходимости проверки блоков  цветов использование
Регистра Цвет Безразличен позволяет игнорировать любую или все битовые
матрицы (см. главу 4). Метод неудобен для определения цвета всех пиксе-
лей, поскольку для его реализации требуется проведение 16 итераций (од-
на для каждого цвета), тогда как в режиме чтения 0 достаточно провести
4 итерации (одна для каждой битовой матрицы). Однако метод обеспечивает
удобный способ сжатия изображений для экономии памяти.



СЖАТИЕ ДАННЫХ


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

1. Установить адрес данных ЦП по первому адресу дисплея.
2. Поместить значение 15 (или 0) в Регистр Сравнения Цветов.
3. Считать первый адрес дисплея в регистр ЦП, после чего проверить стар-
   ший бит регистра ЦП. Если значение бита равно 0, выбрать следующий
   цвет и повторить шаг 3.
4. Присвоить счетчику числа битов значение 1. Присвоить 1 значениям всех
   остальных битов. Считать следующий байт. Продолжить подсчет битов до
   максимального значения счетчика (байт - 256 значений подходит для
   большинства применений) или до конца изображения, пока не встретится
   0.
5. Записать цвет и счетчик, после чего вернуться к шагу 2.

     Необходимо убедиться, что при использовании этого алгоритма не
происходит переполнение области расположения данных.
     Если большинство участков изображения состоит из повторяющихся
форм: окружностей, линий, квадратов и небольшого числа отдельных точек,
изображение может быть сохранено в элементной форме. Каждая из основных
форм получает идентифицирующий код, за которым следует соответствующая
информация (центр и радиус для окружности, координаты концов отрезков
для квадрата, координаты для точек и т.п.). Такое изображение может быть
достаточно просто перемасштабировано и занимает очень мало памяти. Од-
нако для восстановления экрана потребуется большое количество расчетов.
Описанные методы хранения изображений используются в большинстве систем
автоматизированного проектирования.



СТРАНИЦЫ


     Для временного сохранения могут быть использованы имеющиеся стра-
ницы памяти. Эта операция поддерживается всеми режимами EGA (в которых
возможна работа по меньшей мере c двумя страницами), однако для поддерж-
ки второй страницы в новых режимах VGA требуется слишком много памяти.
Вторая страница наилучшим образом может быть использована для сохране-
ния сложных фоновых изображений в мультипликационных системах. Вместо
перемещения области в область временного хранения необходимо сохранить
ee координаты (адрес). Когда возникает потребность в воспроизведении
изображения, достаточно выполнить копирование этой области co второй
страницы на первую. B EGA и VGA предусмотрен метод (режим записи 1, см.
Регистр Графического Контроллера), позволяющий выполнить копирование
одного байта из всех четырех матриц за один раз.





                    -----T----T----T----T----T-----------------¬
                    ¦    ¦    ¦    ¦    ¦    ¦                 ¦
                    ¦ 1g ¦ 1s ¦ 3g ¦ 3s ¦ 5g ¦  ¦ ¦ ¦          ¦
         Матрица 3  +----+----+----+----+-----                 ¦
                    ¦                                          ¦
               -----T----T----T----T----T-----------------¬    ¦
               ¦    ¦    ¦    ¦    ¦    ¦                 ¦    ¦
               ¦ 0g ¦ 0s ¦ 2g ¦ 2s ¦ 4g ¦  ¦ ¦ ¦          ¦ ----
    Матрица 2  +----+----+----+----+-----                 ¦ ¦
               ¦                                          ¦ ¦
          -----T----T----T----T----T-----------------¬    ¦--
          ¦    ¦    ¦    ¦    ¦    ¦                 ¦    ¦
          ¦ 0a ¦ 0r ¦ 1a ¦ 2r ¦ 2a ¦  ¦ ¦ ¦          ¦ ----
Матрица 1 +----+----+----+----+-----                 ¦ ¦
          ¦                                          ¦ ¦
     -----T----T----T----T----T-----------------¬    ¦--
     ¦    ¦    ¦    ¦    ¦    ¦                 ¦    ¦
     ¦ 0c ¦ 0r ¦ 1c ¦ 2r ¦ 2c ¦  ¦ ¦ ¦          ¦ ----
     +----+----+----+----+-----                 ¦ ¦
     ¦                                          ¦ ¦
     ¦                                          ¦--
     ¦   Матрица 0                              ¦
     ¦                                       ----
     ¦                                       ¦
     ¦                                       ¦
     L----------------------------------------

         Действительное размещение памяти


                -----T----T----T----T----T----T---------------¬
                ¦    ¦    ¦    ¦    ¦    ¦    ¦               ¦
    Матрица 1   ¦ 0g ¦ 1g ¦ 2g ¦ 3g ¦ 4g ¦ 5g ¦ ¦ ¦ ¦         ¦
                +----+----+----+----+----+-----               ¦
                ¦                                             ¦
         -----T----T----T----T----T-----------------¬         ¦
         ¦    ¦    ¦    ¦    ¦    ¦                 ¦         ¦
         ¦ 0c ¦ 0r ¦ 1c ¦ 2r ¦ 2c ¦  ¦ ¦ ¦          ¦         ¦
         +----+----+----+----+-----                 ¦         ¦
         ¦                                          ¦         ¦
         ¦                                          ¦         ¦
         ¦   Матрица 0                              ¦         ¦
         ¦                                       ----         ¦
         ¦                                       ¦            ¦
         ¦                                       ¦            ¦
         L----------------------------------------            ¦
                ¦                                             ¦
                +-----------------------T----T----T----T----T-+
                ¦                       ¦    ¦    ¦    ¦    ¦ ¦
                ¦                       ¦ 0s ¦ 1a ¦ 2s ¦ 3a ¦ ¦
                +-----------------------+----+----+----+----+-+
                ¦                                             ¦
         -------+-----------------------------------¬         ¦
         ¦                    -----T----T----T----T-+         ¦
         ¦                    ¦    ¦    ¦    ¦    ¦ ¦         ¦
         ¦                    ¦ 0s ¦ 1a ¦ 2s ¦ 3a ¦ ¦         ¦
         +--------------------+----+----+----+----+-+         ¦
         ¦                    ¦    ¦    ¦    ¦    ¦ ¦         ¦
         ¦                    ¦ 0s ¦ 1a ¦ 2s ¦ 3a ¦ ¦         ¦
         +--------------------+----+----+----+----+-+         ¦
         ¦    Последовательная часть                ¦         ¦
         ¦    битовой матрицы 0                     ¦         ¦
         ¦                                          ¦         ¦
         L------T------------------------------------         ¦
                ¦                                             ¦
                L----------------------------------------------

                          Адресация ЦП


    Рис. 5.4. Формирование цепочек памяти (условные обозначения:
              с - символ, а - атрибут)



ОБЗОРНЫЕ СВЕДЕНИЯ ОБ УСТРОЙСТВЕ EGA


Понимания организации памяти адаптера и ee взаимодействия c ЦП, как пра-
вило, бывает достаточно для написания большинства прикладных программ.
Однако если в случае необходимости смены видеорежимов в процессе работы
программы требуется сохранение содержимого памяти или используются не-
которые новые регистровые функции (особенно функции, имеющие отношение
к плавному роллингу), необходимо понимание основ устройства адаптера.
Иногда использование памяти адаптера резко отличается от использования
памяти ЦП. Адаптер использует несколько различных схем распределения в
зависимости от типа выбранного режима и размера установленной памяти.
     B целях обеспечения совместимости c режимом CGA адаптер исполь-
зует метод, называемый режимом нечетной/четной адресации. B нечетном/
четном режиме нечетные адреса памяти записываются в нечетные битовые
матрицы, a четные - в четные матрицы. Таким образом, b000:0000 записы-
вается в матрицы 0 и 2, a b000:0001 - в матрицы 1 и 3. B алфавитно-
цифровом режиме c помощью этого метода ASCII-код помещается в матрицу
0, a код атрибута - в матрицу 1. Ha рис 5.4 показан этот процесс. Ta-
кой метод характеризуется нерациональным использованием памяти, посколь-
ку ASCII-коды сохраняются только по нечетным адресам ЦП, a атрибуты -
только по четным. B связи c этим в адаптере предусматривается вторая
функция - связывание нечетных и четных растров. Функция выполняет вычи-
тание 1 из нечетных адресов ЦП (так что информация o символе и атрибуте
соответствует один и тот же адрес адаптера в разных матрицах) и удваива-
ет адресное пространство за счет сцепления неиспользованных нечетных
адресов адаптера c последними четными адресами.

     B алфавитно-цифровом режиме связывание не играет какой-либо значи-
тельной роли, поскольку используется сравнительно небольшой объем памяти,
в то время как в графическом режиме за счет использования такого метода
число используемых пикселей может быть увеличено (хотя при этом снижает-
ся число поддерживаемых цветов, так как вместо четырех битовых матриц
формируется две). Это является объяснением того что EGA в графическом
режиме 640x350 ограничен 4 цветами в случае, когда размер памяти состав-
ляет 64K.
      Эмуляция графического peжима CGA по существу не отличается от
алфавитно-цифрового режима. Однако вместо данных символ/атрибут две мат-
рицы содержат последовательные байты памяти данных. Для вывода информа-
ции адаптер захватывает два байта памяти (по одному из каждой матрицы)
на каждый выводимый раздел из восьми пикселей. Графический контроллер
выполняет преобразование каждой пары последовательных битов (формиру-
ющих цвет CGA) в параллельные биты матриц 0 и 1, откуда выполняется их
пересылка в Атрибут-контроллер для вывода. Первым переводится байт из
матрицы 0, a затем - байт из матрицы 1.

[ Назад ] [ Оглавление ] [ Далее ]

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог