x86汇编程序在VirtualBox(XGA Graphics - VBE)下运行不佳

时间:2012-03-07 04:50:33

标签: graphics assembly x86 virtualization

我试图了解虚拟化如何影响我的x86汇编程序。

通常我启动旧的clunker pentium III并从USB密钥启动DOS。相反,我尝试设置虚拟框,并以这种方式工作。 我的程序似乎运行良好,但颜色似乎都搞砸了。

这是一个在NASM下组装的相当简单的程序,它将视频模式切换为XGA 4105h并绘制一些不同颜色的简单形状。

可以安全地假设问题源于我的机器的ACTUAL视频模式不是真的在XGA模式下运行的事实,所以颜色的位被解释不同吗? (原谅解释中的无知,因为我对ISA级别的虚拟化工作知之甚少)

我如何解决这个问题?我想继续做x86图形编程,但我喜欢能够移动。

编辑:我看到至少在Windows下,当尝试执行16位代码时,Windows在虚拟化环境中运行,不会给程序直接视频卡访问,而是提供对“虚拟卡”的访问“这通常不会超出VGA ......

但是因为我已经处于虚拟环境中,这对此有何影响?我完全吵了吗?

1 个答案:

答案 0 :(得分:1)

4105h是VBE 1 bios和DOSBOX的标准化VBE模式编号。但从VBE 2开始,模式编号不再标准化。使用VBE 2或VBE 3 bios,如果我们不使用DOSBOX,我们必须从卡片BIOS中获取模式数。

为了从VBE 2或VBE 3 bios获取这些模式编号,我们必须使用VBE函数4F00来获取512字节缓冲区中的VBE SVGA信息。在这个缓冲区内+ 0Eh,我们可以找到模型师的地址(OFFSET,SEGMENT),通过这个地址,我们可以得到模式编号。模型师的结尾是0FFFF。

此外,如果我们使用DOSBOX,每个模式编号,我们可以在另一个256字节的缓冲区中使用VBE函数4F01h获取模式特定信息。现在我们可以检查模式属性,分辨率,每个像素的字节数,每个扫描线的字节数,fild位置以及红色,绿色和蓝色的掩模大小以及其他标准,如果它们符合我们要求的要求

德克