Turbo C 中的 SVGA 编程

SVGA Programming in Turbo C

我想用 Turbo C++ 进行 1024*768 编程 我正在使用 Turbo C 3.0,我正在使用旧的 VGA 方法调用图形 <code>initgraph( &GraphDriver, &GraphMode, "..\bgi" );

我想要一个可以轻松处理 SVGA 模式和 真彩色

有多家 SVGA 卡芯片制造商,对它们进行编程可能需要针对每个芯片制造商提供特定代码(除非您的显卡支持 VESA,请参见下文)。我很久以前(90 年代)就这样做了,我使用 POVRAY(一种光线追踪器)的来源作为参考。

幸运的是,POVRAY 今天仍然存在:http://www.povray.org/

您需要在此处获取 http://www.povray.org/ftp/pub/povray/Old-Versions/ 1990 年代旧版本的源代码,该版本仍然具有 SVGA 的例程(作者可能在最新版本中删除了它们!)。您会在源代码中找到一堆内联汇编函数来初始化图形模式并为各种图形设置像素 boards/manufacturers(S3、ET4000、...)。先解压POVSRC.ZIP,然后MACHINE.ZIP,然后IBMPC.ZIP(在IBM.C)。

代码有点深奥:这是因为最初 IBM PC 的视频内存不超过 64Kb(在 A000:0000 段)。为了获得更高的分辨率,有一种称为 "bank switching" 的技术,它允许更改映射到 A000:0000.

的视频 RAM 中的 "window"

如果你的 SVGA 板支持 VESA 标准(大多数都是这种情况),那么事情可能会更容易,有一个标准中断用于更改图形模式和进行库切换(所以你可能只需要在 POVRAY 中找到 "set graphic mode" 和 "set pixel").

的 VESA 实现

最后,我提到了 djgpp(MSDOS 的 g++ 端口),它有一个 32 位 DOS 扩展器和一个图形库 (grx),它以巧妙的方式使用虚拟内存来模拟连续的图形内存(它创建虚拟地址视频 RAM 并使用页面错误中断自动触发银行切换)。我用它在 33Mhz 486 上进行 3D 图形编程。

编辑: 挖了一下之后,我发现有例程的最新版本是这里的那个: http://www.povray.org/ftp/pub/povray/Old-Versions/Official-3.1g/MS-Dos/

解压povmsd_s.zip

例程在SOURCE/MSDOS/VESAVBE.{H,C}(如果你的卡支持VESA规范,可以使用)。其他卡在SOURCE/MSDOS/MSDOSVID.C

有套路