16.7. Модуль Overlay
Модуль Overlay предназначен для организации оверлейных программ, которые загружаются и перезагружаются в оперативную память отдельными частями - секциями. Отдельные оверлейные части программы должны быть оформлены как отдельные модули, причем в них необходимо использовать ключ компилятора {$0+}. Кроме этого необходимо предусмотреть, чтобы при вызове оверлейных процедур и функций все активные в этот момент подпрограммы имели "дальнюю" адресацию (для этого следует использовать ключ компилятора {$F+}. Подключение оверлейных модулей к основной программе помимо стандартного использования раздела uses должно содержать ключ компилятора {$0 unitname} с указанием имени оверлейного модуля.
В версии 7.0 введено понятие "испытательной" области, выделяемой в конце оверлейного буфера. Если оверлейная секция попадает в эту область, проверяется, были ли обращения к подпрограммам этой секции. Если таких обращений не было, при необходимости эта секция выбрасывается, а вместо нее записывается другая. Если же обращения были, то секция не выбрасывается, а ставится в конец очереди на удаление, а удаляется какая-либо другая секция. В предыдущих версиях этот механизм не действовал (предполагался размер "испытательной" области равный нулю).
В модуле Overlay имеется один стандартный процедурный тип
type OvrReadFunc=function (OvrSeg: Word): Integer;
Этот тип можно использовать для того, чтобы создавать функции анализа работы с оверлеями. Здесь OvrSeg - номер загружаемого оверлея.
Таблица 41. Константы модуля Overlay
Имя |
Значение |
Назначение |
Коды ошибок |
ovrOk
ovrError
ovrNotFound
ovrNoMemory
ovrlOError
ovrNoEMSDriver
ovrNoEMSMemory |
0
-1
-2
-3
-4
-5
-6 |
Успешное выполнение
Ошибка в управлении оверлеями
Отсутствие оверлейного файла
Недостаточно памяти для оверлейного буфера
Ошибка при чтении оверлейного файла
Не найден драйвер расширенной памяти
Недостаточно расширенной памяти |
Модуль Overlay использует также переменные модуля System (см. табл. 9).
Таблица 42. Переменные модуля Overlay
Имя |
Значение |
Назначение |
OvrResult
OvrTrapCount
OvrLoadCount
OvrFileMode
OvrReadBuf |
Integer
Word
Word
Byte
OvrReadFunc |
Результат обращения к процедурам и функциям, работающим с оверлеями (см. табл. 41)
Счетчик числа обращений к диспетчеру оверлея (первоначально равен нулю)
Счетчик числа загрузок оверлеев (первоначально равен нулю)
Характеристика способа работы с оверлейным файлом (первоначально используется только для чтения)
Адрес функции проверки результата оверлейной операции |
Таблица 43. Процедуры и функции модуля Overlay
Имя |
Назначение |
Процедуры |
OvrClearBuf
Ovrlnit
OvrlnitEMS
OvrSetBuf
OvrSetRetry |
Очистка оверлейного буфера
Инициализация диспетчера оверлеев и оверлейного файла
Загрузка оверлейного файла в расширенную память
Задание размера оверлейного буфера
Задание "испытательной" области |
Функции |
OvrGetBuf
OvrGetRetry |
Получение размера оверлейного буфера
Получение размера "испытательной" области |
Далее в алфавитном порядке описаны процедуры и функции модуля Overlay.
|