我注意到在使用VGA/VESA编程的DOSBox中出现了一些非常奇怪的问题。
运行VESA BIOS功能01h,然后将偏移量为14的值指向的列表条目打印到缓冲区中,直到达到-1为止,打印以下条目:
Modes: 100, 101, 102, 103, 104, 105, 106, 107, 10d, 10e, 10f, 110, 111, 112, 113, 114, 115, 116, 117, 150,
151, 152, 153, 160, 161, 162, 165, 170, 171, 172, 175, 190, 191, 192, 207, 209, 20a, 213, 222, 223, 224, 225
在DOS的TurboC++中,这样做的代码是:
union REGS regs;
struct SREGS sregs;
byte buffer[1024];
word far *modes, far *mptr;
regs.x.ax = 0x4f00;
sregs.es = FP_SEG(buffer);
regs.x.di = FP_OFF(buffer);
int86x(0x10, ®s, ®s, &sregs);
modes = *(word far**)(buffer + 14);
printf("Modes: ");
for(mptr = modes; *mptr != -1; mptr++){
printf("%02x, ", *mptr);
}
printf("n");
基本上,我不明白的是很多模式是什么。其中一些,例如高达117,我可以找到它们的文档,但对于其中许多,比如150和200之后的所有模式,我找不到任何关于这些模式实际是什么的指示。有人能帮我弄清楚吗?
从VGA/VESA视频模式拍摄:
Values for S3 OEM video mode:[18]
201h 640x480x256
202h 800x600x16
203h 800x600x256
204h 1024x768x16
205h 1024x768x256
206h 1280x960x16
207h 1152x864x256 (Diamond Stealth 64)
208h 1280x1024x16
209h 1152x864x32K
20Ah 1152x864x64K (Diamond Stealth 64)
20Bh 1152x864x4G
211h 640x480x64K (Diamond Stealth 24)
211h 640x400x4G (Diamond Stealth64 Video / Stealth64 Graphics)
212h 640x480x16M (Diamond Stealth 24)
301h 640x480x32K
看起来它们与S3 gfx卡相关。。。IIRC他们需要在DOS下使用特殊的gfx驱动程序才能工作,而不像标准的VGA/VESA卡那样在本机运行而不需要任何驱动程序(除非你想要像UNIVBE这样的VBE扩展(。