// Чтение регистра положения курсора

#include <stdio.h>
#include "sysp.h"
#include "sysgraph.h"

// Описания функций
void	main(void);
void	WriteReg(unsigned reg, unsigned char data);
unsigned char	ReadReg(unsigned reg);

// Главная функция
void main(void) {

	int				crt_port;
	unsigned char	h_pos, l_pos;
	BIOS_VAR _far	*bios_var_ptr;

	_asm {
		// Устанавливаем режим 3
		mov	ah,0
		mov	al,3
		int	10h

		//	Выбираем страницу видеоапамяти 0
		mov	ah,5
		mov	al,0
		int	10h

		// Устанавливаем курсор в положение (20,10)
		mov	ah,2
		mov	dh,10	//
		mov	dl,5	// строка 10, позиция 5:
						// CLR = 80 * 10 + 5 = 805 = 325h
		xor	bh,bh
		int	10h
	}

	// Получаем указатель на область переменных видеофункций 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Текущий адрес курсора %2.2X%2.2Xh\n",
		(unsigned char) h_pos, (unsigned char) l_pos );

	return;
}
