Программирование EGA и VGA
Вызов функции 2:Установка позиции курсора.
Комментарии
Выдает координаты для позиционировании курсора на экране. Строка 0 является самой верхней строкой экрана, столбец 0 - самым левым столбцом экрана.
Исходные данные
Регистры (устанавливаются до вызова функции):
- AH: устанавливается 2
- DH: номер текстовой строки экрана
- DL: номер текстового столбца экрана
- BH: номер страницы (см.функцию 5)
Приведенная ниже программа устанавливает курсор на строку 5 столбца 10 страницы 0.
Пример на ассемблере:
code segment public assume CX:code main proc far start: push DS sub AX,AX push AX mov AH,2 ;функция 2 - установка позиции курсора mov DH,05 ;текстовая строка 5 mov DL,0ah ;текстовый столбец 10 mov BH,0 ;страница 0 int 10h ;обращение к видео-BIOS ret main endp code ends end start
Пример на языке Turbo-Pascal:
type regs = record AX,BX,CX,DX,BP,SI,DI,DS,ES, FLAGS:INTEGER; end; var reg : regs; begin reg.AX:=$0200; reg.DX:=$050a; reg.BX:=$0000; intr($10,reg); end.
Вызов функции 3: Чтение позиции курсора.
Комментарии
Возвращает текущие координаты курсора на экране. Также возвращает текущий тип курсора (см. функцию 1).
Исходные данные
Регистры (устанавливаются до вызова функции):
- AH: устанавливается 3
- BH: номер страницы (см. функцию 5)
Выходные данные
Регистры (опрашиваются после вызова функции):
- DH: текущая текстовая строка курсора
- DL: текущий текстовый столбец курсора
- CH: начальная линия в текстовой строке
- CL: конечная линия в текстовой строке
В приведенном ниже примере осуществляется установка курсора в текстовую позицию (столбец) 10 текстовой строк 5 на странице 0 и печать сообщения, содержащего новые координаты курсора, с текущей его позиции.
Пример на языке ассемблера:
data segment public msg db 'The cursor is at row ' db 'and column ' data ends code segment public assume CX:code main proc far start: push DS sub AX,AX push AX mov AX,data mov DS,AX assume DS:data mov AH,2 ;функция 2 - установка позиции курсора mov DH,05 ;текстовая строка 5 mov DL,0ah ;текстовый столбец 10 mov BH,0 ;страница 0 int 10h ;обращение к видео-BIOS mov AH,3 ;функция 3 - чтение позиции курсора mov BH,0 ;страница 0 int 10h ;обращение к видео-BIOS ;DL теперь содержит номер текстовой строки курсора ;DH содержит номер текстового столбца курсора mov AL,DL ;переместить столбец в AL mov BX,offset msg[35] ;смещение ASCII call bin2asc ;перевод двоичного в ASCII mov AL,DH ;переместить строку в AL sub BX,14 ;смещение для ASCII call bin2asc ;перевод двоичного в ASCII mov AX,data ;получить размещение сегмента данных mov ES,AX ;установить ES для вызова данных assume ES:data ; mov AH,13h ;функция 13h - запись строки mov AL,0 ;курсор не перемещается ;только строка символов ;атрибут в BL mov BH,0 ;страница 0 mov BL,0fh ;белый высокой интенсивности mov BP,offset msg ;ES:BP указатели на строку mov CX,37 ;длина строки int 10h ;обращение к видео-BIOS ret main endp bin2asc proc near COMMENT*Эта подпрограмма перевода двоичных чисел в формат ASCII написана специально для рассматриваемой прог- раммы и позволяет работать только с числами, не превышающими значения 100. AL - 8-битовое переводи- мое значение, BX - смещение в DS, получающее 2-бай- товое значение ASCII * mov AH,0 mov DL,10 div DL ;перевод в десятичные цифры add AX,3030h ;увеличение на 30h для ASCII mov [BX],AL ;запись десятков mov [BX+1],AH ;запись единиц ret bin2asc endp code ends end start
Пример на языке Turbo-Pascal:
type regs = record AX,BX,CX,DX,BP,SI,DI,DS,ES, FLAGS:INTEGER; end; var reg : regs; row,col : integer; begin reg.AX:=$0200 {установка курсора}; reg.DX:=$050a; reg.BX:=$0000; intr($10,reg); reg.AX:=$0300 {получение координат курсора}; reg.BX:=$0000; intr($10,reg); row:=reg.DX div $100; col:=reg.DX mod $100; write ('The cursor is at row ',row); write ('and column ',col); end.
Вызов функции 4: Чтение позиции светового пера.
Комментарии
Функция сообщает о подключении светового пера и возвращает значение строки и столбца в случае, когда световое перо подключено. Следует отметить, что для передачи номера строки при работе в совместимых режимах (4 - 6) используется регистр CH, а при работе в новых режимах регистр CX.
VGA не поддерживает работу со световым пером.
Исходные данные
Регистры (устанавливаются до вызова функции):
- AH: устанавливается 4
Выходные данные
Регистры (опрашиваются после вызова функции):
- AH: 0 - перо не подключено;1 - подключено
- DH: символьная строка (для текстовых режимов)
- DL: символьный столбец (для текстовых режимов)
- CH: строка пикселей (для совместимых режимов)
- CX: строка пикселей (для новых режимов)
- BX: столбец пикселей