如何在屏幕上放置一个像素?

时间:2017-05-06 17:21:38

标签: assembly x86 graphic osdev protected-mode

我正在寻找有关如何在我自己的操作系统中将像素插入屏幕的信息。 我关心1920x1080,16K色的分辨率,并且没有bios中断。 理想情况下,分辨率和颜色数量取决于我的系统

我写了bootloader和程序在屏幕上绘制像素,但它的分辨率只有320x200,有256种颜色; / 当我尝试使用文本模式时,它在VM上运行,但是当我在真实设备上启动它时我只有黑屏,所以我不想使用bios中断(它取决于bios版本)

1 个答案:

答案 0 :(得分:1)

  1. 当仍处于实模式时,扫描所有可用的VESA视频模式。
  2. 选择感兴趣的模式
  3. 选择它并使用中断
  4. 切换到它
  5. 保存所有必需的数据 - 帧缓冲,宽度,高度,每像素位数,间距等,然后输入实模式
  6. 将像素写入精确的存储地址:
    像素偏移:帧缓冲地址+ pixelPosX * BitsPerPixel + PixelPosY * ScrWidth * BitsPerPixel
    计算出来后,只需使用:
  7.   

    mov [address],0x00ff00ff; [00] [红色] [绿色] [蓝色]

    我的示例将像素设置为粉红色(最大红色和蓝色)


    顺便说一句,这可能会有所帮助:http://forum.osdev.org/viewtopic.php?f=2&t=30186
    而且,你必须使用中断。如果它没有在真正的PC上运行,你在引导程序中丢失了一些东西。尝试使用Bochs运行您的操作系统,如果它在Bochs上运行,它可能会在Real PC上运行。 Qemu或VirtualBox可能会使不应该工作的东西发挥作用
    您可以发布您的引导加载程序代码,以便我们可以弄清楚您的中断有什么问题