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


Положение подчеркивания символа (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




Начало  Назад  Вперед