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

Ваш аккаунт

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

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

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

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

Подфункция 7: (только VGA) Чтение отдельного регистра палитры.

Регистры, устанавливаемые до вызова функции:

  • AL: установить 7
  • BL: номер считываемого регистра (цвета)

Регистры, опрашиваемые после вызова функции:

  • BH: содержимое регистра палитры

Подфункция 8: (только VGA) Чтение регистра цвета рамки.

Регистры, устанавливаемые до вызова функции:

  • AL: установить 8

Регистры, опрашиваемые после вызова функции:

  • BH: содержимое регистра цвета рамки

Подфункция 9: (только VGA) Чтение всех регистров палитры.

Подфункция требует резервирования 17-байтовой области памяти. После обращения первые 16 байтов содержат значения регистров палитры 0 -15, а 17-й байт - значение регистра цвета рамки.

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

  • AL: установить 9
  • ES: сегмент, содержащий таблицу
  • DX: смещение первого байта таблицы в сегменте

Подфункция 10h: (только VGA) Установка отдельного регистра цап.

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

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

  • AL: установить 10h
  • BX: регистр ЦАП (0-255)
  • CH: яркость зеленого
  • CL: яркость синего
  • DH: яркость красного

Подфункция 12h (только VGA) Установка блока регистров цап

Функция устанавливает 18-битовое значение цвета для некоторого количества регистров ЦАП.Программа помещает значения в таблицу. Таблица содержит последовательно значения байтов регистров цветов: красного,зеленого и синего соответственно (3 байта для каждого программируемого регистра.

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

  • AL: установить 12h
  • BX: начальный регистр ЦАП (0-255, обычно 64 или 256)
  • CH: число программируемых регистров (1-256, обычно 64 или 256)
  • ES: сегмент таблицы
  • DX: смещение таблицы

Подфункция 13h (только VGA) Выбор подмножества цветов.

Функция устанавливает число возможных подмножеств в 16-цветном режиме подмножеств ЦАП (4 подмножества из 64 цветов или 16 подмножеств из 16 цветов). Функция также может быть использована для выбора активного подмножества.

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

  • AL: установить 13h

Первый вариант вызова:

  • BL: 0-режим выбора страниц
  • BH: 0-четыре набора из 64 регистров ЦАП 1-16 наборов из 16 регистров ЦАП

Второй вариант вызова:

  • BL: 0-режим выбора страниц
  • BH: активное подмножество ЦАП(0-3 или 0-15)

Подфункция 15h только(VGA) Чтение отдельного регистра ЦАП.

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

  • AL: установить 15h
  • BX: регистр ЦАП (0-255)

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

  • CH: текущая яркость зеленого
  • CL: текущая яркость синего
  • DH: текущая яркость красного

Подфункция 17h(только VGA) Чтение блока регистров ЦАП.

Функция считывает 18-битовое значение цвета для некоторого количества регистров ЦАП.Программа должна резервировать 3 байта памяти для каждого считываемого регистра. После обращения к функции таблица содержит последовательно расположенные значения байтов регистров цветов:красного, зеленого и синего соответственно.

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

  • AL: установить 17h
  • BX: начальный регистр ЦАП(0-255,как правило 64 или 256)
  • CH: число считываемых регистров(1-256,как правило 64 или 256)
  • ES: смещение таблицы
  • DX: сегмент таблицы

Подфункция 1Ah(только VGA) Чтение цвета состояния страницы

Функция возвращает число регистров активного подмножества ЦАП и число возможных подмножеств.

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

  • AL: установить 1ан

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

  • BH: число активных подсистем
  • BL: 0-возможны 4 подмножества, 1-возможны 16 подмножеств

Подфункции 1Bh (только VGA): Суммирование регистров ЦАП

Для получения оттенков серого

Функция позволяет осуществить преобразование имеющегося блока регистров ЦАП в эквивалентные оттенки серого. Красный составляет 30% текущего значения , зеленый-59%, синий-11%.

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

  • AL: установить 1dh
  • BX: начальный регистр ЦАП (0-255)
  • CX: количество изменяемых регистров (1-256)

Пример на языке ассемблера

; Приведенная ниже программа выполняет печать строки чисел
; поперек экрана (одно число для каждого регистра палитры).
; Печать начинается справа и осуществляется циклически,
; изменение предыдущего значения происходит по окончании
; полного цикла.
cry-f       equ   1      ; эмуляция флага переноса
data        segment public
clrs        db    16,15,14,13,12,11,10,9,8
            db    7,6,5,4,3,2,1,0
overscan    db    0
            flags db     0
data        ends
code        segment public
            assum CS:code
main        proc   far
start:      push   DS
            sub    AX,A
            push   AX
            mov    AX,data
            mov    DS,AX
            assume DS:data
            mov    ES,AX
            assum  ES:data
            mov    AH,2     ; функция 2-установка курсора
            mov    DH,05    ; строка 5
            mov    DL,0ah   ; столбец 10
            mov    BH,0     ; страница 0
            int    10h      ; обращение
            mov    CX,16    ; вывод каждого регистра палитры
 d_lp:      mov    BX,CX
            dec    BX	   ; номер регистра палитры
            mov    AL,сlrsх[BX]; определение цвет
            call   show_new ; вывод текущего значения
            loop   d_lp
            mov    CX,1000h ; число световых комбинаций для демонстрации
; В случае установки начального значения цвета 0 и использования
; большого количества  вложенных циклов,эта программа  позволяет
; получить все возможные комбинации цветов.
; Конечно,чтобы  выполнить  эту   операцию,  потребуется  очень
; много времени, поэтому следует  ограничить интересующие начальные
; значения несколькими тысячами итераций.
lp2:        push       CX
            mov        CX,16           ;проверка каждого регистра
                                       ;палитры
            or         flags,cry_f     ;установка флага переноса
                                       ;(для увеличения на 1)
lp1:        mov        BX,CX           ;поместить счетчик в ВХ
            dec        BX              ;номер регистра палитры
            mov        AL,clrs[BX]     ;получение цвета
            test       flags,cry_f     ;был установлен флаг переноса?
            jz         no_c            ;нет-перейти к следующему
                                       ;регистру палитры
            inc        AX              ;быстрее,чем INC AL
            and        flags,not cry_f ;сбросить флаг переноса
            cmp        AL,64           ;это максимум?
            jb         no_cry          ;нет-не устанавливать флаг
                                       ;переноса
            sub        AL,AL           ;вновь установить цвет 0
            or         flags,cry_f     ;установить флаг переноса
no_cry:     call       show_new        ;обновление экрана
            mov        clrs[BX],AL     ;сохранить новый цвет
no_c:       loop       lpl             ;проверка следующего регистра
                                       ;палитры
            poop       CX              ;восстановить счетчик
            loop       lp2             ;выполнить следующую установку
            ret
main        endp
show_new    proc       near
            push       AX              ;сохранить текущий цвет
            push       BX              ;сохранить текущее состояние
                                       ;регистра палитры
            push       CX              ;сохранить текущее значение
                                       ;счетчика значение в DX уничтожено
;Для установки палитры используется подфункция 0 (установка одного
;регистра). ПРИМЕЧАНИЕ: для этого также может быть использована
;подфункция 2, при этом следует символы"'" удалить из строк
;"mov AL,2" и "mov DX,..."
      	    mov        BH,AL           ;
     	    mov        AH,10h          ;
     				       ;
     	    mov        AL,0            ;
     	    'mov       AL,2'           ;
     	    'mov       DX,offset CLRS' ;
     	    int        10h             ;BIOS
     	    push       BX              ;
     	    mov        AH,2            ;
     	    mov        BH,0            ;
     	    sub        DH,DH           ;DH=0 (номер строки)
     	    mov        DL,BL           ;поместить значение регистра
     				       ;палитры в DL
     	    shl        DX,1
     	    shl        DX,1            ; номер столбца = 4* значение
     		                        ; регистра палитры
     	    int        10h             ;обращение к видео BIOS
             pop        BX              ;восстановить регистр цвет/
                                        ;палитра
     	    mov        AL,BH           ;поместить цвет обратно в AL
     	    call       bin2asc         ;перевод AL в ASCII в AX
     	    push       AX              ;сохранить AX
     	    xchg       AH,AL           ;поместить старшую цифру в AL
     	    mov        AH,9            ;запись атрибута/символа
     	    mov        BL,BH           ;поместить номер цвета в BL
     	    mov        BH,0            ;страница 0
     	    push       BX              ;сохранение для следующей цифры
      	    mov        CX,1            ;запись одного символа
     	    int        10h             ;обращение к видео BIOS
     	    mov        AH,2            ;установить позицию курсора
     	    mov        BH,0            ;страница 0
     	    inc        DX              ;следующий столбец
     	    int        10h             ;обращение к видео BIOS
     	    pop        CX
             pop        BX              ;восстановление текущего регистра
     	    pop        AX              ;восстановление цвета
show_new     endp

bin2asc      proc       near
      COMMENT*    ПРИМЕЧАНИЕ: в отличие от первых вариантов этой
                 подпрограммы ААМ используется вместо операции DIV 10 AL:
                 8-битовое число для перевода
            *
                 aam                        ;AH=AL/10, AL=остатку
                 add        AX,3030h        ;прибавление 30h для получения
                                            ;ASCII-кода
                 ret
     bih2asc     endp
     code        ends
     end         star

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

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

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
Мне нравитсяМне не нравится
3 марта 2006, 11:58:16
Подфункция 17h(только VGA) Чтение блока регистров ЦАП.

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

AL: установить 17h
BX: начальный регистр ЦАП(0-255,как правило 64 или 256)
CH: число считываемых регистров(1-256,как правило 64 или 256)
ES: смещение таблицы
DX: сегмент таблицы

-------------------------------------------------
ES: сегмент
DX: смещение
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог