Программирование видеоадаптеров CGA, EGA и VGA


Конечная линия курсора (Cursor End Register - CER) (индекс0Bh)


Этот регистр, также как и регистр CSR, является доступным для чтения и для записи.

Регистр задает последнюю линию сканирования символа, в которой кончается курсор.

  • D4-D0 Соответствует номеру последней линии курсора для VGA (см. рисунок 8.4). Для EGA - номеру следующей линии.
  • D6-D5 Отклонение курсора. Задает смещение курсора относительно позиции, определенной регистром CLR.


    00 - нет отклонения

    01 - отклонение вправо на один символ

    10 - отклонение вправо на два символа

    11 - отклонение вправо на три символа

  • D7 Не используется.

При установке режима работы видеоадаптера BIOS загружает в регистр конечной линии курсора следующие значения:

Режим 0,1,2,3 4,5,6,D,E,F,10 7
Содержимое регистра 07 00 0Ch

Изменяя значение регистров начальной и конечной линии курсора, можно менять его положение и размер. На левой части рисунка, приведенного ниже, регистр начальной линии курсора равен 0Ah, регистр конечной линии курсора равен 0Bh. На правой части рисунка значение регистров изменено: регистр начальной линии равен 4, а регистр конечной линии - 5.

Рисунок 8.4 Изменение положения курсора.

Следующая программа позволяет прочитать значение регистров начальной и конечной линии курсора:

#include <stdio.h> #include "sysp.h" #include "sysgraph.h"

void main(void) {

char top = 0, bottom = 0; unsigned crt_address; BIOS_VAR _far *bios_var_ptr;

// получаем указатель на область переменных видеофункций BIOS

bios_var_ptr = (BIOS_VAR _far *) FP_MAKE(0x0000, 0x0410);

// определяем адрес порта индексного регистра контроллера ЭЛТ

crt_address = bios_var_ptr->crt_address;

// считываем значения регистров начальной и // конечной линии курсора

// выбираем регистр начальной линии курсора

WriteReg(crt_address++, 0x0A);

// считываем значение регистра

top = (unsigned char) ReadReg(crt_address--);

// выбираем регистр конечной линии курсора

WriteReg(crt_address++, 0x0B);

// считываем значение регистра

bottom = (unsigned char) ReadReg(crt_address);

// отображаем на экране значение регистров

printf("\nРегистр начальной линии курсора содержит %x\n" "\nРегистр конечной линии курсора содержит %x\n", top, bottom);

getch(); }




Начало  Назад  Вперед



Книжный магазин