简单的VGA字符模式驱动(一)

本文介绍了在保护模式下,由于无法使用BIOS中断例程,需要自行编写VGA字符模式驱动来显示字符。文中详细讲解了VGA接口的设计,包括在屏幕上显示字符和设置光标的函数,并给出了在显存中操作字符的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进入保护模式后,我们就彻底与BIOS例程说再见了。BIOS下的几乎所有中断例程都是实模式的代码。int 10h 的显示功能自然也是如此。 如今我们已经处于保护模式,因此为了在屏幕上显示东西,我们只有自己通过直接访问硬件来实现了。幸好,作为第一个必须实现的驱动,字符模式下的显卡驱动并不是太复杂。

 

历史上显卡的标准有许多个,从最早的CGA到现在的VESA都曾经占有过市场。幸好,如今的显卡全部支持VGA标准。并且系统启动后,BIOS就将显卡初始化到了VGA的字符模式。因此,在这里,我们只需要处理VGA这个标准就足够了。

 

 

为了在屏幕上显示字符,我们只需要实现两个功能。第一,在屏幕上某个位置显示字符。第二,把光标设置到屏幕上的某个特定的位置。因此,我们可以这样定义我们的VGA接口

 

在这个接口中有两个方法,分别是在屏幕上光标位置处写一个字符和设置光标位置。我们先来看如何在屏幕上某个位置显示一个字符。

 

在标准VGA的字符模式下,显卡上的显存被映射到从0xB8000处开始的内存地址空间上,每两个字节代表屏幕上一个字符。由于标准的屏幕有25行,每行80列总共2000个字符,因此从0xB8000处开始的4000个字节就对应整个屏幕。为了访问显存,在VGA类中需要增加一个成员指针:

 

unsigned char * m_VideoBuffer;

 

同时在VGA的构造函数中,这个指针将被初始化为0xB8000:

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值