我注意到使用 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, ®s, ®s, &sregs);
modes = *(word far**)(buffer + 14);
printf("Modes: ");
for(mptr = modes; *mptr != -1; mptr++){
printf("%02x, ", *mptr);
}
printf("\n");
基本上,我不明白这些模式中有很多是什么。其中一些,例如高达 117,我可以找到文档,但对于其中的很多,例如 150 和超过 200 的所有内容,我找不到任何关于这些模式实际是什么的迹象。谁能帮我解决这个问题?