在 640x480 16 色 VGA 模式下绘制像素时出现问题

Trouble drawing pixels in 640x480 16-color VGA mode

我正在尝试在 C 中的 VGA 视频模式 12 中绘制一个红色像素。我编写的代码在视频模式 13(200p 256 色)中按预期工作。

volatile char *video = (volatile char*) 0xA0000;
*video = 4;

在视频模式 13 中,屏幕上绘制了一个红色像素。这就是我想要在视频模式 12 中发生的情况。当此代码与视频模式 12 一起使用时,显示的似乎是发送字节中的位表示(即字节 00011000 被复制,三个黑色像素,两个白色像素像素,并显示三个黑色像素。

16色模式为planar,即一个字节为八个像素,会设置像素的具体位。在端口 0x3c4 索引 2 中有一个掩码寄存器,您可以在其中设置写入内存时要设置的平面。它比使用逐像素模式复杂得多。

您可以获得有关平面写入启用寄存器和不同图形模式的更多信息,例如 OSDev Wiki