LLM 解释
在 2010 年左右的 DOS 技术环境下,NDOS(Norton Utilities 附带的命令处理器,基于 4DOS)与 HDPMI32(HX DOS Extender 的 32 位 DPMI 服务器)配合使用时出现 A 盘访问错误,通常涉及中断重定向、DMA 访问冲突或 DPMI 服务器对硬件中断的处理机制。
技术背景分析
-
NDOS 与 4DOS 架构:
NDOS 作为 COMMAND.COM 的替代品,在启动时会扫描系统驱动器以初始化盘符列表、读取描述文件(如 DESCRIPT.ION)或执行启动配置文件。如果环境中存在配置不当,NDOS 可能会尝试访问不存在盘片的软驱,导致中断响应超时或产生挂起。
-
HDPMI32 的作用与风险:
HDPMI32 是一个 DPMI 宿主程序,负责将 16 位实模式中断映射到 32 位保护模式。软驱操作极度依赖 IRQ 6 和 DMA 通道。当 HDPMI32 接管中断向量表(IVT)后,如果保护模式与实模式之间的切换(Mode Switching)存在延迟,或者 HDPMI32 的异常处理机制与 BIOS 的软驱服务(INT 13h)冲突,就会导致磁盘读取超时,表现为“读取 A 盘出错”。
-
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 读写操作将失败。
-
技术前提:在使用
EMM386 或 JEMM386 时,确保为 DMA 留出了足够的 Buffer 空间(如 D=64 参数)。
4. 环境加载顺序
在 DOS 中,驱动程序和 TSR 的加载顺序至关重要。
-
推荐序列:
- 内存管理器(如
JEMM386 或 HIMEM.SYS)。
- 磁盘高速缓存(如
SMARTDRV),它能接管部分 INT 13h 调用并减少对实际硬件的频繁访问。
- NDOS。
- 仅在需要运行 32 位程序前加载
HDPMI32。
总结
该问题并非 A 盘“丢失”,而是 DPMI 保护模式映射机制破坏了实模式下 BIOS 软驱中断的时序或 DMA 路径。解决此类问题的最直接方法是在 AUTOEXEC.BAT 中通过 SET DOS16M=:1M 或调整 DPMI 宿主的参数来规避对传统 I/O 设备的干预,并确保 NDOS 配置文件中禁用了对 A 盘的自动轮询。如果 ndlist.exe 并非必须,应避免在加载 HDPMI32 的环境下运行该工具。