如何使用C通过视频存储器绘制像素?

时间:2019-05-09 19:28:28

标签: c pixel vga

问题:
我已经按照https://wiki.osdev.org/Drawing_In_Protected_Mode的教程进行操作,并遇到了使用给定函数绘制像素的问题。

我做了什么:
1.使用引导加载器中的 BIOS 中断将视频模式从http://www.columbia.edu/~em36/wpdos/videomodes.txt表更改为113h(VBE);
2.使用给定的功能访问视频内存

/* only valid for 800x600x32bpp */
static void putpixel(unsigned char* screen, int x,int y, int color) {
    unsigned where = x*4 + y*3200;
    screen[where] = color & 255;              // BLUE
    screen[where + 1] = (color >> 8) & 255;   // GREEN
    screen[where + 2] = (color >> 16) & 255;  // RED
}

摘自文章,视频存储在宏中

#define VGA 0xA0000   
  1. 并尝试如下调用
putpixel(VGA, 10, 10, 3);
  1. 通过使用循环尝试显示更多像素来确保不是由于像素太小

结果:
预期:QEMU中屏幕上的一个像素
实际:没什么

1 个答案:

答案 0 :(得分:1)

您的像素接近黑色,颜色为<0、0、3>。您可以尝试将其称为

putpixel(VGA, 10, 10, 0x00FFFFFF); 

那会在屏幕上放置一个漂亮的白色像素。