                                                                     运行	GUI扩展	开发32位	开发16位    资源
v2.16，稳定	11/16/2009	HXRT	HXGUI	HXDEV	HXD16	HXSRC
v2.17，发布候选人	2014年5月1日	HXRT	HXGUI	HXDEV	HXD16	HXSRC
                                                           密码：japheth
重要说明：HXRT217.zip必须受密码保护，因为某些防病毒程序不喜欢文件包中包含的文件DKRNL32.DLL（Win32仿真dll）

EXTRSECT	V1.3	binary (Win32)






A. About HX DOS-Extender
HX DOS-Extender是一个免费的DOS扩展程序，内置Win32 PE文件格式支持。通常，DOS扩展器的目的是使保护模式功能可用于DOS应用程序。HX完全支持这一目标，但更进一步。Win32 API仿真层是HX的一部分，允许许多Win32控制台应用程序在DOS中运行。这种仿真远远超出了其他扩展器（Borland的PowerPack，WDOSX或Phar Lab TNT）的类似方法。此外，HX实现 - 限制 - 支持Windows，DirectDraw，GDI甚至OpenGL图形。这允许在DOS中运行“简单”的Win32 GUI应用程序。 
 
许多支持创建Win32控制台应用程序的开发环境都与HX兼容，其中包括：
Open Watcom C++
Digital Mars C++
MinGW (uses GCC)
CygWin (uses GCC)
MS Visual C++, including the free version of MS Visual C++ Toolkit 2003
Borland C++, including the free version of C++ Builder Command Line Tools
LADSoft CC386
Pelles C
LCC-Win32 (C compiler)
Borland Delphi
Free Pascal (Win32)
Pascal Pro
Virtual Pascal (Win32)
FreeBasic (Win32)
PowerBasic
MicroFocus Object Cobol
XDS Modula II
JWasm, Masm, Tasm, Poasm, Wasm, Fasm, Lzasm, Nasm, Goasm, ...
由于HX的内置Win32仿真非常成熟，因此大多数编译器/汇编器也将在普通DOS中与HX一起运行。 
 
适用于创建HX PE二进制文件的其他工具包括：
DJGPP（使用GCC）
HX由
HXRT，HX DOS扩展程序运行时
HXGUI，HX DOS扩展程序GUI扩展
HXDEV，HX DOS扩展程序开发人员支持
HXSRC，HX DOS扩展源

 
B. HX运行时
扩展程序运行时包括执行32位DOS扩展应用程序所需的所有文件。这些是：
DPMI服务器HDPMI。仅用于普通DOS。
PE文件加载器DPMILD32
Win32 API仿真dll（DKRNL32，DUSER32，DADVAPI，...）
辅助工具HXLdr32和PEStub
如果您只想在DOS中运行某些Win32控制台应用程序，则无需关心这些二进制文件，因为大多数二进制文件都是在需要时自动加载的。在纯DOS中激活HX的Win32支持所要做的一件事是运行HXLdr32，这是一个很小的DOS TSR。
关于HDPMI
HDPMI是一个免费的DPMI服务器。它的特点是：
完全支持DPMI V0.9
大多数DPMI V1.0功能也都实现了
客户端地址空间可能高达4088 MB
没有物理内存使用限制，支持4 GB
包括完整的DOS API翻译服务
支持32位和16位客户端
服务器的DOS内存使用率低于13 kB，包括一个8 kB的转换缓冲区
与Bochs，Qemu，DosBox，VMWare和VirtualBox兼容。Virtual PC 2007需要修改后的HDPMI版本，可在此处下载
有关详细信息，请参阅HDPMI的自述文件。 
 
关于DPMILD32
DPMILD32是将二进制文件加载到内存所需的PE文件加载器。它不仅限于HX扩展应用程序，也可用于将标准Win32控制台应用程序加载为DPMI客户端，前提是应用程序调用的所有Win32函数都包含在仿真层中。 
 
查看dpmild32.txt了解更多详情。 
 
Win32 API仿真
HX运行时包中包含的Win32 API仿真包括：
DKRNL32.DLL：模拟KERNEL32.DLL
DADVAPI.DLL：模拟ADVAPI32.DLL
DUSER32.DLL：模拟USER32.DLL
DGDI32.DLL：模拟GDI32.DLL
DDDRAW.DLL：模拟DDRAW.DLL
OLE32.DLL和OLEAUT32.DLL
DPMILD32将提供模块名称的转换，因此，如果PE可执行文件引用了KERNEL32.DLL，则DPMILD32将尝试通过加载DKRNL32.DLL来解析这些导入。这意味着任何能够创建Win32控制台应用程序的开发工具很可能与HX DOS扩展器兼容。在win9x或winxp等Win32操作系统下运行时，这些控制台应用程序作为真正的Win32应用程序执行，并且既不加载DPMILD32也不加载Win32 API模拟dll。这些仅在Non-Win32环境（即纯DOS，DOSEmu，Windows 3.1或OS / 2 Dos框）中需要，并且有两种方法可以激活Win32仿真： 
 
HXLdr32: this is a TSR program which will hook DOS interrupt 21h and check all programs to be launched if they are PE binaries. If this is true, DPMILD32 will be started to run the program. This approach is the recommended one because no binaries have to be modified. HXLdr32 will refuse to install itself if there is already support for PE file loading, as it is the case in win9x/winxp DOS boxes.
PEStub: this tool can be used to change the MZ stub of PE applications which under plain DOS displays a message like "This program requires Windows" or something similiar. The new stub, which will gain control in plain DOS only, will load DPMILD32 to run the binary as DPMI client. The stub's size is only 512 bytes, so the total size of the binary won't increase too much.
如前所述，HX支持简单图形（GUI）应用程序。这些可以使用Win32 GDI或DirectDraw作为输出，两者都可以使用HX。与Win32控制台应用程序一样，GUI应用程序将在Win32环境中作为Win32进程运行，仅在DOS中它们将作为DPMI客户端运行，并且将使用GDI / DirectDraw仿真dll。仿真需要VESA 2.0 BIOS才能工作。因为在DOS中没有可用的加速度，仿真可能有点慢。但是，某些应用程序可能运行得足够快，并且它可能是克服Windows NT / 2K / XP中不存在的VESA LFB支持的一种方法。 
 
查看compat.txt以获取成功通过Win32仿真运行的Win32控制台应用程序列表。 
 
C. HX GUI扩展
运行GUI应用程序
使用HXGUI扩展，可以在DOS下使用HX运行简单的GUI应用程序。在此上下文中，“简单”表示仅使用一个窗口作为用户界面的应用程序。此类应用程序通常基于SDL，DirectDraw和/或OpenGl。要使用HXGUI，需要支持线性帧缓冲区访问（LFB）的VESA V2.0 BIOS。 
 
Win32 API仿真由HX GUI增强，包括：
DINPUT.DLL：模拟DINPUT.DLL
DSOUND.DLL：模拟DSOUND.DLL
WINMM.DLL：模拟WINMM.DLL
DCIMAN32.DLL：模拟DCIMAN32.DLL
WSOCK32.DLL：模拟WSOCK32.DLL
还有一些dll像假人一样被包含在内：
IPHLPAPI.DLL
MSACM32.DLL
SHELL32.DLL
运行OpenGL应用程序
借助Windows 9x二进制文件，OPENGL32.DLL和GLU32.DLL可以在DOS上使用HXGUI运行OpenGL应用程序。但是，这个OpenGL实现是没有硬件加速的纯软件，所以不要指望它太快。 
 

从Frank Charlet编写的OpenGL Win32示例的屏幕截图，在DOS下运行，256色。 
 
如果您没有Windows 9x的副本：应该有可重新发布的OpenGL for Windows 95版本。在Web中搜索OPENGL95.EXE。或者从MS FTP服务器 或此处下载普通二进制文件 。 
 
关于SDL
SDL（简单直接媒体层）是一项开源工作，旨在为游戏，模拟器提供多平台API ....有各种平台可用的端口。就HXGUI而言，实现了对视频，（波）音频，键盘，鼠标，定时器和线程的支持。请注意，没有特殊版本的SDL for HX（或DOS）可用。它是 SDL的Win32端口，可以与HX一起使用。SDL站点位于http://www.libsdl.org/index.php，可以找到所有端口的源代码。 
 
使用HX运行QEMU
QEMU是适用于许多平台的PC仿真器应用程序。QEMU 0.7,0.8和0.9的Win32端口（基于SDL）已成功通过HXGUI测试。QEMU在DOS下与HX一起运行的主要优点是可以尝试各种操作系统，而无需在物理HD上安装它们。这里FreeDOS在MS-DOS会话中启动： 
 
 
 
关于在HX下运行QEMU的一些注意事项
请注意，QEMU需要大量的虚拟内存。由于HX不支持交换文件，因此虚拟内存与物理内存相同。例如，使用128 MB guest虚拟机运行QEMU需要大约170 MB的RAM。
不要指望任何性能提升在HX / DOS上运行QEMU。如果通过避免像Windows这样的多任务环境的开销来获得收益，那么这个增益就会因为在DOS中没有可用的2D图形加速这一简单事实而丢失。
用HX运行DOSBox
另一个有趣的SDL应用程序是DOSBox。在DOS下使用HX运行DOSBox并不是没有意义，因为它可能乍一看。有许多旧的DOS游戏无法在现代机器上运行，或者运行得太快。还有一些老游戏已经在老机器上造成了很多麻烦，现在它们在DOSBox中运行完美。这是其中之一： 
 
 
 
D. HX 32位开发人员支持
该HXDEV开发者支持包包含创建32位所需的所有文件扩展的DOS应用程序。扩展器支持两种文件格式：
PE文件格式
MZ文件格式
Win32-PE格式的32位DOS应用程序
这是HX DOS扩展器的标准格式。由于此类二进制文件实际上是真正的Win32应用程序，因此创建这些应用程序的所有工作都将由您的标准开发工具完成。对于HX，没有什么可做的。因此，唯一包含的内容是
PatchPE，用于将二进制文件从Win32-PE转换为DOS-PE（“PX”）格式
Vesa32（s）.lib，用于简化在DOS扩展应用程序中使用VESA功能
CrtDll.lib，一个链接CRTDLL.DLL的静态库（COFF格式）
DCrt32s.lib，一个简单的静态C运行时库（COFF格式）
OWSupp，一些文件有助于使用Open Watcom创建和调试HX扩展应用程序
ASM，C，Pascal，（Power）Basic和Cobol中的样品
C运行时库旨在供ASM程序使用，但如果没有其他C运行时可用，C / C ++应用程序当然也可以使用它们。 
 
DOS-PE格式的32位DOS应用程序
使用PatchPE工具，可以将Win32-PE文件更改为DOS-PE文件。如果应用程序使用通常不适用于Win32应用程序的功能，即它调用DOS INT 21h或直接访问I / O端口，则可能需要这样做。该工具只会更改一个字节，这可确保在Windows中启动时，Win32子系统中不会加载二进制文件。 
 
MZ格式的32位DOS应用程序
HX也支持这种格式，包括
JMPPM32.OBJ为32位保护模式执行准备应用程序
库JMPPM32.LIB中的一些辅助函数
一些用于Win32仿真的OMF格式的库（有关详细信息，请参见下文）
Libc32.lib，一个简单的静态C运行时库（OMF格式）
TestOMF，一个测试32位MZ格式支持各种OMF链接器的程序。
ASM和C中的样本
。
此格式也提供Win32仿真，但当然仅存在于源代码级别。对于此OMF库（DKRNL32S.LIB，DUSER32S.LIB和DADVAPIS.LIB）包括在内。但是，与PE格式相比，MZ格式有一些限制。优点/缺点是：
+具有最小的开销并且加载速度非常快
- 应用程序无法在真正的平坦（=从零）内存模型中运行
- 不支持DLL动态链接
- 图像大小仅限于可用的DOS内存
- 一些流行的OMF链接器存在32位段> 64 kB的问题。我建议使用Digital Mars'LINK.EXE（随C ++编译器提供）或LADSoft的VALX.EXE。两个连接器都没有HX MZ格式的问题。
- 大多数开发工具都不支持MZ格式的32位应用程序。不过，Digital Mars C ++编译器和Watcom C ++将支持这种格式。当然，汇编程序也没有任何问题。

E. HX 16位开发人员支持
虽然大多数HX是32位，但它仍然支持16位保护模式应用程序。支持包括
HDPMI16，DPMI服务器运行16位DPMI客户端。它包含在HX运行时中。
DPMILD16，16位NE二进制文件的加载程序。它包含在HX运行时中。
HXD16，开发包。基本上，以下工具能够创建兼容HX的16位二进制文??件：
打开Watcom C
Digital Mars C ++ v8.4
MS C 6.0和MS VC ++ v1.52
Borland C ++ v3.1和v4
JWasm，Masm，Tasm，Wasm，Nasm，Yasm，Fasm
Borland Pascal 7.0
MS Cobol v4.5
包括ASM，C，Pascal和Cobol中的示例，并将展示如何创建，运行和调试二进制文件。

F. HX源代码
所述HXSRC包包含HX DOS扩展的源代码。这包括：
DPMI主机HDPMI32.EXE / HDPMI16（MASM）
DPMI加载程序DPMILD32.EXE / DPMILD16.EXE（MASM）
Win32仿真dll DKRNL32，DADVAPI，DGDI32，DUSER32，OLE32，OLEAUT32，WINMM，DDDRAW，DINPUT，DSOUND（MASM）
GUI助手dll HXGuiHlp.dll
工具HXLdr32.exe，PEStub.exe，PatchPE.exe，PatchNE.exe（MASM）
MZ存根DPMIST32.BIN / DPMIST16.BIN（MASM）
HX的MZ / NE文件格式支持（MASM）
WD调试器陷阱帮助程序文件HXHELP.EXE / HXHP16.EXE（MASM）
VESA支持dll VESA32（MASM）
HX的源代码大约有100,000行代码。 
 
