Rust 编译 DOS 可执行文件(使用 Rust 创建 DOS 可执行文件或第一阶引导加载器) 可以使用 Rust 创建 DOS 可执行文件或第一阶引导加载器。 以下是一个快速演示,展示如何为 DOS 创建 COM 可执行文件。
源码
https://github.com/o8vm/rust_dos
构建步骤
你需要 binutils 和 llvm-tools-preview。
cargo install cargo-binutils
rustup component add llvm-tools-preview
然后您可以通过执行以下命令来构建项目:
cargo build --release
要为 DOS 创建一个 COM 可执行文件,请运行:
cargo objcopy --release -- -O binary --binary-architecture=i386:x86 rust_dos.com
运行
QEMU
您可以将 rust_dos.com 复制到您的DOS镜像中。
Linux上的示例
$ sudo partx -av freedos.img
partition: none, disk: freedos.img, lower: 0, upper: 0
Trying to use '/dev/loop1' for the loop device
/dev/loop1: partition table type 'dos' detected
range recount: max partno=1, lower=0, upper=0
/dev/loop1: partition #1 added
$ sudo mount /dev/loop1p1 /mnt
$ sudo cp rust_dos.com /mnt/
$ sudo umount /mnt
$ sudo partx -dv /dev/loop1
然后,您可以使用 QEMU 进行测试:
qemu-system-i386 freedos.img -boot c
您可以使用 println! 宏。 以下是 HelloWorld 的一个示例:
DOSBox
首先安装 DOSBox。如果您喜欢使用包管理器,这里有一些示例:
Debian / Ubuntu
sudo apt install dosbox
苹果操作系统 (Homebrew)
brew install dosbox
Windows(巧克力)包管理器
choco install dosbox
一旦安装完成,您可以启动 DOSBox 并为其提供可执行文件的路径。例如,您可以仅提供当前工作目录,如下所示:
这将启动 DOSBox 并将 “C:” 驱动器设置为当前工作目录。通常,从另一个控制台执行此操作是个好主意,这样每次需要重新编译应用程序时,您就不必关闭 DOSBox。
其他
dpkey 模块从 DOS 中接管键盘输入处理,并将扫描码转换为 ASCII 码。 关于扫描码:请参见 PS/2 键盘 - OSDev Wiki。