Board logo

标题: 发现了Grub for Dos 的一个很奇怪的问题! [打印本页]

作者: bean123     时间: 2005-9-29 10:46    标题: 发现了Grub for Dos 的一个很奇怪的问题!

测试的是 map 的 --mem 虚拟盘功能

menu.lst如下:

title memdisk
map --mem (hd0,0)/aa.dsk (hd0)
map --hook
chainloader (hd0,0)+1
rootnoverify (hd0)

起初是下QEMU下试的,看来很正常。但有一个很偶然的机会要查看硬盘的数目(40:75),发现竟然是8!

后来在真正的机器上测试,发现40:75的数目也是8,而且在第一只虚拟盘的后面,出现了7只和真正硬盘的一样的盘!

使用的grub4dos是 0.4.1pre28,系统是英文98第二版的MSDOS。
作者: bean123     时间: 2005-9-29 13:03
关于40:75=8,是INT13,AH=8处理程序中设置的值,但是映射出多个硬盘的问题,仍然不知其解。而且,这问题似乎和BIOS有关。在我测试过的三部机器中,有1部正常,而其他2部出问题。
作者: bean123     时间: 2005-9-29 17:34
终于弄清楚了,这个问题主要由于某些(比较旧)的BIOS处理INT13的Bug所引起的。

在我的机器上:

若只有一只硬盘,用 DL=80,81,82...都可以访问第一只硬盘。当然,INT 13 在处理前,会比较DL和[40:75]的数值。因此,要看到DL=81或以后的结果,应该手动把[40:75]设为一个较大的值。

若有两只硬盘,DL=80,82,83...都可以访问第一只硬盘,而DL=81则访问第二只硬盘!

顺便提一下,希望TinyBit能把[40:75]的值作为AH=8中DL的返回结果。这是由于MSDOS在启动时会查询AH=8中DL的结果,并根据它修改[40:75]的值。因此,假如说DL返回8,而[40:75]是1,则在MSDOS下[40:75]会改为8。这样,map的--harddrive选项实际上便没有起到作用。
作者: tinybit     时间: 2005-9-29 21:28
呵,竟然出现这样的事情。我会检查 map 的 int13/ah=8 程序,将其返回值改为正确的值。