使用 dosemu 进行 DOS 模拟

作者:Dean Oisboid

欢迎回来。在第一篇“新手到新手”文章中,我们使用 UMSDOS 将 Linux 安装到现有的 DOS 设置中,而无需重新分区。这是 Linux 对 PC 用户的一大魅力——能够在不丢失 DOS 设置的情况下试用它。

如果您阅读了第一篇文章,您就会知道我尝试了几次才获得良好的安装效果,主要问题是硬盘空间不足,尽管为此目的预留了 150 兆字节。从那以后,我必须承认,我又重新安装了一次,并且通过非常挑剔地选择要安装的文件,我设法将 Linux 的大小保持在可用 150 兆字节中的大约 80 兆字节。

我还发现 Slackware 默认设置为四个虚拟控制台用于登录,X Window 系统在第五个虚拟控制台上启动。虽然这对于使用 Alt-F 按钮在屏幕之间切换非常有用,但由此导致的 RAM 不足(我只有 8 MB)干扰了许多程序,最明显的是 X-Windows 下的 seyon(一个调制解调器程序)。解决方案是编辑 /etc/inittab 文件,并将第三和第四个虚拟控制台的行注释掉(在提及 tty3 和 tty4 的行首放置 # 字符)。使用此方法重新启动后,释放了大量内存,使 X Window 系统和 seyon 运行更流畅。

在本文中,我们将探讨 Linux 的一个独特方面:通过 dosemu 在 Linux 下运行 MS-DOS 或 PC-DOS。(使用 WINE 进行 Windows 模拟仍处于起步阶段,已在 1994 年 8 月的 Linux Journal 杂志中介绍。)

为什么要尝试 dosemu?简而言之,模拟器允许您一次使用多个操作系统。这种灵活性是 Windows 和 DOS 所不具备的,但在 Linux 下可用。还有其他操作系统可用的其他模拟器;勇敢者可以尝试 Apple II+ 模拟器或“iBCS2”模拟器,后者允许用户运行旨在用于其他 Unix 系统的二进制文件。您可以看到,Linux 很可能成为一场静悄悄但又异常强大的革命的先锋——功能和实用性胜过纯粹的利润率。

说够了,让我们开始吧!

在此声明,我测试了 dosemu 的 0.53 补丁级别 28 版本。这是我在 Slackware Professional 2.1 光盘上收到的发行版。(与开发中的项目一样,这些版本甚至在 CD 母盘制作完成之前就已经过时了。)截至本文撰写之时,dosemu 的最新开发版本是 0.53pl45,开发人员计划在 Linux 1.2.0 发布后不久发布稳定的公共版本。

我使用 mc(Midnight Commander——伟大的 Norton Commander 克隆)将 /tsx-11/ALPHA/dosemu/Development

/pre0.53_28.tgz 复制到 /usr,Midnight Commander——伟大的 Norton Commander 克隆——也可以通过 F2 下的一个选项,让我解压缩和解 tar 复制过来的文件。

如果您购买过任何 Linux 文档,您可能会发现关于 dosemu 的信息很少。有一个 HOWTO,但它没有介绍如何结合 UMSDOS 使用模拟器,也没有介绍如何开始,除了对 dosemu 附带的文件 QuickStart 的引用。浏览此文件,您会注意到的另一件事是 dosemu 需要编译。令人心惊胆战的时刻到了。

两个直接的警告:第一,您需要安装 bisonflex(从 Slackware 的 `D' 集中安装),否则编译过程将崩溃。第二,您需要备份任何重要的 DOS 文件并准备一个 DOS 系统启动盘。我坚持这一点!

如果您想编译此版本的 dosemu,安装建议总共有 12-20MB 的 RAM 和交换空间可用。我的电脑只有 8MB 的 RAM,dosemu 就是无法编译。绝对需要交换空间。我从未尝试设置交换空间,但决定试一试。

新手注意: 如果您决定创建交换空间(在使用 UMSDOS 时),您必须——必须,必须——重新分区您的硬盘。如果您在不重新分区并引用该分区的情况下完成创建过程,则预计会丢失一些东西。我的硬盘被毁了!Linux 无法识别目录。重新启动无法启动 DOS。恐慌?心脏病发作?吓尿裤子?哦,是的,还有更多。幸运的是,我有一个 DOS 启动盘,Norton Disk Doctor 能够纠正错误并恢复 FAT(文件分配表)和系统文件。呼,松了一口气!宗教就是这样开始的。

我真正想要的是 交换文件 用于交换,因为它不需要重新分区。喷气推进实验室的 Peter Scott 向我指出了这一点,并给了我关于执行此工作的命令的线索。他还提到,在正常的 Unix 系统中,您需要一个大的分区交换空间,大约 50MB 左右。我摇了摇头;由于大量重要的游戏和工作相关数据涌入,我的硬盘空间已降至 30MB。[Linux 比正常的 Unix 系统需要更少的交换空间,因为它以某种不同的方式使用内存——编者注]

根据系统管理手册,您可以使用以下命令创建一个名为 /swap 的交换文件

dd if=/dev/zero of=/swap bs=1024 count=8192
mkswap /swap 8192
sync
swapon /swap

这将创建一个 8MB 的交换文件。即使您决定跳过使用 dosemu,您仍然可以从使用交换空间中受益。例如,我一直在 X Window 系统中玩 Netscape 的副本,但如果没有交换空间,它不允许我访问首选项菜单。它会崩溃。但是,在交换空间激活后,首选项和其他菜单变得可用。这真实地证明了交换空间的价值。

为了使交换文件在每次启动时都使用,您可以将 swapon /swap 添加到您的 /etc/rc.d/rc.local 文件中。但是,更好的方法是将以下行添加到

/swap  none  swap  defaults  0  0

您的 /etc/fstab 文件中。这将使交换空间在最佳可能的时间自动添加。

如果您非常需要找回磁盘空间,可以使用以下命令删除交换文件

swapoff /swap
rm /swap

如果您已将行添加到 /etc/rc.d/rc.local 或 /etc/fstab,请确保删除该行。

在交换文件就位并激活后,我再次开始编译 dosemu。通读 QuickStart 文件让我胃部不适,但我还是按照说明进行了操作。命令

make most

开始了繁重的编译工作。我没有安装 TeX(一种高级排版系统),所以这是正确的命令,而不是 make doeverything。经过一段时间的磨练,编译完成了。没有崩溃错误!然后,说明指示将 hdimage.dist 复制到 /var/lib/dosemu/hdimage,并将 /examples/config.dist 复制并编辑到 /etc/dosemu.conf。

编辑 /etc/dosemu.conf 很简单。我真正需要更改的行只是我的鼠标和调制解调器;我还必须取消注释对

disk { image "/var/lib/dosemu/hdimage" }

提供的示例 dosemu.conf 文件有大量的注释,解释了该怎么做。

完成这些操作后,我通过返回 DOS 并格式化系统盘来准备推荐的启动盘。然后回到 Linux。

最后,我输入 dos,果然,启动盘启动了,我盯着熟悉的 A: 提示符。从那里,如果我输入 C:,我会被带到一个 C: 驱动器的映像。

不错,但不是我所期望的。目标是能够通过 Linux 访问我当前的 DOS 系统,而不是拥有一个假的 DOS 映像。

回到 /etc/dosemu.conf 文件,我将硬盘驱动器引用切换到

disk { partition "/dev/hda1" 1 readonly }

这将允许我访问硬盘驱动器,但由于只读模式而无法更改任何内容。然而,当我启动 dosemu 时,什么也没有发生。搞什么鬼,我将磁盘引用更改为

disk { wholedisk "/dev/hda" }

这将允许完全且可能危险的访问。输入 dos,果然 dosemu 开始加载。首先注意到的是一条消息,内容是关于 QEMM(Quarterdeck 的内存管理器程序)未加载,因为处理器已处于虚拟 86 模式。没有 QEMM,许多其他内存驻留程序没有加载。使用 DOS mem 进行检查显示鼠标和 CD 驱动程序丢失(不出所料,因为 dosemu 提供了自己的鼠标和 CD 驱动程序)。然而,总而言之,我有 599K 的可用 RAM。还不错。但是,真正的考验是运行一个程序。[dosemu 提供了 QEMM 的基本功能——它提供了您想要的尽可能多的 EMS 和 XMS 内存——编者注]

不幸的是,虽然文档说 wholedisk 访问是危险的,但很容易忽略为什么它会危险。事实证明,当内核以 Ms-dos 或 UMSDOS 文件系统挂载 DOS 文件系统时,使用 wholedisk 访问该分区可能会破坏 DOS 文件系统。

在经历了一些文件系统损坏后,我发现有一种方法可以让我的 DOS C: 驱动器也成为 DOS 模拟器下的 C: 驱动器,而不会造成损坏,也无需从软盘启动。从 dosemu.conf 中的注释中获得提示,并在一位朋友的帮助下,我首先编辑了启动软盘上的 config.sys,添加了行

device=a:\emufs.sys /dos/

这使得 Linux 下的 /dos 目录在 dosemu 下显示为 C:。我还添加了行

a:\lredir d: linux\fs\

到 autoexec.bat,使 Linux 根目录在 dosemu 下显示为 D:,以便更容易从 dosemu 中访问一些 Linux 文件。

然后我输入

dd if=/dev/fd0 of=/var/lib/dosemu/floppy

我的启动软盘在 A 驱动器中。然后,在 dosemu.conf 的软盘配置部分,我更改了

floppy { device /dev/fd0 threeinch }:

floppy { heads 2 sectors 18 tracks 80 threeinch
file /var/lib/dosemu/floppy }
floppy { device /dev/fd0 threeinch }

通过修改和取消注释几行。我将 bootC 行更改为 bootA,并删除了损坏我文件的 wholedisk 行。现在我可以不用软盘启动,但 C: 仍然是 C:。[还有其他方法可以做同样的事情,但这效果很好——编者注]

可悲的是,似乎仍然没有任何东西可以运行。Quattro Pro 5 for DOS 彻底崩溃了。Warlords II 也一样。崩溃非常严重,不仅锁定了计算机,而且当我执行 Ctrl-Alt-Delete 重新启动时,屏幕上充满了彩色垃圾。如果我切换虚拟控制台,也会发生这种相当漂亮的效果。

虽然我不愿意寻求任何帮助,但我还是向 dosemu 的现任维护者 James MacLean 发送了一条消息,询问是否有人成功地在 UMSDOS 下使用 dosemu。很快收到了来自 MacLean 先生、Marty Leisner 和 Lars Marowsky-Bree 的三条回复。所有人都提供了帮助,我礼貌地拒绝了,因为他们的回复给了我我需要的激励——有人确实成功了!

回到 Linux,我狠狠地盯着 dosemu.conf——谢天谢地,答案一直都在那里。配置文件的一部分处理视频设置。最初我选择了

video { vga console }

但我应该选择

video { vga console graphics }

以启用图形。这奏效了!当我运行 dos 并选择裸启动设置时,果然,我现在可以运行 Warlords II 或 Quattro Pro 5 等程序了。

但是鼠标无法工作。啊啊啊啊!!好吧,exitemu 返回 Linux,编辑 /etc/dosemu.conf,并将行从

serial { com 1 mouse }

serial {com 1 device /dev/mouse }

再次尝试。没用。DOS 就是找不到鼠标,好像……好像鼠标已经被使用了。GPM!(通用鼠标驱动程序)我的 Linux 设置在启动时自动加载 gpm。使用 top,我找到了 gpm 的进程号并 kill 掉了它。[killall gpm 也有效——编者注] 回到 DOS,加载鼠标驱动程序。是的!DOS 识别鼠标。是的!Warlords II 在鼠标支持下运行!是的!Quattro Pro v5 在鼠标支持下运行!不!FoxPro 2.6 因内存问题崩溃(我预料到会这样,但幸运的是还在,我不得不试一试)。[FoxPro 2.6 也可以在正确的配置下运行——编者注]

呼!尽管我在编译、交换空间和漂亮的彩色崩溃方面遇到了所有问题,但我认为 dosemu 是一项令人难以置信的成就。DOS 可以在 Linux 下运行真是令人难以置信。当然,dosemu 对于我们这些新手来说可能很艰难,但潜在的回报弥补了这一点。现在正在进行一些工作,这将使其更容易。其中之一是 FreeDOS 项目,该项目正在编写一个免费版本的 DOS。它将在 dosemu 下像 MS-DOS 一样运行,不同之处在于 dosemu 可以预装它一起分发,从而使用户(就是你!)免于安装合法拥有的 MS-DOS、PC-DOS 或 DRDOS 的痛苦才能开始使用。此外,dosemu 的公共版本应该非常稳定且更易于分发。

下个月,“新手到新手”将深入 DOOM 的深渊,并使用 SoundBlaster 解决爆炸声音问题,带来 Linux 轻松的一面。在那之前...

Dean Oisboid,Garlic Software 的所有者,是一位数据库顾问、Unix 初学者和公认的 Warlords II 瘾君子。可以通过 73717.2343@compuserve.com 联系到他。

加载 Disqus 评论