}
Исходный текст функции 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