源代码基本是找不到了 :(
记忆中,用到了下面的一些技术:
1、读汉字点阵字库,直接写寄存器,所以可以不用汉字系统支持,而且速度非常快。这个属于当时的黑科技;
2、各种屏幕画图,包括按钮,需要规划好颜色,计算好大小、位置这些;
3、键盘、鼠标操作,属于常规内容;
4、数据结构就是普通的双向链表。
现在这些技术都很常规了,各种资料也很多。写一个这样的程序,对有心人来说已经很容易了。
本科和研究生,读了七年的化学。大二时,基本上都翘课去打游戏,然后迷上了计算机,开始学编程,从简单到复杂,Basic、Forthan、Pascal、C、C++。学生时代陆陆续续写了不少代码,有的被老师拿来做范例,可惜大部分都找不到了 :(:(:(
毕业后,顺利成为程序猿,一直在外企,去了硅谷,放弃了公司给的技术移民。因为觉得在美国做技术,几十年的日子,一眼能望到头,没有意思。国内明显机会更多更好。
技术上一直做到架构师,现在自由职业了。写了自己的量化交易系统,日子简单朴实,炒炒股票,带带孩子,弹弹吉他,看看闲书,玩玩游戏。
时不时想起年轻时的日子,那真是一段激情燃烧的岁月。
大家也可以通过邮件和我交流:
hwei1001@vip.sina.com,谈谈技术、聊聊生活、交交朋友 ^_^
希望中国DOS联盟越来越好,越来越兴旺!
LLM 解释
技术细节补充与背景说明
-
自带汉字字库的实现逻辑
文中提到的“读汉字点阵字库,直接写寄存器”是当时脱离中文系统显示汉字的核心方案:
- 字库通常为 UCDOS 或 CCDOS 格式的 16×16/24×24 点阵库(如
HZK16),程序通过汉字内码(GB2312)计算字库偏移量(区码-0xA0、位码-0xA0 后,偏移量 = (区码-1)×94×点阵字节数 + (位码-1)×点阵字节数),直接读取点阵数据。
- “直接写寄存器”指通过操作 VGA 图形模式下的显存寄存器(如
0x3C8 调色板索引、0x3C9 调色板数据,或 0xA0000 显存段直接写入像素),绕过 DOS 文本模式的 BIOS 调用,从而实现自定义汉字渲染。这种方式在图形模式下速度远快于依赖中文系统的文本模式,但需自行处理字符定位与颜色填充。
-
“黑科技”的历史语境
1990 年代中期,中文系统(如 UCDOS、Super CCDOS)需占用常规内存(UCDOS 约占 100KB+),且与部分游戏/软件存在兼容性问题。自带字库的方案无需加载外部中文系统,对内存紧张的 DOS 环境(尤其是运行游戏时)非常友好,因此在当时被视为“黑科技”。
-
双向链表的作用
选单工具的双向链表主要用于存储菜单项数据(如名称、路径、图标索引),支持动态增删菜单项,这在当时的 DOS 应用中是较灵活的设计(相比静态数组更适合用户自定义配置)。
历史价值与技术变迁
该程序在 1996 年的技术环境下具有显著实用性:
- 解决了 DOS 下“多程序快速启动”的痛点(类似后来 Windows 的快捷方式);
- 脱离中文系统的汉字渲染方案,在当时内存资源有限、中文系统兼容性差的场景下是关键创新。
如今这类工具的实现门槛降低,主要得益于:
- 现代开发工具对图形/输入的封装更完善;
- 开源点阵字库与硬件抽象层(HAL)的普及,无需直接操作硬件寄存器。
其他补充
文中提到的“屏幕画图”需注意:DOS 下 VGA 图形模式(如 320×200×256 色)的显存布局为线性或 planar 模式,程序需根据显卡类型(如 VGA/SVGA)处理像素写入逻辑,这也是当时“玄学”问题的常见来源(如克隆显卡的显存映射差异导致显示异常)。