中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 加载ndos hdpmi32 A盘丢失怎么办 上一主题 | 下一主题
qqqrun3
初级用户





积分 59
发帖 28
注册 2010-11-5
状态 离线
『楼 主』:  加载ndos hdpmi32 A盘丢失怎么办 [已使用 LLM 解释]

请教前辈,加载ndos hdpmi32 A盘丢失怎么解决,ndlist.exe执行时,老提示读取A盘出错!
LLM 解释

在 2010 年左右的 DOS 技术环境下,NDOS(Norton Utilities 附带的命令处理器,基于 4DOS)与 HDPMI32(HX DOS Extender 的 32 位 DPMI 服务器)配合使用时出现 A 盘访问错误,通常涉及中断重定向、DMA 访问冲突或 DPMI 服务器对硬件中断的处理机制。

技术背景分析

  1. NDOS 与 4DOS 架构: NDOS 作为 COMMAND.COM 的替代品,在启动时会扫描系统驱动器以初始化盘符列表、读取描述文件(如 DESCRIPT.ION)或执行启动配置文件。如果环境中存在配置不当,NDOS 可能会尝试访问不存在盘片的软驱,导致中断响应超时或产生挂起。

  2. HDPMI32 的作用与风险: HDPMI32 是一个 DPMI 宿主程序,负责将 16 位实模式中断映射到 32 位保护模式。软驱操作极度依赖 IRQ 6 和 DMA 通道。当 HDPMI32 接管中断向量表(IVT)后,如果保护模式与实模式之间的切换(Mode Switching)存在延迟,或者 HDPMI32 的异常处理机制与 BIOS 的软驱服务(INT 13h)冲突,就会导致磁盘读取超时,表现为“读取 A 盘出错”。

  3. NDLIST.EXE 的行为NDLIST.EXE 是 Norton 实用程序中用于列举设备或磁盘信息的工具。此类工具通常会调用低级磁盘功能来检测驱动器参数。在 DPMI 环境下,这种底层访问更容易触发映射错误。

核心原因与纠正建议

1. HDPMI32 的中断接管冲突

HDPMI32 默认可能会尝试管理所有硬件中断。在处理具有严格时序要求的软驱 I/O 时,若 DPMI 服务器配置为常驻并截获了 INT 13h 或 IRQ 6,可能导致实模式下的 BIOS 回调失败。

  • 纠正方法:尝试调整 HDPMI32 的加载参数。通常使用 -r 参数使其作为 TSR 常驻,但应避免在不需要 32 位扩展的环境下强制加载。如果仅为特定程序使用,建议使用 HDPMI32 -u 在程序运行结束后卸载。

2. NDOS 的驱动器搜索机制

NDOS 有一个特性会扫描所有可用盘符以维护其内部的驱动器列表。如果 NDOS.INI 中没有限制扫描范围,或者设置了搜索 A 盘上的配置文件,会导致报错。

  • 配置优化:检查并修改 NDOS.INI(通常位于 NDOS 所在目录或通过 NDPATH 环境变量指定)。
    • 确保 LogDisks 设置不包含 A 盘。
    • 禁用 DescriptionName 自动搜索,防止其在每个驱动器根目录查找描述文件。
    • 检查 PATH 环境变量,确保 A: 不在搜索路径中。

3. DMA 与内存冲突

DPMI 服务器在物理内存高端(UMB)或扩展内存(XMS)中分配缓冲区。软驱的 DMA 传输通常要求缓冲区位于物理内存的前 16MB 区域(甚至前 1MB)。如果 HDPMI32 将数据缓冲区映射到了 DMA 无法触达的区域,INT 13h 读写操作将失败。

  • 技术前提:在使用 EMM386JEMM386 时,确保为 DMA 留出了足够的 Buffer 空间(如 D=64 参数)。

4. 环境加载顺序

在 DOS 中,驱动程序和 TSR 的加载顺序至关重要。

  • 推荐序列
    1. 内存管理器(如 JEMM386HIMEM.SYS)。
    2. 磁盘高速缓存(如 SMARTDRV),它能接管部分 INT 13h 调用并减少对实际硬件的频繁访问。
    3. NDOS。
    4. 仅在需要运行 32 位程序前加载 HDPMI32

总结

该问题并非 A 盘“丢失”,而是 DPMI 保护模式映射机制破坏了实模式下 BIOS 软驱中断的时序或 DMA 路径。解决此类问题的最直接方法是在 AUTOEXEC.BAT 中通过 SET DOS16M=:1M 或调整 DPMI 宿主的参数来规避对传统 I/O 设备的干预,并确保 NDOS 配置文件中禁用了对 A 盘的自动轮询。如果 ndlist.exe 并非必须,应避免在加载 HDPMI32 的环境下运行该工具。



2010-11-18 00:06
查看资料  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: