0

我注意到使用 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

在 TurboC++ for DOS 中执行此操作的代码是:

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, &regs, &regs, &sregs);
modes = *(word far**)(buffer + 14);
printf("Modes: ");
for(mptr = modes; *mptr != -1; mptr++){
    printf("%02x, ", *mptr);
}
printf("\n");

基本上,我不明白这些模式中有很多是什么。其中一些,例如高达 117,我可以找到文档,但对于其中的很多,例如 150 和超过 200 的所有内容,我找不到任何关于这些模式实际是什么的迹象。谁能帮我解决这个问题?

4

1 回答 1

0

取自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 卡不同,标准 VGA/VESA 卡无需任何驱动程序即可本地运行(除非您想要像 UNIVBE 这样的 VBE 扩展)。

于 2020-05-02T09:24:24.427 回答