Уровень bios для текстовых режимов работы адаптеров


Выяснение и настройка параметров видеосистемы выполняется с использованием прерываний 10h и 15h. Соответствующие значения возвращаются на регистрах. Более быстрый способ получения параметров – непосредственное обращение к области данных bios. Выполнив обращение к определенным ячейкам bios, которые содержат данные относящиеся к работе адаптера можно выяснить текущий режим, активную страницу видеопамяти, число символов в строке, определить текущую позицию курсора и пр. В таблице ниже представлена область данных bios, связанная с организацией работы видеоадаптера. Так, воздействуя на некоторые ячейки можно изменить положение курсора не выполняя прерывания с кодом 10h.

 

Адрес Назначение поля Размер поля
40:49h Текущий режим Байт
40:4Ah Число символов в строке (количество столбцов) Слово
40:4Ch Длина буфера видеопамяти (в байтах) Слово
40:4Еh Начальный адрес в буфере регенерации (смещение от начального сегмента видеопамяти до начального адреса активной страницы в байтах) Слово
40:50h Позиция курсора для страницы 0 (мл. байт столбец, ст. байт строка) Слово
40:52h ----------------«------------------«--- 1 Слово
40:54h ----------------«------------------«--- 2 Слово
………. …….. повтор через 2 байта до страницы 7 ……………..
40:5Eh ----------------«------------------«--- 7 Слово
40:60h Форма курсора (мл. байт – номер строки начала изображения курсора, ст. байт – номер строки конца изображения курсора в пределах знакоместа) Слово
40:62h Номер активной видеостраницы Байт
40:63h Базовый адрес порта контроллера ВА (3D4h – для цветных, 3D8h – для монохромных) Слово
………… ……………установки внутренних портов адаптера и пр…………….. ……………..
40:84h Число строк текста для активного режима (самая верхняя строка имеет номер 0). Адаптеры старше CGA корректно устанавливают этот байт. Для CGA – всегда 25 строк, а значение в ячейке равно 0. Байт

 

Когда выполняется запрос к bios с кодом 10h, - bios использует управляющую информацию из своих таблиц и воздействует необходимым образом на порты ВА (контроллера). В лекции 16 приведены примеры выполнения запросов к bios. В Приложении представлена таблица некоторых функций, которые могут быть связаны с запросом 10h.

Пример

В примере представлена функция printche(), выполняющая вывод символа заданное число раз по горизонтали. Функция может быть полезна для рисования, например, рамки окна.

 

printche(int str, int stolb, char symb, char atr, int n) // str, stolb – координаты начала вывода

{ // symb, atr – символ и его аттрибут

register cur_page, max_stolb; // n – число повторов

union REGS r;

// контроль параметров и определение текущей страницы

cur_page = *(char far*)MK_FP(0x40, 0x62);

max_stolb = *(unsigned far*)MK_FP(0x40, 0x4a);

if(goto_xy(str, stolb, cur_page) == BAD_PARAM)

return BAD_PARAM;

if(max_stolb < (stolb + n – 1))

return OUT_OF_SCREEN;

// вывод символа и атрибута n раз

r.h.ah = 0x09; r.h.al = symb; r.h.bh = cur_page;

r.h.bl = atr; r.h.cx = n;

int86(0x10, &r, &r);

return OK;

}

 

Собственно контроль начальных координат для вывода выполняет функция goto_xy(), возвращающая константу BAD_PARAM, если координаты заданы некорректно.

В следующем примере представлена функция, выполняющая скроллинг. Используются подфункции 06h и 07h.

Пример

void scroll(int direction, char l_row, char l_col, char r_row, char r_col, char atr)

{

union REGS r;

if(direction)

if(direction == 6 || direction == 7)

{

r.h.al = 1; r.h.ah = direction;

}

else

return;

else

{

r.h.al = 0; r.h.ah = 6;

};

r.h.ch = l_row; r.h.cl = l_col; r.h.dh = r_row;

r.h.dl = r_col; r.h.bh = l_atr; int86(0x10, &r, &r);

}

 

Первый параметр задает направление скроллинга (см. Приложение), следующие 4 параметра задают координаты, соответственно, левого верхнего и правого нижнего угла области скроллинга. Если в качестве координат указать весь экран и задать 1-й параметр значением 0, то очистится весь экран. В справочнике Касаткина [12] средствами скроллинга показана реализация программы построения «распахивающегося» окна. Для этого с определенной задержкой выполняется в цикле вывод рамки окна от самого минимального размера до заданного.



Дата добавления: 2016-05-26; просмотров: 1576;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.