Кафедра МОП ЭВМ Драйвер управления расширенной памятью HIMEM,SYS, страница 13

На входе:                  AH = 09h.

DX = размер требуемого блока в килобайтах.

На выходе:                   AX = 000lh - если функция выполнена успешно,

0000h - если произошла ошибка;

DX = 16-битовый индекс (handle) полученного блока ЕМВ.

Ошибки:                      BL = 80h, 81h, AOh, Alh.

Функция заказывает блок ЕМВ из пула свободной расширенной памяти. При успешномвыполнении запроса функция возвращает индекс полученного блока, который должен использоваться программой для выполнениявсех операций с блоком ЕМВ. Если блок ЕМВ программе больше не нужен,она должна освободить его с помощью функции OAh.

Количество блоков ЕМВ, которое может быть заказано, определяется в командной строке драйвера H1MEM.SYS параметром /NUMHANDLES=. Значение по умолчанию - 32, максимальное значение - 128.

Освободить блок ЕМВ

На входе:                     AH = 0Ah.

DX = 16-битовый индекс (handle) полученного блока ЕМВ.

На выходе:                   AX = 000lh - если функция выполнена успешно,

0000h - если произошла ошибка.

Ошибки:                      BL = 80h, 81h, A2h, B2h.

Функция освобождает блокЕМВ, заказанный предыдущей функцией. При этом вседанные, находившиеся в блоке, будут потеряны.

Копирование блоков ЕМВ

На входе:      АН = Bh.

DS:SI  = указатель на управляющую структуру, определяющую, откуда, куда и какбудет выполняться копирование.

На выходе:                   АХ    = 000lh - если функция выполнена успешно, 0000h - если произошла ошибка.

Ошибки:                                             BL = 80h, 81h, 82h, A3h, A4h, A5h, A6h, A7h, A8h, A9h.

Управляющая структура:

ExtMemMoveStruct               struct

Length                          dd ?   ; количество посылаемых байтов

SourceHandle               dw ? ; индекс исходного блока

SourceOffset                           dd ? ; смешение в исходном блоке

DestHandle                   dw ?; индекс блока назначения

DestOf-fset                   dd ? ; смещение блока назначения

ExtMemMoveStruct    ends

Эта функция выполняет основную операцию с блоками ЕМВ - копирование данных. Данные могут пересылаться между обычной памятью и блоками ЕМВ, между различными блоками ЕМВ и дажевнутри обычной памяти.

Поле Length управляющей структуры указывает количество пересылаемыхбайтов. Это количество должно быть четным.

Поля SourceHandle и DestHandle указывают соответственно индексы исходного и результирующего блоков ЕМВ. Если в качестве индекса задано значение 0000h, это означает, что в качестве источника или приемника данных используется обычная память.

Поля SourceOffset иDestOffset указывают 32-битовое смещение в блоке ЕМВ или адрес в обычной памяти. В последнем случае этот адрес имеет стандартный формат сегмент: смещение.

Функция копирования сама управляет линией А20, восстанавливая ее состояние после выполнения копирования. Поэтому программе не требуется управлять линией А20.

Во время выполнения копирования разрешены прерывания.

Блокирование ЕМВ

На входе:                     АН = 0Ch;

DX = 16-битовый индекс (handle) блокируемого ЕМВ.

На выходе:                   AX = 000lh - еслифункция выполнена успешно,

0000h - если произошла ошибка;

DX:BX = 32-битовый линейный адрес заблокированного EМВ.

Ошибки:                      BL = 80h, 81h, A2h, ACh, ADh.

Функция блокирует ЕМВ и возвращает его базовый адрес как линейный 32-разрядный адрес. Для заблокированного ЕМВ невозможновыполнить операцию копирования. Полученный линейный адрес действителен только для заблокированного ЕМВ.

Разблокирование ЕМВ

На входе:                     АН = 0Dh;

DX = 16-битовый индекс (handle) разблокируемого ЕМВ.

На выходе:                   AX = 000lh -если функция выполнена успешно,

0000h - если произошлаошибка.

Ошибка:                       BL = 80h, 81h.A2h.AAh.

Функция разблокирует ЕМВ, заблокированный при вызове предыдущей функции. Полученный от нее линейный адрес становится недействительным.

Получить информацию об индексе ЕМВ