【问题标题】:BIOS interrupt _int86BIOS 中断 _int86
【发布时间】:2015-04-07 22:52:40
【问题描述】:

我正在尝试“3d 游戏编程的黑色艺术”一书中的一些旧代码。我知道它已经过时了,但我开始阅读它,它有点有趣和有趣。我下载了 OpenWatcom C 编译器并创建了一个新的 DOS 项目,以便对这些旧代码进行编译。我已经编译了一段代码,其中设置了 Videomode int13h,然后我能够在屏幕上绘制像素。但这是通过一个名为 _setvideomode() 的 C 函数完成的。在下面的示例中,视频模式是通过 _int86 函数设置的,该函数进行中断调用,原型应该在 bios.h 中,但 OpenWatcom 说:没有找到函数 _int86 的原型。我现在卡住了,不知道该怎么办;)这是代码:

void setGraphxMode(int mode){
    union REGS inregs,outregs;

    inregs.h.ah = 0;
    inregs.h.al = (unsigned char)mode;

    _int86(0x10,&inregs,&outregs);
}

int main(){

    return 0;
}

不胜感激任何建议,是的,我知道:这些天图形是通过 DirectX 或 OpenGL 完成的。这只是为了学习目的!谢谢你:)

【问题讨论】:

  • 我个人还是直接用汇编写了很多图形代码。当我教汇编课程时,我实际上是从教人们如何编写引导加载程序开始,让某些东西运行,然后立即开始处理屏幕和内存管理以进入保护模式。弄清楚如何自己做事情真的很有用,这样您就可以更好地从图形库中了解您需要什么。
  • 不错!我希望我们的教授能做到这一点,而不是让 Java 变得无聊……;)现在我必须自己深入研究这些材料。甚至不知道您可以在保护模式下执行此操作(我的意思是图形)。我也想做你在课堂上描述你所做的事情;)你有这方面的材料吗? @DavidHoelzer
  • 我写了一本书,它的组装量刚好够危险。我还没有完全发布。至于受保护模式下的图形,解决此问题的最简单方法是使用显卡的视频模式,将整个屏幕内存映射到平坦内存区域。 SVGA 扩展真的是一团糟,而且没有任何标准,因此尝试手动完成它需要对每张特定卡的文档进行大量研究。使用映射内存模式并创建指向它的选择器要容易得多。
  • 所以可以将RAM的一部分定义为屏幕内存并将数据写入其中,然后视频卡将使用这些数据绘制到屏幕上?那么这在windows或linux下是否可行? @DavidHoelzer
  • 更准确地说,可以选择一种屏幕模式,将显示内存映射到 RAM,然后定义一个选择器,以便您可以直接访问该区域。

标签: c interrupt bios


【解决方案1】:

在 OpenWatcom 下,您正在寻找的调用是 int386 我相信:

int386(0x10, &inregs, &outregs);

【讨论】:

  • 是的!有用!谢谢 :) 我通过内联汇编进行中断的解决方法:int 10h。那完成了工作......但很高兴知道:)
猜你喜欢
  • 2012-03-24
  • 1970-01-01
  • 2019-09-25
  • 2014-12-14
  • 2014-04-17
  • 2011-03-08
  • 2014-10-29
  • 2014-11-11
  • 2014-07-23
相关资源
最近更新 更多