В этой статье я расскажу вам о почти собственном творении, расширяющим возможности DOS и позволяющим запускать многие консольные и некоторые графические Win32 приложения под DOS. Это - результат симбиоза замечательного DOS-расширителя HX-DOS Extender (http://japheth.de/HX.html) и моих прямых (?) рук. Свой продукт я назвал WineDOS (догадайтесь, по аналогии с чем). Это DOS-расширитель со встроенной поддержкой файлов PE формата. В распакованном виде он занимает около 6 Мб, из которых сам расширитель занимает меньше 100 Кб (остальное - эмуляция WinAPI).
Итак, WineDOS (а также HX-DOS) - это:
- полноценный DPMI сервер
- солидная эмуляция Win32 API, намного превосходящая таковую у других аналогичных продуктов (WDOSX, DosWin32, Phar Lap TNT, Borland PowerPack). Реализованы основные библиотеки: advapi32.dl, kernel32.dll, gdi32.dll, user32.dll, ole32.dll, oleaut32.dll, wsock32.dll, mpr.dll, ntdll.dll и некоторые другие
- поддержка реестра
- буфер обмена
- поддержка звуковых карт (SB16 compatible)
- поддержка сети (на основе WattTCP)
- (!)поддержка DirectDraw и OpenGL приложений
- возможность тырить недостающие DLL у различных винд, а также ReactOS
Пока WineDOS не имеет:
- полноценной поддержки высокоуровневой графики (библиотеки shell32.dll и comctl32.dll пока реализованы лишь частично, поддерживаются лишь несколько функций)
- многооконности, многозадачности (хотя иногда запускать несколько Win32-приложений под DOS можно)
- поддержки драйверов устройств (используйте драйвера под DOS или ОС ReactOS - свободный клон Windows)
- прямой поддержки NTFS (используйте специальные драйвера, к примеру, NTFS4DOS)
В итоге, WineDOS может запускать многие консольные приложения: успешно работают Far (почти не работает в оригинальном HX-DOS), FASM, MASM, BCC, Free Pascal, MinGW, Bochs, Qemu и многие другие. Также поддержка графики позволяет запускать простые OpenGL приложения, DOSBox, Mplayer.
Работа с WineDOS
Скачайте последнюю версию WineDOS с официального сайта http://winedos.ucoz.ru/. Распакуйте архив в любую удобную Вам директорию и пропишите её в переменной окружения PATH. Далее поступите любым удобным Вам способом:
1) Запустите hxldr32.exe. Это крохотный резидент (<1 Кб) будет проверять каждое запущенное приложение на предмет того, не является ли оно Win32-приложением, но откажется устанавливаться, если найдёт следы Windows или OS/2. Чтобы удалить резидент: hxldr32 /u
2) Запустите hxdosld.exe или dpmild32.exe (синтаксис: hxdosld/dpmild32.exe [path]program.exe). Это позволит вам запустить одно данное приложение безо всяких вопросов.
3) С помощью pestub.exe (синтаксис: pestub.exe [path]program.exe) сделайте в данном приложении заглушку, которая сама запустит DPMI сервер и активирует эмуляцию Win32 API.
HDPMI32 (DPMI сервер) занимает около 30 Кб. Этого вполне достаточно, если Вы располагаете достаточным количеством XMS.
Запуск под виртуальными машинами
В описании HX-DOS заявлена работа под MS Virtual PC, Bochs, DOSEmu, VirtualBox, VMWare. Это касается работы консольных приложений. И они действительно работают. В случае с графическими (а также псевдографическими) приложениями дело сложнее: они запускаются далеко не везде. В этом деле всё отлично с VirtualBox, в других эмуляторах (а также DOSBox) они вызывают необработанные исключения (VMWare не тестился).
Многозадачность
Как я уже указал, многозадачности в HX-DOS как таковой нет. Но Вы можете запустить из-под Far, любое другое приложение. Если появится сообщение "DPMILD32 <program>: relocs stripped, cannot load", установите переменную среды DPMILDR=8.
Нерешённые импорты
Если программа требует точку входа, не реализованную в WineDOS, DPMILD откажется запускать программу. Вы можете установить переменную DPMILDR=128 (по непроверенным данным, можно просуммировать различные переменные для достижения суммарного эффекта).
Почему просто не использовать DosWin32?
DosWin32 реализует лишь ограниченное количество функций DPMI 0.9 (цитата из описания: "Общая концепция пакета DosWin32 та же что была у Borland Power Pack,- не столько поддержка dpmi аппликаций (хотя, в какой-то мере, присутствует и она), сколько возможность исполнения win32 console application в "голом" ДОСе."). WineDOS - полностью поддерживает этот интерфейс. DosWin32 имеет закрытый исходный код - вы не можете ничего дописать туда, даже если знаете, как. DosWin32 не имеет возможности добавлять недостающие библиотеки. В резидентном режиме он ест 60 Кб памяти. Единственное весомое его преимущество - сравнительно меньший размер, так что он пригоден для использования в загрузочных дискетах (впрочем, вы можете использовать не все библиотеки эмуляции Win32 API; размер самой базовой эмуляции составляет менее 200 Кб, но Far, скорее всего, не запустится).
Какие отличия от HX-DOS?
- улучшенная эмуляция Win32 API (в некоторых местах она улучшена ощутимо)
- идущая разработка
- некоторые библиотеки, отвечающие за высокоуровневую графику, написаны на Си, а не на ассемблере
- автор проекта доступен для вопросов
Заключение
WineDOS - достаточно новый продукт, и о нём пока мало кто знает. Он вполне пригоден для запуска консольных Windows приложений на старых машинах, где добрая Windows съела бы всю доступную память. Простой пример: Qemu 0.9 не работает под Win 9x, но работает (по описанию HX-DOS) под WineDOS. Я рассчитываю, что этот проект будет полезен даунгрейдерам и простым пользователям.
Официальный сайт: http://winedos.ucoz.ru