Иллюстрированный самоучитель по SVGA

Расширенная память (Expanded Memory). Спецификация расширенной памяти.

Очень скоро после начала массового производства IBM PC XT стало ясно, что заложенная в нем возможность работы с адресным пространством в 1 Мбайт является серьезным препятствием для создания все более усложняющегося программного обеспечения. К этому времени технические средства уже позволяли преодолеть барьер 1 Мбайт, но для их использования надо было радикально изменить некоторые фундаментальные концепции, положенные в основу DOS, чего явно не хотели делать ни IBM, ни Microsoft. В то время многие фирмы предлагали различные компромиссные решения в виде аппаратных и программных средств, позволяющих работать с дополнительной памятью без изменения структуры DOS и BIOS.

В конечном итоге только одно из них стало стандартом при работе с дополнительной памятью, не потому, что оно было самым лучшим, а потому что его разработку, массовый выпуск и дальнейшую поддержку взяли на себя такие крупные корпорации, как Lotus, Intel и Microsoft.


Спецификация расширенной памяти (Expanded Memory Specification или EMS) содержит перечень требований к оборудованию, предназначенному для работы с дополнительным пространством адресов ОЗУ, и совокупность правил, которых надо придерживаться при работе с этим оборудованием. Если в ПК используется микропроцессор Intel 386 и выше, то необходимое оборудование заведомо существует и нет необходимости в приобретении и установке каких-либо дополнительных устройств. В данном разделе нас будет интересовать возможность его использования.

Основная концепция EMS

Дополнительная память занимает физические адреса от дооооь и далее вплоть до верхнего предела. Если на ПК установлено 16 Мбайт ОЗУ, то последнему байту соответствует физический адрес OFFFFFFh. Напомним, что для DOS и BIOS последний физический адрес ОЗУ равен 9FFFFh, а адреса от одооооь до OFFFFFh к оперативной памяти не относятся. Таким образом, при работе в DOS прямой доступ к расширенной памяти невозможен и применяется косвенный доступ.

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

Системные и прикладные задачи получают доступ к расширенной памяти, издавая специальные команды, которые исполняет менеджер. В соответствии с идеологией DOS и BIOS они оформляются в виде программных запросов.

Впервые EMS была опубликована сразу в виде версии 3.0 в 1985 году, в ее подготовке приняли участие только Lotus и Intel. Примерно в это же время Microsoft в связи с разработкой Windows заинтересовалась EMS и принимала активное участие в разработке ее последующих версий. В 1987 году была опубликована версия 4.0, которая предусматривала возможность размещения и выполнения нескольких задач в расширенной памяти. Автору неизвестно существование более поздних версий EMS, но для изложения материала это не существенно, т. к. соблюдается строгая преемственность версий и то, что описано в данном разделе может использоваться в ваших программах.

Менеджер расширенной памяти (Expanded Memory Manager или EMM) оформлен в виде драйвера, который располагается в оперативной памяти при загрузке DOS и остается резидентным до выключения ПК. Обычно его имя EMM386.EXE, оно обязательно указывается в файле config.sys, например, так:

DEVICE = C:\DOS\EMM386.EXE

В данном случае предполагается, что файл ЕММ386.ЕХЕ расположен на диске С, в каталоге DOS. Драйвер многофункциональный, поэтому после его имени в командной строке могут указываться параметры, которые используются при загрузке. Описание всех параметров вы найдете в файле HELP, входящем в комплект DOS.

Важно
Один из параметров, а именно NOEMS запрещает поддержку описываемых ниже функций драйвера, поэтому его указание в командной строке недопустимо
.

EMS 4.0 исполняет 30 различных функций, разделенных на три группы: стандартные (standard), расширенные (advanced) и для многозадачных режимов (os). Нас будут интересовать только стандартные функции, необходимые для работы с данными, расположенными в расширенной памяти, их всего 7. Описание остальных функций вы найдете в TECH HELP или в специальной литературе по работе с DOS.

Доступ к драйверу осуществляется через прерывание int 67h. Перед выдачей запроса код функции помещается в регистр ah (старший байт регистра ах). Регистр ai используется либо для уточнения запрашиваемой функции (для advanced и os), либо для указания параметров функции. В случае успешного исполнения запроса EMM возвращает в регистре ah 0, а случае неудачного – 1.

EMS 4.0 фиксирует 36 различных ошибок, им присваиваются коды от 80п до ОА4п включительно. Полный список ошибок содержится в TECH HELP, некоторые из них будут названы при описании функций. Ошибки возникают по разным причинам. На стадии отладки они, чаще всего, вызваны некорректностью программы. Если корректность программы не вызывает сомнений и задача неоднократно выполнялась успешно, то имеет смысл посмотреть, какие параметры EMM386 заданы в файле config.sys. Например, если указан параметр NOEMS, то при запросах памяти обязательно будет возникать "внутренняя ошибка EMM драйвера", имеющая код еоь.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.