x86虚拟机NXVM_自己编写的80x86虚拟机 NXVM

[简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案]

发一款自己写的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】

虚拟机状态

7bee0b49bc47dd1cf1d554f629d40025.png

启动MS-DOS 6.22

923a187dec94797df02e8cd352a961cc.png

MS-DOS运行在常规内存

5dc90761d26114bcec1902050467f44c.png

MS-DOS运行在HMA

41473b2179b4dca23aaa2cba2636d925.png

经典打字程序TT

46f07fd7f8aaef2c7a0dbd4794d1ecc5.png

8f53bde1555bf2065be7454ef88c4541.png

俄罗斯方块NYET

db8a998f30b5692400798d39f9317913.png[     Java语言    Java语言最早被称为Oak,它是为了实现嵌入式的消费类电子产品应用而产生的,它的作者是James Gosling。Ed Frank, Patrick Naughton, Jonathan Payne, Ch

1ce9db10cb3c31668ad45549353f1d30.png

Turbo C

672d1a6ec5d1c4549a36ae3adbdd07a9.png

QBASIC编程

005d732288e7c235a09cf7cfd1753945.png

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

14ce95bac44437ffcf713e5bce70edac.png

MSAV病毒扫描

491ddbec01036ec84570db26205d6648.png

磁盘碎片整理

56df02c831ac8b06cd3940a3be6a4936.png

在Win32窗口中运行:

2aQ7Vb.png

10fb51150e3464922e8f5ca052e961a1.png

dd20eaca166f41fbcb7f3d57c93b5a2a.png

在Linux终端中运行:

7aa6f43f1cb3b3c4928c8395dd117c8f.png

4cceca801722b6646d1cad733e46ac92.png

【编译】

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命令来切换。这样,在虚拟机运行时,控制台窗口也同时存在,接受用户命令。

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

【下载】

[本文主要介绍创建虚拟机的一般过程。一台虚拟机的核心就是一个磁盘镜像,这个镜像可以理解成虚拟机的磁盘,里面有虚拟机的操作系统和驱动等重要文件。创建虚拟机镜像 要在

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值