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




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


}

Исходный текст функции WaitVert представлен в листинге 4.3. Функция WaitVert периодически проверяет регистр состояния 1 (ISR1), ожидая начало обратного вертикального хода луча по экрану монитора.

Листинг 4.3. Файл DISPLAY.ASM

TITLE      DISPLAY.ASM

NAME     DISPLAY

PAGE      55,132

P286

IDEAL

NOWARN BRK

SEGMENT WAIT_TEXT WORD PUBLIC 'CODE'

ASSUME                cs:WAIT_TEXT

;===========================================================

; Функция void WaitVert(void)

;===========================================================

PUBLIC  WAITVERT

PROC     WAITVERT FAR

 

enter    0, 0

 

mov  ax,0h

 

mov  es,ax

 

; Определяем адрес порта индексного регистра контроллера

 

; ЭЛТ (3B4h/3D4h)

 

mov  dx,es:[463h]

 

; Вычисляем адрес порта регистра состояния 1 (ISR1)

 

add  dl,6

 

; Читаем содержимое порта регистра состояния 1

 

in   al,dx

 

; Тестируем бит D3 регистра состояния 1

 

; бит D3 = 1 при обратном вертикальном ходе луча

 

test al,8

 

jz   wait_on

wait_off:

 

in   al,dx

 

; Тестируем бит D3

 

test al,8

 

; Ожидаем конец обратного вертикального хода луча

 

jnz  wait_off

wait_on:

 

in   al,dx

 

test al,8

 

; Ожидаем начало обратного вертикального хода луча

 

jz   wait_on

 

; +------------------------------------------------------+

 

;  Здесь могут распологаться операции, которые необходимо

 

;  выполнить  во время обратного  вертикального хода луча

 

; +------------------------------------------------------+

 

leave

 

ret

 

ENDP    WAITVERT

ENDS      WAIT_TEXT

END




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