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

来源:互联网 发布:八爪鱼 网站 数据采集 编辑:程序博客网 时间:2024/05/16 12:53

进入保护模式后,我们就彻底与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:

 

m_VideoBuffer = (unsigned char *)0x000B8000L;

 

在表示字符的这2个字节中,第一个字节就是显示字符的ASCII码,而第二个字节则是该字符的颜色。由于一般屏幕上的颜色都是黑底白字,我们也不打算改变该颜色,所以我们将不会去访问这个字节。

 

下面的代码可以在光标处写入字符同时处理一些特殊的控制字符比如回车换行等等。

 

 

今天就先写到这里,下回继续介绍设置光标的位置

原创粉丝点击