Chinaunix

标题: 发布一款前段时间写的虚拟机(LightMachine),可以运行DOS [打印本页]

作者: eggqq007    时间: 2010-08-22 21:31
标题: 发布一款前段时间写的虚拟机(LightMachine),可以运行DOS
这是一款80x86 16位虚拟机。。。。附件里面有可执行程序,文档,源代码(包含VS2010工程文件)
   
   虚拟机取名为LightMachine,意思为轻量级的虚拟机~~~~~~~~

     里面包含的DOS影响为easyVM中附带的DOS映像文件。。。也使用了easyVM的部分BIOS映像



   支持开源,共同进步~~~如有好的建议或意见,欢迎发送邮件给我,也可以站内信息哦~~



虚拟机-Sherlock.rar (3.09 MB, 下载次数: 14685)
作者: eggqq007    时间: 2010-08-22 21:33
忘了说了。。。

其中的KBInterface,Screen,GUI,lightMachine_win32 这几个类是平台相关的,希望高手可以帮修改修改,使得可以在Linux运行~~~~~
作者: erlangsir    时间: 2010-08-22 22:31
做得不错啊,敢问楼猪,你今年多大啊,还在上学还是工作了?
作者: eggqq007    时间: 2010-08-22 22:58
终于有人回复了
22了。。。毕业了。。。还要读研。。。。。
作者: 一路征程一路笑    时间: 2010-08-22 23:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: eggqq007    时间: 2010-08-22 23:17
虚拟机除了平台相关部分。。底层逻辑都是用标准C++编写的。。。可以移植到很多平台。。

但是有点悲剧的是由于时间不足和设计上的缺陷。。现只能运行在Intel那种小端CPU。。。
作者: smalloc    时间: 2010-08-22 23:18
官方称为模拟器
我大四的时候也准备弄一个相同的东西.后来因为外设知识匮乏放弃了
作者: eggqq007    时间: 2010-08-22 23:25
对于外设我也很纠结。。。基本没找到什么有用资料。。最后只好根据BIOS来模拟中断了。。。
即使这样。。也相当麻烦。。
作者: erlangsir    时间: 2010-08-22 23:26
楼主,你还很年轻,希望你读研期间,继续挑战自己,练就一身过硬的技术,高薪、美女就在不远的将来等着你了了,努力吧,小伙子!
作者: eggqq007    时间: 2010-08-22 23:29
。。。。会继续努力。。谢谢鼓励
已经找到下一个项目目标。。。mapreduce。。。。希望有机会能到baidu。。google看看~~
作者: smalloc    时间: 2010-08-22 23:34
回复 2# eggqq007


    根据BIOS模拟中断是什么意思?
在你的虚拟机环境中能否再执行另一个程序DOS程序?假设这个程序使用了定时器外设
作者: erlangsir    时间: 2010-08-22 23:37
希望有机会能到baidu。。google看看

和同龄人相比,我觉得你现在已经很优秀了(不要骄傲啊,肯定有机会去那的,希望你成功。

再多问一句,楼主哪个大学的?在哪里读研啊?
作者: eggqq007    时间: 2010-08-23 00:00
不太明白11楼的意思。。。。

操作硬件最底层的方法就是IN和OUT指令,通过IN和OUT指令来控制硬件的的各种寄存器。(BIOS中断其实也是通过IN和OUT指令来操作硬件的)。但是这方面硬件资料太少,很难弄。。
我的做法就是BIOS中断由虚拟机自己实现。。而不是由BIOS实现
比如10号的显示中断,是用C++来实现。。而不是通过真实的BIOS里面的IN ,OUT指令来实现
作者: eggqq007    时间: 2010-08-23 00:03
准备去中大读研。。。
作者: eggqq007    时间: 2010-08-23 00:18
楼主,你还很年轻,希望你读研期间,继续挑战自己,练就一身过硬的技术,高薪、美女就在不远的将来等着你了 ...
erlangsir 发表于 2010-08-22 23:26



    为了考研。。exGF分手了也没挽留。。。也算得上漂亮了
   
  想清楚了很多,美不美女无所谓,长得一般就可以了。。。关键善良,还有就是我喜欢她,她也喜欢我。。。
作者: smalloc    时间: 2010-08-23 00:26
回复 15# eggqq007


    考个研就分手.这算哪门GF?只是找借口吧
作者: eggqq007    时间: 2010-08-23 00:43
不扯那SB往事了~~~
向前看~~~MM会有的~~
作者: EricFisher    时间: 2010-08-23 08:56
支持一下
作者: jig    时间: 2010-08-23 09:34
我也写过一个虚拟机,但不模拟任何平台,是我自己设计的一款独特的硬件。其实只是一个有8个寄存器,32位的CPU,和显示器,键盘等

但做他的目的,其实因为我做了一款C语言编译器。有时间整理好了,发上来大家交流一下。
作者: eggqq007    时间: 2010-08-23 10:05
我也写过一个虚拟机,但不模拟任何平台,是我自己设计的一款独特的硬件。其实只是一个有8个寄存器,32位的C ...
jig 发表于 2010-08-23 09:34



    嗯~~自己设计也好,不用关注标准。。。以前也想这样做,但是想想所有软件。。。包括编译器,操作系统等所有软件都得自己写,觉得太可怕了~~~。所以后来还是决定做成流行的80x86虚拟机,毕竟其上的软件丰富,也很成熟~~
作者: bzhao    时间: 2010-08-23 11:30
支持楼主,支持!
如果你把它开源了,就更加牛了!
作者: notedit    时间: 2010-08-23 11:37
唉  牛逼的人啊
作者: notedit    时间: 2010-08-23 11:37
自己还不到22   我要快马追赶了
作者: eggqq007    时间: 2010-08-23 12:05
回复 21# bzhao


    是开源啊~~附件里面有源代码。。不仅如此还有各种文档呢。。
作者: chinaandcompute    时间: 2010-08-23 12:24
强,顶,
作者: joeguan2    时间: 2010-08-23 19:44
好贴要顶
作者: peidright    时间: 2010-08-23 21:35
{:3_181:},比楼主差远了。。
作者: 倒数第二位    时间: 2010-08-23 21:50
差得远了  学习
顶起来
作者: china__unix    时间: 2010-08-23 21:57
本帖最后由 china__unix 于 2010-08-23 22:00 编辑

LZ 能否详细说一下,VirtualBios_0xf0000.bin 和 VirtualBios_INT.bin,

这两个文件的详细信息:

1) 所对应的 数据内容 和 格式 。
2) 以及 这两个文件是如何生成的?

谢谢!
作者: eggqq007    时间: 2010-08-23 22:18
哦。。是这样的。。
因为我的虚拟机使用easyVM作为验证机,便于测试,会检测执行每条语句后CPU各寄存器情况。。。为了更好的测试,就是用了一部分easyVM的BIOS映像。。。属于系统遗留问题,以后有时间的话会除去这两个文件。
     因为这个虚拟机还在测试版,为了方便测试,所以现在还保留这两个文件。。。。

所以没必要纠结着两个文件。。。其存在只是因为我的虚拟机还不完善,还要继续测试。。呵呵

    不过以后可能很少会更新了。。毕竟时间有限,得去弄其他的项目。。不好意思

    发布源代码和文档时为了让大家了解虚拟机构造流程,如何去做自己的虚拟机,降低学习难度~~~嘿嘿
作者: eggqq007    时间: 2010-08-23 22:26
能得到大家的鼓励我很开心

大家有什么相关问题都可以问。。

我深知一个人在黑暗中摸索建造虚拟机的艰辛。。。我会尽量帮助大家,避免大家走弯路~~
作者: erlangsir    时间: 2010-08-23 22:44
问题:
在LightMachine中试用了下edit和qbasic,发现一个问题,使用“ALT-F、X”快捷键退出edit/qbasic时,LightMachine也退出了,原以为是LightMachine的bug造成了程序崩溃。后来发现是快捷键冲突引起的,LightMachine是一个Windows GUI程序,它的菜单中包含菜单项“文件(F)、退出(X)",正好和edit/qbasic程序相同。

建议:
最简单的方法是修改下LightMachine退出功能的快捷键,使用一个不太常用的快捷键。
作者: eggqq007    时间: 2010-08-23 22:47
本帖最后由 eggqq007 于 2011-04-14 17:24 编辑

嘿嘿。。不好意思哈。。。
其实我也想改。。。但是win32就用了几天。。不太熟,不太懂改快捷键~~
就麻烦兄弟你了~~
以后会抓紧这方面的学习的
作者: erlangsir    时间: 2010-08-23 22:51
我觉得调试是虚拟机开发中比较困难、很耗时间的工作,不知道楼主你是怎样调试虚拟机的,能说一个留给你印象最深刻的BUG是如何解决的吗,
作者: eggqq007    时间: 2010-08-23 22:59
好像我文档里面有说呢。。。

我使用easyVM和bochs作为验证机。。修改它们的源代码,它们每执行一条语句我就记录下来修改了那些东东,保持成日志文件。LightMachine也一样,也会生成同样的日志文件,然后再写一个程序来看两个日志不同的地方。

以此来知道哪条指令出错。当然,这个都建立在假设easyVM和bochs的正确性上。但有时候也发现easyVM有些错误,同时也要修改easyVM。

所以,大部分的工作都是极度枯燥乏味。。不停地检查日志,翻阅资料,使用bochs调试模式来查看执行语句。。。。调试bug。。。

没有最深刻的bug。。。每个bug都是小错误,但是一个小小的错误就能让你调试几个小时,可以说,虚拟机的bug是很难排查的。。。
作者: china__unix    时间: 2010-08-23 23:07
本帖最后由 china__unix 于 2010-08-23 23:09 编辑
哦。。是这样的。。
因为我的虚拟机使用easyVM作为验证机,便于测试,会检测执行每条语句后CPU各寄存器情况 ...
eggqq007 发表于 2010-08-23 22:18


是不是使用 easyVM的无所谓,不是在追究版权问题,呵呵。

我对这部分不了解,所以想详细向你问一下 ,所以请你还是详细讲解一下。

1) VirtualBios_0xf0000.bin 和 VirtualBios_INT.bin 详细 内容 及 格式

2) 你说你用的是easyVM的BIOS文件,但是easyVM的BIOS文件(BIOS.bin 和 BiosData.bin)和你的BIOS文件不同啊,
     一个比你的大很多,一个比你的小很多,所以我很奇怪你是怎么抽取的呢?能否详细说一下。
作者: erlangsir    时间: 2010-08-23 23:14
刚刚才注意到你发布的文件中有一份文档提到了艰苦的调试过程,不错,楼主在最后关头没有放弃、终有斩获,”苦心人,天不负“,经历此番磨难,想必楼主对这句话会有自己的体会。
作者: eggqq007    时间: 2010-08-23 23:15
本帖最后由 eggqq007 于 2010-08-23 23:23 编辑

是不同啊。。。。

我是把easyVM执行到0x7c00的时候把内存的最前1024字节部分保持成VirtualBios_INT.bin,把0xf0000地址后面的1024字节保持成 VirtualBios_0xf0000.bin。。。因为我只需要这两部分的数据帮我建立和easyVM一样的测试初始环境,才能保证生产日志的一致性~~~
    好玩吧~~
作者: jig    时间: 2010-08-24 08:31
回复 20# eggqq007


    我倒不是主要针对虚拟机,而是开发了一款C语言的编译器,由于是学习目的,直接将目标代码定为X86平台太复杂了,所以自己造了个“硬件平台”。重在可灵活更改

成熟了以后,我还是希望自己能设计一款实用的汉语语言,但现在还只是设想。如果以后能做出来,就发出来大家一起玩玩
作者: jig    时间: 2010-08-24 08:33
嗯~~自己设计也好,不用关注标准。。。以前也想这样做,但是想想所有软件。。。包括编译器,操作 ...
eggqq007 发表于 2010-08-23 10:05



      我倒不是主要针对虚拟机,而是开发了一款C语言的编译器,由于是学习目的,直接将目标代码定为X86平台太复杂了,所以自己造了个“硬件平台”。重在可灵活更改

成熟了以后,我还是希望自己能设计一款实用的汉语语言,但现在还只是设想。如果以后能做出来,就发出来大家一起玩玩
作者: koolcoy    时间: 2010-08-24 12:24
不太明白11楼的意思。。。。

操作硬件最底层的方法就是IN和OUT指令,通过IN和OUT指令来控制硬件的的各种 ...
eggqq007 发表于 2010-08-23 00:00


有开源的BIOS实现,你可以弄一个集成进去{:3_190:}
作者: eggqq007    时间: 2010-08-24 12:41
呵呵。。谢谢LS。。。但是不可以。。因为我在虚拟硬件的时候不是真的虚拟,而是参考BIOS中断来虚拟,所以指令IN,OUT对我的虚拟硬件无效,当然也用不了开源的BIOS了~~~

如果我以后有时间,弄到真正详细的硬件资料,或许能全模拟硬件,再弄弄CPU,就可以运行windows之类的了。。。但是 现在没太多时间弄这个了。。。

  抛砖引玉,留给后人参考和学习吧~~~
