CSDN博客

img Phoenix2000

一种新颖的技术:Delphi for DOS!!!

发表于2001/1/11 7:46:00  903人阅读

看看题目,是不是觉得很怪?Delphi 从诞生起就是 for Windows 的,那里有 for DOS 的?
如果你过去曾用过 Borland 的 Turbo Pascal 系列编写软件,那么你应当对 Turbo Pascal 
的特点了解一些。Turbo Pascal 直到 6.0 版都不支持 DOS 下的保护模式编程(DPMI)。直
到 Borland Pascal 7.0 出世,然而令人遗憾的是, BP7 仅支持 16 位的保护模式编程,而
真正意义上的 32 位 DPMI 模式却不支持。而且 BP7 是 Borland Pascal 的 DOS 终结版。
所以,那个时代很多的游戏都只能打上 DOS4GW 的烙印(由 Watcom C++ 开发)。

其实,在 1996 年,Delphi 2.0 已经是一个真正的 32 位保护模式编译器了,只不过她不能
产生 DOS MZ 格式的程序,仅能产生 Win32 PE 程序文件。而这个时候,一个名为 WDOSX 的
32 位 DOS 扩展器已经悄然出现了。这个扩展器的最大特点就是专门为 Delphi 2 度身定做,
能够将 Delphi 2 编译的“控制台应用程序”(也就是 Console Application)直接复合成为
一个真正的 32 位 DOS 保护模式程序,其效果与 Watcom C++ 编译产生的 32 位 DOS DPMI 
程序(运行时依赖 DOS4GW 扩展器)是一样的!而它产生的程序已经自带扩展器,不需要运行
时的扩展服务程序(比如 DOS4GW)。WDOSX 采用 Borland 的 Turbo Assembler 5.0 开发,
为 Delphi 2 专门提供了用于保护模式下的 CRT、DOS 等单元,与过去的 Turbo Pascal 提供的
单元十分相似。WDOSX 采用 Win32 API 仿真库以便支持在 32 位 DOS DPMI 环境下的系统功能
调用,所以经过复合后的 Delphi 2 控制台程序是运行在一个 Win32 模拟环境中的,Win32 的
特点被保留,而实际确实运行在真正的 32 位 DOS DPMI 环境下。这就是 WDOSX 的奇妙之处。

现在 WDOSX 的最新版本为 0.96,已经能够很好的支持 Delphi 2/3/4/5 各种版本了,它甚至为
Delphi 提供了完备的快速图形处理函数库(包含 DirectX 支持),用来编写 DOS 游戏真是变
得异乎寻常的简便了,而效果却是惊人的:真正的 32 位保护模式 DOS 环境、直接对显示硬件
编程处理图像、方便的 DOS 中断调用支持。Watcom C++ 和 DJGPP 的优点她都能够让 Delphi 具
备!这得益于 Delphi 32 位编译器的强大能力和 WDOSX 的神奇力量。那些在 Win32 环境下的
诸多限制彻底不存在了,你用 Delphi 2/3/4/5 编译的“控制台应用程序(Console Application)”
经过 WDOSX 复合以后产生的 32-bit DOS DPMI 程序能够自由地对内存进行访问,而内存则是真正的
32 位线性 Flat Modal !再也没有老的按照“段”来划分的概念了。理论上程序能够使用的内存空间
将是 4GB !WDOSX 的复合原理是将自己的一个保护模式功能服务器及一个微型运行模块加在正常的
Win32 PE 文件的头部,并修改文件头为 32 位 DOS DPMI MZP 文件头,同时将原来的运行代码作适当
的压缩处理,并加入一个很小的 Win32 环境模拟器。由此可见 WDOSX 的作者公里是相当深厚的!目前
WDOSX 除了对 Delphi 2/3/4/5 和 Turbo Assembler 提供最完善的支持外,还支持 C++Builder、
Visual C++。

毕竟,DOS 还不可能从我们的世界中彻底消失,有一些程序设计运行在 DOS 下也许会获得更出色的效果。
而编写 DOS 环境下的程序令人感到十分自由,没有什么限制。并且采用性能卓越的 32 位保护模式将更能
发挥程序的威力。有了 WDOSX ,有了 Delphi ,一切都变得那么容易和轻松了,何乐而不为?

WDOSX 这个东西还真不好找,我好不容易从网上弄下来了。我这里有一个用 Delphi 5 + WDOSX 编写的一个
很有趣的 32-bit DOS DPMI 程序,效果是模拟一团熊熊燃烧的火焰,效果十分惊人,会令你意想不到(姑且
让我这么说吧)!!!我可以将完整的WDOSX 软件包和部分演示程序寄给对此感兴趣的朋友(很小,才几百K字
节)。欢迎大家与我共同探讨这个问题。:)
0 0

相关博文

我的热门文章

img
取 消
img