[MIT6.828] LAB1中VBE图形界面测试总结

这篇博客介绍了在MIT6.828课程实验中,作者挑战VESA图形模式编程的过程。通过开启VBE模式,实现在保护模式下控制图形界面,涉及VBE的基本概念、实模式到保护模式的转换,以及相关代码实现。作者在QEMU中遇到兼容性问题,并给出解决方案,最后展示了简单的图形测试效果。
摘要由CSDN通过智能技术生成

看到红色的Challenge就想挑战一把,于是搞了下VESA图形模式的编程。

科普知识:

什么是VBE?
VBE的全称是VESA BIOS Extension。

什么是VESA?
VESA的全称是Video Electronics Standards Association即视频电子标准协会,是由代表来自世界各地的、享有投票权利的超过165家成员公司的董事会领导的非盈利国际组织。
VESA致力于开发、制订和促进个人计算机(PC)、工作站以及消费类电子产品的视频接口标准,为显示及显示接口业界提供及时、开放的标准,保证其通用性并鼓励创新和市场发展。
其余更多信息,也有设计到本文内容理解方面的,详见文末参考资料。

既然是BIOS的扩展,那么最方便的还是在实模式下操作,但是我们实模式的代码只有很小一部分,写多了会超过引导区512字节限制,而且实模式下操作范围实现有限,所以要想办法处理。
解决方法有两种:
1、参考VESA开发手册提供的操作步骤,可以指导我们在保护模式下进行对其进行BIOS调用,但是步骤比较繁琐。
2、在实模式下开启图形功能后,把显存地址保存下来,然后在保护模式下操作这个地址从而达到对图形界面进行控制的目的,缺点是不能使用VBE内置的功能调用。

为了方便试验我选择了第二种方法,步骤如下:
1、开启A20地址线(LAB1已有代码)
2、加载GDT(已有代码)
3、获取VBE模式(新增代码)
4、设置VBE模式(新增代码)
5、开启保护模式(已有代码)
6、保护模式下的图形处理(新增代码)
注意,由于qemu的默认显卡bois不支持vesa模式,所以要在GNUmakefile中给QEMUOPTS变量添加额外参数 -vga std 即可。
涉及到代码文件boot/boot.S
在步骤2和步骤5所涉及到的代码中间加入如下代码

在16位代码区域末端加入如下代码,这里使用了0x4144模式代表了1024*768*32bpp,每32位一个像素点,一个1024*768个像素,三个数乘起来就是可视显存大小。其中videop videox videoy 分别代表显存起始地址,x分辨率,y分辨率,是在代码文件末尾定义的三个变量,在从boot到kernel跳转的过程中可以把这几个变量值押送过去,或者把这几个变量放到指定位置供保护模式下使用,不过我比较懒没有传递这个值,而是直接写到kernel代码中了:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值