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



Регистр сравнения линий (Line Compare Register - LCR) (индекс18h) - часть 2


TITLE      SPLIT.ASM

NAME     SPLIT

PAGE      55,132

P286

IDEAL

NOWARN BRK

SEGMENT SPLIT_TEXT WORD PUBLIC 'CODE'

ASSUME                cs:SPLIT_TEXT

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

; void Split(unsigned split_line)

; Функция разделяет экран на две части. Функция работает

; только на видеоадаптерах EGA и VGA.

; Параметр split_line определяет линию горизонтальной

; развертки, в которой происходит разделение экрана монитора

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

split_line               EQU        [bp+6]

PUBLIC  SPLIT

PROC     SPLIT FAR

 

enter    0, 0

 

; Устанавливаем регистр ES на начало оперативной памяти

 

xor   ax,ax

 

mov   es,ax

 

; Получаем адрес порта индексного регистра контроллера ЭЛТ

 

; (3B4h/3D4h), в монохромных режимах для адресации к

 

; индексному регистру используется порт с адресом 3B4h, а

 

; в цветных - порт 3D4h

 

mov   dx,es:[463h]

 

; Вычисляем адрес порта регистра состояния 1, в

 

; монохромных режимах для адресации к регистру состояния 1

 

; используется порт с адресом 3BAh, в цветных - порт 3DAh

 

add   dx,6

 

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

 

in    al,dx

 

nop

 

; Если бит D3 равен единице, то происходит обратный

 

; вертикальный ход луча

 

test  al,8

 

jz    wait_on

wait_off:

 

in    al,dx

 

nop

 

test  al,8

 

jnz    wait_off

wait_on:

 

in    al,dx

 

nop

 

test  al,8

 

jz    wait_on

 

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

 

; контроллера ЭЛТ (3B4h/3D4h)

 

sub   dx,6

 

; Выбираем для обмена регистр сравнения линий

 

mov   al,18h

 

out   dx,al

 

; Вычисляем адрес порта регистра данных контроллера ЭЛТ,

 

; в монохромных режимах для адресации к регистру данных

 

; используется порт с адресом 3B5h, а в цветных порт 3D5h

 

inc   dx

 

; Определяем линию горизонтальной развертки, в которой

 

; происходит разделение экрана дисплея

 

mov   ax,split_line

 

; У видеоадаптера EGA регистр сравнения линий состоит из 9

 

; бит, доступ к девятому биту происходит через




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