中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
English/Chinese Fix Translation
作者:
标题: DOS的界面开发终结者 上一主题 | 下一主题
郭恒
中级用户




积分 225
发帖 39
注册 2004-10-6
状态 离线
『楼 主』:  DOS的界面开发终结者 [已使用 LLM 解释]

我个人开发出了一个“WINSail” 软件,其完全是免费的一套软件,完整的
“库文件”、“头文件”“说明书”和“源代码”可在"www.FirstSail.B2B.Cn中下载得到。
它基于DOS系统,用Borland C++3.1语言,在Large大模式下开发出来的软件开发包。虽然说完整的软件包大约只有450K左右,却能在DOS下生成的程序具有与WIN9x完全相同的界面,拥有Group、Label、Edit、ComboBox、Button、Radio、Check、ListBox、Grid、ScrollBar、Desktop、ToolsBar、StatusBar、Menu、PopuMenu、Window、Dialog、ICON、Bitmap、示波器等界面元素,支持鼠标,控件的操作99.9%与Windows兼容!可加载运行脚本对话框;支持Socket套接字编程;具有完整窗口图形界面的最小应用只有150K左右,可在只有1M的电子盘中运行;具有0.5uS微秒精确度的delay函数。可以说 DOS + WinSail >= Windows CE

“WinSail工业控制开发系统”目前支持:
(1) “WinSail”的API与“C++ For DOS”函数库“共存”,特别是与C语言的图形函数BGI共存。
(2) 支持具有优先级的多任务,同时可达到50个任务。(注:可配置脚本文件来不需要多任务支持,使程序运行于单任务中) 。
(3) 支持数据库,生成的文件与Foxpro 2.6库兼容,可在微软Office的Excel中直接打开。
(4) 使用16*16的简体、繁体中文字库、8*16的英文字库,支持TrueType字库。
(5) “对话框”能在Visual C++预先做好界面,然后通过转换软件,能使Windows的对话框界面变成“WinSail”系统的对话框的界面代码源文件或脚本文件,充分利用Visual的优越性,使DOS平台的应用程序界面开发“不再难”!!!!!
(6) 支持600*480*16、600*400*256、800*600*256、1024*768*256多种分辩率。
(7) 支持Group、Label、Edit、ComboBox、Button、Radio、Check、ListBox、Grid、ScrollBar、Desktop、ToolsBar、StatusBar、Menu、PopuMenu、Window、Dialog、ICON、Bitmap、MessageBox、示波器、多元纵坐标示波器等界面元素。
(8) 支持扩展内存--XMS、扩充内存EMS的内存访问。
(9) 支持文本注册表--INI文件的读写,在写键值时,可保证在键值后面的“注释内容”仍然还存在。
(10) 支持面向对象的I/O访问,屏蔽底层I/O口。
(11) 具有COMM口通讯接口,支持多种校验位,包括“没有校验位”、“奇校验位”、“偶校验位”、“校验位永为1”、“校验位永为0”。后两种校验方式多用在多机通讯中区别“地址”和“数据”。
(12) 支持条形码显示。包括EAN_8、UPC_A、UPC_E、EAN_13(商品码)、ISBN、ISSN、39、128、Codabar、交叉25码
(13) 窗口支持“用I/O口定义的虚拟键盘”、“窗口定时器”、“空闲时调用某函数”、“窗口刷新时调用某函数”等多种回调函数。
(14) 多种常用数学运算,包括“低通”、“高通”、“带通”、“带阻”滤波器系数的产生(可加矩形窗、三角形窗、汉宁窗、海明窗、布莱克窗、Sin(x)/x窗、余弦窗、凯塞窗),滤波、插值、拟合、微积分、相关分析、FFT、DFT等。
(15) 统计进程SPC和直方图、测量的可靠性和重复性GageR&R报表。
(16) 支持“Bitmap”、“ICON”图像文件的显示、“Wav”声音文件的播放。
(17) 支持“普通示波器”和“多纵坐标示波器”。
(18) 支持Socket 套接字编程。


   此帖被 +17 点积分       点击查看详情   
评分人:【 redtek 分数: +2  时间:2006-11-7 21:17
评分人:【 pengfei 分数: +5  时间:2006-11-15 22:28
评分人:【 henrya2 分数: +4  时间:2007-4-30 23:30
评分人:【 AlexZhang 分数: +4  时间:2007-8-6 09:41
评分人:【 fqljwdyq 分数: +1  时间:2007-12-12 19:00
评分人:【 153146156 分数: +1  时间:2008-6-1 02:12
LLM 解释

技术背景与实现机制分析

郭恒所提及的 “WinSail” 是 2000 年代初期中文 DOS 开发者尝试在实模式(Real Mode)环境下模拟图形用户界面(GUI)的典型代表。这类开发包(SDK)的核心目标是在资源受限的 DOS 环境下,为工业控制和嵌入式系统提供类似 Windows 9x 的操作体验。

1. 开发环境与内存模型

该系统基于 Borland C++ 3.1 并使用 Large 内存模型

  • 内存限制:在 Large 模式下,虽然代码和数据均可跨越 64KB 段限制,但受限于 DOS 实模式,总寻址空间仍被限制在 1MB 之内(除去上位内存等仅余约 600KB 常规内存)。
  • XMS/EMS 支持:由于 1MB 内存难以支撑高性能图形界面和多任务,系统通过支持扩展内存(XMS)和扩充内存(EMS)来存储非活跃数据、字库或位图资源,从而缓解常规内存压力。

2. 图形引擎与 BGI 兼容性

WinSail 能够与 BGI (Borland Graphics Interface) 函数库共存。

  • VGA/SVGA 驱动:BGI 默认仅原生支持至 VGA (640x480x16色)。若要实现文中提到的 800x600 或 1024x768 256色显示,通常需要加载第三方 BGI 驱动(如高性能的 SVGA256.BGI)或直接通过 VESA BIOS Extensions (VBE) 操作显存。
  • 256色处理:在 256 色模式下,系统需要管理调色板(Palette)以确保 GUI 元素(如按钮阴影、图标)在不同显示模式下的视觉一致性。

3. 模拟多任务机制

文中提到的“50个具有优先级的任务”在 DOS 实模式下通常通过以下方式实现:

  • 协作式多任务(Cooperative Multitasking):利用定时器中断(IRQ 0, Int 08h/1Ch)进行任务调度,或者在主事件循环中轮询。
  • 上下文切换:通过保存和恢复 CPU 寄存器映像及堆栈指针来实现任务切换。由于 DOS 本身是非重入的(Non-reentrant),在多任务中调用 DOS 系统服务(如文件 I/O)时,通常需要处理 InDOS 标志或使用临界区保护。

4. UI 资源转换与 Visual C++ 兼容性

WinSail 提到可以转换 VC++ 的对话框资源,这是一种提高开发效率的工程手段:

  • 资源解析:解析 Windows 的 .rc 文件或 .res 二进制文件,提取控件的坐标、类型和文本。
  • 代码生成:将提取的元数据转换为 WinSail 能够识别的 C++ 源代码或自定义脚本。这种方式解决了 DOS 下缺乏可视化界面设计器(WYSIWYG)的痛点。

5. 工业控制特定功能

WinSail 并非纯粹的通用 GUI 库,其功能集高度向工业自动化(Industrial Automation)倾斜:

  • 高精度 Delay:0.5μs 的延迟在 DOS 下通常通过读取 8253/8254 定时器芯片的计数器初值实现,而非依赖标准的系统时钟滴答(18.2Hz),从而达到微秒级精度。
  • 信号处理:集成了 FFT、数字滤波器等数学库,表明其设计初衷是作为数据采集与监控系统(SCADA)的底层框架。
  • 多机通讯:支持“校验位永为 1 或 0”的串口通讯(Mark/Space Parity),这是 8051 等单片机在多机模式(Multi-Processor Communication Mode)下区分地址帧与数据帧的标准做法。

6. 网络与数据库

  • Socket 编程:在 DOS 下实现 Socket 通常依赖于 Packet Driver 接口和第三方 TCP/IP 协议栈(如 WATTCP 或 Watt-32)。
  • DBF 兼容性:支持 FoxPro 2.6 (dBase IV 格式) 是因为该格式协议公开且结构简单,适合在嵌入式系统中作为轻量级数据库使用。

历史局限性说明

尽管 WinSail 在 UI 表现上力求接近 Windows,但受限于 16 位 DOS 环境,它在抢占式调度、内存保护以及驱动通用性上与 Windows 仍有本质区别。这类“DOS 界面终结者”在 2004 年左右处于其生命周期的尾声,随后逐渐被 Windows CE、嵌入式 Linux 或 32 位保护模式下的图形库(如 Allegro, GUILib)所取代。



2004-11-24 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
cn_archer
元老会员

农民


积分 2903
发帖 991
注册 2003-7-23
来自 福建省
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

哇!PFPF!这个GUI能做成一个完善的DOS Shell 吗?




艰难奋长戟,万古用一夫

中国DOS联盟 http://www.cn-dos.net 欢迎大家来共同学习
我的MSN&E-Mail cn_archer@hotmail.com QQ 56049418
2004-11-24 00:00
查看资料  发送邮件  发短消息  网志  OICQ (56049418)  编辑帖子  回复  引用回复
郭恒
中级用户




积分 225
发帖 39
注册 2004-10-6
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

能够! 用它能够做出像WIN95似的桌面系统。在www.FirstSail.B2B.Cn网页中下载WinSail.Zip后,里面有一个工程“Sail3000”目录,运行“Sail2000.Exe”可执行文件或“A.Bat”批处理文件就可以看到。 可运行在 (1)纯“DOS”系统(支持所有私有分辨率) (2)Win9X系统里面的“DOS”(支持所有私有分辨率) (3)Windows2000 Professional(只支持私有的640*480*16色)“分辨率”更改在“附件”的“显示属性”中修改。在工程里面有完整的源代码,工程文件是“Sail2000.Prj”,开发环境是Bc31。


2004-11-25 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
autoit
系统支持




积分 904
发帖 339
注册 2002-10-10
来自 厦门
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

真的如此?DOwn来看看...




joomla! Autoit!
2004-11-25 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
郭恒
中级用户




积分 225
发帖 39
注册 2004-10-6
状态 离线
『第 5 楼』:   [已使用 LLM 解释]

MakeDlg是一个WINDOWS程序,它的作用是将VC++工程的对话框转换成DOS下的"WInSail"开发平台的对话框,它可以生成5种形式 (1)int main3(int argc, char** argv)的函数形式 (2)int main3(int argc, char** argv)的函数形式 (3)void far VccFuncton(CObject *)的函数形式 (3)void far VccFuncton()的函数形式 (5)脚本文件第1~4形式是CPP文件源代码,须在BC31中将其编译后,方能使用第5种形式由于是脚本文件,可以用内核的AfxLoadDialog(char* pFileName)函数加载运行,也可以在“WinSail.Zip”的范例工程“Sail3000”目录里面的"Sail2000.Exe"运行该程序,“密码”为空,在菜单“附件”有“加载对话框脚本”菜单项,由它加载运行。得用该工具,您能开发出非常多精美的“对话框”。
LLM 解释

技术背景与实现解析

WinSail 是 2000 年代初期中文 DOS 开发者针对工业控制(Industrial Control)领域开发的典型 GUI(图形用户界面)框架。这类框架的出现是为了解决 DOS 原生字符界面交互性差、开发效率低的问题,同时满足当时工业上位机对图形化显示(如示波器、报表、实时曲线)的需求。

1. 核心技术架构:Borland C++ 3.1 与 BGI

WinSail 构建于 Borland C++ 3.1(BC31)之上,这是当时 DOS 下 C/C++ 开发的主流工具链。

  • 内存模式:采用 Large 模式。在实模式(Real Mode)下,Large 模式允许代码和数据各占 640KB 常规内存的不同段,虽不如 DPMI 保护模式(如 DJGPP 或 BC31 的 16 位保护模式)灵活,但其对硬件驱动的兼容性最好,适合工控环境。
  • 图形底层:兼容 BGI (Borland Graphics Interface)。这意味着它使用了标准的 *.BGI 驱动来适配 VGA/SVGA。由于 BGI 本身不支持高位色或高分辨率(标准仅支持 640x480x16 色),WinSail 提到支持 256 色及 1024x768 分辨率,表明其内部集成了第三方的 SVGA BGI 驱动(如著名的 Jordan Powell 驱动或全能 BGI 驱动),通过 VESA BIOS 扩展(VBE)实现。

2. 对话框转换机制:MakeDlg 的逻辑

MakeDlg 工具体现了当时一种高效的“跨平台”设计思路:利用 Windows 的成熟设计器,输出 DOS 的运行代码。

  • 资源解析:VC++ 的对话框编辑器生成的是 .rc 脚本或 .res 二进制文件。MakeDlg 的作用是解析这些资源文件中的控件坐标、类型、文本等元数据。
  • 代码生成:它将解析出的数据映射为 WinSail 的 API 调用。生成 .cpp 源代码的形式是硬编码(Hard-coded)UI,编译速度快但灵活性差;生成脚本文件(Script)的形式则通过 AfxLoadDialog 动态解析,类似于现代 UI 框架的 XML/JSON 布局,实现了逻辑与界面的分离。

3. 实时性与多任务实现

在 DOS 这个单任务系统上实现“50 个任务”和“0.5uS 微秒延时”,通常依赖于以下底层技术:

  • 时钟中断接管:通过拦截 IRQ 0(8253/8254 定时器芯片),将默认的 18.2Hz 频率提高。通过在中断服务程序(ISR)中进行任务上下文切换(保存寄存器压栈、切换堆栈指针 SP/SS),实现非抢占式或协同式多任务。
  • 微秒延时:标准的 delay() 精度极低。实现 0.5微秒精度通常需要直接读取 CPU 周期计数器(如奔腾时代的 RDTSC 指令)或直接对 8254 计数器的通道计数进行查询,而非依赖系统节拍。

4. 环境兼容性差异

帖子中提到的不同系统表现源于底层架构的差异:

  • 纯 DOS / Win9x DOS:程序拥有对 I/O 端口和显存(Video RAM)的完全控制权,因此可以支持私有的 SVGA 分辨率。
  • Windows 2000 (NT 内核):NT 系统引入了硬件抽象层(HAL),禁止实模式程序直接操作硬件。DOS 虚拟机(NTVDM)通过模拟 VDM 运行。由于 NTVDM 对高分辨率 VESA 模式的仿真限制,通常只能稳定运行标准的 VGA 模式(640x480 16色),这解释了为何在 Win2000 下分辨率受到限制。

5. 工业特化功能

WinSail 与普通 GUI 框架的区别在于其内置了大量工控专用模块:

  • SPC (统计过程控制):用于生产线质量分析的算法。
  • 信号处理:集成了 FFT(快速傅里叶变换)和各类滤波器,这些通常在数学库中独立存在,将其整合进 GUI 框架是为了方便实时显示传感器波形。
  • 通讯协议:支持奇偶校验位手动控制(Mark/Space),这是 9-bit 串行通讯协议(多机通讯地址识别)的标准做法。

历史局限性

该系统在 2004 年发布时已处于 DOS 时代的末期。尽管它在代码体积(150K-450K)和资源占用上有极大优势,但由于其运行在实模式(Real Mode)下,受限于 640KB 常规内存的瓶颈,在处理大量 Bitmap 或复杂 GUI 逻辑时,极易触发 Memory Allocation Error。虽然其支持 XMS/EMS,但在 Large 模式下访问这些内存需要通过地址窗口(Mapping)或 API 拷贝,性能损耗与开发复杂度较现代保护模式(如 Win32 或 Linux)更高。



2004-11-25 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
boblhh9999
中级用户




积分 316
发帖 74
注册 2004-3-4
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

