Доступ к отображаемой памяти ___ 147

экрана с помощью прерывания BIOS $10 и в зависимости от этого резервирует EMS— память нужной длины. Код режима помещается в поле Mode и контролируется при вызове других методов объекта. Это означает, что если Ваша программа переключает режим работы дисплея, например переходит из текстового в графический, для сохранения копий экрана Вы должны использовать разные копии объекта TEMSScreen. Напротив, в рамках одного и того же режима единственная копия TEMSScreen может сколько угодно раз использоваться для сохранения/восстановления экрана. Поскольку унаследованные методы TEMSArea.Rea.dEMS и TEMSArea. Write— Ems не перекрываются, Вы можете использовать их для того, чтобы обойти это ограничение (например, чтобы объект, рассчитанный на работу с графическим экраном EGA/VGA, использовать для сохранения/восстановления текстового экрана). В табл.5.4 указывается объем резервируемой EMS^- памяти для наиболее распространенных дисплейных адаптеров.

Таблица 5.4 Объем резервируемой EMS-памяти. для различных дисплейных адаптеров___

Тип адаптера

Режим

Резервируемая память в страницах по 16 Кбайт

MDA

Все режимы

1

CGA

Все режимы

1

EGA

Текстовые

i

"

Графический 640х350 16 цветов

7

VGA

Текстовые

1

"

Графический 640х480 16 цветов

10

SVGA

Графический 1024х?68 16 цветов

24

Графический 1024х768 256 цветов

48


Поля

Mode Mode: Byte; Только чтение

Код режима работы экрана на момент создания объекта. Все методы объекта (кроме Imt и Store) проверяют соответствие текущего режима работы режиму, указываемому этим полем.

Методы

Init Constructor Init;

Создает объект: с помощью прерывания $10 (подфункция $F) определяет текущий режим работы экрана, затем с помощью вызова родительского метода TEMSArea.Imt резервирует EMS— память нужного размера, после чего помещает в поле Mode код режима дисплея.

Load Constructor Load (P: Pile);

Считывает копию объекта из файла F: вызывает TEMSArea, затем читает из файла заголовок RegHeadTEMSScreen и поле Mode. Перед обращением к методу файловую переменную F необходимо связать с уже существующим нетипизироваиным файлом, а сам файл должен быть открыт для чтения блоками длиной в 1 байт.

Store Procedure Store (var F: File); Virtual;