Регистр позволяет сдвинуть изображение на экране в горизонтальном направлении. При использовании регистра HPR совместно с регистром начального адреса контроллера атрибутов можно сдвигать изображение на любое количество пикселов.
Формат регистра горизонтального панорамирования представлен ниже:
По умолчанию для всех режимов работы видеоадаптера регистр горизонтального панорамирования содержит нулевые значения для всех битов.
На рисунке 8.18 иллюстрируется операция горизонтального сдвига содержимого экрана при различных значениях регистра HPR. На левой части рисунка регистр горизонтального панорамирования содержит ноль, а на правой части рисунка значение регистра увеличено до трех. Изображение на экране сдвигается на три пиксела влево.
PICTURE._FIG_30.PCX;6";4.308";PCX
Рисунок 4.18 Горизонтальный сдвиг экрана
Программа SCRSPLIT позволяет перемещать содержимое экрана по горизонтали и вертикали. Исходный текст программы представлен в листинге 4.11.
Листинг 4.11. Файл SCRSPLIT.C
// Смещение содержимого экрана по горизонтали и вертикали
#include "sysgraph.h"
#include <stdio.h>
#include <stdlib.h>
#include <graph.h>
#include "sysp.h"
#include <dos.h>
void HorScroll(unsigned, unsigned);
void VerScroll(unsigned);
void SetColumn(unsigned char);
void main(void) {
struct videoconfig vc;
unsigned char i,j;
// выбираем текстовый режим работы видеоадаптера,
// принятый по умолчанию
_setvideomode(_DEFAULTMODE);
// устанавливаем логическую ширину экрана в 100 символов
SetColumn(100);
// отображаем на экране монитора 24 строки текста
for(i = 0; i < 24; i++)
printf("\ntext text text");
// производим горизонтальное смещение экрана
// на i пикселов при каждом нажатии на клавиатуру
for(i = 0; i < 13; i++) {
getch();
HorScroll(i,8);
}
// производим вертикальное смещение экрана
// на i пикселов при каждом нажатии на клавиатуру
for(i = 0; i < 13; i++) {
getch();
VerScroll(i);
}
getch();
_setvideomode(_DEFAULTMODE);
}
Сдвиг изображения на экране монитора выполняют функции HorScroll и VerScroll. Функция HorScroll сдвигает изображение в горизонтальном направлении, а функция VerScroll в вертикальном. Исходный текст функций представлен в листинге 4.12.
Листинг 4.12. Файл SPLIT.ASM
/**
*.Name HorScroll
*
*.Title Горизонтальный сдвиг содержимого экрана.
*
*.Descr Функция смещает содержимое экрана влево на определенное