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



         

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


  • D2 Бит переключателя светового пера. Если переключатель светового пера находится в положении ON (включено), то бит D2 равен единице. Если же переключатель находится в положении OFF (выключено), то бит D2 равен нулю.
  • D1 Бит триггера светового пера. Бит равен единице, если триггер светового пера установлен. Этот бит будет сохранять единицу до записи нуля через порт с адресом 3BBh для монохромного режима, или через порт 3DBh - для цветного режима.
  • D0 Бит разрешения отображения. Бит принимает значение единицы во время интервала активности дисплея (когда адаптер читает данные из видеопамяти), и равен нулю во время горизонтального и вертикального обратного хода луча.
  • Во многих случаях возникает необходимость синхронизовать выполнение некоторых действий с периодом вертикального или горизонтального обратного хода луча. Этого можно достичь обработкой прерывания IRQ2 или тестированием регистра состояния 1.

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

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

    #include <time.h> #include <stdio.h> #include <bios.h>

    #define NUM 200

    void WaitVert(void);

    void main() {

    time_t t_start, t_end; int i; float 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 ); }

    /** *.Name WaitVert * *.Title Определение начала обратного вертикального хода луча. * *.Descr Функция ожидает начало обратного вертикального хода луча. * Использование функции позволяет синхронизировать работу * программы с периодами работы видеоадаптера. * *.Proto void WaitVert(void) * *.Params Отсутствуют. * *.Return Не используются. * *.Sample get_vert.c **/ void WaitVert(void) { unsigned count; _asm {




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