845G我倒是没什么印象,但是我记得在我的865G电脑上确实存在这个问题。第一次拿到,进PE,那个色深把我吓到了。对于这个问题我当时是没研究过,我现在手头也没有845/865的电脑,我也不是从业人员,只能作下简单的猜测。
首先的话,最初的PC中(CGA),操作系统或者软件需要调节分辨率(显示模式)是要通过BIOS中断进行设置的,也就是INT 10h。这个方法一直从CGA沿用到了VGA,随后就没有新的标准出现,所以如果使用BIOS中断来设置分辨率,所能达到的最大分辨率和色深就只有6404804bit。
那么更高的分辨率怎么达到呢?一方面是靠显卡驱动来接管,另一方面,其实存在后续的标准,也就是VBE。VBE是通过VBIOS实现的。VBIOS在启动时会被作为BIOS扩展映射,成为BIOS一部分。这样操作系统就可以通过传统的BIOS中断方法来访问VBE功能。需要注意的是,虽然VBE定义了一系列加速功能,但是VBE几乎没有被用来编写过显卡驱动,因为效率问题大家都使用自有协议。扯远了,VBE 1.0规范的目的就是增加更多的显示模式,比如640480256。但是到了VBE 2.0开始,这种把显示模式写进规范的事情就被废除了。取而代之的是VBE Function 00h,操作系统直接从显卡获得所有支持的显示模式列表,随后找到需要的模式设定过去就好。(不然如果每种新模式都要写进规范的话,不知道VBE现在版本号都飙到多少了2333)顺便,VBE 1.0要求在实模式下运行,如果要在保护模式下使用就必须先切换回实模式,用完再切换回来。VBE 2.0则加入了Protected Mode Banking,允许直接在保护模式下访问VBE的功能(不完全准确,大概是这样)。
所以说回答问题的话,我认为部分845G/865G的VBIOS(这个锅很有可能得让Intel来背)不能够支持VBE2.0或者支持存在bug,以至于Windows XP/Server 2003下只能使用到INT 10h定义的模式。(VBE1.0是仅实模式的,估计Windows XP这种纯保护模式的系统应该是会直接无视VBE1.0)至于Vista/Win7,出现比845G/865G要晚,自然可以在基本显示驱动里加入对845G/865G的特殊照顾。以上。