Программирование видеоадаптеров




Регистр состояния 1 (Input Status Register 1 - ISR0) - часть 2


D2    Бит переключателя светового пера. Если переключатель светового пера находится в положении ON (включено), то бит D2 равен единице. Если переключатель находится в положении OFF (выключено), то бит D2 равен нулю.

D1    Бит триггера светового пера. Бит равен единице, если триггер светового пера установлен. Сброс бита происходит при записи нуля через порт с адресом 3BBh для монохромного режима, или через порт 3DBh - для цветного режима.

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

Во многих случаях возникает необходимость синхронизовать программирование регистров видеоадаптера с периодом вертикального или горизонтального обратного хода луча. Этого можно достичь периодической проверкой регистра состояния 1.

Листинг 4.2 содержит программу, использующую функцию WaitVert для определения частоты кадров. Функция WaitVert задерживает выполнение программы до начала обратного вертикального хода луча.

Листинг 4.2. Файл RASTR.C

// Программа определения частоты кадров

#include  <time.h>

#include  <stdio.h>

#include  <bios.h>

#define   NUM  200

// Описания функций. Смотри файл DISPLAY.ASM

void                        __pascal __far WaitVert(void);

unsigned               __pascal __far HorByVer(void);

//===========================================================

// Главная функция

//===========================================================

void main() {

 

time_t  t_start, t_end;

 

int                          i;

 

float                      fr;

 

unsigned             vert_fr;

 

// Определяем начальное время

 

t_start = clock();

 

// Ожидаем исполнения NUM вертикальных разверток

 

for(i = 0; i < NUM; i++) WaitVert();

 

// Определяем конечное время

 

t_end = clock();

 

// Вычисляем частоту кадров

 

fr = NUM/(((float)t_end - t_start) / CLK_TCK);

 

printf( "\nЧастота кадров = %4.1f \n", (float)fr );




Содержание  Назад  Вперед