Два регистра - регистр старшего байта положения курсора (Cursor Location Register - CLR_h, high byte) (индекс 0Eh) и регистр младшего байта положения курсора (Cursor Location Register - CLR_l, low byte) (индекс 0Fh) определяют положение курсора на экране (см. рисунок 7.3). Они содержат смещение относительно начала видеобуфера байта на котором установлен курсор.
Это единственные регистры видеоадаптера CGA, доступные как для записи, так и для чтения.
Рисунок 7.3 Отображение курсора на экране.
Программа, приведенная ниже, считывает значения из регистров положения курсора.
// чтение регистра положения курсора
#include <stdio.h> #include <graph.h> #include "sysp.h" #include "sysgraph.h"
void main(void) {
int crt_port; unsigned char h_pos, l_pos; BIOS_VAR _far *bios_var_ptr;
// получаем указатель на область переменных видеофункций BIOS
bios_var_ptr = (BIOS_VAR _far *) FP_MAKE(0x0000, 0x0410);
// определяем адрес порта индексного регистра контроллера ЭЛТ
crt_port = bios_var_ptr -> crt_address;
// выбираем старший байт регистра положения курсора
WriteReg(crt_port, 0x0E);
// считываем значение старшего байта регистра положения курсора
h_pos = ReadReg(crt_port + 1);
// выбираем младший байт регистра положения курсора
WriteReg(crt_port, 0x0F);
// считываем значение младшего байта регистра положения курсора
l_pos = ReadReg(crt_port + 1);
printf("\nТекущий адрес курсора %X:%X\n", (unsigned char) h_pos, (unsigned char) l_pos ); }