[转贴] 关于 cdrom 标准,太神奇了。。

不同视角、不同观点、深度探讨,禁止人品和道德攻击
回复
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

[转贴] 关于 cdrom 标准,太神奇了。。

#1

帖子 ptptptptptpt » 2008-09-17 15:34

cdrom 本来应该像磁盘那样,出来一个 BIOS int13 标准,这样,实模式的程序就无需访问 cdrom 硬件,而是通过 int13 这个软件中断来访问 cdrom 的扇区。可惜,由于微软参与了可引导的 cdrom 软件规范的制定,就使得这样一个标准成了一个事实上的伤残标准,整个世界都被微软玩弄了。如果有了 int13 接口标准,那么微软的 DOS 里面的那一大堆 cdrom 驱动就可以不要了,或者可以用一个统一的、很小的驱动来代替。微软参与制定的这个光盘启动标准,它的毛病非常多,比如,这个标准非常复杂,一直到现在,还没有见到哪台机器完整实现了这个标准。因为这个标准有很多功能要求是不必要的,所以,这些功能并未得到厂商的广泛支持。就是说,这个标准有很大的不合理性,说严重点,其中有一些东西可以说是垃圾。而真正关键的,用 int13 这个接口来访问光盘扇区,却未能写入标准之中。可以想象,如果标准中有这个的话,厂商们早都采用并成为事实工业标准了。大家还注意到,用 no-emu 模式启动的光盘,是有 int13 接口的。这就是为什么今天的 no-emu 格式大行其道的原因。以 no-emu 模式启动时有 int13 接口,而以 软盘仿真模式启动时,却没有 cdrom 的 int13 接口,大家至少应该对此有所怀疑吧?为什么这样?有什么理由是这样的?为什么会出现这样奇怪的现象?最后总能想到:原来微软的 DOS 更重要啊,如果离开了它的 DOS 人们也能访问光盘扇区,那么微软的重要性就可能大大降低了,微软当然不会这么做。所以,由微软制定的标准,一定得是一个畸形的标准才符合微软的利益,同时也最大限度地打击大众的利益(最近微软又祭出一个 ooxml,不过这次它要失望了,人们已经不再信任微软了)。

既然历史就是这样的,那我们也只好接受这个现实了。不管是什么光驱,只要有了 int13 标准,我们都是可以访问光盘的。而 no-emu 模式的光盘,就恰好有 int13 标准。grub4dos 对那些具有 int13 标准的光盘是支持的。建议所有的厂家都要给实模式的操作系统和应用程序提供 int13 的光盘接口。重要的是,即便机器并非从光驱启动,BIOS 生产者也应该提供光盘的 int13 接口(就是 no-emu 模式的)。也就是说,无论在任何情况下,都要提供光盘的 int13 接口,这个接口应该是“常驻”接口,它永远存在、无条件存在。qemu 这个虚拟机就是这么做的,大家可以试验一下 qemu 下的 grub4dos:无论qemu 的启动设备是否是它的光驱,在进入 grub4dos 后都能访问它的光盘设备。如此一来,我们就永远也不需要光驱的驱动了。

我注意到有些机器已经是差不多这么做的了。我见到的一台 dell 机器,就做的不错,虽然它还不彻底。这台 dell 机器从 win98 的光盘启动后,如果你没有按键,则自动从硬盘启动。此时进入 grub 就可以发现光盘的 BIOS 接口。注意,win98 的安装盘并非是 no-emu 模式的,而是软盘仿真模式的。然而遗憾的是,当从 win98 的光盘启动进入DOS 时,却没有光盘的 int13 接口了。所以,dell 做的并不彻底。

在另外一个厂家的机器上,出现了更为奇妙的一幕。用 win98 的安装盘启动,进入 DOS 后再用 grub.exe 进入 grub4dos 的环境。此时,它的 00 号磁盘(也就是软盘),具有双重身份!如果用 CHS 模式去读它(DL=0),它的内容是1.44M软盘的内容。如果用 LBA 的模式去读它(DL=0),则它的内容是整个光盘!而且是实实在在的、具有2048字节大扇区的光盘!最新版的 grub4dos 已经对此有了完美的支持了。如果你在 grub 下用

geometry (fd0)

显示出的不是 CHS 和 LBA 而是 BIF,那么这个 (fd0) 就是双重身份:一个身份是 CHS,一个身份是 LBA,两者是不一样的。这里的 BIF 是 bifid 或者 bifurcate 的意思,汉语意思就是“分叉”。

对于 BIF 的盘,你可以用两种方式去访问它。一种是 CHS,一种是 LBA。当你用 CHS 模式访问它时,你只需要像平常那样去访问这个盘便可。当你希望用 LBA 模式访问它时,你只需要用一个特殊的盘号便可。

就拿上面的例子来说,你可以尝试

geometry (fd0)



geometry (0x100)

注意,fd0 就等于 0,而 0x100 就是 256,而 0x100 的低字节仍然是 00,就是说它还是软盘的号码。而高字节等于 1,则说明用户希望这个盘是用 LBA 去访问的。这样一来,在上面的例子中,这个 (0x100) 盘的内容就是光盘了。它的几何参数中也能显示出其扇区大小是 2048 字节。
头像
hethe
帖子: 3666
注册时间: 2005-08-01 9:14

#2

帖子 hethe » 2008-09-17 15:49

萎软就是牛X 8)
Gedanken ohne Inhalt sind leer .Anschauungen ohne Begriffe sind blind.
回复