Об PMODE/W
PMODE/W позволяет программам DOS выполняться в полном защищенном
32-битном режиме, с доступом ко всей памяти, имеющейся в системе.
PMODE/W в основном расширяет среду DOS для защищенного режима и
обеспечивает простой интерфейс к реальному режиму системных служб
DOS для вашего кода. PMODE/W заботится о всех аспектах работы системы
в защищенном режиме и поддержании совместимости с основным программным
обеспечением реального режима. PMODE/W имеет дело с потребностями
низкого уровня типа дескрипторных таблиц, управления памятью, IRQ и
переназначения прерывания, функций перевода режима реальный/защищенный,
обработки исключения, и других разных аспектов выполнения в защищенном
режиме. Ваш код не должен иметь дело с определенными аспектами
различных систем, типа XMS/EMS/VCPI/DPMI доступности. PMODE/W
выполнится на вершине почти любой системы и обеспечит общие функции
защищенного режима в вашей программе через спецификацию интерфейса
DPMI, также как большинство стандартных функций DOS расширяются для
использования защищенного режима.
PMODE/W - stub и расширитель в один. Генерируемый исполняемый код
содержит PMODE/W расширитель в пределах этого как stub. Когда
выполняется программа, PMODE/W будет заботиться об установке системы
и выполнения части защищенного режима программы. Несколько лет ушли на
развитие PMODE/W. Теперь это довольно приличный расширитель DOS, и в
прошлом остались дефекты и несовместимость. В настоящий момент это
очень устойчивая система защищенного режима. Большие усилия приложены
для оптимизации и испытаний PMODE/W. Наши главные цели были скорость,
размер и стабильность. Мы теперь чувствуем, что мы достигли большого
количества тех вещей. Но не берите наше слово для этого, пробуйте это
непосредственно, поскольку Вы можете делать это очень легко прежде,
чем Вы фактически решаете покупать PMODE/W. Только включите PMODE/W в
любую популярную программу там, которая использует DOS/4GW.
В заключение, если Вы ищете хорошую устойчивсть и быстрый расширитель,
PMODE/W, может быть тем, в чем Вы нуждаетесь.
Здесь преимущества PMODE/W:
Внешний расширитель не требуется (все необходимое для выполнения не
находится в EXE). Небольшой размер (меньше чем 12КБ для полной
программы расширителя). Сжатие защищенного режима выполняется. Нижняя
расширенная память наверху. Не требуется НИКАКАЯ расширенная память
для загрузки ИЛИ выполнения. Быстрое выполнение.
Наши главные цели в развитии PMODE/W были скорость, размер и
стабильность. Сам PMODE/W был написан полностью на Ассемблере. При
выполнении под PMODE/W, ваш код будет выполняться на уровне привилегии
ноля, самый высокий и самый быстрый. PMODE/W не делает "виртуализацию",
это не требуется, т.к. не вызывает никакой механизм защищенного режима,
который является медленным. Например, если система выполняется чисто
или под XMS, PMODE/W не включает перелистывание. Под менеджером
памяти, который обеспечивает и VCPI и DPMI услуги, PMODE/W выберут
VCPI защищенный режим, который является знчительно быстрее чем DPMI.
Когда PMODE/W делает запросы к реальному режиму, он переключает
систему в фактический реальный режим скорее чем более медленный режим
V86 (когда он под VCPI, это невозможно, может управлять, нужно пройти
назад на VCPI сервер). В терминах скорости, когда ваш код выполняется
под PMODE/W, он выполняется с такой скоростью как позволяет система. В
терминах размера на диске, мы должны говорить не больше, чем для Вас,
что смотрели на размер PMODE/W выполнимого и сравнили это с другими
расширителями. В терминах размера памяти, Вы можете делать испытания
самостоятельно, чтобы подтвердить, что PMODE/W действительно занимает
намного меньше память во время выполнения чем другие. Фактически,
PMODE/W выполнится, даже если нет абсолютно никакой расширенной памяти
в системе (предположительно конечно есть достаточно низкой памяти для
программы). Чтобы быть справедливым, мы должны говорить, что мы
хлюпали PMODE/W выполнимый с нашей собственной программой сжатия,
написанной явно для цели. Это демонстрирует степень, к которой мы
брали большинство нашей оптимизации.
Когда выполнено под чистой системой, XMS, или VCPI, PMODE/W имеет
управление защищенным режимом. В этом случае он может устанавливать
систему, чтобы выполниться с такой скоростью как возможно при
различных состояниях. Под DPMI, DPMI хост системы будет иметь полное
управление защищенного режима, и PMODE/W установит его расширения DOS
на вершине этого. Если система предусматривает и VCPI, и DPMI услуги,
PMODE/W будут использовать VCPI услуги для более быстрого выполнения,
если не проинструктировано не в соответствии с программой установки.
Когда PMODE/W имеет управление защищенного режима под clean/XMS/VCPI,
он выполняет весь код на уровне привилегии ноля. Кроме того, под
чистой или XMS системой, листание не будет допускаться. Это - только
незначительное увеличение скорости, но нет никакой реальной
потребности управлять листанием.
PMODE/W предусматривает поднабор DPMI 0.9 функциональными запросами и
общими функциональными возможностями, когда DPMI хост не существует.
PMODE/W передаст любые программные прерывания с защищенного режима на
их заданные по умолчанию обработчики реального режима, если никакие
обработчики защищенного режима не были установлены для них, также,
как DPMI будет. Общие регистраторы будут переходить, обработчик
реального режима, но регистраторы доли не может быть то, поскольку
они имеют различные значения в реальном режиме и защищенном режиме.
Флажки будут пропускать назад от обработчика реального режима. Это
обеспечивает простой интерфейс ко всем рутинам прерывания реального
режима, которые не берут параметры в регистраторах доли, например,
INT 16-ая функция 00-ая.
Любой IRQs, которые происходит в защищенном режиме и не был сцеплен
обработчиком защищенного режима, будет пересылаться на их обработчики
реального режима. Если IRQ происходит в реальном режиме, и обработчик
защищенного режима сцепил это IRQ, это будет послано обработчику
защищенного режима сначала. Обработчик защищенного режима может
цепочка на обработчик реального режима для этого IRQ, вызывая
предыдущий обработчик защищенного режима для этого IRQ. Это поведение
- в соответствии с DPMI стандартом. Если Вы подключаете защищенный
режим IRQ (INT 31h функция 0205-ая), то подключаете тот же самый IRQ
в реальном режиме (INT 31h, функция 0201h), обработчик защищенного
режима будет называться, если IRQ происходит в защищенном режиме, и
обработчик реального режима обработает IRQs, если они происходят в
реальном режиме. Установка двух обработчиков подобно этому ручается
минимальному времени ожидания. Это означает, что обработчик получит
управление, когда IRQ происходит как только физически возможный.
PMODE/W должен вмешаться в процесс IRQ, однако, когда низкий 8 IRQs
отображены к INTs 08-ому 15-ому, чтобы дифференцировать IRQs от
исключений ЦЕНТРАЛЬНОГО ПРОЦЕССОРА.
В соответствии с DPMI спецификациями, PMODE/W упустит программные
прерывания 1ch (импульс сигнала времени таймера BIOS), 23-ый (DOS
CTRL+C), и 24-ый (DOS критическая ошибка) от реального режима до
защищенного режима. Это означает, что те прерывания могут быть
сцеплены непосредственно в защищенном режиме без того, чтобы иметь
необходимость устанавливать механизм отзыва самостоятельно. PMODE/W
также передаст прерывание 1bh (BIOS CTRL+BREAK) от реального режима
до защищенного режима. Это - не DPMI требование, но это необходимо
ради совместимости с DOS/4GW. Другой отъезд PMODE/W от официальных
DPMI спецификаций находится в расширенном распределении памяти. DPMI
документация заявляет, что блок расширенной памяти, распределенной
через функцию 0501h гарантируется по крайней мере выравнивание
параграфа. PMODE/W DPMI выполнение предпишет только DWORD выравнивание.
Когда PMODE/W выполнимый выполнен, PMODE/W будет пытаться переключать
систему в защищенный режим и загружать часть защищенного режима тот
же самый выполнимый. Если есть некоторая ошибка, не, достаточно
памяти, или системной несовместимости, PMODE/W выйдут с сообщением об
ошибках. Если загрузка была успешна, PMODE/W передаст управление
выполнения к программе. PMODE/W загрузит любой код на 16 битов и
данные в низкую память, но код на 32 бита и данные могут быть
загружены в низкую или расширенную(продленную) память в зависимости
от пригодности(доступности).
Есть множество поддающихся изменению параметров в PMODE/W расширителе
выполнимый, которые затрагивают выполнение защищенного режима.
Главным образом, эти параметры имеют дело с памятью. PMODE/W
распределяет один большой блок расширенной памяти для ее объединения,
от которого это обеспечивает память ее программе клиента. Есть
максимальное значение для расширенной памяти, которая будет
распределена. По умолчанию, максимум - вся расширенная память в
системе. Максимальное значение отражает размер блока, Вы хотите,
ЧТОБЫ PMODE/W брал от системы, не обязательно размер самого большого
блока, доступного заданным по умолчанию процедурам GetMem. Вы можете
устанавливать максимум на ноль, чтобы указать, что Вы не хотите,
ЧТОБЫ PMODE/W распределил ЛЮБУЮ расширенную память. Объем памяти,
который Вы позволяете PMODE/W распределять от системы, определяет,
сколько расширенной памяти будет оставлена к другому если Вами
оболочкой из вашей программы PMODE/W.
Другая переменная определяет количество низкой памяти для PMODE/W,
чтобы ПРОБОВАТЬ продолжить свободной(бесплатной). Если PMODE/W может,
это, чтобы приспособил(разместил) это значение, загружая код на 32
бита и данные в расширенную(продленную) память. Если нет достаточно
расширенной(продленной) памяти, доступной для, это, код на 32 бита и
данные будут загружены в низкую память так или иначе. Если PMODE/W не
может сохранять эту большую низкую память свободный(бесплатный), это
не будет выходить с сообщением об ошибках. Установка этого параметра
для высокого значения, в действительности, дублирует DOS/4GW поведение
загрузки всего кода на 32 битов и данных в расширенную(продленную)
память. Если Вы не обязательно нуждаетесь в любой дополнительной
низкой памяти, свободной(бесплатной) в течение выполнения вашей
программы, Вы можете устанавливать это значение на ноль.
Есть группа параметров, которые определяют номер(число) и размер
вложенных стеков выключателя режима. Всякий раз, когда Вы делаете
запрос к реальному режиму, или отзыв или IRQ пропускают от реального
режима до его рутины в защищенном режиме, вложенный стек используется.
Эти параметры имеют значение, только если программа не выполнена под
DPMI системой. Если DPMI хост находится в месте, когда программа
выполнена, это обеспечивает(предусматривает) ее собственные вложенные
стеки для выключателей режима. Номер(число) вложенных стеков
непосредственно затрагивает номер(число) вложенного режима,
переключает вашу программу, может делать использование различных
методов выключателя режима. Размер и реального режима и защищенного
режима вложил стеки, может также быть определен. По умолчанию, эти
значения достаточно высоки для нормальной операции. Однако, если Вы
намереваетесь использовать много переменных стека в защищенном режиме
IRQ обработчик, или много рекурсивных обращений, Вы должны увеличить
размер защищенного режима вложенные стеки. Чем более вложенные стеки,
которые Вы определяете, и чем больший, они, тем более низкая память
необходима PMODE/W в течение выполнения.
Другая группа переменных, который имеет значение только при
clean/XMS/VCPI выполнении, определяет номер(число) отборщиков и DPMI
отзывов, которые Вы хотите, ЧТОБЫ PMODE/W делал доступным. Чем большее
количество отборщиков и отзывов, которые Вы спрашиваете относительно,
тем более низкая память, используется PMODE/W, хотя количество низкой
памяти, используемой для каждого весьма низко так, чтобы большие
номера(числа) каждого могли быть определены. Будет обычно немного
меньше чем номер(число) отборщиков и отзывов, которые Вы запрашиваете
доступный вашей программе из-за системы защищенного режима и кода
Паскаля, используя некоторых из них. По этой причине Вы должны
запросить 20-ое 40-ое большее количество отборщиков, и еще 2-4 отзыва
чем Вы будут нуждаться в вашей программе.
Есть четыре других разных параметра, которые могут быть установлены.
Есть максимальный номер(число) таблиц страницы, чтобы использовать
под VCPI системой. Каждая распределенная таблица страницы требует
4КБ низкой памяти, которую нужно использовать PMODE/W и картами 4M
памяти. Это непосредственно затрагивает максимальное количество
расширенной(продленной) памяти, доступной под VCPI системой. Этот
параметр - только максимальный номер(число) таблиц страницы, чтобы
позволить. Во время выполнения, только так много таблиц страницы
будут распределены, как необходимы. Под clean/XMS системой, никакие
таблицы страницы не требуются, так что этот параметр не имеет
никакого значения. Но под VCPI, Вы можете хотеть ограничить
номер(число) таблиц страницы, чтобы сохранить низкую память, если Вы
не нуждаетесь в больше чем некоторое количество расширенной памяти.
Это помещает максимальный потолок в расширенную(продленную) память
под VCPI, который может быть более низок чем максимум, фактически
указанный в другой переменной. Второй параметр определяет
заказ(порядок) DPMI и VCPI обнаружения. По умолчанию, VCPI будет
проверен, прежде DPMI, но Вы можете заставлять DPMI быть проверенными
прежде VCPI так, чтобы под системой, которая поддерживает и VCPI и
DPMI, DPMI использовались. Третья переменная определяет сколько
страниц, чтобы резервировать для физического адреса, отображающего
запросы (INT 31h функцию 0800-ую) под VCPI. Под XMS или чистой
системой, листание не допускается, и PMODE/W не нуждается в страницах
для физического отображения адреса. Каждая страница позволит Вам
отображать до 4M адресного пространства и принимает(берется) за 4КБ
расширенной(продленной) памяти. Так например, если Вы намереваетесь
отобразить 2M буфер рамки(фрейма) видео карты, Вы будете нуждаться
только в одной странице. Вы можете устанавливать этот параметр для
ноля, если Вы не намереваетесь отобразить любые физические адреса.
Четвертый параметр определяет, отображает ли PMODE/W его баннер при
запуске. Это может быть желательно указать, что программа
действительно выполняется, и не потерпела крах, как распределение
памяти от некоторых VCPI серверов может быть медленный процесс.