中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 我开发的 DOS 界面下的图形化选单工具
作者:
标题: 我开发的 DOS 界面下的图形化选单工具 上一主题 | 下一主题
hwei1001
初级用户




积分 42
发帖 7
注册 2025-6-23
状态 离线
『楼 主』:  我开发的 DOS 界面下的图形化选单工具 [已使用 LLM 解释]

给大家发一个非常好用的小工具:快乐点单——DOS 界面下的图形化选单工具!

想象一下,您的硬盘上有几百个 DOS 游戏、软件、工具,运行时,必须一一进入目录,运行命令,太麻烦,也根本记不住!

这是我在 1996 年开发的软件,花了大概 5 天时间,用 Turbo C 2.0 开发。当时用它参加学校的研究生软件开发竞赛,获得一等奖。这个软件后来在学校和校外(主要是游戏吧)广泛使用。

软件小巧,不用安装,直接拷贝到硬盘上即可使用,其中的 README.EXE 是详细的说明文件。软件支持鼠标、键盘操作,自带汉字字库,不用安装中文汉字系统就可以使用。

转眼间,快 30 年过去了,当初的帅毛头小伙变成了如今的帅老登。每每回想起上个世纪 90 年代,和一帮兄弟们泡在机房熬夜,疯狂玩游戏的时光,总是不胜感怀、热泪盈眶,那是人生中最美好的青葱岁月!

大家如果对软件有什么疑问,可以发邮件联系:hwei1001@vip.sina.com

希望大家喜欢我这个老登的小工具!也借此怀念一下我们曾经火热的青春!!!

青春虽已不再,出走半生,归来依然少年!~~~

下载:https://upload.cn-dos.net/img/2493.zip

界面:https://upload.cn-dos.net/img/2494.png
说明:https://upload.cn-dos.net/img/2495.png
文件:https://upload.cn-dos.net/img/2496.png


   此帖被 +24 点积分      点击查看详情   
评分人:【 AlexZhang 分数: +24  时间:2025-6-30 16:30
LLM 解释

技术实现背景与核心机制补充

1996年DOS环境下实现“无需汉字系统的图形化菜单”,其核心技术选择与当时的环境强相关:

  • 直接写寄存器的汉字显示:指绕过DOS的INT 10h字符输出中断,直接操作VGA显卡的段寄存器0xA000(图形模式显存段)CRTC(阴极射线管控制器)寄存器。通过读取自嵌的点阵字库(如16×16或24×24汉字库),将点阵数据逐位写入显存,实现汉字的直接渲染——这确实是当时的“黑科技”,因为主流中文系统(如UCDOS、CCDOS)依赖中断钩子或内存驻留程序来扩展DOS的字符输出,而直接写显存的方式既避免了与汉字系统的冲突,也因减少了中断调用的开销而提升了速度。
  • 图形界面绘制:DOS下的图形模式(如VGA 320×200×256色)需要手动计算像素坐标与颜色值。按钮、边框等元素本质是通过循环向显存写入连续像素块实现的,颜色规划依赖VGA的调色板寄存器(需通过OUT指令设置0x3C8/0x3C9端口来定义256色中的具体颜色)。
  • 鼠标支持:DOS下需通过INT 33h中断调用实现鼠标操作,该中断由鼠标驱动程序(如MOUSE.COM)提供,属于当时的常规外设支持。
  • 双向链表的数据结构:用于存储菜单条目(如游戏路径、命令参数),便于动态增删或调整菜单顺序,在Turbo C 2.0的内存模型下(小内存模型默认64KB数据段),链表是管理可变数量条目的高效选择。

历史意义与技术局限性

  • 获奖原因:1996年DOS软件多为字符界面(依赖INT 21hINT 10h的文本模式),图形化界面+鼠标支持+独立汉字显示的组合在学生作品中属于“体验革新”,契合了当时用户对DOS操作“可视化”的需求(尤其是游戏吧场景下,非专业用户更依赖图形界面)。
  • 局限性
    • 自嵌字库导致软件体积无法做到极致小巧(16×16汉字库约占256KB);
    • 直接写VGA寄存器的方式依赖硬件兼容性,在非标准VGA显卡(如某些兼容机的CGA/EGA克隆卡)上可能出现显示错位;
    • 菜单数据的存储大概率依赖文本配置文件(未提及数据库),条目过多时加载速度会下降。

当年的技术语境

1996年Turbo C 2.0是DOS下最流行的C语言开发工具,其对直接硬件操作的支持(如inportb()/outportb()函数)为这类“底层操作”提供了便利。而“无需汉字系统”的设计精准解决了当时的痛点——UCDOS等汉字系统需驻留内存(占用64KB以上常规内存),且与部分游戏的内存占用存在冲突,独立字库+直接渲染的方案在游戏场景下更具实用性。

该工具的广泛传播(学校、游戏吧)也反映了当时DOS用户对“批量启动工具”的刚需——硬盘容量从几百MB向GB过渡,软件/游戏数量激增,而DOS本身缺乏图形化文件管理器(Windows 95虽已发布,但游戏吧仍以纯DOS环境为主)。



2025-6-25 23:42
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
AlexZhang
系统支持





积分 995
发帖 427
注册 2007-2-8
状态 在线
『第 2 楼』:   使用 LLM 解释/回答一下

非常赞的程序~

还能不能找到源代码一起欣赏?


2025-6-30 16:31
查看资料  访问主页  发短消息  网志   编辑帖子  回复  引用回复
hwei1001
初级用户




积分 42
发帖 7
注册 2025-6-23
状态 离线
『第 3 楼』:   [已使用 LLM 解释]

源代码基本是找不到了 :(

记忆中,用到了下面的一些技术:
1、读汉字点阵字库,直接写寄存器,所以可以不用汉字系统支持,而且速度非常快。这个属于当时的黑科技;
2、各种屏幕画图,包括按钮,需要规划好颜色,计算好大小、位置这些;
3、键盘、鼠标操作,属于常规内容;
4、数据结构就是普通的双向链表。

现在这些技术都很常规了,各种资料也很多。写一个这样的程序,对有心人来说已经很容易了。

本科和研究生,读了七年的化学。大二时,基本上都翘课去打游戏,然后迷上了计算机,开始学编程,从简单到复杂,Basic、Forthan、Pascal、C、C++。学生时代陆陆续续写了不少代码,有的被老师拿来做范例,可惜大部分都找不到了 :(:(:(

毕业后,顺利成为程序猿,一直在外企,去了硅谷,放弃了公司给的技术移民。因为觉得在美国做技术,几十年的日子,一眼能望到头,没有意思。国内明显机会更多更好。

技术上一直做到架构师,现在自由职业了。写了自己的量化交易系统,日子简单朴实,炒炒股票,带带孩子,弹弹吉他,看看闲书,玩玩游戏。

时不时想起年轻时的日子,那真是一段激情燃烧的岁月。

大家也可以通过邮件和我交流:hwei1001@vip.sina.com,谈谈技术、聊聊生活、交交朋友 ^_^

希望中国DOS联盟越来越好,越来越兴旺!
LLM 解释

技术细节补充与背景说明

  1. 自带汉字字库的实现逻辑
    文中提到的“读汉字点阵字库,直接写寄存器”是当时脱离中文系统显示汉字的核心方案:

    • 字库通常为 UCDOS 或 CCDOS 格式的 16×16/24×24 点阵库(如 HZK16),程序通过汉字内码(GB2312)计算字库偏移量(区码-0xA0、位码-0xA0 后,偏移量 = (区码-1)×94×点阵字节数 + (位码-1)×点阵字节数),直接读取点阵数据。
    • “直接写寄存器”指通过操作 VGA 图形模式下的显存寄存器(如 0x3C8 调色板索引、0x3C9 调色板数据,或 0xA0000 显存段直接写入像素),绕过 DOS 文本模式的 BIOS 调用,从而实现自定义汉字渲染。这种方式在图形模式下速度远快于依赖中文系统的文本模式,但需自行处理字符定位与颜色填充。
  2. “黑科技”的历史语境
    1990 年代中期,中文系统(如 UCDOS、Super CCDOS)需占用常规内存(UCDOS 约占 100KB+),且与部分游戏/软件存在兼容性问题。自带字库的方案无需加载外部中文系统,对内存紧张的 DOS 环境(尤其是运行游戏时)非常友好,因此在当时被视为“黑科技”。

  3. 双向链表的作用
    选单工具的双向链表主要用于存储菜单项数据(如名称、路径、图标索引),支持动态增删菜单项,这在当时的 DOS 应用中是较灵活的设计(相比静态数组更适合用户自定义配置)。

历史价值与技术变迁

该程序在 1996 年的技术环境下具有显著实用性:

  • 解决了 DOS 下“多程序快速启动”的痛点(类似后来 Windows 的快捷方式);
  • 脱离中文系统的汉字渲染方案,在当时内存资源有限、中文系统兼容性差的场景下是关键创新。

如今这类工具的实现门槛降低,主要得益于:

  • 现代开发工具对图形/输入的封装更完善;
  • 开源点阵字库与硬件抽象层(HAL)的普及,无需直接操作硬件寄存器。

其他补充

文中提到的“屏幕画图”需注意:DOS 下 VGA 图形模式(如 320×200×256 色)的显存布局为线性或 planar 模式,程序需根据显卡类型(如 VGA/SVGA)处理像素写入逻辑,这也是当时“玄学”问题的常见来源(如克隆显卡的显存映射差异导致显示异常)。



2025-6-30 20:56
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
AlexZhang
系统支持





积分 995
发帖 427
注册 2007-2-8
状态 在线
『第 4 楼』:   使用 LLM 解释/回答一下

Originally posted by hwei1001 at 2025-6-30 04:56:
源代码基本是找不到了 :(

记忆中,用到了下面的一些技术:
1、读汉字点阵字库,直接写寄存器,所以可以不用汉字系统支持,而且速度非常快。这 ...


哈哈,我们的经历几乎一样,学化学,来美国,去硅谷(虽然其实没去硅谷,但是是某个FLAG公司)


2025-7-1 09:23
查看资料  访问主页  发短消息  网志   编辑帖子  回复  引用回复
lydcn
初级用户





积分 38
发帖 16
注册 2006-2-19
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

谢谢楼主分享! 这样优秀的菜单程序现在很难找了,非常感谢!


2025-9-14 11:09
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
hwei1001
初级用户




积分 42
发帖 7
注册 2025-6-23
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

Originally posted by AlexZhang at 2025-7-1 09:23:


哈哈,我们的经历几乎一样,学化学,来美国,去硅谷(虽然其实没去硅谷,但是是某个FLAG公司)


在90年代,很多学理工科的男生,都转行做了编程。那个时代,PC刚刚起步,真的是充满了机会。

我是学化学的,公司的很多同事都不是科班,学物理、数学、化学、生物的都有。大家都做得很不错。

编程是为数不多的,可以靠很简单的工具(一台电脑),凭着热爱 + 努力学习,就可以学得很好的学科。

看得出,你也是高手,对编程有着热爱和极致的追求,以后多多交流!^_^




青春不再,出走半生,归来依然少年!
2025-9-27 20:23
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
hwei1001
初级用户




积分 42
发帖 7
注册 2025-6-23
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

Originally posted by lydcn at 2025-9-14 11:09:
谢谢楼主分享! 这样优秀的菜单程序现在很难找了,非常感谢!


不用客气,^_^

好的工具,多多推广,让更多的人用着开心,哈哈哈哈!




青春不再,出走半生,归来依然少年!
2025-9-27 20:27
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: