Cтраница 4
Отметим в связи с рассмотренным примером, что при обращении к видеобуферу командами, оперирующими 16-битными словами, результаты могут быть ошибочными. Если, например, в приведенном выше фрагменте заменить команду MOVSB на команду MOVSW, то будут выполнены две операции считывания по 4 байта и данные от второй операции перезапишут в регистрах-защелках данные от, первой операции. [46]
![]() |
Регистры секвенсера адаптеров EGA и VGA. [47] |
Имеется также вспомогательный выходной регистр, который управляет адресацией портов ввода-вывода и видеобуфера, а также выбирает частоту задающего тактового генератора. Отметим, что в адаптере EGA все регистры секвенсера, графического и атрибутного контроллеров допускают только запись, а в адаптере VGA для них разрешены операции считывания и записи. Этот узел генерирует внутренние сигналы для адресации видеобуфера. Кроме того, он разрешает работу с 8 - ю шрифтами, причем два из них могут одновременно выводиться на экран. [48]
В двухцветном режиме 640x200 для считывания значения пиксела необходимо просто получить из видеобуфера байт, адресуемый регистрами ES: BX, и выделить в нем бит, содержащий значение нужного пиксела. При сделанных выше предположениях эти действия осуществляют всего три команды. [49]
В текстовом режиме каждый символ, наблюдаемый на экране, представлен в видеобуфере всего двумя байтами. Вместе с этим в графическом режиме каждый пиксел каждого символа представлен в видеобуфере отдельным двоичным полем. Поэтому резко возрастает объем данных, которые необходимо хранить в видеобуфере. Например, в 16-цветном режиме ( 4 бита на пиксел) и символьной матрице размерностью ч 8x8 описание каждого символа занимает 32 байта. Соответственно усложняются и алгоритмы преобразований символьных данных. Таким образом, вывод данных в текстовом режиме оказывается наиболее простым и быстрым. [50]
Данная функция аналогична предыдущей, за одним исключением: в текстовых режимах в видеобуфер помещается только код символа, а атрибутный байт не изменяется. Действия функции OAh в графических режимах полностью аналогичны действиям функции 09h, включая и выполнение операции XOR, если старший бит регистра BL содержит единицу. [51]
Когда этот адаптер программируется на эмуляцию графических режимов адаптера CGA, пикселы в видеобуфере отображаются точно так же, как в адаптере CGA. Однако в естественных режимах адаптера EGA ( 16-цветные 200-строчные режимы и все 350-строчные режимы) каждый байт всегда содержит информацию о восьми пикселах. Такое отображение определяется организацией видеобуфера адаптера EGA. Видеобуфер емкостью до 256К байт состоит из четырех параллельных банков ( тар) ЗУПВ. Бднки считаются параллельными в том смысле, что они занимают один и тот же диапазон адресного пространства процессора. Секвенсер и графический контроллер позволяют обращаться к банкам параллельно или в отдельности ( подробнее см. разд. [52]
Большинство графических программ опирается на элементарные процедуры, которые оперируют отдельными пикселами в видеобуфере. Основными операциями здесь являются считывание значения пиксела из видеобуфера и запись значения пиксела в видеобуфер. [53]
Для записи значения пиксела в двухцветном режиме 640x200 необходимо выделить нужный бит в видеобуфере, а затем поместить в него новое значение. В следующем фрагменте предусмотрена прямая замена значения пиксела, а также выполнение трех логических операций. [54]
Множитель 2 появляется в связи с тем, что для каждого символа в видеобуфере требуются два байта. Значения строки и столбца отсчитываются от верхнего левого угла экрана начиная с нуля. [55]