联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
[此贴子已经被作者于2003-10-3 22:11:13编辑过]
以下是引用Wengier在2003-10-3 21:41:09的发言: GRUB当然并不使用DOS中断,而且也并不提供DOS中断。GRUB for DOS所做的,仅是提供一个DOS下的运行入口,然后恢复一些DOS驱动/TSR程序所做的改动,然后调用原有的GRUB 0.93的主体部分,使之在真实的非DOS环境下运行。 但是,BCDL则正好相反。BCDL本身的运行环境跟GRUB 0.93中的stage2相同,都是不使用DOS中断的,所以可以用GRUB通过chainloader来直接加载。但是,跟GRUB不同的是,据我研究,BCDL其中的一部分本身就是一个DOS中断提供程序(相当于IO.SYS+MSDOS.SYS的一个子集),所以当它运行后它可以用来直接调用DOS程序了。具体来说,BCDL就是通过以下流程来从CD-ROM/RW光盘启动的: 1:开始加载BCDL.BIN,提供DOS中断(即类似IO.SYS+MSDOS.SYS的子集); 2:自动运行作用相当于“DEVICE=VIDE-CDD.SYS”的命令; 3:运行VIDE-CDD.SYS这个SYS格式的纯DOS驱动程序; 4:BCDL.BIN通过上面这个DOS方式的SYS文件提供的与MSCDEX兼容的光驱接口来真正调入光驱并从光驱启动。 由此可见,BCDL.BIN是通过调用一个SYS格式的纯DOS下的光驱驱动程序来实现对光驱的加载的。这个SYS格式的文件可以是任何未压缩的DOS驱动程序,比如如果换成SCSICD.SYS,就可以从SCSI光驱启动。甚至可以换成其它非光驱的SYS文件,例如RAMDRIVE.SYS、UMBPCI.SYS、DRFAT32.SYS等。当然,虽然它们都是可以用BCDL加载的,不过由于它们不是DOS光驱驱动程序,所以BCDL无法通过它们从光驱启动。 和其它的纯DOS光驱驱动程序(如上面所提到的VIDE-CDD.SYS等)一样,SHSUCDHD.EXE正是一个真正的与MSCDEX兼容的纯DOS光驱驱动程序,只需修改成为一个SYS格式的DOS光驱驱动程序(即可用DEVICE=SHSUCDHD.SYS方式来加载的DOS光驱驱动程序),那么BCDL进行到第4步时就可以从ISO文件来启动了。 现在SHSUCDHD的源代码上面已有,所以不妨试试,将SHSUCDHD.EXE修改成一个SYS格式的DOS光驱驱动程序,如何?说明:SHSUCDHD可以用MASM 6.0编译。MASM 6.0可以在这儿下载: http://www.bbs.motion-bg.com/dl.php?file=388
[此贴子已经被Wengier于2003-10-3 23:18:43编辑过]
以下是引用Roy的发言: 可是.....重點在於shsucdhd.exe是需要himem.sys的......
[此贴子已经被作者于2003-10-3 23:20:48编辑过]
以下是引用Wengier在2003-10-3 23:17:39的发言:以下是引用Roy的发言: 可是.....重點在於shsucdhd.exe是需要himem.sys的...... 其实,可以在SHSUCDHD的ASM源代码的基础上,修改成一个独立的(不需要HIMEM.SYS等)纯DOS的SYS格式的虚拟光驱驱动程序,只要它仍与MSCDEX接口兼容,那么BCDL就是可以加载它并用它来启动的。这样,从ISO文件直接启动就成功了。 [此贴子已经被作者于2003-10-3 23:20:48编辑过]
以下是Roy的发言: “可是.....重點在於shsucdhd.exe是需要himem.sys的......” 以下是不点的发言: “SHSUCDHD启用扩展内存,说明问题比较复杂。我已经失去信心了。剥离它是可能的,但要花费力气的。目前缺乏的是时间。”
[此贴子已经被作者于2003-10-4 20:48:55编辑过]
以下是引用Wengier在2003-10-4 20:46:15的发言: 我刚才自己试了一下,发现SHSUCDHD.EXE并不需要HIMEM.SYS或其它XMS扩展内存驱动程序,而是本来就是可以独立使用的。所以Roy上面说的“shsucdhd.exe是需要himem.sys的”是不正确的。因此根本不需要剥离或改写。
以下是引用cn_archer在2003-10-4 22:55:14的发言: Roy最近在学日语啊!还是从小看日本动漫学来的?
以下是引用不点在2003-10-4 17:02:50的发言: 刚才说过,类DOS环境污染了BIOS。具体说来,类DOS环境使用了诸如int2f这样的中断,而真实的BIOS是不用这些中断的。这里就存在着隐患了。当CDROM上引导的操作系统不覆盖掉int2f的中断向量表的时候,这样可能还不要紧,但是,当CDROM上运行的某个程序修改int2f时,这就惨了,系统就要崩溃。虽然出现问题的可能性不算太大,但,确实有可能出现。只要有可能出现隐含问题,就不是一个可取的好方法。
[此贴子已经被作者于2003-10-5 3:56:51编辑过]
据我观察,这种担心似乎是不必要的,因为以下两点: 1:BCDL之所以使用DOS的MSCDEX兼容标准,只是因为它用一个DOS光驱驱动程序来走捷径,既避免了自己写光驱驱动程序,又可以适应更多的光驱(因为那个DOS光驱驱动程序是可以更换的);但这并非说BCDL就是进行MSCDEX的操作,而是只是利用与MSCDEX兼容的各种DOS光驱驱动程序来先驱动光驱这一捷径,然后使用自己的代码(类BIOS虚拟法,而并非MSCDEX法)来完成相应的光驱的引导,而并不会提供或使用新的中断; 2:BCDL在进行第4步(即最后一步)时,当真正实现启动光驱前,会恢复和重置所有DOS中断(包括那个先加载的DOS光驱驱动程序),所以可以说不会对已成功启动的光盘上的程序的运行造成任何影响。这是我长期测试和使用后的一些发现。 综上所述,再加上SHSUCDHD.EXE本身就是可以独立使用的(而不需HIMEM.SYS等),所以如果将它转换为SYS的话,那应该能直接被BCDL加载吧。。