логическую страницу, в то время как содержимое остальных физических страниц останется неизменным. Замечу, что любая физическая страница может быть связана с любой логической страницей, т.е. одна и та же ло — гическая страница при необходимости может отображаться в двух, трех или даже во всех четырех страницах окна одновременно. Если какая-либо физическая страница останется не связанной ни с одной логической, EMM блокирует доступ к странице: при чтении из нее любой байт будет содержать код $FF (255) и запись по любому байту в пределах несвязанной страницы не меняет этого значения.

Уничтожить дескриптор EMM и освободить память

Вход: АН = $45;

DX — дескриптор.

Функция $45 уничтожает дескриптор и освобождает связанные с ним логические страницы. Не забывайте вызывать эту функцию в конце работы с EMS— памятью, так как в отличие от кучи отображаемая память не освобождается автоматически в момент завершения работы программы! Более того, я настоятельно рекомендую перехватить процедуру выхода (как это сделать см. в гл.2) и в новой процедуре при необходимости сделать вызов этой функции, так как программа может завершиться аварийно и выделенная дескриптору (дескрипторам) память будет потеряна для остальных программ впредь до перезагрузки ДОС. Этот прием избавит Вас от дополнительных хлопот при отладке программы.

Дать номер версии EMM

Вход: АН = $46. Выход: AL — номер версии в двоично—десятичном формате.

С помощью функции $ 4 6 программа может получить номер версии того EMM, с которым она работает в данный момент. Если Вы собираетесь писать коммерческую программу, такая проверка будет весьма кстатИг так как описываемые ниже функции $4F. . .$58 доступны Только для версии 4.0 и недоступны в ранних. После возврата из этой функции регистр AL содержит номер версии в двоично—десятичном формате: старший полубайт — первую цифру, младший — вторую. Например, для версии 4.0 в регистре содержится $40=64, а для более ранней версии 3.2 — $32'=50.

Сохранить/восстановить картирующий контекст

Вход: АН = $47 — сохранить контекст;

= $48 — восстановить контекст;

DX = дескриптор.

Функции $47 и $48 используются в ситуациях, когда нужно временно сохранить текущую карту страниц. Такие ситуации могут возникнуть, например, перед вызовом процедур, использующих Тит же самый дескриптор. Вызовы функций $47 и $48 должны быть парными. Это означает, что если Вы для одного и того же дескриптора дважды подряд попытаетесь вызвать функцию $47 без промежуточного вызова функции $48, это