Любая информация, выводимая на экран отображается в видеопамяти дисплея. Вся доступная дисплейная память адаптеров CGA,EGA,VGA делится на отдельные образы экрана, называемыми страницами . Каждая страница определяется порядковым номером и задается абсолютным адресом хранения. В реальной работе используется только нулевая страница, адрес которой $B800:$0000.
Для повышения эффективности программ, в частности при разработке различных меню сложной структуры, необходимо обеспечивать быструю сменяемость экранов и восстановление экрана с нужным меню в данный момент работы с программой. В этом случае удобно использовать буфер экрана, с дальнейшим сохранением его копии в динамической памяти и восстановление в любой момент на экране дисплея. Использование динамической памяти позволяет хранить несколько поколений экранов для работы.
Пример.
{-------------------------------}
{ пример сохранения копии экрана}
{ в динамической памяти }
{-------------------------------}
Program A;
uses Crt;
type Ekr=array[1..4000] of byte; { кол-во байтов для хранения }
var Ekran:Ekr Absolute $B800:0000; { одной копии экрана }
buf:^Ekr;
begin
Clrscr;
for n:=1 to 15 do
writeln(' Экран для сохранения ');
new(buf); { новая динамическая переменная }
buf^:=Ekran; { сохранение в ней копии экрана }
Clrscr;
writeln(' Восстановление экрана');
Delay(3000);
Ekran:=buf^; { восстановление зкраной копии }
dispose(buf);
readln
end.