2013-03-22 30 views
0

我目前正在学习Windows 7上的汇编程序,并且我想制作一个游戏(仅供教育用途)。我发现了一个关于如何在DOS上使用模式13h在程序集中编程VGA的资源。这让我想到:有没有一种方法直接编程在Windows 7中的图形卡,而不使用高级图形库?如果这不是一个选项,你可以用程序集中的图形库编写图形程序吗?win32程序集编程图形卡

由于提前,

RileyH

+1

您可以使用[DOSBOX](http://www.dosbox.com/)在Windows中运行DOS程序。你也可以在程序集中编写Windows GUI程序。 GunnerInc撰写了关于如何在汇编中编写GUI程序的教程:[NASM - 使用GTK的Linux/Windows Cross OS应用程序](http://www.dreamincode.net/forums/topic/292403-nasm-cross-os-应用换linuxwindows-使用-GTK /)。 – nrz 2013-03-22 10:18:09

回答

0

如果您不想要高级图形库,请将自己限制为低级别的内容,如SetPixel();这几乎是int 13H提供的服务级别。不,不可能使用int 13H或直接在Windows中使用硬件。不管怎样,你不需要VGA模式 - 这对于每一个明智的现代显卡来说都是一个巨大的降低能力。

你可以用程序集写所有你想要的东西,但它会毫无意义;调用堆栈的顶部通常不是瓶颈所在。至少不适用于2D游戏。

因此学习GDI和/或DirectX。除非你知道你绝对必须,否则不要使用组装。大会不适合教育项目。

+1

当你说“大会不适合教育项目”时,我完全不同意。学习大会教授了很多关于计算机如何在硬件级别工作的知识,并且使用Assembly进行实验可以让您以您(一般)可以理解的方式掌握主题。 – SirPython 2015-02-19 02:44:30

0

由于Windows在保护模式下运行时,你无法直接从用户模式访问硬件资源。所有HW资源(包括图形卡)只能从内核模式模块(即驱动程序)访问。如果您需要从用户模式访问,则需要解决卡的驱动程序以执行请求的操作。它的接口不仅仅是发送想要使用的汇编命令,而是定义了一组暴露的函数。高级图形库可能会隐藏需要知道这个接口及其用法。寻址图形库完全取决于特定的库定义和(再次)暴露的接口。基本上,它应该可以用任何语言来解决,包括汇编。

+0

你能推荐我应该使用的任何特定的图形库吗? – Progrmr 2013-03-22 10:31:51

0

正如你提到的模式13h,我假设你想做2D游戏。您可以自己处理屏幕缓冲区,以您选择的任何格式(256色RGB,palettized,24位ARGB等),然后通过更高级别的库(如libSDL)“渲染”它,或者甚至可以在Windows本身中使用GDI。直接打开显卡不是我推荐的(非常复杂)

+0

但它实际上可能吗?也就是说,我可以用Windows 7上的DOS VGA来做同样的事情吗? – Progrmr 2013-03-22 10:30:32

+0

不适用于今天的卡片,不会。就像icepack上面说的那样,HW资源是受保护的。你可以从组装中打出驱动程序,虽然我没有看到任何一点。 - 但是,我想你可以运行一个DOS/286模拟器来模拟昔日的环境,并在那里进行组装?看到[DOSBox](http://www.dosbox.com) – vidario 2013-03-22 11:06:23