如何在 Linux 中运行 DOS 程序

QEMU 和 FreeDOS 让在 Linux 下运行旧的 DOS 程序变得容易。
543 位读者喜欢这个。
An introduction to GNU Screen

Opensource.com

经典的 DOS 操作系统支持许多出色的应用程序:文字处理器、电子表格、游戏和其他程序。仅仅因为一个应用程序很旧并不意味着它不再有用。

今天有很多理由运行旧的 DOS 应用程序。也许是为了从遗留的商业应用程序中提取报告。或者玩经典的 DOS 游戏。或者仅仅因为你对“经典计算”感到好奇。你不需要双启动你的系统来运行 DOS 程序。相反,你可以在 Linux 中借助 PC 模拟器和 FreeDOS 来运行它们。

FreeDOS 是一个完整的、免费的、与 DOS 兼容的操作系统,你可以用它来玩经典的 DOS 游戏、运行遗留的商业软件或开发嵌入式系统。任何在 MS-DOS 上运行的程序也应该在 FreeDOS 上运行。

在“过去”,你将 DOS 作为计算机上唯一的操作系统安装。现在,在 Linux 下运行的虚拟机中安装 DOS 要容易得多。QEMU(Quick EMUlator 的缩写)是一个开源软件虚拟机系统,可以将 DOS 作为 Linux 的“客户”操作系统运行。大多数流行的 Linux 系统默认包含 QEMU。

以下是在 Linux 下使用 QEMU 和 FreeDOS 运行旧 DOS 应用程序的四个简单步骤。

步骤 1:设置虚拟磁盘

你需要一个在 QEMU 中安装 FreeDOS 的位置,为此你需要一个虚拟 C: 驱动器。在 DOS 中,驱动器用字母分配——A:B: 是第一个和第二个软盘驱动器,而 C: 是第一个硬盘驱动器。其他介质,包括其他硬盘驱动器或 CD-ROM 驱动器,被分配为 D:E: 等。

在 QEMU 下,虚拟驱动器是镜像文件。要初始化一个可以作为虚拟 C: 驱动器的文件,请使用 qemu-img 命令。要创建一个大约 200MB 的镜像文件,请输入这个

qemu-img create dos.img 200M

与现代计算相比,200MB 可能看起来很小,但在 1990 年代早期,200MB 已经很大了。这足以安装和运行 DOS。

步骤 2:QEMU 选项

与 VMware 或 VirtualBox 等 PC 模拟器系统不同,你需要通过指示 QEMU 添加虚拟机的每个组件来“构建”你的虚拟系统。虽然这看起来很费力,但实际上并没有那么难。以下是我在 QEMU 中启动 FreeDOS 时使用的参数

qemu-system-i386

QEMU 可以模拟几种不同的系统,但要启动 DOS,我们需要有一个与 Intel 兼容的 CPU。为此,请使用 i386 命令启动 QEMU。

-m 16

我喜欢定义一个具有 16MB 内存的虚拟机。这可能看起来很小,但 DOS 不需要太多内存来完成其工作。当 DOS 盛行时,具有 16MB 甚至 8MB 内存的计算机非常普遍。

-k en-us

从技术上讲,-k 选项不是必需的,因为 QEMU 会将虚拟键盘设置为与你的实际键盘匹配(在我的情况下,那是标准美国布局的英语)。但我还是喜欢指定它。

-rtc base=localtime

每台经典 PC 都提供实时时钟 (RTC),以便系统可以跟踪时间。我发现将虚拟 RTC 简单地设置为与你的本地时间匹配是最容易的。

-soundhw sb16,adlib,pcspk

如果你需要声音,特别是对于游戏,我更喜欢使用 SoundBlaster16 声卡硬件和 AdLib Music 支持来定义 QEMU。SoundBlaster16 和 AdLib 是 DOS 时代最常见的声卡硬件。一些较旧的程序可能会使用 PC 扬声器发出声音;QEMU 也可以模拟这个。
-device cirrus-vga 为了使用图形,我喜欢模拟一个简单的 VGA 显卡。Cirrus VGA 显卡在当时是一种常见的显卡,QEMU 可以模拟它。

-display gtk

对于虚拟显示器,我将 QEMU 设置为使用 GTK 工具包,这会将虚拟系统放在自己的窗口中,并提供一个简单的菜单来控制虚拟机。
-boot order= 你可以告诉 QEMU 从各种来源启动虚拟机。要从软盘驱动器(通常在 DOS 机器上为 A:)启动,请指定 order=a。要从第一个硬盘驱动器(通常称为 C:)启动,请使用 order=c。或者要从 CD-ROM 驱动器(通常由 DOS 分配为 D:)启动,请使用 order=d。你可以组合字母来指定特定的启动首选项,例如 order=dc,首先使用 CD-ROM 驱动器,如果 CD-ROM 驱动器不包含可启动介质,则使用硬盘驱动器。

步骤 3:启动并安装 FreeDOS

现在 QEMU 已设置为运行虚拟系统,我们需要一个 DOS 版本来安装并在该虚拟计算机中启动。FreeDOS 使这一切变得容易。最新版本是 FreeDOS 1.2,于 2016 年 12 月发布。

FreeDOS 网站 下载 FreeDOS 1.2 发行版。FreeDOS 1.2 CD-ROM“标准”安装程序 (FD12CD.iso) 非常适合 QEMU,所以我推荐这个版本。

安装 FreeDOS 很简单。首先,告诉 QEMU 使用 CD-ROM 镜像并从中启动。请记住,C: 驱动器是第一个硬盘驱动器,因此 CD-ROM 将显示为 D: 驱动器。

qemu-system-i386 -m 16 -k en-us -rtc base=localtime -soundhw sb16,adlib -device cirrus-vga -display gtk -hda dos.img -cdrom FD12CD.iso -boot order=d

只需按照提示操作,你将在几分钟内安装好 FreeDOS。

Starting FreeDOS installation

opensource.com

Select your keyboard layout

opensource.com

Selecting which packages to install

opensource.com

Rebooting after installation

opensource.com

完成后,通过关闭窗口退出 QEMU。

步骤 4:安装并运行你的 DOS 应用程序

安装 FreeDOS 后,你可以在 QEMU 中运行不同的 DOS 应用程序。你可以在各种档案库或其他 网站 上在线找到旧的 DOS 程序。

QEMU 提供了一种访问 Linux 本地文件的简便方法。假设你想与 QEMU 共享 dosfiles/ 文件夹。只需告诉 QEMU 使用该文件夹作为虚拟 FAT 驱动器,方法是使用 -drive 选项。QEMU 将像访问硬盘驱动器一样访问此文件夹。

-drive file=fat:rw:dosfiles/

现在,使用你的常规选项以及额外的虚拟 FAT 驱动器启动 QEMU

qemu-system-i386 -m 16 -k en-us -rtc base=localtime -soundhw sb16,adlib -device cirrus-vga -display gtk -hda dos.img -drive file=fat:rw:dosfiles/ -boot order=c

一旦你在 FreeDOS 中启动,你保存到 D: 驱动器的任何文件都将保存到 Linux 上的 dosfiles/ 文件夹中。这使得从 Linux 直接读取文件变得容易;但是,在启动 QEMU 后,请注意不要从 Linux 更改 dosfiles/ 文件夹。QEMU 在你启动 QEMU 时构建一次虚拟 FAT 表。如果你在启动 QEMU 后在 dosfiles/ 中添加或删除文件,模拟器可能会感到困惑。

我像这样使用 QEMU 来运行我最喜欢的 DOS 程序,例如 As-Easy-As 电子表格程序。这是 1980 年代和 1990 年代流行的电子表格应用程序,它执行与今天的 Microsoft Excel 和 LibreOffice Calc 相同的工作,或者更昂贵的 Lotus 1-2-3 电子表格在过去所做的工作。As-Easy-As 和 Lotus 1-2-3 都将数据保存为 WKS 文件,较新版本的 Microsoft Excel 无法读取这些文件,但 LibreOffice Calc 可能仍然支持,具体取决于兼容性。

As-Easy-As spreadsheet program

opensource.com

我也喜欢在 QEMU 下启动 FreeDOS 来玩一些我最喜欢的 DOS 游戏,例如最初的 Doom。这些旧游戏仍然很有趣,而且它们在 QEMU 下都能完美运行。

Doom

opensource.com

Heretic

opensource.com

Jill of the Jungle

opensource.com

Commander Keen

opensource.com

QEMU 和 FreeDOS 让在 Linux 下运行旧的 DOS 程序变得容易。一旦你设置好 QEMU 作为虚拟机模拟器并安装了 FreeDOS,你就应该可以从 Linux 运行你最喜欢的经典 DOS 程序了。

所有图片均由 FreeDOS.org 提供。

photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发者,以 GNOME 中的可用性测试以及作为 FreeDOS 的创始人兼项目协调员而闻名。

16 条评论

为什么这样做而不是使用 dosbox?

DOSBox 也是一个很好的系统。但我认为 DOSBox 只是用来玩游戏的。

如果你只想玩游戏,DOSBox 提供了一个很棒的平台。它不太适合在 DOS 环境中进行其他工作。DOSBox 在他们的 wiki 上说“DOSBox 还带有自己的类似 DOS 的命令提示符。它仍然非常简陋,缺乏 MS-DOS 中的许多功能,但它足以安装和运行大多数 DOS 游戏。”

