中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-24 18:33
中国DOS联盟论坛 » GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 发现了Grub for Dos 的一个很奇怪的问题! 查看 1,239 回复 3
楼 主 发现了Grub for Dos 的一个很奇怪的问题! 发表于 2005-09-29 10:46 ·  中国 广东 广州 中移铁通
中级用户
积分 214
发帖 34
注册 2004-03-10 00:00
22年会员
UID 19742
性别 男
状态 离线
测试的是 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。
2 发表于 2005-09-29 13:03 ·  中国 广东 广州 中移铁通
中级用户
积分 214
发帖 34
注册 2004-03-10 00:00
22年会员
UID 19742
性别 男
状态 离线
关于40:75=8,是INT13,AH=8处理程序中设置的值,但是映射出多个硬盘的问题,仍然不知其解。而且,这问题似乎和BIOS有关。在我测试过的三部机器中,有1部正常,而其他2部出问题。
3 发表于 2005-09-29 17:34 ·  中国 广东 广州 中移铁通
中级用户
积分 214
发帖 34
注册 2004-03-10 00:00
22年会员
UID 19742
性别 男
状态 离线
终于弄清楚了,这个问题主要由于某些(比较旧)的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选项实际上便没有起到作用。
4 发表于 2005-09-29 21:28 ·  中国 河南 南阳 联通
初级用户
★★
积分 137
发帖 57
注册 2005-09-29 21:23
20年会员
UID 42974
状态 离线
呵,竟然出现这样的事情。我会检查 map 的 int13/ah=8 程序,将其返回值改为正确的值。
论坛跳转: