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

Ваш аккаунт

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

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

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

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

Текстовый и графический режимы.

Смена режима, как правило, выполняется через BIOS, так как эта операция не критична ко времени выполнения, но весьма трудна для программирования. Графическая плата IBM поддерживает два типа режимов. Вопервых, алфавитно-цифровой режим (называемый также "альфа" или "текстовым"), который позволяет вывести только 256 различных символов (при использовании специальных методов программирования EGA позволяет вывести до 512 символов одновременно). Во-вторых, графический режим, позволяющий осуществить индивидуальный вывод на экран любого элемента изображения (пикселя), а также 256 предопределенных символа. Графический режим иногда называют APA (All Point Addressable - адресующий все точки), поскольку он поддерживает индивидуальное управление всеми элементами изображения (пикселями).

EGA имеет 5 текстовых и 7 графических режимов. Текстовые режимы имеют номера 0 - 3 и 7. Режимы 0 - 3 не отличаются от режимов 0 - 3 CGA, а режим 7 близок к режиму 7 монохромного адаптера. Графические режимы 4 - 6 EGA не отличаются от режимов 4 - 6 CGA. Новые графические режимы (предусматривающие высокое разрешение и/или большее количество цветов) пронумерованы 0dh - 10h. После установки режима информация может быть записана на экран (или считана с него) с помощью вызова функций BIOS или непосредственного доступа к видеопамяти.

    Режим  Тип режима          Совместимость
    -----  ------------------  ---------------
      0    алфавитно-цифровой  Совместим с CGA
      1    алфавитно-цифровой  Совместим с CGA
      2    алфавитно-цифровой  Совместим с CGA
      3    алфавитно-цифровой  Совместим с CGA
      4    графический         Совместим с CGA
      5    графический         Совместим с CGA
      6    графический         Совместим с CGA
      7    графический         Совместим с MDA
      0dh  графический         Новый режим
      0eh  графический         Новый режим
      0fh  графический         Новый режим
      10h  графический         Новый режим
    -----  ------------------  ---------------

VGA позволяет расширить приведенный список еще на три дополнительных режима: монохромный и цветной высокого разрешения и цветной графический с низким разрешением, но допускающий использование 256 цветов. Несмотря на то, что 256-цветный режим имеет низкое разрешение, при его использовании некоторые изображения выглядят более реалистично, поскольку за счет большого количества цветов возможно отображение мелких деталей изображения. Эффективное применение таких деталей может повысить кажущееся разрешение изображения.

IBM сохраняет совместимость между обращениями к BIOS и адресацией памяти для пронумерованных режимов, поэтому использование имеющихся режимов возможно в любом случае. За счет применения режимов 0 - 7 и параметров, которые приводятся в таблицах настоящего руководства, написанные программы будут совместимы со всеми типами существующих адаптеров и теми адаптерами, которые предполагается производить.

В этой главе описаны обращения к функциям 0 - 7, то есть функциям, которые устанавливают состояние экрана и его окружения (режим, размещение курсора, и т.д.). Эти функции являются общими для всех типов видеоадаптеров IBM, кроме того, EGA и VGA позволяют несколько расширить возможности. Например, эти адаптеры позволяют использовать дополнительные страницы дисплея.

Вызов функции 0: Установка режима.

Комментарии

Эта функция используется для выбора режима работы адаптера. Основными режимами являются алфавитно-цифровой (неграфический), графический 320х200, графический 640х200 и графический 640х350. Применение VGA делает доступным графический режим 640х480. Запись символов может быть выполнена с помощью функций 9, 0ah, 0eh и 13h. Построение точек выполняется с помощью функции 0ch.

Исходные данные

    Регистры (устанавливаются до вызова функции):
    ---------------------------------------------------------------
    AH: устанавливается 0
    AL: устанавливается номер режима:
          0,1 - 40 столбцов, алфавитно-цифровой, совместим с CGA
          2,3 - 80 столбцов, алфавитно-цифровой, совместим с CGA
          4,5 - 320х200 4-цветный графический, совместим с CGA
                  (ограничение: только 2 палитры)
          6   - 640х200 2-цветный графический, совместим с CGA
                  (один из цветов должен быть черный)
          7   - алфавитно-цифровой монохромный, совместим с MDA
          8-0ch - резерв
          0dh - 320х200 16 цветов
          0eh - 640х200 16 цветов
          0fh - 640х350 монохромный графический
          10h - 640х350 цветной графический
                  (4 цвета для EGA с 64К, 16 цветов для EGA с >64К)
          11h - 640х480 монохромный графический, только VGA
          12h - 640х480 16-цветный графический, только VGA
          13h - 320х200 256-цветный графический, только VGA
    ---------------------------------------------------------------

Использование комбинации EGA/монохромный монитор возможно только для режимов 7 и 0fh (эти режимы могут не поддерживать комбинацию EGA/ цветной монитор).

При необходимости сохранения экранной памяти при переустановке режима следует задать значение старшего бита регистра AL равным 1. Это делается путем увеличения номера режима на 80h.

Программа, приведенная ниже, позволяет установить цветной графический режим с разрешением 640х350 и изобразить линию от левой до правой границы экрана вдоль строки 10 всеми возможными цветами (вызов функции ch BIOS). Режим 10h будет сохранен после выполнения программы. Для возвращения в текстовый режим следует дать команду MODE CO80.


Пример на ассемблере:

        data    segment public
                clr     db 16   ;начальное значение цвета - 16
         data   ends
         code   segment public
                assume  CX:code
         main   proc    far
         start: push    DS
                sub     AX,AX
                push    AX
                mov     AX,data
                mov     DS,AX
                assume  DS:data
                mov     AH,0    ;функция 0 - установка режима
                mov     AL,10h  ;выбор режима 10h
                int     10h     ;обращение к видео-BIOS
                mov     CX,639  ;это будет столбец
          lp:   mov     AH,0ch  ;функция ch - изображение точки
                mov     AL,clr  ;установка цвета
                dec     AX      ;вычитание 1 из номера цвета
                mov     clr,AL  ;сохранение нового цвета
                jnz     skip    ;переход на skip, если цвет не 0
                mov     clr,16  ;установить цвет равным 16
         skip:  mov     BH,0    ;выбор страницы 0
                mov     DX,10   ;установить строку 10
                int     10h     ;обращение к видео-BIOS
                loop    lp      ;декремент CX (следующий столбец)
                ret
         main   endp
         code   ends
         end    start

Пример на языке Turbo-Pascal:

    type
        regs = record
                    AX,BX,CX,DX,BP,SI,DI,DS,ES,
                    FLAGS:INTEGER;
        end;
     var
        reg : regs;
        column,color : integer;
     begin
        reg.AX:=$0010;
        intr($10,reg);
         color:=16;
        for column:=639 downto 0 do
            begin
                color:=color-1;
                reg.AX:=$0c00+color;
                if color=0 then
                    color:=16;
                reg.BX:=0;
                reg.DX:=10;
                reg.CX:=column;
                intr($10,reg);
            end;
    end.

Этот и последующий примеры приведены в версии 3.0 Turbo-Pascal. Для преобразования к более поздней версии см. "Руководство пользователя по системе Turbo-Pascal 5.0".

Вызов функции 1: Уcтановка типа курсора.

Комментарии

Эта функция позволяет установить размер курсора. Предусмотрено определение первой и последней линий (имеются в виду линии или строки развертки), ограничивающие область расположения символа (установка начальной линии вверху области, а конечной - внизу области необязательна, то есть курсор может быть установлен в середине описанной области). Следует отметить, что в графическом режиме курсор отсутствует.

Для определения начальной и конечной линий требуются только 4 младших бита. Значения битов 5 и 6 всегда устанавливаются равными 0. Линия 0 является самой верхней линией области расположения символа. Курсор может быть отключен установкой первой и последней строки ниже об

ласти расположения символа. При работе с EGA установка значения начальной строки, большего значения конечной строки, приводит к "перевороту" курсора, в результате чего отображается двойная линия (это напоминает инверсное отображение курсора на поле символа). VGA не поддерживает сдвоенный курсор; при установке номера начальной строки, большего номера конечной строки, курсор на VGA просто не отображается.

В случае использования ECD возможен несколько необычный результат работы с функцией 1. В связи с тем, что прежние цветные алфавитно-цифровые режимы использовали 8-строчный курсор, поддерживается установка только 8 строк. Алфавитно-цифровой режим ECD предусматривает использование 14-строчной области расположения курсора: линии 0 - 4 определяют верхние 5 строк, а линии 5 - 7 нижние 3 строки. Любой из диапазонов, содержащий линии 4 и 5, также определяет 6 линий между ними ( при установке курсора на линиях 4 и 5 формируется изображение курсора в виде большого прямоугольного блока).

Исходные данные

Регистры (устанавливаются до вызова функции):

  • AH: устанавливается 1
  • CH: номер начальной строки (линии развертки в текстовой строке)
  • CL: номер конечной строки (линии развертки в текстовой строке)

С помощью приведенной ниже программы формируется изображение курсора, состоящее из двух верхних линий области расположения символа.


Программа на языке ассемблера:

        code    segment public
                assume  CX:code
         main   proc    far
         start: push    DS
                sub     AX,AX
                push    AX
                mov     AX,1  ;функция 1 - установка режима курсора
                mov     CX,1  ;начальная линия 0, конечная 1
                int     10h   ;обращение к видео-BIOS
                ret
         main   endp
         code   ends
         end    start

Пример на языке Turbo-Pascal:

    type
        regs = record
                    AX,BX,CX,DX,BP,SI,DI,DS,ES,
                    FLAGS:INTEGER;
        end;
     var
        reg : regs;
     begin
        reg.AX:=$0100;
        reg.CX:=$0001;
        intr($10,reg);
    end.

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

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

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