真的这么厉害么


2004-11-25 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
jaywang
初级用户




积分 117
发帖 5
注册 2004-7-10
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

看了一下,不错。厉害。向你学习。


2004-11-25 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
郭恒
中级用户




积分 225
发帖 39
注册 2004-10-6
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

WinSail内核运行在“实模式”下,目前增强了对"多任务"的支持,内核启动时将“挂接”时钟中断-INT8,并修改定时器0的初始计数值为2048, 系统会每55/32 = 1.72mS调度一个任务,任务调度时若当前任务正在“DOS忙”,则系统不切换任务,故在多任务编程时,应该尽量调用没有使用INT21中断的函数,如果在WINDOWS下运行,需将Config.Sys脚本文件中段的MultiMask键值置成"False",以便不修改INT8,而没有多任务的支持。详细可看说明书,可在Http://WWW.FirstSail.b2b.CN 中下载"WinSail"得到


2004-11-27 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
unknow
初级用户




积分 109
发帖 4
注册 2004-9-14
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

真的有这么好吗?我荡一个看看


2004-12-7 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zykdos
初级用户




积分 183
发帖 31
注册 2003-8-1
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

给个MSN联系


2004-12-7 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
郭恒
中级用户




积分 225
发帖 39
注册 2004-10-6
状态 离线
『第 11 楼』:   [已使用 LLM 解释]


WinSail内核目前全面支持“TCP/IP”协议,支持SOCKET套接字编程,由于WinSail是在DOS“实模式”下运行,故设计“TCP/IP”协议时,所有的“接收数据包”和“发送数据包”都被内核放在“扩展内存XMS”中,不占用“常规内存”的空间,故整个协议代码不占用多大的“空间”。 “协议”设计时,所有的“数据结构”和“套接字”函数接口,尽量与微软的“WINDOWS”文档兼容。 “WinSail”的设计之初,是懂“WINDOWS”编程的人,不费吹灰之力,就能在DOS下编程!!! Http://WWW.FirstSail.b2b.CN 中下载"WinSail"得到。(目前TCP/IP协议正在测试,载止到2004年12月11日,还不能下载到包含TCP/IP协议的WinSial。目前协议已经测试完成,但SOCKET套接字还正在测试...,可在2004年12月20日后,保证能下载到包括TCP/IP协议的“WinSail”。) 对于“楼上”说的MSN,将下载后的WinSail解压,里面有较简单的说明书,由于时间关系,详细说明书正在continue...,有问题,可发邮件到“szhello8@21cn.net”,或是“wave@public.guangzhou.gd.cn”
LLM 解释

关于 WinSail 内核及其网络协议栈的技术分析

WinSail 是 2000 年代初期中文 DOS 开发者尝试在实模式环境下实现图形化多任务与网络支持的典型案例。该系统旨在通过模拟 Windows API 的方式降低 DOS 开发门槛。

1. 实模式下的抢占式多任务实现

WinSail 通过挂接 INT 08h(硬件时钟中断)并修改 8253/8254 可编程间隔定时器(PIT)的计数值来实现任务调度。

  • 频率调整:将默认的 18.2Hz(约 55ms)提升至约 581Hz(1.72ms),通过更细粒度的时间片分配来实现视觉上的“平滑多任务”。
  • 重入性限制:由于 DOS 是单线程且非重入的,WinSail 采用了典型的“DOS 忙位”(InDOS flag)检测机制。当内核检测到 INT 21h 正在执行时,会跳过当前调度周期以避免系统崩溃。
  • 环境兼容性:在 Windows 的 DOS 虚拟机(VDM)中,直接操作硬件定时器或接管实模式中断可能导致虚拟化冲突,因此作者提供了关闭多任务功能的选项。

2. TCP/IP 协议栈与内存管理

在 640KB 常规内存极其受限的实模式下,WinSail 的网络实现采取了以下策略:

  • XMS 利用:为了规避常规内存不足,内核将数据包缓冲区(Buffer)置于扩展内存(XMS)中。这要求开发者在处理网络数据时,必须通过 INT 2Fh 提供的 XMS 驱动接口进行跨段数据拷贝。
  • 接口规范:WinSail 尝试实现 Berkeley Sockets API 的子集,以保持与 Windows Sockets (Winsock) 的相似性。这种做法在当时的 DOS 网络编程(如 Watt-32 库)中较为常见。
  • 驱动层依赖:作为运行在 DOS 之上的环境,WinSail 的 TCP/IP 协议栈通常依赖底层的 Packet Driver(符合 FTP Software 规范的通用网卡驱动接口),这是当时实模式网络通信的标准手段。

3. 技术背景与实现限制

  • 实模式限制:尽管 WinSail 模仿了 Windows 的编程接口,但由于其运行在实模式下,缺乏保护模式提供的内存保护机制。一个任务的非法指针操作往往会导致整个内核乃至系统的挂起。
  • 性能权衡:1.72ms 的中断频率在 386/486 级别的老旧硬件上会带来显著的 CPU 开销(Context Switch Overhead)。在实模式下频繁切换任务,其实际吞吐量往往低于专用的保护模式环境。
  • 历史定位:此类工具(类似还有早期版本的界面库、DOS 扩展器等)反映了当时开发者在不转向 32 位保护模式(如使用 DJGPP 或 Watcom C/C++)的情况下,试图压榨 16 位 DOS 环境最后性能的努力。

4. 合规性说明

WinSail 是一个历史性的国产第三方 DOS 开发库。对于需要此类功能的现代研究者,建议参考开源且文档完备的替代方案:

  • 网络协议栈:可参考 Watt-32uIP 在 DOS 下的移植。
  • 多任务与图形:可参考 FreeDOS 项目相关的多任务尝试或 Nano-X (Microwindows) 的 DOS 移植版,这些项目通常具有更明确的法律许可与公开的源代码实现。


2004-12-11 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
cdl
中级用户

bbpc


积分 340
发帖 107
注册 2004-4-11
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

不错,好!!!真的是在实模式下运行吗?我们公司的网站是www.baby-pc.com,看看能否在移植到我们的产品上,现在很多用户需要这样的GUI。如果可能的话可以合作。




x86!dos!
爱你就象老鼠爱大米
http://www.baby-pc.com/
2004-12-12 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
jiaking
中级用户




积分 223
发帖 52
注册 2004-3-7
状态 离线
『第 13 楼』:   使用 LLM 解释/回答一下

很不错啊!技术文档很详细,是长期免费的吗?我很喜欢其中的界面开发和TCP/IP支持。研究研究。


2004-12-18 00:00
查看资料  发送邮件  发短消息  网志  OICQ (53379921)  编辑帖子  回复  引用回复
jiaking
中级用户




积分 223
发帖 52
注册 2004-3-7
状态 离线
『第 14 楼』:   使用 LLM 解释/回答一下

看了,真的很不错!!对了,那个SAIL2000.EXE的登陆密码是什么?学习学习。


2004-12-18 00:00
查看资料  发送邮件  发短消息  网志  OICQ (53379921)  编辑帖子  回复  引用回复
郭恒
中级用户




积分 225
发帖 39
注册 2004-10-6
状态 离线
『第 15 楼』:   [已使用 LLM 解释]

回答jiaking
对于Sail3000示例工程来说---------用户名是:super(小写),密码是:空
在2004年12月18日早上10时上传了“最新版的WinSail”,最小图形应用是“171K”,完整图形应用是“220K” “完整图形应用”比“最小图形应用”多了“示波器CGraph”、“多元示波器CTorqueGraph”、“桌面类CDesktop”、“对话框文件加载CDialog::LoadDailog()”、“登录框”、“权限修改”、“设备管理器”、“多任务管理器”的代码再过一个星期左右,含TCP/IP协议的、支持SOCKET套接字编程的内核将会上传,届时“最小图形应用”会增加30~50K左右的代码。
注“内核的TCP/IP协议是基于Packet Driver网卡驱动的”============================================================================WinSail的设计目的是用在工业上, 在电力系统应用中,本内核已完成其95%的工作, 在数控机床应用中,本内核已完成其75%的工作, 在智能仪器应用中,本内核已完成其80%的工作,
LLM 解释

