中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 自己编写F11 上一主题 | 下一主题
153146156
新手上路





积分 18
发帖 6
注册 2008-3-5
状态 离线
『楼 主』:  自己编写F11 [已使用 LLM 解释]

我想自己编写一个一键恢复的F11程序,请问需要哪些软件,要求的功能有,菜单,中文界面(界面只要简单的就行啦),有哪位大哥知道,麻烦告诉一声,谢谢。
LLM 解释

实现 DOS 下 F11 一键恢复程序的核心工具与技术前提

要实现 DOS 环境下带中文菜单的 F11 一键恢复程序,需以下工具与技术支持:

1. 核心工具链

  • 汇编器:如 MASM/TASM(用于编写中断处理、磁盘读写等底层逻辑),或 NASM(语法更灵活,后期更常见)。
  • C 编译器:如 Turbo C 2.0/3.0(适合快速实现菜单逻辑,需搭配 DOS 图形库)。
  • 中文显示工具:需解决 DOS 中文显示问题,常见方案包括:
    • 加载 UCDOS/CCDOS 等中文系统,通过其提供的 API(如 INT 10H 扩展或专用中断)输出中文;
    • 直接操作 VGA 显存,使用自定义点阵字库(需提前将中文点阵数据嵌入程序或存储在磁盘)。
  • 调试工具:Debug(系统自带,用于调试汇编代码或磁盘扇区操作)、Turbo Debugger(可视化调试 C/汇编混合代码)。

2. 功能模块的技术实现

  • F11 热键触发:需通过 INT 9H(键盘中断)钩子实现。程序启动时替换原键盘中断处理函数,检测到 F11 键码(扫描码 3B,通码 BB)时触发恢复流程;处理完成后需恢复原中断向量,避免系统崩溃。
  • 磁盘镜像读写:核心是直接读写硬盘扇区,依赖 INT 13H 中断:
    • 备份时:读取系统分区(如 C 盘)的引导扇区、FAT 表、根目录及数据区,存储为镜像文件(需注意:早期 DOS 下 INT 13H 仅支持 CHS 寻址,对大硬盘需扩展中断或使用第三方磁盘访问库);
    • 恢复时:将镜像文件写回对应扇区,需先卸载目标分区(避免文件系统冲突)。
  • 中文菜单界面
    • 若用 C 实现:可结合 Turbo C 的 graphics.h 库绘制图形界面,通过中文系统的 API 输出菜单选项;
    • 若用汇编实现:直接操作 VGA 显存(模式 13H3H),按坐标绘制菜单边框,调用字库点阵数据输出中文选项。

3. 关键限制与当年的常见挑战

  • 硬件兼容性:不同主板的 BIOS 对 INT 13H 的支持差异较大(如克隆主板的 CHS 寻址错误),可能导致镜像读写失败;
  • 中文显示依赖:若未加载中文系统,直接操作显存的方案需自带字库,增加程序体积;
  • 中断钩子风险:错误的 INT 9H 钩子可能导致键盘无响应,当年常因未正确保存/恢复中断向量引发系统死机;
  • 大硬盘支持:DOS 原生 INT 13H 仅支持最大 8GB 硬盘(CHS 寻址限制),若需支持更大硬盘,需使用 BIOS 扩展的 INT 13H Extensions(需检测主板是否支持)。

当年的常见误解

  • 不少用户误以为“一键恢复”仅需简单复制文件,忽略了 FAT 表、引导扇区等隐藏数据的备份,导致恢复后系统无法启动——这是因为 DOS 文件系统的完整性依赖这些底层结构,而非仅数据文件。

补充:简化实现的替代方案

若无需从零开发,当年可基于 Ghost 等工具的 DOS 版进行二次封装:通过 INT 9H 钩子触发 Ghost 的自动恢复脚本(如 ghost.exe -clone,mode=pload,src=d:\backup.gho,dst=1:1 -sure -rb),再用中文菜单包装脚本调用逻辑,可大幅降低开发难度。

注意:所有磁盘操作需在纯 DOS 环境(而非 Windows 下的 DOS 窗口)执行,否则可能因系统保护导致读写失败。



2008-5-30 00:23
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

按你目前的理解程度建议你再学习一段时间再来想这个问题。


2008-5-31 15:35
查看资料  发短消息  网志   编辑帖子  回复  引用回复
105076322
新手上路





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

中断10,中断13 用debug应该就可以了
不过我不会


2008-10-16 22:26
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
jlli0917
新手上路





积分 2
发帖 1
注册 2008-3-17
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

咱也想学,不过不知道从何入手


2008-10-17 22:41
查看资料  发短消息  网志   编辑帖子  回复  引用回复
pfox
银牌会员




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

qbwin





我的下载空间
2008-10-21 19:33
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
sgzhou6688
中级用户





积分 231
发帖 110
注册 2008-3-24
来自 中国大陆
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

等待最新处理方法》》》》》》》》》》》》》


2010-5-18 14:50
查看资料  发送邮件  发短消息  网志  OICQ (405418144)  编辑帖子  回复  引用回复
sgzhou6688
中级用户





积分 231
发帖 110
注册 2008-3-24
来自 中国大陆
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

论坛上的坛友没有反映》》》》》》》》》》》》》》》》》》


2010-5-22 17:42
查看资料  发送邮件  发短消息  网志  OICQ (405418144)  编辑帖子  回复  引用回复

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


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



论坛跳转: