自己编写的80x86虚拟机 NXVM

发一款自己写的80x86虚拟机 NXVM


【简介】

这个虚拟机是用C编写的,一共37,000行代码。

它完整的模拟了一台PC,包括一个80386 CPU,以及所有必要的设备,例如内存、DMA、中断控制器、软驱、硬盘、键盘、显示器等。

因此,它可以运行一个基于x86的操作系统,如MS-DOS6.22。


NXVM虚拟机可以同时在Windows和Linux下通过编译。在Windows下,它可以运行在命令提示符窗口中(将Win32控制台作为虚拟机显示器和键盘),也可以创建自己的窗口(更加稳定)。在Linux下,它暂时只能在80x25尺寸的终端窗口中正常运行,有一定的限制。


除此之外,NXVM还包含了一个完整的调试器(16/32位),汇编器和反汇编器。因此,不仅可以跑操作系统,更可以单步调试、下断点、查看寄存器和内存状况,

以此对操作系统进行调试。


它可以运行MS-DOS 6.22系统和其他第三方程序。

对于MS-DOS 6.22,除了常规启动以外,还实现了高位内存访问(HMA),也就是DOS内核可以载入到1MB以上64K的内存中。


除了源代码以外,我还为虚拟机编写了一份设计文档,里面有详细的代码分析和使用指南,可以帮助感兴趣的人理解这一虚拟机的运作过程。


由于时间有限、文档缺乏,有部分设备没能完整实现。并且80386 CPU的虚拟86模式和保护模式也并不完整,所以暂时还只能运行MS-DOS 6.22。


之所以编写这个虚拟机,是因为自己对底层结构非常感兴趣。并且看到了easyVM的发布,因此也跃跃欲试。

NXVM的设计部分参考了easyVM(8086 CPU的指令分派和端口结构设计),CPU的调试是通过同步执行Bochs CPU,并比较寄存器/内存读写的值。

另外,LightMachine的文档也提供了不少的帮助。感谢easyVM、LightMachine和Bochs的作者们!


【Screenshot】

虚拟机状态

自己编写的80x86虚拟机 NXVM_第1张图片

启动MS-DOS 6.22

自己编写的80x86虚拟机 NXVM_第2张图片

MS-DOS运行在常规内存

自己编写的80x86虚拟机 NXVM_第3张图片

MS-DOS运行在HMA

自己编写的80x86虚拟机 NXVM_第4张图片

经典打字程序TT

自己编写的80x86虚拟机 NXVM_第5张图片

自己编写的80x86虚拟机 NXVM_第6张图片

俄罗斯方块NYET

自己编写的80x86虚拟机 NXVM_第7张图片

自己编写的80x86虚拟机 NXVM_第8张图片

Turbo C

自己编写的80x86虚拟机 NXVM_第9张图片

QBASIC编程

自己编写的80x86虚拟机 NXVM_第10张图片

Win95的Edit(使用部分32位指令)

自己编写的80x86虚拟机 NXVM_第11张图片

MSAV病毒扫描

自己编写的80x86虚拟机 NXVM_第12张图片

磁盘碎片整理

自己编写的80x86虚拟机 NXVM_第13张图片



在Win32窗口中运行:

自己编写的80x86虚拟机 NXVM_第14张图片

自己编写的80x86虚拟机 NXVM_第15张图片

自己编写的80x86虚拟机 NXVM_第16张图片


在Linux终端中运行:

自己编写的80x86虚拟机 NXVM_第17张图片

自己编写的80x86虚拟机 NXVM_第18张图片

【编译】

1. 在Linux下编译:解压zip,进入nxvm目录,使用makefile进行编译,输出a.out

2. 在Windows下编译:在VS2008、VS2010或VS2012中,创建空的Win32控制台项目,

把vmachine文件夹下面的所有C和H文件加入;把nxvm文件夹下面的main.c,console.c 和console.h加入。

然后排除掉vmachine/system/linux.ch,以及vmachine/vcpuapi.cc,以及vmachine/vcpuins_i8086.c。

编译为x64 Release即可。


【使用】

1. 将下载的2个磁盘镜像(fd.img和hd.img)放在可执行文件的同一个目录中,然后运行。

2. 输入start,就可以从虚拟机控制台启动MS-DOS 6.22

3. 在MS-DOS 6.22运行的时候,只要按下F9,就会停止虚拟机的运行。

4. 在windows下,如果不想运行在win32控制台中,可以在start之前输入mode命令来切换。这样,在虚拟机运行时,控制台窗口也同时存在,接受用户命令。


更多的使用方法请参阅《设计文档》。


【下载】

GITHUB: http://github.com/cshaxu/nxvm/

源代码、磁盘镜像和设计文档:http://sdrv.ms/17XmGWa

你可能感兴趣的:(虚拟机,源代码,文档,设计,MS-DOS)