                      Zurenava DOS extender(ZRDX).
            DOS4GW совместимый расширитель ДОС, бета версия 0.50.
       Copyright(C) 1998-1999 by Sergey Belyakov(S.Belyakov@chat.ru).
                    Homepage:http://www.zrdx.da.ru
   maillist: http://zrdx.listbot.com, mailto:zrdx-subscribe@listbot.com
    (анонсы новых версий, оперативная информация о найденных ошибках).

  ZRDX версии 0.50 распространяется как freeware и может свободно копироваться
и использоваться в любых целях, как некоммерческих, так и коммерческих. На
разработку и использование программых продуктов на основе ZRDX, созданных
путем модификации и/или дополнения оригинальных исходных текстов или двоичного
кода ZRDX не накладывается никаких ограничений.
  Все права на исходные тексты ZRDX принадлежат автору, Сергею Белякову.
  ZRDX предоставляется "как есть". Автор не гарантирует, что ZRDX не содержит
ошибок и не несет никакой ответственности за ущерб, понесенный кем-либо в
связи с использованием или неиспользованием ZRDX.

                Краткое описание назначения и возможностей.
  zrdx может использоваться для исполнения программ, разработанных для
dos4gw, pmode/w, dos32a, wdosx с использованием компиляторов Watcom C++,
TMT pascal, LadSoft C, и т.п. Исполняемому под zrdx приложению доступны
вся физическая память(до 4G), все функции dpmi(int 31h) в точном соответствии
со спецификацией dpmi 0.9, за исключением фукнкций 0A00h-0B03h. Дос
расширитель обеспечивает трансляцию всех функций, которые транслирует pmode/w,
за исключением идентификации, и почти всех, которые транслирует dos4gw.
Если Вы используете только стандартные библиотеки, то поддерживаемых функций
достаточно для нормальной работы, а если непосредственно вызываете ДОС, то
полный список транслируемых функций и методов трансляции можно посмотреть
в исходном файле src/extender.asm.
  Для упаковки исполняемых модулей рекомендуется использовать упаковщик upx,
который значительно эффективнее pmwlite.

                    Как пользоваться утилитой ZRXBIND.
  Расширитель ДОС zrdx - это программа, которая присоединяется к началу
основного модуля, после запуска она переключается в защищенный режим, и
загружает в нем основной модуль. Так же работают DOS4GW и другие подобные
ДОС расширители.
Чтобы присоединить zrdx к уже скомпонованной программе, необходимо использовать
zrxbind c ключами -r или -c. С ключом -r(replace) zrxbind замещает старый stub
на свой и делает страховочную копию(если нет ключа -n). С ключом -c(copy)
zrxbind копирует указанную программу в новый файл, замещая stub в новом файле
и оставляя старый неизмененным.
Например:
  "zrxbind -r -n doom.exe" присоединяет zrdx к файлу "doom.exe", не делая
страховочной копии.
  "zrxbind -c doom.exe doomz.exe" создает файл "doomz.exe", присоединяя к нему
zrdx, и оставляет файл "doom.exe" без изменений.

  Чтобы присоединять stub zrdx к программе на этапе компоновки, его
необходимо вытащить из zrxbind. Для этого следует воспользоваться ключом -w.
Например, команда "zrxbind -w zrdx.exe" запишет stub в файл "zrdx.exe" и
его можно будет присоединять, указав для компоновщика wlink
option stub=zrdx.exe.

                     Утилита ZRXSETUP и ее опции.
   zrxsetup предназначен для дополнительного конфигурирования ДОС экстендера.
Список ключей можно получить, запустив zrxsetup /?.
Параметр определяет имя файла с прибинденным zrdx или сам stub, который
необходимо отконфигурировать. Если ни один дополнительный ключ не указан, то
zrxsetup выдает сообщение о текущей конфигурации. Если ключи указаны, то
после того же сообщения пишется, какие параметры и как были изменены и новое
значение сохраняется в файле.
Описание ключей:
/X<hex number> - максимальный размер размещаемой памяти в режиме raw/xms.
  Так как xms/raw интерфейс не позволяет нормально менять объем памяти "на
  ходу", то по умолчанию zrdx захватывает всю доступную память. Если
  программа после этого запустит другую, то расширенная память будет ей не
  доступна. Поэтому для оптималного выполнения exec следует оценить
  максимальный требуемый объем памяти, и указать его этим параметром.
  В режимах vcpi и dpmi данная проблема на возникает. В vcpi zrdx захватывает
  страницы только по мере требования памяти клиентом, а в dpmi все это
  определяется dpmi сервером.
