中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-16 15:21
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 现在DOS下有非常好的编程环境——DJGPP 查看 53,145 回复 136
楼 主 现在DOS下有非常好的编程环境——DJGPP 发表于 2003-01-20 00:00 ·  中国 广东 佛山 南海区 电信
初级用户
积分 116
发帖 8
注册 2003-01-20 00:00
UID 765
性别 男
状态 离线
推荐大家多多学习和讨论。DJGPP提供了非常丰富的程序代码,可以现实图形界面和XML等编程。

至于经典的BC/TC/QB/MSC等,它们来做小程序是很好的,但是一些庞大一点的程序就不行了。我试过在BC++ 3.1下编写一个的图形界面程序,规模达到了Huge!编译以后,经常报错:Out of Memory!而且即使可以运行,程序也非常不稳定。



[已使用 Gemini 解答]
Gemini 解答

这是一篇关于 21 世纪初期 DOS 编程环境选型及其技术限制的讨论总结。针对帖子中提到的 DJGPP、Borland C++ (BC++)、Watcom C/C++ 以及内存管理等问题,从技术背景与实现机制角度补充如下解释。

1. 16 位与 32 位 DOS 开发的本质区别

pk4321 提到的 BC++ 3.1 编译大型程序出现 "Out of Memory" 或不稳定的现象,根源在于 16 位 x86 架构的分段内存模型(Segmented Memory Model)

  • 16 位开发(BC++ 3.1, TC, QB):这类工具链主要生成实模式程序,受限于 640KB 常规内存。即使使用 Huge 内存模式,单一指针寻址仍受限于 1MB 空间,且跨段寻址会导致显著的性能开销和编程复杂性。
  • 32 位开发(DJGPP, Watcom C/C++):这些工具利用了 80386 及后续 CPU 的保护模式(Protected Mode)。通过 DPMI(DOS Protected Mode Interface)服务器(如 CWSDPMI),程序可以访问高达 4GB 的线性物理内存。这消除了 640KB 的束缚,使开发大型图形界面或处理复杂数据结构(如 XML 解析)成为可能。

2. DJGPP 的定位与技术特性

DJGPP 是 GCC(GNU Compiler Collection)在 DOS 平台上的移植版本,由 Delorie 软件公司维护。

  • 开发环境与 IDE:针对帖中提到的易用性问题,DJGPP 本身是命令行工具链。RHIDE 是其最著名的集成开发环境,模仿了 Borland 的文本界面风格,极大地降低了习惯于 TC/BC 用户的使用门槛。
  • C++ 支持与优化:针对 Post #21 的疑问,DJGPP 完全支持 C++(通过 g++ 编译器)。事实上,由于其基于 GCC,其标准库(STL)的兼容性在当时的 DOS 工具中是非常领先的。关于“内嵌汇编太难写”,是因为 GCC 使用的是 AT&T 汇编格式,与 Intel 汇编格式在操作数顺序和语法上有显著差异,这对习惯于 MASM/TASM 的开发者来说确实存在学习曲线。

3. Borland DOS Power Pack 与 DPMI16/32

Post #10 提到的 Borland DOS Power Pack 是 Borland C++ 4.x 时代的扩展组件。

  • DPMI16:允许 16 位保护模式开发,使程序能够突破 640KB 进入扩展内存,但指针仍受 64KB 段限制。
  • DPMI32:这是 Borland 尝试进入 32 位 DOS 开发的工具,支持 Win32 风格的部分 API。然而,由于 Borland 当时的战略重心正转向 Windows,其在 DOS 下的 32 位优化和社区支持远不及专攻此领域的 Watcom 或开源的 DJGPP。

4. 其它开发方案与替代品

  • Watcom C/C++:它是当时 DOS 下商业 32 位开发的工业标准,著名的《毁灭战士》(DOOM) 和《雷神之锤》(Quake) 均使用 Watcom 开发。它的优化器在处理 386 指令集时性能极高,且其内嵌汇编支持 Intel 格式。
  • Digital Mars C++:其前身是 Zortech C++ 和 Symantec C++。它在 DOS 下提供了极快的编译速度和良好的 DPMI 支持,但如帖子所述,其 IDE/调试器(IDDE)通常需要付费购买,导致其在中文社区的普及度较低。
  • Delphi + WDOSX:Post #18 提到的方案利用了 32 位 Pascal 编译器配合 WDOSX 扩展器。WDOSX 能够将 Win32 控制台程序封装为 DOS 可执行文件,实现跨平台编译(在 Windows 下编写调试,在 DOS 下运行)。

5. 关于 EMM386 与栈异常

Post #20 提到的 emm386 #12 Stack exception 是典型的保护模式冲突。EMM386 作为内存管理器,通过 V86 模式模拟 EMS 内存。当 16 位实模式程序由于递归过深或局部变量过大导致栈溢出,或者与 DPMI 服务器产生特权指令冲突时,EMM386 会拦截并报错。在这种情况下,迁移到 DJGPP 等原生的 32 位 DPMI 环境是根本的解决方法,因为 32 位环境下的栈管理更加成熟且空间充裕。

6. 获取与文档建议

