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



Положение подчеркивания символа (Underline Location Register - ULR) (индекс14h) - часть 2


 

CHAR_SIZE EQU 8

 

PUBLIC                SET43LINE

 

PROC   SET43LINE FAR

 

enter    0, 0

 

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

 

xor  ax,ax

 

mov  es,ax

 

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

 

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

 

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

 

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

 

mov  dx,es:[463h]

 

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

 

; сканирования этот регистр задает высоту символов на

 

; экране дисплея

 

mov  al,9

 

out  dx,al

 

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

 

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

 

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

 

inc  dx

 

; Биты D4-D0, регистра максимальной линии сканирования

 

; содержат число, меньшее на единицу, чем высота символов

 

; в пикселах

 

mov  al,CHAR_SIZE-1

 

out  dx,al

 

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

 

; контроллера ЭЛТ

 

dec  dx

 

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

 

mov  al,14h

 

out  dx,al

 

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

 

inc  dx

 

; Определяем положение подчеркивания символов

 

mov  al,CHAR_SIZE

 

out  dx,al

 

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

 

; контроллера ЭЛТ

 

dec  dx

 

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

 

; вертикальной развертки

 

; Регистр завершения отображения вертикальной развертки

 

; содержит восемь младших бит, определяющих число

 

; отображаемых горизонтальных линий растра минус один

 

mov  al,12h

 

out  dx,al

 

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

 

inc  dx

 

; Для отображения 43 текстовых символов, при высоте

 

; символов 8 пикселов, необходимо иметь 43 * 8 = 344

 

; горизонтальных линий растра

 

; Помещаем в регистр завершения отображения вертикальной

 

; развертки младшие 8 бит числа 344

 

mov  al,(43 * CHAR_SIZE - 1 - 256)

 

out  dx,al

 

; Устанавливаем новые значения переменных BIOS

 

; Количество символов в строке равно восьмидесяти

 

mov  WORD PTR es:[44Ah],80

 

; Количество строк текста минус один

 

mov  BYTE PTR es:[484h],(350/CHAR_SIZE)-1

 

; Высота символов в пикселах

 

mov  WORD PTR es:[485h],CHAR_SIZE

 

; Загружаем нулевую таблицу знакогенератора набором

 

; символов (размер 8х8) из ПЗУ BIOS

 

mov  ax,1112h

 

xor  bl,bl

 

int  10h

 

leave

 

ret

 

ENDP    SET43LINE

ENDS      LINE_TEXT

END




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