【问题标题】:VESA via IO/Port通过 IO/端口的 VESA
【发布时间】:2014-01-08 03:47:24
【问题描述】:

如何通过 x86 CPU 的 IO/端口访问 vesa 模式? 我已经尝试过仅适用于博世的代码

private static void SetVideoMode(ushort width, ushort height, ushort depth)
{    
    WriteCommand(0x4, 0x00);
    WriteCommand(0x1, width);
    WriteCommand(0x2, height);
    WriteCommand(0x3, depth); 
    WriteCommand(0x4, 0x1 | 0x40 );
    PortIO.Outb(0x3c0, 0x20);
}

【问题讨论】:

  • 语言,缺少平台.. 有什么标签知道你在说什么吗?
  • 您需要在问题中包含WriteCommand 的定义,否则我们不知道您的代码在做什么。

标签: io x86 vbe vesa


【解决方案1】:

你不能。 VESA (VBE) 是一个标准的 BIOS 驱动程序框架,它为不同的显卡提供单一接口。

要直接查看 I/O 端口或内存映射寄存器,您要么需要将自己限制在基本的 VGA 模式和功能,要么需要了解特定视频卡的确切细节。

当然,这就是 VBE 最初旨在解决的问题。

【讨论】:

  • 没错,我是 Atom OS (www.atomos.tk) 的开发人员,我们正在使用 c# 中的自己的编译器在 c# 中制作操作系统,我想实现 VESA/VBE 我该怎么做?
  • 您将需要一个 thunking 机制来调用 16 位实模式函数,在这种情况下是 BIOS 中断。您还需要以某种方式将生成的物理内存映射到您的地址空间。看看基本的备用磁盘 I/O 和 VGA 图形驱动程序是如何实现的,VBE 应该是类似的
  • 我不明白你到底想说什么...你能帮我实现吗?在我们的编译器上...我会非常感谢 :D
  • x86 处理器自 70 年代以来就已经存在,此时系统编程是兼容层的(腐烂的)洋葱。您不能从 1985 年引入的普通 32 位保护模式调用 VBE 函数,而必须将处理器切换到 16 位虚拟 8086 模式。为此,您需要在全局描述符表中设置调用门到调用 VBE 中断的 16 位蹦床函数,注意从选择器的低 16 位调用,等等。这一切都涵盖了英特尔架构手册第 3 卷中的详细信息
  • 换句话说,与处理低级虚拟内存管理和引导代码的人交谈。他们应该能够帮助您进行 VBE 调用并将帧缓冲区映射回
猜你喜欢
  • 1970-01-01
  • 2017-07-06
  • 2014-02-08
  • 2021-08-05
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 2019-10-03
相关资源
最近更新 更多