作者: renenglish    时间: 2010-08-24 12:56
真受不了你,我也22,咋差距就这么大呢!
作者: marxn    时间: 2010-08-24 16:37
你这个叫软件仿真器,而不是虚拟机。
作者: eggqq007    时间: 2010-08-24 17:25
http://jpc.sourceforge.net/home_emulation.html

这里有仿真器(emulator)和虚拟机的区别。。。。
从功能上来说,仿真器的仿真能力更加强大。。。。。。。。。。

    但是在使用上感觉上不会有什么区别。。。
作者: rick.zhao    时间: 2010-08-25 00:27
一定要支持一下
作者: master_wupeng    时间: 2010-08-25 12:04
学习了,谢谢分享,感谢。
作者: superwushu    时间: 2010-08-25 14:00
哦,原来是模拟BIOS中断的。那一些应用程序,比如CCDOS、UCDOS、还有一些DOS游戏等使用直接写屏的就不能运行了吧?其实Dosbox可能更合适些。

不管怎样,22岁能写出这个真的很优秀了。祝学习进步。
作者: eggqq007    时间: 2010-08-25 14:14
直接写屏也可以,虚拟机会读取那部分内存来刷新屏幕的,但是现在只开发了字符显示模式。。。

从最底层说。。。由于硬件虚拟的不完整性,IN和OUT语句基本无效~~~
作者: dooros    时间: 2010-08-25 15:44
不错啊。
作者: yujixi123    时间: 2010-08-25 16:13
人与人的差距咋就这么大呢   牛人
作者: will.ni    时间: 2010-08-25 17:54
下载了。看了《写在最后》,实在佩服~~~~
作者: system888net    时间: 2010-08-25 21:29
这是一款80x86 16位虚拟机。。。。附件里面有可执行程序,文档,源代码(包含VS2010工程文件)
   
   虚 ...
eggqq007 发表于 2010-08-22 21:31



    好,不错.
   lz 牛人.
作者: riribi    时间: 2010-08-25 22:40
大牛来了啊 上次在别的论坛有人发了类似的虚拟机 也是虚拟的dos
作者: riribi    时间: 2010-08-25 22:41
原来是你  很久以前在看雪就发过这个东西了
作者: eggqq007    时间: 2010-08-25 22:45
sorry ....那不是我。。那是另外一位前辈~~~~
很想谢谢那位前辈,如果没有他的虚拟机easyVM,我的调试不可能那么快完成。。。
作者: eggqq007    时间: 2010-08-25 23:40
。。。厄。。。。谢谢大家鼓励,我真不是牛人。。。。只是一个普通的本科毕业生,只是爱弄些别人不怎么碰的东西。。

     鼓励大家多创新,把知识分享给彼此才是我的最终目的~~~~
作者: peterorguang    时间: 2010-08-26 09:32
感慨!
我们重来就不缺有才气、有毅力的青年。
缺少的只是有理想的教授与学者。
作者: sep    时间: 2010-08-26 10:59
lz快成为我的校友了,加油
另:选导师时要谨慎,否则到他们公司打3年白工,而且毫无技术含量。这些信息就靠你个人收拾了,我不好说话
作者: eggqq007    时间: 2010-08-26 11:22
lz快成为我的校友了,加油
另:选导师时要谨慎,否则到他们公司打3年白工,而且毫无技术含量。这些信息就靠 ...
sep 发表于 2010-08-26 10:59



握握手先~~~

已经和导师联系过了,是一个学姐强烈推荐的~~~~呵呵
作者: CU_Solaris    时间: 2010-08-26 16:25
楼主应该继续研究下去

让我顺便膜拜一下
作者: goldenfort    时间: 2010-08-26 18:11
回复 1# eggqq007


    江山代有才人出
作者: accessory    时间: 2010-08-27 03:12
good. spt.
作者: zhangfdell008    时间: 2010-08-27 08:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: _LoveLinux    时间: 2010-08-27 12:39
都是牛人啊~
作者: chnrlp    时间: 2010-08-27 17:16
同龄人路过
作者: ljbcool    时间: 2010-08-27 19:33
很不错哦 谢谢分享呀。
作者: eggqq007    时间: 2010-08-28 09:03
楼主应该继续研究下去

让我顺便膜拜一下
CU_Solaris 发表于 2010-08-26 16:25



     呵呵,。。主要是没找到合作的人。。单打独斗的时代已经过去,凭我个人很难把这个东西弄成有竞争力的软件。。。。

     毕竟我以后也要面对就业,得把精力放到其他的一些地方,做些迎合市场的东西。