/L<hex number> - определяет сколько нижней памяти нужно оставить свободной.
  При инициализации dpmi сервера zrdx вся остальная доступная память будет
  наравне с расширенной подключена к общему пулу памяти dpmi сервера. Таким
  образом, уменьшение этого параметра ведет к увеличению общего объема памяти,
  доступной клиенту. Если приложению требуется выполнять exec, лучше оставить
  данный параметр в максимальном значении(0F000h). Если же exec не нужен, то
  его можно установить в соотвествии с тем объемом нижней памяти, который
  дополнительно нужен программе(напремер, выделяется через int 31h, ax=100h).
  Минимальное значение - 0. Минимизация этого параметра позволит нормально
  исполнять небольшие программы даже при полном отсутствии расширенной памяти.
/T<hex number> - определяет длину буфера обмена дос-экстендера.
  Так как дос может работать только с нижней памятью, а параметры расширенных
  функций могут находиться где угодно, для передачи таких параметров между
  дос и приложением используется специально выделенный буфер обмена.
  Так, при чтении файла дос-экстендер может разбить одно длниное чтение на
  несколько коротких и после каждого копировать буфер обмена в
  соответствующую область буфера, заданного клиентом. Чем длинее буфер обмена,
  тем меньше чтений потребуется. Таким образом, увеличение длины буфера обмена
  позволяет несколько ускорить "длинные" дисковые операции, но в тоже время
  уменьшает объем свободной нижней памяти.
/M<1/0> - порядок детектирования интерфейсов защищенного режима,
  0 - dpmi/vcpi/xms/raw, 1 - vcpi/dpmi/xms/raw.
  По стандарту рекомендуется первый вариант(то есть отдавать предпочтение
  dpmi), однако на практике некоторые dpmi сервера отличаются повышенной
  глюкавостью или, например, предоставляют vmm в то время, как она совсем
  не нужна и мешает. Поэтому большинство дос-экстендеров, включая dos4gw,
  отдают предпочтение vcpi(если он есть, конечно).
/B<1/0> - позволяет включить/выключить выдачу копирайт баннера при старте
  дос экстендера. Комментарии излишни; баннеры - давить:).

  Вы, возможно обратили внимание, что параметров намного меньше, чем в
pmode/w или dos32a. Это объяснеятся в основном тем, что ядро zrdx гораздо
в большей степени способно к динамической конфигурации. Так, по пунктам:
- zrdx динамически выделяет место под страничные таблицы(и основную память
  тоже) в vcpi режиме по мере запроса памяти клиентом. Причем страничные
  таблицы размещаются только в верхней памяти и общий объем адресуемой памяти
  достигает 4 гигабайт.
- zrdx динамичеки выделяет страницы под мэппинг физического пространства
  на линейное(при наличии свободной памяти, разумеется). Общий объем такого
  мэппинга может достигать 4 гигабайт, при наличии 4 мегабайт свободной
  памяти.
- zrdx динамически выделяет место под LDT. При старте под LDT отдается
  одна страница(511 селекторов), далее, если потребуется больше селекторов,
  LDT будет дополняться новыми страницами до 8191 селекторов.
- zrdx использует принципиально другую систему управления стеками, и не
  нуждается в их точной настройке. Единственно, что можно было бы настраивать,
  это общий объем сопряженного дос стека(он нужен только один), однако 512
  байт по умолчанию для этого более чем достаточно.
- Можно было бы настраивать число real mode callback, однако если программа
  требует их более 20, она не будет работать в режиме dpmi, так как
  большинство dpmi серверов предоставляют именно 20 real mode callbacks.

                      Назначение файла VMM.ASM.
  При желании можно собрать экспериментальную версию с поддержкой vmm.
Для этого надо в файле segdefs.asm закомментировать строчку Release = 1 и
раскомментировать VMM=1. Эта система не доработана, так, не поддерживается
освобождение страниц под vcpi, поэтому запускать ее следует только в режиме
raw/xms. Кроме того не реализована функция разблокировки страниц, и не вполне
правильная работа со своп-файлом(его нужно переоткрывать при каждом изменении
длины и удалять при завершении). По скокрости vmm работает не хуже, чем в
dos4gw.
