更改VESA BasePtr以在x86_64 asm中实现双缓冲?

时间:2016-01-21 11:20:39

标签: assembly graphics nasm x86-64 vesa

我希望通过为VESA视频内存实现更好的双缓冲来提高图形代码的性能。

背景:

我在 x86_64,nasm 中写了一个简单的生命游戏实现。它在QEMU中启动,切换到64位并从一些伪随机初始状态运行游戏。

我正在使用内存缓冲区来存储“下一个”状态,并在每个tick的结尾处将整个缓冲区复制到视频mem位置,然后将其清零。在我目前的情况下,每个滴答上交换/更改的数据几乎是2MiB,可能是不必要的。这种方法在320x200x8bpp下运行良好,但现在在VESA 640x480x24bpp中它太慢了。

我确信有更好的方法可以做到这一点,我的第一个想法就是交换缓冲区的内存地址。我找了一种方法来做但却找不到编程参数的任何东西。我可以获得VESA模式信息等,但是有没有办法设置一些值?

或许我做错了,还有更好的/其他方法吗?

一些注意事项:

  • 64位长模式,无BIOS中断
  • 我正在写一个连续的视频mem映射到RAM位置@ VBEModeInfo.VidMemBasePtr

0 个答案:

没有答案