G.调试HX DOS扩展应用程序
1.调试32位DPMI应用程序
WD：Open Watcom的标准调试器。这是一个全屏调试器，允许在源代码级别进行调试。HX中包含对Open Watcom和WD的支持。WD将能够调试所有类型的HX二进制文件。
Screenshot of WD debugging a HX "hello world" in C on Source Code Level
Screenshot of WD debugging a HX "hello world" in MASM on Source Code Level
If you don't want to download and install the Open Watcom package, here's just the DOS version of WD (slightly improved).
DEB32F: A debugger with a line-oriented interface like the good, old DOS debug, intended to be used by real men only.
GRDB: Recent versions of LadSoft's GRDB are able to debug DPMI clients, so this debugger might also be used to debug HX applications. However, there seems to be a severe problem with GRDB running on Win9x systems, better don't try this combination.
386SWAT: A free debugger from Qualitas Inc. It runs at the highest privilege level and can therefore debug DPMI and VCPI clients. Since HDPMI runs as a VCPI client if a memory manager has been loaded, 386SWAT can debug any part of HX. But there also are some disadvantages:
cannot debug on source level (support for using symbol tables is implemented)
has a strange user interface
is not always as stable as it could be
to debug graphics applications it needs a second monitor
cannot be loaded from the command line, must be installed as device driver
WDEB386/WDEB98/DEBUGGER: these are various versions of a ring 0 debugger from Microsoft which is included in Win9x DDKs (and possibly SDKs, if I remember correctly). This debugger's user interface - like the one of DEB32F - isn't for the faint of heart. You may get it for virtually free, or at least you got it with the Win9x DDKs. HX's DPMI host HDPMI supports debugger APIs int 68h (real mode) and int 41h (protected mode) and so supports debugging with WDEB386, on user level (ring 3) and system level (ring 0). You will need a second computer and a terminal program for debugging (see WDEB386 help for more details).
2. Debugging 16-bit DPMI Applications
WD：Open Watcom调试器现在可用于调试任何格式的16位DPMI应用程序。所需的所有文件都包含在HXD16.ZIP中。
DEB16F：一种与DEB32F类似的面向行的调试器。
TD / TDX：Borland的16位调试器。DPMI支持在较新版本的TD.EXE（版本> 4）中实现。以前存在一个特殊版本的DPMI，TDX.EXE，它包含在Borland Pascal 7.0中。此调试器仅接受Borland二进制格式，但HX的16位开发人员支持包中包含如何创建兼容NE格式的示例。TD不是免费的，但可能你有旧版本的BP或BC。

H.在Linux / Unix下运行HX
使用仿真器运行HX
虚拟PC仿真器（VMWare，Qemu，Bochs，...）在运行HX时应该没有问题。必须在环0中运行的HX DPMI服务器HDPMI已经过验证，与当前版本的VMWare，Qemu和Bochs兼容。由于仿真器通常不支持80386的硬件调试寄存器，因此想要使用它们的调试器可能无法始终按预期工作。DEB32F，DEB16F和DEB16FW也是如此。
使用DosEmu运行HX（仅限x86 Linux）
DosEmu不允许像HDPMI这样的ring 0应用程序在其控制下运行。这并不是那么糟糕，因为DosEmu安装了自己的DPMI主机，并且实现了HX所需的大部分功能。如果您运行的是DosEmu版本<1.3.1，则必须升级（当前版本为1.4.0）。
对于开发人员来说，DosEmu支持使用80386硬件调试寄存器也可能很有趣。 
 
关于Dosemu的一些问题是
DosEmu的DPMI主机目前无法支持多个地址空间，这是某些商业Win32应用程序可能需要的功能。
一些发行版（RedHat）确实有一个非常复杂的特性，IIRC被称为“地址空间随机化”。这与DosEmu的DPMI V1.0实现冲突，并且可能在HX的DPMILD32运行时导致错误。

 
一，路线图
以下是HX中目前缺少的功能。
ASPI支持目前需要Windows 9x的WNASPI32.DLL才能运行。这应该被更改，因此不再需要此外部（和不自由）dll。
DOS中的2D（和OpenGl）图形加速。我不确定像SciTech的SNAP这样的东西是否可用于实现这些功能。提示是受欢迎的。
当HX在WinXP DOS框中运行时加载的VDD，并使用全屏DirectDraw模拟VESA LFB。
在WinXP DOS框中运行时的声音支持。目前，WinXP DOS盒仅提供SB 2仿真，但HX至少需要一个SB Pro用于立体声波输出。安装 VDMSound可能允许模拟SB 16，但此软件存在问题，可能无法按预期工作。还有其他模拟器可以更好地工作，但它们不是免费的AFAIK。
DOS中的AC97支持。
支持GUI /小部件库，可能是FLTK 或GTK +。
如果您认为缺少某些内容或者您想以任何方式为HX做出贡献，请随时与我联系。 
 
K.支持
该DOSX论坛 的目的是作为一个地方要问关于HX问题。 