作者: sullybear    时间: 2010-08-28 11:43
好,顶楼主
作者: beyondfly    时间: 2010-08-28 20:44
LZ牛人啊
作者: 赵大少爷    时间: 2010-08-30 11:29
看不懂
楼主大牛
我等汗颜
作者: 为什么删我号    时间: 2010-08-30 17:23
看不懂啊
作者: robinh00d    时间: 2010-08-30 18:00
楼主在模拟实现BIOS中断的时候 因为看到楼主的BIOS中断实现并不完全,想问一下实现哪些是怎么选择的?
作者: eggqq007    时间: 2010-08-30 18:18
楼主在模拟实现BIOS中断的时候 因为看到楼主的BIOS中断实现并不完全,想问一下实现哪些是怎么选择的?
robinh00d 发表于 2010-08-30 18:00



    这个好解决,因为其初步目的是想运行DOS,在运行DOS的时候可以检测DOS到底调用了哪些中断,都实现出来就行了。。。当然,为了更强大的功能和兼容更多系统,你也可以全部实现,就是多花点时间。。。。。{:3_190:}
作者: bbgg1983    时间: 2010-08-31 17:58
这么虚幻,楼主好好干
作者: eggqq007    时间: 2010-09-02 11:52
虚拟机没大家想象的那么虚幻。。。。那么复杂的。。。{:3_183:}
作者: qqliangqi    时间: 2010-09-19 18:23
佩服楼主,想加你QQ
我的412551756
作者: eggqq007    时间: 2010-09-23 16:31
找到中大一老师,他说让VWWARE的工程师联系我。。。。但是现在还没联系。。。。纠结~~~~
作者: xoook    时间: 2010-10-05 16:33
那么复杂,汗
作者: Tinnal    时间: 2010-10-05 18:19
好!真希望中国的大学生,多做点书本外的研究。感谢楼主。
作者: chenxiaopang    时间: 2010-10-12 21:01
和VBox, QEMU比较下
作者: robin10    时间: 2010-10-13 00:56
牛!
佩服!
加油~
作者: chinawrj    时间: 2010-10-13 10:59
都是高手啊~我是来学些
作者: rickylee10    时间: 2010-10-13 11:20
下了, 还没详细看, 顶下lz

既然开源了,lz是不是该指定licence协议
作者: rickylee10    时间: 2010-10-13 11:46
还有lz去中大读研? 打算跟哪个老师?
作者: eggqq007    时间: 2010-10-13 12:59
等待VMWare工程师MSN号中。。。。。。{:3_183:}
作者: 蔡万钊    时间: 2010-10-14 01:53
What the fuck ????????

OMG !!!!

搂猪居然写了个虚拟机?!!!!!!

膜拜中 !!!!!!!

看看,试试看能不能改成 gtk 作为 GUI
作者: cf630314    时间: 2010-10-15 13:06
强大。。。膜拜楼主。。。。
作者: billypeng    时间: 2010-10-18 21:34
我以前做了一个虚拟机。把8086指令一条一条地分析。但虚拟机里面不能执行操作系统,只能执行应用程序。

PCTOOLS和TURBO PASCAL都能够执行。因为我的目的是反病毒,用虚拟机执行程序时,可以控制让任何一个位置停下来。

后来发现386以上的机器太难虚拟了,改为直接控制单步中断让它在任何指令下停下来。
作者: efengyu    时间: 2010-10-19 12:22
研究生在努力几年,楼主前途无量啊
作者: xoook    时间: 2010-10-19 16:57
学习
作者: evil-kevin    时间: 2010-10-20 16:21
高手 高手 啊  佩服{:3_179:}
作者: pengjianbokobe    时间: 2010-10-22 09:13
汗颜哪  
作者: lj870128    时间: 2010-10-26 21:33
牛啊!强顶一下~~~
作者: eggqq007    时间: 2010-10-26 23:50
积分好少。。。回帖换积分~~~~~~~~~~~
作者: ngcode    时间: 2010-10-27 10:58
建议楼主建一个开源项目,让大家都参与进来。
作者: 疯狂的距离    时间: 2010-10-27 21:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: xoook    时间: 2010-10-28 08:46
建议楼主建一个开源项目,让大家都参与进来
作者: xoook    时间: 2010-10-28 08:47
试用了,确实不错啊
作者: xoook    时间: 2010-10-28 08:48
LZ牛人一个




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2