对于 DJGPP 的安装,由于其模块化程度极高(ZipPicker 是当年的官方推荐方式),用户只需下载核心文件(gcc, binutils, libc, cwsdpmi)即可运行,无需下载全站数百兆的文件。虽然当时的中文资料匮乏,但其配套的 Allegro 图形库拥有非常详细的示例代码,是当时 DOS 游戏开发的首选。

2 发表于 2003-01-20 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
说得太对了,现在DJGPP在国外的DOS编程界可是相当有名哦,而且用得相当广泛(一点儿都不虚)。哪像QB之类的软件呀,早就过时了。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

3 发表于 2003-03-22 00:00 ·  中国 浙江 湖州 电信
初级用户
积分 116
发帖 4
注册 2003-03-09 00:00
UID 1072
性别 男
状态 离线
哪里有啊!
4 发表于 2003-03-22 00:00 ·  加拿大 安大略省 多伦多
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
到这儿看看吧:
http://www.simtel.net/pub/djgpp/
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

5 发表于 2003-05-13 00:00 ·  中国 广东 江门 电信
初级用户
积分 118
发帖 2
注册 2003-03-26 00:00
UID 1267
性别 男
状态 离线
DJGPP 这个软件不会用,可不可以用中文说明一下用法.还有这个软件没有集成文本编辑器的吗?好不方便请指教。
6 发表于 2003-05-13 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
DJGPP有集成的图形编程环境呢!用DJGPP+RHIDE就可以了。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

7 发表于 2003-06-25 00:00 ·  中国 湖南 长沙 电信
初级用户
积分 127
发帖 12
注册 2003-06-20 00:00
UID 5576
性别 男
状态 离线
Digital Mars C++也非常不错啊!!只可惜只有它的编译器,还它的IDE和IDDE(调试环境)在它的一张CD上,要钱啊!虽然它要的钱也不太多(25美金),只是远在美国,想买都不知怎么买法!!!大家可以去 http://www.digitalmars.com/ 看一看啊!

谁用过Digital Mars C++ 吗?如果有的话,请告诉我要怎么才能到它的CD,能告诉我那有它的IDDE(调试环境)下载也好,谢谢了!!!
8 发表于 2003-06-26 00:00 ·  中国 上海 静安区 电信
初级用户
积分 112
发帖 4
注册 2003-06-26 00:00
UID 5956
性别 男
状态 离线
我用BC++3编过图形界面的商用软件(真彩,4个232串口收发),没什么问题。你可能没用XMS吧。在显示上需要些技巧,在程序的处理上需要注意资源的平衡,否则会出现有串口丢数据的情况。等忙完我手上的三个项目,我会写一些东西放上来。
9 发表于 2003-08-03 00:00 ·  中国 河北 石家庄 联通
初级用户
积分 152
发帖 11
注册 2003-08-03 00:00
UID 7993
性别 男
状态 离线
Wengier先生:
在"新DOS时代"中能否加入一些教程(DOS软件使用方面的)供大家下载?现在市场上DOS父母的书太少了……
10 发表于 2003-08-12 00:00 ·  中国 北京 鹏博士BGP
初级用户
积分 138
发帖 7
注册 2003-07-31 00:00
UID 7828
性别 男
状态 离线
Borland DOS POWER PACK
Borland C++ 4.5与Borland DOS POWER PACK配合可以开发出DOS下DPMI 16和DPMI 32应用程序,在DOS下可以使用4G内存,原来在BC++ 3.1下编写的DOS程序基本上不用改动,重新编译即可。特别是Borland DOS POWER PACK在DOS下可以使用WINDOWS 3.X格式的DLL库,同时也支持BGI图形接口,对于开发DOS GUI界面特别方便,不会出现内存不够的问题。
11 发表于 2003-09-24 00:00 ·  中国 湖北 武汉 鹏博士宽带
初级用户
积分 77
发帖 11
注册 2003-09-17 00:00
UID 9925
性别 男
状态 离线
Borland DOS POWER PACK是传说中的利器,但是找不到。
不过可以将就用下Borland Pascal中的dpmi16编译器。
12 发表于 2003-10-18 00:00 ·  中国 陕西 西安 电信
初级用户
★★
忍者
积分 376
发帖 86
注册 2003-10-16 00:00
UID 11361
性别 男
状态 离线
单独运行软件限制多吗?
以C语言软件开发为主:http://sunny1979.icpcn.com
13 发表于 2003-10-26 00:00 ·  中国 山东 济南 移动
初级用户
积分 102
发帖 1
注册 2003-10-26 00:00
UID 11933
性别 男
状态 离线
wengierw:
我的e文不好,请问有没有下载DJGPP的中文网页呀?谢谢!
14 发表于 2003-10-27 00:00 ·  美国
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
以下是引用world-100在2003-10-26 9:30:19的发言:
wengierw:
   我的e文不好,请问有没有下载DJGPP的中文网页呀?谢谢!


lemonhall版主领导的小组现在正在做DJGPP的中文网页呢!
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

15 发表于 2003-12-11 00:00 ·  中国 江苏 南京 电信
初级用户
积分 122
发帖 6
注册 2003-02-03 00:00
UID 837
性别 男
状态 离线
我用的是delphi7+wdosx,在windows98下开发和调试运行,最终是在DOS下运行,方便的很.
论坛跳转: