Программирование 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: столбец пикселей
