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

Ваш аккаунт

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

Последние темы форума

Показать новые сообщения »

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

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

Аппаратные возможности VGA.

Аппаратный скролинг поддерживается видео картам стандарта VGA. Он не тратит процессорного времени, просто, пишите в пару портов, и все остальное делает сама видео карта вплоть до синхронизации с обратным ходом луча.

1. Некоторые функции VGA:

1.1 Графический Контроллер.

Графический контроллер является прмежуточным устройством между процессором и видео-памятью. По умолчанию настройки видео-карты прозрачны, но с помощью портов вы можете изменять аппаратное состояние видео-карты.

1.2 Регистры Видео Контроллера.

Видео контроллер управляет выводом на экран генерируя сигналы синхронизации и гашения. Он отображает цвета полученные в результате ударения потока электронов о люминисцентную поверхность обратной стороны ЭЛТ. Поток электронов (луч) перемещается черезь весь экран с лева на право (по горизонтали) и сверху вниз (по вертикали). Луч должен проходить весь экран 50, 60, 70 или более раз в секунду, в зависимости от времени перерисовки (обычно эту величиноу называют просто частотой монитора - для разных видео-режимов частоты разные). При возврате из конца одной строки в начало следующей происходит горизонтальное гашение луча. А при возврате из нижней строки в верхнюю происходит вертикальное гашение луча.

Именно вертикальное гашение наиболее стабильно, и применяется для синхронизации динамических сцен. (Очень неплохо перерисовывать содержимое видеопамяти в тот момент, когда она не отображается на экране).

1.3 Видео память.

Сегодня VGA видео карты могут иметь до 256Kb (или более) видео памяти, разбитой на блоки по 64kb, их иногда называют цветовымы (битовыми) слоями. Эти слои находятся в адресном пространстые процессора. Отображающийся в текущий момент слой можно менять путем программирования видео контроллера через порты.

1.4 Контроллер паллитры.

Этот контроллер определяет цвет, который будет отображен на экране, как для текстового, так и для графического режимов. Сердцем контроллера является таблица перекодировки цвета, которая переводит четырех битную информацию из видео памяти в 6 битовую информацию (EGA) или 12 битовую информацию (VGA).

2. Использование портов ввода/вывода.

2.1 Запись/чтение битовых планов.

Порт контроллера: 03CEh

ЗначенияОписание
00Установить/сбросить регистр
01Установить/сбросить активный регистр
02Цветовое сравнение регистров
03Сдвиг данных и выбор функции
04Чтение регистра выбора слоя
05Регистр режима
06Смешанный регистр
07Color Don't care register
08Регистр бтовой маски

Запись в экран... (Запись в слой... включение слоя (порт 3CEh = 01)).

Пример:

        mov     dx,3CEh
        mov     al,1
        out     dx,al
        inc     dx
порт 3CEh = 01
d0d1d2d3****
01234567
* = Не используется для переключения слоев
d0=1слой 0 включен для записи
d0=0слой 0 выключен для записи
d1слой 1.
d2слой 2.
d3слой 3.

Отсюда видно, что можно использовать один movsb для записи 4 пекселей (да и 8 тоже). Таким образом очистить экран 320x200x256 можно с такой-же скоростью, что и два экрана в текстовом режиме.

    mov   al,00 --> in  al,dx
                    and al,11110000b  ; вырубаем для записи все слои
                    or  al,1          ; включаем для записи нулевой слой
    out   dx,al                       ; пишем в порт

слой 1mov al,02h
слой 2mov al,04h
слой 3mov al,08h
все слоиmov al,0Fh

Чтение из памяти/экрана (Читаем регистр установки слоя... (порт 3CEh = 04))

порт 3CEh = 04
d0d1******
01234567
* = Не используется для переключения слоев
d0 & d1=00слой 0 read enbale.
01слой 0 включен для чтения.
10слой 1 включен для чтения.
11слой 2 включен для чтения.

2.2 Логическая ширина экрана.

Обычно логическая ширина экрана совпадает с реальной шириной, но вы можете ее изменить, что-бы сделать экран шире, нарисовать в невидимой части экрана изображение и плавно (или не плавно) вывести его на экран.

Порт 3B4/3D4h
00hHorizontal total 0CH Начало высвечиания (старший байт)
01hHorizontal display end 0DH Начало высвечиания (младший байт)
02hStart horizontal blank 0EH Cursor location high
03hEnd horizontal blank 0FH Cursor location low
04hStart horizontal retrace 10H Vertikal retrace start
05hEnd horizontal retrace 11H Vertikal Retrace end
06hVertical total 12H Vertikal Display end
07hOverflow 13H Логическая ширина экарана
08hPreset row scan 14H Underline location
09hMaximum scan line 15H Start Vertikal Blank
0AhCursor Start 16H End Vertikal Blank
0BhCursor end 17H Mode Control register
18hLine Compare register  

Интересующее нас значение - 13h:

     port[$3d4]:=$13      { порт 3D4h = 13h - логическая ширина экарана. }
     port[$3d5]:=         { ...длина экрана... в нашем случае 40*4 =160 слов. }

3. Аппаратный скроллинг.

a) Байтовая Горизонтальная Прокрутка.

Если мы взглянем на порт 3D4h видео контроллера, то увидим функции с 0Ch и 0Dh. С помощью них производится управление началом высвечивания - 16 битный адресс записанный в эти регистры будет адресом высвечиваемым в верхнеи левом углу экрана.

0CH = Адрес (Старший байт); 0DH = Адрес (Младший байт);

b) Плавная Горизонтальная Прокрутка.

Для плавного скроллинга в текстовом режиме можно испоьзовать индекс 08h - Preset row scan.

порт 3CEh = 01
d0d1d2d3d4***
01234567
* = Не используется.
d4-d0Устанавливает row scan.

с) Horizontal Pel Pan Register

Прежде всего этот регистр располагается в порту 3C0h (= Вспомогательный Регистр Контроллера.)

Порт 3C0h
00hColor palette Register 00Ah Color palete Register 10
01hColor palette Register 10Bh Color palete Register 11
02hColor palette Register 20Ch Color palete Register 12
03hColor palette Register 30Dh Color palete Register 13
04hColor palette Register 40Eh Color palete Register 14
05hColor palette Register 50Fh Color palete Register 15
06hColor palette Register 610h Mode Control Register
07hColor palette Register 711h Screen Border color
08hColor palette Register 812h Color plane enable register
09hColor palette Register 913h Horizontal Panning regsiter
14hColor Select register  

порт 3C0h = 13h
d0d1d2d3****
01234567
* = Зарезервированно.
d3-d0Сдвиг экрана по горизонтали на 1 пиксел (До 16 пикселей)

Пример: В текстовом режиме:

Илюстрация сдвигов в текстовм режиме

Примечание: Если вы хотите сделать разделенный экран, и поместить статичное изображение в нижнюю часть и плавно скроллировать верхнюю, то вы можете обмануть контроллер, например как это сделано в MN2-Dentro...

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

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