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

При использовании переключателя  /MACHINE:c нелишне знать код или номер вашего ПК. Если вы его не знаете (т.е. если ПК не указан в таблице), или его указание не решает проблемы, то придется поэкспериментировать. Для этого лучше перебирать номера ПК в таком порядке: 1, 11, 12, 13, 8, 2-7. 9, 10, 14-16.

После смены кода или номера ПК необходимо перезагрузить DOS. Когда это сделать не удается (система зависает), используйте средства шунтирования команд из файлов CONFIG.SYS и AUTOEXEC.BAT, чтобы отменить обработку команды, обеспечивающей подключение к системе драйвера HIMEM.SYS, После успешной загрузки DOS измените значение в переключателе /MACHINE.

3. Использование драйвера HIMEM.SYS для программирования.

СпецификацияXMS содержит описание программного интерфейса драйвера HIMEM.SYS и рекомендации по использованию областипамяти НМА.

3.1. Проверка подключения драйвера

Первое,что должна сделать программа, которая собирается вызывать драйвер HIMEM.SYS, - проверить,был ли установлен этот драйверпри загрузке операционной системы.

Для этого надо загрузить в регистр АХ значение 4300h и вызвать прерывание INT 2Fh. Если регистр AL будет содержать значение 80h,драйвер установлен, в противном случае - нет. Приведемфрагмент программы, проверяющей подключение драйвера:

Проверяем, установлен ли драйвер HIMEM.SYS:

mov   ax. 4300h

int     2fh

cmp   aI, 80h

je hmm_installed; Выполняем переход, если драйвер установлен.

3.2. Получение адреса управляющей программы

Длявызова драйвера программа должна получитьадрес специальной управляющей программы, котораявыполняет все функции по обслуживанию расширенной памяти и области НМА.

Этот адрес можно получить, если загрузить в регистр АХ значение 4310h и вызватьпрерывание INT 2Fh. Прерывание возвратятсегментный адрес управляющей программы в регистре ES, смещение - в регистре ВХ:

Получаем адрес управляющей функции драйвера

mov     ax, 4310h

int        2fh

mov     word ptr cs:[HMMEntry][0]. bx

mov     word ptr cs : [HMMEntry][2], es

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

3.3. Описание функции драйвера H1MEM.SYS

Все функции драйвера H1MEM.SYS могутбыть разделены на следующиепять групп:

- функции полученияинформации о драйвере (0h);

- функции управления областью НМА (lh, 2h);

- функции управления линией А20 (3h...7h);

- функции управления расширенной памятью (8h,.Fh);

- функции управления блоками UMB (10h,.llh).

Приведемподробное описание этих функций в соответствии со спецификациейXMS версии 2.0.

Получить версию XMS:

На входе                       AH = 00h.

На выходе                    AX = номер версии XMS

BX = номер внутренней модификации драйвера;

DX = 0001h –если существует область HMA;

0000h – если область HMA  не существует

Ошибки:                      Нет

Функция возвращает номера версиии модификации XMS в двоично-десятичном (BCD) формате. Например, если AX=0250h, этоозначает, что драйвер реализует спецификацию XMS версии 2.50. Дополнительнофункция позволяет проверить наличие в системе области НМА.

Запросить область НМА

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

DX = размер памяти в байтах вобласти НМА, которая будет использоваться резидентнымипрограммами или драйверами,обычная программа должна использовать значение DX = FFFFh.

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

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

Ошибки:                     BL = 80h,81h, 90h, 91h, 92h(описание кодов ошибок будет приведенопосле описания всех функций).

С помощью этой функции программа может зарезервировать для себя область НМА. Задаваемый в регистре DX размер памяти сравнивается суказанным в параметре драйвера /HMAMIN=. Область НМА распределяется запросившей программе только в том случае, если запрошенный в регистре DX размер больше или равен указанному в параметре /HMAMIN. Такой механизм позволяет ограничить использование области НМА толькотеми программами, которыеиспользуют ее наилучшим образом,