技术背景与实现机制分析

WinSail 是 2000 年代初期中文 DOS 开发者尝试在实模式(Real Mode)环境下实现类 Windows 图形界面与网络协议栈的典型项目。针对 2004 年该帖提及的技术细节,其核心逻辑与时代背景补充如下:

1. 实模式下的内存管理与 XMS 利用

原贴提到 TCP/IP 协议栈的数据包被放置在扩展内存(XMS)中以节省常规内存(640KB)。在 16 位实模式下,程序通过调用 HIMEM.SYS 提供的 XMS 驱动接口(通过 INT 2Fh 获取入口地址)来管理 1 MB 以上的内存。

  • 实现原理:由于实模式 CPU 寻址限制在 1MB,内核无法直接通过指针读写 XMS 数据。必须先在常规内存开辟一个缓冲区(Buffer),利用 XMS 的“移动内存块”(Function 0Bh)功能,将网卡接收的数据从常规内存搬移到 XMS,或反之。
  • 技术折衷:这种设计虽然缓解了常规内存压力,但频繁的内存拷贝(Memory Copy)会产生额外的 CPU 开销,在大流量网络传输时,性能瓶颈通常出现在 XMS 拷贝速度而非网卡带宽。

2. 基于 Packet Driver 的网络架构

作者明确内核基于 Packet Driver 规范(由 FTP Software 定义)。这是 DOS 时代事实上的网络驱动标准。

  • 工作流:网卡厂商提供专用的 .COM 驱动(如 RTL8139.COM),驱动程序挂载在特定的软中断(通常是 0x600x80 之间)。WinSail 这种协议栈通过该中断直接与网卡交换以太网帧(Ethernet Frames)。
  • 协议栈实现:由于 Packet Driver 仅处理数据链路层,TCP/IP 协议栈(包括 ARP、IP、ICMP、TCP、UDP)必须由 WinSail 内核完全在用户态实现。文中提到的“兼容 Windows 套接字(Winsock)接口”是指在 API 命名与调用逻辑上进行模拟,以便于习惯 Win32 开发的人员迁移。

3. 图形内核与工业应用组件

文中提到的“171K”与“220K”体积,反映了当时 DOS 图形系统的典型规模。

  • 组件分析CGraph(示波器)、CTorqueGraph 等组件表明该系统针对的是工业控制(ICS)与数据采集环境。在 2000 年代初,由于嵌入式 Linux 尚未普及,WinCE 授权昂贵且硬件要求高,基于 DOS 的图形内核是电力、数控机床等实时性要求较高领域的低成本替代方案。
  • 多任务模拟:DOS 是单任务系统,WinSail 提到的“多任务管理器”通常是基于时钟中断(INT 08hINT 1Ch)实现的抢占式或协作式任务切换,而非现代操作系统意义上的内核进程管理。

4. 历史局限性与风险提示

  • 实模式限制:16 位实模式缺乏内存保护机制。如果协议栈在读写 XMS 时发生指针越界或中断嵌套冲突,极易导致整个系统挂起(死机),这在工业生产环境下是主要的稳定风险。
  • 网络兼容性:基于 2004 年的背景,该 TCP/IP 实现可能未完整处理现代网络中的复杂情况(如大规模分片重组、复杂的 TCP 拥塞控制或 DHCP 租约扩展),主要用于局域网内静态 IP 的点对点通信。

5. 现状补充

原帖提供的 FirstSail.b2b.CN 及其相关的 szhello8@21cn.net 等联系方式多已失效。这类闭源的商业 DOS GUI 库在 2005 年后随着工业电脑向 Linux 或 Windows Embedded 转型而逐渐退出主流市场。对于现代环境下研究 DOS 图形与网络开发,建议参考开源项目如 FreeDOSmTCP(高性能 DOS TCP/IP 协议栈)或 Allegro(图形库)。



2004-12-18 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: