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

Ваш аккаунт

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

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

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

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

Вызов функции 5: Установка активной экранной страницы.

Комментарии

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

CGA в режимах 2 и 3 имеет ограничение 4 страницы. Монохромный дисплей поддерживает только одну страницу.

Необходимо отметить, что в следующей таблице приведены диапазоны номеров страниц, которые могут быть использованы в регистре AL. 0 означает, что возможна работа только с одной страницей (номер 0).

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

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

  • AH: устанавливается 5
  • AL: номер активизируемой страницы:
Режимы: Номера страниц:
------- -------------------------------------
64K   128K  256K 

Приведенная ниже программа "пролистывает" четыре видеостраницы, останавливаясь на каждой из них. С каждым следующим циклом пауза становится короче. На каждой из страниц добавляется одно слово, формируя сообщение "This shows four pages".

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

        data    segment public
                msg1    db ' This'
                msg2    db ' shows'
                msg3    db ' four'
                msg4    db ' pages.'
                pse     dw 0F000h ;длительность паузы при выводе
        data    ends
        code    segment public
                assume  CX:code
        main    proc    far
        start:  push    DS
                sub     AX,AX
                push    AX
                mov     AX,data ;получить размещение сегмента данных
                mov     ES,AX   ;установить ES для вызова функции
                assume  ES:data
                mov     AX,data
                mov     DS,AX
                assume  DS:data
                mov     AX,3    ;режим 3 (алфавитно-цифровой)
                int     10h
                mov     DH,08   ;строка 8
                mov     DL,0ah  ;столбец 10
                mov     BH,3    ;страница 3
                mov     BP,offset msg1 ;ES:BP указатель на строку
                mov     BL,0fh  ;белый высокой яркости
                mov     CX,6    ;длина строки
         ;загрузка четырех страниц с сообщением
        loop:   mov     AL,1    ;курсор перемещается
                                ;только строка символов
                                ;атрибут в BL
                mov     AH,13h  ;функция 13h - запись строки
                int     10h     ;вызов видео-BIOS
                add     BP,6    ;указатель на следующее сообщение
                add     DL,6    ;перемещение курсора для следующей
                                ;страницы
                dec     BH      ;указатель на следующую страницу
                cmp     BP,offset msg4
                jbe     loop
        ;вывод четырех страниц
        dsp:    mov     CX,4
        lp2:    mov     AL,CX
                dec     AX
                mov     AH,5
                int     10h
                push    CX
                mov     CX,2    ;задержка (2-й множитель
                                ;для увеличения времени)
        ps1:    push    CX
                mov     CX,pse  ;длина паузы
        ps2:    loop    ps2     ;пустой цикл для задержки
                pop     CX
                loop    ps1     ;цикл через множитель
                pop     CX
                loop    lp2
                mov     AX,pse
                sub     AX,1000h
                mov     pse,AX
                cmp     AX,0
                ja      dsp
         ;переустановка страницы 0 перед возвратом в DOS
                mov     AL,0
                mov     AH,5
                int     10h
                ret
        main    endp
        code    ends
        end     start

Вызов функции 6: Прокрутка (скроллинг) активной страницы вверх.

Комментарии

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

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

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

  • AH: устанавливается 6
  • AL: число прокручиваемых строк (0 - очистка экрана)
  • BH: символ атрибута новых строк (см. функцию 8)
  • CH: номер верхней строки окна
  • CL: номер левого столбца окна
  • DH: номер нижней строки окна
  • DL: номер правого столбца окна

Приведенная ниже программа печатает сообщение "This line will scroll (except for this part)" и прокручивает первую часть вверх на одну строку. Вторая часть сообщения не прокручивается, в результате чего эффект скроллинга виден особенно наглядно.

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

        data    segment public
                msg1    db 'This line will scroll (except for'
                        db 'this part)'
                msg2    db 'This line will not scroll'
        data    ends
        code    segment public
                assume  CS:code
        main    proc    far
        start:  push    DS
                sub     AX,AX
                push    AX
                mov     AX,data ;получить размещение сегмента данных
                mov     ES,AX   ;установить ES для вызова функции
                assume  ES:data
                mov     AX,data
                mov     DS,AX
                assume  DS:data
                mov     AX,3    ;режим 3 (алфавитно-цифровой)
                int     10h
                mov     DH,12   ;строка 12
                mov     DL,10   ;столбец 10
                mov     BH,0    ;страница 0
                mov     BP,offset msg1 ;ES:BP указатель на строку
                mov     BL,0fh  ;белый высокой яркости
                mov     CX,44   ;длина строки
                mov     AL,1    ;курсор перемещается
                                ;только строка символов
                                ;атрибут в BL
                mov     AH,13h  ;функция 13h - запись строки
                int     10h     ;вызов видео-BIOS
                mov     DH,13   ;строка 13
                mov     DL,10   ;столбец 10
                mov     BH,0    ;страница 0
                mov     BP,offset msg2 ;ES:BP указатель на строку
                mov     BL,0fh  ;белый высокой яркости
                mov     CX,25   ;длина строки
                mov     AL,1    ;курсор перемещается
                                ;только строка символов
                                ;атрибут в BL
                mov     AH,13h  ;функция 13h - вывод строки
                int     10h     ;вызов видео-BIOS
                mov     CX,2    ;задержка (множитель)
                                ;для увеличения времени
        ps1:    push    CX
                mov     CX,0ffffh ;длина паузы
        ps2:    loop    ps2     ;пустой цикл для задержки
                pop     CX
                loop    ps1     ;цикл через множитель
                mov     CX,0    ;координата левого верхнего угла 0,0
                mov     DH,12   ;правый нижний угол на строке 12
                mov     DL,31   ;столбец 31
                mov     AL,1    ;переместить 1 строку
                mov     BH,0fh  ;атрибут новой строки
                mov     AH,6    ;прокрутка вверх
                int     10h     ;вызов видео-BIOS
                ret
        main    endp
        code    ends
        end     start

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

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

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