MS-DOS 7 系统编程入门/精选驱动程序
第 5 章 为 MS-DOS 7 选择驱动程序
驱动程序是包含可执行驻留代码的文件。驻留代码是适应写入 RAM(随机存取存储器)并留在那里,等待在某些场合被请求的代码。当这个特定的场合发生时,驱动程序的代码被执行,执行其任务,然后再次被留下等待下一个请求。这种行动方式类似于操作系统内核的“生命”。MS-DOS 将有限数量的内核功能与驱动程序提供的各种功能扩展相结合。正确选择和更新驱动程序是 DOS 在不断变化的 PC 硬件中生存的重要因素。
驱动程序可以以包含特殊标头的文件(A.05-1)的形式呈现,通常以 *.SYS 后缀标记,或者以包含 TSR(终止并驻留)部分的普通可执行文件 (*.COM 或 *.EXE) 的形式呈现。带有 *.SYS 后缀的驱动程序必须通过配置文件 CONFIG.SYS 的行中的 DEVICE(4.06)或 DEVICEHIGH(4.07)命令加载。CONFIG.SYS 文件的组成示例在文章 9.01-01、9.04-01 和 9.09-01 中显示。通过 DEVICE 或 DEVICEHIGH 命令加载提供了更多机会来影响 DOS 系统结构的构建,因为此时它尚未完成。
带有 *.COM 和 *.EXE 后缀的驱动程序通常从 CONFIG.SYS 文件中通过 INSTALL(4.15)或 INSTALLHIGH(4.16)命令,或从 AUTOEXEC.BAT 文件(9.01-02、9.04-02、9.09-02),或从命令行 - 直接或使用 LH 命令(3.17)加载。从 CONFIG.SYS 文件中加载较不容易受到相互软件干扰,因此被认为更安全。另一方面,INSTALL 和 INSTALLHIGH 命令不能参与 MEMMAKER.EXE 优化程序的内存优化过程。如果内存优化很重要,则应优先考虑从 AUTOEXEC.BAT 文件使用 LH 命令加载。
为 MS-DOS 7 提供的主要驱动程序组是那些在 WINDOWS-95/98 操作系统版本中以及在它的救援软盘中提供的驱动程序。在标准操作系统安装的情况下,为 MS-DOS 7 提供的所有驱动程序都在 \WINDOWS 和 \WINDOWS\COMMAND 目录中。但是,如果 MS-DOS 7 作为独立操作系统安装,最好为驱动程序安排一个单独的目录,例如 C:\DOS\DRV。此路径在大多数提供的示例中显示。当您打算在实践中遵循这些示例时,重要的是要记住:您指定的路径不一定是 C:\DOS\DRV,它必须是确切地指向您特定计算机中每个特定驱动程序的路径。
除了 “原生” 的微软驱动程序之外,自 1995 年以来,其他软件供应商和 PC 硬件制造商也为 MS-DOS 7 开发了许多驱动程序。现有的驱动程序非常多,这里只能描述其中的一部分。以下文字不包括对其他微软驱动程序的描述(这些驱动程序可以在 Windows 95 软件版本提供的 MSDOSDRV.TXT 中找到),也不包括对某些非通用设备(MO、PD 和 ZIP 驱动器、LS120 软盘、磁带机等)的驱动程序的描述。优先考虑那些对于修复工作最必要的驱动程序。
在用于加载 Windows 95/98 或 MS-DOS 7 的磁盘的根目录中,有两个隐藏的系统文件:IO.SYS 和 MSDOS.SYS。这些文件从操作系统安装时就存在,它们实现了操作系统的加载。文件 IO.SYS 将 MS-DOS 7 的核心与解释器和 DOS 加载器结合在一起。MSDOS.SYS 文件包含一组加载参数。如果您没有这些文件,您可以从带有 Windows 95/98 版本的磁盘中获取它们,或者您也可以从互联网网站 http://www.micosyen.com/msdos.php 下载它们,例如打包在 DOS7.ZIP 存档中。
为了使磁盘可以使用 MS-DOS 7 启动,必须存在上述系统文件,但这还不够。引导扇区的可执行代码不会“知道”应该将控制权转移到哪里,除非引导扇区中写入了加载程序的名称。这就是为什么复制系统文件与引导扇区更新相结合,在 SYS.COM 工具(6.24)的联合任务中。
获得对引导过程的控制后,DOS 加载器从 MSDOS.SYS 文件中读取加载参数。这些参数定义了文章 1.02 中描述的备选方案,并且还定义了要加载的操作系统:MS-DOS 7 或 WINDOWS-95/98。如果 MSDOS.SYS 文件的 HRS 属性(H = 隐藏、R = 只读、S = 系统)被 ATTRIB.EXE 工具(6.01)移除,则 MSDOS.SYS 成为一个普通的非格式化文本文件,可以使用编辑器工具打开、更改和重写,例如使用 EDIT.COM(6.09)。
MSDOS.SYS 文件中可能没有指定几个甚至所有参数,在这种情况下,省略的参数将被赋予默认值。与其他系统文件不同,MSDOS.SYS 不会被 SYS.COM 工具复制,而是会重新创建为空,这不会妨碍 WINDOWS-95/98 操作系统的正常加载。但是,至少一些默认参数的值不适合,如果您打算将 MS-DOS 7 作为独立操作系统加载。下面提供的 MSDOS.SYS 文件示例中显示了所有参数的适当值。
[Paths] WinDir=C:\WINDOWS ; path for environmental variables TMP, TEMP and PATH WinBootDir=C:\WINDOWS ; path for environmental variable WINBOOTDIR HostWinBootDrv=C ; announcement of the disk used to boot the PC [Options] Logo=0 ; hide loading messages under logo (= 1) or not (= 0) BootMenu=0 ; display Windows’s boot menu (= 1) or not (= 0) BootMenuDelay=20 ; delay in seconds of default menu item choice BootMenuDefault=1 ; menu item number to be chosen as default BootKeys=1 ; enable (= 1) or disable (= 0) the "hot keys" F5, ; Shift-F5, F6, F8 and Shift-F8, described in article 1.02 BootDelay=2 ; waiting time (in seconds) for "hot key" keystroke BootMulti=0 ; disable the F4 key (1.02) for previous DOS version BootWin=1 ; load MS-DOS 7 and Windows (= 1) or previous DOS (= 0) BootSafe=0 ; load Windows in ordinary (= 0) or in safe mode (= 1) BootWarn=0 ; don’t warn about loading Windows in safe mode BootGUI=0 ; load Windows with its GUI (= 1) or MS-DOS 7 (= 0) LoadTop=0 ; load Command.com and Dblspace.bin below 640 kb AutoScan=0 ; Scandisk.exe automatic launching conditions: ; – never launch automatically (= 0), ; – launch after each identified failure (= 1) ; – launch during each PC loading procedure (= 2) DBLSpace=0 DRVSpace=0 ; don’t load compression on-the-fly drivers. Otherwise ; value = 1 may be specified for one such driver only Network=0 ; load (= 1) or don’t load (= 0) network support DoubleBuffer=0 ; cancel default loading of Dblbuff.sys driver (5.06-02) DisableLog=1 ; don’t write loading report into Bootlog.txt file.
MSDOS.SYS 文件的每一行都会被解释器读取,并集成到同一个 IO.SYS 文件中。解释器会忽略所有以分号开头的行,这就是为什么这些行被用来插入注释的原因。当然,包含注释的行可以省略,但有一个反对这样做。为了与旧的杀毒软件兼容,隐藏的系统文件的大小必须不小于 1024 字节。对于大多数现代杀毒软件来说,这个限制并不重要。
MSDOS.SYS 文件示例中显示的所有参数值都与第 9.01、9.04、9.09 和 9.11 文章中介绍的配置文件变体兼容。[PATHS] 部分中的设置仅供 WINDOWS 操作系统考虑。对于 MS-DOS 7,环境变量的相应值应该被忽略或在稍后解释第二个配置文件 AUTOEXEC.BAT 时重新分配。[OPTIONS] 部分中的大部分参数也可以省略。不过,显示的完整参数列表将帮助您决定是否应该指定任何特定参数以及应该赋予其哪个值。在准备您自己的 MSDOS.SYS 文件版本后,不要忘记恢复其原始属性 HRS(隐藏、只读、系统)。
根据准备好的参数,DOS 加载程序会加载 MS-DOS 7 的核心。核心负责系统 DOS 服务和第 8.02 部分中描述的主要 INT 21 处理程序。最后一个加载程序的任务是执行来自配置文件 CONFIG.SYS 的命令,这些命令定义了大多数驱动程序的加载。CONFIG.SYS 文件的几个变体在第 9.01-01、9.04-01 和 9.09-01 文章中显示。后面的 MS-DOS 7 从未调用 IO.SYS 文件执行,但它的存在仍然是必要的,因为每次您需要使任何其他磁盘可启动时,都要复制它。
- 注释
- 在早期版本的 MS-DOS 中,MSDOS.SYS 文件不是文本文件,它包含 DOS 的核心,几乎像普通的驱动程序一样被加载。
- 在 2001 年,MS-DOS 7 的核心出现了一个错误:它没有正确处理 HDD 的 LBA 错误。因此,微软发布了一个修补后的核心文件 IO.SYS,位于 SFX 存档 311561usa8.exe 中。后者可以从 http://support.microsoft.com/kb/311561/en-us?spid=6519&sid=global 下载。WINRAR 版本 3.2(或更高版本)将 311561usa8.exe 解压缩为 CAB 存档。两个 IO.SYS 文件子版本隐藏在其中,昵称分别为 Winboot.98s 和 Winboot.98g。如果 VER 命令(3.32)报告版本 4.10.2222,则 IO.SYS 应通过重命名 Winboot.98s 获得。如果报告的版本为 4.10.1998,则 Winboot.98g 应以类似方式重命名并用作 IO.SYS。
5.01-02 DOS 版本号替换:驱动程序 SETVER.EXE
[edit | edit source]操作系统版本的演变带来了一个难题:应用程序程序是为以前的 DOS 版本开发的。任何应用程序与未来操作系统版本的兼容性是一个信仰问题,而不是预测问题。微软建议通过 INT 21\AH=30h(8.02-22)将实际的 DOS 版本号告知明确兼容的应用程序程序,而不是实际的版本号。SETVER.EXE 就是这样一个驱动程序,它负责通过替换 DOS 版本号来欺骗应用程序程序。
在标准安装 WINDOWS-95/98 的情况下,SETVER.EXE 驱动程序位于 \WINDOWS 目录中。但是,如果您想单独使用 MS-DOS 7,最好在其他 DOS 驱动程序的公共目录中拥有 SETVER.EXE 的副本。它必须由 CONFIG.SYS 文件的某一行中的 DEVICE(4.06)或 DEVICEHIGH(4.07)命令加载
DEVICEHIGH=C:\DOS\DRV\Setver.exe
其中
C:\DOS\DRV\
– 是存储在 DOS 驱动程序的单独目录中的 SETVER.EXE 驱动程序的路径示例。
只有当此程序的名称及其所需的 DOS 版本号预先注册在加载的 SETVER.EXE 驱动程序的 TSR 模块内的内部版本表中时,应用程序程序才会收到替换的 DOS 版本号。虽然这种替换不能保证正确的结果,但大多数旧程序能够在 MS-DOS 7 中正常运行。SETVER.EXE 驱动程序可以从命令行运行,就像一个普通的实用程序一样,例如,为了显示其简短的帮助文本
Setver.exe /?
从命令行运行时不带参数,SETVER.EXE 驱动程序会显示其内部版本表。最初,版本表并不为空:它的条目反映了微软的建议。为了将版本表附加一个条目,您应该键入
Setver.exe Qbasic.exe 6.22
其中
Qbasic.exe – 要“欺骗”的实用程序的名称示例。该名称必须具有后缀 *.COM 或 *.EXE。 | ||
6.22 |
– | 所需 DOS 版本号的示例。 |
从内部版本表中删除相同条目的命令需要 /D 参数,看起来像
Setver.exe Qbasic.exe /D
对内部表执行任何操作后,SETVER.EXE 驱动程序会留下以下错误级别值之一(有关错误级别的更多信息,请参见 3.15-03 和 9.07-03)
0 | – 成功完成 |
1 | – 无效的命令行开关规范 |
2 | – 无效的文件名规范 |
3 | – 内存不足以执行命令 |
4 | – 无效的版本号格式 |
5 | – 指定的条目在版本表中未找到 |
8 | – 命令行中的参数太多 |
9 | – 缺少一个或多个必需的参数 |
10 | – 读取版本表时检测到错误 |
11 | – 版本表已损坏 |
13 | – 版本表中没有为新条目分配更多空间 |
14 | – 写入包含新表的 SETVER.EXE 时发生错误 |
所有影响内部表内容的成功操作都以相同的方式完成:磁盘上的以前内部表将被其更新的变体覆盖,其中包含已更改的条目。但是,将更改写入磁盘上的文件不足以使其生效。当更改的版本表从文件传输到驱动程序的 TSR 模块中时,它们才会生效,该模块由 DEVICE 或 DEVICEHIGH 命令加载到内存中。这就是为什么这些更改仅在 PC 重新启动后才会生效的原因。
5.02 国家适应驱动程序
[edit | edit source]5.02-01 COUNTRY.SYS – 规范数据文件
[edit | edit source]在标准安装 WINDOWS-95/98 操作系统的情况下,COUNTRY.SYS 文件位于 \WINDOWS\COMMAND 目录中。COUNTRY.SYS 实际上是一组数据表,其中一个表需要使用特殊 COUNTRY 命令(4.05)从 CONFIG.SYS 文件加载,例如
COUNTRY=007,866,C:\DOS\DRV\Country.sys
其中
007 |
– | 国家代码(A.02-2),特别是对于俄罗斯; |
866 |
– | 代码页编号(A.02-2),为俄罗斯定义字符集; |
C:\DOS\DRV\ – 复制到 DOS 驱动程序的公共目录中的 COUNTRY.SYS 文件的路径示例。 |
加载后,来自 COUNTRY.SYS 的数据会更改几个与国家/地区特定的约定相关的内部 DOS 设置,这些约定涉及显示时间、日期、货币和标点符号、字符排序以及对名称字符集(A.02-5)的国家/地区限制。后一项功能尤为重要,因为否则,其名称中包含国家/地区字符的文件可能无法访问。
5.02-02 DISPLAY.SYS – 字符生成器驱动程序
[edit | edit source]DISPLAY.SYS 驱动程序为一个或多个国家/地区代码页表准备内存缓冲区,指定字符集和轮廓(A.02-2)。通常,DISPLAY.SYS 驱动程序位于 \WINDOWS\COMMAND 目录中。此驱动程序必须由 CONFIG.SYS 文件中的一行中的 DEVICE(4.06)或 DEVICEHIGH(4.07)命令加载
DEVICE=C:\DOS\DRV\Display.sys CON=(EGA,866,2,1)
其中
C:\DOS\DRV\ – 复制到 DOS 驱动程序的专用目录中的 DISPLAY.SYS 驱动程序的路径示例。 | ||||||||
CON |
– | (控制台)– 指定显示器作为输出设备(没有替代方案)。 | ||||||
EGA |
– | 表示 PC 配备了 EGA、VGA 或 SVGA 显卡;EGA 类型的替代方案是
当省略显卡类型时,DISPLAY.SYS 驱动程序会尝试确定它,但这会留下出错的可能性。 | ||||||
866 |
– | 主代码页编号(A.02-2),特别是对于俄罗斯。每个 EGA.CPI、EGA2.CPI、EGA3.CPI 和 ISO.CPI 文件中都提供了一些代码页。稍后,MODE.COM 实用程序(6.18)可以用来选择适当的代码页并将其写入 DISPLAY.SYS 驱动程序准备的内存缓冲区中。 | ||||||
2 |
– | 除了为前一个代码页编号指定的那个为字符集准备的内存缓冲区之外,要准备的内存缓冲区的数量。对于 EGA、VGA 和 SVGA 显卡,允许使用 0 到 6 个辅助缓冲区,对于 LCD 视频模块,不超过 1 个,对于 CGA 和 MDA 显卡,仅 0 个。 | ||||||
1 |
– | 每个代码页的硬件支持的字体的数量。此编号可以与前面的逗号一起省略。默认值为 LCD 类型的 1 和 EGA、VGA 和 SVGA 显卡的 2。 |
- 注释
- 括号内的所有参数都可以省略(括号留空),然后 DISPLAY.SYS 驱动程序会指定默认设置。
- DISPLAY.SYS 驱动程序的 TSR 模块将打开以与通过 INT 2F\AX=AD00-AD03h(8.03-26、8.03-27)进行交互的程序进行交互。
5.02-03 NLSFUNC.EXE – 代码页切换
[edit | edit source]NLSFUNC.EXE 驱动程序激活 CHCP 命令(3.04)以在不同的代码页之间切换,并与其他国家/地区设置的更改协调。通常,此驱动程序位于 \WINDOWS\COMMAND 目录中。NLSFUNC.EXE 驱动程序可以直接加载,也可以使用 LH 命令(3.17)从命令行或 AUTOEXEC.BAT 文件加载,或者从 CONFIG.SYS 文件使用 INSTALL(4.15)或 INSTALLHIGH(4.16)命令加载,例如
INSTALLHIGH=C:\DOS\DRV\Nlsfunc.exe C:\DOS\DRV\Country.sys
其中
C:\DOS\DRV\ – 复制到 DOS 驱动程序的公共目录中的 NLSFUNC.EXE 驱动程序的路径示例。 |
C:\DOS\DRV\Country.sys – 具有国家/地区规范数据的文件的路径和名称示例(5.02-01)。 |
- 注释
- 在美式英语和任何其他国家/地区表示法之间切换不会暗示更改代码页:美式英语表示法可以在任何单个国家/地区代码页(A.02-02)中访问。
- 可以使用 MODE.COM 实用程序(6.18-03)在不同的国家/地区代码页之间切换。后者通常更受欢迎,因为 MODE.COM 不是 TSR 程序,并且会在终止后释放已占用的内存。
微软的键盘驱动程序 KEYB.COM 提供了对键盘布局的控制。通常它可以在 \WINDOWS\COMMAND 目录中找到。KEYB.COM 驱动程序可以从 AUTOEXEC.BAT 文件直接加载,也可以使用 LH 命令 (3.17) 加载,或者从 CONFIG.SYS 文件使用 INSTALL (4.16) 或 INSTALLHIGH (4.17) 命令加载,例如
INSTALL=C:\DOS\DRV\Keyb.com UK,850,C:\DOS\DRV\Keybrd3.sys /E /ID:168
其中
C:\DOS\DRV\ – 复制到 DOS 驱动程序通用目录中的 KEYB.COM 驱动程序的路径示例。 | ||
UK |
– | 国家键盘布局代码的两位字母示例 (其他布局代码见附录 A.02-2)。 |
850 |
– | 国家代码页编号的示例 (A.02-2)。当仅在此处指定时,它不会在显示代码页通过 CHCP 命令更改后自动更改。如果首选代码页的同步更改(在显示和键盘上),则此处应省略代码页编号,但两个包含的逗号必须保持不变 (. . .UK, ,C:\DOS\DRV\Keybrd3.sys. . . )。 |
C:\DOS\DRV\KEYBRD3.SYS – 键盘数据文件的路径和名称示例。每个这样的文件包含多个国家布局表 (A.02-2)。 | ||
/E |
– | 此参数指定键盘布局应适应“增强型” 101/108 键键盘。 |
/ID:168 |
– | 特定键盘子类型的标识符,仅在使用多个键盘布局的国家/地区需要 (A.02-2)。大多数国家/地区,包括俄罗斯,只使用一种键盘布局,因此应省略子类型标识符 /ID。 |
加载后,KEYB.COM 驱动程序将激活以下“热”键组合
CTRL-RightSHIFT – 键入 128-255 范围内的符号,每个选定的国家代码页都有特定符号; |
CTRL-LeftSHIFT – 键入 032-127 范围内的符号(英文字母、数字和标点符号),所有代码页都通用; |
CTRL-ALT-F1 – 激活原始美式代码页 437(所选国家代码页将被禁用); |
CTRL-ALT-F2 – 从美式代码页 437 返回到所选国家代码页; |
CTRL-ALT-F7 – 启用打字机键盘模式,如果加载的键盘布局表支持该模式。 |
所有这些“热”键切换都伴有糟糕的蜂鸣声,而且没有简单的方法可以消除它。
- 注释
- KEYB.COM 驱动程序的 TSR 模块通过 INT 2F\AX=AD80h-AD83h (8.03-28, 8.03-30) 对程序打开以进行交互。
KEYRUS.COM 驱动程序 (由 D.Gurtjak,Donetzk 编写) 是一个键盘和字符生成驱动程序组合。它在俄罗斯用户中很受欢迎,因为它最初提供内部 866 (俄语) 代码页和俄语键盘布局。但 KEYRUS.COM 的原始版本也包含补充程序,这些程序使用户能够编写、安装和激活任何代码页和任何键盘布局。KEYRUS.COM 驱动程序可以从许多俄罗斯互联网网站免费下载。最后一个版本 8.0b (1994) 打包在 keyrus8b.zip 存档中,可从作者网站 http://www.gurtjak.skif.net/pages/programs.htm 获取。
KEYRUS.COM 驱动程序可以使用 INSTALL (4.15) 或 INSTALLHIGH (4.16) 命令从 CONFIG.SYS 文件加载,也可以从命令行或 AUTOEXEC.BAT 文件的某一行加载 - 直接加载或使用 LH 命令 (3.17) 加载,例如
LH C:\DOS\DRV\Keyrus.com
当默认设置不足时,应在同一命令行中的驱动程序名称后面指定选项。由于选项可能很多,因此可以在单独的文件中指定它们;此文件的任意名称必须以符号“@” (at) 开头。
LH C:\DOS\DRV\Keyrus.com @Opt_file.ext
KEYRUS.COM 不会加载,也不会影响它已加载的 TSR 部分,当它在命令行中执行以显示默认选项 Keyrus /?
时,或使用 Keyrus /FILES
提取内部字体和键盘布局时,或更改默认规范时,在这种情况下,驱动程序名称 (KEYRUS.COM) 必须后跟一组选项,而该组中的最后一个选项必须是 /SAVE
。
KEYRUS.COM 驱动程序由三个 TSR 模块组成:键盘模块、字符生成模块和接口模块。每个模块都接受自己的一组选项。如果未另行指定,则 KEYRUS.COM 接受选项“ON”而不是选项“OFF”(反之亦然),在下面示例中的所有地方始终是允许的,并会导致相反的结果。
键盘模块的选项有:
/KEYBOARD=Off – 不加载键盘模块,使用 BIOS 的布局。 |
/BASE_KEYS – 启用键重新分配 (默认值为 OFF)。 |
/KEYS=filename.ext – 从文件中获取键盘布局。此文件 (长度为 212 或 318 字节) 可以由 KEYEDIT 实用程序创建,该实用程序与驱动程序一起提供。当 KEYRUS.COM 使用 /SAVE 选项启动时,指定的 文件不会加载,而是成为 KEYRUS 的内部默认布局。 |
/BUFFER=ON – 将键盘缓冲区扩展到 31 个字符。 |
/FAST=ON,10,1 – 设置键盘速度 (0 – 最快,然后是 1, 2, 4, 8, 10, 13, 16, 20, 31 – 最慢) 和延迟时间,从 0 (0,25 秒) 到 3 (1 秒)。 |
/RUSALT=ON – 在按下 ALT 键时,启用在任何国家键盘布局中键入符号 [ ] ; ' , . /。 |
/BEEP=OFF,rus – 在 RUS (任何国家) 键盘布局中,按键时没有蜂鸣声。可以指定 LAT (拉丁) 和 ALT (伪图形) 布局来代替 RUS。 |
/CLICK=OFF,rus – 在 RUS (任何国家) 键盘布局中,按键时没有点击声。可以指定 LAT (拉丁) 和 ALT (伪图形) 布局来代替 RUS。 |
/LAMP=ON,rus – 在 RUS (任何国家) 键盘布局中,ScrollLock 灯亮起。可以指定 LAT (拉丁) 和 ALT (伪图形) 布局来代替 RUS。 |
/COLOR=0,2 – 使用边框颜色指示键盘布局。左侧颜色代码 (0 = 黑色) 用于 RUS (任何国家) 键盘布局。右侧颜色代码 (2 = 深绿色) 用于 ALT (伪图形) 键盘布局。其他允许的颜色代码见附录 A.10-5。 |
/ALT=87,4 – 设置用于切换到伪图形键盘布局的“热”键。Shift 4 和扫描码 87 表示使用 CTRL-F11 键组合进行切换。 [注 3][注 4] /ALT=OFF 表示无法访问伪图形键盘布局。 |
/SCAN=54,4 – 设置用于切换到 RUS (任何国家) 键盘布局的“热”键。Shift 4 和扫描码 54 表示使用 CTRL-RightSHIFT 键组合进行切换。 [注 3][注 4] |
/LAT=42,4 – 设置用于切换到拉丁键盘布局的“热”键。Shift 4 和扫描码 42 表示使用 CTRL-LeftSHIFT 键组合进行切换。 [注 3][注 4] /LAT=OFF 表示使用一个“热”键来切换到国家键盘布局并返回。 |
/MODESHIFT=87,1 – 设置一个“热”键,用于在按下此“热”键时临时切换键盘布局。Shift 1 和扫描码 87 对应于 RightSHIFT-F11 键组合。 [注 3][注 4] /MODESHIFT=OFF 禁用临时切换。 |
/CLRSCAN=ON – 将所有“热”键重置为原始默认值。重新配置“热”键需要加载 KEYRUS 的接口模块。挂钩的“热”键必须选择,以便不会被驻留外壳或其他 TSR 拦截。 |
字符生成器的模块接受以下选项
/BLANK=ON,9,ON,ON – 在空闲 9 分钟后清空屏幕;第二个“ON”用于感知鼠标的移动,最右边的“ON”用于感知屏幕输出。 | ||
/SWITCH=22,6 – 设置一个“热”键,用于将字符生成器切换到 DOS 的默认代码页 437;扫描码 22 对应于字母“U”,Shift 6 表示同时按下 CTRL 和 LeftSHIFT 键。 [注 3][注 4] 代码页切换不会影响键盘布局。 /SWITCH=OFF 表示无法访问代码页 437。 | ||
/EGA |
– | 假设 PC 配备了与 EGA 兼容的显卡。可以指定 /VGA 来代替 /EGA ,以假设 PC 配备了与 VGA 兼容的显卡。/EGA 和 /VGA 选项都不会被 /SAVE 操作保存。 |
/8x8=ON |
– | 为 80x43、80x50 和类似的文本视频模式加载 8x8 字体。此选项可以设置为 OFF 和 AUTO,后者表示根据软件请求加载。 |
/8x14=ON |
– | 加载 8x14 字体 (由 MS WORD for DOS 使用)。此选项也可以设置为 OFF 和 AUTO,就像 /8x8 选项一样。 |
/8x16=ON |
– | 为 80x25 主 DOS 视频模式 03 加载 8x16 字体。此选项也可以设置为 OFF 和 AUTO,就像 /8x8 选项一样。 |
/FULL |
– | 加载所有 3 种内部字体。 |
/ROM |
– | 不加载内部字体,使用 DOS 的默认字体。 |
/FONT=filename.ext – 加载单独文件中给出的外部字体;当与 /SAVE 选项一起使用时,字体不会加载到内存中,而是被接受为 KEYRUS 驱动程序的默认内部字体。 | ||
/DELETEFONT – 删除最近安装的字体。 | ||
/COMPRESS=OFF – 不压缩字体 (ON 仅适用于文本视频模式)。为图形视频模式和 Windows 操作系统的“DOS 窗口”选择 OFF。 | ||
/ALL |
– | 加载所有符号 0-255。这意味着没有字体压缩(/COMPRESS=OFF )。 |
/128 |
– | 加载符号 128-255。这意味着没有字体压缩(/COMPRESS=OFF )。 |
/RANGE=128-175,224-239 - 加载两个指定范围内的符号,如示例所示。 | ||
/RUSSIAN |
– | 加载与上面示例相同的范围,但使用字体压缩(/COMPRESS=ON )。要关闭压缩,必须显式指定选项 /COMPRESS=OFF 。 |
KEYRUS.COM 驱动程序的接口模块接受以下选项集
/ANYWAY |
– | 允许将驱动程序的 TSR 模块再次加载到内存中。 |
/DELAY_INIT - 暂停驱动程序的 TSR 模块的初始化,直到从命令行启动 KEYRUS.COM 驱动程序。 | ||
/INTERFACE=OFF - 使接口模块保持非活动状态。当处于非活动状态时,可编程重新配置被禁用,KEYRUS.COM 驱动程序无法检测到其 TSR 模块在内存中的存在,也无法从内存中卸载它们。 | ||
/RELEASE |
– | 从内存中卸载 KEYRUS.COM 驱动程序的 TSR 模块。此操作需要接口模块处于活动状态(默认情况下为 /INTERFACE=ON )。 |
- 注释
- KEYRUS.COM 驱动程序与 Microsoft 的驱动程序 DISPLAY.SYS(5.02-02)和 KEYB.COM(5.02-04)以及 Microsoft 的键盘布局表 KEYB*.SYS(A.02-2)不兼容。如果您打算加载 KEYRUS.COM 驱动程序,则不应使用这些文件。
- KEYRUS.COM 驱动程序的驻留接口模块通过 INT 2F\AX=4352h(8.03-24)与程序交互。
- ^ a b c d e 此处的移位是右 SHIFT 键数字 1、左 SHIFT 键数字 2、CTRL 键数字 4、ALT 键数字 8、ScrollLock 开关数字 16、NumLock 开关数字 32、CapsLock 开关数字 64 和 Insert 开关数字 128 的总和(参见 8.01-85,AL 中返回的字节)。例如,移位 12 表示在按下由其扫描码定义的主“热键”时按住 CTRL 和 ALT 键。
- ^ a b c d e KEYRUS.COM 驱动程序接受十进制扫描码,因此必须将表 A.02-1 中第二列中的十六进制值转换为十进制形式。除此之外,KEYRUS.COM 无法正确区分带有和不带有前缀 E0h 的扫描码。
- 在 Windows-95/98 操作系统的“DOS 窗口”中,KEYRUS.COM 驱动程序仅在文本视频模式下才能正常运行,也就是说,当使用 ALT-ENTER 键将此“DOS 窗口”扩展到整个屏幕时。Windows 2000/XP 操作系统的“DOS 窗口”也可以由 KEYRUS.COM 驱动程序提供服务,但在这种情况下,它必须从位于 \WINDOWS\SYSTEM32 目录中的 CONFIG.NT 文件或 AUTOEXEC.NT 文件加载。
当满足四个条件时,鼠标指向设备的功能变得可用。首先,您必须有一个能够执行所需功能的鼠标,并且可以连接到您的计算机。其次,您必须加载一个驱动程序,该驱动程序支持使用适当连接类型的鼠标执行所需功能。第三,所需的函数必须由要使用这些函数的程序调用。第四,驱动程序和程序都必须能够在计算机中安装的操作系统下运行。
关于鼠标指向设备,MS-DOS 7 操作系统似乎不一致。一方面,Windows-95/98 版本没有为 MS-DOS 7 提供鼠标驱动程序。另一方面,例如,编辑实用程序 EDIT.COM(6.09)需要鼠标的功能,并且来自以前版本的 DOS 的鼠标驱动程序在 MS-DOS 7 下可以正常运行。所有这些用于 DOS 的鼠标驱动程序都以相同的方式与应用程序交互,通过中断 INT 33(8.03-31 – 8.03-55)。
鼠标指向设备连接到 PC 的方式由端口地址(A.14-1)和中断请求线路号(IRQ)定义。下面描述的鼠标驱动程序能够搜索所有相关端口和 IRQ 号的所有鼠标指向设备。尽管连接规范不是必需的,但它仍然可以给出以避免搜索并使加载更快。
进入新千年后,出现了另一种类型的“鼠标”——那些使用 USB 端口连接的“鼠标”。这种“鼠标”依赖于指向设备 BIOS 接口(INT15\AX=C2xx)以及驱动程序与该接口的交互(5.03-3)。在 BIOS 系统无法响应 INT15\AX=C2xx 调用的旧式 PC 中,可以通过选择适合 USB 控制器(5.07-05)的驱动程序来提供必要的支持,然后任何鼠标驱动程序都能够满足通过 USB 端口连接的鼠标。
GMOUSE.COM 驱动程序包含在具有知名商标 GENIUS 的鼠标指向设备的软件包中,该商标属于 KYE Systems Corporation。此驱动程序也可以在包含驱动程序集合的光盘中找到。GMOUSE.COM 驱动程序的 10.20 版本(1996 年)打包到 GMOUSE.ZIP 存档中,可以从互联网网站 http://www.dosbootsector.narod.ru/drivers.htm 免费下载。GMOUSE.COM 驱动程序可以从命令行或 AUTOEXEC.BAT 文件中直接加载,也可以通过 LH 命令(3.17)加载,或者可以通过 CONFIG.SYS 文件中的 INSTALL(4.15)或 INSTALLHIGH(4.16)命令加载,例如
INSTALLHIGH=C:\DOS\DRV\Gmouse.com
其中
C:\DOS\DRV\
- GMOUSE.COM 驱动程序路径的示例。
通常 GMOUSE.COM 驱动程序不需要参数规范,但它仍然可以接受以下任何一个相互排斥的参数
/1 |
- 鼠标通过串行端口 COM1 连接 |
/2 |
- 鼠标通过串行端口 COM2 连接 |
/3 |
- 鼠标通过串行端口 COM3 连接 |
/4 |
- 鼠标通过串行端口 COM4 连接 |
/P |
- 鼠标通过 PS2 端口连接。 |
/P2 |
- 2 键鼠标,通过 PS2 端口连接。 |
/P3 |
- 3 键鼠标,通过 PS2 端口连接。 |
/U |
- 从内存中卸载 GMOUSE.COM 驱动程序。 |
/? |
- 显示简短帮助。 |
列出的参数也适用于 GMOUSE.COM 驱动程序的较新版本,这些版本增加了文件大小和一些多余的功能,例如根据加载的代码页自动确定消息的语言。与较新版本相反,GMOUSE.COM 驱动程序的 10.20 版本可以从一个特殊的参数文件 GMOUSE.INI 中接受更多参数,如果该参数文件与驱动程序位于同一目录中。
- 注释
- 如果在加载过程中,例如,为了读取显示的消息,搜索鼠标指向设备的操作被 BREAK 键中断,那么在按下任何其他键后,GMOUSE.COM 驱动程序将无法恢复搜索,并且 PC 将被挂起。
- 当鼠标指向设备连接到端口 COM3 或 COM4 时,GMOUSE.COM 驱动程序不提供与 Windows 操作系统的兼容性。
MOUSE.COM 名称是几种鼠标驱动程序的通用名称,这些驱动程序是在不同时间由不同的作者编写的。这里描述的是 Microsoft 的 MOUSE.COM 驱动程序的 8.20 版本(文件大小为 37681 字节,文件日期为 1993 年 6 月 29 日)。它包含在 MS-DOS 6.22 版本中,但也被发现与 MS-DOS 7 兼容。包含 MOUSE.COM 驱动程序的存档 MOUSE.ZIP 可以从互联网网站 http://www.computerhope.com/download/hardware.htm#05 下载。MOUSE.COM 驱动程序可以从 CONFIG.SYS 文件中使用 INSTALL(4.15)或 INSTALLHIGH(4.16)命令安装,或者从 AUTOEXEC.BAT 文件中直接或使用 LH 命令(3.17)安装,或者稍后从命令行安装
C:\DOS\DRV\Mouse.com /C1 /R1 /S50 /P2 /N50 /Y
其中
C:\DOS\DRV\ - MOUSE.COM 驱动程序路径的示例。 | |||||||||||||||||
/C1 |
– | 选择 COM1 端口。除了 /C1 之外,还可能有
| |||||||||||||||
/R1 |
– | 指定中断速率 30 Hz(默认值)。备选方案是
| |||||||||||||||
/S50 |
– | 指定灵敏度;/S 之后的数字允许在 0-100 范围内,50 为默认值。除了 /S50 之外,还可能有单独的 /H50 - 水平灵敏度和 /V50 - 垂直灵敏度规范。 | |||||||||||||||
/P2 |
– | 慢速加速配置文件号。备选方案是
| |||||||||||||||
/N50 |
– | /N 之后的数字指定光标重绘速率(允许 0-255)。 | |||||||||||||||
/Y |
– | 使用硬件光标功能。 |
在大多数情况下,所有可选规范都不需要,因为默认值就足够了,而且驱动程序能够搜索所有相关端口的鼠标指向设备。
为了禁用鼠标,您可以通过使用单个 OFF 参数启动驱动程序来卸载它
C:\DOS\DRV\Mouse.com OFF
CTMOUSE.EXE 驱动程序自 2002 年起作为 FreeDOS 项目的一部分开发,但它与 MS-DOS 7 兼容。CTMOUSE.EXE 的 2.1 版本(日期为 2007 年),打包在 CTMOUS21.ZIP 档案中,可以从互联网网站 http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/mouse/ 下载。另一个可以找到此驱动程序的最新版本的地址是 http://cutemouse.sourceforge.net/ 。
在功能上,CTMOUSE.EXE 与其他 DOS 鼠标驱动程序类似,但它占用更少的内存并支持配备滚轮的指点设备。此驱动程序的另一个重要功能是它与指点设备 BIOS 接口(INT15\AX=C2xx)的交互。因此,它提供了在现代 PC 中满足 USB 鼠标的更好机会。CTMOUSE.EXE 驱动程序具有一组详细的默认设置,在大多数情况下使命令行参数变得不必要。它可以从命令行或从 AUTOEXEC.BAT 文件加载 - 直接或通过 LH 命令(3.17),或者从 CONFIG.SYS 文件通过 INSTALL(4.15)或 INSTALLHIGH(4.16)命令加载,例如
INSTALL=\DOS\DRV\Ctmouse.exe /S14 /3 /R33 /N
其中
\DOS\DRV\ – Ctmouse.exe 驱动程序的路径示例。 | ||
/S14 |
– | 仅通过串行端口搜索鼠标指点设备。第一个数字表示串行端口号(=COM1);第二个表示中断请求线路号(=IRQ 4)。如果没有指定 /S 参数,驱动程序将首先检查 PS2 端口,然后检查所有串行端口。 |
/3 |
– | 激活鼠标的第三个按钮。此功能不适用于鼠标系统类型的鼠标以及使用滚轮而不是中间按钮的鼠标。 |
/R33 |
– | 灵敏度设置:第一个数字是水平灵敏度等级;第二个数字是垂直灵敏度等级。如果只指定一个数字,它将应用于两个坐标。/R 的默认值为 33。 |
/N |
– | 即使已加载鼠标驱动程序,也要加载 Ctmouse.exe 驱动程序。此参数允许组合批处理文件,以便在卸载 Ctmouse.exe 驱动程序后,配置恢复到其原始状态,无论此状态是什么。 |
除了显示的参数外,Ctmouse.exe 驱动程序还可以接受以下选项
/? |
– 显示简短帮助; |
/P |
– 仅检查 PS2 端口; |
/Y |
– 不要搜索鼠标系统类型的“鼠标”; |
/V |
– 反转搜索顺序:首先检查串行端口; |
/O |
– 禁用鼠标滚轮检测; |
/L |
– 为左撇子调整按钮顺序; |
/B |
– 如果已经加载了某个鼠标驱动程序,则不要加载 Ctmouse.exe; |
/W |
– 将 Ctmouse.exe 加载到传统内存中; |
/U |
– 从内存中卸载 CTMOUSE.EXE 驱动程序(如果驱动程序的功能被拦截,则无法执行此操作)。 |
在 AT 兼容计算机中,640–1024 kb 内存区域是硬件指定用于特殊用途的,例如 BIOS 代码“影子”、视频内存的“窗口”、页面帧“窗口”等(有关更多详细信息,请参阅 A.12-1 的注释 2 和 3)。由于 16 位寻址以及 640–1024 kb 内存区域的特殊状态,DOS 程序可访问的内存空间受到很大限制。自 1980 年代初以来,所有领先软件公司的研究人员都试图克服内存空间限制。如今,许多独立软件供应商正在继续这些尝试。以下文章介绍了这个问题的最佳解决方案。
HIMEM.SYS 是微软为配备 80386 或更高 CPU 的 PC 提供的内存驱动程序,根据扩展内存规范 (XMS) 提供对超过 1024 kb 界限的内存的机器相关访问。因此,由 HIMEM.SYS 打开的内存通常称为 XMS 内存。自 HIMEM.SYS 驱动程序的 3.10 版本以来,XMS 内存的上限为 65535 kb。
除了访问 XMS 内存外,HIMEM.SYS 驱动程序还执行两个重要功能:控制 A20 线闸门的切换以及分配不同程序请求的内存空间。这两个功能对于防止程序之间发生冲突是必要的,这些程序访问超过传统内存限制(640 kb)的内存。由于 HIMEM.SYS 驱动程序,每个请求在 UMB 区域或 XMS 内存中分配一些空间的程序都被赋予对分配的内存空间的独占访问权限。
HIMEM 操作原理的官方解释尚不清楚,但对其代码的分析为我们提供了理由来推测它在实模式下使用 32 位线性寻址(有关更多信息,请参阅 9.10)。无论如何,HIMEM 的操作原理都没有机会在 XMS 内存中执行程序,它只提供了将可执行代码与数据从传统内存复制到 XMS 内存以及返回的机会。
HIMEM.SYS 驱动程序的 3.95 版本(1995 年)在 Windows 95/98 版本中提供,通常可以在 \WINDOWS 目录中找到。HIMEM.SYS 驱动程序应该使用 DEVICE 命令(4.06)加载,最好是在 CONFIG.SYS 文件的第一行可执行代码中加载,例如
DEVICE=C:\DOS\DRV\Himem.sys /V
其中
C:\DOS\DRV\ – HIMEM.SYS 驱动程序的路径示例; | ||
/V |
– | 显示加载信息。如果在加载 HIMEM.SYS 的同时按住 ALT 键,也可以实现相同的效果。 |
HIMEM.SYS 具有适合各种 PC 硬件的内部默认设置。在极少数情况下,您可能需要通过可选参数指定其他设置。允许的可选参数包括
/a20control:OFF – 允许 HIMEM.SYS 仅在处于非活动状态时接管 A20 总线,从而防止 A20 总线中断(默认值始终接管)。 | ||
/cpuclock:ON – 当 CPU 时钟频率受到上层内存访问的影响时,激活 CPU 时钟频率控制。此参数会使 HIMEM.SYS 运行速度变慢。 | ||
/eisa |
– | 提供对配备 EISA 总线的 PC 上超过 16 Mb 的内存的访问。 |
/hmamin=40 – 阻止为请求少于 40 kb 的任何程序保留 HMA 区域(1024–1088 kb)(范围为 0–63 kb)。默认情况下,无论程序打算使用多少 HMA 空间,都会将 HMA 区域分配给第一个请求它的程序。 | ||
/int15=128 – 为通过中断 INT 15\AH=87h(8.01-76)访问内存的程序保留 128 kb(范围为 64–65535,默认值为 0)。 | ||
/machine:AT – 指定 HIMEM.SYS 无法正确识别的 PC 类型,通过数字(从 1 到 17)或文字标识符(参见表 A.11-2)。默认值为数字 1 或标识符 AT(两者都对应于 IBM 的 PC/AT)。 | ||
/noabove16 – 不要使用 INT 15\AX=E801h(Compaq Bigmem 支持)来扫描超过 16 Mb 的内存。在这种情况下,HIMEM.SYS 无法提供对超过 16 Mb 的 XMS 的访问。 | ||
/noeisa |
– | 禁止在 EISA 总线上搜索内存扩展卡。 |
/numhandles=32 – 可以同时保持打开状态的 XMS 内存块的活动引用(句柄)的最大数量;允许的范围为 1 到 128,32 为默认值。 | ||
/shadowRAM:ON – 不要阻止 BIOS 将 RAM 传输到段地址空间 F000–FFFFh。当 HIMEM.SYS 检测到 RAM 大小为 2 Mb 或更小时,它会尝试阻止 BIOS 将 RAM 传输,以获得更多可用内存。 | ||
/testmem:OFF – 跳过 XMS 内存测试。 | ||
/X |
– | 不要使用 INT 15\AX=E820h(8.01-80)来探索内存。 |
- 注释
- 如果 CMOS BIOS 参数“内存空洞 15–16 Mb”已启用,则 HIMEM.SYS 驱动程序不会提供对超过 16 Mb 的内存的访问。
- HIMEM.SYS 驱动程序通过 CALL FAR 命令(7.03-08)接受程序的请求。CALL FAR 命令的地址可以通过 INT 2F\AX=4310h 函数(8.03-23)获得。表 A.12-3 列出了程序可以请求的操作列表。
- 几个类似的 XMS 内存驱动程序是由不同的作者开发的。J.R.Ellis 编写了 QHIMEM2.SYS 驱动程序,该驱动程序将 XMS 内存限制扩展到 4 Gb。该驱动程序的 3.1 版本(日期为 2005 年)可在网站 http://johnson.tmfc.net/dos/usbdrv.html 上的 SFX 磁盘映像 USB18.EXE 中找到。最新的 4 Gb XMS 内存驱动程序 XMGR.SYS 可以从页面 http://johnson.tmfc.net/dos/driver.html 下载。另一个类似的驱动程序 - Himem.exe -
是作为 FreeDOS 项目的一部分开发的,并与 Emm386.exe 一起提供(参见 5.04-02 的注释 4)。其他 XMS 内存驱动程序接受不同的选项集,这些选项集在附带文件中描述。
- 在 MS-DOS 8 中,XMS 访问代码已集成到核心,因此不需要加载 Himem.sys。
EMM 驱动程序(EMM = 扩展内存管理器)最初是在 1983 年至 1984 年间开发的,目的是为 IBM PC 上的扩展卡上的内存库提供访问权限,以便任何内存库都可以通过地址空间中的同一“窗口”来寻址(通常在段地址 E000–EFFFh 中)。这种寻址内存库的方法被 LIM EMS 规范制度化。除了其他细节之外,LIM EMS 规范规定将地址空间“窗口”划分为多个 16 kb 的页面,这些页面独立地将寻址定向到不同的内存库。
后来,主机的内存增长远远超过了 1 Mb,并且带有内存库的扩展卡已经不再使用。但一些流行的程序仍然依赖于老式的 LIM EMS 访问,并且必须保持与这些程序的兼容性。因此,EMM 驱动程序操作的基本原理发生了改变:对扩展卡的控制已被对所有 CPU(从 80386 开始)中嵌入的地址转换机制的控制所取代。这就是为什么这种内存管理器被称为 EMM386 的原因。它们使能够通过地址空间中的相同 LIM EMS “窗口”来寻址主机的内存,该内存超过 1 Mb。
这里只是提醒一下,主机内存超过 1 Mb 由 XMS 驱动程序 HIMEM.SYS (5.04-01) 控制,并且根据程序请求分配内存空间只是它的特权。因此,EMM386 驱动程序充当中间交易者:在收到程序对 LIM EMS 访问内存空间的请求后,它会询问 HIMEM.SYS 驱动程序并获取超过 1 Mb 的合适内存块。然后,EMM386 会重写 CPU 的 TLB 表中的数据,以便调用程序能够通过地址空间中的 LIM EMS “窗口”访问分配的内存块。如果没有单个请求大小的内存块,EMM386 驱动程序会组合几个较小的内存块。由于 CPU 中的地址转换,地址空间中的 LIM EMS “窗口”不仅允许访问,还允许执行程序。
EMM386 驱动程序的任务因地址转换机制仅在 CPU 在保护模式下工作时才被激活这一事实而变得复杂。因此,EMM386 驱动程序将 CPU 切换到虚拟 8086 (V86) 模式(保护模式的一种变体),然后所有 DOS 程序都以这种模式在第三个(最低)特权级别执行。当然,PC 必须具有 80386 或更高版本的 CPU,才能实现 V86 模式。EMM386 驱动程序允许 DOS 程序以最低特权级别进行 I/O 操作,因此对磁盘和端口的访问条件与实模式相同。EMM386 驱动程序使用 V86 模式固有的其他功能来加载其他驱动程序“通过”UMB 地址空间(640–1024 kb)的空闲区域,以及控制其他程序尝试影响保护模式的实现。
至少有三种类型的程序假装控制 DOS 中的保护模式实现。这些是扩展程序(例如,DOS4GW.EXE)、DPMI 服务器(例如,CSWDPMI.EXE)和操作系统加载程序(例如,Windows 的 GUI 加载程序 WIN.COM)。这样的竞争者无法以最低特权级别在 V86 模式下执行其任务。为了使控制能够平滑地转移到这些程序,VCPI 协议(VCPI = 虚拟控制程序接口)于 1989 年被采用。它是由 Phar Lap Software 和 Quarterdeck Office Systems 共同开发的。根据 VCPI 协议,将 CPU 切换到 V86 模式的程序必须根据请求执行几个额外的功能,包括转换为最高特权级别。由于 EMM386 实现了这些额外功能,因此它也被称为 VCPI 服务器。VCPI 服务器的一些功能在文章 8.03-71 – 8.03-73 中有所描述。
在 1088 kb 边界之外直接执行程序对于在那里加载驱动程序是必要的,但这还不够。普通的驱动程序代码不适应逐页寻址。因此,为了加载驱动程序,EMM386 管理器将 1088 kb 之外的内存静态映射到 UMB 块上,这些块可以压缩在 640 到 1024 kb 之间的所有可用地址空间段中。如果 EMM386 内存管理器已加载,然后从命令行再次启动它(不带参数),它将在屏幕上显示受托地址空间的确切分配。
Windows-95/98 版本包含 EMM386.EXE 驱动程序的 4.95 版本(日期为 1996 年 6 月 12 日,大小为 125495 字节)。但是,此版本并非旨在为单独的操作系统 MS-DOS 7 提供服务。4.95 版本将异常调用转移到 Windows OS 安装的保护模式处理程序。但是,当 MS-DOS 7 单独运行时,异常调用找不到其处理程序,并且 PC 会挂起。这就是为什么早期版本 4.49 或 4.50 的 EMM386.EXE 驱动程序更适合 MS-DOS 7 的原因。这些版本以相同的方式加载并接受相同的选项集。4.49 版本(日期为 1993 年 5 月 31 日,大小为 120926 字节)可以从服务器 ftp://ftp.vgt.ru/dos/ 中的磁盘镜像 Dos622_1.img 下载,该镜像可以由 IMG.EXE (6.06) 写入磁盘。然后,文件 EMM386.EX_ 应由 EXPAND.EXE (6.10) 解压缩。4.50 版本(日期为 1998 年 4 月 30 日,大小为 119390 字节)来自 IBM 的 PC DOS 2000 版本,可以从服务器 ftp://ftp.eesnet.ru/dos/ 中的 SFX 存档 Pcdos2k.exe 下载。
由 LH (3.17)、DEVICEHIGH (4.07) 和其他以 ...HIGH 结尾的命令加载 DOS 结构和其他驱动程序超出常规内存,需要内存管理器已经加载。但是,必须在 EMM386.EXE 驱动程序加载之前提前提供对常规内存以外的访问权限。因此,EMM386.EXE 驱动程序应由 DEVICE 命令 (4.06) 从 CONFIG.SYS 文件中的那行加载,该行位于 HIMEM.SYS (5.04-01) 加载行之后,但在所有以 ...HIGH 结尾的命令行之前。加载 EMM386.EXE 驱动程序的行可能看起来像例如
DEVICE=C:\DOS\DRV\Emm386.exe RAM V
其中
C:\DOS\DRV\ – EMM386.EXE 驱动程序的路径示例; | ||
RAM |
– | 允许安排 EMS 页面和 UMB 块(RAM 参数使用的另一种形式将在后面显示); |
V |
– | 显示 EMS 页面和 UMB 块的分配。 |
除了显示的选项之外,EMM386.EXE 驱动程序还可以从以下列表中接受可选参数:
OFF |
– | 暂停激活 EMM386.EXE,直到从命令行启动命令“EMM386.EXE ON”。参数 AUTO(而不是 OFF)也允许根据软件请求激活。当 EMM386.EXE 不处于活动状态时,它不支持通过 LH 命令和所有以“…HIGH”结尾的其他命令加载超出常规内存的内容。 |
8196 |
– | 请求的 EMS 内存大小的示例,以 kb 为单位,从 16 kb 到实际的空闲 XMS 内存的大小(后者是默认值),但不超过 32768 kb。如果指定了 NOEMS 开关(见下文),则默认值为零。EMM386 会将任何请求的值向下舍入到最接近的 16 kb 倍数。 |
min=256 |
– | 如果其可用量不超过此最小值,则不要建立 EMS 内存,范围从 0 到请求的内存大小,默认值为 256 kb(除非指定了 NOEMS 开关)。 |
W=ON |
– | 启用 Weitek 协处理器支持(默认值为 OFF)。当 EMM386 处于活动状态时,它会从命令行接受命令
|
M4 |
– | 页面帧放置的起始段地址规范示例。页面帧是用于连续放置 EMS 页面 0–3(每个 16 kb)的区域。“M”后面的数字是代码(从 1 到 14),表示段地址 1 =C000h,2 =C400h,3 =C800h,4 =CC00h,5 =D000h,6 =D400h,7 =D800h,8 =DC00h,9 =E000h(默认设置),10 =8000h,11 =8400h,12 =8800h,13 =8C00h,14 =9000h |
FRAME=CC00 – 相同页面帧起始地址的直接规范示例。其他起始地址(除上述地址外)不允许。为了禁止帧页面,您可以指定 FRAME=NONE,这将等同于 NOEMS 参数(见下文)。 | ||
/PCC00 |
– | 相同页面帧起始地址规范的另一种形式的另一个示例;在 /P 参数之后可以指定相同的 14 个值。 |
P4=DC00 |
– | 将另一个 EMS 页面 P4(第五个)添加到页面帧 CCOOh–DBFFh 的规范示例。可以有多个“P”参数来表示 EMS 页面,这些页面由数字 4 到 14 表示。当页面帧起始地址没有其他指定时,数字 0–3 也允许,但必须保留 EMS 页面 0–3 的连续顺序分配。 |
X=F000-FFFF – 禁止段地址区域的规范示例(在 A000h–FFFFh 范围内),该区域必须保持完整。指定的段地址将向下舍入到最接近的 4 千字节倍数。 | ||
I=BC00-BFFF – 要为 UMB 块分配的段地址区域的规范示例。指定的段地址将向下舍入到最接近的 4 千字节倍数。当“I”和“X”规范重叠时,“X”选项优先。 | ||
B=4000 |
– | 允许的 EMS 页面放置区域的最低边界段地址(在 1000h–4000h 范围内)。默认最低边界为 4000h。 |
L=256 |
– | 为 XMS 类型访问保留的内存空间大小(以 kb 为单位)(默认值为 0 kb)。 |
A=7 |
– | 提供多任务支持的寄存器库数量(允许 0–254,默认值为 7)。每个寄存器库大约占用 200 字节。 |
h=64 |
– | 可以同时保持打开以供访问的 EMS 内存区域的引用(句柄)数量(允许 2–255,默认值为 64)。 |
d=32 |
– | 保留的直接内存访问 (DMA) 缓冲区的大小(允许 16–256 kb,默认值为 32 kb)。 |
RAM=C000-EFFF – UMB 和 EMS 页面放置的区域边界的规范示例。当“RAM”参数后面没有边界段地址时,所有可用内存空间都被视为允许的。 | ||
WIN=E000-EFFF – 段地址的示例,指定地址空间区域的边界,该区域保留供 Windows OS 使用。 | ||
ROM=F000-FFFF – 如果 PC 的 BIOS 本身没有这样做,将 BIOS 镜像加载到地址空间的一部分,由其边界的段地址指定。复制 BIOS 代码可以使您的 PC 更快。 | ||
NOEMS |
– | 不创建 EMS 页面帧,不提供 LIM EMS 内存访问,但使用 640–1024 kb 区域中的所有可用地址空间来安排 UMB 并加载驱动程序。 |
NOHI |
– | 将 EMM386.EXE 驱动程序的整个常驻模块加载到 640 kb 以下的常规内存中。 |
NOMOVEXBDA – 取消 BIOS 阴影的默认加载。 | ||
NOTR |
– | 排除网卡搜索(对于 EMM386.EXE 版本 4.45 – 4.95) |
NOVCPI |
– | 禁用对 VCPI 函数的支持,[注 2] 由其他程序请求。此开关应与 NOEMS 开关一起使用。 |
HIGHSCAN – 启动对可用地址空间的彻底搜索,从而使其使用更有效率。但有可能将占用空间视为可用空间,然后您的 PC 可能挂起。 | ||
ALTBOOT |
– | 替换热重启处理程序(仅当加载 EMM386.EXE 驱动程序后,CTRL-ALT-DEL “热键” 组合停止响应或出错时)。 |
NOBACKFILL – 当 EMM386 尝试在总内存为 640 kb 或更小的 PC 中创建 UMB 时,防止常规内存被回填。 |
当 EMM386.EXE 驱动程序已加载并处于活动状态时,它可以从命令行接受“EMM386 OFF”和“EMM386 AUTO”命令。但如果此时 UMB 地址空间已被用于必须保持可供 DOS 使用的其他驱动程序,则这些命令不会被执行。
- 注释
- EMM386.EXE 驱动程序通过 INT 67 (8.03-57 – 8.03-74) 接受来自其他程序的请求。
- ^ VCPI 服务,通过 INT 67\AX=DE00h-DE0Ch 提供,为必须影响 EMM386.EXE 设置的 CPU 操作 V86 模式的程序提供机会执行其任务。由于 VCPI 服务,特别是当 V86 模式已设置时,也可以加载 Windows 操作系统。但 Windows 操作系统本身在其“DOS 窗口”内禁用 VCPI 服务,从而避免了失去对 PC 控制权的风险。
- 来自 MS-DOS 8 的 EMM386.EXE 版本与某些过时的 486 处理器型号不兼容,可能会导致挂起。
- 已知有几个类似的 EMM386 管理器。最先进的是由一组作者在 Tom Ehlert 的主持下编写的 JEMM386.EXE 驱动程序。现在,在 2007 年 12 月,这个驱动程序的 5.68 版本的 JEMM568.ZIP 存档可以从互联网网站 http://japheth.de/ 下载。EMM386.EXE 驱动程序的另一个版本是作为 FreeDOS 项目的一部分开发的;它可以从服务器 ftp://ftp.devoresoftware.com/downloads/ 下载。上面提到的两个驱动程序都比原始的 EMM386.EXE 更紧凑,并接受不同的选项集,这些选项集在附带文件中描述。
5.04-03 内存分配优化:CHKSTATE.SYS
[edit | edit source]CHKSTATE.SYS 是一个特殊的内存优化程序服务实用程序,它是为 MS-DOS6 开发的,但事实证明它适用于 MS-DOS 7。内存优化管理器 MEMMAKER.EXE 会自动将加载 CHKSTATE.SYS 的行插入 CONFIG.SYS 文件,并在内存优化程序终止时以相同的方式删除该行。CHKSTATE.SYS 实用程序在执行时会形成一个文本报告文件,其中包含有关为每个加载的驱动程序分配的内存区域的精确数据。
- 注释
- 为了执行内存优化程序,主优化管理器 MEMMAKER.EXE 必须与辅助文件 CHKSTATE.SYS、EMM386.EXE、HIMEM.SYS、MEMMAKER.HLP、MEMMAKER.INF 和 SIZER.EXE 位于同一个目录中。所有这些文件都存在于 MS-DOS6.22 版本中,也包含在 SFX 存档 OLDDOS.EXE 中,可以从服务器 ftp://ftp.microsoft.com/softlib/mslfiles/ 免费获取。
- 如果 CONFIG.SYS 文件包含一个具有多个加载备选方案的菜单,则 MEMMAKER.EXE 优化器无法对 AUTOEXEC.BAT 文件和 CONFIG.SYS 文件进行适当的更正。每个备选方案都应该单独优化。然而,为每个加载备选方案单独获得的数据使我们能够组合包含多个加载备选方案的优化配置
5.04-04 UMBPCI.SYS – 免费软件 UMB 区域驱动程序
[edit | edit source]为了为加载驱动程序打开 UMB 地址空间 (C000h–EFFFh),EMM386.EXE 内存管理器 (5.04-02) 通过 CPU 的 TLB 表安排地址转换,并强制通过将 CPU 切换到 V86 模式来支付这笔费用。但是,当需要停留在实模式时,可以通过重新编程内存控制器(PC 主板上的芯片组的一部分)来打开对 UMB 地址空间的访问。UMBPCI.SYS 驱动程序实现了这种访问 UMB 地址空间的替代方法。
UMBPCI.SYS 驱动程序拥有悠久的开发历史,并有许多参与者。现在,它由 Uwe Sieber 维护。UMBPCI.SYS 的最新版本可以在互联网网站 http://www.uwe-sieber.de/ 上找到,打包在 UMBPCI.ZIP 存档中,其中包含德语文本,或者打包在 UMBPCI_E.ZIP 存档中,其中包含英语文本。下面的描述基于 2006 年 3 月发布的 UMBPCI.SYS 3.66 版本。
UMBPCI.SYS 绝不是 EMM386.EXE 的替代品:它不实现 LIM EMS 规范。UMBPCI.SYS 仅执行 XMS 规范规定的功能,但仅限于 EMM386.EXE 驱动程序必须执行的功能(见 A.12-3 的注 6)。
为了影响内存控制器的设置,UMBPCI.SYS 驱动程序调用 BIOS 的中断处理程序 INT 1A\AH=B1h,与 PCI 总线服务相关。这就是为什么 UMBPCI.SYS 驱动程序只能在配备 PCI 总线且由 PC BIOS 控制的计算机上执行其任务的原因。几乎所有 1996 年之后生产的 AT 兼容计算机都满足这些条件。一个例外是使用 AMD-K7 处理器的计算机:在这些计算机中,由 UMBPCI.SYS 驱动程序创建的 UMB 块无法用于加载控制 PCI 总线上的扩展卡的驱动程序。
UMBPCI 驱动程序提供对“阴影”内存区域的空闲部分的访问,该区域用于将可执行代码从速度较慢的固定存储 BIOS 芯片复制过来。并非所有芯片组都能提供对该“阴影”内存区域的直接内存访问 (DMA)。DMA 访问对于软盘控制器、SMARTDRV.EXE 驱动程序 (5.06-01) 甚至 WINDOWS 操作系统(如果稍后加载)都是必需的。包含 UMBPCI.SYS 驱动程序的存档包含一些辅助实用程序,这些实用程序能够避免对“阴影”内存区域的 DMA 访问限制带来的不良后果。在同一个存档中,还有一些包含建议的文件,这些建议有助于克服特定于某些特定芯片组的问题。当然,必须考虑到相关的特殊性。
UMBPCI.SYS 驱动程序应通过 DEVICE 命令 (4.06) 从 CONFIG.SYS 文件中加载,该命令位于加载 HIMEM.SYS 驱动程序 (5.04-01) 的行之后,并位于所有包含 LH 命令的命令行和以 …HIGH 结尾的命令行之前。加载 UMBPCI.SYS 驱动程序的命令行可能如下所示:
DEVICE=\DOS\DRV\Umbpci.sys /I=D000–DFFF
其中
\DOS\DRV\ – UMBPCI.SYS 驱动程序的路径示例。 |
/I=D000–DFFF – 应为 UMB 块分配的段地址空间的可选规范。分配空间的边界必须是 16 kb 的倍数(即 C800、CC00、D000、D400、D800 等等)。 |
如果指定了 /I=
参数,则 UMBPCI.SYS 不会检查地址空间区域是否为空闲。在一条命令行中允许出现多个 /I=
出现,每个 UMB 区域都会被赋予一个序号。DEVICEHIGH (4.07) 和 LH (3.17) 命令在其 /L:
参数之后接受 UMB 区域的序号,因此有机会通过指定的 UMB 地址空间部分加载任何特定的驱动程序。对于那些使用直接内存访问 (DMA) 的驱动程序来说,这一点很重要,因为某些芯片组(例如 i430TX)只提供对 UMB 区域的 E000–EFFFh 部分的 DMA 访问。大多数情况下不需要 /I=
参数,因为流行的现代芯片组(i815、i820、i845、i850、i855 和许多其他芯片组)不对对 UMB 区域的 DMA 访问施加任何限制。
- 注释
- 在没有 PCI 总线的旧计算机中,可以使用 HIRAM.EXE 驱动程序(于 1993 年编写)及其辅助实用程序来提供对 UMB 地址区域的访问。这组软件可以从互联网网站
http://www.uwe-sieber.de/files/hiram.zip .
下载一个存档。
5.05 RAM 磁盘驱动程序[edit | edit source]
RAM 磁盘驱动程序占用计算机的随机访问内存 (RAM) 的一部分,以模拟虚拟磁盘驱动器。这在探索和修复工作期间提供对可写磁盘空间的访问,此时物理磁盘空间可能不存在或必须保持免受访问痕迹。虚拟 RAM 磁盘比任何物理磁盘都快得多。由于 RAM 磁盘的内容在每次 PC 关闭时都会丢失,因此 RAM 磁盘有时用作临时文件的存放位置,以避免污染物理磁盘空间。
许多 RAM 磁盘驱动程序的一个常见缺点是它们无法为创建的虚拟磁盘分配特定的字母名称。DOS 总是将第一个空闲字母名称分配给虚拟磁盘,而这个名称事先无法知道。文章 9.04-02 中提出的一个解决方案是搜索分配给安排的虚拟磁盘的特定字母名称。另一种解决方案是编写一个特殊的驱动程序,它将欺骗 DOS,使其拥有一个错误的已注册磁盘数量,这样下一个磁盘就可以被分配一个任意的规定字母名称。文章 9.08 中提供了一个后一种解决方案的示例。
5.05-01 RAM 磁盘驱动程序 RAMDRIVE.SYS[edit | edit source]
RAMDRIVE.SYS 是 Microsoft 为 DOS 提供的 RAM 磁盘驱动程序,它包含在 WINDOWS-95/98/ME 版本中。通常它可以在 \WINDOWS 目录中找到。
DEVICE=C:\DOS\DRV\Ramdrive.sys 16000 512 256 /E
其中
RAMDRIVE.SYS 应通过 DEVICE (4.06) 或 DEVICEHIGH (4.07) 命令从 CONFIG.SYS 文件的命令行加载,例如 | ||
16000 |
– | C:\DOS\DRV\ – RAMDRIVE.SYS 驱动程序的路径示例。 |
512 |
– | 请求的 RAM 磁盘大小的示例,以千字节为单位,允许 4–32767 kb 范围,默认值为 64 kb。 |
256 |
– | 扇区大小的示例,以字节为单位;允许 128、256 和 512 字节,默认值为 512。如果指定了扇区大小,则也必须指定 RAM 磁盘大小。 |
/E |
– | RAM 磁盘根目录中条目数量的示例规范,允许 2–1024,默认值为 64。如果指定了条目数量,则也必须指定扇区大小。 |
您可以根据可用内存空间设置任意数量的RAM磁盘:只需为每个额外的RAM磁盘在您的 CONFIG.SYS 文件中添加一行即可。
- 注释
- 带有 2 Gb 大小限制的 RAM 磁盘驱动程序 RDISK.COM 可以从 http://johnson.tmfc.net/dos/driver.html 下载。此驱动程序应与提供 4Gb XMS 内存限制的 XMS 内存管理器一起使用(注意 5.04-01 的 3 到 5)。
免费软件驱动程序 TDSK.EXE 和 BITDISK.EXE 允许您不仅在加载时定义 RAM 磁盘大小,如 RAMDRIVE.SYS 驱动程序那样,还可以推迟 RAM 磁盘大小的定义,甚至可以重复进行。此功能对于在未知计算机上安装 MS-DOS 7 非常重要,因为您需要确定可用的内存量,然后才能决定是否要安排 RAM 磁盘以及大小。
TDSK.EXE 和 BITDISK.EXE 驱动程序均由西班牙巴利亚多利德的 Garcia de Celis 在 1992 年至 1995 年期间编写,最后一个版本为 2.3。后来这些驱动程序被现代化并成为 FreeDOS 项目的一部分。现在这两个驱动程序都可以从 http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/ramdisk/ 下载。Garcia de Celis 的原始驱动程序位于 TDSK23.ZIP 存档中,而 TDSK.EXE 驱动程序的现代化版本 2.42 位于 TDSK242B.ZIP 存档中。
BITDISK.EXE 是 TDSK.EXE 的简化版本。虽然后者能够使用 EMS、XMS 或传统内存,但 BITDISK.EXE 只能处理 XMS 内存。因此,它始终需要 HIMEM.SYS 驱动程序提前加载。TDSK.EXE 可以接受所有 BITDISK 的选项,此外还可以接受一些自己的选项。
Garcia de Celis 的原始驱动程序应通过 CONFIG.SYS 文件中的一行中的 DEVICE (4.06) 或 DEVICEHIGH (4.07) 命令进行初始化。TDSK.EXE 驱动程序的现代化版本 2.42 必须仅通过 DEVICE 命令 (4.06) 加载到传统内存中,前提是 CONFIG.SYS 文件还包含一行带有 DOS=NOAUTO
命令 (4.08) 的代码。RAM 磁盘初始化行可能包含所有必需的参数(见下文),然后 RAM 磁盘将立即创建。但是,当 RAM 磁盘的创建应被延迟时,CONFIG.SYS 文件中的命令行不应包含特定参数的值;它可能看起来像这样:
DEVICEHIGH=C:\DOS\DRV\Bitdisk.exe 0
或者像这样
DEVICE=C:\DOS\DRV\Tdsk.exe 0
其中
C:\DOS\DRV\ – 驱动程序路径示例; | ||
0 |
– | 零大小表示 RAM 磁盘不应立即安排。 |
显示的命令不会导致为 RAM 磁盘分配内存,但会引发驱动程序 TSR 模块(约 600 字节)的加载和初始化。在此阶段,DOS 会注册新的 RAM 磁盘并为其分配字母名称。如果在 CONFIG.SYS 文件中重复此行多次,则可以初始化多个 RAM 磁盘。
为了使 RAM 磁盘可访问,必须稍后通过一个命令调用同一个驱动程序,该命令写入 AUTOEXEC.BAT 文件的一行或直接写入 DOS 的命令行,例如
C:\DOS\DRV\Bitdisk.exe R: 5600 512 384 4 /F:2
或者
C:\DOS\DRV\Tdsk.exe R: 5600 512 384 4 /F:2 /E /M /I=1
其中
R |
– | 所寻址的 RAM 磁盘的字母名称(如果有几个 RAM 磁盘)。单个 RAM 磁盘的字母名称可以省略。 |
5600 |
– | 所需磁盘大小规范(以 kb 为单位)的示例。最小大小为 4 kb,最大大小为 BITDISK.EXE 为 32766 kb,TDSK.EXE 为 65534 kb。大小为 0 的命令会释放所有已占用内存,除了驱动程序 TSR 模块的内存:它仍然处于加载状态,并随时准备根据要求重新安排 RAM 磁盘。 |
512 |
– | 扇区大小(以字节为单位)的可选规范示例;允许的扇区大小为 64、128、256 和 512 字节,后者为默认值。 |
384 |
– | 根目录中条目的可选数量。允许的值从 1 到磁盘大小限制,默认值为 384。当条目数未被省略时,必须也指定扇区大小。 |
4 |
– | 每个簇的扇区数的可选数量,在 MS-DOS 7 中必须是 2 的幂。默认值为对应于 RAM 磁盘大小的最小数量。当每个簇的扇区数未被省略时,也必须指定根目录中的条目数。 |
/F:2 |
– | 指定创建 FAT 的两个副本,就像在真实磁盘中一样(默认情况下创建单个 FAT 表)。在极少数情况下,一些磁盘寻址实用程序无法与虚拟磁盘正常工作,虚拟磁盘只有一个 FAT。 |
针对 TDSK.EXE 的命令行包含一些附加选项,这些选项仅被 TDSK.EXE 接受。TDSK.EXE 驱动程序版本 2.42 允许的附加选项如下:
/E |
– | 在 HIMEM.SYS 驱动程序提供的 XMS 内存中安排 RAM 磁盘(默认),该驱动程序必须已加载。 |
/C |
– | 在传统内存中安排 RAM 磁盘。 |
/X (或等效的 /A ) – 在 EMM386.EXE 驱动程序提供的 EMS 内存中安排 RAM 磁盘。在这种情况下,必须提前加载 EMM386.EXE 和 HIMEM.SYS 内存驱动程序。 | ||
/B |
– | 如果至少发现一个真实磁盘驱动器,则不加载 TDSK.EXE 驱动程序(此选项不被 TDSK.EXE 驱动程序的原始版本 2.3 接受)。 |
/M |
– | 以单色显示屏幕消息(默认值为彩色)。 |
/I=1 |
– | 以英语显示消息(默认);此外,还可以选择西班牙语 (/I=34) 和德语 (/I=49)。 |
辅助选项 /E
、/C
、/X
、/A
是相互排斥的,通常会被省略,因为 TDSK.EXE 驱动程序本身能够选择最佳位置来安排 RAM 磁盘。
显示的命令形式可以重复使用,以调用 TDSK.EXE 或 BITDISK.EXE 来更改 RAM 磁盘的大小。每次执行此命令后,RAM 磁盘都会重新排列,其所有内容都会丢失。在两种情况下,RAM 磁盘数据不会受到任何驱动程序的影响:
- 如果它被调用而没有参数,则显示当前状态;
- 如果它被调用带有单个
/?
参数,则显示帮助。
为了解决 RAM 磁盘字母名称确定的问题,TDSK.EXE 驱动程序的版本 2.42 能够将此字母名称作为名为 TURBODSK 或 RAMDRIVE 的环境变量的值分配。应使用 SET 命令 (3.26) 预先准备具有任何上述名称的环境变量,并应将其初步值设置为问号和冒号
SET RAMDRIVE=?:
如果具有相同名称的变量具有其他值,则该值将被完整保留。但是,如果此变量仅具有显示的值,并且此时 RAM 磁盘已安排好,那么在执行 TDSK.EXE 驱动程序后,变量值中的问号将被 RAM 磁盘的字母名称替换。当 RAM 磁盘的字母名称已知时,则可以轻松地编写 AUTOEXEC.BAT 文件,以便此字母名称自动写入所有相关的路径(文章 9.09-02 中有一个示例)。
执行 TDSK.EXE 驱动程序后,它将返回错误级别代码 (3.15-03、9.07-03)。错误级别值从 1 到 128 表示 XMS 或 EMS 访问分配内存区域的引用编号(句柄);其他错误级别值表示以下含义:
0 | – RAM 磁盘未安排,因为它未定义; |
252 | – 语法错误; |
253 | – 尝试在 Windows 操作系统下定义 RAM 磁盘; |
254 | – 磁盘字母名称的指定不正确; |
255 | – TDSK.EXE 驱动程序的 TSR 模块未加载。 |
SMARTDRV.EXE 驱动程序安排和维护磁盘的缓存缓冲区。此缓冲区中的数据传输操作通过 DMA 控制器执行。DMA 访问减轻了 CPU 的负担,并使 HDD 和 CD 驱动器的传输操作更快。在大量数据传输的情况下,例如在 DOS 下安装 Windows ME/2000/XP 操作系统期间,节省时间的效果变得至关重要。
SMARTDRV.EXE 驱动程序是 Windows-95/98 版本的一部分,必须存在于 \WINDOWS 目录中。但是 WINDOWS 操作系统本身以其他方式执行缓冲,并且不需要 SMARTDRV.EXE。它仅在 DOS 中需要,在 MS-DOS 7 中也是如此。由于缓存缓冲区超出了传统内存,因此必须提前打开 640 kb 以上的访问权限。因此,适当的内存管理器(5.04-01、5.04-02、5.04-04)必须在 SMARTDRV.EXE 之前加载。如果您打算使用 MSCDEX.EXE (5.08-03) 访问 CD-ROM,那么后者也应该提前加载。最常见的是,SMARTDRV.EXE 是通过 CONFIG.SYS 文件中的 INSTALL 命令 (4.15) 或 AUTOEXEC.BAT 文件中的一行加载的,例如
C:\DOS\DRV\Smartdrv.exe /X A- B- C+ /U /N /L /V 128 /E:2048 /B:4096
其中
C:\DOS\DRV\ – SMARTDRV.EXE 驱动程序路径示例。 | ||
/X |
– | 禁用磁盘的写入后缓存,除了在 /X 参数之后列出的带有加号的磁盘(如 C+ )。在带有减号的磁盘上(如 A– 、B– ),也会禁用预读缓冲。如果省略 /X 参数,则仅为 HDD 启用写入后缓存。 |
/U |
– | 不加载 CD-ROM 缓存模块。 |
/N |
– | 允许在写入缓存尚未写入磁盘时接受下一个命令。此参数仅影响那些启用了写入后缓存的驱动器。如果省略 /N 参数,则在缓存写入磁盘操作完成之前,命令提示符不会出现。 |
/L |
– | 强制在传统内存中安排缓存缓冲区。当 DMA 控制器无法访问 UMB 地址空间时,需要这样做。 |
/V |
– | 显示状态消息(默认情况下,在第一次启动 SMARTDRV.EXE 时不会显示任何内容)。除了 /V 之外,还可以使用 /S – 显示状态消息和缓存统计信息。 |
128 |
– | 缓存大小(以千字节为单位)。如果要将 XMS 内存的大部分用于其他目的,例如作为 RAM 磁盘,则必须指定此参数。 |
/E:2048 |
– | 传输数据块的大小(以字节为单位);允许的值为 1024、2048、4096 和 8192,默认值为 8192。 |
/B:4096 |
– | 预读缓冲区的大小(以字节为单位),它必须是传输数据块的倍数,默认值为 16384。 |
当 SMARTDRV.EXE 正在运行时,可以使用其他选项集从命令行调用它,以执行命令或重新配置,例如
C:\DOS\DRV\Smartdrv.exe /X C– D+ /R /F /Q
其中
/X |
– | 禁用所有磁盘的写入后缓存(如果没有在后面加上特定磁盘的字母名称)。如果在 SMARTDRV.EXE 的当前状态下没有禁用写入后缓存,则可以使用此参数。这里 C– 和 D+ 字母名称表示禁用磁盘 C: 的写入后缓存,并为磁盘 D: 启用写入后缓存。 |
/R |
– | 清除缓存并重新启动 SMARTDRV.EXE。要立即执行的另一个操作(而不是 /R )是 /C – 将当前存在于写入后缓存中的信息写入磁盘。 |
/F |
– | 丢弃 /N 参数(如果它在当前状态下处于活动状态),并返回到默认状态,在这种状态下,在缓存写入操作完成之前,命令提示符不会出现。如果需要将状态反转为相反方向,则应指定 /N 参数而不是 /F 。 |
/Q |
– | 取消默认状态消息显示。在/Q 处,可能出现/S – 显示状态消息以及缓存统计信息。 |
- 注释
/C
操作(写入缓存)忽略/V
和/S
参数,不显示任何内容。- DMA 数据传输由 SMARTDRV.EXE 驱动程序安排,不涉及 SHSUCDX.COM(5.08-04)执行的操作。
- 为了适应 SATA 驱动器和 UltraDMA 数据传输,建议使用 UIDE.SYS 缓存驱动程序。可以从网站 http://johnson.tmfc.net/dos/driver.html 下载此驱动程序。
DBLBUFF.SYS 驱动程序为某些 HDD 控制器提供兼容性,否则这些控制器可能无法与 EMS 内存和 WINDOWS 操作系统一起使用。特别是,对于具有 SCSI 接口的 HDD,可能需要双缓冲。DBLBUFF.SYS 驱动程序包含在 WINDOWS-95/98 版本中,通常可以在 \WINDOWS 目录中找到。
加载 DBLBUFF.SYS 的方法取决于配置文件 MSDOS.SYS(5.01-01)的内容。如果存在包含 "DoubleBuffer=1" 参数的行,则 MS-DOS 7 将尝试默认加载 DBLBUFF.SYS。否则,应通过 CONFIG.SYS 文件(4.06)中的一行 DEVICE 命令(4.06)显式加载它。
DEVICE=C:\DOS\DRV\Dblbuff.sys /D+
其中
C:\DOS\DRV – 指向 DBLBUFF.SYS 驱动程序的路径示例。 | ||
/D+ |
– | 一个可选参数,指示为所有磁盘安排永久双缓冲。否则,只有对 UMB 块(5.04-02)的 I/O 将进行双缓冲,并且如果不需要,它将不会自动执行。 |
- 注释
- SMARTDRV.EXE 驱动程序(5.06-01)显示的状态消息包含一列 "缓冲"。如果此列中至少有一个 "是",则必须加载 DBLBUFF.SYS 驱动程序。
- 如果需要双缓冲,则应通过 CONFIG.SYS 文件中的 BUFFERS(4.03)或 BUFFERSHIGH(4.04)命令预留一定数量的辅助缓冲区。
DRVSPACE.SYS 是 TSR 程序 DRVSPACE.BIN 的加载器,它为逻辑磁盘提供即时压缩和解压缩。数据流仅在访问操作过程中处理。压缩提高了磁盘空间利用率,因为压缩数据是连续写入的,并且不会在部分填充的簇中丢失空闲磁盘空间。
文件 DRVSPACE.SYS 和 DRVSPACE.BIN 包含在 WINDOWS-95 版本中,通常必须写入逻辑磁盘压缩区域之外的同一目录(通常在根目录中)。当 MS-DOS 7 发现可启动磁盘上存在压缩区域时,将默认加载 DRVSPACE.SYS 和 DRVSPACE.BIN。默认加载可以通过 MSDOS.SYS 文件(5.01-01)中包含参数 "DRVSPACE=0
" 的行,或者通过 CONFIG.SYS 文件(4.08, 9.01-01)中的 "DOS=NOAUTO
" 命令来取消。
当要显式加载 DRVSPACE.SYS 时,应将其作为驱动程序通过 CONFIG.SYS 文件中的一行 DEVICE 命令(4.06)加载,在内存管理器(5.04-01, 5.04-02)之前,例如
DEVICE=C:\Drvspace.sys /MOVE /NOHMA /LOW
其中
C:\ |
– | 指向 DRVSPACE.SYS 加载器的路径示例。 |
/MOVE |
– | 启动将 DRVSPACE.BIN 从传统内存的上部重新定位到 UMB 或 HMA 区域,因为原始放置可能与其他软件不兼容。重新定位在 CONFIG.SYS 文件中执行所有 DEVICE 和 DEVICEHIGH 命令后进行。如果 640 kb 之外的地址空间不可访问,则 /MOVE 选项会导致重新定位到传统内存的下部。 |
/NOHMA |
– | 不要将 TSR 压缩模块重新定位到 HMA(1024–1088 kb)。 |
/LOW |
– | 即使 640 kb 之外的地址空间可访问,也强制将 TSR 压缩模块重新定位到传统内存的下部。 |
加载 DRVSPACE.BIN 后,DRVSPACE 字将成为一个命令,调用一个对话框外壳。此外壳提供将普通磁盘(和软盘)转换为压缩磁盘和反向转换的机会,创建新的压缩磁盘,测试和整理压缩磁盘,安排对压缩磁盘空间的保护等等。
使用 DRVSPACE 进行磁盘压缩并没有取得很大成功,原因有几个。首先是与其他版本的 DOS 和其他操作系统不兼容(WINDOWS-95 是例外)。第二个原因是,压缩使磁盘更容易受到潜在错误的影响,并且更难以进行数据恢复操作。第三个原因是,如今磁盘空间的问题不像 1990 年代初期那样尖锐。大型快速现代磁盘驱动器使 "即时" 压缩不再值得压缩和解压缩操作造成的访问速度损失。这就是为什么 DRVSPACE 使用不包含在第 9 章中提供的配置文件示例中的原因。
- 注释
- DRVSPACE.BIN 程序为使用 FAT-12 或 FAT-16 文件系统格式化的逻辑磁盘提供压缩。使用 FAT-32 格式化的磁盘不能由 DRVSPACE.BIN 压缩。
具有集成驱动器电子器件 (IDE) 的磁盘驱动器由西部数据公司开发,并在 1984 年首次应用于 IBM 的 PC-AT。从那时起,这种驱动器成为最广泛使用的驱动器。IDE 驱动器与 HDD 控制器交互的协议被称为 ATA (= 先进技术附加)。1994 年,它获得了 ANSI X3.221-1994 标准的地位。随着 CD-ROM 和其他类型的可移动驱动器的出现,ATA 协议得到了新的命令的补充,包括用于数据包传输的命令,自 1998 年以来,它被称为 ATA 数据包接口,或 ATAPI。
在 2003 年之后生产的计算机中,ATAPI 交互协议由 PC 的 BIOS 实现。ATAPI 支持的一个具体症状是 BIOS 能够从光学 DVD 光盘加载操作系统。在无法从 DVD 光盘加载操作系统的 PC 中,ATAPI 功能可以通过松下公司开发的接口驱动程序 ATAPIMGR.SYS 提供。由于此驱动程序,标准 (过时) IDE 控制器能够访问 DVD 光盘,以及高容量的可移动磁性、磁光和固态介质。包含 ATAPIMGR.SYS 驱动程序版本 2.04 的 SFX 存档 85X_DOS.EXE 可以从互联网网站 http://panasonic.co.jp/pcc/products/drive/internal/support/info_dd2.html 下载。
ATAPIMGR.SYS 驱动程序应在 CONFIG.SYS 文件中加载,在任何其他需要 ATAPI 接口支持的驱动程序之前。使用 DEVICE(4.06)或 DEVICEHIGH(4.07)命令加载 ATAPIMGR.SYS 驱动程序的行可能如下所示
DEVICE=DOS\DRV\Atapimgr.sys /P:170,15 /W:2 /NDR /NRS /C:2 /T:5 /LUN
其中
DOS\DRV\ |
– | 指向 ATAPIMGR.SYS 驱动程序的路径示例。 |
/P:170,15 |
– | I/O 端口的十六进制地址和十进制中断请求线号 (IRQ)。允许的端口地址为 1F0、170、1E8、168 (A.14-1)。允许的 IRQ 号码为 10、11、12、14、15。如果省略 /P ,驱动程序将在所有提到的端口地址和 IRQ 线中搜索磁盘驱动器。 |
/W:2 |
– | 在不支持就绪确认 (IOCHRDY) 检查的旧 PC 中,用于数据 I/O 操作的等待周期数(允许 0-99)。建议的等待周期数取决于 CPU 时钟频率:对于 50 MHz – /W:2 ,对于 75 MHz – /W:6 ,对于 100 MHz – /W:9 ,对于 166 MHz – /W:19 ,对于 240 MHz – /W:30 。对于 CPU 时钟频率更高的 PC,/W 参数不需要。 |
/NDR |
– | 不要向 CD/DVD-ROM 驱动器发出复位命令。此选项对于从 CD/DVD 光盘启动至关重要,因为否则复位命令将中断启动过程。 |
/NRS |
– | 当驱动器发送条件检查请求时,不要返回请求感知确认。 |
/C:2 |
– | 为特定驱动器重新计算 PIO 模式
|
/T:5 |
– | 设置等待驱动器响应的超时时间(以秒为单位);默认值为 30。 |
/LUN |
– | 选择性地支持对具有 LUN (= 本地单元号) 为零的设备进行寻址。LUN 号码允许将多功能磁盘驱动器视为不同的设备,例如,插入了 DVD-RAM 光盘的驱动器 – 等效于硬盘驱动器,而插入了 CD-ROM 光盘的同一驱动器 – 等效于普通 CD-ROM 驱动器。默认情况下,不支持使用 LUN 号码进行寻址。 |
如果在加载了 ATAPIMGR.SYS 的 "上述" MS-DOS 7 中启动了 Windows-95/98 操作系统,则后者将在 "MS-DOS 兼容模式" 下运行,除非您在 \Windows\IOS.INI 文件中添加以下行
ATAPIMGR.SYS ; MKE ATAPI Manager
如果 ATAPIMGR.SYS 驱动程序发现 PC 的 BIOS 支持 ATAPI 接口功能,它将不会加载。当 ATAPIMGR.SYS 未加载时,一些 CD-ROM 驱动程序(特别是 SR_ASPI.SYS)也不会加载。因此,在与 ATAPIMGR.SYS 合作时,应优先考虑使用 ATAPI 功能的 CD-ROM 驱动程序,无论其来源如何。例如 OAKCDROM.SYS(5.09-01)和 VIDE-CDD.SYS(5.09-02)。这些驱动程序在任何情况下都提供对 DVD-ROM 光盘的访问,无论 ATAPIMGR.SYS 是否同意加载。
自 1990 年代初期以来,"笔记本" 类别的便携式 PC 配备了用于外部内存扩展卡的特殊 68 针插槽。这些卡的接口于 1990 年由 PC 内存卡国际协会 (PCMCIA) 标准化。1995 年,它被重命名为 PC 卡接口,因为当时它也被用于各种外围设备:调制解调器、外部磁盘驱动器等等。PC 卡接口的最后一个第 8 版标准于 2001 年采用。后来,PC 卡接口被 USB 2.0 接口 (5.07-05) 取代了。
在 1990 年代早期,存在多种相互排斥的 PCMCIA 控制器类型,因此带有 PCMCIA 接口的外部设备必须为 DOS 提供多个 PCMCIA 驱动程序。例如,松下 KXL-DN720A CD-ROM 驱动器(1995 年)就附带了 3 个适用于不同 PCMCIA 控制器的驱动程序。这些驱动程序允许使用统一的 ASPI 命令来访问设备,就像带有 SCSI (5.07-03) 或 USB 接口 (5.07-05) 的设备一样。这套驱动程序打包在 SFX 压缩包 720PCM32.EXE 中,可以从服务器 ftp://ftp.panasonic.com/pub/Panasonic/Drivers/CDROM/ 下载。
后来,i82365 类型及其兼容的 PCMCIA 控制器逐渐取代了其他所有类型。大多数现代便携式电脑都预装了 WINDOWS 操作系统,不再提供 DOS 用的 PCMCIA 驱动程序。为了能够在紧急维护情况下使用带有 PCMCIA 接口的外部磁盘驱动器,一些硬件供应商开发了直接从 DOS 访问 i82365 控制器端口的 PCMCIA 驱动程序。特别是,诺瓦克公司提供了这样的驱动程序:NVIHD.EXE 适用于非光学存储设备,NVICDF.EXE 适用于光盘驱动器。从网站 http://www.driver.novac.co.jp/driver/hd150p/hd150p_drv.html 可以下载包含 4.0 版 (2000 年) NVIHD.EXE 驱动程序的压缩包 compact_PCMCIA.zip。4.0 版 (2001 年) 的 NVICDF.EXE 驱动程序打包在 FDOS.ZIP 压缩包中,可以从 http://www.driver.novac.co.jp/driver/sta_PCMCIA/pcm_drv.html 下载。这两个诺瓦克的 PCMCIA 驱动程序都应该在 CONFIG.SYS 文件中使用 DEVICE (4.06) 或 DEVICEHIGH (4.07) 命令,不带参数进行加载。在将存储设备卡插入 PCMCIA 插槽后,应该从命令行再次启动同一个驱动程序,例如:
Nvicdf.exe /E
或
Nvihd.exe /E /I
其中参数的含义是:
/E - 初始化 PCMCIA 卡; |
/I - 启动驱动器的电机。 |
NVICDF.EXE 驱动程序不需要 /I 参数,因为光盘驱动器中的电机在插入光盘后会自动启动。关于上述 PCMCIA 驱动程序的信息应该谨慎对待,因为作者没有机会测试这些驱动程序。
- 注释
- Windows ME 版本包含一个用于外部存储设备的 DOS PCMCIA 驱动程序 CARDDRV.EXE。但是,没有找到关于它的确切信息。
5.07-03 SCSI 接口驱动程序
[edit | edit source]小型计算机系统接口 (SCSI) 由 Shugart 公司于 1982 年开发,由于其在当时流行的苹果电脑中的应用而广为人知。1986 年,SCSI 接口获得了 ANSI X3.131-1986 标准的地位。从那时起,它经历了多次现代化改造。对于 AT 兼容的 PC,SCSI 总线是一个比较少见的配置,主要应用于服务器。因此,这里没有详细描述 SCSI 总线驱动程序的功能。不过,下面将简要介绍 SCSI 总线访问原理。
SCSI 总线访问可以由 PC 的 BIOS 或专用驱动程序提供。服务器的主板通常会嵌入 SCSI 控制器和 BIOS 扩展,能够像访问 IDE 设备一样访问 SCSI 设备,无需特殊的 SCSI 驱动程序。已知的 BIOS 扩展需要在 PC 启动时在 SCSI 总线上存在至少一个活动的设备,否则不会加载。没有介质的移动磁盘驱动器被视为非活动设备。如果必须将特定的移动 SCSI 驱动器置于 BIOS 控制下(例如,为了将其格式化为硬盘驱动器),则应在 BIOS 启动其启动测试之前将介质插入此驱动器。如果 BIOS 检测到 SCSI 驱动器中存在有效的介质,则可以使用它来启动 PC,但之前必须在 BIOS 设置选项中将此驱动器标记为可引导设备。最初由 BIOS 注册为非活动的 SCSI 驱动器,即使加载了 SCSI BIOS 扩展并提供对其他驱动器的访问,也不能置于 BIOS 控制之下。
一些扩展板上的 SCSI 控制器具有内部只读存储器,包含用于 SCSI 总线的 BIOS 软件扩展,因此 SCSI 总线访问与嵌入式控制器提供的访问方式相同。可以通过浏览 BIOS 设置选项轻松确定 BIOS 软件扩展是否存在。不幸的是,较低端的 SCSI 扩展板没有 BIOS 软件扩展。不支持 BIOS 软件扩展的 SCSI 设备不能用于启动 PC,并且需要通过驱动程序进行访问。这种访问方式更适合移动磁盘驱动器,因为许多驱动程序能够注册其当前介质分区结构(而大多数 BIOS 版本只在启动时注册一次介质分区结构)。
为 DOS 开发的 SCSI 驱动程序集由多个供应商提供,其中最知名的是 Adaptec、DTC、Mylex 和 Tekram。每个驱动程序集包含 SCSI 控制器驱动程序(来自 Adaptec 的 ASPI8U2.SYS、来自 DTC 的 AS80DOS.SYS 等)、用于 SCSI 的硬盘驱动程序(来自 Adaptec 的 ASPIDISK.SYS、来自 DTC 的 DISKDOS.SYS 等)以及用于 SCSI 的 CD-ROM 驱动程序(来自 Adaptec 的 ASPICD.SYS、来自 DTC 的 CDDOS.SYS 等)。每个驱动程序集必须通过 CONFIG.SYS 文件中的 DEVICE 或 DEVICEHIGH 命令加载。SCSI 控制器驱动程序必须始终在连接到 SCSI 总线的其他设备的驱动程序之前加载。
SCSI 控制器供应商提供的用于硬盘驱动器和 CD-ROM 的驱动程序接受标准化的 ASPI 命令代码,适用于几乎任何具有 SCSI 接口的同类设备。但这并不适用于所有设备:具有独特功能的设备肯定需要专有的驱动程序。大多数 SCSI 控制器驱动程序适用于一系列 SCSI 控制器类型。Windows-95/98 的紧急软盘包含两套 SCSI 驱动程序:来自 Adaptec 和来自 Mylex。这通常被认为足以满足几乎所有配备 SCSI 总线的 PC 的需求。无论如何,这些软盘上的配置文件可以作为加载 SCSI 总线驱动程序的示例。
5.07-04 IEEE1394 (FireWire) 接口驱动程序
[edit | edit source]FireWire 接口由苹果公司于 1987 年开发,用于连接数据传输速率高达 393 Mb/sec 的设备。这种数据传输速率是视频摄像机、视频存储设备、外部硬盘驱动器的典型速率。从 1995 年开始,FireWire 接口规范被采用为 IEEE1394 标准。对于 AT 兼容的 PC,生产了具有 IEEE1394 接口控制器的扩展卡,但到目前为止,FireWire 接口还没有被广泛使用。
现在已知两种用于 IEEE1394 接口控制器的驱动程序,据称它们适用于 MS-DOS 7。第一个是 ASPI1394.SYS 驱动程序,由 Iomega 公司开发。从网站 http://www.stefan2000.com/darkehorse/PC/DOS/Drivers/USB/ 可以下载包含 1.01 版 ASPI1394.SYS 驱动程序(日期为 2002 年)的压缩包 iomega_usb_firewire_dos_driver_boot_disk.zip。这里有一个加载此驱动程序的示例,但没有给出参数的解释。另一个驱动程序 SBP2ASPI.SYS 由 Medialogic 公司开发,1.02 版包含在 SFX 压缩包 DAT.EXE 中,可以从网站 http://www.datoptic.com/fw25fr.html 下载。
由于这两个驱动程序都为通过 IEEE1394 总线连接的硬盘驱动器和 CD-ROM 驱动程序实现了相同的统一 ASPI 命令集,因此据称这两个驱动程序适用于 SCSI 总线 (5.07-03) 和 USB 总线 (5.07-05) 上的同类设备。但此功能尚未由作者测试,仅供参考。
5.07-05 USB 接口驱动程序
[edit | edit source]通用串行总线 (USB) 是康柏、英特尔、微软和 NEC 联合开发的。1996 年,这些公司通过了 USB 总线规范 1.0 版。从那时起,嵌入式 USB 控制器已成为几乎所有 AT 兼容电脑主板的标准配置。随着 2002 年 USB 2.0 规范的通过,USB 总线的实际意义更加重要,该规范规定了高达 480 Mb/s 的数据传输速率。现在,绝大多数外部设备都是为通过 USB 总线连接而设计的。
USB 控制器实现了三种不同类型的与 PC 软件的交互方式:
- 开放式主机控制器接口 (OHCI),
- 通用主机控制器接口 (UHCI),
- 增强型主机控制器接口 (EHCI)。
每种交互方式都需要特定的处理。所有现代 USB 控制器都符合 USB 2.0 规范并实现 EHCI 类型的交互,但能够模拟实现 OHCI 或 UHCI 类型的交互的上一代 USB 控制器。UHCI 控制器通过分配的端口传输数据,而 OHCI 控制器通过内存中的缓冲区区域传输数据。OHCI 类型的交互由 SIS 和 ALI 的芯片组实现,而 UHCI 则由 INTEL、VIA 等的芯片组实现。
从 DOS 访问通过 USB 总线连接的外部设备,可以由 PC 的 BIOS 系统或加载的驱动程序提供。当操作系统必须从外部存储设备加载时,需要 BIOS 提供的访问权限。本文档的 9.11-01 中详细介绍了此问题的解决方案。但 PC 的 BIOS 不一定能够处理所有外部设备:一些 BIOS 系统只接受特定类别的外部设备,例如带有 USB 接口的软盘驱动器。此外,BIOS 系统只在 PC 开机后注册一次存储介质的属性。例如,如果在 USB 适配器插槽中,最初插入的存储卡被其他卡替换,则 BIOS 不会提供对该其他卡的访问权限。可以通过加载特定类别存储设备的适当驱动程序来获得访问移动存储介质的机会。
为了避免驱动程序和 PC 的 BIOS 之间可能发生的冲突,BIOS 设置中“高级”页面上的“传统 USB 支持”参数应设置为“禁用”。如果您的计算机的 BIOS 设置中没有类似的参数,那么很可能此 BIOS 系统不支持 USB 存储设备。仍然可以通过相应的驱动程序访问这些设备中的媒体,但仅限于此。通常,应首先加载 USB 控制器驱动程序,然后加载您打算使用的所有 USB 设备的驱动程序。
第一个用于 USB 控制器的驱动程序 UHCI.EXE 和 OHCI.EXE 是由 SoftConnex Co. 在 1998 年至 2001 年期间开发的。这些驱动程序的 2.3 版本存在于可启动软盘中,这些软盘由已知软件包 Norton Ghost(到其 8.0 版本)形成。相同驱动程序的 2.5 版本可从互联网网站 http://www.stefan2000.com/darkehorse/PC/DOS/Drivers/USB/ 下载。为了满足任何 USB 控制器,应按顺序加载上述驱动程序,一个接一个,但实际上只加载其中一个驱动程序,即与特定 USB 控制器实现的交互类型相对应的那个驱动程序。加载可以从命令行执行,也可以从 AUTOEXEC.BAT 文件的行中使用 LH 命令(3.17)执行,也可以从 CONFIG.SYS 文件的行中使用 DEVICE(4.06)或 DEVICEHIGH(4.07)命令执行,例如
DEVICEHIGH = \DOS\DRV\Uhci.exe DEVICEHIGH = \DOS\DRV\Ohci.exe
SoftConnex Co. 的驱动程序专为 USB 键盘、USB 鼠标指向设备以及 USB 总线上的外部端口而设计。显然,应在之后加载特定外部设备的驱动程序。特别是对于鼠标指向设备,上述驱动程序中的任何一个都可以工作,这些驱动程序在 5.03 部分进行了描述。但是,您必须将外部设备连接到第一个 USB 控制器的端口,因为在更新的计算机中可以找到的附加 USB 控制器无法被 SoftConnex Co. 的驱动程序检测到。除此之外,这些驱动程序不提供访问存储卡和外部磁盘驱动器的功能。
从 DOS 访问 USB 存储设备的问题现在变得尤为紧迫。在各种互联网网站上,关于此问题有不同的建议。本书作者不得不进行一些实验,才能形成自己的观点。在这些实验中,一个名为 ImageMate-2 的 USB 适配器充当被测驱动器,用于 Compact Flash 卡。
在各种 USB 控制器驱动程序中,Matsushita(松下商标)的 USBASPI.SYS 被认为是最好的驱动程序。此驱动程序的最新版本 2.27(日期为 2008 年 10 月 22 日),打包在 SFX 档案 F2H_USB.EXE 中,可从网站 http://panasonic.co.jp/pcc/products/drive/other/f2h_usb.html 下载。此驱动程序能够检测所有类型的活动 USB 控制器。它扫描每个 USB 总线,并注册所有连接的设备及其所有 LUN 号码(有关详细信息,请参阅 附录 A.03-2 的注释 1)。与大多数其他 USB 驱动程序不同,此驱动程序的 2.27 版本在启用“传统 USB 支持”参数时不会与 PC 的 BIOS 发生冲突。USBASPI.SYS 驱动程序的完整规格没有公开。尽管如此,以下选项已被发现
/e |
– | 仅激活 EHCI 类的 USB 控制器。 |
/o |
– | 仅激活 OHCI 类的 USB 控制器。 |
/u |
– | 仅激活 UHCI 类的 USB 控制器。 |
/nocbc |
– | 不要搜索 PCMCIA 插槽中的 USB 适配器。 |
/w |
– | 提示用户连接并打开应在 USB 总线上注册的外部设备。 |
/slow |
– | 降低对连接设备进行轮询的速度,以便即使是最慢的设备也有足够的时间响应。 |
/v |
– | 显示有关注册的 USB 控制器和在 USB 总线(es)上检测到的所有设备的数据。 |
/r |
– | 由于错误或 BIOS 对 USB 控制器(es)的控制,不要拒绝加载驱动程序。 |
/norst |
– | 不要向 USB 设备发送重置命令,以防止从这些设备之一加载操作系统过程被打断。 |
/e
、/o
、/u
参数如果事先知道特定计算机中 USB 控制器(es)的类别,则可以节省一些时间。最后两个参数(/r
和 /norst
)是必需的,当操作系统要从 BIOS 控制下的 USB 设备加载时,因为否则要么加载过程将被打断,要么其他 USB 设备将无法访问。还有一点需要注意:USBASPI.SYS 驱动程序不允许预先加载光盘驱动器的驱动程序,即使这些光盘驱动器具有非 USB 接口。
用于海量存储设备的最佳驱动程序仍然是 ASPIDISK.SYS,它最初由 Adaptec 为具有 SCSI 接口的硬盘驱动器开发。但 ASPIDISK.SYS 与接口类型没有直接关系,因为它通过 SCSI 控制器驱动程序提供的标准化 ASPI 函数集来访问存储设备。由于 USBASPI.SYS 驱动程序也提供了这组 ASPI 函数,因此 ASPIDISK.SYS 驱动程序能够处理连接到 USB 总线的存储设备。
ASPIDISK.SYS 驱动程序的 4.01b 版本(大小为 15060 字节,日期为 1998 年 12 月 2 日)可以在 Adaptec 互联网网站上的 SFX 档案 DOSDRVR.EXE 中找到 http://www.adaptec.com/en-US/speed/scsi/dos/dosdrvr_exe.htm。此驱动程序允许访问具有 FAT-12、FAT-16、FAT-32 和“大软盘”文件系统的逻辑磁盘。如果在初始化时可移动媒体不存在于存储设备中,则此存储设备将被赋予一个保留的字母名称。但是,有些可移动媒体可以格式化为具有多个 FAT-16 分区的硬盘驱动器,每个分区表示一个单独的逻辑磁盘。ASPIDISK.SYS 驱动程序可以提供对所有这些分区的访问(包括第一个分区之后的那些分区),前提是在命令行中指定了相应的磁盘字母名称数量,并在 /r
参数后指定。允许的命令行选项的全部集合包括以下内容
/id=2:0+1 |
– | 一个用于指定应在驱动程序控制下的设备的示例:连接到第一个 USB 控制器的 USB 总线上的设备号 2,以及连接到第二个 USB 控制器的 USB 总线上的设备号 0 和 1。 |
/nospinup |
– | 在驱动程序初始化时,不要发出打开驱动器电机命令。 |
/d |
– | 显示有关在驱动程序控制下的设备的状态消息。 |
/pause |
– | 暂停进一步执行,直到任何按键操作,以便有机会读取状态消息。 |
/r4 |
– | 一个请求示例,用于在驱动程序控制下的驱动器中为可移动媒体上的非第一个分区保留 4 个磁盘字母名称。可以保留 1 到 24 个字母名称。 |
如果命令行中没有给出受控设备的规范,则 ASPIDISK.SYS 驱动程序将检查遇到的每个设备,并尝试将其控制下的所有海量存储设备,即使这些设备在此时没有可移动媒体。当给出受控设备的规范时,不会浪费时间检查不合适的设备。在上面的示例中,设备号 2 的规范意味着驱动程序不会检查连接到第一个 USB 控制器的总线上的设备 0 和 1,因为这些设备可能恰好是扫描仪和打印机。
对于具有 USB 接口的外部光盘 CD/DVD-ROM 驱动器,来自 Workbit Corp. 的 NJUSBCDA.SYS 驱动程序可能就足够了。包含 NJUSBCDA.SYS 驱动程序(日期为 2000 年)3.9 版本的档案 BST_DOS.ZIP 可从互联网网站 http://www.driver.novac.co.jp/driver/sta_black/bst_drv.html 下载。与许多其他 CD/DVDROM 驱动程序一样,NJUSBCDA.SYS 从命令行接受 /D:
参数,后跟一个任意标识符(例如,/d:USBCD001
),长度不超过 8 个字符。它用于文件系统转换实用程序识别驱动器,无论是 MSCDEX.EXE(5.08-03)还是 SHSUCDEX.EXE(5.08-04),其中一个应该在之后加载。它在命令行中应该被赋予完全相同的标识符。
所描述的 USB 设备驱动程序应通过 CONFIG.SYS 文件中的行使用 DEVICE(4.06)或 DEVICEHIGH(4.07)命令加载。假设所有提到的驱动程序都存在于可启动磁盘的 \DOS\DRV 目录中;然后加载这些驱动程序的行可能看起来像这样
DEVICEHIGH=\DOS\DRV\Usbaspi.sys /slow /v DEVICEHIGH=\DOS\DRV\Aspidisk.sys /nospin /d /pause DEVICEHIGH=\DOS\DRV\Njusbcda.sys /d:USBCD001
所示示例中的参数是为从具有其他(非 USB)接口的设备加载 MS-DOS 7 而选择的,当事先不知道 PC 中有多少 USB 控制器以及哪些设备连接到 USB 总线(es)时。但是,当 PC 的硬件已知,并且 MS-DOS 7 加载并非首次执行时,/SLOW
和 /PAUSE
参数可以省略。除此之外,如果参数指定了 USB 控制器的类型以及应该注册的特定设备,则加载速度会更快。
上述由 Matsushita 开发的 USBASPI.SYS 驱动程序(版本 2.27,文件长度为 39729 字节)通常与 Novac 提供的同义驱动程序(版本 1.07,文件大小为 43528 字节)混淆。后一个驱动程序仅检测第一个 USB 控制器,专门根据 USB 1.1 规范工作,忽略所有 LUN 号码不为零的设备,注释 1 到附录 A.03-2 并从命令行接受略有不同的选项集
/w |
– | 提示用户连接并打开应由 USB 控制器注册的外部设备(es)。 |
/v |
– | 显示有关第一个 USB 控制器 USB 总线上检测到的设备的数据。 |
/r |
– | 当第一个 USB 控制器在 PC 的 BIOS 控制下时,不要卸载驱动程序的驻留模块。 |
/m=D0 |
– | 一个用于为 OHCI 类的 USB 控制器指定接触内存区域的示例。D0 表示段地址区域 D000–DFFFh。 |
/p=A400 |
– | 一个用于为 UHCI 类的 USB 控制器指定端口地址的替代示例。 |
Novac 的 USBASPI.SYS 驱动程序打包在档案 HD352u_dos.zip 中,可从网站 http://www.driver.novac.co.jp/driver/hd352u/hd352u_drv.html 下载。除了 USBASPI.SYS 驱动程序本身,HD352u_dos.zip 档案还包含 Novac 的用于海量存储设备的驱动程序 Di1000dd.sys 的 2.0 版本。Di1000dd.sys 驱动程序从命令行接受参数 /dS
,这是一个用于向由 Di1000dd.sys 驱动程序打开访问的逻辑磁盘分配的磁盘字母名称(“S”)的示例。
但是,Di1000dd.sys 驱动程序的字母名称分配是“脏的”,创建的虚拟磁盘(幻影)没有隐藏。Di1000dd.sys 驱动程序无法处理多个 LUN 号码,无法访问具有 FAT-32 文件系统的磁盘、第一个 USB 控制器总线以外的设备,需要在初始化时存储设备(es)中存在媒体。虽然上述两个 Novac 驱动程序的功能似乎相当有限,但它们可能足以在硬件已知的计算机中执行主要数据传输操作。
由 Cypress Semiconductor 开发的组合驱动程序 DUSE.EXE 开启了从 DOS 访问 USB 存储设备的另一种方式。此驱动程序的 4.9 版本(日期为 2003 年),打包在档案 Duse_4_9.zip 中,在网站 http://www.pocketec.net/support.taf 的“downloads”子目录中可用。DUSE.EXE 驱动程序将 USB 控制器驱动程序与 CD-ROM 驱动程序和非光学存储设备(包括 HDD 和固态存储卡)的驱动程序相结合。
获得一体化的机会似乎很有吸引力,但随之而来的是一个意想不到的后果:由于某些奇怪的原因,DUSE.EXE 要求 DOS 仅在实模式下工作,即没有 EMM386.EXE 驱动程序(5.04-02),该驱动程序允许访问 UMB 内存区域。由于无法访问 UMB,DOS 被迫将所有驱动程序加载到传统内存(低于 640 kb)中,然后 DUSE.EXE 的驻留模块在默认设置下又占用了 233 kb 宝贵的传统内存,因此没有留下任何可用空间供其他程序正常运行。
如果 UMBPCI.SYS 驱动程序(5.04-04)在实模式下提供了对 UMB 区域的访问,并且您拒绝加载 DUSE 的 CD/DVD-ROM 支持模块,则可以获得一些可接受的配置。因此,DUSE 的驻留模块的总大小已减小到 153 kb,但所有尝试将其加载到常规内存之外的尝试都失败了。相比之下:USBASPI.SYS 和 ASPIDISK.SYS 驱动程序的驻留模块提供了几乎相同的功能,但总共只占用 45 kb,并且可以加载到常规内存之外,无论是在 CPU 的实模式下还是在 V86 模式下。如果情况迫使您使用 DUSE.EXE 驱动程序,那么 CONFIG.SYS 文件中用于加载 DUSE.EXE 的一行可能如下所示:
DEVICE=\DOS\DRV\Duse.exe NOC EMU XFER=8
其中显示的选项意味着
NOC |
– | 拒绝加载 CD/DVD-ROM 支持模块。 |
EMU |
– | 模拟 IRQ 调用以防止驱动程序之间的相互冲突。 |
XFER=8 |
– | 将缓冲区大小减小到 8 kb(允许 1 到 64 kb,默认值为 64 kb)。 |
DUSE 所有选项的完整列表可以在 Duse_4_9.zip 存档中的 DUSEUsersGuide.pdf 文件中找到。其中提出的 INT 选项值得特别注意。它声称提供了使用 FDISK.EXE 实用程序(6.13)将外部硬盘驱动器划分为分区的机会,但实际上并没有。此外,使用 ASPI 功能(6.13 中的注释 5)创建 HDD 分区也不可用,无论是否有 INT 选项,而 USBASPI.SYS 驱动程序则可以轻松地做到这一点。
最近出现了两种用于创建 DOS 的 USB 驱动程序集的个人尝试。驱动程序集的 1.0 版由 G.Potthast 开发,于 2006 年 12 月出现在互联网网站 http://www.georgpotthast.de/usb/ 上。后来,在 2009 年 8 月,B.Johnson 在他的网站 http://bretjohnson.us/ 上上传了另一个 USB 驱动程序集的 0.08 版。
由 G.Potthast 开发的套件提供了用于 USB 控制器、非光学存储设备和某些类型 USB 打印机的驱动程序。除了驱动程序之外,它还包含许多服务实用程序,可以检测和修复 USB 接口配置错误。此驱动程序集无法确定实际的 USB 存储设备数量,无法检测非第一个 USB 控制器总线上的设备,需要在初始化时在存储设备中存在媒体,只能访问物理磁盘的第一个分区,并且还有一些其他明显的缺点。
由 B.Johnson 开发的套件除了相同的核心驱动程序和一些服务实用程序外,还包括用于 USB 键盘、USB 鼠标的驱动程序,并提供对使用 FAT-32 格式化的磁盘的访问。USB 控制器必须是 UHCI 或 EHCI 类型,并且只能使用 12 Mb/s 的传输速度。可能,一些缺点尚未被发现,因为此驱动程序集是在最后一刻出现的,并且没有经过彻底测试。
尽管早期版本的这些驱动程序集存在所有缺点,但它们仍然值得认真关注。这两个套件仍在开发中,它们未来的版本可能会更好。但是,这些驱动程序集最宝贵的特性是它们部分开放的可执行代码。对于所有希望更深入地了解 USB 接口的人来说,这里有很多有趣的信息。
辅助驱动程序 IFSHLP.SYS 为 IFS(= 可安装文件系统)过程提供服务功能。IFS 文件系统是一种隐藏真实数据结构和真实访问方式的形式,可以避免显式技术复杂性并实现选择性访问权限。
原始的 16 位存储设备访问由 BIOS 的 INT 13 处理程序执行,这些处理程序需要 CPU 的实模式,并且不能间接执行其工作,例如通过网络。当 CPU 在保护模式或 V86 模式下工作时,每次调用 INT 13 处理程序都会隐含回调,并切换到实模式并返回。这些切换使缓慢的 16 位访问变得更加缓慢。IFSHLP.SYS 驱动程序提供的服务功能可以实现更快的 32 位直接和间接磁盘访问,在保护模式和 V86 模式下都不需要回调。但是,如果您打算仅在实模式下工作,并且没有网络通信,那么很可能不需要 IFSHLP.SYS 驱动程序。
IFSHLP.SYS 驱动程序存在于 Microsoft 网络客户端包中,以及在 Windows-3.11\95\98\ME 版本中。MS-DOS 7 在 \Windows 目录中搜索 IFSHLP.SYS 驱动程序,并在默认情况下加载它,除非默认加载被 CONFIG.SYS 文件中的 DOS=NOAUTO
命令(4.08)禁止。
由 Mark Russinovich 和 Bryce Cogswell 编写的 NTFSDOS.EXE 驱动程序提供了从 DOS 访问具有 NTFS 文件系统的磁盘的机会。此驱动程序的完整功能版本(最新版本为第 5 版)不是免费的。这里描述了免费版本 3.02(日期为 2001 年),它只允许读取 NTFS 卷,包括将程序读取到内存中以执行。然而,自 2006 年两位作者加入微软开发人员团队以来,NTFSDOS 驱动程序和其他一些有用的项目从他们作者的个人网站上消失了。现在,包含 NTFSDOS.EXE 驱动程序的 Ntfs30r.zip 存档仍然可以从例如服务器 ftp://ftp.uni-koeln.de/pc/msdos/diskutils/ 和 http://web.archive.org/web/20020123013310/www.sysinternals.com/new.shtml 获取。
现在就提醒一下,从 CD-ROM 光盘启动的 Windows-2000/XP 安装程序提供了打开所谓的恢复控制台的机会。恢复控制台的默认设置允许写入 NTFS 卷,但禁止从 NTFS 卷复制文件。因此,NTFSDOS.EXE 驱动程序的 3.02 版本可以执行恢复控制台不允许的操作。
NTFSDOS.EXE 驱动程序使用 XMS 内存,因此需要先加载 HIMEM.SYS 驱动程序(5.04-01)。除此之外,NTFSDOS.EXE 需要在常规内存中占用大量空间。特别是,要访问 10 Gb NTFS 磁盘,NTFSDOS.EXE 驱动程序会占用 285 kb 的常规内存。由于这样的内存需求,不合理地保持 NTFSDOS.EXE 驱动程序持续加载。因此,它是在需要访问 NTFS 磁盘之前才从命令行加载的,例如
C:\DOS\DRV\Ntfsdos.exe /L:K /C:1024 /N /X /U /V
其中
C:\DOS\DRV\ – NTFSDOS.EXE 驱动程序的路径示例。 | ||
/L:K |
– | 一个选项,将“K”字母名称分配给找到的第一个 NTFS 磁盘。如果有其他 NTFS 磁盘,则将分配给“K”后面的下一个字母名称。如果省略 /L: 参数,NTFS 磁盘名称分配将从第一个可用字母名称开始。 |
/C:1024 |
– | 一个选项,强制在 XMS 内存中创建一个 1024 kb 的缓存缓冲区。默认的缓存缓冲区大小为 500 kb。 |
/N |
– | 此选项阻止加载解压缩模块。如果 NTFS 卷不包含压缩片段,则不需要此选项。/N 选项减少了常规内存需求。 |
/X |
– | 此选项禁止使用扩展 INT 13 功能(8.01-55)。对于 1996 年之前生产的旧 PC,并且硬盘驱动器不超过 8.4 Gb,应该指定 /X 参数。 |
/U |
– | 此选项启用以 Unicode(每个字符两个字节)写入的名称的转换。 |
/V |
– | 此选项强制显示驱动程序的内存使用情况。默认情况下,只显示分配的磁盘字母名称。 |
- 注释
- NTFSDOS.EXE 驱动程序加载处理程序,可以读取 NTFS 卷中文件和目录的長名称。Volkov Commander 文件管理器(6.25)会显示未截断的名称,并且任何能够访问这些处理程序的程序都可以获取这些名称。但是,DOS 中的文件复制命令和实用程序会截断长名称。
- 尝试访问具有损坏 NTFS 文件系统的磁盘可能会导致 PC 挂起。应该先使用恢复控制台提供的 CHKDSK 过程检查和修复可疑的 NTFS 文件系统。
MSCDEX.EXE 是一個駐留程序,它与一个或多个 CD/DVDROM 驱动程序配合使用,可以为磁盘分配字母名称并访问关联的逻辑磁盘。实际上,它是一个用于 CD-ROM 文件系统“High Sierra”和 ISO 9660 的文件系统转换器,与 DOS 内核“理解”的文件系统不同。
MSCDEX.EXE 程序包含在 Windows-95/98 版本中,通常可以在 \Windows\Command 目录中找到。MSCDEX.EXE 应该在所有必要的 CD-ROM 驱动程序之后加载,但在 SMARTDRV.EXE(5.06-01)缓存驱动程序之前加载,如果使用后者。通常,MSCDEX.EXE 程序从 CONFIG.SYS 文件中使用 INSTALL(4.15)或 INSTALLHIGH(4.16)命令加载,但也可以从 AUTOEXEC.BAT 文件中使用 LH 命令(3.17)或从命令行启动,例如
C:\DOS\DRV\Mscdex.exe /D:MSCD001 /e /k /s /v /L:N /M:12
其中
C:\DOS\DRV\ – MSCDEX.EXE 文件的路径示例。 | ||
/D:MSCD001 |
– | 是与特定 CD/DVD-ROM 驱动程序相关联的最多 8 个字符的任意标识符(“MSCD001”)的示例,该驱动程序必须已经加载,并且必须在其命令行中给出相同的标识符。如果有多个 CD/DVD-ROM 驱动程序,则必须为它们指定不同的标识符,并且每个驱动程序都必须在 MSCDEX.EXE 的命令行加载中使用单独的 /D: 参数指定。 |
/e |
– | 此选项优先安排在常规内存之外的缓冲区,前提是 EMM386.EXE 内存管理器(5.04-02)已经打开了对常规内存之外的访问权限。 |
/k |
– | 此选项优先使用带有日文字符(汉字)的辅助卷描述符,如果可以找到它。默认情况下,使用主描述符,即使没有搜索辅助描述符。 |
/s |
– | 此选项强制为随后加载网络服务器软件做准备;这有助于避免字母名称分配冲突并允许共享 CD-ROM 逻辑磁盘。 |
/v |
– | 显示有关 CD-ROM 驱动器状态的信息。 |
/L:N |
– | 选择性地将字母名称“N:”分配给与第一个 /D:MSCD001 标识符对应的驱动器;与后续标识符相关的驱动器(如果有)将被分配下一个字母名称。默认情况下,CD/DVD 驱动器被分配最近的空闲字母名称,但 MSCDEX.EXE 不能超过 CONFIG.SYS 文件中的 LASTDRIVE 命令(4.17)设置的限制。 |
/M:12 |
– | 这是一个为排列 12 个缓冲区(每个 2048 字节)预留 24 KB 内存的示例,以提高读取速度;建议使用 4 到 64 之间的数字,默认值为 12。 |
- 注释
- MSCDEX.EXE 程序的驻留模块通过 INT 2F\AX=1500–150Fh(8.03-13 – 8.03-19)接受其他程序的请求。
5.08-04 SHSUCDX.COM – 光盘文件系统转换器
[edit | edit source]近年来,CD/DVD-ROM 文件系统规范已进行了几次修订,规定使用长文件名。MSCDEX.EXE 程序(5.08-03)无法处理光盘上修改后的文件系统:它显示截断的长文件名,但无法访问这些文件。此缺点并非 SHSUCDX.COM 程序的固有缺陷;除了这一点,SHSUCDX.COM 是 MSCDEX.EXE 的功能等效程序。SHSUCDX.COM 程序的开发由 John McCoy 启动,现由 Jason Hood 继续进行。存档 Shcdx302.zip 包含 SHSUCDX.COM 的 3.02 版(日期为 2005 年)。
SHSUCDX.COM 程序可以通过 AUTOEXEC.BAT 文件中的 LH 命令(3.17)或命令行加载,但通常由 CONFIG.SYS 文件中的 INSTALL(4.15)或 INSTALLHIGH(4.16)命令加载,例如
INSTALLHIGH=\DOS\DRV\Shsucdx.com /D:?CD001,N,0,2 /~+ /R /Q
其中
\DOS\DRV\ |
– | SHSUCDX.COM 文件的路径示例 |
/D:?CD001 |
– | 指定与特定 CD/DVD-ROM 驱动程序关联的最多 8 个字符的任意标识符(“CD001”),该驱动程序必须已加载,并且必须在其命令行中指定相同的标识符。如果存在多个 CD/DVD-ROM 驱动程序,则必须为它们指定不同的标识符,并且每个驱动程序都必须在加载 SHSUCDX.COM 的命令行中的单独的 /D: 参数后指定。标识符之前的问号表示这些驱动程序在某些配置中可能不存在,因为 PC 的硬件可能事先未知。 |
,N,0,2 |
– | 该 CD/DVD-ROM 驱动程序的一组选项,该驱动程序在 /D: 参数后指定了相同的标识符。第一个字母(“N”)是指定给相应逻辑磁盘的字母名称的示例。第二位数字(“0”)是该驱动程序控制的磁盘驱动器列表中的磁盘驱动器编号示例。第三位数字(“2”)是 SHSUCDX.COM 程序从此驱动程序接受的磁盘驱动器数量示例。默认情况下,将接受所有磁盘驱动器,并且后续磁盘驱动器将获得字母名称,这些名称遵循指定的字母名称或第一个空闲字母名称。 |
/~+ |
– | 此选项强制在长文件名中插入波浪号(~)作为最后一个字符,该文件名被截断为标准长度(8 个字符)。此选项的操作可以通过从命令行启动 SHSUCDX.COM 程序,使用反向参数 /~– 来取消。 |
/R |
– | 此选项规定从不可写的光盘复制的文件中删除“只读”属性。 |
/Q |
– | 此选项禁止显示状态消息,只会显示字母名称分配。如果您希望什么也不显示,则应指定 /QQ 参数。 |
除了上面显示的参数外,SHSUCDX.COM 程序还可以接受以下选项
/L:N |
– | 指定将指定的字母名称(“N”)分配给 SHSUCDX.COM 程序控制的第一个光盘驱动器的处方形式。如果有其他磁盘驱动器,则会为其分配下一个字母名称。/L: 参数等效于 MSCDEX.EXE 程序(5.08-03)的同义参数。SHSUCDX.COM 程序仅在未为 /D: 参数指定其他选项组的情况下才接受 /L: 参数。 |
/C |
– | 将 SHSUCDX.COM 程序的驻留模块加载到常规内存中。默认情况下,驻留模块将加载到 UMB 地址空间,如果可以访问该空间。 |
/V |
– | 在显示的状态消息中显示更多详细信息。SHSUCDX.COM 程序在预先加载后,可以通过从命令行使用此参数再次启动。显然,/V 参数与 /Q 和 /QQ 参数不兼容。 |
/U |
– | 从内存中卸载 SHSUCDX.COM 程序的驻留模块。仅从命令行接受此参数,前提是驻留模块已加载。卸载会释放已占用的内存并禁用由该驻留模块控制的所有逻辑磁盘。 |
- 注释
- SHSUCDX.COM 程序安排的数据传输不受 SMARTDRV.EXE 缓存缓冲区驱动程序(5.06-01)支持,但受 UIDE.SYS 缓存缓冲区驱动程序支持(5.06-01 的说明 3)。
5.09 光盘驱动程序
[edit | edit source]具有不同接口的光盘驱动器通常需要不同的驱动程序。文章 5.07-03 和 5.07-05 中提到了用于具有 SCSI 和 USB 接口的光盘驱动器的一些驱动程序。但在 AT 兼容 PC 中,绝大多数内部磁盘驱动器都具有 IDE(ATA)接口,此处第 5.09 部分介绍了此类磁盘驱动器的驱动程序。
流行的主板类型配备了两个 IDE 控制器。它们中的每一个都能够连接两个设备,这些设备可能是光盘驱动器和磁性硬盘驱动器。允许将光驱和磁驱连接到一个 IDE 控制器,但不建议这样做,因为光盘驱动器的速度相对较慢,会导致总数据传输速率降低。最好将光驱连接到单独的 IDE 控制器,该控制器必须在 BIOS 设置程序的设置中启用。
在现代 PC 中,BIOS 设置程序为 IDE 控制器提供了多种操作模式,包括仅轮询串行 ATA 总线(S-ATA)的模式。由于大多数光盘驱动器具有并行 ATA 接口,因此应优先使用兼容的操作模式。如果 BIOS 设置程序能够影响直接内存访问 (UltraDMA),则应设置 IDE 访问的普通模式(“传统 IDE 模式”)。这些设置保证了光盘驱动器和驱动程序在现代 PC 上运行 MS-DOS 7 时正常运行。
5.09-01 OAKCDROM.SYS – OTI Corp. 的 CD-ROM 驱动程序
[edit | edit source]OAKCDROM.SYS 驱动程序由 Oak Technology 开发,适用于具有标准 IDE 接口的 CD-ROM 光盘驱动器。日期为 1997 年的 OAKCDROM.SYS 文件存在于 WINDOWS-95/98 紧急软盘中。OAKCDROM.SYS 的相同版本可以从网站 http://www.computerhope.com/download/hardware.htm#02 下载。
在配备 DVD 驱动器的现代 PC 中,OAKCDROM.SYS 驱动程序能够访问 CD 和 DVD 光盘。但在 2003 年之前生产的 PC 中,DVD 驱动器的存在并不足以,因为 BIOS 系统可能不支持 ATAPI 协议(有关详细信息,请参见 5.07-01),因此 OAKCDROM.SYS 只能访问 CD 光盘。在这些计算机中,仍然可以访问 DVD 光盘,但需要预先通过 ATAPIMGR.SYS 驱动程序(5.07-01)安装 ATAPI 协议支持模块。
OAKCDROM.SYS 驱动程序应通过 CONFIG.SYS 文件中的 DEVICE(4.06)或 DEVICEHIGH(4.07)命令加载,例如
DEVICEHIGH=\DOS\DRV\Oakcdrom.sys /D:MSCD001 /V
其中
\DOS\DRV\ |
– | OAKCDROM.SYS 驱动程序的路径示例。 |
/D:MSCD001 |
– | 宣布最多 8 个字符的任意标识符。此标识符使 MSCDEX.EXE 程序(5.08-03)或 SHSUCDX.COM 程序(5.08-04)能够识别驱动程序。其中之一应在之后加载,并且必须在其命令行中指定相同的 /D: 参数,后跟完全相同的标识符。 |
/V |
– | 此选项会导致显示状态消息。 |
OAKCDROM.SYS 驱动程序能够在所有具有典型端口地址(1F0h、170h)和典型中断请求 (IRQ) 线号的 IDE 控制器中搜索 CD/DVD-ROM 光盘驱动器。如果 PC 配备了多个此类磁盘驱动器,则 OAKCDROM.SYS 驱动程序将控制所有找到的驱动器。
5.09-02 VIDE-CDD.SYS – Acer Co. 的 CD-ROM 驱动程序
[edit | edit source]日期为 1998 年的 VIDE-CDD.SYS 驱动程序 2.14 版是 OAKCDROM.SYS 驱动程序(5.09-01)的功能等效程序,但 VIDE-CDD.SYS 更紧凑(大小为 11.8 KB)并且可以从命令行接受端口地址以及 IRQ 线号。后一项功能在使用非标准接口规范时很重要,并且必须避免搜索磁盘驱动器。包含 VIDE-CDD.SYS 驱动程序的 SFX 存档 Apicd214.exe 可以通过互联网下载,例如从 ftp://ftp.benq.co.uk/cd-rom/drivers/apicd214.exe 下载。
如果 PC 的 BIOS 不支持 ATAPI 协议,则 VIDE-CDD.SYS 可以提供对 DVD 光盘的访问,但需要预先加载 ATAPIMGR.SYS 驱动程序(5.07-01)。VIDE-CDD.SYS 必须从 CONFIG.SYS 文件中的行加载,使用 DEVICE(4.06)或 DEVICEHIGH(4.07)命令,例如
DEVICEHIGH=\DOS\DRV\Vide-cdd.sys /D:MSCD001 /P:170,15
其中
\DOS\DRV\ |
– | VIDE-CDD.SYS 驱动程序的路径示例。 |
/D:MSCD001 |
– | 宣布最多 8 个字符的任意标识符。此标识符使 MSCDEX.EXE 程序(5.08-03)或 SHSUCDX.COM 程序(5.08-04)能够识别驱动程序。其中之一应在之后加载,并且必须在其命令行中指定相同的 /D: 参数,后跟完全相同的标识符。 |
/P:170,15 |
– | 端口基地址和中断请求线号 (IRQ) 的可选规范。 |
一行中可能指定了多个 /P
参数。当至少指定了一个 /P
参数时,将不会检查所有其他端口地址和 IRQ 线号。当省略 /P
参数时,将启动在所有典型 IDE 端口地址和 IRQ 线号中搜索 CD/DVD-ROM 光盘驱动器:/P:1F0,14
、/P:170,15
、/P:1E8,12
、/P:168,10
(A.14-1)。VIDE-CDD.SYS 驱动程序将控制所有找到的光盘驱动器。
5.09-03 QCDROM.SYS – 免费软件 CD/DVD-ROM 驱动程序
[edit | edit source]QCDROM.SYS 驱动程序的 4.2 版本由 J. R. Ellis 于 2007 年开发,基于他之前开发的 XCDROM.SYS 驱动程序。与 XCDROM.SYS 不同,QCDROM.SYS 驱动程序能够访问 DVD 光盘,并且不需要 PC 的 BIOS 或 ATAPIMGR.SYS 驱动程序的 ATAPI 协议支持。QCDROM.SYS 驱动程序可以控制最多三个 CD/DVD-ROM 驱动器,这些驱动器连接到 IDE 控制器,具有标准的端口基址和标准的中断请求线:1F0h 与 IRQ 14 和/或 170h 与 IRQ 15。
打包在 QCDROM42.ZIP 压缩文件中的 QCDROM.SYS 驱动程序可以从以下网站下载:http://cyberia.dnsalias.com/Cyb.05.Htm。
QCDROM.SYS 应该通过 CONFIG.SYS 文件中的 DEVICE (4.06) 或 DEVICEHIGH (4.07) 命令加载,例如:
DEVICEHIGH=\DOS\DRV\Qcdrom.sys /D:MSCD001 /L
其中
\DOS\DRV\ |
– | QCDROM.SYS 驱动程序路径示例。 |
/D:MSCD001 |
– | 最多 8 个字符的任意标识符的公告。此标识符允许 MSCDEX.EXE 程序 (5.08-03) 或 SHSUCDX.COM 程序 (5.08-04) 识别驱动程序。其中之一应该随后加载,并且必须在它的命令行中提供相同的 `/D:` 参数,后跟完全相同的标识符。如果省略了 `/D:` 参数,QCDROM.SYS 将指定默认标识符 QCDROM1。 |
/L |
– | 此选项规定在常规内存 (640 kb) 之外禁止使用直接内存访问 (DMA)。这可能在 PC 的内存控制器不支持对 UMB 内存区域进行 DMA 访问的情况下是必要的,而 UMB 则被打开以供普通访问,例如,由 UMBPCI.SYS 驱动程序 (5.04-04) 使用。如果指定了 `/L` 选项,则数据传输通过 XMS 内存中的缓冲区进行;因此,在这种情况下,必须预先加载 HIMEM.SYS 驱动程序 (5.04-01)。 |
除了所示参数外,QCDROM.SYS 驱动程序还可以从命令行接受以下选项:
/A |
– | 强制使用主通道上的旧备用 IDE 控制器地址 01E8h-01EFh,以及次通道上的 0168h-016Fh。这可能在“奇数”SATA BIOS 或其他不寻常情况下需要。 |
/I |
– | 强制 QCDROM.SYS 组织自己的 XMS 缓冲区。这使得能够避免与“奇数”DMA 和 BIOS 服务的潜在冲突。 |
/UF |
– | 规定启用加速直接内存访问 (UltraDMA)。UltraDMA 的可行性已在许多主板的芯片组中得到确认,但并非所有芯片组都支持。建议针对每个具体情况检查 `/UF` 参数是否允许。 |
/UX |
– | 即使磁盘驱动器和主板都声称支持 UltraDMA,也禁止使用 UltraDMA。`/UX` 选项用于诊断和测试目的。当指定了 `/UX` 选项时,QCDROM.SYS 驱动程序不需要 XMS 内存。 |
/PM |
– | (= 主磁盘):不搜索磁盘驱动器,但仅检查主 IDE 控制器总线上的主磁盘驱动器是否存在。 |
/PS |
– | (= 从磁盘):不搜索磁盘驱动器,但仅检查主 IDE 控制器总线上的从磁盘驱动器是否存在。 |
/SM |
– | (= 次磁盘):不搜索磁盘驱动器,但仅检查次 IDE 控制器总线上的主磁盘驱动器是否存在。 |
/SS |
– | (= 次从磁盘):不搜索磁盘驱动器,但仅检查次 IDE 控制器总线上的从磁盘驱动器是否存在。 |
最多三个禁止搜索磁盘驱动器的参数可以在一个命令行中指定。磁盘驱动器将根据命令行中对应参数的顺序进行编号。如果指定的检查没有发现磁盘驱动器,则所有其他光盘驱动器将被忽略,并且 QCDROM.SYS 驱动程序的驻留模块将不会加载。
5.09-04 DVS.SYS – 来自 DVS Corp. 的 CD/DVD-ROM 驱动程序。
[edit | edit source]DVS.SYS 驱动程序由 Digital Video Systems Corp. 于 1999 年开发。DVS.SYS 驱动程序能够访问 DVD 光盘,并且不需要 PC 的 BIOS 或 ATAPIMGR.SYS 驱动程序的 ATAPI 协议支持。打包在 SFX 压缩文件 Drdvdwd.exe 中的 DVS.SYS 驱动程序的 1.1 版本可以从以下网站下载:http://web.archive.org/web/20030212210152/www.dr-tech.com/drivers/cdroms.html。
DVS.SYS 驱动程序应该通过 CONFIG.SYS 文件中的 DEVICE (4.06) 或 DEVICEHIGH (4.07) 命令加载,例如:
DEVICEHIGH=\DOS\DRV\Dvs.sys /D:MSCD001
其中
\DOS\DRV\ |
– | DVS.SYS 驱动程序路径示例。 |
/D:MSCD001 |
– | 最多 8 个字符的任意标识符的公告。此标识符允许 MSCDEX.EXE 程序 (5.08-03) 或 SHSUCDX.COM 程序 (5.08-04) 识别驱动程序。其中之一应该随后加载,并且必须在它的命令行中提供相同的 `/D:` 参数,后跟完全相同的标识符。 |
DVS.SYS 驱动程序能够搜索磁盘驱动器,但搜索速度比其他类似驱动程序慢。实验已经证实,DVS.SYS 驱动程序至少可以控制两个光盘驱动器,这些驱动器连接到具有标准端口基址和中断请求线编号规范的任何一个 IDE 控制器(1F0h 与 IRQ 14 和/或 170h 与 IRQ 15)。