发一款自己花了5个月时间编写的80x86虚拟机 NXVM。
这个虚拟机是用C编写的,一共37,000行代码,
它完整的模拟了一台PC,包括一个80386 CPU,以及所有必要的设备,
因此它可以运行一个基于x86的操作系统,如MS-DOS6.22,并支持32位寻址。
这个虚拟机还额外附加了16位调试器(用法和DOS的debug.exe一样)和32位调试器,以及一个汇编器和反汇编器,可以调试操作系统。
NXVM虚拟机可以同时在Windows和Linux下通过编译。在Windows下,它可以运行在命令提示符窗口中(将Win32控制台作为虚拟机显示器和键盘),也可以创建自己的窗口(模拟DOS下的点阵字体)。在Linux下,它能在80x25尺寸的终端窗口中正常运行。
写这个虚拟机的过程中也参考过easyVM和LightMachine,发现和修正了它们的一些bug,并用Bochs的CPU来跟踪对比调试我的虚拟80386。
我还写了一份文档,详细描述了使用方法并做了源代码分析,感兴趣的人可以直接理解相关逻辑。
【下载】
源代码和简介在GITHUB:
http://github.com/cshaxu/nxvm/磁盘镜像和设计文档:
http://sdrv.ms/17XmGWa【编译】
1. 在Linux下编译:安装ncurses,解压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即可.
【截图】
在64位Windows的命令提示符窗口中运行DOS:
在Linux终端里跑MS-DOS:
DOS运行在HMA:
TT打字程序:
俄罗斯方块:
Windows窗口模式下的点阵字体模拟: