我正在编写图形采用者驱动程序。我知道VBE提供1024×768或800×600等分辨率。我的问题是如何在VESA BIOS中获得1366×768等宽屏分辨率?应该使用哪个BIOS功能?请给我 1366x786(或其他)的模式功能编号,例如 0117h 用于 1024x768 16 位颜色。我正在使用 x86 程序集和 VBE3。
2 回答
所有信息都在vesa.org的vbe3.pdf 中:“注意:从 VBE 2.0 版开始,VESA 将不再定义新的 VESA 模式编号,并且不再强制支持这些旧模式编号。”
但是一些较新的 PCIe 卡,如我的 Nvidia GTX 295(来自制造商 Colofull)和我的 Radeon 7950(Saphire)也让我使用它们的宽屏视频模式,但是模式编号不同,并且因 BIOS 和 Bios 和制造商而异。最后,我喜欢分享上面这两张卡的模式表。
第一步是调用函数 4F00h,用于在 512 字节的缓冲区中获取 VBE-Info。如果调用成功,则返回 AX 中的 4Fh。
下一步是检查地址缓冲区+5 处的 VBE BIOS 的主要版本号,如果值为 2 或 3 或 1。从 VBE 2 开始,我们必须从 VBE Bios 本身获取模式号。
下一步是从地址中获取模式表的指针:buffer+0Eh,使用这个指针我们可以获取模式编号。每个模式号都是 16 位的,模式表以 0FFFFh 结尾。
下一步是调用函数 4F01h 以在 256 字节的单独缓冲区中获取每个模式编号的模式特定信息,以找到我们想要使用的分辨率和每像素位数。
;-----
从 VBE 3 开始,可以使用我们自己的 CRTC 参数表来获得更高的刷新率,并切换到给定的分辨率和给定的纵横比,我们无法通过这种方式更改。我将它与具有 96khz 和 160hz 容量的 19" CRT-Monitor 一起使用,例如 1280x1024 和 85hz,或 1024x768 和 100hz,800x600 和 140hz,640x480 和 160hz 刷新率。但是我的 28" LCD 仅提供一种原始分辨率 1920x1200 60hz,但宽屏 16:10 宽高比。
-------------------------------------
VBE Modelist Saphire 7950
-------------------------------------
mode
number xres yres bpp LFB
0100 640x400x8 C0000000 VGA 4:3
0101 640x480x8 C0000000 VGA 4:3
0103 800x600x8 C0000000 SVGA 4:3
0105 1024x768x8 C0000000 XGA 4:3
0107 1280x1024x8 C0000000 SXGA 5:4
0110 640x480x16 C0000000 VGA 4:3
0111 640x480x16 C0000000 VGA 4:3
0113 800x600x16 C0000000 SVGA 4:3
0114 800x600x16 C0000000 SVGA 4:3
0116 1024x768x16 C0000000 XGA 4:3
0117 1024x768x16 C0000000 XGA 4:3
0119 1280x1024x16 C0000000 SXGA 5:4
011A 1280x1024x16 C0000000 SXGA 5:4
010D 320x200x16 C0000000 CGA 4:3
010E 320x200x16 C0000000 CGA 4:3
0120 320x200x32 C0000000 CGA 4:3
0193 320x240x8 C0000000 QVGA 4:3
0195 320x240x16 C0000000 QVGA 4:3
0196 320x240x32 C0000000 QVGA 4:3
01B3 512x384x8 C0000000 4:3
01B5 512x384x16 C0000000 4:3
01B6 512x384x32 C0000000 4:3
01C3 640x350x8 C0000000 EGA 4:3
01C5 640x350x16 C0000000 EGA 4:3
01C6 640x350x32 C0000000 EGA 4:3
0133 720x400x8 C0000000 WVGA 18:10
0135 720x400x16 C0000000 WVGA 18:10
0136 720x400x32 C0000000 WVGA 18:10
0153 1152x864x8 C0000000 XGA 4:3
0155 1152x864x16 C0000000 XGA 4:3
0156 1152x864x32 C0000000 XGA 4:3
0163 1280x960x8 C0000000 VGA 4:3
0165 1280x960x16 C0000000 VGA 4:3
0166 1280x960x32 C0000000 QVGA VGA 4:3
0121 640x480x32 C0000000 VGA 4:3
0122 800x600x32 C0000000 SVGA 4:3
0123 1024x768x32 C0000000 XGA 4:3
0124 1280x1024x32 C0000000 SXGA 5:4
0143 1400x1050x8 C0000000 SXGA+ 4:3
0145 1400x1050x16 C0000000 SXGA+ 4:3
0146 1400x1050x32 C0000000 SXGA+ 4:3
0173 1600x1200x8 C0000000 UXGA 4:3
0175 1600x1200x16 C0000000 UXGA 4:3
0176 1600x1200x32 C0000000 UXGA 4:3
0183 1792x1344x8 C0000000
0185 1792x1344x16 C0000000
0186 1792x1344x32 C0000000
01D3 1856x1392x8 C0000000
01D5 1856x1392x16 C0000000
01D6 1856x1392x32 C0000000
01E3 1920x1440x8 C0000000 4:3
01E5 1920x1440x16 C0000000 4:3
01E6 1920x1440x32 C0000000 4:3
01D1 1920x1200x8 C0000000 WUXGA 16:10
01D2 1920x1200x16 C0000000 WUXGA 16:10
01D4 1920x1200x32 C0000000 WUXGA 16:10
-------------------------------------
VBE Modelist Colorfull Geforce GTX295
-------------------------------------
mode
number xres yres bpp
0100 640x480x8 VGA 4:3
0101 640x480x8 VGA 4:3
0102 800x600x4 SVGA 4:3
0103 800x600x8 SVGA 4:3
0104 1024x768x4 XGA 4:3
0105 1024x768x8 XGA 4:3
0106 1280x1024x4 SXGA 5:4
0107 1280x1024x8 SXGA 5:4
010E 320x200x16 CGA 4:3
010F 320x200x32 CGA 4:3
0111 640x480x16 VGA 4:3
0112 640x480x32 VGA 4:3
0114 800x600x16 SVGA 4:3
0115 800x600x32 SVGA 4:3
0117 1024x768x16 XGA 4:3
0118 1024x768x32 XGA 4:3
011A 1280x1024x16 SXGA 5:4
011B 1280x1024x32 SXGA 5:4
0130 320x200x8 CGA 4:3
0131 320x400x8
0132 320x400x16
0133 320x400x32
0134 320x240x8 QVGA 4:3
0135 320x240x16 QVGA 4:3
0136 320x240x32 QVGA 4:3
013D 640x400x16
013E 640x400x32
0145 1600x1200x8 UXGA 4:3
0146 1600x1200x16 UXGA 4:3
014A 1600x1200x32 UXGA 4:3
0160 1280x800x8 WXGA 16:10
0161 1280x800x32 WXGA 16:10
0162 768x480x8
017B 1280x720x32
017C 1920x1200x8 WUXGA 16:10
017D 1920x1200x32 WUXGA 16:10
如果您使用 VBE,您应该熟悉模式列表功能4F00
和4F01
. 如果您的 BIOS 提供,请使用这些来找到合适的自定义模式。否则,您可能会尝试使用更高分辨率的模式传入限制垂直大小的覆盖 CRTC 参数。但是,不能保证这会奏效。