Мбайт. Допускается полное или частичное перекрытие сегментов. Подфункция 0 осуществляет перемещение блока на новое место, а 1 — обмен блоков (источник помещается на место приемника и наоборот). При обращении к ним в регистрах D5;5J указывается адрес следующего описателя запроса:

MoveBlockType == record

Size : Longint; {Длина блока в байтах) SourceType-: Byte; {Тип источника: 0 - основная память,

1 - отображаемая память} SourceHand: Word; {Дескриптор EMM, если источник

находится в EMS-памяти, или О,

если в основной] SourceOffs: Word; {Смещение начала источника

внутри страницы или сегмента} SourceSegm: Word; {Сегмент или страница источника} DestinType: Byte; {Тип приемника:0 - основная память,

1 - отображаемая} DestinHand: Word; {Дескриптор EMM, если приемник

находится в EMS-памяти, или 0} DestinOffs: Word; {Смещение приемника} DestinSegm: Word; {Сегмент или страница приемника} end;

Получить полную карту EMS-окна

Вход: АН = $58;

AL — номер подфункции:

О — получить карту;

1 — получить длину карты. Выход: СХ — длина карты (для подфункции 1);

ES:DI — буфер (для подфункции 0). С помощью функции $58 программа может получить полную карту БАК—окна. При обращении к подфункции 0 регистры ES:DI содержат адрес буфера, в который будет помещена карта, а при вызове подфункции 1 драйвер помещает в регистр СХ количество 4—байтных элементов этой карты. Первое слово каждого элемента содержит сегмент физической страницы, а второе слово — номер той логической страницы, которая в данный момент отображается в этой физической. Эта карта содержит N элементов, где N — количество активных физических страниц (некоторые физические страницы могут не быть связанны с EMS— памятью).

5.3. МОДУЛЬ F_EMS

Достаточно подробное описание функций EMM, приведенное в предыдущем параграфе, позволит Вам при необходимости создать собственный интерфейс низкого уровня для доступа к этим функциям. В описываемом ниже модуле F_EMS я попытался реализовать более удобный,