使用 FreeDOS 和 PC 模拟器,你可以做的不仅仅是玩游戏。我们在 FreeDOS 中添加了比经典“DOS”提供的更多功能,同时保持了与 DOS 的兼容性。FreeDOS “Base”包括那些取代原始 MS-DOS 行为的程序和实用程序。我们的其他软件包包括编译器/软件开发、编辑器、存档器、音乐播放器、文本处理和其他使 FreeDOS 不仅仅是“DOS”的东西。我们也有游戏。

回复 作者 Andrew Patterson (未验证)

实际上,这些不是在 Linux(或 Windows)上运行 DOS 应用程序的最佳方式。我建议任何有遗留 DOS 应用程序、游戏或业务生产问题的人都调查一下 DOSBOX。它不仅提供了其他解决方案的所有功能,还提供了声音和速度缩放支持。

呵呵,freedos 不错,没错。虽然最简单的仍然是 DOSbox。

运行 Doom 或 Heretic 的更好方法是使用 gzDoom 和原始 WAD :) 不过文章写得很好 :)

另一个选择:HP 15.6 英寸 ZBook 15u G4 移动工作站,它加载了 FreeDOS 2.1 作为其操作系统!
将 Linux 安装为“双启动”应该是理所当然的。B&H 售价 750 美元。

惠普和戴尔是两家在(某些)系统上提供 FreeDOS 选项的 PC 制造商。很高兴看到 FreeDOS 以这种方式使用。 :-)

我想你的意思是“1.2”而不是“2.1”。FreeDOS 1.2 是最新版本。我们目前正在讨论“2.0”。

回复 作者 robertservice (未验证)

感谢您的更正(我想这不算作对 FreeDOS 2.1 的“贡献”或“帮助”,是吗?我不这么认为!)。
继续保持你的出色工作。而且,你认为在这台 H-P 机器上可以轻松地双启动 Linux 吗?

回复 作者 Jim Hall

这是一篇非常棒的文章!

我通过以下几种方式运行 DOS:DOSBox 和 dosemu。从来没有对 Virtualbox 运行 DOS 感兴趣,因为我需要更直接(和自然)地访问共享数据。

QEMU 听起来像是第三个不错的选择。“-drive file=fat:rw:dosfiles/”说服了我,还有声音支持。

我很兴奋很快尝试一下。

谢谢!

我过去常常通过 DOSEMU 进行大量的 FreeDOS 开发。这是一个很棒的小系统。但后来我发现了 QEMU,我现在真的很喜欢使用它。使启动 FreeDOS 变得非常容易,特别是进行新版本的测试安装。

回复 作者 jake (未验证)

非常感谢 Jim!!! :-)
这是一篇很棒的指南!

就个人而言,为了在我的系统上使用 DOS,我(按此顺序)使用:1) DOSBox(本地添加了一些 FreeDOS 实用程序),2) DOSEMU(预装了 FreeDOS,尽管可以为某些 FreeDOS 工具安装更新版本)和 3) 安装在 VirtualBox 上的 FreeDOS。

我将尽快安装 QEMU。
再次感谢!!! :-)
G.

有一种在 dosemu 下使用 Freedos 的方法。
我尝试过,但从未成功,也找不到逐步教程
如果你有兴趣或知道好的操作方法,我很想阅读并再次尝试。

我不知道,但也许是因为我正在学习成为一名程序员,所以我看不到这个的价值?我的意思是,我理解整个“怀旧”氛围,但在一个实际的世界里?这似乎不值得努力。当有那么多其他事业可以从事时,例如构建 NoSQL 数据库,从远程/卫星 Linux 机器连接到它,学习编程,如 C++....Python...和 Ruby On Rails...等等。我想网络世界中每个人都有自己的东西!不过文章写得很好,内容丰富!

不幸的是,FreeDOS 在游戏支持方面缺少一个关键的东西。声霸卡。
请添加经典声卡模拟。这是唯一缺失的部分。

呵呵,这种方法效果很差。2D 游戏出现故障,《毁灭战士》原版根本无法启动。

我遇到了这个错误,但不知道如何启用 GTK 支持

qemu-system-i386: -display gtk: GTK 支持已禁用

但是,我只是省略了 -display gtk 选项,它就工作了。

顺便说一句,如果有人考虑在 VirtualBox 中尝试这个,你无法添加客户机增强功能(不支持 Win 2000 之前),所以你无法缩放窗口。

我还没有弄清楚如何使显示分辨率更大。我可以拉伸窗口,现在这样还可以。不确定在获得一个可用的游戏之前,它会如何影响游戏。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.